]> Pileus Git - ~andy/rhawk/blob - test.awk
save
[~andy/rhawk] / test.awk
1 # Functions
2 function say(who, msg)
3 {
4         print ":" who "! PRIVMSG #rhtest :" msg
5 }
6
7 function error(msg)
8 {
9         print "error: " msg > "/dev/stderr"
10 }
11
12 function debug(msg)
13 {
14         print msg > "/dev/stderr"
15 }
16
17 function command(who, cmd)
18 {
19         arg=cmd
20         gsub(/\<[nbp]|[+-]/, "", arg)
21         if      (cmd ~ /^\./)     0 # nop
22         else if (cmd ~ /^n/)      say(who, ".newgame " arg)
23         else if (cmd ~ /^e/)      say(who, ".endgame ")
24         else if (cmd ~ /^j/)      say(who, ".join")
25         else if (cmd ~ /^d/)      say("andy753421", ".deal " who " " hand[who])
26         else if (cmd ~ /^l/)      say(who, ".look")
27         else if (cmd ~ /^b/)      say(who, ".bid "  arg)
28         else if (cmd ~ /^s/)      say(who, ".score")
29         else if (cmd ~ /^B/)      say(who, ".bids")
30         else if (cmd ~ /^t/)      say(who, ".tricks")
31         else if (cmd ~ /^p/)      say(who, ".pass " arg)
32         else if (arg ~ /[shdc]$/) say(who, ".play " arg)
33         else                      error("unknown cmd '" cmd "'")
34 }
35
36 function reset()
37 {
38         nturns = 0
39         delete players # players[i]   -> "name"
40         delete turns   # turns[pi][i] -> "cmd"
41 }
42
43 # Rules
44 BEGIN { reset() }
45
46 //  { gsub(/#.*/, "") }
47
48 /^[^ ]+:/ {
49         gsub(/:/, "")
50         pi = length(players)
51         if (NF-2 > nturns)
52                 nturns = NF-1
53         for (i=2; i<=NF; i++)
54                 turns[pi][i-2] = $i
55         players[pi] = $1
56         hand[$1]    = $0
57         gsub(/^\w*|[nbp-]\w+|\<[nejlbsBtpd]\>|[.+]/, "", hand[$1])
58         gsub(/^ */, "", hand[$1])
59         print $1 ": " hand[$1] > "/dev/stderr"
60         say($1, "unicode :(")
61 }
62
63 /^\s*$/ {
64         for (ti=0; ti<nturns; ti++)
65                 for (pi=0; pi<length(players); pi++)
66                         command(players[pi], turns[pi][ti])
67         reset()
68 }