home *** CD-ROM | disk | FTP | other *** search
- TURBO PASCAL 4.0 - ZUSATZINFORMATIONEN
- ----------------------------------
-
- Diese Datei enthält zusätzliche Informationen und Korrekturen in
- letzter Minute.
-
-
- INHALT
- ------
- 1. Hilfe bei Problemen
- 2. Dateien auf den Originaldisketten
- 3. Korrekturen und Erweiterungen des Handbuchs
-
-
-
- 1. HILFE BEI PROBLEMEN
- ----------------------
- Bei Problemen bitten wir Sie, zuerst das Handbuch und diese Datei
- sorgfältig durchzulesen. Wenn danach noch Fragen offen sind, können
- Sie sich an eine der folgenden Stellen wenden:
-
- 1) Ihren Softwarehändler oder einem Userclub
-
- 2) Schriftlich an die technische Beratung der
-
- Heimsoeth Software GmbH & Co KG
- Fraunhoferstr. 13
- 8000 München 5
-
- 3) In dringenden Fällen: Die Heimsoeth Software Hotline
- Montag - Freitag 14.00 - 17.00
- Tel: 089/2609467
-
- Sie sollten auf jeden Fall die folgenden Dinge parat haben:
-
- 1) Die deutschen Handbücher;
- 2) Die Versionsnummer von Turbo Pascal. Sie wird vom der Kommando-
- zeilen-Version (TPC.EXE) bei jedem Aufruf ausgegeben, in der
- integrierten Entwicklungsumgebung bringt der Tastenbefehl
- ALT-F10 ein entsprechendes Fenster auf den Bildschirm.
- 3) Produktnamen, Modellbezeichnung Ihres Computers und eventueller
- Zusatz-Hardware (speziell: Grafik-Karten).
- 4) Die Versionsnummer von DOS, die sich mit den DOS-Befehl VER
- ermitteln läßt.
-
-
- 2. DATEIEN AUF DEN ORIGINALDISKETTEN
- ------------------------------------
-
- Die Beschreibung in Kapitel 1 des Benutzerhandbuchs ist bis auf drei
- Punkte korrekt:
-
- - die Diskette II enthält zusätzlich die Datei FRAGEN mit rund 40
- allgemeinen Fragen und Antworten zu Turbo Pascal.
- - das Programm TINST.EXE befindet sich nicht auf der Diskette I,
- sondern auf der Diskette II;
- - die Datei CTOPAS.BAT ist nicht im Programmpaket enthalten. Bitte
- folgen Sie den Beschreibungen in den Dateien CPASDEMO.PAS und
- CPASDEMO.C.
-
- Auf Ihren Originaldisketten finden Sie folgende Dateien:
-
- Diskette 1: Compiler und integrierte Entwicklungsumgebung
-
- TURBO.EXE die integrierte Entwicklungsumgebung
- TURBO.TPL die Laufzeitbibliothek von Turbo Pascal. Sie enthält
- die Standard-Units System, Dos, Crt, Printer, Turbo3
- und Graph3
- TURBO.HLP Texte der eingebauten Hilfestellung
- TPC.EXE Kommandozeilen-Version von Turbo Pascal
- README.COM ein Programm zum Lesen der Datei README
- README Tips, Hinweise und Errata
-
- Diskette 2: Dienst- und Demonstrationsprogramme
-
- TINST.EXE Installationsprogramm für Turbo Pascal
- UPGRADE.EXE konvertiert Quelltexte der Version 3.0
- UPGRADE.DTA zu UPGRADE gehörige Daten
- TPMAP.EXE erzeugt Symboltabellen zur symbolischen Fehlersuche
- mit einem Debugger wie Periscope oder SYMDEB
- TPUMOVER.EXE zur Verwaltung von Unit-Bibliotheken
- TPCONFIG.EXE ein Konfigurationsdateien-Konvertierer
- BINOBJ.EXE konvertiert Daten in .OBJ-Dateien und ermöglicht das
- direkte Einbinden von Grafik-Treibern
- BINOBJ.DOC die Dokumentation zu BINOBJ.EXE
- MAKE.EXE Verwaltung für große Programmierprojekte
- TOUCH.COM verändert Datum und Uhrzeit von Dateien
- GREP.COM durchsucht Quelltext-Dateien
- CRTDEMO.PAS Demonstration der Möglichkeiten des Units Crt
- GR3DEMO.PAS Demonstration der (3.0-)Turtlegrafik in der
- Version 4.0
- QSORT.PAS Implementation des QuickSort-Algorithmus
- LISTER.PAS gibt Programmlistings auf einen Drucker aus und
- benutzt dazu das Unit Printer
- HILB.PAS berechnet die Hilbert-Matrix mit Real-Variablen
- FIB8087.PAS Demonstration eines rekursiven Programms ohne
- Überlauf des 8087-Rechenstacks
- PROCPTR.PAS demonstriert Zeiger auf Routinen und inline-Code
- EMS.PAS zeigt die Verwendung von »Above Memory«
- AUXINOUT.PAS ein Textdatei-Gerätetreiber für serielle
- Schnittstellen
- BCDREAL.PAS demonstriert die Konvertierung von BCD-Programmen
- BCD.PAS ein Unit mit Konvertierungsroutinen für BCD-Zahlen
- CPASDEMO.PAS demonstriert, wie sich mit Turbo C erzeugte .OBJ-
- Dateien in ein Pascal-Programm einbinden lassen
- CPASDEMO.C das C-Programm zu CPASDEMO.PAS
- CTOPAS.TC Konfigurationsdatei für Turbo C zur Compilierung von
- CPASDEMO.C (integrierte Entwicklungsumgebung)
- TURBO.CFG Konfigurationsdatei für Turbo C zur Compilierung von
- CPASDEMO.C (Kommandozeilen-Version)
- SYSTEM.DOC Listing des Interface-Teils des Units System
- DOS.DOC Listing des Interface-Teils des Units Dos
- CRT.DOC Listing des Interface-Teils des Units Crt
- PRINTER.DOC Listing des Interface-Teils des Units Printer
- GRAPH3.DOC Listing des Interface-Teils des Units Graph3
- TURBO3.DOC Listing des Interface-Teils des Units Turbo3
-
- Diskette 3: Grafik und das Programm "MicroCalc"
-
- GRAPH.DOC Listing des Interface-Teils des Units Graph - enthält
- einige wichtige Änderungen und Erweiterungen gegen-
- über dem Referenzteil des Handbuchs
- GRAPH.TPU das Unit Graph in einer eigenen (compilierten) Datei
- ATT.BGI Grafik-Gerätetreiber für den AT&T 6300
- CGA.BGI Grafik-Gerätetreiber für CGA- und MCGA-Karten
- EGAVGA.BGI Grafik-Gerätetreiber für EGA und VGA
- HERC.BGI Grafik-Gerätetreiber für Hercules-Karten
- PC3270.BGI Grafik-Gerätetreiber für den PC3720
- GOTH.CHR grafischer Vektor-Zeichensatz (Schriftart »Gothic»)
- LITT.CHR grafischer Vektor-Zeichensatz mit kleinen Zeichen
- SANS.CHR grafischer Vektor-Zeichensatz (Schriftart »SansSerif«)
- TRIP.CHR grafischer Vektor-Zeichensatz (Schriftart »Triplex«)
- GRDEMO.PAS demonstriert einen Teil der Möglichkeiten von Graph
- ARTY4.PAS noch ein Demonstrationsprogramm für Graph
- GRLINK.PAS zeigt, wie man Treiber und Vektor-Zeichensätze in
- eine .EXE-Datei einbinden kann
- DRIVERS.PAS Unit mit Grafik-Treibern für GRLINK.PAS
- FONTS.PAS Zeichensätze für GRLINK.PAS
- GRLINK.MAK MAKE-Datei zur Compilierung von GRLINK.EXE
- MCALC.PAS das Tabellenkalkulationsprogramm MicroCalc
- MC*.PAS diverse Units, die zu MicroCalc gehören
- MCMVSMEM.ASM direkte Ansteuerung des Bildspeichers für MicroCalc
- MCMVSMEM.OBJ die dazugehörige .OBJ-Datei
- UNPACK.EXE Programm zum »auspacken« von GREXAMPL.ARC
- GREXAMPL.ARC über fünfzig »gepackte« Grafik-Beispiele
-
- FILELIST - eine Liste der Beispielprogramme in GREXAMPL.ARC
- und der entsprechenden Prozedur- /Funktionsnamen
-
- ARC PAS - Arc Beispielprogramm
- ARCCOORD PAS - GetArcCoords Beispielprogramm
- ASPECT PAS - GetAspectRatio Beispielprogramm
- BAR PAS - Bar Beispielprogramm
- BAR3D PAS - Bar3D Beispielprogramm
- CIRCLE PAS - Circle Beispielprogramm
- CLOSEGR PAS - CloseGraph Beispielprogramm
- CLRDEV PAS - ClearDevice Beispielprogramm
- CLRVP PAS - ClearViewPort Beispielprogramm
- DETECT PAS - DetectGraph Beispielprogramm
- DRPOLY PAS - DrawPoly Beispielprogramm
- ELLIPSE PAS - Ellipse Beispielprogramm
- FILLPOLY PAS - FillPoly Beispielprogramm
- FLOOD PAS - FloodFill Beispielprogramm
- GETBKCOL PAS - GetBkColor Beispielprogramm
- GETCOL PAS - GetColor Beispielprogramm
- GETFILLS PAS - GetFillSettings Beispielprogramm
- GETGRMD PAS - GetGraphMode Beispielprogramm
- GETLNS PAS - GetLineSettings Beispielprogramm
- GETMAXX PAS - GetMaxX Beispielprogramm
- GETMAXY PAS - GetMaxY Beispielprogramm
- GETPAL PAS - GetPalette Beispielprogramm
- GETPIX PAS - GetPixel Beispielprogramm
- GETTXTS PAS - GetTxtSettings Beispielprogramm
- GETVS PAS - GetViewSettings Beispielprogramm
- GETX PAS - GetX Beispielprogramm
- GETY PAS - GetY Beispielprogramm
- GRERRMSG PAS - GraphErrorMsg Beispielprogramm
- GRRES PAS - GraphResult Beispielprogramm
- IMSIZE PAS - ImageSize Beispielprogramm
- INITGR PAS - InitGraph Beispielprogramm
- LINE PAS - Line Beispielprogramm
- LINEREL PAS - LineRel Beispielprogramm
- LINETO PAS - LineTo Beispielprogramm
- MOVEREL PAS - MoveRel Beispielprogramm
- MOVETO PAS - MoveTo Beispielprogramms
- OUTTXT PAS - OutText Beispielprogramm
- OUTTXTXY PAS - OutTextXY Beispielprogramm
- PIESLICE PAS - PieSlice Beispielprogramm
- PUTIM PAS - PutImage Beispielprogramm
- PUTPIX PAS - PutPixel Beispielprogramm
- RECT PAS - Rectangle Beispielprogramm
- RESCRT PAS - RestoreCrtMode Beispielprogramm
- SETACTPG PAS - SetActivePage Beispielprogramm
- SETALLP PAS - SetAllPalette Beispielprogramm
- SETBKCOL PAS - SetBkColor Beispielprogramm
- SETCOL PAS - SetColor Beispielprogramm
- SETFLPAT PAS - SetFillPattern Beispielprogramm
- SETGRMOD PAS - SetGraphMode Beispielprogramm
- SETLNSTY PAS - SetLineStyle Beispielprogramm
- SETPAL PAS - SetPalette Beispielprogramm
- SETTXTJS PAS - SetTextJustify Beispielprogramm
- SETTXTST PAS - SetTextStyle Beispielprogramm
- SETVISPG PAS - SetVisualPage Beispielprogramm
- SETVP PAS - SetViewPort Beispielprogramm
- TXTHT PAS - TextHeight Beispielprogramm
-
-
- 3. KORREKTUREN UND ERWEITERUNGEN DES HANDBUCHS
- ----------------------------------------------
-
- ACHTUNG: Das Unit GRAPH ist nach Drucklegung des Referenzhandbuchs
- um einige Funktionen erweitert und in anderen Teilen ver-
- ändert worden. Die entsprechenden Informationen finden Sie
- in der Datei GRAPH.DOC auf der Diskette III.
-
- Kapitel 4 (Bd I, S 57), "Die fünf Integer-Typen": Erweiterung
- -------------------------------------------------------------
- Turbo Pascal definiert zwei Konstanten - MaxInt mit einem Wert von
- 32767 und MaxLongInt mit einem Wert von 2147483647.
-
-
- Kapitel 15 (Bd II, S 43), "Umwandlung von Variablentypen": Erweiterung
- ----------------------------------------------------------------------
- Die Standardfunktionen Lo und Hi liefern das niederwertige bzw.
- höherwertige Byte einer Word-Variablen zurück. Um das niederwertige
- oder höherwertige Wort einer LongInt-Variablen zu ermitteln, kann
- man eine explizite Typ-Umwandlung verwenden:
-
- type
- WordRec = record { für die Typ-Umwandlung }
- Low, High : Word;
- end;
- var
- L : LongInt;
- begin
- L := $10000; { dezimal: 65536 }
- Writeln(WordRec(L).Low); { 0 }
- Writeln(WordRec(L).High); { 1 }
- end.
-
- In ähnlicher Weise lassen sich Aufrufe der Funktionen Seg und Ofs
- durch direkte Typ-Umwandlungen ersetzen (womit einige Bytes Pro-
- grammcode und einige Mikrosekunden Laufzeit eingespart werden):
-
- type
- PtrRec = record { für die Typ-Umwandlung }
- Ofs, Seg : Word;
- end;
- var
- P : Pointer;
- begin
- P := Ptr($1234, $4567);
- Writeln(PtrRec(P).Ofs); { $4567 }
- Writeln(PtrRec(P).Seg); { $1234 }
- end.
-
- Kapitel 20 (Bd II, S 97) "Units, die andere Units voraussetzen": Erweiterung
- -----------------------------------------------------------------------------
- Ein Programm *kann* sämtliche direkt und indirekt vorausgesetzten
- Units mit uses aufführen - tatsächlich nötig ist aber nur die Angabe
- der Units, auf die es direkt zugreift. Im gezeigten Beispiel greift
- "Hauptprogramm" nur auf "Unit2" direkt zu, die uses-Anweisung in
- "Hauptprogramm" kann deshalb entweder als
-
- uses Unit1, Unit2;
-
- oder als
-
- uses Unit2;
-
- geschrieben werden. Im zweiten Fall stellt der Compiler selbständig
- fest, daß Unit2 das Unit Unit1 voraussetzt und nimmt es in das
- Programm auf.
-
- Kapitel 23 (Bd II, S 113), "Das Unit System": Erweiterung
- ---------------------------------------------------------
- Das Unit SYSTEM deklariert eine Variable namens FileMode, deren
- Wert den Zugriffscode bei der Öffnung typisierter und untypisierter
- Dateien mit Reset festlegt. FileMode wird beim Start des Programms
- auf den Wert 2 initialisiert ("Lesen und Schreiben erlaubt"). Durch
- eine direkte Zuweisung an diese Variable läßt sich der DOS-Zugriffs-
- code bei folgenden Aufrufen von Reset für typisierte und untypi-
- sierte Dateien festlegen. Die folgenden Werte für FileMode sind in
- allen DOS-Versionen ab 2.0 definiert:
-
- 0 nur Lesen
- 1 nur Schreiben
- 2 Lesen und Schreiben
-
- Die DOS-Versionen ab 3.0 erlauben zusätzliche Werte für FileMode,
- über die primär die Dateiverwaltung in Netzwerken abgewickelt wird.
- Das DOS-Handbuch enthält weitere Einzelheiten.
-
- Hinweis: Auf die Erzeugung von Dateien mit Rewrite sowie die Bear-
- beitung von Textdateien hat der Wert von FileMode keinen Einfluß
- (Rewrite setzt bei typisierten und untypisierten Dateien immer
- "Lesen und Schreiben erlaubt").
-
- Kapitel 23 (Bd II, S 114), "Das Unit System": Erweiterung
- ---------------------------------------------------------
- Neben den angegebenen vier Interrupt-Vektoren wird zusätzlich der
- Vektor für "kritische Fehler" (in einer Variablen namens SaveInt24)
- gespeichert und eine eigene Behandlungsroutine gesetzt. Aus diesem
- Grund lassen sich auch Fehler wie "Laufwerk nicht bereit" über
- IOResult abfangen (vgl. Anhang F im Benutzerhandbuch).
-
- Kapitel 23 (Bd II, S 116), "Das Unit Dos": Korrektur
- ----------------------------------------------------
- Die vier Zeigerfelder im Record eine Textdatei-Variablen, die auf
- die Routinen für "Open", "InOut", "Flush" und "Close" zeigen, heißen
- nicht "Proc", sondern "Func". Die korrekte Definition von TextRec
- ist:
-
- TextRec = record
- ....
- OpenFunc: Pointer; { nicht: "OpenProc" }
- InOutFunc: Pointer; { nicht: "InOutProc" }
- FlushFunc: Pointer; ...
- CloseFunc: Pointer; ...
- ....
- end;
-
- Das in Kapitel 25 beschriebene Unit AuxInOut ist von diesen Namens-
- änderungen nicht betroffen, weil es einen eigenen Datentyp definiert.
-
- Kapitel 23 (Bd II, S 123), "Das Unit Crt": Korrektur
- ----------------------------------------------------
- Eine Konstante namens Last ist nicht definiert, stattdessen
- deklariert das Unit CRT die Variable LastMode, die bei einem Aufruf
- von TextMode denselben Zweck erfüllt. Zusätzlich definiert CRT eine
- Konstante mit dem Namen Font8x8, mit der 43 bzw. 50 Zeilen Text auf
- EGA- bzw. VGA-Karten gesetzt werden können (siehe Anmerkung zu
- "TextMode" in einem der folgenden Abschnitte).
-
- Kapitel 24 (Bd II, S 159), "Units und der 8087": Einschränkung
- --------------------------------------------------------------
- Der Linker prüft nicht, ob ein Unit über den Befehl {$L} eine
- .OBJ-Datei mit 8087-Code aufnimmt - Maschinenprogramme müssen
- gegebenenfalls selbst prüfen, ob ein Coprozessor installiert ist.
-
- Kapitel 25 (Bd II, S 185) "Aufrufe als NEAR und FAR": Korrektur
- ---------------------------------------------------------------
- Eine Prozedur oder Funktion wird als "eingeschachtelt" bezeichnet,
- wenn sie innerhalb einer anderen Prozedur oder Funktion deklariert
- ist (also lokal dazu). In diesem Fall ist sichergestellt, daß sich
- die aufrufende und die aufgerufene Routine immer im selben Code-
- Segment befinden - deshalb nimmt der Compiler eine weitere
- Optimierung vor und codiert diese Aufrufe auch dann als NEAR, wenn
- der Modus {$F+} gesetzt ist.
-
- Beim Aufruf einer lokal deklarierten Prozedur oder Funktion erzeugt
- der Compiler direkt vor dem CALL den Befehl PUSH BP, übergibt also
- das BP-Register der aufrufenden Routine als zusätzlichen Parameter.
- Nachdem die aufgerufene Routine ihren eigenen Stack (mit PUSH BP /
- MOV BP,SP) eingerichtet hat, kann auf das BP-Register der *aufru-
- fenden* Routine über [BP+4] und damit auf die lokalen Variablen
- dieser übergeordneten Routine zugegriffen werden. (Wenn die auf-
- rufende Routine ihrerseits eingeschachtelt ist, wird die Verbindung
- zur nächsthöheren Ebene wiederum über [BP+4] hergestellt usw).
-
- Ein Beispiel:
-
- procedure A;
- var IntA: Integer;
- procedure B;
- var IntB: Integer;
- procedure C;
- var IntC: Integer;
- begin
- inline($8B/$46/<IntC/ { MOV AX,IntC[BP] ; AX = IntC }
- $8B/$5E/$04/ { MOV BX,[BP+4] ; BX = B's Stack }
- $36/$8B/$47/<IntB/ { MOV AX,SS:IntB[BX] ; AX = IntB }
- $8B/$5E/$04/ { MOV BX,[BP+4] ; BX = B's Stack }
- $36/$8B/$5F/$04/ { MOV BX,SS:[BX+4] ; BX = A's Stack }
- $36/$8B/$47/<IntA);{ MOV AX,SS:IntA[BX] ; AX = IntA }
- end {C};
- begin {B}
- end {B};
- begin {A}
- end {A};
-
- Hinweis: Verschachtelte Prozeduren und Funktionen können nicht als
- external deklariert werden.
-
- Kapitel 25 (Bd II, S 196), "Maschinencode mit inline": Korrektur
- ----------------------------------------------------------------
- Die Reihenfolge der Kommentare stimmt nicht mit den Maschinen-
- befehlen überein. Das korrekte Beispiel ist:
-
- function LongMul(X,Y : Integer) : LongInt;
- inline(
- $5A/ { POP DX ; Pop X }
- $58/ { POP AX ; Pop Y }
- $F7/$EA); { IMUL DX ; DX:AX = X*Y }
-
- Kapitel 26 (Bd II, S 260), "GetFTime": Korrektur
- ------------------------------------------------
- Der Parameter Time ist inkorrekt als DateTime (d.h. als Record)
- deklariert. Tatsächlich erwartet GetFTime hier einen LongInt, in dem
- das ermittelte Datum und die Uhrzeit im gepackten Format von DOS
- gespeichert werden:
-
- procedure GetFTime(var F; var Time: LongInt);
-
- Kapitel 26 (Bd II, S 326), "RestoreCrtMode": Erweiterung
- --------------------------------------------------------
- Anstelle von RestoreCrtMode kann auch ein Aufruf von TextMode mit
- der Variablen LastMode verwendet werden (siehe nächster Abschnitt):
-
- program RestoreDemo;
- uses Crt;
- var
- OrigMode: Integer;
- begin
- OrigMode := LastMode;
- .....
- TextMode(OrigMode); { schaltet in den Textmodus zurück }
-
- Kapitel 26 (Bd II, S 364), "TextMode-Prozedur": Erweiterung und Korrektur
- -------------------------------------------------------------------------
- Der Parameter Mode hat nicht den Typ Integer, sondern Word. Die
- korrekte Deklaration lautet also:
-
- procedure TextMode(Mode: Word);
-
- Ein Aufruf von TextMode mit der (in CRT deklarierten) Variablen
- LastMode setzt den Videomodus, der *vor* dem letzten Aufruf von
- TextMode bzw. beim Start des Programms aktiv war.
- Das Unit CRT definiert zusätzlich die Konstante Font8x8, über die
- auf EGA- und VGA-Karten 43 bzw. 50 Textzeilen gesetzt werden
- können. Der Aufruf
-
- TextMode(CO80+Font8x8)
-
- setzt auf EGA-Karten "80*43 Zeichen farbig", auf VGA-Karten "80*50
- Zeichen farbig". Da auch dieser Modus in LastMode gespeichert wird,
- schaltet der folgende Aufruf von TextMode wieder von 43 bzw. 50
- Zeilen auf 25 Zeilen um, ohne den Videomodus (d.h. CO80 oder BW80)
- zu verändern:
-
- TextMode(Lo(LastMode));
-
- Analog dazu kann von 25 auf 43 bzw. 50 Zeilen umgeschaltet werden:
-
- TextMode(Lo(LastMode) + Font8x8);
-
- Wenn bereits beim Start eines Turbo Pascal-Programms ein Textmodus
- mit 43 oder 50 Zeilen gesetzt ist, wird der entsprechende Wert in
- LastMode festgehalten und WindMax (die untere rechte Fenstergrenze)
- auf den entsprechenden Wert initialisiert.
-
- Kapitel 26 (Bd II, S 396), "Val-Prozedur": Erweiterung
- ------------------------------------------------------
- Das Verhalten von Val bei Überläufen hängt vom Stand des Compiler-
- Schalters {$V} (Bereichs-Prüfung) und dem Typ des übergebenen
- Parameters V ab. Im Modus {$V+} erzeugt Val einen Laufzeitfehler,
- wenn das Ergebnis der Interpretation nicht im zulässigen
- Wertebereich von V liegt, also beispielsweise:
-
- Val('999999', Int_Var, code); { würde Int_Var den
- Wert 99999 zuordnen }
-
- Im Modus {$V-} hängt das Ergebnis bei Überläufen vom Typ der als V
- übergebenen Variablen ab: Für Real-Typen und LongInt ist das Ergeb-
- nis undefiniert, code hat einen Wert ungleich 0. Für alle anderen
- numerischen Typen wird V der "Überlauf-Rest" zugewiesen, code hat
- den Wert 0 (!). Aus diesem Grund sollte für die Konvertierung von
- Integerwerten immer ein LongInt benutzt und die Bereichsprüfung
- zuvor abgeschaltet werden:
-
- {$R-}
- Val('99999', LongIntVar, code)
- if (code <> 0) or
- (LongIntVar < 0) or (LongIntVar > 65535) then
- ... { Fehler! }
- else
- WordVar := LongIntVar;
-
- In diesem Beispiel wird nach der Konvertierung explizit geprüft, ob
- das Ergebnis im zulässigen Wertebereich (hier: für Word) liegt.
-
- Eine zweite Erweiterung: Val ignoriert führende Leerzeichen. Die
- folgenden Beispiele haben also beide dasselbe Ergebnis:
-
- Val(' 123', Int_Var, code); { ergibt 123 }
- Val('123', Int_Var, code); { dito }
-
- Kapitel 26 (Bd II, S 371), "Window-Prozedur": Erweiterung
- ---------------------------------------------------------
- Ein Aufruf von Window erzeugt nicht nur ein Textfenster, sondern
- setzt auch den Cursor auf die Position (1,1) innerhalb dieses
- Fensters (d.h. in die linke obere Ecke).
-