home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD2.mdf
/
c
/
tcpp
/
util.doc
< prev
Wrap
Text File
|
1990-06-09
|
77KB
|
1,990 lines
TURBO C++ ZUSATZPROGRAMME
-------------------------
Ihr Turbo C++ Paket enthält weit mehr als nur zwei Versionen des
schnellsten der derzeit verfügbaren C-Compiler. Es enthält auch
elf leistungsstarke Zusatzprogramme, die Sie zusammen mit Ihren
Turbo C++ Dateien oder anderen Modulen benutzen können. Die Utilities
MAKE, TLIB, TLINK und TOUCH sind im Benutzerhandbuch beschrieben.
Die Beschreibungen zu folgenden Programmen finden Sie in dieser
Datei:
BGIOBJ (ein Konvertierungsprogramm für Grafiktreiber und -Zeichensätze)
CPP (der Turbo C++ Präprozessor)
GREP (ein Zusatzprogramm zum Durchsuchen von Dateien)
OBJXREF (erstellt Querverweislisten für Objektmodule)
THELP (das Zusatzprogramm Turbo-Hilfe)
TRIGRAPH (ein Zusatzprogramm zur Zeichenkonvertierung)
PRJCNVT (Konvertierung von Turbo C 2.0 Projektdateien in das
Turbo C++ Format)
In diesem Kapitel wird jedes Zusatzprogramm erläutert und dessen
Anwendung mit Code und Kommandozeilen-Beispielen demonstriert.
========================================================================
BGIOBJ: Das Konvertierungsprogramm für Grafiktreiber und Zeichensätze
---------------------------------------------------------------------
Mit BGIOBJ können Sie Grafiktreiber-Dateien und Zeichensätze (einge-
bundene Zeichensatz-Dateien) in Objekt-Dateien (.OBJ) konvertieren.
Sobald sie konvertiert sind, können sie in Ihr Programm gelinkt und
somit Teil der ausführbaren .EXE Datei werden. Dies ist eine
Alternative zum zum dynamischen Ladevorgang des Grafikpakets, bei dem
Ihr Programm Grafiktreiber und Zeichensätze (eingebundene
Zeichensätze) zur Laufzeit von Platte lädt.
Das direkte Linken der Grafiktreiber und Zeichensätze in Ihr Programm
ist von Vorteil, da die ausführbare Datei alle (bzw. die meisten)
Grafiktreiber und/oder Zeichensätze, die es vielleicht benötigt,
enthält und deshalb nicht zur der Laufzeit auf Grafiktreiber- und
Zeichensatz-Dateien zugreifen muß. Das Linken der Grafiktreiber und
Zeichensätze in Ihre ausführbare Datei vergrößert diese naturgemäß.
Mit dem Zusatzprogramm BGIOBJ.EXE können Sie eine Grafiktreiber- bzw.
Zeichensatz-Datei zu einer linkfähigen Objekt-Datei konvertieren. Hier
die vereinfachte Syntax:
BGIOBJ Quelldatei
dabei ist Quelldatei die Grafiktreiber- bzw. Zeichensatz-Datei, die in
eine Objekt-Datei konvertiert wird. Die neue Objekt-Datei hat den
selben Dateinamen wie die Quelldatei mit der Extension .OBJ; zum
Beispiel wird EGAVGA.BGI zu EGAVGA.OBJ, aus SANS.CHR wird SANS.OBJ,
usw.
Neue .OBJ-Dateien zur GRAPHICS.LIB hinzufügen
Sie sollten die Grafiktreiber- und Zeichensatz-Objektmodule zur
GRAPHICS.LIB hinzufügen, damit der Linker sie beim Linken in den
Grafik-Routinen finden kann. Falls Sie das nicht tun, müssen Sie sie
in die Dateiliste der TC-Projekt-Datei (.PRJ), die Dateiliste in der
TCC-Kommandozeile oder in der TLINK-Kommandozeile aufnehmen. Um
Objektmodule in GRAPHICS.LIB aufzunehmen, aktivieren Sie TLIB mit
der folgenden Kommandozeile:
tlib graphics + Objekt_Datei [+ Objekt_Datei ...]
wobei Objekt_Datei der Name der Objekt-Datei ist, die mit BGIOBJ.EXE
erzeugt wurde (wie beispielsweise CGA, EGAVGA, GOTH usw.). Die Exten-
sion .OBJ wird dabei automatisch angehängt. Um Zeit zu sparen, können
Sie mehrere Dateien in einer Kommandozeile angeben; hierfür ein
Beispiel im folgenden Abschnitt.
Registrierung eines Grafiktreibers und -Zeichensatzes
Nachdem Sie die Grafiktreiber- und Zeichensatz-Objektmodule GRAPHICS.
.LIB hinzugefügt haben, müssen Sie alle Grafiktreiber- und Zeichen-
sätze, die gelinkt werden sollen, registrieren. Dazu rufen Sie
registerbgidriver und registerbgifont in Ihrem Programm auf (bevor
Sie initgraph aufrufen). Das Grafiksystem weiß nun, daß diese Dateien
existieren und stellt sicher, daß sie gelinkt werden, wenn der Linker
eine ausführbare Datei erzeugt.
Jeder Registrierungs-Routine ist ein Parameter zugeordnet; ein symbo-
lischer Name, der in graphics.h definiert ist. Jede Registrierungs-
Routine liefert einen nicht-negativen Wert, wenn Grafiktreiber und
Zeichensatz erfolgreich registriert wurden.
Die folgende Tabelle zeigt die Namen, die mit registerbgidriver und
registerbgifont verwendet werden. In dieser Liste sind alle Grafik-
treiber und Zeichensätze von Turbo C++ enthalten.
Grafiktreiber-Datei registerbgidriver Zeichensatz-Datei registerbgifont
(*.BGI) symbolischer Name (*.CHR) symbolischer Name
===========================================================================
CGA CGA_driver TRIP triplex_font
EGAVGA EGAVGA_driver LITT small_font
HERC Herc_driver SANS sansserif_font
ATT ATT_driver GOTH gothic_font
PC3270 PC3270_driver
IBM8514 IBM8514_driver
Ein Beispiel
Angenommen, Sie möchten die Dateien für den CGA-Grafiktreiber, den
Gothic- und den Triplex-Zeichensatz zu Objektmodulen compilieren und
danach in Ihr Programm linken. Dazu gehen Sie folgendermaßen vor:
Konvertieren Sie die Binärdateien mit Hilfe von BGIOBJ.EXE, wie in
den folgenden einzelnen Kommandozeilen gezeigt wird.
bgiobj cga
bgiobj trip
bgiobj goth
Dadurch werden drei Dateien erzeugt: CGA.OBJ, TRIP.OBJ, and GOTH.OBJ.
Sie können diese Objekt-Dateien mit nachfolgender TLIB Kommandozeile
zur GRAPHICS.LIB hinzufügen:
tlib graphics +cga +trip +goth
Wenn Sie die Objekt-Dateien nicht zu GRAPHICS.LIB hinzufügen, müssen
Sie die Objekt-Dateinamen CGA.OBJ, TRIP.OBJ und GOTH.OBJ Ihrer Projekt-
liste (wenn Sie die integrierte Umgebung von Turbo C++ benutzen),
oder der TCC-Kommandozeile hinzufügen. Die TCC-Kommandozeile würde
beispielsweise wie folgt aussehen:
tcc niftgraf graphics.lib cga.obj trip.obj goth.obj
Sie registrieren diese Dateien in Ihrem Grafikprogramm folgendermaßen:
Sollten Sie die Linker-Fehlermeldung "Segment exceeds 64K" nach dem Linken
einiger Grafiktreiber und/oder Zeichensätze bekommen, verweisen wir auf den
folgenden Abschnitt.
/* Header-Datei deklariert CGA_driver, triplex_font & gothic_font */
#include <graphics.h>
/* Auf Fehler überprüfen (man kann nie wissen...) */
if (registerbgidriver(CGA_driver) < 0) exit(1);
if (registerbgifont(triplex_font) < 0) exit(1);
if (registerbgifont(gothic_font) < 0) exit(1);
/* ... */
initgraph(....); /* initgraph sollte nach der Regi-
strierung aufgerufen werden */
/* ... */
Die /F Option
Dieser Abschnitt beschreibt, was Sie tun müssen, wenn Sie nach dem
Linken mehrerer Grafiktreiber- und/oder Zeichensatz-Dateien (ins-
besondere bei Verwendung der Speichermodelle Small und Compact) die
Linker-Fehlermeldung "Segment exceeds 64K" (oder etwas ähnliches)
erhalten.
Per Vorgabe benutzen alle, von BGIOBJ.EXE erzeugten Dateien das
gleiche Segment (mit Namen _TEXT). Dies kann problematisch werden,
wenn Ihr Programm viele Grafiktreiber und/oder Zeichensätze linkt
bzw. wenn Sie die Speichermodelle Small oder Compact benutzen.
Zur Lösung dieses Problems können Sie einen oder mehrere Grafiktreiber
oder Zeichensätze mit der BGIOBJ /F Option konvertieren. BGIOBJ wird
mit dieser Option angewiesen, einen Segmentnamen vom Typ filename_TEXT
zu benutzen, so daß das vorgegebene Segment nicht durch alle gelinkten
Grafiktreiber und Zeichensätze überlastet ist (das gilt bei den Spei-
chermodellen Small und Compact für den Programmcode). Durch die folgen-
den zwei BGIOBJ-Kommandozeilen wird BGIOBJ angewiesen, Segmentnamen vom
Typ EGAVGA_TEXT und SANS_TEXT zu benutzen.
bgiobj /F egavga
bgiobj /F sans
Wenn Sie /F wählen, hängt BGIOBJ ebenfalls F an den Dateinamen des
Zielobjektes (EGAVGAF.OBJ, SANSF.OBJ, usw.) und hängt _far an den
Namen, der mit registerfarbgidriver und registerfarbgifont benutzt
wird. (Zum Beispiel: EGAVGA_driver wird zu EGAVGA_driver_far.)
Bei Dateien, die mit /F erzeugt wurden, müssen Sie diese Far-Regi-
strierungs-Routinen anstelle des regulären registerbgidriver und
registerbgifont benutzen. Zum Beispiel:
if (registerfarbgidriver(EGAVGA_driver_far) < 0) exit(1);
if (registerfarbgifont(sansserif_font_far) < 0) exit(1);
Weitere Funktionen
In diesem Abschnitt werden weitere Funktionen von BGIOBJ und die
Routinen registerfarbgidriver und registerfarbgifont beschrieben.
Nur erfahrene Benutzer sollten diese Funktionen anwenden.
Dies ist die vollständige Syntax der BGIOBJ.EXE-Kommandozeile:
BGIOBJ [/F] Quelldatei Zieldatei globaler_Name seg_Name seg_Klasse
Diese Tabelle beschreibt die Parameter der BGIOBJ-Kommandozeile.
Parameter Beschreibung
======================================================================
/F or -F Diese Option weist BGIOBJ.EXE an, einen anderen Seg-
mentnamen als _TEXT (die Vorgabe) zu verwenden, sowie
den globalen Namen und den Namen der Zieldatei zu
ändern.
Quelldatei Zu konvertierende Grafiktreiber- bzw Zeichensatz-Datei.
Wenn die Datei nicht mit Turbo C++ ausgeliefert wurde,
sollten Sie einen vollständigen Dateinamen (mit Exten-
sion) angeben.
Zieldatei Name der zu erzeugenden Objekt-Datei. Die Standardvorgabe
ist Quelldatei.OBJ bzw. QuelldateiF.OBJ, wenn Sie die
/F Option verwenden.
globaler Name Der Name, der beim Aufruf von registerbgidriver bzw.
registerbgifont (oder der entsprechenden far-Version)
verwendet wird.
Es ist der externe Name, der ebenfalls vom Linker be-
nutzt wird, und muß im Programm mit einem Unterstrich
versehen werden. Falls Ihr Programm Pascal-Aufruf-
Konventionen verwendet, muß der globale Name aus Groß-
buchstaben bestehen und darf mit keinem Unterstrich
eingeleitet werden.
Segmentname Der Segmentname ist optional; die Standardvorgabe
ist _TEXT (bzw. Dateiname_TEXT bei Verwendung des
Parameters /F).
Segmentklasse Die Klassifizierung des Segments ist optional; die
Standardvorgabe ist CODE.
Alle Parameter, außer der Quelldatei, sind optional. Wenn Sie jedoch
einen optionalen Parameter spezifizieren, müssen auch alle voran-
stehenden Parameter spezifiziert werden.
Wenn Sie eigene globale Namen verwenden wollen, müssen Sie Ihrem
Programm entsprechende Prototypen hinzufügen.
void globaler_Name(void); /* Für die Konvertieruung ohne /F bzw. */
/* mit dem Standard-Segmentnamen */
extern int far globaler_Name[]; /* Für die Konvertierung mit /F */
/* bzw. mit Segmentname != _TEXT */
Bei diesen Deklarationen stimmt globaler_Name mit dem globalen
Namen überein, der bei der Konvertierung mit BGIOBJ verwendet wurde.
Die Header-Datei graphics.h enthält Deklarationen der globalen Namen
der Standardvorgaben von Grafiktreibern und Zeichensätzen. Wenn
Sie mit diesen Standard-Treibern und Zeichensätzen arbeiten, sind
Deklarationen nicht notwendig.
Nach der Deklaration müssen alle Grafiktreiber und Zeichensätze in
Ihrem Programm registriert werden. Wenn Sie nicht mit der /F Option
arbeiten und den Standard-Segmentnamen nicht ändern, sollten Sie
die Grafiktreiber und Zeichensätze mit Hilfe von registerbgidriver
und registerbgifont registrieren; anderenfalls verwenden Sie
registerfarbgidriver und registerfarbgifont.
Hier sehen Sie ein Programmbeispiel, das eine Zeichensatz-Datei in
den Speicher lädt:
/* Beispiel, in dem eine Zeichensatz-Datei in den Speicher geladen wird */
#include <graphics.h>
#include <io.h>
#include <fcntl.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <process.h>
#include <alloc.h>
main()
{
void *gothic_fontp; /* Zeigt auf den Zeichensatz-Puffer im Speicher */
int handle; /* Datei-Handle für I/O */
unsigned fsize; /* Dateigröße (und Puffer) */
int errorcode;
int graphdriver;
int graphmode;
/* Öffnen der Zeichensatz-Datei */
handle = open("GOTH.CHR", O_RDONLY|O_BINARY);
if (handle == -1)
{
printf("Zeichensatz-Datei 'GOTH.CHR' kann nicht geöffnet werden\n");
exit(1);
}
/* Dateigröße herausfinden */
fsize = filelength(handle);
/* Puffer zuweisen */
gothic_fontp = malloc(fsize);
if (gothic_fontp == NULL)
{
printf("Speicherplatz für Zeichensatz-Datei 'GOTH.CHR' nicht zuweisbar\n");
exit(1);
}
/* Zeichensatz in den Speicher einlesen */
if (read(handle, gothic_fontp, fsize) != fsize)
{
printf("Zeichensatz-Datei 'GOTH.CHR' kann nicht gelesen werden\n");
exit(1);
}
/* Zeichensatz-Datei schließen */
close(handle);
/* Zeichensatz registrieren */
if (registerfarbgifont(gothic_fontp) != GOTHIC_FONT)
{
printf("Zeichensatz-Datei 'GOTH.CHR' kann nicht registriert werden\n");
exit(1);
}
/* Grafik finden und initialisieren */
graphdriver = DETECT;
initgraph(&graphdriver, &graphmode, "..");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Grafik-Fehler: %s\n",grapherrormsg(errorcode));
exit(1);
}
settextjustify(CENTER_TEXT, CENTER_TEXT);
settextstyle(GOTHIC_FONT, HORIZ_DIR, 4);
outtextxy(getmaxx()/2,getmaxy()/2,
"Borland Graphics Interface (BGI)");
/* Mit beliebiger Taste beenden */
getch();
/* Grafik schließen */
closegraph();
return(0);
}
========================================================================
CPP: Der Präprozessor
---------------------
CPP erstellt Listings von C-Quelltexten, die Include-Dateien und
#define Makros enthalten. Er ist nicht zur normalen Compilierung
eines C-Programms erforderlich.
Wenn der Compiler einen Fehler innerhalb eines Makros oder einer
Include-Datei meldet, erhalten Sie oft mehr Information über den
Fehler, wenn Sie sich die Include-Dateien oder das Ergebnis des
erweiterten Makros ansehen. In vielen Multi-pass Compilern (Com-
piler, die mit mehreren Durchläufen arbeiten) führt ein separater
Durchlauf diese Aufgabe aus, das Ergebnis des Durchlaufs kann dann
untersucht werden. Da Turbo C++ einen integrierten Single-pass Com-
piler benutzt, wird CPP mitgeliefert, um die Funktion, die bei ande-
ren Compilern der erste Durchlauf erfüllt, auch Turbo C++ Benutzern
zur Verfügung zu stellen.
Sie verwenden CPP genauso wie TCC, den eigenständigen Kommandozeilen-
Compiler. CPP liest auch aus der TURBOC.CFG-Datei die Standardvorgaben
ab und akzeptiert dieselben Kommandozeilen-Parameter wie TCC.
Die TCC-Parameter, die mit CPP nicht übereinstimmen, werden von CPP
ignoriert. Geben Sie cpp nach dem DOS-Prompt ein, und Sie erhalten
eine Liste der CPP-Argumente.
In der CPP-Kommandozeile aufgelistete Dateinamen werden mit einer
Ausnahme wie bei TCC behandelt, wobei Jokerzeichen erlaubt sind.
Die Ausnahme besteht in der Behandlung aller Dateien als C-Quell-
dateien. Es gibt keine spezielle Handhabung der .OBJ, .LIB oder
.ASM-Dateien.
Jede von CPP übersetzte Datei wird in eine Datei im aktuellen
Directory (bzw. in das durch die Option -n benannte Ausgabe-
Directory) geschrieben. Die Extension .C wird jeweils durch die
Extension .I ersetzt.
Diese Ausgabedatei ist eine Textdatei und enthält jede Zeile der
Quelldatei, sowie sämtliche Include-Dateien. Präprozessor-Direktiven
wurden entfernt, ebenso Textzeilen, die von der Compilierung aus-
geschlossen wurden. Soweit in der Kommandozeile nicht durch Setzen
eines Parameters anders spezifiziert, beginnt jede Textzeile mit
der Zeilennummer und dem Namen der Quelltext- bzw. Include-Datei.
Innerhalb einer Textzeile werden sämtliche Makros durch ihre
volle Definition ersetzt.
Wichtig! Die Ausgabedatei von CPP kann aufgrund des Dateinamens
und der Zeilennummer, die jeder Zeile einer Quelldatei vorangestellt
wird, nicht compiliert werden.
CPP als Makro-Präprozessor
Mit Hilfe der -P Option setzt CPP vor jede Zeile den Namen und die
Zeilennummer der Quelldatei. Geben Sie -P- an (wodurch die Option
ausgeschaltet wird), wird diese Zeilennummernangabe unterdrückt.
Nun können Sie CPP als Makro-Präprozessor verwenden; die entstandene
.I-Datei kann mit TC oder TCC compiliert werden.
Ein Beispiel:
Das folgende einfache Beispiel demonstriert die Verarbeitung einer
Datei, zuerst mit dem Parameter -P, danach mit dem Parameter -P-.
Quelldatei: HELLOJOE.C
#define NAME "Josef Schmidt"
#define BEGIN {
#define END }
main()
BEGIN
printf("%s\n", NAME);
END
Kommandozeile zur Aktivierung von CPP als Präprozessor:
cpp hellojoe.c]
Ausgabe:
hellojoe.c 1:
hellojoe.c 2:
hellojoe.c 3:
hellojoe.c 4:
hellojoe.c 5: main()
hellojoe.c 6: {
hellojoe.c 7: printf("%s\n","Josef Schmidt");
hellojoe.c 8: }
Kommandozeile zur Aktivierung von CPP als Makro-Präprozessor:
cpp -P- hellojoe.c]
Ausgabe:
main()
{
printf("%s\n","Josef Schmidt");
}
========================================================================
GREP: Absuchen von Quelltexten
------------------------------
GREP (Global Regular Expression Print) ist ein leistungsstarkes
Zusatzprogramm zum Absuchen von Quelltexten. Es ist eine Version
des gleichnamigen UNIX-Zusatzprogramms. Das Programm sucht eine
oder mehrere Textdateien nach vorgebenen Textteilen ab.
Es folgt ein kurzes Beispiel dafür, wann Sie GREP anwenden können.
Angenommen, Sie möchten wissen, welche Textdateien in Ihrem aktuellen
Directory den String "Elisabeth" enthalten.
Sie geben hierfür die Anweisung:
grep Elisabeth *.txt
und GREP antwortet darauf mit einer Liste von Zeilen in jeder Datei,
die den String "Elisabeth" enthält. Die Strings "elisabeth" und
"ELISABETH" werden dabei nicht berücksichtigt.
GREP kann jedoch weitaus mehr, als nur einen bestimmten, genau
beschriebenen String auffinden.
Im folgenden Abschnitt sehen Sie, wie Sie mit GREP nach einem String
suchen, der mit einem bestimmten Muster übereinstimmt.
Kommandozeilen-Syntax
Die allgemeine Syntax für GREP ist:
grep [Schalter] Suchstring [Dateispez...]
Ein Schalter besteht aus einem oder mehreren Buchstaben, dem ein
Bindestrich (SYMBOL -) vorangestellt wird; damit lassen sich ver-
schiedene Aspekte von GREP ändern.
Suchstring gibt das Muster an, nach dem gesucht wird.
Dateispez (eine Liste von Dateispezifikationen) weist GREP an, in
welchen Dateien gesucht werden soll. Ist keine Datei angegeben,
geht GREP nach der Standardeingabe vor.
Zusätzlich erhalten Sie mit dem Befehl
GREP ?
eine kurze Hilfeanzeige am Bildschirm mit den Kommandozeilen-
Schaltern, speziellen Zeichen und Standardvorgaben. (Siehe die
Beschreibung des Kommandozeilen-Schalters -u, mit dem Sie die
Standardvorgabe für GREP ändern.)
Die Schalter von GREP
Die Schalter in der Kommandozeile bestehen aus einem oder mehreren
Zeichen, dem ein Bindestrich (-) vorangestellt wird. Jedes einzelne
Zeichen ist ein Schalter, der an- oder ausgeschaltet werden kann.
Das Pluszeichen (+) nach einem Buchstaben schaltet den betreffenden
Schalter an, mit einem Minuszeichen (-) wird dieser abgeschaltet.
Die Standardvorgabe ist "+". -r bedeutet also dasselbe wie -r+.
Sie können mehrere Schalter hintereinander einzeln auflisten
(z.B.-i-d-l), oder können sie auch kombinieren (z. B.: -ild oder
-il, -d, usw.); GREP macht da keinen Unterschied.
Die Schalter von GREP sind wie folgt definiert:
Schalter Bedeutung
=======================================================================
-c count
Gibt nur die Anzahl von Übereinstimmungen aus. Für jede
Datei, bei der zumindest in einer Zeile der Suchstring
vorkommt, wird der Dateiname zusammen mit der Anzahl der
Übereinstimmungen in Zeilen angegeben, weitere Angaben
erfolgen nicht.
-d directories
Dateien werden nicht nur im angegebenen Verzeichnis
gesucht, sondern auch in allen Subdirectories, die zu
diesem Directory gehören. Wenn Sie keinen Pfad angeben,
sucht GREP im aktuellen Directory.
-i ignore case
GREP behandelt Groß- und Kleinbuchstaben gleich, wobei die
deutschen Umlaute (wie üblich) nicht mit eingeschlossen
sind. 'Ä' und 'ä' sind also auch in diesem Fall
"verschiedene" Zeichen.
-l list
Wenn der Suchstring innerhalb einer Datei gefunden wird,
gibt GREP nur den Namen dieser Datei aus und setzt die
Suche sofort in der nächsten Datei fort.
-n number
Jede Zeile, in der GREP den Suchstring findet, wird
zusammen mit ihrer Zeilennummer ausgegeben.
-o output format UNIX
Paßt die Ausgaben von GREP dem Ausgabeformat von UNIX an.
Jeder angegebenen Zeile wird der Name der entsprechenden
Datei vorangestellt.
-r regular expression
Der durch Suchstring angegebene Text wird nicht als direkte
Angabe, sondern als regulärer Ausdruck behandelt. Die
Standardvorgabe bei diesem Schalter ist "an".
-u update options.
GREP kombiniert die hier angegebenen Schalter mit den
Standardvorgaben und schreibt eine neue Version von sich
selbst, die mit diesen Parametern als Standardvorgabe
arbeitet. Damit läßt sich das Programm jederzeit
individuell anpassen. Wollen Sie die Voreinstellungen
sehen, so geben Sie auf der DOS-Ebene den Befehl
GREP ?
ein. Jedem Schalter auf dem Hilfe-Bildschirm folgt ein
Plus- oder Minuszeichen, je nach seiner Standardvorgabe.
-v vice versa
Nur Zeilen, in denen GREP den Suchstring nicht findet,
werden ausgegeben.
-w word search
Mit dem Suchstring übereinstimmende Zeichenfolgen werden
nur dann als "gefunden" betrachtet, wenn vor und nach ihnen
ein Trennzeichen steht. Standardmäßig betrachtet GREP die
Zeichen A..Z, a..z, 0..9 und den Unterstrich (_) als Teil
eines Wortes.
Mit einer Angabe der Form -w[Zeichensatz] läßt sich
festlegen, welche Zeichen GREP als Teil eines Wortes
betrachten soll. Als Zeichensatz ist jeder reguläre
Ausdruck zulässig.
Wenn Sie den Zeichensatz als alphabetische Zeichenfolge
definieren, enthält dieser automatisch alle Groß- und
Kleinbuchstaben (ganz gleich, wie er eingegeben wird),
auch bei einer Suche, bei der zwischen Groß- und Klein-
schreibung unterschieden wird. Wenn Sie den Schalter
-w in Kombination mit dem Schalter -u verwenden, wird
der neue Zeichensatz als Standardvorgabe gespeichert.
-z verbose
GREP gibt bei jeder durchsuchten Datei den Namen sowie die
Anzahl der gefundenen Zeilen aus, auch wenn die Datei keine
Übereinstimmungen enthält. Gefundene Zeilen werden mit
vorangestellter Zeilennummer ausgegeben.
Rangfolge der Schalter
Wie gesagt, ist jede GREP-Option ein Schalter. Er wird in der
Reihenfolge, in der er gesetzt wurde, bearbeitet. Jeder Schalter
kann entweder ein- oder ausgeschaltet sein. Jede neue Schalter-
angabe überschreibt die vorangegangene. Bei folgender Kommando-
zeile
grep -r -d -i -r- main( my*.c
arbeitet GREP mit eingeschaltetem -d und -i Schalter und ausge-
schaltetem -r Schalter.
Sie können Standardvorgabe für jeden Schalter in GREP.COM mit dem -u
Schalter selbst angeben. Wenn GREP immer eine "verbose-Suche" (-z an)
durchführen soll, können Sie dies mit folgendem Befehl angeben:
grep -u -z
Der Wert des Suchstrings definiert ein bestimmtes Muster, nach
dem GREP suchen soll. Ein Suchstring kann entweder ein regulärer
Ausdruck oder ein literaler String sein.
Bei einem regulären Ausdruck haben bestimmte Zeichen eine spezielle
Bedeutung: Sie sind Operatoren und bestimmen die Suche.
In einem literalen String gibt es keine Operatoren: Jedes Zeichen
wird als direkte Angabe behandelt.
Falls Leerzeichen und Tabulatoren nicht als Trennzeichen interpre-
tiert werden sollen, müssen Sie den Suchstring in Anführungszeichen
setzen. Der Suchstring darf nicht über das Zeilenende hinausgehen,
d.h. der Text, nach dem gesucht werden soll, muß in einer einzigen
Zeile stehen.
Ein regulärer Ausdruck kann ein einzelnes Zeichen oder eine Zeichen-
folge sein, die in Klammern steht. Eine Verknüpfung von regulären
Ausdrücken ergibt wiederum einen regulären Ausdruck.
Operatoren bei regulären Ausdrücken
Wenn Sie mit dem Schalter -r arbeiten (Standardvorgabe an), wird
der Suchstring als regulärer Ausdruck behandelt (und nicht als
literaler Ausdruck). Die folgenden Zeichen haben dabei eine
besondere Bedeutung:
Zeichen Bedeutung
======================================================================
^ steht für den Beginn einer Zeile, wenn es als erstes Zeichen
des Suchstrings angegeben ist.
$ steht für ein Zeilenende, wenn es als letztes Zeichen des
Suchstrings angegeben ist.
. steht für ein beliebiges Zeichen.
* steht für eine beliebige Anzahl von Wiederholungen des voran-
gehenden Zeichens: die Suche nach fo* findet f (0 Wieder-
holungen von o), fo, foo, fooo usw. - nicht aber fa.
+ arbeitet ähnlich wie *, setzt aber mindestens ein Vorkommen
des vorangehenden Zeichens voraus. Die Suche nach fo+ findet
fo, foo, fooo usw. - nicht jedoch f.
[ ] ein durch eckige Klammern eingeschlossener String wird als
Zeichensatz behandelt. Ist das erste Zeichen im String ein
Zirkumflex (^), entspricht der Ausdruck jedem Zeichen, außer
den im String vorkommenden Zeichen.
Eine Angabe wie [xyz] sucht nach den Buchstaben x, y und z;
die Angabe [^xyz] nach sämtlichen Zeichen, außer x, y und
z. Sie können auch einen bestimmten Zeichenbereich
spezifizieren, indem Sie zwei Zeichen mit einem Bindestrich
verbunden als Grenzzeichen angeben. Der Zirkumflex läßt
sich auch auf Zeichenbereiche anwenden. [^a-f] sucht nach
sämtlichen Zeichen, außer den Kleinbuchstaben von a bis f,
[a-bd-z?] nur nach dem Fragezeichen und allen
Kleinbuchstaben außer c.
\ Das Escape-Zeichen ermöglicht die Suche nach einzelnen Zei-
chen, die ansonsten speziell interpretiert würden. \. sucht
in einem Ausdruck nach einem Dezimalpunkt, \$ nach einem
Dollarzeichen usw.
Hinweis: Vier der "speziellen" Zeichen ($, ., *, and +) haben
keine bestimmte Bedeutung innerhalb eines Zeichensatzes. Der
Zirkumflex (^) wird nur dann als Negation gewertet, wenn er
direkt am Anfang des Zeichensatzes (also direkt nach dem [)
steht.
Alle in dieser Liste nicht aufgeführten Zeichen werden direkt
miteinander verglichen (> mit >, # mit #, usw.).
Dateinamen
Dateinamen legen fest, welche Dateien (oder Dateigruppen)
abgesucht werden sollen.
Dateinamen können explizit angegeben werden oder nach den üblichen
DOS-Konventionen, also mit Joker oder Fragezeichen. Sie können auch
mit einem Suchweg und/oder einem Laufwerksbezeichner angegeben werden.
Bei Dateien ohne Pfadangabe sucht GREP im aktuellen Directory.
Wenn überhaupt kein Dateiname angegeben wird, liest GREP die
Standardeingabe des Systems (was ohne eine Umleitung der Ein-/
Ausgabe von DOS nicht allzuviel Sinn hat).
Einige Beispiele
Folgende Beispiele zeigen eine Kombination der Funktionen von
GREP, um verschiedenartige Suchen auszuführen. Dabei gehen wir
davon aus, daß die Standardvorgaben nicht verändert wurden.
Beispiel 1:
GREP wird durch einen Suchstring angewiesen, nach dem Wort main
zu suchen, vor dem keine Kleinbuchstaben stehen dürfen [^a-z], dem
ein oder mehrere Leerzeichen folgen sollen (\ *) und danach eine
linke runde Klammer.
Da Leerzeichen und Tabulatoren als Begrenzer von Kommandozeilen
betrachtet werden, müssen diese in Anführungszeichen stehen, wenn sie
Teil eines regulären Ausdrucks sein sollen. In unserem Fall ist das
Leerzeichen nach main durch das Escape-Zeichen explizit angeführt.
Sie könnten aber auch das Leerzeichen in Anführungszeichen setzen.
Aufruf: grep -r [^a-z]main\ *( *.c
Findet: main(i:integer)
main(i,j:integer)
if (main ()) halt;
Findet nicht: mymain()
MAIN(i:integer);
Sucht in: allen Dateien im aktuellen Directory mit der Extension .C.
Beispiel 2:
Da Backslash (\) und Punkt (.) normalerweise eine besondere Bedeutung
im Pfad und Dateinamen haben, müssen Sie das Backslash-Escape-Zeichen
unmittelbar davor setzen, wenn nach diesen Zeichen gesucht werden soll.
Der Schalter -i wird hier verwendet, damit bei der Suche die Groß- und
Kleinschreibung außer acht gelassen wird.
Aufruf: grep -ri [a-c]:\\data\.fil *.c *.inc
Findet: A:\data.fil
C:\Data.Fil
B:\DATA.FIL
Findet nicht: D:\data.fil
A:data.fil
Sucht in: allen Dateien im aktuellen Directory mit der
Extension .C oder .INC.
Beispiel 3:
Hier wird die Suche nach einem bestimmten Wort definiert.
Aufrufe: grep -ri [^a-z]wort[^a-z] *.doc
Findet: jedes Wort muß auf einer eigenen Zeile stehen
MEIN WORT!
Wort -- kleinste Einheit der Rede.
Am Anfang war das WORT, und das WORT war
Findet nicht: Mehrere Worte auf einer Zeile sind nicht erlaubt.
Nachwort schreibt man richtig so!
Sucht in: allen Dateien im aktuellen Directory mit der Extension .DOC
Beispiel 4:
Hier wird die Suche nach "Wort" definiert.
Aufruf: grep -iw wort *.doc
Findet: jedes Wort muß auf einer eigenen Zeile stehen.
MEIN WORT!
Wort -- kleinste Einheit einer Rede
Am Anfang war das WORT, und
Findet nicht: jedes Dokument beteht aus mindestens 2000 Wörtern
Er kann Nachwort nicht richtig buchstabieren
Sucht in: allen Dateien im aktuellen Directory mit der Extension .DOC.
Beispiel 5:
In diesem Beispiel wird nach einem String mit Leerzeichen gesucht.
Aufruf: grep "Suchstring mit Leerzeichen" *.doc *.c a:\work\myfile.*
Findet: Das ist ein Suchstring mit Leerzeichen darin.
Findet nicht: DAS IST EIN SUCHSTRING MIT LEERZEICHEN DARIN.
Ein SUCHSTRING mit Leerzeichen.
Sucht in: in allen Dateien im aktuellen Directory mit der Extension
.DOC und .C und in MYFILE.* im Directory \WORK im Laufwerk A.
Beispiel 6:
In diesem Beispiel wird nach einem der Zeichen ".:?' gesucht und am
Ende einer Zeile nach einem Komma.
Dem Anführungszeichen innerhalb eines Bereiches ist ein Escape-Zeichen
vorangestellt, damit es als normales Zeichen und nicht als Begrenzer
des Strings behandelt wird. Das $-Zeichen erscheint auch außerhalb des
angegebenen Strings. Damit wird gezeigt, wie mehrere reguläre Ausdrücke
zu einem einzigen längeren Ausdruck verkettet werden können.
Aufruf: grep -rd "[ ,.:?'\"]"$ \*.doc
Findet: Er sagte Hallo zu mir.
Wie geht's?
Vorausgesetzt, daß wir voraussetzen,
Ein Beispiel dazu:
"Manche Leute denken, Computer aber nicht."
Findet nicht: Er sagte "Hallo" zu mir
Wo gehst Du denn hin? Geht's gut
Sucht in: allen Dateien im Hauptdirectory mit der Extension .DOC
und allen Subdirectories des aktuellen Laufwerks.
Beispiel 7:
In diesem Beispiel wird die Groß- und Kleinschreibung ignoriert
und nur die Namen der Dateien ausgegeben, die wenigstens eine
Übereinstimmung enthalten. In den folgenden drei Aufrufen werden
unterschiedliche Spezifikationsarten von Mehrfachschaltern gezeigt.
Aufruf: grep -ild " der " \*.doc
grep -i -l -d " der " \*.doc
grep -il -d " der " \*.doc
Findet: unter Berücksichtigung der Tatsache, daß
...ärgerlich. Der Hauptgrund ...
Findet nicht: Derselbe Fehler wie oben
Geht nicht, weil das gesuchte Wort fehlt
Sucht in: allen Dateien im aktuellen Directory mit der Extension
.DOC und in allen Subdirectories des aktuellen Laufwerks.
Beispiel 8:
In diesem Beispiel wird der aktuelle Zeichensatz für ein Wort neu
definiert und zwar auf das Gleichheitszeichen (=) begrenzt, dann wird
nach dem Wort gesucht. GREP sucht damit nach den C-Zuweisungen, bei
welchen ein einzelnes Gleichheitszeichen (=) verwendet wird; die
Gleichheitstests, bei welchen zwei Gleichheitszeichen (==) verwendet
werden, werden damit außer acht gelassen.
Aufruf: grep -w[=] = *.c
Findet: i = 5;
j=5;
i += j;
Findet nicht: if (i == t) j++;
/* ======================= */
Sucht in: allen Dateien im aktuellen Directory mit der Extension .C.
========================================================================
OBJXREF: Kreuzreferenzen für Objektmodule erzeugen
--------------------------------------------------
OBJXREF untersucht eine Liste mit Objekt- und Bibliotheks-Dateien
und erstellt einen Bericht über deren Inhalt. In einer Berichtsart
werden die Definitionen globaler Namen und deren Referenzen auf-
geführt. Eine andere listet die von Objektmodulen definierten
Segmentgrößen auf.
Es gibt zwei Kategorien von globalen Namen: globale Variablen und
Funktionsnamen. Die Dateien TEST1.C und TEST2.C im Abschnitt
"OBJXREF Beispielberichte" enthalten Definitionen von globalen Namem
und deren externe Referenzen.
Objektmodule sind Objektdateien (.OBJ), die von TC, TCC oder TASM
erzeugt werden. Eine Bibliotheksdatei (.LIB) enthält mehrere
Objektmodule. Ein von TC erzeugtes Objektmodul erhält denselben
Namen wie die Quelldatei .C, aus der es compiliert wurde. Das gilt
ebenso für TCC, solange mit dem TCC-Kommandozeileparameter -o kein
anderer Name für die Ausgabedatei ausdrücklich angegeben wird.
Der Aufruf von OBJXREF
Der Aufruf von OBJXREF besteht aus dem Wort OBJXREF, gefolgt von
einer Reihe von Kommandozeilenparametern und einer Liste von Objekt-
und Bibliotheksdateinamen, die durch ein Leerzeichen oder einen
Tabulator voneinander getrennt sind. Die Syntax ist:
OBJXREF Optionen Dateiname Dateiname ...
Die Kommandozeilenparameter bestimmen die Berichtsart, die von OBJXREF
erzeugt wird, sowie die Informationsmenge der Ausgaben von OBJXREF.
Sie werden im nächsten Abschnitt ausführlicher besprochen.
Jedem Parameter wird ein Schrägstrich (/) vorangestellt, gefolgt von
einem ein bzw. zwei Zeichen langen Parameternamen.
Die Objekt- und Bibliotheksdateien können entweder in der Kommando-
zeile oder in einer Eingabedatei spezifiziert werden. In der Kommando-
zeile werden die Dateinamen durch ein Leerzeichen bzw. einen Tabulator
voneinander getrennt. Alle Objektmodule, die als .OBJ-Dateien genannt
sind, werden in den Berichten aufgeführt. Wie TLINK berücksichtigt
OBJXREF jedoch nur diejenigen Module der .LIB-Dateien, die einen glo-
balen Namen enthalten, auf den in einer .OBJ-Datei oder in einem vor-
herigen Modul in der .LIB-Datei Bezug genommen wird.
Generell gilt, daß alle .OBJ- und .LIB-Dateien, die zum korrekten
Linken eines Programms benötigt werden, zusammen mit der Start .OBJ-
Datei und einer oder mehreren C-Bibliotheken aufgelistet werden sollen.
Die Dateinamen können eine Laufwerksbezeichnung und einen Directory-
pfad enthalten. Die DOS-Jokerzeichen ? und * können zur Identifizierung
mehrerer Dateien verwendet werden. Die Dateinamen können sich auf
Objektdateien (.OBJ) oder auf Bibliotheksdateien (.LIB) beziehen.
Wenn keine Dateiextension angebeben wird, wird die Extension .OBJ
genommen.
Parameter und Dateinamen können in beliebiger Reihenfolge in der
Kommandozeile erscheinen.
OBJXREF-Ausgaben werden zur DOS-Standardausgabeeinheit geschrieben. Die
Standardvorgabe ist der Bildschirm. Die Ausgaben können mit dem DOS-
Umleitungszeichen (>) zum Drucker gesandt werden (mit >LPT1:) oder
in eine Datei (mit >lstfile).
Die Eingabe OBJXREF ohne Dateinamen oder Parameter erzeugt eine Auf-
stellung aller verfügbaren Parameter.
Der Aufruf von OBJXREF
Die OBJXREF Kommandozeilen-Parameter werden in zwei Kategorien
eingeteilt: Kontroll-Parameter und Ausgabe-Parameter
Die Kontroll-Parameter
Mit den Kontroll-Parametern werden die Standardvorgaben von
OBJXREF modifiziert (sie sind standardmäßig alle auf "aus" gesetzt).
Parameter Bedeutung
======================================================================
/I Unterscheidet bei globalen Namen nicht zwischen Groß- und
Kleinschreibung. Verwenden Sie diesen Parameter, wenn Sie
mit TLINK ohne den Parameter /C (der zwischen Groß- und
Kleinschreibung unterscheidet) arbeiten.
/D Sucht nach .OBJ-Dateien in einem anderen Directory.
Wenn OBJXREF in einem anderen als dem aktuellen Directory
suchen soll, geben Sie des Namen des Directories mit
vorangestelltem /D in der Kommandozeile an.
OBJXREF /Ddir1 [; dir2 [; dir3]]
oder
OBJXREF /Ddir1 [/Ddir2] [/Ddir3]
OBJXREF durchsucht jedes Directory in der angegebenen
Reihenfolge nach allen Objekt- und Bibliotheksdateien.
Wichtig!
Wenn Sie nicht mit dem Parameter /D arbeiten, sucht
OBJXREF nur im aktuellen Directory. Mit dem Parameter
/D wird jedoch das aktuelle Directory nicht durchsucht,
solange es nicht in der Directoryliste angegeben ist.
Wenn OBJXREF beispielsweise zuerst im BORLAND-Directory
und dann im aktuellen Directory nach Dateien suchen soll,
müssen Sie
OBJXREF /Dborland;.
eingeben. Der Punkt bezeichnet das aktuelle Directory.
/F Alle Objektmodule, die in Bibliotheksdateien (.LIB) ange-
geben sind, werden aufgeführt, auch wenn sie keine glo-
balen Namen enthalten, auf die in einem von OBJXREF ver-
arbeiteten Objektmodul Bezug genommen wird. Damit
erhalten Sie Informationen über den gesamten Inhalt einer
Bibliotheksdatei. (Siehe Beispiel 4 im Abschnitt
"OBJXREF- Beispiele".)
/O Damit können Sie eine Ausgabedatei spezifizieren, in die
OBJXREF den erzeugten Report ausgibt. Die Syntax ist:
OBJXREF Dateiname.obj /Berichtsoption /Ausgabedateiname.ext
Per Standardvorgabe wird alles auf dem Bildschirm ausgegeben.
/V Listet alle gelesenen Dateinamen auf und gibt die Gesamt-
zahl der gelesenen globalen Namen, Module, Segmente und
Klassen an.
/Z Schließt Segment-Definitionen der Länge Null mit ein.
Einige Module der Bibliotheken definieren Segmente ohne
tatsächlichen Inhalt. Die Namen dieser "Formalsegmente"
werden normalerweise nicht ausgegeben, um den Bericht
einigermaßen übersichtlich zu halten.
Ausgabe-Parameter
Die Ausgabe-Parameter bestimmen, welche Berichtsart erzeugt wird und
wie detailliert die ausgegebenen Informationen sind.
Parameter Beschreibung
=========================================================================
/RC Der Bericht enthält die Modulgrößen nach dem Klassentyp
der Segmente geordnet.
/RM Globale Namen werden in der Reihenfolge der sie definie-
renden Module und innerhalb dieser Module alphabetisch
angeordnet.
/RP Ausgegeben werden sämtliche globale Namen in alphabe-
tischer Reihenfolge zusammen mit den Namen des Moduls,
in dem Sie definiert sind.
Die Standardvorgaben:
/RR Ausgegeben werden die tatsächlich verwendeten globalen
Namen (public-Definitionen), auf die Bezüge existieren.
/RS Ausgegeben werden die Modulgrößen alphabetisch nach
ihrem Namen geordnet.
/RU Der Bericht führt die globalen Namen, die als public
deklariert, aber nicht benutzt werden, nach Modulnamen
geordnet auf.
/RV OBJXREF kombiniert sämtliche zuvor aufgeführten Bericht-
optionen in einem Bericht.
/RX Der Bericht enthält alle Module, auf die von anderen
Modulen Bezug genommen wird, geordnet nach den bezug-
nehmenden Modulen.
Globale Namen in C-Programmen erscheinen in den Berichten mit einem
führenden Unterstrich, außer wenn der Parameter -U- beim Compilieren
der Datei nicht angegeben wurde.
Sie können die Ausgabe von Modulen, Segmenten, Klassen und globalen
Namen einschränken, indem Sie in der Kommandozeile den entsprechen-
den Namen, angeführt vom Parameter /N, angeben. Zum Beispiel weist
OBJXREF Dateiliste /RM /NC0
OBJXREF an, nur Informationen über das Modul CO auszugeben.
Die Eingabedateien
Die Kommandozeile auf DOS-Ebene ist auf 128 Zeichen beschränkt.
Wenn die Liste Ihrer Optionen und Dateinamen länger ist, müssen
Sie Ihre Dateinamen in eine Eingabedatei schreiben.
Eine Eingabedatei ist eine mit einem Texteditor geschriebene Textdatei.
Wenn Sie bereits eine Dateinamenliste für Ihr Turbo C++ Programm vorbe-
reitet haben, erkennt OBJXREF verschiedene Eingabedateitypen.
Eingabedateien werden in der Kommandozeile mit einem der folgenden
Parameter aufgerufen. Der Name der Eingabedatei muß direkt nach dem
Parameter folgen, Leerzeichen zwischen Parameter und Dateinamen sind
nicht erlaubt (z.B. /Leing und nicht /L eing).
Sie können mehr als eine Eingabedatei in der Kommandozeile spezifi-
zieren; .OBJ und .LIB-Dateinamen können vorangestellt oder angefügt
werden.
Eingabedateien im freien Format
Mit einem Texteditor können Sie Eingabedateien im freien
Format erstellen. Listen Sie dafür die Namen aller Objekt- und
Bibliotheksdateien auf, die Sie zum Erzeugen Ihrer .EXE-Datei
benötigen.
Jede Datei, die in der Eingabedatei ohne Extension angegeben wird,
wird als Objektdatei behandelt.
Um Dateien im freien Format mit OBJXREF zu verwenden, geben
Sie jeden Eingabedateinamen in der Kommandozeile mit einem voran-
gestellten @ an und trennen sie von anderen Kommandozeileneingaben
durch ein Leerzeichen oder einen Tabulator:
@Dateiname @Dateiame ...
Projektdateien
Sie können auch Projektdateien, die mit der integrierten Umgebung
von Turbo C++ erzeugt wurden, als Eingabedateien verwenden.
Stellen Sie dem Projektdateinamen in der Kommandozeile den Parameter
/P voran, z.B.
/PDateiname
Wenn die Dateinamenangabe keine ausdrückliche Extension enthält, wird
die Extension .PRJ zugewiesen.
Enthält die Projektdatei Dateinamen mit der Extension .C oder gar
keiner Extension, werden sie als Spezifizierung der entsprechenden
.OBJ-Datei angesehen. Sie brauchen die Dateizuordnungen in Klammern
nicht zu entfernen; diese werden von OBJXREF einfach ignoriert.
Hinweis: In einer Projektdatei spezifiziert die Dateiliste alleine
noch kein vollständiges Programm -- Sie müssen ebenfalls eine Start-
datei (C0x.OBJ) und eine oder mehrere Bibliotheksdateien (MATHX.LIB,
EMU.LIB, und CX.LIB, zum Beispiel) von Turbo C++ angeben. Außerdem
können Sie mit dem Parameter /D das Directory angeben, in dem
OBJXREF nach Objektdateien suchen soll.
Befehlsdateien des Linkers
OBJXREF kann auch Befehlsdateien bearbeiten, welche für den Linker
geschrieben wurden. Sie müssen in der Kommandozeile mit /L eingeleitet
werden, wobei zwischen dem /L und dem Dateinamen kein Leerzeichen
stehen darf:
/LDateiname
Beispiel 2 im Abschnitt "Einige Beispiele mit OBJXREF" zeigt Ihnen
die Anwendung dieser Dateien.
Beispiel zur OBJXREF-Ausgabe
Angenommen, Sie haben zwei Quelldateien in Ihrem Directory von
Turbo C++ und möchten mit OBJXREF die compilierten Objektdateien
ausgeben. Diese Quelldateien sind TEST1.C and TEST2.C und sehen
folgendermaßen aus:
/* test1.c */
int i1; /* Definition i1 */
extern int i2; /* Bezug auf i2 in TEST2.C */
static int i3; /* kein globaler Name */
extern void look(void); /* Bezug auf look in TEST2.C */
void main(void) /* Definition von main */
{
int i4; /* lokale Variable */
look(); /* Bezug auf die Funktion look()*/
}
/* test2.c */
#include <process.h>
extern int i1; /* Bezug auf i1 */
int i2; /* Definition von i2 */
void look(void) /* Definition von look */
{
exit(i1); /* Bezug auf exit... */
} /* und auf i1 */
Die aus diesen Quelldateien compilierten Objektmodule heißen TEST1.OBJ
und TEST2.OBJ. Sie können OBJXREF anweisen, welche Berichtsart über
diese Objektdateien ausgegeben werden sollen, indem Sie in der Komman-
dozeile den Dateinamen, gefolgt vom Parameter /R und einem zweiten
Parameter, der den Berichtstyp bezeichnet.
Hinweis: Die folgenden Beispiele zeigen nur sinnvolle Teile des
Berichts.
Bericht zu globalen Namen (/@;RP)
Beim Aufruf mit dem Parameter /RP wird jeder globale Name aufge-
listet, der in den Objektmodulen, die ausgegeben werden, definiert
ist, gefolgt von dem Namen des Moduls, in welchen er definiert ist.
Bei einem Aufruf wie
OBJXREF /RP test1 test2
erscheint folgender, von OBJXREF erzeugter Bericht:
DEFINED IN
_i1 TEST1
_i2 TEST2
_look TEST2
_main TEST1
Bericht zu Modulen (/@;RM)
Beim Aufruf mit dem Parameter /RM werden alle Objektmodule aufgelistet,
gefolgt von einem Listing aller darin enthaltenen globalen Namen.
Bei einem Aufruf wie
OBJXREF /RM test1 test2
erzeugt OBJXREF folgende Ausgabe:
MODULE: TEST1 Definition der folgenden Symbole:
public: _i1
public: _main
MODULE: TEST2 Definition der folgenden Symbole:
public: _i2
public: _look
Bericht zu Bezügen (/@;RR)
Bei diesem Aufruf gibt OBJXREF die Namen aller globalen Namen aus.
Auf den Namen folgt das Modul, in dem der entsprechende Bezeichner
definiert ist, darunter die Namen der Module, die auf den jeweiligen
Bezeichner zugreifen. Dies ist Voreinstellung, wenn keine
Ausgabeoption definiert ist.
Bei einem Aufruf wie
OBJXREF /RR C0 test1 test2 CS.LIB
erzeugt OBJXREF folgende Ausgabe:
_exit (EXIT)
C0
TEST2
_i1 (TEST1)
TEST2
_i2 (TEST2)
_look (TEST2)
TEST1
_main (TEST1)
C0
Bericht zu externen Deklarationen (/RX)
Beim Aufruf mit dem Parameter /RX werden die Namen aller Module
ausgegeben, die externe Bezüge enthalten.
Bei einem Aufruf wie
OBJXREF /RX C0 test1 test2 CS.LIB
erzeugt OBJXREF folgende Ausgabe:
MODULE: C0 references the following symbols:
_main
MODULE: TEST1 references the following symbols:
_i2
_look
MODULE: TEST2 references the following symbols:
_exit
_i1
Bericht zu Segmentgrößen (/RS)
Beim Aufruf mit dem Parameter /RS gibt OBJXREF die Namen aller
Segmente des Programms zusammen mit ihrer Größe aus. Für jedes
Segment wird detailliert angegeben, aus welchen Modulen es sich
zusammensetzt. Wo kein Anfangswert einem im Segment definiertem
Symbol zugewiesen wurde, erscheint das Wort "uninitialized". Bei
Segmenten mit absoluter Adresse in einer .ASM-Datei erscheint
links der Angabe der Segmentgröße das Flag Abs.
Bei einem Aufruf wie
OBJXREF /RS test1 test2
erzeugt OBJXREF folgende Ausgabe:
These files were compiled using the large memory model.
(Diese Dateien wurden unter Verwendung des Speichermodells large compiliert.)
TEST1_TEXT
6 (00006h) TEST1
6 (00006h) total
TEST2_TEXT
10 (0000Ah) TEST2
10 (0000Ah) total
_BSS
4 (00004h) TEST1, uninitialized
2 (00002h) TEST2, uninitialized
6 (00006h) total
Bericht zu Klassentypen (/@;RC)
Beim Aufruf mit dem Parameter /RC gibt OBJXREF in alphabetischer
Reihenfolge der Namen der Segmentklassen die Definitionen der Segment-
größe aus. Die CODE-Klasse enthält Instruktionen, DATA enthält initia-
lisierte Daten und BSS nicht initialisierte Daten. Segmente ohne
Klassentyp-Spezifizierung werden mit der Anmerkung "No class type"
(Kein Klassentyp) aufgelistet.
Bei einem Aufruf wie
OBJXREF /RC C0 test1 test2 CS.LIB
erzeugt OBJXREF folgende Ausgabe:
BSS
4 (00004h) TEST1
2 (00002h) TEST2
...
132 (00084h) total
CODE
6 (00006h) TEST1
10 (0000Ah) TEST2
16 (00010h) total
DATA
143 (0008Fh) C0
143 (0008Fh) total
Bericht zu unbenutzten globalen Namen (/RU)
Beim Aufruf mit dem Parameter /RU gibt OBJXREF die Namen aller PUBLIC-
Bezeichner eines Programms aus, auf die kein Bezug in anderen Modulen
genommen wird. Ein globaler Name wird im Bericht aufgeführt, wenn eine
der folgenden Bedingungen erfüllt wird:
Auf die PUBLIC-Definition wird entweder nur innerhalb des definierenden
Moduls Bezug genommen und bräuchte deshalb nicht als PUBLIC definiert
werden. (Wenn es sich um ein C-Modul handelt, sollte das Schlüsselwort
static der Definition hinzugefügt werden; bei einem TASM-Modul entfer-
nen Sie einfach die PUBLIC-Definition).
oder
Sie findet nie Anwendung (könnte deshalb gelöscht werden, um Code bzw.
Speicherplatz zu sparen).
Bei einem Aufruf wie
OBJXREF /RU test1 test2
erzeugt OBJXREF folgende Ausgabe:
MODULE: TEST2 defines the unreferenced _i2.
Bericht zu allem (/RV)
Bei einem Aufruf mit /RV erzeugt OBJXREF jede der oben genannten
Berichtsarten.
Aufrufbeispiele zu OBJXREF
In den folgenden Beispielen wird davon ausgegangen, daß sich
die Anwendungs-Beispieldateien im aktuellen Directory des
Standardlaufwerks befinden und die Startup-(C0x.OBJ) und Bibliotheks-
dateiem im Directory \TURBOC\LIB stehen.
Beispiel 1
C>OBJXREF \turboc\lib\c0l test1 test2 \turboc\lib\cl.lib
In diesem Beispiel werden die Dateien TEST1.OBJ und TEST2.OBJ sowie
die Startdatei von Turbo C \TURBOC\LIB\C0L.OBJ und die Bibliotheks-
datei \@;TURBOC\LIB\CL.LIB angegeben. Da kein Ausgabetyp spezifiziert
ist, verwendet das Programm die Standardvorgabe /RR, d.h. erzeugt ein
Listing aller PUBLIC-Referenzen.
Beispiel 2
C>OBJXREF /RV /Ltest1.arf
Die Antwortdatei von TLINK TEST1.ARF enthält dieselbe Dateiliste
wie die Kommandozeile in Beispiel 1. Der Parameter /RV ist spezifi-
ziert, so daß von jeder Berichtsart ein Listing erzeugt wird.
TEST1.ARF enthält
\turboc\lib\c0l
test1 test2
test1.exe
test1.map
\turboc\lib\cl
Beispiel 3
C>OBJXREF /RC B:c0s /Ptest1 @libs
Die TC-Projektdatei TEST1.PRJ enthält die Angabe TEST1.OBJ und
TEST2.OBJ. Die Antwortdatei @libs spezifiziert die Bibliotheken auf
der Diskette im Laufwerk B. TEST1.PRJ enthält
test1
test2.c
Die Datei LIBS enthält
b:maths.lib b:emu.lib b:cs.lib
Die genannten Start- und Bibliotheksdateien hängen vom Speichermodell
und den Fließkommaoptionen ab, die beim Compilieren verwendet wurden.
Beim Aufruf mit /RC werden die Segmentklassen ausgegeben.
Beispiel 4
C>OBJXREF /F /RV \turboc\lib\cs.lib
Hier erzeugt OBJXREF einen Bericht über sämtliche in der Turbo C++
Bibliothek CS.LIB enthaltene Module. (Durch den Parameter /F wird
OBJXREF in diesem Fall gezwungen, alle in CS.LIB enthaltenen Module
aufzuführen.)
Meldungen von OBJXREF
OBJXREF gibt zwei Arten von Meldungen aus: Fehlermeldungen und Warnungen.
Fehlermeldungen
Out of memory
(Nicht genug Speicherplatz)
OBJXREF hält sämtliche Symbollisten im Hauptspeicher und braucht
wesentlich mehr Speicherplatz als TLINK. (Wenn Sie diese Meldung
erhalten, kann es deshalb durchaus sein, daß TLINK noch in der
Lage ist, die angegebenen Module zu einem Programm zu binden).
Speicherresidente Programme sollten vorübergehend entfernt werden.
Warnungen
WARNUNG: Unable to open input file <filename>
(Datei <Dateiname> nicht gefunden)
OBJXREF hat die angegebene Datei nicht gefunden oder war nicht in
der Lage, sie zu öffnen. Die Arbeit wird mit der nächsten angege-
benen Datei fortgesetzt.
WARNUNG: Unknown option - <option>
(Unbekannter Kommandozeilen-Parameter)
Nach Ausgabe dieser Meldung setzt OBJXREF die Arbeit fort -
unbekannte Kommandozeilen-Parameter werden ignoriert.
WARNUNG: Unresolved <symbol> in module <module>
(In Modul <Modul> vorausgesetztes Symbol <Symbol> ist nicht definiert)
Das PUBLIC-Symbol 'XXXXX' fehlt, d.h. ist in keiner der angegebenen
Dateien definiert. OBJXREF kennzeichnet fehlende Symbole in jedem
Listing explizit.
WARNUNG: Invalid file specification <filename>
(Dateiname <Dateiname> ist ungültig)
Der angegebene Dateiname entspricht nicht den DOS-Konventionen. Die
Arbeit wird mit der nächsten angegebenen Datei fortgesetzt.
WARNUNG: No files matching <filename>
(Keine der Suchmaske <Dateiname> entsprechenden Dateien gefunden)
Sie haben einen Dateinamen mit Jokerzeichen angegeben, allerdings
findet OBJXREF keine einzige Datei, die dieser Suchmaske entspricht.
Die Arbeit wird mit der nächsten angegebenen Datei fortgesetzt.
WARNUNG: <symbol> defined in <module1> duplicated in
<module2>
(<Symbol> mehrfach in <Modul1> und in <Modul2> definiert)
Das Symbol <Symbol> ist in mehr als einem Modul als PUBLIC definiert.
OBJXREF ignoriert die zweite Definition.
========================================================================
THELP: Das Zusatzprogramm Turbo-Hilfe
-------------------------------------
THELP.COM ist ein RAM-residentes (TSR) Zusatzprogramm, das auf die
Hilfeinformationen von Turbo C++ zugreift, wenn sie mit einem anderen
Editor als mit dem der integrierten Entwicklungsumgebung oder mit
Turbo Debugger arbeiten.
Die Installation von THELP
Wenn Sie Turbo C++ mit dem INSTALL Installationsprogramm auf Ihrem
System installieren, sollte THELP.COM bereits in Ihrem Hauptdirectory
von Turbo C++ stehen. Wenn nicht, kopieren Sie es von der Original-
diskette in Ihr Hauptdirectory.
Vergewissern Sie sich, daß sich die Textdatei TCHELP.TCH, die die
Hilfeinformationen von Turbo C++ enthält, im aktuellen Directory
befindet. Wenn TCHELP.TCH in einem anderen Directory stehen soll,
kann THELP jederzeit mit dem Kommandozeilen-Parameter /F diese Datei
finden). Wenn Sie mit INSTALL arbeiten, wird TCHELP.TCH in das
TURBOC-Directory geschrieben und THELP erhält automatisch die
Mitteilung, wo es danach zu suchen hat.
Die Größe des Speicherplatzes hängt davon ab, ob Sie mit einer
Swapdatei arbeiten, um Speicherplatz zu sparen. Wenn Sie mit einer
Swapdatei arbeiten wollen, besetzt THELP in aktivem Zustand 8K des
Speichers und zusätzlich 32K für die Swapdatei. Wenn Sie THELP
ohne Swapdatei benutzen, benötigt es immer 40K.
THELP laden und aktivieren
Achtung! Wenn Sie THELP gleichzeitig mit SideKick 1.x bzw. SideKick
Plus benutzen, müssen Sie zuerst THELP und danach SideKick laden.
Damit Sie THELP von jeder anderen Anwendung aus aufrufen können, müssen
Sie es in den RAM-Speicher laden. Geben Sie dazu THELP auf der DOS-Ebene
ein, bevor Sie eine andere Anwendung aufrufen. Sie müssen diesen Schritt
nur einmal nach dem Booten ausführen.
Sobald Sie in einer anderen Anwendung sind, können Sie THELP jeder-
zeit aktivieren, indem Sie den Cursor auf die Funktion setzen, über
die Sie eine Information möchten, danach drücken Sie die THELP-Taste.
THELP ist per Vorgabe der Taste 5 des numerischen Tastaturblocks
(scan code 4ch, shift state 00h) zugeordnet.
Hinweis: Wenn Sie THELP auf einem ATT6300 benutzen, müssen Sie mit dem
Parameter /L25 arbeiten, wie in Abschnitt "Zusammenfassung der THELP
Kommandozeilen-Parameter" in diesem Kapitel und in der Datei THELP.DOC
beschrieben.
Die THELP-Tasten
Mit den folgenden Tasten bewegen Sie den Cursor im Hilfe-Bildschirm,
den THELP auf Ihren Bildschirm ausgibt:
Taste Beschreibung
======================================================================
Auf Ab Bewegt die Hervorhebung von Schlüsselwort zu Schlüssel-
Rechts Links wort innerhalb des aktuellen Hilfe-Bildschirms.
PgUp/PgDn Zeigt den nächsten bzw. vorigen Bildschirm an, sofern
zusätzliche Bildschirmseiten vorhanden sind.
Enter Zeigt zusätzliche Hilfeinformationen zum hervorgehobe-
nen Schlüsselwort des aktuellen Hilfe-Bildschirms an.
Esc Verläßt den Hilfe-Bildschirm.
F1 Aktiviert den Hilfeindex. Wenn Sie bei angezeigtem
Hilfe-Bildschirm F1 drücken, erscheint der Hilfeindex.
Alt-F1 Wenn Sie Alt-F1 wiederholt drücken, können Sie
die letzten 20 Bildschirmanzeigen in umgekehrter
Reihenfolge sehen.
Ctrl-F1 Läßt den Hilfe-Bildschirm mit den Befehlstasten von
THELP erscheinen.
F Damit können Sie TCHELP.TCH durch eine neue Hilfedatei
ersetzen. Wenn Sie die F- Taste drücken, erscheint ein
Dateneingabefeld, in dem Sie neue Hilfedateien
angeben können. Geben Sie den vollständigen Pfad-
namen der neuen Hilfedatei an, und drücken Sie ENTER.
Wenn die neu eingegebene Hilfedatei nicht existiert
oder ein ungültiges Format hat, ertönt zweimal ein
Signal, und THELP benutzt weiter die ursprüngliche
Datei.
J Springt zur angegebenen Seite der Hilfedatei.
Es erscheint ein Dateneingabefeld, in das Sie die
Nummer einer beliebigen Seite (von 1 bis 9999) der
Hilfedatei eingeben können. Die einzige Editier-
Taste, die Sie im Dateneingabefeld verwenden können,
ist die Backspace-Taste. Mit Esc heben Sie Ihre Wahl
auf. Mit Enter bzw. der Eingabe von vier Ziffern
führen Sie den Sprung zur angegebenen Seite aus.
Hinweis: THELP zeigt immer die interne Seitenzahl am
oberen Rand des Hilfe-Bildschirms an. Sie werden bald
die Seitenzahlen jedes einzelnen Bildschirms auswendig
kennen, so daß Sie sie mit dem J-Befehl aufrufen
können.
K Durchsucht die Hilfedatei nach bestimmten
Schlüsselwörtern. Nach dem Drücken der K-Taste
erscheint ein Eingabefeld, in das Sie ein
Schlüsselwort (bis zu 40 Zeichen) eingeben können. Mit
ENTER veranlassen Sie THELP, die Hilfedatei nach dem
entsprechenden Begriff zu durchsuchen. Wird in der
aktuellen Hilfedatei das Schlüsselwort nicht
gefunden, ertönt zweimal ein Signal, und THELP kehrt
zum vorherigen Hilfe-Bildschirm zurück.
I Kopiert das aktuell hervorgehobene Schlüsselwort vom
Hilfe-Bildschirm in Ihre aktuelle Anwendung. Danach
verschwindet der Hilfe-Bildschirm.
P Kopiert die ganze Seite des Hilfe-Bildschirms (wie
sie im Hilfe-Fenster erscheint) in Ihre aktuelle
Anwendung. Danach verschwindet der Hilfe-Bildschirm.
Mit Ctrl-C bzw. Ctrl-Break können Sie den Vorgang un-
terbrechen.
S Speichert den aktuellen Hilfe-Bildschirm in eine Datei
(THELP.SAV). Drücken Sie S immer dann, wenn Sie die
aktuelle Hilfe-Bildschirmseite in der Datei
THELP.SAV im aktuellen Directory zu speichern. Wenn
die Datei bereits existiert, wird die neue Hilfeinfor-
mation am Ende angehängt.
Befehlstaste Wenn Sie THELP mit einem zweiten Monitor laufen lassen
und die Befehlstasten bzw. Tastenkombination
drücken, um THELP zu aktivieren, wird die aktuelle
Hilfesitzung beendet, der aktuelle Hilfe-Bildschirm
bleibt jedoch auf dem zweiten (monochrom) Monitor.
THELP ist per Vorgabe der Taste 5 auf dem numerischen
Tastenblock zugeordnet.
Zusammenfassung der Kommandozeilen-Parameter von THELP
Die Syntax zum Laden von THELP ist:
THELP Parameter
Wenn Sie mehr als einen Parameter verwenden, müssen diese durch
Leerzeichen voneinander getrennt sein.
Parameter Beschreibung
=====================================================================
/B BIOS bei Video-Anzeige verwenden
/C#xx Wahl der Farbe:
# = Nummer des Elements
xx = hexadezimale Farbwerte
/Dname Vollständige Pfadangabe bei Disk-Swapping (impliziert /S1)
/Fname Vollständige Pfad- und Dateinamenangabe bei der Hilfedatei
/H, /?,? Hilfe-Bildschirm anzeigen
/Kxxyy Befehlstaste ändern:
xx = shift state(hex)
yy = scan code(hex)
Lxx Anzahl von Bildschirmzeilen ändern:
xx = 25,43,50
/M+, /M- Hilfetext ausgeben:
auf monochromem Bildschirm (+)
auf Standard-Bildschirm (-)
Die Vorgabe für die Einfügegeschwindigkeit ist 'schnell'. Sie müssen
ausprobieren, ob dies für Ihren Editor günstig ist. Bevor Sie die Einfügen-
funktion verwenden, müssen Sie 'autoindent' in der integrierten Entwick-
lungsumgebung auf aus setzen.
/Px Einfügegeschwindigkeit:
0 = langsam
1 = mittel
2 = schnell (Standard)
2 = schnell (Standard)
/R Parameterübergabe an das residente THELP
/Sx Standardvorgabe für den Swapping-Modus:
1 = Festplatte/Diskette verwenden
2 = EMS verwenden
3 = kein Swapping
/U Entfernen von THELP aus dem Speicher
/W Übergibt Parameter an THELP.COM und beendet das Programm
/B (BIOS bei Video-Anzeige benutzen)
Wenn Sie diesen Parameter setzen, arbeitet THELP bei allen Schreib-
und Leseoperationen auf bzw. vom Bildschirm mit den Interrupt 10h
BIOS Aufrufen. Normalerweise schreibt THELP direkt in den Video-
(RAM)-Speicher.
Diese Option negiert den Effekt des Schalters /M ; der zweite
Monitor wird nicht benutzt, wenn /B angeschaltet ist. Die Option
wird mit /B+ aktiviert (Standardvorgabe), mit /B- deakaktiviert.
/C#xx (Farbwahl)
Mit dieser Option können Sie die Vorder- und Hintergrundfarben der
verschiedenen Elemente in einem Hilfe-Bildschirm anpassen. Der
Option /@;C folgt die Nummer des Elements, das Sie anpassen wollen
und die hexadezimalen Farbwerte für den entsprechenden Vorder-
und Hintergrund.
Es gibt acht mögliche Elemente, für welche Sie die Vorder- und
Hintergrundfarben ändern können. Sie sind wie folgt numeriert:
Nummer Element
==========================================================================
1 Farbe - Normaltext
2 Schwarz-weiß - Normaltext
3 Farbe - mögl. Referenzseiten (Meldezeile am oberen/unteren
Bildschirmrand)
4 Schwarz-weiß - mögl. Referenzseiten (Meldezeile am
oberen/unteren Bildschirmrand)
5 Farbe - Bildschirmrand
6 Schwarz-weiß - Bildschirmrand
7 Farbe - aktueller Referenzabschnitt
8 Schwarz-weiß - aktueller Referenzabschnitt
Sie können eines oder alle dieser Elemente in der Kommandozeile
spezifizieren.
Die Farbwerte für die vorgegebene IBM-kompatible Farbanzeige sind
folgende:
Erste Ziffer (Hintergrund) Zweite Ziffer (Vordergrund)
==========================================================================
0 Schwarz 0 Schwarz
1 Blau 1 Blau
2 Grün 2 Grün
3 Cyan 3 Cyan
4 Rot 4 Rot
5 Magenta 5 Magenta
6 Braun 6 Braun
7 Grau 7 Grau
8 Intensives Schwarz
ODER- Verknüpfung es Farbenwerts 9 Intensives Blau
mit Hex 80 verursacht eine blin- A Intensives Grün
kende Farbe, soweit 'Blinken' B Intensives Cyan
nicht deaktiviert wurde. C Intensives Rot
D Intensives Magenta
E Intensives Braun (Gelb)
F Intensives Grau (Weiß)
Bei schwarz-weiß Bildschirmen können die Attribut-Werte stärker
voneinander abweichen, so daß Sie damit herumexperimentieren müssen.
Beachten Sie, daß die Attribute für schwarz-weiß Bildschirme nur
in zwei Fällen Anwendung finden: Wenn der aktuelle Videomodus 7
verwendet oder Monochrom-Anzeige erzwungen wird (siehe "Der Parameter /M").
/Dname (Vollständige Pfadangabe bei Disk-Swapping)
Verwenden Sie diese Option, um anzugeben, wo THELP Swapdateien plazieren
soll, wenn sie auf Platte ausgelagert werden. Es wird davon ausgegangen,
daß der Schalter /S auf 1 gesetzt ist (d.h. Swapping auf Platte). Ein
vollständiger Pfad sollte angegeben werden, jedoch ist ein führender
Backslash (\) nicht erforderlich. Wenn der Parameter /D nicht angegeben
ist, werden unter DOS 3.x die Swapdateien im Directory von THELP.COM
plaziert. Unter DOS 2.x stehen sie standardmäßig in C:\.
Mit dieser Option wird außerdem ein Flag gesetzt, das das Swappen auf
Platte forciert, ansonsten würde zuerst nach EMS gesucht.
/Fname (Vollständige Pfad- und Dateinamenangabe bei der Hilfedatei)
Nach dem Parameter /F sollte der vollständige Name der Hilfedatei,
d.h. mit Laufwerk, Pfad und Directory angegeben werden:
THELP /FC:\TP\TURBO.HLP
THELP /FC:\TURBOC\TCHELP.TCH
Standardmäßig sucht THELP im aktuellen Laufwerk und Directory nach der
Hilfedatei.
/H, /?, and ? (Hilfe-Bildschirm anzeigen)
Jede dieser Optionen bringt eine Zusammenfassung der Kommandozeilen-
Parameter von THELP auf den Bildschirm.
/Kxxyy (Befehlstaste neu zuweisen)
Mit dieser Option weisen Sie einer bestimmten Taste eine Funktion
zu. Drücken Sie dazu zuerst die Shift-Taste in Kombination mit
einer Taste Ihrer Wahl. Es kann jede beliebige Taste in Kombi-
nation mit der Shift-Taste verwendet werden. Es folgt eine Auflistung
der gebräuchlisten Tastenkombinationen:
Shift-Tasten (können mit ODER verbunden werden)
rechte Shift- Taste 01h
linke Shift-Taste 02h
Ctrl 04h
Alt 08h
Scan codes:
A 1eh N 31h 0 0bh F1 3bh
B 30h O 18h 1 02h F2 3ch
C 2eh P 19h 2 03h F3 3dh
D 20h Q 10h 3 04h F4 3eh
E 12h R 13h 4 05h F5 3fh
F 21h S 1fh 5 06h F6 40h
G 22h T 14h 6 07h F7 41h
H 23h U 16h 7 08h F8 42h
I 17h V 2fh 8 09h F9 43h
J 24h W 11h 9 0ah F10 44h
K 25h X 2dh
L 26h Y 15h
M 32h Z 2ch
Nur bei neueren Tastaturen (funktioniert nicht mit allen Computern
bzw. Tastaturen):
F11 57h
F12 58h
/Lxx (Anzahl von Bildschirmzeilen)
Mit dieser Option können Sie die Anzahl von Zeilen angeben, die bei der
Ausgabe erscheinen sollen. (für xx geben Sie 25, 43 oder 50 ein). Dies
ist manchmal erforderlich, da bei einigen Videoadaptern die Anzahl von
Bildschirmzeilen nicht im selben BIOS Datenbereich gespeichert werden,
wie für den IBM PC definiert. Durch diese Option verwendet THELP
den angegebenen Wert, anstelle der von BIOS ausgegebenen Zahl.
/M+ and /M- (Hilfetext anzeigen)
Benutzer eines Systems mit zwei Bildschirmen, können diese Option
verwenden, um THELP anzuweisen, den zweiten (schwarz-weiß) Bildschirm
anstatt den Farbbildschirm zu benutzen. Die Ausgabe auf einem schwarz-
weiß Bildschirm wird mit /M+ aktiviert (die Standardvorgabe) und mit
/M- deaktiviert.
Beachten Sie, daß /M mit /B nicht kompatibel ist.
/Px (Einfügegeschwindigkeit)
Mit dieser Option läßt sich die Geschwindigkeit angeben, mit der
die Zeichen in den Tastaturpuffer eingefügt werden (0 steht für
langsam, 1 für mittel und 2 für schnell).
Bei einigen Editoren können Zeichen nicht so schnell in den
Tastaturpuffer eingefügt werden wie mit THELP. Wenn Sie jedoch
die entsprechende Einfügegeschwindigkeit angeben, können Sie
praktisch jede Editorkonfiguration verwenden. Bei Wahl der Geschwin-
digkeit 'schnell' werden so viele Zeichen wie möglich pro Zeitzähl-
einheit eingefügt,; 'mittel' fügt bis zu vier Zeichen pro Zähleinheit
ein; und 'langsam' fügt nur dann ein Zeichen in den Puffer ein,
wenn dieser leer ist.
/R (Parameterübergabe an das residente THELP)
Die Option /R übergibt Parameter (wie beispielsweise neue Farbwerte
oder Befehlstasten) an den residenten Teil von THELP. Das gilt für alle
Kommandozeilen-Parameter von THELP, außer für den Swap-Modus, der
nicht modifiziert werden kann, sobald er von THELP initialisiert wurde.
In Kombination mit diesen Optionen können Sie eine Batchdatei
erzeugen, die die Konfiguration von THELP ändert, sobald Sie
den Editor wechseln, z. B.:
THELP /M /P0 /FC:\TP\TURBO.HLP /R}
Dieser Befehl weist THELP an, einen schwarz-weiß Bildschirm, die
Einfügegeschwindigkeit 'langsam' und die Hilfedatei von Turbo Pascal
zu verwenden. Die Optionen werden nicht auf Platte gespeichert.
THELP /P2 /FC:\TC\TCHELP.TCH /R}
Mit diesem Befehl wird THELP angewiesen, den Standardbildschirm,
die Einfügegeschwindigkei 'schnell' und die Hilfedatei von Turbo C++
zu verwenden. Die Optionen werden nicht auf Platte gespeichert.
/Sx (Standardvorgabe des Swapping-Modus)
Mit dieser Option können Sie bestimmen, ob THELP mit der Swap-
datei arbeiten und wo die Swapdatei stehen soll. (1 steht für
Platte, 2 für EMS und 3 für keine Swapdatei)
Wenn Sie den Parameter /S nicht setzen, testet THELP zuerst, ob
das System über einen EMS-Speicher verfügt. Verfügt es über eine
Speichererweiterung und kann genug Speicherkapazität zugewiesen
werden, greift THELP auf EMS zu. Ist EMS nicht verfügbar, greift THELP
auf die Platte zu. Lesen Sie im Abschnitt "Der Parameter /D" nach,
wohin die Swapdatei geschrieben wird, wenn Disk-Swapping verwendet wird.
/U (THELP aus dem Speicher entfernen)
Diese Option entfernt THELP aus dem Speicher. Wenn andere Anwen-
dungen nach THELP geladen wurden, müssen diese vor THELP aus dem
Speicher entfernt werden.
/W (übergibt Parameter an THELP.COM und beendet das Programm)
Mit dem Parameter /W können Sie eine neue THELP-Version erstellen,
die Ihre Optionen als Standardoptionen verwendet. Alle Optionen,
außer dem Parameter /R, können spezifiziert und als permanent ab-
gespeichert werden.
========================================================================
TRIGRAPH: Programm zur Zeichenkonvertierung
-------------------------------------------
Trigraphs sind Sequenzen von drei Zeichen, die bestimmte Zeichen
der Programmiersprache C ersetzen, die auf einigen Tastaturen
nicht vorhanden sind. Wenn Trigraphs vom Compiler selbst über-
setzt würden, würde die Compilierung verhältnismäßig lange dauern,
daher verfügt Turbo C++ zur Handhabung von Trigraph-Sequenzen über
den Filter TRIGRAPH.EXE. Dieses Programm wird folgendermaßen
aktiviert:
TRIGRAPH [-u] Dateiname [Dateiname...]
Die folgende Tabelle zeigt die Trigraph-Sequenzen, die
TRIGRAPH.EXE erkennt:
Trigraph Zeichen
================================
??= #
??( [
??/ \
??) ]
??' ^
??< {
??! |
??> }
??- ~
TRIGRAPH.EXE arbeitet auf zwei verschiedene Arten: Es konvertiert
alle Drei-Zeichen-Darstellungen in die entsprechende Ein-Zeichen-
Darstellungen und umgekehrt. Normalerweise konvertiert TRIGRAPH.EXE
eine Drei-Zeichen-Darstellung in ein einzelnes Zeichen. Sie können
mit Hilfe des Kommandozeilen-Parameters -u (UNDO), der vor allen
Dateinamen stehen muß, die inverse Konvertierung spezifizieren.
TRIGRAPH.EXE arbeitet mit beliebig vielen Dateibezeichnern, inklusive
Jokern. Für jede angegebene Datei wird ein Backup mit dem Namen der
Originaldatei und der Extension .BAK erstellt und eine neue Datei mit
dem Namen der Originaldatei und den entsprechenden Konvertierungen.
Zum Beispiel werden mit
trigraph test.c test1.c
alle Drei-Zeichen-Darstellungen aus den beiden Dateien TEST.C und
TEST1.C entfernt und die Backup-Dateien TEST.BAK und TEST1.BAK erzeugt.
In einem weiteren Beispiel wird mit dem folgenden Befehl die Drei-
Zeichen-Darstellung in alle Dateien mit der Extension .C eingefügt und
von allen Dateien Backups mit der Extension .BAK erzeugt.
trigraph -u *.c
========================================================================
PRJCNVT: Konvertierung von Projektdateien
-----------------------------------------
PRJCNVT Konvertiert Projektdateien früherer Turbo C Versionen
(1.0, 1.5 oder 2.0) in das Turbo C++ Format.
Syntax:
PRJCNVT Eingabedatei[.prj] [Ausgabedatei[.prj]]
oder
PRJCNVT Eingabedatei[.tc] [Ausgabedatei[.prj]]
Eine Konfigurationsdatei, welche Sie als Eingabedatei angeben, muß
eine entsprechende Projektdatei definieren. Die Compileroptionen sowie
die Information über die Abhängigkeiten zwischen den Modulen des
Projekts werden in die Turbo C++ Projektdatei übernommen.
Verwenden Sie eine Projektdatei als Eingabe, so wird lediglich die
Information über die Abhängigkeiten zwischen den Modulen in die Turbo
C++ Projektdatei übernommen. Alle Compileroptionen bleiben jedoch
unverändert.
Wenn Sie keine Extension angeben, gilt .TC als Voreinstellung. Falls
PRJCVNT keine .TC Datei finden kann, sucht es nach einer .PRJ Datei.
Voreinstellung für die Ausgabedatei ist der Name der Eingabedatei mit
der Extension .PRJ. Aus STARS.TC zum Beispiel wird STARS.PRJ. Wenn die
Namen der Ein- bzw. Ausgabedatei gleich sind, wird die Eingabedatei
umbenannt in .BAK.
========================================================================