Project PLASMA FPS 2004: Thread 4

Blitz3D Forums/Blitz3D Programming/Project PLASMA FPS 2004: Thread 4

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

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