MiniUnix/usr/source/salloc/altch.s
.globl alterchar
.globl plausible
.globl stats
.globl allocate, release
.globl copy
.globl bufchar, getbuf
.globl swap
.globl w, r, a, l
.globl w1, flag, u1, fixct
/
/ routine to rewrite the character pointer to by
/ read pointer. The read pointer is advanced.
/ the string is extended if necessary.
/ there is no error return.
/
/ movb ch,r0
/ mov ...,r1
/ jsr pc,alterchar
/ mov r1,...
/
alterchar:
mov r2,-(sp)
mov r1,-(sp)
mov r0,nchar
jsr pc,plausible
inc stats+8.
1: cmp r(r1),l(r1) /W,L
blt 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 nchar,r0 /to preserve r0 for user
inc r(r1)
mov $1,w1(r2)
cmp r(r1),w(r1)
ble 3f
mov r(r1),w(r1)
3:
inc flag
bne 1f
jsr pc,fixct
br 2f
1:
mov flag,u1(r2)
2:
mov (sp)+,r1
mov (sp)+,r2
rts pc
/
nchar: .=.+2