60 lines
1.2 KiB
Plaintext
60 lines
1.2 KiB
Plaintext
proc snusp dlen raw$ .
|
|
len ds[] dlen
|
|
is$[] = strsplit raw$ "\n"
|
|
for s$ in is$[]
|
|
is$[][] &= strchars s$
|
|
.
|
|
for ipr to len is$[][]
|
|
for ipc to len is$[ipr][]
|
|
if is$[ipr][ipc] = "$" : break 2
|
|
.
|
|
.
|
|
dp = 1
|
|
id = 0
|
|
#
|
|
subr step
|
|
if id mod 2 = 0
|
|
ipc += 1 - bitand id 2
|
|
else
|
|
ipr += 1 - bitand id 2
|
|
.
|
|
.
|
|
while ipr >= 1 and ipr <= len is$[][] and ipc >= 1 and ipc <= len is$[ipr][]
|
|
c$ = is$[ipr][ipc]
|
|
if c$ = ">"
|
|
dp += 1
|
|
elif c$ = "<"
|
|
dp -= 1
|
|
elif c$ = "+"
|
|
ds[dp] += 1
|
|
elif c$ = "-"
|
|
ds[dp] -= 1
|
|
elif c$ = "."
|
|
write strchar ds[dp]
|
|
elif c$ = ","
|
|
# ds[dp] = strcode input
|
|
elif c$ = "/"
|
|
id = bitxor id 3
|
|
elif c$ = "\\"
|
|
id = bitxor id 1
|
|
elif c$ = "!"
|
|
step
|
|
elif c$ = "?"
|
|
if ds[dp] = 0 : step
|
|
.
|
|
step
|
|
.
|
|
.
|
|
s$ = input
|
|
while s$ <> ""
|
|
cod$ &= "\n" & s$
|
|
s$ = input
|
|
.
|
|
snusp 5 cod$
|
|
#
|
|
input_data
|
|
/++++!/===========?\>++.>+.+++++++..+++\
|
|
\+++\ | /+>+++++++>/ /++++++++++<<.++>./
|
|
$+++/ | \+++++++++>\ \+++++.>.+++.-----\
|
|
\==-<<<<+>+++/ /=.>.+>.--------.-/
|