⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lpd.s

📁 UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱昂氏unix源代码分析都是用的该版
💻 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 + -