rti = 2 / accept / r1 = header of where to put it / accept: mov r0,-(sp) movb $':,r0 jsr r5,tfoput movb $' ,r0 jsr r5,tfoput 2: jsr r5,tfiget cmpb r0,$'\n beq 1f jsr pc,putchar br 2b 1: jsr pc,putchar jsr r5,tfiget cmpb r0,$'\n beq 1f jsr pc,putchar br 2b 1: mov (sp)+,r0 rts pc / / / routine to get the last word from the string / r1=header addr / pop: jsr pc,fsfile jsr pc,backword bes 1f sub $2,w(r1) 1: rts pc / / / routine to add an entry to assoc mem or curly / r1 = header / r0 = header of string name / r2 = header of string / addentry: jsr pc,putword mov r2,r0 jsr pc,putword rts pc / / / routine to find the string pointed to by r0 / in either memory or curly / r1 = where to look / / returns error set if string not there / returns r1 = header of string if there / getsp: mov r0,-(sp) mov r1,-(sp) jsr pc,rewind /memory 3: mov 2(sp),r1 jsr pc,rewind /output mov (sp),r1 jsr pc,getword bes 1f mov r0,r1 mov r0,-(sp) jsr pc,rewind /string 2: mov (sp),r1 jsr pc,getchar bes 2f movb r0,r2 mov 4(sp),r1 jsr pc,getchar bes 4f cmpb r0,r2 beq 2b 4: tst (sp)+ 4: mov (sp),r1 add $2,r(r1) br 3b 2: tst (sp)+ mov 2(sp),r1 cmp r(r1),w(r1) bne 4b mov (sp)+,r1 jsr pc,getword tst (sp)+ rts pc 1: mov (sp)+,r1 mov (sp)+,r0 sec rts pc / / / tfoput / / jsr r5,tfoput / tfoput: mov r0,ch mov $1,r0 sys write; ch; 1 rts r5 / / / tfiget / / jsr r5,tfiget / tfiget: clr r0 sys read; ch; 1 bes 1f tst r0 beq 1f movb ch,r0 rts r5 1: jsr r5,flushb tst argf beq 1f mov opointer,r1 jsr pc,pop 1: mov $5,tflag jmp interrupt / / putc / jsr r5,putc / putc: mov r1,-(sp) mov r2,-(sp) mov $rfo+2,r1 mov r1,r2 add (r1),r2 movb r0,2(r2) inc (r1) cmp (r1),$512. bge 1f mov (sp)+,r2 mov (sp)+,r1 rts r5 1: mov (sp)+,r2 mov (sp)+,r1 / / / flush output buffer to output file. / flushb: mov r1,-(sp) mov r0,-(sp) mov $rfo,r1 mov (r1)+,r0 mov (r1),0f+2 beq 1f clr (r1)+ mov r1,0f sys write; 0:..;.. 1: mov (sp)+,r0 mov (sp)+,r1 rts r5 relarg: mov $arg,r2 1: mov (r2)+,r1 beq 2f jsr pc,release br 1b 2: cmp r2,$arge blt 1b rts pc / relcurl: mov curly,r1 jsr pc,rewind 1: jsr pc,getword bes 1f mov r0,r1 jsr pc,release mov curly,r1 br 1b 1: jsr pc,release rts pc / int: inc iflag rti / interrupt: jsr pc,relarg tst opointer beq 2f 1: mov opointer,r1 jsr pc,rewind 1: jsr pc,getword bes 1f mov r0,r1 jsr pc,release mov opointer,r1 br 1b 1: mov opointer,r1 jsr pc,release tst ipointer beq 2f mov ipointer,r1 jsr pc,release tst curly beq 2f jsr pc,relcurl tst scr beq 2f mov scr,r1 jsr pc,release 2: jsr pc,flush jsr pc,whead sys exit letter: .=.+2 arg: .=.+20. arge: 0 argf: .=.+2 switch: .=.+2 curly: .=.+2 curlyf: .=.+2 ch: .=.+2 opointer: .=.+2 ipointer: .=.+2 scr: .=.+2 iflag: 0 tflag: 0 end: