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