Ultrix-3.1/sys/sys/mkuchar.c

Compare this file to the similar file:
Show the results in this format:


/**********************************************************************
 *   Copyright (c) Digital Equipment Corporation 1984, 1985, 1986.    *
 *   All Rights Reserved. 					      *
 *   Reference "/usr/src/COPYRIGHT" for applicable restrictions.      *
 **********************************************************************/

/*
 * SCCSID: @(#)mkuchar.c	3.0	4/21/86
 */
#include <sys/param.h>
#include <sys/dir.h>
#include <sys/user.h>

main()
{
	printf(".globl	_uchar\n");
	printf(".text\n");
	printf("_uchar:\n");
	printf("~~uchar:\n");
	printf("	jsr	r5,csv\n");
	printf("	tst	%o+_u\n", &((struct user *)0)->u_sbuf);
	printf("	jeq	1f\n");
	printf("	jsr	pc,_symchar\n");
	printf("	tst	r0\n");
	printf("	jge	2f\n");
	printf("1:\n");
	printf("	mov	%o+_u,(sp)\n", &((struct user *)0)->u_dirp);
	printf("	inc	%o+_u\n", &((struct user *)0)->u_dirp);
	printf("	jsr	pc,*$_fubyte\n");
	printf("	cmp	$-1,r0\n");
	printf("	jne	1f\n");
	printf("	movb	$16,%o+_u\n", &((struct user *)0)->u_error);
	printf("	jbr	2f\n");
	printf("1:\n");
	printf("	bit	$200,r0\n");
	printf("	jeq	2f\n");
	printf("	movb	$26,%o+_u\n", &((struct user *)0)->u_error);
	printf("2:\n");
	printf("	jmp	cret\n");

	printf("/\n");
	printf("/ srchd - search for entry for nami\n");
	printf("/\n");
	printf("_srchd:\n");
	printf("	mov	r2,-(sp)\n");
	printf("	mov	4(sp),r0	/ r0 - successive directory entries\n");
	printf("	mov	6(sp),r1	/ r1 - what we want to match\n");
	printf("	mov	10(sp),r2	/ r2 is address of do\n");
	printf("1:\n");
	printf("	tst	(r0)		/ check inode\n");
	printf("	beq	4f		/ if the inode is zero\n");
	printf("	cmp	2(r0),(r1)	/ compare first two chars\n");
	printf("	bne	2f		/ if no match\n");
	printf("	cmp	4(r0),2(r1)	/ compare next two chars\n");
	printf("	bne	2f		/ no match\n");
	printf("	cmp	6(r0),4(r1)\n");
	printf("	bne	2f\n");
	printf("	cmp	10(r0),6(r1)\n");
	printf("	bne	2f\n");
	printf("	cmp	12(r0),10(r1)\n");
	printf("	bne	2f\n");
	printf("	cmp	14(r0),12(r1)\n");
	printf("	bne	2f\n");
	printf("	cmp	16(r0),14(r1)\n");
	printf("	beq	3f		/ if a match\n");
	printf("2:\n");
	printf("	add	$%d.,r0\n", sizeof (struct direct));
	printf("	bit	$0%o,r0	/ BMASK test for block offset\n", BMASK);
	printf("	bne	1b		/ more to go...\n");
	printf("	clr	r0		/ indicate failed search\n");
	printf("3:\n");
	printf("	mov	(sp)+,r2	/ restore r2\n");
	printf("	rts	pc\n");
	printf("4:\n");
	printf("	tst	(r2)		/ test to see if already flagged\n");
	printf("	bne	2b		/ if we have\n");
	printf("	mov	r0,(r2)		/ otherwise, write this entry in\n");
	printf("	add	$%d.,(r2)\n", sizeof (struct direct));
	printf("	br	2b\n");
	exit(0);
}