#ARexx Mode
setmacro arexx-mode 0 (Mx-f settvar mode (ARexx) settvar ccq zARx settvar ftab rx-indent settvar btab prog-backtab)
arexx-mode

setmacro rx-indent 0 (ifelse cb (goto start while cb (rx-indentline down) goto start) rx-indentline)
setmacro rx-region 0 (region-top while y=<\$my (rx-indentline down))
setmacro rx-when 0 (prevf SELECT if \$fail (rx-err (\\\$currentword without SELECT)) rx-setx)
setmacro rx-else 0 (closer? END THEN prev2 ELSE \$closer if c="ELSE" (rx-err (Unbound ELSE)) if c="END" (rx-matchend last prev2 ELSE THEN if c<>"THEN" (rx-err (Unbound ELSE))) prev2 IF WHEN if c="WHEN" (rx-err (Unbound ELSE)) firstnb setx)
setmacro rx-err? 1 (if \$fail (rx-err (\$arg1)))
setmacro rx-err 1 (pop pos request (ARexx Code Error) (\$arg1) (Continue) abort)
setmacro rx-matchend 0 (smv yy \$lineno prev2 DO SELECT rx-err? (Unbound END) set cnt 0 while y<\$yy (wfind END inc cnt) repeat \$cnt (prev2 DO SELECT rx-err? (Unbound END)))
setmacro rx-setx 0 (set x \$firstnb add x \$tabstop)
setmacro rx-1 0 (set x 1)
setmacro rx-do 0 (set cnt 0 while 1 (prev2 DO END if \\\$fail (rx-1 break) if c="END" (inc cnt prev2 DO SELECT rx-err? (Unbound END) if c="SELECT" (dec cnt)) if c="DO" (intcmp \\\$cnt 0 ifelse 3 rx-setx rx-1 break)))
setmacro rx-end 0 (push pos prev2 DO SELECT pop pos rx-err? (Unbound END) rx-matchend firstnb setx)
setmacro rx-getcol 0 (rx-goprevline last wleft do (when c="THEN" rx-setx when c="ELSE" rx-setx pick pos rx-do))
setmacro rx-goprevline 0 (while 1 (findstr (\\\$prevnbline) fail? prev if \\\$fail break if c<>"/*" break))
setmacro rx-indentline 0 (firstnb push pos do (when c="ELSE" rx-else when c="END" rx-end when c="WHEN" rx-when when c="OTHERWISE" rx-when rx-getcol) pop pos dec x pos-line \$x)

map zARx-a ((ARG ))
map zcARx-a ((ADDRESS ))
map zARx-b ((BREAK))
map zARx-c ((CALL ))
map zARx-d ((DO ))
map zcARx-d ((DROP ))
map zARx-e ((ELSE ) rx-indentline)
map zcARx-e ((END ) rx-indentline)
map zARx-i ((IF ))
map zcARx-i ((ITERATE))
map zARx-l ((LEAVE))
map zARx-n ((NOP))
map zcARx-n ((NUMERIC))
map zARx-o ((OTHERWISE ))
map zcARx-o ((OPTIONS ))
map zARx-p ((PARSE ))
map zcARx-p ((PROCEDURE))
map zARx-q ((QUEUE ))
map zARx-r ((RETURN ))
map zARx-s ((SELECT ))
map zcARx-s ((SAY ))
map zARx-t ((THEN ))
map zcARx-t ((TRACE ))
map zARx-tab (rx-region)
map zARx-u ((UPPER ))
map zARx-w ((WHEN ))
