Add original unix v6
This commit is contained in:
@@ -0,0 +1,204 @@
|
||||
/ write -- write to another user
|
||||
|
||||
.globl ttyn
|
||||
|
||||
cmp (sp)+,$2
|
||||
beq 1f
|
||||
bgt 2f
|
||||
mov $1,r0
|
||||
sys write; argm; eargm-argm
|
||||
sys exit
|
||||
2:
|
||||
movb *4(sp),ltty
|
||||
1:
|
||||
tst (sp)+
|
||||
mov (sp)+,r5
|
||||
sys open; utmp; 0
|
||||
bec 1f
|
||||
mov $1,r0
|
||||
sys write; film; efilm-film
|
||||
sys exit
|
||||
1:
|
||||
mov r0,ufil
|
||||
1:
|
||||
mov ufil,r0
|
||||
sys read; ubuf; 16.
|
||||
tst r0
|
||||
bne 2f
|
||||
jmp 8f
|
||||
2:
|
||||
tstb ltty
|
||||
beq 2f
|
||||
cmpb ltty,8.+ubuf
|
||||
bne 1b
|
||||
2:
|
||||
mov $ubuf,r3
|
||||
mov r5,r4
|
||||
mov $9.,r2
|
||||
2:
|
||||
dec r2
|
||||
beq 2f
|
||||
cmpb (r4)+,(r3)+
|
||||
beq 2b
|
||||
tstb -1(r4)
|
||||
bne 1b
|
||||
cmpb $' ,-1(r3)
|
||||
bne 1b
|
||||
2:
|
||||
movb 8.+ubuf,ttyno
|
||||
sys open; ttyx; 1
|
||||
bes 3f
|
||||
sys stat; ttyx; statbuf
|
||||
bes 3f
|
||||
bit $2,statbuf+4
|
||||
bne 2f
|
||||
3:
|
||||
mov $1,r0
|
||||
sys write; dnymes; ednymes-dnymes
|
||||
sys exit
|
||||
2:
|
||||
mov r0,ttyf
|
||||
clr r0
|
||||
jsr pc,ttyn
|
||||
mov r0,r3
|
||||
mov statbuf,r4
|
||||
mov ufil,r0
|
||||
sys seek; 0; 0
|
||||
1:
|
||||
mov ufil,r0
|
||||
sys read; ubuf; 16.
|
||||
tst r0
|
||||
beq unknown
|
||||
cmp r3,ubuf+8.
|
||||
bne 1b
|
||||
mov $ubuf,r0
|
||||
mov $8.,r1
|
||||
1:
|
||||
cmpb $' ,(r0)+
|
||||
beq 1f
|
||||
dec r1
|
||||
bne 1b
|
||||
1:
|
||||
neg r1
|
||||
add $8,r1
|
||||
mov r1,0f
|
||||
6:
|
||||
mov ttyf,r0
|
||||
sys write; mesg; emesg-mesg
|
||||
mov ttyf,r0
|
||||
sys 0; 5f
|
||||
.data
|
||||
5:
|
||||
sys write; ubuf; 0:2
|
||||
.text
|
||||
mov ttyf,r0
|
||||
sys write; qnl; 4
|
||||
sys signal; 2; 9f
|
||||
7:
|
||||
clr r0
|
||||
sys read; ch; 1
|
||||
tst r0
|
||||
beq 9f
|
||||
tst nlflg
|
||||
beq 1f
|
||||
cmp ch,$'!
|
||||
bne 1f
|
||||
sys fork
|
||||
br mshproc
|
||||
sys wait
|
||||
mov $1,r0
|
||||
sys write; excl; 2
|
||||
br 7b
|
||||
1:
|
||||
clr nlflg
|
||||
cmp ch,$'\n
|
||||
bne 1f
|
||||
inc nlflg
|
||||
1:
|
||||
mov ttyf,r0
|
||||
sys write; ch; 1
|
||||
br 7b
|
||||
8:
|
||||
movb (r5)+,ch
|
||||
beq 8f
|
||||
mov $1,r0
|
||||
sys write; ch; 1
|
||||
br 8b
|
||||
8:
|
||||
tstb ltty
|
||||
beq 8f
|
||||
mov $1,r0
|
||||
sys write; ltty-1; 2
|
||||
8:
|
||||
mov $1,r0
|
||||
sys write; errmsg; eerrmsg-errmsg
|
||||
sys exit
|
||||
9:
|
||||
mov ttyf,r0
|
||||
sys write; endmsg; eendmsg-endmsg
|
||||
sys exit
|
||||
|
||||
unknown:
|
||||
mov $"??,ubuf
|
||||
br 6b
|
||||
|
||||
mshproc:
|
||||
sys exec; msh; mshp
|
||||
sys exit
|
||||
|
||||
.data
|
||||
nlflg:
|
||||
1
|
||||
.text
|
||||
|
||||
mshp:
|
||||
msh
|
||||
minust
|
||||
0
|
||||
msh:
|
||||
</bin/sh\0>
|
||||
minust:
|
||||
<-t\0>
|
||||
argm:
|
||||
<Arg count\n>
|
||||
eargm:
|
||||
film:
|
||||
<Cannot open utmp\n>
|
||||
efilm:
|
||||
.data
|
||||
< > / is ltty -1
|
||||
ltty:
|
||||
.=.+1
|
||||
.text
|
||||
excl:
|
||||
<!\n>
|
||||
qnl:
|
||||
<...\n>
|
||||
.data
|
||||
ttyx:
|
||||
</dev/ttyx\0>
|
||||
ttyno = .-2
|
||||
.text
|
||||
utmp:
|
||||
</etc/utmp\0>
|
||||
endmsg:
|
||||
<EOT\n>
|
||||
eendmsg:
|
||||
errmsg:
|
||||
< not logged in.\n>
|
||||
eerrmsg:
|
||||
mesg:
|
||||
<\nMessage from >
|
||||
emesg:
|
||||
dnymes:
|
||||
<Permission denied.\n>
|
||||
ednymes:
|
||||
.even
|
||||
.bss
|
||||
|
||||
ttyf: .=.+2
|
||||
ubuf: .=.+16.
|
||||
statbuf:.=.+40.
|
||||
ch: .=.+2
|
||||
ufil: .=.+2
|
||||
signal = 48.
|
||||
Reference in New Issue
Block a user