.sub _main
.local int argc, pos, size1, size2
.local pmc args, match, add_rule, unescape
.local string input, result, cmd, sizeStr, arg1, arg2
.local pmc stdin, stdout
.include "iglobals.pasm"
load_bytecode "PGE.pbc"
load_bytecode "PGE/Hs.pir"
match = find_global "PGE::Hs", "match"
add_rule = find_global "PGE::Hs", "add_rule"
unescape = find_global "PGE::Hs", "unescape"
getinterp args
set args, args[.IGLOBALS_ARGV_LIST]
argc = elements args
if argc == 3 goto do_args
getstdin stdin
getstdout stdout
push stdin, 'utf8'
push stdout, 'utf8'
stdin."setbuf"(0)
stdout."setbuf"(0)
loop:
readline input, stdin
length pos, input
if pos < 1 goto end
pos = index input, " "
if pos == 0 goto loop
cmd = substr input, 0, pos
inc pos
input = substr input, pos
pos = index input, " "
if pos == 0 goto loop
sizeStr = substr input, 0, pos
size1 = sizeStr
inc pos
sizeStr = substr input, pos
size2 = sizeStr
# Now read up arg1 and arg2
inc size1
arg1 = read stdin, size1
chopn arg1, 1 # skip \n
inc size2
arg2 = read stdin, size2
chopn arg2, 1 # skip \n
arg1 = unescape(arg1)
arg2 = unescape(arg2)
if cmd == "add_rule" goto do_add_rule
if cmd == "match" goto do_match
goto loop
do_add_rule:
add_rule(arg1, arg2)
goto loop
do_match:
result = match(arg1, arg2)
length pos, result
print "OK "
print pos
print "\n"
print result
print "\n"
goto loop
do_args:
arg1 = args[1]
arg2 = args[2]
arg1 = unescape(arg1)
arg2 = unescape(arg2)
result = match(arg1, arg2)
print result
end:
.end