Create readable text `.bas' for each tokenized BASIC `,ffb' file.
[ssr] / StraySrc / Utilities / buildstub.bas
diff --git a/StraySrc/Utilities/buildstub.bas b/StraySrc/Utilities/buildstub.bas
new file mode 100644 (file)
index 0000000..6c0e792
--- /dev/null
@@ -0,0 +1,31 @@
+REM crunched "b.buildstub"
+ONERRORERROREXT0,REPORT$+"["+STR$(ERL)+"]"
+PROCA_:PROCB_(FNC_):END
+DEFPROCA_:DIMq% 256:LIBRARY"libs:bas":PROCbas_init:ENDPROC
+DEFFNC_:LOCALD_$:SYS16TOD_$:IFINSTR(D_$,"-quit")=0THENERROR1,"SapphStub must be started using *Run"
+D_$=MID$(D_$,INSTR(D_$,"""")+1):D_$=MID$(D_$,INSTR(D_$," ")+1):D_$=LEFT$(D_$,INSTR(D_$,"""")-1):=D_$
+DEFFNE_(RETURNF_$):LOCALE_$:IFINSTR(F_$," ")THEN
+E_$=LEFT$(F_$,INSTR(F_$," ")-1):F_$=MID$(F_$,INSTR(F_$," ")+1)
+ELSE:E_$=F_$:F_$=""
+ENDIF:=E_$
+DEFFNG_(F_$):LOCALi%:$q%=F_$:FORi%=0TOLEN(F_$)-1:IFq%?i%>=97ANDq%?i%<=122THENq%?i%-=32
+NEXT:=$q%
+DEFPROCB_(F_$):LOCALH_$,I_$,J_$,K_%,L_%,E_$:REPEAT:E_$=FNE_(F_$):CASEFNG_(E_$)OF
+WHEN"-HELP":PROCM_:L_%=TRUE
+WHEN"-LIBFN":H_$=FNE_(F_$)
+WHEN"-LIB":J_$=FNE_(F_$)
+WHEN"-STUB":I_$=FNE_(F_$)
+WHEN"-OFFSET":K_%=VAL(FNE_(F_$))
+OTHERWISE:CASETRUEOF
+WHENJ_$="":J_$=E_$
+WHENI_$="":I_$=E_$
+WHENH_$="":H_$=E_$
+WHENK_%=0:K_%=VAL(E_$)
+ENDCASE
+ENDCASE:UNTILF_$="":IFL_%THENEND
+IFH_$=""ORJ_$=""ORI_$=""THENERROR0,"Bad arguments"
+PROCN_(J_$,I_$,H_$,K_%):ENDPROC
+DEFPROCN_(J_$,I_$,H_$,K_%):zero=0:PROCbas_aofInit(&1000):FORo=4TO6STEP2:[opt o:FNpass:FNimportAs("Sapphire$$LibData$$Base","sapph_base"):FNimportAs("Sapphire$$LibData$$Limit","sapph_limit"):FNarea("!Stub$$Code","CODE,READONLY")
+FNexportAs("stubfn",H_$):.stubfn:adr r0,O_:ldmia r0,{r0-2}:movs pc,r14:.O_:dcd sapph_base:dcd sapph_limit:dcd K_%:FNexportAs("zero","sapphire_init"):FNexportAs("zero","sapphire_libInit"):FNexportAs("zero","sapphire_disable"):]
+offDiff%=K_%-4:[opt o:FNexportAs("offDiff%","__sph_workoff"):]:NEXT:PROCbas_aofSaveAs(J_$):PROCbas_aofInit(0):FORo=4TO6STEP2:[opt o:FNpass:FNimportAs(H_$,"stubfn"):FNarea("Sapphire$$ExtTable","CODE,READONLY"):dcd stubfn:]:NEXT:PROCbas_aofSaveAs(I_$)
+ENDPROC