	dec	2(r5) / decrement the character count
	jsr	r0,passc / move the character to core (user)
	br	1b / get next character

ret1:
	jmp	ret / return to caller via 'ret'

rppt: / read paper tape
	jsr	r0,pptic / gets next character in clist for ppt input and
			 / places
		br ret / it in r1; if there 1s no problem with reader, it
		       / also enables read bit in prs
	jsr	r0,passc / place character in users buffer area
	br	rppt

rmem: / transfer characters from memory to a user area of core
	mov	*u.fofp,r1 / save file offset which points to the char to
		           / be transferred to user
	inc	*u.fofp / increment file offset to point to 'next' char in
		        / memory file
	movb	(r1),r1 / get character from memory file, put it in r1
	jsr	r0,passc / move this character to the next byte of the
		         / users core area
	br	 rmem / continue
1:
rcrd:
	jmp	error / see 'error' routine

dskr:
	mov	(sp),r1 / i-number in r1
	jsr	r0,iget / get i-node (r1) into i-node section of core
	mov	i.size,r2 / file size in bytes in r2
	sub	*u.fofp,r2 / subtract file offset
	blos	ret
	cmp	r2,u.count / are enough bytes left in file to carry out read
	bhis	1f
	mov	r2,u.count / no, just read to end of file
1 :
	jsr	r0,mget / returns physical block number of block in file
		        / where offset points
	jsr	r0,dskrd / read in block, r5 points to 1st word of data in
		         / buffer
	jsr	r0,sioreg
2:
	movb	(r2)+,(r1)+ / move data from buffer into working core
		            / starting at u.base
	dec	r3
	bne	2b / branch until proper number of bytes are transferred
	tst	u.count / all bytes read off disk
	bne	dskr
	br	ret

passc:
	movb	r1,*u.base / move a character to the next byte of the
		           / users buffer
	inc	u.base / increment the pointer to point to the next byte
