]> Pileus Git - ~andy/rhawk/blobdiff - irc.awk
Improve input parsing
[~andy/rhawk] / irc.awk
diff --git a/irc.awk b/irc.awk
index 9b071c91d88def919002b2e92e1fad30e358a9dd..2f5d220c0934c59e443d89ebe0885b2df306cef3 100644 (file)
--- a/irc.awk
+++ b/irc.awk
@@ -36,15 +36,16 @@ function debug(msg) {
        fflush()
 }
 
-function set() {
+function set(i) {
        debug("CMD:  [" CMD  "]")
        debug("SRC:  [" SRC  "]")
        debug("DST:  [" DST  "]")
        debug("FROM: [" FROM "]")
        debug("TO:   [" TO   "]")
-       debug("ARG:  [" ARG  "]")
        debug("MSG:  [" MSG  "]")
        debug("$0:   [" $0   "]")
+       for (i in ARG)
+               debug("ARG"i": [" ARG[i] "]")
 }
 
 # Functions
@@ -132,15 +133,19 @@ function reload() {
        gsub(/\s+/,     " ")
        gsub(/^ | $/,    "")
        gsub(/\3[0-9]*/, "")
-       match($0, /(:([^ ]+) +)?(([A-Z0-9]+) +)(([^ ]+) +)?(([^: ]+) +)?(:(.*))/, arr);
+       match($0, /(:([^ ]+) )?([A-Z0-9]+)(( [^:][^ ]*)*)( :(.*))?/, arr);
+       sub(/^ /, "", arr[4])
        SRC = arr[2]
-       CMD = arr[4]
-       DST = arr[6]
-       ARG = arr[8]
-       MSG = arr[10]
+       CMD = arr[3]
+       MSG = arr[7]
 
-       match(SRC, /([^! ]+)!/, arr);
+       split(arr[4], ARG)
+       DST = ARG[1]
+
+       match(SRC, /([^! ]+)!([^@ ]+)@([^ ]+\/[^ ]+)?/, arr);
        FROM = arr[1]
+       USER = arr[2]
+       HOST = arr[3]
 
        match(MSG, /(([^ :,]*)[:,] *)?(.*)/, arr);
        TO  = arr[2]
@@ -163,7 +168,6 @@ CMD == "PING" {
 
 CMD == "332" {
        CMD = "TOPIC"
-       DST = ARG
 }
 
 CMD == "TOPIC" {