96 lines
1.0 KiB
ArmAsm
96 lines
1.0 KiB
ArmAsm
/ dsw - delete from tty
|
|
|
|
cmp (sp)+,$2
|
|
blt 1f
|
|
tst (sp)+
|
|
mov (sp)+,0f
|
|
1:
|
|
sys stat; 0:dot; stbuf
|
|
bes error
|
|
mov stbuf+4,r0
|
|
bic $!60000,r0
|
|
cmp r0,$40000
|
|
bne error
|
|
mov 0b,0f
|
|
sys open; 0:..; 0
|
|
bes error
|
|
mov r0,r1
|
|
1:
|
|
clrb buf+17.
|
|
mov r1,r0
|
|
sys read; buf; 16.
|
|
bes done
|
|
tst r0
|
|
beq done
|
|
tst buf
|
|
beq 1b
|
|
mov 0b,r2
|
|
mov $obuf,r3
|
|
2:
|
|
movb (r2)+,(r3)+
|
|
bne 2b
|
|
mov $buf+2,r2
|
|
dec r3
|
|
cmpb -1(r3),$'/
|
|
beq 2f
|
|
movb $'/,(r3)+
|
|
2:
|
|
movb (r2)+,(r3)+
|
|
bne 2b
|
|
sys stat; obuf; stbuf
|
|
bes error
|
|
bit $60000,stbuf+4
|
|
bne 1b
|
|
mov $buf+2,r2
|
|
2:
|
|
tstb (r2)+
|
|
bne 2b
|
|
movb $' ,-(r2)
|
|
sub $buf+1,r2
|
|
mov r2,0f
|
|
|
|
2:
|
|
mov $1,r0
|
|
sys write; buf+2; 0:..
|
|
clr r0
|
|
sys read; ch; 1
|
|
cmpb ch,$'\n
|
|
beq 1b
|
|
clr r0
|
|
sys read; ch1; 1
|
|
cmpb ch1,$'\n
|
|
beq 3f
|
|
4:
|
|
clr r0
|
|
sys read; ch; 1
|
|
cmpb ch,$'\n
|
|
beq 2b
|
|
br 4b
|
|
3:
|
|
cmpb ch,$'x
|
|
beq done
|
|
cmpb ch,$'y
|
|
bne 2b
|
|
sys unlink; obuf
|
|
bes error
|
|
br 1b
|
|
|
|
done:
|
|
sys exit
|
|
|
|
error:
|
|
mov $1,r0
|
|
sys write; mes; 2
|
|
sys exit
|
|
|
|
dot: <.\0>
|
|
mes: <?\n>
|
|
|
|
.bss
|
|
obuf: .=.+100.
|
|
stbuf: .=.+40.
|
|
buf: .=.+18.
|
|
ch: .=.+1
|
|
ch1: .=.+1
|
|
|