mirror of
https://github.com/DoctorWkt/unix-jun72.git
synced 2026-02-14 03:54:52 +00:00
56 lines
1.8 KiB
Plaintext
56 lines
1.8 KiB
Plaintext
tst param / are we substituting for $n
|
|
bne 2f/ yes
|
|
mov inbufp,r1 / no, move normal input pointer to r1
|
|
cmp r1,einbuf / end of input line?
|
|
bne 1f / no
|
|
jsr pc,getbuf / yes, put next console line in buffer
|
|
br getc
|
|
1:
|
|
movb (r1)+,r0 / move byte from input buffer to r0
|
|
mov r1,inbufp / increment routine
|
|
bis escap,r0 / if last character was \ this adds
|
|
/ 200 to current character
|
|
clr escap / clear, so escap normally zero
|
|
cmp r0,$'\\ / note that \\ is equal \ in as
|
|
beq 1f
|
|
cmp r0,$'$ / is it $
|
|
beq 3f / yes
|
|
rts pc / no
|
|
1:
|
|
mov $200,escap / mark presence of \ in command line
|
|
br getc / get next character
|
|
2:
|
|
movb *param,r0 / pick up substitution character put in
|
|
/ r0
|
|
beq 1f / if end of substitution arg, branch
|
|
inc param / if not end, set for next character
|
|
rts pc / return as though character in ro is normal
|
|
/ input
|
|
1:
|
|
clr param / unset substitution pointer
|
|
br getc / get next char in normal input
|
|
3:
|
|
jsr pc,getc / get digit after $
|
|
sub $'0,r0 / strip off zone bits
|
|
cmp r0,$9. / compare with digit 9
|
|
blos 1f / less than or equal 9
|
|
mov $9.,r0 / if larger than 9, force 9
|
|
1:
|
|
mov shellarg,r1 / get pointer to stack for
|
|
/ this call of shell
|
|
inc r0 / digit +1
|
|
cmp r0,(r1) / is it less than # of args in this call
|
|
bge getc / no, ignore it. so this $n is not replaced
|
|
asl r0 / yes, multiply by 2 (to skip words)
|
|
add r1,r0 / form pointer to arg pointer (-2)
|
|
mov 2(r0),param / move arg pointer to param
|
|
br getc / go to get substitution arg for $n
|
|
getbuf:
|
|
mov $inbuf,r0 / move input buffer address
|
|
mov r0,inbufp / to input buffer pointer
|
|
mov r0,einbuf / and initialize pointer to end of
|
|
/ character string
|
|
dec r0 / decrement pointer so can utilize normal
|
|
/ 100p starting at 1f
|
|
mov r0,0f / initialize address for reading 1st char
|