1
0
mirror of https://github.com/DoctorWkt/unix-jun72.git synced 2026-04-14 07:50:43 +00:00
Files
DoctorWkt.unix-jun72/src/cmd/ed2.s
warren.toomey 547fef522b Doug Merritt has provided all of his reconstructed files, and Warren has
compared them to his set. Both sets had errors, and having the two was
immensely helpful. This commit checks in the new files and the ones from
Warren's set which needed to be modified to fix mistakes.
2008-05-15 01:41:16 +00:00

562 lines
5.5 KiB
ArmAsm

/ ed2 -- text editor
address:
clr minflg
clr addr
ad1:
jsr r5,switch; addrt
tst minflg
bne 9f
tst addr
beq 1f
tst (r5)+
1:
rts r5
addrt:
' ; ad1
11; ad1
'+; ad1
'/; fsrch
'?; bsrch
'-; amin
'.; adot
'$; adol
'0; num0
'1; num1
'2; num1
'3; num1
'4; num1
'5; num1
'6; num1
'7; num1
'8; num1
'9; num1
''; amark
'^; up1
0
adot:
jsr r5,addrel; dot
br ad1
adol:
jsr r5,addrel; dol
br ad1
up1:
mov dot,r1
cmp r1,zero
beq 9f
tst -(r1)
mov r1,f
jsr r5,addrel; f
br ad1
9: jmp error
fsrch:
jsr r5,compile
mov dot,-(sp)
1:
add $2,(sp)
cmp (sp),dol
blos 2f
mov zero,(sp)
2:
cmp (sp),zero
beq 2f
mov (sp),r4
jsr r5,execute
br 2f
br 3f
2:
cmp (sp),dot
bne 1b
br 9b
bsrch:
jsr r5,compile
mov dot,-(sp)
1:
sub $2,(sp)
cmp (sp),zero
bhis 2f
mov dol,(sp)
2:
cmp (sp),zero
beq 2f
mov (sp),r4
jsr r5,execute
br 2f
br 3f
2:
cmp (sp),dot
bne 1b
br 9b
3:
mov (sp)+,f
jsr r5,addrel; f
br ad1
addrel:
add minflg,addr
bne 9b
mov *(r5)+,addr
rts r5
amin:
tst minflg
bne 9f
inc minflg
jmp ad1
num0:
mov $8.,-(sp)
br 1f
num1:
mov $10.,-(sp)
1:
mov r1,peekc
clr r3
1:
jsr r5,getc
cmp r1,$'0
blt 1f
cmp r1,$'9
bgt 1f
mpy (sp),r3
sub $'0,r1
add r1,r3
br 1b
1:
mov r1,peekc
tst addr
bne 1f
mov zero,addr
1:
asl r3
tst minflg
beq 1f
clr minflg
neg r3
1:
add r3,addr
jmp ad1
9: jmp error
8: jmp advanc
amark:
jsr r5,getc
jsr r5,findk
bne 9b
mov [kaddr-kname](r2),r2
mov zero,r4
1:
mov (r4)+,r3
bic $1,r3
cmp r2,r3
beq 2f
cmp r4,dol
blos 1b
br 9b
2:
tst -(r4)
mov r4,f
jsr r5,addrel; f
jmp ad1
findk:
clr -(sp)
mov $kname,r2
1:
tst (r2)
beq 2f
cmp r1,(r2)
beq 3f
tst (r2)+
cmp r2,$ekname
blos 1b
clr r2
2:
inc (sp)
3:
tst (sp)+
rts r5
findka:
mov $kaddr,r1
1:
cmp (r1)+,r0
beq 2f
cmp r1,$ekaddr
blos 1b
clr r1
rts r5
2:
tst -(r1)
rts r5
printn:
mov r0,-(sp)
mov r1,-(sp)
clr r0
mov count,r1
mov $linebuf,r3
jsr r5,1f
movb $'\n,(r3)+
jsr r5,print; linebuf
mov (sp)+,r1
mov (sp)+,r0
rts r5
1:
clr r0
dvd $10.,r0
mov r1,-(sp)
mov r0,r1
beq 1f
jsr r5,1b
1:
add $'0,(sp)
movb (sp)+,(r3)+
rts r5
set.:
tst adrflg
bne testa
br 1f
set1d:
tst adrflg
bne testa
mov zero,r4
cmp r4,dol
bhis 9b
tst (r4)+
mov r4,addr1
1:
mov dol,addr2
rts r5
set.d:
tst adrflg
bne testa
mov dot,r4
mov r4,addr1
mov r4,addr2
rts r5
testa:
mov addr1,r4
cmp r4,addr2
bhi 9b
jsr r5,1f
mov addr2,r4
jsr r5,1f
rts r5
1:
cmp r4,zero
blo 9f
cmp r4,dol
bhi 9f
rts r5
nonzero:
cmp addr1,zero
blos 9f
rts r5
setna:
tst adrflg
bne 9f
rts r5
8: jmp advanc
9: jmp error
newline:
jsr r5,getc
cmp r1,$'p
bne 1f
jsr r5,getc
inc pflag
1:
cmp r1,$'\n
bne 9b
rts r5
rdline:
mov $linebuf,r4
1:
jsr r5,getc
movb r1,(r4)+
cmp r1,$'\n
beq 1f
cmp r4,$elinbuf
blo 1b
br 9b
1:
cmp linebuf,$".\n
beq 8b
rts r5
append:
cmp dol,$ebuffer-5
bhis 9b
jsr r5,*(r5)+
mov dol,r4
tst (r4)+
mov r4,dol
jsr r5,setbrk
mov r4,r3
tst (r3)+
clr (r3)
add $2,dot
1:
mov -(r4),-(r3)
cmp r4,dot
bhi 1b
mov $linebuf,r0
jsr r5,putline
rts r5
putline:
mov r0,r4
mov oblkp,r2
bit $1,r2
beq 2f
jsr r5,1f
2:
mov dska,r1
add r2,r1
mov r1,*dot
2:
movb (r4)+,r1
clr r0
jsr r5,1f
cmp r1,$'\n
bne 2b
mov r2,oblkp
rts r5
1:
movb r1,obuf(r2)
inc r2
bit $777,r2
bne 2f
mov fout,r0
sys 0;7f
.data
7:
sys seek; dska: 0; 0
.text
mov fout,r0
sys write; obuf; 512.
bes tmperr
cmp dska,$65536.-512.
bhis tmperr
add $512.,dska
clr r2
2:
rts r5
tmperr:
mov $1,r0
sys write; scream; 3
br 9f
scream: <TMP>; .even
getline:
mov r3,-(sp)
mov $linebuf,r1
mov (r4),r4
bic $1,r4
mov r4,r3
bic $777,r4
1:
mov $ibuf,2f+2
bic $!777,r3
cmp r4,iblk
beq 4f
cmp r4,dska
// above is from v5 ed2.s, below is from s1 frag0 -- DougMerritt
bne 3f
mov $obuf,2f+2
br 2f
3:
mov r4,iblk
mov fin,r0
sys seek; iblk: -1; 0
mov fin,r0
sys read; ibuf; 512.
2:
movb ibuf(r3),r0
movb r0,(r1)+
cmp r0,$'\n
beq 1f
inc r3
bit $777,r3
bne 2b
add $512.,r4
br 1b
1:
mov (sp)+,r3
rts r5
9: jmp error
filnam:
mov $filebuf,r4
jsr r5,getc
cmp r1,$'\n
beq 2f
cmp r1,$' /
bne 9b
1:
jsr r5,getc
cmp r1,$' /
beq 1b
cmp r1,$'\n
beq 2f
movb r1,(r4)+
cmp r4,$filebuf+filsiz
blo 1b
br 9b
2:
cmp r4,$filebuf
beq 4f
clrb (r4)
tst eflag
beq 3f
clr eflag
1:
mov $filebuf,r3
mov $filsav,r4
2:
movb (r3)+,(r4)+
bne 2b
3:
tstb filsav
beq 1b
rts r5
4:
tstb filsav
beq 9b
mov $filsav,r3
mov $filebuf,r4
br 2b
rdfile:
mov $linebuf,r4
1:
jsr r5,fchar
movb r1,(r4)+
cmp r1,$'\n
beq 1f
cmp r4,$elinbuf
blo 1b
br 9b
1:
rts r5
fchar:
dec filec
blt 1f
movb *filep,r1
inc filep
tst r1
beq fchar
rts r5
1:
mov f,r0
sys read; fbuf; efbuf-fbuf
bes 9b
add r0,count
mov r0,filec
beq 1f
mov $fbuf,filep
br fchar
1:
mov f,r0
sys close
jsr r5,printn
jmp advanc
delete:
jsr r5,nonzero
mov addr1,r3
add r3,dol
mov addr2,r4
sub r4,dol
sub $2,dol
tst (r4)+
1:
mov (r4)+,(r3)+
bne 1b
jsr r5,setbrk
rts r5
inite:
movb $'a,qetmp+8
1:
sys stat; qetmp; linebuf
bec 2f
sys creat; qetmp; 10
bec 1f
2:
incb qetmp+8
cmpb qetmp+8,$'z
blos 1b
br e1
1:
mov r0,fout
sys open; qetmp; 0
bes e1
mov r0,fin
mov $buffer,r0
mov r0,zero
mov r0,dol
mov r0,dot
jsr r5,setbrk
mov $-1,iblk
mov $1,oblkp
clr dska
mov $kname,r0
mov r0,kp
1:
clr (r0)+
cmp r0,$ekname
blos 1b
rts r5
e1:
jsr r5,print; qbadf
sys exit
terme:
mov fin,r0
sys close
mov fout,r0
sys close
sys unlink; qetmp
rts r5
setbrk:
mov dol,-(sp)
add $514.,(sp)
bic $777,(sp)
cmp (sp),0f
beq 1f
mov (sp),0f
sys break; 0:..
1:
tst (sp)+
rts r5