#ifdef Direktiven vom Quellcode entfernen?

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

#ifdef Direktiven vom Quellcode entfernen?

Beitrag von dtmackenzie »

Kennt jemand vielleicht ein Werkzeug, das veraltete #ifdef/#ifndef Abschnitte "intelligent" vom Quellcode entfernt?
Mittlerweile gibt es bei mir einige "steinzeitliche" Optionen, die bis Cl*pper zurückgehen und definitiv nie wieder eingeschaltet werden.
Ohne diese Abschnitte wäre der Code an manchen Stellen viel lesbarer.
Viele Grüße,
David
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von dtmackenzie »

Zwischenmeldung: In der Hilfe für #ifdef wird ein Compile-Switch /p erwähnt, die dazu führen soll, dass der Preprocessor eine .ppo-Datei erzeugt. Weißt jemand, ob dieses Switch sonst irgendwo dokumentiert ist? Sie erscheint auch nicht im Workbench. Das Switch ist ziemlich nah dran an das, was ich wollte. Allerdings werden (so wie ich es verstehe) alle #ifdef-Befehle dadurch aufgelöst, ich wollte aber nur die für eine Liste von veralteten Optionen entfernen. Symbolische Konstanten (#define-Befehle) aus den .CH-Dateien möchte ich auch behalten.
Zuletzt geändert von dtmackenzie am Do, 02. Dez 2021 8:20, insgesamt 1-mal geändert.
Viele Grüße,
David
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von Tom »

Hallo, David.

Der Compiler-Schalter /p ist in der Sektion "compiler switches" der Hilfe erläutert. Er dient dazu, zu prüfen, ob alle Präprozessor-Direktiven korrekt umgesetzt werden, aber man kann dadurch auch ermitteln, auf welche Funktionen Kommandos umgeleitet werden usw.

Ich weiß nicht ganz, worauf Du hinauswillst. Wenn Du ein #ifdef hast, das immer Nein ist, weil das veraltet ist, dann schmeiß es doch einfach raus, was danach bis zum #else oder #endif kommt.
Herzlich,
Tom
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von dtmackenzie »

Hallo Tom!

Danke! Sektion "compiler switches" habe ich endlich in xpptools20.chm gefunden (bisher hatte ich nur "normale", Workbench- und Online-Hilfe durchsucht). Weißt Du, ob es irgendwo einen übergeordneten Einstieg gibt zu den einzelnen Hilfedateien, die im Verzeichnis help20 liegen?

Naturlich hast Du recht, dass es kein großer Akt ist, ein #ifdef rauszuschmeißen. Nur, die Menge macht's. Es gibt in unserer Anwendung 375 #ifdefs (23 davon wären zu behalten) und 44 #ifndefs. Wenn ich das einfach so händisch machen würde dann würde ich bestimmt irgendwas irgendwo versauen... Da schaltet das Gehirn aus oder rütschen die Finger! :wink: Deshalb habe ich gehofft, dass es vielleicht ein Werkzeug dafür gibt. Also, wahrscheinlich mache ich es doch nicht in einem Rutsch wie ich gerne hätte (was nur ginge, wenn ich nicht alles explizit testen müsste), sondern sukzessiv und nebenbei wenn ich an spezifischen Bereichen arbeite.
Viele Grüße,
David
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von georg »

Hallo, David -


.ppo ist eine Idee, hat aber Fallstricke.

Der Prepozessor wandelt konfigurative Konstanten nämlich ebenfalls um, und so wird aus

Code: Alles auswählen

	WHILE nEvent <> xbeP_Close
		nEvent := AppEvent(@mp1, @mp2, @oXbp)
		oXbp:handleEvent(nEvent, mp1, mp2)
	END
dann

Code: Alles auswählen

	WHILE nEvent <> (056 + 1048576)
		nEvent := AppEvent(@mp1, @mp2, @oXbp)
		oXbp:handleEvent(nEvent, mp1, mp2)
	END
Ich fürchte, da bleibt nur Handarbeit übrig ...
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von dtmackenzie »

Hallo, Georg,

ich fürchte, Du hast Recht...

Das ist eigentlich das was ich gemeint habe mit "Symbolische Konstanten (#define-Befehle) aus den .CH-Dateien möchte ich auch behalten".
Ich habe aber überlegt, ob ich vorübergehend alle #include-Befehle (ungefähr 60) auskommentieren könnte - vielleicht probiere ich das spaßeshalber irgendwann, das lässt sich mit globalem Ersetzen machen... Das müsste ich aber in alle Ruhe probieren wenn ich Zeit habe.
Viele Grüße,
David
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von Tom »

Das Ersetzen der Konstanten ist nur die Spitze des Eisbergs. Es werden ja auch alle #translate- und #command-Direktiven abgearbeitet, und alle Kommandos werden durch die korrespondierenden Funktionen ersetzt. Fliegen nicht auch Kommentare raus? Jedenfalls bin ich überhaupt nicht auf die Idee gekommen, dass Du mit dem PP-Output weiterarbeiten willst. Dann doch gleich alles in Assembler, oder? 8)

Nein, eine übergeordnete Hilfedatei habe ich nicht gefunden, aber man findet alles, wenn man einfach nur die Hilfe in der Workbench aufruft, statt einen Unterbereich zu wählen.
Herzlich,
Tom
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von dtmackenzie »

Tja, mit einem ordentlichen Assembler kann man auch viel anfangen, so fing ich jedenfalls an... :wink: 8)
Ja, haste aber Recht, #translate und #command kommen auch dazu.
Das ist nun aus meiner Sicht der Genickbruch für die PP-Output-Idee.
Schade aber, dass ich z.B. die 145 Stellen mit __XPP__, die seit einem Jahrzehnt nicht mehr relevant sind, nicht automatisch aus der Anwendung entfernen kann.

Was die Hilfe angeht - das Thema hatten wir schon mal, glaube ich, weiß ich aber nicht mehr wo. Bei mir wird "compiler switches" vom Workbench aus nicht gefunden, egal ob ich die Hilfe über F1 oder Menü (Hilfe / Hilfe oder Hilfe / Xbase++ Workbench) aufrufe und egal in welcher Tab (Index oder Suche). Entweder ist meine Installation anders oder ich habe irgendetwas grundsätzlich nicht kapiert. Wäre vielleicht nett wenn die andere Hilfedateien wie z.B. Tools vom Workbench aus zugänglich wären.
Viele Grüße,
David
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von Jan »

Die Workbench bietet zwei verschiedene Hilfen an. Über das Menü die allgemeine Hilfedatei, kontextsensitiv die zu dem Begriff unter dem Cursor passende Hilfe. Oder auch gar nichts wenn die nichts passendes findet - was immer mal wieder passiert. Auch bei Funktionen die es gibt (PadL() z. B. weil das gesammelt unter PadC/PadL/PadR steht). Und was Alaska trotz mehrfacher Hinwesie seit Jahren schon einfach nicht repariert.

Wenn Du wirklich die gesamte Doku durchforsten möchtest findest Du die gesammelten Dateien unter C:\Program Files (x86)\Alaska Software\help20

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
JonathanLeeming
Rookie
Rookie
Beiträge: 2
Registriert: Mi, 17. Nov 2021 16:02
Danksagung erhalten: 2 Mal

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von JonathanLeeming »

Der Einstiegspunkt der höheren Ebene für die Hilfedatei ist "C:\Program Files (x86)\Alaska Software\help20\xpp-dev.chm"

Hoffe das hilft,
Jonathan
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von ramses »

dtmackenzie hat geschrieben: Do, 02. Dez 2021 10:01 Schade aber, dass ich z.B. die 145 Stellen mit __XPP__, die seit einem Jahrzehnt nicht mehr relevant sind, nicht automatisch aus der Anwendung entfernen kann.
Das geht schon relativ einfach. Sowas habe ich mal zum Kommentare ( /* .... */ ) entfernen gebaut.
Schreib dir ein kleines Programm welches die prg Dateien durchsucht und die gewünschten Stellen sucht, indentifiziert anzeigt und nach Abfrage entfernt.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von Tom »

Das wäre tatsächlich nur ein Zehnzeiler oder so. Man liest das PRG zeilenweise ein und schreibt wieder durch, es sei denn, das fragliche #ifdef/#ifndef kommt, dann lässt man alles bis zum #endif weg, oder nur das #ifdef/#ifndef und das #endif, falls die Kondition immer zutrifft. Lediglich beim #else wird es ein wenig hakelig, aber irgendwas ist ja immer. Dort könnte man dann aber einen Marker im Text platzieren und diese Stellen später händisch korrigieren. Mit zusätzlichen fünf Zeilen wäre aber auch das automatisch zu bewältigen.
Herzlich,
Tom
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von dtmackenzie »

Danke Jan, Jonathan, Carlo und Tom!

Vielleicht nochmal 5 Zeilen wiel sie verschachtelt sein können, und noch ein paar weil es mehrere veraltete Schalter gibt...
Aber ja, das klingt gut machbar, vielleicht schreibe ich das nächste Woche.

Zum Thema Hilfe: Das Link von Jonathan zeigt die Hilfe so wie vom Workbench aus, aber dort funktioniert die Suche! Endlich kapiere ich aber nun was Tom gemeint hat - dann ist kein Bereich links unter "Inhalt" selektiert (bzw. ist nur ausgegraut). Wenn ich aber die Hilfe vom Workbench aus öffne, ist immer schon ein Bereich dort selektiert, und die Suche geht nicht über alles. Ich konnte diesen Bereich auch nicht deselektieren, bis ich darauf gekommen bin, die gesamte linke Seite auszublenden und wieder einzublenden. Gruselig!
Viele Grüße,
David
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von Marcus Herz »

Ich kann mich an ein Programm PPO aus Clipper Zeiten errinnern, das konnte genaus das. Bin noch auf der Suche. Ob das dann noch unter Win 10 läuft, wird spannend.
Clipper Zeugs hab ich auf einem alten Notebokk. Ich schau mal nach am Wochenende....
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: #ifdef Direktiven vom Quellcode entfernen?

Beitrag von ramses »

Marcus Herz hat geschrieben: Fr, 03. Dez 2021 15:22 Ob das dann noch unter Win 10 läuft, wird spannend.
Mit DOS-BOX ganz sicher!
siehe: https://www.dosbox.com/
Valar Morghulis

Gruss Carlo
Antworten