summaryrefslogblamecommitdiff
path: root/macho/pfileIO3.a
blob: f65a56f922abb06447b47ceb834c6713578271b2 (plain) (tree)







































































































































                                                      
                         




























                               
                         



































                               
                         




























                               
                         





























                               
                         










































                               
                         





























                               
                         















































                                     
                         



























































                                     
                         

























































                               
                         































































                                
                         
























































                                
                         




























                               
                         




























                                
                         









































                                      
                         








































                                      
                         
































                                     
                         




























                               
                         




























                               
                         































                               
                         




























                               
                         




























                               
                         






































                                 
                         










































                                
                         
































                                 
                         













































                                   
                         


























































                                 
                         
































































                                 
                         























































                                
                         




























                                
                         

































                               
                         











                        
# comment	File:	cgpfileIO3.s
# comment	Copyright:	University of Nijmegen
# comment	Written by:	John van Groningen
# comment	Machine:	Power Macintosh

MACOSX	=	1

#define	sp	r1

#define	d0	r24
#define	d1	r25
#define	d2	r26
#define	d3	r27
#define	d4	r28
#define	d5	r29
#define	d6	r30
#define	d7	r31

#define	a0	r23
#define	a1	r22
#define	a2	r21
#define	a3	r20
#define	a4	r19
#define	a5	r18
#define	a6	r17

#define	o0	r3
#define	o1	r4
#define	o2	r5
#define	o3	r6
#define	o4	r7
#define	o5	r8

#define	g2	r9
#define	g3	r10

#define	g0	r11
#define	g1	r12

#define	int_reg	r16
#define	char_reg	r15
#define	real_reg	r14
#define	bool_reg	r13

#include	"pmacros.a"

	.data
	.align	3
tmp_real:	.double	0.0
freadstring_error:
	.ascii	"Error in freadsubstring parameters."
	.byte	13,0
	.byte	0,0,0
fwritestring_error:
	.ascii	"Error in fwritesubstring parameters."
	.byte	13,0
	.byte	0,0

	.text

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

	.globl	collect_0
	.globl	collect_1
	.globl	__STRING__

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	





	.text
	.globl	_file_read_characters
	.globl	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

	.text
 .if 0
	.globl	_file_read_string
 .else
	.globl	_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

	.text
	.globl	_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

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
 .if 0
	.globl	_file_write_string
 .else
	.globl	_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
	.text
	.globl	_file_write_characters
	.globl	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

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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

	.text
	.globl	_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

	.text
	.globl	_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	

	.text
	.globl	_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	

	.text
	.globl	_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