home *** CD-ROM | disk | FTP | other *** search
/ Best of German Only 2 / romside_best_of_german_only_2.iso / dos / lernbild / itg / entpack.exe / DOC / ITG.DOC < prev    next >
Text File  |  1993-11-17  |  239KB  |  6,448 lines

  1.  
  2.  
  3. ITG-PASCAL
  4.  
  5.  
  6. (C) R.Hamann
  7.  
  8. Kiel 1990/93
  9.  
  10.  
  11.  
  12. Lizenzbedingungen
  13.  
  14. Für Einzelplatzlizenzen gelten die üblichen Bedingungen, daß ITG-PASCAL zur
  15. Zeit nur auf einem Computer ausgeführt werden darf.
  16.  
  17. Bei Schullizenzen darf ITG-PASCAL gleichzeitig auf beliebig vielen Computern
  18. dieser Schule ausgeführt werden. Außerdem ist die Weitergabe an alle Lehrer und
  19. Schüler der Schule erlaubt.
  20.  
  21. Aus dem als ASCII-Datei mitgelieferten Handbuch dürfen beliebige Teile für den
  22. Einsatz im Unterricht beliebig oft vervielfältigt werden oder in eigene Texte
  23. übernommen werden, die dem Unterricht dienen.
  24.  
  25.  
  26. #FF
  27.  
  28. Einleitung
  29.  
  30. Am Gymnasium in Schleswig-Holstein wird die Informationstechnische Grundbildung
  31. (ITG) in Klasse 8 häufig mit COMAL begonnen, während in der Informatik der
  32. Oberstufe überwiegend TURBO-PASCAL verwendet wird. Die besseren Schüler haben
  33. bei dem dann nötigen Umstieg auf eine völlig andere Programmierumgebung im
  34. allgemeinen keine größeren Probleme, für die anderen ergeben sich aber neue
  35. Hindernisse, die die Motivation stark absinken lassen können. Oft hört man von
  36. diesen Schülern "Warum haben wir denn erst COMAL gelernt? Hätten wir nicht
  37. gleich PASCAL lernen können?" oder "Warum müssen wir jetzt PASCAL lernen, geht
  38. es denn nicht auch mit COMAL?". Es ist schwierig, diesen Schülern verständlich
  39. zu machen, daß Programm- und Datenstrukturen eng verknüpft sind und sich manche
  40. Probleme mit geeigneten Datenstrukturen, die in dieser Weise in COMAL nicht zu
  41. definieren sind, sehr viel einfacher lösen lassen.
  42.  
  43. Viele Gymnasien beginnen die Informationstechnische Grundbildung deshalb gleich
  44. mit PASCAL, wobei dann fast ausschließlich TURBO-PASCAL 4.0-6.0 verwendet wird,
  45. selten vielleicht auch QUICK-PASCAL. Mit diesen Compilern entstehen für Schüler
  46. gerade im Anfangsunterricht neue Probleme, weil vor dem ersten eigenen Programm
  47. der Umgang mit der für Schüler völlig überladenen Programmierumgebung und die
  48. formale Gestaltung eines Programms einschließlich der Einbindung eigener Units
  49. gelernt werden muß. So kann es mehrere frustrierende Stunden bis zum ersten
  50. Erfolgserlebnis dauern. Dieser Nachteil ist bei einem Interpreter wie COMAL
  51. nicht vorhanden.
  52.  
  53. Aus dieser Erfahrung begann an unserer Schule die Einheit ITG mit dem Programm
  54. IGEL, das von einem Kollegen erstellt wurde. Mit IGEL können wahlweise
  55. Anweisungen für Igel-(Turtle-)Grafik direkt ausgeführt werden oder es kann eine
  56. Anweisungsliste eingegeben werden, die dann linear abgearbeitet wird. Es fehlen
  57. aber alle Möglichkeiten der Programmverzweigung oder der Schleifenbildung. Nach
  58. den ersten Erfahrungen mit IGEL kannten die Schüler etliche Anweisungen für
  59. Igel-Grafik und ihre Syntax. Sie hatten schnell Erfolgserlebnisse und waren
  60. dann auch bereit, den jetzt nötigen Umstieg in TURBO-PASCAL zu vollziehen. Als
  61. Ergebnis dieser Vorarbeit war zu vermerken, daß der vorhandene Motivationsschub
  62. schnell erfolgreich umgesetzt werden konnte. Die nötige Lernphase für
  63. Formalitäten wurde jetzt im allgemeinen mit mehr Mut und Zutrauen angegangen.
  64. Trotzdem war nach wie vor ein Bruch vorhanden, der hauptsächlich durch
  65. spezielle Eigenschaften von TURBO-PASCAL entstand, das für einen ganz anderen
  66. Einsatz als den schulischen Unterricht entwickelt wurde.
  67.  
  68. Oftmals lief bei Schülern ein Programm fehlerfrei ab, die Ergebnisse
  69. verschwanden aber sofort vom Bildschirm, weil TURBO-PASCAL in den Editor
  70. zurückschaltete. Die übliche Reaktion war "Unser Programm hat gar nichts
  71. gemacht!". Es dauerte relativ lange, bis alle Schüler selbständig mit der
  72. Tastenkombination ALT/F5 auf den Ausgabebildschirm umschalteten. Auch die
  73. Fehlermeldungen bei einem durch einen Laufzeitfehler abgebrochenen Programm
  74. irritierten die Schüler sehr, da keine Meldungen im Klartext vorlagen. Das
  75. übliche Vorgehen in diesem Fall war eine eigene Interpretation oder das
  76. Heraussuchen der Fehlerbeschreibung nach dem Fehlerindex und Suchen der
  77. Programmstelle mit dem Compiler. Beides ist für Schüler im Anfangsunterricht
  78. sehr problematisch, weil es den Eindruck verstärkt, daß Computer nur etwas für
  79. Freaks seien. Häufig fand der Compiler auch keine Programmstelle, die zu der
  80. angegebenen Fehlerposition paßte. Damit sind Schüler bei einer selbständigen
  81. Fehlersuche dann vollständig überfordert. Störend wirkte es sich auch aus, daß
  82. Lehrer und Schüler verschiedene Compilerschalter oder Programmpfade setzten und
  83. in der Konfiguration abspeicherten. Die Folge davon war, daß Programme die "in
  84. der letzten Stunde noch liefen", jetzt nicht einmal mehr compiliert wurden.
  85.  
  86. Wegen der geschilderten Probleme entstand immer mehr die Idee, einen Compiler
  87. zu schaffen, der speziell für den Unterricht geeignet ist und auf
  88. professionelle Möglichkeiten verzichtet. Aufbauend auf einem von Niklaus Wirth
  89. #FF
  90. in seinem Buch "Compilerbau" beschriebenen Buch entstand ITG-PASCAL. Es war
  91. relativ schnell klar, daß es sich um einen P-Code-Compiler handeln muß, der den
  92. Quelltext in einen Pseudo-Maschinen-Code übersetzt, der dann durch einen
  93. Interpreter ausgeführt wird. Ein Vorteil ist in diesem Fall die einfachere
  94. Entwicklung des Compilers, der in einer Hochsprache programmiert werden kann
  95. und diese auch zur Programmausführung benutzt, denn erst dadurch wurde die
  96. Entwicklung von ITG-PASCAL möglich. Weil keine selbst ausführbaren Programme
  97. erzeugt werden, hat der Interpreter zur Laufzeit Zugriff auf den Quelltext des
  98. Programms und alle Compilertabellen. Deshalb kann bei Laufzeitfehlern eine
  99. detaillierte Fehlermeldung mit dem Quelltext der Zeile, in der der Fehler
  100. auftrat, der Fehlerposition und der augenblicklichen Belegung aller Variablen
  101. in aktiven Prozeduren / Funktionen (Post-Mortem-Dump) ausgegeben  werden. Die
  102. Schüler finden den Fehler dann sehr schnell, wenn sie den zugrunde liegenden
  103. Algorithmus verstanden haben.
  104.  
  105. Aufbauend auf dem Post-Mortem-Dump konnte ein einfacher Debugger geschaffen
  106. werden, für den anfangs nur bekannt sein muß, wie Variablen im Quelltext zum
  107. Debuggen markiert werden und wie die Ausgabe der Debug-Informationen gestartet
  108. wird. Nach ersten Erfahrungen kommen Schüler damit sehr schnell zurecht und
  109. können ihr Programm damit gut von Fehlern bereinigen. Als Nebeneffekt ist es
  110. möglich, mit dem Debugger die Anlage lokaler Variablen auf dem Stack bei
  111. Aufrufen von Funktionen und Prozeduren zu zeigen.
  112.  
  113. ITG-PASCAL lehnt sich in der Struktur der Oberfläche sehr stark an TURBO-PASCAL
  114. 4.0-5.5 an, wobei aber der Umfang auf das für den Unterricht nötige Maß
  115. reduziert wurde. Die SAA-Oberfläche von TURBO-PASCAL 6.0 wurde bewußt nicht
  116. übernommen, weil viele Schüler sehr viel besser mit der einfacheren
  117. Menüstruktur als mit SAA-Oberflächen zurechtkommen. Der Sprachumfang von
  118. ITG-PASCAL ist eine Untermenge des Sprachumfangs von TURBO-PASCAL 4.0-6.0,
  119. wobei auch die Syntax übernommen wurde, um den Umstieg auf TURBO-PASCAL so
  120. einfach wie möglich zu gestalten. Insbesondere für die Grafik, aber auch für
  121. die Write- und Read-Anweisungen wurden Erweiterungen eingeführt. So ist es z.B.
  122. möglich, Arrays und Records mit einer einzigen Write-Anweisung auszugeben oder
  123. in der Read-Anweisung die einzulesende Variable vorzubelegen, in der Eingabe zu
  124. editieren und bei Real-Variablen Terme einzugeben. Nicht alle aufgezählten
  125. Eigenschaften lassen sich durch entsprechende Units nachbilden.
  126.  
  127. Für den Einstieg in die Programmierung oder kurze Tests kann ein Direktmodus
  128. gewählt werden, in dem Anweisungen eingegeben und dann sofort ausgeführt werden
  129. können. Auf Wunsch werden sie im Editor mitgeschrieben und zu einem lauffähigen
  130. Programm ergänzt. Damit ist ein einfaches von Syntaxfehlern freies Programm
  131. auch für ungeübte Schüler innerhalb weniger Minuten zu schreiben, wenn sie die
  132. Syntax einiger Befehle kennen. Dieses erste Programm kann beliebig verändert
  133. und ergänzt werden.
  134.  
  135. Die beschriebenen Vorteile werden dadurch erkauft, daß ITG-PASCAL keine
  136. EXE-Files im Maschinencode erzeugen kann, im Umfang des Quelltextes je nach
  137. Komplexität auf 1500-2000 Programmzeilen begrenzt ist, im Speicherplatz für
  138. Variablen begrenzt ist und Programme etwas langsamer als TURBO-PASCAL ausführt.
  139.  
  140. Das Datenformat für INTEGER-Variablen ist immer LONGINT, das für REAL-Variablen
  141. immer EXTENDED nach TURBO-PASCAL-Deklaration.
  142.  
  143. Mengen sind nur teilweise implementiert, um z.B. Tastaturabfragen zu
  144. vereinfachen.
  145.  
  146. #FF
  147.  
  148. Für weitere Anregungen zu ITG-PASCAL wäre ich dankbar.
  149.  
  150. R.Hamann
  151.  
  152. Kiel, im Mai 1991.
  153.  
  154. Seit Mai 1991 sind eine Reihe von Erweiterungen wie dynamische Variablen,
  155. parallele Prozesse und andere im Sprachumfang hinzugekommen, die jetzt den
  156. Einsatz von ITG- PASCAL in großen Bereichen des Informatik-Unterrichts der
  157. Oberstufe ermöglichen.
  158.  
  159.  
  160. #FF
  161.  
  162. Installation
  163.  
  164. Das Installationsprogramm INSTALL richtet auf einer Diskette / Festplatte mit
  165. während der Installation frei wählbaren Verzeichnisnamen ein, in die alle
  166. Dateien kopiert werden, die in den Archiven ITG-???.EXE im Unterverzeichnis
  167. \PRG gepackt enthalten sind. Anpassungen in der AUTOEXEC.BAT oder einer
  168. Batch-Datei zum Starten von ITG-PASCAL müssen von Hand vorgenommen werden.
  169.  
  170. Das Programmpaket von ITG-PASCAL umfaßt mehrere Dateien, auf die zum Teil
  171. während des Betriebes zugegriffen werden muß. Damit diese Dateien von ITG.EXE
  172. gefunden werden, kann das Directory, in dem sie sich befinden, in der
  173. Environment-Variablen ITG angegeben werden. Wenn ITG-PASCAL sich auf der
  174. Festplatte C: im Verzeichnis \ITG befindet, muß dazu in der AUTOEXEC.BAT oder
  175. in einer anderen Batch-Datei, mit der ITG-PASCAL gestartet wird, die Anweisung
  176. "SET ITG=C:\ITG" stehen. Für andere Laufwerke und andere Verzeichnisse ist
  177. entsprechend zu verfahren. Wenn die Environment-Variable ITG nicht existiert,
  178. sucht ITG-PASCAL in dem Verzeichnis, in dem sich ITG.EXE befindet.
  179.  
  180. ITG-PASCAL kann dazu veranlaßt werden, beim Start auf ein bestimmtes Laufwerk
  181. und ein bestimmtes Verzeichnis zuzugreifen, damit Schüler auf ihre
  182. gespeicherten Programme ohne Laufwerks- und Verzeichniswechsel zugreifen
  183. können. Dazu gibt es zwei Möglichkeiten :
  184.     1) Vor dem Start von ITG-PASCAL wird die Environment-Variable USERPFAD mit
  185.     Laufwerk und Pfad gesetzt.   Beispiel : SET USERPFAD=D:\ITG\BSP\USER1
  186.     2) ITG-PASCAL wird mit dem Parameter USERPFAD=Pfadangabe gestartet.
  187.     Beispiel : ITG USERPFAD=D:\ITG\BSP\USER1
  188.  
  189. Folgende Dateien werden benötigt :
  190.  
  191. 1) Standard-Version
  192.     ITG.EXE       : Entwicklungsumgebung mit Compiler und Interpreter
  193. oder / und
  194. 2) Overlay-Version
  195.     ITG-OVR.EXE   : Entwicklungsumgebung mit Compiler und Interpreter für
  196.                     Computer mit Festplatte, EMS oder schnellem Netzwerk,
  197.                     benötigt ITG.OVR
  198.     ITG.OVR       : Overlay-Datei zu ITG-OVR.EXE (enthält Teile der
  199.                     Entwicklungsumgebung)
  200. oder / und
  201. 3) Protected-Mode-Version
  202.     ITGX.EXE      : Entwicklungsumgebung mit Compiler und Interpreter für
  203.                     Computer mit 286-, 386(SX/DX)- oder 486(SX/DX)-CPU
  204.                     und mindestens 2MB Hauptspeicher. Der größte freie
  205.                     Speicher steht zur Verfügung, wenn kein Treiber für die
  206.                     Verwaltung des EXTENDED-/ EXPANDED-Memory
  207.                     geladen wurde.
  208.     RTM.EXE       : Protected-Mode-Interface, nötig für die Speicherverwaltung
  209.                     und die Schnittstelle zwischen ITGX.EXE und DOS
  210.     DPMI16BI.OVL  : Overlay-Datei dazu
  211.  
  212.     ITG.HLP       : Online-Hilfe (Textdatei)
  213.                     Änderungen durch den Benutzer sind möglich
  214.     ITG.NDX       : Online-Hilfe (Index-Datei)
  215.     ITG.SYN       : enthält die vom Benutzer definierten Synonyme
  216.     LIZENZ.ITG    : enthält den Lizenznehmer
  217.     ITG.CFG       : Datei mit den Steuercodes des Druckers und den Bildschirm-
  218.                     Attributen
  219.  
  220. #FF
  221. Diese Dateien werden nicht unbedingt benötigt :
  222.  
  223.     PROGRAMM.TXT  : In dieser Datei ist der Programmrumpf enthalten, der bei
  224.                     einem neuen Programm automatisch geladen wird.
  225.     EDIT.MAC      : enthält die Tastatur-Makros des Editors. Diese Datei wird
  226.                     beim Starten von ITG.EXE (ITG-OVR.EXE) geladen.
  227.     HELPCOMP.EXE  : erzeugt die Index-Datei ITG.NDX zu ITG.HLP. Wenn
  228.                     Änderungen in ITG-HLP.TXT vorgenommen wurden, müssen
  229.                     mit HELPCOMP eine neue Hilfe- und eine neue Index-Datei
  230.                     erstellt werden.
  231.     ITG-CFG.EXE   : Konfigurationsprogramm zum Bearbeiten der Datei ITG.CFG
  232.     RUN.EXE       : Interpreter für die Ausführung von PRG-Dateien
  233.     RUNX.EXE      : Protected-Mode-Version des Interpreters für die Ausführung
  234.                     von PRG-Dateien
  235.  
  236. Die mitgelieferten Beispielprogramme können auch einem anderen Verzeichnis
  237. untergebracht werden.
  238.  
  239.  
  240. #FF
  241. Einführung
  242.  
  243. In diesem Abschnitt soll gezeigt werden, wie im Unterricht über den Direktmodus
  244. ein Programm erstellt wird, das anschließend unter Ausnutzung der Eigenschaften
  245. von ITG-PASCAL schrittweise mit einer Wiederhol-Schleife versehen wird, wie mit
  246. dem Debugger Variableninhalte verfolgt werden und Speicherung der Inhalte auf
  247. dem Stack gezeigt wird.
  248.  
  249.  
  250. Igel-Grafik im Direktmodus
  251.  
  252. Nach dem Starten von ITG-PASCAL mit "ITG" erscheint das Eröffnungsbild, von dem
  253. aus man durch Drücken einer beliebigen Taste zu dem Menüpunkt "File / Datei
  254. laden" gelangt. Durch zweimaliges Drücken der Pfeiltaste "Cursor nach rechts"
  255. kommt man in das Menü "Run", durch dreimaliges Drücken der Pfeiltaste "Cursor
  256. nach unten" erreicht man den Unterpunkt "Igel-Grafik", der durch "RETURN"
  257. aktiviert wird. Es erscheint die Frage, ob die Eingaben im Editor
  258. mitgeschrieben werden sollen. Wenn diese Frage mit JA ("J") beantwortet wird,
  259. was in diesem Fall geschehen sollte, damit das folgende Beispiel nachvollzogen
  260. werden kann, wird der eventuell im Editor vorhandene Text gelöscht. Falls
  261. Änderungen an diesem Text vorgenommen wurden, die noch nicht abgespeichert
  262. wurden, hat man vor dem Löschen aber noch die Möglichkeit, ihn auf Diskette zu
  263. speichern.  ITG-PASCAL schaltet jetzt in den Grafikmodus um und unterteilt den
  264. Bildschirm in zwei Fenster. In dem oberen Fenster erscheint in der Mitte der
  265. Igel (die Turtle) und zeigt nach oben, bei dem unteren handelt es sich wie in
  266. der Überschrift angegeben um das Eingabefenster, in dem die Anweisungen
  267. eingegeben werden, während sie in dem oberen ausgeführt werden.
  268.  
  269. Durch folgende Anweisungen, die ohne "1>", "2>" usw. eingegeben werden und
  270. durch "RETURN" ausgeführt werden erhält man schrittweise die darauf folgende
  271. Zeichnung.
  272.  
  273. Anweisungen :
  274.  
  275.  1> Vorne(100);
  276.  2> Rechts(90);
  277.  3> Vorne(100);
  278.  4> Rechts(90);
  279.  5> Vorne(200);
  280.  6> Rechts(90);
  281.  
  282. Zeichnung :
  283.  
  284.                ┌───────┐
  285.                │       │
  286.                │       │
  287.                │       │
  288.                        │
  289.                        │
  290.                        │
  291.                       <┘
  292.  
  293. Durch Drücken der Taste "ESC" verläßt man den Direktmodus. Jetzt wird der
  294. Menüpunkt "Editor / Programm-Text bearbeiten" angewählt ("Cursor nach links"
  295. und "RETURN"). Im Editor stehen die Anweisungen, die im Direktmodus der
  296. Igel-Grafik ausgeführt wurden ergänzt um den Programmrahmen eines
  297. Pascal-Programms und um die Anweisungen GrafikSchirm und TextSchirm.
  298.  
  299. #FF
  300. Programm-Listing :
  301.  
  302.  PROGRAM DirectModus;
  303.  
  304.  BEGIN
  305.    GrafikSchirm;
  306.    Vorne(100);
  307.    Rechts(90);
  308.    Vorne(100);
  309.    Rechts(90);
  310.    Vorne(200);
  311.    Rechts(90);
  312.    TextSchirm;
  313.  END.
  314.  
  315. Damit ist ein lauffähiges Pascal-Programm entstanden, ohne daß
  316. Programmstrukturen bekannt sein müssen. Mit der Taste "F2"  kann dieses
  317. Programm auf Diskette gespeichert werden, wobei der Dateiname noch geändert
  318. werden kann. Unter dem Menüpunkt "Run / Programm starten" kann dieses kleine
  319. Programm beliebig oft wiederholt werden.
  320.  
  321. Durch viermaliges Wiederholen der im Direktmodus eingegebenen Anweisungen
  322. entsteht folgendes Bild :
  323.  
  324.                ┌───────┬───────┐
  325.                │       │       │
  326.                │       │       │
  327.                ^       │       │
  328.                ├───────┼───────┤
  329.                │       │       │
  330.                │       │       │
  331.                │       │       │
  332.                └───────┴───────┘
  333.  
  334. Das vorliegende Programm soll jetzt so abgewandelt werden, daß die Anweisungen
  335. innerhalb einer Schleife viermal wiederholt werden. Dazu wird die
  336. REPEAT-UNTIL-Schleife verwendet. Dieses Beispiel wird bewußt schrittweise
  337. eingeführt, damit die Schüler aus ihren Anfangsfehlern mit Unterstützung des
  338. Compilers, des Hilfesystems und des Unterrichtenden lernen und erfahren, wie
  339. sie möglichst selbständig ein fehlerfrei arbeitendes Programm erstellen können.
  340.  
  341.  
  342. Einführung einer Schleife
  343.  
  344. In der mitgelieferten Synonym-Datei ITG.SYN sind für REPEAT und UNTIL die
  345. alternativen Bezeichner WIEDERHOLE und BIS aufgeführt. Dadurch kann für den
  346. Schleifenkopf sowohl REPEAT als auch WIEDERHOLE verwendet werden.
  347. Entsprechendes gilt für UNTIL und BIS. Die Synonym-Datei ist eine Datei im
  348. ASCII-Format, in der zu jedem Standardbezeichner von ITG-PASCAL eine
  349. Alternative definiert werden kann. Damit können die Bezeichner weitgehend
  350. eigenen Wünschen angepaßt werden.
  351.  
  352. Durch Einfügen des Schleifenkopfes und des Schleifenendes ergibt sich als
  353. Listing :
  354.  
  355.  
  356. #FF
  357.  PROGRAM DirectModus;
  358.  
  359.  BEGIN
  360.    GrafikSchirm;
  361.    Wiederhole
  362.      Vorne(100);
  363.      Rechts(90);
  364.      Vorne(100);
  365.      Rechts(90);
  366.      Vorne(200);
  367.      Rechts(90);
  368.    Bis Zähler = 4;
  369.    TextSchirm;
  370.  END.
  371.  
  372. Mit "F9" als Hot-Key kann direkt aus dem Editor heraus compiliert werden. In
  373. dem obigen Beispiel wird der Compiler auf dem "Z" von "Zähler" stehenbleiben
  374. und in der obersten Zeile des Editors die Fehlermeldung "nicht definierter
  375. Bezeichner" ausgeben. Über "F1" kann man Informationen zu diesem Fehler und
  376. seinen möglichen Abhilfen bekommen. In diesem Beispiel werden drei denkbare
  377. Fehlerursachen aufgezählt, von denen "Variable deklarieren" hell unterlegt ist.
  378. Zu diesem Stichwort gibt es weitere Hilfsinformationen, die mit "RETURN"
  379. angewählt werden können. Mit der Taste "Cursor nach unten" können weitere
  380. Stichworte der Hilfedatei gesucht werden. Falls eines vorhanden sein sollte,
  381. wird der entsprechende Begriff im Hilfefenster unterlegt. Die Hilfe wird mit
  382. "ESC" verlassen.
  383.  
  384. Unter "Variable deklarieren" wird gezeigt, in welcher Weise die Deklaration zu
  385. geschehen hat. Dieses soll nun auch in unserem Beispielprogramm geschehen.
  386.  
  387.  PROGRAM DirectModus;
  388.  
  389.  VAR
  390.    Zähler : GanzZahl; (* Synonym für INTEGER in ITG.SYN *)
  391.  
  392.  BEGIN
  393.    GrafikSchirm;
  394.    Wiederhole
  395.      Vorne(100);
  396.      Rechts(90);
  397.      Vorne(100);
  398.      Rechts(90);
  399.      Vorne(200);
  400.      Rechts(90);
  401.    Bis Zähler = 4;
  402.    TextSchirm;
  403.  END.
  404.  
  405. Durch "Strg-F9" wird das Programm aus dem Editor heraus gestartet. Der Compiler
  406. findet keine Fehler mehr und die Ausführung des Programms beginnt. Wie nicht
  407. anders zu erwarten ist, endet das Programm nicht. Durch genaues Hinsehen ist zu
  408. erkennen, daß der Igel kurzzeitig immer wieder an verschiedenen Stellen der
  409. Grafik erscheint. Mit "Strg-B" wird die Programm-Ausführung abgebrochen.
  410. Nach Drücken einer Taste erfolgt der Post-Mortem-Dump, in dem angezeigt wird,
  411. an welcher Stelle das Programm beendet wurde und welche Werte die gerade
  412. aktiven Variablen haben. Diese Informationen werden auch in das zweite
  413. Editorfenster geschrieben, daß man sich unter dem Menüpunkt
  414. "Editor-/Programm-/Fehler-Ausgabe ansehen" ansehen kann. Bei unserem Beispiel
  415. werden folgende Informationen ausgegeben :
  416.  
  417. #FF
  418.  Programm mit Strg-B in Zeile 9 beendet.
  419.  
  420.  9>     Vorne(100);
  421.                  ^Fehler-Position
  422.  
  423.  ZÄHLER            = 0
  424.  
  425. Wenn das Beispiel von mehreren Gruppen in der angegebenen Form bearbeitet wird,
  426. ist die Fehlermeldung in allen Fällen gleich. Das ist insofern zuerst etwas
  427. überraschend, weil die meisten Compiler, so auch TURBO-PASCAL, Variablen nicht
  428. initialisieren. In ITG-PASCAL erfolgt die Initialisierung aller globalen und
  429. lokalen Variablen Grundsätzlich mit dem Wert Null, sodaß eine Anweisung
  430. "Variable := 0" anfangs wegfallen kann. Grundsätzlich ist es aber ratsam,
  431. Variablen selbst zu initialisieren. Durch Einfügen einer Anweisung zur Erhöhung
  432. des Inhaltes von "Zähler" innerhalb der Schleife erreicht man ein Beendigung
  433. der Programm-Ausführung. ITG-PASCAL wartet anschließend solange, bis eine
  434. beliebige Taste gedrückt wird, damit man sich den Bildschirm noch in Ruhe
  435. ansehen kann.
  436.  
  437. korrigiertes Programm :
  438.  
  439.  PROGRAM DirectModus;
  440.  
  441.  VAR
  442.    Zähler : GanzZahl;
  443.  
  444.  BEGIN
  445.    GrafikSchirm;
  446.    Wiederhole
  447.      Vorne(100);
  448.      Rechts(90);
  449.      Vorne(100);
  450.      Rechts(90);
  451.      Vorne(200);
  452.      Rechts(90);
  453.      Erhöhe(Zähler);  (* Synonym für INC *)
  454.    Bis Zähler = 4;
  455.    TextSchirm;
  456.  END.
  457.  
  458. #FF
  459. Einführung von parameterlosen Prozeduren
  460.  
  461. Mit Hilfe des Direkt-Modus ist es möglich, ITG-PASCAL Anweisungsfolgen lernen
  462. zu lassen, sodaß diese Anweisungsfolgen anschließend durch Aufruf ihres Namens
  463. wiederholt werden können. Lernsequenzen werden entsprechend der Definition von
  464. PASCAL intern als Prozeduren behandelt. Wie dabei zu verfahren ist, soll an dem
  465. folgenden Beispiel erklärt werden.
  466.  
  467.                ┌───────┬───────┐
  468.                │       │       │
  469.                │       │       │
  470.                │       │       │
  471.                ├───────┼───────┤
  472.                │       │       │
  473.                │       │       │
  474.                │       │       │
  475.                └───────┴───────┘
  476.  
  477. Die obige Figur ist aus vier kleinen Quadraten zusammengesetzt. Dementsprechend
  478. besteht eine Möglichkeit des Zeichnens dieser Figur darin, viermal jeweils
  479. eines der kleinen Quadrate zeichnen zu lassen. Dazu wechselt man in das
  480. Untermenü RUN und wählt den Unterpunkt "Igel-Grafik fortsetzen", wenn sich noch
  481. kein Programm im Editor befindet, wie es z.B. gleich nach dem Start von
  482. ITG-PASCAL der Fall ist. Andernfalls ist "Igel-Grafik (neues Programm)" zu
  483. wählen.
  484.  
  485. Zur Einleitung einer Lernsequenz dient der Bezeichner "Lerne", dem ein
  486. Leerzeichen und ein Name für die Lernsequenz folgen müssen. Beendet wird die
  487. Lernsequenz durch den Bezeichner "Ende", ein Leerzeichen und denselben Namen.
  488. Dabei ist zu beachten, daß der Name mit einem Buchstaben oder einem Unterstrich
  489. beginnt. Ab dem zweiten Zeichen dürfen auch Ziffern verwendet werden. Wir
  490. wählen für den Namen "Quadrat" und geben die Anweisungen der linken Spalte ein.
  491. Rechts stehen jeweils Erläuterungen dazu.
  492.  
  493. Eingabe der Anweisungsfolge
  494.  
  495. Eingaben        Erläuterungen dazu
  496.  
  497. Lerne Quadrat   der Bildschirm wird gelöscht und der Igel wird gezeichnet
  498. Vorne(100)      Igel 100 Schritte vorwärts
  499. Rechts(90)      Igel um 90° im Uhrzeigersinn drehen
  500. Vorne(100)      jetzt das Eingabefeld mit der Cursortaste auf Vorne(100) und Return
  501. Rechts(90)      auf Rechts(90) und Return
  502. Vorne(100)
  503. Rechts(90)
  504. Vorne(100)      das Quadrat ist geschlossen
  505. Ende Quadrat    die Lernsequenz ist beendet, der Bildschirm wird gelöscht
  506.  
  507. Lerne VierQuadrate  neue Lernsequenz einleiten
  508. Quadrat             1.Quadrat zeichnen
  509. Quadrat             2.Quadrat zeichnen
  510. Quadrat             3.Quadrat zeichnen
  511. Quadrat             4.Quadrat zeichnen und fertig
  512. Ende Quadrat        Bildschirm löschen
  513.  
  514. VierQuadrate        nacheinander werden alle vier Quadrate gezeichnet
  515.  
  516. Der Direktmodus wird durch ESC verlassen und es wird auf "Programm-Text
  517. bearbeiten" in dem Untermenü EDITOR gewechselt. Im Editor steht das folgende
  518. #FF
  519. Programm, das durch die Lernsequenzen und die Anweisungen gebildet wird. Wie
  520. schon beschrieben sind die Lernsequenzen als Prozeduren gespeichert.
  521.  
  522. PROGRAM DirectModus
  523.  
  524.   PROCEDURE Quadrat;
  525.   BEGIN
  526.     Vorne(100);
  527.     Rechts(90);
  528.     Vorne(100);
  529.     Rechts(90);
  530.     Vorne(100);
  531.     Rechts(90);
  532.     Vorne(100);
  533.   END;
  534.  
  535.   PROCEDURE VierQuadrate;
  536.   BEGIN
  537.     Quadrat;
  538.     Quadrat;
  539.     Quadrat;
  540.     Quadrat;
  541.   END;
  542.  
  543. BEGIN
  544.   GrafikSchirm;
  545.   VierQuadrate;
  546.   TextSchirm;
  547. END.
  548.  
  549. Korrektur falscher Anweisungen
  550.  
  551. Wenn in einer Anweisungsfolge wie z.B. in einer Lernsequenz eine falsche
  552. Anweisung oder eine Anweisung mit falsche Parametern gegeben wurde, die von der
  553. Syntax her richtig war und deshalb von ITG-PASCAL ausgeführt wurde, dann läßt
  554. sie sich auf einfache Weise durch Drücken der Tastenkombination Strg-R
  555. rückgängig machen. Gelöscht wird jeweils die letzte Anweisung in der Liste und
  556. alle davorstehenden werden erneut ausgeführt, damit richtig fortgesetzt werden
  557. kann. Durch mehrfaches Drücken von Strg-R lassen sich auch mehrere Anweisungen
  558. löschen. Diese Korrekturmöglichkeit gestattet auf einfache Weise die Erstellung
  559. von Prozeduren bevorzugt für Grafik / Igel-Grafik, wobei jeweils zu erkennen
  560. ist, ob die letzte Anweisung zum Ziel führt oder nicht.
  561.  
  562. Beispiel :
  563.  
  564. eingegeben wurde
  565.  
  566. Vorne(100)
  567. Rechts(90)
  568. Rechts(90)
  569. Vorne(100)
  570.  
  571. statt
  572.  
  573. Vorne(100)
  574. Rechts(90)
  575. Vorne(100)
  576. Rechts(90)
  577.  
  578. #FF
  579. Da die beiden letzten Anweisungen in der falschen Reihenfolge stehen, müssen
  580. beide gelöscht und neu eingegeben werden. Es ist also zweimal die
  581. Tastenkombination Strg-R zu drücken. Anschließend kann mit "Vorne(100)" und
  582. "Rechts(90)" fortgesetzt werden.
  583.  
  584.  
  585. Einführung von Prozeduren mit einem Parameter
  586.  
  587. Wenn Qaudrate mit verschiedenen Seitenlängen gezeichnet werden sollen, dann muß
  588. der Prozedur der Wert der Seitenlänge als Parameter übergeben werden. Dazu
  589. folgt dem Prozedurnamen eine Klammer mit dem Variablennamen, einem
  590. Gleichheitszeichen und einem Wert (einer Konstanten), den ITG-PASCAL während
  591. des Lernens als Wert der Variablen nimmt und aus dem ITG-PASCAL den Typ der
  592. Variablen für die Deklaration im Prozedurkopf entnimmt. Deshalb ist es wichtig,
  593. für Variablen des Typs REAL immer einen Dezimalpunkt mit einer weiteren Ziffer
  594. und für Variablen des Typs STRING immer eine Zeichenkette mit mindestens zwei
  595. Zeichen zu verwenden.
  596.  
  597. Beispiel :
  598.     Lerne Quadrat(Seitenlänge=100);
  599.         wird zu
  600.     PROCEDURE Quadrat(Seitenlänge:INTEGER);
  601.  
  602.     Lerne Quadrat(Seitenlänge=100.0);
  603.         wird zu
  604.     PROCEDURE Quadrat(Seitenlänge:REAL);
  605.  
  606. Eingabe der Anweisungsfolge
  607.  
  608. Eingaben                          Erläuterungen dazu
  609.  
  610. Lerne Quadrat(Seitenlänge=100);   Lernsequenz beginnen
  611. Vorne(Seitenlänge);               Igel bewegt sich 100 Schritte vorwärts
  612. Rechts(90);
  613. Vorne(Seitenlänge);
  614. Rechts(90);
  615. Vorne(Seitenlänge);
  616. Rechts(90);
  617. Vorne(Seitenlänge);
  618. Ende Quadrat                      Lernsequenz beenden, Bildschirm löschen
  619.  
  620. Quadrat(100);                     Quadrat der Seitenlänge 100 zeichnen
  621. Quadrat(50);                      Quadrat der Seitenlänge 50 zeichnen
  622.  
  623. Im Editor steht dann folgendes Programm :
  624.  
  625. PROGRAM DirectModus;
  626.  
  627.   PROCEDURE Quadrat(Seitenlänge:INTEGER);
  628.   BEGIN
  629.     Vorne(Seitenlänge);
  630.     Rechts(90);
  631.     Vorne(Seitenlänge);
  632.     Rechts(90);
  633.     Vorne(Seitenlänge);
  634.     Rechts(90);
  635.     Vorne(Seitenlänge);
  636.   END;
  637.  
  638. #FF
  639. BEGIN
  640.   GrafikSchirm;
  641.   Quadrat(100);
  642.   Quadrat(50);
  643.   TextSchirm;
  644. END.
  645.  
  646.  
  647. Einführung von Prozeduren mit mehreren Parametern
  648.  
  649. Wenn Quadrate mit verschiedenen Seitenlängen an verschiedenen Orten und mit
  650. verschiedenen Winkeln zur x-Achse gezeichnet werden sollen, dann müssen der
  651. Prozedur Quadrate vier Parameter (zwei für den Ort, einer für den Winkel und
  652. einer für die Seitenlänge) übergeben werden. Die einzelnen Parameter können
  653. dann durch eine Komma wie bei der Parameterübergabe beim Prozeduraufruf oder
  654. mit einem Semikolon wie bei der Prozedurdeklaration getrennt werden.
  655.  
  656. Beispiele :
  657.     Lerne Quadrat(x=100,y=50,Winkel=45.0,Seitenlänge=150.0);  oder
  658.     Lerne Quadrat(x=100;y=50;Winkel=45.0;Seitenlänge=150.0);
  659.         werden zu
  660.     PROCEDURE Quadrat(x:INTEGER;y:INTEGER;Winkel:REAL;Seitenlänge:REAL);
  661.  
  662. Eingabe der Anweisungsfolge
  663.  
  664. Lerne Quadrat(x=100;y=50;Winkel=45.0;Seitenlänge=150.0);
  665. GeheNach(x,y);
  666. DreheAuf(Winkel);
  667. Vorne(Seitenlänge);
  668. Rechts(90);
  669. Vorne(Seitenlänge);
  670. Rechts(90);
  671. Vorne(Seitenlänge);
  672. Rechts(90);
  673. Vorne(Seitenlänge);
  674. Ende Quadrat
  675.  
  676. Quadrat(-50,-25,30,100);      Quadrat zeichnen
  677. Quadrat(-70,40,12.5,37.5);    Quadrat zeichnen
  678.  
  679. Im Editor steht dann folgendes Programm :
  680.  
  681. PROGRAM DirectModus;
  682.  
  683.   PROCEDURE Quadrat(x:INTEGER;y:INTEGER;Winkel:REAL;Seitenlänge:REAL);
  684.   BEGIN
  685.     GeheNach(x,y);
  686.     DreheAuf(Winkel);
  687.     Vorne(Seitenlänge);
  688.     Rechts(90);
  689.     Vorne(Seitenlänge);
  690.     Rechts(90);
  691.     Vorne(Seitenlänge);
  692.     Rechts(90);
  693.     Vorne(Seitenlänge);
  694.   END;
  695.  
  696. #FF
  697. BEGIN
  698.   GrafikSchirm;
  699.   Quadrat(-50,-25,30,100);
  700.   Quadrat(-70,40,12.5,37.5);
  701.   TextSchirm;
  702. END.
  703.  
  704. #FF
  705.  
  706. Benutzung des Debuggers
  707.  
  708. Am Beispiel der rekursiv programmierten Fakultätsberechnung soll in diesem
  709. Abschnitt die Benutzung des Debuggers gezeigt werden. Das Listing des Programms
  710. folgt weiter unten.
  711.  
  712. Die Ausgabe der Debug-Informationen wird durch die Anweisung DebugEin im
  713. Quelltext des Programms gestartet. Ab diesem Zeitpunkt werden nach jeder
  714. ausgeführten Quelltextzeile alle durch ein in der Deklaration vorangestelltes
  715. "!" markierten Variablen mit ihrem Wert und der Quelltextzeile angezeigt, bis
  716. die Anweisung DebugAus ausgeführt wird. Die lokalen Variablen der aktiven
  717. Funktion stehen links in der Zeile, in der die Bezeichner der Variablen und
  718. ihre Inhalte ausgegeben werden. Jedes "|" kennzeichnet eine weitere aktive
  719. Funktion. Am Schluß folgen schließlich die globalen Variablen des Programms.
  720. Diese Zusammenhänge werden im folgenden Beispiel noch genauer beschrieben.
  721.  
  722. Zusätzlich zur Anzeige auf dem Bildschirm werden alle Informationen in ein
  723. zweites Editor-Fenster geschrieben, sofern genügend Speicherplatz zur Verfügung
  724. steht, und können nach Beendigung des Programms unter "Editor /
  725. Programm-/Fehler-Ausgabe ansehen" betrachtet und gegebenenfalls auch mit
  726. "Blockschreiben" auf Diskette gespeichert werden.
  727.  
  728.  PROGRAM Fakultät;
  729.    VAR
  730.      !n, !m : INTEGER;
  731.      FUNCTION Fak(!n : GanzZahl) : INTEGER;
  732.        VAR
  733.          !f : INTEGER;
  734.            (* f wird hier benutzt, weil Funktionsergebnisse sonst nicht angezeigt
  735.           werden. *)
  736.      BEGIN
  737.        IF n > 1 THEN BEGIN
  738.          f := n * Fak(n-1);
  739.        END
  740.        ELSE BEGIN
  741.          f := 1;
  742.        END;
  743.        Fak := f;
  744.      END;
  745.  
  746.    BEGIN
  747.      n := 3;
  748.      Write('Berechnung von n!  n = ');
  749.      ReadLn(n);
  750.      DebugEin;
  751.         (* Nur während der rekursiven Funktionsaufrufe werden die Inhalte der
  752.         Variablen angezeigt. Dabei ist die Rekursionsstufe zu erkennen, wie im
  753.         folgenden Beispiel für 3! gezeigt wird. *)
  754.      m := Fak(n);
  755.      DebugAus;
  756.      WriteLn(n, '!=', m);
  757.    END.
  758.  
  759. Während des Programmablaufes wird der folgende Text ohne die eingefügten
  760. Erklärungen auf dem Bildschirm ausgegeben. Er kann auch nach Beendigung des
  761. Programms noch in einem zweiten Editorfenster angesehen werden, das im Menü
  762. über "Editor / Programm-/Fehler-Ausgabe ansehen" zu erreichen ist. In diesem
  763. Editorfenster werden alle Textausgaben des Programms einschließlich der
  764. Debug-Informationen mitgeschrieben, sofern genügend Speicherplatz zur Verfügung
  765. #FF
  766. steht. Weil der Post-Mortem-Dump unter Umständen über mehrere Bildschirmseiten
  767. erfolgt, ist dieses die einzige Möglichkeit alle Informationen in beliebiger
  768. Reihenfolge noch einmal in Ruhe anzusehen.
  769.  
  770. Die Ausgabe des Programms Fakultät auf dem Bildschirm:
  771.  
  772.    Berechnung von n!  n = 3
  773.            (* hier normale Textausgabe mit "WRITE" *)
  774.         IF n > 1 THEN BEGIN
  775.     10> F = 0 N = 3 | M = 0 N = 3
  776.                         ^ Globale Variablen stehen immer am Ende der Liste nach dem
  777.                            letzten "|".
  778.          ^ Lokale Variablen führen die Liste vor dem letzten "|" an. Die Variablen der
  779.            gerade aktiven Prozedur / Funktion stehen ganz links, danach folgen die
  780.            Variablen der Prozedur / Funktion, die aus der gerade aktiven aufgerufen
  781.            wurde usw. bis zu den globalen Variablen. Hier stehen in diesem Fall die
  782.            Variablen des ersten Aufrufs der Funktion "Fak".
  783.         IF n > 1 THEN BEGIN
  784.     10> F = 0 N = 2 | F = 0 N = 3 | M = 0 N = 3
  785.                                        ^ globale Variablen
  786.                         ^ erster Aufruf von "Fak"
  787.          ^ zweiter Aufruf von "Fak"
  788.         f := 1;
  789.     14> F = 1 N = 1 | F = 0 N = 2 | F = 0 N = 3 | M = 0 N = 3
  790.                                                       ^global
  791.                                        ^ erster Aufruf von "Fak"
  792.                         ^ zweiter Aufruf von "Fak"
  793.          ^ dritter Aufruf von "Fak"
  794.           Jetzt ist n = 1. Damit werden die rekursiven Aufrufe beendet und es geht
  795.           rückwärts.
  796.         Fak := f;
  797.     16> F = 1 N = 1 | F = 0 N = 2 | F = 0 N = 3 | M = 0 N = 3
  798.         f := n * Fak(n-1);
  799.     11> F = 2 N = 2 | F = 0 N = 3 | M = 0 N = 3
  800.         Fak := f;
  801.     16> F = 2 N = 2 | F = 0 N = 3 | M = 0 N = 3
  802.         f := n * Fak(n-1);
  803.     11> F = 6 N = 3 | M = 0 N = 3
  804.         Fak := f;
  805.     16> F = 6 N = 3 | M = 0 N = 3
  806.         m := Fak(n);
  807.     24> M = 6 N = 3
  808.         3!=6
  809.  
  810. #FF
  811.  
  812. Die Bediener-Oberfläche
  813.  
  814. Die Bedieneroberfläche von ITG-PASCAL wurde weitgehend an TURBO-PASCAL 4.0-5.5
  815. angelehnt, um Schülern den Umstieg zu vereinfachen. Ebenso wurde die Bedienung
  816. des Editors und der Oberfläche einschließlich der Hot-Keys von TURBO-PASCAL
  817. übernommen, soweit sie für den Einsatz in der Schule nötig ist.
  818.  
  819. In Eingabefenstern wird das Fenster gelöscht, wenn als erstes ein Zeichen
  820. eingegeben wird, das im Editorfenster ausgedruckt wird. Bei Cursorbewegungen
  821. und anderen Tasten, die Funktionen im Editor auslösen, bleibt der Inhalt
  822. erhalten. Auf diese Weise können einzelne Zeichen eingegeben oder verändert
  823. werden. Standardmäßig erfolgt die Eingabe im Einfügemodus, der an dem kleinen
  824. Cursor zu erkennen ist. Mit der Taste <Einfg> kann in den Überschreibmodus
  825. gewechselt werden, der an dem großen Cursor zu erkennen ist. Ein erneutes
  826. Drücken der Taste <Einfg> führt zurück in den Einfügemodus.
  827.  
  828.  
  829. 1. FILE
  830.  
  831. In einigen Untermenüs von FILE sind Tasten während der Eingabe von gesperrt,
  832. die in Dateinamen nicht vorkommen dürfen, um zu verhindern, daß Programmtexte
  833. unter einem Namen abgespeichert werden, unter dem sie von DOS aus nicht mehr
  834. gelesen werden können.
  835.  
  836. Sofern Eingaben verlangt werden, kann die angewählte Aktion in jedem Unterpunkt
  837. mit ESC abgebrochen werden.
  838.  
  839. 1.1 neues Programm
  840.  
  841. Zuerst wird geprüft, ob sich ein Programmtext im Editor befindet, der nach der
  842. letzten Änderung noch nicht gespeichert wurde. Gegebenenfalls ist ein
  843. Abspeichern möglich (s. 1.3 Datei speichern). Anschließend wird mit "Dateiname
  844. : " nach dem Namen Programms gefragt. Dann gelangt man in den Editor, in den
  845. der Text der Datei PROGRAMM.TXT geladen wurde, sofern ITG-PASCAL eine Datei
  846. dieses Namens entweder auf der angemeldeten Laufwerk oder in dem in der
  847. Environmentvariablen ITG angegebenen Pfad gefunden hat. Andernfalls steht im
  848. Editor der Programmrumpf
  849.  
  850.  PROGRAMM NoName;
  851.  
  852.  VAR
  853.  
  854.  BEGIN
  855.  
  856.  END.
  857.  
  858. Achtung : Wenn dem neuen Programm der Name eines bereits existierenden
  859. Programms gegeben wird, so wird dieses ohne Warnung überschrieben.
  860.  
  861. Tip : Unter dem Namen PROGRAMM.TXT kann ein beliebig Programm geladen werden,
  862. daß sich in demselben Unterverzeichnis wie ITG.EXE oder auf dem angemeldeten
  863. Laufwerk im aktuellen Unterverzeichnis befindet.
  864.  
  865.  
  866. 1.2 Datei laden
  867.  
  868. Wie schon unter 1.1 neues Programm beschrieben, wird zuerst geprüft, ob ein
  869. Programmtext vorher noch gespeichert werden sollte.
  870.  
  871. #FF
  872. Dann wird mit "Dateiname : *.PAS" nach dem zu ladenden Programm-Text gefragt.
  873. Wenn in dem Dateinamen ein * oder ein ? ist, wird ein Auswahlmenü geöffnet, das
  874. alle Unterverzeichnisse, deren Namen in eckigen Klammern (z.B. [\ITG]) stehen
  875. und alle Dateinamen im aktuellen Unterverzeichnis in alphabetischer Reihenfolge
  876. enthält, auf die die vorgegebene Maske zutrifft. Mit den Cursortasten wird ein
  877. Balken auf die zu ladende Datei verschoben. Pfeile in der rechten unteren Ecke
  878. des Rahmens zeigen an, daß zusätzlich zu den angezeigten Dateien und
  879. Verzeichnisse noch weitere im Auswahlmenü enthalten sind. Mit RETURN wird der
  880. Name der Datei festgelegt, die jetzt in den Editor geladen wird. Anschließend
  881. wird automatisch in den Editor verzweigt.
  882.  
  883. Wenn ein Unterverzeichnis mit RETURN angwählt wurde, so wird das Vorgehen
  884. wiederholt wie im vorigen Absatz beschrieben.
  885.  
  886.  
  887. 1.3 Datei speichern
  888.  
  889. Es erscheint die Frage "Dateiname : ProgName.PAS", wobei ProgName.PAS der
  890. gewählte Dateiname ist. Jetzt kann entweder ein neuer Name eingegeben werden
  891. oder der alte wird beibehalten. Die Eingabe muß mit der Returntaste
  892. abgeschlossen werden. Während der Eingabe sind alle Zeichen gesperrt, die nicht
  893. in DOS-Dateinamen vorkommen dürfen.
  894.  
  895. Zur Sicherheit legt ITG-PASCAL wie andere Programme auch zuerst eine
  896. Sicherheitsdatei an, die den gewählten Namen mit der Endung .BAK statt .PAS
  897. trägt, wenn der Programmtext schon einmal unter diesem Namen abgespeichert
  898. wurde. Falls beim nachfolgenden Abspeichern etwas schiefgehen sollte, ist immer
  899. noch der zuletzt abgespeicherte Zustand vorhanden. Gegebenenfalls könnte diese
  900. Datei geladen werden, indem ihr Name mit der Endung .BAK beim Laden eingeben
  901. wird. Beim Abspeichern sollte aber wieder die Endung .PAS gewählt werden.
  902.  
  903. Wenn die Umbenennung der alten Programmdatei erfolgreich verlaufen ist oder
  904. wenn ein neuer Dateiname gewählt wurde, wird der Programmtext unter dem
  905. gewählten Namen abgespeichert.
  906.  
  907.  
  908. 1.4 Datei drucken
  909.  
  910. Der Programmtext, der im Editor steht, kann auf diese Weise gedruckt werden.
  911. Dabei ist es möglich, die Programmzeilen numerieren zu lassen, wenn die Frage
  912. "Zeilen numerieren (j/n):" mit "j" oder "J" beantwortet wird.
  913.  
  914. ITG-PASCAL sendet keine Steuerzeichen an den Drucker. Wenn Schmalschrift
  915. gewünscht wird, weil die Zeilenlänge größer als 80 Zeichen ist, muß die
  916. Einstellung vor Beginn des Druckvorgangs am Drucker vorgenommen werden.
  917.  
  918.  
  919. 1.5 BAK-Dateien löschen
  920.  
  921. Wie unter 1.3 Datei speichern beschrieben, wird bei jedem Abspeichern des
  922. Programmtextes eines Datei gleichen Namens mit der Erweiterung .BAK angelegt.
  923. Falls diese Dateien nicht mehr benötigt werden, können sie unter diesem
  924. Menüpunkt gelöscht werden.
  925.  
  926. Achtung : Es werden alle Dateien mit der Erweiterung .BAK im aktuellen
  927. Unterverzeichnis gelöscht. Abbruch und selektives Löschen sind nicht möglich.
  928.  
  929.  
  930. #FF
  931. 1.6 Inhaltsverzeichnis
  932.  
  933. Es wird ein Inhaltsverzeichnis des aktuellen Verzeichnisses angezeigt, das alle
  934. Dateien enthält, die der angegebenen Maske entsprechen. Damit andere
  935. Verzeichnisse eingesehen werden können, muß mit Pfad wechseln erst in das
  936. gewechselt werden.
  937.  
  938. Mit "Zeige alle Dateien C:\ITG\*.*" wird gefragt, welche Dateien in dem
  939. Unterverzeichnis C:\ITG angezeigt werden sollen.
  940.  
  941. Beispiele :
  942.    *.*           zeigt alle Dateien
  943.    *.PAS         zeigt alle Dateien mit der Erweiterung .PAS
  944.   I*.PAS         zeigt alle Dateien, die mit dem Buchstaben I beginnen und die
  945.                  Erweiterung .PAS haben
  946.  
  947.  
  948. 1.7 Pfad wechseln
  949.  
  950. In einem Auswahlmenü werden alle Unterverzeichnisse und das übergeordnete
  951. Verzeichnis[..] angezeigt, wobei der Name des angewählten Verzeichnisses in dem
  952. Rahmen oberhalb der Liste steht. Mit den Cursortasten wird der
  953. Markierungsbalken auf das gewünschte Verzeichnis verschoben. Der Wechsel
  954. erfolgt mit RETURN. Wenn das gewünschte Verzeichnis erreicht wurde, ist das
  955. Auswahlmenü mit ESC zu verlassen.
  956.  
  957.  
  958. 1.8 Laufwerk wechseln
  959.  
  960. Es wird ein Auswahlmenü geöffnet, in dem durch Drücken einer Taste mit dem
  961. Laufwerksbuchstaben (z.B. "b" oder "B" für Laufwerk B:) oder das Verschieben
  962. des Leuchtbalkens auf das Laufwerk mit den Cursortasten und anschließendes
  963. RETURN auf das gewünschte Laufwerk gewechselt wird. Möglich sind die Laufwerke
  964. A: bis I:.
  965.  
  966. Achtung : Leider bietet DOS keine dokumentierte Möglichkeit, zu prüfen, welche
  967. Laufwerke zur Verfügung stehen. Deshalb gibt es bei Fehlwahl die unter DOS
  968. üblichen Probleme, die aber von ITG-PASCAL aufgefangen und dem Benutzer bei
  969. Fehlzugriffen auf ein Laufwerk angezeigt werden.
  970.  
  971.  
  972. 1.9 Makros laden
  973.  
  974. Der Editor von ITG-PASCAL bietet die Möglichkeit, Makros (Tastenfolgen mit bis
  975. zu 100 Zeichen) durch eine Taste ausführen zu lassen (s. 2.1.3 Makro-Recorder).
  976. Beim Start von ITG-PASCAL wird die Makro-Datei EDIT.MAC automatisch geladen.
  977. Wenn eine andere Makro-Datei gewünscht wird, erfolgt das Laden wie unter 1.2
  978. Datei laden beschrieben, mit dem Unterschied, daß Makro-Dateien immer die
  979. Erweiterung .MAC tragen.
  980.  
  981.  
  982. 1.10 Makros speichern
  983.  
  984. Wenn Makros mit dem Makro-Recorder erzeugt wurden, sollten sie unter diesem
  985. Menüpunkt mit der Erweiterung .MAC abgespeichert werden.
  986.  
  987. Achtung : Das Abspeichern der Makros erfolgt nicht automatisch und es wird beim
  988. Verlassen von ITG-PASCAL auch nicht geprüft, ob Makros verändert und noch nicht
  989. abgespeichert wurden.
  990.  
  991.  
  992. #FF
  993. 1.11 OS-Shell
  994.  
  995. Wenn genügend Speicher freigegeben werden kann, wird eine temporäre DOS-SHELL
  996. eingerichtet, aus der mit EXIT nach ITG-PASCAL zurückgekehrt werden kann, das
  997. einschließlich aller nötigen Daten im Speicher verblieben ist.
  998.  
  999. Diese Möglichkeit wurde vorgesehen, um z.B. Disketten formatieren zu können
  1000. oder um Dateien löschen zu können, die nicht mehr benötigt werden, ohne daß der
  1001. Programmtext verlorengeht, wenn es Probleme mit der Diskette gibt. Im
  1002. allgemeinen reicht der dann zur Verfügung stehende Speicherplatz aber nicht
  1003. aus, um größere Utilities zu starten.
  1004.  
  1005.  
  1006. 1.12 Ende
  1007.  
  1008. ITG-PASCAL wird beendet. Wenn sich im Editor ein Programmtext befindet, der
  1009. nach der letzten Änderung noch nicht abgespeichert wurde, wird danach gefragt,
  1010. ob der Text noch abgespeichert werden soll.
  1011.  
  1012. ITG-PASCAL kann außer aus einem laufenden Programm jederzeit über die
  1013. Tasten-kombination Alt-X beendet werden.
  1014.  
  1015. #FF
  1016.  
  1017. 2. EDITOR
  1018.  
  1019. 2.1 Programm-Text bearbeiten
  1020.  
  1021. Unter diesem Menüpunkt wird der Editor aufgerufen, in dem Programmtexte
  1022. eingegeben und verändert werden können.
  1023.  
  1024. Der Editor ist so gestaltet, daß seine Bedienung kompatibel zu dem
  1025. TURBO-PASCAL-Editor ist. Allerdings ist der Umfang der zur Verfügung stehenden
  1026. Befehle auf das nötige beschränkt. Zusätzlich ist aber noch ein Makro-Recorder
  1027. vorhanden, durch den durch Drücken einer Taste bis zu 100 Zeichen auf einmal in
  1028. den Programmtext eingefügt werden können.
  1029.  
  1030. 2.1.1 Editor-Befehle
  1031.  
  1032.  Pfeiltasten       : Cursor um ein Zeichen / eine Zeile in die Pfeilrichtung bewegen
  1033.  <- (BackSpace)    : Zeichen links vom Cursor löschen
  1034.  Entf              : Zeichen unter dem Cursor löschen
  1035.  ENTER             : Text rechts vom Cursor in eine neue Zeile schreiben / neue Zeile
  1036.                      beginnen. Diese Angaben gelten nur, wenn der Einfügemodus aktiv
  1037.                      ist.
  1038.                      Achtung : Im Überschreibmodus, der an dem größeren Cursor und
  1039.                      der Anzeige in der Statuszeile zu erkennen ist, erfolgt kein
  1040.                      Zeilenumbruch!
  1041.  Einfg             : zwischen Einfügen und Überschreiben umschalten. Sowohl am
  1042.                      Cursor als auch an der Statuszeile ist der aktivierte Modus
  1043.                      abzulesen :
  1044.                                        Cursor    Statusanzeige
  1045.                      Einfügen          klein      Einfügen
  1046.                      Überschreiben   groß       Überschreiben
  1047.  F1                : Hilfe zu ITG-PASCAL (s. EDITOR 2.1.2)
  1048.  Strg-F1           : Hilfe zum Editor. Diese Befehlsübersicht wird angezeigt.
  1049.  F2                : Sichern des Programmtextes auf  Diskette/Festplatte (s. FILE 1.2)
  1050.  F3                : Laden eines auf Diskette/Festplatte vorhandenen Programmtextes
  1051.                      (s. FILE 1.3)
  1052.  F9                : Compilieren des Programms (s. RUN 3.1)
  1053.  Strg-F9           : Starten des Programms (s. RUN 3.2)
  1054.  F10, ESC          : Verlassen des Editors, Wechsel ins Menü
  1055.  Strg-BildAuf      : Cursor auf den Textanfang setzen
  1056.  Strg-BildAb       : Cursor ans Textende setzen
  1057.  Strg-QF           : Suchen nach Zeichenfolgen im Text. In der obersten
  1058.                      Bildschirmzeile erscheint die Frage "Suchen : ". Die zu suchende
  1059.                      Zeichenfolge ist jetzt einzugeben und mit ENTER abzuschließen.
  1060.                      Anschließend wird nach den Suchoptionen gefragt "Optionen
  1061.                      (g/n/u/w/b) : ". Auch diese Eingabe ist mit ENTER abzuschließen.
  1062.                          Bedeutung der Optionen :
  1063.                          g : global / im ganzen Text suchen
  1064.                          n : nicht nachfragen beim Ersetzen
  1065.                          u : Groß- und Kleinschreibung nicht unterscheiden
  1066.                          w : nur ganze Worte suchen
  1067.                          b : ab der Cursorposition rückwärts suchen
  1068.                      Standardvorgabe beim Suchen ist :
  1069.                          - Suchen ab Cursorposition
  1070.                          - Berücksichtigen von Groß- und Kleinschreibung
  1071.                          - Suchen auch nach Wortteilen
  1072.  Strg-QA           : Suchen und Ersetzen von Zeichenfolgen im Text. Es wird nach
  1073. #FF
  1074.                      einer Zeichenfolge gesucht, die anschließend durch eine andere
  1075.                      ersetzt wird. Das Vorgehen entspricht dem unter "Suchen nach
  1076.                      Zeichenfolgen im Text" beschriebenen, zusätzlich wird als
  1077.                      zweites durch "Ersetzen durch:" nach der Zeichenfolge gefragt,
  1078.                      die die erste ersetzen soll. Wenn die Option n nicht gewählt
  1079.                      wurde, wird die gesuchte Zeichenfolge, sofern sie gefunden wurde,
  1080.                      auf dem Bildschirm hervorgehoben und es erscheint in der
  1081.                      obersten Bildschirmzeile die Frage "Ersetzen (j/n):". Wenn "j"
  1082.                      oder "J" wurde, wird ersetzt, bei "n" bzw. "N" nicht.
  1083.  Strg-L            : letztes Suchen bzw. Suchen/Ersetzen wiederholen. Wenn zuletzt
  1084.                      nach einer Zeichenfolge gesucht wurde, wird diese Suche mit den
  1085.                      eingegebenen Optionen wiederholt, andernfalls wird "Suchen und
  1086.                      Ersetzen" wiederholt.
  1087.  Strg-T            : Wort rechts vom Cursor löschen
  1088.  Strg-KB           : Blockanfang markieren
  1089.  Strg-KK           : Blockende markieren. Ein markierter Block, dessen Anfang vor
  1090.                      seinem Ende steht, wird durch eine invertierte Darstellung von
  1091.                      Zeichen und Hintergrund hervorgehoben.
  1092.  Strg-KH           : Blockmarkierung ein- / ausschalten. Die Hervorhebung eines
  1093.                      Blocks wird dadurch aufgehoben bzw. wieder ausgeführt.
  1094.  Strg-KC           : Block kopieren. Wenn ein Block mit Strg-KB und Strg-KK
  1095.                      markiert wurde, wird er an die Cursorposition kopiert. Der
  1096.                      Textblock bleibt an der ursprünglichen Position erhalten.
  1097.  Strg-KV           : Block verschieben. Wenn ein Block mit Strg-KB und Strg-KK
  1098.                      markiert wurde, wird er an die Cursorposition verschoben. Der
  1099.                      Textblock wird an der ursprünglichen Position gelöscht.
  1100.  Strg-KY           : Block löschen. Wenn ein Block mit Strg-KB und Strg-KK markiert
  1101.                      wurde, wird er gelöscht.
  1102.  Strg-KP           : Block drucken. Wenn ein Block mit Strg-KB und Strg-KK markiert
  1103.                      wurde, wird er auf dem Drucker ausgegeben.
  1104.  Strg-KW           : Block in eine Datei schreiben. Wenn ein Block mit Strg-KB und
  1105.                      Strg-KK markiert wurde, wird er in eine Datei geschrieben,
  1106.                      nachdem in der obersten Bildschirmzeile der Dateiname nach
  1107.                      "Block schreiben:" eingegeben wurde.
  1108.  Strg-KR           : Block aus einer Datei lesen. In der obersten Bildschirmzeile wird
  1109.                      mit "Block lesen:" nach dem Namen einer Textdatei gefragt, die
  1110.                      ab der Cursorposition in den Text eingefügt wird, wenn es eine
  1111.                      Textdatei unter diesem Namen gibt.
  1112.  
  1113.  
  1114. 2.1.2 Hilfesystem
  1115.  
  1116. ITG-PASCAL bietet ein Hilfesystem für alle PASCAL-Anweisungen, für
  1117. Fehlermeldungen des Compilers (F1) und für die Befehls-übersicht des Editors
  1118. (Strg-F1).
  1119.  
  1120. Mit der Tastenkombination Strg-F1 erhält man direkt die unter Befehlsübersicht,
  1121. die auch über das allgemeine Hilfesystem mit F1 zu erreichen ist.
  1122.  
  1123. Für alle PASCAL-Anweisungen bietet ITG-PASCAL mit F1 eine kontextsensitive
  1124. Hilfe, bei der zu einem Standard-Bezeichner oder seinem in der Synonym-Datei
  1125. deklarierten Synonym ein Hilfstext mit einer Erklärung der Prozedur/Funktion,
  1126. ihrer Deklaration und einem Beispielprogramm gezeigt wird, wenn der Cursor auf
  1127. einem der Standardbezeichner steht. Andernfalls erscheint eine Liste mit
  1128. Gliederungspunkten, unter denen weitere Informationen zu erhalten sind.
  1129.  
  1130. Innerhalb der Hilfe können Hilfstexte zu weiteren Stichworten durch Drücken der
  1131. RETURN-Taste angefordert werden, wenn das gewünschte Stichwort auf dem
  1132. Bildschirm invertiert ist. Mit den Cursortasten nach links bzw. rechts wird das
  1133. #FF
  1134. vorherige bzw. nächste Stichwort angewählt, für das eine Information vorhanden
  1135. ist. Die Cursortasten nach oben / unten überspringen mögliche weitere
  1136. Stichworte in der aktuellen Zeile. Zu etlichen Stichworten gibt es mehrere
  1137. Bildschirmseiten an Informationen. In diesen Fällen erscheinen auf dem unteren
  1138. rechten Rand des Rahmens um den Hilfstext die Angaben PgUp und/oder PgDn. Dann
  1139. kann mit den Tasten zwischen den einzelnen Seiten zu diesem Stichwort
  1140. geblättert werden. Das Hilfesystem wird mit ESC verlassen.
  1141.  
  1142. Wenn beim Compilieren ein Fehler gefunden wurde und in der obersten
  1143. Bildschirmzeile eine Fehlermeldung dazu steht, ergibt F1 eine ausführlicher
  1144. Beschreibung zu dem Fehler einschließlich möglicher Ursachen. Wegen der
  1145. Vielfältigkeit von Fehler-möglichkeiten muß die Beschreibung nicht genau auf
  1146. den aufgetretenen Fehler zutreffen.
  1147.  
  1148.  
  1149. 2.1.3 Makro-Recorder
  1150.  
  1151. Im Editor können Zeichenfolgen als Makros definiert werden. Auf diese Weise
  1152. lassen sich durch Drücken einer einzigen Taste bis zu 100 Zeichen auf einmal ab
  1153. der Cursorposition in den Text einfügen. Eine Übersicht über vorhandene Makros
  1154. erhält man durch die Tastenkombination Alt-F5.
  1155.  
  1156.  Beispiele:
  1157.    <Alt-P> : PROCEDURE
  1158.    <Alt-F> : FUNCTION
  1159.  
  1160. Diese Angaben bedeuten, daß durch Drücken der Tastenkombination Alt-P ein Makro
  1161. eingefügt wird, der einen Prozedurrahmen enthält.
  1162.  
  1163. Beim Start von ITG-PASCAL wird die Makro-Datei EDIT.MAC geladen, beim Verlassen
  1164. von ITG-PASCAL wird keine Makro-Datei abgespeichert.
  1165.  
  1166. Die Aufnahme eines Makros wird durch die Tastenkombination Strg-F5 gestartet.
  1167. Anschließend wird die Tastenkombination abgefragt, mit der dieses Makro
  1168. gestartet werden soll. Dann können bis zu 100 Tasten eingegeben werden. Die
  1169. Aufnahme wird durch Strg-F5 beendet. Jetzt wird ein Informationstext abgefragt,
  1170. der mit Alt-F5 angezeigt werden kann. (siehe auch Beispiele oben)
  1171.  
  1172.  Beispiel:
  1173.     Aufnahme des Prozedur-Makros Alt-P:
  1174.  
  1175.     1) Strg-F5 drücken                   Aufnahme starten
  1176.     2) Alt-P drücken                     Tastenkombination festlegen
  1177.     3) Text wie gewohnt eingeben
  1178.        PROCEDURE ;                       Durch Bewegen des Cursors auf das Semikolon
  1179.          VAR                             hinter PROCEDURE wird erreicht, daß der
  1180.                                          Cursor nachEinfügen des Makros an dieser
  1181.        BEGIN                             dieser Stelle stehen bleibt, damit der
  1182.                                          Prozedurname eingegeben werden kann.
  1183.        END;
  1184.     4) Strg-F5 drücken                   Aufnahme beenden
  1185.     5) Informationstext eingeben <ALT-P>: PROCEDURE : aussage-
  1186.                                          kräftigen Text mit Tastenkombination und
  1187.                                          Wirkung wählen!
  1188.  
  1189. Damit ist die Aufnahme beendet. Durch Alt-P kann der Text jetzt beliebig oft
  1190. eingefügt werden.
  1191.  
  1192. Ein Makro wird mit Strg-F6 gelöscht, indem im Anschluß die Makrotaste gedrückt
  1193. wird.
  1194. #FF
  1195.  Beispiel:
  1196.     1) Strg-F6           Löschen starten
  1197.     2) Alt-P             Tastenkombination Alt-P aus der Makroliste streichen
  1198.  
  1199.  
  1200. 2.2 Programm-/ Fehler-Ausgabe ansehen
  1201.  
  1202. Standardmäßig protokolliert ITG-PASCAL alle Read- und Write-Anweisungen sowie
  1203. den Post-Mortem-Dump und die vom Debugger ausgegebenen Variableninhalte in
  1204. einem zweiten Editorfenster mit, sofern noch genügend freier Speicherplatz
  1205. vorhanden ist. Die Protokollführung für die Read- und Write-Anweisungen kann
  1206. durch OhneProtokoll ausgeschaltet und durch MitProtokoll eingeschaltet werden.
  1207. Das Mitschreiben des Mortem-Dumps kann außer durch Speicherplatzmangel nicht
  1208. unterdrückt werden.
  1209.  
  1210. Dieses Protokoll kann unter diesem Menüpunkt eingesehen, verändert und als
  1211. Block auf Diskette/Festplatte geschrieben werden.
  1212.  
  1213. 2.3 Programm-Text formatieren
  1214.  
  1215. Weil Schüler Programmtexte oft linksbündig eingeben und Fehler in der
  1216. Programmstruktur dann schlecht zu finden sind, besteht unter diesem Menüpunkt
  1217. die Möglichkeit, die Struktur durch Einrücken optisch hervorzuheben. Jeder
  1218. Ausführungsteil einer Prozedur, einer Funktion und des Hauptprogramms wird um
  1219. zwei Zeichen nach rechts eingerückt. Das gleiche gilt für lokale Prozeduren und
  1220. Funktionen und für Schleifen und Verzweigungs-anweisungen.
  1221.  
  1222. Das Einrücken findet während eines Compilerlaufes statt. Deswegen wird das
  1223. Formatieren des Programmtextes auch bei einem Syntaxfehler im Programm
  1224. unterbrochen. Nach Beseitigung des Fehlers muß das Formatieren neu durchgeführt
  1225. werden, wenn auch der Rest des Programmtextes überarbeitet werden soll.
  1226.  
  1227.  
  1228. 2.4 automatische Variablen-Deklaration
  1229.  
  1230. Da Schüler besonders im Anfangsunterricht Probleme mit der
  1231. Variablen-Deklaration haben, ist die Möglichkeit vorhanden, die Deklarationen
  1232. je nach Fall vollautomatisch oder halbautomatisch-interaktiv vom Compiler in
  1233. den Quelltext einfügen zu lassen. Dazu erscheint beim haöbautomatischen
  1234. Einfügen in einem Fenster die noch nicht deklarierte Variable invers unterlegt
  1235. und rechts oben auf dem Bildschirm wird eine Liste der möglichen Typen in einem
  1236. Menü eingeblendet. Nach der Anwahl des gewünschten Typs wird die
  1237. Deklarationszeile immer lokal in der jeweiligen Prozedur / Funktion eingefügt.
  1238.  
  1239. #FF
  1240.  
  1241. 3. RUN
  1242.  
  1243.  
  1244. 3.1 Programm compileren
  1245.  
  1246. Das Programm wird auf Fehler geprüft und in eine Befehlsfolge übersetzt, die
  1247. vom Interpreter ausgeführt werden kann. Weil der Prozessor keine
  1248. PASCAL-Programme direkt versteht und ausführen kann, muß eine Übersetzung in
  1249. die Sprache des Prozessors (Maschinensprache) stattfinden. ITG-PASCAL erzeugt
  1250. keine direkten Maschinenspracheanweisungen, sondern einen Zwischencode (p-Code
  1251. oder Pseudo-Code), der von einem in Maschinensprache vorliegenden Interpreter
  1252. ausgeführt wird.
  1253.  
  1254. Dieser Menüpunkt ist enthalten, um die Abfrage nach dem Abspeichern des
  1255. Quelltextes zu umgehen, damit Programme mit mehreren Fehlern schneller
  1256. korrigiert werden können.
  1257.  
  1258.  
  1259. 3.2 Programm starten
  1260.  
  1261. Zuerst erfolgt bei geändertem Qelltext die Abfrage "NAME.PAS abspeichern
  1262. (j/n)?". Hier sind nur die Eingabe "j", "J" für Ja und "n", "N" für Nein
  1263. zugelassen.
  1264.  
  1265. Wenn die Frage mit Ja beantwortet wird, erscheint als nächstes die Frage
  1266. "Dateiname :". Jetzt kann entweder ein neuer Name eingegeben werden oder der
  1267. alte wird beibehalten. Die Eingabe muß mit der Returntaste abgeschlossen werden
  1268. (s. auch 1.3 Datei speichern).
  1269.  
  1270. Im Anschluß daran wird das Programm erst einmal compiliert (siehe auch 3.1
  1271. Compilieren), bevor es gestartet werden kann.
  1272.  
  1273. Ein laufendes Programm kann durch Drücken der Tastenkombination <Strg><B>
  1274. unterbrochen werden. Es erscheint dann das Breakpoint-Menü, unter dem
  1275. Variableninhalte eingesehen und verändert werden können und das Programm
  1276. fortgesetzt oder abgebrochen werden kann. Im Falle eines Abbruchs erfolgt
  1277. anschließend ein Post-Mortem-Dump, aus dem ersichtlich wird, wo das Programm
  1278. abgebrochen wurde und wie die Variablenbelegung war.
  1279.  
  1280.  
  1281. 3.3 Direkt-Modus (Text)
  1282.  
  1283. Im Direktmodus können alle Anweisungen, für die keine Variablendeklarationen
  1284. nötig sind, direkt ausgeführt werden. Unter diesem Punkt sind allerdings keine
  1285. Grafikanweisungen möglich. Dafür ist der Punkt "Igel-Grafik" zu wählen.
  1286.  
  1287. Vor dem Starten des Direktmodus erfolgt die Abfrage "Eingaben im Editor
  1288. mitschreiben (j/n)? ". Wenn diese Frage mit Ja beantwortet wird, stehen alle
  1289. Eingaben, die fehlerfrei erfolgen, anschließend im Editor und sind um den Rumpf
  1290. eines PASCAL-Programms ergänzt worden. Sie können unter dem Menüpunkt
  1291. "EDITOR/Programm-Text bearbeiten" eingesehen und verändert werden.
  1292.  
  1293. Achtung : Wenn die Eingaben im Editor mitgeschrieben werden sollen, wird der
  1294. alte Programmtext im Editor gelöscht. Falls es nach der letzten Änderung noch
  1295. nicht abgespeichert wurde, wird nachgefragt, ob das jetzt geschehen soll.
  1296.  
  1297. #FF
  1298. Im Direktmodus ist es auf sehr einfache und komfortable Weise möglich,
  1299. Prozeduren ohne und mit Parametern zu deklarieren (zu lernen). Die Lernsequenz
  1300. wird durch "Lerne Name" begonnen und durch "Ende Name" beendet. Für "Name" ist
  1301. dabei ein geeigneter Name zu verwenden wie es in der Einführung mit "Quadrat"
  1302. gezeigt wird. Die Lernsequenz ist dann im Programm unter einer gleichnamigen
  1303. Prozedur zu finden. Wenn eine Anweisung ausgeführt wurde, die nicht zu dem
  1304. gewünschten Ziel führt, kann sie durch Strg-R rückgängig gemacht werden. Die
  1305. Lernsequenz bzw. das Hauptprogramm laufen dann erneut vollständig ab und es
  1306. kann eine neue Anweisung eingegeben werden. Eine bereits beendete Prozedur kann
  1307. nur noch im Editor korrigiert werden.
  1308.  
  1309. Das Lernen von Prozeduren mit einem oder mehreren Parametern erfolgt durch
  1310. Angabe des Variablennamens, eines Gleichheitszeichens und des Wertes, der beim
  1311. Lernvorgang gültig sein soll. Mehrere Parameter können wahlweise durch ein
  1312. Komma wie bei der Variablenübergabe beim Prozeduraufruf oder durch ein
  1313. Semikolon wie bei der Prozedurdeklaration getrennt werden. ITG-PASCAL erkennt
  1314. aus dem Wert der Konstanten ihren Typ. Deshalb ist es wichtig, bei Parametern,
  1315. die vom Typ REAL sein sollen, eine REAL-Variable mit Dezimalpunkt und bei
  1316. STRING-Variablen eine Zeichenkette mit mindestens zwei Zeichen zu verwenden, da
  1317. sonst die Parameter als INTEGER- bzw. als CHAR-Variable angenommen werden.
  1318.  
  1319. Beispiele :
  1320.     Lerne Quadrat(Seitenlänge=100);
  1321.         wird zu
  1322.     PROCEDURE Quadrat(Seitenlänge:INTEGER);
  1323.  
  1324.     Lerne Quadrat(Seitenlänge=100.0);
  1325.         wird zu
  1326.     PROCEDURE Quadrat(Seitenlänge:REAL);
  1327.  
  1328.     Lerne Quadrat(x=100,y=50,Seitenlänge=30.0);
  1329.         oder
  1330.     Lerne Quadrat(x=100;y=50;Seitenlänge=30.0);
  1331.         werden zu
  1332.     PROCEDURE Quadrat(x:INTEGER;y:INTEGER;Seitenlänge:REAL);
  1333.  
  1334. Der Direktmodus wird durch Drücken der ESC-Taste verlassen.
  1335.  
  1336. Mit den Cursortasten kann die Eingabezeile innerhalb der schon vorhandenen
  1337. Anweisungszeilen aufwärts oder abwärts verschoben werden. Auf diese Weise
  1338. können schon einmal ausgeführte Anweisungen auf einfache Art wiederholt werden.
  1339.  
  1340. Die Funktionstaste F1 ruft das Hilfesystem auf.
  1341.  
  1342.  
  1343. 3.4 Igel-Grafik (neues Programm)
  1344.  
  1345. Für diesen Punkt gilt das gleiche wie für "Direkt-Modus (Text)" mit dem
  1346. einzigen Unterschied, daß jetzt zusätzlich alle Anweisungen im Grafikmodus
  1347. (Igel-Grafik und andere Grafik) ausgeführt werden können, die keinerlei
  1348. Deklarationen benötigen.
  1349.  
  1350.  
  1351. 3.5 Igel-Grafik fortsetzen
  1352.  
  1353. Dieser Menüpunkt unterscheidet sich vom vorhergehenden dadurch, daß keine
  1354. Abfragen erfolgen, ob die Eingaben im Editor mitgeschrieben werden sollen.
  1355. Außerdem wird das Programm, das sich im Editor befindet, ausgeführt. Nach der
  1356. letzten Anweisung wartet ITG-PASCAL im Eingabefenster auf weitere Anweisungen,
  1357. #FF
  1358. die dann ans das Hauptprogramm angehängt werden oder als Prozedur-Deklaration
  1359. eingefügt werden. Sonst gilt das gleiche wie unter den beiden vorhergehenden
  1360. Menüpunkten.
  1361.  
  1362.  
  1363. 3.6 PRG-File erzeugen
  1364.  
  1365. Wie schon unter 3.1 beschrieben erzeugt ITG-PASCAL keine direkt ausführbaren
  1366. Programme in Maschinensprache.  Ohne Quelltext ausführbare Programme werden so
  1367. erzeugt, daß eine Batchdatei PROGNAME.BAT und eine pCode-Datei PROGNAME.PRG mit
  1368. allen nötigen Tabellen erzeugt werden. PROGNAME.EXE startet den Interpreterkern
  1369. RUN.EXE und teilt ihm mit, daß PROGNAME.PRG ausgeführt werden soll. Der pCode
  1370. wird dann wie auch in der Entwicklungsumgebung interpretierend ausgeführt.
  1371.  
  1372.  
  1373. 3.7 PRG-File starten
  1374.  
  1375. Programme, die als PRG-Datei vorliegen, können hier aus der
  1376. Entwicklungsumgebung gestartet werden. Dazu muß der Quelltext des Programms
  1377. nicht vorliegen.
  1378.  
  1379. #FF
  1380.  
  1381. 4. DEBUG
  1382.  
  1383. 4.1 Einzelschrittmodus
  1384.  
  1385. Der Einzelschrittmodus dient dem Testen kleinerer Programme. Bei größeren
  1386. Programmen ist es sinnvoll, die Anweisungen "EinzelschrittEin" und
  1387. "EinzelschrittAus" zu verwenden, weil das Programm dann mit normaler
  1388. Geschwindigkeit bis zum Auftreffen auf die Anweisung "EinzelschrittEin"
  1389. ausgeführt wird.
  1390.  
  1391. Der Bildschirm wird in zwei Bereiche unterteilt : in dem oberen wird die Aus-
  1392. und Eingabe des Programms angezeigt, sofern sie in dem Ausschnitt dieses
  1393. Fensters stattfindet. In dem unteren wird der Quelltext der jeweiligen
  1394. Programmzeile und der vorangegangenen angezeigt.
  1395.  
  1396. Nach der Abarbeitung einer Programmzeile, wartet ITG-PASCAL bis zum Drücken
  1397. einer Taste, um den Ablauf fortzusetzen.
  1398.  
  1399. F2 : Es wird das Breakpoint-Menü aufgerufen, aus dem heraus Variableninhalte
  1400. angesehen und verändert werden können.
  1401.  
  1402. ESC : Die ESC-Taste bricht die Programmausführung ab.
  1403.  
  1404. Leertaste oder Returntaste : Die nächste Programmzeile wird abgearbeitet.
  1405.  
  1406. #FF
  1407.  
  1408. Interna
  1409.  
  1410. ITG-Pascal ist zum größten Teil Turbo-Pascal-kompatibel (Version 4.0 - 6.0),
  1411. enthält aber Einschränkungen und viele Erweiterungen, die Schülern das
  1412. Programmieren und Fehlersuchen erleichtern.
  1413.  
  1414. Bezeichner aus Standard-Pascal oder aus Turbo-Pascal tragen die üblichen Namen,
  1415. Erweiterungen sind mit deutschen Namen versehen. Dabei sind auch die deutschen
  1416. Sonderzeichen (ä,ö,ü,Ä,Ö,Ü,ß) zugelassen.
  1417.  
  1418. ITG-Pascal besteht aus einem Interpreter, mit dem ein Teil der
  1419. Pascal-Anweisungen im Grafik- und im Textmodus direkt ausgeführt werden kann
  1420. und einem Compiler / Interpreter, der Pascal-Programme in einen Pseudo-Code
  1421. (p-Code) übersetzt und durch Interpretation des p-Codes ausführt. Es wird kein
  1422. Maschinencode erzeugt.
  1423.  
  1424. Alle Anweisungen, die im Direktmodus ausgeführt werden, können auf Wunsch im
  1425. Editor mitprotokolliert werden. Dabei werden sie automatisch zu einem
  1426. lauffähigen Programm ergänzt, das verändert oder ergänzt, gestartet und
  1427. abgespeichert werden kann.
  1428.  
  1429.  
  1430. Koordinatensysteme
  1431.  
  1432. ITG-Pascal enthält in der vorliegenden Version vier verschiedene
  1433. Koordinaten-Systeme:
  1434.  
  1435.  1) den Textschirm mit 1 ≤ x ≤ 80 und 1 ≤ y ≤ 25, wobei der linke obere
  1436. Eckpunkt
  1437.     die Koordinaten x = 1 und y = 1 hat.
  1438.  
  1439.  2) die Standardgrafik mit -320 ≤ x ≤ 320 und yMin ≤ y ≤ yMax, wobei yMin und
  1440.     yMax von der Grafikkarte abhängen, wie unter GetMaxY beschrieben.
  1441.          Dabei gilt : yMin = - GetMaxY / 2
  1442.                       yMax =   GetMaxY / 2.
  1443.    Der Ursprung des Koordinatensystems liegt in der Mitte des Bildschirms. Die
  1444.    positive y-Achse zeigt nach oben!
  1445.  
  1446.  3) die Igelgrafik mit -320 ≤ x ≤ 320 und -240 ≤ y ≤ 240 für alle Grafikkarten.
  1447.     Gegebenenfalls erfolgt eine Korrektur in y-Richtung. Auch hier liegt der Ursprung
  1448.     des Koordinatensystems in der Mitte des Bildschirms. Die positive y-Achse zeigt
  1449.     nach oben! Winkel werden zur positiven x-Achse im mathematisch positiven
  1450.     Umlaufsinn (entgegen dem Urzeigersinn) gemessen.
  1451.  
  1452.  4) die Weltgrafik mit beliebig wählbaren Grenzen. Die Einteilung der
  1453.     Koordinatenachsen erfolgt so, daß die angegebenen Grenzen innerhalb des aktiven
  1454.     Grafikfensters liegen und ein Raster mit jeweils gleichen Abständen auf jeder der
  1455.     Achsen entsteht. Dadurch ist der sichtbare Teil des Koordinatensystems im
  1456.     allgemeinen etwas größer als der angegebene Ausschnitt. Innerhalb der Weltgrafik
  1457.     werden die Weltkoordinaten automatisch auf die Koordinaten des Grafikfensters
  1458.     auf dem Bildschirm umgerechnet.
  1459.  
  1460.  
  1461. Debugger
  1462.  
  1463. Debug-Anweisungen werden im Quelltext eingefügt (s. auch Debugger), wobei die
  1464. Informationen nach jeder Quelltextzeile auf dem Bildschirm ausgegeben werden
  1465. und zusätzlich in einem zweiten Editor-Fenster mitprotokolliert werden, damit
  1466. sie später in Ruhe angesehen werden können.
  1467.  
  1468.  
  1469. #FF
  1470. Synonyme
  1471.  
  1472. Aufbau der Synonym-Datei ITG.SYN :
  1473. Kommentare werden wie in Pascal eingefügt. Das erste Wort gibt den alten
  1474. Bezeichner, das zweite den neuen zusätzlichen an. Pro Zeile ist nur ein
  1475. Wortpaar zugelassen. Kommentare dürfen nie in einer Zeile VOR Bezeichnern
  1476. stehen. Kommentar-Klammern dürfen nicht in Kommentaren stehen.
  1477.  
  1478.  Beispiele :
  1479.  
  1480.  Achtung : Es handelt sich hier nur um Beispiele! Die gültigen Synonyme
  1481.  entnehmen Sie bitte Ihrer Datei ITG.SYN!
  1482.  
  1483.          INTEGER GANZZAHL (* Hier ist ein Kommentar zulässig *)
  1484.          REAL KOMMAZAHL
  1485.          INC ERHÖHE
  1486.          REPEAT WIEDERHOLE
  1487.          UNTIL BIS
  1488.  
  1489.  
  1490. Datenstrukturen
  1491.  
  1492. Alle globalen und lokalen Variablen werden in ITG-PASCAL auf dem Stack in einem
  1493. varianten Record abgelegt. Es gibt kein spezielles Datensegment wie in
  1494. TURBO-PASCAL. Durch die Art der Speicherung belegt jeder einfache Datentyp
  1495. einen Speicherplatz auf dem Stack. Das größtmögliche Element ist eine
  1496. REAL-Variable, die 10 Byte als Typ EXTENDED benötigt, dazu kommt ein Byte für
  1497. den Variablentyp. Ein Speicherplatz belegt also 11 Byte. STRING- und
  1498. Dateivariablen werden über Zeiger auf dem Stack adressiert. Jede
  1499. STRING-Variable belegt außer dem Speicherplatz auf dem Stack nur soviel Platz,
  1500. wie unbedingt nötig ist. Die Verwaltung erfolgt dynamisch.
  1501.  
  1502. Um Schülern die Programmierung zu vereinfachen, wird in ITG-PASCAL nicht
  1503. zwischen den Typen BYTE, INTEGER, WORD und LONGINT unterschieden. Alle vier
  1504. Typen werden intern im LONGINT-Format verarbeitet. Ebenso wird nicht zwischen
  1505. REAL, DOUBLE und EXTENDED unterschieden. Die Bearbeitung erfolgt immer im
  1506. Format EXTENDED.
  1507.  
  1508. In Dateien werden die Daten in der in TURBO-PASCAL üblichen Form gespeichert.
  1509. Zum Datenaustausch mit TURBO-PASCAL muß lediglich darauf geachtet werden, daß
  1510. in der Deklaration der Datenstrukturen keine Variablen der Typen BYTE, INTEGER,
  1511. WORD, REAL und DOUBLE enthalten sind. Sie sind jeweils durch LONGINT bzw.
  1512. EXTENDED zu ersetzen! Ansonsten gelten für Zugriffe auf typisierte und
  1513. sequentielle Dateien und Textdateien dieselben Regeln wie in TURBO-PASCAL.
  1514.  
  1515. In READ-Anweisungen für Tastatureingaben wird auf dem Bildschirm ein
  1516. Editor-Fenster geöffnet, in dem der derzeitige Inhalt der Variablen editiert
  1517. bzw. neu eingegeben wird. Anders als in TURBO-PASCAL können die einzulesenden
  1518. Variableninhalte vor dem Aufruf mit Werten vorbelegt werden, weil die
  1519. Parameterübergabe bei READ hin und zurück erfolgt! Für REAL-Variablen kann auch
  1520. ein Term eingegeben werden, der Konstanten und die im Befehlsumfang
  1521. beschriebenen mathematischen Funktionen enthält.
  1522.  
  1523.  
  1524. #FF
  1525. Erweiterungen
  1526.  
  1527. Gegenüber TURBO-PASCAL sind folgende Erweiterungen implemeniert:
  1528.  
  1529.  Initialisierung aller Variablen (auch lokaler) mit Null
  1530.  zusätzlicher Direkt-(Interpreter-)Modus
  1531.  strenge, nicht abschaltbare Indexprüfung
  1532.  Protokoll der Ein- und Ausgabe in einem zweiten Editorfenster
  1533.  Post-Mortem-Dump mit Protokoll in einem zweiten Editorfenster
  1534.  vereinfachte Standard-Grafik
  1535.  Igel-(Turtle-)Grafik
  1536.  Weltkoordinatensysteme
  1537.  Fenstertechnik
  1538.  Menütechnik
  1539.  erweiterte READ-Anweisung
  1540.    - mit Editor für alle Tastatureingaben
  1541.    - mit Termeingaben für REAL-Variablen
  1542.    - mit der Möglichkeit, ARRAYs und RECORDs einzulesen
  1543.    - mit der Möglichkeit, die Eingabe auf Diskette umzulenken
  1544.  erweiterte Write-Anweisung
  1545.    - mit der Möglichkeit, ARRAYs und RECORDs auszugeben
  1546.    - mit der Möglichkeit, die Ausgabe auf den Drucker umzulenken
  1547.    - mit der Möglichkeit, die Ausgabe auf Diskette umzulenken
  1548.  Eingabemasken
  1549.  Auswahlfenster
  1550.  vereinfachte Diskettenzugriffe
  1551.  Demonstration von Multitasking und Mehrprozessorbetrieb durch parallele Prozesse
  1552.    - Prozeßwechsel
  1553.    - Prozeßsynchronisation
  1554.  
  1555.  
  1556. Hardware-Voraussetzungen
  1557.  
  1558.  Hauptspeicher           : 640kB
  1559.  Grafikkarte             : CGA, Herkules, EGA oder VGA
  1560.                            automatische Erkennung
  1561.  Datenspeicher           : 1 Laufwerk mit 360kB knapp ausreichend
  1562.                            besser : 2 Laufwerke mit 360kB oder 1 Laufwerk mit
  1563.                            höherer Kapazität oder 1 Festplatte oder Netzwerk mit
  1564.                            wenigstens 1 Festplatte
  1565.  
  1566.  
  1567. #FF
  1568. Tabellen-Größen
  1569.  
  1570. Die folgenden Werte sind Maximalwerte.
  1571.  
  1572.  Anzahl der Programmzeilen im Editor                     : 2000
  1573.  Anzahl der Zeichen pro Bezeichner                       :   30
  1574.  Anzahl der Record-Deklarartionen                        :   30
  1575.  Anzahl der Array-Deklarationen                          :   30
  1576.  Anzahl der REAL-Konstanten                              :   50
  1577.  Anzahl der Fallunterscheidungen für CASE-Strukturen     :   30
  1578.  maximale Schachtelungstiefe für Prozedur-Deklarationen  :    7
  1579.  Größe des Programmcodes                                 : 4096
  1580.  Größe des Stacks in Speicherplätzen                     : 5888
  1581.  Anzahl der STRING-Variablen                             : 1000
  1582.  Anzahl der Dateien                                      :   20
  1583.  Anzahl der Eingabefelder für eine Dateneingabe          :   20
  1584.  Anzahl der Auswahlelemente für eine Datenauswahl        :  100
  1585.  Anzahl der maximal geöffneten Fenster                   :   20
  1586. #FF
  1587.  
  1588. Der Befehlsumfang
  1589.  
  1590. Operatoren
  1591.  
  1592.  +       Addition                2 + 5   = 7
  1593.  -       Subtraktion             5 - 2   = 3
  1594.  *       Multiplikation          2 * 5   = 10
  1595.  /       Division                2 / 5   = 0.4
  1596.  DIV     Ganzzahl-Division       7 DIV 5 = 1     (= 1 Rest 2)
  1597.  MOD     Divisionsrest           7 MOD 5 = 2     (= 1 Rest 2)
  1598.  ^       Potenz                  2 ^ 3   = 8     (= 2 * 2 * 2)
  1599.  
  1600.  
  1601. Standard-Bezeichner
  1602.  
  1603.  AND             ARRAY           BEGIN           CASE            CONST
  1604.  DISPOSE         DIV             DO              DOWNTO          ELSE
  1605.  END             EXIT            FILE            FOR             FORWARD
  1606.  FUNCTION        GOTO            HALT            IF              IN
  1607.  INCLUDE         LABEL           MOD             NEW             NIL
  1608.  NOT             OF              OR              PACKED          PROCEDURE
  1609.  PROGRAM         RECORD          REPEAT          SET             THEN
  1610.  TO              TYPE            UNTIL           USES            VAR             WHILE
  1611.  WITH
  1612.  
  1613. Die Bedeutung der Standard-Bezeichner kann jedem PASCAL-Lehrbuch entnommen
  1614. werden.
  1615.  
  1616.  
  1617. DISPOSE
  1618.  
  1619. DISPOSE gibt den Speicherplatz, den eine Zeigervariable (dynamische Variable)
  1620. belegte, wieder frei. Der Wert des Zeigers ist anschließend NIL.
  1621.  
  1622.  Beispiel :
  1623.     NEW(Zeigertyp);              Platz für eine Zeigervariable auf dem Heap anfordern.
  1624.     .                            Erst dann dürfen Zuweisungen vorgenommen werden.
  1625.     DISPOSE(Zeigertyp);  Wenn der Inhalt der Zeigervariablen nicht mehr
  1626.                                  benötigt wird, wird der Platz auf dem Heap wieder
  1627.                                  freigegeben.
  1628.  
  1629.  
  1630. INCLUDE
  1631.  
  1632. Mit der Anweisung INCLUDE [Pfad\]Dateiname kann im Deklarationsteil eines
  1633. Programms oder einer Prozedur / Funktion der Quelltext einer Datei in das
  1634. Programm an der vorgesehenen Stelle eingebunden werden, ohne daß der Quelltext
  1635. der Datei im Editor vorhanden ist. Die Pfadangabe kann entfallen, wenn die
  1636. Datei im aktuellen Verzeichnis zu finden ist. Es kann auch die Syntax von
  1637. TURBO-PASCAL mit {$I [Pfad\]Dateiname} verwendet werden.
  1638.  
  1639.  Beispiel :
  1640.    INCLUDE C:\ITG\BSP\PRG1.INC, C:\ITG\BSP\PRG2.INC;
  1641.  
  1642.    oder
  1643.  
  1644.    {$I C:\ITG\BSP\PRG1.INC}
  1645. #FF
  1646.    {$I C:\ITG\BSP\PRG2.INC}
  1647.  
  1648.  
  1649. NEW
  1650.  
  1651. NEW fordert Speicherplatz auf dem Heap für eine Zeigervariable an.
  1652.  
  1653.  Beispiel :
  1654.     NEW(Zeigertyp);              Platz für eine Zeigervariable auf dem Heap anfordern.
  1655.     .                            Erst dann dürfen Zuweisungen vorgenommen werden.
  1656.     DISPOSE(Zeigertyp);  Wenn der Inhalt der Zeigervariablen nicht mehr
  1657.                                  benötigt wird, wird der Platz auf dem Heap wieder
  1658.                                  freigegeben.
  1659.  
  1660. #FF
  1661. Konstanten
  1662.  
  1663.  Blau            CR              Dunkelblau      Dunkelgelb      Dunkelgrau
  1664.  Dunkelgrün      Dunkelkobalt    Dunkelrot       Dunkelviolett   ESC
  1665.  Euler           FALSE           Gelb            Grau            Grün
  1666.  Kobalt          LST             Pi              Rot             Schwarz
  1667.  StrgBildAb2     StrgBildAuf2    TRUE            Violett         Weiß
  1668.  
  1669.  
  1670. Blau
  1671.  
  1672. Blau ist eine INTEGER-Konstante, die auf VGA-Karten blaue Schrift oder blaue
  1673. Grafik erzeugt. Ihr Zahlenwert ist 9.
  1674.  
  1675.  
  1676. CR
  1677.  
  1678. CR ist eine CHAR-Konstante, deren Wert beim Drücken der RETURN-Taste an das
  1679. Programm übergeben wird.
  1680.  
  1681.  
  1682. Dunkelblau
  1683.  
  1684. Dunkelblau ist eine INTEGER-Konstante, die auf VGA-Karten blaue Schrift oder
  1685. dunkelblaue Grafik erzeugt. Ihr Zahlenwert ist 1.
  1686.  
  1687.  
  1688. Dunkelgelb
  1689.  
  1690. Dunkelgelb ist eine INTEGER-Konstante, die auf VGA-Karten gelbe Schrift oder
  1691. dunkelgelbe Grafik erzeugt. Ihr Zahlenwert ist 6.
  1692.  
  1693.  
  1694. Dunkelgrau
  1695.  
  1696. Dunkelgrau ist eine INTEGER-Konstante, die auf VGA-Karten graue Schrift oder
  1697. dunkelgraue Grafik erzeugt. Ihr Zahlenwert ist 8.
  1698.  
  1699.  
  1700. Dunkelgrün
  1701.  
  1702. Dunkelgrün ist eine INTEGER-Konstante, die auf VGA-Karten grüne Schrift oder
  1703. dunkelgrüne Grafik erzeugt. Ihr Zahlenwert ist 2.
  1704.  
  1705.  
  1706. Dunkelkobalt
  1707.  
  1708. Dunkelkobalt ist eine INTEGER-Konstante, die auf VGA-Karten blaue Schrift oder
  1709. dunkelblaue Grafik erzeugt. Ihr Zahlenwert ist 3.
  1710.  
  1711.  
  1712. Dunkelrot
  1713.  
  1714. Dunkelrot ist eine INTEGER-Konstante, die auf VGA-Karten rote Schrift oder
  1715. dunkelrote Grafik erzeugt. Ihr Zahlenwert ist 4.
  1716.  
  1717.  
  1718. #FF
  1719. Dunkelviolett
  1720.  
  1721. Dunkelviolett ist eine INTEGER-Konstante, die auf VGA-Karten violette Schrift
  1722. oder dunkelviolette Grafik erzeugt. Ihr Zahlenwert ist 5.
  1723.  
  1724.  
  1725. ESC
  1726.  
  1727. ESC ist eine CHAR-Konstante, deren Wert beim Drücken der ESC-Taste an das
  1728. Programm übergeben wird.
  1729.  
  1730.  
  1731. Euler
  1732.  
  1733. Die Konstante Euler ist die Eulersche Zahl e=2.718281828.. . Die Abkürzung e
  1734. kann für die Eulersche Zahl nicht verwendet werden, weil e in PASCAL für die
  1735. Exponentialschreibweise einer reellen Zahl verwendet wird (z.B. 5.4e-3).
  1736.  
  1737.  
  1738. FALSE
  1739.  
  1740. FALSE (Falsch) ist der Wahrheitswert einer Aussage. FALSE kann nur einer
  1741. Variablen des Typs BOOLEAN zugeordnet werden.
  1742.  
  1743.  Beispiel :
  1744.    VAR
  1745.      IstWahr : BOOLEAN;
  1746.    BEGIN
  1747.      IstWahr := FALSE;
  1748.      IF IstWahr = FALSE THEN BEGIN       Für IstWahr = FALSE kann auch NOT
  1749.        TueDasEine;                               IstWahr geschrieben werden.
  1750.      END
  1751.      ELSE BEGIN
  1752.        TueDasAndere;
  1753.      END;
  1754.    END;
  1755.  
  1756.  
  1757. Gelb
  1758.  
  1759. Gelb ist eine INTEGER-Konstante, die auf VGA-Karten gelbe Schrift oder gelbe
  1760. Grafik erzeugt. Ihr Zahlenwert ist 14.
  1761.  
  1762.  
  1763. Grau
  1764.  
  1765. Grau ist eine INTEGER-Konstante, die auf VGA-Karten graue Schrift oder graue
  1766. Grafik erzeugt. Ihr Zahlenwert ist 7.
  1767. Auf CGA- und Herkules-Karten wird das erreicht, indem niemals zwei waagerecht
  1768. oder senkrecht nebeneinanderliegende Punkte in derselben Farbe gezeichnet
  1769. werden. Ein Punkt hat jeweils die Farbe Weiß und seine vier Nachbarn haben die
  1770. Farbe Schwarz.
  1771.  
  1772.  
  1773. #FF
  1774. Grün
  1775.  
  1776. Grün ist eine INTEGER-Konstante, die auf VGA-Karten grüne Schrift oder grüne
  1777. Grafik erzeugt. Ihr Zahlenwert ist 10.
  1778.  
  1779.  
  1780. Kobalt
  1781.  
  1782. Kobalt ist eine INTEGER-Konstante, die auf VGA-Karten blaue Schrift oder blaue
  1783. Grafik erzeugt. Ihr Zahlenwert ist 11.
  1784.  
  1785.  
  1786. LST
  1787.  
  1788. LST ist eine Konstante des Dateityps TEXT. Sie dient dazu, WRITE-Anweisungen
  1789. auf den Drucker umzulenken.
  1790. In ITG-PASCAL können stattdessen auch die Anweisungen AusgabeAufDrucker und
  1791. AusgabeAufBildschirm zur Umlenkung der Ausgabe verwendet werden. Dadurch können
  1792. im Unterschied zu TURBO-PASCAL mit derselben Anweisungsfolge Informationen
  1793. sowohl auf den Bildschirm als auch auf den Drucker ausgegeben werden.
  1794.  
  1795.  Beispiele :
  1796.    TURBO-PASCAL und ITG-PASCAL :
  1797.          WriteLn(LST, 'Dieser Text erscheint auf dem Drucker.');
  1798.          WriteLn('Dieser Text erscheint auf dem Bildschirm.');
  1799.  
  1800.    alternativ in ITG-PASCAL :
  1801.          AusgabeAufDrucker;
  1802.          WriteLn("Dieser Text erscheint auf dem Drucker.");
  1803.          AusgabeAufBildschirm;
  1804.          WriteLn("Dieser Text erscheint auf dem Bildschirm.");
  1805.  
  1806.  
  1807. Pi
  1808.  
  1809. Die Konstante PI ist die Kreiszahl π=3.141592654.. .
  1810.  
  1811.  
  1812. Rot
  1813.  
  1814. Rot ist eine INTEGER-Konstante, die auf VGA-Karten rote Schrift oder rote
  1815. Grafik erzeugt. Ihr Zahlenwert ist 12.
  1816.  
  1817.  
  1818. Schwarz
  1819.  
  1820. Schwarz ist eine INTEGER-Konstante, die auf CGA-, Herkules- und VGA-Karten
  1821. schwarze Schrift oder schwarze Grafik erzeugt. Ihr Zahlenwert ist 0.
  1822.  
  1823.  
  1824. Strg-Bild-Ab2
  1825.  
  1826. StrgBildAb2 ist eine CHAR-Konstante, deren Wert beim Drücken der
  1827. Tastenkombination Strg-Bild-Ab (Ctrl-PgDn) als zweites Zeichen an das Programm
  1828. übergeben wird. Mit dieser Tastenkombination kann die Prozedur LiesEingaben
  1829. beendet werden, um auf den folgenden Datensatz zu wechseln.
  1830.  
  1831. #FF
  1832.  Beispiel:
  1833.    TYPE
  1834.      EinEintrag = RECORD
  1835.        Nachname, Vorname, Ort, Straße : STRING[20];
  1836.        Plz, HausNr, Vorwahl, TelNr : LONGINT;
  1837.      END;
  1838.  
  1839.    CONST
  1840.      Anzahl = 3;
  1841.  
  1842.    VAR
  1843.      TelefonListe : ARRAY[1..Anzahl] OF EinEintrag;
  1844.      n : INTEGER;
  1845.  
  1846.    BEGIN
  1847.      n := 1;
  1848.      REPEAT
  1849.        WITH TelefonListe[n] DO BEGIN
  1850.          EingabeFeld( 1, 3, "Name    : ", Nachname);
  1851.          EingabeFeld( 1, 4, "Vorname : ", Vorname);
  1852.          EingabeFeld( 1, 5, "Plz : ", Plz);
  1853.          EingabeFeld(25, 5, "Ort : ", Ort);
  1854.          EingabeFeld( 1, 6, "Straße  : ", Straße);
  1855.          EingabeFeld(35, 6, "Nr. : ", HausNr);
  1856.          EingabeFeld( 1, 7, "Vorwahl : ", Vorwahl);
  1857.          EingabeFeld(30, 7, "Telefon-Nr : ", TelNr);
  1858.          LiesEingaben;
  1859.        END;
  1860.        CASE LetzteTaste OF
  1861.          CR, StrgBildAb2 :       nächsten Datensatz bearbeiten
  1862.            n := n + 1;
  1863.          ESC :
  1864.            n := Anzahl + 1;
  1865.          StrgBildAuf2 :          vorigen Datensatz noch einmal
  1866.            IF n > 1 THEN BEGIN   bearbeiten
  1867.              n := n - 1;
  1868.            END;
  1869.        END;
  1870.      UNTIL n > Anzahl;
  1871.    END;
  1872.  
  1873.  
  1874. StrgBildAuf2
  1875.  
  1876. StrgBildAuf2 ist eine CHAR-Konstante, deren Wert beim Drücken der
  1877. Tastenkombination Strg-Bild-Auf (Ctrl-PgUp) als zweites Zeichen an das Programm
  1878. übergeben wird. Mit dieser Tastenkombination kann die Prozedur LiesEingaben
  1879. beendet werden, um auf den vorangegangenen Datensatz zu wechseln.
  1880.  
  1881.  Beispiel:
  1882.    TYPE
  1883.      EinEintrag = RECORD
  1884.        Nachname, Vorname, Ort, Straße : STRING[20];
  1885.        Plz, HausNr, Vorwahl, TelNr : LONGINT;
  1886.      END;
  1887. #FF
  1888.    CONST
  1889.      Anzahl = 3;
  1890.    VAR
  1891.      TelefonListe : ARRAY[1..Anzahl] OF EinEintrag;
  1892.      n : INTEGER;
  1893.  
  1894.    BEGIN
  1895.      n := 1;
  1896.      REPEAT
  1897.        WITH TelefonListe[n] DO BEGIN
  1898.          EingabeFeld( 1, 3, "Name    : ", Nachname);
  1899.          EingabeFeld( 1, 4, "Vorname : ", Vorname);
  1900.          EingabeFeld( 1, 5, "Plz : ", Plz);
  1901.          EingabeFeld(25, 5, "Ort : ", Ort);
  1902.          EingabeFeld( 1, 6, "Straße  : ", Straße);
  1903.          EingabeFeld(35, 6, "Nr. : ", HausNr);
  1904.          EingabeFeld( 1, 7, "Vorwahl : ", Vorwahl);
  1905.          EingabeFeld(30, 7, "Telefon-Nr : ", TelNr);
  1906.          LiesEingaben;
  1907.        END;
  1908.        CASE LetzteTaste OF
  1909.          CR, StrgBildAb2 :       nächsten Datensatz bearbeiten
  1910.            n := n + 1;
  1911.          ESC :
  1912.            n := Anzahl + 1;
  1913.          StrgBildAuf2 :          vorigen Datensatz noch einmal
  1914.            IF n > 1 THEN BEGIN   bearbeiten
  1915.              n := n - 1;
  1916.            END;
  1917.        END;
  1918.      UNTIL n > Anzahl;
  1919.    END;
  1920.  
  1921.  
  1922. TRUE
  1923.  
  1924. TRUE (Wahr) ist der Wahrheitswert einer Aussage. TRUE kann nur einer Variablen
  1925. des Typs BOOLEAN zugeordnet werden.
  1926.  
  1927.  Beispiel :
  1928.    VAR
  1929.      IstWahr : BOOLEAN;
  1930.    BEGIN
  1931.      IstWahr := TRUE;
  1932.      IF IstWahr = TRUE THEN BEGIN        Für IstWahr = TRUE kann auch
  1933.       TueDasEine;                                IstWahr geschrieben werden.
  1934.      END
  1935.      ELSE BEGIN
  1936.        TueDasAndere;
  1937.      END;
  1938.    END;
  1939.  
  1940.  
  1941. #FF
  1942. Violett
  1943.  
  1944. Violett ist eine INTEGER-Konstante, die auf VGA-Karten violette Schrift oder
  1945. violette Grafik erzeugt. Ihr Zahlenwert ist 13.
  1946.  
  1947.  
  1948. Weiß
  1949.  
  1950. Weiß ist eine INTEGER-Konstante, die auf CGA-, Herkules- und VGA-Karten weiße
  1951. Schrift oder weiße Grafik erzeugt. Ihr Zahlenwert ist 15.
  1952.  
  1953. #FF
  1954. Typen
  1955.  
  1956.  CHAR            STRING          BOOLEAN         BYTE            INTEGER
  1957.  WORD            LONGINT         REAL            DOUBLE          EXTENDED
  1958.  FILE            TEXT            SIGNAL
  1959.  
  1960.   ITG-PASCAL unterscheidet nur 8 verschiedene Datentypen voneinander.
  1961.  
  1962.  1) CHAR         : einzelner Buchstabe
  1963.  2) STRING       : Zeichenkette, eine Aneinanderfügung von Zeichen und Buchstaben
  1964.  3) BOOLEAN      : Aussagetyp, WAHR oder FALSCH
  1965.  4) LONGINT      : ganze Zahlen im Bereich von -2147483648 bis 2147483647
  1966.  5) EXTENDED     : Dezimalzahlen mit einem Betrag von 3.4*10-4932 bis 1.1*104932
  1967.  6) FILE         : Datei-Variable beliebigen Typs
  1968.  7) TEXT         : Datei-Variable für Strings (Zeichenketten)
  1969.  8) SIGNAL       : zur Synchronisation paralleler Prozesse
  1970.  
  1971.  
  1972. Aufzählungstypen
  1973.  
  1974. Aufzählungstypen sind vollständig implementiert. Zusätzlich ist es möglich, die
  1975. READ- und WRITE-Anweisungen direkt auf eine Variable eines Aufzählungstyps
  1976. anzuwenden. Dabei kann alternativ zur Ordnung der Variablen auch der Inhalt der
  1977. Variablen direkt verwendet werden.
  1978.  
  1979.  Beispiel :
  1980.    TYPE
  1981.      Arbeitstage = (Montag, Dienstag, Mittwoch, Donnerstag, Freitag);
  1982.    VAR
  1983.      Arbeitstag : Arbeitstage;
  1984.      .
  1985.      .
  1986.      Write("Welcher Arbeitstag ?");
  1987.      ReadLn(Arbeitstag);                         Hier kann für Mittwoch sowohl
  1988.                                                  "Mittwoch" als auch "2" einge-
  1989.                                                  geben werden. Montag hat die
  1990.                                                  Ordnung Null;
  1991.      Write("Der eingegebene Arbeitstag war :");
  1992.      WriteLn(Arbeitstag);                        ergibt "MITTWOCH"
  1993.      Write("Er steht an ");
  1994.      Write(ORD(Arbeitstag)+1);                   ergibt 3 ( = 2 + 1 )
  1995.      WriteLn(". Stelle in der Deklaration");
  1996.      .
  1997.      .
  1998.  
  1999.  
  2000. CHAR
  2001.  
  2002. CHAR : einzelner Buchstabe oder einzelnes Zeichen
  2003.  
  2004.  Beispiel :
  2005.    VAR
  2006.      c : CHAR;           Deklaration
  2007.    BEGIN
  2008. #FF
  2009.      c := "b";           erlaubte Zuweisung, c hat jetzt den Wert "b"
  2010.      c := "ABC"; falsch! c kann nur ein Zeichen / einen Buchstaben aufnehmen
  2011.      c := 65;            falsch! c kann keine Zahlenwerte annehmen
  2012.      c := CHR(65);       c wird der Wert "A" zugewiesen
  2013.      .                   ( 65. Zeichen der ASCII-Tabelle )
  2014.    END;
  2015.  
  2016.  
  2017. STRING
  2018.  
  2019. STRING : Zeichenkette, eine Aneinanderfügung von Zeichen und Buchstaben. Bei
  2020. der Deklaration sollte die benötigte Zeichenzahl angegeben werden, weil alle
  2021. READ-Anweisungen ein Eingabefenster entsprechend der Deklarationslänge öffnen.
  2022. ITG-PASCAL verwaltet STRINGS dynamisch, sodaß immer nur der tatsächlich
  2023. benötigte Speicherplatz belegt wird.
  2024.  
  2025.  Deklarations-Beispiele:
  2026.    s255  : STRING;               255 Zeichen
  2027.    s10   : STRING[10];           10 Zeichen
  2028.    s     : STRING[Max];  mit 1 <= Max <= 255
  2029.  
  2030.  
  2031. BOOLEAN
  2032.  
  2033. BOOLEAN : Aussagetyp, WAHR oder FALSCH
  2034.  
  2035.  
  2036. BYTE, INTEGER, WORD, LONGINT
  2037.  
  2038. LONGINT : ganze Zahlen im Bereich von -2147483648 bis 2147483647. Die
  2039. Datentypen BYTE, INTEGER und WORD werden intern als LONGINT verwaltet und
  2040. können deshalb Werte in dem selben Bereich wie LONGINT-Variablen annehmen.
  2041.  
  2042.  
  2043. REAL, DOUBLE, EXTENDED
  2044.  
  2045. EXTENDED : Dezimalzahlen mit einem Betrag von 3.4*10-4932 bis 1.1*104932 mit
  2046. einer Genauigkeit von 19 bis 20 Stellen. Die Datentypen REAL und werden intern
  2047. im Datenformat EXTENDED verwaltet und können deshalb Werte in dem selben
  2048. Bereich wie EXTENDED-Variablen annehmen.
  2049.  
  2050.  
  2051. FILE
  2052.  
  2053. FILE : Datei-Variable beliebigen Typs. Im Unterschied zu TURBO-PASCAL können
  2054. einer Datei-Variablen beliebige Datentypen außer FILE- und TEXT-Typen
  2055. zugeordnet werden, ohne daß eine spezielle Deklaration erfolgen muß. Auf diese
  2056. Weise können in einer Datei beliebig viele Variablen nacheinander abgespeichert
  2057. werden. Die Operationen READ und WRITE in ITG-PASCAL entsprechen dann BLOCKREAD
  2058. UND BLOCKWRITE in TURBO-PASCAL. Typisierte Dateien werden wie in TURBO-PASCAL
  2059. behandelt.
  2060.  
  2061.  
  2062. TEXT
  2063.  
  2064. TEXT : Datei-Variable für Strings (Zeichenketten). In ITG-PASCAL können nur die
  2065. Anweisungen READLN (TextDatei, Zeichenkette) und WRITELN (TextDatei,
  2066. #FF
  2067. Zeichenkette) verwendet werden. READ, WRITE und Char-Variablen dürfen nicht
  2068. verwendet werden.
  2069.  
  2070.  
  2071. SIGNAL
  2072.  
  2073. SIGNAL : Synchronisation von Prozessen. Wenn zwei Prozesse, die gleichzeitig
  2074. ausgeführt werden, auf Zwischenergebnisse des jeweils anderen Prozesses
  2075. angewiesen sind, kann einer der Prozesse durch WarteAuf-Signal(SignalVar) zum
  2076. Warten veranlaßt werden, bis der andere Prozeß durch SendeSignal(SignalVar)
  2077. mitteilt, daß die Zwischenergebnisse bereitgestellt sind.
  2078.  
  2079.  
  2080. Zeiger-Variablen
  2081.  
  2082. Als Zeigertypen sind nur ARRAYs und RECORDs zugelassen. Speicherplatz wird mit
  2083. NEW angefordert und mit DISPOSE freigegeben. Vor einem Zugriff auf eine
  2084. Zeigervariable erfolgt immer eine Prüfung, ob bereits Speicherplatz angefordert
  2085. wurde. Wenn das nicht der Fall war, wird das Programm mit einer Fehlermeldung
  2086. abgebrochen. ITG-PASCAL speichert alle über NEW zurückgegebenen Zeigeradressen
  2087. in einer Tabelle, damit lokale Zeigervariablen beim Verlassen einer Prozedur
  2088. und globale Zeigervariablen bei der Beendigung des Programm wieder freigegeben
  2089. werden können, falls dieses vorher vergessen wurde. Dazu stehen in der
  2090. vorliegenden Version 500 Plätze in ITG.EXE und 1000 Plätze in ITG-OVR.EXE zur
  2091. Verfügung.
  2092.  
  2093. Auch der Inhalt von Zeigervariablen kann über READ eingelesen werden, soweit
  2094. dieses sinnvoll ist, und über WRITE ausgegeben werden. WRITE ermöglicht es
  2095. damit, den Inhalt einer verketteten Liste bzw. eines Baumes mit einer Anweisung
  2096. auszugeben. Bei einer vorwärts und rückwärts verketteten Liste führt es auf
  2097. Grund der Datenstruktur immer zu einer endlosen Ausgabe. Die WRITE-Anweisung
  2098. kann dann mit Strg-B unterbrochen werden.
  2099.  
  2100. #FF
  2101. Igel-Grafik
  2102.  
  2103.  DreheAuf                GeheNach                Hinten                  IgelWinkel
  2104.  IgelZeigen              LinkerBogen             Links                   Maßstab
  2105.  MitIgel                 MitStift                OhneIgel                OhneStift
  2106.  RechterBogen            Rechts                  StiftFarbe              Ursprung
  2107.  Vorne                   WoIgelX                 WoIgelY
  2108.  
  2109.  
  2110. DreheAuf
  2111.  
  2112. DreheAuf richtet den Igel auf einen absoluten Winkel aus, der von der positiven
  2113. x-Achse aus gegen den Uhrzeigersinn im mathematisch positiven Umlaufsinn in
  2114. Winkelgrad gemessen wird.
  2115.  
  2116.  Deklaration:
  2117.    PROCEDURE DreheAuf(AbsoluterWinkel : REAL);
  2118.  
  2119.  Beispiel:
  2120.    DreheAuf(90);         Der Igel zeigt nach oben.
  2121.    DreheAuf(180);        Der Igel zeigt nach links. (Drehung um 180° entgegen dem
  2122.                          Uhrzeigersinn von der positiven x-Achse aus)
  2123.    DreheAuf(-180);       Auch hier zeigt der Igel nach links. (Drehung um 180° im
  2124.                          Uhrzeigersinn von der positiven x-Achse aus)
  2125.  
  2126.  
  2127. GeheNach
  2128.  
  2129. Der Igel wird in seinem Koordinatensystem, dessen Ursprung der Mittelpunkt des
  2130. Grafikfensters ist, dessen positive x-Achse nach rechts und dessen positive
  2131. y-Achse nach oben zeigt, zu den angegebenen Koordinaten bewegt, ohne daß er
  2132. dabei zeichnet. Die Maximalwerte sind in x-Richtung -320 und 320 und in
  2133. y-Richtung -240 und 240 für alle Grafikkarten. Es gibt zwei weitere
  2134. Koordinatensysteme für Grafik ohne Igel (s. auch MoveTo, WeltGeheNach) und für
  2135. den Textcursor (s. auch GotoXY).
  2136.  
  2137.  Deklaration:
  2138.    PROCEDURE GeheNach(xPos, yPos : INTEGER);
  2139.  
  2140.  Beispiel:
  2141.    GeheNach(0, 0);       bewegt den Igel auf den Ursprung seines Koordinatensystems.
  2142.    GeheNach(200, 100);   bewegt den Igel vom Ursprung seines Koordinaten-
  2143.                          systems aus gesehen um 200 Schritte nach rechts und
  2144.                          um 100 nach oben.
  2145.  
  2146.  
  2147. Hinten
  2148.  
  2149. Durch die Anweisung Hinten(x) wird der Igel x Schritte rückwärts bewegt. Wenn
  2150. die Bewegung mit Stift erfolgt, ist seine Spur anschließend sichtbar.
  2151.  
  2152.  Deklaration:
  2153.    PROCEDURE Hinten(Schritte : REAL);
  2154.  
  2155.  Beispiel:
  2156.    Hinten(50);           bewegt den Igel 50 Schritte rückwärts.
  2157.  
  2158.  
  2159. #FF
  2160. IgelWinkel
  2161.  
  2162. Die Funktion IgelWinkel liefert den Winkel zwischen der Bewegungsrichtung
  2163. vorwärts und der positiven x-Achse im mathematisch positiven Umaufsinn
  2164. gemessen.
  2165.  
  2166.  Deklaration:
  2167.    FUNCTION IgelWinkel : REAL;
  2168.  
  2169.  Beispiel:
  2170.    DreheAuf(100);
  2171.    Write(IgelWinkel);            druckt den Wert 100 für den Winkel aus.
  2172.  
  2173.  
  2174. IgelZeigen
  2175.  
  2176. Die Funktion IgelZeigen ergibt den Wert wahr (TRUE), wenn der Igel nach jeder
  2177. Igelbewegung gezeichnet werden soll. Andernfalls ergibt sie den Wert falsch
  2178. (FALSE).
  2179.  
  2180.  Deklaration:
  2181.    FUNCTION IgelZeigen : BOOLEAN;
  2182.  
  2183.  Beispiel:
  2184.    MitIgel;
  2185.    Write(IgelZeigen);            druckt TRUE,
  2186.    OhneIgel;
  2187.    Write(IgelZeigen);            druckt FALSE aus.
  2188.  
  2189.  
  2190. LinkerBogen
  2191.  
  2192. Mit LinkerBogen beschreibt der Igel einen Bogen von seiner augenblicklichen
  2193. Position und Richtung aus nach links und hinterläßt dabei eine Spur, wenn die
  2194. Bewegung mit Stift erfolgt.
  2195.  
  2196.  Deklaration:
  2197.    PROCEDURE LinkerBogen(Radius, Winkel : REAL);
  2198.  
  2199.  Beispiel:
  2200.    LinkerBogen(100, 45); Der Igel beschreibt einen Bogen nach links mit einem
  2201.                          Radius von 100 Schritten und einem Winkel von 45°.
  2202.  
  2203.  
  2204. Links
  2205.  
  2206. Links(x) veranlaßt den Igel, sich aus seiner augenblick-lichen Richtung um x
  2207. Grad nach links zu drehen.
  2208.  
  2209.  Deklaration:
  2210.    PROCEDURE Links(Winkel : REAL);
  2211.  
  2212.  Beispiel:
  2213.    DreheAuf(0);          Der Igel zeigt nach rechts.
  2214.    Links(90);            Der Igel zeigt nach oben.
  2215.  
  2216.  
  2217. #FF
  2218. Maßstab
  2219.  
  2220. Mit der Anweisung Maßstab wird festgelegt, mit welchem Faktor die in GeheNach,
  2221. Vorne und Hinten übergebenen Werte multipliziert werden. Damit ist es z.B.
  2222. möglich, im Heft ein Dreieck zu konstruieren und den Igel dieses Dreieck auf
  2223. dem Bildschirm zeichnen zu lassen, ohne jede einzelne Strecke an die
  2224. Schrittzahl auf dem Bildschirm anzupassen.
  2225.  
  2226.  Deklaration:
  2227.    PROCEDURE Maßstab(MaßstabsFaktor : REAL);
  2228.  
  2229.  Beispiel:
  2230.    Maßstab(1);
  2231.    Vorne(100);           Igel 1*100 Schritte vorwärts bewegen
  2232.    Maßstab(50);
  2233.    Vorne(1.5);           Igel um 1.5*50=75 Schritte vorwärts bewegen
  2234.  
  2235.  
  2236. MitIgel
  2237.  
  2238. Nach der Anweisung MitIgel ist der Igel sichtbar und wird jeweils nach einer
  2239. Bewegung neu gezeichnet bis die Anweisung OhneIgel ausgeführt wird. Durch die
  2240. Funktion IgelZeigen läßt sich feststellen, ob der Igel gezeigt wird.
  2241.  
  2242.  Deklaration:
  2243.    PROCEDURE MitIgel;
  2244.  
  2245.  Beispiel:
  2246.    MitIgel;              Igel zeigen.
  2247.    Vorne(100);           Igel wegwischen, 100 Schritte vorwärts bewegen und neu
  2248.                          zeichnen.
  2249.    OhneIgel;             Igel wegwischen und nicht wieder neu zeichnen.
  2250.    Vorne(100);           Igel um 100 Schritte vorwärts bewegen, ohne ihn zu zeichnen.
  2251.                          Es ist nur seine Spur sichtbar.
  2252.  
  2253.  
  2254. MitStift
  2255.  
  2256. Durch MitStift wird festgelegt, daß die Spur des Igels gezeichnet werden soll.
  2257.  
  2258.  Deklaration:
  2259.    PROCEDURE MitStift;
  2260.  
  2261.  Beispiel:
  2262.    OhneIgel;             Igel nicht zeigen.
  2263.    MitStift;             Stift absenken.
  2264.    Vorne(100);           Igel 100 Schritte vorwärts bewegen und seine Spur zeichnen.
  2265.    OhneStift;            Stift anheben.
  2266.    Vorne(100);           Der Igel hinterläßt keine Spur.
  2267.  
  2268.  
  2269. OhneIgel
  2270.  
  2271. Nach der Anweisung OhneIgel ist der Igel nicht sichtbar. Es wird aber seine
  2272. Spur gezeichnet, wenn die Bewegung mit Stift erfolgt. Durch die Funktion
  2273. IgelZeigen läßt sich feststellen, ob der Igel gezeigt wird.
  2274.  
  2275. #FF
  2276.  Deklaration:
  2277.    PROCEDURE OhneIgel;
  2278.  
  2279.  Beispiel:
  2280.    MitIgel;              Igel zeigen.
  2281.    Vorne(100);           Igel wegwischen, 100 Schritte vorwärts bewegen und neu
  2282.                          zeichnen.
  2283.    OhneIgel;             Igel wegwischen und nicht wieder neu zeichnen.
  2284.    Vorne(100);           Igel um 100 Schritte vorwärts bewegen, ohne ihn zu zeichnen.
  2285.                          Es ist nur seine Spur sichtbar.
  2286.  
  2287.  
  2288. OhneStift
  2289.  
  2290. Durch OhneStift wird festgelegt, daß die Spur des Igels nicht gezeichnet werden
  2291. soll.
  2292.  
  2293.  Deklaration:
  2294.    PROCEDURE OhneStift;
  2295.  
  2296.  Beispiel:
  2297.    OhneIgel;             Igel nicht zeigen.
  2298.    MitStift;             Stift absenken.
  2299.    Vorne(100);           Igel 100 Schritte vorwärts bewegen und seine Spur zeichnen.
  2300.    OhneStift;            Stift anheben.
  2301.    Vorne(100);           Der Igel hinterläßt keine Spur.
  2302.  
  2303.  
  2304. RechterBogen
  2305.  
  2306. Mit RechterBogen beschreibt der Igel einen Bogen von seiner augenblicklichen
  2307. Position und Richtung aus nach rechts und hinterläßt dabei eine Spur, wenn die
  2308. Bewegung mit Stift erfolgt.
  2309.  
  2310.  Deklaration:
  2311.    PROCEDURE RechterBogen(Radius, Winkel : REAL);
  2312.  
  2313.  Beispiel:
  2314.    RechterBogen(100, 45);        Der Igel beschreibt einen Bogen nach rechts mit einem
  2315.                                  Radius von 100 Schritten und einem Winkel von 45°.
  2316.  
  2317.  
  2318. Rechts
  2319.  
  2320. Rechts(x) veranlaßt den Igel, sich aus seiner augenblick-lichen Richtung um x
  2321. Grad nach rechts zu drehen.
  2322.  
  2323.  Deklaration:
  2324.    PROCEDURE Rechts(Winkel : REAL);
  2325.  
  2326.  Beispiel:
  2327.    DreheAuf(0);          Der Igel zeigt nach rechts.
  2328.    Rechts(90);           Der Igel zeigt nach unten.
  2329.  
  2330.  
  2331. #FF
  2332. Ursprung
  2333.  
  2334. Die Anweisung Ursprung entspricht der Anweisung GeheNach(0,0) und bewegt den
  2335. Igel zum Ursprung seines Koordinatensystems. Er zeigt dabei nach oben. Sein
  2336. Winkel zur positiven x-Achse beträgt dann 90°. Eine Beschreibung des
  2337. Koordinatensystems ist unter GeheNach zu finden.
  2338.  
  2339.  Deklaration:
  2340.    PROCEDURE Ursprung;
  2341.  
  2342.  Beispiel:
  2343.    Ursprung;             plaziert den Igel mitten im Grafikfenster.
  2344.  
  2345.  
  2346. Vorne
  2347.  
  2348. Durch die Anweisung Vorne(x) wird der Igel x Schritte vorwärts bewegt. Wenn die
  2349. Bewegung mit Stift erfolgt, ist seine Spur anschließend sichtbar.
  2350.  
  2351.  Deklaration:
  2352.    PROCEDURE Vorne(Schritte : REAL);
  2353.  
  2354.  Beispiel:
  2355.    Vorne(50); bewegt den Igel 50 Schritte vorwärts.
  2356.  
  2357.  
  2358. WoIgelX
  2359.  
  2360. Durch die Funktion WoIgelX läßt sich die x-Koordinate des Aufenthaltsortes des
  2361. Igels in seinem Koordinatensystem feststellen.
  2362.  
  2363.  Deklaration:
  2364.    FUNCTION WoIgelX : INTEGER;
  2365.  
  2366.  Beispiel:
  2367.    GeheNach(200, 100);
  2368.    Write(WoIgelX);               druckt den Wert 200.
  2369.  
  2370.  
  2371. WoIgelY
  2372.  
  2373. Durch die Funktion WoIgelY läßt sich die y-Koordinate des Aufenthaltsortes des
  2374. Igels in seinem Koordinatensystem feststellen.
  2375.  
  2376.  Deklaration:
  2377.    FUNCTION WoIgelY : INTEGER;
  2378.  
  2379.  Beispiel:
  2380.    GeheNach(200, 100);
  2381.    Write(WoIgelY);               druckt den Wert 100.
  2382.  
  2383. #FF
  2384. Standard-Grafik
  2385.  
  2386.  Circle                  GetMaxX                 GetMaxY                 GetX
  2387.  GetY                    Line                    LineTo                  MoveTo
  2388.  
  2389.  
  2390. Circle
  2391.  
  2392. Circle zeichnet einen Kreis auf dem Bildschirm. Da bei CGA- und Hercules-Karten
  2393. der Abstand zweier benachbarter Bildpunkte in x- und in y-Richtung verschieden
  2394. ist, werden die y-Koordinaten mit einem Korrekturfaktor multipliziert. (s. auch
  2395. yKorrekturFaktor)
  2396.  
  2397.  Deklaration:
  2398.    PROCEDURE Circle(xm, ym, Radius);
  2399.  
  2400.  Beispiel:
  2401.    Circle(50, 100, 30);          zeichnet einen Kreis mit dem Mittelpunkt M(50/100)
  2402.                                  und dem Radius r=30, der in x-Richtung 30 Bildpunkten
  2403.                                  entspricht.
  2404.  
  2405.  
  2406. GetMaxX
  2407.  
  2408. GetMaxX gibt die Anzahl der Bildpunkte minus eins in x-Richtung auf dem
  2409. Grafikschirm an. ITG-PASCAL verwendet für alle Grafikkarten einheitlich 640
  2410. Punkte in x-Richtung.
  2411.  
  2412.  Deklaration:
  2413.    FUNCTION GetMaxX : INTEGER;
  2414.  
  2415.  Beispiel:
  2416.    Write(GetMaxX);               druckt 639=640-1 für alle Grafikkarten aus.
  2417.  
  2418.  
  2419. GetMaxY
  2420.  
  2421. GetMaxY gibt die Anzahl der Bildpunkte minus eins in y-Richtung auf dem
  2422. Grafikschirm an.
  2423.  
  2424.  Deklaration:
  2425.    FUNCTION GetMaxY : INTEGER;
  2426.  
  2427.  Beispiel:
  2428.    Write(GetMaxX);               druckt
  2429.                                  199=200-1 für CGA-Karten
  2430.                                  347=348-1 für Herculeskarten
  2431.                                  349=350-1 für EGA-Karten
  2432.                                  479=480-1 für VGA-Karten
  2433.  
  2434.  
  2435. GetX
  2436.  
  2437. GetX liefert die x-Koordinate des Grafik-Cursors zurück.
  2438.  
  2439.  Deklaration:
  2440.    FUNCTION GetX : INTEGER;
  2441.  
  2442. #FF
  2443.  Beispiel:
  2444.    MoveTo(100, 50);
  2445.    Write(GetX);          druckt 100 aus.
  2446.    LineTo(-200, 40);
  2447.    Write(GetX);          druckt -200 aus.
  2448.  
  2449.  
  2450. GetY
  2451.  
  2452. GetY liefert die y-Koordinate des Grafik-Cursors zurück.
  2453.  
  2454.  Deklaration:
  2455.    FUNCTION GetY : INTEGER;
  2456.  
  2457.  Beispiel:
  2458.    MoveTo(100, 50);
  2459.    Write(GetY);                  druckt 50 aus.
  2460.    LineTo(-200, 40);
  2461.    Write(GetY);                  druckt 40 aus.
  2462.  
  2463.  
  2464. Line
  2465.  
  2466. Line(x1,y1,x2,y2) zeichnet eine Strecke zwischen zwei Punkten P1(x1/y1) und
  2467. P2(x2/y2) auf dem Grafikschirm. Der Ursprung des Koordinatensystems liegt in
  2468. der Mitte des Bildschirmfensters. Die Lage des Grafik-Cursors wird nicht
  2469. beeinflußt.
  2470.  
  2471.  Deklaration:
  2472.    PROCEDURE Line(x1, y1, x2, y2 : INTEGER);
  2473.  
  2474.  Beispiel:
  2475.    Line(-100, -30, 50, 80);      zeichnet die Strecke mit den Endpunkten
  2476.                                  P1(-100/-30) und P2(50/80).
  2477.  
  2478.  
  2479. LineTo
  2480.  
  2481. LineTo(x,y) verbindet den Punkt, auf dem sich der Grafik-Cursor befindet, mit
  2482. dem Punkt P(x/y). Anschließend wird der Grafik-Cursor auf den Punkt P(x/y)
  2483. gesetzt. (s. auch MoveTo)
  2484.  
  2485.  Deklaration:
  2486.    LineTo(x, y : INTEGER);
  2487.  
  2488.  Beispiel:
  2489.    MoveTo(-100, -30);            setzt den Grafik-Cursor auf P(-100/-30).
  2490.    LineTo(50, 80);               verbindet P(-100/-30) mit Q(50/80) und setzt den
  2491.                                  Grafik-Cursor auf Q(50/80). [Ergibt das gleiche wie
  2492.                                  Line(-100,-30,50,80)]
  2493.    LineTo(0, 70);                verbindet Q(50/80) mit R(0/70).
  2494.  
  2495.  
  2496. MoveTo
  2497.  
  2498. ITG-PASCAL hat vier verschiedene Cursor für Text, Standard-Grafik, Igel-Grafik
  2499. und Weltkoordinaten. MoveTo bewegt den Grafik-Cursor an eine neue Position. Es
  2500. entspricht den Anweisungen GeheNach für den Igel und GotoXY für den
  2501. Text-Cursor.
  2502.  
  2503. #FF
  2504.  Deklaration:
  2505.    MoveTo(x, y : INTEGER);
  2506.  
  2507.  Beispiel:
  2508.    MoveTo(-100, -30);            setzt den Grafik-Cursor auf P(-100/-30).
  2509.    LineTo(50, 80);               verbindet P(-100/-30) mit Q(50/80) und setzt den
  2510.                                  Grafik-Cursor auf Q(50/80).
  2511.    MoveTo(-15, -45);             setzt den Grafik-Cursor auf R(-15/-45).
  2512.    LineTo(0, 70);                verbindet R(-15/-45) mit S(0/70).
  2513.  
  2514. #FF
  2515. ITG-Pascal-Grafik
  2516.  
  2517.  Bogen                           DefiniereWelt                   DruckeBildschirm
  2518.  Färben                          FunktionsGraf                   FunktionstermFehler
  2519.  GrafGotoXY                      GrafikFenster                   GrafikKorrekturAus
  2520.  GrafikKorrekturEin              GrafikSchirm                    GrafWrite
  2521.  Kreis                           MitWeltRaster                   OhneweltRaster
  2522.  PapierFarbe                     Punkt                           SetzeFontWerte
  2523.  StiftFarbe                      Strecke                         TextSchirm
  2524.  WähleFont                       WeltGeheNach                    WeltPixelDX
  2525.  WeltPixelDY                     WeltPunkt                       WeltStrecke
  2526.  WeltStreckeNach                 WeltXMax                        WeltXMin
  2527.  WeltYMax                        WeltYMin                        Wischen
  2528.  WoGrafikX                       WoGrafikY                       yKorrekturFaktor
  2529.  
  2530.  
  2531. Bogen
  2532.  
  2533. Mit Bogen wird ein Kreisbogen gezeichnet.
  2534.  
  2535.  Deklaration:
  2536.    PROCEDURE Bogen(xm, ym, Radius, AnfangsWinkel, DrehWinkel : INTEGER);
  2537.  
  2538.  Beispiel:
  2539.    Bogen(0, 0, 100, 45, 90);     zeichnet einen Bogen, der auf einem Kreis mit dem
  2540.                                  Mittelpunkt M(0/0) liegt und dessen Radius r=100 ist,
  2541.                                  beginnend bei dem Winkel α=45° zur positiven
  2542.                                  x-Achse, wobei das Ende des Bogens bei
  2543.                                  ß=45°+90°=135° liegt.
  2544.  
  2545.  
  2546. DefiniereWelt
  2547.  
  2548. Mit DefiniereWelt wird ein Koordinatensystem gezeichnet, in dem mit den
  2549. Welt-Prozeduren WeltPunkt, WeltStrecke, WeltGeheNach und WeltStreckeNach
  2550. orientiert an den Koordinaten des Systems gezeichnet wird. Die geforderten
  2551. Grenzen des Systems werden als Minimum angesehen. ITG-PASCAL zeichnet das
  2552. kleinste Koordinatensystem, das größer ist als das geforderte, wobei darauf
  2553. geachtet wird, daß der Rasterabstand auf den Achsen gleichmäßig ist. Auf CGA-,
  2554. Herkules- und EGA-Karten muß dazu vorher der Schalter yKorrekturAus gesetzt
  2555. werden. Andernfalls ergibt sich für das Raster in y-Richtung keine gleichmäßige
  2556. Einteilung. Wenn kein Raster gezeichnet werden soll, ist OhneWeltRaster vorher
  2557. auszuführen.
  2558.  
  2559.  Deklaration:
  2560.    PROCEDURE DefiniereWelt(LinkeGrenze, UntereGrenze,
  2561.                                    RechteGrenze, ObereGrenze : REAL);
  2562.  
  2563.  Beispiel:
  2564.    yKorrekturAus;                     gleichmäßiges Raster
  2565.    MitWeltRaster;                     Punktraster zeichnen, wenn eine Welt definiert wird
  2566.    DefiniereWelt(-5, -2.5, 10, 4.5);  Koordinatensystem mit
  2567.                                       5,0 <= x <= 10,0 und
  2568.                                       -2,5 <= y <=  4,5 definieren und zeichnen
  2569.    WeltStrecke(-3, -2.2, 7.3, 3.4);   Strecke mit den Endpunkten P(-3/-2,2) und
  2570.                                       Q(7,3/3,4)  zeichnen
  2571.  
  2572.  
  2573. #FF
  2574. DruckeBildschirm
  2575.  
  2576. Mit DruckeBildschirm wird der Inhalt des Bildschirms sowohl im Textmodus als
  2577. auch im Grafikmodus mit dem Drucker gedruckt. Weil bei einem Drucker das
  2578. Längenverhältnis von Strecken in x- und y-Richtung anders ist als auf dem
  2579. Bildschirm, erscheinen Kreise als Ellipsen und Quadrate als Rechtecke.
  2580.  
  2581.  Deklaration:
  2582.    PROCEDURE DruckeBildschirm;
  2583.  
  2584.  Beispiel:
  2585.    GrafikSchirm;
  2586.    ZeichneIrgendetwas;   Hier kann eine beliebige Zeichnung erstellt werden.
  2587.    DruckeBildschirm;     Die Zeichnung wird gedruckt.
  2588.    TextSchirm;
  2589.    SchreibeIrgendetwas;  Hier kann beliebiger Text geschrieben werden.
  2590.    DruckeBildschirm;     Der Text wird gedruckt.
  2591.  
  2592.  
  2593. Färben
  2594.  
  2595. Färben(x,y,Farbe) färbt einen Bereich beginnend im Punkt P(x/y) in der Farbe
  2596. Farbe ein, der von einer Linie begrenzt ist, die nicht die Papierfarbe hat. Als
  2597. Farben sind schwarz, grau und weiß zugelassen.
  2598.  
  2599.  Deklaration:
  2600.    PROCEDURE Färben(x, y, Farbe : INTEGER);
  2601.  
  2602.  Beispiel:
  2603.    PapierFarbe(Schwarz);
  2604.    StiftFarbe(Weiß);
  2605.    Kreis(100, 50, 30);
  2606.    Färben(100, 50, Grau);        Weil der Punkt P(100/50) innerhalb des Kreises liegt,
  2607.                                  wird der Kreis grau  ausgefüllt. Für einen Punkt auf
  2608.                                  dem Kreis geschieht nichts, für einen Punkt außerhalb
  2609.                                  des Kreises wird der Bereich außerhalb grau gefärbt.
  2610.  
  2611.  
  2612. FunktionsGraf
  2613.  
  2614. FunktionsGraf zeichnet den Grafen einer Funktion mit der Variablen x innerhalb
  2615. der angegebenen Grenzen. Dabei wird versucht, eine gleichmäßige Einteilung der
  2616. Achsen zu erhalten. Der tatsächlich gezeichnete Ausschnitt ist etwas größer als
  2617. angegeben. Zum Zeichnen wird ein Verfahren benutzt, das pro Bildpunkt zwei bis
  2618. zu drei Funktionswerten berechnet, damit auch in ungünstigen Fällen ein
  2619. vernünftiger Funktionsgraf entsteht.
  2620.  
  2621. Achtung : Die unabhängige Variable ist mit "x" festgelegt!
  2622.  
  2623.  Deklaration:
  2624.    PROCEDURE FunktionsGraf(FunktionsTerm : STRING;
  2625.                                    LinkeGrenze, UntereGrenze,
  2626.                                    RechteGrenze, ObereGrenze : REAL);
  2627.  
  2628.  Beispiel:
  2629.    GrafikKorrekturAus;                           gleichmäßiges Raster in y-Richtung
  2630. #FF
  2631.    FunktionsGraf("sin(x)", -5, -1.5, 5, 1.5);    Graf der Sinus-Funktion für
  2632.                                                  -5 <= x <= 5 und -1.5 <= y <= 1.5
  2633.    FunktionsGraf("sin(2x)", -5, -2, 5, 2);       richtig : 2*x !
  2634.    Write(FunktionstermFehler);                   ergibt den Wert 6, weil das 6. Zeichen
  2635.                                                  fehlerhaft ist.
  2636.  
  2637.  
  2638. FunktionstermFehler
  2639.  
  2640. Wenn den Prozeduren FunktionsGraf oder DefiniereFunktionsterm ein fehlerhafter
  2641. Funktionsterm übergeben wurde, ergibt die Funktion FunktionstermFehler die
  2642. Stelle, an der der Fehler auftrat, ansonsten ergibt sie Null.
  2643.  
  2644.  Deklaration:
  2645.    FUNCTION FunktionstermFehler : INTEGER;
  2646.  
  2647.  Beispiel:
  2648.    FunktionsGraf("sin(2x)", -5, -2, 5, 2);  richtig : 2*x !
  2649.    Write(FunktionstermFehler);              ergibt den Wert 6, weil das 6. Zeichen
  2650.                                             fehlerhaft ist.
  2651.  
  2652.  
  2653. GrafGotoXY
  2654.  
  2655. GrafGotoXY(x,y) setzt den Grafikcursor auf den Punkt P(x/y). Für die
  2656. Koordinaten gelten die Werte des Koordinatensystems im Grafikmodus. Der
  2657. Mittelpunkt des Bildschirms hat die Koordinaten (0/0). Die x-Werte nehmen nach
  2658. rechts bis 320, nach links bis -320 zu, die y-Werte nach oben je nach
  2659. Grafikkarte bis 240, nach unten bis -240.
  2660.  
  2661.  Deklaration :
  2662.    PROCEDURE GrafGotoXY(x, y : WORD);
  2663.  
  2664.  Beispiel :
  2665.    GrafGotoXY(0, 0);             Mittelpunkt des Bildschirms
  2666.    GrafGotoXY(-320, 240);        linker oberer Eckpunkt
  2667.  
  2668.  
  2669. GrafikFenster
  2670.  
  2671. Wenn nur ein bestimmter Bereich des Grafikschirms für eine Zeichnung verwendet
  2672. werden soll, kann der übrige Bereich gesperrt werden. Dazu dient die Anweisung
  2673. GrafikFenster(x1,y1,x2,y2), mit der ein Rechteck mit bildschirmparallelen
  2674. Seiten mit dem linken oberen Eckpunkt P(x1/y1) und dem rechten unteren Eckpunkt
  2675. Q(x2/y2) als Zeichenfläche definiert wird. Der Ursprung des Koordinatensystems
  2676. liegt innerhalb dieses Fensters automatisch im Mittelpunkt des Fensters.
  2677.  
  2678.  Deklaration:
  2679.    GrafikFenster(x1, y1, x2, y2 : INTEGER);
  2680.  
  2681.  Beispiel:
  2682.    GrafikFenster(50, 20, 500, 220);   öffnet ein Fenster mit x-Werten zwischen -225
  2683.                                       und 225 und y-Werten zwischen -100 und 100.
  2684.                                       Die linke obere Ecke ist in x-Richtung 50
  2685.                                       Punkte, in y-Richtung 20 Punkte von dem linken
  2686.                                       oberen Eckpunkt des Bildschirms entfernt.
  2687.  
  2688.  
  2689. #FF
  2690. GrafikKorrekturAus
  2691.  
  2692. GrafikKorrekturAus bewirkt, daß Punkt- und Strecken-Zeich-nungen nicht mehr den
  2693. Bildschirmverzerrungen bei CGA- Hercules- und EGA-Karten angepaßt werden.
  2694. Deshalb stimmen die y-Koordinaten für Standardgrafik und für Igelgrafik bei
  2695. ausgeschalteter Korrektur nicht mehr überein.
  2696.  
  2697.  Deklaration:
  2698.    PROCEDURE GrafikKorrekturAus;
  2699.  
  2700.  Beispiel:
  2701.    GrafikKorrekturEin;           Korrektur in y-Richtung einschalten
  2702.    Circle(-105, 0, 100);         Kreis schlagen
  2703.    Line(-105, 0, -105, 100);     Strecke vom Kreismittelpunkt senkrecht nach oben
  2704.                                  zeichnen. Wegen der Korrektur endet sie auf der
  2705.                                  Kreislinie.
  2706.    GrafikKorrekturAus;           Korrektur in y-Richtung ausschalten
  2707.    Circle(105, 0, 100);          Kreis schlagen
  2708.    Line(105, 0, 105, 100);       Strecke vom Kreismittelpunkt senkrecht nach oben
  2709.                                  zeichnen. Wegen der ausgeschalteten Korrektur endet
  2710.                                  sie nicht auf der Kreislinie.
  2711.  
  2712. GrafikKorrekturEin
  2713.  
  2714. GrafikKorrekturEin bewirkt, daß Punkt- und Strecken-Zeichnungen den
  2715. Bildschirm-verzerrungen angepaßt werden. Deshalb stimmen die y-Koordinaten für
  2716. Standardgrafik und für Igelgrafik jetzt bei allen Grafikkarten überein.
  2717.  
  2718.  Deklaration:
  2719.    PROCEDURE GrafikKorrekturEin;
  2720.  
  2721.  Beispiel:
  2722.    GrafikKorrekturEin;           Korrektur in y-Richtung einschalten
  2723.    Circle(-105, 0, 100);         Kreis schlagen
  2724.    Line(-105, 0, -105, 100);     Strecke vom Kreismittelpunkt senkrecht nach oben
  2725.                                  zeichnen. Wegen der Korrektur endet sie auf der
  2726.                                  Kreislinie.
  2727.    GrafikKorrekturAus;           Korrektur in y-Richtung ausschalten
  2728.    Circle(105, 0, 100);          Kreis schlagen
  2729.    Line(105, 0, 105, 100);       Strecke vom Kreismittelpunkt senkrecht nach oben
  2730.                                  zeichnen. Wegen der ausge schalteten Korrektur endet
  2731.                                  sie nicht auf der Kreislinie.
  2732.  
  2733.  
  2734. GrafikSchirm
  2735.  
  2736. Mit der Anweisung GrafikSchirm wird aus dem Textmodus in den Grafikmodus
  2737. gewechselt. ITG-PASCAL erkennt die vorhandene Grafikkarte automatisch.
  2738. Grafikanweisungen werden nur im Grafikmodus ausgeführt, sonst bricht das
  2739. Programm mit der Fehlermeldung "Programm wegen Grafikanweisung im Textmodus in
  2740. Zeile xxx beendet." ab.
  2741.  
  2742.  Deklaration:
  2743.    PROCEDURE GrafikSchirm;
  2744.  
  2745.  Beispiel:
  2746.    GrafikSchirm;                 Zeichnen im Grafikmodus ermöglichen.
  2747.    Strecke(0, 0, 100, 100);      Eine Strecke wird gezeichnet.
  2748. #FF
  2749.    WriteLn("im Grafikmodus");    Auf dem Grafikschirm wird "im Grafikmodus"
  2750.                                  gedruckt.
  2751.    TextSchirm;                   Zurück in den Textmodus.
  2752.    WriteLn("im Textmodus");      Auf dem Textschirm wird "im Textmodus"
  2753.                                  gedruckt. Die Textausgabe erfolgt hier
  2754.                                  wesentlich schneller als im Grafikmodus.
  2755.  
  2756.  
  2757. GrafWrite
  2758.  
  2759. Mit GrafWrite erfolgt die Textausgabe auf dem Grafikschirm an den mit
  2760. GrafGotoXY definierten Koordinaten des Grafikschirms. Es gelten die selben
  2761. Bedingungen wie bei der Write-Anweisung im Textmodus.
  2762.  
  2763. Achtung : Vor der ersten Verwendung von GrafWrite muß mit "WähleFont" ein
  2764. Zeichensatz geladen werden, sonst bricht das Programm mit einer Fehlermeldung
  2765. ab.
  2766.  
  2767.  Deklaration:
  2768.    PROCEDURE GrafWrite(v : VariableBeliebigenTyps);
  2769.  
  2770.  Beispiel:
  2771.    GrafikSchirm;                 Schreiben im Grafikmodus ermöglichen.
  2772.    WähleFont("LITT");            Zeichensatz laden
  2773.    SetzeFontWerte(2,2,90);       mit doppelter Schriftgröße senkrecht
  2774.    GrafWrite("senkrecht");       nach oben "senkrecht" schreiben.
  2775.  
  2776.  
  2777. Kreis
  2778.  
  2779. Kreis zeichnet einen Kreis auf dem Bildschirm. Da bei CGA-, Hercules- und
  2780. EGA-Karten der Abstand zweier benachbarter Bildpunkte in x- und in y-Richtung
  2781. verschieden ist, werden die y-Koordinaten mit einem Korrekturfaktor
  2782. multipliziert. (s. auch yKorrekturFaktor)
  2783.  
  2784.  Deklaration:
  2785.    PROCEDURE Kreis(xm, ym, Radius);
  2786.  
  2787.  Beispiel:
  2788.    Kreis(50, 100, 30);           zeichnet einen Kreis mit dem Mittelpunkt M(50/100)
  2789.                                  und dem Radius r=30, der in x-Richtung 30 Bildpunkten
  2790.                                  entspricht.
  2791.  
  2792.  
  2793. OhneWeltRaster
  2794.  
  2795. OhneWeltRaster bewirkt, daß in dem mit Definierewelt definierten
  2796. Koordinatensystem kein Punktraster gezeichnet wird.
  2797. Standardeinstellung ist MitWeltRaster.
  2798.  
  2799.  Deklaration:
  2800.    PROCEDURE MitWeltRaster;
  2801.  
  2802.  Beispiel:
  2803.    yKorrekturAus;                        gleichmäßiges Raster
  2804.    OhneWeltRaster;                       kein Punktraster zeichnen, wenn eine Welt
  2805.                                          definiert wird
  2806. #FF
  2807.    DefiniereWelt(-5, -2.5, 10, 4.5);     Koordinatensystem mit -5,0 <= x <= 10,0 und
  2808.                                          -2,5 <= y<=  4,5 definieren und zeichnen
  2809.  
  2810.  
  2811. MitWeltRaster
  2812.  
  2813. MitWeltRaster bewirkt, daß in dem mit Definierewelt definierten
  2814. Koordinatensystem ein Punktraster gezeichnet wird. Das Raster kann vor der
  2815. Definition der Welt mit OhneWeltRaster unterdrückt werden.
  2816. Standardeinstellung ist MitWeltRaster.
  2817.  
  2818.  Deklaration:
  2819.    PROCEDURE MitWeltRaster;
  2820.  
  2821.  Beispiel:
  2822.    yKorrekturAus;                        gleichmäßiges Raster
  2823.    MitWeltRaster;                        ein Punktraster zeichnen, wenn eine Welt
  2824.                                          definiert wird
  2825.    DefiniereWelt(-5, -2.5, 10, 4.5);     Koordinatensystem mit -5,0 <= x <= 10,0
  2826. und
  2827.                                          -2,5 <= y <=  4,5 definieren und zeichnen
  2828.  
  2829.  
  2830. PapierFarbe
  2831.  
  2832. Mit PapierFarbe wird die Farbe des Hintergrundes für alle Grafikanweisungen
  2833. festgesetzt. Der Hintergrund wird aber erst durch die Anweisung Wischen in der
  2834. gewählten Farbe dargestellt. Zur Verfügung stehen auf CGA- und Herkules-Karten
  2835. die Farben Schwarz(0), Grau(7) und Weiß(15), auf VGA-Karten 16 Farben von
  2836. Schwarz bis Weiß mit den Farbwerten 0 bis 15. Andere Werte sind nicht
  2837. zugelassen.
  2838.  
  2839.  Deklaration:
  2840.    PROCEDURE PapierFarbe(Farbe : INTEGER);
  2841.  
  2842.  Beispiel:
  2843.    PapierFarbe(Schwarz);
  2844.    Wischen;                      Der Hintergrund erscheint schwarz.
  2845.    PapierFarbe(Grau);
  2846.    Wischen;                      Der Hintergrund erscheint grau.
  2847.    PapierFarbe(Weiß);
  2848.    Wischen;                      Der Hintergrund erscheint weiß.
  2849.    PapierFarbe(Rot);             Nur auf VGA-Karten
  2850.    Wischen;                      Der Hintergrund erscheint rot.
  2851.  
  2852.  
  2853. Punkt
  2854.  
  2855. Mit der Anweisung Punkt(x, y) wird der Punkt P(x/y) auf dem Grafikschirm
  2856. gezeichnet. Der Ursprung des Achsenkreuzes liegt in der Mitte des
  2857. Grafikfensters.
  2858.  
  2859.  Deklaration:
  2860.    PROCEDURE Punkt(x, y : INTEGER);
  2861.  
  2862.  Beispiel:
  2863.    Punkt(100, 50);       zeichnet den Punkt P(100/50).
  2864.  
  2865.  
  2866. #FF
  2867. SetzeFontWerte
  2868.  
  2869. Nachdem mit WähleFont ein Vektor-Zeichensatz geladen wurde, kann mit
  2870. SetzeFontWerte sowohl die Größe der Buchstaben in beiden Richtungen als auch
  2871. die Schreibrichtung verändert werden. Die Richtung wird als Winkel gegen den
  2872. Uhrzeigersinn zur positiven x-Achse in Grad gemessen.
  2873.  
  2874.  Deklaration:
  2875.    PROCEDURE SetzeFontWerte(xGröße, yGröße, Richtung : REAL);
  2876.  
  2877.  Beispiel:
  2878.    GrafikSchirm;                 Schreiben im Grafikmodus ermöglichen.
  2879.    WähleFont("LITT");            Zeichensatz LITT.CHR laden
  2880.    SetzeFontWerte(2,2,90);       mit doppelter Schriftgröße senkrecht
  2881.    GrafWrite("senkrecht");       nach oben "senkrecht" schreiben.
  2882.  
  2883.  
  2884. StiftFarbe
  2885.  
  2886. Mit StiftFarbe wird die Farbe des Zeichenstiftes für alle Grafikanweisungen
  2887. festgesetzt, die keine Farbe als Parameter enthalten. Zur Verfügung stehen auf
  2888. CGA- und Herkules-Karten die Farben Schwarz(0), Grau(7) und Weiß(15), auf
  2889. VGA-Karten 16 Farben von Schwarz bis Weiß mit den Farbwerten 0 bis 15. Andere
  2890. Werte sind nicht zugelassen.
  2891.  
  2892.  Deklaration:
  2893.    PROCEDURE StiftFarbe(Farbe : INTEGER);
  2894.  
  2895.  Beispiel:
  2896.    StiftFarbe(Grau);             Zeichenfarbe Grau festlegen.
  2897.    Strecke(0, 0, 100, 50);       Weil nicht jeder Punkt weiß gezeichnet wird, erscheint
  2898.                                  die Strecke in ihrer Farbe nicht so intensiv, also grau.
  2899.  
  2900.  
  2901. Strecke
  2902.  
  2903. Strecke(x1,y1,x2,y2) zeichnet eine Strecke zwischen zwei Punkten P1(x1/y1) und
  2904. P2(x2/y2) auf dem Grafikschirm. Der Ursprung des Koordinatensystems liegt in
  2905. der Mitte des Bildschirmfensters.
  2906.  
  2907.  Deklaration:
  2908.    PROCEDURE Strecke(x1, y1, x2, y2 : INTEGER);
  2909.  
  2910.  Beispiel:
  2911.    Strecke(-100, -30, 50, 80);           zeichnet die Strecke mit den Endpunkten
  2912.                                          P1(-100/-30) und P2(50/80).
  2913.  
  2914.  
  2915. TextSchirm
  2916.  
  2917. Mit der Anweisung TextSchirm wird aus dem Grafikmodus zurück in den Textmodus
  2918. gewechselt.
  2919.  
  2920.  Deklaration:
  2921.    PROCEDURE TextSchirm;
  2922.  
  2923. #FF
  2924.  Beispiel:
  2925.    GrafikSchirm;                 Zeichnen im Grafikmodus ermöglichen.
  2926.    Strecke(0, 0, 100, 100);      Eine Strecke wird gezeichnet.
  2927.    WriteLn("im Grafikmodus");    Auf dem Grafikschirm wird "im Grafikmodus"
  2928.                                  gedruckt.
  2929.    TextSchirm;                   Zurück in den Textmodus.
  2930.    WriteLn("im Textmodus");      Auf dem Textschirm wird "im Textmodus"
  2931.                                  gedruckt. Die Textausgabe erfolgt hier
  2932.                                  wesentlich schneller als im Grafikmodus.
  2933.  
  2934.  
  2935. WähleFont
  2936.  
  2937. Bevor auf dem Grafikschirm mit GrafWrite geschrieben werden kann, muß mit
  2938. WähleFont ein Vektor-Zeichensatz nach BORLAND-Standard geladen worden sein.
  2939. Mitgeliefert werden die Zeichensätze "LITT.CHR", "GOTH.CHR", "SANS.CHR" und
  2940. "TRIP.CHR". Weitere Zeichensätze sind von der Firma BORLAND oder im Bereich
  2941. Shareware/Public Domain zu bekommen.
  2942.  
  2943. Nach dem erfolgreichen Laden eines Zeichensatzes werden automatisch
  2944. Standardwerte mit SetzeFontWerte(1, 1, 0) gesetzt.
  2945.  
  2946.  Deklaration:
  2947.    PROCEDURE WähleFont(FontName : STRING);
  2948.  
  2949.  Beispiel:
  2950.    GrafikSchirm;                 Schreiben im Grafikmodus ermöglichen.
  2951.    WähleFont("LITT");            Zeichensatz LITT.CHR laden
  2952.    SetzeFontWerte(2,2,90);       mit doppelter Schriftgröße senkrecht
  2953.    GrafWrite("senkrecht");       nach oben "senkrecht" schreiben.
  2954.  
  2955.  
  2956. WeltGeheNach
  2957.  
  2958. WeltGeheNach setzt den Weltcursor auf die angegebenen Koordinaten des mit
  2959. DefiniereWelt definierten Koordinatensystems. Mit WeltStreckeNach wird dieser
  2960. Punkt mit einem zweiten verbunden.
  2961.  
  2962.  Deklaration:
  2963.    PROCEDURE WeltGeheNach(x, y : REAL);
  2964.  
  2965.  Beispiel:
  2966.    yKorrekturAus;                        gleichmäßiges Raster
  2967.    DefiniereWelt(-5, -2.5, 10, 4.5);     Koordinatensystem mit
  2968.                                          -5,0 <= x <= 10,0 und
  2969.                                          -2,5 <= y <=  4,5 definieren und zeichnen
  2970.    WeltGeheNach(-3, -2.2, 7.3, 3.4);     Weltcursor auf P(-3/-2,2) setzen
  2971.  
  2972.  
  2973. WeltPixelDX
  2974.  
  2975. WeltPixelDX liefert die Differenz der x-Koordinaten zweier benachbarter
  2976. Bildpunkte in einem mit DefiniereWelt definierten Koordiantensystem.
  2977.  
  2978.  Deklaration:
  2979.    FUNKTION WeltPixelDX : REAL;
  2980.  
  2981. #FF
  2982.  Beispiel:
  2983.    DefiniereWelt(-3, -4, 5, 6);          Welt definieren
  2984.    WriteLn(WeltPixelDX);                 druckt die Differenz der x-Koordinaten zweier
  2985.                                          benachbarter Bildpunkte
  2986.  
  2987.  
  2988. WeltPixelDY
  2989.  
  2990. WeltPixelDY liefert die Differenz der y-Koordinaten zweier benachbarter
  2991. Bildpunkte in einem mit DefiniereWelt definierten Koordiantensystem.
  2992.  
  2993.  Deklaration:
  2994.    FUNKTION WeltPixelDY : REAL;
  2995.  
  2996.  Beispiel:
  2997.    DefiniereWelt(-3, -4, 5, 6);          Welt definieren
  2998.    WriteLn(WeltPixelDY);                 druckt die Differenz der y-Koordinaten zweier
  2999.                                          benachbarter Bildpunkte
  3000.  
  3001.  
  3002. WeltPunkt
  3003.  
  3004. WeltPunkt zeichnet einen Punkt in dem mit DefiniereWelt definierten
  3005. Koordinatensystem.
  3006.  
  3007.  Deklaration:
  3008.    PROCEDURE WeltPunkt(x, y : REAL);
  3009.  
  3010.  Beispiel:
  3011.    DefiniereWelt(-5, -2.5, 10, 4.5);     Koordinatensystem mit
  3012.                                          -5,0 <= x <= 10,0 und
  3013.                                          -2,5 <= y <=  4,5 definieren und zeichnen
  3014.    WeltPunkt(-3, -2.2);                  zeichnet den Punkt P(-3/-2,2)
  3015.  
  3016.  
  3017. WeltStrecke
  3018.  
  3019. WeltStrecke verbindet die beiden mit ihren x- und y-Koordinaten angegebenen
  3020. Punkte in dem mit DefiniereWelt definierten Koordinatensystem.
  3021.  
  3022.  Deklaration:
  3023.    PROCEDURE WeltStrecke(x1, y1, x2, y2 : REAL);
  3024.  
  3025.  Beispiel:
  3026.    yKorrekturAus;                        gleichmäßiges Raster
  3027.    DefiniereWelt(-5, -2.5, 10, 4.5);     Koordinatensystem mit
  3028.                                          -5,0 <= x <= 10,0 und
  3029.                                          -2,5 <= y <=  4,5 definieren und zeichnen
  3030.    WeltStrecke(-3, -2.2, 7.3, 3.4);      Strecke mit den Endpunkten P(-3/-2,2) und
  3031.                                          Q(7,3/3,4) zeichnen
  3032.  
  3033.  
  3034. WeltStreckeNach
  3035.  
  3036. WeltStreckeNach verbindet den angegebenen Punkt mit dem Punkt in dem mit
  3037. DefiniereWelt definierten Koordinaten-system, auf dem sich der Weltcursor
  3038. befindet. Der Weltcursor wird anschließend auf den angegebenen Punkt gesetzt.
  3039.  
  3040. #FF
  3041.  Deklaration:
  3042.    PROCEDURE WeltStreckeNach(x, y : REAL);
  3043.  
  3044.  Beispiel:
  3045.    yKorrekturAus;                        gleichmäßiges Raster
  3046.    DefiniereWelt(-5, -2.5, 10, 4.5);     Koordinatensystem mit
  3047.                                          -5,0 <= x <= 10,0 und
  3048.                                          -2,5 <= y <=  4,5 definieren und zeichnen
  3049.    WeltGeheNach(-3, -2.2);               Weltcursor auf P(-3/-2,2) setzen
  3050.    WeltStreckeNach(7.3, 3.4);            P(-3/-2,2) und Q(7,3/3,4) verbinden
  3051.    WeltStreckeNach(-1.3, 0.4);           Q(7,3/3,4) und R(-1,3/0,4) verbinden
  3052.  
  3053.  
  3054. WeltXMax
  3055.  
  3056. WeltXMax liefert die x-Koordinate des äußersten rechten Bildpunktes in einem
  3057. mit DefiniereWelt definierten Koordiantensystem. Der Wert ist meistens größer
  3058. als der bei DefiniereWelt für diesen Wert übergebene Parameter, da ITG-PASCAL
  3059. das Koordiantensystem immer so anlegt, daß gleiche Intervallbreiten auf einer
  3060. Achse auch immer gleich viele Bildpunkte enthalten.
  3061.  
  3062.  Deklaration:
  3063.    FUNKTION WeltXMax : REAL;
  3064.  
  3065.  Beispiel:
  3066.    DefiniereWelt(-3, -4, 5, 6);          Welt definieren
  3067.    WriteLn(WeltXMax);                    druckt den Wert der x-Koordinate des
  3068.                                          äußersten rechten Bildpunktes des Koordinaten-
  3069.                                          systems. Der Wert ist etwas größer als 5.
  3070.  
  3071.  
  3072. WeltXMin
  3073.  
  3074. WeltXMin liefert die x-Koordinate des äußersten linken Bildpunktes in einem mit
  3075. DefiniereWelt definierten Koordiantensystem. Der Wert ist meistens kleiner als
  3076. der bei DefiniereWelt für diesen Wert übergebene Parameter, da ITG-PASCAL das
  3077. Koordiantensystem immer so anlegt, daß gleiche Intervallbreiten auf einer Achse
  3078. auch immer gleich viele Bildpunkte enthalten.
  3079.  
  3080.  Deklaration:
  3081.    FUNKTION WeltXMin : REAL;
  3082.  
  3083.  Beispiel:
  3084.    DefiniereWelt(-3, -4, 5, 6);          Welt definieren
  3085.    WriteLn(WeltXMin);                    druckt den Wert der x-Koordinate des
  3086.                                          äußersten linken Bildpunktes des Koordinaten-
  3087.                                          systems. Der Wert ist etwas kleiner als 5.
  3088.  
  3089.  
  3090. WeltYMax
  3091.  
  3092. WeltYMax liefert die y-Koordinate des obersten Bildpunktes in einem mit
  3093. DefiniereWelt definierten Koordiantensystem. Der Wert ist meistens größer als
  3094. der bei DefiniereWelt für diesen Wert übergebene Parameter, da ITG-PASCAL das
  3095. Koordiantensystem immer so anlegt, daß gleiche Intervallbreiten auf einer Achse
  3096. auch immer gleich viele Bildpunkte enthalten.
  3097.  
  3098. #FF
  3099.  Deklaration:
  3100.    FUNKTION WeltYMax : REAL;
  3101.  
  3102.  Beispiel:
  3103.    DefiniereWelt(-3, -4, 5, 6);          Welt definieren
  3104.    WriteLn(WeltYMax);                    druckt den Wert der y-Koordinate des
  3105.                                          obersten Bildpunktes des Koordinatensystems.
  3106.                                          Der Wert ist etwas größer als 5.
  3107.  
  3108.  
  3109. WeltYMin
  3110.  
  3111. WeltYMin liefert die y-Koordinate des untersten Bildpunktes in einem mit
  3112. DefiniereWelt definierten Koordiantensystem. Der Wert ist meistens kleiner als
  3113. der bei DefiniereWelt für diesen Wert übergebene Parameter, da ITG-PASCAL das
  3114. Koordiantensystem immer so anlegt, daß gleiche Intervallbreiten auf einer Achse
  3115. auch immer gleich viele Bildpunkte enthalten.
  3116.  
  3117.  Deklaration:
  3118.    FUNKTION WeltYMin : REAL;
  3119.  
  3120.  Beispiel:
  3121.    DefiniereWelt(-3, -4, 5, 6);          Welt definieren
  3122.    WriteLn(WeltYMin);                    druckt den Wert der y-Koordinate des
  3123.                                          untersten Bildpunktes des Koordinatensystems.
  3124.                                          Der Wert ist etwas kleiner als 5.
  3125.  
  3126.  
  3127. Wischen
  3128.  
  3129. Mit Wischen wird das aktive Grafikfenster gelöscht. Die Farbe des Hintergrundes
  3130. kann vorher mit PapierFarbe eingestellt werden.
  3131.  
  3132.  Deklaration:
  3133.    PROCEDURE Wischen;
  3134.  
  3135.  Beispiel:
  3136.    PapierFarbe(Schwarz);
  3137.    Wischen;                      Der Hintergrund erscheint schwarz.
  3138.    PapierFarbe(Grau);
  3139.    Wischen;                      Der Hintergrund erscheint grau.
  3140.    PapierFarbe(Weiß);
  3141.    Wischen;                      Der Hintergrund erscheint weiß.
  3142.    PapierFarbe(Rot);             Nur auf VGA-Karten
  3143.    Wischen;                      Der Hintergrund erscheint rot.
  3144.  
  3145.  
  3146. WoGrafikX
  3147.  
  3148. WoGrafikX liefert die x-Koordinate des Grafik-Cursors zurück.
  3149.  
  3150.  Deklaration:
  3151.    FUNCTION WoGrafikX : INTEGER;
  3152.  
  3153.  Beispiel:
  3154.    MoveTo(100, 50);
  3155.    Write(WoGrafikX);             druckt 100 aus.
  3156. #FF
  3157.    LineTo(-200, 40);
  3158.    Write(WoGrafikX);             druckt -200 aus.
  3159.  
  3160.  
  3161. WoGrafikY
  3162.  
  3163. WoGrafikY liefert die y-Koordinate des Grafik-Cursors zurück.
  3164.  
  3165.  Deklaration:
  3166.    FUNCTION WoGrafikY : INTEGER;
  3167.  
  3168.  Beispiel:
  3169.    MoveTo(100, 50);
  3170.    Write(WoGrafikY);             druckt 50 aus.
  3171.    LineTo(-200, 40);
  3172.    Write(WoGrafikY);             druckt 40 aus.
  3173.  
  3174.  
  3175. yKorrekturFaktor
  3176.  
  3177. Bei CGA-, Hercules- und EGA-Grafikkarten stimmen die Abstände zweier
  3178. benachbarter Punkte in x- und y-Richtung auf dem Monitor nicht überein. Ohne
  3179. Korrektur würde ein Kreis wie eine Ellipse und ein Quadrat wie ein Rechteck
  3180. aussehen. Um so etwas zu vermeiden, werden die Strecken in y-Richtung verkürzt
  3181. um einen Faktor, dessen Wert die Funktion yKorrekturFaktor zurückliefert.
  3182.  
  3183.  Deklaration:
  3184.    FUNCTION yKorrekturFaktor : REAL;
  3185.  
  3186.  Beispiel:
  3187.    Write(yKorrekturFaktor);              druckt
  3188.                                          0.42 für CGA-Karten
  3189.                                          0.64 für Hercules-Karten
  3190.                                          0.73 für EGA-Karten
  3191.                                          1.00 für VGA-Karten
  3192.  
  3193. #FF
  3194. mathematische Funktionen
  3195.  
  3196.  ABS             ARCCOS          ARCCOT          ARCSIN          ARCTAN
  3197.  BOGENMAß        COS             COT             EXP             GRAD
  3198.  LG              LN              SIGN            SIN             SQR
  3199.  SQRT            TAN
  3200.  
  3201.  
  3202. ABS
  3203.  
  3204. Mit ABS(x) wird der Betrag einer Zahl bestimmt.
  3205.  
  3206.  Deklaration:
  3207.    FUNCTION ABS(Zahl : REAL) : REAL;
  3208.  
  3209.  Beispiel:
  3210.    ABS(-3.5) = 3.5;
  3211.    ABS(-2) = 2;
  3212.    ABS(4.7) = 4.7
  3213.  
  3214.  
  3215. ARCCOS
  3216.  
  3217. α=ArcCos(x) ist die Umkehrfunktion zu x=Cos(α). α=ArcCos(x) ist der Winkel α,
  3218. für den gilt x=Cos(α).
  3219.  
  3220.  Deklaration:
  3221.    FUNCTION ArcCos(Winkel : REAL) : REAL;
  3222.  
  3223.  Beispiel:
  3224.    in Grad               :  ArcCos(0.5) = 60°
  3225.    im Bogenmaß           :  ArcCos(0.5) = 1.047
  3226.  
  3227. Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
  3228. mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
  3229.  
  3230.  
  3231. ARCCOT
  3232.  
  3233. α=ArcCot(x) ist die Umkehrfunktion zu x=Cot(α). α=ArcCot(x) ist der Winkel α,
  3234. für den gilt x=Cot(α).
  3235.  
  3236.  Deklaration:
  3237.    FUNCTION ArcCot(Winkel : REAL) : REAL;
  3238.  
  3239.  Beispiel:
  3240.    in Grad               :  ArcCot(0.5) = 63.435°
  3241.    im Bogenmaß           :  ArcCot(0.5) = 1.107
  3242.  
  3243. Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
  3244. mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
  3245.  
  3246.  
  3247. #FF
  3248. ARCSIN
  3249.  
  3250. α=ArcSin(x) ist die Umkehrfunktion zu x=Sin(α). α=ArcSin(x) ist der Winkel α,
  3251. für den gilt x=Sin(α).
  3252.  
  3253.  Deklaration:
  3254.    FUNCTION ArcSin(Winkel : REAL) : REAL;
  3255.  
  3256.  Beispiel:
  3257.    in Grad               :  ArcSin(0.5) = 30°
  3258.    im Bogenmaß           :  ArcSin(0.5) = 0.524
  3259.  
  3260. Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
  3261. mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
  3262.  
  3263.  
  3264. ARCTAN
  3265.  
  3266. α=ArcTan(x) ist die Umkehrfunktion zu x=Tan(α). α=ArcTan(x) ist der Winkel α,
  3267. für den gilt x=Tan(α).
  3268.  
  3269.  Deklaration:
  3270.    FUNCTION ArcTan(Winkel : REAL) : REAL;
  3271.  
  3272.  Beispiel:
  3273.    in Grad               :  ArcTan(0.5) = 26.565°
  3274.    im Bogenmaß           :  ArcTan(0.5) = 0.464
  3275.  
  3276. Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
  3277. mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
  3278.  
  3279.  
  3280. BOGENMAß
  3281.  
  3282. Die Funktion y=Bogenmaß(α) ergibt das Bogenmaß des Winkels α, der in Grad
  3283. gegeben ist.
  3284.  
  3285.  Deklaration:
  3286.    FUNCTION Bogenmaß(WinkelInGrad : REAL) : REAL;
  3287.  
  3288.  Beispiel:
  3289.    Bogenmaß(60°) = π/3
  3290.    Bogenmaß(Grad(π/3)) = π/3
  3291.  
  3292.  
  3293. COS
  3294.  
  3295. Der Cos(α) ist die Länge der Ankathete eines rechtwinkligen Dreiecks mit der
  3296. Hypotenusenlänge 1. Er gibt für beliebige rechtwinklige Dreiecke das Verhältnis
  3297. von Ankathete zu Hypotenuse an.
  3298.  
  3299.  Deklaration:
  3300.    FUNCTION Cos(Winkel : REAL) : REAL;
  3301.  
  3302.  Beispiel:
  3303.    in Grad               :  Cos(60°) = 0.5
  3304.    im Bogenmaß           :  Cos(π/3) = 0.5
  3305.  
  3306. #FF
  3307. Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
  3308. mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
  3309.  
  3310.  
  3311. COT
  3312.  
  3313. Die Funktion y=Cot(α) gibt in einem rechtwinkligen Dreieck das Seitenverhältnis
  3314. von Ankathete zu Gegenkathete an.
  3315.  
  3316.  Deklaration:
  3317.    FUNCTION Cot(Winkel : REAL) : REAL;
  3318.  
  3319.  Beispiel:
  3320.    in Grad               :  Cot(60°) = 0.577
  3321.    im Bogenmaß           :  Cot(π/3) = 0.577
  3322.  
  3323. Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
  3324. mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
  3325.  
  3326.  
  3327. EXP
  3328.  
  3329. y=Exp(x)=ex ist die Exponentialfunktion mit der Basis e. e bezeichnet die
  3330. Eulersche Zahl 2.718281828... .
  3331.  
  3332.  Deklaration:
  3333.    FUNCTION Exp(x : REAL) : REAL;
  3334.  
  3335.  Beispiel:
  3336.    Exp(1) = 2.71828
  3337.    Exp(-4.1) = 0.0167
  3338.    Exp(Ln(4)) = 4
  3339.  
  3340.  
  3341. GRAD
  3342.  
  3343. α=Grad(x) ergibt den zu dem Bogen x des Einheitskreises gehörenden Winkel α,
  3344. rechnet also den Winkel x im Bogenmaß in Grad um.
  3345.  
  3346.  Deklaration:
  3347.    FUNCTION Grad(WinkelImBogenmaß : REAL) : REAL;
  3348.  
  3349.  Beispiel:
  3350.    Grad(π/3) = 60°
  3351.    Grad(Bogenmaß(60°)) = 60°
  3352.  
  3353.  
  3354. LG
  3355.  
  3356. y=Lg(x) ist der Logarithmus von x zur Basis 10, auch dekadischer Logarithmus
  3357. genannt. Lg(x) ist die Umkehrfunktion zu 10^x und nur für x > 0 definiert.
  3358.  
  3359.  Deklaration:
  3360.    FUNCTION Lg(x : REAL) : REAL;
  3361.  
  3362. #FF
  3363.  Beispiel:
  3364.    Lg(0.5) = -0.301
  3365.    Lg(3.3) = 0.519
  3366.    Lg(10) = 1
  3367.    Lg(10^5.7) = 5.7
  3368.    Lg(-2) ist nicht definiert
  3369.  
  3370.  
  3371. LN
  3372.  
  3373. y=Ln(x) ist der Logarithmus von x zur Basis e, auch natürlicher Logarithmus
  3374. genannt. Ln(x) ist die Umkehrfunktion zu Exp(x) und nur für x > 0 definiert.
  3375.  
  3376.  Deklaration:
  3377.    FUNCTION Ln(x : REAL) : REAL;
  3378.  
  3379.  Beispiel:
  3380.    Ln(0.5) = -0.693
  3381.    Ln(3.3) = 1.194
  3382.    Ln(e) = 1
  3383.    Ln(Exp(5.7)) = 5.7
  3384.    Ln(-2) ist nicht definiert
  3385.  
  3386.  
  3387. SIGN
  3388.  
  3389. Die Signumfunktion y=Sign(x) ist definiert als:
  3390.   1,     wenn x > 0
  3391.   0,     wenn x = 0
  3392.  -1,     wenn x < 0
  3393.  
  3394.  Deklaration:
  3395.    FUNCTION Sign(x : REAL) : INTEGER;
  3396.  
  3397.  Beispiel:
  3398.    Sign(3.5) = 1
  3399.    Sign(0) = 0
  3400.    Sign(-4) = -1
  3401.  
  3402.  
  3403. SIN
  3404.  
  3405. Der Sin(α) ist die Länge der Gegenkathete eines rechtwinkligen Dreiecks mit der
  3406. Hypote-nusenlänge 1. Er gibt für beliebige rechtwinklige Dreiecke das
  3407. Verhältnis von Gegenkathete zu Hypotenuse an.
  3408.  
  3409.  Deklaration:
  3410.    FUNCTION Sin(Winkel : REAL) : REAL;
  3411.  
  3412.  Beispiel:
  3413.    in Grad               :  Sin(60°) = 0.866
  3414.    im Bogenmaß           :  Sin(π/3) = 0.866
  3415.  
  3416. Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
  3417. mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
  3418.  
  3419.  
  3420. #FF
  3421. SQR
  3422.  
  3423. y=Sqr(x)=x2 ist das Quadrat der Zahl x. Sqr steht für die englische Abkürzung
  3424. von Quadrat "Square".
  3425.  
  3426.  Deklaration:
  3427.    FUNCTION Sqr(x : REAL) : REAL;
  3428.  
  3429.  Beispiel:
  3430.    Sqr(2) = 4
  3431.    Sqr(Sqrt(2)) = 2
  3432.  
  3433.  
  3434. SQRT
  3435.  
  3436. y=Sqrt(x) ist die positive Zahl y, deren Quadrat x ergibt. Sqrt ist also die
  3437. Wurzelfunktion. y=Sqrt(x) ist die Umkehrfunktion zu y=Sqr(x). Sqrt steht für
  3438. die englische Abkürzung von Wurzel "SquareRoot".
  3439. Sqrt(x) ist definiert für x ≥ 0.
  3440.  
  3441.  Deklaration:
  3442.    FUNCTION Sqrt(x : REAL) : REAL;
  3443.  
  3444.  Beispiel:
  3445.    Sqrt(4) = 2
  3446.    Sqrt(Sqr(2)) = 2
  3447.    Sqrt(-4) ist nicht definiert.
  3448.  
  3449.  
  3450. TAN
  3451.  
  3452. Die Funktion y=Tan(α) gibt in einem rechtwinkligen Dreieck das Seitenverhältnis
  3453. von Gegenkathete zu Ankathete an.
  3454.  
  3455.  Deklaration:
  3456.    FUNCTION Tan(Winkel : REAL) : REAL;
  3457.  
  3458.  Beispiel:
  3459.    in Grad               :  Tan(60°) = 1.732
  3460.    im Bogenmaß   :  Tan(π/3) = 1.732
  3461.  
  3462. Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
  3463. mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
  3464.  
  3465. #FF
  3466. Standard-Funktionen
  3467.  
  3468.  ABS             ARCTAN          CHR             COPY            COS
  3469.  EOF             EXP             FilePos         FileSize        FRAC
  3470.  GetMaxX         GetMaxY         IORESULT        INT             KeyPressed
  3471.  LN              LENGTH          ODD             ORD             POS
  3472.  PRED            Random          ReadKey         ROUND           SIN
  3473.  SQR             SQRT            STR             SUCC            TRUNC
  3474.  UpCase          WhereX          WhereY
  3475.  
  3476.  
  3477. CHR
  3478.  
  3479. Mit der Funktion CHR wird eine Typ-Umwandlung einer INTEGER-Zahl aus dem
  3480. Bereich 0..255 in ein Zeichen / einen Buchstaben durchgeführt.
  3481.  
  3482.  Deklaration :
  3483.    FUNCTION CHR(OrdnungsZahl : INTEGER) : CHAR;
  3484.  
  3485.  Beispiel :
  3486.    Write(CHR(65));               druckt "A", weil "A" den ASCII-Code 65 hat.
  3487.    Write(CHR(ORD("B")));         druckt "B".
  3488.  
  3489.  
  3490. COPY
  3491.  
  3492. Copy(ZeichenKette, Anfang, Anzahl) liefert als Funktionswert den Teil von
  3493. ZeichenKette zurück, der bei dem Zeichenindex Anfang beginnt und Anzahl Zeichen
  3494. umfaßt.
  3495.  
  3496.  Deklaration :
  3497.    FUNCTION Copy(ZeichenKette : STRING;
  3498.                        Anfang, Anzahl : INTEGER) : STRING;
  3499.  
  3500.  Beispiel :
  3501.    Write(Copy("abcdefgh", 3, 4));        druckt "cdef".
  3502.    Write(Copy("abcdefgh", 7, 9));        druckt "gh". Wenn am Ende der Zeichenkette
  3503.                                          weniger Zeichen vorhanden sind als in Anzahl
  3504.                                          angegeben, werden nur die noch vorhandenen
  3505.                                          zurückgegeben.
  3506.  
  3507.  
  3508. EOF
  3509.  
  3510. Mit EOF(Datei) kann festgestellt werden, ob beim Lesen einer Datei das Ende
  3511. erreicht wurde. In diesem Fall ergibt EOF(Datei) den Wert WAHR (TRUE). Die
  3512. Datei darf dabei vom Typ FILE oder vom Typ TEXT sein.
  3513.  
  3514.  Deklaration :
  3515.    FUNCTION EOF(t : TEXT) : BOOLEAN;
  3516.    FUNCTION EOF(f : FILE) : BOOLEAN;
  3517.  
  3518.  Beispiel :
  3519.    VAR
  3520.      t : TEXT;
  3521.      s : STRING;
  3522.  
  3523. #FF
  3524.    BEGIN
  3525.      Assign(t, 'ITG.HLP');                       Datei öffnen
  3526.      Reset(t);                                   Lesemarke auf den Anfang setzen
  3527.      WHILE NOT EOF(t) DO BEGIN                   solange es noch weiteren Text gibt,
  3528.        ReadLn(t, s);                             diesen aus der Datei lesen und
  3529.        WriteLn(s);                               auf dem Bildschirm ausgeben
  3530.      END;
  3531.      Close(t);                                   Datei schließen
  3532.    END;
  3533.  
  3534.  
  3535. FilePos
  3536.  
  3537. FilePos(Dateivariable) gibt den Index des Datensatzes aus, an dessen Ende der
  3538. Lesezeiger in der Datei Dateivariable steht.
  3539.  
  3540.  Deklaration :
  3541.    FUNCTION FilePos(f : FILE OF Datenstruktur) : WORD;
  3542.  
  3543.  Beispiel :
  3544.    TYPE
  3545.      DatenStruktur = RECORD
  3546.        x : INTEGER;
  3547.        s : STRING[20];
  3548.      END;
  3549.    VAR
  3550.      Daten : DatenStruktur;
  3551.      f : FILE OF DatenStruktur;
  3552.    BEGIN
  3553.      Assign(f, "TEST.DAT");      der Datei einen Namen zuweisen
  3554.      Reset(f);                   und zum Lesen öffnen
  3555.      Seek(f, 3);                 Zeiger auf das Ende des 3.Datensatzes
  3556.      Read(f, Daten);             4.Datensatz lesen!
  3557.      Write(FilePos(f));          druckt den Wert 4 aus!
  3558.      Close(f);                   Datei schließen
  3559.    END;
  3560.  
  3561.  
  3562. FileSize
  3563.  
  3564. FileSize(Dateivariable) gibt an, wieviele Datensätze in einer Datei enthalten sind.
  3565.  
  3566.  Deklaration :
  3567.    FUNCTION FileSize(f : FILE OF Datenstruktur) : WORD;
  3568.  
  3569.  Beispiel :
  3570.    TYPE
  3571.      DatenStruktur = RECORD
  3572.        x : INTEGER;
  3573.        s : STRING[20];
  3574.      END;
  3575.    VAR
  3576.      Daten : DatenStruktur;
  3577.      f : FILE OF DatenStruktur;
  3578.    BEGIN
  3579.      Assign(f, "TEST.DAT");      der Datei einen Namen zuweisen
  3580.      Reset(f);                   und zum Lesen öffnen
  3581. #FF
  3582.      Write(FileSize(f));         druckt aus, wieviele Records des Typs DatenStruktur
  3583.                                  in der Datei TEST.DAT enthalten sind
  3584.      Close(f);                   Datei schließen
  3585.    END;
  3586.  
  3587.  
  3588. FRAC
  3589.  
  3590. Mit Frac wird der Nachkommateil einer Variable des Typs REAL bestimmt und als
  3591. Funktionswert zurückgegeben.
  3592.  
  3593.  Deklaration :
  3594.    FUNCTION Frac(DezimalZahl : REAL) : REAL;
  3595.  
  3596.  Beispiel :
  3597.    Write(Frac(2.561));           druckt 0.561 aus.
  3598.  
  3599.  
  3600. IORESULT
  3601.  
  3602. Wenn Datensätze von der Diskette/Festplatte gelesen oder auf der
  3603. Diskette/Festplatte geschrieben werden, kann mit einem anschließenden Aufruf
  3604. von IOResult geprüft werden, ob der Lese-/Schreibvorgang fehlerfrei verlaufen
  3605. ist oder nicht. IOResult ergibt nach fehlerfreien Lese-/Schreibzugriffen den
  3606. Wert 0, sonst einen Wert > 0.
  3607.  
  3608.  Deklaration :
  3609.    FUNCTION IOResult : INTEGER;
  3610.  
  3611.  Beispiel :
  3612.    Write(Datei, Datensatz);
  3613.    IF IOResult = 0 THEN BEGIN
  3614.      Write("kein Fehler");
  3615.    END
  3616.    ELSE BEGIN
  3617.      Write("Fehler beim Schreiben des Datensatzes");
  3618.    END;
  3619.  
  3620.  
  3621. INT
  3622.  
  3623. Mit Int wird der Vorkommateil einer Variablen des Typs REAL bestimmt und als
  3624. Funktionswert zurückgegeben.
  3625.  
  3626.  Deklaration :
  3627.    FUNCTION Int(DezimalZahl : REAL) : REAL;
  3628.  
  3629.  Beispiel :
  3630.    Write(Int(12.561));           druckt 12.000 aus.
  3631.  
  3632.  
  3633. KeyPressed
  3634.  
  3635. Mit der Funktion KeyPressed wird festgestellt, ob vor dem Zeitpunkt des Aufrufs
  3636. eine Taste gedrückt wurde, die noch nicht durch eine Read-Anweisung eingelesen
  3637. wurde.
  3638.  
  3639.  Deklaration :
  3640.    FUNCTION KeyPressed : BOOLEAN;
  3641.  
  3642. #FF
  3643.  Beispiel :
  3644.    Read(c);                      Alle vorhandenen Tastendrücke einlesen.
  3645.    GrafikSchirm;
  3646.    REPEAT
  3647.      ZeichneIrgendEtwas;         Solange die Zeichnung wiederholen, bis
  3648.    UNTIL KeyPressed;             eine beliebige Taste gedrückt wird.
  3649.  
  3650.  
  3651. LENGTH
  3652.  
  3653. Length(ZeichenKette) ergibt die Anzahl der Zeichen und Buchstaben (Länge) von
  3654. ZeichenKette.
  3655.  
  3656.  Deklaration :
  3657.    FUNCTION Length(ZeichenKette : STRING) : INTEGER;
  3658.  
  3659.  Beispiel :
  3660.    Write(Length("abcdefgh"));            druckt den Wert 8 aus.
  3661.    Write(Length(""));                    ergibt 0, weil die Zeichenkette leer ist.
  3662.  
  3663.  
  3664. ODD
  3665.  
  3666. Odd(GanzeZahl) prüft, ob GanzeZahl gerade ist oder nicht. Es handelt sich um
  3667. eine Aussage. Der Funktionswert ist demnach vom Typ BOOLEAN.
  3668.  
  3669.  Deklaration :
  3670.    FUNCTION Odd(GanzeZahl : INTEGER) : BOOLEAN;
  3671.  
  3672.  Beispiel :
  3673.    IF Odd(GanzeZufallsZahl(100)) THEN BEGIN
  3674.      Write("Zufallszahl ist gerade.");
  3675.    END
  3676.    ELSE BEGIN
  3677.      Write("Zufallszahl ist ungerade.");
  3678.    END;
  3679.  
  3680.  
  3681. ORD
  3682.  
  3683. Die Funktion Ord(Variable) (Ordnung) liefert bei einem Aufzählungstyp die
  3684. Stelle, an der Variable in diesem Typ definiert ist, wobei die erste
  3685. vorkommende Variable immer die Ordnung 0 hat.
  3686.  
  3687.  Deklaration :
  3688.    FUNCTION Ord(Variable : Aufzählungstyp) : INTEGER;
  3689.  
  3690.  Beispiel :
  3691.    Ord("A");                             ergibt 65, weil der Buchstabe "A" an 66. (!)
  3692.                                          Stelle in der ASCII-Tabelle steht.
  3693.    TYPE
  3694.      Farbe = (Schwarz, Grau, Weiß);      Aufzählungstyp Farbe definieren.
  3695.    Ord(Schwarz);                         ergibt 0.
  3696.    Ord(Grau);                            ergibt 1.
  3697.    Ord(Weiß);                            ergibt 2.
  3698.  
  3699.  
  3700. #FF
  3701. POS
  3702.  
  3703. Pos(TeilZeichenKette, ZeichenKette) ergibt die Stelle, an der TeilZeichenKette
  3704. in ZeichenKette beginnt. Wenn TeilZeichenKette nicht in ZeichenKette enthalten
  3705. ist, ist der Funktionswert 0.
  3706.  
  3707.  Deklaration :
  3708.    FUNCTION  Pos(TeilZeichenKette, ZeichenKette : STRING) : INTEGER;
  3709.  
  3710.  Beispiel :
  3711.    Pos("c", "abcdefgh"); ist 3.
  3712.    Pos("def", "abcdefgh");       ist 4.
  3713.    Pos("B", "abcdefgh");         ist 0, weil "B" nicht in "abcdefgh" vorkommt.
  3714.  
  3715.  
  3716. PRED
  3717.  
  3718. Pred(Variable) ergibt den Vorgänger von Variable, wenn es sich um einen
  3719. Aufzählungstyp handelt. (s. auch Ord, Succ)
  3720.  
  3721.  Deklaration :
  3722.    FUNCTION Pred(Variable : Aufzählungstyp) : Aufzählungstyp;
  3723.  
  3724.  Beispiel :
  3725.    Pred(3);                              ist 2.
  3726.    Pred("B");                            ist "A", weil "A" in der ASCII- Tabelle der
  3727.                                          Vorgänger von "B" ist.
  3728.    TYPE
  3729.      Farbe = (Schwarz, Grau, Weiß);      Aufzählungstyp Farbe definieren.
  3730.    Pred(Schwarz);                        ist nicht definiert.
  3731.    Pred(Grau);                           ergibt Schwarz.
  3732.    Pred(Weiß);                           ergibt Grau.
  3733.  
  3734.  
  3735. Random
  3736.  
  3737. Random(ObereGrenze) erzeugt eine ganze Zufallszahl zwischen 0 und
  3738. ObereGrenze-1! Der Wert für ObereGrenze muß zwischen 0 und 32768 liegen.
  3739.  
  3740.  Deklaration :
  3741.    FUNCTION Random(ObereGrenze : WORD) : WORD;
  3742.  
  3743.  Beispiel :
  3744.    Write(Random(100));   druckt eine Zufallszahl zwischen 0 und 99!
  3745.  
  3746.  
  3747. ReadKey
  3748.  
  3749. Mit ReadKey wird eine Taste gelesen, ohne daß die Eingabe mit der
  3750. RETURN-(ENTER-) Taste abgeschlossen werden muß.
  3751.  
  3752.  Deklaration :
  3753.    FUNCTION ReadKey : CHAR;
  3754.  
  3755.  Beispiel :
  3756.    Write("noch einmal (j/n) :");         Meldung ausgeben.
  3757. #FF
  3758.    REPEAT                                Solange das Einlesen von
  3759.      CharVariable := UpCase(ReadKey);    Zeichen wiederholen, bis
  3760.    UNTIL (CharVariable = "J")            der Großbuchstabe der
  3761.      OR (CharVariable = "N");                    gedrückten Taste "J" oder "N" ist.
  3762.  
  3763.  
  3764. ROUND
  3765.  
  3766. Durch Round wird eine Variable des Typs REAL in eine Variable des Typs INTEGER
  3767. umgewandelt. Dabei wird im Gegensatz zu Trunc auf- oder abgerundet.
  3768.  
  3769.  Deklaration :
  3770.    FUNCTION Round(RealVariable : REAL) : INTEGER;
  3771.  
  3772.  Beispiel :
  3773.    Round(3.2);           ergibt 3.
  3774.    Round(3.8);           ergibt 4.
  3775.    Round(-3.2);          ergibt -3.
  3776.    Round(-3.8);          ergibt -4.
  3777.  
  3778.  
  3779. SUCC
  3780.  
  3781. Succ(Variable) ergibt den Nachfolger von Variable, wenn es sich um einen
  3782. Aufzählungstyp handelt. (s. auch Ord, Pred)
  3783.  
  3784.  Deklaration :
  3785.    FUNCTION Succ(Variable : Aufzählungstyp) : Aufzählungstyp;
  3786.  
  3787.  Beispiel :
  3788.    Succ(3);                              ist 4.
  3789.    Succ("B");                            ist "C", weil "C" in der ASCII-Tabelle der
  3790.                                          Nachfolger von "B" ist.
  3791.    TYPE
  3792.      Farbe = (Schwarz, Grau, Weiß);      Aufzählungstyp Farbe definieren.
  3793.    Succ(Schwarz);                        ergibt Grau.
  3794.    Succ(Grau);                           ergibt Weiß.
  3795.    Succ(Weiß);                           ist nicht definiert.
  3796.  
  3797.  
  3798. TRUNC
  3799.  
  3800. Durch Trunc wird eine Variable des Typs REAL in eine Variable des Typs INTEGER
  3801. umgewandelt. Dabei wird im Gegensatz zu Round nicht auf- oder abgerundet.
  3802.  
  3803.  Deklaration :
  3804.    FUNCTION Trunc(RealVariable : REAL) : INTEGER;
  3805.  
  3806.  Beispiel :
  3807.    Trunc(3.2);           ergibt 3.
  3808.    Trunc(3.8);           ergibt 3.
  3809.    Trunc(-3.2);          ergibt -3.
  3810.    Trunc(-3.8);          ergibt -3.
  3811.  
  3812.  
  3813. #FF
  3814. UpCase
  3815.  
  3816. UpCase(Buchstabe) ergibt als Funktionsergebnis den Großbuchstaben von
  3817. Buchstabe. Die Umwandlung wird auch für die deutschen Sonderzeichen ä, ö und ü
  3818. durchgeführt.
  3819.  
  3820.  Deklaration :
  3821.    FUNCTION UpCase(Buchstabe : CHAR) : CHAR;
  3822.  
  3823.  Beispiel :
  3824.    Write(UpCase("a"));   druckt "A".
  3825.    Write(UpCase("A"));   druckt "A".
  3826.    Write(UpCase("ö"));   druckt "Ö".
  3827.  
  3828.  
  3829. WhereX
  3830.  
  3831. Die x-Koordinate des Cursors im Textschirm wird durch die Funktion WhereX
  3832. ausgelesen. Beim vollen Textschirm hat der linke Rand die x-Koordinate 1 und
  3833. der rechte die x-Koordinate 80.
  3834.  
  3835.  Deklaration :
  3836.    FUNCTION WhereX : INTEGER;
  3837.  
  3838.  Beispiel :
  3839.    GotoXY(5, 3);         setzt den Cursor auf den Punkt P(5/3).
  3840.    Write(WhereX);        druckt den Wert 5 aus.
  3841.  
  3842.  
  3843. WhereY
  3844.  
  3845. Die y-Koordinate des Cursors im Textschirm wird durch die Funktion WhereY
  3846. ausgelesen. Beim vollen Textschirm hat der obere Rand die y-Koordinate 1 und
  3847. der untere die y-Koordinate 25.
  3848.  
  3849.  Deklaration :
  3850.    FUNCTION WhereY : INTEGER;
  3851.  
  3852.  Beispiel :
  3853.    GotoXY(5, 3);         setzt den Cursor auf den Punkt P(5/3).
  3854.    Write(WhereY);        druckt den Wert 3 aus.
  3855.  
  3856.  
  3857. #FF
  3858. ITG-Pascal-Funktionen
  3859.  
  3860.  ARCCOS                  ARCCOT                  ARCSIN                  Bogenmaß
  3861.  Buchstabe               COT                     DezimalZufallszahl      EsGibtDatei
  3862.  FunktionsWert           GanzeZufallsZahl        Grad                    IgelWinkel
  3863.  IgelZeigen              LetzteTaste             LiesPort                SIGN
  3864.  TAN                     WoGrafikX               WoGrafikY               WoIgelX
  3865.  WoIgelY                 yKorrekturFaktor
  3866.  
  3867.  
  3868. Buchstabe
  3869.  
  3870. Die Funktion Buchstabe(Zeichenkette, nterBuchstabe) liefert das n. Zeichen /
  3871. den n. Buchstaben in der Zeichenkette zurück. Dabei muß 1 ≤ n ≤ Anzahl der
  3872. Zeichen in der Zeichenkette sein.
  3873.  
  3874.  Deklaration :
  3875.    FUNCTION  Buchstabe(Zeichenkette : STRING;
  3876.                        nterBuchstabe : INTEGER) : CHAR;
  3877.  
  3878.  Beispiel :
  3879.    Write(Buchstabe("abcdefg", 3));               druckt "c" aus.
  3880.  
  3881.  
  3882. DezimalZufallszahl
  3883.  
  3884. DezimalZufallszahl(ObereSchranke) ergibt eine Zufallszahl x des Typs REAL,
  3885. wobei 0 ≤ x < ObereSchranke gilt. Der Wert 0 kann angenommen werden, der Wert
  3886. ObereSchranke wird nie angenommen.
  3887.  
  3888.  Deklaration :
  3889.    FUNCTION DezimalZufallszahl(ObereSchranke : REAL) : REAL;
  3890.  
  3891.  Beispiel :
  3892.    Write(DezimalZufallszahl(4.5));       druckt eine Zahl x mit 0 ≤ x < 4.5! (siehe
  3893.                                          auch GanzeZufallszahl)
  3894.  
  3895.  
  3896. EsGibtDatei
  3897.  
  3898. Die Funktion EsGibtDatei(Dateiname) dient dazu, zu prüfen, ob eine Datei mit
  3899. dem Dateinamen auf der Diskette/Festplatte existiert. Sie liefert den Wert
  3900. WAHR, wenn es eine solche Datei gibt, sonst den Wert FALSCH. Der Typ der Datei
  3901. (Textdatei oder andere) läßt sich nicht feststellen.
  3902.  
  3903.  Deklaration :
  3904.    FUNCTION EsGibtDatei(DateiName : STRING) : BOOLEAN;
  3905.  
  3906.  Beispiel :
  3907.    Write(EsGibtDatei("ITG.HLP"));                druckt WAHR aus, wenn es die Datei
  3908.                                                  ITG.HLP im aktuellen Verzeichnis gibt,
  3909.                                                  sonst FALSCH
  3910.  
  3911.  
  3912. #FF
  3913. FunktionsWert
  3914.  
  3915. Wenn mit DefiniereFunktionsterm ein Funktionsterm festgelegt wurde, kann mit
  3916. FunktionWert ein Wert an einer Stelle berechnet werden.
  3917.  
  3918.  Deklaration :
  3919.    FUNCTION FunktionsWert(x : REAL) : REAL;
  3920.  
  3921.  Beispiel :
  3922.    DefiniereFunktionsterm("5*x");        zuerst Funktionsterm festlegen
  3923.    FOR n := 1 TO 5 DO BEGIN
  3924.      WriteLn(FunktionsWert(n));          und erst dann Funktionswerte berechnen
  3925.    END;
  3926.  
  3927.  
  3928. GanzeZufallsZahl
  3929.  
  3930. GanzeZufallszahl(ObereSchranke) ergibt eine Zufallszahl x des Typs INTEGER,
  3931. wobei 0 ≤ x < ObereSchranke gilt. Der Wert 0 kann angenommen werden, der Wert
  3932. ObereSchranke wird nie angenommen.
  3933.  
  3934.  Deklaration :
  3935.    FUNCTION GanzeZufallszahl(ObereSchranke : INTEGER) : INTEGER;
  3936.  
  3937.  Beispiel :
  3938.    Write(GanzeZufallszahl(5));   druckt eine der Zahlen 0..4!
  3939.  
  3940.  
  3941. LetzteTaste
  3942.  
  3943. Die Funktion LetzteTaste liefert das Zeichen / den Buchstaben der Taste, die
  3944. zuletzt gedrückt wurde. Damit kann nach Read-, Auswahl- und
  3945. LiesEingaben-Anweisungen festgestellt werden, ob die Anweisungen z.B. mit der
  3946. ESC-Taste abgebrochen wurden.
  3947.  
  3948.  Deklaration :
  3949.    FUNCTION LetzteTaste : CHAR;
  3950.  
  3951.  Beispiele :
  3952.  1)
  3953.    VAR c1, c2 : CHAR;
  3954.  
  3955.    c1 := ReadKey;
  3956.    c2 := LetzteTaste;            c1 und c2 sind gleich, weil LetzteTaste das Lesen
  3957.                                  eines Zeichen wiederholt.
  3958.  
  3959.  2)
  3960.    REPEAT
  3961.      EingabeFeld(...);
  3962.      LiesEingaben;                       Wurde LiesEingaben mit der ESC-Taste
  3963.    UNTIL LetzteTaste = ESC;              beendet? Wenn ja Abbrechen, sonst
  3964.                                          wiederholen.
  3965.  
  3966.  
  3967. #FF
  3968. LiesPort
  3969.  
  3970. Mit LiesPort(WelcherPort) kann der momentane Wert, der am Port WelcherPort
  3971. anliegt, gelesen werden. Mit dieser Funktion kann z.B. der Druckerstatus oder
  3972. der Timer des Computers abgefragt werden oder es können Meßwerte von einem
  3973. Interface eingelesen werden.
  3974.  
  3975. Achtung : Vor der Benutzung dieser Funktion muß eine genaue Information über
  3976. die entsprechende Hardware erfolgen, die abgefragt werden soll.
  3977.  
  3978.  Deklaration :
  3979.    FUNCTION LiesPort(WelcherPort : INTEGER) : INTEGER;
  3980.  
  3981.  Beispiel :
  3982.    Write(LiesPort(nnn));         druckt den Wert, der am (Drucker-) Port anliegt
  3983.                                  (, wenn nnn der im Computer verwendete Drucker-Port
  3984.                                  ist).
  3985.  
  3986. #FF
  3987. Standard-Prozeduren
  3988.  
  3989.  Assign          Circle          Close           ClrEol          ClrScr
  3990.  DEC             Delay           Delete          EXIT            GotoXY
  3991.  HALT            HighVideo       INC             Insert          InversVideo
  3992.  Line            LineTo          LowVideo        MoveTo          NoSound
  3993.  Random          Randomize       READ            READLN          ReName
  3994.  Reset           ReWrite         Seek            SetBkColor      SetColor
  3995.  Sound           STR             VAL             Window          WRITE
  3996.  WRITELN
  3997.  
  3998.  
  3999. Assign
  4000.  
  4001. Assign verbindet eine Dateivariable DATEI der Typen FILE oder TEXT mit einem
  4002. Dateinamen NAME und öffnet sie für Lese- und Schreibzugriffe. Anschließend
  4003. erfolgen alle Operationen mit DATEI mit der Datei des Namens NAME. Vor der
  4004. Verknüpfung mit Assign kann kein Zugriff auf die Datei erfolgen!
  4005.  
  4006.  Deklaration :
  4007.    PROCEDURE Assign(Datei : FILE; DateiName : STRING);
  4008.    PROCEDURE Assign(Datei : TEXT; DateiName : STRING);
  4009.  
  4010.  Beispiel :
  4011.    VAR
  4012.      Datei : TEXT;
  4013.      s : STRING;
  4014.    BEGIN
  4015.      Assign(Datei, 'ITG.HLP');                   Datei mit dem Namen verknüpfen
  4016.      Reset(Datei);                               Anfang der Datei suchen
  4017.      WHILE NOT EOF(Datei) DO BEGIN       wenn das Dateiende noch nicht erreicht
  4018.        ReadLn(Datei, s);                 ist, lies eine Zeile aus der Datei in die
  4019.        WriteLn(s);                               Variable s und drucke s auf dem
  4020.      END;                                        Bildschirm aus.
  4021.      Close(Datei);                               Schließe die Datei.
  4022.    END;
  4023.  
  4024.  
  4025. Close
  4026.  
  4027. Close(DATEI) schließt die Datei. Anschließend können keine weiteren Operationen
  4028. mit DATEI mehr erfolgen. Jede Datei, die mit Assign geöffnet wurde, muß im
  4029. Laufe des Programms auch mit Close geschlossen werden!
  4030.  
  4031.  Deklaration :
  4032.    PROCEDURE Close(Datei : FILE);
  4033.    PROCEDURE Close(Datei : TEXT);
  4034.  
  4035.  Beispiel :
  4036.    VAR
  4037.      Datei : TEXT;
  4038.      s : STRING;
  4039.  
  4040.    BEGIN
  4041.      Assign(Datei, 'ITG.HLP');           Datei mit dem Namen verknüpfen
  4042.      Reset(Datei);                       Anfang der Datei suchen
  4043. #FF
  4044.      WHILE NOT EOF(Datei) DO BEGIN       wenn das Dateiende noch nicht erreicht
  4045.        ReadLn(Datei, s);                 ist, lies eine Zeile aus der Datei in die
  4046.        WriteLn(s);                       Variable s und drucke s auf dem
  4047.      END;                                Bildschirm aus.
  4048.      Close(Datei);                       Schließe die Datei.
  4049.    END;
  4050.  
  4051.  
  4052. ClrEol
  4053.  
  4054. ClrEol löscht das Ende einer Textzeile ab der augenblicklichen Cursorposition.
  4055. Die Cursor-position wird dabei nicht verändert.
  4056.  
  4057.  Deklaration :
  4058.    PROCEDURE ClrEol;
  4059.  
  4060.  Beispiel :
  4061.    HighVideo;            Bildschirmattribut auf hell setzen
  4062.    GotoXY(30, 5);        Cursor auf das 30. Zeichen der 5. Zeile setzen
  4063.    ClrEol;               die letzten 50 Zeichen der 5. Zeile mit Leerzeichen auffüllen,
  4064.                          das Attribut "hell" verwenden und den Cursor auf dem
  4065.                          30. Zeichen der 5. Zeile lassen
  4066.    InversVideo;          Bildschirmattribut auf invers setzen
  4067.    GotoXY(10, 8);        Cursor auf das 10. Zeichen der 8. Zeile setzen
  4068.    ClrEol;               die letzten 70 Zeichen der 8. Zeile mit Leerzeichen auffüllen,
  4069.                          das Attribut "invers" verwenden und den Cursor auf dem
  4070.                          10. Zeichen der 8. Zeile lassen
  4071.  
  4072.  
  4073. ClrScr
  4074.  
  4075. ClrScr löscht das aktive Textfenster. Weil in ITG-PASCAL die Textausgabe auch
  4076. im Grafikmodus mit Write(....) erfolgen kann, löscht ClrScr den Grafikschirm -
  4077. also auch Grafiken -, wenn der Grafikmodus aktiv ist.
  4078.  
  4079.  Deklaration :
  4080.    PROCEDURE ClrScr;
  4081.  
  4082.  Beispiel :
  4083.    Write("Irgend etwas");        Text schreiben
  4084.    Delay(2000);                  2s (2000ms) warten
  4085.    ClrScr;                       Bildschirm löschen
  4086.    Delay(2000);                  wieder warten, damit das Ergebnis betrachtet werden
  4087.                                  kann.
  4088.  
  4089.  
  4090. DEC
  4091.  
  4092. DEC(VARIABLE, WERT) verringert VARIABLE um WERT. VARIABLE kann vom Typ CHAR,
  4093. BYTE, INTEGER, WORD oder LONGINT sein. Der zweite Parameter WERT muß nicht mit
  4094. angegeben werden. In diesem Fall erfolgt eine Verringerung um 1!
  4095.  
  4096.  Deklaration :
  4097.    PROCEDURE DEC(VAR c : CHAR; Wert : LONGINT);
  4098.    PROCEDURE DEC(VAR c : CHAR);
  4099.    PROCEDURE DEC(VAR b : BYTE; Wert : LONGINT);
  4100.    PROCEDURE DEC(VAR b : BYTE);
  4101. #FF
  4102.    PROCEDURE DEC(VAR i : INTEGER; Wert : LONGINT);
  4103.    PROCEDURE DEC(VAR i : INTEGER);
  4104.    PROCEDURE DEC(VAR w : WORD; Wert : LONGINT);
  4105.    PROCEDURE DEC(VAR w : WORD);
  4106.    PROCEDURE DEC(VAR l : LONGINT; Wert : LONGINT);
  4107.    PROCEDURE DEC(VAR l : LONGINT);
  4108.  
  4109.  Beispiel :
  4110.    c := 'C';
  4111.    DEC(c, 2);            c hat jetzt den Wert 'A', weil 'A' in der ASCII-Tabelle das
  4112.                          zweite Zeichen vor 'C' ist.
  4113.    l := 12345;
  4114.    DEC(l);               l hat den Wert 12344. Der zweite Parameter wird in diesem
  4115.                          Fall automatisch auf 1 gesetzt!
  4116.  
  4117.  
  4118. Delay
  4119.  
  4120. Delay(nMilliSekunden) hält die Programmausführung für die angegebenen
  4121. Millisekunden an.
  4122.  
  4123.  Deklaration :
  4124.    PROCEDURE Delay(MilliSekunden : WORD);
  4125.  
  4126.  Beispiel :
  4127.    WriteLn('erster Text');
  4128.    Delay(3000);                          wartet 3s (3000ms)
  4129.    WriteLn('zweiter Text');
  4130.    Delay(1500);                          wartet 1,5s (1500ms)
  4131.    WriteLn('dritter Text');
  4132.  
  4133.  
  4134. Delete
  4135.  
  4136. Delete(ZEICHENKETTE, AB, ANZAHL) löscht in ZEICHENKETTE ab dem AB.ten Zeichen
  4137. ANZAHL von Zeichen.
  4138.  
  4139.  Deklaration :
  4140.    PROCEDURE Delete(VAR Zeichenkette : STRING; Ab, Anzahl : WORD);
  4141.  
  4142.  Beispiel :
  4143.    Zeichenkette := 'ABCDEFGH';           Wertzuweisung
  4144.    Delete(Zeichenkette, 4, 2);           In der Zeichenkette wird das 4.Zeichen (hier
  4145.                                          'D') gesucht. Einschließlich dieses Zeichens
  4146.                                          werden 2 Zeichen (hier 'D' und 'E') gelöscht.
  4147.    WriteLn(Zeichenkette);                Druckt 'ABCFGH' auf den Bildschirm.
  4148.  
  4149.  
  4150. EXIT
  4151.  
  4152. Mit der Anweisung EXIT erreicht man, daß die Ausführung einer Prozedur oder
  4153. Funktion sofort abgebrochen wird. Im Hauptprogramm sollte HALT verwendet werden.
  4154.  
  4155.  Deklaration :
  4156.    PROCEDURE EXIT;
  4157.  
  4158.  Beispiel :
  4159.    PROCEDURE ExitTest(n : INTEGER);
  4160. #FF
  4161.    BEGIN
  4162.      IF n > 10 THEN BEGIN                wenn n > 10, dann
  4163.        WriteLn("n > 10");                Text ausgeben und
  4164.        EXIT;                             die Prozedur sofort verlassen
  4165.      END
  4166.      ELSE BEGIN
  4167.        WriteLn("n <= 10");               sonst Text ausgeben
  4168.      END;
  4169.      .                                   und den Rest der Prozedur abarbeiten
  4170.    END;
  4171.  
  4172.  
  4173. GotoXY
  4174.  
  4175. GotoXY(x,y) setzt den Cursor auf den Punkt P(x/y). Der linke obere Eckpunkt des
  4176. Bildschirms hat die Koordinaten (1/1). Die x-Wertenehmen nach rechts bis 80 zu,
  4177. die y-Werte nach unten bis 25.
  4178.  
  4179.  Deklaration :
  4180.    PROCEDURE GotoXY(x, y : WORD);
  4181.  
  4182.  Beispiel :
  4183.    GotoXY(1, 1);         linker oberer Eckpunkt
  4184.    GotoXY(1, 25);        linker unterer Eckpunkt
  4185.    GotoXY(80, 1);        rechter oberer Eckpunkt
  4186.    GotoXY(80, 25);       rechter unterer Eckpunkt
  4187.  
  4188.  
  4189. HALT
  4190.  
  4191. HALT beendet die Programmausführung sofort.
  4192.  
  4193.  Deklaration :
  4194.    PROCEDURE Halt;
  4195.  
  4196.  Beispiel :
  4197.    x := Random(100) - 50;                Zufallszahl zwischen -50 und 49! erzeugen
  4198.    IF x < 0 THEN BEGIN                   für x < 0 ist √x nicht
  4199.      WriteLn("x < 0!");                  definiert, deshalb die
  4200.      HALT;                               Programmausführung abbrechen
  4201.    END
  4202.    ELSE BEGIN
  4203.      WriteLn("√", x, "=", SQRT(x));      sonst √x ausdrucken
  4204.    END;
  4205.  
  4206.  
  4207. HighVideo
  4208.  
  4209. Setzt das Schreibattribut auf helle Schrift auf dunklem Untergrund.
  4210.  
  4211.  Deklaration :
  4212.    PROCEDURE HighVideo;
  4213.  
  4214.  Beispiel :
  4215.    HighVideo;                            helle Schrift auf dunklem Untergrund
  4216.    WriteLn("helle Schrift");
  4217.    LowVideo;                             dunklere Schrift auf dunklem Untergrund
  4218. #FF
  4219.    WriteLn("dunklere Schrift");
  4220.    InversVideo;                          dunkle Schrift auf hellem Untergrund
  4221.    WriteLn("inverse Schrift");
  4222.  
  4223.  
  4224. INC
  4225.  
  4226. INC(VARIABLE, WERT) erhöht VARIABLE um WERT. VARIABLE kann vom Typ CHAR, BYTE,
  4227. INTEGER, WORD oder LONGINT sein. Der zweite Parameter WERT muß nicht mit
  4228. angegeben werden. In diesem Fall erfolgt eine Erhöhung um 1!
  4229.  
  4230.  Deklaration :
  4231.    PROCEDURE INC(VAR c : CHAR; Wert : LONGINT);
  4232.    PROCEDURE INC(VAR c : CHAR);
  4233.    PROCEDURE INC(VAR b : BYTE; Wert : LONGINT);
  4234.    PROCEDURE INC(VAR b : BYTE);
  4235.    PROCEDURE INC(VAR i : INTEGER; Wert : LONGINT);
  4236.    PROCEDURE INC(VAR i : INTEGER);
  4237.    PROCEDURE INC(VAR w : WORD; Wert : LONGINT);
  4238.    PROCEDURE INC(VAR w : WORD);
  4239.    PROCEDURE INC(VAR l : LONGINT; Wert : LONGINT);
  4240.    PROCEDURE INC(VAR l : LONGINT);
  4241.  
  4242.  Beispiel :
  4243.    c := 'C';
  4244.    INC(c, 2);            c hat jetzt den Wert 'E', weil 'E' in der ASCII-Tabelle das
  4245.                          zweite Zeichen nach 'C' ist.
  4246.    l := 12345;
  4247.    INC(l);               l hat den Wert 12346. Der zweite Parameter wird in diesem
  4248.                          Fall automatisch auf 1 gesetzt!
  4249.  
  4250.  
  4251. Insert
  4252.  
  4253. Mit Insert wird eine Zeichenkette in eine andere Zeichenkette an einer
  4254. vorgegebenen Position eingefügt.
  4255.  
  4256.  Deklaration :
  4257.    PROCEDURE Insert(Was : STRING; VAR WoHinein : STRING; Wo : INTEGER);
  4258.    PROCEDURE Insert(Was : CHAR; VAR WoHinein : STRING; Wo : INTEGER);
  4259.  
  4260.  Beispiel :
  4261.    Was := "DE";
  4262.    WoHinein := "ABCFGH";
  4263.    Insert(Was, WoHinein, 4);             Der erste Buchstabe der Zeichenkette Was
  4264.                                          ("D") wird als 4. Buchstabe, der zweite aus
  4265.                                          Was ("E") als 5.Buchstabe in WoHinein
  4266.                                          eingefügt. Die Position der übrigen Zeichen aus
  4267.                                          WoHinein verschiebt sich dadurch um zwei
  4268.                                          nach rechts. WoHinein hat anschließend den
  4269.                                          Wert "ABCDEFGH".
  4270.  
  4271.  
  4272. InversVideo
  4273.  
  4274. Setzt das Schreibattribut auf dunkle Schrift auf hellem Untergrund.
  4275.  
  4276. #FF
  4277.  Deklaration :
  4278.    PROCEDURE HighVideo;
  4279.  
  4280.  Beispiel :
  4281.    HighVideo;                            helle Schrift auf dunklem Untergrund
  4282.    WriteLn("helle Schrift");
  4283.    LowVideo;                             dunklere Schrift auf dunklem Untergrund
  4284.    WriteLn("dunklere Schrift");
  4285.    InversVideo;                          dunkle Schrift auf hellem Untergrund
  4286.    WriteLn("inverse Schrift");
  4287.  
  4288.  
  4289. LowVideo
  4290.  
  4291. Setzt das Schreibattribut auf dunklere Schrift auf dunklem Untergrund.
  4292.  
  4293.  Deklaration :
  4294.    PROCEDURE LowVideo;
  4295.  
  4296.  Beispiel :
  4297.    HighVideo;                            helle Schrift auf dunklem Untergrund
  4298.    WriteLn("helle Schrift");
  4299.    LowVideo;                             dunklere Schrift auf dunklem Untergrund
  4300.    WriteLn("dunklere Schrift");
  4301.    InversVideo;                          dunkle Schrift auf hellem Untergrund
  4302.    WriteLn("inverse Schrift");
  4303.  
  4304.  
  4305. NoSound
  4306.  
  4307. NoSound schaltet den im Computer eingebauten Lautsprecher ab.
  4308.  
  4309.  Deklaration :
  4310.    PROCEDURE NoSound;
  4311.  
  4312.  Beispiel :
  4313.    Sound(1000);          Ton mit der Frequenz f=1000Hz 1s (1000ms)
  4314.    Delay(1000);          lang ausgeben,
  4315.    NoSound;              dann die Tonausgabe abschalten
  4316.  
  4317.  
  4318. Randomize
  4319.  
  4320. Randomize erzeugt den Anfang einer neuer Folge von Zufallszahlen.
  4321.  
  4322.  Deklaration :
  4323.    PROCEDURE Randomize;
  4324.  
  4325.  Beispiel :
  4326.    Randomize;                    Anfang einer neuen Folge erzeugen
  4327.    Write(Random(100));   Zufallszahl zwischen 0 und 99 drucken
  4328.  
  4329.  
  4330. READ
  4331.  
  4332. Mit Read erfolgen Eingaben über die Tastatur oder die Diskette/Festplatte.
  4333. Dabei sind Variablen beliebigen Typs (im Unterschied zu TURBO-PASCAL auch
  4334. #FF
  4335. ARRAY- und RECORD-Variablen bei der Tastatur-Eingabe) zugelassen. Für
  4336. REAL-Variablen können abweichend zu TURBO-PASCAL auch Terme eingegeben werden,
  4337. die allerdings keine Variablen enthalten dürfen. Bei STRING-Variablen wird das
  4338. Eingabefenster in einer Länge geöffnet, die der Deklaration entspricht.
  4339.  
  4340. Im Unterschied zu TURBO-PASCAl können die Variablen mit Werten vorbelegt
  4341. werden, die dann im Eingabefeld erscheinen und editiert werden können. Dabei
  4342. stehen die Tasten <-, ->, Home (Pos1), End (Ende), Del (Lösch), BackSpace (<--)
  4343. und Ins (Einf) zur Verfügung. Wenn das erste Zeichen keines dieser
  4344. Editorzeichen ist, wird das Eingabefenster gelöscht. Der Cursor bleibt nach der
  4345. Eingabe direkt hinter dem letzten eingegebenen Zeichen stehen.
  4346.  
  4347. Bei Dateien darf mit READ nur ein Lesevorgang in FILE-Typen vorgenommen werden.
  4348.  
  4349.  Deklaration :
  4350.    PROCEDURE Read(VAR v : VariableBeliebigenTyps);
  4351.    PROCEDURE Read(VAR f : FILE; VAR v : VariableBeliebigenTyps);
  4352.  
  4353.  Beispiel :
  4354.    VAR
  4355.      r : REAL;
  4356.      s : STRING[20];
  4357.      a : ARRAY[1..5] OF INTEGER;
  4358.      f : FILE;
  4359.    BEGIN
  4360.      s := "abcd";
  4361.      Read(s);                    Es wird ein 20 Zeichen langes Eingabefeld geöffnet.
  4362.                  Eingabe : "ABCD"
  4363.                                  Bei dem ersten Zeichen "A" wird das Eingabefenster
  4364.                                  gelöscht. Dann wird "A" als erstes Zeichen
  4365.                                  geschrieben.
  4366.                  Eingabe : RETURN-Taste
  4367.                                  Der Wert wird unverändert übernommen.
  4368.                  Eingabe : ->
  4369.                                  Der Cursor bewegt sich um ein Zeichen nach rechts
  4370.                                  auf "B". Wenn jetzt "Z" gedrückt wird, wird dieses
  4371.                                  Zeichen an der zweiten Stelle eingefügt und es steht
  4372.                                  "AZBCD" im Eingabefeld.
  4373.      Read(r);
  4374.                  Eingabe : 1.234 oder 1.234E+3 oder sin(2*pi*100)
  4375.      Read(a);
  4376.                  Auf dem Bildschirm erscheint der Text "A[1]". Direkt anschließend
  4377.                  ist das Eingabefeld geöffnet und es kann der erste Wert bearbeitet
  4378.                  werden. Nach <RETURN> erscheint "A[2]" mit dem Eingabefeld usw.
  4379.                  Die Eingabe kann mit <ESC> vorzeitig abgebrochen werden.
  4380.      Assign(f, 'DATEN.DAT');             Datei öffnen
  4381.      Reset(f);                           Lesemarke auf den Anfang setzen
  4382.      Read(f, a);                         das Array a aus der Datei lesen
  4383.      Close(f);                           Datei schließen
  4384.    END;
  4385.  
  4386.  
  4387. READLN
  4388.  
  4389. Die Prozedur ReadLn entspricht weitgehend der Prozedur Read. Es gibt aber zwei
  4390. Unterschiede :
  4391. 1) Nach ReadLn wird der Cursor auf den Anfang der folgenden Zeile gesetzt.
  4392. 2) Bei Dateien darf mit ReadLn nur ein Lesevorgang in TEXT-Typen vorgenommen werden.
  4393.  
  4394. #FF
  4395.  Deklaration :
  4396.    PROCEDURE ReadLn(VAR v : VariableBeliebigenTyps);
  4397.    PROCEDURE ReadLn(VAR t : TEXT; VAR v : VariableBeliebigenTyps);
  4398.  
  4399.  Beispiel :
  4400.    Read(s);              Cursor bleibt hinter dem letzten Zeichen stehen
  4401.    WriteLn;              Cursor an den Anfang der nächsten Zeile
  4402.    ReadLn(s);            Cursor an den Anfang der nächsten Zeile (Kombination aus
  4403.                          Read(s) und WriteLn)
  4404.  
  4405.  
  4406. ReName
  4407.  
  4408. ReName ändert den Namen einer Datei.
  4409.  
  4410.  Deklaration :
  4411.    PROCEDURE ReName(f : FILE; NeuerName : STRING);
  4412.    PROCEDURE ReName(t : TEXT; NeuerName : STRING);
  4413.  
  4414.  Beispiel :
  4415.    VAR
  4416.      Datei : TEXT;
  4417.    BEGIN
  4418.      Assign(Datei, 'ITG.HLP');           Datei mit dem Namen verknüpfen
  4419.      ReName(Datei, 'ITG.BAK');           Namen von ITG.HLP auf der Diskette /
  4420.                                          Festplatte in ITG.BAK umändern
  4421.      Close(Datei);                       Schließe die Datei.
  4422.    END;
  4423.  
  4424.  
  4425. Reset
  4426.  
  4427. Reset setzt die Lese- / Schreibposition in einer Datei auf den Anfang der
  4428. Datei.
  4429.  
  4430.  Deklaration :
  4431.    PROCEDURE Reset(f : FILE);
  4432.    PROCEDURE Reset(t : TEXT);
  4433.  
  4434.  Beispiel :
  4435.    VAR
  4436.      Datei : TEXT;
  4437.      s : STRING;
  4438.  
  4439.    BEGIN
  4440.      Assign(Datei, 'ITG.HLP');           Datei mit dem Namen verknüpfen
  4441.      Reset(Datei);                       Anfang der Datei suchen
  4442.      WHILE NOT EOF(Datei) DO BEGIN       wenn das Dateiende noch nicht erreicht
  4443.        ReadLn(Datei, s);                 ist, lies eine Zeile aus der Datei in die
  4444.        WriteLn(s);                       Variable s und drucke s auf dem
  4445.      END;                                Bildschirm aus.
  4446.      Close(Datei);                       Schließe die Datei.
  4447.    END;
  4448.  
  4449. #FF
  4450. ReWrite
  4451.  
  4452. ReWrite löscht die mit dieser Dateivariablen verknüpfte Datei, sofern eine
  4453. unter diesem Namen existiert, erzeugt eine neue unter dem gleichen Namen und
  4454. setzt die Lese- / Schreibposition auf den Anfang dieser Datei.
  4455.  
  4456.  Deklaration :
  4457.    PROCEDURE ReWrite(f : FILE);
  4458.    PROCEDURE ReWrite(t : TEXT);
  4459.  
  4460.  Beispiel :
  4461.    VAR
  4462.      Datei : TEXT;
  4463.      s : STRING;
  4464.    BEGIN
  4465.      Assign(Datei, 'NEU.DAT');           Datei mit dem Namen verknüpfen
  4466.      ReWrite(Datei);                     neue Datei anlegen und Schreibposition
  4467.                                          auf den Anfang setzen
  4468.      s := "Anfang einer neuen Datei";
  4469.      WriteLn(Datei, s);                  s an den Anfang der Datei schreiben und
  4470.      .                                   gegebenenfalls weitere Texte anhängen
  4471.      Close(Datei);                       Schließe die Datei.
  4472.    END;
  4473.  
  4474.  
  4475. Seek
  4476.  
  4477. Seek(Dateivariable, Position) setzt den Lesezeiger in der Datei Dateivariable
  4478. an das Ende des Datensatzes mit dem Index Position.
  4479.  
  4480.  Deklaration :
  4481.    PROCEDURE Seek(f : FILE OF Datenstruktur; Position : WORD);
  4482.  
  4483.  Beispiel :
  4484.    TYPE
  4485.      DatenStruktur = RECORD
  4486.        x : INTEGER;
  4487.        s : STRING[20];
  4488.      END;
  4489.    VAR
  4490.      Daten : DatenStruktur;
  4491.      f : FILE OF DatenStruktur;
  4492.  
  4493.    BEGIN
  4494.      Assign(f, "TEST.DAT");              der Datei einen Namen zuweisen
  4495.      Reset(f);                           und zum Lesen öffnen
  4496.      Seek(f, 3);                         Zeiger auf das Ende des 3.Datensatzes
  4497.      Read(f, Daten);                     4.Datensatz lesen!
  4498.      Close(f);                           Datei schließen
  4499.    END;
  4500.  
  4501.  
  4502. SetBkColor
  4503.  
  4504. Mit SetBkColor kann bei VGA-Karten die Hintergrundfarbe , bei CGA- und
  4505. Herkules-Karten das Hintergrundattribut verändert werden.
  4506.  
  4507. #FF
  4508. Achtung : Hintergrundfarben / Hintergrundattribute mit einem Zahlenwert
  4509. zwischen 8 und 15 erzeugen eine blinkende Schrift mit der Farbe / dem Attribut,
  4510. das man erhält, wenn man von dem Zahlenwert 8 abzieht.
  4511.  
  4512.  Deklaration :
  4513.    PROCEDURE SetBkColor(Farbe : BYTE);
  4514.          wobei Farbe Werte von 0 bis 15 annehmen darf.
  4515.  
  4516.  Beispiel :
  4517.    SetColor(Blau);                               Schriftfarbe Blau wählen
  4518.    SetBkColor(Gelb);                             Hintergrungfarbe Gelb (14) wählen
  4519.    WriteLn("blau Schrift auf gelbem Hintergrund, blinkend");
  4520.    SetBkColor(Dunkelgelb);                       Hintergrundfarbe Dunkelgelb (6) wählen
  4521.    WriteLn("blau Schrift auf gelbem Hintergrund, nicht blinkend");
  4522.  
  4523.  
  4524. SetColor
  4525.  
  4526. Mit SetColor kann bei VGA-Karten die Schriftfarbe , bei CGA- und
  4527. Herkules-Karten das Schriftattribut verändert werden.
  4528.  
  4529.  Deklaration :
  4530.    PROCEDURE SetColor(Farbe : BYTE);
  4531.          wobei Farbe Werte von 0 bis 15 annehmen darf.
  4532.  
  4533.  Beispiel :
  4534.    SetColor(Blau);                               Schriftfarbe Blau wählen
  4535.    SetBkColor(Gelb);                             Hintergrungfarbe Gelb (14) wählen
  4536.    WriteLn("blau Schrift auf gelbem Hintergrund, blinkend");
  4537.    SetBkColor(Dunkelgelb);                       Hintergrundfarbe Dunkelgelb (6) wählen
  4538.    WriteLn("blau Schrift auf gelbem Hintergrund, nicht blinkend");
  4539.  
  4540.  
  4541. Sound
  4542.  
  4543. Sound(f) schaltet den im Computer eingebauten Lautsprecher ein und bewirkt eine
  4544. Tonerzeugung eines Tones mit der Frequenz f.
  4545.  
  4546.  Deklaration :
  4547.    PROCEDURE Sound(Frequenz : WORD);
  4548.  
  4549.  Beispiel :
  4550.    Sound(1000);          Ton mit der Frequenz f=1000Hz 1s (1000ms)
  4551.    Delay(1000);          lang ausgeben,
  4552.    NoSound;              dann die Tonausgabe abschalten
  4553.  
  4554.  
  4555. STR
  4556.  
  4557. STR wandelt eine Zahl in eine Zeichenkette um (Umkehrprozedur zu VAL).
  4558.  
  4559.  Deklaration :
  4560.    PROCEDURE STR(b : BYTE; VAR s : STRING);
  4561.    PROCEDURE STR(i : INTEGER; VAR s : STRING);
  4562.    PROCEDURE STR(w : WORD; VAR s : STRING);
  4563.    PROCEDURE STR(l : LONGINT; VAR s : STRING);
  4564. #FF
  4565.    PROCEDURE STR(r : REAL; VAR s : STRING);
  4566.  
  4567.  Beispiel :
  4568.    VAR
  4569.      w : WORD;
  4570.      r : REAL;
  4571.      s : STRING;
  4572.    BEGIN
  4573.      w := 1234;
  4574.      STR(w, s);          s erhält den Wert "1234"
  4575.      r := 1.234;
  4576.      STR(r, s);          s erhält den Wert "1.2340000000E+0000"
  4577.    END;
  4578.  
  4579.  
  4580. VAL
  4581.  
  4582. VAL wandelt eine Zeichenkette in eine Zahlenvariable um (Umkehrprozedur zu STR).
  4583.  
  4584.  Deklaration :
  4585.    PROCEDURE VAL(s : STRING; VAR b : BYTE; FehlerPos : WORD);
  4586.    PROCEDURE VAL(s : STRING; VAR i : INTEGER; FehlerPos : WORD);
  4587.    PROCEDURE VAL(s : STRING; VAR w : WORD; FehlerPos : WORD);
  4588.    PROCEDURE VAL(s : STRING; VAR l : LONGINT; FehlerPos : WORD);
  4589.    PROCEDURE VAL(s : STRING; VAR r : REAL; FehlerPos : WORD);
  4590.  
  4591.  Beispiel :
  4592.    VAR
  4593.      w, FehlerPos : WORD
  4594.    BEGIN
  4595.      VAL("1234", w, FehlerPos);  w erhält den Wert 1234, FehlerPos ist 0
  4596.      VAL("12q4", w, FehlerPos);  FehlerPos ist 3, weil an der 3. Stelle der
  4597.                                  Zeichenkette ein Zeichen steht, das keine
  4598.    END;                          Ziffer ist
  4599.  
  4600.  
  4601. Window
  4602.  
  4603. Window definiert ein Textfenster auf dem Bildschirm. Alle nachfolgenden Write-/
  4604. GotoXY-Anweisungen beziehen sich auf dieses Fenster.
  4605.  
  4606.  Deklaration :
  4607.    PROCEDURE Window(xMin, yMin, xMax, yMax : WORD);
  4608.  
  4609.  Beispiel :
  4610.    Window(10, 3, 60, 8); definiert einen Teilausschnitt des Bildschirms als
  4611.                          Textfenster. Die Koordinaten beziehen sich auf den
  4612.                          vollen Bildschirm.
  4613.    GotoXY(1, 1);         setzt den Cursor in die linke obere Ecke des Fensters
  4614.                          (absolute Koordinaten (10/3) und (60/8))
  4615.    Window(1, 1, 80, 25);
  4616.  
  4617.  
  4618. WRITE
  4619.  
  4620. Mit Write erfolgen Ausgaben auf den Bildschirm oder die Diskette / Festplatte.
  4621. Dabei sind Variablen beliebigen Typs (im Unterschied zu TURBO-PASCAL auch
  4622. #FF
  4623. ARRAY- und RECORD-Variablen bei der Bildschirm-Ausgabe) zugelassen. REAL-
  4624. Variablen werden soweit wie möglich ohne Expontialdarstellung gedruckt. Der
  4625. Cursor bleibt nach der Ausgabe direkt hinter dem letzten ausgegebenen Zeichen
  4626. stehen.
  4627.  
  4628. Bei Dateien darf mit WRITE nur ein Schreibvorgang in FILE-Typen vorgenommen
  4629. werden.
  4630.  
  4631.  Deklaration :
  4632.    PROCEDURE Write(v : VariableBeliebigenTyps);
  4633.    PROCEDURE Write(VAR f : FILE; v : VariableBeliebigenTyps);
  4634.  
  4635.    Beispiel :
  4636.      VAR
  4637.        a : ARRAY[1..3] OF INTEGER;
  4638.        f : FILE;
  4639.    BEGIN
  4640.      s := "abcd";
  4641.      Write(s);           Es wird "abcd" gedruckt.
  4642.      Write(s:6);         Es wird "  abcd" gedruckt. Die Ausgabe erfolgt über
  4643.                          mindestens 6 Zeichen. Wenn die Zeichenkette weniger als 6
  4644.                          Zeichen enthält, werden vor dem ersten Zeichen solange
  4645.                          Leerzeichen einfügt, bis die Zeichenkette 6 Zeichen enthält.
  4646.                          In diesem Fall werden also 6-4 = 2 Leerzeichen eingefügt.
  4647.      Write("a");         druckt "a"
  4648.      Write("a":3);       druckt "  a" wie oben beschrieben
  4649.      Write(1234);        druckt "1234"
  4650.      Write(1234:6);      druckt "  1234"
  4651.      Write(pi);          druckt "3.141592654" abweichend von TURBO-PASCAL
  4652.      Write(pi:13);       druckt "  3.141592654" (13 Zeichen)
  4653.      Write(pi:10:5)      druckt "   3.14159" (10 Zeichen insgesamt, davon 5
  4654.                          Nachkommastellen)
  4655.      a[1] := 1;
  4656.      a[2] := 2;
  4657.      a[3] := 3;
  4658.      Write(a);           druckt "(A[1]=1,A[2]=2,A[3]=3)" mit Angabe des Variablen-
  4659.                          Namens, des Feldindexes und des Wertes (in TURBO-
  4660.                          PASCAL nicht möglich)
  4661.      Write(a:3);         druckt "(A[1]=  1,A[2]=  2,A[3]=  3)" und verwendet für die
  4662.                          Darstellung des Variableninhaltes 3 Zeichen
  4663.      Assign(f, 'DATEN.DAT');             Datei öffnen
  4664.      ReWrite(f);                         Schreibmarke auf den Anfang setzen
  4665.      Write(f, a);                        das Array a in die Datei schreiben
  4666.      Close(f);                           Datei schließen
  4667.    END;
  4668.  
  4669.  
  4670. WRITELN
  4671.  
  4672. Die Prozedur WriteLn entspricht weitgehend der Prozedur Write. Es gibt aber
  4673. zwei Unterschiede :
  4674. 1) Nach WriteLn wird der Cursor auf den Anfang der folgenden Zeile gesetzt.
  4675. 2) Bei Dateien darf mit WriteLn nur ein Schreibvorgang in TEXT-Typen
  4676. vorgenommen werden.
  4677.  
  4678.  Deklaration :
  4679.    PROCEDURE WriteLn(v : VariableBeliebigenTyps);
  4680.    PROCEDURE WriteLn(VAR t : TEXT; v : VariableBeliebigenTyps);
  4681.  
  4682. #FF
  4683.  Beispiel :
  4684.    Write(s);             Cursor bleibt hinter dem letzten Zeichen stehen
  4685.    WriteLn;              Cursor an den Anfang der nächsten Zeile
  4686.    WriteLn(s);           Cursor an den Anfang der nächsten Zeile (Kombination aus
  4687.                          Write(s) und WriteLn)
  4688.  
  4689. #FF
  4690. ITG-Pascal-Prozeduren
  4691.  
  4692.  AusgabeAufBildschirm            AusgabeAufDiskette              AusgabeAufDrucker
  4693.  Auswahl                         AuswahlFeld                     Bogen
  4694.  BreakPoint                      DatenAufDiskette                DatenVonDiskette
  4695.  DebugEin                        DebugAus                        DefiniereFunktionsterm
  4696.  DreheAuf                        DruckeBildschirm                EingabeFeld
  4697.  EingabeVonTastatur              EingabeVonDiskette              EinzelschrittEin
  4698.  EinzelschrittAus                ErsetzeBuchstaben               Färben
  4699.  FügeBuchstabenEin               GeheNach                        GrafikFenster
  4700.  GrafikSchirm                    Hinten                          InGrad
  4701.  ImBogenmaß                      Kreis                           LiesEingaben
  4702.  LinkerBogen                     Links                           LöscheBuchstaben
  4703.  Menü                            MitCursor                       MitIgel
  4704.  MitProtokoll                    MitStift                        NeueZufallsZahlenFolge
  4705.  ÖffneAusgabeDatei               ÖffneEingabeDatei               ÖffneFenster
  4706.  OhneCursor                      OhneIgel                        OhneProtokoll
  4707.  OhneStift                       PapierFarbe                     Pause
  4708.  Punkt                           RechterBogen                    Rechts
  4709.  SchließeAusgabeDatei            SchließeEingabeDatei            SchließeFenster
  4710.  SchreibPort                     StiftFarbe                      Strecke
  4711.  TextSchirm                      Ton                             Ursprung
  4712.  Vertausche                      Vorne                           WähleDatei
  4713.  Wischen
  4714.  
  4715.  
  4716. AusgabeAufBildschirm
  4717.  
  4718. Wenn die Ausgabe, die mit Write / WriteLn normalerweise auf den Bildschirm
  4719. erfolgt, mit AusgabeAufDrucker auf den Drucker oder mit AusgabeAufDiskette auf
  4720. die Diskette umgelenkt wurde, kann sie mit AusgabeAufBildschirm wieder auf den
  4721. Bildschirm zurückgelenkt werden.
  4722.  
  4723.  Deklaration :
  4724.    PROCEDURE AusgabeAufBildschirm;
  4725.  
  4726.  Beispiel :
  4727.    AusgabeAufDrucker;
  4728.    WriteLn("Diese Ausgabe erfolgt auf den Drucker!");
  4729.    AusgabeAufBildschirm;
  4730.    WriteLn("Diese Ausgabe erfolgt auf den Bildschirm.");
  4731.  
  4732.  
  4733. AusgabeAufDiskette
  4734.  
  4735. Mit AusgabeAufDiskette wird die Ausgabe, die mit Write / WriteLn normalerweise
  4736. auf den Bildschirm erfolgt, auf die Diskette / Festplatte umgelenkt. Zuvor muß
  4737. aber eine Ausgabedatei mit ÖffneAusgabeDatei(DateiName) geöffnet werden!
  4738.  
  4739.  Deklaration :
  4740.    PROCEDURE AusgabeAufDiskette;
  4741.  
  4742.  Beispiel :
  4743.    ÖffneAusgabeDatei("AUSGABE.TXT");
  4744.    AusgabeAufDiskette;
  4745.    WriteLn("Diese Ausgabe erfolgt auf Diskette!");
  4746. #FF
  4747.    AusgabeAufBildschirm;
  4748.    WriteLn("Diese Ausgabe erfolgt auf den Bildschirm.");
  4749.    SchließeAusgabeDatei;
  4750.  
  4751.  
  4752. AusgabeAufDrucker
  4753.  
  4754. Mit AusgabeAufDrucker wird die Ausgabe, die mit Write / WriteLn normalerweise
  4755. auf den Bildschirm erfolgt, auf den Drucker umgelenkt.
  4756.  
  4757.  Deklaration :
  4758.    PROCEDURE AusgabeAufDrucker;
  4759.  
  4760.  Beispiel :
  4761.    AusgabeAufDrucker;
  4762.    WriteLn("Diese Ausgabe erfolgt auf den Drucker!");
  4763.    AusgabeAufBildschirm;
  4764.    WriteLn("Diese Ausgabe erfolgt auf den Bildschirm.");
  4765.  
  4766.  
  4767. Auswahl
  4768.  
  4769. Mit Auswahl kann eine Wahl aus einer Liste von Daten erfolgen, die mit
  4770. AuswahlFeld vorher definiert wurden. In der Variablen Index wird dabei
  4771. zurückgegeben, als wievieltes Element das mit RETURN angewählte in der Liste
  4772. eingetragen wurde. Wenn die Auswahl mit ESC abgebrochen wird, ist Index = 0!
  4773. Beim Verlassen der Auswahl wird die Anzahl der Auswahlelemente automatisch auf
  4774. Null gesetzt.
  4775.  
  4776. Der linke obere Eckpunkt des Auswahlfenster hat die Koordinaten P(x/y).
  4777.  
  4778.  Deklaration :
  4779.    PROCEDURE Auswahl(x, y : INTEGER; VAR Index : INTEGER);
  4780.  
  4781.  Beispiel :
  4782.    VAR
  4783.      Liste : ARRAY[1..60] OF STRING[20];
  4784.      n, Wahl : INTEGER;
  4785.    BEGIN
  4786.      FOR n := 1 TO 60 DO BEGIN
  4787.        Str(n:5, Liste[n]);
  4788.        AuswahlFeld(Liste[n]);                    Elemente als STRING in die
  4789.      END;                                        Auswahlliste eintragen
  4790.      ÖffneFenster(1, 1, 80, 25, OhneRahmen);     alten Bildschirminhalt speichern
  4791.      Auswahl(10, 3, Wahl);                       linken oberen Eckpunkt der
  4792.                                                  Auswahl auf P(10/3) setzen und
  4793.                                                  das Menü aufrufen Wahl enthält
  4794.                                                  den Index des gewählten
  4795.                                                  Listenelementes
  4796.      SchließeFenster;                            alten Bildschirm wiederherstellen
  4797.      IF Wahl > 0 THEN BEGIN
  4798.        WriteLn(Liste[Wahl]);
  4799.      END
  4800.      ELSE BEGIN
  4801.        WriteLn("Auswahl wurde mit <ESC> abgebrochen");
  4802.      END;
  4803.    END.
  4804.  
  4805.  
  4806. #FF
  4807. AuswahlFeld
  4808.  
  4809. AuswahlFeld fügt einer Liste, aus der ein Element ausgewählt werden soll, ein
  4810. Element hinzu. Der Text, der in dem Auswahlmenü erscheinen soll, muß der
  4811. Prozedur AuswahlFeld als STRING übergeben werden.
  4812.  
  4813.  Deklaration :
  4814.    PROCEDURE AuswahlFeld(DatenText : STRING[40]);
  4815.  
  4816.  Beispiel :
  4817.    VAR
  4818.      Liste : ARRAY[1..60] OF STRING[20];
  4819.      n, Wahl : INTEGER;
  4820.    BEGIN
  4821.      FOR n := 1 TO 60 DO BEGIN
  4822.        Str(n:5, Liste[n]);
  4823.        AuswahlFeld(Liste[n]);                    Elemente als STRING in die
  4824.      END;                                        Auswahlliste eintragen
  4825.      ÖffneFenster(1, 1, 80, 25, OhneRahmen);     alten Bildschirminhalt speichern
  4826.      Auswahl(10, 3, Wahl);                       linken oberen Eckpunkt der
  4827.                                                  Auswahl auf P(10/3) setzen und
  4828.                                                  das Menü aufrufen Wahl enthält
  4829.                                                  den Index des gewählten
  4830.                                                  Listenelementes
  4831.      SchließeFenster;                            alten Bildschirm wiederherstellen
  4832.      IF Wahl > 0 THEN BEGIN
  4833.        WriteLn(Liste[Wahl]);
  4834.      END
  4835.      ELSE BEGIN
  4836.        WriteLn("Auswahl wurde mit <ESC> abgebrochen");
  4837.      END;
  4838.    END.
  4839.  
  4840.  
  4841. DatenAufDiskette
  4842.  
  4843. Mit der Anweisung DatenAufDiskette kann der Inhalt einer beliebigen Variablen,
  4844. die allerdings keine Dateivariable (TEXT oder FILE) sein darf, unter dem
  4845. angegebenen Dateinamen auf Diskette gespeichert werden.
  4846.  
  4847.  Deklaration :
  4848.    PROCEDURE DatenAufDiskette(DateiName : STRING;
  4849.                               v : VariableBeliebigenTyps);
  4850.  
  4851.  Beispiel :
  4852.    TYPE
  4853.      DatenSatz = RECORD                          Datenstruktur definieren
  4854.        Firma : STRING[40];
  4855.        Ort : STRING[20];
  4856.        Plz : WORD;
  4857.      END;
  4858.    VAR
  4859.      d : DatenSatz;                              Variable deklarieren
  4860.    BEGIN
  4861.      d.Firma := "Software Vertrieb";             Variable mit Werten belegen
  4862.      d.Ort := "Kiel";
  4863. #FF
  4864.      d.Plz := 2300;                              und unter dem Namen
  4865.      DatenAufDiskette("FIRMEN.DAT", d);          "FIRMEN.DAT" abspeichern
  4866.    END;
  4867.  
  4868.  
  4869. DatenVonDiskette
  4870.  
  4871. Mit der Anweisung DatenVonDiskette kann der Inhalt einer beliebigen Variablen,
  4872. die allerdings keine Dateivariable (TEXT oder FILE) sein darf, unter dem
  4873. angegebenen Dateinamen von Diskette gelesen werden.
  4874.  
  4875.  Deklaration :
  4876.    PROCEDURE DatenVonDiskette(DateiName : STRING;
  4877.                               VAR v : VariableBeliebigenTyps);
  4878.  
  4879.  Beispiel :
  4880.    TYPE
  4881.      DatenSatz = RECORD                       Datenstruktur definieren
  4882.      Firma : STRING[40];
  4883.      Ort : STRING[20];
  4884.      Plz : WORD;
  4885.    END;
  4886.    VAR
  4887.      d : DatenSatz;                                      Variable deklarieren
  4888.    BEGIN
  4889.      IF EsGibtDatei("FIRMEN.DAT") THEN BEGIN             gibt es die Datei
  4890.                                                          "FIRMEN.DAT"?
  4891.        DatenVonDiskette("FIRMEN.DAT", d);                wenn ja von Diskette
  4892.                                                          in die Variable d lesen
  4893.        WriteLn(d);                                       und ausdrucken
  4894.      END
  4895.      ELSE BEGIN
  4896.        WriteLn("FIRMEN.DAT nicht gefunden");             sonst Fehlermeldung
  4897.      END;
  4898.    END;
  4899.  
  4900.  
  4901. DefiniereFunktionsTerm
  4902.  
  4903. Wenn mit DefiniereFunktionsterm ein Funktionsterm festgelegt wurde, kann mit
  4904. FunktionWert ein Wert an einer Stelle berechnet werden.
  4905.  
  4906.  Deklaration :
  4907.    PROCEDURE DefiniereFunktionsterm(Term : STRING);
  4908.  
  4909.  Beispiel :
  4910.    DefiniereFunktionsterm("5*x");                zuerst Funktionsterm festlegen
  4911.    IF FunktionstermFehler = 0 THEN BEGIN         kein Fehler enthalten?
  4912.      FOR n := 1 TO 5 DO BEGIN
  4913.        WriteLn(FunktionsWert(n));                und erst dann Funktionswerte
  4914.      END;                                        berechnen
  4915.    END;
  4916.  
  4917.  
  4918. DruckeBildschirm
  4919.  
  4920. Mit DruckeBildschirm wird der Inhalt des Text- oder des Grafikschirms ausgedruckt.
  4921.  
  4922. #FF
  4923.  Deklaration :
  4924.    PROCEDURE  DruckeBildschirm;
  4925.  
  4926.  Beispiel :
  4927.    Grafikschirm;                 in den Grafikmodus schalten
  4928.    ZeichneIrgendEtwas;           Grafik erstellen
  4929.    DruckeBildschirm;             und ausdrucken
  4930.  
  4931.  
  4932. EingabeFeld
  4933.  
  4934. Mit EingabeFeld wird ein Feld einer Bildschirmmaske zur Eingabe eines
  4935. Datensatzes definiert. Wenn alle gewünschten Felder definiert wurden, wird das
  4936. Einlesen mit LiesEingaben ausgeführt. Dabei kann mit den Tasten "Auf(CrsUp)",
  4937. "Ab(CrsDn)", "Pos1(Home)" und "Ende(End)" zwischen den Eingabefeldern beliebig
  4938. oft gewechselt werden. Die Eingabe wird beendet, wenn in dem zuletzt
  4939. definierten Feld die RETURN-Taste gedrückt wird oder in einem beliebigen Feld
  4940. die ESC-Taste oder eine der Tastenkombinationen Strg-Bild-Auf(Strg-PgUp) oder
  4941. Strg-Bild-Ab(Strg-PgDn) gedrückt wird.
  4942.  
  4943.  Deklaration :
  4944.    PROCEDURE EingabeFeld(x, y : INTEGER;
  4945.                                  Erklärung : STRING;
  4946.                                  VAR v : EinfacheVariable);
  4947.  
  4948.    EinfacheVariable ist vom Typ CHAR, STRING, BYTE, INTEGER, WORD,
  4949.    LONGINT, REAL, DOUBLE, EXTENDED oder BOOLEAN
  4950.  
  4951.  Beispiel :
  4952.    VAR
  4953.      r : REAL;
  4954.      i : INTEGER;
  4955.      s : STRING[20];
  4956.    BEGIN
  4957.      r := 1.234;                         Belegung der Variablen mit Startwerten,
  4958.      i := 500;                           die editiert werden sollen
  4959.      Name := "Irgendwer";
  4960.      REPEAT
  4961.        EingabeFeld(5, 3, "Dezimalzahl : ", r);
  4962.        EingabeFeld(2, 6, "ganze Zahl zwischen 0 und 1000 : ", i);
  4963.        EingabeFeld(10, 15, "Name : ", s);
  4964.                                          Zuerst wird für alle zu bearbeitenden Variablen
  4965.                                          ein Eingabefeld definiert. Diese Definition muß
  4966.                                          innerhalb der Schleife stehen, weil
  4967.                                          LiesEingaben beim Beenden alle Definitionen
  4968.                                          löscht!
  4969.        LiesEingaben;                     Jetzt wird der Editor für die Eingabefelder
  4970.                                          aufgerufen.
  4971.      UNTIL ((0 >= i) AND (i <= 1000)) OR (LetzteTaste = ESC);
  4972.                                          Wurde mit ESC abgebrochen?
  4973.  
  4974.  
  4975. EingabeVonTastatur
  4976.  
  4977. EingabeVonTastatur aktiviert die Tastatur als Eingabemedium, wenn irgendwann
  4978. vorher im Programm die Eingabe mit EingabeVonDiskette auf die Diskette
  4979. #FF
  4980. umgelenkt wurde. Beim Start eines Programms erfolgt die Eingabe automatisch
  4981. über die Tastatur, wenn keine andere Anweisung gegeben wurde.
  4982.  
  4983.  Deklaration :
  4984.    PROCEDURE EingabeVonTastatur;
  4985.  
  4986.  Beispiel :
  4987.    VAR
  4988.      s : STRING;
  4989.    BEGIN
  4990.      ÖffneEingabeDatei("EINGABEN.DAT");          Eingabedatei zuweisen
  4991.      EingabeVonDiskette;                         und aktivieren
  4992.      Write("Eingabe von der Diskette:");
  4993.      ReadLn(s);                                  String von der Diskette lesen
  4994.      EingabeVonTastatur;                         Tastatur aktivieren
  4995.      Write("Eingabe von der Tastatur:");
  4996.      ReadLn(s);                                  String über die Tastatur
  4997.      SchließeEingabeDatei;                       lesen und Datei schließen
  4998.    END;
  4999.  
  5000.  
  5001. EingabeVonDiskette
  5002.  
  5003. EingabeVonDiskette aktiviert die Diskette anstelle der Tastatur als
  5004. Eingabemedium, wenn irgendwann vorher im Programm mit ÖffneEingabeDatei eine
  5005. Datei festgelegt wurde, aus der die Zeichen gelesen werden sollen.
  5006.  
  5007.  Deklaration :
  5008.    PROCEDURE EingabeVonDiskette;
  5009.  
  5010.  Beispiel :
  5011.    VAR
  5012.      s : STRING;
  5013.    BEGIN
  5014.      ÖffneEingabeDatei("EINGABEN.DAT");          Eingabedatei zuweisen
  5015.      EingabeVonDiskette;                         und aktivieren
  5016.      Write("Eingabe von der Diskette:");
  5017.      ReadLn(s);                                  String von der Diskette lesen
  5018.      EingabeVonTastatur;                         Tastatur aktivieren
  5019.      Write("Eingabe von der Tastatur:");
  5020.      ReadLn(s);                                  String über die Tastatur
  5021.      SchließeEingabeDatei;                       lesen und Datei schließen
  5022.    END;
  5023.  
  5024.  
  5025. ErsetzeBuchstaben
  5026.  
  5027. ErsetzeBuchstaben ersetzt einen Buchstaben / ein Zeichen eines Strings durch
  5028. einen anderen.
  5029.  
  5030.  Deklaration :
  5031.    PROCEDURE ErsetzeBuchstaben(VAR Zeichenkette : STRING;
  5032.                                          WievielterBuchstabe : WORD;
  5033.                                          DurchWelchenBuchstaben : CHAR);
  5034.  
  5035.  Beispiel :
  5036.    s := "abcdef";
  5037. #FF
  5038.    ErsetzeBuchstaben(s, 3, "x");         ersetzt den dritten Buchstaben "c" durch "x".
  5039.                                          s ist dann "abxdef".
  5040.  
  5041.  
  5042. FügeBuchstabenEin
  5043.  
  5044. FügeBuchstabenEin fügt einen Buchstaben / ein Zeichen oder einen String in
  5045. einen String ab einer vorgegebenen Position ein.
  5046.  
  5047.  Deklaration :
  5048.    PROCEDURE FügeBuchstabenEin(WelchenBuchstaben : CHAR;
  5049.                                           VAR InZeichenkette : STRING;
  5050.                                           WievielterBuchstabe : WORD);
  5051.    PROCEDURE FügeBuchstabenEin(WelcheZeichenkette : STRING;
  5052.                                           VAR InZeichenkette : STRING;
  5053.                                           AbWelchemBuchstaben : WORD);
  5054.  
  5055.  Beispiel :
  5056.    1)
  5057.      s := "abcdef";
  5058.      FügeBuchstabenEin("x", s, 3);       fügt den Buchstaben "x" an die dritte Stelle
  5059.                                          zwischen "b" und "c" ein. s ist dann "abxcdef".
  5060.  
  5061.    2)
  5062.      s := "abcdef";
  5063.      t := "xy";
  5064.      FügeBuchstabenEin(t, s, 5);         fügt die Zeichenkette "xy" beginnend an der
  5065.                                          fünften Stelle zwischen "d" und "e" ein. s ist
  5066.                                          dann "abcdxyef".
  5067.  
  5068.  
  5069. InGrad
  5070.  
  5071. InGrad bewirkt, daß alle Berechnungen mit trigonometrischen Funktionen in Grad
  5072. (Altgrad : α=360° für den Vollkreis) durchgeführt werden.
  5073.  
  5074.  Deklaration :
  5075.    PROCEDURE InGrad;
  5076.  
  5077.  Beispiel :
  5078.    InGrad;                       in Grad rechnen
  5079.    WriteLn(sin(90));             ergibt 1.00000..
  5080.    ImBogenmaß;                   im Bogenmaß rechnen
  5081.    WriteLn(sin(pi/2));           ergibt 1.00000..
  5082.  
  5083.  
  5084. ImBogenmaß
  5085.  
  5086. ImBogenmaß bewirkt, daß alle Berechnungen mit trigonometrischen Funktionen im
  5087. Bogenmaß (α=2*pi für den Vollkreis) durchgeführt werden. Beim Start eines
  5088. Programms erfolgt die Berechnung immer in Grad, wenn keine andere Anweisung
  5089. gegeben wurde.
  5090.  
  5091.  Deklaration :
  5092.    PROCEDURE ImBogenmaß;
  5093.  
  5094.  Beispiel :
  5095.    ImBogenmaß;                   im Bogenmaß rechnen
  5096. #FF
  5097.    WriteLn(sin(pi/2));           ergibt 1.00000..
  5098.    InGrad;                       in Grad rechnen
  5099.    WriteLn(sin(90));             ergibt 1.00000..
  5100.  
  5101.  
  5102. LiesEingaben
  5103.  
  5104. Mit LiesEingaben wird die Eingabe eines Datensatzes gestartet, der zuvor
  5105. elementweise mit EingabeFeld definiert wurde. Dabei kann mit den Tasten
  5106. "Auf(CrsUp)", "Ab(CrsDn)", "Pos1(Home)" und "Ende(End)" zwischen den
  5107. Eingabefeldern beliebig oft gewechselt werden. Die Eingabe wird beendet, wenn
  5108. in dem zuletzt definierten Feld die RETURN-Taste gedrückt wird oder in einem
  5109. beliebigen Feld die ESC-Taste gedrückt wird.
  5110.  
  5111.  Deklaration :
  5112.    PROCEDURE LiesEingaben;
  5113.  
  5114.  Beispiel :
  5115.    VAR
  5116.      r : REAL;
  5117.      i : INTEGER;
  5118.      s : STRING[20];
  5119.    BEGIN
  5120.      r := 1.234;                         Belegung der Variablen mit Startwerten,
  5121.      i := 500;                           die editiert werden sollen
  5122.      Name := "Irgendwer";
  5123.      REPEAT
  5124.        EingabeFeld(5, 3, "Dezimalzahl : ", r);
  5125.        EingabeFeld(2, 6, "ganze Zahl zwischen 0 und 1000 : ", i);
  5126.        EingabeFeld(10, 15, "Name : ", s);
  5127.                                          Zuerst wird für alle zu bearbeitenden Variablen
  5128.                                          ein Eingabefeld definiert. Diese Definition muß
  5129.                                          innerhalb der Schleife stehen, weil
  5130.                                          LiesEingaben beim Beenden alle Definitionen
  5131.                                          löscht!
  5132.        LiesEingaben;                     Jetzt wird der Editor für die Eingabefelder
  5133.                                          aufgerufen.
  5134.      UNTIL (0 <= i) AND (i <= 1000);
  5135.  
  5136.  
  5137. LöscheBuchstaben
  5138.  
  5139. LöscheBuchstaben löscht einen oder mehrere aufeinanderfolgende
  5140. Buchstaben / Zeichen beginnend ab einer vorgegebenen Stelle.
  5141.  
  5142.  Deklaration :
  5143.    PROCEDURE LöschenBuchstaben(VAR Zeichenkette : STRING;
  5144.                                           WelchenBuchstaben,
  5145.                                           WievieleBuchstaben : WORD);
  5146.  
  5147.  Beispiel :
  5148.    s := "abxycdef";
  5149.    LöscheBuchstaben(s, 3, 2);            löscht ab dem dritten Buchstaben zwei
  5150.                                          Buchstaben. s ist dann "abcdef".
  5151.  
  5152.  
  5153. #FF
  5154. Menü
  5155.  
  5156. Menü errichtet ein Pulldownmenü an einer vorgegebenen Stelle des Bildschirms
  5157. mit vorgegebenen Hotkeys, über die ein Menüpunkt direkt angewählt werden kann.
  5158. Dem als Hotkey vorgesehenen Buchstaben wird das Zeichen ^ vorangestellt.
  5159. Innerhalb des Menüs kann der Anwahlbalken auch mit den Tasten "Auf(CrsUp)",
  5160. "Ab(CrsDn)", "Ende(End)" und "Pos1(Home)" verschoben werden. CR aktiviert den
  5161. mit dem Balken unterlegten Menüpunkt und liefert als Ergebnis den als Hotkey
  5162. vorgesehenen Buchstaben zurück. ESC bricht die Anwahl ab und liefert ESC
  5163. (CHR(27)) als Ergebnis.
  5164.  
  5165.  Deklaration :
  5166.    PROCEDURE Menü(x, y : WORD;
  5167.                          Menüpunkte : STRING;
  5168.                          VAR Angewählt : CHAR);
  5169.  
  5170.  Beispiel :
  5171.    VAR
  5172.      c : CHAR;
  5173.    BEGIN
  5174.      REPEAT
  5175.        Menü(10, 5, " ^Laden; ^Bearbeiten; ^Speichern; ^Ende;", c);
  5176.                          Das Menü hat für den linken oberen Eckpunkt die Koordinaten
  5177.                          (10/5). Als Hotkeys sind "L", "B", "S" und "E" durch das
  5178.                          vorangestellte "^" definiert. Die einzelnen Menüpunkte werden
  5179.                          durch ein Semikolon ";" getrennt. Im Menü ist beim Start die
  5180.                          oberste Zeile mit " Laden" vollständig hell unterlegt. In den
  5181.                          folgenden Zeilen sind es die Buchstaben "B", "S" und "E".
  5182.                          Durch Drücken der RETURN-Taste oder des "L"'s erhält c
  5183.                          den Wert "L".
  5184.  
  5185. Auf dem Bildschirm erscheint das folgende Menü :
  5186.  
  5187.        ╔════════════╗
  5188.        ║ Laden      ║    Diese Zeile ist hell unterlegt.
  5189.        ║ Bearbeiten ║    "B" ist hell unterlegt.
  5190.        ║ Speichern  ║    "S" ist hell unterlegt.
  5191.        ║ Ende       ║    "E" ist hell unterlegt.
  5192.        ╚══════CR/ESC╝
  5193.  
  5194. Jetzt wird die Variable c ausgewertet und es werden die einzelnen Prozeduren je
  5195. nach Inhalt von c aufgerufen.
  5196.  
  5197.        CASE c OF
  5198.          "L" : Laden;
  5199.          "B" : Bearbeiten;
  5200.          "S" : Speichern;
  5201.        END;
  5202.      UNTIL c IN ["E", ESC];              "E" oder ESC-Taste
  5203.  
  5204.  
  5205. MitCursor
  5206.  
  5207. In ITG-PASCAL ist der Cursor normalerweise nur in READ-Anweisungen sichtbar.
  5208. Wenn man erreichen will, daß der Cursor auch sonst sichtbar ist, muß man ihn
  5209. durch MitCursor einschalten.
  5210. #FF
  5211. Startvorgabe eines Programms ist ohne Cursor.
  5212.  
  5213.  Deklaration :
  5214.    PROCEDURE MitCursor;
  5215.  
  5216.  Beispiel :
  5217.    MitCursor;                                            Cursor einschalten
  5218.    Write("Geben Sie einen Buchstaben ein : ");   Cursor blinkt hinter ": "
  5219.    c := ReadKey;                                 Zeichen über die Tastatur
  5220.                                                          einlesen
  5221.    OhneCursor;                                           Cursor ausschalten
  5222.    Write("Geben Sie einen Buchstaben ein : ");   Cursor blinkt nicht hinter ": "
  5223.    c := ReadKey;                                 Zeichen über die Tastatur
  5224.                                                          einlesen
  5225.  
  5226.  
  5227. MitProtokoll
  5228.  
  5229. ITG-PASCAL protokolliert alle Textausgaben mit Write- und Read-Anweisungen in
  5230. einem zweiten Editorfenster mit, sofern genügend Speicherplatz zur Verfügung
  5231. steht. Wenn dieses Protokoll zwischendurch durch OhneProtokoll abgeschaltet
  5232. wurde, kann es durch MitProtokoll wieder eingeschaltet werden.
  5233. Startvorgabe eines Programms ist mit Protokoll.
  5234.  
  5235.  Deklaration :
  5236.    PROCEDURE MitProtokoll;
  5237.  
  5238.  Beispiel :
  5239.    OhneProtokoll;
  5240.    WriteLn("Dieser Text wird nicht im zweiten Editorfenster mitprotokolliert.");
  5241.    MitProtokoll;
  5242.    WriteLn("Dieser Text wird im zweiten Editorfenster mitprotokolliert.");
  5243.  
  5244.  
  5245. NeueZufallsZahlenFolge
  5246.  
  5247. NeueZufallsZahlenFolge erzeugt den Anfang einer neuer Folge von Zufallszahlen.
  5248.  
  5249.  Deklaration :
  5250.    PROCEDURE NeueZufallsZahlenFolge;
  5251.  
  5252.  Beispiel :
  5253.    NeueZufallsZahlenFolge;               Anfang einer neuen Folge erzeugen
  5254.    Write(GanzeZufallsZahl(100));         Zufallszahl zwischen 0 und 99 drucken
  5255.  
  5256.  
  5257. ÖffneAusgabeDatei
  5258.  
  5259. Bevor die Ausgabe, die mit Write / WriteLn normalerweise auf den Bildschirm
  5260. erfolgt, mit AusgabeAufDiskette auf die Diskette / Festplatte umgelenkt wird,
  5261. muß eine Ausgabedatei mit ÖffneAusgabeDatei(DateiName) geöffnet werden!
  5262.  
  5263.  Deklaration :
  5264.    PROCEDURE ÖffneAusgabeDatei(DateiName : STRING);
  5265.  
  5266.  Beispiel :
  5267.    ÖffneAusgabeDatei("AUSGABE.TXT");
  5268. #FF
  5269.    AusgabeAufDiskette;
  5270.    WriteLn("Diese Ausgabe erfolgt auf Diskette!");
  5271.    AusgabeAufBildschirm;
  5272.    WriteLn("Diese Ausgabe erfolgt auf den Bildschirm.");
  5273.    SchließeAusgabeDatei;
  5274.  
  5275.  
  5276. ÖffneEingabeDatei
  5277.  
  5278. Bevor die Eingabe, die normalerweise über die Tastatur erfolgt, mit
  5279. EingabeVonDiskette auf die Diskette / Fest-platte umgelenkt werden kann, muß
  5280. mit ÖffneEingabeDatei zum Lesen deklariert werden.
  5281.  
  5282.  Deklaration :
  5283.    PROCEDURE ÖffneEingabeDatei(DateiName : STRING);
  5284.  
  5285.  Beispiel :
  5286.    VAR
  5287.      s : STRING;
  5288.  BEGIN
  5289.    ÖffneEingabeDatei("EINGABEN.DAT");            Eingabedatei zuweisen
  5290.    EingabeVonDiskette;                           und aktivieren
  5291.    Write("Eingabe von der Diskette:");
  5292.    ReadLn(s);                                    String von der Diskette lesen
  5293.    EingabeVonTastatur;                           Tastatur aktivieren
  5294.    Write("Eingabe von der Tastatur:");
  5295.    ReadLn(s);                                    String über die Tastatur lesen
  5296.    SchließeEingabeDatei;                         Datei wieder schließen
  5297.  END;
  5298.  
  5299.  
  5300. ÖffneFenster
  5301.  
  5302. ÖffneFenster speichert den augenblicklichen Inhalt des Textbildschirmes ab und
  5303. definiert ein neues Textfenster, das mit einem Rahmen versehen werden kann. Der
  5304. linke obere Eckpunkt des Fensters ist für alle jetzt folgenden Textausgaben der
  5305. Punkt P(1/1).
  5306.  
  5307. Jedes Fenster, das geöffnet wurde, muß auch wieder geschlossen werden!
  5308.  
  5309.  Deklaration :
  5310.    PROCEDURE ÖffneFenster(xLinks, yOben, xRechts, yUnten,
  5311.                                   MitOderOhneRahmen : INTEGER);
  5312.  
  5313.  Es muß gelten :         1 <= xLinks < xRechts <= 80
  5314.                          1 <= yOben  < yUnten  <= 25
  5315.                          MitOderOhneRahmen  ε  { MitRahmen, OhneRahmen }
  5316.  
  5317.  Beispiel :
  5318.    GotoXY(10, 10);
  5319.    Write("Dieser Text verschwindet unter dem Fenster");
  5320.    Delay(2000);
  5321.    ÖffneFenster(5, 5, 75, 20, MitRahmen);                alten Bildschirminhalt sichern
  5322.                                                          und Fenster öffnen
  5323.    ClrScr;                                               Fensterinhalt löschen
  5324.    GotoXY(5, 5);                                         relative Koordinaten im Fenster
  5325.    Write("absolute Koordinaten (10/10)");
  5326.    Delay(2000);                                          2 Sekunden warten
  5327. #FF
  5328.    SchließeFenster;                                      alten Bildschirminhalt wieder-
  5329.                                                          herstellen und altes Fenster
  5330.                                                          wieder öffnen
  5331.    Delay(2000);
  5332.  
  5333.  
  5334. OhneCursor
  5335.  
  5336. In ITG-PASCAL ist der Cursor normalerweise nur in READ-Anweisungen sichtbar.
  5337. Wenn man erreichen will, daß der Cursor auch sonst sichtbar ist, muß man ihn
  5338. durch MitCursor einschalten. Durch OhneCursor wird er wieder abgeschaltet.
  5339. Startvorgabe eines Programms ist ohne Cursor.
  5340.  
  5341.  Deklaration :
  5342.    PROCEDURE OhneCursor;
  5343.  
  5344.  Beispiel :
  5345.    MitCursor;                                    Cursor einschalten
  5346.    Write("Geben Sie einen Buchstaben ein : ");   Cursor steht hinter ": "
  5347.    c := ReadKey;                                 Zeichen über die Tastatur
  5348.                                                  einlesen
  5349.    OhneCursor;                                   Cursor ausschalten
  5350.    Write("Geben Sie einen Buchstaben ein : ");   Cursor blinkt nicht hinter ": "
  5351.    c := ReadKey;                                 Zeichen über die Tastatur
  5352.                                                  einlesen
  5353.  
  5354.  
  5355. OhneProtokoll
  5356.  
  5357. ITG-PASCAL protokolliert alle Textausgaben mit Write- und Read-Anweisungen in
  5358. einem zweiten Editorfenster mit, sofern genügend Speicherplatz zur Verfügung
  5359. steht. Dieses Protokoll kann durch OhneProtokoll abgeschaltet werden.
  5360. Startvorgabe eines Programms ist mit Protokoll.
  5361.  
  5362.  Deklaration :
  5363.    PROCEDURE OhneProtokoll;
  5364.  
  5365.  Beispiel :
  5366.    OhneProtokoll;
  5367.    Write("Dieser Text wird nicht im zweiten Editorfenster");
  5368.    WriteLn("mitprotokolliert.");
  5369.    MitProtokoll;
  5370.    Write("Dieser Text wird im zweiten Editorfenster");
  5371.    WriteLn("mitprotokolliert.");
  5372.  
  5373.  
  5374. Pause
  5375.  
  5376. Pause unterbricht ein Programm solange, bis die RETURN-Taste gedrückt wird.
  5377.  
  5378.  Deklaration :
  5379.    PROCEDURE Pause;
  5380.  
  5381.  Beispiel :
  5382.    WriteLn("Weiter mit der RETURN-Taste");
  5383.    Pause;                                        auf Drücken der RETURN-Taste warten
  5384.    WriteLn("Die RETURN-Taste wurde betätigt");
  5385.  
  5386.  
  5387. #FF
  5388. SchließeAusgabeDatei
  5389.  
  5390. Wenn die Ausgabe, die mit Write / WriteLn normalerweise auf den Bildschirm
  5391. erfolgt, mit AusgabeAufDiskette auf die Diskette / Festplatte umgelenkt wurde,
  5392. muß die Ausgabedatei vor dem Programmende mit SchließeAusgabeDatei geschlossen
  5393. werden!
  5394.  
  5395.  Deklaration :
  5396.    PROCEDURE SchließeAusgabeDatei;
  5397.  
  5398.  Beispiel :
  5399.    ÖffneAusgabeDatei("AUSGABE.TXT");
  5400.    AusgabeAufDiskette;
  5401.    WriteLn("Diese Ausgabe erfolgt auf Diskette!");
  5402.    AusgabeAufBildschirm;
  5403.    WriteLn("Diese Ausgabe erfolgt auf den Bildschirm.");
  5404.    SchließeAusgabeDatei;
  5405.  
  5406.  
  5407. SchließeEingabeDatei
  5408.  
  5409. SchließeEingabeDatei schließt die Datei, die mit ÖffneEin-gabeDatei zum Lesen
  5410. von Eingaben anstelle der Tastatur geöffnet wurde.
  5411.  
  5412.  Deklaration :
  5413.    PROCEDURE SchließeEingabeDatei;
  5414.  
  5415.  Beispiel :
  5416.    VAR
  5417.      s : STRING;
  5418.  BEGIN
  5419.    ÖffneEingabeDatei("EINGABEN.DAT");            Eingabedatei zuweisen
  5420.    EingabeVonDiskette;                           und aktivieren
  5421.    Write("Eingabe von der Diskette:");
  5422.    ReadLn(s);                                    String von der Diskette lesen
  5423.    EingabeVonTastatur;                           Tastatur aktivieren
  5424.    Write("Eingabe von der Tastatur:");
  5425.    ReadLn(s);                                    String über die Tastatur lesen
  5426.    SchließeEingabeDatei;                         Datei wieder schließen
  5427.  END;
  5428.  
  5429.  
  5430. SchließeFenster
  5431.  
  5432. SchließeFenster stellt den Inhalt und die Fensterkoordinaten des Textfensters
  5433. wieder her, wie es dem Aufruf der Prozedur ÖffneFenster vorhanden war. Es
  5434. dürfen mehrere Fenster gleichzeitig geöffnet sein. Geschlossen wird immer das
  5435. zuletzt geöffnete Fenster.
  5436.  
  5437. Jedes Fenster, das geöffnet wurde, muß auch wieder geschlossen werden!
  5438.  
  5439.  Deklaration :
  5440.    PROCEDURE SchließeFenster;
  5441.  
  5442.  Beispiel :
  5443.    GotoXY(10, 10);
  5444.    Write("Dieser Text verschwindet unter dem Fenster");
  5445. #FF
  5446.    Delay(2000);
  5447.    ÖffneFenster(5, 5, 75, 20, MitRahmen);                alten Bildschirminhalt sichern
  5448.                                                          und Fenster öffnen
  5449.    ClrScr;                                               Fensterinhalt löschen
  5450.    GotoXY(5, 5);                                         relative Koordinaten im Fenster
  5451.    Write("absolute Koordinaten (10/10)");
  5452.    Delay(2000);                                          2 Sekunden warten
  5453.    SchließeFenster;                                      alten Bildschirminhalt wieder-
  5454.                                                          herstellen und altes Fenster
  5455.                                                          wieder öffnen
  5456.    Delay(2000);
  5457.  
  5458.  
  5459. SchreibPort
  5460.  
  5461. Mit SchreibPort wird ein Wert über einen Port des Computers an die Peripherie
  5462. ausgegeben.
  5463.  
  5464. Achtung : Vor der Benutzung dieser Anweisung sollte man sich aber genau
  5465. informieren, da ein Schreiben in einen falschen Port zu Zerstörungen führen
  5466. kann!
  5467.  
  5468.  Deklaration :
  5469.    PROCEDURE SchreibPort(PortAdresse, Ausgabewert : WORD);
  5470.  
  5471.  Beispiel :
  5472.    SchreibPort(PortAdresse, Ausgabewert);        schreibt den Ausgabewert an die
  5473.                                                  Portadresse
  5474.  
  5475.  
  5476. Ton
  5477.  
  5478. Ton erzeugt einen Ton mit vorgegebener Frequenz und Dauer.
  5479.  
  5480.  Deklaration :
  5481.    PROCEDURE Ton(Frequenz, MilliSekunden : WORD);
  5482.  
  5483.  Beispiel :
  5484.    Ton(440, 1000);       erzeugt für 1000ms (1s) einen Ton der Frequenz 440Hz
  5485.  
  5486.  
  5487. Vertausche
  5488.  
  5489. Vertausche vertauscht die Inhalte zweier Variablen beliebigen Typs außer
  5490. FILE- und TEXT-Variablen gegeneinander.
  5491.  
  5492.  Deklaration :
  5493.    PROCEDURE Vertausche(VAR a, b : VariableBeliebigenTyps);
  5494.  
  5495.  Beispiel :
  5496.    a := "a";                     Wertzuweisungen
  5497.    b := "b";
  5498.    Vertausche(a, b);             jetzt hat a den Inhalt "b" und b den Inhalt "a"
  5499.  
  5500.  
  5501. #FF
  5502. WähleDatei
  5503.  
  5504. WähleDatei(x, y, Maske, Dateiname) öffnet ein Auswahlfenster mit dem linken
  5505. oberen Eckpunkt P(x/y) als Bildschirm-koordinaten, in dem alle Verzeichnisse
  5506. und alle Dateien, die der Maske entsprechen, angezeigt werden. Mit den
  5507. Cursortasten wird ein Verzeichnis oder ein Dateiname angewählt. Im Falle eines
  5508. Verzeichnisses wird in dieses vorübergehend gewechselt, im Falle eines
  5509. Dateinamens wird dieser an das ausführende Programm übergeben. Mit der
  5510. ESC-Taste kann die Wahl abgebrochen werden. Der Dateiname ist dann leer. Der
  5511. Bildschirm wird nach Verlassen des Menüs automatisch restauriert.
  5512.  
  5513.  Deklaration :
  5514.    PROCEDURE WähleDatei(x, y : INTEGER;
  5515.                                  Maske : STRING;
  5516.                                  VAR Dateiname : STRING);
  5517.  
  5518.  Beispiel :
  5519.    VAR
  5520.      Dateiname : STRING;
  5521.  BEGIN
  5522.    WähleDatei(10, 3, "*.PAS", Dateiname);               alle PASCAL-Programme anzeigen
  5523.    IF Dateiname <> "" THEN BEGIN
  5524.      DatenVonDiskette(Dateiname, Variable);             Inhalt der Datei an
  5525.    END;                                                 Variable übergeben
  5526.  END;
  5527.  
  5528. #FF
  5529. Debugger
  5530.  
  5531.  DebugEin        DebugAus        BreakPoint      EinzelschrittEin        EinzelschrittAus
  5532.  
  5533.  
  5534. DebugEin
  5535.  
  5536. Ab diesem Zeitpunkt werden alle durch ein in der Deklaration vorangestelltes
  5537. "!" markierten Variablen mit ihrem Wert und der Quelltextzeile angezeigt, bis
  5538. die Anweisung DebugAus ausgeführt wird.
  5539.  
  5540. Zusätzlich zur Anzeige auf dem Bildschirm werden alle Informationen in ein
  5541. zweites Editor-Fenster geschrieben, sofern genügend Speicherplatz zur Verfügung
  5542. steht, und können nach Beendigung des Programms unter "Editor /
  5543. Programm-/Fehler-Ausgabe ansehen" betrachtet und gegebenenfalls auch mit
  5544. "Blockschreiben" auf Diskette gespeichert werden.
  5545.  
  5546.  2 Beispiele :
  5547.  
  5548.  1)
  5549.    PROCEDURE p(!a, b : INTEGER);         nur die Variable a ist markiert, b nicht
  5550.      VAR
  5551.        c, !d : REAL;                     nur die Variable d ist markiert, c nicht
  5552.    BEGIN
  5553.      c := a^b;                           keine Ausgabe der Variablen
  5554.      DebugEin;                           Quelltextausgabe und Ausgabe der
  5555.                                          Variablen wird ab hier ausgeführt
  5556.      d := c / a;
  5557.      c := d * c;
  5558.      DebugAus;                           Ausgabe wird nicht mehr durchgeführt
  5559.      b := a;
  5560.    END;
  5561.  
  5562.  2)
  5563.    PROGRAM Fakultät;
  5564.      VAR
  5565.        !n, !m : INTEGER;
  5566.      FUNCTION Fak(!n : GanzeZahl) : INTEGER;
  5567.        VAR
  5568.          !f : INTEGER;                   f wird hier benutzt, weil Funktionsergebnisse
  5569.                                          sonst nicht angezeigt werden.
  5570.      BEGIN
  5571.        IF n > 1 THEN BEGIN
  5572.          f := n * Fak(n-1);
  5573.        END
  5574.        ELSE BEGIN
  5575.          f := 1;
  5576.        END;
  5577.        Fak := f;
  5578.      END;
  5579.    BEGIN
  5580.      n := 3;
  5581.      Write('Berechnung von n!  n = ');
  5582.      ReadLn(n);
  5583.      DebugEin;                           Nur während der rekursiven Funktionsaufrufe
  5584.                                          werden die Inhalte der Variablen angezeigt.
  5585.                                          Dabei ist die Rekursionsstufe zu erkennen, wie
  5586. #FF
  5587.                                          im folgenden Beispiel für 3! gezeigt wird.
  5588.      m := Fak(n);
  5589.      DebugAus;
  5590.      WriteLn(n, '!=', m);
  5591.    END.
  5592.  
  5593.  Ausgabe auf dem Bildschirm :
  5594.  
  5595.    Berechnung von n!  n = 3
  5596.                                          hier normale Textausgabe mit "WRITE"
  5597.        IF n > 1 THEN BEGIN
  5598.    10> F = 0 N = 3 | M = 0 N = 3
  5599.                      ^ Globale Variablen stehen immer am Ende der Liste nach dem
  5600.                        letzten "|".
  5601.        ^ Lokale Variablen führen die Liste vor dem letzten "|" an. Die Variablen der
  5602.          gerade aktiven Prozedur/Funktion stehen ganz links, danach folgen die
  5603.          Variablen der Prozedur/Funktion, aus der die gerade aktive aufgerufen wurde
  5604.          usw. bis zu den globalen Variablen. Hier stehen in diesem Fall die Variablen
  5605.          des ersten Aufrufs der Funktion "Fak".
  5606.  
  5607.        IF n > 1 THEN BEGIN
  5608.    10> F = 0 N = 2 | F = 0 N = 3 | M = 0 N = 3
  5609.                                    ^ globale Variablen
  5610.                      ^ erster Aufruf von "Fak"
  5611.        ^ zweiter Aufruf von "Fak"
  5612.        f := 1;
  5613.    14> F = 1 N = 1 | F = 0 N = 2 | F = 0 N = 3 | M = 0 N = 3
  5614.                                                  ^global
  5615.                                    ^ erster Aufruf von "Fak"
  5616.                      ^ zweiter Aufruf von "Fak"
  5617.        ^ dritter Aufruf von "Fak"
  5618.          Jetzt ist n = 1. Damit werden die rekursiven Aufrufe beendet und es geht
  5619.          rückwärts, wie in den nächsten Zeilen zu sehen ist.
  5620.        Fak := f;
  5621.    16> F = 1 N = 1 | F = 0 N = 2 | F = 0 N = 3 | M = 0 N = 3
  5622.        f := n * Fak(n-1);
  5623.    11> F = 2 N = 2 | F = 0 N = 3 | M = 0 N = 3
  5624.        Fak := f;
  5625.    16> F = 2 N = 2 | F = 0 N = 3 | M = 0 N = 3
  5626.        f := n * Fak(n-1);
  5627.    11> F = 6 N = 3 | M = 0 N = 3
  5628.        Fak := f;
  5629.    16> F = 6 N = 3 | M = 0 N = 3
  5630.        m := Fak(n);
  5631.    24> M = 6 N = 3
  5632.        3!=6
  5633.  
  5634.  
  5635. DebugAus
  5636.  
  5637. Schaltet die Ausgabe der Inhalte der markierten Variablen und der Quelltextzeile aus.
  5638.  
  5639. Eine ausführlichere Beschreibung und ein Beispiel sind unter DebugEin zu finden.
  5640.  
  5641.  
  5642. #FF
  5643. BreakPoint
  5644.  
  5645. An dieser Stelle wird ein laufendes Programm unterbrochen und es erscheint
  5646. folgendes Menü am Bildschirmrand:
  5647.  
  5648.    ╔═════BreakPoint════╗
  5649.    ║ Run               ║
  5650.    ║ Variablen zeigen  ║
  5651.    ║ weitere Variablen ║
  5652.    ║ Variablen ändern  ║
  5653.    ║ Menü-Lage         ║
  5654.    ║ Programm-Abbruch  ║
  5655.    ╚════════════CR/ESC═╝
  5656.  
  5657. Die Bedeutung der einzelnen Menüpunkte:
  5658.  
  5659. 1) Run:
  5660. Das Programm wird fortgesetzt, bis es beendet ist oder bis es wieder auf die
  5661. Anweisung BreakPoint trifft.
  5662.  
  5663. 2) Variablen zeigen:
  5664. Der Inhalt der durch "!" markierten Variablen und der im nächsten Punkt weitere
  5665. Variablen markierten wird angezeigt, wie unter DebugEin beschrieben.
  5666.  
  5667. 3) weitere Variablen:
  5668. Zusätzlich zu den in der Deklaration mit "!" markierten Variablen können
  5669. weitere in einem Auswahlfenster mit ENTER markiert werden. Ebenso ist ein
  5670. Löschen der Markierung mit ENTER möglich. Markierte Variablen sind durch ein
  5671. vorangestelltes "√" gekennzeichnet. Die Reihenfolge der Variablen im
  5672. Auswahlfenster ist unter Variablen ändern beschrieben.
  5673.  
  5674. 4) Variablen ändern:
  5675. Wenn man testen möchte, wie das Programm mit anderen Variablenwerten
  5676. weiterläuft, kann sich in einem Auswahlfenster Variablen mit ENTER wählen,
  5677. deren Inhalt anschließend in einem Editorfenster geändert werden kann. Lokale
  5678. Variablen erscheinen oben im Auswahlfenster, globale Variablen zuletzt. Dabei
  5679. wird dieselbe Reihenfolge wie unter DebugEin beschrieben eingehalten, es sind
  5680. nur links mit oben und rechts mit unten zu vertauschen.
  5681.  
  5682. 5) Menü-Lage:
  5683. Wenn dieses Menü Informationen verdeckt, kann es in eine andere Bildschirmecke
  5684. verschoben werden. Die Lage des Menüs wechselt dabei zyklisch zwischen den Positionen
  5685.  links oben,
  5686.  rechts oben,
  5687.  links unten und
  5688.  rechts unten.
  5689.  
  5690. 6) Programm-Abbruch:
  5691. Das Programm wird sofort beendet. Dabei erfolgt ein Post-Mortem-Dump.
  5692.  
  5693.  
  5694. EinzelschrittEin
  5695.  
  5696. EinzelschrittEin bewirkt, daß jeweils nur eine Programmzeile abgearbeitet wird.
  5697. Anschließend wartet das Programm auf einen Tastendruck, dann wird die nächste
  5698. Programmzeile abgearbeitet.
  5699.  
  5700. #FF
  5701.  Beispiel :
  5702.    DebugEin;                             Inhalt der markierten Variablen wird angezeigt
  5703.    EinzelschrittEin;                     warte jeweils nach Ausführung einer Programm-
  5704.                                          zeile auf einen Tastendruck
  5705.    FOR n := 1 TO 100 DO BEGIN
  5706.      m := n^2;
  5707.    END;
  5708.    EinzelschrittAus;                     setze die Programmausführung ohne Warten auf
  5709.                                          Tastendruck fort
  5710.    DebugAus;                             zeige die Variableninhalte nicht mehr an
  5711.  
  5712.  
  5713. EinzelschrittAus
  5714.  
  5715. EinzelschrittAus bewirkt, daß nach Ausführung einer Programmzeile nicht mehr
  5716. auf einen Tastendruck gewartet wird.
  5717.  
  5718.  Beispiel:
  5719.    DebugEin;                             Inhalt der markierten Variablen wird angezeigt
  5720.    EinzelschrittEin;                     warte jeweils nach Ausführung einer
  5721.                                          Programmzeile auf einen Tastendruck
  5722.    FOR n := 1 TO 100 DO BEGIN
  5723.      m := n^2;
  5724.    END;
  5725.    EinzelschrittAus;                     setze die Programmausführung ohne Warten auf
  5726.                                          Tastendruck fort
  5727.    DebugAus;                             zeige die Variableninhalte nicht mehr an
  5728.  
  5729.  
  5730. #FF
  5731. parallele Prozesse
  5732.  
  5733. Mit parallelen Prozessen kann Einblick genommen werden in die
  5734. Programmausführung von Multitaskingsystemen, auf denen mehrere Programme quasi
  5735. gleichzeitig von einem Prozessor abgearbeitet werden, und
  5736. Mehrprozessorsystemen, bei denen mehrere Prozessoren gleichzeitig an einem
  5737. Programm arbeiten. Dabei ist die Prozeßumschaltung und die
  5738. Prozeßsynchronisation von Bedeutung.
  5739.  
  5740.  NächsterProzeß  NeuerProzeß             ProzeßEnde              SendeSignal
  5741.  StarteProzesse  Unterbrechung           WarteAufSignal
  5742.  
  5743.  
  5744. NächsterProzeß
  5745.  
  5746. NächsterProzeß(ProzeßIndex) dient dazu, die weitere Pro-grammausführung einem
  5747. bestimmten Prozeß zu übergeben.
  5748.  
  5749.  Deklaration :
  5750.    PROCEDURE NächsterProzeß(ProzeßIndex : INTEGER);
  5751.  
  5752.  Beispiel:
  5753.    PROCEDURE P1;
  5754.    BEGIN
  5755.      WriteLn("1.: P1");
  5756.      NächsterProzeß(2);          an P2 übergeben
  5757.      WriteLn("5.: P1");
  5758.      ProzeßEnde(1);                      P1 ordnungsgemäß beenden
  5759.    END;
  5760.  
  5761.    PROCEDURE P2;
  5762.    BEGIN
  5763.      WriteLn("2.: P2");
  5764.      NächsterProzeß(3);          an P3 übergeben
  5765.      WriteLn("4.: P2");
  5766.      NächsterProzeß(1);          an P1 übergeben
  5767.      ProzeßEnde(2);                      P2 ordnungsgemäß beenden
  5768.    END;
  5769.  
  5770.    PROCEDURE P3;
  5771.    BEGIN
  5772.      WriteLn("3.: P3");
  5773.      NächsterProzeß(2);          an P2 übergeben
  5774.      ProzeßEnde(3);                      P3 ordnungsgemäß beenden
  5775.    END;
  5776.  
  5777.  BEGIN
  5778.    NeuerProzeß(1, 100, 1, P1);           Prozesse definieren, Index festlegen,
  5779.    NeuerProzeß(2, 100, 1, P2);           Stackgröße und Priorität festlegen,
  5780.    NeuerProzeß(3, 100, 1, P3);           Prozeßprozedur festlegen
  5781.    StarteProzesse;                       ersten Prozeß starten
  5782.  END.
  5783.  
  5784.  Auf dem Bildschirm erscheint:
  5785.  
  5786.          1.:P1
  5787.          2.:P2
  5788. #FF
  5789.          3.:P3
  5790.          4.:P2
  5791.          5.:P1
  5792.  
  5793.  
  5794. NeuerProzeß
  5795.  
  5796. NeuerProzeß reiht eine parameterlose Prozedur in die Liste der Prozeduren ein,
  5797. zwischen denen wie bei einem Multitaskingsystem hin- und hergeschaltet werden
  5798. kann.
  5799.  
  5800.  Deklaration :
  5801.    PROCEDURE NeuerProzeß(Index, StackGröße, Priorität : INTEGER;
  5802.                                  Prozeß : parameterlose Prozedur);
  5803.  
  5804.  Beispiel:
  5805.    PROCEDURE P1;
  5806.    BEGIN
  5807.      WriteLn("1.: P1");
  5808.      NächsterProzeß(2);                  an P2 übergeben
  5809.      WriteLn("3.: P1");
  5810.      ProzeßEnde(1);                      P1 ordnungsgemäß beenden
  5811.    END;
  5812.  
  5813.    PROCEDURE P2;
  5814.    BEGIN
  5815.      WriteLn("2.: P2");
  5816.      NächsterProzeß(1);                  an P1 übergeben
  5817.      ProzeßEnde(2);                      P2 ordnungsgemäß beenden
  5818.    END;
  5819.  
  5820.  BEGIN
  5821.    NeuerProzeß(1, 100, 1, P1);           Prozesse definieren, Index festlegen,
  5822.    NeuerProzeß(2, 100, 1, P2);           Stackgröße und Priorität festlegen,
  5823.    StarteProzesse;                       Prozeßprozedur festlegen
  5824.  END.                                    ersten Prozeß starten
  5825.  
  5826.  
  5827. ProzeßEnde
  5828.  
  5829. ProzeßEnde sorgt dafür, daß ein Prozeß ordnungsgemäß beendet wird. Jeder Prozeß
  5830. muß entweder aus einer Endlosschleife bestehen oder durch die Anweisung
  5831. ProzeßEnde vor dem Erreichen der END-Anweisung der Prozeßprozedur beendet
  5832. werden.
  5833.  
  5834.  Deklaration :
  5835.    PROCEDURE ProzeßEnde(ProzeßIndex : INTEGER);
  5836.  
  5837.  Beispiel:
  5838.    ProzeßEnde(1);    beendet den Prozeß mit dem Index 1
  5839.  
  5840.  
  5841. SendeSignal
  5842.  
  5843. Durch SendeSignal(SignalVar) kann einem anderen Prozeß mitgeteilt werden, daß
  5844. die Bearbeitung bis zu einem bestimmten Punkt vorangeschritten ist.
  5845.  
  5846.  Deklaration :
  5847.    PROCEDURE SendeSignal(VAR SignalVar : SIGNAL);
  5848.  
  5849. #FF
  5850.  Beispiel:
  5851.    VAR
  5852.      P1Fertig, P2Fertig : SIGNAL;
  5853.      x, y : REAL;
  5854.  
  5855.    PROCEDURE P1;
  5856.    BEGIN
  5857.      x := 0.1;
  5858.      WHILE x < 10 DO BEGIN
  5859.        SendeSignal(P1Fertig);            x-Wert fertig, P2 kann rechnen
  5860.        WarteAufSignal(P2Fertig);         warten, bis P2 mit Rechnung fertig
  5861.        x := x + y;                       und gültiger y-Wert vorhanden
  5862.      END;
  5863.      ProzeßEnde(1);                      Prozesse beenden
  5864.      ProzeßEnde(2);
  5865.    END;
  5866.  
  5867.    PROCEDURE P2;
  5868.    BEGIN
  5869.      y := 0.3;
  5870.      WHILE TRUE DO BEGIN
  5871.        WarteAufSignal(P1Fertig);         auf gültigen x-Wert warten
  5872.        y := y + x;
  5873.        SendeSignal(P2Fertig);            P1 kann auf y-Wert zugreifen
  5874.      END;
  5875.    END;
  5876.  
  5877.  BEGIN
  5878.    NeuerProzeß(1, 100, 1, P1);           Prozesse initialisieren
  5879.    NeuerProzeß(2, 100, 1, P2);
  5880.    StarteProzesse;
  5881.  END.
  5882.  
  5883.  
  5884. StarteProzesse
  5885.  
  5886. StarteProzesse sucht beginnend beim Prozeßindex 1 den Prozeß mit der höchsten
  5887. Priorität und startet ihn.
  5888.  
  5889.  Deklaration :
  5890.    PROCEDURE StarteProzesse;
  5891.  
  5892.  Beispiel:
  5893.    PROCEDURE P1;
  5894.    BEGIN
  5895.      WriteLn("1.: P1");
  5896.      NächsterProzeß(2);                  an P2 übergeben
  5897.      WriteLn("3.: P1");
  5898.      ProzeßEnde(1);                      P1 ordnungsgemäß beenden
  5899.    END;
  5900.  
  5901.    PROCEDURE P2;
  5902.    BEGIN
  5903.      WriteLn("2.: P2");
  5904.      NächsterProzeß(1);                  an P1 übergeben
  5905.      ProzeßEnde(2);                      P2 ordnungsgemäß beenden
  5906.    END;
  5907.  
  5908. #FF
  5909.  BEGIN
  5910.    NeuerProzeß(1, 100, 1, P1);           Prozesse definieren, Index festlegen,
  5911.    NeuerProzeß(2, 100, 1, P2);           Stackgröße und Priorität festlegen,
  5912.    StarteProzesse;                       Prozeßprozedur festlegen
  5913.  END.                                    ersten Prozeß starten
  5914.  
  5915.  
  5916. StarteZeitscheibenVerfahren
  5917.  
  5918. StarteZeitscheibenVerfahren startet alle initialisierten Prozesse und sorgt
  5919. dafür, daß nach der Ausführung einer vorgegebenen Anzahl von Opcodes der aktive
  5920. Prozeß gewechselt wird.
  5921.  
  5922. Achtung : Ein aktiver Prozeß sollte die Kontrolle dann nicht mit
  5923. "Unterbrechung" an den nächsten Prozeß abgeben.
  5924.  
  5925.  Deklaration :
  5926.    PROCEDURE StarteZeitscheibenVerfahren(AnzahlDerOpcodes : INTEGER);
  5927.  
  5928.  Beispiel:
  5929.    PROCEDURE P1;
  5930.      VAR
  5931.        n : INTEGER;
  5932.    BEGIN
  5933.      FOR n := 1 TO 1000 DO BEGIN
  5934.        Write(n:5);
  5935.      END;
  5936.      HALT;
  5937.    END;
  5938.  
  5939.    PROCEDURE P2;
  5940.      VAR
  5941.        n : INTEGER;
  5942.    BEGIN
  5943.      FOR n := 2000 TO 3000 DO BEGIN
  5944.        Write(n:5);
  5945.      END;
  5946.      HALT;
  5947.    END;
  5948.  
  5949.  BEGIN
  5950.    NeuerProzeß(1, 100, 1, P1);           Prozesse definieren, Index festlegen,
  5951.    NeuerProzeß(2, 100, 1, P2);           Stackgröße und Priorität
  5952.    StarteZeitscheibenVerfahren(10);      festlegen, Prozeßprozedur festlegen und ersten
  5953.  END.                                    Prozeß starten. Nach der Ausführung von 10
  5954.                                          Opcodes erfolgt eine Umschaltung.
  5955.  
  5956.  
  5957. Unterbrechung
  5958.  
  5959. Unterbrechung unterbricht die Ausführung eines Prozesses und sucht den aktiven
  5960. Prozeß in der Warteliste, der zur Zeit die höchste Priorität hat. Dieser Prozeß
  5961. wird fortgesetzt. Seine Priorität wird dabei um eins verringert, damit er bei
  5962. der nächsten Unterbrechung nicht unbedingt wieder der Prozeß mit der höchsten
  5963. Priorität ist.
  5964.  
  5965.  Deklaration :
  5966.    PROCEDURE Unterbrechung;
  5967.  
  5968. #FF
  5969.  Beispiel:
  5970.    PROCEDURE P1;
  5971.    VAR
  5972.      n : INTEGER;
  5973.    BEGIN
  5974.      FOR n := 1 TO 1000 DO BEGIN
  5975.        GotoXY(10, 3);
  5976.        Write(n:4);
  5977.        Unterbrechung;                    unterbrechen und auf den Prozeß mit der
  5978.      END;                                derzeit höchsten Priorität umschalten
  5979.      HALT;
  5980.    END;
  5981.  
  5982.    PROCEDURE P2;
  5983.      VAR
  5984.        n : INTEGER;
  5985.    BEGIN
  5986.      FOR n := 1 TO 1000 DO BEGIN
  5987.        GotoXY(20, 3);
  5988.        Write(n:4);
  5989.        Unterbrechung;                    unterbrechen und auf den Prozeß mit der
  5990.      END;                                derzeit höchsten Priorität umschalten
  5991.      HALT;
  5992.    END;
  5993.  
  5994.        BEGIN
  5995.          NeuerProzeß(1, 100, 3, P1);             da die Priorität von P1 dreimal so
  5996.          NeuerProzeß(2, 100, 1, P2);             hoch ist wie die von P2, wird P1
  5997.          StarteProzesse;                         dreimal so oft aufgerufen wie P2.
  5998.        END.                                      Zählstände am Ende : P1:1000, P2:333
  5999.  
  6000.  
  6001. WarteAufSignal
  6002.  
  6003. Durch WarteAufSignal(SignalVar) kann solange gewartet werden, bis die
  6004. Bearbeitung in einem anderen Prozeß bis zu einem bestimmten Punkt
  6005. vorangeschritten ist.
  6006.  
  6007.  Deklaration :
  6008.    PROCEDURE WarteAufSignal(VAR SignalVar : SIGNAL);
  6009.  
  6010.  Beispiel:
  6011.    VAR
  6012.      P1Fertig, P2Fertig : SIGNAL;
  6013.      x, y : REAL;
  6014.  
  6015.    PROCEDURE P1;
  6016.    BEGIN
  6017.      x := 0.1;
  6018.      WHILE x < 10 DO BEGIN
  6019.        SendeSignal(P1Fertig);            x-Wert fertig, P2 kann rechnen
  6020.        WarteAufSignal(P2Fertig);         warten, bis P2 mit Rechnung fertig
  6021.        x := x + y;                       und gültiger y-Wert vorhanden
  6022.      END;
  6023.      ProzeßEnde(1);                      Prozesse beenden
  6024.      ProzeßEnde(2);
  6025.    END;
  6026.  
  6027. #FF
  6028.    PROCEDURE P2;
  6029.    BEGIN
  6030.      y := 0.3;
  6031.      WHILE TRUE DO BEGIN
  6032.        WarteAufSignal(P1Fertig);         auf gültigen x-Wert warten
  6033.        y := y + x;
  6034.        SendeSignal(P2Fertig);            P1 kann auf y-Wert zugreifen
  6035.      END;
  6036.    END;
  6037.  
  6038.  BEGIN
  6039.    NeuerProzeß(1, 100, 1, P1);           Prozesse initialisieren
  6040.    NeuerProzeß(2, 100, 1, P2);
  6041.    StarteProzesse;
  6042.  END.
  6043.  
  6044.  
  6045. #FF
  6046. Fischertechnik / LEGO
  6047.  
  6048. Die hier aufgeführten Konstanten, Prozeduren und Funktionen stehen nur dann zur
  6049. Verfügung, wenn ITG-PASCAL aus dem mitgelieferten Rahmenprogramm zur
  6050. Ansteuerung von Interfaces heraus gestartet wurde.
  6051.  
  6052. Achtung : Wenn ITG-PASCAL nicht aus dem Rahmenprogramm heraus gestartet wurde,
  6053. kommt es bei Verwendung der hier aufgeführten Konstanten, Prozeduren und
  6054. Funktionen zu einer Fehlermeldung beim Compilieren, obwohl ein Programm unter
  6055. Umständen schon fehlerfrei lief!
  6056.  
  6057.  Aus                     Ein                     LinksDrehen             RechtsDrehen
  6058.  Lampe                   Motor                   Warte                   Zustand
  6059.  
  6060.  
  6061. Aus
  6062.  
  6063. Die Konstante Aus dient zum Ausschalten von Lampen und Motoren. Ihr Wert ist 0.
  6064.  
  6065.  
  6066. Ein
  6067.  
  6068. Die Konstante Ein dient zum Einschalten von Lampen. Ihr Wert ist 1.
  6069.  
  6070.  
  6071. LinksDrehen
  6072.  
  6073. Die Konstanten LinksDrehen dient dazu, einen Motor gegen den Uhrzeigersinn
  6074. drehen zu lassen. Ihr Wert ist 1.
  6075.  
  6076.  
  6077. RechtsDrehen
  6078.  
  6079. Die Konstanten RechtsDrehen dient dazu, einen Motor im den Uhrzeigersinn drehen
  6080. zu lassen. Ihr Wert ist 2.
  6081.  
  6082.  
  6083. Lampe
  6084.  
  6085. Mit der Prozedur Lampe(Nr, Ein) wird die Spannung am Ausgang mit dem Index Nr
  6086. eingeschaltet.
  6087.  
  6088.  Deklaration :
  6089.    PROCEDURE Lampe(Nr, AusOderEin : WORD);
  6090.  
  6091.  Beispiel :
  6092.    Lampe(3, Ein);                Lampe 3 einschalten und
  6093.    Warte(1.5);                   1,5 Sekunden lang brennen lassen
  6094.    Lampe(3, Aus);                dann wieder ausschalten
  6095.  
  6096.  
  6097. Motor
  6098.  
  6099. Mit der Prozedur Motor(Nr, Drehrichtung) wird die Spannung am Motor-Ausgang mit
  6100. dem Index Nr so eingeschaltet, daß der Motor sich in die angegebene Richtung
  6101. dreht.
  6102.  
  6103. #FF
  6104.  Deklaration :
  6105.    PROCEDURE Motor(Nr, Drehrichtung : WORD);
  6106.  
  6107.  Beispiel :
  6108.    Motor(3, LinksDrehen);                Motor 3 einschalten und 1,5 Sekunden
  6109.    Warte(1.5);                           nach links drehen lassen
  6110.    Motor(3, Aus);                        dann wieder ausschalten
  6111.  
  6112.  
  6113. Warte
  6114.  
  6115. Mit der Prozedur Warte(Sekunden) wird die automatische Abschaltung beim
  6116. Fischer-Interface unterbunden, die sonst nach 0,5 Sekunden eintritt.
  6117.  
  6118.  Deklaration :
  6119.    PROCEDURE Warte(Sekunden : REAL);
  6120.  
  6121.  Beispiel :
  6122.    Lampe(3, Ein);                Lampe 3 einschalten und
  6123.    Warte(1.5);                   1,5 Sekunden lang brennen lassen
  6124.    Lampe(3, Aus);                dann wieder ausschalten
  6125.  
  6126.  
  6127. Zustand
  6128.  
  6129. Die Funktion Zustand(Nr) ergibt 1, wenn am Digitaleingang mit dem Index Nr eine
  6130. Spannung anliegt. Sonst ergibt sie 0.
  6131.  
  6132.  Deklaration :
  6133.    FUNCTION Zustand(DigitalEingang : WORD) : WORD;
  6134.  
  6135.  Beispiel :
  6136.    IF Zustand(2) = 1 THEN BEGIN
  6137.      WriteLn("Am Digitaleingang 2 liegt Spannung an.");
  6138.    END
  6139.    ELSE BEGIN
  6140.      WriteLn("Am Digitaleingang 2 liegt keine Spannung an.");
  6141.    END;
  6142.  
  6143.  
  6144. #FF
  6145.  
  6146. Inhaltsverzeichnis
  6147.  
  6148. Lizenzbedingungen                                      1
  6149. Einleitung                                             2
  6150. Installation                                           5
  6151. Einführung                                             7
  6152. Igel-Grafik im Direktmodus                             7
  6153. Einführung einer Schleife                              8
  6154. Einführung von parameterlosen Prozeduren              11
  6155. Einführung von Prozeduren mit einem Parameter         13
  6156. Einführung von Prozeduren mit mehreren Parametern     14
  6157. Benutzung des Debuggers                               16
  6158. Die Bediener-Oberfläche                               18
  6159. 1. FILE                                               18
  6160. 1.1 neues Programm                                    18
  6161. 1.2 Datei laden                                       18
  6162. 1.3 Datei speichern                                   19
  6163. 1.4 Datei drucken                                     19
  6164. 1.5 BAK-Dateien löschen                               19
  6165. 1.6 Inhaltsverzeichnis                                20
  6166. 1.7 Pfad wechseln                                     20
  6167. 1.8 Laufwerk wechseln                                 20
  6168. 1.9 Makros laden                                      20
  6169. 1.10 Makros speichern                                 20
  6170. 1.11 OS-Shell                                         21
  6171. 1.12 Ende                                             21
  6172. 2. EDITOR                                             22
  6173. 2.1 Programm-Text bearbeiten                          22
  6174. 2.1.1 Editor-Befehle                                  22
  6175. 2.1.2 Hilfesystem                                     23
  6176. 2.1.3 Makro-Recorder                                  24
  6177. 2.2 Programm-/ Fehler-Ausgabe ansehen                 25
  6178. 2.3 Programm-Text formatieren                         25
  6179. 2.4 automatische Variablen-Deklaration                25
  6180. 3. RUN                                                26
  6181. 3.1 Programm compileren                               26
  6182. 3.2 Programm starten                                  26
  6183. 3.3 Direkt-Modus (Text)                               26
  6184. 3.4 Igel-Grafik (neues Programm)                      27
  6185. 3.5 Igel-Grafik fortsetzen                            27
  6186. 3.6 PRG-File erzeugen                                 28
  6187. 3.7 PRG-File starten                                  28
  6188. 4. DEBUG                                              29
  6189. 4.1 Einzelschrittmodus                                29
  6190. Interna                                               30
  6191. Koordinatensysteme                                    30
  6192. Debugger                                              30
  6193. Synonyme                                              31
  6194. Datenstrukturen                                       31
  6195. Erweiterungen                                         32
  6196. Hardware-Voraussetzungen                              32
  6197. Tabellen-Größen                                       33
  6198. Der Befehlsumfang                                     34
  6199. Operatoren                                            34
  6200. Standard-Bezeichner                                   34
  6201. Konstanten                                            36
  6202. Typen                                                 42
  6203. Igel-Grafik                                           45
  6204. Standard-Grafik                                       50
  6205. ITG-Pascal-Grafik                                     53
  6206. mathematische Funktionen                              65
  6207. Standard-Funktionen                                   70
  6208. ITG-Pascal-Funktionen                                 77
  6209. Standard-Prozeduren                                   80
  6210. WRITE                                                 90
  6211. ITG-Pascal-Prozeduren                                 93
  6212. Debugger                                             108
  6213. parallele Prozesse                                   112
  6214. Fischertechnik / LEGO                                118
  6215.  
  6216. #FF
  6217. Stichwortverzeichnis
  6218.  
  6219. ABS                                                   65
  6220. ARCCOS                                                65
  6221. ARCCOT                                                65
  6222. ARCSIN                                                66
  6223. ARCTAN                                                66
  6224. Assign                                                80
  6225. Aufzählungstypen                                      42
  6226. Aus                                                  118
  6227. AusgabeAufBildschirm                                  93
  6228. AusgabeAufDiskette                                    93
  6229. AusgabeAufDrucker                                     94
  6230. Auswahl                                               94
  6231. AuswahlFeld                                           95
  6232. Blau                                                  36
  6233. Bogen                                                 53
  6234. BOGENMAß                                              66
  6235. BOOLEAN                                               43
  6236. BreakPoint                                           110
  6237. Buchstabe                                             77
  6238. BYTE, INTEGER, WORD, LONGINT                          43
  6239. CHAR                                                  42
  6240. CHR                                                   70
  6241. Circle                                                50
  6242. Close                                                 80
  6243. ClrEol                                                81
  6244. ClrScr                                                81
  6245. COPY                                                  70
  6246. COS                                                   66
  6247. COT                                                   67
  6248. CR                                                    36
  6249. DatenAufDiskette                                      95
  6250. DatenVonDiskette                                      96
  6251. DebugAus                                             109
  6252. DebugEin                                             108
  6253. DEC                                                   81
  6254. DefiniereFunktionsTerm                                96
  6255. DefiniereWelt                                         53
  6256. Delay                                                 82
  6257. Delete                                                82
  6258. DezimalZufallszahl                                    77
  6259. DISPOSE                                               34
  6260. DreheAuf                                              45
  6261. DruckeBildschirm                                  54, 96
  6262. Dunkelblau                                            36
  6263. Dunkelgelb                                            36
  6264. Dunkelgrau                                            36
  6265. Dunkelgrün                                            36
  6266. Dunkelkobalt                                          36
  6267. Dunkelrot                                             36
  6268. Dunkelviolett                                         37
  6269. Ein                                                  118
  6270. EingabeFeld                                           97
  6271. EingabeVonDiskette                                    98
  6272. EingabeVonTastatur                                    97
  6273. EinzelschrittAus                                     111
  6274. EinzelschrittEin                                     110
  6275. EOF                                                   70
  6276. ErsetzeBuchstaben                                     98
  6277. ESC                                                   37
  6278. EsGibtDatei                                           77
  6279. Euler                                                 37
  6280. EXIT                                                  82
  6281. EXP                                                   67
  6282. FALSE                                                 37
  6283. Färben                                                54
  6284. FILE                                                  43
  6285. FilePos                                               71
  6286. FileSize                                              71
  6287. FRAC                                                  72
  6288. FügeBuchstabenEin                                     99
  6289. FunktionsGraf                                         54
  6290. FunktionstermFehler                                   55
  6291. FunktionsWert                                         78
  6292. GanzeZufallsZahl                                      78
  6293. GeheNach                                              45
  6294. Gelb                                                  37
  6295. GetMaxX                                               50
  6296. GetMaxY                                               50
  6297. GetX                                                  50
  6298. GetY                                                  51
  6299. GotoXY                                                83
  6300. GRAD                                                  67
  6301. GrafGotoXY                                            55
  6302. GrafikFenster                                         55
  6303. GrafikKorrekturAus                                    56
  6304. GrafikKorrekturEin                                    56
  6305. GrafikSchirm                                          56
  6306. GrafWrite                                             57
  6307. Grau                                                  37
  6308. Grün                                                  38
  6309. HALT                                                  83
  6310. HighVideo                                             83
  6311. Hinten                                                45
  6312. IgelWinkel                                            46
  6313. IgelZeigen                                            46
  6314. ImBogenmaß                                            99
  6315. INC                                                   84
  6316. INCLUDE                                               34
  6317. InGrad                                                99
  6318. Insert                                                84
  6319. INT                                                   72
  6320. InversVideo                                           84
  6321. IORESULT                                              72
  6322. KeyPressed                                            72
  6323. Kobalt                                                38
  6324. Kreis                                                 57
  6325. Lampe                                                118
  6326. LENGTH                                                73
  6327. LetzteTaste                                           78
  6328. LG                                                    67
  6329. LiesEingaben                                         100
  6330. LiesPort                                              79
  6331. Line                                                  51
  6332. LineTo                                                51
  6333. LinkerBogen                                           46
  6334. Links                                                 46
  6335. LinksDrehen                                          118
  6336. LN                                                    68
  6337. LowVideo                                              85
  6338. LST                                                   38
  6339. Maßstab                                               47
  6340. Menü                                                 101
  6341. MitCursor                                            101
  6342. MitIgel                                               47
  6343. MitProtokoll                                         102
  6344. MitStift                                              47
  6345. MitWeltRaster                                         58
  6346. Motor                                                118
  6347. MoveTo                                                51
  6348. NächsterProzeß                                       112
  6349. NeuerProzeß                                          113
  6350. NeueZufallsZahlenFolge                               102
  6351. NEW                                                   35
  6352. NoSound                                               85
  6353. ODD                                                   73
  6354. ÖffneAusgabeDatei                                    102
  6355. ÖffneEingabeDatei                                    103
  6356. ÖffneFenster                                         103
  6357. OhneCursor                                           104
  6358. OhneIgel                                              47
  6359. OhneProtokoll                                        104
  6360. OhneStift                                             48
  6361. OhneWeltRaster                                        57
  6362. ORD                                                   73
  6363. PapierFarbe                                           58
  6364. Pause                                                104
  6365. Pi                                                    38
  6366. POS                                                   74
  6367. PRED                                                  74
  6368. ProzeßEnde                                           113
  6369. Punkt                                                 58
  6370. Random                                                74
  6371. Randomize                                             85
  6372. READ                                                  85
  6373. ReadKey                                               74
  6374. READLN                                                86
  6375. REAL, DOUBLE, EXTENDED                                43
  6376. RechterBogen                                          48
  6377. Rechts                                                48
  6378. RechtsDrehen                                         118
  6379. ReName                                                87
  6380. Reset                                                 87
  6381. ReWrite                                               88
  6382. Rot                                                   38
  6383. ROUND                                                 75
  6384. SchließeAusgabeDatei                                 105
  6385. SchließeEingabeDatei                                 105
  6386. SchließeFenster                                      105
  6387. SchreibPort                                          106
  6388. Schwarz                                               38
  6389. Seek                                                  88
  6390. SendeSignal                                          113
  6391. SetBkColor                                            88
  6392. SetColor                                              89
  6393. SetzeFontWerte                                        59
  6394. SIGN                                                  68
  6395. SIGNAL                                                44
  6396. SIN                                                   68
  6397. Sound                                                 89
  6398. SQR                                                   69
  6399. SQRT                                                  69
  6400. StarteProzesse                                       114
  6401. StarteZeitscheibenVerfahren                          115
  6402. StiftFarbe                                            59
  6403. STR                                                   89
  6404. Strecke                                               59
  6405. Strg-Bild-Ab2                                         38
  6406. StrgBildAuf2                                          39
  6407. STRING                                                43
  6408. SUCC                                                  75
  6409. TAN                                                   69
  6410. TEXT                                                  43
  6411. TextSchirm                                            59
  6412. Ton                                                  106
  6413. TRUE                                                  40
  6414. TRUNC                                                 75
  6415. Unterbrechung                                        115
  6416. UpCase                                                76
  6417. Ursprung                                              49
  6418. VAL                                                   90
  6419. Violett                                               41
  6420. Vorne                                                 49
  6421. WähleDatei                                           107
  6422. WähleFont                                             60
  6423. Warte                                                119
  6424. WarteAufSignal                                       116
  6425. Weiß                                                  41
  6426. WeltGeheNach                                          60
  6427. WeltPixelDX                                           60
  6428. WeltPixelDY                                           61
  6429. WeltPunkt                                             61
  6430. WeltStrecke                                           61
  6431. WeltStreckeNach                                       61
  6432. WeltXMax                                              62
  6433. WeltXMin                                              62
  6434. WeltYMax                                              62
  6435. WeltYMin                                              63
  6436. WhereX                                                76
  6437. WhereY                                                76
  6438. Window                                                90
  6439. Wischen                                               63
  6440. WoGrafikX                                             63
  6441. WoGrafikY                                             64
  6442. WoIgelX                                               49
  6443. WoIgelY                                               49
  6444. WRITELN                                               91
  6445. yKorrekturFaktor                                      64
  6446. Zeiger-Variablen                                      44
  6447. Zustand                                              119
  6448.