home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / tcpp / util.doc < prev   
Text File  |  1990-06-09  |  77KB  |  1,990 lines

  1.                       TURBO C++ ZUSATZPROGRAMME
  2.                       -------------------------
  3.  
  4. Ihr Turbo C++ Paket enthält weit mehr als nur zwei Versionen des
  5. schnellsten der derzeit verfügbaren C-Compiler. Es enthält auch
  6. elf leistungsstarke Zusatzprogramme, die Sie zusammen mit Ihren
  7. Turbo C++ Dateien oder anderen Modulen benutzen können. Die Utilities
  8. MAKE, TLIB, TLINK und TOUCH sind im Benutzerhandbuch beschrieben.
  9. Die Beschreibungen zu folgenden Programmen finden Sie in dieser
  10. Datei:
  11.  
  12. BGIOBJ (ein Konvertierungsprogramm für Grafiktreiber und -Zeichensätze)
  13.  
  14. CPP (der Turbo C++ Präprozessor)
  15.  
  16. GREP (ein Zusatzprogramm zum Durchsuchen von Dateien)
  17.  
  18. OBJXREF (erstellt Querverweislisten für Objektmodule)
  19.  
  20. THELP (das Zusatzprogramm Turbo-Hilfe)
  21.  
  22. TRIGRAPH (ein Zusatzprogramm zur Zeichenkonvertierung)
  23.  
  24. PRJCNVT (Konvertierung von Turbo C 2.0 Projektdateien in das
  25.          Turbo C++ Format)
  26.  
  27.  
  28. In diesem Kapitel wird jedes Zusatzprogramm erläutert und dessen
  29. Anwendung mit Code und Kommandozeilen-Beispielen demonstriert.
  30.  
  31.  
  32. ========================================================================
  33.  
  34. BGIOBJ: Das Konvertierungsprogramm für Grafiktreiber und Zeichensätze
  35. ---------------------------------------------------------------------
  36.  
  37. Mit BGIOBJ können Sie Grafiktreiber-Dateien und Zeichensätze (einge-
  38. bundene Zeichensatz-Dateien) in Objekt-Dateien (.OBJ) konvertieren.
  39. Sobald sie konvertiert sind, können sie in Ihr Programm gelinkt und
  40. somit Teil der ausführbaren .EXE Datei werden. Dies ist eine
  41. Alternative zum zum dynamischen Ladevorgang des Grafikpakets, bei dem
  42. Ihr Programm Grafiktreiber und Zeichensätze (eingebundene
  43. Zeichensätze) zur Laufzeit von Platte lädt.
  44.  
  45. Das direkte Linken der Grafiktreiber und Zeichensätze in Ihr Programm
  46. ist von Vorteil, da die ausführbare Datei alle (bzw. die meisten)
  47. Grafiktreiber und/oder Zeichensätze, die es vielleicht benötigt,
  48. enthält und deshalb nicht zur der Laufzeit auf Grafiktreiber- und
  49. Zeichensatz-Dateien zugreifen muß. Das Linken der Grafiktreiber und
  50. Zeichensätze in Ihre ausführbare Datei vergrößert diese naturgemäß.
  51.  
  52. Mit dem Zusatzprogramm BGIOBJ.EXE können Sie eine Grafiktreiber- bzw.
  53. Zeichensatz-Datei zu einer linkfähigen Objekt-Datei konvertieren. Hier
  54. die vereinfachte Syntax:
  55.  
  56.    BGIOBJ  Quelldatei
  57.  
  58. dabei ist Quelldatei die Grafiktreiber- bzw. Zeichensatz-Datei, die in
  59. eine Objekt-Datei konvertiert wird. Die neue Objekt-Datei hat den
  60. selben Dateinamen wie die Quelldatei mit der Extension .OBJ; zum
  61. Beispiel wird EGAVGA.BGI zu EGAVGA.OBJ, aus SANS.CHR wird SANS.OBJ,
  62. usw.
  63.  
  64. Neue .OBJ-Dateien zur GRAPHICS.LIB hinzufügen
  65. Sie sollten die Grafiktreiber- und Zeichensatz-Objektmodule zur
  66. GRAPHICS.LIB hinzufügen, damit der Linker sie beim Linken in den
  67. Grafik-Routinen finden kann. Falls Sie das nicht tun, müssen Sie sie
  68. in die Dateiliste der TC-Projekt-Datei (.PRJ), die Dateiliste in der
  69. TCC-Kommandozeile oder in der TLINK-Kommandozeile aufnehmen. Um
  70. Objektmodule in GRAPHICS.LIB aufzunehmen, aktivieren Sie TLIB mit
  71. der folgenden Kommandozeile:
  72.  
  73.    tlib graphics + Objekt_Datei [+ Objekt_Datei ...]
  74.  
  75. wobei Objekt_Datei der Name der Objekt-Datei ist, die mit BGIOBJ.EXE
  76. erzeugt wurde (wie beispielsweise CGA, EGAVGA, GOTH usw.). Die Exten-
  77. sion .OBJ wird dabei automatisch angehängt. Um Zeit zu sparen, können
  78. Sie mehrere Dateien in einer Kommandozeile angeben; hierfür ein
  79. Beispiel im folgenden Abschnitt.
  80.  
  81. Registrierung eines Grafiktreibers und -Zeichensatzes
  82. Nachdem Sie die Grafiktreiber- und Zeichensatz-Objektmodule GRAPHICS.
  83. .LIB hinzugefügt haben, müssen Sie alle Grafiktreiber- und Zeichen-
  84. sätze, die gelinkt werden sollen, registrieren. Dazu rufen Sie
  85. registerbgidriver und registerbgifont in Ihrem Programm auf (bevor
  86. Sie initgraph aufrufen). Das Grafiksystem weiß nun, daß diese Dateien
  87. existieren und stellt sicher, daß sie gelinkt werden, wenn der Linker
  88. eine ausführbare Datei erzeugt.
  89.  
  90. Jeder Registrierungs-Routine ist ein Parameter zugeordnet; ein symbo-
  91. lischer Name, der in graphics.h definiert ist. Jede Registrierungs-
  92. Routine liefert einen nicht-negativen Wert, wenn Grafiktreiber und
  93. Zeichensatz erfolgreich registriert wurden.
  94.  
  95. Die folgende Tabelle zeigt die Namen, die mit registerbgidriver und
  96. registerbgifont verwendet werden. In dieser Liste sind alle Grafik-
  97. treiber und Zeichensätze von Turbo C++ enthalten.
  98.  
  99. Grafiktreiber-Datei  registerbgidriver  Zeichensatz-Datei registerbgifont
  100.       (*.BGI)        symbolischer Name   (*.CHR)          symbolischer Name
  101. ===========================================================================
  102.       CGA            CGA_driver          TRIP           triplex_font
  103.       EGAVGA         EGAVGA_driver       LITT           small_font
  104.       HERC           Herc_driver         SANS           sansserif_font
  105.       ATT            ATT_driver          GOTH           gothic_font
  106.       PC3270         PC3270_driver
  107.       IBM8514        IBM8514_driver
  108.  
  109.  
  110. Ein Beispiel
  111. Angenommen, Sie möchten die Dateien für den CGA-Grafiktreiber, den
  112. Gothic- und den Triplex-Zeichensatz zu Objektmodulen compilieren und
  113. danach in Ihr Programm linken. Dazu gehen Sie folgendermaßen vor:
  114.  
  115. Konvertieren Sie die Binärdateien mit Hilfe von BGIOBJ.EXE, wie in
  116. den folgenden einzelnen Kommandozeilen gezeigt wird.
  117.  
  118.    bgiobj  cga
  119.    bgiobj  trip
  120.    bgiobj  goth
  121.  
  122. Dadurch werden drei Dateien erzeugt: CGA.OBJ, TRIP.OBJ, and GOTH.OBJ.
  123.  
  124. Sie können diese Objekt-Dateien mit nachfolgender TLIB Kommandozeile
  125. zur GRAPHICS.LIB hinzufügen:
  126.  
  127.    tlib  graphics  +cga  +trip  +goth
  128.  
  129. Wenn Sie die Objekt-Dateien nicht zu GRAPHICS.LIB hinzufügen, müssen
  130. Sie die Objekt-Dateinamen CGA.OBJ, TRIP.OBJ und GOTH.OBJ Ihrer Projekt-
  131. liste  (wenn Sie die integrierte Umgebung von Turbo C++ benutzen),
  132. oder der TCC-Kommandozeile hinzufügen. Die TCC-Kommandozeile würde
  133. beispielsweise wie folgt aussehen:
  134.  
  135.    tcc  niftgraf graphics.lib  cga.obj  trip.obj goth.obj
  136.  
  137. Sie registrieren diese Dateien in Ihrem Grafikprogramm folgendermaßen:
  138.  
  139. Sollten Sie die Linker-Fehlermeldung "Segment exceeds 64K" nach dem Linken
  140. einiger Grafiktreiber und/oder Zeichensätze bekommen, verweisen wir auf den
  141. folgenden Abschnitt.
  142.  
  143. /* Header-Datei deklariert CGA_driver, triplex_font & gothic_font */
  144. #include <graphics.h>
  145.  
  146. /* Auf Fehler überprüfen (man kann nie wissen...) */
  147.  
  148. if (registerbgidriver(CGA_driver) < 0) exit(1);
  149. if (registerbgifont(triplex_font) < 0) exit(1);
  150. if (registerbgifont(gothic_font)  < 0) exit(1);
  151.  
  152. /* ... */
  153.  
  154. initgraph(....);     /* initgraph sollte nach der Regi-
  155.                         strierung aufgerufen werden */
  156.  
  157. /* ... */
  158.  
  159.  
  160. Die /F Option
  161. Dieser Abschnitt beschreibt, was Sie tun müssen, wenn Sie nach dem
  162. Linken mehrerer Grafiktreiber- und/oder Zeichensatz-Dateien (ins-
  163. besondere bei Verwendung der Speichermodelle Small und Compact) die
  164. Linker-Fehlermeldung "Segment exceeds 64K" (oder etwas ähnliches)
  165. erhalten.
  166.  
  167. Per Vorgabe benutzen alle, von BGIOBJ.EXE erzeugten Dateien das
  168. gleiche Segment (mit Namen _TEXT). Dies kann problematisch werden,
  169. wenn Ihr Programm viele Grafiktreiber und/oder Zeichensätze linkt
  170. bzw. wenn Sie die Speichermodelle Small oder Compact benutzen.
  171.  
  172. Zur Lösung dieses Problems können Sie einen oder mehrere Grafiktreiber
  173. oder Zeichensätze mit der BGIOBJ /F Option konvertieren. BGIOBJ wird
  174. mit dieser Option angewiesen, einen Segmentnamen vom Typ filename_TEXT
  175. zu benutzen, so daß das vorgegebene Segment nicht durch alle gelinkten
  176. Grafiktreiber und Zeichensätze überlastet ist (das gilt bei den Spei-
  177. chermodellen Small und Compact für den Programmcode). Durch die folgen-
  178. den zwei BGIOBJ-Kommandozeilen wird BGIOBJ angewiesen, Segmentnamen vom
  179. Typ EGAVGA_TEXT und SANS_TEXT zu benutzen.
  180.  
  181.    bgiobj  /F  egavga
  182.    bgiobj  /F  sans
  183.  
  184. Wenn Sie /F wählen, hängt BGIOBJ ebenfalls F an den Dateinamen des
  185. Zielobjektes (EGAVGAF.OBJ, SANSF.OBJ, usw.) und hängt _far an den
  186. Namen, der mit registerfarbgidriver und registerfarbgifont benutzt
  187. wird. (Zum Beispiel: EGAVGA_driver wird zu EGAVGA_driver_far.)
  188.  
  189. Bei Dateien, die mit /F erzeugt wurden, müssen Sie diese Far-Regi-
  190. strierungs-Routinen anstelle des regulären registerbgidriver und
  191. registerbgifont benutzen. Zum Beispiel:
  192.  
  193.    if (registerfarbgidriver(EGAVGA_driver_far) < 0) exit(1);
  194.    if (registerfarbgifont(sansserif_font_far)  < 0) exit(1);
  195.  
  196.  
  197. Weitere Funktionen
  198. In diesem Abschnitt werden weitere Funktionen von BGIOBJ und die
  199. Routinen registerfarbgidriver und registerfarbgifont beschrieben.
  200. Nur erfahrene Benutzer sollten diese Funktionen anwenden.
  201.  
  202. Dies ist die vollständige Syntax der BGIOBJ.EXE-Kommandozeile:
  203.  
  204.    BGIOBJ  [/F] Quelldatei Zieldatei globaler_Name seg_Name seg_Klasse
  205.  
  206. Diese Tabelle beschreibt die Parameter der BGIOBJ-Kommandozeile.
  207.  
  208. Parameter       Beschreibung
  209. ======================================================================
  210.  
  211. /F or -F        Diese Option weist BGIOBJ.EXE an, einen anderen Seg-
  212.                 mentnamen als _TEXT (die Vorgabe) zu verwenden, sowie
  213.                 den globalen Namen und den Namen der Zieldatei zu
  214.                 ändern.
  215.  
  216. Quelldatei      Zu konvertierende Grafiktreiber- bzw Zeichensatz-Datei.
  217.                 Wenn die Datei nicht mit Turbo C++ ausgeliefert wurde,
  218.                 sollten Sie einen vollständigen Dateinamen (mit Exten-
  219.                 sion) angeben.
  220.  
  221. Zieldatei       Name der zu erzeugenden Objekt-Datei. Die Standardvorgabe
  222.                 ist Quelldatei.OBJ bzw. QuelldateiF.OBJ, wenn Sie die
  223.                 /F Option verwenden.
  224.  
  225. globaler Name   Der Name, der beim Aufruf von registerbgidriver bzw.
  226.                 registerbgifont (oder der entsprechenden far-Version)
  227.                 verwendet wird.
  228.  
  229.                 Es ist der externe Name, der ebenfalls vom Linker be-
  230.                 nutzt wird, und muß im Programm mit einem Unterstrich
  231.                 versehen werden. Falls Ihr Programm Pascal-Aufruf-
  232.                 Konventionen verwendet, muß der globale Name aus Groß-
  233.                 buchstaben bestehen und darf mit keinem Unterstrich
  234.                 eingeleitet werden.
  235.  
  236. Segmentname     Der Segmentname ist optional; die Standardvorgabe
  237.                 ist _TEXT (bzw. Dateiname_TEXT bei Verwendung des
  238.                 Parameters /F).
  239.  
  240. Segmentklasse   Die Klassifizierung des Segments ist optional; die
  241.                 Standardvorgabe ist CODE.
  242.  
  243. Alle Parameter, außer der Quelldatei, sind optional. Wenn Sie jedoch
  244. einen optionalen Parameter spezifizieren, müssen auch alle voran-
  245. stehenden Parameter spezifiziert werden.
  246.  
  247. Wenn Sie eigene globale Namen verwenden wollen, müssen Sie Ihrem
  248. Programm entsprechende Prototypen hinzufügen.
  249.  
  250. void globaler_Name(void);   /* Für die Konvertieruung ohne /F bzw. */
  251.                             /* mit dem Standard-Segmentnamen       */
  252.  
  253. extern int far globaler_Name[];  /* Für die Konvertierung mit /F  */
  254.                                  /* bzw. mit Segmentname != _TEXT */
  255.  
  256. Bei diesen Deklarationen stimmt globaler_Name mit dem globalen
  257. Namen überein, der bei der Konvertierung mit BGIOBJ verwendet wurde.
  258. Die Header-Datei graphics.h enthält Deklarationen der globalen Namen
  259. der Standardvorgaben von Grafiktreibern und Zeichensätzen. Wenn
  260. Sie mit diesen Standard-Treibern und Zeichensätzen arbeiten, sind
  261. Deklarationen nicht notwendig.
  262.  
  263. Nach der Deklaration müssen alle Grafiktreiber und Zeichensätze in
  264. Ihrem Programm registriert werden. Wenn Sie nicht mit der /F Option
  265. arbeiten und den Standard-Segmentnamen nicht ändern, sollten Sie
  266. die Grafiktreiber und Zeichensätze mit Hilfe von registerbgidriver
  267. und registerbgifont registrieren; anderenfalls verwenden Sie
  268. registerfarbgidriver und registerfarbgifont.
  269.  
  270. Hier sehen Sie ein Programmbeispiel, das eine Zeichensatz-Datei in
  271. den Speicher lädt:
  272.  
  273. /* Beispiel, in dem eine Zeichensatz-Datei in den Speicher geladen wird */
  274.  
  275. #include <graphics.h>
  276. #include <io.h>
  277. #include <fcntl.h>
  278. #include <stdio.h>
  279. #include <conio.h>
  280. #include <stdlib.h>
  281. #include <process.h>
  282. #include <alloc.h>
  283.  
  284. main()
  285. {
  286.    void    *gothic_fontp;    /* Zeigt auf den Zeichensatz-Puffer im Speicher */
  287.    int      handle;          /* Datei-Handle für I/O */
  288.    unsigned fsize;           /* Dateigröße (und Puffer) */
  289.  
  290.    int errorcode;
  291.    int graphdriver;
  292.    int graphmode;
  293.  
  294. /* Öffnen der Zeichensatz-Datei */
  295.    handle = open("GOTH.CHR", O_RDONLY|O_BINARY);
  296.    if (handle == -1)
  297.    {
  298.       printf("Zeichensatz-Datei 'GOTH.CHR' kann nicht geöffnet werden\n");
  299.       exit(1);
  300.    }
  301. /* Dateigröße herausfinden */
  302.    fsize = filelength(handle);
  303. /* Puffer zuweisen */
  304.    gothic_fontp = malloc(fsize);
  305.    if (gothic_fontp == NULL)
  306.    {
  307.      printf("Speicherplatz für Zeichensatz-Datei 'GOTH.CHR' nicht zuweisbar\n");
  308.      exit(1);
  309.    }
  310. /* Zeichensatz in den Speicher einlesen */
  311.    if (read(handle, gothic_fontp, fsize) != fsize)
  312.    {
  313.       printf("Zeichensatz-Datei 'GOTH.CHR' kann nicht gelesen werden\n");
  314.       exit(1);
  315.    }
  316. /* Zeichensatz-Datei schließen */
  317.    close(handle);
  318. /* Zeichensatz registrieren */
  319.    if (registerfarbgifont(gothic_fontp) != GOTHIC_FONT)
  320.    {
  321.       printf("Zeichensatz-Datei 'GOTH.CHR' kann nicht registriert werden\n");
  322.       exit(1);
  323.    }
  324. /* Grafik finden und initialisieren */
  325.    graphdriver = DETECT;
  326.    initgraph(&graphdriver, &graphmode, "..");
  327.    errorcode = graphresult();
  328.    if (errorcode != grOk)
  329.    {
  330.       printf("Grafik-Fehler: %s\n",grapherrormsg(errorcode));
  331.       exit(1);
  332.    }
  333.    settextjustify(CENTER_TEXT, CENTER_TEXT);
  334.    settextstyle(GOTHIC_FONT, HORIZ_DIR, 4);
  335.    outtextxy(getmaxx()/2,getmaxy()/2,
  336.              "Borland Graphics Interface (BGI)");
  337. /* Mit beliebiger Taste beenden */
  338.    getch();
  339. /* Grafik schließen */
  340.    closegraph();
  341.    return(0);
  342. }
  343.  
  344.  
  345. ========================================================================
  346.  
  347. CPP: Der Präprozessor
  348. ---------------------
  349.  
  350. CPP erstellt Listings von C-Quelltexten, die Include-Dateien und
  351. #define Makros enthalten. Er ist nicht zur normalen Compilierung
  352. eines C-Programms erforderlich.
  353.  
  354. Wenn der Compiler einen Fehler innerhalb eines Makros oder einer
  355. Include-Datei meldet, erhalten Sie oft mehr Information über den
  356. Fehler, wenn Sie sich die Include-Dateien oder das Ergebnis des
  357. erweiterten Makros ansehen. In vielen Multi-pass Compilern (Com-
  358. piler, die mit mehreren Durchläufen arbeiten) führt ein separater
  359. Durchlauf diese Aufgabe aus, das Ergebnis des Durchlaufs kann dann
  360. untersucht werden. Da Turbo C++ einen integrierten Single-pass Com-
  361. piler benutzt, wird CPP mitgeliefert, um die Funktion, die bei ande-
  362. ren Compilern der erste Durchlauf erfüllt, auch Turbo C++ Benutzern
  363. zur Verfügung zu stellen.
  364.  
  365. Sie verwenden CPP genauso wie TCC, den eigenständigen Kommandozeilen-
  366. Compiler. CPP liest auch aus der TURBOC.CFG-Datei die Standardvorgaben
  367. ab und akzeptiert dieselben Kommandozeilen-Parameter wie TCC.
  368.  
  369. Die TCC-Parameter, die mit CPP nicht übereinstimmen, werden von CPP
  370. ignoriert. Geben Sie cpp nach dem DOS-Prompt ein, und Sie erhalten
  371. eine Liste der CPP-Argumente.
  372.  
  373. In der CPP-Kommandozeile aufgelistete Dateinamen werden mit einer
  374. Ausnahme wie bei TCC behandelt, wobei Jokerzeichen erlaubt sind.
  375. Die Ausnahme besteht in der Behandlung aller Dateien als C-Quell-
  376. dateien. Es gibt keine spezielle Handhabung der .OBJ, .LIB oder
  377. .ASM-Dateien.
  378.  
  379. Jede von CPP übersetzte Datei wird in eine Datei im aktuellen
  380. Directory (bzw. in das durch die Option -n benannte Ausgabe-
  381. Directory) geschrieben. Die Extension .C wird jeweils durch die
  382. Extension .I ersetzt.
  383.  
  384. Diese Ausgabedatei ist eine Textdatei und enthält jede Zeile der
  385. Quelldatei, sowie sämtliche Include-Dateien. Präprozessor-Direktiven
  386. wurden entfernt, ebenso Textzeilen, die von der Compilierung aus-
  387. geschlossen wurden. Soweit in der Kommandozeile nicht durch Setzen
  388. eines Parameters anders spezifiziert, beginnt jede Textzeile mit
  389. der Zeilennummer und dem Namen der Quelltext- bzw. Include-Datei.
  390. Innerhalb einer Textzeile werden sämtliche Makros durch ihre
  391. volle Definition ersetzt.
  392.  
  393. Wichtig! Die Ausgabedatei von CPP kann aufgrund des Dateinamens
  394. und der Zeilennummer, die jeder Zeile einer Quelldatei vorangestellt
  395. wird, nicht compiliert werden.
  396.  
  397.  
  398. CPP als Makro-Präprozessor
  399. Mit Hilfe der -P Option setzt CPP vor jede Zeile den Namen und die
  400. Zeilennummer der Quelldatei. Geben Sie -P- an (wodurch die Option
  401. ausgeschaltet wird), wird diese Zeilennummernangabe unterdrückt.
  402. Nun können Sie CPP als Makro-Präprozessor verwenden; die entstandene
  403. .I-Datei kann mit TC oder TCC compiliert werden.
  404.  
  405.  
  406. Ein Beispiel:
  407. Das folgende einfache Beispiel demonstriert die Verarbeitung einer
  408. Datei, zuerst mit dem Parameter -P, danach mit dem Parameter -P-.
  409.  
  410. Quelldatei: HELLOJOE.C
  411. #define NAME "Josef Schmidt"
  412. #define BEGIN {
  413. #define END   }
  414.  
  415. main()
  416. BEGIN
  417.    printf("%s\n", NAME);
  418. END
  419.  
  420. Kommandozeile zur Aktivierung von CPP als Präprozessor:
  421.  
  422.    cpp hellojoe.c]
  423.  
  424. Ausgabe:
  425. hellojoe.c 1:
  426. hellojoe.c 2:
  427. hellojoe.c 3:
  428. hellojoe.c 4:
  429. hellojoe.c 5: main()
  430. hellojoe.c 6: {
  431. hellojoe.c 7:    printf("%s\n","Josef Schmidt");
  432. hellojoe.c 8: }
  433.  
  434. Kommandozeile zur Aktivierung von CPP als Makro-Präprozessor:
  435.  
  436.    cpp -P- hellojoe.c]
  437.  
  438. Ausgabe:
  439. main()
  440. {
  441.    printf("%s\n","Josef Schmidt");
  442. }
  443.  
  444.  
  445. ========================================================================
  446.  
  447. GREP: Absuchen von Quelltexten
  448. ------------------------------
  449.  
  450. GREP (Global Regular Expression Print) ist ein leistungsstarkes
  451. Zusatzprogramm zum Absuchen von Quelltexten. Es ist eine Version
  452. des gleichnamigen UNIX-Zusatzprogramms. Das Programm sucht eine
  453. oder mehrere Textdateien nach vorgebenen Textteilen ab.
  454.  
  455. Es folgt ein kurzes Beispiel dafür, wann Sie GREP anwenden können.
  456. Angenommen, Sie möchten wissen, welche Textdateien in Ihrem aktuellen
  457. Directory den String "Elisabeth" enthalten.
  458. Sie geben hierfür die Anweisung:
  459.  
  460.    grep Elisabeth *.txt
  461.  
  462. und GREP antwortet darauf mit einer Liste von Zeilen in jeder Datei,
  463. die den String "Elisabeth" enthält. Die Strings "elisabeth" und
  464. "ELISABETH" werden dabei nicht berücksichtigt.
  465.  
  466. GREP kann jedoch weitaus mehr, als nur einen bestimmten, genau
  467. beschriebenen String auffinden.
  468. Im folgenden Abschnitt sehen Sie, wie Sie mit GREP nach einem String
  469. suchen, der mit einem bestimmten Muster übereinstimmt.
  470.  
  471.  
  472. Kommandozeilen-Syntax
  473. Die allgemeine Syntax für GREP ist:
  474.  
  475.    grep [Schalter] Suchstring [Dateispez...]
  476.  
  477. Ein Schalter besteht aus einem oder mehreren Buchstaben, dem ein
  478. Bindestrich (SYMBOL -) vorangestellt wird; damit lassen sich ver-
  479. schiedene Aspekte von GREP ändern.
  480.  
  481. Suchstring gibt das Muster an, nach dem gesucht wird.
  482.  
  483. Dateispez (eine Liste von Dateispezifikationen) weist GREP an, in
  484. welchen Dateien gesucht werden soll. Ist keine Datei angegeben,
  485. geht GREP nach der Standardeingabe vor.
  486.  
  487. Zusätzlich erhalten Sie mit dem Befehl
  488.  
  489.    GREP ?
  490.  
  491. eine kurze Hilfeanzeige am Bildschirm mit den Kommandozeilen-
  492. Schaltern, speziellen Zeichen und Standardvorgaben. (Siehe die
  493. Beschreibung des Kommandozeilen-Schalters -u, mit dem Sie die
  494. Standardvorgabe für GREP ändern.)
  495.  
  496.  
  497. Die Schalter von GREP
  498. Die Schalter in der Kommandozeile bestehen aus einem oder mehreren
  499. Zeichen, dem ein Bindestrich (-) vorangestellt wird. Jedes einzelne
  500. Zeichen ist ein Schalter, der an- oder ausgeschaltet werden kann.
  501. Das Pluszeichen (+) nach einem Buchstaben schaltet den betreffenden
  502. Schalter an, mit einem Minuszeichen (-) wird dieser abgeschaltet.
  503.  
  504. Die Standardvorgabe ist "+". -r bedeutet also dasselbe wie -r+.
  505. Sie können mehrere Schalter hintereinander einzeln auflisten
  506. (z.B.-i-d-l), oder können sie auch kombinieren (z. B.: -ild oder
  507. -il, -d, usw.); GREP macht da keinen Unterschied.
  508.  
  509. Die Schalter von GREP sind wie folgt definiert:
  510.  
  511. Schalter   Bedeutung
  512. =======================================================================
  513.  
  514.    -c      count
  515.            Gibt nur die Anzahl von Übereinstimmungen aus. Für jede
  516.            Datei, bei der zumindest in einer Zeile der Suchstring
  517.            vorkommt, wird der Dateiname zusammen mit der Anzahl der
  518.            Übereinstimmungen in Zeilen angegeben, weitere Angaben
  519.            erfolgen nicht.
  520.  
  521.    -d      directories
  522.            Dateien werden nicht nur im angegebenen Verzeichnis
  523.            gesucht, sondern auch in allen Subdirectories, die zu
  524.            diesem Directory gehören. Wenn Sie keinen Pfad angeben,
  525.            sucht GREP im aktuellen Directory.
  526.  
  527.    -i      ignore case
  528.            GREP behandelt Groß- und Kleinbuchstaben gleich, wobei die
  529.            deutschen Umlaute (wie üblich) nicht mit eingeschlossen
  530.            sind. 'Ä' und 'ä' sind also auch in diesem Fall
  531.            "verschiedene" Zeichen.
  532.  
  533.    -l      list
  534.            Wenn der Suchstring innerhalb einer Datei gefunden wird,
  535.            gibt GREP nur den Namen dieser Datei aus und setzt die
  536.            Suche sofort in der nächsten Datei fort.
  537.  
  538.   -n       number
  539.            Jede Zeile, in der GREP den Suchstring findet, wird
  540.            zusammen mit ihrer Zeilennummer ausgegeben.
  541.  
  542.    -o      output format UNIX
  543.            Paßt die Ausgaben von GREP dem Ausgabeformat von UNIX an.
  544.            Jeder angegebenen Zeile wird der Name der entsprechenden
  545.            Datei vorangestellt.
  546.  
  547.    -r      regular expression
  548.            Der durch Suchstring angegebene Text wird nicht als direkte
  549.            Angabe, sondern als regulärer Ausdruck behandelt. Die
  550.            Standardvorgabe bei diesem Schalter ist "an".
  551.  
  552.    -u      update options.
  553.            GREP kombiniert die hier angegebenen Schalter mit den
  554.            Standardvorgaben und schreibt eine neue Version von sich
  555.            selbst, die mit diesen Parametern als Standardvorgabe
  556.            arbeitet. Damit läßt sich das Programm jederzeit
  557.            individuell anpassen. Wollen Sie die Voreinstellungen
  558.            sehen, so geben Sie auf der DOS-Ebene den Befehl
  559.  
  560.                    GREP ?
  561.  
  562.            ein. Jedem Schalter auf dem Hilfe-Bildschirm folgt ein
  563.            Plus- oder Minuszeichen, je nach seiner Standardvorgabe.
  564.  
  565.    -v      vice versa
  566.            Nur Zeilen, in denen GREP den Suchstring nicht findet,
  567.            werden ausgegeben.
  568.  
  569.    -w      word search
  570.            Mit dem Suchstring übereinstimmende Zeichenfolgen werden
  571.            nur dann als "gefunden" betrachtet, wenn vor und nach ihnen
  572.            ein Trennzeichen steht. Standardmäßig betrachtet GREP die
  573.            Zeichen A..Z, a..z, 0..9 und den Unterstrich (_) als Teil
  574.            eines Wortes.
  575.  
  576.            Mit einer Angabe der Form -w[Zeichensatz] läßt sich
  577.            festlegen, welche Zeichen GREP als Teil eines Wortes
  578.            betrachten soll. Als Zeichensatz ist jeder reguläre
  579.            Ausdruck zulässig.
  580.  
  581.            Wenn Sie den Zeichensatz als alphabetische Zeichenfolge
  582.            definieren, enthält dieser automatisch alle Groß- und
  583.            Kleinbuchstaben (ganz gleich, wie er eingegeben wird),
  584.            auch bei einer Suche, bei der zwischen Groß- und Klein-
  585.            schreibung unterschieden wird. Wenn Sie den Schalter
  586.            -w in Kombination mit dem Schalter -u verwenden, wird
  587.            der neue Zeichensatz als Standardvorgabe gespeichert.
  588.  
  589.    -z      verbose
  590.            GREP gibt bei jeder durchsuchten Datei den Namen sowie die
  591.            Anzahl der gefundenen Zeilen aus, auch wenn die Datei keine
  592.            Übereinstimmungen enthält. Gefundene Zeilen werden mit
  593.            vorangestellter Zeilennummer ausgegeben.
  594.  
  595.  
  596. Rangfolge der Schalter
  597. Wie gesagt, ist jede GREP-Option ein Schalter. Er wird in der
  598. Reihenfolge, in der er gesetzt wurde, bearbeitet. Jeder Schalter
  599. kann entweder ein- oder ausgeschaltet sein. Jede neue Schalter-
  600. angabe überschreibt die vorangegangene. Bei folgender Kommando-
  601. zeile
  602.  
  603.    grep -r -d -i -r-  main( my*.c
  604.  
  605. arbeitet GREP mit eingeschaltetem -d und -i Schalter und ausge-
  606. schaltetem -r Schalter.
  607.  
  608. Sie können Standardvorgabe für jeden Schalter in GREP.COM mit dem -u
  609. Schalter selbst angeben. Wenn GREP immer eine "verbose-Suche" (-z an)
  610. durchführen soll, können Sie dies mit folgendem Befehl angeben:
  611.  
  612.    grep -u -z
  613.  
  614.  
  615. Der Wert des Suchstrings definiert ein bestimmtes Muster, nach
  616. dem GREP suchen soll. Ein Suchstring kann entweder ein regulärer
  617. Ausdruck oder ein literaler String sein.
  618.  
  619. Bei einem regulären Ausdruck haben bestimmte Zeichen eine spezielle
  620. Bedeutung: Sie sind Operatoren und bestimmen die Suche.
  621.  
  622. In einem literalen String gibt es keine Operatoren: Jedes Zeichen
  623. wird als direkte Angabe behandelt.
  624.  
  625. Falls Leerzeichen und Tabulatoren nicht als Trennzeichen interpre-
  626. tiert werden sollen, müssen Sie den Suchstring in Anführungszeichen
  627. setzen. Der Suchstring darf nicht über das Zeilenende hinausgehen,
  628. d.h. der Text, nach dem gesucht werden soll, muß in einer einzigen
  629. Zeile stehen.
  630.  
  631. Ein regulärer Ausdruck kann ein einzelnes Zeichen oder eine Zeichen-
  632. folge sein, die in Klammern steht. Eine Verknüpfung von regulären
  633. Ausdrücken ergibt wiederum einen regulären Ausdruck.
  634.  
  635.  
  636. Operatoren bei regulären Ausdrücken
  637. Wenn Sie mit dem Schalter -r arbeiten (Standardvorgabe an), wird
  638. der Suchstring als regulärer Ausdruck behandelt (und nicht als
  639. literaler Ausdruck). Die folgenden Zeichen haben dabei eine
  640. besondere Bedeutung:
  641.  
  642. Zeichen    Bedeutung
  643. ======================================================================
  644.  
  645.    ^       steht für den Beginn einer Zeile, wenn es als erstes Zeichen
  646.            des Suchstrings angegeben ist.
  647.  
  648.    $       steht für ein Zeilenende, wenn es als letztes Zeichen des
  649.            Suchstrings angegeben ist.
  650.  
  651.    .       steht für ein beliebiges Zeichen.
  652.  
  653.    *       steht für eine beliebige Anzahl von Wiederholungen des voran-
  654.            gehenden Zeichens: die Suche nach fo* findet f (0 Wieder-
  655.            holungen von o), fo, foo, fooo usw. - nicht aber fa.
  656.  
  657.    +       arbeitet ähnlich wie *, setzt aber mindestens ein Vorkommen
  658.            des vorangehenden Zeichens voraus. Die Suche nach fo+ findet
  659.            fo, foo, fooo usw. - nicht jedoch f.
  660.  
  661.    [ ]     ein durch eckige Klammern eingeschlossener String wird als
  662.            Zeichensatz behandelt. Ist das erste Zeichen im String ein
  663.            Zirkumflex (^), entspricht der Ausdruck jedem Zeichen, außer
  664.            den im String vorkommenden Zeichen.
  665.  
  666.            Eine Angabe wie [xyz] sucht nach den Buchstaben x, y und z;
  667.            die Angabe [^xyz] nach sämtlichen Zeichen, außer x, y und
  668.            z. Sie können auch einen bestimmten Zeichenbereich
  669.            spezifizieren, indem Sie zwei Zeichen mit einem Bindestrich
  670.            verbunden als Grenzzeichen angeben. Der Zirkumflex läßt
  671.            sich auch auf Zeichenbereiche anwenden. [^a-f] sucht nach
  672.            sämtlichen Zeichen, außer den Kleinbuchstaben von a bis f,
  673.            [a-bd-z?] nur nach dem Fragezeichen und allen
  674.            Kleinbuchstaben außer c.
  675.  
  676.    \       Das Escape-Zeichen ermöglicht die Suche nach einzelnen Zei-
  677.            chen, die ansonsten speziell interpretiert würden. \. sucht
  678.            in einem Ausdruck nach einem Dezimalpunkt, \$ nach einem
  679.            Dollarzeichen usw.
  680.  
  681. Hinweis: Vier der "speziellen" Zeichen ($, ., *, and +) haben
  682. keine bestimmte Bedeutung innerhalb eines Zeichensatzes. Der
  683. Zirkumflex (^) wird nur dann als Negation gewertet, wenn er
  684. direkt am Anfang des Zeichensatzes (also direkt nach dem [)
  685. steht.
  686.  
  687. Alle in dieser Liste nicht aufgeführten Zeichen werden direkt
  688. miteinander verglichen (> mit >, # mit #, usw.).
  689.  
  690.  
  691. Dateinamen
  692. Dateinamen legen fest, welche Dateien (oder Dateigruppen)
  693. abgesucht werden sollen.
  694.  
  695. Dateinamen können explizit angegeben werden oder nach den üblichen
  696. DOS-Konventionen, also mit Joker oder Fragezeichen. Sie können auch
  697. mit einem Suchweg und/oder einem Laufwerksbezeichner angegeben werden.
  698. Bei Dateien ohne Pfadangabe sucht GREP im aktuellen Directory.
  699.  
  700. Wenn überhaupt kein Dateiname angegeben wird, liest GREP die
  701. Standardeingabe des Systems (was ohne eine Umleitung der Ein-/
  702. Ausgabe von DOS nicht allzuviel Sinn hat).
  703.  
  704.  
  705. Einige Beispiele
  706. Folgende Beispiele zeigen eine Kombination der Funktionen von
  707. GREP, um verschiedenartige Suchen auszuführen. Dabei gehen wir
  708. davon aus, daß die Standardvorgaben nicht verändert wurden.
  709.  
  710.  
  711. Beispiel 1:
  712. GREP wird durch einen Suchstring angewiesen, nach dem Wort main
  713. zu suchen, vor dem keine Kleinbuchstaben stehen dürfen [^a-z], dem
  714. ein oder mehrere Leerzeichen folgen sollen (\ *) und danach eine
  715. linke runde Klammer.
  716.  
  717. Da Leerzeichen und Tabulatoren als Begrenzer von Kommandozeilen
  718. betrachtet werden, müssen diese in Anführungszeichen stehen, wenn sie
  719. Teil eines regulären Ausdrucks sein sollen. In unserem Fall ist das
  720. Leerzeichen nach main durch das Escape-Zeichen explizit angeführt.
  721. Sie könnten aber auch das Leerzeichen in Anführungszeichen setzen.
  722.  
  723. Aufruf:        grep -r [^a-z]main\ *( *.c
  724.  
  725. Findet:        main(i:integer)
  726.                         main(i,j:integer)
  727.                if (main  ()) halt;
  728.  
  729. Findet nicht:  mymain()
  730.                MAIN(i:integer);
  731.  
  732. Sucht in:      allen Dateien im aktuellen Directory mit der Extension .C.
  733.  
  734.  
  735. Beispiel 2:
  736. Da Backslash (\) und Punkt (.) normalerweise eine besondere Bedeutung
  737. im Pfad und Dateinamen haben, müssen Sie das Backslash-Escape-Zeichen
  738. unmittelbar davor setzen, wenn nach diesen Zeichen gesucht werden soll.
  739. Der Schalter -i wird hier verwendet, damit bei der Suche die Groß- und
  740. Kleinschreibung außer acht gelassen wird.
  741.  
  742. Aufruf:        grep -ri [a-c]:\\data\.fil *.c *.inc
  743.  
  744. Findet:        A:\data.fil
  745.                C:\Data.Fil
  746.                         B:\DATA.FIL
  747.  
  748. Findet nicht:  D:\data.fil
  749.                      A:data.fil
  750.  
  751. Sucht in:      allen Dateien im aktuellen Directory mit der
  752.                Extension .C oder .INC.
  753.  
  754.  
  755. Beispiel 3:
  756. Hier wird die Suche nach einem bestimmten Wort definiert.
  757.  
  758. Aufrufe:        grep -ri [^a-z]wort[^a-z] *.doc
  759.  
  760. Findet:        jedes Wort muß auf einer eigenen Zeile stehen
  761.                         MEIN WORT!
  762.                         Wort -- kleinste Einheit der Rede.
  763.                         Am Anfang war das WORT, und das WORT war
  764.  
  765. Findet nicht:  Mehrere Worte auf einer Zeile sind nicht erlaubt.
  766.                Nachwort schreibt man richtig so!
  767.  
  768. Sucht in:      allen Dateien im aktuellen Directory mit der Extension .DOC
  769.  
  770.  
  771. Beispiel 4:
  772. Hier wird die Suche nach "Wort" definiert.
  773.  
  774. Aufruf:        grep -iw wort *.doc
  775.  
  776. Findet:         jedes Wort muß auf einer eigenen Zeile stehen.
  777.                 MEIN WORT!
  778.                 Wort -- kleinste Einheit einer Rede
  779.                 Am Anfang war das WORT, und
  780.  
  781. Findet nicht:   jedes Dokument beteht aus mindestens 2000 Wörtern
  782.                 Er kann Nachwort nicht richtig buchstabieren
  783.  
  784. Sucht in:       allen Dateien im aktuellen Directory mit der Extension .DOC.
  785.  
  786.  
  787. Beispiel 5:
  788. In diesem Beispiel wird nach einem String mit Leerzeichen gesucht.
  789.  
  790. Aufruf:   grep "Suchstring mit Leerzeichen" *.doc *.c a:\work\myfile.*
  791.  
  792. Findet:         Das ist ein Suchstring mit Leerzeichen darin.
  793.  
  794. Findet nicht:   DAS IST EIN SUCHSTRING MIT LEERZEICHEN DARIN.
  795.                 Ein SUCHSTRING mit Leerzeichen.
  796.  
  797. Sucht in:       in allen Dateien im aktuellen Directory mit der Extension
  798.                 .DOC und .C und in MYFILE.* im Directory \WORK im Laufwerk A.
  799.  
  800.  
  801. Beispiel 6:
  802. In diesem Beispiel wird nach einem der Zeichen ".:?' gesucht und am
  803. Ende einer Zeile nach einem Komma.
  804.  
  805. Dem Anführungszeichen innerhalb eines Bereiches ist ein Escape-Zeichen
  806. vorangestellt, damit es als normales Zeichen und nicht als Begrenzer
  807. des Strings behandelt wird. Das $-Zeichen erscheint auch außerhalb des
  808. angegebenen Strings. Damit wird gezeigt, wie mehrere reguläre Ausdrücke
  809. zu einem einzigen längeren Ausdruck verkettet werden können.
  810.  
  811. Aufruf:        grep -rd "[ ,.:?'\"]"$ \*.doc
  812.  
  813. Findet:         Er sagte Hallo zu mir.
  814.                 Wie geht's?
  815.                 Vorausgesetzt, daß wir voraussetzen,
  816.                 Ein Beispiel dazu:
  817.                 "Manche Leute denken, Computer aber nicht."
  818.  
  819. Findet nicht:   Er sagte "Hallo" zu mir
  820.                 Wo gehst Du denn hin? Geht's gut
  821.  
  822. Sucht in:       allen Dateien im Hauptdirectory mit der Extension .DOC
  823.                 und allen Subdirectories des aktuellen Laufwerks.
  824.  
  825.  
  826. Beispiel 7:
  827. In diesem Beispiel wird die Groß- und Kleinschreibung ignoriert
  828. und nur die Namen der Dateien ausgegeben, die wenigstens eine
  829. Übereinstimmung enthalten. In den folgenden drei Aufrufen werden
  830. unterschiedliche Spezifikationsarten von Mehrfachschaltern gezeigt.
  831.  
  832. Aufruf:        grep -ild " der " \*.doc
  833.                grep -i -l -d " der " \*.doc
  834.                grep -il -d " der " \*.doc
  835.  
  836. Findet:        unter Berücksichtigung der Tatsache, daß
  837.                ...ärgerlich. Der Hauptgrund ...
  838.  
  839. Findet nicht:   Derselbe Fehler wie oben
  840.                 Geht nicht, weil das gesuchte Wort fehlt
  841.  
  842. Sucht in:      allen Dateien im aktuellen Directory mit der Extension
  843.                .DOC und in allen Subdirectories des aktuellen Laufwerks.
  844.  
  845.  
  846. Beispiel 8:
  847. In diesem Beispiel wird der aktuelle Zeichensatz für ein Wort neu
  848. definiert und zwar auf das Gleichheitszeichen (=) begrenzt, dann wird
  849. nach dem Wort gesucht. GREP sucht damit nach den C-Zuweisungen, bei
  850. welchen ein einzelnes Gleichheitszeichen (=) verwendet wird; die
  851. Gleichheitstests, bei welchen zwei Gleichheitszeichen (==) verwendet
  852. werden, werden damit außer acht gelassen.
  853.  
  854. Aufruf:        grep -w[=] = *.c
  855.  
  856. Findet:        i = 5;
  857.                         j=5;
  858.                         i += j;
  859.  
  860. Findet nicht:  if (i == t) j++;
  861.                         /* ======================= */
  862.  
  863. Sucht in:      allen Dateien im aktuellen Directory mit der Extension .C.
  864.  
  865.  
  866. ========================================================================
  867.  
  868. OBJXREF: Kreuzreferenzen für Objektmodule erzeugen
  869. --------------------------------------------------
  870.  
  871. OBJXREF untersucht eine Liste mit Objekt- und Bibliotheks-Dateien
  872. und erstellt einen Bericht über deren Inhalt. In einer Berichtsart
  873. werden die Definitionen globaler Namen und deren Referenzen auf-
  874. geführt. Eine andere listet die von Objektmodulen definierten
  875. Segmentgrößen auf.
  876.  
  877. Es gibt zwei Kategorien von globalen Namen: globale Variablen und
  878. Funktionsnamen. Die Dateien TEST1.C und TEST2.C im Abschnitt
  879. "OBJXREF Beispielberichte" enthalten Definitionen von globalen Namem
  880. und deren externe Referenzen.
  881.  
  882. Objektmodule sind Objektdateien (.OBJ), die von TC, TCC oder TASM
  883. erzeugt werden. Eine Bibliotheksdatei (.LIB) enthält mehrere
  884. Objektmodule. Ein von TC erzeugtes Objektmodul erhält denselben
  885. Namen wie die Quelldatei .C, aus der es compiliert wurde. Das gilt
  886. ebenso für TCC, solange mit dem TCC-Kommandozeileparameter -o kein
  887. anderer Name für die Ausgabedatei ausdrücklich angegeben wird.
  888.  
  889.  
  890. Der Aufruf von OBJXREF
  891.  
  892. Der Aufruf von OBJXREF besteht aus dem Wort OBJXREF, gefolgt von
  893. einer Reihe von Kommandozeilenparametern und einer Liste von Objekt-
  894. und Bibliotheksdateinamen, die durch ein Leerzeichen oder einen
  895. Tabulator voneinander getrennt sind. Die Syntax ist:
  896.  
  897.    OBJXREF  Optionen   Dateiname  Dateiname ...
  898.  
  899. Die Kommandozeilenparameter bestimmen die Berichtsart, die von OBJXREF
  900. erzeugt wird, sowie die Informationsmenge der Ausgaben von OBJXREF.
  901. Sie werden im nächsten Abschnitt ausführlicher besprochen.
  902.  
  903. Jedem Parameter wird ein Schrägstrich (/) vorangestellt, gefolgt von
  904. einem ein bzw. zwei Zeichen langen Parameternamen.
  905.  
  906. Die Objekt- und Bibliotheksdateien können entweder in der Kommando-
  907. zeile oder in einer Eingabedatei spezifiziert werden. In der Kommando-
  908. zeile werden die Dateinamen durch ein Leerzeichen bzw. einen Tabulator
  909. voneinander getrennt. Alle Objektmodule, die als .OBJ-Dateien genannt
  910. sind, werden in den Berichten aufgeführt. Wie TLINK berücksichtigt
  911. OBJXREF jedoch nur diejenigen Module der .LIB-Dateien, die einen glo-
  912. balen Namen enthalten, auf den in einer .OBJ-Datei oder in einem vor-
  913. herigen Modul in der .LIB-Datei Bezug genommen wird.
  914.  
  915. Generell gilt, daß alle .OBJ- und .LIB-Dateien, die zum korrekten
  916. Linken eines Programms benötigt werden, zusammen mit der Start .OBJ-
  917. Datei und einer oder mehreren C-Bibliotheken aufgelistet werden sollen.
  918.  
  919. Die Dateinamen können eine Laufwerksbezeichnung und einen Directory-
  920. pfad enthalten. Die DOS-Jokerzeichen ? und * können zur Identifizierung
  921. mehrerer Dateien verwendet werden. Die Dateinamen können sich auf
  922. Objektdateien (.OBJ) oder auf Bibliotheksdateien (.LIB) beziehen.
  923. Wenn keine Dateiextension angebeben wird, wird die Extension .OBJ
  924. genommen.
  925.  
  926. Parameter und Dateinamen können in beliebiger Reihenfolge in der
  927. Kommandozeile erscheinen.
  928.  
  929. OBJXREF-Ausgaben werden zur DOS-Standardausgabeeinheit geschrieben. Die
  930. Standardvorgabe ist der Bildschirm. Die Ausgaben können mit dem DOS-
  931. Umleitungszeichen (>) zum Drucker gesandt werden (mit >LPT1:) oder
  932. in eine Datei (mit >lstfile).
  933.  
  934. Die Eingabe OBJXREF ohne Dateinamen oder Parameter erzeugt eine Auf-
  935. stellung aller verfügbaren Parameter.
  936.  
  937.  
  938. Der Aufruf von OBJXREF
  939.  
  940. Die OBJXREF Kommandozeilen-Parameter werden in zwei Kategorien
  941. eingeteilt: Kontroll-Parameter und Ausgabe-Parameter
  942.  
  943.  
  944. Die Kontroll-Parameter
  945.  
  946. Mit den Kontroll-Parametern werden die Standardvorgaben von
  947. OBJXREF modifiziert (sie sind standardmäßig alle auf "aus" gesetzt).
  948.  
  949. Parameter    Bedeutung
  950. ======================================================================
  951.  
  952.    /I        Unterscheidet bei globalen Namen nicht zwischen Groß- und
  953.              Kleinschreibung. Verwenden Sie diesen Parameter, wenn Sie
  954.              mit TLINK ohne den Parameter /C (der zwischen Groß- und
  955.              Kleinschreibung unterscheidet) arbeiten.
  956.  
  957.    /D        Sucht nach .OBJ-Dateien in einem anderen Directory.
  958.              Wenn OBJXREF in einem anderen als dem aktuellen Directory
  959.              suchen soll, geben Sie des Namen des Directories mit
  960.              vorangestelltem /D in der Kommandozeile an.
  961.  
  962.                 OBJXREF /Ddir1 [; dir2 [; dir3]]
  963.  
  964.              oder
  965.  
  966.                 OBJXREF /Ddir1 [/Ddir2] [/Ddir3]
  967.  
  968.              OBJXREF durchsucht jedes Directory in der angegebenen
  969.              Reihenfolge nach allen Objekt- und Bibliotheksdateien.
  970.  
  971. Wichtig!
  972.              Wenn Sie nicht mit dem Parameter /D arbeiten, sucht
  973.              OBJXREF nur im aktuellen Directory. Mit dem Parameter
  974.              /D wird jedoch das aktuelle Directory nicht durchsucht,
  975.              solange es nicht in der Directoryliste angegeben ist.
  976.              Wenn OBJXREF beispielsweise zuerst im BORLAND-Directory
  977.              und dann im aktuellen Directory nach Dateien suchen soll,
  978.              müssen Sie
  979.  
  980.                 OBJXREF /Dborland;.
  981.  
  982.              eingeben. Der Punkt bezeichnet das aktuelle Directory.
  983.  
  984.  
  985.    /F        Alle Objektmodule, die in Bibliotheksdateien (.LIB) ange-
  986.              geben sind, werden aufgeführt, auch wenn sie keine glo-
  987.              balen Namen enthalten, auf die in einem von OBJXREF ver-
  988.              arbeiteten Objektmodul Bezug genommen wird. Damit
  989.              erhalten Sie Informationen über den gesamten Inhalt einer
  990.              Bibliotheksdatei. (Siehe Beispiel 4 im Abschnitt
  991.              "OBJXREF- Beispiele".)
  992.  
  993.    /O        Damit können Sie eine Ausgabedatei spezifizieren, in die
  994.              OBJXREF den erzeugten Report ausgibt. Die Syntax ist:
  995.  
  996.              OBJXREF Dateiname.obj /Berichtsoption /Ausgabedateiname.ext
  997.  
  998.              Per Standardvorgabe wird alles auf dem Bildschirm ausgegeben.
  999.  
  1000.  
  1001.    /V        Listet alle gelesenen Dateinamen auf und gibt die Gesamt-
  1002.              zahl der gelesenen globalen Namen, Module, Segmente und
  1003.              Klassen an.
  1004.  
  1005.    /Z        Schließt Segment-Definitionen der Länge Null mit ein.
  1006.              Einige Module der Bibliotheken definieren Segmente ohne
  1007.              tatsächlichen Inhalt. Die Namen dieser "Formalsegmente"
  1008.              werden normalerweise nicht ausgegeben, um den Bericht
  1009.              einigermaßen übersichtlich zu halten.
  1010.  
  1011.  
  1012. Ausgabe-Parameter
  1013.  
  1014. Die Ausgabe-Parameter bestimmen, welche Berichtsart erzeugt wird und
  1015. wie detailliert die ausgegebenen Informationen sind.
  1016.  
  1017. Parameter     Beschreibung
  1018. =========================================================================
  1019.  
  1020.    /RC        Der Bericht enthält die Modulgrößen nach dem Klassentyp
  1021.               der Segmente geordnet.
  1022.  
  1023.    /RM        Globale Namen werden in der Reihenfolge der sie definie-
  1024.               renden Module und innerhalb dieser Module alphabetisch
  1025.               angeordnet.
  1026.  
  1027.    /RP        Ausgegeben werden sämtliche globale Namen in alphabe-
  1028.               tischer Reihenfolge zusammen mit den Namen des Moduls,
  1029.               in dem Sie definiert sind.
  1030.  
  1031. Die Standardvorgaben:
  1032.  
  1033.    /RR        Ausgegeben werden die tatsächlich verwendeten globalen
  1034.               Namen (public-Definitionen), auf die Bezüge existieren.
  1035.  
  1036.    /RS        Ausgegeben werden die Modulgrößen alphabetisch nach
  1037.               ihrem Namen geordnet.
  1038.  
  1039.    /RU        Der Bericht führt die globalen Namen, die als public
  1040.               deklariert, aber nicht benutzt werden, nach Modulnamen
  1041.               geordnet auf.
  1042.  
  1043.    /RV        OBJXREF kombiniert sämtliche zuvor aufgeführten Bericht-
  1044.               optionen in einem Bericht.
  1045.  
  1046.    /RX        Der Bericht enthält alle Module, auf die von anderen
  1047.               Modulen Bezug genommen wird, geordnet nach den bezug-
  1048.               nehmenden Modulen.
  1049.  
  1050. Globale Namen in C-Programmen erscheinen in den Berichten mit einem
  1051. führenden Unterstrich, außer wenn der Parameter -U- beim Compilieren
  1052. der Datei nicht angegeben wurde.
  1053.  
  1054. Sie können die Ausgabe von Modulen, Segmenten, Klassen und globalen
  1055. Namen einschränken, indem Sie in der Kommandozeile den entsprechen-
  1056. den Namen, angeführt vom Parameter /N, angeben. Zum Beispiel weist
  1057.  
  1058.    OBJXREF Dateiliste /RM /NC0
  1059.  
  1060. OBJXREF an, nur Informationen über das Modul CO auszugeben.
  1061.  
  1062.  
  1063. Die Eingabedateien
  1064.  
  1065. Die Kommandozeile auf DOS-Ebene ist auf 128 Zeichen beschränkt.
  1066. Wenn die Liste Ihrer Optionen und Dateinamen länger ist, müssen
  1067. Sie Ihre Dateinamen in eine Eingabedatei schreiben.
  1068.  
  1069. Eine Eingabedatei ist eine mit einem Texteditor geschriebene Textdatei.
  1070. Wenn Sie bereits eine Dateinamenliste für Ihr Turbo C++ Programm vorbe-
  1071. reitet haben, erkennt OBJXREF verschiedene Eingabedateitypen.
  1072.  
  1073. Eingabedateien werden in der Kommandozeile mit einem der folgenden
  1074. Parameter aufgerufen. Der Name der Eingabedatei muß direkt nach dem
  1075. Parameter folgen, Leerzeichen zwischen Parameter und Dateinamen sind
  1076. nicht erlaubt (z.B. /Leing und nicht /L eing).
  1077.  
  1078. Sie können mehr als eine Eingabedatei in der Kommandozeile spezifi-
  1079. zieren; .OBJ und .LIB-Dateinamen können vorangestellt oder angefügt
  1080. werden.
  1081.  
  1082.  
  1083. Eingabedateien im freien Format
  1084.  
  1085. Mit einem Texteditor können Sie Eingabedateien im freien
  1086. Format erstellen. Listen Sie dafür die Namen aller Objekt- und
  1087. Bibliotheksdateien auf, die Sie zum Erzeugen Ihrer .EXE-Datei
  1088. benötigen.
  1089.  
  1090. Jede Datei, die in der Eingabedatei ohne Extension angegeben wird,
  1091. wird als Objektdatei behandelt.
  1092.  
  1093. Um Dateien im freien Format mit OBJXREF zu verwenden, geben
  1094. Sie jeden Eingabedateinamen in der Kommandozeile mit einem voran-
  1095. gestellten @ an und trennen sie von anderen Kommandozeileneingaben
  1096. durch ein Leerzeichen oder einen Tabulator:
  1097.  
  1098.    @Dateiname  @Dateiame ...
  1099.  
  1100.  
  1101. Projektdateien
  1102.  
  1103. Sie können auch Projektdateien, die mit der integrierten Umgebung
  1104. von Turbo C++ erzeugt wurden, als Eingabedateien verwenden.
  1105. Stellen Sie dem Projektdateinamen in der Kommandozeile den Parameter
  1106. /P voran, z.B.
  1107.  
  1108.    /PDateiname
  1109.  
  1110. Wenn die Dateinamenangabe keine ausdrückliche Extension enthält, wird
  1111. die Extension .PRJ zugewiesen.
  1112.  
  1113. Enthält die Projektdatei Dateinamen mit der Extension .C oder gar
  1114. keiner Extension, werden sie als Spezifizierung der entsprechenden
  1115. .OBJ-Datei angesehen. Sie brauchen die Dateizuordnungen in Klammern
  1116. nicht zu entfernen; diese werden von OBJXREF einfach ignoriert.
  1117.  
  1118. Hinweis: In einer Projektdatei spezifiziert die Dateiliste alleine
  1119. noch kein vollständiges Programm -- Sie müssen ebenfalls eine Start-
  1120. datei (C0x.OBJ) und eine oder mehrere Bibliotheksdateien (MATHX.LIB,
  1121. EMU.LIB, und CX.LIB, zum Beispiel) von Turbo C++ angeben. Außerdem
  1122. können Sie mit dem Parameter /D das Directory angeben, in dem
  1123. OBJXREF nach Objektdateien suchen soll.
  1124.  
  1125.  
  1126. Befehlsdateien des Linkers
  1127.  
  1128. OBJXREF kann auch Befehlsdateien bearbeiten, welche für den Linker
  1129. geschrieben wurden. Sie müssen in der Kommandozeile mit /L eingeleitet
  1130. werden, wobei zwischen dem /L und dem Dateinamen kein Leerzeichen
  1131. stehen darf:
  1132.  
  1133.    /LDateiname
  1134.  
  1135. Beispiel 2 im Abschnitt "Einige Beispiele mit OBJXREF" zeigt Ihnen
  1136. die Anwendung dieser Dateien.
  1137.  
  1138.  
  1139. Beispiel zur OBJXREF-Ausgabe
  1140.  
  1141. Angenommen, Sie haben zwei Quelldateien in Ihrem Directory von
  1142. Turbo C++ und möchten mit OBJXREF die compilierten Objektdateien
  1143. ausgeben. Diese Quelldateien sind TEST1.C and TEST2.C und sehen
  1144. folgendermaßen aus:
  1145.  
  1146. /* test1.c */
  1147. int i1;                       /* Definition i1 */
  1148. extern int i2;                /* Bezug auf i2 in TEST2.C */
  1149. static int i3;                /* kein globaler Name */
  1150. extern void look(void);       /* Bezug auf look in TEST2.C */
  1151.  
  1152. void main(void)               /* Definition von main */
  1153. {
  1154.    int i4;                    /* lokale Variable */
  1155.    look();                    /* Bezug auf die Funktion look()*/
  1156. }
  1157.  
  1158. /* test2.c */
  1159. #include <process.h>
  1160. extern int i1;                /* Bezug auf i1 */
  1161. int i2;                       /* Definition von i2 */
  1162.  
  1163. void look(void)               /* Definition von look */
  1164. {
  1165.    exit(i1);                  /* Bezug auf exit... */
  1166. }                             /* und auf i1 */
  1167.  
  1168. Die aus diesen Quelldateien compilierten Objektmodule heißen TEST1.OBJ
  1169. und TEST2.OBJ. Sie können OBJXREF anweisen, welche Berichtsart über
  1170. diese Objektdateien ausgegeben werden sollen, indem Sie in der Komman-
  1171. dozeile den Dateinamen, gefolgt vom Parameter /R und einem zweiten
  1172. Parameter, der den Berichtstyp bezeichnet.
  1173.  
  1174. Hinweis: Die folgenden Beispiele zeigen nur sinnvolle Teile des
  1175. Berichts.
  1176.  
  1177.  
  1178. Bericht zu globalen Namen (/@;RP)
  1179.  
  1180. Beim Aufruf mit dem Parameter /RP wird jeder globale Name aufge-
  1181. listet, der in den Objektmodulen, die ausgegeben werden, definiert
  1182. ist, gefolgt von dem Namen des Moduls, in welchen er definiert ist.
  1183.  
  1184. Bei einem Aufruf wie
  1185.  
  1186.    OBJXREF  /RP  test1  test2
  1187.  
  1188. erscheint folgender, von OBJXREF erzeugter Bericht:
  1189.  
  1190.                         DEFINED IN
  1191. _i1              TEST1
  1192. _i2              TEST2
  1193. _look            TEST2
  1194. _main            TEST1
  1195.  
  1196.  
  1197. Bericht zu Modulen (/@;RM)
  1198.  
  1199. Beim Aufruf mit dem Parameter /RM werden alle Objektmodule aufgelistet,
  1200. gefolgt von einem Listing aller darin enthaltenen globalen Namen.
  1201.  
  1202. Bei einem Aufruf wie
  1203.  
  1204.    OBJXREF  /RM  test1  test2
  1205.  
  1206. erzeugt OBJXREF folgende Ausgabe:
  1207.  
  1208. MODULE: TEST1 Definition der folgenden Symbole:
  1209.         public: _i1
  1210.         public: _main
  1211. MODULE: TEST2 Definition der folgenden Symbole:
  1212.         public: _i2
  1213.         public: _look
  1214.  
  1215.  
  1216. Bericht zu Bezügen (/@;RR)
  1217.  
  1218. Bei diesem Aufruf gibt OBJXREF die Namen aller globalen Namen aus.
  1219. Auf den Namen folgt das Modul, in dem der entsprechende Bezeichner
  1220. definiert ist, darunter die Namen der Module, die auf den jeweiligen
  1221. Bezeichner zugreifen. Dies ist Voreinstellung, wenn keine
  1222. Ausgabeoption definiert ist.
  1223.  
  1224. Bei einem Aufruf wie
  1225.  
  1226.    OBJXREF  /RR  C0  test1  test2  CS.LIB
  1227.  
  1228. erzeugt OBJXREF folgende Ausgabe:
  1229.  
  1230. _exit (EXIT)
  1231.      C0
  1232.      TEST2
  1233. _i1 (TEST1)
  1234.      TEST2
  1235. _i2 (TEST2)
  1236. _look (TEST2)
  1237.      TEST1
  1238. _main (TEST1)
  1239.      C0
  1240.  
  1241.  
  1242. Bericht zu externen Deklarationen (/RX)
  1243.  
  1244. Beim Aufruf mit dem Parameter /RX werden die Namen aller Module
  1245. ausgegeben, die externe Bezüge enthalten.
  1246.  
  1247. Bei einem Aufruf wie
  1248.  
  1249.    OBJXREF  /RX  C0  test1  test2  CS.LIB
  1250.  
  1251. erzeugt OBJXREF folgende Ausgabe:
  1252.  
  1253. MODULE: C0 references the following symbols:
  1254.         _main
  1255. MODULE: TEST1 references the following symbols:
  1256.         _i2
  1257.         _look
  1258. MODULE: TEST2 references the following symbols:
  1259.         _exit
  1260.         _i1
  1261.  
  1262.  
  1263. Bericht zu Segmentgrößen (/RS)
  1264.  
  1265. Beim Aufruf mit dem Parameter /RS gibt OBJXREF die Namen aller
  1266. Segmente des Programms zusammen mit ihrer Größe aus. Für jedes
  1267. Segment wird detailliert angegeben, aus welchen Modulen es sich
  1268. zusammensetzt. Wo kein Anfangswert einem im Segment definiertem
  1269. Symbol zugewiesen wurde, erscheint das Wort "uninitialized". Bei
  1270. Segmenten mit absoluter Adresse in einer .ASM-Datei erscheint
  1271. links der Angabe der Segmentgröße das Flag Abs.
  1272.  
  1273. Bei einem Aufruf wie
  1274.  
  1275.    OBJXREF  /RS  test1  test2
  1276.  
  1277. erzeugt OBJXREF folgende Ausgabe:
  1278.  
  1279. These files were compiled using the large memory model.
  1280. (Diese Dateien wurden unter Verwendung des Speichermodells large compiliert.)
  1281.  
  1282. TEST1_TEXT
  1283.         6 (00006h)   TEST1
  1284.         6 (00006h)   total
  1285. TEST2_TEXT
  1286.        10 (0000Ah)   TEST2
  1287.        10 (0000Ah)   total
  1288. _BSS
  1289.         4 (00004h)   TEST1, uninitialized
  1290.         2 (00002h)   TEST2, uninitialized
  1291.         6 (00006h)   total
  1292.  
  1293.  
  1294. Bericht zu Klassentypen (/@;RC)
  1295.  
  1296. Beim Aufruf mit dem Parameter /RC gibt OBJXREF in alphabetischer
  1297. Reihenfolge der Namen der Segmentklassen die Definitionen der Segment-
  1298. größe aus. Die CODE-Klasse enthält Instruktionen, DATA enthält initia-
  1299. lisierte Daten und BSS nicht initialisierte Daten. Segmente ohne
  1300. Klassentyp-Spezifizierung werden mit der Anmerkung "No class type"
  1301. (Kein Klassentyp) aufgelistet.
  1302.  
  1303. Bei einem Aufruf wie
  1304.  
  1305.    OBJXREF  /RC  C0  test1  test2  CS.LIB
  1306.  
  1307. erzeugt OBJXREF folgende Ausgabe:
  1308.  
  1309. BSS
  1310.        4  (00004h)   TEST1
  1311.        2  (00002h)   TEST2
  1312.      ...
  1313.      132  (00084h)   total
  1314. CODE
  1315.        6  (00006h)   TEST1
  1316.       10  (0000Ah)   TEST2
  1317.       16  (00010h)   total
  1318. DATA
  1319.      143  (0008Fh)   C0
  1320.      143  (0008Fh)   total
  1321.  
  1322.  
  1323. Bericht zu unbenutzten globalen Namen (/RU)
  1324.  
  1325. Beim Aufruf mit dem Parameter /RU gibt OBJXREF die Namen aller PUBLIC-
  1326. Bezeichner eines Programms aus, auf die kein Bezug in anderen Modulen
  1327. genommen wird. Ein globaler Name wird im Bericht aufgeführt, wenn eine
  1328. der folgenden Bedingungen erfüllt wird:
  1329.  
  1330. Auf die PUBLIC-Definition wird entweder nur innerhalb des definierenden
  1331. Moduls Bezug genommen und bräuchte deshalb nicht als PUBLIC definiert
  1332. werden. (Wenn es sich um ein C-Modul handelt, sollte das Schlüsselwort
  1333. static der Definition hinzugefügt werden; bei einem TASM-Modul entfer-
  1334. nen Sie einfach die PUBLIC-Definition).
  1335. oder
  1336. Sie findet nie Anwendung (könnte deshalb gelöscht werden, um Code bzw.
  1337. Speicherplatz zu sparen).
  1338.  
  1339. Bei einem Aufruf wie
  1340.  
  1341.    OBJXREF  /RU  test1  test2
  1342.  
  1343. erzeugt OBJXREF folgende Ausgabe:
  1344.  
  1345.    MODULE: TEST2 defines the unreferenced _i2.
  1346.  
  1347.  
  1348. Bericht zu allem (/RV)
  1349.  
  1350. Bei einem Aufruf mit /RV erzeugt OBJXREF jede der oben genannten
  1351. Berichtsarten.
  1352.  
  1353.  
  1354. Aufrufbeispiele zu OBJXREF
  1355.  
  1356. In den folgenden Beispielen wird davon ausgegangen, daß sich
  1357. die Anwendungs-Beispieldateien im aktuellen Directory des
  1358. Standardlaufwerks befinden und die Startup-(C0x.OBJ) und Bibliotheks-
  1359. dateiem im Directory \TURBOC\LIB stehen.
  1360.  
  1361. Beispiel 1
  1362.  
  1363.    C>OBJXREF \turboc\lib\c0l test1 test2 \turboc\lib\cl.lib
  1364.  
  1365. In diesem Beispiel werden die Dateien TEST1.OBJ und TEST2.OBJ sowie
  1366. die Startdatei von Turbo C \TURBOC\LIB\C0L.OBJ und die Bibliotheks-
  1367. datei \@;TURBOC\LIB\CL.LIB angegeben. Da kein Ausgabetyp spezifiziert
  1368. ist, verwendet das Programm die Standardvorgabe /RR, d.h. erzeugt ein
  1369. Listing aller PUBLIC-Referenzen.
  1370.  
  1371.  
  1372. Beispiel 2
  1373.  
  1374.    C>OBJXREF /RV /Ltest1.arf
  1375.  
  1376. Die Antwortdatei von TLINK TEST1.ARF enthält dieselbe Dateiliste
  1377. wie die Kommandozeile in Beispiel 1. Der Parameter /RV ist spezifi-
  1378. ziert, so daß von jeder Berichtsart ein Listing erzeugt wird.
  1379. TEST1.ARF enthält
  1380.  
  1381. \turboc\lib\c0l
  1382. test1 test2
  1383. test1.exe
  1384. test1.map
  1385. \turboc\lib\cl
  1386.  
  1387.  
  1388. Beispiel 3
  1389.  
  1390.    C>OBJXREF /RC  B:c0s  /Ptest1  @libs
  1391.  
  1392. Die TC-Projektdatei TEST1.PRJ enthält die Angabe TEST1.OBJ und
  1393. TEST2.OBJ. Die Antwortdatei @libs spezifiziert die Bibliotheken auf
  1394. der Diskette im Laufwerk B. TEST1.PRJ enthält
  1395.  
  1396. test1
  1397. test2.c
  1398.  
  1399. Die Datei LIBS enthält
  1400.  
  1401.    b:maths.lib b:emu.lib b:cs.lib
  1402.  
  1403. Die genannten Start- und Bibliotheksdateien hängen vom Speichermodell
  1404. und den Fließkommaoptionen ab, die beim Compilieren verwendet wurden.
  1405. Beim Aufruf mit /RC werden die Segmentklassen ausgegeben.
  1406.  
  1407.  
  1408. Beispiel 4
  1409.  
  1410.    C>OBJXREF /F /RV \turboc\lib\cs.lib
  1411.  
  1412. Hier erzeugt OBJXREF einen Bericht über sämtliche in der Turbo C++
  1413. Bibliothek CS.LIB enthaltene Module. (Durch den Parameter /F wird
  1414. OBJXREF in diesem Fall gezwungen, alle in CS.LIB enthaltenen Module
  1415. aufzuführen.)
  1416.  
  1417.  
  1418.  
  1419. Meldungen von OBJXREF
  1420.  
  1421. OBJXREF gibt zwei Arten von Meldungen aus: Fehlermeldungen und Warnungen.
  1422.  
  1423.  
  1424. Fehlermeldungen
  1425.  
  1426. Out of memory
  1427. (Nicht genug Speicherplatz)
  1428. OBJXREF hält sämtliche Symbollisten im Hauptspeicher und braucht
  1429. wesentlich mehr Speicherplatz als TLINK. (Wenn Sie diese Meldung
  1430. erhalten, kann es deshalb durchaus sein, daß TLINK noch in der
  1431. Lage ist, die angegebenen Module zu einem Programm zu binden).
  1432. Speicherresidente Programme sollten vorübergehend entfernt werden.
  1433.  
  1434.  
  1435. Warnungen
  1436.  
  1437. WARNUNG: Unable to open input file <filename>
  1438. (Datei <Dateiname> nicht gefunden)
  1439. OBJXREF hat die angegebene Datei nicht gefunden oder war nicht in
  1440. der Lage, sie zu öffnen. Die Arbeit wird mit der nächsten angege-
  1441. benen Datei fortgesetzt.
  1442.  
  1443. WARNUNG: Unknown option - <option>
  1444. (Unbekannter Kommandozeilen-Parameter)
  1445. Nach Ausgabe dieser Meldung setzt OBJXREF die Arbeit fort -
  1446. unbekannte Kommandozeilen-Parameter werden ignoriert.
  1447.  
  1448. WARNUNG: Unresolved <symbol> in module <module>
  1449. (In Modul <Modul> vorausgesetztes Symbol <Symbol> ist nicht definiert)
  1450. Das PUBLIC-Symbol 'XXXXX' fehlt, d.h. ist in keiner der angegebenen
  1451. Dateien definiert. OBJXREF kennzeichnet fehlende Symbole in jedem
  1452. Listing explizit.
  1453.  
  1454. WARNUNG: Invalid file specification <filename>
  1455. (Dateiname <Dateiname> ist ungültig)
  1456. Der angegebene Dateiname entspricht nicht den DOS-Konventionen. Die
  1457. Arbeit wird mit der nächsten angegebenen Datei fortgesetzt.
  1458.  
  1459. WARNUNG: No files matching <filename>
  1460. (Keine der Suchmaske <Dateiname> entsprechenden Dateien gefunden)
  1461. Sie haben einen Dateinamen mit Jokerzeichen angegeben, allerdings
  1462. findet OBJXREF keine einzige Datei, die dieser Suchmaske entspricht.
  1463. Die Arbeit wird mit der nächsten angegebenen Datei fortgesetzt.
  1464.  
  1465. WARNUNG: <symbol> defined in <module1> duplicated in
  1466. <module2>
  1467. (<Symbol> mehrfach in <Modul1> und in <Modul2> definiert)
  1468. Das Symbol <Symbol> ist in mehr als einem Modul als PUBLIC definiert.
  1469. OBJXREF ignoriert die zweite Definition.
  1470.  
  1471.  
  1472. ========================================================================
  1473.  
  1474. THELP: Das Zusatzprogramm Turbo-Hilfe
  1475. -------------------------------------
  1476.  
  1477. THELP.COM ist ein RAM-residentes (TSR) Zusatzprogramm, das auf die
  1478. Hilfeinformationen von Turbo C++ zugreift, wenn sie mit einem anderen
  1479. Editor als mit dem der integrierten Entwicklungsumgebung oder mit
  1480. Turbo Debugger arbeiten.
  1481.  
  1482.  
  1483. Die Installation von THELP
  1484. Wenn Sie Turbo C++ mit dem INSTALL Installationsprogramm auf Ihrem
  1485. System installieren, sollte THELP.COM bereits in Ihrem Hauptdirectory
  1486. von Turbo C++ stehen. Wenn nicht, kopieren Sie es von der Original-
  1487. diskette in Ihr Hauptdirectory.
  1488.  
  1489. Vergewissern Sie sich, daß sich die Textdatei TCHELP.TCH, die die
  1490. Hilfeinformationen von Turbo C++ enthält, im aktuellen Directory
  1491. befindet. Wenn TCHELP.TCH in einem anderen Directory stehen soll,
  1492. kann THELP jederzeit mit dem Kommandozeilen-Parameter /F diese Datei
  1493. finden). Wenn Sie mit INSTALL arbeiten, wird TCHELP.TCH in das
  1494. TURBOC-Directory geschrieben und THELP erhält automatisch die
  1495. Mitteilung, wo es danach zu suchen hat.
  1496.  
  1497. Die Größe des Speicherplatzes hängt davon ab, ob Sie mit einer
  1498. Swapdatei arbeiten, um Speicherplatz zu sparen. Wenn Sie mit einer
  1499. Swapdatei arbeiten wollen, besetzt THELP in aktivem Zustand 8K des
  1500. Speichers und zusätzlich 32K für die Swapdatei. Wenn Sie THELP
  1501. ohne Swapdatei benutzen, benötigt es immer 40K.
  1502.  
  1503.  
  1504. THELP laden und aktivieren
  1505.  
  1506. Achtung! Wenn Sie THELP gleichzeitig mit SideKick 1.x bzw. SideKick
  1507. Plus benutzen, müssen Sie zuerst THELP und danach SideKick laden.
  1508.  
  1509. Damit Sie THELP von jeder anderen Anwendung aus aufrufen können, müssen
  1510. Sie es in den RAM-Speicher laden. Geben Sie dazu THELP auf der DOS-Ebene
  1511. ein, bevor Sie eine andere Anwendung aufrufen. Sie müssen diesen Schritt
  1512. nur einmal nach dem Booten ausführen.
  1513.  
  1514. Sobald Sie in einer anderen Anwendung sind, können Sie THELP jeder-
  1515. zeit aktivieren, indem Sie den Cursor auf die Funktion setzen, über
  1516. die Sie eine Information möchten, danach drücken Sie die THELP-Taste.
  1517. THELP ist per Vorgabe der Taste 5 des numerischen Tastaturblocks
  1518. (scan code 4ch, shift state 00h) zugeordnet.
  1519.  
  1520. Hinweis: Wenn Sie THELP auf einem ATT6300 benutzen, müssen Sie mit dem
  1521. Parameter /L25 arbeiten, wie in Abschnitt "Zusammenfassung der THELP
  1522. Kommandozeilen-Parameter" in diesem Kapitel und in der Datei THELP.DOC
  1523. beschrieben.
  1524.  
  1525.  
  1526. Die THELP-Tasten
  1527.  
  1528. Mit den folgenden Tasten bewegen Sie den Cursor im Hilfe-Bildschirm,
  1529. den THELP auf Ihren Bildschirm ausgibt:
  1530.  
  1531. Taste      Beschreibung
  1532. ======================================================================
  1533.  
  1534. Auf Ab          Bewegt die Hervorhebung von Schlüsselwort zu Schlüssel-
  1535. Rechts Links    wort innerhalb des aktuellen Hilfe-Bildschirms.
  1536.  
  1537. PgUp/PgDn       Zeigt den nächsten bzw. vorigen Bildschirm an, sofern
  1538.                 zusätzliche Bildschirmseiten vorhanden sind.
  1539.  
  1540. Enter           Zeigt zusätzliche Hilfeinformationen zum hervorgehobe-
  1541.                 nen Schlüsselwort des aktuellen Hilfe-Bildschirms an.
  1542.  
  1543. Esc             Verläßt den Hilfe-Bildschirm.
  1544.  
  1545. F1              Aktiviert den Hilfeindex. Wenn Sie bei angezeigtem
  1546.                 Hilfe-Bildschirm F1 drücken, erscheint der Hilfeindex.
  1547.  
  1548. Alt-F1          Wenn Sie Alt-F1 wiederholt drücken, können Sie
  1549.                 die letzten 20 Bildschirmanzeigen in umgekehrter
  1550.                 Reihenfolge sehen.
  1551.  
  1552. Ctrl-F1         Läßt den Hilfe-Bildschirm mit den Befehlstasten von
  1553.                 THELP erscheinen.
  1554.  
  1555. F               Damit können Sie TCHELP.TCH durch eine neue Hilfedatei
  1556.                 ersetzen. Wenn Sie die F- Taste drücken, erscheint ein
  1557.                 Dateneingabefeld, in dem Sie neue Hilfedateien
  1558.                 angeben können. Geben Sie den vollständigen Pfad-
  1559.                 namen der neuen Hilfedatei an, und drücken Sie ENTER.
  1560.                 Wenn die neu eingegebene Hilfedatei nicht existiert
  1561.                 oder ein ungültiges Format hat, ertönt zweimal ein
  1562.                 Signal, und THELP benutzt weiter die ursprüngliche
  1563.                 Datei.
  1564.  
  1565. J               Springt zur angegebenen Seite der Hilfedatei.
  1566.                 Es erscheint ein Dateneingabefeld, in das Sie die
  1567.                 Nummer einer beliebigen Seite (von 1 bis 9999) der
  1568.                 Hilfedatei eingeben können. Die einzige Editier-
  1569.                 Taste, die Sie im Dateneingabefeld verwenden können,
  1570.                 ist die Backspace-Taste. Mit Esc heben Sie Ihre Wahl
  1571.                 auf. Mit Enter bzw. der Eingabe von vier Ziffern
  1572.                 führen Sie den Sprung zur angegebenen Seite aus.
  1573.  
  1574.                 Hinweis: THELP zeigt immer die interne Seitenzahl am
  1575.                 oberen Rand des Hilfe-Bildschirms an. Sie werden bald
  1576.                 die Seitenzahlen jedes einzelnen Bildschirms auswendig
  1577.                 kennen, so daß Sie sie mit dem J-Befehl aufrufen
  1578.                 können.
  1579.  
  1580. K               Durchsucht die Hilfedatei nach bestimmten
  1581.                 Schlüsselwörtern. Nach dem Drücken der K-Taste
  1582.                 erscheint ein Eingabefeld, in das Sie ein
  1583.                 Schlüsselwort (bis zu 40 Zeichen) eingeben können. Mit
  1584.                 ENTER veranlassen Sie THELP, die Hilfedatei nach dem
  1585.                 entsprechenden Begriff zu durchsuchen. Wird in der
  1586.                 aktuellen Hilfedatei das Schlüsselwort nicht
  1587.                 gefunden, ertönt zweimal ein Signal, und THELP kehrt
  1588.                 zum vorherigen Hilfe-Bildschirm zurück.
  1589.  
  1590. I               Kopiert das aktuell hervorgehobene Schlüsselwort vom
  1591.                 Hilfe-Bildschirm in Ihre aktuelle Anwendung. Danach
  1592.                 verschwindet der Hilfe-Bildschirm.
  1593.  
  1594. P               Kopiert die ganze Seite des Hilfe-Bildschirms (wie
  1595.                 sie im Hilfe-Fenster erscheint) in Ihre aktuelle
  1596.                 Anwendung. Danach verschwindet der Hilfe-Bildschirm.
  1597.                 Mit Ctrl-C bzw. Ctrl-Break können Sie den Vorgang un-
  1598.                 terbrechen.
  1599.  
  1600. S               Speichert den aktuellen Hilfe-Bildschirm in eine Datei
  1601.                 (THELP.SAV). Drücken Sie S immer dann, wenn Sie die
  1602.                 aktuelle Hilfe-Bildschirmseite in der Datei
  1603.                 THELP.SAV im aktuellen Directory zu speichern. Wenn
  1604.                 die Datei bereits existiert, wird die neue Hilfeinfor-
  1605.                 mation am Ende angehängt.
  1606.  
  1607. Befehlstaste    Wenn Sie THELP mit einem zweiten Monitor laufen lassen
  1608.                 und die Befehlstasten bzw. Tastenkombination
  1609.                 drücken, um THELP zu aktivieren, wird die aktuelle
  1610.                 Hilfesitzung beendet, der aktuelle Hilfe-Bildschirm
  1611.                 bleibt jedoch auf dem zweiten (monochrom) Monitor.
  1612.                 THELP ist per Vorgabe der Taste 5 auf dem numerischen
  1613.                 Tastenblock zugeordnet.
  1614.  
  1615.  
  1616. Zusammenfassung der Kommandozeilen-Parameter von THELP
  1617.  
  1618. Die Syntax zum Laden von THELP ist:
  1619.  
  1620.    THELP Parameter
  1621.  
  1622. Wenn Sie mehr als einen Parameter verwenden, müssen diese durch
  1623. Leerzeichen voneinander getrennt sein.
  1624.  
  1625. Parameter    Beschreibung
  1626. =====================================================================
  1627.  
  1628.    /B        BIOS bei Video-Anzeige verwenden
  1629.  
  1630.    /C#xx     Wahl der Farbe:
  1631.                 # = Nummer des Elements
  1632.                 xx = hexadezimale Farbwerte
  1633.  
  1634.    /Dname    Vollständige Pfadangabe bei Disk-Swapping (impliziert /S1)
  1635.  
  1636.    /Fname    Vollständige Pfad- und Dateinamenangabe bei der Hilfedatei
  1637.  
  1638.    /H, /?,?  Hilfe-Bildschirm anzeigen
  1639.  
  1640.    /Kxxyy    Befehlstaste ändern:
  1641.                 xx = shift state(hex)
  1642.                 yy = scan code(hex)
  1643.  
  1644.     Lxx      Anzahl von Bildschirmzeilen ändern:
  1645.                 xx = 25,43,50
  1646.  
  1647.    /M+, /M-  Hilfetext ausgeben:
  1648.                 auf monochromem Bildschirm (+)
  1649.                 auf Standard-Bildschirm (-)
  1650.  
  1651. Die Vorgabe für die Einfügegeschwindigkeit ist 'schnell'. Sie müssen
  1652. ausprobieren, ob dies für Ihren Editor günstig ist. Bevor Sie die Einfügen-
  1653. funktion verwenden, müssen Sie 'autoindent' in der integrierten Entwick-
  1654. lungsumgebung auf aus setzen.
  1655.  
  1656.    /Px        Einfügegeschwindigkeit:
  1657.                  0 = langsam
  1658.                  1 = mittel
  1659.                  2 = schnell (Standard)
  1660.                  2 = schnell (Standard)
  1661.  
  1662.    /R         Parameterübergabe an das residente THELP
  1663.  
  1664.    /Sx        Standardvorgabe für den Swapping-Modus:
  1665.                  1 = Festplatte/Diskette verwenden
  1666.                  2 = EMS verwenden
  1667.                  3 = kein Swapping
  1668.  
  1669.    /U        Entfernen von THELP aus dem Speicher
  1670.  
  1671.    /W        Übergibt Parameter an THELP.COM und beendet das Programm
  1672.  
  1673.  
  1674.  
  1675. /B (BIOS bei Video-Anzeige benutzen)
  1676.  
  1677. Wenn Sie diesen Parameter setzen, arbeitet THELP bei allen Schreib-
  1678. und Leseoperationen auf bzw. vom Bildschirm mit den Interrupt 10h
  1679. BIOS Aufrufen. Normalerweise schreibt THELP direkt in den Video-
  1680. (RAM)-Speicher.
  1681. Diese Option negiert den Effekt des Schalters /M ; der zweite
  1682. Monitor wird nicht benutzt, wenn /B angeschaltet ist. Die Option
  1683. wird mit /B+ aktiviert (Standardvorgabe), mit /B- deakaktiviert.
  1684.  
  1685.  
  1686. /C#xx (Farbwahl)
  1687.  
  1688. Mit dieser Option können Sie die Vorder- und Hintergrundfarben der
  1689. verschiedenen Elemente in einem Hilfe-Bildschirm anpassen. Der
  1690. Option /@;C folgt die Nummer des Elements, das Sie anpassen wollen
  1691. und die hexadezimalen Farbwerte für den entsprechenden Vorder-
  1692. und Hintergrund.
  1693. Es gibt acht mögliche Elemente, für welche Sie die Vorder- und
  1694. Hintergrundfarben ändern können. Sie sind wie folgt numeriert:
  1695.  
  1696.    Nummer      Element
  1697. ==========================================================================
  1698.  
  1699.       1        Farbe - Normaltext
  1700.       2        Schwarz-weiß - Normaltext
  1701.       3        Farbe - mögl. Referenzseiten (Meldezeile am oberen/unteren
  1702.                Bildschirmrand)
  1703.       4        Schwarz-weiß - mögl. Referenzseiten (Meldezeile am
  1704.                         oberen/unteren Bildschirmrand)
  1705.       5        Farbe - Bildschirmrand
  1706.       6        Schwarz-weiß - Bildschirmrand
  1707.       7        Farbe - aktueller Referenzabschnitt
  1708.       8        Schwarz-weiß - aktueller Referenzabschnitt
  1709.  
  1710. Sie können eines oder alle dieser Elemente in der Kommandozeile
  1711. spezifizieren.
  1712.  
  1713. Die Farbwerte für die vorgegebene IBM-kompatible Farbanzeige sind
  1714. folgende:
  1715.  
  1716.    Erste Ziffer (Hintergrund)        Zweite Ziffer (Vordergrund)
  1717. ==========================================================================
  1718.  
  1719.       0        Schwarz                     0        Schwarz
  1720.       1        Blau                        1        Blau
  1721.       2        Grün                        2        Grün
  1722.       3        Cyan                        3        Cyan
  1723.       4        Rot                         4        Rot
  1724.       5        Magenta                     5        Magenta
  1725.       6        Braun                       6        Braun
  1726.       7        Grau                        7        Grau
  1727.       8        Intensives Schwarz
  1728.       ODER- Verknüpfung es Farbenwerts     9        Intensives Blau
  1729.       mit Hex 80 verursacht eine blin-     A        Intensives Grün
  1730.       kende Farbe, soweit 'Blinken'        B        Intensives Cyan
  1731.       nicht deaktiviert wurde.             C        Intensives Rot
  1732.                                            D        Intensives Magenta
  1733.                                            E        Intensives Braun (Gelb)
  1734.                                            F        Intensives Grau (Weiß)
  1735.  
  1736. Bei schwarz-weiß Bildschirmen können die Attribut-Werte stärker
  1737. voneinander abweichen, so daß Sie damit herumexperimentieren müssen.
  1738. Beachten Sie, daß die Attribute für schwarz-weiß Bildschirme nur
  1739. in zwei Fällen Anwendung finden: Wenn der aktuelle Videomodus 7
  1740. verwendet oder Monochrom-Anzeige erzwungen wird (siehe "Der Parameter /M").
  1741.  
  1742.  
  1743. /Dname (Vollständige Pfadangabe bei Disk-Swapping)
  1744.  
  1745. Verwenden Sie diese Option, um anzugeben, wo THELP Swapdateien plazieren
  1746. soll, wenn sie auf Platte ausgelagert werden. Es wird davon ausgegangen,
  1747. daß der Schalter /S auf 1 gesetzt ist (d.h. Swapping auf Platte). Ein
  1748. vollständiger Pfad sollte angegeben werden, jedoch ist ein führender
  1749. Backslash (\) nicht erforderlich. Wenn der Parameter /D nicht angegeben
  1750. ist, werden unter DOS 3.x die Swapdateien im Directory von THELP.COM
  1751. plaziert. Unter DOS 2.x stehen sie standardmäßig in C:\.
  1752.  
  1753. Mit dieser Option wird außerdem ein Flag gesetzt, das das Swappen auf
  1754. Platte forciert, ansonsten würde zuerst nach EMS gesucht.
  1755.  
  1756.  
  1757. /Fname (Vollständige Pfad- und Dateinamenangabe bei der Hilfedatei)
  1758.  
  1759. Nach dem Parameter /F sollte der vollständige Name der Hilfedatei,
  1760. d.h. mit Laufwerk, Pfad und Directory angegeben werden:
  1761.  
  1762.    THELP /FC:\TP\TURBO.HLP
  1763.    THELP /FC:\TURBOC\TCHELP.TCH
  1764.  
  1765. Standardmäßig sucht THELP im aktuellen Laufwerk und Directory nach der
  1766. Hilfedatei.
  1767.  
  1768.  
  1769. /H, /?, and ? (Hilfe-Bildschirm anzeigen)
  1770.  
  1771. Jede dieser Optionen bringt eine Zusammenfassung der Kommandozeilen-
  1772. Parameter von THELP auf den Bildschirm.
  1773.  
  1774.  
  1775. /Kxxyy (Befehlstaste neu zuweisen)
  1776.  
  1777. Mit dieser Option weisen Sie einer bestimmten Taste eine Funktion
  1778. zu. Drücken Sie dazu zuerst die Shift-Taste in Kombination mit
  1779. einer Taste Ihrer Wahl. Es kann jede beliebige Taste in Kombi-
  1780. nation mit der Shift-Taste verwendet werden. Es folgt eine Auflistung
  1781. der gebräuchlisten Tastenkombinationen:
  1782.  
  1783.    Shift-Tasten (können mit ODER verbunden werden)
  1784.  
  1785.                 rechte Shift- Taste        01h
  1786.                 linke Shift-Taste          02h
  1787.                 Ctrl                       04h
  1788.                 Alt                        08h
  1789.  
  1790.    Scan codes:
  1791.  
  1792.    A        1eh        N        31h        0        0bh        F1        3bh
  1793.    B        30h        O        18h        1        02h        F2        3ch
  1794.    C        2eh        P        19h        2        03h        F3        3dh
  1795.    D        20h        Q        10h        3        04h        F4        3eh
  1796.    E        12h        R        13h        4        05h        F5        3fh
  1797.    F        21h        S        1fh        5        06h        F6        40h
  1798.    G        22h        T        14h        6        07h        F7        41h
  1799.    H        23h        U        16h        7        08h        F8        42h
  1800.    I        17h        V        2fh        8        09h        F9        43h
  1801.    J        24h        W        11h        9        0ah        F10        44h
  1802.    K        25h        X        2dh
  1803.    L        26h        Y        15h
  1804.    M        32h        Z        2ch
  1805.  
  1806.    Nur bei neueren Tastaturen (funktioniert nicht mit allen Computern
  1807.    bzw. Tastaturen):
  1808.  
  1809.    F11        57h
  1810.    F12        58h
  1811.  
  1812.  
  1813. /Lxx (Anzahl von Bildschirmzeilen)
  1814.  
  1815. Mit dieser Option können Sie die Anzahl von Zeilen angeben, die bei der
  1816. Ausgabe erscheinen sollen. (für xx geben Sie 25, 43 oder 50 ein). Dies
  1817. ist manchmal erforderlich, da bei einigen Videoadaptern die Anzahl von
  1818. Bildschirmzeilen nicht im selben BIOS Datenbereich gespeichert werden,
  1819. wie für den IBM PC definiert. Durch diese Option verwendet THELP
  1820. den angegebenen Wert, anstelle der von BIOS ausgegebenen Zahl.
  1821.  
  1822.  
  1823. /M+ and /M- (Hilfetext anzeigen)
  1824.  
  1825. Benutzer eines Systems mit zwei Bildschirmen, können diese Option
  1826. verwenden, um THELP anzuweisen, den zweiten (schwarz-weiß) Bildschirm
  1827. anstatt den Farbbildschirm zu benutzen. Die Ausgabe auf einem schwarz-
  1828. weiß Bildschirm wird mit /M+ aktiviert (die Standardvorgabe) und mit
  1829. /M- deaktiviert.
  1830.  
  1831. Beachten Sie, daß /M mit /B nicht kompatibel ist.
  1832.  
  1833. /Px (Einfügegeschwindigkeit)
  1834.  
  1835. Mit dieser Option läßt sich die Geschwindigkeit angeben, mit der
  1836. die Zeichen in den Tastaturpuffer eingefügt werden (0 steht für
  1837. langsam, 1 für mittel und 2 für schnell).
  1838.  
  1839. Bei einigen Editoren können Zeichen nicht so schnell in den
  1840. Tastaturpuffer eingefügt werden wie mit THELP. Wenn Sie jedoch
  1841. die entsprechende Einfügegeschwindigkeit angeben, können Sie
  1842. praktisch jede Editorkonfiguration verwenden. Bei Wahl der Geschwin-
  1843. digkeit 'schnell' werden so viele Zeichen wie möglich pro Zeitzähl-
  1844. einheit eingefügt,; 'mittel' fügt bis zu vier Zeichen pro Zähleinheit
  1845. ein; und 'langsam' fügt nur dann ein Zeichen in den Puffer ein,
  1846. wenn dieser leer ist.
  1847.  
  1848. /R (Parameterübergabe an das residente THELP)
  1849.  
  1850. Die Option /R übergibt Parameter (wie beispielsweise neue Farbwerte
  1851. oder Befehlstasten) an den residenten Teil von THELP. Das gilt für alle
  1852. Kommandozeilen-Parameter von THELP, außer für den Swap-Modus, der
  1853. nicht modifiziert werden kann, sobald er von THELP initialisiert wurde.
  1854.  
  1855. In Kombination mit diesen Optionen können Sie eine Batchdatei
  1856. erzeugen, die die Konfiguration von THELP ändert, sobald Sie
  1857. den Editor wechseln, z. B.:
  1858.  
  1859.    THELP /M /P0 /FC:\TP\TURBO.HLP /R}
  1860.  
  1861. Dieser Befehl weist THELP an, einen schwarz-weiß Bildschirm, die
  1862. Einfügegeschwindigkeit 'langsam' und die Hilfedatei von Turbo Pascal
  1863. zu verwenden. Die Optionen werden nicht auf Platte gespeichert.
  1864.  
  1865.    THELP /P2 /FC:\TC\TCHELP.TCH /R}
  1866.  
  1867. Mit diesem Befehl wird THELP angewiesen, den Standardbildschirm,
  1868. die Einfügegeschwindigkei 'schnell' und die Hilfedatei von Turbo C++
  1869. zu verwenden. Die Optionen werden nicht auf Platte gespeichert.
  1870.  
  1871.  
  1872. /Sx (Standardvorgabe des Swapping-Modus)
  1873.  
  1874. Mit dieser Option können Sie bestimmen, ob THELP mit der Swap-
  1875. datei arbeiten und wo die Swapdatei stehen soll. (1 steht für
  1876. Platte, 2 für EMS und 3 für keine Swapdatei)
  1877.  
  1878. Wenn Sie den Parameter /S nicht setzen, testet THELP zuerst, ob
  1879. das System über einen EMS-Speicher verfügt. Verfügt es über eine
  1880. Speichererweiterung und kann genug Speicherkapazität zugewiesen
  1881. werden, greift THELP auf EMS zu. Ist EMS nicht verfügbar, greift THELP
  1882. auf die Platte zu. Lesen Sie im Abschnitt "Der Parameter /D" nach,
  1883. wohin die Swapdatei geschrieben wird, wenn Disk-Swapping verwendet wird.
  1884.  
  1885.  
  1886. /U (THELP aus dem Speicher entfernen)
  1887.  
  1888. Diese Option entfernt THELP aus dem Speicher. Wenn andere Anwen-
  1889. dungen nach THELP geladen wurden, müssen diese vor THELP aus dem
  1890. Speicher entfernt werden.
  1891.  
  1892.  
  1893. /W (übergibt Parameter an THELP.COM und beendet das Programm)
  1894.  
  1895. Mit dem Parameter /W können Sie eine neue THELP-Version erstellen,
  1896. die Ihre Optionen als Standardoptionen verwendet. Alle Optionen,
  1897. außer dem Parameter /R, können spezifiziert und als permanent ab-
  1898. gespeichert werden.
  1899.  
  1900.  
  1901. ========================================================================
  1902.  
  1903. TRIGRAPH: Programm zur Zeichenkonvertierung
  1904. -------------------------------------------
  1905.  
  1906. Trigraphs sind Sequenzen von drei Zeichen, die bestimmte Zeichen
  1907. der Programmiersprache C ersetzen, die auf einigen Tastaturen
  1908. nicht vorhanden sind. Wenn Trigraphs vom Compiler selbst über-
  1909. setzt würden, würde die Compilierung verhältnismäßig lange dauern,
  1910. daher verfügt Turbo C++ zur Handhabung von Trigraph-Sequenzen über
  1911. den Filter TRIGRAPH.EXE. Dieses Programm wird folgendermaßen
  1912. aktiviert:
  1913.  
  1914.    TRIGRAPH [-u] Dateiname [Dateiname...]
  1915.  
  1916. Die folgende Tabelle zeigt die Trigraph-Sequenzen, die
  1917. TRIGRAPH.EXE erkennt:
  1918.  
  1919.      Trigraph   Zeichen
  1920. ================================
  1921.  
  1922.         ??=        #
  1923.         ??(        [
  1924.         ??/        \
  1925.         ??)        ]
  1926.         ??'        ^
  1927.         ??<        {
  1928.         ??!        |
  1929.         ??>        }
  1930.         ??-        ~
  1931.  
  1932. TRIGRAPH.EXE arbeitet auf zwei verschiedene Arten: Es konvertiert
  1933. alle Drei-Zeichen-Darstellungen in die entsprechende Ein-Zeichen-
  1934. Darstellungen und umgekehrt. Normalerweise konvertiert TRIGRAPH.EXE
  1935. eine Drei-Zeichen-Darstellung in ein einzelnes Zeichen. Sie können
  1936. mit Hilfe des Kommandozeilen-Parameters -u (UNDO), der vor allen
  1937. Dateinamen stehen muß, die inverse Konvertierung spezifizieren.
  1938.  
  1939. TRIGRAPH.EXE arbeitet mit beliebig vielen Dateibezeichnern, inklusive
  1940. Jokern. Für jede angegebene Datei wird ein Backup mit dem Namen der
  1941. Originaldatei und der Extension .BAK erstellt und eine neue Datei mit
  1942. dem Namen der Originaldatei und den entsprechenden Konvertierungen.
  1943. Zum Beispiel werden mit
  1944.  
  1945.    trigraph test.c test1.c
  1946.  
  1947. alle Drei-Zeichen-Darstellungen aus den beiden Dateien TEST.C und
  1948. TEST1.C entfernt und die Backup-Dateien TEST.BAK und TEST1.BAK erzeugt.
  1949.  
  1950. In einem weiteren Beispiel wird mit dem folgenden Befehl die Drei-
  1951. Zeichen-Darstellung in alle Dateien mit der Extension .C eingefügt und
  1952. von allen Dateien Backups mit der Extension .BAK erzeugt.
  1953.  
  1954.    trigraph -u *.c
  1955.  
  1956.  
  1957. ========================================================================
  1958.  
  1959. PRJCNVT: Konvertierung von Projektdateien
  1960. -----------------------------------------
  1961.  
  1962. PRJCNVT Konvertiert Projektdateien früherer Turbo C Versionen
  1963. (1.0, 1.5 oder 2.0) in das Turbo C++ Format.
  1964.  
  1965.   Syntax:
  1966.  
  1967.       PRJCNVT Eingabedatei[.prj] [Ausgabedatei[.prj]]
  1968.          oder
  1969.       PRJCNVT Eingabedatei[.tc]  [Ausgabedatei[.prj]]
  1970.  
  1971. Eine Konfigurationsdatei, welche Sie als Eingabedatei angeben, muß
  1972. eine entsprechende Projektdatei definieren. Die Compileroptionen sowie
  1973. die Information über die Abhängigkeiten zwischen den Modulen des
  1974. Projekts werden in die Turbo C++ Projektdatei übernommen.
  1975.  
  1976. Verwenden Sie eine Projektdatei als Eingabe, so wird lediglich die
  1977. Information über die Abhängigkeiten zwischen den Modulen in die Turbo
  1978. C++ Projektdatei übernommen. Alle Compileroptionen bleiben jedoch
  1979. unverändert.
  1980.  
  1981. Wenn Sie keine Extension angeben, gilt .TC als Voreinstellung. Falls
  1982. PRJCVNT keine .TC Datei finden kann, sucht es nach einer .PRJ Datei.
  1983.  
  1984. Voreinstellung für die Ausgabedatei ist der Name der Eingabedatei mit
  1985. der Extension .PRJ. Aus STARS.TC zum Beispiel wird STARS.PRJ. Wenn die
  1986. Namen der Ein- bzw. Ausgabedatei gleich sind, wird die Eingabedatei
  1987. umbenannt in .BAK.
  1988.  
  1989. ========================================================================
  1990.