summary refs log tree commit diff
path: root/utils/message-tcoin-converter.awk
diff options
context:
space:
mode:
authorlogin2021-10-17 16:25:53 +0000
committerlogin2021-10-17 16:25:53 +0000
commitb0de38eafe7fe897f907066dc1ef923073690d5d (patch)
tree7abbf3ee84417762fadbc7493e0ff119aeba3e9d /utils/message-tcoin-converter.awk
parentbd53b1ec0cf20e79828e8e95576a44f1eaf004db (diff)
pcoin_keys fixed
Thanks to ~jmjl, I was able to find that pcoin_keys didn't work. To fix it, tcoin uses sneaky magic but with stdin isntead of an argument, and a new library imported called popen2, that lets me send both stdin and receive stdout, to successfully get "ls <path to the pcoin_keys directory>" to work (it execl's another instance of the tcoin comand so that it runs under setuid instead of as the original user who ran it.
Diffstat (limited to 'utils/message-tcoin-converter.awk')
-rwxr-xr-xutils/message-tcoin-converter.awk193
1 files changed, 193 insertions, 0 deletions
diff --git a/utils/message-tcoin-converter.awk b/utils/message-tcoin-converter.awk
new file mode 100755
index 0000000..81ea0e4
--- /dev/null
+++ b/utils/message-tcoin-converter.awk
@@ -0,0 +1,193 @@
+#!/usr/bin/awk -f
+
+#mst.awk -> message_sum_tcoin.awk
+
+BEGIN {
+  tsv=1
+  summary=0
+  sum=0
+  sumplus=0
+  summinus=0
+  self_user=""
+  self_user_found=0
+  prev_self_txn=0
+  FS=""
+}
+
+(NR == 1) {
+  #Determining onlyo (only other-user) from first line (see /home/login/mst)
+  if($0 ~ /^[a-zA-Z0-9_.\-]+/) {
+    if(substr($0,NF-12) == "_messages.txt") {
+      onlyo=substr($0,1,NF-13)
+    }
+    else {
+      onlyo=$0
+    }
+  }
+}
+
+(NR != 1) {
+  term=0
+  other_user=""
+  other_user_found=0
+  if ($0 == "" || $1==" ") {
+    if($1==" " && !prev_self_txn) {
+      i=1;
+      while($i != ":") { ++i }
+      message_user = substr($0, 5, i-10); #position (i-5) - position (5) + 1 = length of message_user, where position (i-5) is the position of the last character of message_user
+      old_ofs=OFS;OFS="";print "\n", message_user, "\t", substr($0,i+2);OFS=old_ofs;
+    }
+    next
+  }
+
+  for (a=1;a!=NF;a++) {
+    # other-user determination
+    if ($a == ":" && a == 25) {
+      for (b=a+1;;b++) {
+        if ($b ~ /^[a-zA-Z0-9_\-]/) {
+          for(c=b;;c++) {
+            if ($c ~ /^[^a-zA-Z0-9_\-]?$/) {
+              break
+            }
+            else {
+              other_user = ((other_user) ($c))
+            }
+          }
+          break
+        }
+      }
+      other_user_found=1
+    }
+    # self-username determination
+    else if ($a == "<" && !self_user_found) {
+      for (b=a+1;;b++) {
+        if ($b == " ") {
+          for(c=b+1;;c++) {
+            if($c ~ /^[^a-zA-Z0-9_\-]?$/) {
+              break
+            }
+            else {
+              self_user = ((self_user) ($c))
+            }
+          }
+          break
+        }
+      }
+      if (!tsv) { print "S:", self_user }
+      self_user_found = 1
+      break
+    }
+    else if ($a == ">" && !self_user_found) {
+      for (b=a+2;;b++) {
+        if($b ~ /^[^a-zA-Z0-9_\-]?$/) {
+          break
+        }
+        else {
+          self_user = ((self_user) ($b))
+        }
+      }
+      if (!tsv) { print "S:", self_user }
+      self_user_found = 1
+      break
+    }
+  }
+
+  if (onlyo && (onlyo != other_user)) {
+    #print other_user, "SKIPPED!"
+    next
+  }
+
+  if (self_user == other_user) {
+    prev_self_txn = 1
+    #print "EQUAL USER!"
+    next
+  }
+  else {
+    prev_self_txn = 0
+  }
+
+  for (i=1;i!=NF;i++) {
+    if (i <= 26 && !summary) {
+      if(tsv && i == 25) {
+        old_ors=ORS;ORS="";print "\t";ORS=old_ors
+      }
+      else if(tsv && i == 26) {
+        #do nothing, don't print the "space"
+      }
+      else {
+        old_ors=ORS;ORS="";print $i;ORS=old_ors
+      }
+    }
+    else if ($i == "<") {
+      for(j=i+4;;j++) {
+        if ($j == ".") {
+          l=10
+          for(k=j+1;;k++) {
+            if ($k ~ /^[^0-9]/) {
+              break
+            }
+            term = term + $k/l
+            l=l*10
+          }
+          break
+        }
+        else if ($j ~ /^[^0-9]/) {
+          break
+        }
+        else {
+          term = term*10 + $j
+        }
+      }
+      sum = sum - term;
+      summinus = summinus + term;
+      olistminus[other_user] += term;
+      olist[other_user] -= term;
+      if(!summary) { if(tsv){ old_ofs=OFS;OFS="\t"; print other_user, self_user, -1*term; OFS=old_ofs } else { print -1*term, "O:", other_user } }
+      next
+    }
+    else if($i == ">") {
+      multiplier=1
+      for(j=i-5;;j--) {
+        if ($j == ".") {
+          multiplier=1
+          l=1
+          for(k=j-1;;k--) {
+            if ($k ~ /^[^0-9]/) {
+              break
+            }
+            term = term + ($k)*l;
+            l=l*10
+          }
+          break
+        }
+        else if ($j ~ /^[^0-9]/) {
+          break
+        }
+        else {
+          multiplier = multiplier*10
+          term = (term + $j)/10
+        }
+      }
+      term = term * multiplier
+      sum = sum + term;
+      sumplus = sumplus + term;
+      olistplus[other_user] += term;
+      olist[other_user] += term;
+      if (!summary) {  if(tsv){ old_ofs=OFS;OFS="\t"; print other_user, self_user, term; OFS=old_ofs } else{ print 1*term, "O:", other_user } }
+      next
+    }
+  }
+}
+
+END {
+  if(!tsv) {
+    print "--USERLIST-START--"
+    for (key in olist) {
+      print key, 1*olist[key], "Cr:", 1*olistplus[key], "Dr:", -1*olistminus[key]
+    }
+    print "---USERLIST-END---"
+    print "GRAND TOTAL:", 1*sum
+    print "CREDIT:", 1*sumplus
+    print "DEBIT:", -1*summinus
+  }
+}