Code archives/Miscellaneous/Custom functions Decl file
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
You know how it is you've got a library of functions that you always use and would love them to show up as proper commands in blitz... well... with this you can. You can even hit F1 and it will tell you the parameters, hit F1 again and it will show you help on your function. You tell it where you've installed blitz. What the path of your program is. And the name of the bb file. It then scans through all of the function in that program, and all of the functions in the includes in that program, capitalises any functions that you've not capitalised. And creates a decl file named after the main program name. It's given this name so you can identify it and remove it if necessary. Any remark statements directly after the function declaration will be used in the help file. ie Function dostuff(a,b,c) ; This will appear ; in the help file ; ; So put what you like here to remind you of how to use ; your function Please use and enjoy and report bugs as necessary. I've tested this on loads of source code and it seems to work fine... however... I'm sure there will be a few functions that cause it to muck up. Once you've run this you need to restart the blitz ide. If blitz doesn't start you'll have to delete the decl you've just created as there's something in there it doesn't like. Let me know if you've got any decl files that stop blitz working and I'll try and filter out those problems too. | |||||
Graphics 800,500,0,2 Type functions Field filename$ Field name$ Field description$ End Type Type includes Field filename$ Field root End Type Global root$="g:\library\" blitzlocation$="g:\blitz3d\" filename$="rgb_functions.bb" find(filename) ; recursively find all functions in includes Repeat ; find functions in includes For a.includes = Each includes find(a\filename,a\root) Delete a Next ; are there any more includes to check? count=0 For a.includes = Each includes count=count+1 Next Until count=0 ; write the functions to userlib Print "Creating "+Left(filename,Len(filename)-3)+"_functions.decls" Print fileout=WriteFile(blitzlocation+"userlibs\"+Left(filename,Len(filename)-3)+"_functions.decls") WriteLine(fileout,".lib "+Chr(34)+" "+Chr$(34)) For n.Functions = Each functions WriteLine(fileout,n\name) ; create helpfile ; remove bad filename characters remove$="( $#%" functionname$=n\name For r=1 To Len(remove) If Instr(functionname$,Mid(remove,r,1))>0 Then functionname$=Left(n\name,Instr(n\name,Mid(remove,r,1))-1) Next functionname=Lower(functionname) Print "Writing Helpfile for "+functionname helpfile=WriteFile(blitzlocation+"help\commands\2d_commands\"+functionname+".htm") Restore html_template Read in$ While in<>"**" written=False If in$="@functionname@" Then WriteLine helpfile,n\name:written=True If in$="@location@" Then WriteLine helpfile,n\filename:written=True If in$="@description@" Then WriteLine helpfile,n\description:written=True If written=False Then WriteLine helpfile,in Read in$ Wend CloseFile helpfile Next CloseFile fileout Print Print "====================================================================================================" Print Print Print "All done! Press any key." Print Print WaitKey End Function find(filename$,useroot=True) If useroot filein=ReadFile(root+filename) Else filein=ReadFile(filename) EndIf Repeat temp$=ReadLine(filein) ;unindent text If Len(temp)>2 Repeat If Asc(Left(temp,1))<33 Then temp=Right(temp,Len(temp)-1) Until Left(temp,1)>32 Or Len(temp)<2 ntemp$="" ;remove crappy text temp=remove_crap(temp) EndIf command$=Left(temp,8) If command="Function" n.Functions = New Functions n\filename=filename temp=Right(temp,Len(temp)-9) ntemp="" ;remove defaulting as this causes an error starting blitz If Instr(temp,"(")>Instr(temp,".") And Instr(temp,".")>0 temp$=Left(temp,Instr(temp,".")-1)+Right(temp,Len(temp)-Instr(temp,"(")+1) EndIf Repeat nn=Instr(temp,"=") If nn>0 nnn=Instr(temp,",",nn) If nnn=0 Then nnn=Instr(temp,")",nn) temp=Left(temp,nn-1)+Right(temp,Len(temp)-nnn+1) EndIf Until nn=0 ;capitalise function temp=uppercase(temp,1) For nn=2 To Instr(temp,"(") If Mid(temp,nn-1,1)="_" Then temp=uppercase(temp,nn) Next n\name=temp temp$=ReadLine(filein) Repeat If Left(temp,1)=";" n\description=n\description+Right(temp,Len(temp)-1)+"<br>" EndIf temp$=ReadLine(filein) Until Left(temp,1)<>";" End If If command="Include " a.includes= New includes a\filename=Mid(temp,10,Len(temp)-10) ; check if the include has full path or not If Mid(a\filename,2,1)=":" Then a\root=False Else a\root=True EndIf Until Eof(filein) End Function Function uppercase$(temp$,pos) t$="" t$=t$+Left(temp,pos-1) t$=t$+Upper(Mid(temp,pos,1)) t$=t$+Right(temp,Len(temp)-pos) Return t$ End Function Function remove_crap$(S$) tmp$="" For x=1 To Len(s) If Asc(Mid(s,x,1))>31 And Asc(Mid(smp,x,1))<128 Then tmp=tmp+Mid(s,x,1) Next Return tmp$ End Function ; Help File HTML Template .html_template Data "<html><head><title>Blitz Docs</title><link rel=stylesheet href=../css/commands.css Type=Text/css></head>" Data "<body><h1>" Data "@functionname@" Data "</h1><h1>Command Location</h1><table><tr><td>" Data "@location@" Data "</td></tr></table><h1>Description</h1><table><tr><td>" Data "@description@" Data "</td></tr></table><br><br><a target=_top href=../index.htm>Index</a><br><br>" Data "Click <a href=http://www.blitzbasic.com target=_blank>here</a>" Data "to view the latest version of this page online with user comments</body></html>" Data "**" |
Comments
| ||
guess it should be Repeat... Until Asc(Left(temp,1))>32 Or Len(temp)<2 in the "unindent text" part of function find(...) so it can also handle goto-labels... hm, it also doesn't like comments at the end of the line of a func header. But I like it nevertheless! |
Code Archives Forum