home *** CD-ROM | disk | FTP | other *** search
- .globl getchar
- .globl stats
- .globl lookchar
- .globl fsfile
- .globl seekchar
- .globl backspace
- .globl putchar
- .globl alterchar
- .globl move
- .globl rewind
- .globl create
- .globl zero
- .globl allocate
- .globl release
- .globl collect
- .globl getword, putword
- .globl length, position
- .globl w, r, a, l
- /
- testing = 0
- /
- /
- / routine to return the length of a string
- /
- / mov ...,r1
- / jsr pc,length
- / mov r0,...
- /
- length:
- mov w(r1),r0
- sub a(r1),r0
- rts pc
- /
- /
- / routine to return the read pointer position
- /
- / mov ...,r1
- / jsr pc,position
- / mov r0,...
- /
- position:
- mov r(r1),r0
- sub a(r1),r0
- rts pc
- /
- /
- /
- /
- / routine to get a word from the string
- / mov ...,r1
- / jsr pc,getword
- / mov r0,...
- /
- getword:
- jsr pc,getchar
- bes noch
- movb r0,nchar
- jsr pc,getchar
- bec 2f
- dec r(r1)
- br noch
- 2: movb r0,nchar+1
- mov nchar,r0
- tst r0 /tst clears c-bit
- rts pc
- /
- /
- / routine to put a word onto the string
- / mov ...,r1
- / mov ...,r0
- / jsr pc,putword
- /
- putword:
- jsr pc,putchar
- swab r0
- jsr pc,putchar
- swab r0
- rts pc
- /
- .bss
- nchar: .=.+2
- .text
- /
- /
- /
- / routine to read next character from string
- / pointed to by r1; character returned in r0
- / c-bit set if character not available (end of file)
- / r1 is preserved
- /
- / mov ...,r1
- / jsr pc,getchar
- / movb r0,...
- /
- getchar:
- jsr pc,lookchar
- bec 2f
- rts pc
- 2: inc r(r1)
- tst r0 /tst clears c-bit
- rts pc
- /
- noch: clr r0
- sec
- rts pc
- /
- / routine to look at next character from string
- / pointed to by r1; character returned in r0
- / c-bit set if character not available (end of file)
- / r1 is preserved
- /
- / mov ...,r1
- / jsr pc,lookchar
- / movb r0,...
- /
- lookchar:
- .if testing
- jsr pc,plausible
- inc stats+6.
- .endif
- cmp w(r1),r(r1)
- blos noch
- movb *r(r1),r0
- clc
- rts pc
- /
- plausible:
- cmp r1,$headers
- bhis 9f; 4; 9:
- cmp r1,$headend
- blo 9f; 4; 9:
- rts pc
- /
- /
- /
- / routine to move the read pointer of a string to a
- / specified point. If the string is not long enough,
- / the string is extended
- /
- / mov position,r0
- / mov ...,r1
- / jsr pc,seekchar
- /
- seekchar:
- mov r1,-(sp)
- mov r0,-(sp)
- .if testing
- jsr pc,plausible
- inc stats+10.
- .endif
- 1:
- mov (sp),r0
- add a(r1),r0
- cmp r0,l(r1)
- bhi 3f
- mov r0,r(r1)
- cmp r0,w(r1)
- blo 1f
- mov r0,w(r1)
- br 1f
- 3:
- mov (sp),r0
- jsr pc,allocate
- mov 2(sp),r0
- jsr pc,move
- jsr pc,swap
- jsr pc,release
- mov 2(sp),r1
- br 1b
- 1:
- mov (sp)+,r0
- mov (sp)+,r1
- rts pc
- /
- /
- / routine to move read pointer of string to end of string
- /
- / mov ...,r1
- / jsr pc,fsfile
- /
- fsfile:
- .if testing
- jsr pc,plausible
- inc stats+10.
- .endif
- mov w(r1),r(r1)
- rts pc
- /
- /
- / routine to read a string backwards
- / the read pointer is decremented before reading
- /
- / mov ...,r1
- / jsr pc,backspace
- / mov r0,...
- /
- backspace:
- .if testing
- jsr pc,plausible
- inc stats+6.
- .endif
- cmp a(r1),r(r1)
- bhis noch
- dec r(r1)
- movb *r(r1),r0
- clc
- rts pc
- /
- /
- /
- /
- / routine to put a character into the string
- / pointed to by r1; character in r0
- / r0 and r1 are preserved.
- /
- / movb ch,r0
- / mov ...,r1
- / jsr pc,putchar
- /
- putchar:
- mov r1,-(sp)
- mov r0,-(sp)
- .if testing
- jsr pc,plausible
- inc stats+8.
- .endif
- 1: cmp w(r1),l(r1)
- blt 3f
- mov w(r1),r0
- inc r0
- sub a(r1),r0 /W-A+1
- jsr pc,allocate
- mov 2(sp),r0 /r1
- jsr pc,move
- jsr pc,swap
- jsr pc,release
- mov 2(sp),r1 /r1
- cmp w(r1),l(r1)
- blt 3f
- jmp err
- /
- 3: movb (sp),*w(r1)
- inc w(r1)
- mov (sp)+,r0
- tst (sp)+
- rts pc
- /
- /
- swap:
- mov w(r1),-(sp)
- mov w(r0),w(r1)
- mov (sp),w(r0)
- mov r(r1),(sp)
- mov r(r0),r(r1)
- mov (sp),r(r0)
- mov a(r1),(sp)
- mov a(r0),a(r1)
- mov (sp),a(r0)
- mov l(r1),(sp)
- mov l(r0),l(r1)
- mov (sp)+,l(r0)
- rts pc
- /
- /
- / routine to alter a character in the string
- / pointed to by r1; character in r0
- / r0 and r1 are preserved.
- /
- / movb ch,r0
- / mov ...,r1
- / jsr pc,alterchar
- /
- alterchar:
- mov r1,-(sp)
- mov r0,-(sp)
- .if testing
- jsr pc,preposterous
- inc stats+8.
- .endif
- 1: cmp r(r1),l(r1)
- blt 3f
- mov l(r1),r0
- inc r0
- sub a(r1),r0 /W-A+1
- jsr pc,allocate
- mov 2(sp),r0 /r1
- jsr pc,move
- jsr pc,swap
- jsr pc,release
- mov 2(sp),r1 /r1
- cmp r(r1),l(r1)
- blt 3f
- jmp err
- /
- 3: movb (sp),*r(r1)
- inc r(r1)
- cmp r(r1),w(r1)
- ble 1f
- mov r(r1),w(r1)
- 1:
- mov (sp)+,r0
- tst (sp)+
- rts pc
- /
- /
- / routine to move the contents of one string
- / to another.
- /
- / mov source,r0
- / mov dest,r1
- / jsr pc,move
- /
- / on return, r1 points to the new string and should
- / be saved. r0 is preserved.
- /
- move:
- mov r3,-(sp)
- mov r2,-(sp)
- mov r1,-(sp)
- mov r0,-(sp)
- mov w(r0),r2
- sub a(r0),r2 /W-A
- mov l(r1),r3
- sub a(r1),r3 /L-A
- cmp r2,r3
- ble 1f
- mov r2,r0
- jsr pc,allocate
- mov 2(sp),r0 /r1
- jsr pc,swap
- jsr pc,release
- mov r0,r1
- mov 0(sp),r0 /r0
- /
- 1: mov a(r0),(r0)
- mov a(r1),(r1)
- 1: dec r2
- blt 1f
- movb *(r0),*(r1)
- inc (r0)
- inc (r1)
- br 1b
- /
- / fix up read ptr of new string
- /
- 1: mov r(r0),r2
- sub a(r0),r2
- add a(r1),r2
- mov r2,r(r1)
- /
- / restore and return
- /
- mov (sp)+,r0
- mov (sp)+,r1
- mov (sp)+,r2
- mov (sp)+,r3
- rts pc
- /
- /
- / routine to rewind read pointer of string
- / pointed to by r1
- /
- / mov ...,r1
- / jsr pc,rewind
- /
- rewind:
- .if testing
- jsr pc,plausible
- inc stats+10.
- .endif
- mov a(r1),r(r1)
- rts pc
- /
- / routine to rewind write pointer of string
- / pointed to by r1
- /
- / mov ...,r1
- / jsr pc,create
- /
- create:
- .if testing
- jsr pc,plausible
- inc stats+10.
- .endif
- mov a(r1),w(r1)
- mov a(r1),r(r1)
- rts pc
- /
- /
- / routine to zero a string
- /
- / mov ...,r1
- / jsr pc,zero
- /
- zero:
- mov r0,-(sp)
- .if testing
- jsr pc,preposterous
- .endif
- mov a(r1),r0
- 1: cmp r0,l(r1)
- bhis 1f
- clrb (r0)+
- br 1b
- 1: mov (sp)+,r0
- rts pc
- /
- /
-