home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / turbo4 / readme. < prev    next >
Text File  |  1987-12-08  |  23KB  |  493 lines

  1.                 TURBO PASCAL 4.0 - ZUSATZINFORMATIONEN
  2.                   ----------------------------------
  3.  
  4.   Diese Datei enthält zusätzliche Informationen und Korrekturen in
  5.   letzter Minute.
  6.  
  7.  
  8. INHALT
  9. ------
  10.   1. Hilfe bei Problemen
  11.   2. Dateien auf den Originaldisketten
  12.   3. Korrekturen und Erweiterungen des Handbuchs
  13.  
  14.  
  15.  
  16. 1. HILFE BEI PROBLEMEN
  17. ----------------------
  18.   Bei Problemen bitten wir Sie, zuerst das Handbuch und diese Datei
  19.   sorgfältig durchzulesen. Wenn danach noch Fragen offen sind, können
  20.   Sie sich an eine der folgenden Stellen wenden:
  21.  
  22.     1)  Ihren Softwarehändler oder einem Userclub
  23.  
  24.     2)  Schriftlich an die technische Beratung der
  25.  
  26.             Heimsoeth Software GmbH & Co KG
  27.             Fraunhoferstr. 13
  28.             8000 München 5
  29.  
  30.     3)  In dringenden Fällen: Die Heimsoeth Software Hotline
  31.               Montag - Freitag 14.00 - 17.00
  32.               Tel: 089/2609467
  33.  
  34.   Sie sollten auf jeden Fall die folgenden Dinge parat haben:
  35.  
  36.     1) Die deutschen Handbücher;
  37.     2) Die Versionsnummer von Turbo Pascal. Sie wird vom der Kommando-
  38.        zeilen-Version (TPC.EXE) bei jedem Aufruf ausgegeben, in der
  39.        integrierten Entwicklungsumgebung bringt der Tastenbefehl
  40.        ALT-F10 ein entsprechendes Fenster auf den Bildschirm.
  41.     3) Produktnamen, Modellbezeichnung Ihres Computers und eventueller
  42.        Zusatz-Hardware (speziell: Grafik-Karten).
  43.     4) Die Versionsnummer von DOS, die sich mit den DOS-Befehl VER
  44.        ermitteln läßt.
  45.  
  46.  
  47. 2. DATEIEN AUF DEN ORIGINALDISKETTEN
  48. ------------------------------------
  49.  
  50.   Die Beschreibung in Kapitel 1 des Benutzerhandbuchs ist bis auf drei
  51.   Punkte korrekt:
  52.  
  53.   - die Diskette II enthält zusätzlich die Datei FRAGEN mit rund 40
  54.     allgemeinen Fragen und Antworten zu Turbo Pascal.
  55.   - das Programm TINST.EXE befindet sich nicht auf der Diskette I,
  56.     sondern auf der Diskette II;
  57.   - die Datei CTOPAS.BAT ist nicht im Programmpaket enthalten. Bitte
  58.     folgen Sie den Beschreibungen in den Dateien CPASDEMO.PAS und
  59.     CPASDEMO.C.
  60.  
  61.   Auf Ihren Originaldisketten finden Sie folgende Dateien:
  62.  
  63.   Diskette 1: Compiler und integrierte Entwicklungsumgebung
  64.       
  65.        TURBO.EXE    die integrierte Entwicklungsumgebung
  66.        TURBO.TPL    die Laufzeitbibliothek  von Turbo Pascal. Sie enthält
  67.                     die Standard-Units  System, Dos, Crt, Printer, Turbo3
  68.                     und Graph3
  69.        TURBO.HLP    Texte der eingebauten Hilfestellung
  70.        TPC.EXE      Kommandozeilen-Version von Turbo Pascal
  71.        README.COM   ein Programm zum Lesen der Datei README
  72.        README       Tips, Hinweise und Errata
  73.  
  74.   Diskette 2: Dienst- und Demonstrationsprogramme
  75.   
  76.        TINST.EXE    Installationsprogramm für Turbo Pascal
  77.        UPGRADE.EXE  konvertiert Quelltexte  der Version 3.0
  78.        UPGRADE.DTA  zu UPGRADE gehörige Daten
  79.        TPMAP.EXE    erzeugt Symboltabellen  zur symbolischen  Fehlersuche
  80.                     mit einem Debugger wie Periscope oder SYMDEB
  81.        TPUMOVER.EXE zur Verwaltung von Unit-Bibliotheken
  82.        TPCONFIG.EXE ein Konfigurationsdateien-Konvertierer
  83.        BINOBJ.EXE   konvertiert Daten in .OBJ-Dateien und ermöglicht das
  84.                     direkte Einbinden von Grafik-Treibern
  85.        BINOBJ.DOC   die Dokumentation zu BINOBJ.EXE
  86.        MAKE.EXE     Verwaltung für große Programmierprojekte
  87.        TOUCH.COM    verändert Datum und Uhrzeit von Dateien
  88.        GREP.COM     durchsucht Quelltext-Dateien
  89.        CRTDEMO.PAS  Demonstration der Möglichkeiten des Units Crt
  90.        GR3DEMO.PAS  Demonstration der (3.0-)Turtlegrafik in der
  91.                     Version 4.0
  92.        QSORT.PAS    Implementation des QuickSort-Algorithmus 
  93.        LISTER.PAS   gibt Programmlistings auf einen  Drucker aus und 
  94.                     benutzt dazu das Unit Printer
  95.        HILB.PAS     berechnet die Hilbert-Matrix mit Real-Variablen 
  96.        FIB8087.PAS  Demonstration eines rekursiven Programms ohne
  97.                     Überlauf des 8087-Rechenstacks 
  98.        PROCPTR.PAS  demonstriert Zeiger auf Routinen und inline-Code 
  99.        EMS.PAS      zeigt die Verwendung von »Above Memory« 
  100.        AUXINOUT.PAS ein Textdatei-Gerätetreiber für serielle
  101.                     Schnittstellen 
  102.        BCDREAL.PAS  demonstriert die Konvertierung von BCD-Programmen 
  103.        BCD.PAS      ein Unit mit Konvertierungsroutinen für BCD-Zahlen 
  104.        CPASDEMO.PAS demonstriert, wie  sich mit  Turbo C  erzeugte  .OBJ-
  105.                     Dateien in ein Pascal-Programm einbinden lassen 
  106.        CPASDEMO.C   das C-Programm zu CPASDEMO.PAS 
  107.        CTOPAS.TC    Konfigurationsdatei für Turbo C zur Compilierung von
  108.                     CPASDEMO.C (integrierte Entwicklungsumgebung) 
  109.        TURBO.CFG    Konfigurationsdatei für Turbo C zur Compilierung von
  110.                     CPASDEMO.C (Kommandozeilen-Version) 
  111.        SYSTEM.DOC   Listing des Interface-Teils des Units System 
  112.        DOS.DOC      Listing des Interface-Teils des Units Dos 
  113.        CRT.DOC      Listing des Interface-Teils des Units Crt
  114.        PRINTER.DOC  Listing des Interface-Teils des Units Printer
  115.        GRAPH3.DOC   Listing des Interface-Teils des Units Graph3
  116.        TURBO3.DOC   Listing des Interface-Teils des Units Turbo3
  117.  
  118.   Diskette 3: Grafik und das Programm "MicroCalc"
  119.   
  120.        GRAPH.DOC    Listing des Interface-Teils des Units Graph - enthält
  121.                     einige wichtige Änderungen und Erweiterungen gegen-
  122.                     über dem Referenzteil des Handbuchs
  123.        GRAPH.TPU    das Unit Graph in einer eigenen (compilierten) Datei
  124.        ATT.BGI      Grafik-Gerätetreiber für den AT&T 6300
  125.        CGA.BGI      Grafik-Gerätetreiber für CGA- und MCGA-Karten
  126.        EGAVGA.BGI   Grafik-Gerätetreiber für EGA und VGA
  127.        HERC.BGI     Grafik-Gerätetreiber für Hercules-Karten
  128.        PC3270.BGI   Grafik-Gerätetreiber für den PC3720
  129.        GOTH.CHR     grafischer Vektor-Zeichensatz (Schriftart »Gothic»)
  130.        LITT.CHR     grafischer Vektor-Zeichensatz mit kleinen Zeichen
  131.        SANS.CHR     grafischer Vektor-Zeichensatz  (Schriftart »SansSerif«)
  132.        TRIP.CHR     grafischer Vektor-Zeichensatz (Schriftart »Triplex«)
  133.        GRDEMO.PAS   demonstriert einen Teil der Möglichkeiten von Graph
  134.        ARTY4.PAS    noch ein Demonstrationsprogramm für Graph
  135.        GRLINK.PAS   zeigt, wie man Treiber und Vektor-Zeichensätze in
  136.                     eine .EXE-Datei einbinden kann
  137.        DRIVERS.PAS  Unit mit Grafik-Treibern für GRLINK.PAS
  138.        FONTS.PAS    Zeichensätze für GRLINK.PAS
  139.        GRLINK.MAK   MAKE-Datei zur Compilierung von GRLINK.EXE
  140.        MCALC.PAS    das Tabellenkalkulationsprogramm MicroCalc
  141.        MC*.PAS      diverse Units, die zu MicroCalc gehören
  142.        MCMVSMEM.ASM direkte Ansteuerung des Bildspeichers für MicroCalc
  143.        MCMVSMEM.OBJ die dazugehörige .OBJ-Datei
  144.        UNPACK.EXE   Programm zum »auspacken« von GREXAMPL.ARC
  145.        GREXAMPL.ARC über fünfzig »gepackte« Grafik-Beispiele
  146.         
  147.           FILELIST - eine Liste der Beispielprogramme in GREXAMPL.ARC
  148.                      und der entsprechenden Prozedur- /Funktionsnamen
  149.  
  150.           ARC      PAS  - Arc Beispielprogramm
  151.           ARCCOORD PAS  - GetArcCoords Beispielprogramm
  152.           ASPECT   PAS  - GetAspectRatio Beispielprogramm
  153.           BAR      PAS  - Bar Beispielprogramm
  154.           BAR3D    PAS  - Bar3D Beispielprogramm
  155.           CIRCLE   PAS  - Circle Beispielprogramm
  156.           CLOSEGR  PAS  - CloseGraph Beispielprogramm
  157.           CLRDEV   PAS  - ClearDevice Beispielprogramm
  158.           CLRVP    PAS  - ClearViewPort Beispielprogramm
  159.           DETECT   PAS  - DetectGraph Beispielprogramm
  160.           DRPOLY   PAS  - DrawPoly Beispielprogramm
  161.           ELLIPSE  PAS  - Ellipse Beispielprogramm
  162.           FILLPOLY PAS  - FillPoly Beispielprogramm
  163.           FLOOD    PAS  - FloodFill Beispielprogramm
  164.           GETBKCOL PAS  - GetBkColor Beispielprogramm
  165.           GETCOL   PAS  - GetColor Beispielprogramm
  166.           GETFILLS PAS  - GetFillSettings Beispielprogramm
  167.           GETGRMD  PAS  - GetGraphMode Beispielprogramm
  168.           GETLNS   PAS  - GetLineSettings Beispielprogramm
  169.           GETMAXX  PAS  - GetMaxX Beispielprogramm
  170.           GETMAXY  PAS  - GetMaxY Beispielprogramm
  171.           GETPAL   PAS  - GetPalette Beispielprogramm
  172.           GETPIX   PAS  - GetPixel Beispielprogramm
  173.           GETTXTS  PAS  - GetTxtSettings Beispielprogramm
  174.           GETVS    PAS  - GetViewSettings Beispielprogramm
  175.           GETX     PAS  - GetX Beispielprogramm
  176.           GETY     PAS  - GetY Beispielprogramm
  177.           GRERRMSG PAS  - GraphErrorMsg Beispielprogramm
  178.           GRRES    PAS  - GraphResult Beispielprogramm
  179.           IMSIZE   PAS  - ImageSize Beispielprogramm
  180.           INITGR   PAS  - InitGraph Beispielprogramm
  181.           LINE     PAS  - Line Beispielprogramm
  182.           LINEREL  PAS  - LineRel Beispielprogramm
  183.           LINETO   PAS  - LineTo Beispielprogramm
  184.           MOVEREL  PAS  - MoveRel Beispielprogramm
  185.           MOVETO   PAS  - MoveTo Beispielprogramms
  186.           OUTTXT   PAS  - OutText Beispielprogramm
  187.           OUTTXTXY PAS  - OutTextXY Beispielprogramm
  188.           PIESLICE PAS  - PieSlice Beispielprogramm
  189.           PUTIM    PAS  - PutImage Beispielprogramm
  190.           PUTPIX   PAS  - PutPixel Beispielprogramm
  191.           RECT     PAS  - Rectangle Beispielprogramm
  192.           RESCRT   PAS  - RestoreCrtMode Beispielprogramm
  193.           SETACTPG PAS  - SetActivePage Beispielprogramm
  194.           SETALLP  PAS  - SetAllPalette Beispielprogramm
  195.           SETBKCOL PAS  - SetBkColor Beispielprogramm
  196.           SETCOL   PAS  - SetColor Beispielprogramm
  197.           SETFLPAT PAS  - SetFillPattern Beispielprogramm
  198.           SETGRMOD PAS  - SetGraphMode Beispielprogramm
  199.           SETLNSTY PAS  - SetLineStyle Beispielprogramm
  200.           SETPAL   PAS  - SetPalette Beispielprogramm
  201.           SETTXTJS PAS  - SetTextJustify Beispielprogramm
  202.           SETTXTST PAS  - SetTextStyle Beispielprogramm
  203.           SETVISPG PAS  - SetVisualPage Beispielprogramm
  204.           SETVP    PAS  - SetViewPort Beispielprogramm
  205.           TXTHT    PAS  - TextHeight Beispielprogramm
  206.  
  207.  
  208. 3. KORREKTUREN UND ERWEITERUNGEN DES HANDBUCHS
  209. ----------------------------------------------
  210.  
  211. ACHTUNG: Das Unit GRAPH ist nach Drucklegung des Referenzhandbuchs
  212.          um einige Funktionen erweitert und in anderen Teilen ver-
  213.          ändert worden. Die entsprechenden Informationen finden Sie
  214.          in der Datei GRAPH.DOC auf der Diskette III.
  215.  
  216.   Kapitel 4 (Bd I, S 57), "Die fünf Integer-Typen": Erweiterung
  217.   -------------------------------------------------------------
  218.   Turbo Pascal definiert zwei Konstanten - MaxInt mit einem Wert von
  219.   32767 und MaxLongInt mit einem Wert von 2147483647.
  220.  
  221.  
  222.   Kapitel 15 (Bd II, S 43), "Umwandlung von Variablentypen": Erweiterung
  223.   ----------------------------------------------------------------------
  224.   Die Standardfunktionen Lo und Hi liefern das niederwertige bzw.
  225.   höherwertige Byte einer Word-Variablen zurück. Um das niederwertige
  226.   oder höherwertige Wort einer LongInt-Variablen zu ermitteln, kann
  227.   man eine explizite Typ-Umwandlung verwenden:
  228.  
  229.     type
  230.       WordRec = record                 { für die Typ-Umwandlung }
  231.           Low, High : Word;
  232.         end;
  233.     var
  234.       L : LongInt;
  235.     begin
  236.       L := $10000;                     { dezimal: 65536 }
  237.       Writeln(WordRec(L).Low);         { 0 }
  238.       Writeln(WordRec(L).High);        { 1 }
  239.     end.
  240.  
  241.   In ähnlicher Weise lassen sich Aufrufe der Funktionen Seg und Ofs
  242.   durch direkte Typ-Umwandlungen ersetzen (womit einige Bytes Pro-
  243.   grammcode und einige Mikrosekunden Laufzeit eingespart werden):
  244.  
  245.     type
  246.       PtrRec = record                  { für die Typ-Umwandlung }
  247.           Ofs, Seg : Word;
  248.         end;
  249.     var
  250.       P : Pointer;
  251.     begin
  252.       P := Ptr($1234, $4567);
  253.       Writeln(PtrRec(P).Ofs);          { $4567 }
  254.       Writeln(PtrRec(P).Seg);          { $1234 }
  255.     end.
  256.  
  257.   Kapitel 20 (Bd II, S 97) "Units, die andere Units voraussetzen": Erweiterung
  258.   -----------------------------------------------------------------------------
  259.   Ein Programm *kann* sämtliche direkt und indirekt vorausgesetzten
  260.   Units mit uses aufführen - tatsächlich nötig ist aber nur die Angabe
  261.   der Units, auf die es direkt zugreift. Im gezeigten Beispiel greift
  262.   "Hauptprogramm" nur auf "Unit2" direkt zu, die uses-Anweisung in
  263.   "Hauptprogramm" kann deshalb entweder als
  264.  
  265.     uses Unit1, Unit2;
  266.  
  267.   oder als
  268.  
  269.     uses Unit2;
  270.  
  271.   geschrieben werden. Im zweiten Fall stellt der Compiler selbständig
  272.   fest, daß Unit2 das Unit Unit1 voraussetzt und nimmt es in das
  273.   Programm auf.
  274.  
  275.   Kapitel 23 (Bd II, S 113), "Das Unit System": Erweiterung
  276.   ---------------------------------------------------------
  277.   Das Unit SYSTEM deklariert eine Variable namens FileMode, deren
  278.   Wert den Zugriffscode bei der Öffnung typisierter und untypisierter
  279.   Dateien mit Reset festlegt. FileMode wird beim Start des Programms
  280.   auf den Wert 2 initialisiert ("Lesen und Schreiben erlaubt"). Durch
  281.   eine direkte Zuweisung an diese Variable läßt sich der DOS-Zugriffs-
  282.   code bei folgenden Aufrufen von Reset für typisierte und untypi-
  283.   sierte Dateien festlegen. Die folgenden Werte für FileMode sind in
  284.   allen DOS-Versionen ab 2.0 definiert:
  285.  
  286.     0  nur Lesen
  287.     1  nur Schreiben
  288.     2  Lesen und Schreiben
  289.  
  290.   Die DOS-Versionen ab 3.0 erlauben zusätzliche Werte für FileMode,
  291.   über die primär die Dateiverwaltung in Netzwerken abgewickelt wird.
  292.   Das DOS-Handbuch enthält weitere Einzelheiten.
  293.  
  294.   Hinweis: Auf die Erzeugung von Dateien mit Rewrite sowie die Bear-
  295.   beitung von Textdateien hat der Wert von FileMode keinen Einfluß
  296.   (Rewrite setzt bei typisierten und untypisierten Dateien immer
  297.   "Lesen und Schreiben erlaubt").
  298.  
  299.   Kapitel 23 (Bd II, S 114), "Das Unit System": Erweiterung
  300.   ---------------------------------------------------------
  301.   Neben den angegebenen vier Interrupt-Vektoren wird zusätzlich der
  302.   Vektor für "kritische Fehler" (in einer Variablen namens SaveInt24)
  303.   gespeichert und eine eigene Behandlungsroutine gesetzt. Aus diesem
  304.   Grund lassen sich auch Fehler wie "Laufwerk nicht bereit" über
  305.   IOResult abfangen (vgl. Anhang F im Benutzerhandbuch).
  306.  
  307.   Kapitel 23 (Bd II, S 116), "Das Unit Dos": Korrektur
  308.   ----------------------------------------------------
  309.   Die vier Zeigerfelder im Record eine Textdatei-Variablen, die auf
  310.   die Routinen für "Open", "InOut", "Flush" und "Close" zeigen, heißen
  311.   nicht "Proc", sondern "Func". Die korrekte Definition von TextRec
  312.   ist:
  313.  
  314.     TextRec = record
  315.             ....
  316.         OpenFunc:  Pointer;   { nicht: "OpenProc" }
  317.         InOutFunc: Pointer;   { nicht: "InOutProc" }
  318.         FlushFunc: Pointer;             ...
  319.         CloseFunc: Pointer;             ...
  320.            ....
  321.       end;
  322.  
  323.   Das in Kapitel 25 beschriebene Unit AuxInOut ist von diesen Namens-
  324.   änderungen nicht betroffen, weil es einen eigenen Datentyp definiert.
  325.  
  326.   Kapitel 23 (Bd II, S 123), "Das Unit Crt": Korrektur
  327.   ----------------------------------------------------
  328.   Eine Konstante namens Last ist nicht definiert, stattdessen
  329.   deklariert das Unit CRT die Variable LastMode, die bei einem Aufruf
  330.   von TextMode denselben Zweck erfüllt. Zusätzlich definiert CRT eine
  331.   Konstante mit dem Namen Font8x8, mit der 43 bzw. 50 Zeilen Text auf
  332.   EGA- bzw. VGA-Karten gesetzt werden können (siehe Anmerkung zu
  333.   "TextMode" in einem der folgenden Abschnitte).
  334.  
  335.   Kapitel 24 (Bd II, S 159), "Units und der 8087": Einschränkung
  336.   --------------------------------------------------------------
  337.   Der Linker prüft nicht, ob ein Unit über den Befehl {$L} eine
  338.   .OBJ-Datei mit 8087-Code aufnimmt - Maschinenprogramme müssen
  339.   gegebenenfalls selbst prüfen, ob ein Coprozessor installiert ist.
  340.  
  341.   Kapitel 25 (Bd II, S 185) "Aufrufe als NEAR und FAR": Korrektur
  342.   ---------------------------------------------------------------
  343.   Eine Prozedur oder Funktion wird als "eingeschachtelt" bezeichnet,
  344.   wenn sie innerhalb einer anderen Prozedur oder Funktion deklariert
  345.   ist (also lokal dazu). In diesem Fall ist sichergestellt, daß sich
  346.   die aufrufende und die aufgerufene Routine immer im selben Code-
  347.   Segment befinden - deshalb nimmt der Compiler eine weitere
  348.   Optimierung vor und codiert diese Aufrufe auch dann als NEAR, wenn
  349.   der Modus {$F+} gesetzt ist.
  350.  
  351.   Beim Aufruf einer lokal deklarierten Prozedur oder Funktion erzeugt
  352.   der Compiler direkt vor dem CALL den Befehl PUSH BP, übergibt also
  353.   das BP-Register der aufrufenden Routine als zusätzlichen Parameter.
  354.   Nachdem die aufgerufene Routine ihren eigenen Stack (mit PUSH BP /
  355.   MOV BP,SP) eingerichtet hat, kann auf das BP-Register der *aufru-
  356.   fenden* Routine über [BP+4] und damit auf die lokalen Variablen
  357.   dieser übergeordneten Routine zugegriffen werden. (Wenn die auf-
  358.   rufende Routine ihrerseits eingeschachtelt ist, wird die Verbindung
  359.   zur nächsthöheren Ebene wiederum über [BP+4] hergestellt usw).
  360.  
  361.   Ein Beispiel:
  362.  
  363.   procedure A;
  364.   var IntA: Integer;
  365.     procedure B;
  366.     var IntB: Integer;
  367.       procedure C;
  368.       var IntC: Integer;
  369.       begin
  370.        inline($8B/$46/<IntC/     { MOV AX,IntC[BP]    ; AX = IntC }
  371.               $8B/$5E/$04/       { MOV BX,[BP+4]      ; BX = B's Stack }
  372.               $36/$8B/$47/<IntB/ { MOV AX,SS:IntB[BX] ; AX = IntB }
  373.               $8B/$5E/$04/       { MOV BX,[BP+4]      ; BX = B's Stack }
  374.               $36/$8B/$5F/$04/   { MOV BX,SS:[BX+4]   ; BX = A's Stack }
  375.               $36/$8B/$47/<IntA);{ MOV AX,SS:IntA[BX] ; AX = IntA }
  376.       end   {C};
  377.     begin {B}
  378.     end   {B};
  379.   begin {A}
  380.   end   {A};
  381.  
  382.   Hinweis: Verschachtelte Prozeduren und Funktionen können nicht als
  383.   external deklariert werden.
  384.  
  385.   Kapitel 25 (Bd II, S 196), "Maschinencode mit inline": Korrektur
  386.   ----------------------------------------------------------------
  387.   Die Reihenfolge der Kommentare stimmt nicht mit den Maschinen-
  388.   befehlen überein. Das korrekte Beispiel ist:
  389.  
  390.     function LongMul(X,Y : Integer) : LongInt;
  391.     inline(
  392.       $5A/            { POP DX    ; Pop X       }
  393.       $58/            { POP AX    ; Pop Y       }
  394.       $F7/$EA);       { IMUL DX   ; DX:AX = X*Y }
  395.  
  396.   Kapitel 26 (Bd II, S 260), "GetFTime": Korrektur
  397.   ------------------------------------------------
  398.   Der Parameter Time ist inkorrekt als DateTime (d.h. als Record)
  399.   deklariert. Tatsächlich erwartet GetFTime hier einen LongInt, in dem
  400.   das ermittelte Datum und die Uhrzeit im gepackten Format von DOS
  401.   gespeichert werden:
  402.  
  403.     procedure GetFTime(var F; var Time: LongInt);
  404.  
  405.   Kapitel 26 (Bd II, S 326), "RestoreCrtMode": Erweiterung
  406.   --------------------------------------------------------
  407.   Anstelle von RestoreCrtMode kann auch ein Aufruf von TextMode mit
  408.   der Variablen LastMode verwendet werden (siehe nächster Abschnitt):
  409.  
  410.     program RestoreDemo;
  411.     uses Crt;
  412.     var
  413.       OrigMode: Integer;
  414.     begin
  415.        OrigMode := LastMode;
  416.          .....
  417.        TextMode(OrigMode);  { schaltet in den Textmodus zurück }
  418.  
  419.   Kapitel 26 (Bd II, S 364), "TextMode-Prozedur": Erweiterung und Korrektur
  420.   -------------------------------------------------------------------------
  421.   Der Parameter Mode hat nicht den Typ Integer, sondern Word. Die
  422.   korrekte Deklaration lautet also:
  423.  
  424.     procedure TextMode(Mode: Word);
  425.  
  426.   Ein Aufruf von TextMode mit der (in CRT deklarierten) Variablen
  427.   LastMode setzt den Videomodus, der *vor* dem letzten Aufruf von
  428.   TextMode bzw. beim Start des Programms aktiv war.
  429.   Das Unit CRT definiert zusätzlich die Konstante Font8x8, über die
  430.   auf EGA- und VGA-Karten 43 bzw. 50 Textzeilen gesetzt werden
  431.   können. Der Aufruf
  432.  
  433.     TextMode(CO80+Font8x8)
  434.  
  435.   setzt auf EGA-Karten "80*43 Zeichen farbig", auf VGA-Karten "80*50
  436.   Zeichen farbig". Da auch dieser Modus in LastMode gespeichert wird,
  437.   schaltet der folgende Aufruf von TextMode wieder von 43 bzw. 50
  438.   Zeilen auf 25 Zeilen um, ohne den Videomodus (d.h. CO80 oder BW80)
  439.   zu verändern:
  440.  
  441.     TextMode(Lo(LastMode));
  442.  
  443.   Analog dazu kann von 25 auf 43 bzw. 50 Zeilen umgeschaltet werden:
  444.  
  445.     TextMode(Lo(LastMode) + Font8x8);
  446.  
  447.   Wenn bereits beim Start eines Turbo Pascal-Programms ein Textmodus
  448.   mit 43 oder 50 Zeilen gesetzt ist, wird der entsprechende Wert in
  449.   LastMode festgehalten und WindMax (die untere rechte Fenstergrenze)
  450.   auf den entsprechenden Wert initialisiert.
  451.  
  452.   Kapitel 26 (Bd II, S 396), "Val-Prozedur": Erweiterung
  453.   ------------------------------------------------------
  454.   Das Verhalten von Val bei Überläufen hängt vom Stand des Compiler-
  455.   Schalters {$V} (Bereichs-Prüfung) und dem Typ des übergebenen
  456.   Parameters V ab. Im Modus {$V+} erzeugt Val einen Laufzeitfehler,
  457.   wenn das Ergebnis der Interpretation nicht im zulässigen
  458.   Wertebereich von V liegt, also beispielsweise:
  459.  
  460.   Val('999999', Int_Var, code);     { würde Int_Var den
  461.                                       Wert 99999 zuordnen }
  462.  
  463.   Im Modus {$V-} hängt das Ergebnis bei Überläufen vom Typ der als V
  464.   übergebenen Variablen ab: Für Real-Typen und LongInt ist das Ergeb-
  465.   nis undefiniert, code hat einen Wert ungleich 0. Für alle anderen
  466.   numerischen Typen wird V der "Überlauf-Rest" zugewiesen, code hat
  467.   den Wert 0 (!). Aus diesem Grund sollte für die Konvertierung von
  468.   Integerwerten immer ein LongInt benutzt und die Bereichsprüfung
  469.   zuvor abgeschaltet werden:
  470.  
  471.     {$R-}
  472.     Val('99999', LongIntVar, code)
  473.     if (code <> 0) or
  474.        (LongIntVar < 0) or (LongIntVar > 65535) then
  475.        ...                                             { Fehler! }
  476.     else
  477.       WordVar := LongIntVar;
  478.  
  479.   In diesem Beispiel wird nach der Konvertierung explizit geprüft, ob
  480.   das Ergebnis im zulässigen Wertebereich (hier: für Word) liegt.
  481.  
  482.   Eine zweite Erweiterung: Val ignoriert führende Leerzeichen. Die
  483.   folgenden Beispiele haben also beide dasselbe Ergebnis:
  484.  
  485.     Val('   123', Int_Var, code);          { ergibt 123 }
  486.     Val('123', Int_Var, code);                { dito }
  487.  
  488.   Kapitel 26 (Bd II, S 371), "Window-Prozedur": Erweiterung
  489.   ---------------------------------------------------------
  490.   Ein Aufruf von Window erzeugt nicht nur ein Textfenster, sondern
  491.   setzt auch den Cursor auf die Position (1,1) innerhalb dieses
  492.   Fensters (d.h. in die linke obere Ecke).
  493.