.begin FNR ;its style command line scanner ; non-skip return for null file spec ;clobbers acs with reckless abandon break=1 ;returns with character that broke scan in=2 ;xct'ing causes next character to appear in break brktab=3 ;AOBJN pointer to break table dev=4 ;returns dev,fn1,fn2,sname fn1=5 fn2=6 sname=7 ac=10 char=11 acptr=12 temp=13 limbo=14 ;scanner read ahead character ;cannot leave name until zero getcc: 0 ;get character for command line scanner skipn break,limbo xct in setzm limbo jrst @getcc name: 0 ;break off word from input stream na1: jsr getcc caie break,40 ;ignore leading spaces cain break,11 ;tabs too jrst na1 move acptr,[440600,,ac] tdza ac,ac name1: jsr getcc jsr brktst jrst nambrk ;found a break character name2: tlne acptr,770000 ;ignore everything after 6 characters idpb char,acptr jrst name1 nambrk: jumpn char,@name ;no trailing spaces nambr1: jsr getcc caie break,40 ;ignore trailing spaces cain break,11 jrst nambr1 cain break,^Q ;the next character will not break jrst nambr2 jsr brktst jrst @name ;a break character nambr2: movem break,limbo ;space broke us movei break,40 jrst @name ;converts break to sixbit and puts result in char ;^Q quotes next character ;fails to skip on break character brktst: 0 cain break,11 movei break,40 jsr sixtst jumpl char,[ caie break,21 ;^Q jrst @brktst ;non-sixbit breaks us jsr getcc jsr sixtst jumpl char,@brktst ;non-sixbit jrst brkt1] jumpe char,@brktst caie char,': cain char,'; jrst @brktst skipl temp,brktab jrst brkt1 camn break,(temp) jrst @brktst aobjn temp,.-2 brkt1: aos brktst ;whew! jrst @brktst ;convert break to sixbit sixtst: 0 movni char,1 cail break,40 caile break,"_ jrst sixt1 ;might be lower case movei char,-40(break) jrst @sixtst sixt1: cail break,"a caile break,"z jrst @sixtst movei char,<"A-"a-40>(break) jrst @sixtst ;this routine scans command line for file specification getfil:0 setzb fn1,fn2 setzb dev,sname setzm limbo jsr name jumpe ac,@getfil aosa getfil getf1: jsr name ;break off first name jumpe ac,@getfil ;let initl worry about it cain break,": jrst [ move dev,ac jrst getf1] cain break,"; jrst [ move sname,ac jrst getf1] ;this must be fn1 or fn2 caie break,40 jrst [ jumpn fn1,[ move fn2,ac jrst @getfil] move fn1,ac jrst @getfil] jumpn fn1,[ move fn2,ac jrst getf1] move fn1,ac jrst getf1 .end