	beq	1f
	clrb	imod / if it has, we must write the new i-node out on disk
	mov	r1,-(sp)
	mov	cdev,-(sp)
	mov	ii,r1
	mov	idev,cdev
	jsr	r0,icalc; 1
	mov	(sp)+,cdev
	mov	(sp)+,r1
1:
	tst	r1 / is new i-number non zero
	beq	2f / branch if r1=0
	tst	cdev / is the current device number non zero (i.e., device
	       	     / =/ drum)
	bne	1f / branch 1f cdev =/ 0
	cmp	r1,mnti / mnti is the i-number of the cross devlce
			 / file (root directory of mounted devlce)
	bne	1f
	mov	mntd,cdev / make mounted device the current device
	mov	rootdir,r1
1:
	mov	r1,ii
	mov	cdev,idev
	jsr	r0,icalc; 0 / read in i-node ii
2:
	mov	ii,r1
	rts	r0

icalc: / i-node i is located in block (i+31.)/16. and begins 32.*
       / (i+31)mod16 bytes from its start
	add	$31.,r1 / add 31. to i-number
	mov	r1,-(sp) / save i+31. on stack
	asr	r1 / divide by 16.
	asr	r1
	asr	r1
	asr	r1 / r1 contains block number of block in which
		   / i-node exists
	jsr	r0,dskrd / read in block containing i-node i.
	tst	(r0)
	beq	1f / branch to wslot when argument in icalc call = 1
	jsr	r0,wslot / set up data buffer for write (will be same buffer
			 / as dskrd got)
1:
	bic	$!17,(sp) / zero all but last 4 bits; gives (i+31.) mod 16
	mov	(sp)+,mq / calculate offset in data buffer; 32.*(i+31.)mod16
	mov	$5,lsh / for i-node i.
	add	mq,r5 / r5 points to first word in i-node i.
	mov	$inode,r1 / inode is address of first word of current i-node
	mov	$16.,r3
	tst	(r0)+ / branch to 2 fwhen argument in icalc call = 0
	beq	2f / r0 now contains proper return address for rts r0
1:
	mov	(r1)+,(r5)+ / over write old i-node
	dec	r3
	bgt	1b
	jsr	r0,dskwr / write inode out on device
