summary refs log tree commit diff
diff options
context:
space:
mode:
authorlogin2023-07-23 11:30:29 +0000
committerlogin2023-07-23 11:30:29 +0000
commiteb23c73f2a9e96cefc485b122b94491ee109120a (patch)
treef4d78daceabb8851c7de8f2eb1dd303e4b41b6b4
parent77683383eb76230566a43118407cbafc29861d54 (diff)
Added the paramters TCOIN_ERR_CONTACT_EMAIL and TCOIN_PASS_RESET_CONTACT_EMAIL to tilde.guru and tilde.institute's ntcoin initialisation scripts
-rwxr-xr-xntcoin_freebsd_tildeguru278
-rwxr-xr-xntcoin_openbsd_tildeinstitute276
2 files changed, 554 insertions, 0 deletions
diff --git a/ntcoin_freebsd_tildeguru b/ntcoin_freebsd_tildeguru
index cd2020d..285203a 100755
--- a/ntcoin_freebsd_tildeguru
+++ b/ntcoin_freebsd_tildeguru
@@ -0,0 +1,278 @@
+#!/usr/local/bin/bash
+
+if [ "$#" -eq 0 ] || [ "$1" = "--help" ] || [ "$1" = "-h" ]
+then
+  /bin/echo "Usage:"
+  /bin/echo "  ntcoin <path (no slash)> <bin path (no slash)> <n> <host name>: to create the tcoin directory in <path (no slash)> with the executable saved to <bin path (no slash)> and with <n> basecoins per user with the help showing the host name <host name>"
+  /bin/echo "  ntcoin <path (no slash)> <bin path (no slash)> <host name> --def | -d: to print only the #define preprocessor directives without creating any directories"
+  /bin/echo "  ntcoin [ --help | -h ] : to print this help"
+elif [ "$4" = "--def" ] || [ "$4" = "-d" ]
+then
+  /bin/echo "Printing tcoin.cpp (and pcoin.cpp) preprocessor directives."
+  /bin/echo 'Paste the following in '`/bin/realpath -q $1`'/tcoin/bin/tcoin_defs.cpp (and '`/bin/realpath -q $1`'/tcoin/bin/pcoin_defs.cpp):
+'
+  /bin/echo '#define TCOIN_PATH "'`/bin/realpath -q $1`'/tcoin"
+#define TCOIN_MSG_PATH "'`/bin/realpath -q $1`'/tcoin/messages/"
+#define TCOIN_SALT_PATH "'`/bin/realpath -q $1`'/tcoin/salts/"
+#define TCOIN_PASS_PATH "'`/bin/realpath -q $1`'/tcoin/passwords/"
+#define TCOIN_PROG_ACT_PATH "'`/bin/realpath -q $1`'/tcoin/program_accounting/"
+#define PROG_ACT_W_SLASH "program_accounting/"
+#define LS_PATH "/bin/ls"
+#define PCOIN_NEW_KEY_CMD "/bin/cat /dev/urandom | /usr/bin/b64encode -r . | /usr/bin/head -c 64 | /usr/bin/tr '+' '-' | /usr/bin/tr '/' '_'"
+#define PIPED_WORD_COUNT_CMD " | /usr/bin/wc -c"
+#define PCOIN_KEY_PATH "'`/bin/realpath -q $1`'/tcoin/secrets/pcoin_keys"
+#define PCOIN_KEY_PATH_W_SLASH "'`/bin/realpath -q $1`'/tcoin/secrets/pcoin_keys/"
+#define TCOIN_CODEZ_PATH "'`/bin/realpath -q $1`'/tcoin/secrets/tcoin_codez"
+#define TCOIN_BIN_PATH_W_SPACE "'`/bin/realpath -q $2`'/tcoin "
+#define TCOIN_PATH_W_SLASH "'`/bin/realpath -q $1`'/tcoin/"
+#define TCOIN_SCRYPT_PATH "'`/bin/realpath -q $1`'/tcoin/bin/scrypt"
+#define PCOIN_BIN_PATH "'`/bin/realpath -q $2`'/pcoin"
+#define PCOIN_BIN_PATH_W_SPACE "'`/bin/realpath -q $2`'/pcoin "
+#define TCOIN_HOST_NAME "'$3'"
+#define TCOIN_ERR_CONTACT_EMAIL "login@tilde.town (town-only) or login@tilde.team (internet-wide)"                   )
+#define TCOIN_PASS_RESET_CONTACT_EMAIL "`login@tilde.town` (tilde.town local email) or `login@tilde.team` (internet-wide email), or `/query login` on IRC"
+#define KROWBAR_OFF
+#define DA_OFF
+#define MINERCOIN_OFF
+#define TILDEGURU'
+else
+  #see https://stackoverflow.com/a/3951175
+  case $3 in
+    ''|*[!0-9]*) /bin/echo "Sorry, the number of basecoins <n> should be a positive integer."; exit 1 ;;
+    *) ;;
+  esac
+  if [ "$#" -ne 4 ]
+  then
+    /bin/echo "Sorry, the number of arguments must be exactly 4."
+    exit 1
+  fi
+  if [ -d "`/bin/realpath -q $1`/tcoin" ]
+  then
+    /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/bin/realpath -q $1`/tcoin"
+    /bin/chmod 700 "`/bin/realpath -q $1`/tcoin"
+    /bin/chmod u+s "`/bin/realpath -q $1`/tcoin"
+  fi
+  if [ -d "`/bin/realpath -q $1`/tcoin/salts" ]
+  then
+    /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/salts' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/bin/realpath -q $1`/tcoin/salts"
+    /bin/chmod 700 "`/bin/realpath -q $1`/tcoin/salts"
+    /bin/chmod u+s "`/bin/realpath -q $1`/tcoin/salts"
+  fi
+  if [ -d "`/bin/realpath -q $1`/tcoin/passwords" ]
+  then
+    /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/passwords' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/bin/realpath -q $1`/tcoin/passwords"
+    /bin/chmod 700 "`/bin/realpath -q $1`/tcoin/passwords"
+    /bin/chmod u+s "`/bin/realpath -q $1`/tcoin/passwords"
+  fi
+  if [ -d "`/bin/realpath -q $1`/tcoin/program_accounting" ]
+  then
+    /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/program_accounting' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/bin/realpath -q $1`/tcoin/program_accounting"
+    /bin/chmod 700 "`/bin/realpath -q $1`/tcoin/program_accounting"
+    /bin/chmod u+s "`/bin/realpath -q $1`/tcoin/program_accounting"
+  fi
+  if [ -d "`/bin/realpath -q $1`/tcoin/messages" ]
+  then
+    /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/messages' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/bin/realpath -q $1`/tcoin/messages"
+    /bin/chmod 700 "`/bin/realpath -q $1`/tcoin/messages"
+    /bin/chmod u+s "`/bin/realpath -q $1`/tcoin/messages"
+  fi
+  if [ -d "`/bin/realpath -q $1`/tcoin/base" ]
+  then
+    /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/base' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/bin/realpath -q $1`/tcoin/base"
+    /bin/chmod 700 "`/bin/realpath -q $1`/tcoin/base"
+    /bin/chmod u+s "`/bin/realpath -q $1`/tcoin/base"
+    if [ -e "`/bin/realpath -q $1`/tcoin/base/base.txt" ]
+    then
+      /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/base/base.txt' already exists."
+      exit 1
+    else
+      /bin/echo "$3""00" > "`/bin/realpath -q $1`/tcoin/base/base.txt"
+      /bin/chmod 600 "`/bin/realpath -q $1`/tcoin/base/base.txt"
+    fi
+  fi
+  if [ -d "`/bin/realpath -q $1`/tcoin/secrets" ]
+  then
+    /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/secrets' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/bin/realpath -q $1`/tcoin/secrets"
+    /bin/chmod 700 "`/bin/realpath -q $1`/tcoin/secrets"
+    /bin/chmod u+s "`/bin/realpath -q $1`/tcoin/secrets"
+    if [ -d "`/bin/realpath -q $1`/tcoin/secrets/pcoin_keys" ]
+    then
+      /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/secrets/pcoin_keys' already exists."
+      exit 1
+    else
+      /bin/mkdir "`/bin/realpath -q $1`/tcoin/secrets/pcoin_keys"
+      /bin/chmod 700 "`/bin/realpath -q $1`/tcoin/secrets/pcoin_keys"
+      /bin/chmod u+s "`/bin/realpath -q $1`/tcoin/secrets/pcoin_keys"
+    fi
+    if [ -e "`/bin/realpath -q $1`/tcoin/secrets/tcoin_codez" ]
+    then
+      /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/secrets/tcoin_codez' already exists."
+      exit 1
+    else
+      /bin/echo "`cat /dev/urandom | b64encode -r . | head -c 512 | tr -d '\n' | tr '+' '-' | tr '/' '_'` `cat /dev/urandom | b64encode -r . | head -c 512 | tr -d '\n' | tr '+' '-' | tr '/' '_'` `cat /dev/urandom | b64encode -r . | head -c 512 | tr -d '\n' | tr '+' '-' | tr '/' '_'`" > "`/bin/realpath -q $1`/tcoin/secrets/tcoin_codez"
+      /bin/chmod 400 "`/bin/realpath -q $1`/tcoin/secrets/tcoin_codez"
+    fi
+  fi
+    if [ -d "`/bin/realpath -q $1`/tcoin/bin" ]
+  then
+    /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/bin' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/bin/realpath -q $1`/tcoin/bin"
+    /bin/chmod 700 "`/bin/realpath -q $1`/tcoin/bin"
+    /bin/chmod u+s "`/bin/realpath -q $1`/tcoin/bin"
+    if [ -e "`/bin/realpath -q $1`/tcoin/bin/scrypt" ]
+    then
+      /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/bin/scrypt' already exists."
+      exit 1
+    else
+      /bin/cp ./scrypt_freebsd "`/bin/realpath -q $1`/tcoin/bin/scrypt"
+      /bin/chmod 500 "`/bin/realpath -q $1`/tcoin/bin/scrypt"
+    fi
+    if [ -e "`/bin/realpath -q $1`/tcoin/bin/popen2.c" ]
+    then
+      /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/bin/popen2.c' already exists."
+      exit 1
+    else
+      /bin/cp ./popen2.c "`/bin/realpath -q $1`/tcoin/bin/popen2.c"
+      /bin/chmod 440 "`/bin/realpath -q $1`/tcoin/bin/popen2.c"
+    fi
+    if [ -e "`/bin/realpath -q $1`/tcoin/bin/popen2.h" ]
+    then
+      /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/bin/popen2.h' already exists."
+      exit 1
+    else
+      /bin/cp ./popen2.h "`/bin/realpath -q $1`/tcoin/bin/popen2.h"
+      /bin/chmod 440 "`/bin/realpath -q $1`/tcoin/bin/popen2.h"
+    fi
+    if [ -e "`/bin/realpath -q $1`/tcoin/bin/tcoin_defs.cpp" ]
+    then
+      /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/bin/tcoin_defs.cpp' already exists."
+      exit 1
+    else
+      /bin/echo '#define TCOIN_PATH "'`/bin/realpath -q $1`'/tcoin"
+#define TCOIN_MSG_PATH "'`/bin/realpath -q $1`'/tcoin/messages/"
+#define TCOIN_SALT_PATH "'`/bin/realpath -q $1`'/tcoin/salts/"
+#define TCOIN_PASS_PATH "'`/bin/realpath -q $1`'/tcoin/passwords/"
+#define TCOIN_PROG_ACT_PATH "'`/bin/realpath -q $1`'/tcoin/program_accounting/"
+#define PROG_ACT_W_SLASH "program_accounting/"
+#define LS_PATH "/bin/ls"
+#define PIPED_WORD_COUNT_CMD " | /usr/bin/wc -c"
+#define PCOIN_KEY_PATH "'`/bin/realpath -q $1`'/tcoin/secrets/pcoin_keys"
+#define PCOIN_KEY_PATH_W_SLASH "'`/bin/realpath -q $1`'/tcoin/secrets/pcoin_keys/"
+#define TCOIN_CODEZ_PATH "'`/bin/realpath -q $1`'/tcoin/secrets/tcoin_codez"
+#define TCOIN_BIN_PATH_W_SPACE "'`/bin/realpath -q $2`'/tcoin "
+#define TCOIN_PATH_W_SLASH "'`/bin/realpath -q $1`'/tcoin/"
+#define TCOIN_SCRYPT_PATH "'`/bin/realpath -q $1`'/tcoin/bin/scrypt"
+#define TCOIN_HOST_NAME "'$4'"
+#define TCOIN_ERR_CONTACT_EMAIL "login@tilde.town (town-only) or login@tilde.team (internet-wide)"                   )
+#define TCOIN_PASS_RESET_CONTACT_EMAIL "`login@tilde.town` (tilde.town local email) or `login@tilde.team` (internet-wide email), or `/query login` on IRC"
+#define KROWBAR_OFF
+#define DA_OFF
+#define MINERCOIN_OFF
+#define TILDEGURU' > "`/bin/realpath -q $1`/tcoin/bin/tcoin_defs.cpp"
+      /bin/chmod 640 "`/bin/realpath -q $1`/tcoin/bin/tcoin_defs.cpp"
+    fi
+    if [ -e "`/bin/realpath -q $1`/tcoin/bin/pcoin_defs.cpp" ]
+    then
+      /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/bin/pcoin_defs.cpp' already exists."
+      exit 1
+    else
+        /bin/echo '#define TCOIN_PATH "'`/bin/realpath -q $1`'/tcoin"
+#define TCOIN_MSG_PATH "'`/bin/realpath -q $1`'/tcoin/messages/"
+#define TCOIN_SALT_PATH "'`/bin/realpath -q $1`'/tcoin/salts/"
+#define TCOIN_PASS_PATH "'`/bin/realpath -q $1`'/tcoin/passwords/"
+#define TCOIN_PROG_ACT_PATH "'`/bin/realpath -q $1`'/tcoin/program_accounting/"
+#define PROG_ACT_W_SLASH "program_accounting/"
+#define LS_PATH "/bin/ls"
+#define PCOIN_NEW_KEY_CMD "/bin/cat /dev/urandom | /usr/bin/b64encode -r . | /usr/bin/head -c 64 | /usr/bin/tr '+' '-' | /usr/bin/tr '/' '_'"
+#define PIPED_WORD_COUNT_CMD " | /usr/bin/wc -c"
+#define PCOIN_KEY_PATH "'`/bin/realpath -q $1`'/tcoin/secrets/pcoin_keys"
+#define PCOIN_KEY_PATH_W_SLASH "'`/bin/realpath -q $1`'/tcoin/secrets/pcoin_keys/"
+#define TCOIN_CODEZ_PATH "'`/bin/realpath -q $1`'/tcoin/secrets/tcoin_codez"
+#define TCOIN_PATH_W_SLASH "'`/bin/realpath -q $1`'/tcoin/"
+#define TCOIN_SCRYPT_PATH "'`/bin/realpath -q $1`'/tcoin/bin/scrypt"
+#define PCOIN_BIN_PATH "'`/bin/realpath -q $2`'/pcoin"
+#define TCOIN_BIN_PATH_W_SPACE "'`/bin/realpath -q $2`'/tcoin "
+#define PCOIN_BIN_PATH_W_SPACE "'`/bin/realpath -q $2`'/pcoin "
+#define TCOIN_ERR_CONTACT_EMAIL "login@tilde.town (town-only) or login@tilde.team (internet-wide)"                   )
+#define TCOIN_PASS_RESET_CONTACT_EMAIL "`login@tilde.town` (tilde.town local email) or `login@tilde.team` (internet-wide email), or `/query login` on IRC"
+#define KROWBAR_OFF
+#define DA_OFF
+#define MINERCOIN_OFF
+#define TILDEGURU' > "`/bin/realpath -q $1`/tcoin/bin/pcoin_defs.cpp"
+      /bin/chmod 640 "`/bin/realpath -q $1`/tcoin/bin/pcoin_defs.cpp"
+    fi
+    if [ -e "`/bin/realpath -q $1`/tcoin/bin/tcoin" ]
+    then
+      /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/bin/tcoin' already exists."
+      exit 1
+    else
+      /bin/echo '#!/usr/local/bin/bash
+(/usr/local/bin/g++ -I"'`/bin/realpath -q $1`'/tcoin/bin" "'`/bin/pwd`'/tcoin.cpp" "'`/bin/realpath -q $1`'/tcoin/bin/popen2.c" -o "'`/bin/realpath -q $1`'/tcoin/bin/tcoin" -std=c++11) \
+&& (/bin/chmod 550 "'`/bin/realpath -q $1`'/tcoin/bin/tcoin") \
+&& (/bin/chmod u+s "'`/bin/realpath -q $1`'/tcoin/bin/tcoin") \
+&& (([ -f "'`/bin/realpath -q $2`'/tcoin" ] && (/bin/chmod u+w "'`/bin/realpath -q $2`'/tcoin")) || /usr/bin/true) \
+&& (/bin/cp "'`/bin/realpath -q $1`'/tcoin/bin/tcoin" "'`/bin/realpath -q $2`'/tcoin") \
+&& (/usr/bin/chgrp tilde "'`/bin/realpath -q $2`'/tcoin") \
+&& (/bin/chmod 550 "'`/bin/realpath -q $2`'/tcoin") \
+&& (/bin/chmod u+s "'`/bin/realpath -q $2`'/tcoin") \
+&& (/bin/cp "'`/bin/realpath -q $1`'/tcoin/bin/tcoin_defs.cpp" "'`/bin/realpath -q $2`'/tcoin_defs.cpp")' > "`/bin/realpath -q $1`/tcoin/bin/compile_tcoin"
+      /bin/chmod 540 "`/bin/realpath -q $1`/tcoin/bin/compile_tcoin"
+      /bin/echo '#!/usr/local/bin/bash
+'\$EDITOR' "'`/bin/pwd`'/tcoin.cpp"' > "`/bin/realpath -q $1`/tcoin/bin/edit_tcoin"
+      /bin/chmod 540 "`/bin/realpath -q $1`/tcoin/bin/edit_tcoin"
+      /usr/local/bin/bash "`/bin/realpath -q $1`/tcoin/bin/compile_tcoin"
+      /bin/ln -s "`/bin/realpath -q $1`/tcoin/bin/compile_tcoin" ~/"bin/compile_tcoin"
+      /bin/ln -s "`/bin/realpath -q $1`/tcoin/bin/edit_tcoin" ~/"bin/edit_tcoin"
+    fi
+    if [ -e "`/bin/realpath -q $1`/tcoin/bin/pcoin" ]
+    then
+      /bin/echo "Sorry, '`/bin/realpath -q $1`/tcoin/bin/pcoin' already exists."
+      exit 1
+    else
+      /bin/echo '#!/usr/local/bin/bash
+(/usr/local/bin/g++ -I"'`/bin/realpath -q $1`'/tcoin/bin" "'`/bin/pwd`'/pcoin.cpp" "'`/bin/realpath -q $1`'/tcoin/bin/popen2.c" -o "'`/bin/realpath -q $1`'/tcoin/bin/pcoin" -std=c++11) \
+&& (/bin/chmod 550 "'`/bin/realpath -q $1`'/tcoin/bin/pcoin") \
+&& (/bin/chmod u+s "'`/bin/realpath -q $1`'/tcoin/bin/pcoin") \
+&& (([ -f "'`/bin/realpath -q $2`'/pcoin" ] && (/bin/chmod u+w "'`/bin/realpath -q $2`'/pcoin")) || /usr/bin/true) \
+&& (/bin/cp "'`/bin/realpath -q $1`'/tcoin/bin/pcoin" "'`/bin/realpath -q $2`'/pcoin") \
+&& (/usr/bin/chgrp tilde "'`/bin/realpath -q $2`'/pcoin") \
+&& (/bin/chmod 550 "'`/bin/realpath -q $2`'/pcoin") \
+&& (/bin/chmod u+s "'`/bin/realpath -q $2`'/pcoin") \
+&& (/bin/cp "'`/bin/realpath -q $1`'/tcoin/bin/pcoin_defs.cpp" "'`/bin/realpath -q $2`'/pcoin_defs.cpp")' > "`/bin/realpath -q $1`/tcoin/bin/compile_pcoin"
+      /bin/chmod 540 "`/bin/realpath -q $1`/tcoin/bin/compile_pcoin"
+      /bin/echo '#!/usr/local/bin/bash
+'\$EDITOR' "'`/bin/pwd`'/pcoin.cpp"' > "`/bin/realpath -q $1`/tcoin/bin/edit_pcoin"
+      /bin/chmod 540 "`/bin/realpath -q $1`/tcoin/bin/edit_pcoin"
+      /usr/local/bin/bash "`/bin/realpath -q $1`/tcoin/bin/compile_pcoin"
+      /bin/ln -s "`/bin/realpath -q $1`/tcoin/bin/compile_pcoin" ~/"bin/compile_pcoin"
+      /bin/ln -s "`/bin/realpath -q $1`/tcoin/bin/edit_pcoin" ~/"bin/edit_pcoin"
+    fi
+    /bin/echo '#!/usr/local/bin/bash
+'\$EDITOR' "'`/bin/pwd`'/pcoin.cpp" "'`/bin/pwd`'/tcoin.cpp"' > "`/bin/realpath -q $1`/tcoin/bin/edit_ptcoin"
+    /bin/chmod 540 "`/bin/realpath -q $1`/tcoin/bin/edit_ptcoin"
+    /bin/ln -s "`/bin/realpath -q $1`/tcoin/bin/edit_ptcoin" ~/"bin/edit_ptcoin"
+  fi
+fi
diff --git a/ntcoin_openbsd_tildeinstitute b/ntcoin_openbsd_tildeinstitute
index 5a9a024..c25054f 100755
--- a/ntcoin_openbsd_tildeinstitute
+++ b/ntcoin_openbsd_tildeinstitute
@@ -0,0 +1,276 @@
+#!/usr/local/bin/bash
+
+if [ "$#" -eq 0 ] || [ "$1" = "--help" ] || [ "$1" = "-h" ]
+then
+  /bin/echo "Usage:"
+  /bin/echo "  ntcoin <path (no slash)> <bin path (no slash)> <n> <host name>: to create the tcoin directory in <path (no slash)> with the executable saved to <bin path (no slash)> and with <n> basecoins per user with the help showing the host name <host name>"
+  /bin/echo "  ntcoin <path (no slash)> <bin path (no slash)> <host name> --def | -d: to print only the #define preprocessor directives without creating any directories"
+  /bin/echo "  ntcoin [ --help | -h ] : to print this help"
+elif [ "$4" = "--def" ] || [ "$4" = "-d" ]
+then
+  /bin/echo "Printing tcoin.cpp (and pcoin.cpp) preprocessor directives."
+  /bin/echo 'Paste the following in '`/usr/local/bin/grealpath -s $1`'/tcoin/bin/tcoin_defs.cpp (and '`/usr/local/bin/grealpath -s $1`'/tcoin/bin/pcoin_defs.cpp):
+'
+  /bin/echo '#define TCOIN_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin"
+#define TCOIN_MSG_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/messages/"
+#define TCOIN_SALT_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/salts/"
+#define TCOIN_PASS_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/passwords/"
+#define TCOIN_PROG_ACT_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/program_accounting/"
+#define PROG_ACT_W_SLASH "program_accounting/"
+#define LS_PATH "/bin/ls"
+#define PCOIN_NEW_KEY_CMD "/bin/cat /dev/urandom | /usr/local/bin/gbase64 | /usr/local/bin/ghead -c 64 | /usr/bin/tr '+' '-' | /usr/bin/tr '/' '_'"
+#define PIPED_WORD_COUNT_CMD " | /usr/bin/wc -c"
+#define PCOIN_KEY_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/secrets/pcoin_keys"
+#define PCOIN_KEY_PATH_W_SLASH "'`/usr/local/bin/grealpath -s $1`'/tcoin/secrets/pcoin_keys/"
+#define TCOIN_CODEZ_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/secrets/tcoin_codez"
+#define TCOIN_BIN_PATH_W_SPACE "'`/usr/local/bin/grealpath -s $2`'/tcoin "
+#define TCOIN_PATH_W_SLASH "'`/usr/local/bin/grealpath -s $1`'/tcoin/"
+#define TCOIN_SCRYPT_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/scrypt"
+#define PCOIN_BIN_PATH "'`/usr/local/bin/grealpath -s $2`'/pcoin"
+#define PCOIN_BIN_PATH_W_SPACE "'`/usr/local/bin/grealpath -s $2`'/pcoin "
+#define TCOIN_HOST_NAME "'$3'"
+#define TCOIN_ERR_CONTACT_EMAIL "login@tilde.town (town-only) or login@tilde.team (internet-wide)"                   )
+#define TCOIN_PASS_RESET_CONTACT_EMAIL "`login@tilde.town` (tilde.town local email) or `login@tilde.team` (internet-wide email), or `/query login` on IRC"
+#define KROWBAR_OFF
+#define DA_OFF
+#define MINERCOIN_OFF
+#define TILDEINSTITUTE'
+else
+  #see https://stackoverflow.com/a/3951175
+  case $3 in
+    ''|*[!0-9]*) /bin/echo "Sorry, the number of basecoins <n> should be a positive integer."; exit 1 ;;
+    *) ;;
+  esac
+  if [ "$#" -ne 4 ]
+  then
+    /bin/echo "Sorry, the number of arguments must be exactly 4."
+    exit 1
+  fi
+  if [ -d "`/usr/local/bin/grealpath -s $1`/tcoin" ]
+  then
+    /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/usr/local/bin/grealpath -s $1`/tcoin"
+    /bin/chmod 700 "`/usr/local/bin/grealpath -s $1`/tcoin"
+    /bin/chmod u+s "`/usr/local/bin/grealpath -s $1`/tcoin"
+  fi
+  if [ -d "`/usr/local/bin/grealpath -s $1`/tcoin/salts" ]
+  then
+    /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/salts' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/usr/local/bin/grealpath -s $1`/tcoin/salts"
+    /bin/chmod 700 "`/usr/local/bin/grealpath -s $1`/tcoin/salts"
+    /bin/chmod u+s "`/usr/local/bin/grealpath -s $1`/tcoin/salts"
+  fi
+  if [ -d "`/usr/local/bin/grealpath -s $1`/tcoin/passwords" ]
+  then
+    /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/passwords' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/usr/local/bin/grealpath -s $1`/tcoin/passwords"
+    /bin/chmod 700 "`/usr/local/bin/grealpath -s $1`/tcoin/passwords"
+    /bin/chmod u+s "`/usr/local/bin/grealpath -s $1`/tcoin/passwords"
+  fi
+  if [ -d "`/usr/local/bin/grealpath -s $1`/tcoin/program_accounting" ]
+  then
+    /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/program_accounting' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/usr/local/bin/grealpath -s $1`/tcoin/program_accounting"
+    /bin/chmod 700 "`/usr/local/bin/grealpath -s $1`/tcoin/program_accounting"
+    /bin/chmod u+s "`/usr/local/bin/grealpath -s $1`/tcoin/program_accounting"
+  fi
+  if [ -d "`/usr/local/bin/grealpath -s $1`/tcoin/messages" ]
+  then
+    /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/messages' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/usr/local/bin/grealpath -s $1`/tcoin/messages"
+    /bin/chmod 700 "`/usr/local/bin/grealpath -s $1`/tcoin/messages"
+    /bin/chmod u+s "`/usr/local/bin/grealpath -s $1`/tcoin/messages"
+  fi
+  if [ -d "`/usr/local/bin/grealpath -s $1`/tcoin/base" ]
+  then
+    /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/base' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/usr/local/bin/grealpath -s $1`/tcoin/base"
+    /bin/chmod 700 "`/usr/local/bin/grealpath -s $1`/tcoin/base"
+    /bin/chmod u+s "`/usr/local/bin/grealpath -s $1`/tcoin/base"
+    if [ -e "`/usr/local/bin/grealpath -s $1`/tcoin/base/base.txt" ]
+    then
+      /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/base/base.txt' already exists."
+      exit 1
+    else
+      /bin/echo "$3""00" > "`/usr/local/bin/grealpath -s $1`/tcoin/base/base.txt"
+      /bin/chmod 600 "`/usr/local/bin/grealpath -s $1`/tcoin/base/base.txt"
+    fi
+  fi
+  if [ -d "`/usr/local/bin/grealpath -s $1`/tcoin/secrets" ]
+  then
+    /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/secrets' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/usr/local/bin/grealpath -s $1`/tcoin/secrets"
+    /bin/chmod 700 "`/usr/local/bin/grealpath -s $1`/tcoin/secrets"
+    /bin/chmod u+s "`/usr/local/bin/grealpath -s $1`/tcoin/secrets"
+    if [ -d "`/usr/local/bin/grealpath -s $1`/tcoin/secrets/pcoin_keys" ]
+    then
+      /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/secrets/pcoin_keys' already exists."
+      exit 1
+    else
+      /bin/mkdir "`/usr/local/bin/grealpath -s $1`/tcoin/secrets/pcoin_keys"
+      /bin/chmod 700 "`/usr/local/bin/grealpath -s $1`/tcoin/secrets/pcoin_keys"
+      /bin/chmod u+s "`/usr/local/bin/grealpath -s $1`/tcoin/secrets/pcoin_keys"
+    fi
+    if [ -e "`/usr/local/bin/grealpath -s $1`/tcoin/secrets/tcoin_codez" ]
+    then
+      /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/secrets/tcoin_codez' already exists."
+      exit 1
+    else
+      /bin/echo "`cat /dev/urandom | gbase64 | ghead -c 512 | tr -d '\n' | tr '+' '-' | tr '/' '_'` `cat /dev/urandom | gbase64 | ghead -c 512 | tr -d '\n' | tr '+' '-' | tr '/' '_'` `cat /dev/urandom | gbase64 | ghead -c 512 | tr -d '\n' | tr '+' '-' | tr '/' '_'`" > "`/usr/local/bin/grealpath -s $1`/tcoin/secrets/tcoin_codez"
+      /bin/chmod 400 "`/usr/local/bin/grealpath -s $1`/tcoin/secrets/tcoin_codez"
+    fi
+  fi
+    if [ -d "`/usr/local/bin/grealpath -s $1`/tcoin/bin" ]
+  then
+    /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/bin' already exists."
+    exit 1
+  else
+    /bin/mkdir "`/usr/local/bin/grealpath -s $1`/tcoin/bin"
+    /bin/chmod 700 "`/usr/local/bin/grealpath -s $1`/tcoin/bin"
+    /bin/chmod u+s "`/usr/local/bin/grealpath -s $1`/tcoin/bin"
+    if [ -e "`/usr/local/bin/grealpath -s $1`/tcoin/bin/scrypt" ]
+    then
+      /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/bin/scrypt' already exists."
+      exit 1
+    else
+      /bin/cp ./scrypt "`/usr/local/bin/grealpath -s $1`/tcoin/bin/scrypt"
+      /bin/chmod 500 "`/usr/local/bin/grealpath -s $1`/tcoin/bin/scrypt"
+    fi
+    if [ -e "`/usr/local/bin/grealpath -s $1`/tcoin/bin/popen2.c" ]
+    then
+      /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/bin/popen2.c' already exists."
+      exit 1
+    else
+      /bin/cp ./popen2.c "`/usr/local/bin/grealpath -s $1`/tcoin/bin/popen2.c"
+      /bin/chmod 440 "`/usr/local/bin/grealpath -s $1`/tcoin/bin/popen2.c"
+    fi
+    if [ -e "`/usr/local/bin/grealpath -s $1`/tcoin/bin/popen2.h" ]
+    then
+      /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/bin/popen2.h' already exists."
+      exit 1
+    else
+      /bin/cp ./popen2.h "`/usr/local/bin/grealpath -s $1`/tcoin/bin/popen2.h"
+      /bin/chmod 440 "`/usr/local/bin/grealpath -s $1`/tcoin/bin/popen2.h"
+    fi
+    if [ -e "`/usr/local/bin/grealpath -s $1`/tcoin/bin/tcoin_defs.cpp" ]
+    then
+      /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/bin/tcoin_defs.cpp' already exists."
+      exit 1
+    else
+      /bin/echo '#define TCOIN_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin"
+#define TCOIN_MSG_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/messages/"
+#define TCOIN_SALT_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/salts/"
+#define TCOIN_PASS_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/passwords/"
+#define TCOIN_PROG_ACT_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/program_accounting/"
+#define PROG_ACT_W_SLASH "program_accounting/"
+#define LS_PATH "/bin/ls"
+#define PIPED_WORD_COUNT_CMD " | /usr/bin/wc -c"
+#define PCOIN_KEY_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/secrets/pcoin_keys"
+#define PCOIN_KEY_PATH_W_SLASH "'`/usr/local/bin/grealpath -s $1`'/tcoin/secrets/pcoin_keys/"
+#define TCOIN_CODEZ_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/secrets/tcoin_codez"
+#define TCOIN_BIN_PATH_W_SPACE "'`/usr/local/bin/grealpath -s $2`'/tcoin "
+#define TCOIN_PATH_W_SLASH "'`/usr/local/bin/grealpath -s $1`'/tcoin/"
+#define TCOIN_SCRYPT_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/scrypt"
+#define TCOIN_HOST_NAME "'$4'"
+#define TCOIN_ERR_CONTACT_EMAIL "login@tilde.town (town-only) or login@tilde.team (internet-wide)"                   )
+#define TCOIN_PASS_RESET_CONTACT_EMAIL "`login@tilde.town` (tilde.town local email) or `login@tilde.team` (internet-wide email), or `/query login` on IRC"
+#define KROWBAR_OFF
+#define DA_OFF
+#define MINERCOIN_OFF
+#define TILDEINSTITUTE' > "`/usr/local/bin/grealpath -s $1`/tcoin/bin/tcoin_defs.cpp"
+      /bin/chmod 640 "`/usr/local/bin/grealpath -s $1`/tcoin/bin/tcoin_defs.cpp"
+    fi
+    if [ -e "`/usr/local/bin/grealpath -s $1`/tcoin/bin/pcoin_defs.cpp" ]
+    then
+      /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/bin/pcoin_defs.cpp' already exists."
+      exit 1
+    else
+        /bin/echo '#define TCOIN_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin"
+#define TCOIN_MSG_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/messages/"
+#define TCOIN_SALT_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/salts/"
+#define TCOIN_PASS_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/passwords/"
+#define TCOIN_PROG_ACT_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/program_accounting/"
+#define PROG_ACT_W_SLASH "program_accounting/"
+#define LS_PATH "/bin/ls"
+#define PCOIN_NEW_KEY_CMD "/bin/cat /dev/urandom | /usr/local/bin/gbase64 | /usr/local/bin/ghead -c 64 | /usr/bin/tr '+' '-' | /usr/bin/tr '/' '_'"
+#define PIPED_WORD_COUNT_CMD " | /usr/bin/wc -c"
+#define PCOIN_KEY_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/secrets/pcoin_keys"
+#define PCOIN_KEY_PATH_W_SLASH "'`/usr/local/bin/grealpath -s $1`'/tcoin/secrets/pcoin_keys/"
+#define TCOIN_CODEZ_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/secrets/tcoin_codez"
+#define TCOIN_PATH_W_SLASH "'`/usr/local/bin/grealpath -s $1`'/tcoin/"
+#define TCOIN_SCRYPT_PATH "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/scrypt"
+#define PCOIN_BIN_PATH "'`/usr/local/bin/grealpath -s $2`'/pcoin"
+#define TCOIN_BIN_PATH_W_SPACE "'`/usr/local/bin/grealpath -s $2`'/tcoin "
+#define PCOIN_BIN_PATH_W_SPACE "'`/usr/local/bin/grealpath -s $2`'/pcoin "
+#define TCOIN_ERR_CONTACT_EMAIL "login@tilde.town (town-only) or login@tilde.team (internet-wide)"                   )
+#define TCOIN_PASS_RESET_CONTACT_EMAIL "`login@tilde.town` (tilde.town local email) or `login@tilde.team` (internet-wide email), or `/query login` on IRC"
+#define KROWBAR_OFF
+#define DA_OFF
+#define MINERCOIN_OFF
+#define TILDEINSTITUTE' > "`/usr/local/bin/grealpath -s $1`/tcoin/bin/pcoin_defs.cpp"
+      /bin/chmod 640 "`/usr/local/bin/grealpath -s $1`/tcoin/bin/pcoin_defs.cpp"
+    fi
+    if [ -e "`/usr/local/bin/grealpath -s $1`/tcoin/bin/tcoin" ]
+    then
+      /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/bin/tcoin' already exists."
+      exit 1
+    else
+      /bin/echo '#!/usr/local/bin/bash
+(/usr/local/bin/eg++ -I"'`/usr/local/bin/grealpath -s $1`'/tcoin/bin" "'`/bin/pwd`'/tcoin.cpp" "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/popen2.c" -o "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/tcoin" -std=c++11) \
+&& (/bin/chmod 550 "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/tcoin") \
+&& (/bin/chmod u+s "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/tcoin") \
+&& (([ -f "'`/usr/local/bin/grealpath -s $2`'/tcoin" ] && (/bin/chmod u+w "'`/usr/local/bin/grealpath -s $2`'/tcoin")) || /usr/bin/true) \
+&& (/bin/cp "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/tcoin" "'`/usr/local/bin/grealpath -s $2`'/tcoin") \
+&& (/bin/chmod 550 "'`/usr/local/bin/grealpath -s $2`'/tcoin") \
+&& (/bin/chmod u+s "'`/usr/local/bin/grealpath -s $2`'/tcoin") \
+&& (/bin/cp "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/tcoin_defs.cpp" "'`/usr/local/bin/grealpath -s $2`'/tcoin_defs.cpp")' > "`/usr/local/bin/grealpath -s $1`/tcoin/bin/compile_tcoin"
+      /bin/chmod 540 "`/usr/local/bin/grealpath -s $1`/tcoin/bin/compile_tcoin"
+      /bin/echo '#!/usr/local/bin/bash
+'\$EDITOR' "'`/bin/pwd`'/tcoin.cpp"' > "`/usr/local/bin/grealpath -s $1`/tcoin/bin/edit_tcoin"
+      /bin/chmod 540 "`/usr/local/bin/grealpath -s $1`/tcoin/bin/edit_tcoin"
+      /usr/local/bin/bash "`/usr/local/bin/grealpath -s $1`/tcoin/bin/compile_tcoin"
+      /bin/ln -s "`/usr/local/bin/grealpath -s $1`/tcoin/bin/compile_tcoin" ~/"bin/compile_tcoin"
+      /bin/ln -s "`/usr/local/bin/grealpath -s $1`/tcoin/bin/edit_tcoin" ~/"bin/edit_tcoin"
+    fi
+    if [ -e "`/usr/local/bin/grealpath -s $1`/tcoin/bin/pcoin" ]
+    then
+      /bin/echo "Sorry, '`/usr/local/bin/grealpath -s $1`/tcoin/bin/pcoin' already exists."
+      exit 1
+    else
+      /bin/echo '#!/usr/local/bin/bash
+(/usr/local/bin/eg++ -I"'`/usr/local/bin/grealpath -s $1`'/tcoin/bin" "'`/bin/pwd`'/pcoin.cpp" "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/popen2.c" -o "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/pcoin" -std=c++11) \
+&& (/bin/chmod 550 "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/pcoin") \
+&& (/bin/chmod u+s "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/pcoin") \
+&& (([ -f "'`/usr/local/bin/grealpath -s $2`'/pcoin" ] && (/bin/chmod u+w "'`/usr/local/bin/grealpath -s $2`'/pcoin")) || /usr/bin/true) \
+&& (/bin/cp "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/pcoin" "'`/usr/local/bin/grealpath -s $2`'/pcoin") \
+&& (/bin/chmod 550 "'`/usr/local/bin/grealpath -s $2`'/pcoin") \
+&& (/bin/chmod u+s "'`/usr/local/bin/grealpath -s $2`'/pcoin") \
+&& (/bin/cp "'`/usr/local/bin/grealpath -s $1`'/tcoin/bin/pcoin_defs.cpp" "'`/usr/local/bin/grealpath -s $2`'/pcoin_defs.cpp")' > "`/usr/local/bin/grealpath -s $1`/tcoin/bin/compile_pcoin"
+      /bin/chmod 540 "`/usr/local/bin/grealpath -s $1`/tcoin/bin/compile_pcoin"
+      /bin/echo '#!/usr/local/bin/bash
+'\$EDITOR' "'`/bin/pwd`'/pcoin.cpp"' > "`/usr/local/bin/grealpath -s $1`/tcoin/bin/edit_pcoin"
+      /bin/chmod 540 "`/usr/local/bin/grealpath -s $1`/tcoin/bin/edit_pcoin"
+      /usr/local/bin/bash "`/usr/local/bin/grealpath -s $1`/tcoin/bin/compile_pcoin"
+      /bin/ln -s "`/usr/local/bin/grealpath -s $1`/tcoin/bin/compile_pcoin" ~/"bin/compile_pcoin"
+      /bin/ln -s "`/usr/local/bin/grealpath -s $1`/tcoin/bin/edit_pcoin" ~/"bin/edit_pcoin"
+    fi
+    /bin/echo '#!/usr/local/bin/bash
+'\$EDITOR' "'`/bin/pwd`'/pcoin.cpp" "'`/bin/pwd`'/tcoin.cpp"' > "`/usr/local/bin/grealpath -s $1`/tcoin/bin/edit_ptcoin"
+    /bin/chmod 540 "`/usr/local/bin/grealpath -s $1`/tcoin/bin/edit_ptcoin"
+    /bin/ln -s "`/usr/local/bin/grealpath -s $1`/tcoin/bin/edit_ptcoin" ~/"bin/edit_ptcoin"
+  fi
+fi