;	File:	pfileIO3.s
;	Copyright:	University of Nijmegen
;	Written by:	John van Groningen
;	Machine:	Power Macintosh

	string	asis

; MACOSX	set	1

d0:	set	r24
d1:	set	r25
d2:	set	r26
d3:	set	r27
d4:	set	r28
d5:	set	r29
d6:	set	r30
d7:	set	r31
a0:	set	r23
a1:	set	r22
a2:	set	r21
a3:	set	r20
a4:	set	r19
a5:	set	r18
a6:	set	r17

o0:	set	r3
o1:	set	r4
o2:	set	r5
o3:	set	r6
o4:	set	r7
o5:	set	r8

g0:	set	r11
g1:	set	r12
g2:	set	r13
g3:	set	r14
g4:	set	r15
g5:	set	r16

	include	'pmacros.a'

	csect	data{RW}
	align	3
tmp_real:	dc.d	"0.0"
freadstring_error:
	dc.b	'Error in freadsubstring parameters.'
	dc.b	13,0
	dc.b	0,0,0
fwritestring_error:
	dc.b	'Error in fwritesubstring parameters.'
	dc.b	13,0
	dc.b	0,0

	csect	text{PR}	

	export	stdioF
	export	stderrF
	export	openF
	export	closeF
	export	reopenF
	export	readFC
	export	readFI
	export	readFR
	export	readFS
	export	readFString
	export	readLineF
	export	writeFC
	export	writeFI
	export	writeFR
	export	writeFS
	export	writeFString
	export	__endF=>'endF'
	export	errorF
	export	positionF
	export	seekF
	export	shareF
	
	export	openSF
	export	readSFC
	export	readSFI
	export	readSFR
	export	readSFS
	export	readLineSF
	export	endSF
	export	positionSF
	export	seekSF

	import	collect_0
	import	collect_1
	import	__STRING__

	csect	.stdioF{PR}
	import	.open_stdio
stdioF:	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.open_stdio
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	mr	d1,r3
	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.stderrF{PR}
	import	.open_stderr
stderrF:	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.open_stderr
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	mr	d1,r3
	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.openF{PR}
	import	.open_file
openF:	mr	o1,d0
	addi	o0,a0,4

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.open_file
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	addic.	d1,o0,0
	li	d0,-1
	blt	openF_1
	li	d2,-1
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

openF_1:
	li	d2,0
	lwz	r0,0(sp)
	neg	d1,d1
	addi	sp,sp,4
	blr	

	csect	.closeF{PR}
	import	.close_file
closeF:	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.close_file
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	mr	d0,o0
	
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.reopenF{PR}
	import	.re_open_file
reopenF:
	mr	o0,d2
	mr	o1,d0

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.re_open_file
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0
	
	mr	d1,d2
	mr	d2,o0
	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.readFC{PR}
	import	.file_read_char
readFC:
	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_read_char
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	mr	d2,o0
	cmpwi	0,o0,-1
	li	d0,-1
	beq	readFC_eof

	li	d3,-1
	
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

readFC_eof:
	li	d2,0
	li	d3,0

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.readFI{PR}
	import	.file_read_int
readFI:
	subi	sp,sp,4
	mr	o1,sp
	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_read_int
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0
	
	lwz	d2,0(sp)
	li	d0,-1
	mr	d3,o0
	lwz	r0,4(sp)
	addi	sp,sp,8
	blr	

	csect	.readFR{PR}
	import	.file_read_real
readFR:
	lea	o1,tmp_real
	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_read_real
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	lea	o1,tmp_real
	mr	d2,o0
	lfd	f14,0(o1)
	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	





	csect	.readFString{PR}
	import	.file_read_characters
	import	print_error
readFString:
	lwz	d4,4(a0)
	cmplw	0,d3,d4
	bge	readFString_error

	sub	o0,d4,d3
	cmplw	0,d2,o0
	bgt	readFString_error
	
	addi	o2,a0,8
	stwu	d2,-4(sp)
	add	o2,o2,d3
	mr	o1,sp
	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_read_characters
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	mr	d2,o0
	li	d0,-1

	lwz	r0,4(sp)
	addi	sp,sp,8
	blr	

readFString_error:
	lea	o0,freadstring_error
	b	print_error

	csect	.readFS{PR}
 if 0
	import	.file_read_string
 else
	import	.file_read_characters
 endif
readFS:
	addi	d5,d0,8+3
	srwi	d5,d5,2
	sub.	d7,d7,d5
	blt	readFS_gc
readFS_r_gc:
	add	d7,d7,d5
	mr	d4,d2
	
	lea	o0,__STRING__2
	addi	d3,a6,4
	stwu	o0,4(a6)
 if 0
	addi	o2,a6,4
	mr	o1,d0
 else
	addi	o2,a6,8
	stw	d0,4(a6)
	addi	o1,a6,4
 endif
	mr	o0,d2

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
 if 0
	bl	.file_read_string
 else
	bl	.file_read_characters
 endif
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

readFS_end:
	addi	d0,o0,3
	clrrwi	d0,d0,2
	addi	a6,a6,4
	add	a6,a6,d0
	srwi	d0,d0,2
	baddi	d0,2
	bsub	d7,d0

	mr	a0,d3
	mr	d1,d4
	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

readFS_gc:
	mflr	r0
	bl	collect_0
	b	readFS_r_gc

	csect	.readLineF{PR}
	import	.file_read_line
readLineF:
	li	d5,32+2
	cmpw	0,d7,d5
	blt	readLineF_gc

readLineF_r_gc:
	mr	d4,d1
	
	lea	o0,__STRING__2
	addi	d3,a6,4
	stwu	o0,4(a6)
	
	addi	o2,a6,8
	subi	o1,d7,2
	slwi	o1,o1,2
	mr	o0,d4

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_read_line
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	addic.	d0,o0,0
	stw	d0,4(a6)
	bge	readFS_end

	subi	d0,d7,2
	slwi	d0,d0,2
	stwu	d0,4(a6)

readLineF_lp:
	add	a6,a6,d0

	lwz	d5,4(d3)
	mr	a0,d3
	srwi	d5,d5,2
	addi	d5,d5,2+32
	neg	d7,d5

	mflr	r0
	bl	collect_1

	mr	a1,a0
	add	d7,d7,d5
	lwzu	d0,4(a1)
	addi	d1,d0,3
	srwi	d1,d1,2
	subi	d7,d7,2
	sub	d7,d7,d1
	
	lea	o0,__STRING__2
	subic.	d1,d1,1

	addi	d3,a6,4
	stw	o0,4(a6)
	stwu	d0,8(a6)
	blt	end_copy_string1

copy_st_lp1:
	lwzu	g1,4(a1)
	subic.	d1,d1,1
	stwu	g1,4(a6)
	bge	copy_st_lp1
end_copy_string1:

	addi	o2,a6,4
	slwi	o1,d7,2
	mr	o0,d4

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_read_line
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	addic.	d0,o0,0
	lwz	g1,4(d3)
	blt	readLineF_again

	mr	a0,d3
	add	g1,g1,d0
	stw	g1,4(d3)

	addi	d1,d0,3
	srwi	d1,d1,2
	sub	d7,d7,d1
	slwi	d1,d1,2
	add	a6,a6,d1
	
	mr	d1,d4
	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

readLineF_gc:
	sub	d7,d7,d5
	mflr	r0
	bl	collect_0
	add	d7,d7,d5
	b	readLineF_r_gc

readLineF_again:
	slwi	d0,d7,2
	add	g1,g1,d0
	stw	g1,4(d3)
	b	readLineF_lp

	csect	.writeFC{PR}
	import	.file_write_char
writeFC:
	mr	o1,d1
	mr	o0,d2

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_write_char
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.writeFI{PR}
	import	.file_write_int
writeFI:
	mr	o1,d1
	mr	o0,d2

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_write_int
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.writeFR{PR}
	import	.file_write_real
writeFR:
	mr	o2,d1
	fmr	f1,f14

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_write_real
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.writeFS{PR}
 if 0
	import	.file_write_string
 else
	import	.file_write_characters
 endif
writeFS:
 if 0
	mr	o1,d1
	addi	o0,a0,4
 else
	lwz	o1,4(a0)
	mr	o2,d1
	addi	o0,a0,8
 endif
	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
 if 0
	bl	.file_write_string
 else
	bl	.file_write_characters
 endif
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

 if 1
	csect	.writeFString{PR}
	import	.file_write_characters
	import	print_error
writeFString:
	lwz	d4,4(a0)
	cmplw	0,d3,d4
	bge	writeFString_error

	sub	o0,d4,d3
	cmplw	0,d2,o0
	bgt	writeFString_error

	mr	o2,d1
	addi	o0,a0,8
	mr	o1,d2
	add	o0,o0,d3

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_write_characters
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

writeFString_error:
	lea	o0,fwritestring_error
	b	print_error
 endif

	csect	.__endF{PR}
	import	.file_end
__endF:
	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_end
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	li	d0,-1
	mr	d2,o0

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.errorF{PR}
	import	.file_error
errorF:
	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_error
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	mr	d2,o0
	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.positionF{PR}
	import	.file_position
positionF:
	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_position
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	mr	d2,o0
	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.seekF{PR}
	import	.file_seek
seekF:
	mr	o2,d0
	mr	o1,d1
	mr	o0,d3
	mr	d1,d3

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_seek
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	mr	d2,o0
	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.shareF{PR}
	import	.file_share
shareF:
	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_share
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0
	
	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.openSF{PR}
	import	.open_s_file
openSF:
	mr	o1,d0
	addi	o0,a0,4

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.open_s_file
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	addic.	d1,o0,0
	li	d0,0
	blt	openSF_1
	li	d2,-1
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

openSF_1:
	li	d2,0
	lwz	r0,0(sp)
	neg	d1,d1
	addi	sp,sp,4
	blr	

	csect	.readSFC{PR}
	import	.file_read_s_char
readSFC:
	stwu	d0,-4(sp)
	mr	o1,sp
	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_read_s_char
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	mr	d2,o0
	cmpwi	0,o0,-1
	lwz	d0,0(sp)
	beq	readSFC_eof

	li	d3,-1
	lwz	r0,4(sp)
	addi	sp,sp,8
	blr	

readSFC_eof:
	li	d2,0
	li	d3,0
	lwz	r0,4(sp)
	addi	sp,sp,8
	blr	

	csect	.readSFI{PR}
	import	.file_read_s_int
readSFI:
	stwu	d0,-4(sp)
	mr	o2,sp
	subi	sp,sp,4
	mr	o1,sp
	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_read_s_int
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	lwz	d2,0(sp)
	lwz	d0,4(sp)
	mr	d3,o0

	lwz	r0,8(sp)
	addi	sp,sp,12
	blr	

	csect	.readSFR{PR}
	import	.file_read_s_real
readSFR:
	stwu	d0,-4(sp)
	mr	o2,sp
	lea	o1,tmp_real
	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_read_s_real
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	lea	g1,tmp_real
	lwz	d0,0(sp)
	lfd	f14,0(g1)
	mr	d2,o0
	lwz	r0,4(sp)
	addi	sp,sp,8
	blr	

	csect	.readSFS{PR}
	import	.file_read_s_string
readSFS:
	addi	d5,d0,8+3
	srwi	d5,d5,2
	sub.	d7,d7,d5
	blt	readSFS_gc
readSFS_r_gc:
	add	d7,d7,d5
	mr	d4,d2

	lea	o0,__STRING__2
	addi	d3,a6,4
	stwu	o0,4(a6)

	stwu	d1,-4(sp)
	mr	o3,sp
	addi	o2,a6,4
	mr	o1,d0
	mr	o0,d2

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_read_s_string
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

readSFS_end:
	addi	d0,d0,3
	clrrwi	d0,d0,2
	addi	a6,a6,4
	add	a6,a6,d0
	srwi	d0,d0,2
	baddi	d0,2
	bsub	d7,d0

	mr	a0,d3
	mr	d1,d4
	lwz	d0,0(sp)
	lwz	r0,4(sp)
	addi	sp,sp,8
	blr	

readSFS_gc:
	mflr	r0
	bl	collect_0
	b	readSFS_r_gc

	csect	.readLineSF{PR}
	import	.file_read_s_line
readLineSF:
	li	d5,32+2
	cmpw	0,d7,d5
	blt	readLineSF_gc

readLineSF_r_gc:
	stwu	d0,-4(sp)
	mr	d4,d1

	lea	o0,__STRING__2
	addi	d3,a6,4
	stwu	o0,4(a6)

	mr	o3,sp
	addi	o2,a6,8
	subi	o1,d7,2
	slwi	o1,o1,2
	mr	o0,d4

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_read_s_line
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	addic.	d0,o0,0
	stw	d0,4(a6)
	bge	readSFS_end

	subi	d0,d7,2
	slwi	d0,d0,2
	stwu	d0,4(a6)

readLineSF_lp:
	add	a6,a6,d0

	lwz	d5,4(d3)
	mr	a0,d3
	srwi	d5,d5,2
	addi	d5,d5,2+32
	neg	d7,d5

	mflr	r0
	bl	collect_1

	mr	a1,a0
	add	d7,d7,d5
	lwzu	d0,4(a1)
	addi	d1,d0,3
	srwi	d1,d1,2
	subi	d7,d7,2
	sub	d7,d7,d1
	
	lea	o0,__STRING__2
	subic.	d1,d1,1

	addi	d3,a6,4
	stw	o0,4(a6)
	stwu	d0,8(a6)
	blt	end_copy_string2

copy_st_lp2:
	lwzu	g1,4(a1)
	subic.	d1,d1,1
	stwu	g1,4(a6)
	bge	copy_st_lp2
end_copy_string2:

	mr	o3,sp
	addi	o2,a6,4
	slwi	o1,d7,2
	mr	o0,d4

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_read_s_line
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0

	addic.	d0,o0,0
	lwz	g1,4(d3)
	blt	readLineSF_again

	mr	a0,d3
	add	g1,g1,d0
	stw	g1,4(d3)

	addi	d1,d0,3
	srwi	d1,d1,2
	sub	d7,d7,d1
	slwi	d1,d1,2
	add	a6,a6,d1
	
	lwz	d0,0(sp)
	mr	d1,d4
	lwz	r0,4(sp)
	addi	sp,sp,8
	blr	

readLineSF_gc:
	sub	d7,d7,d5
	mflr	r0
	bl	collect_0
	add	d7,d7,d5
	b	readLineSF_r_gc

readLineSF_again:
	slwi	d0,d7,2
	add	g1,g1,d0
	stw	g1,4(d3)
	b	readLineSF_lp

	csect	.endSF{PR}
	import	.file_s_end
endSF:
	mr	o1,d0
	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_s_end
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0
	
	mr	d0,o0

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.positionSF{PR}
	import	.file_s_position
positionSF:
	mr	o1,d0
	mr	o0,d1

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_s_position
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0
	
	mr	d0,o0

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	csect	.seekSF{PR}
	import	.file_s_seek
seekSF:
	stwu	d2,-4(sp)
	mr	o3,sp

	mr	o2,d0
	mr	o1,d1
	mr	o0,d3
	mr	d1,d3

	mflr	r0
 if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
	stw	r0,60(sp)
 else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 endif
	bl	.file_s_seek
	lwz	r0,60(sp)
 if MACOSX
	lwz	sp,0(sp)
 else
	addi	sp,sp,64
 endif
	mtlr	r0
	
	lwz	d0,0(sp)
	mr	d2,o0

	lwz	r0,4(sp)
	addi	sp,sp,8
	blr	

	macro
	te	&address
	tc	&address{TC},&address
	endm

	toc

	te	tmp_real
	te	freadstring_error
	te	fwritestring_error
	tc	__STRING__2{TC},__STRING__+2