; 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