PB IDE-Werkzeug: Declare-Filter generiert ProcDeclarationen

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

PB IDE-Werkzeug: Declare-Filter generiert ProcDeclarationen

Beitrag von Kurzer »

Hallo zusammen,

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.
Bild

Bild

Bild

Bild

Bild

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) :)
Zuletzt geändert von Kurzer am 20.07.2012 22:38, insgesamt 12-mal geändert.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
Dostej
Beiträge: 529
Registriert: 01.10.2004 10:02
Kontaktdaten:

Beitrag von Dostej »

Nett. Damit ähneln sich jaPBe udn die PB IDE immer mehr... :-)
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Sehr schön! Danke! :allright:

Grüße ... Kiffi
Hygge
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

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 im Ursprungsposting habe ich angepasst.
Die Webseite, die oben angegeben ist wird später angepasst, aber die dort liegenden ZIP Archive enthalten schon die aktuelle Version.

Gruß Markus
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

Habe jetzt auch den Sourcecode beigelegt, falls das Tool jemand anpassen/erweitern möchte. Außerdem waren die links im ersten post nach meinem Umbau der Hompage nicht mehr korrekt - hab's korrigiert. Zur Webseite
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von NicTheQuick »

Habs jetzt nicht getestet, aber wie ist das mit Procedure-Parametern mit
einer Structure gelöst?

Zum Beispiel bei folgendem

Code: Alles auswählen

Structure bla
  a.l
  b.l
EndStructure

Procedure blubb(*a.bla)
EndProcedure
Kommt die die Declare-Zeile dann vor die Structure, oder danach oder
schreibst du dann einfach nur

Code: Alles auswählen

Declare blubb(*a)
ohne die Structure?
Bild
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

NicTheQuick hat geschrieben:...Kommt die die Declare-Zeile dann vor die Structure, oder danach oder
schreibst du dann einfach nur

Code: Alles auswählen

Declare blubb(*a)
ohne die Structure?
Der originale Quellcode wird nicht verändert. Es wird entweder eine seperate (von Dir selbst zu inkludierende) Includedatei erzeugt oder aber das Resultat liegt in einem Editorgadget bzw. im Clipboard und kann von Dir in Deinen Code gepasted werden.

Und ja, ich mache nur:

Code: Alles auswählen

Declare blubb(*a)
Im Automatikmodus wird z.B. eine solche Datei erzeugt:

Code: Alles auswählen

; --- 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)
Declare.l TickQueryTimers()
Declare BuildStatement()
Declare InitDB()
Declare ConnectToDB()
Declare DisconnectFromDB()
Declare.l DBQueryToList(Query$)
Declare.s DBQueryWithHeader(Query$)
Declare DoScan(Manual.b)
Declare LoadSettings()
Declare SaveDBSettings()
Declare SaveGUISettings(Message.l)
Declare LoadRecordProperties()
Declare SaveRecordProperties()

; --- _Window_Message.pbi
Declare MESSAGE_Window_Open()
Declare MESSAGE_Window_Close()
Declare MESSAGE_Button_Ok()
Declare MESSAGE_SyncLinkedList()
Declare MESSAGE_ListIcon_Result_LeftDoubleClick()
Declare MESSAGE_ListIcon_Result_Change()
Declare MESSAGE_ListIcon_Result_Rebuild()
Declare MESSAGE_ListIcon_Property_LeftDoubleClick()
Declare MESSAGE_ShowRecords(SelectedRow.l)
Declare MESSAGE_ShowRecordProperty(SelectedRow.l, Clear.l)

; --- _Window_Settings.pbi
Declare SETTINGS_Window_Open()
Declare SETTINGS_Window_Close()
Declare SETTINGS_Button_Save()
usw...

Diese Datei inkludiere ich in meinen zugehörigen Hauptquellcode:

Code: Alles auswählen

; ------------------------------------------------------------
; Includedateien

IncludeFile "GUI.pb"                    ; %IGNOREFILE
IncludeFile "_Deklarationen.pbi"        ; %DECLAREFILE
IncludeFile "_General.pbi"
IncludeFile "_Window_Message.pbi"
IncludeFile "_Window_Settings.pbi"
IncludeFile "_Window_Info.pbi"
IncludeFile "_Window_Main.pbi"
Mit der Kennung ;%DECLAREFILE sage ich dem Tool auch gleich den namen der Datei, in die es die Deklarations-Definitionen schreiben soll.

Wenn also die Includes in Deinem Hauptsource richtig eingerichtet sind (%DECLAREFILE), dann benötigst Du später nur noch einen Tastendruck (Shortcut), um die Procedure-Deklarationen Deines Projekts auf den neusten Stand zu bringen.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: PB IDE-Werkzeug: Declare-Filter generiert ProcDeclaratio

Beitrag von Kurzer »

Habe den Thread noch mal von den Toten zurückgeholt.

Mir ist leider erst heute aufgefallen, daß Declare-Filter ein Problem mit Prozeduren hat, die ein oder mehrere Arrays als Parameter besitzen.
Hier wurde die schließende Klammer nicht korrekt erkannt und somit eine falsche Deklaration dafür erzeugt.

Die deutsche Version von Declare-Filterist seit heute korrigiert (siehe link im ersten Beitrag).
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: PB IDE-Werkzeug: Declare-Filter generiert ProcDeclaratio

Beitrag von Kurzer »

Nochmal ein kurzer Post von mir aus der Versenkung.

Mir ist nach langer Zeit aufgefallen, dass die letzte Version von Declare-Filter Prozeduren mit Typensuffix (z.B. Procedure.s Getchar(...) ) nicht korrekt erkannt hat. Ich hatte seinerzeit die Erkennungsroutine komplett neu geschrieben und dabei muss dieser bug reingekommen sein.

Ich weiß zwar nicht, ob das Programm noch jemand nutzt, aber der Fehler ist jetzt korrigiert worden. Die aktuelle Version ist unter dem link im ersten Post downloadbar.

Gruß
Kurzer
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
Rings
Beiträge: 971
Registriert: 29.08.2004 08:48

Re: PB IDE-Werkzeug: Declare-Filter generiert ProcDeclaratio

Beitrag von Rings »

Danke, ja es gibt noch welche die das tool nutzen ;)
Rings hat geschrieben:ziert sich nich beim zitieren
Antworten