gestern habe ich ein etwas größeres Projekt umgestellt und den Source auf mehrere Includes neu aufgeteilt. Außerdem Proceduren thematisch sortiert usw.
Naja und dabei hat man dann das Problem, daß nicht deklarierte Proceduren beim compilieren unter Umständen angemeckert werden, weil sie von anderen Proceduren benutzt werden, bevor sie im Source überhaupt definiert sind.
Aus dem Grund müssen diese Proceduren ja auch am Anfang des Codes deklariert werden.
Ich denke, jeder der das gleiche Problem hat(te), weiß in etwa was ich meine.
Entweder man schangelt seine Proceduren so geschickt um, daß man das Problem nicht bekommt oder man deklariert einfach jede Procedure gleich am Anfang, dann hat man das Problem erst gar nicht.
Da ich scheisse-faul bin und keine Lust habe mir wegen dieser Procedure-Schangelei mein Schmalz unnütz zu belasten, habe ich ich mir kurzerhand ein Tool erstellt, daß mir diese Arbeit abnimmt. (Ich frage mich wieso PB das nicht selbst kann - also einfach 2-pass compilieren?)
Also das Tool "Declare-Filter" schnappt sich den Haupt-Quellcode und alle seine Includes... ackert die durch und erstellt daraus eine Declare-Liste aller verwendeten Proceduren. Diese Liste pasted man sich dann an den Anfang seines Haupt-Quellcodes. Fettich.
Hier liegt das Programm mitsamt Screenshots für die Einrichtung als IDE Werkzeug:
>>> Declare-Filter Download <<<
Nachtrag 28.06.07: Das manuelle kopieren war mir dann auch zu lästig. Daher habe ich das Programm etwas erweitert, so daß alles vollautomatisch abläuft. Das Readme unten habe ich angepasst. Die Webseite (siehe link oben) kann ich erst morgen anpassen, aber die dort liegenden ZIP Archive enthalten schon die aktuelle Version.
Und hier das Readme dazu:
Code: Alles auswählen
____ _ _____ _ _ _
| _ \ ___ ___| | __ _ _ __ ___ | ___(_) | |_ ___ _ __
| | | |/ _ \/ __| |/ _` | '__/ _ \_____| |_ | | | __/ _ \ '__|
| |_| | __/ (__| | (_| | | | __/_____| _| | | | || __/ |
|____/ \___|\___|_|\__,_|_| \___| |_| |_|_|\__\___|_|
Das Programm Declare-Filter ist ein Werkzeug für die Arbeit mit PureBasic.
Es dient dazu in größeren Projekten die Deklaration von Prozeduren zu
automatisieren.
Declare-Filter kann sowohl als eigenständiges Programm aufgerufen und auch
als Werkzeug in die Purebasic-IDE eingebunden werden.
Das Programm kann in zwei Ausführungsmodis arbeiten:
- GUI Modus (mit Fensteroberfläche)
- Invisible Modus (ohne Fensteroberfläche)
Die Arbeitsweise ist in beiden Ausführungsmodis ähnlich:
Das Programm durchsucht den ausgewählten oder als Parameter übergebenen
Quellcode und alle darin inkludierten Quellcodes nach Prozeduren ab und baut
daraus eine Liste mit Prozedur-Deklarationen auf.
Diese Liste kann danach direkt in den Haupt-Quellcode kopiert oder automatisch
in eine externe Include-Datei geschrieben werden.
/// Der GUI-Modus ///
---------------------
Im GUI-Modus startet das Programm, wenn es ohne oder nur mit einem Parameter
aufgerufen wird. Als Parameter muß der Dateiname der zu durchsuchenden Quell-
codedatei angegeben werden.
Die Fensteroberfläche teilt sich von oben nach unten in drei Bereiche:
- Dateiname des Hauptquellcodes
- Liste der inkludierten Quellcodedateien
- Anzeige der generierten Declareliste
Aufruf mit Parameter:
---------------------
Wird das Programm mit übergebener Quellcodedatei aufgerufen, dann lädt es den
Quellcode und den aller Includes automatisch ein und beginnt sofort damit die
Declare-Liste aufzubauen und im unteren Bereich anzuzeigen.
(Anm.: Sind im Quellcode sog. "Magic Words" für das Programm hinterlegt, dann
kann es sein, daß es dadurch im invisible Modus gestartet wird - mehr dazu
weiter unten)
Mit einem Klick auf den Knopf "Liste kopieren" wird die fertige Declareliste
als Text in die Zwischenablage (Clipboard) kopiert.
Aufruf ohne Parameter:
----------------------
Wird kein Parameter angegeben, dann kann der Quellcode mittels FileRequester
ausgewählt werden (Verzeichnis-Button).
Danach wird die Declareliste mit Klick auf den Button Filtern aufgebaut.
Mit Klick auf den Knopf "Liste kopieren" wird die Declareliste als Text in die
Zwischenablage (Clipboard) kopiert.
/// Der invisible Modus ///
---------------------------
Im invisible Modus startet das Programm, wenn es entweder mit zwei Parametern
gestartet wurde oder aber mit einem Parameter und sich in der zu durchsuchenden
Quellcodedatei "Magic words" befinden.
Bedeutung der Parameter:
1. Parameter = Name der zu durchsuchenden Quellcodedatei.
2. Parameter = Name der Include-Datei, in die die Declare-Liste geschrieben wird.
Im invisible Modus führt das Programm vollautomatisch alle nötigen Schritte aus.
Nach erfolgreicher Erstellung der Declareliste wird ca. 1/2 Sekunde lang ein
kleines Infofenster angezeigt und das Programm dann automatisch beendet.
Die Ausgabe der Declareliste in eine Datei kann auch über ein "Magic word"
innerhalb des Quellcodes aktiviert werden. Dabei muß dann nur ein Parameter
übergeben werden - der zweite Parameter wird direkt aus der Quellcodedatei
ermittelt.
So kann z.B. die von Declare-Filter erzeugte Declare-Datei als Include-Datei im
Quellcode eingebunden sein. Diese Datei muß mit dem Kommentar ; %DECLAREFILE
markiert werden.
Findet Declare-Filter beim Durchsuchen der Quellcodedatei einen so markierten
IncludeFile-Befehl, dann wird dieser Dateiname als Ausgabedatei für die Declare-
Liste benutzt.
Mit dem "Magic word" ; %IGNOREFILE kann eine Include-Datei von der Bearbeitung
durch Declare-Filter ausgeklammert werden.
Beispiel:
; Includedateien
IncludeFile "GUI.pb" ; %IGNOREFILE
IncludeFile "_Deklarationen.pbi" ; %DECLAREFILE
IncludeFile "_General.pbi"
IncludeFile "_Database.pbi"
IncludeFile "_Fileaccess.pbi"
IncludeFile "_Window_Message.pbi"
IncludeFile "_Window_Settings.pbi"
IncludeFile "_Window_Info.pbi"
IncludeFile "_Window_Main.pbi"
Hier wird die Datei GUI.pb von Declare-Filter ignoriert und die Datei _Deklarationen.pbi
als Augabedatei für die Declare-Liste benutzt.
Somit braucht man Declare-Filter nur kurz per ShortCut aufrufen und alles weitere
passiert vollautomatisch.
Die erzeugte Declare-Liste sieht dann beispielsweise so aus:
; --- Procedure declarations, generated by Declare-Filter ---
; --- _General.pbi
Declare Wait(Millisec.l)
Declare.s DeEncode(Text.s, Key.s)
Declare WriteLog(Text$)
Declare.l InvalidUser()
Declare.l InputDate(CallerWindowID.l, CallerItemID.l, X.l, Y.l, Title$, DefaultDate.l)
; --- _Database.pbi
Declare BuildStatement()
Declare InitDB()
Declare ConnectToDB()
Declare DisconnectFromDB()
Declare.l DBQueryToList(Query$)
Declare.s DBQueryWithHeader(Query$)
Declare DoScan(Manual.b)
usw...
Aufruf:
Declare-Filter.exe
-> Programm startet im GUI Modus, Die Quellcode-Datei muß manuell geladen werden und die
fertige Declare-Liste wird in der GUI angezeigt.
Declare-Filter.exe "Dateiname"
-> Programm startet im GUI Modus, wenn in "Dateiname" keine Magic words vorhanden sind.
Die fertige Declare-Liste wird in der GUI angezeigt.
-> Programm startet im invisible Modus, wenn in "Dateiname" das Magic word "%DECLAREFILE"
vorhanden ist. Die Declare-Liste wird in die Datei geschrieben, die durch %DECLAREFILE
definiert ist. Das Programm wird automatisch beendet.
Declare-Filter.exe "Dateiname1" "Dateiname2"
-> Programm startet im invisible Modus und schreibt die Declare-Liste in die Datei Dateiname2.
Das Programm wird automatisch beendet.
Features:
- Der Proceduretype wird beachtet (.s, .l usw...)
- Procedure() muß nicht allein in der Zeile stehen
Procedure Tuewas() : Tuewas : EndProcedure ist kein Problem
- Verwechslungen mit dem Wort "Procedure" in einem anderen Kontext innerhalb des Quellcodes
werden ziemlich sicher vermieden
- Kommentare werden als solche erkannt und ignoriert
- Generierung einer Declare-Datei
Einschränkungen:
- Die Quellcodes werden nicht rekursiv durchsucht. Sollte also in einem Include
ein weiteres Include enthalten sein, wird dies nicht durchsucht
- IncludeFile muß als einziger Befehl in einer Zeile stehen
- Ein als Declare-File markiertes Includefile (%DECLAREFILE) muß das erste IncludeFile im Quellcode
sein, da es sonst Compilerfehler hagelt
Die Bilder Declare-Filter-x.gif zeigen wie man das Programm in die Purebasic-IDE
einbindet und wie die generierte Declare-Liste aussieht.
Ich hoffe, es ist auch für andere nützlich.
Gruß Markus
PS: Ja, ichweiß, daß ts-soft einen pre-compiler für das gleiche Problem erstellt hat, aber dort gefällt mir nicht, daß sich der compilierte Code von dem im Editor unterscheidet. Hier habe ich bzgl. meines Quellcodes volles WYSIWYC (what you see is what you compile)