home *** CD-ROM | disk | FTP | other *** search
- .globl b1
- .globl hblk
- .globl headers
- .globl initl
- .globl asmem
- .globl b1s
- .globl b1e
- .globl w1
- .globl stats
- .globl lookchar
- .globl flush
- .globl fsfile
- .globl seekchar
- .globl backspace
- .globl alterchar
- .globl zero
- .globl getchar
- .globl putchar
- .globl copy
- .globl rewind
- .globl create
- .globl allocate
- .globl release
- .globl collect
- .globl w,r,a,l
- .globl getword
- .globl putword
- .globl backword
- .globl alterword
- /
- /
- / routine to read next character from string
- / pointer to by r1; character returned in r0
- / c-bit set if character not availiable (eof)
- /
- / mov ...,r1
- / jsr pc,getchar
- / movb r0,...
- /
- getchar:
- jsr pc,lookchar
- bes 1f
- inc r(r1)
- tst r0 /clears c-bit
- 1: rts pc
- /
- /
- / routine to read a string backwards
- / the read pointer is decremented before reading
- /
- / mov ...,r1
- / jsr pc,backspace
- / mov r0,...
- /
- backspace:
- cmp a(r1),r(r1)
- bhis nochc
- dec r(r1)
- jsr pc,lookchar
- rts pc
- nochc: clr r0
- sec
- rts pc
- /
- /
- / routine to put a word onto the string
- /
- / mov ...,r1
- / mov ...,r0
- / jsr pc,putword
- /
- putword:
- mov r0,-(sp)
- sub $hblk,r0
- jsr pc,putchar
- swab r0
- jsr pc,putchar
- mov (sp)+,r0
- rts pc
- /
- /
- / routine to get a word from the string
- /
- / mov ...,r1
- / jsr pc,getword
- / mov r0,...
- /
- getword:
- jsr pc,lookchar
- bes 1f
- movb r0,nchar
- inc r(r1)
- jsr pc,lookchar
- bes 1f
- movb r0,nchar+1
- inc r(r1)
- mov nchar,r0
- add $hblk,r0
- 1: rts pc
- /
- /
- / routine to alter the word pointed to by r(r1)
- / by replacing the word there with r0
- /
- / mov wd,r0
- / mov ...,r1
- / jsr pc,alterword
- /
- alterword:
- mov r0,-(sp)
- sub $hblk,r0
- jsr pc,alterchar
- swab r0
- jsr pc,alterchar
- mov (sp)+,r0
- rts pc
- /
- /
- / routine to get words backwards from string
- /
- / mov ...,r1
- / jsr pc,backword
- / mov r0,...
- /
- backword:
- cmp a(r1),r(r1)
- bhis nochw
- dec r(r1)
- jsr pc,lookchar
- movb r0,nchar+1
- cmp a(r1),r(r1)
- bhis nochw
- dec r(r1)
- jsr pc,lookchar
- movb r0,nchar
- mov nchar,r0
- add $hblk,r0
- rts pc
- /
- nochw:
- clr r0
- sec
- rts pc
- /
- /
- / routine to copy the contents of one string
- / to another.
- /
- / mov source,r0
- / mov dest,r1
- / jsr pc,copy
- / mov r1,...
- /
- / on return, r1 points to the new string and should
- / be saved. r0 is preserved.
- /
- copy:
- inc stats+12.
- mov r0,-(sp)
- mov r1,-(sp)
- mov r2,-(sp)
- mov r3,-(sp)
- mov w(r0),r2
- sub a(r0),r2 /W-A (old)
- mov l(r1),r3
- sub a(r1),r3 /L-A (new)
- cmp r2,r3
- blos 1f
- mov r2,r0
- jsr pc,allocate
- mov 4(sp),r0 /new
- jsr pc,swap
- jsr pc,release
- mov r0,r1
- mov 0(sp),r0 /old
- 1:
- mov a(r1),w(r1) /rewind w pointer
- cmp r2,$512.
- blos copy1 /is a short string
- /
- jsr pc,flush
- jsr pc,reset
- /
- mov a(r0),-(sp)
- 4:
- mov (sp),0f
- mov afi,r0
- sys seek;0:.. ;0 /set input pointer
- cmp r2,$512.
- blos 2f
- mov $512.,r3 /# output this time
- mov r3,0f
- mov r3,3f
- add r3,(sp)
- sub r3,r2 /# left to output
- br 1f
- 2:
- mov r2,0f
- mov r2,3f
- mov r2,r3
- clr r2
- 1:
- mov afi,r0
- sys read;b1;0:..
- bes bad
- cmp r0,r3
- bne bad
- mov afout,r0
- mov (r1),0f
- add r3,(r1)
- sys seek;0:.. ;0
- sys write;b1;3:..
- bes bad
- tst r2
- bgt 4b
- tst (sp)+
- /
- / fix up read ptr of new string
- /
- copy2:
- mov 6(sp),r0 /restore r0
- mov r(r0),r2
- sub a(r0),r2
- add a(r1),r2
- mov r2,r(r1)
- /
- / restore and return
- /
- mov (sp)+,r3
- mov (sp)+,r2
- mov (sp)+,r1
- mov (sp)+,r0
- rts pc
- /
- bad: mov $1,r0
- sys write;1f;2f-1f
- 4
- 1: <error on copy\n>
- 2: .even
- /
- 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
- /
- / copy a short string
- /
- copy1:
- mov r(r0),-(sp)
- mov a(r0),r(r0)
- mov nchar,-(sp)
- mov r0,r2 /old
- mov r1,r3 /new
- 1:
- mov r2,r1
- jsr pc,getchar
- bes 1f
- mov r3,r1
- jsr pc,putchar
- br 1b
- 1:
- mov r2,r0
- mov (sp)+,nchar
- mov (sp)+,r(r0)
- mov r3,r1
- br copy2
- /
- /
- /
- /
- /
- / routine to rewind read pointer of string
- / pointed to by r1
- /
- / mov ...,r1
- / jsr pc,rewind
- /
- rewind:
- mov a(r1),r(r1)
- rts pc
- /
- /
- / routine to rewind write pointer of string
- / pointed to by r1
- /
- / mov ...,r1
- / jsr pc,create
- /
- create:
- 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),w(r1)
- clrb r0
- 1: cmp w(r1),l(r1)
- bhis 1f
- jsr pc,putchar
- br 1b
- 1: mov a(r1),w(r1)
- mov (sp)+,r0
- rts pc
- /
- /
- /
- / routine to move the read pointer of a string to the
- / relative position indicated by r0. the string is
- / extended if necessary - there is no error return.
- /
- / mov position,r0
- / mov ...,r1
- / jsr pc,seekchar
- /
- seekchar:
- mov r1,-(sp)
- mov r0,-(sp)
- .if testing
- jsr pc,preposterous
- .endif
- inc stats+10.
- 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,copy
- 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:
- mov r0,-(sp)
- .if testing
- jsr pc,preposterous
- .endif
- inc stats+10.
- mov w(r1),r(r1)
- mov (sp)+,r0
- rts pc
- /
- /
- / routine to place the character in r0 at the current
- / position of the read pointer - the read pointer
- / is not moved.
- /
- / movb ch,r0
- / mov ...,r1
- / jsr pc,alterchar
- / mov r1,...
- /
- alterchar:
- mov r2,-(sp)
- mov r1,-(sp)
- mov r0,nchar
- .if testing
- jsr pc,preposterous
- .endif
- inc stats+8.
- 1: cmp r(r1),l(r1) /W,L
- blo 3f
- mov l(r1),r0
- inc r0
- sub a(r1),r0 /W-A+1
- jsr pc,allocate
- mov (sp),r0
- jsr pc,copy
- jsr pc,swap
- jsr pc,release
- mov (sp),r1
- 3:
- mov r(r1),r0
- jsr pc,bufchar
- bec 2f
- jsr pc,getbuf
-
- 2: movb nchar,(r0)
- mov $1,w1(r2)
- mov nchar,r0 /to preserve r0 for user
- inc r(r1)
- cmp r(r1),w(r1)
- blos 3f
- mov r(r1),w(r1)
- 3:
- mov (sp)+,r1
- mov (sp)+,r2
- 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:
- mov r2,-(sp)
- inc stats+6.
- .if testing
- jsr pc,preposterous
- .endif
- cmp w(r1),r(r1) /W,R
- blos noch
- mov r(r1),r0
- jsr pc,bufchar
- bec 2f
- jsr pc,getbuf
- /
- 2:
- inc flag
- bne 2f
- jsr pc,fixct
- br 1f
- 2:
- mov flag,u1(r2)
- 1:
- mov (sp)+,r2
- movb (r0),r0
- tst r0 /clears c-bit
- rts pc
- /
- noch:
- mov (sp)+,r2
- clr r0
- sec
- rts pc
- /
- /
- / routine to put a character into the string
- / pointed to by r1; character in r0
- / r0 is preserved; r1 points to the string
- / after return and must be saved.
- /
- / movb ch,r0
- / mov ...,r1
- / jsr pc,putchar
- / mov r1,...
- /
- putchar:
- mov r2,-(sp)
- mov r1,-(sp)
- mov r0,nchar
- .if testing
- jsr pc,preposterous
- .endif
- inc stats+8.
- 1: cmp w(r1),l(r1) /W,L
- blo 3f
- mov w(r1),r0
- inc r0
- sub a(r1),r0 /W-A+1
- jsr pc,allocate
- mov (sp),r0
- jsr pc,copy
- jsr pc,swap
- jsr pc,release
- mov (sp),r1
- 3:
- mov w(r1),r0
- jsr pc,bufchar
- bec 2f
- jsr pc,getbuf
- 2: movb nchar,(r0)
- mov $1,w1(r2)
- mov nchar,r0 /to preserve r0 for user
- inc w(r1)
- inc flag
- bne 2f
- jsr pc,fixct
- br 1f
- 2:
- mov flag,u1(r2)
- 1:
- mov (sp)+,r1
- mov (sp)+,r2
- rts pc
- /
- /
- / routine to flush contents of all buffers.
- /
- / jsr pc,flush
- /
- flush:
- mov r1,-(sp)
- mov r2,-(sp)
- mov r3,-(sp)
- clr r3
- 1:
- cmp r3,$numb
- bhis 1f
- mov r3,r2
- asl r2
- tst w1(r2)
- ble 2f
- mov r3,r1
- ashc $9.,r1
- bic $777,r1
- add $b1,r1
- jsr pc,clean
- 2:
- inc r3
- br 1b
- 1:
- mov (sp)+,r3
- mov (sp)+,r2
- mov (sp)+,r1
- rts pc
- /
- /
- reset:
- mov r3,-(sp)
- mov r2,-(sp)
- clr r3
- 1:
- cmp r3,$numb
- bge 1f
- mov r3,r2
- asl r2
- mov $-1.,w1(r2)
- clr b1s(r2)
- clr b1e(r2)
- clr u1(r2)
- inc r3
- br 1b
- 1:
- clr flag
- mov (sp)+,r2
- mov (sp)+,r3
- rts pc
- /
- /
- / routine to read from disc to a buffer
- / wcing the buffer if necessary
- /
- / mov disc addr,r0
- / mov buffer addr,r2
- / jsr pc,getb
- /
- / on return r0 = addr of byte in buffer
- /
- getb:
- mov r3,-(sp)
- mov r1,-(sp)
- mov r0,-(sp)
- mov r2,r3
- asr r3
- mov r3,r1
- ashc $9.,r1
- bic $777,r1
- add $b1,r1
- tst w1(r2) / w
- ble 1f
-
- jsr pc,clean
-
- 1: mov (sp),r0
- bic $777,r0 /get lowest multiple of 512.
- mov r0,0f
- mov r0,b1s(r2) /set start
- mov afi,r0
- sys seek;0:..;0
- mov r1,0f
- sys read;0:..;512.
-
- mov b1s(r2),b1e(r2)
- add $512.,b1e(r2) / set end
- clr w1(r2) /clear w
- mov (sp)+,r0
- sub b1s(r2),r0
- add r1,r0 / set r0=byte addr in buffer
- mov (sp)+,r1
- mov (sp)+,r3
- rts pc
- /
- /
- / routine to wc a buffer
- /
- / mov buffer addr,r2
- / mov buffer addr+6,r1 beginning of buffer
- / jsr pc,clean
- /
- clean:
- inc stats+24.
- mov r0,-(sp)
- mov b1s(r2),0f
- mov afout,r0
- sys seek;0:..;0
- mov r1,0f
- sys write;0:..;512.
-
- clr w1(r2) /clear w
- mov (sp)+,r0
- rts pc
- /
- /
- / routine to get buffer addr of byte whose disc
- / addr is in r0 - also returns addr of write
- / flag for buffer in r2
- /
- / mov disc addr,r0
- / jsr pc,bufchar
- / mov (r0),r0 for read
- / inc (r2) for write must inc w
- /
- / c-bit set if char not in either buffer
- /
- bufchar:
- mov r1,-(sp)
- mov r3,-(sp)
- clr r3
- 1:
- mov r3,r2
- asl r2
- cmp r0,b1s(r2)
- blo 2f
- cmp r0,b1e(r2)
- bhis 2f
- sub b1s(r2),r0
- mov r3,r1
- ashc $9.,r1
- bic $777,r1
- add r1,r0
- add $b1,r0
- mov (sp)+,r3
- mov (sp)+,r1
- clc
- rts pc
- 2:
- inc r3
- cmp r3,$numb
- blt 1b
- mov (sp)+,r3
- mov (sp)+,r1
- sec
- rts pc
- /
- /
- / routine to get a buffer
- /
- / mov disc addr,r0
- / jsr pc,getbuf
- / mov (r0),r0 (for read)
- / inc (r2) must inc w for w
- /
- getbuf:
- mov r4,-(sp)
- mov r3,-(sp)
- mov $2,r3
- clr r2
- mov $1,r4
- 1:
- cmp r4,$numb
- bge 1f
- cmp u1(r3),u1(r2)
- bhis 2f
- mov r3,r2
- 2:
- inc r4
- add $2.,r3
- br 1b
- 1:
- mov r2,r3
- jsr pc,getb
- add $stats+14.,r3
- inc (r3)
- mov (sp)+,r3
- mov (sp)+,r4
- rts pc
- /
- /
- / this routine renumbers the time used cell u1(r2)
- / of the buffers when the clock overflows
- /
- fixct:
- mov r1,-(sp)
- mov r3,-(sp)
- mov $numb,r1
- mov $numb,flag
- 2:
- mov r1,u1(r2)
- dec r1
- bge 1f
- mov (sp)+,r3
- mov (sp)+,r1
- rts pc
- 1:
- clr r2
- mov $2,r3
- 1:
- cmp r3,$numb2
- bge 2b
- cmp u1(r3),u1(r2)
- blo 2f
- mov r3,r2
- 2:
- add $2,r3
- br 1b
-