📄 lpd.s
字号:
/ lpd -- Line Printer daemon.globl fopen, getc.globl fcreat, putc, flush.globl switch sys signal; 1; 1 sys signal; 2; 1 sys signal; 3; 1 / ignore quit,intr,hup sys stat; lock; buf bec 2f sys creat; lock; 0 bes 2f sys open; lpd; 0 bes 3f mov r0,r11: mov r1,r0 sys read; dbuf; 16. bes 3f tst r0 beq 3f tst dbuf beq 1b cmp dbuf+2,$"df bne 1b sys fork br retry sys exit3: sys unlink; lock2: sys exit/ get line printerretry: jsr r5,aclose mov $lpr,r0 jsr r5,fcreat; print bes error sys chdir; lpd bes error sys open; lpd; 0 bes error mov r0,dfi br loopdone: sys unlink; lock sys exiterror: jsr r5,aclose mov $10.,r0 sys sleep sys stat; lock; buf bes done / die if lock is gone br retry/ look in directory for workloop: mov dfi,r0 sys seek; 0; 01: mov dfi,r0 sys read; dbuf; 16. bes error tst r0 beq done / only non-error return tst dbuf beq 1b mov $dbuf+2,r0 cmp (r0),$"df / look for daemon file bne 1b/ found prototype file jsr r5,fopen; proto bes 1b/ copy a line into buf/ only work is expansion of tabsloop1: mov $buf,r11: jsr r5,getc; proto bes eloop1 movb r0,(r1) cmp r0,$'\t beq 2f cmpb (r1)+,$'\n bne 1b br 1f2: movb $' ,(r1)+ cmp r1,$buf+8. beq 1b cmp r1,$buf+16. bhis 1b br 2b1: movb buf,r0 jsr r5,switch; sptab/ done with a prototype file/ look for U's in second passeloop1: mov proto,r0 sys seek; 0; 0 br 2f1: jsr r5,getc; proto bes 1f3: cmp r0,$'\n bne 1b2: jsr r5,getc; proto bes 1f cmp r0,$'U bne 3b mov $buf,r13: jsr r5,getc; proto bes 1f movb r0,(r1)+ cmp r0,$'\n bne 3b clrb -(r1) sys unlink; buf br 2b1: mov proto,r0 sys close sys unlink; dbuf+2 br loop/ list of special characters/ switchoutsptab: 'L; literal 'B; binary 'F; form 'U; loop1 / unlink on second pass 0; 0literal: jmp loop1form: clrb -(r1) mov $buf+1,r0 jsr r5,fopen; insert bes loop1 mov $14,r0 jsr r5,putc; print br 1fbinary: clrb -(r1) mov $buf+1,r0 jsr r5,fopen; insert bes loop11: jsr r5,getc; insert bes 1f jsr r5,putc; print br 1b1: jsr r5,flush; print mov insert,r0 sys close br loop1aclose: mov $9.,r11: mov r1,r0 sys close dec r1 bge 1b rts r5lpr: </dev/lp\0>lock: </usr/lpd/lock\0>lpd: </usr/lpd\0> .even.bssch: .=.+2dfi: .=.+2dbuf: .=.+18.print: .=.+518.proto: .=.+518.insert: .=.+518.buf: .=.+400.sleep = 35.signal = 48.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -