AUSAM/source/S/prstop.s
/ abort/restart/repeat line printer daemons
kill= 37. / (not in assembler)
cmp (sp),$1 / default printer?
ble 1f
cmpb *4(sp),$'-
bne 2f
inc 4(sp)
2:
cmpb *4(sp),$'1
blt 8f
cmpb *4(sp),$'3
bgt 8f
movb *4(sp),locpos
1:
mov 2(sp),r2 / save how called
sys open; lock; 0 / pid of lpd, uid kept in this file
bec 0f / if opened ok
mov $2,r0
sys write; m1; m1l / "Lpd not active"
sys exit
0:
sys read; pid; 4 / collect pid
bes 1f / if error
cmp r0,$4 / read 4 bytes ?
beq 0f / yep. ok.
1: mov $2,r0
sys write; m2; m2l / "Read failure"
sys exit
0:
cmp $-1,uid / is printer active
bne 0f
mov $2,r0
sys write; m6; m6l / "Printer inactive"
sys exit
0:
sys getuid / check if uids match
tst r1
beq 0f
cmp r1,uid / real uid must match with that in file
beq 0f
mov $2,r0
sys write;m7;m7l / "Permission denied"
sys exit
0:
mov pid,r0
cmpb (r2),$'p / called as "prstop" ?
beq 0f / yep. skip this bit.
inc signo / make into "restart" sig.
cmpb 2(r2),$'s /restart not repeat
beq 0f
inc signo
0: sys indir; kil / send signal
bec 0f / if sent ok
mov $2,r0
sys write; m3; m3l / "Unable to signal lpd"
sys exit
0:
mov $2,r0
sys write; m4; m4l / "Done"
clr r0
sys exit
8:
mov $2,r0
sys write; m5; m5l / "Bad arg"
sys exit
.data
kil: sys kill; signo: 5 / increment for restart
lock: </tmp/lpd/lock>
locpos: <\0\0>
m1: <Lpd not active\n>
m1l= .-m1
m2: <Read failure\n>
m2l= .-m2
m3: <Unable to signal lpd\n>
m3l= .-m3
m4: <Done\n>
m4l= .-m4
m5: <Bad arg\n>
m5l= .-m5
m6: <Printer inactive\n>
m6l= .-m6
m7: <Permission denied\n>
m7l= .-m7 / KFH fix
.bss
pid: .=.+2
uid: .=.+2