home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / ide / m2ide.hlp (.txt) < prev    next >
Encoding:
Borland Turbo Vision Help  |  1991-08-29  |  162.6 KB  |  3,950 lines

  1.    Der Editor 
  2. Im Edit-Fenster k
  3. nnen Sie Ihren Quelltext editieren. Weitere Aktionen werden 
  4. ber die Men
  5. leiste durchgef
  6. hrt. Die einzelnen Men
  7. punkte erreichen Sie durch gleichzeitiges Dr
  8. cken der Alt-Taste und des rot hervor- gehobenen Buchstabens. 
  9. Sie k
  10. nnen fast beliebig viele Fenster zum Editieren 
  11. ffnen, das oberste davon ist aktiv. In ein anderes Edit-Fenster gelangen Sie durch gleichzeitiges Dr
  12. cken der Alt-Taste und der Zahl, die Sie in der oberen rechten Ecke des Edit-Fensters sehen. 
  13. Da die FST-Benutzeroberfl
  14. che mit der gleichen Software erstellt wurde wie Turbo Pascal 6.0 (Turbo Vision), verh
  15. lt sich auch der Editor weitestgehend wie sein gro
  16. es Vorbild. '
  17.    Editorbefehle 
  18.  Ctrl+S      Zeichen nach links
  19.  Ctrl+D      Zeichen nach rechts
  20.  Ctrl+A      Wort nach links
  21.  Ctrl+Links  Wort nach links
  22.  Ctrl+F      Wort nach rechts
  23.  Ctrl+Rechts Wort nach rechts
  24.  Ctrl+R      Seite nach oben
  25.  Ctrl+C      Seite nach unten
  26.  Ctrl+E      Zeile nach oben
  27.  Ctrl+X      Zeile nach unten
  28.  Home        Zeilenanfang
  29.  End         Zeilenende
  30.  Ctrl+PgUp   Textbeginn
  31.  Ctrl+PgDn   Textende
  32.  Ctrl+G      Zeichen unter dem Cursor l
  33. schen
  34.  Ctrl+H      Zeichen links vom Cursor l
  35. schen
  36.  Ctrl+T      Wort l
  37. schen
  38.  Ctrl+L      Letzes Suchen/Ersetzen wiederholen
  39.  Ctrl+M      Neue Zeile hinter dem Cursor einf
  40.  Ctrl+O      Einr
  41. cke-Modus umschalten
  42.  Ctrl+U      letzte 
  43. nderung r
  44. ngig machen
  45.  Ctrl+V      
  46. berschreiben/Einf
  47. gen umschalten
  48.  Ctrl+Y      Zeile l
  49. schen
  50.  Shift+Ins   Text aus Clipboard einf
  51.  Shift+Del   markierten Text ins Clipboard l
  52. schen
  53.  Ctrl+Ins    markierten Text ins Clipboard kopieren
  54.  Ctrl+Del    Clipboard l
  55. schen
  56.   Ctrl+Q "Quick"-Befehle
  57.   ----------------------
  58.  +A Text ersetzen
  59.  +C Textende
  60.  +D Zeilenende
  61.  +F Text suchen
  62.  +H bis Zeilenanfang l
  63. schen
  64.  +R Textbeginn
  65.  +S Zeilenanfang
  66.  +Y bis Zeilenende l
  67. schen
  68.   Ctrl+K Blockbefehle
  69.   -------------------
  70.  +B Blockbeginn markieren
  71.  +C Block einf
  72.  +H Blockmarkierung entfernen
  73.  +K Block kopieren
  74.  +Y Block l
  75. schen 
  76.    Clipboard 
  77. Das Clipboard (Zwischenablage) ist ein normalerweise unsichtbares Edit-Fenster. In der Zwischenablage k
  78. nnen immer wieder ben
  79. tigte Textpassagen aufbewahrt werden, um sie bei Bedarf in das aktitve Edit-Fenster einzuf
  80. gen. Auch der Transfer von markierten Textbl
  81. cken von einem Edit-Fenster in ein anderes geht 
  82. ber das Clipboard. Mit Show
  83. Clipboard
  84. nnen Sie die Zwischablage aktiv machen und auch den Text des Clipboards mit SaveAs
  85.  sichern. 
  86.    Make 
  87. Unter dem Men
  88. punkt "Make" sind alle Aufrufe des FST-Modula-2-Compilers untergebracht. 
  89.    Build 
  90. Der Compiler wird mit der Option "/M" aufgerufen und compiliert alle Dateien neu. Der interne Zeitstempel wird aktualisiert. Voraussetzung f
  91. r eine erfolgreiche Compilation unter diesem Men
  92. punkt ist die vorherige Erzeugung einer "Make-Datei". Sie k
  93. nnen dazu den Men
  94. punkt GenMake
  95.  verwenden. 
  96.    GenMake 
  97. GenMake erzeugt die Datei, die zur Recompilierung aller beteiligten Module notwendig ist. Das Hauptmodul mu
  98.  zuvor unter dem Men
  99. punkt Primary
  100.  angew
  101. hlt sein. 
  102.    Compile 
  103. Compiliert die Datei im aktiven Fenster. Die Datei mu
  104.  zuvor gesichert werden. 
  105.    Link 
  106. Verbindet die compilierten Dateien (.M2O) zu einem lauff
  107. higen (.EXE) Programm. Das Hauptmodul mu
  108.  unter dem Men
  109. punkt Primary
  110.  eingetragen sein. 
  111.    Files 
  112. Unter diesem Men
  113. punkt sind alle Dateioperationen untergebracht. 
  114.    DOS Shell 
  115. Sie k
  116. nnen unter diesem Men
  117. punkt vor
  118. bergehend die Entwicklungsumgebung verlassen und ein DOS-Programm starten (vorausgesetzt, der verbleibende Speicherplatz ist ausreichend). 
  119.    Debug 
  120. Unter diesem Men
  121. punkt sind alle Operationen untergebracht, die Ihr Programm zum Debuggen mit einem externen Debugger (vorzugsweise Turbo Debugger) vorbereiten. 
  122.    MAP-File erzeugen 
  123. Erzeugt eine MAP-Datei, in der alle externen Referenzen (Prozeduren und Variablen aus anderen Modulen) aufgelistet sind. Der externe Debugger ben
  124. tigt diese um zum Beispiel Variableninhalte anzeigen zu k
  125. nnen. Im Hauptmodul mu
  126.  der Compilerschalter (* $L *)  (generiere Zeilennummern) gesetzt sein. Das Programm mu
  127.  vor dem Erzeugen der Map-Datei fehlerfrei compiliert und gelinkt werden. 
  128.    Debugging vorbereiten 
  129. ngt die symbolischen Informationen an die erzeugte .EXE-Datei an. Die meisten Debugger ben
  130. tigen Variablen- und Prozedurnamen, um sowohl den Maschinencode des erzeugten Programms als auch den Quelltext darstellen zu k
  131. nnen. Zuvor mu
  132.  das Programm fehlerfrei compiliert und gelinkt werden, die Map-Datei mu
  133.  ebenfalls bereits erzeugt sein. 
  134.    Error Dateien ansehen 
  135. ffnet ein Auswahlfenster mit den von den aufgerufenen Werkzeugen erzeugten .ERR-Dateien. Diese Dateien zeigen das, was Sie gesehen h
  136. tten, wenn Sie die Programme von der Kommandozeile aus gestartet h
  137. tten. 
  138.    Datei 
  139. ffnen 
  140. sentiert ein Auswahlfenster, in dem Sie die Datei, die Sie editieren m
  141. chten, anw
  142. hlen k
  143. nnen. Die vorgegebene Erweiterung ist .DEF oder -
  144.  .MOD, je nachdem, welche Default
  145. Extension
  146. Sie mit dem dem Schalter im Options-Men
  147.  eingestellt haben. 
  148.    Verzeichnis wechseln 
  149. Erzeugt ein Dialogfenster, in dem Sie das aktuelle Verzeichnis neu bestimmen k
  150. nnen. 
  151.    Hauptmodul w
  152. hlen 
  153. Unter diesem Men
  154. punkt m
  155. ssen Sie das Hauptmodul angeben. 
  156.    Optionen 
  157. Dieser Men
  158. punkt fa
  159. t alle festen Einstellungen der Entwicklungsumgebung zusammen. 
  160.    Optionen sichern 
  161. Sichert die aktuell eingestellten Optionen der Entwicklungsumgebung in der Datei M2IDE.CFG. Ist die Datei nicht im aktuellen Verzeichnis, gibt die Entwicklungsumgebung die meisten Einstellungen gem
  162.  der Installation vor. Sie m
  163. ssen, wenn die Konfigurationsdatei versehentlich gel
  164. scht wurde, die Einstellungen neu vornehmen. Besonders wichtig ist dabei die Vorgabe der Verzeichnisse
  165. r die Programme des FST-Entwicklungspakets. 
  166.    Optionen laden 
  167. dt die gespeicherten Optionen aus der Datei M2IDE.CFG. 
  168.    Turbo Debugger starten 
  169. Startet den Turbo Debugger. Wenn Sie Ihr Programm ordnungsgem
  170.  zum Debuggen vorbereitet haben, k
  171. nnen Sie den Programmlauf im erzeugten Maschinencode und im Quelltext Schritt f
  172. r Schritt nachvollziehen. 
  173.    Entwicklungs-Schalter 
  174. Ist der Schalter aktiv (
  175. ), werden alle zur Erzeugung des lauff
  176. higen Programms ben
  177. tigten Dateien nicht gel
  178. scht. Wenn Ihr Programm fehlerfrei l
  179. uft, k
  180. nnen Sie den Schalter deaktivieren. Die erzeugte .EXE-Datei wird etwa 50% kleiner. 
  181. ber das Programm 
  182. Wie allgemein 
  183. blich, haben sich die Programmierer unter diesem Men
  184. punkt "verewigt". Bei Problemem mit dem Programm geben Sie bitte die Versionsnummer an. 
  185.    System 
  186. Dieser Men
  187. punkt fa
  188. t zun
  189. chst nur das Programmierer-Fenster (About) und den Wort-Kontext (f
  190. r die kontext-sensitive Hilfe zu FST Modula 2) zusammen. 
  191.    IDE Verlassen 
  192. Beendet das Programm und bringt Sie sicher zur
  193. ck zum DOS-Prompt. Sollten noch ungesicherte Dateien ge
  194. ffnet sein, werden Sie vor dem endg
  195. ltigen Abschied noch einmal gefragt. 
  196.    Verzeichnisse 
  197. Bitte geben Sie hier die Pfade an, in denen Sie die Entwicklungswerkzeuge des FST-System gespeichert haben. 
  198.    Batches l
  199. schen 
  200. Ist der Schalter aktiv, werden die von der IDE erzeugten Batch-Dateien gel
  201. scht. Sie sollten den Schalter so lange deaktiv lassen, bis Ihr Programm fehlerfrei l
  202. uft. 
  203.    .BAK anlegen 
  204. Der Editor legt von der aktuellen Datei eine Sicherheitskopie mit der Extension .BAK an, wenn der Schalter aktiv (
  205. ) ist. 
  206.    Verzeichnis wechseln 
  207. Es erscheint ein Dialog, in dem Sie auf dem Verzeichnisbaum des aktuellen Laufwerks ein neues Verzeichnis anw
  208. hlen k
  209. nnen, in dem Sie weiterarbeiten m
  210. chten. Auch das Laufwerk k
  211. nnen Sie unter diesem Men
  212. punkt wechseln. 
  213.    Neue Datei 
  214. ffnet ein leeres Edit-Fenster mit dem Arbeitstitel "untitled". Sie k
  215. nnen einen Text eingeben und ihn dann mit SaveAs
  216.  mit einem neuen Namen versehen. 
  217.    Clipboard ansehen 
  218. In der Zwischenablage Clipboard werden markierte Bl
  219. cke zwischengespeichert. Ist das Clipboard aktiv, k
  220. nnen Sie die dort abgelegten Texte editieren. 
  221.    Fenster nebeneinander 
  222. Nach dem Anw
  223. hlen dieses Men
  224. punkts werden die ge
  225. ffneten Fenster mit  Ausnahme des Clipboard nebeneinander auf dem Bildschirm "ausgebreitet". Mit Zoom
  226. nnen Sie das aktive Fenster (erkennbar an der Rahmenfarbe) auf volle Gr
  227. e bringen.  
  228.    Datei sichern als 
  229. Dieser Men
  230. punkt f
  231. chert die ge
  232. ffneten Fenster zu einem Stapel auf. Die Nummern in der rechten oberen Ecke dienen zur Anwahl des Aktiven Fensters. Mit Zoom
  233. nnen Sie das aktive Fenster (erkennbar an der Rahmenfarbe) auf volle Gr
  234. e bringen.  
  235.    Datei sichern 
  236. Speichert die Datei auf dem Datentr
  237. ger. Soll die Datei einen anderen  Namen erhalten oder in einem anderen als dem aktuellen Verzeichnis abgelegt werden, m
  238. ssen Sie den Men
  239. punkt SaveAs
  240. hlen. 
  241.    Datei sichern als 
  242. Es erscheint ein Dialogfenster, in dem Sie den Namen eingeben k
  243. nnen, unter dem Sie den Text im aktiven Fenster sichern m
  244. chten. Sie k
  245. nnen allerdings auch einen Namen aus der Datei
  246. bersicht w
  247. hlen und eine bereits vorhandene Datei 
  248. berschreiben. 
  249.    Edit 
  250. Unter diesem Men
  251. punkt sind spezielle Editor-Befehle zu finden. 
  252. ngig machen 
  253. Macht die letzte 
  254. nderung r
  255. ngig. 
  256.    Block "ausschneiden" 
  257. Der markierte Block wird aus den aktiven Edit-Fenster ausgeschnitten und vorerst auf dem Clipboard abgelegt. Wenn Sie den Text an einer anderen Stelle im Text einf
  258. gen m
  259. chten Paste
  260. ssen Sie dies vor dem n
  261. chsten Ausschneiden tun, da immer nur ein "Textschnipsel" in der Zwischenablage Platz findet. 
  262.    Block kopieren 
  263. Kopiert den markierten Block in die Zwischenablage Clipboard. Mit Paste
  264. nnen Sie den Block an anderer Stelle wieder einf
  265. gen. 
  266.   Siehe auch : Editor
  267.    Text "einkleben" 
  268. gt einen Textblock aus der Zwischablage an der Cursorposition in das aktive Edit-Fenster ein. 
  269.    Textblock l
  270. schen 
  271. scht den markiertene Textblock. 
  272.    Suchen und Ersetzen 
  273. Unter diesem Men
  274. punkt sind Operationen zu finden, die es Ihnen erm
  275. glichen, Textstellen schnell aufzufinden sowie Zeichenketten durch andere zu ersetzen. 
  276.    Textstelle suchen 
  277. ffnet einen Dialog, in dem Sie eine Zeichenkette eigeben k
  278. nnen, die im aktiven Edit-Fenster gesucht werden soll. Die Suche kann sich auf ganze Worte beziehen (Whole words only [X]) und unabh
  279. ngig von der Gro
  280. -/Kleinschreibung erfolgen (Case sensitive [ ]). Die letzten f
  281. nf Suchbegriffen k
  282. nnen Sie im History-Fenster ausw
  283. hlen, das sich 
  284. ffnet, wenn Sie den gr
  285. nen Pfeil neben der Eingabezeile anw
  286. hlen. %
  287.   Tastatur-Kurzanwahl : Ctrl+Q F
  288.    Suchen und Ersetzen 
  289. Wie unter dem Men
  290. punkt Find
  291. nnen Sie eine Zeichenkette eingeben, die gesucht werden soll. Auf der Eingabezeile "New Text" tragen Sie den Text ein, der den Suchbegriff ersetzen soll. Ist "Prompt on Replace" aktiv [X], werden Sie vor jedem Ersetzen gefragt, "Replace all" [X] ersetzt alle gefundenen Begriffe. %
  292.   Tastatur-Kurzanwahl : Ctrl+Q A
  293.    Suchen/Ersetzen wiederholen 
  294.   Tastatur-Kurzanwahl : Ctrl+L
  295.    Fenster 
  296. t die Operationen zur Gestaltung der Arbeitsoberfl
  297. che (Desktop) zusammen. 
  298.    Gr
  299. e ver
  300. ndern 
  301. Die Anwahl dieses Men
  302. punkts 
  303. ndert die Rahmenfarbe und zeigt eine neue Statuszeile. Mit den Pfeiltasten k
  304. nnen Sie die Gr
  305. e des aktiven Fensters ver
  306. ndern und es auf dem Desktop verschieben. $
  307.   Tastatur-Kurzanwahl : Ctrl-F5
  308.    Vollbild 
  309. Bringt das aktive Fenster zur vollen Gr
  310. e. Die Anwahl dieses Men
  311. punkts hat die gleiche Funktion wie ein Anklicken des Pfeils in der oberen rechten Ecke des Fensters. 
  312.   Tastatur-Kurzanwahl : F5
  313. chstes Fenster aktivieren 
  314. Macht das n
  315. chste Fenster im Fensterstapel auf der Arbeitsoberfl
  316. che aktiv. 
  317.   Tastatur-Kurzanwahl : F6
  318.    Voriges Fenster aktivieren 
  319. Macht das vorige Fenster im Fensterstapel aktiv. %
  320.   Tastatur-Kurzanwahl : Shift-F6
  321.    Fenster schlie
  322. Schlie
  323. t das aktive Fenster. Ist die Datei nicht gesichert, werden Sie gefragt, ob Sie den Text speichern wollen. Die Anwahl des Men
  324. punkts hat die gleiche Funktion wie ein Anklicken des "Schlie
  325. en"-Knopfes in der oberen linken Ecke des Fensters. #
  326.   Tastatur-Kurzanwahl : Alt-F3
  327.    Cursor auf Zeile/Spalte 
  328. ffnet ein Dialogfenster, in dem Sie die Zeile und die Spalte angeben k
  329. nnen, auf die der Cursor gesetzt werden soll. Diese Funktion ist bei der Bereinigung von syntaktischen Fehlern aus der Datei COMPILER.ERR n
  330. tzlich. 
  331.    Wort Context 
  332. Wenn es zu diesem Wort im Text einen Hilfebegriff gibt, wird das zugeh
  333. rige Hilfefenster ge
  334. ffnet. $
  335.   Tastatur-Kurzanwahl : Ctrl-F1
  336.    Default Extension 
  337. Der Schalter setzt die vorgegebene Dateinamen-Erweiterung f
  338. r die Dateiauswahldialoge. 
  339.    Hilfe-Index 
  340.  Standard-Module     Modula-Schleifentypen
  341.  Routinen            Standard-Typen
  342.  ASCII-Zeichen       Tastaturcodes
  343.  Compilerschalter    Inline-Assembler
  344.  Laufzeitfehler      Reservierte
  345. Worte
  346.  Sprachkonventionen  Compiler-Begrenzungen
  347.  Objekt-Zeitstempel  Environment-Variablen
  348. Ende mit ESC 
  349.    Modul-Index  
  350.  ASCII             Break
  351.  Directories       Display
  352.  DTA               Files
  353.  FileSpec          FileSystem
  354.  InOut             KeyBoard
  355.  Loader            LongJump
  356.  Menu              LMathLib0/MathLib0
  357.  NumberConversion  Paths
  358.  RealConversion    RealInOut
  359.  Storage           Strings
  360.  SYSTEM            System
  361.  TermBase          Terminal
  362.  TermIO            TimeDate
  363.  Windows
  364. ck zum Index, Ende mit ESC 
  365.   Liste der Standandprozeduren 
  366.   Prozeduren A - E:
  367.  ADR               ALLOCATE
  368.  Append            arctan
  369.  ASCIIZ            Assign
  370.  AssignGoto        AssignRead
  371.  AssignWrite       Available
  372.  CardToString      ChDir
  373.  Close             CloseCurWindow
  374.  CloseInput        CloseOutput
  375.  CloseWindow       ClrEOL
  376.  ClrEOS            ClrScreen
  377.  CompareStr        Concat
  378.  Copy              cos
  379.  Create            CreateNew
  380.  CreateTemp        DEALLOCATE
  381.  Delete            DirQuery
  382.  DisableBreak      DisplayLine
  383.  DisplayString     DISPOSE
  384.  DropExt           Dup2
  385.  Dup               EnableBreak
  386.  entier            ErrorMessage
  387.  ErrorLn           Execute
  388.  exp               ExtractDirPath
  389.  ExtractFileName
  390.  Weiter
  391. ck zum Index, Ende mit ESC /
  392.   Liste der Standandprozeduren 
  393.   Prozeduren F - P:
  394.  FLAT              FLOAT
  395.  GetArg            GetCurDir
  396.  GetCursorPosition GetDisplayMode
  397.  GetDTA            GetEnv
  398.  GetFileAttr       GetFileTime
  399.  GetFirstDir       GetFunKey
  400.  GetKey            GetKeyCh
  401.  GetLPos           GetNextDir
  402.  GetPos            GetShiftStatus
  403.  GetTime           GetVector
  404.  Goto              HasExt
  405.  Insert            InstallBreakHandler
  406.  IntToString       InstallRTErrorHandler
  407.  KeyPressed        Length
  408.  LLength           ln
  409.  Locate            Lock
  410.  LongCardToString  LongIntToString
  411.  LongJump          LongNumToString
  412.  LongRealToString  LookUp
  413.  MkDir             Move
  414.  NEW               NEWPROCESS
  415.  NewWindowTitle    NumToString
  416.  OFFSET            Open
  417.  OpenInput         OpenOutPut
  418.  OpenWindow        ParseFileSpec
  419.  PopMenu           Pos
  420.  PTR               PullDownMenu
  421.  Weiter
  422. ck zum Index, Ende mit ESC
  423.   Liste der Standandprozeduren 
  424.   Prozeduren P - T:
  425.  real              Read
  426.  ReadAgain         ReadCard
  427.  ReadChar          ReadCharAttr
  428.  ReadInt           ReadLine
  429.  ReadLongCard      ReadLongInt
  430.  ReadNBytes        ReadReal
  431.  ReadScreen        ReadString
  432.  ReadWord          ReadWrd
  433.  RealToString      RedirectInput
  434.  RedirectOutput    Rename
  435.  Reset             ResetVector
  436.  Rewrite           RmDir
  437.  ScrollDown        ScrollUp
  438.  Seek              SEGMENT
  439.  SelectWindow      SetCursorPosition
  440.  SetCursorType     SetDisplayMode
  441.  SetDTA            SetFileAttr
  442.  SetFileTime       SetJump
  443.  SetLPos           SetPos
  444.  SetTime           SetVector
  445.  SHORT             sin
  446.  sqrt              StringToInt
  447.  StringToLongCard  StringToLongInt
  448.  StringToLongNum   StringToLongReal
  449.  StringToNum       StringToReal
  450.  Terminate         TermProcedure
  451.  TRANSFER          Trap
  452.  TRUNC
  453.  Weiter
  454. ck zum Index, Ende mit ESC
  455.   Liste der Standandprozeduren 
  456.   Topics ab U:
  457.  UnAssignGoto      UnAssignRead
  458.  UnAssignWrite     UninstallBreakHandler
  459.  Unlock            UninstallRTErrorHandler
  460.  Write             WriteCard
  461.  WriteChar         WriteCharAttr
  462.  WriteHex          WriteInt
  463.  WriteLine         WriteLn
  464.  WriteLongCard     WriteLongInt
  465.  WriteNBytes       WriteOct
  466.  WriteReal         WriteScreen
  467.  WriteString       WriteWord
  468.  WriteWrd          XTrap
  469. ck zum Index, Ende mit ESC
  470.   der integrierte Assembler 
  471. Es ist ein 8086 Inline-Assembler eingebaut. 
  472. Wenn der ASSEMBLER aus SYSTEM importiert ist,  k
  473. nnen Sie im Quelltext Assembler-Code eingeben. Dieser mu
  474.  nur mit den Schl
  475. sselworten ASM und END eingeklammert werden. ^
  476. Die Form des Assembler-Codes ist frei.  Kommentare werden wie in Modula-2 
  477. blich eingegeben. E
  478. Die Zeilen d
  479. rfen nicht mit einem Strichpunkt abgeschlossen werden. 
  480.  Beispiele:
  481.    loop:  CMP BYTE [SI], 0
  482.            (* String-Ende erreicht? *)
  483.           MOV BYTE [DI], [SI]
  484.           INC SI
  485.           INC DI  (* Zeiger erh
  486. hen *)
  487.           JMP loop
  488.   PROCEDURE SHR(in, shifter: CARDINAL): CARDINAL:
  489.   VAR
  490.     out: CARDINAL;
  491.   BEGIN
  492.      ASM
  493.        MOV AX, in
  494.        MOV CX, shifter
  495.        SHR AX, CL
  496.        MOV out, AX
  497.      END;
  498.      RETURN out;
  499.   END SHR;
  500. Der Assembler akzeptiert alle 8086/8088-Mnemonics. Adre
  501. -Operanden k
  502. nnen in jeder Form codiert werden,  die auch andere Assembler verstehen, mit der Einschr
  503. nkung,  da
  504.  der einzige verf
  505. gbare Operator "+" ist. z
  506. Typ-Bestimmungen sind: WORD, BYTE, FAR, NEAR und sie d
  507. rfen nicht von den Schl
  508. sselworten POINTER oder PTR gefolgt sein. 
  509.  Beispiel:
  510.    label: MOV  AX, ES:[BX,DI+5]
  511.           MOV  AX, ES:5[DI+BX]
  512.           MOV  WORD [5], 1
  513.           CALL NEAR [DI]
  514.           TEST BYTE i+2, 1
  515. Alle Mnemonics und Registernamen m
  516. ssen in Gro
  517. buchstaben geschrieben sein. Wenn Sie auf einen Modula-2-Bezeichner zugreifen wollen,  jedoch dabei in Konflikt mit einem im Assembler reservierten Symbol kommen,  stellen Sie einfach ein "@" voran. 
  518.  Beispiel:
  519.    MOV @AX, AX
  520. generiert einen Move von Register AX nach Variable AX. =
  521. Alle Modula-2-Variablen sind grunds
  522. tzlich vom Assembler aus zug
  523. nglich.  Record-Komponenten-Namen sind nicht zug
  524. nglich. Der Assembler tut f
  525. r Sie nichts automatisch! Wenn Sie beispielsweise einen VAR-Parameter als Operanden einsetzen,  m
  526. ssen Sie 
  527. ber die Zeiger-Adresse auf den tats
  528. chlichen Parameter zugreifen. s
  529.  Beispiel:
  530.    PROCEDURE p(VAR done: BOOLEAN);
  531.    ...
  532.    ASM
  533.      LES DI, done
  534.      MOV BYTE ES:[DI], TRUE
  535.    END;
  536. ist der korrekte Weg, "done" mit TRUE zu besetzen. J
  537. Auf Konstanten der folgenden Typen kann in Assembler zugegriffen werden: C
  538.  INTEGER,
  539.  CARDINAL,
  540.  BOOLEAN,
  541.  CHAR und
  542.  Aufz
  543. hlungs-Konstanten.
  544. Alle Marken (Labels) eines ASM-Abschnitts sind lokal zu diesem Abschnitt. Andere Namen, die au
  545. erhalb deklariert sind und die in der Prozedur sichtbar sind, d
  546. rfen nicht als Label-Namen verwendet werden. Auf Labels darf nur in Sprung-Befehlen verwiesen werden. k
  547. Alle Spr
  548. nge werden vom Compiler optimiert. Deshalb braucht die Sprungweite nicht spezifiziert zu werden. 
  549. Denken Sie daran, da
  550.  dies ein Modula-2-Compiler ist, kein Assembler! Der Inline-Assembler ist nur f
  551. r den Gebrauch in Ausnahmesituationen gedacht. -
  552.   8087 Unterst
  553. tzung
  554. Alle Befehle des Coprozessors 8087 werden vom Inline-Assembler verarbeitet. Die Zusatzbefehle des 80186 (= 80286-Realmode) werden nicht verstanden und m
  555. ssen im Notfall als Datenbereich mit "DB" eingegeben werden. Labels k
  556. nnen (ohne Deklarierung) eingesetzt werden. 
  557. Der Assembler besitzt ein paar Einschr
  558. nkungen. Nur die folgenden Operandentypen sind bei Load- und Store-Operationen m
  559. glich: '
  560.  INTEGER, LONGINT, REAL und LONGREAL.
  561. Sie k
  562. nnen kein Load/Store mit einem Wert in tempor
  563. rem Real- oder Dezimal-Format durchf
  564. hren. Die Bedeutung der operandenlosen Form der arithmetischen Befehle wurde beibehalten: 
  565.  FADD, FSUB, FMUL und FDIV arbeiten
  566.    mit den beiden oberen Elementen
  567.    des 8087-Stack.
  568.    Sie benutzen ST(1) als Ziel und
  569.    entfernen ST.
  570.  FSUBR subtrahiert ST(1) von
  571.    ST (FDIVR dividiert ST durch
  572.    ST(1)), wobei das Ergebnis
  573.    in ST(1) abgelegt und ST entfernt
  574.    wird.
  575. Das Zwei-Operanden-Format der arithmetischen Befehle wurde nicht implementiert. Daher d
  576. rfen Sie kein anderes Zielregister als ST angeben, au
  577. er bei den "und pop"-Versionen der Befehle. 
  578. Mit einem normalen Assembler k
  579. nnen Sie bei Register-Register-Operationen dasjenige Register angeben, in welchem das Ergebnis der Operation abgelegt werden soll (das Zielregister). Per Definition ist das Zielregister auch der erste Operand des Befehls. Mit dem Inline-Assembler ist jedoch immer ST das Ziel einer Operation. Ausnahme sind die "und pop"-Versionen der Befehle, bei denen das im jeweiligen Befehl angegebene Register das Ziel der Operation ist. q
  580. Um die Konsistenz zu wahren, sollte ST immer der erste Operand sein, auch wenn die "und pop"-Form benutzt wird. =
  581. Die Bedeutung von FSUBP, FSUBRP, FDIVP und FDIVRP ist also: 
  582.  FSUBP ST(1) bedeutet:
  583.    FSUBRP ST(1),ST -> ST(1):=ST-ST(1)
  584.  FSUBRP ST(1) bedeutet:
  585.     FSUBP ST(1),ST -> ST(1):=ST(1)-ST
  586.  FDIVP ST(1) bedeutet:
  587.    FDIVRP ST(1),ST -> ST(1):=ST/ST(1)
  588.  FDIVRP ST(1) bedeutet:
  589.    FDIVP ST(1),ST -> ST(1):=ST(1)/ST und ST wird entfernt (pop).
  590.  Beispiel:
  591.   VAR
  592.     wert: WORD;
  593.   BEGIN
  594.     ASM
  595.       ...
  596.   @wert:
  597.       ...
  598.       MOV wert, BX
  599.       CMP BX, CX
  600.       JNZ @wert
  601.       ...
  602.     END;
  603. Eine Liste der Assembler-Befehle der Intel-Prozessorenreihe kann (mit der jeweiligen Beschreibung) jedem Assembler-Buch entnommen werden).  
  604. ck zum Index, Ende mit ESC 
  605.   Modula-2-Schleifentypen 
  606. Modula bietet mehr Schleifentypen als Pascal. Die Syntax der Schleifen weicht ebenfalls von Pascal ab. F
  607.   LOOP-Schleife (Endlosschleife):
  608. Die Abbruchbedingung mu
  609.  explizit in der Schleife mit "EXIT" erfolgen: D
  610.   LOOP
  611.     (* mach irgendwas *)
  612.     IF bedingung THEN EXIT;
  613.   END;
  614.   FOR-Schleife (einfache Z
  615. hlschleife):
  616.   FOR var1 TO var2 [[BY] [-]var3] DO
  617.      (* abarbeiten *)
  618.   END;
  619. "BY" ist optional und gibt die Sprungweite beim Schleifendurchgang (identisch zum STEP-Befehl in BASIC) an. *
  620.   Einfache Bedingung mit "IF":
  621.   IF bedingung1 THEN
  622.     (* mach irgendwas *)
  623.   [ELSIF bedingung2]
  624.     (* mach irgendwas anderes *)
  625.   [ELSE]
  626.     (* mach irgendwas ganz anderes *)
  627.   END;
  628.   Einfache Bedingung mit "CASE":
  629.   CASE var1 OF
  630.     wert1: (* mach was *)
  631.  [| wert2: (* mach was anderes *)]
  632.  [| wert3: (* mach wieder was anderes *)]
  633.   ELSE     (* fang den Rest ab *)
  634.   END;
  635.   Kopfgesteuerte "WHILE"-Wiederholanweisung:
  636.   WHILE [NOT] bedingung DO
  637.     (* eine Schleife abarbeiten *)
  638.   END;
  639. Die Bedingung mu
  640.  beim Einsprung erf
  641. llt sein. Die Schleife wird verlassen, wenn die Bedingung nicht mehr erf
  642. llt ist. U
  643. Falls die Bedingung anfangs nicht erf
  644. llt wird, wird die Schleife nicht ausgef
  645. hrt. )
  646. gesteuerte REPEAT-Wiederholanweisung:
  647.   REPEAT
  648.     (* mach was *)
  649.   UNTIL [NOT] bedingung;
  650. Die Bedingung darf beim Einsprung erf
  651. llt sein (mu
  652.  aber nicht). G
  653. Dieser Schleifentyp wird grunds
  654. tzlich mindestens einmal durchlaufen. )
  655.   Abarbeiten von RECORD-Abweisungen:
  656.  WITH Persons[i] DO
  657.    IF (Age < 4) THEN
  658.     (* Kleinkind *)
  659.   [ELSEIF (Age < 15) THEN]
  660.     (* Jugendlicher *)
  661.   [ELSE]
  662.     (* Erwachsener *)
  663.    END;
  664.  END;
  665. WITH-Anweisungen werden benutzt, damit die Felder eines RECORDs als Schleifenvariablen genutzt werden k
  666. nnen. 
  667. ck zum Index 
  668.   Modula kontra Pascal: Konventionen 
  669.  Modula ist Case-sensitiv, d.h. Klein-
  670.    und Gro
  671. schreibung werden wie in C und
  672.   im Gegensatz zu Pascal unterschieden.
  673.  Trennung von DEFINITION (.DEF) und
  674.    IMPLEMENTATION (.MOD) in getrennten Dateien.
  675.  Beenden von Prozeduren mit END ModulName.
  676.    Hinter Prozeduren Ende mit Semikolon (;),
  677.    am Ende von Modulen mit Punkt (.).
  678.    Nur das Hauptmodul bekommt die Bezeichnung
  679.    MODULE ModulName; sonst mu
  680.  festgelegt
  681.    werden, ob es sich um ein Definitions-
  682.    oder Implementationsmodul handelt.
  683.  In DEFINITION-Modulen d
  684. rfen nur Variablen,
  685.    Typen, Konstanten und Prozedurk
  686. pfe stehen.
  687.    Im Unterschied zu Turbo Pascal-Unit-
  688.    Implementationen d
  689. rfen keine Codeteile
  690.    eingebunden sein.
  691. Die Modula-Definitionsdateien dienen nur dem Im- und Export. Dieser kann qualifiziert oder unqualifiziert erfolgen. 
  692. Beispiel: 
  693.  IMPORT ASCII; (* Qualifizierter Import       *)
  694.                (* vergleichbar mit dem Import *)
  695.                (* von Turbo-Pascal-Objekten.  *)
  696.  FROM Files IMPORT Write, WriteChar;
  697.                (* Unqualifizierter Import.    *)
  698.  FROM FileSpec IMPORT ;
  699.                (* Import des gesamten Defi-   *)
  700.                (* nitionsteiles eines Moduls  *)
  701.                (* 
  702. quivalent zum Import von   *)
  703.                (* Turbo-Pascal Units.         *)
  704. Der unqualifizierte Import von gleichnamigen Prozeduren aus mehreren Modulen ist nicht m
  705. glich: 5
  706.  FROM Files IMPORT Write;
  707.  FROM InOut IMPORT Write;
  708. Der zweite Import wird vom Compiler beanstandet. Hier ist es nur m
  709. glich, mindestens ein Modul qualifiziert zu importieren: 2
  710.      IMPORT Files;
  711.      FROM Inout IMPORT Write;
  712.  Prozeduren mit R
  713. ckgabewert (Funktionsparametern):
  714. Im Gegensatz zu Pascal gibt es in Modula keine Funktionen (FUNCTION). Dies wird dadurch umgangen, da
  715.  Prozeduren ebenfalls einen Parameter zur
  716. ckgeben k
  717. nnen. Allerdings mu
  718.  dieser ein ordinaler Typ sein. Zusammengesetzte Typen d
  719. rfen nicht verwendet werden. 
  720.  Die Pascal-Funktion:
  721.   FUNCTION MessageBack: STRING;
  722. ist aus diesem Grund nicht m
  723. glich. 
  724. Der Typ "ARRAY OF CHAR" der dem Pascal-String entspricht, ist kein ordinaler Typ und kann deshalb nicht als Funktionsparameter dienen. Die Struktur mu
  725.  folglich mit einem VAR-Parameter zur
  726. ckgegeben werden: 2
  727.  PROCEDURE MessageBack(VAR Back: ARRAY OF CHAR);
  728. oder mit einem Zeigers auf den String: ?
  729.  TYPE
  730.    String: ARRAY OF CHAR;
  731.    PtrStr: POINTER TO String;
  732.  PROCEDURE MessageBack(): PtrStr;
  733. Bei ordinalen Typen kann die Struktur wie in Pascal programmiert werden: 
  734.   Pascal:
  735.  FUNCTION GetBack: BOOLEAN;
  736.  BEGIN
  737.    GetBack := FALSE;
  738.    IF KeyPressed THEN GetBack := TRUE;
  739.  END;
  740.   Modula:
  741.  PROCEDURE GetBack(): BOOLEAN;
  742.    vBack: BOOLEAN;
  743.  BEGIN
  744.    vBack := FALSE;
  745.    IF KeyBoard.KeyPressed() THEN
  746.      vBack := TRUE;
  747.    END;
  748.    RETURN vBack; (* R
  749. ckgabe! *)
  750.  END GetBack;
  751.  Fremdsprachige Module: 
  752. Um dem Modula-2-Compiler die n
  753. tigen Informationen 
  754. ber die in anderen Sprachen geschriebenen Module verf
  755. gbar zu machen, m
  756. ssen sogenannte FOREIGN-DEFINITION(Fremd-Definitions)-Module geschrieben werden. 
  757. Ein FOREIGN-DEFINITION-Modul ist ein normales Definitions-Modul mit einem etwas ver
  758. nderten Modulkopf, der folgenderma
  759. en aussieht: 0
  760.  FOREIGN [C|PASCAL] DEFINITION MODULE modName;
  761. wobei der "C"- oder "PASCAL"-Bezeichner optional ist. \
  762. Namen von globalen Variablen und Prozeduren in Fremdmodulen werden auf drei Arten codiert: 
  763.  Bei einem normalen (weder C noch
  764.    PASCAL) FOREIGN-Modul stehen die
  765.    Bezeichner so in der Object-Datei
  766.    wie Sie sie geschrieben haben.
  767.  Bei einem FOREIGN-C-Modul ist vor
  768.    jeden Bezeichner ein "_"-Zeichen
  769.    gesetzt.
  770.  Bei einem FOREIGN-PASCAL Modul werden
  771.    alle Bezeichner in Gro
  772. buchstaben
  773.    umgewandelt.
  774. WARNUNG: Bei der vorliegenden Implementierung erzeugt der Compiler f
  775. r Zugriffe auf SET- und STRING-Konstanten, die in einem FOREIGN-DEFINITION-Module definiert sind, externe Verweise. F
  776. r diese "Konstanten" sollte daher der Speicherplatz im Fremdmodul liegen und dieser sollte korrekt initialisiert werden. Bei FOREIGN-Modulen wird keine Initialisierungs-Prozedur erwartet und der Compiler erzeugt die entsprechenden Initialisierungs-Aufrufe nur bei normalen Modula-2-Modulen. 
  777.  FOREIGN-C-Module: 
  778. Beim Aufruf eines Unterprogramms in einem FOREIGN-C-Modul werden die Argumente, wie bei C 
  779. blich, in umgekehrter Reihenfolge auf den Stack gelegt. Bei der R
  780. ckkehr vom Unterprogramm entfernt au
  781. erdem der Aufrufer selbst die Argumente vom Stack. Da C im Gegensatz zu Modula-2 die 
  782. bergabe einer variablen Anzahl von Parametern unterst
  783. tzt, kann in Fitted Modula das Zeichen "." am Ende einer Parameterliste benutzt werden, um anzuzeigen, da
  784.  eine unbestimmte Anzahl von Argumenten 
  785. bergeben wird. ;
  786.  Das Beispiel:
  787.    PROCEDURE sum(n: INTEGER; . ): INTEGER;
  788. definiert eine Funktion die aus n Integers die Summe bildet und zur
  789. ckgibt. Sie k
  790. nnte in Modula-2 folgenderma
  791. en definiert werden: 
  792.  PROCEDURE sum(n: INTEGER; . ): INTEGER;
  793.    p:   POINTER TO INTEGER;
  794.    res: INTEGER;
  795.  BEGIN
  796.    res := 0;
  797.    p := ADR(n) + 2;
  798.    WHILE n > 0 DO
  799.      res := res + p^;
  800.      INC(p, 2);
  801.      DEC(n);
  802.    END;
  803.    RETURN res;
  804.  END sum;
  805.  Parameter-
  806. bergabe: 
  807. Die Form in der die einzelnen Parameter 
  808. bergeben werden, ist immer gleich, egal ob sich die Prozedur in einem Fremdmodul befindet oder nicht. Die Ausnahme ist der Gebrauch von ".". Bei der 
  809. bergabe von Parametern f
  810. r die im Prozedurkopf der "." steht, folgt der Compiler den 
  811. blichen Regeln von C: Alles wird als Wert 
  812. bergeben (call by value), lediglich f
  813. r Arrays wird deren Adresse 
  814. bergeben (call by reference), anstatt deren Wert. 
  815. In Modula-2 k
  816. nnen Funktionen keine zusammengesetzten Typen zur
  817. ckgeben. Manche C-Compiler erm
  818. glichen dies, indem im Registerpaar DX:AX ein Zeiger auf diese Werte zur
  819. ckgegeben wird. Auf die gleiche Art und Weise verf
  820. hrt Fitted Modula-2 mit Zeigern! '
  821. Also k
  822. nnte man wie folgt definieren: 
  823.  struct someStruct cfunct()
  824. als 1
  825.  TYPE
  826.    someStructPtr = POINTER TO someStruct;
  827.  PROCEDURE cfunct(): someStructPtr;
  828. ck zum Index
  829.   Zeitstempel in FST-Modula-2-M2O-Dateien 
  830. Der "Module-Header-Record" und die "Import-Records", die der Compiler in die Objekt-Datei schreibt, werden mit dem Datum der benutzten .DEF-Datei markiert - dies ist der Modul-Schl
  831. ssel. Der Linker stellt sicher, da
  832.  die Modul-Schl
  833. ssel im Module-Header des importierten Moduls und im Import-Record 
  834. bereinstimmen. Ist dies nicht der Fall, dann wurde beim Compilieren nicht das gleiche Definitions-Modul benutzt. Wegen des Gebrauchs dieser Modul-Schl
  835. ssel ist es zwingend erforderlich, da
  836.  das jeweilige Datum der .DEF-Dateien nicht ver
  837. ndert wird, au
  838. er wenn beabsichtigen ist, die Implementierungen neu zu compilieren. 
  839.  Wichtig:
  840. Wenn OBJ-Dateien benutzt werden, besteht dieser Schutz durch die Modul-Schl
  841. ssel nicht. 
  842. ck zum Index 
  843.   Environment-Variablen 
  844. Die grundlegenden Bedingungen des Fitted-Modula-Compilers k
  845. nnen 
  846. ber Environment-Variablen gesteuert werden: 
  847.   Ausgabeformat der Objektdateien:
  848.     M2OUTPUT=[M2O|OBJ]
  849.   Pfad zu den Bibliotheken/Objektdateien:
  850.     M2LIB=pfad
  851.   Speichermodell:
  852.     M2MODEL=[LARGE|HUGE]
  853. Es mu
  854.  darauf geachtet werden, da
  855.  der DOS-Umgebungsbereich ausreicht. Falls die DOS-Meldung "Out of Environment Space" bzw. "Nicht genug Platz im Umgebungsspeicher" erscheint, mu
  856.  die Gr
  857. e des Environments  angepa
  858. t werden. Dies erfolgt mit dem  /E:-Parameter beim Shell-Aufruf in der CONFIG.SYS: 1
  859.  SHELL=[pfad]COMMAND.COM /E:<Gr
  860. e in Bytes> /P
  861.   M2MODEL:
  862. Der Compiler erzeugt Code f
  863. r die Intel 8086 Speichermodelle "Huge" und "Large": Beim "Huge"-Speichermodell hat jedes Modul sein eigenes Daten- und Codesegment, die jeweils bis zu 64k gro
  864.  sein d
  865. rfen; beim "Large"-Speichermodell sind die statischen Daten aller Module in einem einzigen Segment zusammengefa
  866. t. Pointer sind in beiden Modellen vier Bytes lang. Andere Speichermodelle werden zur Zeit nicht unterst
  867. tzt. 
  868. Die Umgebungsvariable M2MODEL kann auf "HUGE" oder "LARGE" gesetzt werden, so da
  869.  dem Compiler nicht jedesmal das gew
  870. nschte Speichermodell mitgeteilt zu werden braucht (au
  871. er man will sich 
  872. ber diese Voreinstellung hinwegsetzen). 
  873. Falls M2MODEL nicht definiert ist, nimmt der Compiler als Standard und wegen der Kompatibilit
  874. t mit fr
  875. heren Versionen die Einstellung "HUGE" an. d
  876. Die Einstellung des Speichermodells kann aus Sicherheitsgr
  877. nden nicht aus der IDE ge
  878. ndert werden. 
  879.   M2LIB:
  880. Sowohl der Compiler als auch der Linker benutzen die Umgebungsvariable M2LIB um auf erforderliche Bibliotheks-Module zuzugreifen (das Format f
  881. r M2LIB entspricht dem f
  882. r DOS PATH). 
  883.   M2OUTPUT:
  884. Normalerweise werden M2O-Dateien ("Modula-2-Object") erzeugt. Dieses Dateiformat gibt es nur bei diesem Compiler. Es ist speziell f
  885. r die Anforderungen von Modula-2 optimiert. Der Benutzer kann jedoch mittels der Umgebungs-Variablen M2OUTPUT festlegen, da
  886.  stattdessen Standard-OBJ-Dateien erzeugt werden. <
  887. Die IDE arbeitet nur mit M2O-Dateien korrekt zusammen, da der Aufruf der beiden Linker M2LINK und LINK nicht kompatibel ist. Falls als Ausgabeformat Intel-OBJ-Dateien verwendet werden sollen, m
  888. ssen die Programme auf der Kommandozeile gebunden werden. Alle anderen Funktionen der IDE arbeiten auch mit OBJ-Dateien. 
  889. ck zum Index 
  890.   Compiler-Begrenzungen: 
  891. Der Compiler erlegt Code und Daten die folgenden Gr
  892. enbegrenzungen auf: z
  893.  Eine String-Konstante darf 80 Zeichen
  894.    nicht 
  895. berschreiten. Dies ist auch die
  896.    Gr
  897. engrenze f
  898. r jeden Bezeichner.
  899.  Beim "HUGE"-Speichermodell erh
  900. lt jedes
  901.    Modul sein eigenes Datensegment, welches
  902.    bis zu 64k gro
  903.  sein kann. Im Datensegment
  904.    organisiert der Compiler alle globalen
  905.    Variablen des Moduls und einige seiner
  906.    Konstanten.
  907.  Beim "LARGE"-Speichermodell werden die
  908.    Daten aller Module beim Linken in ein
  909.    einziges Datensegment (maximal 64 kBytes)
  910.    gepackt.
  911.  Die maximale Gr
  912. e einer Datenstruktur
  913.    ist 65532 Bytes.
  914.  Die lokalen Variablen einer Prozedur d
  915. chstens 32000 Bytes Speicherplatz einnehmen.
  916.  Ein Parameter der durch "Call-by-value" einer
  917.    Prozedur 
  918. bergeben wird darf h
  919. chstens 65000
  920.    Bytes gro
  921.  sein.
  922.  Interne Grenzen des Compilers:
  923.  Die maximale Anzahl namentlich
  924.     verschiedener Variablen, die der
  925.     Compiler bei einem Lauf bew
  926. ltigen
  927.     kann, ist 2000. Diese Zahl kann
  928.     beim Aufruf des Compilers ge
  929. ndert
  930.     werden.
  931.  Die Gesamtzahl der Buchstaben in
  932.     den Variablennamen darf 12000
  933.     nicht 
  934. berschreiten. Diese Zahl
  935.     kann beim Aufruf des Compilers
  936.     ge
  937. ndert werden.
  938.  Eine einzige Prozedur kann nicht
  939.     mehr als 10k Objektcode umfassen.
  940.  Alle initialisierten Daten eines
  941.     Moduls sind in einem 8k gro
  942.     Feld organisiert. Dies bewirkt
  943.     eine Begrenzung der Gesamtzahl an
  944.     String-, Real- und Long-Konstanten
  945.     eines Moduls.
  946. Diese Ausgabe des Compilers 
  947. bersetzt Programme, die in der Sprache Modula-2 geschrieben sind, wie sie von Niklaus Wirth in der 3. Auflage seines Buches "Programming in Modula-2" definiert ist, mit folgenden Ausnahmen: O
  948.  Der arithmetische  
  949. berlauf von INTEGER
  950.    und CARDINAL bleibt unentdeckt.
  951.  ASM ist ein reservierter Bezeichner.
  952. r Programmierer, die in der "Hex-Welt"
  953.    aufgewachsen sind, gibt es eine M
  954. glichkeit,
  955.    CHAR-Literale ("Literal" = direkt im
  956.    Quelltext stehender Wert) hexadezimal zu
  957.    definieren: 20X entspricht dem
  958.    Leerzeichen ("space") in ASCII.
  959. Fitted-Modula-2 Version 2.0 besitzt zwei Bugs, die nicht tragisch sind, aber eine Abweichung zur Modula-Standardsyntax hervorrufen: V
  960.  Vor dem ersten Zweig einer CASE-
  961.    Verzweigung darf kein Pipezeichen (|) stehen:
  962.   CASE x OF
  963.    | 1: ...;
  964.    | 2: ...;
  965.    ist nicht zul
  966. ssig! Es mu
  967.   CASE x OF
  968.      1: ...;
  969.    | 2: ...;
  970.  Auch leere Prozeduren m
  971.    mit einem BEGIN anfangen:
  972.   PROCEDURE p;
  973.   BEGIN
  974.   END p;
  975.   Das in Modula-2 normalerweise erlaubte:
  976.   PROCEDURE p;
  977.   END p;
  978.   ist nicht zul
  979. ssig.
  980. Die fr
  981. heren Auflagen der Wirth'schen Sprachdefinition enthalten zus
  982. tzlich Ausdr
  983. cke wie EXPORT oder EXPORT QUALIFIED. Diese Bezeichener werden nicht unterst
  984. tzt, in der Regel f
  985. hren sie aber nicht zu Fehlermeldungen sondern werden ignoriert. 
  986. ck zum Index 
  987.   Rename 
  988. Mit Rename werden Dateien umbenannt oder vom einen zum anderen Verzeichnispfad verschoben. Q
  989. Rename ist mehrfach (mit unterschiedlichen Optionen und F
  990. higkeiten) definiert: =
  991.  Files.Rename
  992.  FileSystem.Rename
  993.  Directories.Rename
  994. ck zum Index oder zu Routinen 
  995.   Create 
  996. Legt eine neue Datei an: "
  997.  Files.Create
  998.  FileSystem.Create
  999. ck zum Index oder zu Routinen 
  1000.   WriteLine 
  1001.  Terminal.WriteLine
  1002.  InOut.WriteLine
  1003. identisch mit:  
  1004.  WriteString(string); WriteLn;
  1005. ck zum Index oder zu Routinen 
  1006.   SetFileTime 
  1007. Setzen des Datum und der Uhrzeit einer Datei. 3
  1008.  Files.SetFileTime
  1009.  Directories.SetFileTime
  1010. Siehe auch: GetFileTime. #
  1011. ck zum Index oder zu Routinen 
  1012.   GetFileTime 
  1013. Lesen von Erstellungsdatum und -uhrzeit einer Datei. -
  1014.  Files.GetFileTime
  1015.  Directories.GetFileTime
  1016. Siehe auch: SetFileTime. #
  1017. ck zum Index oder zu Routinen 
  1018.   WriteString 
  1019.  Prozeduren:
  1020.   InOut.WriteString
  1021.   Terminal.WriteString
  1022. ck zum Index oder zu Routinen 
  1023.   Write 
  1024.  Konstanten:
  1025.   Files.WRITE
  1026.  Prozeduren:
  1027.   Files.Write
  1028.   Display.Write
  1029.   Terminal.Write
  1030.   TermIO.Write
  1031.   InOut.Write
  1032.   TermBase.Write
  1033.  siehe auch:
  1034.   WriteChar, WriteWord und WriteNBytes;
  1035.  bei den verwandten Prozeduren:
  1036.   WriteLn, WriteString und WriteLine
  1037.  sowie der Komplement
  1038. rprozedur Read
  1039. ck zum Index oder zu Routinen 
  1040.   WriteChar 
  1041.  Schreibt ein Zeichen CHAR.
  1042.  Display.WriteChar
  1043.  FileSystem.WriteChar
  1044. ck zum Index oder zu Routinen, siehe auch Write. 
  1045.    KeyPressed 
  1046. berpr
  1047. fung, ob ein Zeichen im Tastaturpuffer liegt. 
  1048.  KeyBoard.KeyPressed
  1049.  TermBase.KeyPressed
  1050.  TermIO.KeyPressed
  1051.  Terminal.KeyPressed
  1052.   siehe auch: GetKey
  1053. ck zum Index oder zu Routinen 
  1054.   Goto 
  1055. Die Prozedur positioniert den Cursor auf dem Textbildschirm. =
  1056.  Display.Goto
  1057.  Terminal.Goto
  1058.  TermBase.Goto
  1059.  TermIO.Goto
  1060. Goto it KEINE Sprunganweisung innerhalb des Programmes auf ein Label! Dergleichen gibt es in Modula-2 nicht. &
  1061. siehe auch Display.SetCursorPosition #
  1062. ck zum Index oder zu Routinen 
  1063.   Close 
  1064. Die Prozedur schlie
  1065. t eine derzeit offene Datei. %
  1066.  Files.Close
  1067.  FileSystem.Close
  1068. ck zum Index oder zu Routinen 
  1069.   Read 
  1070. Liest ein Zeichen (CHAR). 
  1071.  Konstante:
  1072.  Files.READ
  1073.  Prozeduren:
  1074.  Files.Read
  1075.   TermBase.Read
  1076.  InOut.Read
  1077.   Terminal.Read
  1078.  TermIO.Read
  1079. Siehe auch bei den verwandten Prozeduren: a
  1080. ReadString, ReadLine, ReadInt, ReadCard, ReadWrd, ReadLongCard, ReadLongInt, ReadWord, ReadChar %
  1081. und der Komplement
  1082. rprozedur: Write #
  1083. ck zum Index oder zu Routinen 
  1084.   Length 
  1085. Die Prozedur gibt die L
  1086. nge einer Datei bzw. die L
  1087. nge einer Zeichenkette zur
  1088. ck. '
  1089.  Strings.Length
  1090.  FileSystem.Length
  1091. ck zum Index oder zu Routinen 
  1092.   WriteLn 
  1093. Die Prozedur f
  1094. hrt einen Zeilenvorschub durch. %
  1095.  Terminal.WriteLn
  1096.  InOut.WriteLn
  1097. Siehe auch WriteLine #
  1098. ck zum Index oder zu Routinen 
  1099.   ReadLine 
  1100.  Terminal.ReadLine
  1101.  InOut.ReadLine
  1102. Siehe auch: Read #
  1103. ck zum Index oder zu Routinen 
  1104.   Delete 
  1105.  Files.Delete
  1106.  Strings.Delete
  1107.  Directories.Delete
  1108. ck zum Index oder zu Routinen 
  1109.   MODULE SYSTEM (Laufzeitbibliothek) 
  1110. Das Pseudomodul SYSTEM ist nicht wie die anderen Standardmodule extern definiert. Allerdings stehen die Definitionen aus SYSTEM auch nur dann zur Verf
  1111. gung, wenn sie IMPORTed werden, obwohl es kein Definitionsmodul gibt. w
  1112. SYSTEM ist NICHT identisch mit der Standard-Unit "System". Es handelt sich um die DOS-spezifische Laufzeitbibliothek. :
  1113. In SYSTEM definierte reservierte Worte (Reserved words): 
  1114.   SEG, OFS, ASM, ASSEMBLER
  1115. In SYSTEM deklarierte Typen: 
  1116.   ADDRESS, BYTE, WORD
  1117. In SYSTEM deklarierte Prozeduren: 
  1118.   NEW       DISPOSE
  1119.   LONG      SHORT
  1120.   SEGMENT   OFFSET
  1121.   ADR       FLAT
  1122.   PTR       NEWPROCESS
  1123.   TRANSFER  IOTRANSFER
  1124.   TRUNC     FLOAT
  1125. ck zum Index oder zu Routinen 
  1126.   SYSTEM.SEG / .OFS 
  1127. SEG und OFS sind Komponenten des POINTER-Typs. Wenn diese importiert werden, kann in normaler Syntax auf den Segment- oder den Offset-Teil eines Zeigers zugegriffen werden. 
  1128. Beispiel: d
  1129.  pointer.SEG: Segment-Teil des Zeigers "pointer".
  1130.  pointer.OFS: Offset-Teil des Zeigers "pointer".
  1131. ck zum Pseudomodul SYSTEM 
  1132.   SYSTEM.ASM 
  1133. Das in Fitted-Modula-2 reservierte Wort "ASM" leitet eine Assembler-Anweisung ein. Jeder Bereich mit Inline-Assembler mu
  1134.  mit ASM / END eingeschlossen sein. T
  1135.  Beispiel:
  1136.   PROCEDURE AsmDemo;
  1137.   BEGIN
  1138.     ASM
  1139.       ....
  1140.     END;
  1141.   END AsmDemo;
  1142. Kommentare m
  1143. ssen Modula-
  1144. blich eingeklammert werden. Alle Assembler-Bezeichner m
  1145. ssen in Gro
  1146. buchstaben geschrieben sein. Der ASSEMBLER mu
  1147.  zuvor aus dem Pseudomodul SYSTEM importiert werden. 
  1148. ck zum Pseudomodul SYSTEM 
  1149.   "ASSEMBLER"-Befehl: 
  1150. Um den Inline-Assembler (ASM) verwenden zu k
  1151. nnen, mu
  1152.  vorher der Assembler mit:  
  1153.  FROM SYSTEM IMPORT ASSEMBLER;
  1154. importiert werden. 
  1155. ck zum Pseudomodul SYSTEM 
  1156.   TYPE SYSTEM.ADDRESS 
  1157. Der Typ ADDRESS ist zu allen Zeiger-Typen kompatibel. ADDRESS selbst ist als POINTER TO WORD definiert. 
  1158. In dieser Implementierung ist der Typ ADDRESS mit keinem arithmetischen Typ kompatibel. Das liegt an der Tatsache, da
  1159.  Prozessoren der Intel 8086-Serie Adressen in Segment-Offset-Darstellung benutzen. Es w
  1160. re nicht schwierig gewesen, eine automatische Umwandlung zwischen LONGCARD und ADDRESS zu implementieren. Wir glauben, da
  1161.  es dem Geist der Sprache widersprochen h
  1162. tte, wenn der Compiler irgendwelche "magischen"  Tricks durchf
  1163. hren w
  1164. rde. Stattdessen stehen zu diesem Zweck zwei Prozeduren zur Verf
  1165. gung: FLAT und PTR. ;
  1166. In der Version 1.2 haben wir diese Regel etwas gelockert: D
  1167. ADDRESS + CARDINAL und ADDRESS - CARDINAL sind erlaubte Ausdr
  1168. cke. m
  1169. Der CARDINAL-Wert wird mit dem Offset-Teil der Adresse verrechnet und das Ergebnis ist wieder eine Adresse. ?
  1170. Auch f
  1171. r INC und DEC ist ADDRESS als erstes Argument erlaubt. D
  1172. Die Operation wird nur auf dem Offset-Teil der Adresse ausgef
  1173. hrt! 
  1174. ck zum Pseudomodul SYSTEM 
  1175.   TYPE SYSTEM.BYTE 
  1176. 1 Byte Speicherbedarf. 1
  1177. r diesen Typ ist nur die Zuweisung definiert. 
  1178. Wenn der formale Parameter einer Prozedur vom Typ BYTE ist, darf der entsprechende aktuelle Parameter von einem beliebigen 1 Byte langen Typ sein. 
  1179. Wenn der formale Parameter einer Prozedur vom Typ ARRAY OF BYTE ist, dann darf der entsprechende aktuelle Parameter von beliebigem kompatiblen Typ sein. 
  1180. ck zum Pseudomodul SYSTEM 
  1181.   TYPE SYSTEM.WORD 
  1182. 1 Wort (2 Bytes) Speicherbedarf. 1
  1183. r diesen Typ ist nur die Zuweisung definiert. 
  1184. Wenn der formale Parameter einer Prozedur vom Typ WORD ist, dann darf der entsprechende aktuelle Parameter von einem beliebigen 1 Wort langen Typ sein. 
  1185. Wenn der formale Parameter einer Prozedur vom Typ ARRAY OF WORD ist, dann darf der aktuelle Parameter von beliebigem kompatiblen Typ sein. V
  1186. Vorsicht: Die Gr
  1187. e des 
  1188. bergebenen Parameters wird auf gerade Bytezahl aufgerundet! 
  1189. ck zum Pseudomodul SYSTEM 
  1190.   SYSTEM.NEW und SYSTEM.DISPOSE  
  1191. NEW und DISPOSE sind in der Sprach-Definition der 3. Auflage von Wirths Buch nicht mehr enthalten. 9
  1192. Wir haben sie auf folgende Art und Weise implementiert:     
  1193.  NEW(p)
  1194. ruft die Prozedur Storage.ALLOCATE auf, die dem Typ entsprechen mu
  1195.  PROCEDURE (VAR ADDRESS, CARDINAL)
  1196. mit der 
  1197. bergabe des Zeigers p und der Gr
  1198. e des Objekts auf p. 
  1199.  DISPOSE(p)
  1200. ruft die Prozedur Storage.DEALLOCATE auf, die dem Typ entsprechen mu
  1201.  PROCEDURE (VAR ADDRESS, CARDINAL)
  1202. mit der 
  1203. bergabe des Zeigers p und der Gr
  1204. e des Objekts auf p. 
  1205. Die Prozeduren ALLOCATE und DISPOSE m
  1206. ssen also in einem Modul welches NEW und/oder DISPOSE benutzt, definiert werden, oder von einem anderen Modul (z.B. Storage) importiert werden.  
  1207. ck zum Pseudomodul SYSTEM 
  1208.   SYSTEM.LONG  
  1209.  PROCEDURE LONG(INTEGER):  LONGINT;
  1210.  PROCEDURE LONG(CARDINAL): LONGCARD;
  1211.  PROCEDURE LONG(REAL):     LONGREAL;
  1212. LONG wandelt von INTEGER, CARDINAL oder REAL nach LONGINT, LONGCARD oder LONGREAL,um. 
  1213. Siehe auch: SHORT. 
  1214. ck zum Pseudomodul SYSTEM 
  1215.   SYSTEM.SHORT 
  1216.  PROCEDURE SHORT(LONGINT):  INTEGER;
  1217.  PROCEDURE SHORT(LONGCARD): CARDINAL;
  1218.  PROCEDURE SHORT(LONGREAL): REAL;
  1219. SHORT wandelt von LONGINT, LONGCARD oder LONGREAL nach INTEGER, CARDINAL oder REAL um. 
  1220. Siehe auch: LONG. 
  1221. ck zum Pseudomodul SYSTEM 
  1222.   SYSTEM.ADR 
  1223.  PROCEDURE ADR(VAR adr: ADDRESS);
  1224. ADR(Bezeichner) gibt die Adresse des Objekts "Bezeichner" aus (Typ ADDRESS). 
  1225. ck zum Pseudomodul SYSTEM 
  1226.   SYSTEM.FLAT 
  1227.  PROCEDURE FLAT(VAR adr: LONGCARD);
  1228. FLAT(ADDRESS) gibt eine unsegmentierte Adresse aus (LONGCARD). 
  1229. ck zum Pseudomodul SYSTEM 
  1230.   SYSTEM.PTR 
  1231.  PROCEDURE PTR(adr: LONGCARD);
  1232. PTR gibt die der unsegmentierten Adresse (LONGCARD) entsprechende Adresse in Segment-Offset-Darstellung (ADDRESS) aus. 
  1233. ck zum Pseudomodul SYSTEM 
  1234.   SYSTEM.NEWPROCESS 
  1235.  PROCEDURE NEWPROCESS(p: PROC;
  1236.                       a: ADDRESS;
  1237.                       n: CARDINAL;
  1238.                  VAR p1: ADDRESS);
  1239. 2NEWPROCESS erzeugt einen neuen Proze
  1240. , dessen Startpunkt p ist und dessen n Bytes gro
  1241. er Arbeitsspeicher bei a beginnt. p1 ist der neue Proze
  1242. -Zeiger. Dieser Proze
  1243.  ist nicht aktiviert bis ein SYSTEM.TRANSFER zu p1 vorgenommen wird. `
  1244. Die Start-Priorit
  1245. t des neuen Prozesses ist die aktuelle Priorit
  1246. t beim Aufruf von NEWPROCESS. 
  1247. ck zum Pseudomodul SYSTEM 
  1248.    SYSTEM.TRANSFER 
  1249.  PROCEDURE TRANSFER(VAR p1, p2: ADDRESS);
  1250. TRANSFER setzt den laufenden Proze
  1251. er Kraft, weist ihn p1 zu und nimmt p2 auf. Der Wert vom laufenden Proze
  1252.  wird p1 erst zugewiesen, nachdem p2 identifiziert wurde; daher kann f
  1253. r p1 und p2 die gleiche Variable verwendet werden. `
  1254. Der Proze
  1255.  wird mit der gleichen Priorit
  1256. t wieder aufgenommen, die er beim Suspendieren hatte. 
  1257. ck zum Pseudomodul SYSTEM 
  1258.   SYSTEM.IOTRANSFER 
  1259.  PROCEDURE IOTRANSFER(VAR p1,
  1260.                           p2: ADDRESS;
  1261.                    intVector: CARDINAL);
  1262. IOTRANSFER nimmt einen TRANSFER von p1 zu p2 vor. Ebenso wie es SYSTEM.TRANSFER tut, nachdem der laufende Proze
  1263.  zur Reaktivierung vorbereitet wurde, die geschieht wenn 
  1264. ber den Interrupt-Vektor "intVector" ein Interrupt ausgel
  1265. st wird. Wenn der Interrupt durchgef
  1266. hrt wird, wird der Interrupt-Vektor mit seinem vorherigen Wert geladen und ein TRANSFER zum I/O-Proze
  1267.  (derjenige welcher den IOTRANSFER ausf
  1268. hrte) wird durchgef
  1269. hrt. Anschlie
  1270. end besitzt p2 den Wert des Prozesses, der lief, als der Interrupt auftrat. 
  1271. ck zum Pseudomodul SYSTEM 
  1272.   SYSTEM.TRUNC 
  1273.  PROCEDURE TRUNC(REAL):     CARDINAL;
  1274.  PROCEDURE TRUNC(LONGREAL): LONGCARD;
  1275. Die TRUNC- und FLOAT-Prozeduren dienen zur Umwandlung zwischen den zwei Integer/Cardinal-Typen und Real-Typen. 
  1276. ck zum Pseudomodul SYSTEM 
  1277.   SYSTEM.FLOAT 
  1278.  PROCEDURE FLOAT(CARDINAL): REAL;
  1279.  PROCEDURE FLOAT(LONGCARD): LONGREAL;
  1280. Die TRUNC- und FLOAT-Prozeduren dienen zur Umwandlung zwischen den zwei Integer/Cardinal-Typen und Real-Typen. 
  1281. ck zum Pseudomodul SYSTEM 
  1282.   SYSTEM.SEGMENT 
  1283.  PROCEDURE SEGMENT(adr: ADDRESS):
  1284.                         CARDINAL;
  1285. SEGMENT(Bezeichner) gibt den Segmentteil der Adresse des Objekts "Bezeichner"aus. 
  1286. Beispiel: 
  1287.  DX := SEGMENT(buffer);
  1288. weist DX den Segment-Wert von ADR(buffer) zu. 
  1289. ck zum Pseudomodul SYSTEM 
  1290.   SYSTEM.OFFSET 
  1291.  PROCEDURE OFFSET(adr: ADDRESS):
  1292.                        CARDINAL;
  1293. OFFSET(Bezeichner) gibt den Offsetteil der Adresse des Objekts "Bezeichner" aus. 
  1294. ck zum Pseudomodul SYSTEM 
  1295.   MODULE System 
  1296. Dieses Modul enth
  1297. lt systemspezifische Definitionen. Diese Version ist f
  1298. r MS/PC-DOS ab Version 2.0. w
  1299.   Definierte Typen:
  1300.  TYPE
  1301.    ErrorProc = PROCEDURE(CARDINAL,
  1302.                          ADDRESS);
  1303.    MemoryModel = (tiny,
  1304.                   small,
  1305.                   compact,
  1306.                   medium,
  1307.                   large,
  1308.                   huge);
  1309. Unterst
  1310. tzt werden z. Zt. nur "large" und "huge". G
  1311.  In "System" definierte Variablen:
  1312.   MemModel:    MemoryModel;
  1313.   DOSVersion:  CARDINAL;
  1314.   PSP:         CARDINAL;
  1315.   MemTop:      CARDINAL;
  1316.   HeapBase:    CARDINAL;
  1317.   StackSeg:    CARDINAL;
  1318.   StackSize:   CARDINAL;
  1319.   HeapTop:     CARDINAL;
  1320.   Has8087:     BOOLEAN;
  1321.   AX, BX, CX,
  1322.   DX, SI, DI:  CARDINAL;
  1323.   BP, DS, ES:  CARDINAL;
  1324.   FLAGS:       BITSET;
  1325.  Definierte Konstanten:
  1326.  CONST
  1327.   carryFlag = 0; zeroFlag = 6;
  1328.  Definierte Prozeduren:
  1329.   GetArg        GetEnv
  1330.   Trap          XTrap
  1331.   Move          TermProcedure
  1332.   Terminate     GetVector
  1333.   SetVector     ResetVector
  1334.   InstallRTErrorHandler
  1335.   UninstallRTErrorHandler
  1336. ck zum Index oder zu Routinen, Ende mit ESC "
  1337.   VAR System.DOSVersion: CARDINAL 
  1338. Die beim Start der Laufzeitbibliothek belegte Variable liefert die verwendete DOS-Version * 100 zur
  1339. ck: D
  1340.  z.B.:
  1341. r DOS 2.10: 210
  1342. r DOS 3.30: 330
  1343. r DOS 5.00: 500
  1344. ck zum Modul System 
  1345.   VAR System.PSP: CARDINAL 
  1346. Gibt das PSP (Programm-Segment-Prefix) in Paragraphen zur
  1347. ck zum Modul System 
  1348.   VAR System.MemTop: CARDINAL 
  1349. Gibt das Ende des Speichers (MemTop) in Paragraphen zur
  1350. ck zum Modul System 
  1351.   VAR System.HeapBase: CARDINAL 
  1352. Gibt den Beginn des Heap in Paragraphen zur
  1353. ck zum Modul System 
  1354.   VAR System.StackSeg: CARDINAL 
  1355. Gibt die Adresse des Stack-Segments in Paragraphen zur
  1356. ck zum Modul System 
  1357.   VAR System.StackSize: CARDINAL 
  1358. Liefert die Gr
  1359. e des Stacksegments (vorbelegter Stack-Pointer (SP-Register)) zur
  1360. ck zum Modul System 
  1361.   VAR System.HeapTop: CARDINAL 
  1362. Liefert das Ende des Heaps in Paragraphen. Das Modul Storage kann diesen Wert anpassen. 
  1363. ck zum Modul System 
  1364.   CPU-Register: 
  1365. Registervariablen aus dem Modul System: h
  1366.  AX, BX, CX, DX, SI, DI: CARDINAL;
  1367.  BP, DS, ES            : CARDINAL;
  1368.  FLAGS                 : BITSET;
  1369. ck zum Modul System 
  1370.   System.carryFlag / .zeroFlag
  1371.  CPU-Flags.
  1372. ck zum Modul System 
  1373.   System.ErrorProc 
  1374.  TYPE
  1375.   ErrorProc = PROCEDURE(CARDINAL,
  1376.                         ADDRESS);
  1377. Setzt einen Zeiger auf eine benutzerdefinierte Fehlerbehandlungsroutine. Im Fall eines Laufzeitfehlers werden die Fehlernummer und die Fehleradresse geliefert. (
  1378.  siehe auch:
  1379.   Standard-Fehlerroutinen
  1380. Die Fehleradresse kann mit der Adresse in der durch DBG2MAP erzeugten .MAP-Datei wie folgt verkn
  1381. pft werden: !
  1382.   a.SEG := a.SEG - (PSP + 10H);
  1383. Nach der R
  1384. ckkehr aus der benutzerdefinierten Fehlerroutine wird zur Standard-Fehlerroutine verzweigt und hiermit das Programm abgebrochen. 
  1385. ck zum Modul System 
  1386.   System.GetArg  
  1387.  PROCEDURE GetArg(VAR arg: ARRAY OF CHAR;
  1388.                VAR length: CARDINAL );
  1389. Liefert das n
  1390. chste Argument in der Kommandozeile. #
  1391. 1. Leerzeichen trennen Argumente. 0
  1392. 2. "/" leitet ein neues Argument ein (Option). ^
  1393. 3. Um die obigen Voreinstellung zu 
  1394. berschreiben, kann ein Modula-2-String angegeben werden. @
  1395.  Beispiel:
  1396.   COMMAND arg1 "arg 2" /option "command's last arg"
  1397. ck zum Modul System 
  1398.   System.GetEnv 
  1399.  PROCEDURE GetEnv(var: ARRAY OF CHAR;
  1400.               VAR val: ARRAY OF CHAR);
  1401. dt "val" mit dem Wert der Environmentvariable "var".  Wenn "var" nicht gefunden wird, wird ein Null-String in "val" zur
  1402. ckgeliefert. 
  1403. ck zum Modul System 
  1404.   System.Trap 
  1405.  PROCEDURE Trap(intno: CARDINAL);
  1406. dt die CPU-Register mit den Inhalten von AX..DI und f
  1407. hrt dann den angegebenen Softwareinterrupt "intno" aus. Bei der R
  1408. ckkehr vom Interrupt werden die Register in AX..DI und die Prozessorflags in FLAGS gesichert. 
  1409. siehe auch XTrap 
  1410. ck zum Modul System 
  1411.   System.XTrap 
  1412.  PROCEDURE XTrap(intno: CARDINAL);
  1413. dt die CPU-Register mit den Inhalten von AX..ES und f
  1414. hrt dann den angegebenen Softwareinterrupt "intno" aus. i
  1415. Bei der R
  1416. ckkehr vom Interrupt werden die Register in AX..ES und die Prozessorflags in FLAGS gesichert. 
  1417. siehe auch Trap 
  1418. ck zum Modul System 
  1419.   System.Move 
  1420.  PROCEDURE Move(src: ADDRESS;
  1421.                dest: ADDRESS;
  1422.                size: CARDINAL );
  1423. Bewegt "size" Bytes von "src" nach "dest".  Der Pseudocode hierf
  1424. r sieht folgenderma
  1425. en aus: 
  1426.  IF FLAT(src) > FLAT(dest) THEN
  1427.    (bewege von der niedrigen zur hohen Adresse)
  1428.  ELSE
  1429.    (bewege von der hohen zur niedrigen Adresse)
  1430. ck zum Modul System 
  1431.   System.TermProcedure 
  1432.  PROCEDURE TermProcedure(p :PROC);
  1433. Installiert eine Prozedur, die ausgef
  1434. hrt wird, wenn das Programm beendet wird. Es k
  1435. nnen bis zu 20 Ende-Prozeduren installiert werden. 
  1436. ck zum Modul System 
  1437.   System.Terminate 
  1438.  PROCEDURE Terminate(exitStatus: CARDINAL);
  1439. Die Prozedur unterbricht die Programmausf
  1440. hrung und setzt das DOS-Errorlevel auf "exitStatus". 
  1441. ck zum Modul System 
  1442.   System.GetVector 
  1443.  PROCEDURE GetVector(IntNum: CARDINAL;
  1444.                     VAR ISR: ADDRESS);
  1445. Die Prozedur l
  1446. dt den Wert des Interruptvectors "IntNum" aus dem BIOS-Interruptbereich in die Variable "ISR". 
  1447. Siehe auch SetVector. 
  1448. ck zum Modul System 
  1449.   System.SetVector 
  1450.  PROCEDURE SetVector(IntNum: CARDINAL;
  1451.                         ISR: PROC);
  1452. Installiert eine Interrupt-Subroutine (ISR), die dann aufgerufen wird, wenn der Interrupt "IntNum" ausgef
  1453. hrt werden soll. Die in der Interrupt-Vektor geladene Adresse ist die Startadresse der ISR-Prozedur, bei der der vom Compiler generierte Prozedur-Eintrittscode ausgelassen wird. Die Interrupt-Subroutine mu
  1454.  mit abgeschalteter Stack
  1455. berpr
  1456. fung (*$S-*) compiliert werden, da der Compiler bei eingeschalteter Stack-
  1457. berpr
  1458. fung Assembleranweisungen erzeugt, die den Stackpointer manipulieren. 
  1459. Siehe auch GetVector. 
  1460. ck zum Modul System 
  1461.   System.ResetVector 
  1462.  PROCEDURE ResetVector(IntNum: CARDINAL;
  1463.                           ISR: ADDRESS);
  1464. dt den Wert des Interruptvektor "IntNum" in die Interrupt-Subroutine (ISR). 
  1465. ck zum Modul System 
  1466.   System.InstallRTErrorHandler 
  1467.  PROCEDURE InstallRTErrorHandler(errorProc:
  1468.                                  ErrorProc);
  1469. Installiert die Fehlerbehandlungsroutine, die dann aufgerufen wird, wenn ein Laufzeitfehler auftritt. Es k
  1470. nnen bis zu zehn Fehlerbehandlungsroutinen installiert werden.  Es wird jedoch nur die zuletzt installierte im Falle eines Laufzeitfehlers ausgef
  1471. hrt. 
  1472. ck zum Modul System 
  1473.   System.UnInstallRTErrorHandler 
  1474.  PROCEDURE UninstallRTErrorHandler;
  1475. Deinstalliert die zuletzt mit InstallRTErrorHandler installierte Fehlerprozedur "errorProc". 
  1476. ck zum Modul System 
  1477.   System.ErrorMessage 
  1478.  PROCEDURE ErrorMessage(msg: ARRAY OF CHAR);
  1479. Schreibt die Meldung msg an die Standard-Fehlerausgabe StdErr. 
  1480. ck zum Modul System 
  1481.   System.ErrorErrorLn 
  1482.  PROCEDURE ErrorLn;
  1483. Schreibt eine neue Zeile an die Standard-Fehlerausgabe StdErr. 
  1484. ck zum Modul System 
  1485.   MODULE ASCII 
  1486. Die Werte f
  1487. r ASCII-Zeichen m
  1488. ssen in Modula oktal angegeben werden. Alle Zeichen unter 32 sowie das Zeichen 127 (Backspace) sind, da sie normalerweise nicht direkt geschrieben werden k
  1489. nnen, im Modul ASCII vordefiniert: 
  1490. Standard ASCII-Steuerzeichen: 
  1491. NUL  =  00C 
  1492. SOH  =  01C 
  1493. STX  =  02C 
  1494. ETX  =  03C 
  1495. EOT  =  04C 
  1496. ENQ  =  05C 
  1497. ACK  =  06C 
  1498. BEL  =  07C 
  1499.  BS  =  10C 
  1500.  HT  =  11C 
  1501.  LF  =  12C 
  1502.  VT  =  13C 
  1503.  FF  =  14C 
  1504.  CR  =  15C 
  1505.  SO  =  16C 
  1506.  SI  =  17C 
  1507. DLE  =  20C 
  1508. DC1  =  21C 
  1509. DC2  =  22C 
  1510. DC3  =  23C 
  1511. DC4  =  24C 
  1512. NAK  =  25C 
  1513. SYN  =  26C 
  1514. ETB  =  27C 
  1515. CAN  =  30C 
  1516.  EM  =  31C 
  1517. SUB  =  32C 
  1518. ESC  =  33C 
  1519.  FS  =  34C 
  1520.  GS  =  35C 
  1521.  RS  =  36C 
  1522.  US  =  37C 
  1523. DEL  = 177C 
  1524.                  
  1525. Was die Steuerzeichenkombinationen erzeugen: 
  1526.  CtrlA = 01C 
  1527.  CtrlB = 02C 
  1528.  CtrlC = 03C 
  1529.  CtrlD = 04C 
  1530.  CtrlE = 05C 
  1531.  CtrlF = 06C 
  1532.  CtrlG = 07C 
  1533.  CtrlH = 10C 
  1534.  CtrlI = 11C 
  1535.  CtrlJ = 12C 
  1536.  CtrlK = 13C 
  1537.  CtrlL = 14C 
  1538.  CtrlM = 15C 
  1539.  CtrlN = 16C 
  1540.  CtrlO = 17C 
  1541.  CtrlP = 20C 
  1542.  CtrlQ = 21C 
  1543.  CtrlR = 22C 
  1544.  CtrlS = 23C 
  1545.  CtrlT = 24C 
  1546.  CtrlU = 25C 
  1547.  CtrlV = 26C 
  1548.  CtrlW = 27C 
  1549.  CtrlX = 30C 
  1550.  CtrlY = 31C 
  1551.  CtrlZ = 32C 
  1552.              
  1553. Modula-2 Zeilenende-Zeichen: 
  1554.   EOL = 36C;
  1555. Modula-2 Textdatei-Endezeichen: 
  1556.   EOF = CtrlZ;
  1557. ck zum Index, Ende mit ESC 
  1558.   MODULE InOut 
  1559. Dies ist das Standardmodul InOut, wie es in dem Buch "Programming in Modula-2" von Niklaus Wirth definiert wurde. Einige Erweiterungen wurden eingebaut, haupts
  1560. chlich zur Unterst
  1561. tzung der Datentypen LONGINT und LONGCARD. 
  1562.  CONST
  1563.    EOL   = 36C;
  1564.    Done  : BOOLEAN;
  1565.    termCH: CHAR;
  1566.   definierte Prozeduren:
  1567.    OpenInput        OpenOutPut
  1568.    RedirectInput    RedirectOutput
  1569.    CloseInput       CloseOutput
  1570.    ReadString       Read
  1571.    ReadInt          ReadLine
  1572.    ReadWrd          Write
  1573.    ReadCard         WriteLn
  1574.    WriteInt         WriteLine
  1575.    WriteCard        WriteString
  1576.    WriteOct         WriteHex
  1577.    WriteWrd         ReadLongInt
  1578.    ReadLongCard     WriteLongInt
  1579.    WriteLongCard
  1580. ck zum Index, Ende mit ESC 
  1581.   InOut.EOL
  1582.   CONST
  1583.     EOL = 36C;
  1584. Zeilenende-Kennung 
  1585. ck zum Modul InOut 
  1586.   InOut.Done
  1587.    Done  : BOOLEAN;
  1588. "Done" wird von den Prozeduren OpenInput, OpenOutput, RedirectInput, RedirectOutput, Read, ReadInt, ReadCard, ReadLongInt, ReadLongCard, ReadWrd und WriteWrd gesetzt, um anzeigen, ob der Aufruf der Prozedur erfolgreich war. 
  1589. ck zum Modul InOut 
  1590.   InOut.termCH
  1591.   VAR
  1592.     termCH: CHAR;
  1593. In dieser (globalen) Variable wird das letzte gelesene Zeichen der Leseprozeduren (ReadXXXX) des Moduls InOut gespeichert. 
  1594. ck zum Modul InOut 
  1595.   InOut.OpenInput 
  1596.  PROCEDURE OpenInput(defext: ARRAY OF CHAR);
  1597. Fragt den Benutzer nach einer Datei f
  1598. r die Eingabeumleitung. Wenn das letzte Zeichen der Eingabe ein Punkt ist, wird "defext" (default Extension) an den Dateinamen angeh
  1599. ngt. 
  1600. ck zum Modul InOut 
  1601.   InOut.OpenOutput 
  1602.  PROCEDURE OpenOutput(defext :ARRAY OF CHAR);
  1603. Fragt den Benutzer nach einer Datei, in die die Ausgaben umzuleiten sind. Falls das letzte Zeichen der Eingabe ein Punkt ist, wird "defext" (default Extension) an den Dateinamen angeh
  1604. ngt. 
  1605. ck zum Modul InOut 
  1606.   InOut.RedirectInput 
  1607.  PROCEDURE RedirectInput(from: ARRAY OF CHAR);
  1608. Leitet die Eingabe aus der Datei "from" um. 
  1609. ck zum Modul InOut 
  1610.   InOut.RedirectOutput 
  1611.  PROCEDURE RedirectOutput(to: ARRAY OF CHAR);
  1612. Leitet alle Ausgaben in die Datei "to" um. 
  1613. ck zum Modul InOut 
  1614.   InOut.CloseInput 
  1615.  PROCEDURE CloseInput;
  1616. Die mit OpenInput oder RedirectInput ge
  1617. ffnete Datei wird geschlossen und das Terminal als Eingabeger
  1618. t wieder aktiviert. 
  1619. ck zum Modul InOut 
  1620.   InOut.CloseOutput 
  1621.  PROCEDURE CloseOutput;
  1622. Die mit OpenOutPut oder RedirectOutput ge
  1623. ffnete Datei wird geschlossen und das Terminal als Ausgabeger
  1624. t wieder aktiviert. 
  1625. ck zum Modul InOut 
  1626.   InOut.Read 
  1627.  PROCEDURE Read(VAR ch: CHAR);
  1628. Liest ein Zeichen aus der Standard-Eingabe. 1
  1629. ck zum Modul InOut oder zur Read-
  1630. bersicht. 
  1631.   InOut.ReadString 
  1632.  PROCEDURE ReadString(VAR s: ARRAY OF CHAR);
  1633. Liest eine Zeichenkette. 
  1634. Die Eingabe wird durch ein Leerzeichen oder jedes beliebige Steuerzeichen mit Ausnahme von ASCII.BS oder ASCII.DEL beendet. Das letzte (beendende) Zeichen wird in der Variablen InOut.termCH gespeichert. Wenn vom Terminal gelesen wird, sind folgende Editierm
  1635. glichkeiten gegeben: %
  1636. ASCII.BS  l
  1637. scht das letzte Zeichen &
  1638. ASCII.DEL l
  1639. scht die gesamte Eingabe K
  1640. ASCII.ESC l
  1641. scht die gesamte Eingabe und beendet die Funktion mit RETURN. 
  1642. ck zum Modul InOut 
  1643.   InOut.ReadLine 
  1644.  PROCEDURE ReadLine(VAR s: ARRAY OF CHAR);
  1645. Liest eine Zeile "s" aus der Standardeingabe. Die Eingabe wird durch EOL, EOF oder ESC beendet bzw. abgebrochen. Das letzte (beendende) Zeichen wird in der Variablen InOut.termCH gespeichert. M
  1646. Wenn vom Terminal gelesen wird, sind folgende Editierm
  1647. glichkeiten gegeben: %
  1648. ASCII.BS  l
  1649. scht das letzte Zeichen &
  1650. ASCII.DEL l
  1651. scht die gesamte Eingabe K
  1652. ASCII.ESC l
  1653. scht die gesamte Eingabe und beendet die Funktion mit RETURN. 5
  1654. ck zum Modul InOut oder zur ReadLine-
  1655. bersicht. 
  1656.   InOut.ReadInt 
  1657.  PROCEDURE ReadInt(VAR x: INTEGER);
  1658. Ein Zeichenfeld wird aus dem Eingabeger
  1659. t gelesen und dann in eine INTEGER-Zahl umgewandelt. 
  1660. ck zum Modul InOut 
  1661.   InOut.ReadCard 
  1662.  PROCEDURE ReadCard(VAR x: CARDINAL);
  1663. Eine Zeichenkette wird aus dem Eingabeger
  1664. t gelesen und dann in eine CARDINAL-Zahl konvertiert. 
  1665. ck zum Modul InOut 
  1666.   InOut.ReadWrd 
  1667.  PROCEDURE ReadWrd(VAR w: WORD);
  1668. Liest ein WORD aus der Eingabe-Datei. 
  1669.  Achtung:
  1670. ReadWrd ist nur dann erlaubt, wenn die Eingabe aus einer Datei umgeleitet wird! 
  1671. ck zum Modul InOut 
  1672.   InOut.Write 
  1673.  PROCEDURE Write(ch: CHAR);
  1674. Schreibt ein Zeichen an die Standardausgabe. 2
  1675. ck zum Modul InOut oder zur Write-
  1676. bersicht. 
  1677.   InOut.WriteLn 
  1678.  PROCEDURE WriteLn;
  1679. Identisch zu Write (ASCII.EOL). Schreibt einen Zeilenumbruch. 4
  1680. ck zum Modul InOut oder zur WriteLn-
  1681. bersicht. 
  1682.   InOut.WriteString 
  1683.  PROCEDURE WriteString(s: ARRAY OF CHAR);
  1684. Schreibt die Zeichenkette "s" in die Standardausgabe. 8
  1685. ck zum Modul InOut oder zur WriteString-
  1686. bersicht. 
  1687.   InOut.WriteInt 
  1688.  PROCEDURE WriteInt(x: INTEGER; n: CARDINAL);
  1689. Schreibt die INTEGER-Zahl "x" rechtsb
  1690. ndig in ein Feld mit "n" Zeichen. 
  1691. ck zum Modul InOut 
  1692.   InOut.WriteCard 
  1693.  PROCEDURE WriteCard(x, n: CARDINAL);
  1694. Schreibt die CARDINAL-Zahl "x" rechtsb
  1695. ndig in ein Feld mit "n" Zeichen. 
  1696. ck zum Modul InOut 
  1697.   InOut.WriteOct 
  1698.  PROCEDURE WriteOct(x, n: CARDINAL);
  1699. Schreibt "x" in oktaler Form in ein rechtsb
  1700. ndiges Feld von mindestens "n" Zeichen. U
  1701. Wenn (n <= 3) und (x < 100H) dann werden drei, ansonsten sechs Zeichen geschrieben. 
  1702. ck zum Modul InOut 
  1703.   InOut.WriteHex 
  1704.  PROCEDURE WriteHex(x, n: CARDINAL);
  1705. Schreibt "x" in hexadezimaler Form in ein rechtsb
  1706. ndiges Feld von mindestens "n" Zeichen. T
  1707. Wenn (n <= 2) und (x < 100H) dann werden zwei, ansonsten vier Zeichen geschrieben. 
  1708. ck zum Modul InOut 
  1709.   InOut.WriteWrd 
  1710.  PROCEDURE WriteWrd(w: WORD);
  1711. Schreibt "w" in die Ausgabedatei. U
  1712. Die Operation ist nur dann erlaubt, wenn die Ausgabe in eine Datei umgeleitet wird. 
  1713. ck zum Modul InOut 
  1714.   InOut.ReadLongInt 
  1715.  PROCEDURE ReadLongInt(VAR x: LONGINT);
  1716. Eine Zeichenkette wird aus dem Eingabeger
  1717. t gelesen und dann in eine LONGINT-Zahl umgewandelt. 
  1718. ck zum Modul InOut 
  1719.   InOut.ReadLongCard 
  1720.  PROCEDURE ReadLongCard(VAR x: LONGCARD);
  1721. Eine Zeichenkette wird aus dem Eingabeger
  1722. t gelesen und dann in eine LONGCARD-Zahl umgewandelt. 
  1723. ck zum Modul InOut 
  1724.   InOut.ReadLongInt 
  1725.  PROCEDURE WriteLongInt(x: LONGINT; n: CARDINAL);
  1726. Schreibt die LONGINT-Zahl "x" rechtsb
  1727. ndig in ein Feld von mindestens "n" Zeichen. 
  1728. ck zum Modul InOut 
  1729.   InOut.WriteLongCard 
  1730.  PROCEDURE WriteLongCard(x: LONGCARD; n: CARDINAL);
  1731. Schreibt die LONGCARD-Zahl "x" rechtsb
  1732. ndig in ein Feld von mindestens "n" Zeichen. 
  1733. ck zum Modul InOut 
  1734.   InOut.WriteLine 
  1735.  PROCEDURE WriteLine(s: ARRAY OF CHAR);
  1736.  identisch mit:
  1737.    WriteString(s); WriteLn;
  1738. ck zum Modul InOut oder zur WriteLine-
  1739. bersicht. 
  1740.   MODULE LongJump 
  1741. SetJump sichert die Umgebung des Vaterprozesses in dem 
  1742. bergebenen Parameter und gibt 0 zur
  1743. LongJump stellt die gesicherte Umgebung eines vorherigen SetJump wieder her. Die Ausf
  1744. hrung wird als R
  1745. ckgabe (RETURN) von SetJump wieder aufgenommen. Der R
  1746. ckgabewert wird SetJump untergeschoben. _
  1747. Logischerweise darf der Zeiger auf die zur
  1748. ckgelieferten Parameter nicht NIL (RETURN 0) sein. x
  1749. Wenn LongJump aufgerufen wird, mu
  1750.  die Prozedur, die den korrespondierenden SetJump durchgef
  1751. hrt hat, noch aktiv sein. 
  1752.  Beispiel:
  1753.   PROCEDURE main;
  1754.    ...
  1755.    IF SetJump(env) = 0 THEN
  1756.      Parse
  1757.    ELSE
  1758.      WriteString("error in Parse")
  1759.    END;
  1760.    ...
  1761.   PROCEDURE Parse;
  1762.    ...
  1763.    IF errorcond THEN
  1764.      LongJump(env, 1)
  1765.    END;
  1766.    ...
  1767. Die Prozedur "main" ruft SetJump auf, um die aktuelle Ausf
  1768. hrungsumf
  1769. hrung in "env" zu sichern. SetJump liefert 0 zur
  1770. ck und anschlie
  1771. end wird "Parse" aufgerufen. 
  1772. Falls Parse einen Fehler entdeckt, ruft die Prozedur LongJump mit einem R
  1773. ckgabewert von 1. Die Hauptprozedur "main" wird am R
  1774. ckgabe-Punkt von SetJump fortgesetzt, die IF-Bedingung Abfrage wird FALSE und der String ausgegeben. 
  1775.  ------------------------
  1776.  deklarierter Typ:
  1777.    JumpBuffer
  1778.  deklarierte Prozeduren:
  1779.    SetJump    LongJump
  1780. ck zum Index oder zu Routinen, Ende mit ESC 
  1781.   LongJump.JumpBuffer
  1782.  TYPE
  1783.    JumpBuffer = RECORD
  1784.      savPC, savCS,
  1785.      savSP, savBP: CARDINAL;
  1786.    END;
  1787. Globale Pufferung der Routinen des Moduls LongJump. 
  1788. ck zum Modul LongJump 
  1789.   LongJump.SetJump 
  1790.  PROCEDURE SetJump(VAR mark: JumpBuffer):
  1791.                              CARDINAL;
  1792. Sichert die Umgebung des aktuellen Vaterprozesses in "MARK". Es wird 0 zur
  1793. ckgegeben. 
  1794. ck zum Modul LongJump 
  1795.   LongJump.LongJump  
  1796.  PROCEDURE LongJump(VAR mark: JumpBuffer;
  1797.                       return: CARDINAL);
  1798. Restauriert die in "mark" gesicherte Proze
  1799. umgebung und kehrt von SetJump mit dem R
  1800. ckgabewert "return" zur
  1801. ck zum Modul LongJump 
  1802.   MODULE FileSystem 
  1803. Dieses Modul enth
  1804. lt die Dateiroutinen wie sie Niklaus Wirth in seinem Buch "Programming in Modula-2" beschrieben hat. Alle Prozeduren setzen File.res auf "done" wenn der Aufruf erfolgreich war; sonst wird File.res auf "notdone" gesetzt. File.eof ist TRUE nachdem eine neue Datei erzeugt wurde oder wenn eine Leseoperation (Read????) aufgerufen wurde und keine weiteren Daten zur Verf
  1805. gung stehen. &
  1806.  TYPE
  1807.     FDPtr;  (* Nur f
  1808. r internen Gebrauch *)
  1809.     Response = (done, notdone);
  1810.     IOMode   = (read, write, io);
  1811.     File = RECORD
  1812.         id:    INTEGER;
  1813.         res:   Response;
  1814.         eof:   BOOLEAN;
  1815.         mode:  IOMode;
  1816.         fdptr: FDPtr; (* Nur f
  1817. r internen Gebrauch *)
  1818.     END;
  1819.  deklarierte Prozeduren:
  1820.   LookUp      Create
  1821.   Reset       Close
  1822.   Rewrite     Rename
  1823.   ReadWord    WriteWord
  1824.   ReadChar    WriteChar
  1825.   GetPos      SetPos
  1826.   GetLPos     SetLPos
  1827.   LLength     Length
  1828.   ReadNBytes  WriteNBytes
  1829. ck zum Index oder zu Routinen, Ende mit ESC 
  1830.   FileSystem.FDPtr
  1831.   TYPE
  1832.     FDPtr;
  1833. File-Description-Pointer, nur f
  1834. r internen Gebrauch! 
  1835. ck zum Modul FileSystem 
  1836.   FileSystem.Response
  1837.  TYPE
  1838.    Response = (done, notdone);
  1839. berpr
  1840. fung, ob die Dateioperation erfolgreich durchgef
  1841. hrt wurde. 
  1842. ck zum Modul FileSystem 
  1843.   FileSystem.IOMode
  1844.  TYPE
  1845.    IOMode = (read, write, io);
  1846. Der Modus in dem die Datei behandelt werden soll: H
  1847.  read  = nur lesen
  1848.  write = nur schreiben
  1849.  io    = lesen und schreiben
  1850. ck zum Modul FileSystem 
  1851.   FileSystem.File
  1852.  TYPE
  1853.    File = RECORD
  1854.      id:    INTEGER;
  1855.      res:   Response;
  1856.      eof:   BOOLEAN;
  1857.      mode:  IOMode;
  1858.      fdptr: FDPtr; ( Nur f
  1859. r internen Gebrauch )
  1860.    END;
  1861. Der Record enth
  1862. lt alle f
  1863. r Dateioperationen wichtigen Daten. 
  1864. ck zum Modul FileSystem 
  1865.   FileSystem.LookUp 
  1866.  PROCEDURE Lookup(VAR f: File;
  1867.               filename: ARRAY OF CHAR;
  1868.                    new: BOOLEAN);
  1869. ffnet die in "filename" genannte Datei. Falls die Datei nicht vorhanden ist, wird sie, wenn "new" TRUE ist, neu erstellt, sonst ein Fehler zur
  1870. ckgegeben. 
  1871. LookUp versucht immer zu erst eine Datei f
  1872. r io zu 
  1873. ffnen. Falls dies fehlschl
  1874. gt, wird versucht, die Datei zum Lesen zu 
  1875. ffnen. f.mode wird 
  1876. quivalent zum 
  1877. ffnungsmodus gesetzt. 
  1878. ck zum Modul FileSystem 
  1879.   FileSystem.Create 
  1880. PROCEDURE Create(VAR f: File; (
  1881.             mediumname: ARRAY OF CHAR);
  1882. Erstelle eine neue tempor
  1883. re Datei. %
  1884. Falls "mediumname" mit einer Variable im DOS-Environment 
  1885. bereinstimmt, wird diese Variable f
  1886. r den Pfad zu der Tempor
  1887. rdatei verwendet. Wenn die Operation geklappt hat, wird f.res auf "done" gesetzt, sonst auf "notdone". f.eof ist nach der Operation TRUE, da eine neue Datei erstellt wurde. 8
  1888. ck zum Modul FileSystem oder zur Create-
  1889. bersicht. 
  1890.   FileSystem.Close 
  1891.  PROCEDURE Close(VAR f: File);
  1892. Schlie
  1893. t die Datei "f". l
  1894. Falls die Datei mit Rename) umbenannt wurde, wird der Verzeichniseintrag zu diesem Zeitpunkt aktualisiert. f
  1895. Falls notwendig (die Datei wurde zu einem anderen Laufwerk umbenannt), wird die Datei jetzt kopiert. 7
  1896. ck zum Modul FileSystem oder zur Close-
  1897. bersicht. 
  1898.   FileSystem.Reset 
  1899.  PROCEDURE Reset(VAR f: File);
  1900. Setzt den Dateizeiger an den Anfang der Datei "f". 
  1901. ck zum Modul FileSystem 
  1902.   FileSystem.ReWrite 
  1903.  PROCEDURE Rewrite(VAR f: File);
  1904. Setzt den Dateizeiger an den Anfang der Datei und schneidet den Rest ab (leert den Inhalt) der Datei. 
  1905. ck zum Modul FileSystem 
  1906.   FileSystem.Rename 
  1907.  PROCEDURE Rename(VAR f: File;
  1908.                filename: ARRAY OF CHAR );
  1909. ndert den Namen der Datei "f" in "filename". f
  1910. Die Datei kann zu einem anderen Verzeichnis oder auf ein anderes Laufwerk umbenannt (bewegt) werden. 
  1911.  Hinweis:
  1912. Der Verzeichniseintrag wird erst ge
  1913. ndert, wenn die Datei geschlossen (Close) wird. 8
  1914. ck zum Modul FileSystem oder zur Rename-
  1915. bersicht. 
  1916.   FileSystem.ReadWord 
  1917.  PROCEDURE ReadWord(VAR f: File;
  1918.                     VAR w: WORD);
  1919. Lese einen WORD-Wert aus einer Datei. P
  1920. Falls die Leseoperation zum Dateiende gelangt, wird File.eof auf TRUE gesetzt. 
  1921. ck zum Modul FileSystem 
  1922.   FileSystem.WriteWord 
  1923.  PROCEDURE WriteWord(VAR f: File;
  1924.                          w: WORD);
  1925. Schreibt ein WORD in eine Datei. 
  1926. Die Prozedur setzt File.res auf "done", wenn der Aufruf erfolgreich war, ansonsten wird file.res auf "notdone" gesetzt. File.eof ist TRUE, nachdem eine neue Datei erstellt wird. 
  1927. ck zum Modul FileSystem 
  1928.   FileSystem.ReadChar 
  1929.  PROCEDURE ReadChar(VAR f : File;
  1930.                     VAR ch: CHAR);
  1931. Liest einen Zeichen aus der Datei. Das Zeichen ASCII.CR wird zu ASCII.EOL konvertiert. ASCII.LF wird ignoriert. y
  1932. Die Prozedur setzt File.res auf "done", wenn der Aufruf erfolgreich war, ansonsten wird file.res auf "notdone" gesetzt. 
  1933. ck zum Modul FileSystem 
  1934.   FileSystem.WriteChar 
  1935.  PROCEDURE WriteChar(VAR f: File;
  1936.                         ch: CHAR);
  1937. Schreibt das Zeichen "ch" in die Datei. >
  1938. ASCII.EOL wird zu der Sequenz ASCII.CR ASCII.LF konvertiert. ;
  1939. ck zum Modul FileSystem oder zur WriteChar-
  1940. bersicht. 
  1941.   FileSystem.GetPos 
  1942.  PROCEDURE GetPos(VAR f: File;
  1943.             VAR highpos,
  1944.                 lowpos : CARDINAL);
  1945. Liefert die aktuelle Position des Dateizeigers. )
  1946. Siehe auch SetPos, SetLPos und GetLPos. 
  1947. ck zum Modul FileSystem. 
  1948.   FileSystem.SetPos 
  1949.  PROCEDURE SetPos(VAR f: File;
  1950.                 highpos,
  1951.                  lowpos: CARDINAL);
  1952. Bewegt den Dateizeiger zur Position highpos * 65536 + lowpos. )
  1953. Siehe auch SetLPos, GetPos und GetLPos. 
  1954. ck zum Modul FileSystem. 
  1955.   FileSystem.GetLPos 
  1956.  PROCEDURE GetLPos(VAR f  : File;
  1957.                    VAR pos: LONGCARD);
  1958. Liefert die aktuelle Position des Dateizeigers. )
  1959. Siehe auch GetPos, GetLPos und SetLPos. 
  1960. ck zum Modul FileSystem 
  1961.   FileSystem.SetLPos 
  1962.  PROCEDURE SetLPos(VAR f: File;
  1963.                      pos: LONGCARD);
  1964. Bewegt den Dateizeiger zur Position highpos * 65536 + lowpos. (
  1965. Siehe auch SetPos, GetPos und GetLPos. 
  1966. ck zum Modul FileSystem 
  1967.   FileSystem.Length 
  1968.  PROCEDURE Length(VAR f: File;
  1969.             VAR highlen,
  1970.                 lowlen : CARDINAL);
  1971. Gibt die L
  1972. nge der Datei zur
  1973. Siehe auch LLength 8
  1974. ck zum Modul FileSystem oder zur Length-
  1975. bersicht. 
  1976.   FileSystem.LLength 
  1977.  PROCEDURE LLength(VAR f: File;
  1978.               VAR length: LONGCARD);
  1979. Gibt die L
  1980. nge der Datei zur
  1981. Siehe auch Length. 
  1982. ck zum Modul FileSystem 
  1983.   FileSystem.ReadNBytes 
  1984.  PROCEDURE ReadNBytes(VAR f: File;
  1985.                     buffPtr: ADDRESS;
  1986.                           n: CARDINAL;
  1987.                   VAR nRead: CARDINAL);
  1988. Die Prozedur versucht, "n" Bytes zu lesen. 
  1989. Bei der R
  1990. ckkehr wird die Anzahl der gelesenen Bytes in "nRead" zur
  1991. ckgeliefert. Falls das Dateiende erreicht wird, wird File.eof auf TRUE gesetzt. 
  1992. siehe auch WriteNBytes. 
  1993. ck zum Modul FileSystem 
  1994.   FileSystem.WriteNBytes 
  1995.  PROCEDURE WriteNBytes(VAR f: File;
  1996.                      buffPtr: ADDRESS;
  1997.                            n: CARDINAL;
  1998.                 VAR nWritten: CARDINAL);
  1999. Die Prozedur schreibt "n" Bytes in die Datei. Z
  2000. Bei der R
  2001. ckkehr wird die aktuelle Zahl geschriebener Bytes in "nWritten" zur
  2002. ckgegeben. 
  2003. siehe auch ReadNBytes. 
  2004. ck zum Modul FileSystem 
  2005.   MODULEs MathLib0/LMathLib0 
  2006.   MathLib0:
  2007. Das MathLib0-Modul wie es von Niklaus Wirth in seinem Buch "Programming in Modula-2" definiert wurde. 
  2008.   LMathLib0:
  2009. Die LONGREALs-Version von Mathlib0. W
  2010. M2Reals, Mathlib0 und LMathLib0 benutzen den Coprozessor 8087/80x87, falls vorhanden. 2
  2011. In MathLib0 und LMathLib0 definierte Prozeduren: C
  2012.  sqrt      exp
  2013.  ln        sin
  2014.  cos       arctan
  2015.  real      entier
  2016. ck zum Index oder zu Routinen, Ende mit ESC 
  2017.   (L)MathLib0.sqrt 
  2018.  PROCEDURE MathLib0.sqrt(x: REAL): REAL;
  2019.  PROCEDURE LMathLib0.sqrt(x: LONGREAL): LONGREAL;
  2020. ck zum Modul (L)MathLib0 
  2021.   (L)MathLib0.exp 
  2022.  PROCEDURE MathLib0.exp(x :REAL): REAL;
  2023.  PROCEDURE LMathLib0.exp(x: LONGREAL): LONGREAL;
  2024. ck zum Modul (L)MathLib0 
  2025.   (L)MathLib0.ln 
  2026.  PROCEDURE MathLib0.ln(x: REAL): REAL;
  2027.  PROCEDURE LMathLib0.ln(x: LONGREAL): LONGREAL;
  2028. ck zum Modul (L)MathLib0 
  2029.   (L)MathLib0.sin 
  2030.  PROCEDURE MathLib0.sin(x: REAL): REAL;
  2031.  PROCEDURE LMathLib0.sin(x: LONGREAL): LONGREAL;
  2032. ck zum Modul (L)MathLib0 
  2033.   (L)MathLib0.cos 
  2034.  PROCEDURE MathLib0.cos(x: REAL): REAL;
  2035.  PROCEDURE LMathLib0.cos(x: LONGREAL): LONGREAL;
  2036. ck zum Modul (L)MathLib0 
  2037.   (L)MathLib0.arctan 
  2038.  PROCEDURE MathLib0.arctan(x: REAL): REAL;
  2039.  PROCEDURE LMathLib0.arctan(x: LONGREAL): LONGREAL;
  2040. ck zum Modul (L)MathLib0 
  2041.   (L)MathLib0.real 
  2042.  PROCEDURE MathLib0.real(x: INTEGER): REAL;
  2043.  PROCEDURE LMathLib0.real(x: LONGINT): LONGREAL;
  2044. ck zum Modul (L)MathLib0 
  2045.   (L)MathLib0.entier 
  2046.  PROCEDURE MathLib0.entier(x: REAL): INTEGER;
  2047.  PROCEDURE LMathLib0.entier(x: LONGREAL): LONGINT;
  2048. ck zum Modul (L)MathLib0 
  2049.    MODULE NumberConversion 
  2050. Das Modul enth
  2051. lt Prozeduren zur Umwandlung von Zahlen (INTEGER/CARDINAL/LONGINT/LONGCARD) in Strings und wieder zur
  2052.  CONST
  2053.    MaxBase = 16;
  2054.  TYPE
  2055.    BASE    = [2..MaxBase];
  2056.  definierte Prozeduren:
  2057.  StringToCard       StringToInt
  2058.  StringToNum        CardToString
  2059.  CardToString       NumToString
  2060.  StringToLongCard   StringToLongInt
  2061.  StringToLongNum    LongCardToString
  2062.  LongIntToString    LongNumToString
  2063. ck zum Index oder zu Routinen, Ende mit ESC 
  2064.   CONST NumberConversion.MaxBase
  2065. Basis f
  2066. r die "Num"-Umwandlungen 
  2067.  CONST
  2068.    MaxBase = 16
  2069.  TYPE
  2070.    BASE    = [2..MaxBase];
  2071. ck zum Modul NumberConversion 
  2072.   TYPE NumberConversion.BASE
  2073.  CONST
  2074.    MaxBase = 16;
  2075.  TYPE
  2076.    BASE    = [2..MaxBase];
  2077. ck zum Modul NumberConversion 
  2078.   NumberConversion.StringToCard 
  2079. PROCEDURE StringToCard(str: ARRAY OF CHAR; L
  2080.                    VAR num: CARDINAL;
  2081.                   VAR done: BOOLEAN);
  2082. ck zum Modul NumberConversion 
  2083.   NumberConversion.StringToInt 
  2084. PROCEDURE StringToInt(str: ARRAY OF CHAR; I
  2085.                   VAR num: INTEGER;
  2086.                  VAR done: BOOLEAN);
  2087. ck zum Modul NumberConversion 
  2088.   NumberConversion.StringToNum 
  2089. PROCEDURE StringToNum(str: ARRAY OF CHAR; k
  2090.                      base: BASE;
  2091.                   VAR num: CARDINAL;
  2092.                  VAR done: BOOLEAN);
  2093. ck zum Modul NumberConversion 
  2094.   NumberConversion.CardToString 
  2095. PROCEDURE CardToString(num: CARDINAL; R
  2096.                    VAR str: ARRAY OF CHAR;
  2097.                      width: CARDINAL);
  2098. ck zum Modul NumberConversion 
  2099.   NumberConversion.IntToString 
  2100. PROCEDURE IntToString(num: INTEGER; P
  2101.                   VAR str: ARRAY OF CHAR;
  2102.                     width: CARDINAL);
  2103. ck zum Modul NumberConversion 
  2104.   NumberConversion.NumToString 
  2105. PROCEDURE NumToString(num: CARDINAL; q
  2106.                      base: BASE;
  2107.                   VAR str: ARRAY OF CHAR;
  2108.                     width: CARDINAL);
  2109. ck zum Modul NumberConversion 
  2110.   NumberConversion.StringToLongCard 
  2111. PROCEDURE StringToLongCard(str: ARRAY OF CHAR; T
  2112.                        VAR num: LONGCARD;
  2113.                       VAR done: BOOLEAN);
  2114. ck zum Modul NumberConversion 
  2115.   NumberConversion.StringToLongInt 
  2116. PROCEDURE StringToLongInt(str: ARRAY OF CHAR; Q
  2117.                       VAR num: LONGINT;
  2118.                      VAR done: BOOLEAN);
  2119. ck zum Modul NumberConversion 
  2120.   NumberConversion.StringToLongNum 
  2121. PROCEDURE StringToLongNum(str: ARRAY OF CHAR; w
  2122.                          base: BASE;
  2123.                       VAR num: LONGCARD;
  2124.                      VAR done: BOOLEAN);
  2125. ck zum Modul NumberConversion 
  2126.   NumberConversion.LongCardToString 
  2127. PROCEDURE LongCardToString(num: LONGCARD; Z
  2128.                        VAR str: ARRAY OF CHAR;
  2129.                          width: CARDINAL);
  2130. ck zum Modul NumberConversion 
  2131.   NumberConversion.LongIntToString 
  2132. PROCEDURE LongIntToString(num: LONGINT; X
  2133.                       VAR str: ARRAY OF CHAR;
  2134.                         width: CARDINAL);
  2135. ck zum Modul NumberConversion 
  2136.   NumberConversion.LongNumToString 
  2137. PROCEDURE LongNumToString(num: LONGCARD; }
  2138.                          base: BASE;
  2139.                       VAR str: ARRAY OF CHAR;
  2140.                         width: CARDINAL);
  2141. ck zum Modul NumberConversion 
  2142.    MODULE RealInOut 
  2143. Das Modul ist eine Erweiterung von InOut und enth
  2144. lt die Routinen f
  2145. r das Lesen und Schreiben von Flie
  2146. kommazahlen. Das Modul erledigt seine Ein- und Ausgaben 
  2147. ber das Modul InOut. 
  2148.  definierte Variable:
  2149.   Done
  2150.  definierte Prozeduren:
  2151.   ReadReal      WriteReal
  2152.   ReadLongReal  WriteLongReal
  2153. ck zum Index oder zu Routinen, Ende mit ESC 
  2154.   VAR RealInOut.Done
  2155.    Done: BOOLEAN;
  2156. Globale Kontrollvariable f
  2157. r die Prozeduren den Moduls RealInOut. 
  2158.   RealInOut.ReadReal 
  2159.  PROCEDURE ReadReal(VAR x: REAL);
  2160. Liest einen String. Dieser wird anschlie
  2161. end in eine REAL-Zahl umgewandelt, die dann in "x" zur
  2162. ckgegeben wird. Eine REAL-Zahl im von Fitted-Modula verarbeitbaren Format wird erwarted. c
  2163. Die Variable "Done" wird auf TRUE gesetzt, wenn eine REAL-Zahl im korrekten Format gelesen wurde. 
  2164. ck zum Modul RealInOut. 
  2165.   RealInOut.WriteReal 
  2166.  PROCEDURE WriteReal(x: REAL;
  2167.                      n: CARDINAL);
  2168. "x" wird in wissenschaftlicher Notation rechtsb
  2169. ndig in ein Feld von mindestens n Zeichen geschrieben. 
  2170. ck zum Modul RealInOut. 
  2171.   RealInOut.ReadLongReal 
  2172.  PROCEDURE ReadLongReal(VAR x: LONGREAL);
  2173. Siehe auch ReadReal. 
  2174. ck zum Modul RealInOut. 
  2175.   RealInOut.WriteLongReal 
  2176.  PROCEDURE WriteLongReal(x: LONGREAL;
  2177.                          n: CARDINAL);
  2178. Siehe auch WriteReal 
  2179. ck zum Modul RealInOut. 
  2180.   MODULE Storage 
  2181. Dieses Modul ist f
  2182. r die Bearbeitung des Modula-2-Heaps zwischen System.HeapTop und System.MemTop verantwortlich. o
  2183. Die Prozeduren in Storage ver
  2184. ndern System.HeapTop je nachdem, wie der Heap vergr
  2185. ert oder verkleinert wird. 0
  2186. In Storage sind folgende Prozeduren definiert: "
  2187.  ALLOCATE  DEALLOCATE  Available
  2188. ck zum Index oder zu Routinen, Ende mit ESC 
  2189.   Storage.ALLOCATE 
  2190.  PROCEDURE ALLOCATE(VAR a: ADDRESS;
  2191.                      size: CARDINAL);
  2192. Allokiert "size" Bytes im Heap und gibt einen Zeiger auf diesen Bereich in "a" zur
  2193. ck zum Modul Storage 
  2194.   Storage.DEALLOCATE 
  2195.  PROCEDURE DEALLOCATE(VAR a: ADDRESS;
  2196.                        size: CARDINAL);
  2197. Gibt eine vorher allokierten Speicherblock der Gr
  2198. e "size" wieder frei. Wenn die Compiler-Option (*$T*) gesetzt ist, werden Zeiger vor dem Zugriff auf NIL gepr
  2199. ft. Au
  2200. erdem setzt Storage.DEALLOCATE den 
  2201. bergebenen Zeiger auf NIL. 
  2202. ck zum Modul Storage 
  2203.    Storage.Available 
  2204. PROCEDURE Available(size: CARDINAL): BOOLEAN; P
  2205. TRUE falls ein Speicherblock der Gr
  2206. e "size" f
  2207. r die Zuweisung verf
  2208. gbar ist. 
  2209. ck zum Modul Storage 
  2210.   MODULE Strings 
  2211. Ein String ist ein ARRAY OF CHAR. ^
  2212. Falls der String nicht komplett in das Array pa
  2213. t, wird er von dem Zeichen 0C abgeschlossen. 6
  2214. Im Modul Strings sind folgende Prozeduren definiert: V
  2215.  Append      Assign
  2216.  CompareStr  Concat
  2217.  Copy        Delete
  2218.  Insert      Length
  2219. ck zum Index oder zu Routinen, Ende mit ESC 
  2220.   Strings.CompareStr 
  2221.  PROCEDURE CompareStr(s1, s2: ARRAY OF CHAR): INTEGER;
  2222. Vergleicht zwei Zeichenketten s1 und s2. K
  2223. ckgabe:
  2224.      0 falls s1 = s2
  2225.     -1 falls s1 < s2
  2226.     +1 falls s1 > s2
  2227. ck zum Modul Strings. 
  2228.   Strings.Assign 
  2229.  PROCEDURE Assign(VAR source, dest: ARRAY OF CHAR);
  2230. kopiert den String "source" nach "dest". 
  2231. ck zum Modul Strings. 
  2232.   Strings.Length 
  2233.  PROCEDURE Length(s :ARRAY OF CHAR ): CARDINAL;
  2234. Liefert die L
  2235. nge der Zeichenkette "s" zur
  2236. ck. 5
  2237. ck zum Modul Strings oder zur Length-
  2238. bersicht. 
  2239.   Strings.Concat 
  2240.  PROCEDURE Concat(s1, s2: ARRAY OF CHAR;
  2241.               VAR result: ARRAY OF CHAR);
  2242. ngt die Zeichenkette "s2" an "s1" und liefert das Ergebnis in "result" zur
  2243. Siehe auch Append. 
  2244. ck zum Modul Strings. 
  2245.   Strings.Pos 
  2246. PROCEDURE Pos(subs, s: ARRAY OF CHAR): CARDINAL; D
  2247. Sucht den SubString "subs" in "s" und liefert die Position zur
  2248. ckgabe: k
  2249. Index des ersten Austretens von "subs" in "s" oder > HIGH(s) falls kein passender Bereich gefunden wurde. 
  2250. ck zum Modul Strings. 
  2251.   Strings.Delete 
  2252.  PROCEDURE Delete(VAR s: ARRAY OF CHAR;
  2253.                pos, len: CARDINAL);
  2254. scht "len" Zeichen aus der Zeichenkette "s" ab der Position "pos". 5
  2255. ck zum Modul Strings oder zur Delete-
  2256. bersicht. 
  2257.   Strings.Copy 
  2258.  PROCEDURE Copy(src: ARRAY OF CHAR;
  2259.            pos, len: CARDINAL;
  2260.            VAR dest: ARRAY OF CHAR);
  2261. Kopiert "len" Zeichen ab der Position "pos" von "src" nach "dest". 
  2262. ck zum Modul Strings. 
  2263.   Strings.Append 
  2264. PROCEDURE Append(VAR s1: ARRAY OF CHAR; )
  2265.                      s2: ARRAY OF CHAR);
  2266. ngt s2 an das Ende von s1. U
  2267. Die Prozedur arbeitet 
  2268. quivalent zu Concat(s1, s2, s1) aber klarer und effizienter. 
  2269. ck zum Modul Strings. 
  2270.   Strings.Insert 
  2271. PROCEDURE Insert(subs: ARRAY OF CHAR; H
  2272.                 VAR s: ARRAY OF CHAR;
  2273.                    at: CARDINAL);
  2274. gt den Substring "subs" an der Position "at" in den String "s" ein. 
  2275. ck zum Modul Strings. 
  2276.   MODULE TermBase 
  2277. Das Modul Terminal erledigt die Arbeit der Prozeduren KeyPressed, Read, Write und Goto 
  2278. ber dieses Modul. 
  2279. Durch das 
  2280. berschreiben der Methoden AssignRead, AssignWrite und AssignGoto mit effizienteren kann der Benutzer die Ein- und Ausgaben selbst wesentlich beschleunigen. 
  2281.  TYPE
  2282.    StatusProcedure = PROCEDURE(): BOOLEAN;
  2283.    ReadProcedure   = PROCEDURE(VAR CHAR);
  2284.    WriteProcedure  = PROCEDURE(CHAR);
  2285.    GotoProcedure   = PROCEDURE(CARDINAL, CARDINAL);
  2286.  definierte Prozeduren:
  2287.  AssignGoto     AssignRead
  2288.  AssignWrite    Goto
  2289.  KeyPressed     Read
  2290.  UnAssignGoto   UnAssignRead
  2291.  UnAssignWrite  Write
  2292. ck zum Index oder zu Routinen, Ende mit ESC 
  2293.   TermBase.StatusProcedure
  2294.  TYPE
  2295.    StatusProcedure = PROCEDURE(): BOOLEAN;
  2296. ck zum Modul TermBase. 
  2297.   TermBase.ReadProcedure
  2298.  TYPE
  2299.    ReadProcedure = PROCEDURE(VAR CHAR);
  2300. ck zum Modul TermBase. 
  2301.   TermBase.WriteProcedure
  2302.  TYPE
  2303.    WriteProcedure  = PROCEDURE(CHAR);
  2304. ck zum Modul TermBase. 
  2305.   TermBase.GotoProcedure
  2306.  TYPE
  2307.    GotoProcedure = PROCEDURE(CARDINAL, CARDINAL);
  2308. ck zum Modul TermBase. 
  2309.   TermBase.AssignRead 
  2310.  PROCEDURE AssignRead(rp: ReadProcedure;
  2311.                       sp: StatusProcedure;
  2312.                 VAR done: BOOLEAN);
  2313. Sichert die aktuelle Read- und KeyPressed-Prozeduren in einem Prozedur-Stack und installiert die stattdessen zu benutzende neue Prozedur. 
  2314. ck zum Modul TermBase. 
  2315.   TermBase.AssignWrite 
  2316.  PROCEDURE AssignWrite(wp: WriteProcedure;
  2317.                  VAR done: BOOLEAN);
  2318. Sichert die aktuelle Write-Prozedur in einem Prozedur-Stack und installiert stattdessen die zu benutzende neue Prozedur. 
  2319. ck zum Modul TermBase. 
  2320.   TermBase.UnAssignRead 
  2321.  PROCEDURE UnAssignRead(VAR done :BOOLEAN);
  2322. Poppt die von AssignRead auf den Prozedur-Stack geschriebenen Read- und KeyPressed-Prozeduren zur
  2323. ck und macht sie wieder aktiv. 
  2324. ck zum Modul TermBase. 
  2325.   TermBase.UnAssignWrite 
  2326.  PROCEDURE UnAssignWrite(VAR done: BOOLEAN);
  2327. Poppt die von AssignWrite auf den Prozedur-Stack geschriebene Write-Prozedur zur
  2328. ck und macht sie wieder aktiv. 
  2329. ck zum Modul TermBase. 
  2330.   TermBase.Keypressed() 
  2331.  PROCEDURE KeyPressed(): BOOLEAN;
  2332. Fordert den derzeit installierten KeyPressed-Service an. G
  2333. hrend der Initialisierung von TermBase ist TermIO.KeyPressed aktiv. :
  2334. ck zum Modul TermBase oder zur KeyPressed-
  2335. bersicht. 
  2336.   TermBase.Read  
  2337.  PROCEDURE Read(VAR ch: CHAR);
  2338. Fordert die derzeit installierte Read-Prozedur an. A
  2339. hrend der Initialisierung von TermBase ist TermIO.Read aktiv. 4
  2340. ck zum Modul TermBase oder zur Read-
  2341. bersicht. 
  2342.   TermBase.Write 
  2343.  PROCEDURE Write(ch: CHAR);
  2344. Fordert die derzeit installierte Write-Prozedur an. B
  2345. hrend der Initialisierung von TermBase ist TermIO.Write aktiv. 5
  2346. ck zum Modul TermBase oder zur Write-
  2347. bersicht. 
  2348.   TermBase.AssignGoto 
  2349.  PROCEDURE AssignGoto(gp: GotoProcedure;
  2350.                 VAR done: BOOLEAN);
  2351. Sichert die aktuelle Goto-Prozedur in einem Prozedur-Stack und installiert die stattdessen zu benutzende neue Prozedur. 
  2352. ck zum Modul TermBase. 
  2353.   TermBase.UnAssignGoto 
  2354.  PROCEDURE UnAssignGoto(VAR done: BOOLEAN);
  2355. Poppt die von AssignGoto auf den Prozedur-Stack geschriebene Goto-Prozedur zur
  2356. ck und aktiviert sie erneut. 
  2357. ck zum Modul TermBase. 
  2358.   TermBase.Goto 
  2359.  PROCEDURE Goto(line, pos: CARDINAL);
  2360. Ruft die aktuell installierte Goto-Prozedur auf. G
  2361. hrend der Initialisierung von TermBase ist TermIO.Goto installiert. 4
  2362. ck zum Modul TermBase oder zur Goto-
  2363. bersicht. 
  2364.   MODULE Terminal 
  2365. Die gesamten aktuellen Ein- und Ausgaben verwenden Prozeduren des Moduls TermBase. Das aufrufende Programm kann ebenso direkt die Prozeduren aus TermBase verwenden. $
  2366. In Terminal definierte Prozeduren: {
  2367.  ClrScreen
  2368.    Goto
  2369.  KeyPressed   Read
  2370.  ReadLine
  2371.    ReadAgain
  2372.  Write
  2373.    WriteString
  2374.  WriteLn
  2375.    WriteLine
  2376. ck zum Index oder zu Routinen, Ende mit ESC 
  2377.   Terminal.KeyPressed 
  2378.  PROCEDURE KeyPressed(): BOOLEAN;
  2379. Die Prozedur gibt TRUE zur
  2380. ck, wenn eine Taste gedr
  2381. ckt wurde; sonst wird FALSE gemeldet. :
  2382. ck zum Modul Terminal oder zur KeyPressed-
  2383. bersicht. 
  2384.   Terminal.Read 
  2385.  PROCEDURE Read(VAR ch: CHAR);
  2386. Liefert das n
  2387. chste eingegebene Zeichen. Hierzu wird TermBase.Read verwendet. 4
  2388. ck zum Modul Terminal oder zur Read-
  2389. bersicht. 
  2390.   Terminal.ReadLine 
  2391.  PROCEDURE ReadLine(VAR string:
  2392.                 ARRAY OF CHAR);
  2393. Lese eine ganze Zeile mithilfe von Read mit Echo mit Ausnahme des Abschlu
  2394. zeichens (EOL oder ESC). /
  2395. ASCII.BS} l
  2396. scht das letzte gelesene Zeichen.  
  2397. ASCII.DEL l
  2398. scht alle Zeichen. ;
  2399. ASCII.ESC} l
  2400. scht alle Zeichen und bricht die Eingabe ab. l
  2401. ReadAgain, gefolgt von Read kann benutzt werden, um das abschlie
  2402. ende Zeichen zu ermitteln (EOL oder ESC). 8
  2403. ck zum Modul Terminal oder zur ReadLine-
  2404. bersicht. 
  2405.   Terminal.ReadAgain 
  2406.  PROCEDURE ReadAgain;
  2407. Erzwingt beim n
  2408. chsten Aufruf von Read das zuletzt gelesene Zeichen nochmals zur
  2409. ckzugeben. 
  2410. ck zum Modul Terminal. 
  2411.   Terminal.Write 
  2412.  PROCEDURE Write(ch: CHAR);
  2413. Schreibt "ch" mithilfe von TermBase.Write in die Standardausgabe. 5
  2414. ck zum Modul Terminal oder zur Write-
  2415. bersicht. 
  2416.   Terminal.WriteString 
  2417.  PROCEDURE WriteString(string: ARRAY OF CHAR);
  2418. Schreibt unter Benutzung von Terminal.Write eine Zeichenkette "string" an die Standardausgabe. ;
  2419. ck zum Modul Terminal oder zur WriteString-
  2420. bersicht. 
  2421.   Terminal.WriteLn 
  2422.  PROCEDURE WriteLn;
  2423. Identisch mit: Write(ASCII.EOL). 7
  2424. ck zum Modul Terminal oder zur WriteLn-
  2425. bersicht. 
  2426.   Terminal.ClrScreen 
  2427.   PROCEDURE ClrScreen;
  2428. Identisch zu Write(ASCII.FF). Die Prozedur ben
  2429. tigt ANSI.SYS! 
  2430. ck zum Modul Terminal. 
  2431.   Terminal.Goto 
  2432.  PROCEDURE Goto(line, pos: CARDINAL);
  2433. Die Prozedur ruft TermBase.Goto(line, pos) auf. 4
  2434. ck zum Modul Terminal oder zur Goto-
  2435. bersicht. 
  2436.    Terminal.WriteLine 
  2437.  PROCEDURE WriteLine(string: ARRAY OF CHAR);
  2438.  Identisch mit:
  2439.   WriteString(string);
  2440.   WriteLn;
  2441. ck zum Modul Terminal oder zur WriteLine-
  2442. bersicht. 
  2443.   MODULE TermIO 
  2444. Die Prozeduren dieses Moduls sind die Standard Ein- und Ausgabe-Routinen, die vom Modul TermBase genutzt werden. Die Prozeduren des Moduls rufen die DOS-Funktionen 2, 8 und 0BH auf. S
  2445. r die Bildschirm-L
  2446. schroutinen und Goto-Funktion mu
  2447.  ANSI.SYS installiert sein! "
  2448. In TermIO definierte Prozeduren: 1
  2449.  Read
  2450.  Write
  2451.  KeyPressed
  2452.  Goto
  2453. ck zum Index oder zu Routinen, Ende mit ESC 
  2454.   TermIO.Read 
  2455.  PROCEDURE Read(VAR ch: CHAR);
  2456. Wartet, bis ein Zeichen f
  2457. r das Lesen aus der Tastatur bereit steht und liest es dann. Das Zeichen wird nicht auf dem Bildschirm angezeigt. +
  2458. ASCII.CR wird nach ASCII.EOL konvertiert. 2
  2459. ck zum Modul TermIO oder zur Read-
  2460. bersicht. 
  2461.   TermIO.Write 
  2462.  PROCEDURE Write(ch: CHAR);
  2463. Schreibt ch auf den Bildschirm. B
  2464.  ASCII.FF l
  2465. scht den Bildschirm (ANSI.SYS mu
  2466.  installiert sein) ?
  2467.  ASCII.EOL erzeugt auf dem Bildschirm die Ausgabe von CR LF. 6
  2468.  ASCII.DEL erzeugt einen zerst
  2469. rerischen Backspace. 3
  2470. ck zum Modul TermIO oder zur Write-
  2471. bersicht. 
  2472.   TermIO.KeyPressed 
  2473.  PROCEDURE KeyPressed() :BOOLEAN;
  2474. Gibt TRUE zur
  2475. ck, wenn im Tastaturpuffer ein Zeichen anliegt. 8
  2476. ck zum Modul TermIO oder zur KeyPressed-
  2477. bersicht. 
  2478.   TermIO.Goto 
  2479.  PROCEDURE Goto(line, pos: CARDINAL);
  2480. Positioniert den Cursor an line/pos. Es wird ANSI.SYS ben
  2481. tigt! 1
  2482. ck zum Modul TermIO oder zu Goto-
  2483. bersicht. 
  2484.   MODULE Display 
  2485. TYPE M
  2486.   DisplayBuffer = ARRAY [0..24]
  2487.                OF ARRAY [0..79] OF CARDINAL;
  2488. VAR 8
  2489.   line0:         CARDINAL;
  2490.   col0:          CARDINAL;
  2491.   lineN:         CARDINAL;
  2492.   colN:          CARDINAL;
  2493.   snowy:         BOOLEAN;
  2494.   displayMode:   CARDINAL;
  2495.   displayPage:   CARDINAL;
  2496.   displayAttr:   CARDINAL;
  2497.   displayLines:  CARDINAL;
  2498.   displayCols:   CARDINAL;
  2499.   displayPtr:    POINTER TO DisplayBuffer;
  2500.  definierte Prozeduren:
  2501.   GetDisplayMode    SetDisplayMode
  2502.   SetCursorType     GetCursorPosition
  2503.   SetCursorPosition ScrollUp
  2504.   ScrollDown        ReadCharAttr
  2505.   WriteCharAttr     WriteChar
  2506.   ClrEOL            Goto
  2507.   ClrEOS            Write
  2508.   DisplayString     DisplayLine
  2509.   WriteScreen       ReadScreen
  2510. ck zum Index oder zu Routinen, Ende mit ESC  
  2511.   Display.displayMode
  2512.    displayMode: CARDINAL;
  2513. Wird beim Aufruf mit dem aktuellen Bildschirmmodus initialisiert. 
  2514. ck zum Modul Display 
  2515.   Display.displayPage
  2516.    displayPage :CARDINAL;
  2517. Die Bildschirmseite. <
  2518. Wird abh
  2519. ngig vom aktuellen Bildschirmmodus initialisiert. 
  2520. ck zum Modul Display 
  2521.   Display.displayAttr
  2522.   VAR
  2523.     displayAttr :CARDINAL;
  2524. Das Bildschirmattribut. Wird mit 07H initialisiert. 
  2525. ck zum Modul Display 
  2526.   Display.displayLines
  2527.   VAR
  2528.     displayLines:CARDINAL;
  2529. Die Anzahl der Bildschirmzeilen. Wird auf 25 initialisiert. 
  2530. ck zum Modul Display 
  2531.   Display.displayCols
  2532.   VAR
  2533.     displayCols :CARDINAL;
  2534. Die Anzahl der Bildschirmfarben. <
  2535. Wird abh
  2536. ngig vom aktuellen Bildschirmmodus initialisiert. 
  2537. ck zum Modul Display 
  2538.   Display.snowy
  2539.   VAR
  2540.     snowy       :BOOLEAN;
  2541. Die Variable dient der 
  2542. berpr
  2543. fung von "Schneetreiben" auf dem Bildschirm. Wenn TRUE: Warte auf Bildschirm-Retrace. M
  2544. snowy wird automatisch auf TRUE gesetzt, wenn der Bildschirmmodus # 7 ist.  
  2545. ck zum Modul Display 
  2546.    aktuelle Fensterkoordinaten
  2547.    line0: CARDINAL;
  2548.           oberste Zeile, Startwert 0
  2549.    col0:  CARDINAL;
  2550.           Spalte links, Startwert 0
  2551.    lineN: CARDINAL;
  2552.           letzte Zeile im Fenster
  2553.    colN:  CARDINAL;
  2554.           letzte Spalte im Fenster
  2555. ck zum Modul Display 
  2556.   Display.displayPtr
  2557. Zeiger auf den Bildschirmpuffer. Wird zur Initialisierungszeit geladen. Y
  2558.  TYPE
  2559.    DisplayBuffer = ARRAY [0..24] OF
  2560.                    ARRAY [0..79] OF CARDINAL;
  2561.    displayPtr: POINTER TO DisplayBuffer;
  2562. ck zum Modul Display 
  2563.   Display.GetDisplayMode 
  2564.  PROCEDURE GetDisplayMode(VAR mode, nCols,
  2565.                     activePage: CARDINAL);
  2566. Gibt den aktuellen Bildschirmmodus zur
  2567. BIOS Interface-Routine. 
  2568. ck zum Modul Display 
  2569.   Display.SetDisplayMode 
  2570. PROCEDURE SetDisplayMode(mode: CARDINAL); 
  2571. Setzt den Bildschirm-Modus. 
  2572. BIOS Interface-Routine. 
  2573. ck zum Modul Display 
  2574.   Display.SetCursorType 
  2575.  PROCEDURE SetCursorType(start, end: CARDINAL );
  2576. Setzt die Cursor Start- und Endzeile. 
  2577. BIOS Interface-Routine. 
  2578. ck zum Modul Display 
  2579.   Display.GetCursorPosition 
  2580.  PROCEDURE GetCursorPosition(VAR line: CARDINAL;
  2581.                              VAR pos: CARDINAL);
  2582. Meldet die aktuelle Cursorposition zur
  2583. BIOS Interface-Routine. 
  2584. ck zum Modul Display 
  2585.   Display.SetCursorPosition 
  2586.  PROCEDURE SetCursorPosition(line: CARDINAL;
  2587.                               pos: CARDINAL);
  2588. Bewegt den Cursor nach line/pos. 
  2589. BIOS Interface-Routine. >
  2590. Siehe auch bei der Goto-
  2591. bersicht. Zur
  2592. ck zum Modul Display. 
  2593.   Display.ScrollUp 
  2594.  PROCEDURE ScrollUp(n,
  2595.           line1, pos1,
  2596.           line2, pos2: CARDINAL;
  2597.                  attr: CARDINAL);
  2598. Scrollt das Fenster um n Zeilen nach oben. 6
  2599.  line1, pos1 = linke obere Ecke des Scrollfensters. 8
  2600.  line2, pos2 = rechte untere Ecke des Scrollfensters. 3
  2601.  attr        = Farbattribut f
  2602. r neue Leerzeilen. /
  2603.  Falls n = 0 ist, wird das Fenster gel
  2604. scht. 
  2605. BIOS Interface-Routine. 
  2606. Siehe auch ScrollDown 
  2607. ck zum Modul Display 
  2608.   Display.ScrollDown 
  2609.  PROCEDURE ScrollDown(n,
  2610.             line1, pos1,
  2611.             line2, pos2: CARDINAL;
  2612.                    attr: CARDINAL);
  2613. Scrollt ein Window Scrolls um "n" Zeilen nach unten. K
  2614. BIOS Interface-Routine. F
  2615. r die Beschreibung der Variablen siehe ScrollUp 
  2616. ck zum Modul Display 
  2617.   Display.ReadCharAttr 
  2618.  PROCEDURE ReadCharAttr(VAR ch: CHAR;
  2619.                       VAR attr: CARDINAL);
  2620. Liest das Zeichen und Bildschirmattribut unter dem Cursor. 
  2621. BIOS Interface-Routine. 
  2622. ck zum Modul Display 
  2623.   Display.WriteCharAttr 
  2624.  PROCEDURE WriteCharAttr(ch: CHAR;
  2625.                        attr: CARDINAL);
  2626. Schreibt das Zeichen "ch" und das Bildschirm-Attribut "attr" an die aktuelle Cursorposition. Der Cursor wird nicht bewegt. 
  2627. BIOS Interface-Routine. 
  2628. ck zum Modul Display 
  2629.   Display.WriteChar 
  2630.  PROCEDURE WriteChar(ch: CHAR);
  2631. Schreibt das Zeichen ch an die aktuelle Cursorposition. 
  2632. BIOS Interface-Routine. 8
  2633. ck zum Modul Display oder zur WriteChar-
  2634. bersicht. 
  2635.   Display.Goto 
  2636.  PROCEDURE Goto(line, col: CARDINAL);
  2637. Bewegt den Cursor an line/pos innerhalb des  von line0, col0 - lineN, colN definierten aktuellen Fensters. 3
  2638. ck zum Modul Display oder zur Goto-
  2639. bersicht. 
  2640.   Display.Write 
  2641.  PROCEDURE Write(ch: CHAR);
  2642. Schreibt ein Zeichen an die aktuelle Bildschirmposition, f
  2643. r die Farbe wird displayAttr verwendet. Der Cursor wird weiterbewegt. Die Prozedur arbeitet innerhalb der von line0, col0 - lineN, colN definierten Fenster-Koordinaten. 0
  2644. Die folgenden Steuerzeichen werden ausgef
  2645. hrt: %
  2646.  BEL, EOL, CR, LF, FF, DEL, BS, HT.
  2647. ck zum Modul Display oder zur Write-
  2648. bersicht. 
  2649.   Display.ClrEOL 
  2650.  PROCEDURE ClrEOL;
  2651. scht bis zum Zeilenende. Hierzu wird displayAttr benutzt. =
  2652. Die Prozedur arbeitet in den Grenzen des aktuellen Windows. 
  2653. ck zum Modul Display. 
  2654.   Display.ClrEOS 
  2655.   PROCEDURE ClrEOS;
  2656. scht bis zum Ende des aktuellen Windows. Hierzu wird displayAttr benutzt. 
  2657. ck zum Modul Display. 
  2658.   Display.DisplayString 
  2659.  PROCEDURE DisplayString(s: ARRAY OF CHAR;
  2660.                  line, pos: CARDINAL;
  2661.                       attr: CARDINAL);
  2662. Die Prozedur schreibt eine Zeichenkette direkt in den Bildschirmpuffer. 
  2663. "line" und "pos" beziehen sich auf die relativen Koordinaten des aktuellen Bildschirmfensters (Window). Der Cursor wird NICHT weiterbewegt und Steuerzeichen werden NICHT ausgef
  2664. hrt. 
  2665. DisplayString arbeitet in den Fensterkoordinaten, wie sie in line0, col0 - lineN, colN festgelegt sind. Die Prozedur arbeitet nur im Textmodus. Sie ist sehr schnell, da direkt in den Bildschirmspeicher geschrieben wird. 
  2666. ck zum Modul Display 
  2667.   Display.DisplayLine 
  2668.  PROCEDURE DisplayLine(line: ARRAY OF CHAR;
  2669.                      lineno: CARDINAL;
  2670.                        attr: CARDINAL);
  2671. Schreibt eine 80 Zeichen lange Zeile direkt in den Bildschirmspeicher. "attr" das zu verwendende Bildschirmattribut (Farbe). Falls die L
  2672. nge des Strings kleiner als 80 ist, wird der Rest mit Leerzeichen aufgef
  2673. llt. 
  2674. Die Prozedur arbeitet in den Fensterkoordinaten, wie sie in line0, col0 - lineN, colN festgelegt sind. Sie arbeitet nur im Textmodus. Sie ist sehr schnell, da direkt in den Bildschirmspeicher geschrieben wird. 
  2675. ck zum Modul Display 
  2676.   Display.WriteScreen 
  2677.  PROCEDURE WriteScreen(src, dest: ADDRESS;
  2678.                           nWords: CARDINAL);
  2679. Bewegt "nWords" "src" nach "dest". 
  2680. dest mu
  2681.  innerhalb des Bildschirmspeichers liegen. Falls snowy auf TRUE gesetzt ist, wird das vertikale Retrace-Signal des Monitors ber
  2682. cksichtigt. 
  2683. ck zum Modul Display 
  2684.   Display.ReadScreen 
  2685.  PROCEDURE ReadScreen(src, dest: ADDRESS;
  2686.                          nWords: CARDINAL);
  2687. Bewegt "nWords" "src" nach "dest". "src" mu
  2688.  sich innerhalb des Bildschirmspeichers befinden. Falls snowy = TRUE gesetzt ist, wird das vertikale Retrace-Signal des Monitors ber
  2689. cksichtigt. C
  2690. Die Prozedur arbeitet im Rahmen des aktuellen Bildschirmfensters. 
  2691. ck zum Modul Display 
  2692.    Display.Buffer
  2693.  TYPE
  2694.    DisplayBuffer = ARRAY [0..24] OF
  2695.                    ARRAY [0..79] OF CARDINAL;
  2696.    displayPtr: POINTER TO DisplayBuffer;
  2697. Die Variable wird zu Initialisierungszeit geladen. 
  2698. ck zum Modul Display 
  2699.   MODULE Windows 
  2700. Das Modul stellt eine einfache Implementation von Routinen f
  2701. berlappende Text-Windows zur Verf
  2702. gung. Alle Prozeduren dieses Moduls erwarten, da
  2703.  sich die Bildschirmanzeige im Textmodus befindet. Z
  2704. Das Modul installiert die Prozeduren Write und Goto aus dem Modul Display nach TermBase. 
  2705.  definierter Typ:
  2706.   Window
  2707.  definierte Prozeduren:
  2708.   OpenWindow      SelectWindow
  2709.   CloseWindow     CloseCurWindow
  2710.   NewWindowTitle
  2711. ck zum Index oder zu Routinen, Ende mit ESC 
  2712.   Windows.Window
  2713.  TYPE Window;
  2714. opaker Datentyp f
  2715. r die Steuerung der Fensterroutinen. 
  2716. ck zum Modul Windows. 
  2717.   Windows.OpenWindow 
  2718.  PROCEDURE OpenWindow(VAR w: Window;
  2719.              l1, c1, l2, c2: CARDINAL;
  2720.                       frame: BOOLEAN;
  2721.                      header: ARRAY OF CHAR);
  2722. ffne ein neues Fenster mit der oberen linken Ecke bei "l1", "c1" und der rechten unteren Ecke bei "l2", "c2". Wenn die Variable "frame" TRUE ist, wird ein Rahmen um das Window gezeichnet. Die Fenster-
  2723. berschrift wird automatisch in der obersten Fensterzeile zentriert. 
  2724. ck zum Modul Windows. 
  2725.   Windows.SelectWindow 
  2726.  PROCEDURE SelectWindow(w: Window;
  2727.                  mustSave: BOOLEAN);
  2728. Mache das Fenster "w" zum aktuellen Fenster, indem "w" an den Top des Windowstack gelegt wird. 
  2729. Die Variable "mustSave" dient dazu, schnellere Fensterumschaltungen zu erlauben, wenn sich die Fenster nicht 
  2730. berlappen. Wenn "mustSave" FALSE ist, wird der Inhalt des aktuellen Fensters nicht gesichert und der Inhalt des neuen Fensters nicht restauriert 
  2731. ck zum Modul Windows. 
  2732.   Windows.CloseWindows 
  2733.  PROCEDURE CloseWindow(w: Window);
  2734. Schlie
  2735. e (zerst
  2736. re) Window "w". 
  2737. ck zum Modul Windows. 
  2738.   Windows.CloseCurWindows 
  2739.  PROCEDURE CloseCurWindow;
  2740. Schlie
  2741. e das oberste Fenster. Das vorher aktive Window wird zum aktuellen Fenster. 
  2742. ck zum Modul Windows. 
  2743.   Windows.NewWindowTitle 
  2744.  PROCEDURE NewWindowTitle(header: ARRAY OF CHAR);
  2745. Zeigt einen neuen Fenstertitel an. 
  2746. ck zum Modul Windows. 
  2747.   MODULE Break 
  2748. Dieses Modul erlaubt dem Benutzer, den Ctrl-Break (Vektor 1BH) und den von DOS generierten Ctrl-C Interrupt (Vektor 23H) auszul
  2749. sen oder zu sperren. Bei der Initialisierung wird BREAK automatisch abgeschaltet. Das Anwendungsprogramm mu
  2750.  EnableBreak aufrufen, um die Verarbeitung von Abbruchtasten zuzulassen. Der Breakinterrupt-Handler pr
  2751. ft das DOS Busy-Flag um die Ausf
  2752. hrung von Ctrl-Break w
  2753. hrend Aktivit
  2754. ten von DOS zu verh
  2755. ten. Der voreingestellte Break-Handler bricht einfach das Programm mit einem ErrorLevel von 6 ab. DisableBreak wird immer aufgerufen, bevor die Kontrolle an eine benutzerdefinierte Breakhandler-Routine 
  2756. bergeben wird. Sollte die benutzerdefinierte Breakhandlerroutine ins Programm zur
  2757. ckkehren, wird das Programm mit einem Errorlevel von 6 beendet. 
  2758. Benutzung: C
  2759. Um zu verhindern, da
  2760.  ein Benutzer das Programm mit Ctrl-Break oder Ctrl-C beendet, mu
  2761.  nur das Modul importiert werden. W
  2762. hrend der Testphase eines Programms kann es sinnvoll sein, das Modul zu importieren und EnableBreak aufzurufen. Dies erlaubt ein Programm auch dann zu beenden, wenn es in einer Endlosschleife h
  2763. ngt. 
  2764.  definierte Prozeduren:
  2765.   EnableBreak  InstallBreakHandler
  2766.   DisableBreak UninstallBreakHandler
  2767. ck zum Index oder zu Routinen, Ende mit ESC 
  2768.   Break.DisableBreak 
  2769.  PROCEDURE DisableBreak;
  2770. Schaltet die 
  2771. berwachung von Crt-Break aus. Das Dr
  2772. cken von Ctrl-Break bleibt so ohne Wirkung. 
  2773. ck zum Modul Break 
  2774.   Break.EnableBreak 
  2775.  PROCEDURE EnableBreak;
  2776. Erlaubt die Ausf
  2777. hrung von Ctrl-Break. Der voreingestellte Break-Handler beendet das Programm. 
  2778. ck zum Modul Break 
  2779.   Break.InstallBreakHandler 
  2780.  PROCEDURE InstallBreakHandler(breakHandler: PROC);
  2781. Installation eines eigenen Break-Handlers - die Break
  2782. berwachung mu
  2783.  eingestellt sein. 
  2784. ck zum Modul Break 
  2785.   Break.UninstallBreakHandler 
  2786.  PROCEDURE UninstallBreakHandler;
  2787. Deinstalliert die Benutzer-definierte Break-Handler-Prozedur. 
  2788. ck zum Modul Break 
  2789.    MODULE Directories 
  2790. In diesem Modul sind ein gro
  2791. er Teil der Verzeichnisoperationen definiert. /
  2792.   definierte Typen:
  2793.    DirEntry     QueryProc
  2794.   definierte Variable:
  2795.    DirStatus
  2796.   definierte Konstanten:
  2797.    NORMAL       READONLY
  2798.    HIDDEN       SYSTEM
  2799.    DIRECTORY    ARCHIVE
  2800.   definierte Prozeduren:
  2801.    GetFirstDir  GetNextDir
  2802.    DirQuery     Delete
  2803.    MkDir        Rename
  2804.    RmDir        GetFileTime
  2805.    ChDir        GetFileAttr
  2806.    SetFileAttr  SetFileTime
  2807.    GetCurDir    ASCIIZ
  2808. ck zum Index oder zu Routinen, Ende mit ESC 
  2809.   Directories.DirEntry
  2810.  TYPE
  2811.   DirEntry = RECORD
  2812.                name      :ARRAY [0..65] OF CHAR;
  2813.                attribute :BITSET;
  2814.                time      :CARDINAL;
  2815.                date      :CARDINAL;
  2816.                size      :LONGCARD;
  2817.              END;
  2818. ck zum Modul Directories 
  2819.   Directories.QueryProc
  2820.  TYPE
  2821.    QueryProc = PROCEDURE(DirEntry);
  2822.  PROCEDURE DirQuery(path: ARRAY OF CHAR;
  2823.            attributes: BITSET;
  2824.                     p: QueryProc);
  2825. ck zum Modul Directories 
  2826.   Dateiattribute
  2827.  Attributbits:
  2828.   NORMAL    =  {};  READONLY  = {0};
  2829.   HIDDEN    =  {1}; SYSTEM    = {2};
  2830.   DIRECTORY =  {4}; ARCHIVE   = {5};
  2831. ck zum Modul Directories 
  2832.   Directories.GetFirstDir 
  2833.  PROCEDURE GetFirstDir(Path: ARRAY OF CHAR;
  2834.                   Attribute: BITSET;
  2835.                     VAR Dir: DirEntry;
  2836.                     VAR ok : BOOLEAN);
  2837.  Bei der R
  2838. ckgabe:
  2839.   IF ok THEN
  2840.     ...
  2841.   END;
  2842. "Dir" ist der erste Verzeichniseintrag der "Path" und "Attribute" besitzt. 
  2843. ck zum Modul Directories 
  2844.   Directories.GetNextDir 
  2845.  PROCEDURE GetNextDir(VAR Dir:DirEntry;
  2846.                       VAR ok :BOOLEAN);
  2847.  Bei der R
  2848. ckgabe:
  2849.     IF ok THEN
  2850.       ...
  2851.     END;
  2852. "Dir" ist der n
  2853. chste Verzeichniseintrag bei dem "Path" und "Attribute" des letzten GetFirstDir oder GetNextDir 
  2854. bereinstimmen. 
  2855. ck zum Modul Directories 
  2856.   Directories.DirQuery 
  2857.  TYPE
  2858.   QueryProc = PROCEDURE(DirEntry);
  2859.  PROCEDURE DirQuery(path: ARRAY OF CHAR;
  2860.               attributes: BITSET;
  2861.                        p: QueryProc);
  2862. hrt die Prozedur "p" f
  2863. r jeden Verzeichniseintrag aus, der mit der Suchmaske und dem angegebenen Attribut 
  2864. bereinstimmt. 
  2865. ck zum Modul Directories 
  2866.   Directories.MkDir 
  2867.  PROCEDURE MkDir(dirName: ARRAY OF CHAR);
  2868. Erstellt ein neues Verzeichnis. _
  2869. "dirName" kann jeder beliebige Pfadname inklusive einer optionalen Laufwerksbezeichnung sein. 
  2870. ck zum Modul Directories 
  2871.   Directories.RmDir 
  2872.  PROCEDURE RmDir(dirName: ARRAY OF CHAR);
  2873. scht das Verzeichnis dirName. `
  2874. "dirName" kann jeder beliebige Pfadname inklusive einer optionalen Laufwerksbezeichnungs sein. 
  2875. ck zum Modul Directories 
  2876.   Directories.ChDir 
  2877.  PROCEDURE ChDir(dirName: ARRAY OF CHAR);
  2878. Wechselt das aktuelle Verzeichnis zu "dirName". _
  2879. "dirName" kann jeder beliebige Pfadname inklusive einer optionalen Laufwerksbezeichnung sein. 
  2880. Wird ein anderes als das aktuelle Laufwerk angegeben, wird nur auf dem anderen Laufwerk der Pfad gewechselt. Au
  2881. erdem wird zum anderen Laufwerk als aktuelles Laufwerk gewechselt 
  2882. ck zum Modul Directories 
  2883.   Directories.GetFileAttr 
  2884.  PROCEDURE GetFileAttr(fileName: ARRAY OF CHAR;
  2885.                        VAR attr: BITSET);
  2886. Liest die Attribut-Bits der Datei "fileName". i
  2887. "fileName" und "dirName" sind jeder beliebige Pfadname inklusive einer optionalen Laufwerksbezeichnung. 
  2888. ck zum Modul Directories 
  2889.   Directories.SetFileAttr 
  2890.  PROCEDURE SetFileAttr(fileName: ARRAY OF CHAR;
  2891.                            attr: BITSET);
  2892. Setzt die Dateiattribut-Bits der Datei "fileName". i
  2893. "fileName" und "dirName" sind jeder beliebige Pfadname inklusive einer optionalen Laufwerksbezeichnung. 
  2894. ck zum Modul Directories 
  2895.   Directories.GetCurDir 
  2896.  PROCEDURE GetCurDir(drive: CARDINAL;
  2897.                 VAR curDir: ARRAY OF CHAR);
  2898. Liefert das aktuelle Verzeichnis des  angegebenen Laufwerks wobei gilt: g
  2899.   drive = 0     - aktuelles Laufwerk
  2900.         = 1     - Laufwerk A
  2901.         = 2     - Laufwerk B
  2902.    ...
  2903. ck zum Modul Directories 
  2904.   Directories.Delete 
  2905.  PROCEDURE Delete(fileName: ARRAY OF CHAR);
  2906. scht die Datei "fileName" vom Datentr
  2907. "fileName" kann jeder beliebige Pfad- und Dateiname inklusive einer optionalen Laufwerksbezeichnung sein. 9
  2908. ck zum Modul Directories oder zur Delete-
  2909. bersicht. 
  2910.   Directories.Rename 
  2911.  PROCEDURE Rename(oldName,
  2912.                   newName: ARRAY OF CHAR);
  2913. Benennt die Datei "oldName" in "newName" um. t
  2914. Rename kann benutzt werden, um eine Datei vom einen in anderes Verzeichnis auf dem selben Laufwerk zu verschieben. h
  2915. "oldName" und "newName" sind jeder beliebige Pfadname inklusive einer optionalen Laufwerksbezeichnung. 9
  2916. ck zum Modul Directories oder zur Rename-
  2917. bersicht. 
  2918.   Directories.GetFileTime 
  2919.  PROCEDURE GetFileTime(fileName: ARRAY OF CHAR;
  2920.                        VAR time: LONGCARD);
  2921. Liefert das Datum die Uhrzeit der letzten 
  2922. nderung der Datei "fileName". c
  2923.  time DIV 65536L = Datum der letzten 
  2924. nderung
  2925.  time MOD 65536L = Uhrzeit der letzten 
  2926. nderung
  2927. "fileName" kann jeder beliebige Pfadname inklusive einer optionalen Laufwerksbezeichnung sein. >
  2928. ck zum Modul Directories oder zur GetFileTime-
  2929. bersicht. 
  2930.   Directories.SetFileTime 
  2931.  PROCEDURE SetFileTime(fileName: ARRAY OF CHAR;
  2932.                            time: LONGCARD);
  2933. Setzt Datum und Uhrzeit einer Datei. `
  2934. "fileName" kann jeder beliebige Pfadname inklusive einer optionalen Laufwerksbezeichnung sein. >
  2935. ck zum Modul Directories oder zur SetFileTime-
  2936. bersicht. 
  2937.   Directories.ASCIIZ 
  2938.  PROCEDURE ASCIIZ(VAR src,
  2939.                      dest: ARRAY OF CHAR);
  2940. Konvertiert die Zeichenkette "src" in einen Null-terminierten String in "dest" wie er von Dateiprozeduren verlangt wird. 
  2941. ck zum Modul Directories 
  2942.   Directories.DirStatus 
  2943.    DirStatus: CARDINAL;
  2944. DOS-Status nach dem letzten Aufruf eines Datei-Prozeduraufrufs. 
  2945. ck zum Modul Directories 
  2946.   MODULE DTA 
  2947. Lesen und Setzen der DOS-Disk-Transfer-Adress (DTA). !
  2948. In "DTA" definierte Prozeduren: 
  2949.  SetDTA GetDTA
  2950. ck zum Index oder zu Routinen, Ende mit ESC 
  2951.   DTA.SetDTA 
  2952.  PROCEDURE SetDTA(adrs: ADDRESS);
  2953. setzt die DTA nach "adrs". 
  2954. ck zum Modul DTA. 
  2955.   DTA.GetDTA 
  2956.  PROCEDURE GetDTA(VAR adrs :ADDRESS);
  2957. Liest die aktuelle DAT und setzt den Zeiger nach "adrs". 
  2958. ck zum Modul DTA. 
  2959.   MODULE Files 
  2960. Modul f
  2961. r das DOS-Dateiverwaltungs-Interface. f
  2962. Weitere Informationen 
  2963. ber diese Routinen sollten dem technischen Handbuch f
  2964. r DOS entnommen werden. 
  2965.  definierte Konstanten:
  2966.   StdIn StdOut StdErr StdCom StdPrn
  2967.   NORMAL
  2968.   READONLY
  2969.   HIDDEN
  2970.   SYSTEM
  2971.   READ
  2972.   WRITE
  2973.   NOINHERIT
  2974.   DENYWRITE
  2975.   DENYREAD
  2976.   DENYNONE
  2977.  definierter Typ:
  2978.   SeekMode
  2979.  definierte Variable:
  2980.   FileStatus
  2981.  definierte Prozeduren:
  2982.   Open        Create
  2983.   CreateTemp  Rename
  2984.   CreateNew   Delete
  2985.   Seek        Close
  2986.   Dup         Read
  2987.   Lock        Write
  2988.   Unlock      GetFileTime
  2989.   Dup2        SetFileTime
  2990. ck zum Index oder zu Routinen, Ende mit ESC. $
  2991.   DOS-Standard-Handles
  2992.  CONST
  2993.    StdIn  = 0;  StdOut = 1
  2994.    StdErr = 2   StdCom = 3;
  2995.    StdPrn = 4
  2996. ck zum Modul Files 
  2997.   Dateiattribut-Bits
  2998. Diese Bits werden ben
  2999. tigt, um Dateien zu erzeugen. ;
  3000. rfen mehrere der Bits gleichzeitig verwendet werden. J
  3001.  CONST
  3002.    NORMAL =  {}; READONLY = {0};
  3003.    HIDDEN = {1}; SYSTEM   = {2};
  3004. ck zum Modul Files 
  3005.   Flags f
  3006. r die Datei-Zugriffsrechte
  3007. Flags f
  3008. r die Zugriffsrechte beim 
  3009. ffnen von Dateien. 
  3010. Es mu
  3011.  eines aus der ersten Gruppe ausgew
  3012. hlt werden oder eines oder mehrere aus der zweiten Gruppe gew
  3013. hlt und diese dann zusammenaddiert werden. ,
  3014.  READ  =  {}; 
  3015. ffnet die Datei zum Lesen. 0
  3016.  WRITE = {0}; 
  3017. ffnet die Datei zum Schreiben. :
  3018.  IO    = {1}; 
  3019. ffnet die Datei zum Lesen und Schreiben. #
  3020. Datei-Zugriffsrechte ab DOS 3.1: :
  3021.  DENYALL   = {4}; Zur
  3022. ckweisung aller anderen Prozesse. P
  3023.  DENYWRITE = {5}; Zur
  3024. ckweisen der Schreibfunktion f
  3025. r alle anderen Prozesse. J
  3026.  DENYREAD  = {4,5}; Zur
  3027. ckweisern des Lesens f
  3028. r alle anderen Prozesse. 8
  3029.  DENYNONE  = {6}; Freier Zugriff f
  3030. r andere Prozesse. 6
  3031.  NOINHERIT = {7}; Kein Zugriff f
  3032. r Tochterprozesse. 
  3033. ck zum Modul Files 
  3034.   Files.SeekMode
  3035. Suchmodus - f
  3036. r die Benutzung mit "Seek". 2
  3037.  TYPE
  3038.    SeekMode = (SEEKABS, SEEKCUR, SEEKEND);
  3039.  SEEKABS: Angabe der absoluten Suchposition. H
  3040.  SEEKCUR: Relative Angabe der Suchposition zum aktuellen Dateizeiger. A
  3041.  SEEKEND: Angabe der absoluten Suchposition vom Dateiende aus. 
  3042. ck zum Modul Files 
  3043.   Files.FileStatus
  3044.    FileStatus: CARDINAL;
  3045. DOS-Fehlercode f
  3046. r die letzten Dateifunktionen. @
  3047. Liefert 0 zur
  3048. ck, wenn der letzte Dateiaufruf erfolgreich war. 
  3049. ck zum Modul Files 
  3050.   Files.Open 
  3051.  PROCEDURE Open(VAR fd: INTEGER;
  3052.                   name: ARRAY OF CHAR;
  3053.                   mode: BITSET);
  3054. ffnet eine Datei abh
  3055. ngig vom angegebenen Dateimodus. x
  3056. Bei der R
  3057. ckkehr enth
  3058. t der Datei-Deskriptor den von DOS zur
  3059. ckgegebenen Wert oder -1 wenn ein Fehler aufgetreten ist. 
  3060. ck zum Modul Files 
  3061.   Files.Create 
  3062.  PROCEDURE Create(VAR fd: INTEGER;
  3063.                     name: ARRAY OF CHAR;
  3064.                     attr: BITSET);
  3065. Erstellt eine neue Datei oder schneidet eine bestehende Datei ab. 
  3066. Falls Create erfolgreich war, wird die Datei f
  3067. r Lesen und Schreiben ge
  3068. ffnet. "fd" erh
  3069. lt den Datei-Deskriptorwert, der von DOS zur
  3070. ckgeliefert wurde. Falls Create fehlgeschlagen ist, enth
  3071. lt "fd" den Wert -1. 3
  3072. ck zum Modul Files oder zur Create-
  3073. bersicht. 
  3074.   Files.CreateTemp 
  3075.  PROCEDURE CreateTemp(VAR fd: INTEGER;
  3076.                     VAR path: ARRAY OF CHAR;
  3077.                         attr: BITSET);
  3078. Erstellt ab DOS 3.x eine neue Datei mit einmalig vergebenem Namen. 
  3079. Beim Eintritt in die Prozedur sollte die Variable "path" den Namen des Verzeichnisses enthalten, in dem die Tempor
  3080. rdatei angelegt wird und gen
  3081. gend Platz (14 Bytes), damit DOS den Namen anh
  3082. ngen kann. g
  3083. Bei der R
  3084. ckkehr aus der Prozedur enth
  3085. lt die Variable "path" den kompletten Namen der Tempor
  3086. rdatei. 
  3087. Hinweis: DOS l
  3088. scht die Tempor
  3089. rdatei nicht automatisch. Falls die Datei nicht mehr ben
  3090. tigt wird, mu
  3091.  sie vom Benutzer gel
  3092. scht werden. 
  3093. ck zum Modul Files 
  3094.   Files.CreateNew 
  3095.  PROCEDURE CreateNew(VAR fd: INTEGER;
  3096.                        name: ARRAY OF CHAR;
  3097.                        attr: BITSET);
  3098. Entspricht Create. CreateNew schl
  3099. gt jedoch fehl, wenn die Datei bereits existiert (DOS 3.x). 
  3100. ck zum Modul Files 
  3101.   Files.Close 
  3102.  PROCEDURE Close(fd: INTEGER);
  3103. Schlie
  3104. t die Datei. Jede weitere Ein- oder Ausgabe auf diesen Datei-Deskriptor schl
  3105. gt fehl. 2
  3106. ck zum Modul Files oder zur Close-
  3107. bersicht. 
  3108.   Files.Read 
  3109. PROCEDURE Read(fd: INTEGER; W
  3110.            buffer: ADDRESS;
  3111.             bytes: CARDINAL;
  3112.         VAR nread: CARDINAL);
  3113. Lese die angegebene Anzahl von Bytes aus der Datei. J
  3114. Bei der R
  3115. ckkehr enth
  3116. lt "nwritten" die aktuelle Anzahl gelesener Bytes. 1
  3117. ck zum Modul Files oder zur Read-
  3118. bersicht. 
  3119.   Files.Write 
  3120.  PROCEDURE Write(fd: INTEGER;
  3121.              buffer: ADDRESS;
  3122.               bytes: CARDINAL;
  3123.        VAR nwritten: CARDINAL);
  3124. Schreibe die angegebene Anzahl von Bytes in die Datei. N
  3125. Bei der R
  3126. ckkehr enth
  3127. lt "nwritten" die aktuelle Anzahl geschriebener Bytes. 2
  3128. ck zum Modul Files oder zur Write-
  3129. bersicht. 
  3130.   Files.Seek 
  3131.  PROCEDURE Seek(fd: INTEGER; 
  3132.               mode: SeekMode; 
  3133.         VAR offset: LONGCARD);
  3134. Die Prozedur bewegt den Dateizeiger zu der mit "offset" angegebenen Adresse in der Datei, je nach der in Mode angegebenen Startegie A
  3135. Bei der R
  3136. ckkehr enth
  3137. lt "offset" die neue Dateizeigerposition. 
  3138. ck zum Modul Files 
  3139.   Files.Lock 
  3140.  PROCEDURE Lock(fd: INTEGER;
  3141.             offset: LONGCARD;
  3142.             length: LONGCARD);
  3143. Sperrt den Dateibereich ab dem Offset "offset" f
  3144. r "length" Bytes. 
  3145. Erst ab DOS 3.1! 
  3146. ck zum Modul Files 
  3147.   Files.Unlock 
  3148.  PROCEDURE Unlock(fd: INTEGER;
  3149.              offset: LONGCARD; 
  3150.              length: LONGCARD);
  3151. Hebt die Sperrung des Dateibereichs ab "offset" f
  3152. r "length" Bytes wieder auf. Die Prozedur ben
  3153. tigt DOS ab 3.1 
  3154. ck zum Modul Files 
  3155.   Files.Dup 
  3156.  PROCEDURE Dup(fd: INTEGER; 
  3157.         VAR newfd: INTEGER);
  3158. Erzeugt einen neuen Datei-Handle f
  3159. r "fd" in "newfd". 
  3160. ck zum Modul Files 
  3161.   Files.Dup2 
  3162.  PROCEDURE Dup2(fd, fd2 :INTEGER);
  3163. Dupliziert den Dateihandle fd auf fd2. 
  3164. ck zum Modul Files 
  3165.   Files.GetFileTime 
  3166.  PROCEDURE GetFileTime(fd: INTEGER;
  3167.                  VAR time: LONGCARD);
  3168. Liefert die Zeit und das Datum der letzten 
  3169. nderung der Datei. 0
  3170.  time DIV 65536L = Datum der letzten 
  3171. nderung /
  3172.  time MOD 65536L = Zeit der letzten 
  3173. nderung 8
  3174. ck zum Modul Files oder zur GetFileTime-
  3175. bersicht. 
  3176.   Files.SetFileTime 
  3177.  PROCEDURE SetFileTime(fd: INTEGER;
  3178.                      time: LONGCARD);
  3179. Setzt das Datum und die Uhrzeit der Datei. 8
  3180. ck zum Modul Files oder zur SetFileTime-
  3181. bersicht. 
  3182.   Files.Rename 
  3183. PROCEDURE Rename(oldname, *
  3184.                  newname: ARRAY OF CHAR);
  3185. ndert den Dateinamen von "oldname" in "newname". 
  3186. Files.Rename kann dazu verwendet werden, eine Datei vom einen in anderes Verzeichnis zu verschieben, allerdings nur auf dem selben Laufwerk. 3
  3187. ck zum Modul Files oder zur Rename-
  3188. bersicht. 
  3189.   Files.Delete 
  3190.  PROCEDURE Delete(name: ARRAY OF CHAR);
  3191. scht die in "name" angegebene Datei. 3
  3192. ck zum Modul Files oder zur Delete-
  3193. bersicht. 
  3194.   MODULE FileSpec 
  3195. Die Prozeduren dieses Moduls erlauben dem Benutzer, komplette Dateinamen zu manipulieren. 
  3196. Keine der Prozeduren f
  3197. hrt eine 
  3198. berpr
  3199. fung auf die Richtigkeit der Pfadnamen durch. Sie trennen nur die einzelnen Komponenten auf der Grundlage der DOS-Sytax f
  3200. r Pfadnamen. 
  3201. Beispiel: 
  3202. ParseFileSpec gibt f
  3203. r "\m2\comp" ein Verzeichnis "m2" und einen Dateinamen "comp" zur
  3204. ck - auch dann, wenn "\m2\comp" der Name eines vorhandenen Unterverzeichnisses ist. 
  3205. Definierte Prozeduren: D
  3206.  ParseFileSpec    ExtractDirPath
  3207.  ExtractFileName  DropExt
  3208.  HasExt
  3209. ck zum Index oder zu Routinen, Ende mit ESC 
  3210.   FileSpec.ParseFileSpec 
  3211.  PROCEDURE ParseFileSpec(
  3212.            filespec: ARRAY OF CHAR;
  3213.           VAR drive: CHAR;
  3214.             VAR dir: ARRAY OF CHAR;
  3215.            VAR name: ARRAY OF CHAR;
  3216.             VAR ext: ARRAY OF CHAR);
  3217. Nur belegte Teile aus "filespec" werden wieder zur
  3218. ckgeliefert. Die anderen Felder werden mit einer Null in ersten Feld geladen. "
  3219.  drive: das angegebene Laufwerk )
  3220.  dir:   der angegebene Verzeichnispfad +
  3221.  name:  der Dateiname ohne die Extension 
  3222.  ext:   die Dateiendung H
  3223.  Beispiel:
  3224.   ParseFileName("d:m2\comp\mc.mod", drive, dir, name, ext);
  3225. rde zur
  3226. ckliefern:
  3227.   drive   = "d"
  3228.   dir     = "m2\comp"
  3229.   name    = "mc"
  3230.   ext     = "mod"
  3231. ck zum Modul FileSpec 
  3232.   FileSpec.ExtractDirPath 
  3233.  PROCEDURE ExtractDirPath(
  3234.            filespec: ARRAY OF CHAR;
  3235.             VAR dir: ARRAY OF CHAR);
  3236. Liefert die Dateibezeichnung ohne den Dateinamen in "dir". `
  3237.  Das Beispiel:
  3238.   ExtractDirName("d:m2\comp\mc.mod", dir);
  3239.  liefert zur
  3240.   dir = "d:m2\comp"
  3241. ck zum Modul FileSpec 
  3242.   FileSpec.ExtractFileName 
  3243.  PROCEDURE ExtractFileName(
  3244.              filespec: ARRAY OF CHAR;
  3245.              VAR name: ARRAY OF CHAR);
  3246. Gibt in "name" den Dateinamen von "filespec" zur
  3247. ck. 9
  3248.  Beispiel:
  3249.   ExtractFileName("d:m2\comp\mc.mod", name);
  3250.  gibt zur
  3251.   name = "mc.mod"
  3252. ck zum Modul FileSpec 
  3253.   FileSpec.DropExt 
  3254.  PROCEDURE DropExt(
  3255.            filespec: ARRAY OF CHAR;
  3256.         VAR newspec: ARRAY OF CHAR);
  3257. Die Prozedur liefert in "newspec" den Dateinamen mit der vollen Pfadangabe zur
  3258. ck. <
  3259.  Beispiel:
  3260.   ExtractFileName("d:m2\comp\mc.mod", newspec);
  3261.  gibt zur
  3262.   newspec = "d:m2\comp\mc"
  3263. ck zum Modul FileSpec 
  3264.   FileSpec.HasExt 
  3265.  PROCEDURE HasExt(filespec: ARRAY OF CHAR): BOOLEAN;
  3266. TRUE, falls die Dateiangabe eine Dateiendung besitzt. 
  3267. ck zum Modul FileSpec 
  3268.   MODULE KeyBoard 
  3269. Dieses Modul liefert die Schnittstelle zu den BIOS-Tastatur-Routinen. /
  3270.  definierte Typen:
  3271.   ShiftKeys    ShiftStatus
  3272.  definierte Prozeduren:
  3273.   GetKey       GetKeyCh
  3274.   GetFunKey    GetShiftStatus
  3275.   KeyPressed
  3276. erdem sind in KeyBoard alle Tastaturcodes als Konstanten definiert. 1
  3277. ck zum Index oder zu Routinen, Ende mit ESC 
  3278.   Tabelle der Tastaturcodes 
  3279. CONST 
  3280.  Break = 80X; ShiftTab = 81X;
  3281.  AltQ  = 82X; AltW     = 83X;
  3282.  AltE  = 84X; AltR     = 85X;
  3283.  AltT  = 86X; AltY     = 87X;
  3284.  AltU  = 88X; AltI     = 89X;
  3285.  AltO  = 8AX; AltP     = 8BX;
  3286.  AltA  = 90X; AltS     = 91X;
  3287.  AltD  = 92X; AltF     = 93X;
  3288.  AltG  = 94X; AltH     = 95X;
  3289.  AltJ  = 96X; AltK     = 97X;
  3290.  AltL  = 98X; AltZ     = 09EX;
  3291.  AltX  = 09FX; AltC    = 0A0X;
  3292.  AltV  = 0A1X; AltB    = 0A2X;
  3293.  AltN  = 0A3X; AltM    = 0A4X;
  3294.  F1    = 0ADX; F2      = 0AEX;
  3295.  F3    = 0AFX; F4      = 0B0X;
  3296.  F5    = 0B1X; F6      = 0B2X;
  3297.  F7    = 0B3X; F8      = 0B4X;
  3298.  F9    = 0B5X; F10     = 0B6X;
  3299.  Home  = 0B9X; Up      = 0BAX;
  3300.  PgUp  = 0BBX; Left    = 0BDX;
  3301.  Right = 0BFX; End     = 0C1X;
  3302.  Down  = 0C2X; PgDn    = 0C3X;
  3303.  Ins   = 0C4X; Del     = 0C5X;
  3304.  SF1   = 0C6X; SF2     = 0C7X;
  3305.  SF3   = 0C8X; SF4     = 0C9X;
  3306.  SF5   = 0CAX; SF6     = 0CBX;
  3307.  SF7   = 0CCX; SF8     = 0CDX;
  3308.  SF9   = 0CEX; SF10    = 0CFX;
  3309.  CF1   = 0D0X; CF2     = 0D1X;
  3310.  CF3   = 0D2X; CF4     = 0D3X;
  3311.  CF5   = 0D4X; CF6     = 0D5X;
  3312.  CF7   = 0D6X; CF8     = 0D7X;
  3313.  CF9   = 0D8X; CF10    = 0D9X;
  3314.  AF1   = 0DAX; AF2     = 0DBX;
  3315.  AF3   = 0DCX; AF4     = 0DDX;
  3316.  AF5   = 0DEX; AF6     = 0DFX;
  3317.  AF7   = 0E0X; AF8     = 0E1X;
  3318.  AF9   = 0E2X; AF10    = 0E3X;
  3319.  CtrlPrtSc = 0E4X; CtrlLeft  = 0E5X;
  3320.  CtrlRight = 0E6X; CtrlEnd   = 0E7X;
  3321.  CtrlPgDn  = 0E8X; CtrlHome  = 0E9X;
  3322.  Alt1     = 0EAX;  Alt2      = 0EBX;
  3323.  Alt3     = 0ECX;  Alt4      = 0EDX;
  3324.  Alt5     = 0EEX;  Alt6      = 0EFX;
  3325.  Alt7     = 0F0X;  Alt8      = 0F1X;
  3326.  Alt9     = 0F2X;  Alt0      = 0F3X;
  3327.  AltMinus = 0F4X;  AltEquals = 0F5X;
  3328.  CtrlPgUp = 0F6X;
  3329. ck zum Index Ende mit ESC 
  3330.   KeyBoard.ShiftKeys / .ShiftStatus
  3331.  TYPE
  3332.    ShiftKeys  = (rightShift,
  3333.                  leftShift,
  3334.                  Ctrl,
  3335.                  Alt,
  3336.                  ScrollLock,
  3337.                  NumLock);
  3338.   ShiftStatus = SET OF ShiftKeys;
  3339. ck zum Modul KeyBoard 
  3340.   KeyBoard_KeyPressed 
  3341.  PROCEDURE KeyPressed(): BOOLEAN;
  3342. Wartet da ein Zeichen im Tastaturpuffer? :
  3343. ck zum Modul KeyBoard oder zur KeyPressed-
  3344. bersicht. 
  3345.   KeyBoard.GetKey 
  3346.  PROCEDURE GetKey(VAR k: CHAR);
  3347. Entspricht der "INKEY"-Funktion in BASIC. p
  3348. Es wird entweder ein Zeichen oder 0C oder mit dem n
  3349. chsten Aufruf der erweiterte Tastaturcode zur
  3350. ckgeliefert. 
  3351. ck zum Modul KeyBoard 
  3352.   KeyBoard.GetKeyCh 
  3353.  PROCEDURE GetKeyCh(VAR ch: CHAR);
  3354. Erweiterte Tastaturcodes werden in die oberen 128 ASCII-Zeichen 
  3355. bertragen, wie sie in der Tabelle der Tastaturcodes zusammengefa
  3356. t sind. 
  3357. ck zum Modul KeyBoard 
  3358.   KeyBoard.GetFunKey 
  3359.  PROCEDURE GetFunKey(VAR ch: CARDINAL);
  3360. Diese Prozedur unterst
  3361. tzt den internationalen Zeichensatz, der das obere Bit von CHAR ben
  3362. tzt. Der Ordinalwert der regul
  3363. ren Zeichen wird zur
  3364. ckgegeben. Erweiterte Zeichen werden in die oberen 128 ASCII-Zeichen umgelagert. Anschlie
  3365. end wird 100H dazuaddiert. So wird von <F1> der Wert 01ADH zur
  3366. ckgegeben. 
  3367. ck zum Modul KeyBoard 
  3368.   KeyBoard.GetShiftStatus 
  3369.  PROCEDURE GetShiftStatus(VAR st: ShiftStatus);
  3370. Liefert den Status der Shift/Control-Tasten 
  3371. ck zum Modul KeyBoard 
  3372.   MODULE Menu 
  3373. In diesem Modul sind nur die beiden Men
  3374. typen PopMenu und PullDownMenu definiert. H
  3375. Das Modul verwendet das Modul Windows, um die Men
  3376. fenster zu erzeugen. 1
  3377. ck zum Index oder zu Routinen, Ende mit ESC 
  3378.   Menu.PopMenu 
  3379.  PROCEDURE PopMenu(line,
  3380.                    col:   CARDINAL;
  3381.                    menu:  ARRAY OF CHAR;
  3382.                    width: CARDINAL;
  3383.                    clear: BOOLEAN;
  3384.                VAR cmd:   CARDINAL );
  3385. Klappt ein Men
  3386.  bei line, col auf. 
  3387. "menu" ist eine Zeichenkette von Men
  3388. s, die durch das Zeichen "|" getrennt werden. Der erste Eintrag enth
  3389. lt den Titel des Men
  3390. s. "width" ist die minimale Breite f
  3391. r das Men
  3392. -Window. Falls "clear" TRUE ist, wird das Men
  3393.  nach der Men
  3394. auswahl zerst
  3395. rt, sonst bleibt es auf dem Bildschirm. Dann mu
  3396.  es mit Windows.CloseCurWindow entfernt werden. "cmd" ist 0, falls kein Men
  3397. punkt ausgew
  3398. hlt wurde (ESC), ansonsten wird die Nummer des Men
  3399. punktes zur
  3400. ckgegeben. ~
  3401. Falls bei der R
  3402. ckgabe cmd = 0 ist, wird das Fenster auf alle F
  3403. lle geschlossen, egal welcher Wert in clear abgegeben wurde. H
  3404.  Beispiel:
  3405.   PopMenu(5, 10, "Hauptmen
  3406. |Hallo|Bye|Ende", 0, TRUE, cmd);
  3407. Siehe auch PullDownMenu 
  3408. ck zum Modul Menu 
  3409.   Menu.PullDownMenu 
  3410.  PROCEDURE PullDownMenu(line    : CARDINAL;
  3411.                         frame   : BOOLEAN;
  3412.                         MainMenu: ARRAY OF CHAR;
  3413.                         SubMenus: ARRAY OF CHAR;
  3414.                         clear   : BOOLEAN;
  3415.                     VAR cmd1,
  3416.                         cmd2    : CARDINAL);
  3417. Erstellt ein Pulldown-Men
  3418.  in der Zeile "line". 
  3419. In "frame" wird angegeben, ob der Pulldownbalken einen Rahmen bekommt. "MainMenu" ist eine Zeichenkette, in der die Men
  3420. punkt, getrennt von einem "|" angegeben werden. "SubMenus" ist eine Zeichenkette mit Untermen
  3421. s, getrennt von "&"; jedes der Untermen
  3422. s enth
  3423. lt eine Liste von Auswahlpunkte, getrennt von "|". Bei der R
  3424. ckgabe enth
  3425. lt "cmd1" die Nummer des gew
  3426. hlten Hauptmen
  3427. punkts und "cmd2" die Nummer des entspechenden Untermen
  3428. punkts. Falls der Benutzer ESC dr
  3429. ckt, liefert cmd1 0 zur
  3430. ck. 7
  3431. Alle Men
  3432. fenster werden vor der R
  3433. ckkehr geschlossen. 
  3434. siehe auch PopMenu 
  3435. ck zum Modul Menu 
  3436.   MODULE Loader 
  3437. In diesem Modul ist nur die Prozedur Execute definiert, die dazu dient, andere Programme nachzuladen. Sie entspricht der Turbo-Pascal Prozedur "Exec". $
  3438. ck zum Index oder zu Routinen, 
  3439. Ende mit ESC 
  3440.   Loader.Execute 
  3441.  PROCEDURE Execute(pgm: ARRAY OF CHAR;
  3442.                   args: ARRAY OF CHAR;
  3443.           VAR exitcode: CARDINAL);
  3444. Die Prozedur startet das externe Programm "pgm" mit der Argument "args". Es mu
  3445.  der volle Pfadname des externen Programms angegeben werden. $
  3446. Bei der R
  3447. ckkehr aus der Prozedur: j
  3448.  exitcode < 32768:
  3449.    Die Ausf
  3450. hrung konnte nicht stattfinden.
  3451.    Der DOS-Exitcode wird zur
  3452. ckgegeben.
  3453.  exitcode >= 32768:
  3454.    exitcode MOD 256 ist der Exitcode
  3455.    des Programms "pgm"
  3456.  (exitcode-32768) DIV 256
  3457.    ist der Grund f
  3458. r die Beendigung
  3459.    des Programms:
  3460.    0 = normal
  3461.    1 = durch Ctrl-C
  3462.    2 = Kritischer Ger
  3463. tefehler
  3464.    3 = DOS-Funktion 31H (TSR)
  3465. Execute versucht, dem aufgerufenen Programm m
  3466. glichst viel Speicher zuzuweisen, indem der Speicher 
  3467. ber System.HeapTop freigegeben wird. Das aufgerufene Programm darf nicht speicherresident verbleiben (TSR)!!! 
  3468. ck zum Modul Loader 
  3469.   MODULE Paths 
  3470. Im Modul Paths ist nur die Prozedur Locate definiert. 1
  3471. ck zum Index oder zu Routinen, Ende mit ESC 
  3472.   Paths.Locate 
  3473.  PROCEDURE Locate(fileName: ARRAY OF CHAR;
  3474.                    envPath: ARRAY OF CHAR;
  3475.            VAR PathAndName: ARRAY OF CHAR;
  3476.                  VAR found: BOOLEAN);
  3477. Es wird versucht, die im Environment-String "envPath" angebenen Pfade nach der Datei "filename" zu durchsuchen. Falls die Datei gefunden wird, wird der vollst
  3478. ndige Name inklusive des Pfades in PathAndName zur
  3479. ckgegeben. q
  3480.  Beispiel:
  3481.    Locate("M2IDE.CFG", "PATH", pathName, found);
  3482.    IF found THEN
  3483.      Lookup(f, pathName);
  3484.      ...
  3485. ck zum Modul Paths 
  3486.    MODULE RealConversion 
  3487.  definierte Prozeduren:
  3488.   RealToString     StringToReal
  3489.   LongRealToString StringToLongReal
  3490. ck zum Index oder zu Routinen, Ende mit ESC 
  3491.   RealConversion.RealToString 
  3492.  PROCEDURE RealToString(x: REAL;
  3493.              decDigits, n: INTEGER;
  3494.                     VAR s: ARRAY OF CHAR;
  3495.                    VAR ok: BOOLEAN);
  3496. Konvertiert "x" in ein Zeichenfeld. "n" ist die Breite des Zeichenfeldes. ABS(decDigits) ist die Zahl der gew
  3497. nschten Stellen. Das Ergebnis wird in "s" zur
  3498. ckgegeben. "ok" wird auf TRUE gesetzt, wenn die Umwandlung erfolgreich durchgef
  3499. hrt wurde. 
  3500. Die Ausgabe von "s" erfolgt im Fixkomma-Format, wenn "decDigits" positiv ist, sonst erfolgt die Ausgabe in wissenschaftlicher Notation. Falls "n" gr
  3501. er als die Zahl der ben
  3502. tigten Zeichen f
  3503. r die Umwandlung ist, wird s links mit Leerzeichen aufgef
  3504. llt. b
  3505. Falls decDigits > 0 ist, mu
  3506.  "n" >= decDigits + 2 sein, sonst mu
  3507.  n  >= ABS(decDigits) + 7 sein. 
  3508. Beispiele: D
  3509. RealToString(1.148, 2, 6, s, ok) w
  3510. rde  "  1.15" in s zur
  3511. ckgeben. I
  3512. RealToString(1.148, -2, 10, s, ok) w
  3513. rde "  1.15E+00" in s zur
  3514. ckgeben. "
  3515. ck zum Modul RealConversion 
  3516.   RealConversion.StringToReal 
  3517.  PROCEDURE StringToReal(s: ARRAY OF CHAR;
  3518.                    VAR  x: REAL;
  3519.                    VAR ok: BOOLEAN);
  3520. Konvertiert die Zeichenkette s in eine Real-Zahl. Es wird eine Realzahl im Modula-2-Flie
  3521. kommazahlenformat erwartet. !
  3522. ck zum Modul RealConversion 
  3523.   RealConversion.LongRealToString 
  3524.  PROCEDURE LongRealToString(x: LONGREAL;
  3525.                  decDigits, n: INTEGER;
  3526.                        VAR  s: ARRAY OF CHAR;
  3527.                        VAR ok: BOOLEAN);
  3528. Arbeitet identisch wie RealToString. !
  3529. ck zum Modul RealConversion 
  3530.   RealConversion.StringToLongReal 
  3531.  PROCEDURE StringToLongReal(s: ARRAY OF CHAR;
  3532.                        VAR  x: LONGREAL;
  3533.                        VAR ok: BOOLEAN);
  3534. Arbeitet identisch wie StringToReal. !
  3535. ck zum Modul RealConversion 
  3536.   MODULE TimeDate 
  3537. In diesem Modul sind der Typ Time und die beiden Prozeduren GetTime und SetTime definiert. 1
  3538. ck zum Index oder zu Routinen, Ende mit ESC 
  3539.   TYPE TimeDate.Time 
  3540.  TYPE
  3541.    Time = RECORD
  3542.             day,
  3543.             minute,
  3544.             millisec: CARDINAL;
  3545.           END;
  3546.   day      = ((Jahr - 1900) * 16
  3547.              + Monat * 32
  3548.              + Tag_des_Monats)
  3549.   minute   = Minuten seit
  3550.              Mitternacht
  3551.   millisec = Millisekunden der
  3552.              letzten vollen Minute
  3553. ck zum Modul TimeDate 
  3554.   TimeDate.GetTime 
  3555.  PROCEDURE GetTime(VAR time: Time);
  3556. Liefert die Systemzeit. 
  3557. ck zum Modul TimeDate 
  3558.   TimeDate.SetTime 
  3559.  PROCEDURE SetTime(time: Time);
  3560. Setzt die Systemzeit. 
  3561. ck zum Modul TimeDate 
  3562.   Compilerschalter 
  3563. Durch im Programmtext enthaltene Befehle k
  3564. nnen verschiedene Compiler-Schalter gesetzt werden, die die Code-Erzeugung beeinflussen. 
  3565. Diese Befehle m
  3566. ssen am Anfang eines Kommentars stehen; mehrere Compiler-Befehle k
  3567. nnen durch Kommata getrennt in einem Kommentar aufgereiht werden. 
  3568.  Beispiel:
  3569.   (* $S-, $R+ *)
  3570. Ein "+" setzt den Schalter auf TRUE, ein "-" setzt ihn auf FALSE und ein "=" setzt den Wert auf den vorausgegangenen Wert zur
  3571. ck. @
  3572. Von Fitted Modula-2 Version 2.0 unterst
  3573. tzte Compilerschalter: B
  3574.  (*$A+/$A-*)
  3575.  (*$S+/$S-*)
  3576.  (*$R+/$R-*)
  3577.  (*$T+/$T-*)
  3578.  (*$L+/$L-*)
  3579. ck zum Index, Ende mit ESC 
  3580.   Befehl: $A, Vorbelegung: +
  3581.  Ausrichtung
  3582.  -----------
  3583. Bei  "+" werden alle neu deklarierten Variablen an Wortgrenzen (1 Wort = 2 Bytes) aus gerichtet. Record-Komponenten werden ungeachtet dieses Befehls gepackt (jedoch nicht ausgerichtet). )
  3584. ck zur 
  3585. bersicht: Compilerschalter. 
  3586.   Befehl: $S, Vorbelegung: +
  3587.  Stack-
  3588. berlauf-Kontrolle
  3589.  ------------------------
  3590. Bei "+" wird bei Eintritt in ein Unterprogramm gepr
  3591. ft, ob der verf
  3592. gbare Platz auf dem Stack ausreicht. Diese Pr
  3593. fung wird auch beim Kopieren von offenen Arrays in den lokalen Stack-Rahmen eines Unterprogramms durchgef
  3594. hrt. )
  3595. ck zur 
  3596. bersicht: Compilerschalter. "
  3597. ck zum Men
  3598.  Compilerschalter 
  3599.   Befehl: $R, Vorbelegung: +
  3600.  Bereichs-Pr
  3601.  ----------------
  3602. Bei  "+"  wird vor jeder Zuweisung auf eine Variable eines Teilbereichs-Typs (Subrange) gepr
  3603. ft, ob der zuzuweisende Wert wirklich innerhalb der erlaubten Bereichsgrenzen liegt. 
  3604. Wenn die Compiler-Option $R gesetzt ist, erzeugt der Compiler Code zur Bereichspr
  3605. fung ("range check code") bei Zuweisungen zwischen INTEGERs und CARDINALs. Der Wert ist unabh
  3606. ngig von der Zuweisungsrichtung au
  3607. erhalb des zugelassenen Bereiches, wenn das h
  3608. chstwertige Bit 1 ist. "
  3609. ck zum Men
  3610.  Compilerschalter 
  3611.   Befehl $T, Vorbelegung: +
  3612.  Feld-Index-Pr
  3613.  ------------------
  3614. Bei  "+" wird bei jedem  Zugriff auf ein Feld (Array) 
  3615. ber Index zuvor gepr
  3616. ft, ob der Index nicht au
  3617. erhalb der definierten Feldgrenzen liegt. 
  3618. Wenn die Compiler-Option $T gesetzt ist, werden Zeiger vor dem Zugriff auf NIL gepr
  3619. ft. Au
  3620. erdem setzt Storage.DEALLOCATE den 
  3621. bergebenen Zeiger auf NIL. "
  3622. ck zum Men
  3623.  Compilerschalter 
  3624.   Befehl $L, Vorbelegung -
  3625.  Erzeuge Zeilennummer-Information
  3626.  --------------------------------
  3627. Bei "+" erzeugt der Compiler eine Liste der Quelltext-Zeilennummern und der entsprechenden Objectcode-Adressen in der Ausgabedatei. Diese Liste wird beim Linken mit der /L-Option in die .DBG-Datei geschrieben. Mit DBG2MAP kann anschlie
  3628. end eine Standard-MAP-Datei geschrieben werden, die mit TDMAP an das EXE-Programm angeh
  3629. ngt werden kann, um die Bearbeitung mit dem Turbo-Debugger zu erm
  3630. glichen. #
  3631. ck zum Men
  3632.  Compilerschalter 
  3633.   Laufzeitfehler 
  3634. Wenn w
  3635. hrend der Ausf
  3636. hrung eines Programms ein Laufzeitfehler auftritt, wird das Programm von der Laufzeitfehler-Behandlungsroutine abgebrochen und eine Nachricht 
  3637. ber Art und Stelle (Adresse) des Fehlers ausgegeben. 
  3638.  Stack
  3639. Overflow
  3640.  Range
  3641. Overflow
  3642.  Integer
  3643. Overflow
  3644.  Floating
  3645. Point
  3646. Overflow
  3647. RETURN
  3648.  HALT
  3649. ck zum Index, Ende mit ESC 
  3650.   Runtime-Error 0
  3651. Stack-
  3652. berlauf ($S Option)  
  3653. ck zum Men
  3654.  Laufzeitfehler 
  3655.   Runtime-Error 1
  3656. Bereichs-Fehler ($R oder $T Option)  
  3657. ck zum Men
  3658.  Laufzeitfehler 
  3659.   Runtime-Error 2
  3660. Integer/Cardinal-
  3661. berlauf (Division durch Null)  
  3662. ck zum Men
  3663.  Laufzeitfehler 
  3664.   Runtime-Error 3
  3665. Fehler bei einer Flie
  3666. komma-Operation  
  3667. ck zum Men
  3668.  Laufzeitfehler 
  3669.   Runtime-Error 4
  3670. Funktion hat kein RETURN ausgef
  3671. hrt.  
  3672. ck zum Men
  3673.  Laufzeitfehler 
  3674.   Runtime-Error 5
  3675. HALT wurde aufgerufen.  
  3676. ck zum Men
  3677.  Laufzeitfehler 
  3678.   MODULA Standard-Typen 
  3679.   Datentyp-Darstellung:
  3680.  CHAR       1 Byte
  3681.  INTEGER    2 Bytes 2er-Komplement
  3682.  CARDINAL   2 Bytes
  3683.  LONGCARD   4 Bytes
  3684.  LONGINT    4 Bytes 2er-Komplement
  3685.  BOOLEAN    1 Byte (1 = TRUE, 0 = FALSE)
  3686.  REAL       4 Bytes im Intel-8087-Format.
  3687.  LONGREAL   8 Bytes im Intel-8087-Format.
  3688.  BITSET     1 Wort. 0 = low Order Bit, 15 = high Order Bit.
  3689.  SET        1 bis 8 Worte (Mengen bis zu 256 Elemente)
  3690.  POINTER    4 Bytes im Intel-8086/88-Format
  3691.  PROCEDURE  4 Bytes POINTER zur Prozedur-Startadresse
  3692. Adressen sind im Intel-8086-Format dargestellt: +
  3693.  1 Wort    BYTE OFFSET
  3694.  1 Wort    SEGMENT
  3695. Numerische Werte sind gleichfalls so dargestellt, wie bei der Intel 8086-Prozessor-Familie 
  3696. blich: niederwertiges Byte zuerst, h
  3697. herwertiges Byte zuletzt.  
  3698. ck zum Index, Ende mit ESC 
  3699.   CHAR 
  3700. Einfacher vorzeichenloser 8-Bit Datentyp. Q
  3701. CHAR implementiert den ASCII-Zeichensatz, kann aber auch als normaler Datentype verwendet werden. CHARs m
  3702. ssen in oktaler Schreibweise angegeben werden. CHAR-Konstanten werden durch ein nachstehendes C gekennzeichnet. Das Modul ASCII vereinfacht die Zuweisung von ASCII-Zeichen, da dort alle Steuerzeichen als Konstante definiert sind. 
  3703.  Zuweisungen von CHARs w
  3704.  CONST
  3705.    ch    = 36C;       (* oktal ! *)
  3706.    Space = ' ';       (* direkt zugewiesen *)
  3707.    Qote  = "'";       (* Hochkomma in Anf
  3708. hrungszeichen *)
  3709.    Enter = ASCII.EOL; (* importiert! *)
  3710.    c: CHAR;
  3711.  BEGIN
  3712.    c := '"';           (* Anf
  3713. hrungszeichen in Hochkommas *)
  3714.    ...
  3715. CHAR ist zuweisungskompatibel mit SYSTEM.BYTE, mu
  3716.  aber im Gegensatz zu BYTE nicht importiert werden. CHAR-Konstanten werden mit einfachem (') oder doppeltem (") Hochkomma eingerahmt. Die in Pascal m
  3717. gliche Notierung eines Hochkommas in einer Zeichenkette oder als CHAR ist nicht m
  3718. glich. Stattdessen k
  3719. nnen genauso wie Assembler die beiden Kennungen gemischt werden: >
  3720. '"' wird f
  3721. r Anf
  3722. hrungsstriche, "'" f
  3723. r Hochkomma verwendet. 4
  3724. Der Typ String ist in Modula-2 nicht vordefiniert. 5
  3725. Ein "String" ist ein ARRAY OF CHAR, beispielsweise: )
  3726.  TYPE
  3727.    String: ARRAY [0..79] OF CHAR;
  3728. Da Modula-Strings als normale Arrays im Gegensatz zu Turbo-Pascal Strings kein L
  3729. ngenbyte besitzen, kann das ARRAY bei 0 beginnen. 
  3730. ck zum Typen-Men
  3731.   INTEGER 
  3732. Vorzeichenabh
  3733. ngiger 16-Bit Datentyp. !
  3734. Wertebereich:  -32768 bis 32767 
  3735. ck zum Typen-Men
  3736.   CARDINAL 
  3737. Vorzeichenloser 16-Bit Datentyp. 
  3738. CARDINAL entspricht dem Turbo-Pascal Datentyp Word und ist zuweisungskompatibel zu dem systemabh
  3739. ngigen 16-Bit-Datentype SYSTEM.WORD. 
  3740. Wertebereich: 0 bis 65535. 
  3741. ck zum Typen-Men
  3742.   LONGINT/LONGCARD 
  3743. Der Fitted-Modula-2-Compiler implementiert die 32-Bit Standard-Typen LONGINT und LONGCARD. 
  3744. Operanden des Typs LONGINT oder LONGCARD d
  3745. rfen wie INTEGER oder CARDINAL in jedem Ausdruck auftauchen. Aber das ist auch schon alles! ;
  3746. Teilbereiche (Subranges) dieser Typen sind nicht m
  3747. glich. h
  3748. Keine Standard-Prozeduren akzeptieren Operanden dieser Typen (au
  3749. er INC, DEC und verwandten). Eine Variable vom Typ LONGINT oder LONGCARD darf weder als Steuerungs-Variable einer FOR-Schleife, noch als CASE-Marke vorkommen. LONGINT- oder LONGCARD-Konstanten k
  3750. nnen nur dezimal geschrieben werden und enden mit einem "L", falls der Wert kleiner als 65536 ist. 
  3751.  Beispiel:
  3752.  123L und 123567 sind korrekte LONGCARD- oder LONGINT-Konstanten, 5
  3753.  -1L  und -348762 sind korrekte LONGINT-Konstanten 7
  3754. Wertebereich f
  3755. r LONGINT: -2147483648 bis 2147483647. /
  3756. Wertebereich f
  3757. r LONGCARD:  0 bis 4294967297. 
  3758. ck zum Typen-Men
  3759.   Boolescher Datentyp 
  3760. Variablen vom Typ BOOLEAN k
  3761. nnen ausschlie
  3762. lich einen der vordefinierten Werte FALSE ( # 0) oder TRUE ( = 0) annehmen. Tats
  3763. chlich handelt es sich bei Boolean um einen Aufz
  3764. hlungstyp, der folgenderma
  3765. en deklariert ist: Zuweisungen wie PRED und SUCC sind m
  3766. glich. FALSE ist ein SUCC oder PRED von TRUE. #
  3767.  TYPE
  3768.    BOOLEAN = (FALSE, TRUE);
  3769. Die Anwendung der Operatoren = <> > < >= <= IN innerhalb eines Ausdrucks erzeugt Ergebnisse vom Typ BOOLEAN. 
  3770. ck zum Typen-Men
  3771.   REAL 
  3772. kommazahlen. Der Datentyp entspricht dem Turbo-Pascal (ab 5.0) Datentyp Single und ist vier Bytes gro
  3773. REAL arbeitet mit sieben bis acht Stellen Genauigkeit. F
  3774. r genauere Operation kann LONGREAL verwendet werden. F
  3775. r Ein- und Ausgaben steht das Modul RealInOut, f
  3776. r mathematische Opertionen das Modul MathLib0 zur Verf
  3777. gung. String-Konvertierungen werden in RealConversion durchgef
  3778. hrt. ,
  3779. Wertebereich f
  3780. r REAL: 1.5E-45 bis 3.4E38. 
  3781. ck zum Typen-Men
  3782.   LONGREAL 
  3783. Ab der Version 2.0 von Fitted Modula-2 besteht eine Wahlm
  3784. glichkeit bei der Gr
  3785. e des REAL-Typs. Version 1.x unterst
  3786. tzte nur das 4-Byte-Format, mit dem eine Genauigkeit von etwa sieben Stellen erreicht wird, w
  3787. hrend mit dem acht Bytes langen LONGREAL-Format etwa 15 bis 16 Stellen m
  3788. glich sind. 
  3789. Die Typen REAL and LONGREAL sind nicht kompatibel und es gibt keinerlei automatische Umwandlung zwischen diesen Typen. Stattdessen stehen f
  3790. r diese Umwandlungen die Standard-Prozeduren SHORT und LONG zur Verf
  3791. gung. Konstanten vom Typ LONGREAL unterscheiden sich nicht von REAL-Konstanten. Der Typ wird durch den Kontext bestimmt. Sie k
  3792. nnen eine Konstante jedoch durch den Gebrauch der SHORT- oder der LONG-Procedure "typisieren". 1
  3793.  Beispiel:
  3794.    CONST
  3795.      longreal1 = LONG(1.0);
  3796. r Ein- und Ausgaben steht das Modul RealInOut, f
  3797. r mathematische Opertionen das Modul LMathLib0 zur Verf
  3798. gung. String-Konvertierungen werden in RealConversion durchgef
  3799. hrt. 2
  3800. Wertebereich f
  3801. r LONGREAL: 5.0E-324 bis 1.7E308. 
  3802. ck zum Typen-Men
  3803.   BITSET 
  3804. Zusammengesetzter Datentyp der ein BYTE aufschl
  3805. sselt. ;
  3806. Bitset-Werte werden in geschweiften Klammern geschrieben. Z
  3807. Ein Bitset sind beispielsweise die FLAGS oder die Dateiattribute des Moduls Directories. @
  3808. Aufgesch
  3809. sselt werden Bitsets 
  3810. ber eine sehr einfache Abfrage: "
  3811.  IF FLAGS = {carryFlag} THEN ...
  3812. Ist nur dann TRUE, wenn das CarryFlag (Bit 0 des Flagregisters) gesetzt ist. A
  3813. Das Flagregister ist in System als VAR FLAGS: BITSET definiert. 
  3814. ck zum Typen-Men
  3815.   SET 
  3816. Diese Deklaration vereinbart eine Menge des durch Elemententyp angegebenen Typs: !
  3817.  Syntax:
  3818.    SET of Elemententyp
  3819. Der entsprechende Basistyp mu
  3820.  ordinal sein und darf maximal 256 verschiedene Werte beinhalten, deren Grenzen innerhalb des Bereichs 0..255 liegen m
  3821. ssen. 
  3822. ber geschweiften Klammern und eine Aufz
  3823. hlung von Ausdr
  3824. cken ist die Definition von Teilbereichen auch innerhalb einer Mengen-Deklaration m
  3825. glich. W
  3826. () steht hier f
  3827. r eine leere Menge, die mit allen anderen Mengentypen kompatibel ist. 
  3828. Beispiel: (
  3829.  (* Mengen mit ordinalen Basistypen *)
  3830.  TYPE
  3831.    Tag     = (Son, Mon, Die, Mit, Don, Fre, Sam);
  3832.    CharSet = SET OF CHAR;
  3833.    Tage    = SET OF Tag;
  3834.   (* Mengen mit Angaben von Unterbereichen *)
  3835.   ('0'..'9', 'A'..'Z', 'a'..'z', '_')
  3836.   (1, 5, I + 1 .. J - 1)
  3837.   (Mon..Fre)
  3838. ck zum Typen-Men
  3839.   POINTER 
  3840. Eine Zeigervariable enth
  3841. lt die Speicheradresse einer anderen Variablen des Typs, f
  3842. r den die Zeigervariable deklariert wurde. Q
  3843. Mit den folgenden Operationen lassen sich einer Zeigervariablen Werte zuordnen: $
  3844.  den Prozeduren NEW oder ALLOCATE 
  3845.  der Standardprozedur PTR L
  3846. Das reservierte Wort NIL steht f
  3847. r einen Zeiger, der "nirgendwohin" zeigt. z
  3848. Der vordefinierte Datentyp POINTER steht f
  3849. r einen untypisierten Zeiger, der mit jedem anderen Zeigertyp kompatibel ist. 
  3850. Beispiele: "
  3851.  (* POINTER Typdeklarationen: *)
  3852.  TYPE
  3853.    BytePtr  = POINTER TO BYTE;
  3854.    WordPtr  = POINTER TO CARDINAL;
  3855.    IdentPtr = IdentRec;
  3856.    IdentRec = RECORD
  3857.                 IdentStr: ARRAY [0..15] OF CHAR;
  3858.                 RefCount: CARDINAL;
  3859.                 Next:     IdentPtr;
  3860.               END;
  3861. ck zum Typen-Men
  3862.   PROCEDURE 
  3863. Modula-2 implementiert den Typ PROCEDURE als Zeiger auf eine Prozedur. 
  3864. ck zum Typen-Men
  3865.   Reservierte Worte 
  3866. Ein Teil der Befehle in Modula geh
  3867. rt zum Sprachumfang und kann auch in dem Buch "Programming in Modula-2" von N. Wirth nachgelesen werden. U
  3868. Hier sind nur die wichtigsten Standardprozeduren und Standardoperatoren aufgef
  3869. hrt: 
  3870.  Prozeduren
  3871.  ABS(x)  : Absoluter Wert eines numerischen Operanden x
  3872.  CAP(x)  : Umwandlung eines Zeichens (x) in seinen Gro
  3873. buchstaben
  3874.  CHR(x)  : Das Zeichen CHAR mit dem ordinalen Wert x
  3875.  DEC(x)  : Verkleinere x um 1
  3876.  FAR     : Adre
  3877. -Zuweisung
  3878.  HALT    : Beendet das Programm
  3879.  INC(x)  : Vergr
  3880. ere x um 1
  3881.  NEAR    : Adress-Zuweisung
  3882.  ODD     : TRUE, falls der ordinale Wert X eine ungerade Zahl ist.
  3883.  ORD(X)  : Der CARDINAL-Wert des Arguments X
  3884.  VAL(t,x): Der Wert x konvertiert zum TYP t
  3885.  Operatoren
  3886.  Op. 
  3887.  INTEGER/CARD.
  3888.      REAL     
  3889.     SET       
  3890.  +   
  3891. Addition      
  3892. Addition      
  3893. Vereinigung   
  3894.  -   
  3895. Subtraktion   
  3896. Subtraktion   
  3897. Differenz     
  3898.  *   
  3899. Multiplikation
  3900. Multiplikation
  3901. Durchschnitt  
  3902.  /   
  3903.      ---      
  3904. Division      
  3905.     ---       
  3906.  DIV 
  3907. Division      
  3908.      ---      
  3909.     ---       
  3910.  MOD 
  3911. Modulo        
  3912.      ---      
  3913.     ---       
  3914. Diese relationalen Operatoren liefern als Ergebnistyp BOOLEAN: !
  3915.  Op. 
  3916.      Operation        
  3917.  =   
  3918. gleich                
  3919. <> # 
  3920. ungleich              
  3921.  <   
  3922. kleiner als           
  3923.  >   
  3924. er als            
  3925.  <=  
  3926. kleiner oder gleich   
  3927.  >=  
  3928. er oder gleich    
  3929.  IN  
  3930. "Element von". TRUE,  
  3931.      
  3932. wenn der linke Operand
  3933.      
  3934. (ordinaler Typ) in der
  3935.      
  3936. Menge auf der rechten 
  3937.      
  3938. Seite enthalten ist;  
  3939.      
  3940. FALSE, falls nicht.   
  3941. ck zum Index, Ende mit ESC 
  3942.    M2IDE f
  3943. r Fitted Modula-2 Version 2.0
  3944.  Copyright 1991 (C) DMV - Daten- & Medien-Verlag, Eschwege
  3945.  Programm von W. Rinke, Hilfetexte von J. Braun
  3946.  geschrieben mit Turbo Pascal(R) 6.0 und TurboVision(R)
  3947.  letzte 
  3948. nderungen: 29.08.91
  3949.  Ein Projekt der toolbox(R)
  3950.