home *** CD-ROM | disk | FTP | other *** search
- rti = 2
- .globl rm
- .globl ck
- .globl loop
- .globl oct
- .globl argc
- .globl arg
- .globl tfiget
- .globl asmem
- .globl qflag
- .globl vflag
- .globl getspq
- .globl q
- .globl ask
- .globl getword
- .globl r
- .globl w
- .globl output
- .globl buffer
- .globl bufend
- .globl fv
- .globl getsp
- .globl release
- .globl nothere
- .globl getn
- .globl getchar
- .globl rewind
- .globl iflag
- .globl inter
- / output buffer
- / r2 = last char in buffer + 1
- / r2 returned at beginning of buffer
- /
- output:
- sub $buffer,r2
- blos 1f
- mov r2,0f
- mov $1,r0
- sys write; buffer; 0:..
- mov $buffer,r2
- 1:
- 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 asmem,r1
- jsr pc,rewind /memory
- 3:
- jsr pc,getword
- bes 1f
- mov r0,r1
- jsr pc,rewind
- mov (sp),r2
- 2:
- jsr pc,getchar
- bes 2f
- tstb (r2)
- beq 4f
- cmpb r0,(r2)+
- beq 2b
- 4:
- mov asmem,r1
- add $2,r(r1)
- br 3b
- 2:
- tstb (r2)
- bne 4b
- mov r1,r2
- mov asmem,r1
- jsr pc,getword
- tst (sp)+
- rts pc
- 1:
- mov (sp)+,r0
- sec
- rts pc
- /
- / finds header of string with name same as that pointed to by r0
- / taking into account ? and *
- getspq:
- mov r0,-(sp)
- mov asmem,r1
- tst qflag
- bgt 1f
- jsr pc,rewind
- 1:
- jsr pc,getword
- bes 1f
- mov r0,r1
- jsr pc,rewind
- mov (sp),r2
- 2:
- cmpb (r2),$'*
- bne 3f
- clr strflg
- mov $2,qflag
- inc r2
- tstb (r2)
- beq 6f
- mov r2,ch
- 3:
- jsr pc,getchar
- bes 2f
- tstb (r2)
- bne 3f
- cmp $2,qflag
- bne 4f
- mov ch,r2
- 3:
- cmpb (r2),$'?
- bne 3f
- inc r2
- tst qflag
- bne 2b
- mov $1,qflag
- br 2b
- 3:
- cmpb r0,(r2)+
- bne 5f
- inc strflg
- br 2b
- 5:
- cmp $2,qflag
- bne 4f
- tst strflg
- bne 4f
- dec r2
- br 2b
- 4:
- mov asmem,r1
- add $2,r(r1)
- br 1b
- 2:
- tstb (r2)
- bne 4b
- 6:
- mov r1,r2
- mov asmem,r1
- jsr pc,getword
- tst (sp)+
- rts pc
- 1:
- mov $-1.,qflag
- mov (sp)+,r0
- sec
- rts pc
- /
- / tfiget
- / jsr r5,tfiget
- /
- tfiget:
- clr r0
- sys read; ch; 1
- bes 1f
- tst iflag
- beq 9f; jmp loop; 9:
- tst r0
- beq 1f
- movb ch,r0
- rts pc
- 1: jmp q
- /
- / routine to print file name and error message
- / r2 = next free byte in buffer
- /
- nothere:
- mov $buffer,r2
- 1:
- tstb (r1)
- beq 1f
- movb (r1)+,(r2)+
- br 1b
- 1:
- sub $buffer,r2
- mov r2,0f
- mov $1,r0
- sys write; buffer; 0:..
- mov $1,r0
- sys write; err4; 16.
- rts pc
- /
- /
- / routine to put characters from string in buffer
- / r1 = header of string
- / on return r2 = next free byte in buffer
- /
- getn:
- mov $buffer,r2
- jsr pc,rewind
- 1:
- jsr pc,getchar
- bes 1f
- movb r0,(r2)+
- cmp r2,$bufend
- bhis 1f
- br 1b
- 1: rts pc
- /
- ask:
- mov r2,-(sp)
- mov r0,r1
- jsr pc,getn
- movb $' ,(r2)+
- jsr pc,output
- jsr pc,tfiget
- cmpb $'\n,r0
- bne 1f
- 2:
- mov asmem,r1
- add $2,r(r1)
- mov (sp)+,r2
- sec
- rts pc
- 1:
- cmpb r0,$'y
- beq 4f
- cmpb r0,$'q
- beq 3f
- 1:
- tst iflag
- bne 2b
- jsr pc,tfiget
- cmpb $'\n,r0
- bne 1b
- br 2b
- 4:
- tst iflag
- bne 2b
- jsr pc,tfiget
- cmpb $'\n,r0
- bne 1b
- mov asmem,r1
- mov (sp)+,r2
- clc
- rts pc
- 3:
- tst iflag
- bne 2b
- jsr pc,tfiget
- cmpb $'\n,r0
- bne 1b
- mov (sp)+,r2
- jmp loop
- inter:
- inc iflag
- rti
- / to remove an entry from asmem - r points to name ptr
- /
- rm:
- mov r3,-(sp)
- mov asmem,r1
- mov r(r1),r3
- sub $4,r(r1)
- mov r(r1),r2
- mov r2,-(sp)
- 1:
- mov r3,r(r1)
- jsr pc,getword
- bes 1f
- mov r(r1),r3
- mov r2,r(r1)
- jsr pc,alterword
- mov r(r1),r2
- br 1b
- 1:
- mov r2,w(r1)
- mov (sp)+,r(r1)
- mov (sp)+,r3
- rts pc
- /
- / check that header pointed to by r2 released
- /
- ck:
- mov r2,-(sp)
- mov l(r2),r0
- sub a(r2),r0
- sub $hblk,r2
- jsr pc,log2
- asl r0
- mov r0,ch
- mov frlist(r0),r0
- 1:
- beq 1f
- cmp r2,r0
- beq 2f
- add $hblk,r0
- mov (r0),r0
- br 1b
- 2:
- mov ch,r0
- inc freeb(r0)
- mov (sp)+,r2
- rts pc
- 1:
- mov (sp)+,r2
- sec
- rts pc
- oct:
- mov r1,-(sp)
- mov r0,r1
- clr r0
- div $8.,r0
- mov r1,-(sp)
- add $'0,(sp)
- tst r0
- beq 1f
- jsr r5,oct
- 1:
- movb (sp)+,ch
- mov $1,r0
- sys write; ch; 1
- mov (sp)+,r1
- rts r5
-
- decml:
- mov r1,-(sp)
- mov r0,r1
- clr r0
- div $10.,r0
- mov r1,-(sp)
- add $'0,(sp)
- tst r0
- beq 1f
- jsr r5,decml
- 1:
- movb (sp)+,ch
- mov $1,r0
- sys write; ch; 1
- mov (sp)+,r1
- rts r5
- /
- /
- iflag: 0
- qflag: 0
- vflag: 0
- .data
- err4: < not in memory.\n>
- err1: <Cannot open file >
- end1: .even
- .bss
- freeh: .=.+2
- freeb: .=.+32.
- freen:
- ch: .=.+2
- strflg: .=.+2
- buffer: .=.+512.
- bufend: .=.+2
- argc = buffer + 20.
- arg = buffer + 256.
- fv: .=.+2
- .text
-