
CallBuilder Code Wizard. Builds an ActionCall() Select...Case from a list of Function prototypes. The code wizard is Designed specifically to be used with the
Action System.
;The CallBuilder Code Wizard by Frankie 'Techlord' Taylor
;Purpose: Reads and Parses Prototype File, Writes Select Case Tree File.
Dim RFileNames$(0),METHODPar$(0),METHODS$(1024)
Function TreeBuild(RFileName$,WFileName$,AppendFlg=False,Argument$="this",DataTypeI$="i%",DataTypeF$="f#",DataTypeS$="s$")
Dim RFileNames$(256),METHODPar$(16)
RF=ReadFile(RFileName$)
DebugLog "Reading RF "+RFileName$+" "+Str$(RF)
If RF
WF=WriteFile(WFileName$+"call.bb")
WriteLine(WF,";"+Upper$(WFileName$+" ACTIONCALL"))
WriteLine(WF,"Function "+WFileName$+"Call(this.action)")
WriteLine(WF,"If this\method%")
WriteLine(WF,"Select this\method%")
Repeat
Line$=ReadLine(RF)
If Left$(Line$,9)="Function " Or Upper$(Left$(Line$,8))="Method "
Funct=Funct+1
ArgStart=0
ArgCt=0
For Char = 1 To Len(Line$)
Ch$=Mid$(Line$,Char,1)
If Ch$="(" Then ArgStart=Char
If Ch$="." And ArgStart Then Obj=True ;getObject
If Obj Then ObjS$=ObjS$+Ch$
If Ch$="," Or Ch$=")"
ArgCt=ArgCt+1
Ch$=Mid$(Line$,Char-1,1)
METHODPar$(ArgCt)=DataTypeI$
If Ch$="#" Then METHODPar$(ArgCt)=DataTypeF$
If Ch$="$" Then METHODPar$(ArgCt)=DataTypeS$
;If Ch$="=" Then
If Ch$="(" Then ArgCt=0
If Obj
METHODPar$(ArgCt)=Left$(ObjS$,Len(ObjS$)-1)
Obj=False
ObjS$=Nil$
EndIf
EndIf
Next
Method$=Right$(Left$(Line$,ArgStart-1),Len(Left$(Line$,ArgStart-1))-9)
Par$="("
For ArgList = 1 To ArgCt
;If argseq
Select METHODPar$(ArgList)
Case DataTypeI$
datatypeicount=datatypeicount+1
Par$=Par$+Argument$+METHODPar$(ArgList)+"["+Str$(datatypeicount)+"]"
Case DataTypeF$
datatypefcount=datatypefcount+1
Par$=Par$+Argument$+METHODPar$(ArgList)+"["+Str$(datatypefcount)+"]"
Case DataTypeS$
datatypescount=datatypescount+1
Par$=Par$+Argument$+METHODPar$(ArgList)+"["+Str$(datatypescount)+"]"
Default
Par$=Par$+"this"+Right$(METHODPar$(ArgList),Len(METHODPar$(ArgList))-1)+METHODPar$(ArgList)
End Select
;Else
; Par$=Par$+Argument$+METHODPar$(ArgList)+"["+Str$(ArgList)+"]"
;EndIf
If ArgList<ArgCt Then Par$=Par$+","
Next
Par$=Par$+")"
WriteLine(WF,"Case "+Str$(Funct)+":"+Method$+Par$)
datatypeicount=reset
datatypefcount=reset
datatypescount=reset
EndIf
If Left$(Line$,7)="Append "
Incl=Incl+1
AppendFlg=True
RFileNames$(Incl)=Left$(Right$(Line$,Len(Line$)-9),Len(Right$(Line$,Len(Line$)-9))-1)
EndIf
If Left$(Line$,6)="Macro "
Funct=Funct+1
Macro=True
MacroLabel$=Nil$
METHODMacro$=Nil$
For Char = 7 To Len(Line$)
Ch$=Mid$(Line$,Char,1)
If Ch$="}" Then Exit
If Macro Then MacroLabel$=MacroLabel$+Ch$
If Not Macro Then METHODMacro$=METHODMacro$+Ch$
If Ch$="{" Then Macro=False
Next
WriteLine(WF,"Case "+Str$(Funct)+":"+METHODMacro$+";"+Left$(MacroLabel$,Len(MacroLabel$)-1)+" MACRO")
EndIf
Until EOF(RF)
CloseFile(RF)
WriteLine(WF,";+"+Str$(Funct))
WriteLine(WF,"End Select")
WriteLine(WF,"EndIf")
WriteLine(WF,"End Function")
CloseFile(WF)
Else
CloseFile(RF)
EndIf
End Function