
 *|   Version 0.03
 *|   asmtidy is designed to get rid of all those narsty APCS
 *|     register names that horrid gcc insists on using.
 *|   Run it last.
 *|   This has only been tested with ARM RISC OS GCC
 *|     versions 2.95.2 and 2.95.4
 *|   I accept no responsibility for it being useless.  :-)
 *|         <mech@toth.org.uk> 2002

 ONERROR PRINT" r":PRINT REPORT$+" at "+STR$ERL:END

 SYS "OS_GetEnv" TO env$
 pos%=INSTR(env$,"asmtidy")+8
 name$=RIGHT$(env$,LENenv$-pos%)
 fh%=OPENIN name$
 sz%=EXT#fh%
 CLOSE#fh%
 DIM b1% sz%
 DIM b2% sz%
 SYS "OS_File", 255, name$, b1%
 out%=OPENOUT name$
 ONERROR CLOSE#out%:PRINTREPORT$+" at "+STR$ERL:END

 b1pos%=0
 b2pos%=0
 REPEAT
 IF b1%?b1pos% = 9 b1%?b1pos% = 32
 b2%?b2pos% = b1%?b1pos%
 IF (b1%?b1pos% = 32) OR (b1%?b1pos% = ASC"-") OR (b1%?b1pos% = ASC"[") OR (b1%?b1pos% = ASC"{") THEN
   IF (b1%?(b1pos%+1) = ASC"_") AND (b1%?(b1pos%+2) = ASC"_") THEN
     r$=CHR$(b1%?(b1pos%+3))+CHR$(b1%?(b1pos%+4))
     CASE r$ OF
       WHEN "r0": PROCwstr( b2%+b2pos%+1, "r0" ) : b2pos%+=3 : b1pos%+=5
       WHEN "a1": PROCwstr( b2%+b2pos%+1, "r0" ) : b2pos%+=3 : b1pos%+=5
       WHEN "a2": PROCwstr( b2%+b2pos%+1, "r1" ) : b2pos%+=3 : b1pos%+=5
       WHEN "a3": PROCwstr( b2%+b2pos%+1, "r2" ) : b2pos%+=3 : b1pos%+=5
       WHEN "a4": PROCwstr( b2%+b2pos%+1, "r3" ) : b2pos%+=3 : b1pos%+=5
       WHEN "v1": PROCwstr( b2%+b2pos%+1, "r4" ) : b2pos%+=3 : b1pos%+=5
       WHEN "v2": PROCwstr( b2%+b2pos%+1, "r5" ) : b2pos%+=3 : b1pos%+=5
       WHEN "v3": PROCwstr( b2%+b2pos%+1, "r6" ) : b2pos%+=3 : b1pos%+=5
       WHEN "v4": PROCwstr( b2%+b2pos%+1, "r7" ) : b2pos%+=3 : b1pos%+=5
       WHEN "v5": PROCwstr( b2%+b2pos%+1, "r8" ) : b2pos%+=3 : b1pos%+=5
       WHEN "v6": PROCwstr( b2%+b2pos%+1, "r9" ) : b2pos%+=3 : b1pos%+=5
       WHEN "sl": PROCwstr( b2%+b2pos%+1, "r10") : b2pos%+=4 : b1pos%+=5
       WHEN "fp": PROCwstr( b2%+b2pos%+1, "r11") : b2pos%+=4 : b1pos%+=5
       WHEN "ip": PROCwstr( b2%+b2pos%+1, "r12") : b2pos%+=4 : b1pos%+=5
       WHEN "sp": PROCwstr( b2%+b2pos%+1, "r13") : b2pos%+=4 : b1pos%+=5
       WHEN "lr": PROCwstr( b2%+b2pos%+1, "r14") : b2pos%+=4 : b1pos%+=5
       WHEN "pc": PROCwstr( b2%+b2pos%+1, "r15") : b2pos%+=4 : b1pos%+=5
       WHEN "f0": PROCwstr( b2%+b2pos%+1, r$ ) : b2pos%+=3 : b1pos%+=5
       WHEN "f1": PROCwstr( b2%+b2pos%+1, r$ ) : b2pos%+=3 : b1pos%+=5
       WHEN "f2": PROCwstr( b2%+b2pos%+1, r$ ) : b2pos%+=3 : b1pos%+=5
       WHEN "f3": PROCwstr( b2%+b2pos%+1, r$ ) : b2pos%+=3 : b1pos%+=5
       WHEN "f4": PROCwstr( b2%+b2pos%+1, r$ ) : b2pos%+=3 : b1pos%+=5
       WHEN "f5": PROCwstr( b2%+b2pos%+1, r$ ) : b2pos%+=3 : b1pos%+=5
       WHEN "f6": PROCwstr( b2%+b2pos%+1, r$ ) : b2pos%+=3 : b1pos%+=5
       WHEN "f7": PROCwstr( b2%+b2pos%+1, r$ ) : b2pos%+=3 : b1pos%+=5
       OTHERWISE ERROR 0,"Damn! "+r$+CHR$(b1%?(b1pos%+3))
     ENDCASE
   ELSE
     b2pos%+=1:b1pos%+=1
   ENDIF
 ELSE b2pos%+=1:b1pos%+=1
 ENDIF
 UNTIL b1pos%>=sz%

 b2sz%=b2pos%

 pos%=0
 REPEATline$="":REPEATchr$=CHR$(b2%?pos%):line$+=chr$:pos%+=1:UNTIL chr$=CHR$10 OR pos%=b2sz%

 BPUT#out%,LEFT$(line$)
 UNTIL pos%>=b2sz%

 CLOSE#out%
 END


DEFPROCwstr(where%,what$)
 WHILE LEN(what$)>0
   ?where%=ASCwhat$
   where%+=1
   what$=RIGHT$(what$,(LENwhat$-1))
 ENDWHILE
 ENDPROC
