Create readable text `.bas' for each tokenized BASIC `,ffb' file.
[ssr] / StraySrc / Utilities / templaof.bas
diff --git a/StraySrc/Utilities/templaof.bas b/StraySrc/Utilities/templaof.bas
new file mode 100644 (file)
index 0000000..254f4c1
--- /dev/null
@@ -0,0 +1,33 @@
+REM crunched "b.templaof"
+ONERRORERROREXT0,REPORT$+" ["+STR$(ERL)+"]"
+SYS16TOA_$:IFINSTR(A_$,"-quit")=0THENERROR1,"templAOF must be started using *Run"
+A_$=MID$(A_$,INSTR(A_$,"""")+1):A_$=MID$(A_$,INSTR(A_$," ")+1):A_$=LEFT$(A_$,INSTR(A_$,"""")-1):B_$=FNC_(A_$):D_$=FNC_(A_$):E_$=FNC_(A_$):IFB_$=""ORD_$=""THENERROR0,"Syntax: templAOF <in> <out> [<header>]"
+IFE_$<>""THEN
+F_%=OPENOUT(E_$):BPUT#F_%,";":BPUT#F_%,"; Template symbols [generated by templAOF]":BPUT#F_%,";":BPUT#F_%,"":BPUT#F_%,CHR$(9)+CHR$(9)+"["+CHR$(9)+":LNOT::DEF:tpl__dfn":BPUT#F_%,CHR$(9)+CHR$(9)+"GBLL"+CHR$(9)+"tpl__dfn":BPUT#F_%,"":ONERRORCLOSE#F_%:ERROREXT0,REPORT$+" ["+STR$(ERL)+"]"
+ELSE:F_%=0
+ENDIF:PROCG_:LIBRARY"libs:bas":PROCbas_init:SYS8,17,B_$TO,,,,H_%:DIMB_% H_%:SYS8,16,B_$,B_%,0:PROCbas_aofInit(H_%*5):FORpass=4TO6STEP2:[opt pass:FNpass:FNarea("Resources$$Data","CODE,READONLY"):]:I_%=B_%+16:WHILEI_%!0:CASEI_%!8OF
+WHEN1:PROCJ_(I_%!0+B_%,I_%)
+OTHERWISE:IFF_%THENCLOSE#F_%
+ERROR1,"Template type "+STR$(I_%!0)+" unrecognised"
+ENDCASE:I_%+=24:ENDWHILE:NEXT:PROCbas_aofSaveAs(D_$):IFF_%THEN
+BPUT#F_%,"":BPUT#F_%,CHR$(9)+CHR$(9)+"]":BPUT#F_%,"":BPUT#F_%,CHR$(9)+CHR$(9)+"END":CLOSE#F_%:SYS8,1,E_$,&FFFFFF3A,&BD896000,,3
+ENDIF:END
+DEFPROCJ_(K_%,I_%):L_$=FNM_(I_%+12):[opt pass:.template:]:A%=O%:B%=I_%:C%=B_%:l%=USR(N_)-A%:P%+=l%:O%+=l%:[opt pass:FNalign:FNexportAs("template","tpl_"+L_$):]:IFF_%<>0ANDpass=6THENBPUT#F_%,CHR$(9)+CHR$(9)+"IMPORT"+CHR$(9)+"tpl_"+L_$
+ENDPROC
+DEFFNM_(a%):LOCALs$:WHILE?a%>=32:s$+=CHR$(?a%):a%+=1:ENDWHILE:=s$
+DEFFNC_(RETURNO_$):LOCALC_$:IFINSTR(O_$," ")THEN
+C_$=LEFT$(O_$,INSTR(O_$," ")-1):O_$=MID$(O_$,INSTR(O_$," ")+1)
+ELSE:C_$=O_$:O_$=""
+ENDIF:=C_$
+DEFFNP_(O_$):LOCALi%:$q%=O_$:FORi%=0TOLEN(O_$)-1:IFq%?i%>=97ANDq%?i%<=122THENq%?i%-=32
+NEXT:=$q%
+DEFPROCG_:DIMQ_% 4096:FORo=0TO2STEP2:P%=Q_%:[opt o:.N_:stmfd r13!,{r14}:add r11,r0,#12:mov r10,r0:mov r9,r2:ldr r14,[r1,#0]:add r8,r9,r14:mov r14,#64:orr r14,r14,#1<<28:str r14,[r11],#4:ldr r0,[r8,#56]:add r1,r8,#72:bl R_:ldr r7,[r8,#84]
+add r6,r8,#88:.S_:subs r7,r7,#1:ldrcs r0,[r6,#16]:addcs r1,r6,#20:blcs R_:addcs r6,r6,#32:bcs S_:sub r14,r11,r10:str r14,[r10,#0]:mov r14,r8:mov r7,#72:.S_:subs r7,r7,#16:ldmcsia r14!,{r0-r3}:stmcsia r11!,{r0-r3}:bcs S_
+ldmia r14!,{r0,r1}:stmia r11!,{r0,r1}:ldr r0,[r8,#56]:add r1,r8,#72:mov r5,#0:bl T_:ldr r7,[r8,#84]:str r7,[r11],#4:add r6,r8,#88:.S_:subs r7,r7,#1:ldmcsia r6,{r0-r3,r14}:stmcsia r11!,{r0-r3,r14}:ldrcs r0,[r6,#16]
+addcs r1,r6,#20:blcs T_:addcs r6,r6,#32:bcs S_:sub r14,r11,r10:str r14,[r10,#4]:ldr r0,[r8,#56]:add r1,r8,#72:bl U_:ldr r7,[r8,#84]:add r6,r8,#88:.S_:subs r7,r7,#1:ldrcs r0,[r6,#16]:addcs r1,r6,#20:blcs U_:addcs r6,r6,#32
+bcs S_:sub r14,r11,r10:str r14,[r10,#8]:mov r0,r11:ldmfd r13!,{pc}^:.R_:tst r0,#&100:moveqs pc,r14:stmfd r13!,{r14}:sub r14,r1,r8:str r14,[r11],#4:and r14,r0,#&3:cmp r14,#&2:beq V_:ldr r14,[r1,#4]:cmn r14,#-(-1)
+subne r14,r1,r8:addne r14,r14,#4:strne r14,[r11],#4:ldmfd r13!,{pc}^:.V_:sub r14,r8,r1:add r14,r14,#4:orr r14,r14,#(2<<28):str r14,[r11],#4:ldmfd r13!,{pc}^:.T_:tst r0,#&100:beq W_:stmfd r13!,{r14}:str r5,[r11],#4
+ldr r14,[r1,#8]:add r5,r5,r14:and r14,r0,#&3:cmp r14,#&2:beq X_:ldr r14,[r1,#4]:cmn r14,#-(-1):beq Y_:str r5,[r11],#4:add r2,r8,r14:.S_:ldrb r14,[r2],#1:add r5,r5,#1:cmp r14,#&20:bcs S_:b Z_:.X_:mov r14,#1:.Y_
+str r14,[r11],#4:.Z_:ldr r14,[r1,#8]:str r14,[r11],#4:ldmfd r13!,{pc}^:.W_:ldmia r1,{r0-r2}:stmia r11!,{r0-r2}:movs pc,r14:.U_:tst r0,#&100:moveqs pc,r14:stmfd r13!,{r14}:mov r2,r11:ldr r14,[r1,#0]:add r3,r8,r14:.S_
+ldrb r14,[r3],#1:cmp r14,#&20:movcc r14,#0:strb r14,[r2],#1:bcs S_:ldr r14,[r1,#8]:add r11,r11,r14:mov r14,#0:.S_:cmp r2,r11:strccb r14,[r2],#1:bcc S_:tst r0,#1:ldrne r14,[r1,#4]:cmnne r14,#-(-1):beq a_:add r2,r8,r14:.S_
+ldrb r14,[r2],#1:cmp r14,#&20:movcc r14,#0:strb r14,[r11],#1:bcs S_:.a_:ldmfd r13!,{pc}^:]:NEXT:ENDPROC