mirror of
https://github.com/PDP-10/its.git
synced 2026-01-23 19:07:45 +00:00
126 lines
2.4 KiB
Plaintext
Executable File
126 lines
2.4 KiB
Plaintext
Executable File
.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
|
||
|