/ 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