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
/++++!/===========?\>++.>+.+++++++..+++\
\+++\ | /+>+++++++>/ /++++++++++<<.++>./
$+++/ | \+++++++++>\ \+++++.>.+++.-----\
      \==-<<<<+>+++/ /=.>.+>.--------.-/
