home *** CD-ROM | disk | FTP | other *** search
- / 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.
-