Dokumentation zu IPC (Includefile PreCompiler) V1.10 geschrieben von Holger Weets (ATARI) & Christian Wempe (AMIGA) mit SOZOBON-C V2.00x9 Zun„chst das wichtigste: IPC ist ein Precompiler, der speziell fr hcc geschrieben wurde, jedoch durch seine Optionen auch fr andere Compiler- Systeme verwendet werden kann (dort natuerlich nicht ganz so effizient). Im einzelenen wird folgendes erledigt: - entfernt Kommentare (auch C++) - entfernt Leerzeilen - entfernt ueberfluessige Whitespaces - wandelt Hex -> Dez und Okt -> Dez, weil diese Schreibweise i.a. kuerzer ist - ersetzt einfache defines: #define FOO 1 ... #define BAR (XY+FOO) wird zu #define FOO 1 ... #define BAR (XY+1) soweit ist er allgemein verwendbar, die folgenden Dinge funktionieren allerdings nur, wenn hcc V2.00x8 oder hoeher als Compiler verwendet wird: - wandelt CPP-Kommandos in Tokens um (abschaltbar mit -c) - wandelt C-Schluesselwoerter in Tokens um (abschaltbar mit -k) All diese Funktionen sind dazu gedacht, die Includefiles kuerzer zu machen, ohne ihre Semantik zu ver„ndern, und somit letztendlich die Compilierungs- zeit nochmals zu verkuerzen, da der Compiler weniger einlesen muss, und durch die Tokenisierung der ihm bekannten Identifier viel Sucherei gespart wird. Folgende Optionen sind verfuegbar: -v bewirkt, dass waehrend der Uebersetzung alle 10 Zeilen einmal die aktuelle Zeilennummer ausgegeben wird, um das Fortschreiten des Prozesses anzuzeigen. Ausserdem wird am Ende des Vorganges jeweils angezeigt, wie lang die Datei urspruenglich war und wie lang sie jetzt ist. -c schaltet die Tokenisierung der CPP-Diretiven ab -k schaltet die Tokenisierung der C-Schluesselwoerter ab Die letzten beiden Optionen sind deshalb nicht zu einer zusammen- gefasst worden, weil dieses Projekt noch nicht ausgiebig getestet wurde, und deshalb zu Debugging-Zwecken alle Einzelfunktionen ab- schaltbar sein sollten, um im Ernstfall trotzdem mit IPC arbeiten zu koennen und den Fehler (falls einer enthalten ist) leichter isolieren zu koennen. Alle Optionen k”nnen wahlweise als grože oder kleine Buchstaben angegeben werden. Die Optionen wirken jeweils fr allen Dateien, die sich in de Kommando- zeile hinter ihnen befinden, "file1.h -k file2.h" bewirkt also, daž bei file1.h die Schluesselworte tokenisiert werden, und bei file2.h nicht. Die Kommandzeile lautet also: ipc [-vck] file1 [file2 ...] IPC liest der Reihe nach alle angegebenen Dateien ein, verarbeitet sie und erzeugt anschliessend eine Ausgabedatei mit dem gleichen Namen und auf dem gleichen Pfad wie die Eingabedatei, nur mit der Endung ".PRE" (wie "precompiliert") Beispiel: ipc -v f:\include\stdio.h erzeugt eine neue Datei Namens f:\include\stdio.pre wenn anschliessend ein Quelltext uebersetzt wird, in dem die Zeile #include steht, dann sieht hcc zunaechst nach, ob eine Datei Namens "stdio.pre" existiert, und liest diese anstatt der '.h' Datei. In der Ausgabe und in allen eventuellen Meldungen erscheint allerdings der Name "stdio.h" wie bisher, so dass es keine Verwirrung geben sollte. Falls es sich bei den Dateinamen um Ordner handelt (abschliessender '\'), dann precompiliert IPC alle in diesem Ordner befindlichen Headerfiles. Diese Variante eignet sich besonders zum Anlegen eines ersten Satzes precompilierter Dateien. Unschoenheiten: - da IPC leere Zeilen loescht, stimmt bei Fehlermeldungen die Zeilen- Nummer moeglicherweise nicht, also sollten nur fehlerfreie Dateien precompiliert werden - der Compiler pueft nicht, ob die H-Datei vielleicht neuer ist, als die PRE-Datei, wenn also z.B. TEST.H precompiliert wird (->TEST.PRE), dann sollte nach jeder Aenderung an TEST.H *UNBEDINGT* entweder die PRE-Datei geloescht, oder die H-Datei neu precompiliert werden, da ansonsten die Aenderungen nicht wirksam werden!!! Das ganze funktioniert natuerlich prinzipiell auch fuer C-Files, nur das es sich meist bei diesen nicht so sehr lohnt, weil sie naturgemaess haeufiger veraendert werden und somit der Precompiler auch oefter ge- startet werden muss. Geplant ist, einen CPP einzubauen, welcher alle moeglichen textuellen Er- setzungen bereits vornehmen kann und somit auch vollstaendig durch Zahlen ersetzte Ausdruecke bereits auswerten kann. Z.B. koennten in #define TEST (+) ... #ifndef TEST (*) ... (*) #endif (*) wegen (+) alle Zeilen (*) aus dem precompilierten Includefile entfernt werden. Updates: 1.00 -> 1.10: - die neuen ANSI-Schluesselwoerter des hcc V2.00x10 eingebaut; --> diese Version kann nur zusammen mit hcc Versionen >= x10 verwendet werden --> alle mt IPC V1.00 behandelten Dateien MUESSEN bei Verwendung des hcc >= V2.00x10 neu precompiliert werden - bei CPP-W”rtern, die keine Argumente haben (z.B. endif), denen aber in der naechsten Zeile direkt ein C-Wort folgte, wurde letzteres nicht tokenisiert -- behoben - noch ein paar mehr Leerzeichen eingespart - Fehler im Zusammenhang mit bestimmten Kommentaren entfernt Bei Bugs, Verbesserungs-Vorschlaegen etc. an die folgende Adresse schreiben: Holger Weets 2900 Oldenburg Dachsweg 44 und fuer Spenden kann das Konto 023-182 041 BLZ: 280 501 00 Landessparkasse zu Oldenburg verwendet werden. Das war alles. --Holger & CW