home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-08-29 | 165.4 KB | 7,010 lines |
- .topic NoContext=0
-
- Der Editor █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
- Im Edit-Fenster können Sie Ihren Quelltext
- editieren. Weitere Aktionen werden über die
- Menüleiste durchgeführt. Die einzelnen
- Menüpunkte erreichen Sie durch gleichzeitiges
- Drücken der Alt-Taste und des rot hervor-
- gehobenen Buchstabens.
-
- Sie können fast beliebig viele Fenster zum
- Editieren öffnen, das oberste davon ist
- aktiv. In ein anderes Edit-Fenster gelangen
- Sie durch gleichzeitiges Drücken der Alt-Taste
- und der Zahl, die Sie in der oberen rechten
- Ecke des Edit-Fensters sehen.
-
- Da die FST-Benutzeroberfläche mit der
- gleichen Software erstellt wurde wie
- Turbo Pascal 6.0 (Turbo Vision), verhält sich
- auch der Editor weitestgehend wie sein großes
- Vorbild.
-
- Editorbefehle █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Ctrl+S Zeichen nach links
- Ctrl+D Zeichen nach rechts
-
- Ctrl+A Wort nach links
- Ctrl+Links Wort nach links
-
- Ctrl+F Wort nach rechts
- Ctrl+Rechts Wort nach rechts
-
- Ctrl+R Seite nach oben
- Ctrl+C Seite nach unten
-
- Ctrl+E Zeile nach oben
- Ctrl+X Zeile nach unten
-
- Home Zeilenanfang
- End Zeilenende
- Ctrl+PgUp Textbeginn
- Ctrl+PgDn Textende
-
-
- Ctrl+G Zeichen unter dem Cursor löschen
- Ctrl+H Zeichen links vom Cursor löschen
-
- Ctrl+T Wort löschen
-
- Ctrl+L Letzes Suchen/Ersetzen wiederholen
- Ctrl+M Neue Zeile hinter dem Cursor einfügen
- Ctrl+O Einrücke-Modus umschalten
-
- Ctrl+U letzte Änderung rückgängig machen
- Ctrl+V Überschreiben/Einfügen umschalten
- Ctrl+Y Zeile löschen
-
- Shift+Ins Text aus {Clipboard:Clipboard} einfügen
- Shift+Del markierten Text ins Clipboard löschen
- Ctrl+Ins markierten Text ins Clipboard kopieren
- Ctrl+Del Clipboard löschen
-
- Ctrl+Q "Quick"-Befehle
- ----------------------
- +A Text ersetzen
- +C Textende
- +D Zeilenende
- +F Text suchen
- +H bis Zeilenanfang löschen
- +R Textbeginn
- +S Zeilenanfang
- +Y bis Zeilenende löschen
-
- Ctrl+K Blockbefehle
- -------------------
- +B Blockbeginn markieren
- +C Block einfügen
- +H Blockmarkierung entfernen
- +K Block kopieren
- +Y Block löschen
-
- .topic Clipboard=100
-
- Clipboard █
- ▀▀▀▀▀▀▀▀▀▀▀▀
- Das Clipboard (Zwischenablage) ist ein normalerweise unsichtbares
- Edit-Fenster. In der Zwischenablage können immer wieder benötigte
- Textpassagen aufbewahrt werden, um sie bei Bedarf in das aktitve
- Edit-Fenster einzufügen.
- Auch der Transfer von markierten Textblöcken von einem Edit-Fenster
- in ein anderes geht über das Clipboard.
- Mit {Show Clipboard :EShowClip} können Sie die Zwischablage aktiv machen
- und auch den Text des Clipboards mit {SaveAs :FSaveAs} sichern.
-
- .topic Make
-
- Make █
- ▀▀▀▀▀▀▀
- Unter dem Menüpunkt "Make" sind alle Aufrufe des FST-Modula-2-Compilers
- untergebracht.
-
- .topic Mbuild
-
- Build █
- ▀▀▀▀▀▀▀▀
- Der Compiler wird mit der Option "/M" aufgerufen und compiliert
- alle Dateien neu. Der interne Zeitstempel wird aktualisiert.
- Voraussetzung für eine erfolgreiche Compilation unter diesem
- Menüpunkt ist die vorherige Erzeugung einer "Make-Datei". Sie
- können dazu den Menüpunkt {GenMake :MGenMake} verwenden.
-
-
- .topic MGenMake
-
- GenMake █
- ▀▀▀▀▀▀▀▀▀▀
- GenMake erzeugt die Datei, die zur Recompilierung aller beteiligten
- Module notwendig ist. Das Hauptmodul muß zuvor unter dem Menüpunkt
- {Primary File :MPrimFile} angewählt sein.
-
- .topic MCompile
-
- Compile █
- ▀▀▀▀▀▀▀▀▀▀
- Compiliert die Datei im aktiven Fenster. Die Datei muß zuvor gesichert
- werden.
-
- .topic MLink
-
- Link █
- ▀▀▀▀▀▀▀
- Verbindet die compilierten Dateien (.M2O) zu einem lauffähigen (.EXE)
- Programm. Das Hauptmodul muß unter dem Menüpunkt {Primary File :MPrimFile}
- eingetragen sein.
-
- .topic MyFiles
-
- Files █
- ▀▀▀▀▀▀▀▀
- Unter diesem Menüpunkt sind alle Dateioperationen untergebracht.
-
- .topic FDosShell
-
- DOS Shell █
- ▀▀▀▀▀▀▀▀▀▀▀▀
- Sie können unter diesem Menüpunkt vorübergehend die Entwicklungsumgebung
- verlassen und ein DOS-Programm starten (vorausgesetzt, der verbleibende
- Speicherplatz ist ausreichend).
-
- .topic Debug
-
- Debug █
- ▀▀▀▀▀▀▀▀
- Unter diesem Menüpunkt sind alle Operationen untergebracht, die Ihr
- Programm zum Debuggen mit einem externen Debugger (vorzugsweise
- Turbo Debugger) vorbereiten.
-
- .topic DMapFile
-
- MAP-File erzeugen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Erzeugt eine MAP-Datei, in der alle externen Referenzen (Prozeduren und
- Variablen aus anderen Modulen) aufgelistet sind. Der externe Debugger
- benötigt diese um zum Beispiel Variableninhalte anzeigen zu können.
- Im Hauptmodul muß der Compilerschalter (* $L *) (generiere Zeilennummern)
- gesetzt sein.
- Das Programm muß vor dem Erzeugen der Map-Datei fehlerfrei compiliert und
- gelinkt werden.
-
- .topic DPrepTD
-
- Debugging vorbereiten █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Hängt die symbolischen Informationen an die erzeugte .EXE-Datei an. Die
- meisten Debugger benötigen Variablen- und Prozedurnamen, um sowohl den
- Maschinencode des erzeugten Programms als auch den Quelltext darstellen
- zu können.
- Zuvor muß das Programm fehlerfrei compiliert und gelinkt werden, die
- Map-Datei muß ebenfalls bereits erzeugt sein.
-
- .topic MBrowse
-
- Error Dateien ansehen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Öffnet ein Auswahlfenster mit den von den aufgerufenen Werkzeugen
- erzeugten .ERR-Dateien. Diese Dateien zeigen das, was Sie gesehen
- hätten, wenn Sie die Programme von der Kommandozeile aus gestartet
- hätten.
-
- .topic FOpen
-
- Datei öffnen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Präsentiert ein Auswahlfenster, in dem Sie die Datei, die Sie editieren
- möchten, anwählen können. Die vorgegebene Erweiterung ist .DEF oder
- .MOD, je nachdem, welche {Default Extension :ODefaultExt}
- Sie mit dem dem Schalter im {Options}-Menü eingestellt haben.
-
- .topic FChangeDir
-
- Verzeichnis wechseln █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Erzeugt ein Dialogfenster, in dem Sie das aktuelle Verzeichnis neu
- bestimmen können.
-
- .topic MPrimFile
-
- Hauptmodul wählen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Unter diesem Menüpunkt müssen Sie das Hauptmodul angeben.
-
- .topic Options
-
- Optionen █
- ▀▀▀▀▀▀▀▀▀▀▀
- Dieser Menüpunkt faßt alle festen Einstellungen der Entwicklungsumgebung
- zusammen.
-
- .topic OSaveOpts
-
- Optionen sichern █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- 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äß der
- Installation vor. Sie müssen, wenn die Konfigurationsdatei versehentlich
- gelöscht wurde, die Einstellungen neu vornehmen. Besonders wichtig ist
- dabei die Vorgabe der {Verzeichnisse :ODirect} für die Programme
- des FST-Entwicklungspakets.
-
- .topic OLoadOpts
-
- Optionen laden █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Lädt die gespeicherten Optionen aus der Datei M2IDE.CFG.
-
- .topic DRunTD
-
- Turbo Debugger starten █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Startet den Turbo Debugger. Wenn Sie Ihr Programm ordnungsgemäß zum
- Debuggen vorbereitet haben, können Sie den Programmlauf im erzeugten
- Maschinencode und im Quelltext Schritt für Schritt nachvollziehen.
-
- .topic ODevelop
-
- Entwicklungs-Schalter █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Ist der Schalter aktiv (√), werden alle zur Erzeugung des lauffähigen
- Programms benötigten Dateien nicht gelöscht. Wenn Ihr Programm fehlerfrei
- läuft, können Sie den Schalter deaktivieren. Die erzeugte .EXE-Datei
- wird etwa 50% kleiner.
-
- .topic About
-
- Über das Programm █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Wie allgemein üblich, haben sich die Programmierer unter diesem Menüpunkt
- "verewigt". Bei Problemem mit dem Programm geben Sie bitte die Versionsnummer
- an.
-
- .topic MySystem
-
- System █
- ▀▀▀▀▀▀▀▀▀
- Dieser Menüpunkt faßt zunächst nur das Programmierer-Fenster (About) und
- den Wort-Kontext (für die kontext-sensitive Hilfe zu FST Modula 2) zusammen.
-
- .topic FQuit
-
- IDE Verlassen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Beendet das Programm und bringt Sie sicher zurück zum DOS-Prompt. Sollten
- noch ungesicherte Dateien geöffnet sein, werden Sie vor dem endgültigen
- Abschied noch einmal gefragt.
-
- .topic ODirect
-
- Verzeichnisse █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Bitte geben Sie hier die Pfade an, in denen Sie die Entwicklungswerkzeuge
- des FST-System gespeichert haben.
-
- .topic OEraseBat
-
- Batches löschen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Ist der Schalter aktiv, werden die von der IDE erzeugten Batch-Dateien
- gelöscht. Sie sollten den Schalter so lange deaktiv lassen, bis Ihr
- Programm fehlerfrei läuft.
-
- .topic OEditBak
-
- .BAK anlegen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Der Editor legt von der aktuellen Datei eine Sicherheitskopie mit
- der Extension .BAK an, wenn der Schalter aktiv (√) ist.
-
- .topic FChDir
-
- Verzeichnis wechseln █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Es erscheint ein Dialog, in dem Sie auf dem Verzeichnisbaum des aktuellen
- Laufwerks ein neues Verzeichnis anwählen können, in dem Sie weiterarbeiten
- möchten. Auch das Laufwerk können Sie unter diesem Menüpunkt wechseln.
-
- .topic FNew
-
- Neue Datei █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
- Öffnet ein leeres Edit-Fenster mit dem Arbeitstitel "untitled". Sie können
- einen Text eingeben und ihn dann mit {SaveAs :FSaveAs} mit einem neuen
- Namen versehen.
-
- .topic EShowClip
-
- Clipboard ansehen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- In der Zwischenablage {Clipboard} werden markierte Blöcke zwischengespeichert.
- Ist das Clipboard aktiv, können Sie die dort abgelegten Texte editieren.
-
- .topic WTile
-
- Fenster nebeneinander █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Nach dem Anwählen dieses Menüpunkts werden die geöffneten Fenster mit
- Ausnahme des {Clipboard} nebeneinander auf dem Bildschirm "ausgebreitet".
- Mit {Zoom :WZoom} können Sie das aktive Fenster (erkennbar an der
- Rahmenfarbe) auf volle Größe bringen.
-
- .topic WCascade
-
- Datei sichern als █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Dieser Menüpunkt fächert die geöffneten Fenster zu einem Stapel auf. Die
- Nummern in der rechten oberen Ecke dienen zur Anwahl des Aktiven Fensters.
- Mit {Zoom :WZoom} können Sie das aktive Fenster (erkennbar an der
- Rahmenfarbe) auf volle Größe bringen.
-
- .topic FSave
-
- Datei sichern █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Speichert die Datei auf dem Datenträger. Soll die Datei einen anderen
- Namen erhalten oder in einem anderen als dem aktuellen Verzeichnis
- abgelegt werden, müssen Sie den Menüpunkt {SaveAs :FSaveAs} wählen.
-
- .topic FSaveAs
-
- Datei sichern als █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Es erscheint ein Dialogfenster, in dem Sie den Namen eingeben können,
- unter dem Sie den Text im aktiven Fenster sichern möchten. Sie können
- allerdings auch einen Namen aus der Dateiübersicht wählen und eine
- bereits vorhandene Datei überschreiben.
-
- .topic Edit
-
- Edit █
- ▀▀▀▀▀▀▀
- Unter diesem Menüpunkt sind spezielle {Editor:NoContext}-Befehle zu finden.
-
- .topic EUndo
-
- Rückgängig machen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Macht die letzte Änderung rückgängig.
-
- .topic ECut
-
- Block "ausschneiden" █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- 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ügen möchten {Paste :EPaste}, müssen Sie dies vor
- dem nächsten Ausschneiden tun, da immer nur ein "Textschnipsel" in
- der Zwischenablage Platz findet.
-
- .topic ECopy
-
- Block kopieren █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Kopiert den markierten Block in die Zwischenablage {Clipboard}.
- Mit {Paste :EPaste} können Sie den Block an anderer Stelle wieder
- einfügen.
-
- Siehe auch : {Editor :NoContext}
-
- .topic EPaste
-
- Text "einkleben" █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Fügt einen Textblock aus der Zwischablage an der Cursorposition
- in das aktive Edit-Fenster ein.
-
- .topic EClear
-
- Textblock löschen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Löscht den markiertene Textblock.
-
- .topic Search
-
- Suchen und Ersetzen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Unter diesem Menüpunkt sind Operationen zu finden, die es Ihnen ermöglichen,
- Textstellen schnell aufzufinden sowie Zeichenketten durch andere zu ersetzen.
-
- .topic SFind
-
- Textstelle suchen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Öffnet einen Dialog, in dem Sie eine Zeichenkette eigeben können,
- die im aktiven Edit-Fenster gesucht werden soll. Die Suche kann
- sich auf ganze Worte beziehen (Whole words only [X]) und unabhängig
- von der Groß-/Kleinschreibung erfolgen (Case sensitive [ ]).
- Die letzten fünf Suchbegriffen können Sie im History-Fenster auswählen,
- das sich öffnet, wenn Sie den grünen Pfeil neben der Eingabezeile
- anwählen.
-
- Tastatur-Kurzanwahl : Ctrl+Q F
-
- .topic SReplace
-
- Suchen und Ersetzen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Wie unter dem Menüpunkt {Find :SFind} kö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.
-
- Tastatur-Kurzanwahl : Ctrl+Q A
-
- .topic SSearchAgain
-
- Suchen/Ersetzen wiederholen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Tastatur-Kurzanwahl : Ctrl+L
-
- .topic MyWindows
-
- Fenster █
- ▀▀▀▀▀▀▀▀▀▀
- Faßt die Operationen zur Gestaltung der Arbeitsoberfläche (Desktop)
- zusammen.
-
- .topic WResize
-
- Größe verändern █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Die Anwahl dieses Menüpunkts ändert die Rahmenfarbe und zeigt eine neue
- Statuszeile. Mit den Pfeiltasten können Sie die Größe des aktiven
- Fensters verändern und es auf dem Desktop verschieben.
-
- Tastatur-Kurzanwahl : Ctrl-F5
-
- .topic WZoom
-
- Vollbild █
- ▀▀▀▀▀▀▀▀▀▀▀
- Bringt das aktive Fenster zur vollen Größe. Die Anwahl dieses Menüpunkts
- hat die gleiche Funktion wie ein Anklicken des Pfeils in der oberen rechten
- Ecke des Fensters.
-
- Tastatur-Kurzanwahl : F5
-
- .topic WNext
-
- Nächstes Fenster aktivieren █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Macht das nächste Fenster im Fensterstapel auf der Arbeitsoberfläche
- aktiv.
-
- Tastatur-Kurzanwahl : F6
-
- .topic WPrev
-
- Voriges Fenster aktivieren █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Macht das vorige Fenster im Fensterstapel aktiv.
-
- Tastatur-Kurzanwahl : Shift-F6
-
- .topic WClose
-
- Fenster schließen █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Schließt das aktive Fenster. Ist die Datei nicht gesichert, werden Sie
- gefragt, ob Sie den Text speichern wollen. Die Anwahl des Menüpunkts
- hat die gleiche Funktion wie ein Anklicken des "Schließen"-Knopfes in der
- oberen linken Ecke des Fensters.
-
- Tastatur-Kurzanwahl : Alt-F3
-
- .topic SGoto
-
- Cursor auf Zeile/Spalte █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Öffnet ein Dialogfenster, in dem Sie die Zeile und die Spalte angeben
- können, auf die der Cursor gesetzt werden soll. Diese Funktion ist
- bei der Bereinigung von syntaktischen Fehlern aus der Datei COMPILER.ERR
- nützlich.
-
- .topic Context
-
- Wort Context █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Wenn es zu diesem Wort im Text einen Hilfebegriff gibt, wird das
- zugehörige Hilfefenster geöffnet.
-
- Tastatur-Kurzanwahl : Ctrl-F1
-
- .topic ODefaultExt
-
- Default Extension █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Der Schalter setzt die vorgegebene Dateinamen-Erweiterung für die
- Dateiauswahldialoge.
-
- .topic Index
-
- Hilfe-Index ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Standard-{Module} Modula-{Schleifentypen}
- {Routinen} Standard-{Typen}
- {ASCII}-Zeichen {Tastaturcodes}
- {Compilerschalter} {Inline-Assembler:IAssembler}
- {Laufzeitfehler} {Reservierte Worte:ReservedWord}
- {Sprachkonventionen} {Compiler-Begrenzungen:CompLimits}
- Objekt-{Zeitstempel} {Environment}-Variablen
-
- Ende mit ESC
-
- .topic Module
-
- Modul-Index ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- {ASCII} {Break}
- {Directories} {Display}
- {DTA} {Files}
- {FileSpec} {FileSystem}
- {InOut} {KeyBoard}
- {Loader} {LongJump:MLongJump}
- {Menu} {LMathLib0/MathLib0:MathLib0}
- {NumberConversion} {Paths}
- {RealConversion} {RealInOut}
- {Storage} {Strings}
- {SYSTEM:mSYSTEM} {System:DOSSystem}
- {TermBase} {Terminal}
- {TermIO} {TimeDate}
- {Windows}
-
-
- Zurück zum {Index}, Ende mit ESC
-
- .topic Routinen
-
- Liste der Standandprozeduren ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Prozeduren A - E:
- ──────────────────┘
-
- {ADR} {ALLOCATE}
- {Append} {arctan}
- {ASCIIZ} {Assign}
- {AssignGoto} {AssignRead}
- {AssignWrite} {Available}
- {CardToString} {ChDir}
- {Close} {CloseCurWindow}
- {CloseInput} {CloseOutput}
- {CloseWindow} {ClrEOL}
- {ClrEOS} {ClrScreen}
- {CompareStr} {Concat}
- {Copy} {cos}
- {Create} {CreateNew}
- {CreateTemp} {DEALLOCATE}
- {Delete} {DirQuery}
- {DisableBreak} {DisplayLine}
- {DisplayString} {DISPOSE}
- {DropExt} {Dup2}
- {Dup} {EnableBreak}
- {entier} {ErrorMessage}
- {ErrorLn} {Execute}
- {exp} {ExtractDirPath}
- {ExtractFileName}
-
- {Weiter}
-
- Zurück zum {Index}, Ende mit ESC
-
- .topic Weiter
-
- Liste der Standandprozeduren ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Prozeduren F - P:
- ──────────────────┘
- {Zurück:Routinen}
-
- {FLAT} {FLOAT}
- {GetArg} {GetCurDir}
- {GetCursorPosition} {GetDisplayMode}
- {GetDTA} {GetEnv}
- {GetFileAttr} {GetFileTime}
- {GetFirstDir} {GetFunKey}
- {GetKey} {GetKeyCh}
- {GetLPos} {GetNextDir}
- {GetPos} {GetShiftStatus}
- {GetTime} {GetVector}
- {Goto} {HasExt}
- {Insert} {InstallBreakHandler}
- {IntToString} {InstallRTErrorHandler}
- {KeyPressed} {Length}
- {LLength} {ln}
- {Locate} {Lock}
- {LongCardToString} {LongIntToString}
- {LongJump} {LongNumToString}
- {LongRealToString} {LookUp}
- {MkDir} {Move}
- {NEW} {NEWPROCESS}
- {NewWindowTitle} {NumToString}
- {OFFSET} {Open}
- {OpenInput} {OpenOutPut}
- {OpenWindow} {ParseFileSpec}
- {PopMenu} {Pos}
- {PTR} {PullDownMenu}
-
- {Weiter:Weiter2}
-
- Zurück zum {Index}, Ende mit ESC
-
- .topic Weiter2
-
- Liste der Standandprozeduren ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Prozeduren P - T:
- ───────────────────┘
- {Zurück:Weiter}
-
- {real} {Read}
- {ReadAgain} {ReadCard}
- {ReadChar} {ReadCharAttr}
- {ReadInt} {ReadLine}
- {ReadLongCard} {ReadLongInt}
- {ReadNBytes} {ReadReal}
- {ReadScreen} {ReadString}
- {ReadWord} {ReadWrd}
- {RealToString} {RedirectInput}
- {RedirectOutput} {Rename}
- {Reset} {ResetVector}
- {Rewrite} {RmDir}
- {ScrollDown} {ScrollUp}
- {Seek} {SEGMENT}
- {SelectWindow} {SetCursorPosition}
- {SetCursorType} {SetDisplayMode}
- {SetDTA} {SetFileAttr}
- {SetFileTime} {SetJump}
- {SetLPos} {SetPos}
- {SetTime} {SetVector}
- {SHORT} {sin}
- {sqrt} {StringToInt}
- {StringToLongCard} {StringToLongInt}
- {StringToLongNum} {StringToLongReal}
- {StringToNum} {StringToReal}
- {Terminate} {TermProcedure}
- {TRANSFER} {Trap}
- {TRUNC}
-
- {Weiter:Weiter3}
-
- Zurück zum {Index}, Ende mit ESC
-
- .topic Weiter3
-
- Liste der Standandprozeduren ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Topics ab U:
- ──────────────┘
- {Zurück:Weiter2}
-
- {UnAssignGoto} {UnAssignRead}
- {UnAssignWrite} {UninstallBreakHandler}
- {Unlock} {UninstallRTErrorHandler}
- {Write} {WriteCard}
- {WriteChar} {WriteCharAttr}
- {WriteHex} {WriteInt}
- {WriteLine} {WriteLn}
- {WriteLongCard} {WriteLongInt}
- {WriteNBytes} {WriteOct}
- {WriteReal} {WriteScreen}
- {WriteString} {WriteWord}
- {WriteWrd} {XTrap}
-
- Zurück zum {Index}, Ende mit ESC
-
- .topic IAssembler
-
- der integrierte Assembler ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Es ist ein 8086 Inline-Assembler eingebaut.
-
- Wenn der {ASSEMBLER} aus {SYSTEM:mSYSTEM} importiert ist,
- können Sie im Quelltext Assembler-Code eingeben.
- Dieser muß nur mit den Schlüsselworten {ASM} und END eingeklammert werden.
-
- Die Form des Assembler-Codes ist frei.
- Kommentare werden wie in Modula-2 üblich eingegeben.
-
- Die Zeilen dürfen nicht mit einem Strichpunkt abgeschlossen werden.
-
- Beispiele:
- loop: CMP BYTE [SI], 0
- (* String-Ende erreicht? *)
- MOV BYTE [DI], [SI]
- INC SI
- INC DI (* Zeiger erhöhen *)
- JMP loop
-
- PROCEDURE SHR(in, shifter: CARDINAL): CARDINAL:
- VAR
- out: CARDINAL;
- BEGIN
- ASM
- MOV AX, in
- MOV CX, shifter
- SHR AX, CL
- MOV out, AX
- END;
- RETURN out;
- END SHR;
-
- Der Assembler akzeptiert alle 8086/8088-Mnemonics.
- Adreß-Operanden können in jeder Form codiert werden,
- die auch andere Assembler verstehen, mit der Einschränkung,
- daß der einzige verfügbare Operator "+" ist.
-
- Typ-Bestimmungen sind: {WORD}, {BYTE}, {FAR}, {NEAR}
- und sie dürfen nicht von den Schlüsselworten {POINTER}
- oder {PTR} gefolgt sein.
-
- Beispiel:
-
- label: MOV AX, ES:[BX,DI+5]
- MOV AX, ES:5[DI+BX]
- MOV WORD [5], 1
- CALL NEAR [DI]
- TEST BYTE i+2, 1
-
- Alle Mnemonics und Registernamen müssen in Groß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.
-
- Beispiel:
-
- MOV @AX, AX
-
- generiert einen Move von Register AX nach Variable AX.
-
- Alle Modula-2-Variablen sind grundsätzlich vom Assembler aus zugänglich.
- Record-Komponenten-Namen sind nicht zugänglich.
- Der Assembler tut für Sie nichts automatisch!
- Wenn Sie beispielsweise einen VAR-Parameter als Operanden einsetzen,
- müssen Sie über die Zeiger-Adresse auf den tatsächlichen Parameter zugreifen.
-
- Beispiel:
- PROCEDURE p(VAR done: BOOLEAN);
- ...
- ASM
- LES DI, done
- MOV BYTE ES:[DI], TRUE
- END;
-
- ist der korrekte Weg, "done" mit TRUE zu besetzen.
-
- Auf Konstanten der folgenden Typen kann in Assembler zugegriffen werden:
-
- {INTEGER},
- {CARDINAL},
- {BOOLEAN},
- {CHAR} und
- Aufzählungs-Konstanten.
-
- Alle Marken (Labels) eines {ASM}-Abschnitts sind lokal zu diesem Abschnitt.
- Andere Namen, die außerhalb deklariert sind und die in der Prozedur
- sichtbar sind, dürfen nicht als Label-Namen verwendet werden.
- Auf Labels darf nur in Sprung-Befehlen verwiesen werden.
-
- Alle Sprünge werden vom Compiler optimiert.
- Deshalb braucht die Sprungweite nicht spezifiziert zu werden.
-
- Denken Sie daran, daß dies ein Modula-2-Compiler ist, kein Assembler!
- Der Inline-Assembler ist nur für den Gebrauch in Ausnahmesituationen gedacht.
-
- 8087 Unterstützung
- ════════════════════╝
-
- Alle Befehle des Coprozessors 8087 werden vom Inline-Assembler verarbeitet.
- Die Zusatzbefehle des 80186 (═ 80286-Realmode) werden nicht verstanden und
- müssen im Notfall als Datenbereich mit "DB" eingegeben werden.
- Labels können (ohne Deklarierung) eingesetzt werden.
-
- Der Assembler besitzt ein paar Einschränkungen.
- Nur die folgenden Operandentypen sind bei Load- und Store-Operationen möglich:
-
- {INTEGER}, {LONGINT}, {REAL} und {LONGREAL}.
-
- Sie können kein Load/Store mit einem Wert in temporärem Real- oder
- Dezimal-Format durchführen.
- Die Bedeutung der operandenlosen Form der arithmetischen Befehle
- wurde beibehalten:
-
- ■ FADD, FSUB, FMUL und FDIV arbeiten
- mit den beiden oberen Elementen
- des 8087-Stack.
- Sie benutzen ST(1) als Ziel und
- entfernen ST.
-
- ■ FSUBR subtrahiert ST(1) von
- ST (FDIVR dividiert ST durch
- ST(1)), wobei das Ergebnis
- in ST(1) abgelegt und ST entfernt
- wird.
-
- Das Zwei-Operanden-Format der arithmetischen Befehle
- wurde nicht implementiert.
- Daher dürfen Sie kein anderes Zielregister als ST
- angeben, außer bei den "und pop"-Versionen der Befehle.
-
- Mit einem normalen Assembler kö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.
-
- Um die Konsistenz zu wahren, sollte ST immer der erste Operand sein,
- auch wenn die "und pop"-Form benutzt wird.
-
- Die Bedeutung von FSUBP, FSUBRP, FDIVP und FDIVRP ist also:
-
- ■ FSUBP ST(1) bedeutet:
-
- FSUBRP ST(1),ST -> ST(1):═ST-ST(1)
-
- ■ FSUBRP ST(1) bedeutet:
-
- FSUBP ST(1),ST -> ST(1):═ST(1)-ST
-
- ■ FDIVP ST(1) bedeutet:
-
- FDIVRP ST(1),ST -> ST(1):═ST/ST(1)
-
- ■ FDIVRP ST(1) bedeutet:
-
- FDIVP ST(1),ST -> ST(1):═ST(1)/ST und ST wird entfernt (pop).
-
- Beispiel:
- ─────────
-
- VAR
- wert: WORD;
- BEGIN
- ASM
- ...
- @wert:
- ...
- MOV wert, BX
- CMP BX, CX
- JNZ @wert
- ...
- END;
-
- Eine Liste der Assembler-Befehle der Intel-Prozessorenreihe kann
- (mit der jeweiligen Beschreibung) jedem Assembler-Buch entnommen werden).
-
- Zurück zum {Index}, Ende mit ESC
-
- .topic Schleifentypen, LOOP, FOR, WHILE, BY, CASE, ELSE, ELSIF, WITH
-
- Modula-2-Schleifentypen ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Modula bietet mehr Schleifentypen als Pascal.
- Die Syntax der Schleifen weicht ebenfalls von Pascal ab.
-
- LOOP-Schleife (Endlosschleife):
- ────────────────────────────────┘
-
- Die Abbruchbedingung muß explizit in der Schleife mit "EXIT" erfolgen:
-
- LOOP
- (* mach irgendwas *)
- IF bedingung THEN EXIT;
- END;
-
- ══════════════════════════════════════
-
- FOR-Schleife (einfache Zählschleife):
- ──────────────────────────────────────┘
-
- FOR var1 TO var2 <<BY> <->var3> DO
- (* abarbeiten *)
- END;
-
- "BY" ist optional und gibt die Sprungweite beim Schleifendurchgang (identisch zum STEP-Befehl in BASIC) an.
-
- ═══════════════════════════════════════
-
- Einfache Bedingung mit "IF":
- ──────────────────────────────┘
-
- IF bedingung1 THEN
- (* mach irgendwas *)
- <ELSIF bedingung2>
- (* mach irgendwas anderes *)
- <ELSE>
- (* mach irgendwas ganz anderes *)
- END;
-
- ══════════════════════════════════════
-
- Einfache Bedingung mit "CASE":
- ───────────────────────────────┘
-
- CASE var1 OF
- wert1: (* mach was *)
- <| wert2: (* mach was anderes *)>
- <| wert3: (* mach wieder was anderes *)>
- ELSE (* fang den Rest ab *)
- END;
-
- ══════════════════════════════════════
-
- Kopfgesteuerte "WHILE"-Wiederholanweisung:
- ───────────────────────────────────────────┘
-
- WHILE <NOT> bedingung DO
- (* eine Schleife abarbeiten *)
- END;
-
- Die Bedingung muß beim Einsprung erfüllt sein.
- Die Schleife wird verlassen, wenn die Bedingung nicht mehr erfüllt ist.
-
- Falls die Bedingung anfangs nicht erfüllt wird,
- wird die Schleife nicht ausgeführt.
-
- ══════════════════════════════════════
-
- Fußgesteuerte REPEAT-Wiederholanweisung:
- ─────────────────────────────────────────┘
-
- REPEAT
- (* mach was *)
- UNTIL <NOT> bedingung;
-
- Die Bedingung darf beim Einsprung erfüllt sein (muß aber nicht).
-
- Dieser Schleifentyp wird grundsätzlich mindestens einmal durchlaufen.
-
- ══════════════════════════════════════
-
- Abarbeiten von RECORD-Abweisungen:
- ──────────────────────────────────┘
-
- WITH Persons[i] DO
- IF (Age < 4) THEN
- (* Kleinkind *)
- <ELSEIF (Age < 15) THEN>
- (* Jugendlicher *)
- <ELSE>
- (* Erwachsener *)
- END;
- END;
-
- WITH-Anweisungen werden benutzt, damit die Felder eines RECORDs
- als Schleifenvariablen genutzt werden können.
-
-
- Zurück zum {Index}
-
- .topic Sprachkonventionen, DEFINITION, IMPLEMENTATION
-
- Modula kontra Pascal: Konventionen ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ■ Modula ist Case-sensitiv, d.h. Klein-
- und Großschreibung werden wie in C und
- im Gegensatz zu Pascal unterschieden.
-
- ■ Trennung von DEFINITION (.DEF) und
- IMPLEMENTATION (.MOD) in getrennten Dateien.
-
- ■ 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ß festgelegt
- werden, ob es sich um ein Definitions-
- oder Implementationsmodul handelt.
-
- ■ In DEFINITION-Modulen dürfen nur Variablen,
- Typen, Konstanten und Prozedurköpfe stehen.
- Im Unterschied zu Turbo Pascal-Unit-
- Implementationen dürfen keine Codeteile
- eingebunden sein.
-
- Die Modula-Definitionsdateien dienen nur dem Im- und Export.
- Dieser kann qualifiziert oder unqualifiziert erfolgen.
-
- Beispiel:
-
- IMPORT ASCII; (* Qualifizierter Import *)
- (* vergleichbar mit dem Import *)
- (* von Turbo-Pascal-Objekten. *)
- FROM Files IMPORT Write, WriteChar;
- (* Unqualifizierter Import. *)
- FROM FileSpec IMPORT ;
- (* Import des gesamten Defi- *)
- (* nitionsteiles eines Moduls *)
- (* äquivalent zum Import von *)
- (* Turbo-Pascal Units. *)
-
- Der unqualifizierte Import von gleichnamigen Prozeduren
- aus mehreren Modulen ist nicht möglich:
-
- FROM Files IMPORT Write;
- FROM InOut IMPORT Write;
-
- Der zweite Import wird vom Compiler beanstandet.
- Hier ist es nur möglich, mindestens ein Modul
- qualifiziert zu importieren:
-
- IMPORT Files;
- FROM Inout IMPORT Write;
-
- ■ Prozeduren mit Rückgabewert (Funktionsparametern):
-
- Im Gegensatz zu Pascal gibt es in Modula keine Funktionen (FUNCTION).
- Dies wird dadurch umgangen, daß Prozeduren ebenfalls einen
- Parameter zurückgeben können.
- Allerdings muß dieser ein ordinaler Typ sein.
- Zusammengesetzte Typen dürfen nicht verwendet werden.
-
- Die Pascal-Funktion:
-
- FUNCTION MessageBack: STRING;
-
- ist aus diesem Grund nicht mö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ß folglich
- mit einem VAR-Parameter zurückgegeben werden:
-
- PROCEDURE MessageBack(VAR Back: ARRAY OF CHAR);
-
- oder mit einem Zeigers auf den String:
-
- TYPE
- String: ARRAY OF CHAR;
- PtrStr: POINTER TO String;
-
- PROCEDURE MessageBack(): PtrStr;
-
- Bei ordinalen Typen kann die Struktur wie in
- Pascal programmiert werden:
-
- Pascal:
- ──────
-
- FUNCTION GetBack: BOOLEAN;
- BEGIN
- GetBack :═ FALSE;
- IF KeyPressed THEN GetBack :═ TRUE;
- END;
-
- Modula:
- ───────
-
- PROCEDURE GetBack(): BOOLEAN;
- VAR
- vBack: BOOLEAN;
- BEGIN
- vBack :═ FALSE;
- IF KeyBoard.KeyPressed() THEN
- vBack :═ TRUE;
- END;
- RETURN vBack; (* Rückgabe! *)
- END GetBack;
-
- ■ Fremdsprachige Module:
-
- Um dem Modula-2-Compiler die nötigen Informationen
- über die in anderen Sprachen geschriebenen Module
- verfügbar zu machen, müssen sogenannte
- FOREIGN-DEFINITION(Fremd-Definitions)-Module geschrieben werden.
-
- Ein FOREIGN-DEFINITION-Modul ist ein normales
- Definitions-Modul mit einem etwas veränderten Modulkopf,
- der folgendermaßen aussieht:
-
- FOREIGN [C|PASCAL] DEFINITION MODULE modName;
-
- wobei der "C"- oder "PASCAL"-Bezeichner optional ist.
-
- Namen von globalen Variablen und Prozeduren in Fremdmodulen
- werden auf drei Arten codiert:
-
- ■ Bei einem normalen (weder C noch
- PASCAL) FOREIGN-Modul stehen die
- Bezeichner so in der Object-Datei
- wie Sie sie geschrieben haben.
-
- ■ Bei einem FOREIGN-C-Modul ist vor
- jeden Bezeichner ein "_"-Zeichen
- gesetzt.
-
- ■ Bei einem FOREIGN-PASCAL Modul werden
- alle Bezeichner in Großbuchstaben
- umgewandelt.
-
- WARNUNG: Bei der vorliegenden Implementierung erzeugt der
- Compiler für Zugriffe auf SET- und STRING-Konstanten, die
- in einem FOREIGN-DEFINITION-Module definiert sind, externe Verweise.
- Fü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.
-
- ■ FOREIGN-C-Module:
-
- Beim Aufruf eines Unterprogramms in einem FOREIGN-C-Modul
- werden die Argumente, wie bei C üblich, in umgekehrter
- Reihenfolge auf den Stack gelegt.
- Bei der Rückkehr vom Unterprogramm entfernt außerdem
- der Aufrufer selbst die Argumente vom Stack.
- Da C im Gegensatz zu Modula-2 die Übergabe einer
- variablen Anzahl von Parametern unterstützt,
- kann in Fitted Modula das Zeichen "." am
- Ende einer Parameterliste benutzt werden,
- um anzuzeigen, daß eine unbestimmte Anzahl von
- Argumenten übergeben wird.
-
- Das Beispiel:
- PROCEDURE sum(n: INTEGER; . ): INTEGER;
-
- definiert eine Funktion die aus n Integers die
- Summe bildet und zurückgibt.
- Sie könnte in Modula-2 folgendermaßen definiert werden:
-
- PROCEDURE sum(n: INTEGER; . ): INTEGER;
- VAR
- p: POINTER TO INTEGER;
- res: INTEGER;
- BEGIN
- res :═ 0;
- p :═ ADR(n) + 2;
- WHILE n > 0 DO
- res :═ res + p^;
- INC(p, 2);
- DEC(n);
- END;
- RETURN res;
- END sum;
-
- ■ Parameter-Übergabe:
-
- Die Form in der die einzelnen Parameter übergeben
- werden, ist immer gleich, egal ob sich die Prozedur
- in einem Fremdmodul befindet oder nicht.
- Die Ausnahme ist der Gebrauch von ".".
- Bei der Übergabe von Parametern für die im Prozedurkopf
- der "." steht, folgt der Compiler den üblichen Regeln
- von C: Alles wird als Wert übergeben (call by value),
- lediglich für Arrays wird deren Adresse übergeben
- (call by reference), anstatt deren Wert.
-
- In Modula-2 können Funktionen keine zusammengesetzten
- Typen zurückgeben. Manche C-Compiler ermöglichen dies,
- indem im Registerpaar DX:AX ein Zeiger auf diese Werte
- zurückgegeben wird. Auf die gleiche Art und Weise verfährt
- Fitted Modula-2 mit Zeigern!
-
- Also könnte man wie folgt definieren:
-
- struct someStruct cfunct()
-
- als
-
- TYPE
- someStructPtr ═ POINTER TO someStruct;
-
- PROCEDURE cfunct(): someStructPtr;
-
- Zurück zum {Index}
-
- .topic Zeitstempel
-
- Zeitstempel in FST-Modula-2-M2O-Dateien ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- 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üssel.
- Der Linker stellt sicher, daß die Modul-Schlüssel
- im Module-Header des importierten Moduls und im
- Import-Record übereinstimmen.
- Ist dies nicht der Fall, dann wurde beim Compilieren
- nicht das gleiche Definitions-Modul benutzt.
- Wegen des Gebrauchs dieser Modul-Schlüssel ist
- es zwingend erforderlich, daß das jeweilige
- Datum der .DEF-Dateien nicht verändert wird,
- außer wenn beabsichtigen ist, die Implementierungen
- neu zu compilieren.
-
- Wichtig:
- ────────
-
- Wenn OBJ-Dateien benutzt werden, besteht dieser
- Schutz durch die Modul-Schlüssel nicht.
-
- Zurück zum {Index}
-
- .topic Environment
-
- Environment-Variablen ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Die grundlegenden Bedingungen des Fitted-Modula-Compilers
- können über Environment-Variablen gesteuert werden:
-
- Ausgabeformat der Objektdateien:
- M2OUTPUT═<M2O|OBJ>
- Pfad zu den Bibliotheken/Objektdateien:
- M2LIB═pfad
- Speichermodell:
- M2MODEL═<LARGE|HUGE>
-
- Es muß darauf geachtet werden, daß der
- DOS-Umgebungsbereich ausreicht.
- Falls die DOS-Meldung "Out of Environment Space"
- bzw. "Nicht genug Platz im Umgebungsspeicher"
- erscheint, muß die Größe des Environments angepaßt werden.
- Dies erfolgt mit dem /E:-Parameter beim Shell-Aufruf
- in der CONFIG.SYS:
-
- SHELL═<pfad>COMMAND.COM /E:<Größe in Bytes> /P
-
- M2MODEL:
- ─────────┘
-
- Der Compiler erzeugt Code fü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ß sein dürfen; beim "Large"-Speichermodell sind
- die statischen Daten aller Module in einem einzigen Segment
- zusammengefaßt. Pointer sind in beiden Modellen vier Bytes lang.
- Andere Speichermodelle werden zur Zeit nicht unterstützt.
-
- Die Umgebungsvariable M2MODEL kann auf "HUGE" oder "LARGE"
- gesetzt werden, so daß dem Compiler nicht jedesmal das
- gewünschte Speichermodell mitgeteilt zu werden braucht
- (außer man will sich über diese Voreinstellung hinwegsetzen).
-
- Falls M2MODEL nicht definiert ist, nimmt der Compiler als
- Standard und wegen der Kompatibilität mit früheren Versionen
- die Einstellung "HUGE" an.
-
- Die Einstellung des Speichermodells kann aus Sicherheitsgründen
- nicht aus der IDE geändert werden.
-
- M2LIB:
- ───────┘
-
- Sowohl der Compiler als auch der Linker benutzen die Umgebungsvariable
- M2LIB um auf erforderliche Bibliotheks-Module zuzugreifen
- (das Format für M2LIB entspricht dem für DOS PATH).
-
- M2OUTPUT:
- ──────────┘
-
- Normalerweise werden M2O-Dateien ("Modula-2-Object") erzeugt.
- Dieses Dateiformat gibt es nur bei diesem Compiler.
- Es ist speziell für die Anforderungen von Modula-2 optimiert.
- Der Benutzer kann jedoch mittels der Umgebungs-Variablen M2OUTPUT
- festlegen, daß stattdessen Standard-OBJ-Dateien erzeugt werden.
-
- Die IDE arbeitet nur mit M2O-Dateien korrekt zusammen, da der
- Aufruf der beiden Linker M2LINK und LINK nicht kompatibel ist.
- Falls als Ausgabeformat Intel-OBJ-Dateien verwendet werden sollen,
- müssen die Programme auf der Kommandozeile gebunden werden.
- Alle anderen Funktionen der IDE arbeiten auch mit OBJ-Dateien.
-
- Zurück zum {Index}
-
- .topic CompLimits
-
- Compiler-Begrenzungen: ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Der Compiler erlegt Code und Daten die
- folgenden Größenbegrenzungen auf:
-
- ■ Eine String-Konstante darf 80 Zeichen
- nicht überschreiten. Dies ist auch die
- Größengrenze für jeden Bezeichner.
-
- ■ Beim "HUGE"-Speichermodell erhält jedes
- Modul sein eigenes Datensegment, welches
- bis zu 64k groß sein kann. Im Datensegment
- organisiert der Compiler alle globalen
- Variablen des Moduls und einige seiner
- Konstanten.
-
- ■ Beim "LARGE"-Speichermodell werden die
- Daten aller Module beim Linken in ein
- einziges Datensegment (maximal 64 kBytes)
- gepackt.
-
- ■ Die maximale Größe einer Datenstruktur
- ist 65532 Bytes.
-
- ■ Die lokalen Variablen einer Prozedur dürfen
- höchstens 32000 Bytes Speicherplatz einnehmen.
-
- ■ Ein Parameter der durch "Call-by-value" einer
- Prozedur übergeben wird darf höchstens 65000
- Bytes groß sein.
-
- ■ Interne Grenzen des Compilers:
-
- ∙ Die maximale Anzahl namentlich
- verschiedener Variablen, die der
- Compiler bei einem Lauf bewältigen
- kann, ist 2000. Diese Zahl kann
- beim Aufruf des Compilers geändert
- werden.
-
- ∙ Die Gesamtzahl der Buchstaben in
- den Variablennamen darf 12000
- nicht überschreiten. Diese Zahl
- kann beim Aufruf des Compilers
- geändert werden.
-
- ∙ Eine einzige Prozedur kann nicht
- mehr als 10k Objektcode umfassen.
-
- ∙ Alle initialisierten Daten eines
- Moduls sind in einem 8k großen
- Feld organisiert. Dies bewirkt
- eine Begrenzung der Gesamtzahl an
- String-, Real- und Long-Konstanten
- eines Moduls.
-
- Diese Ausgabe des Compilers ü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:
-
- ■ Der arithmetische Überlauf von {INTEGER}
- und {CARDINAL} bleibt unentdeckt.
-
- ■ {ASM} ist ein reservierter Bezeichner.
-
- ■ Für Programmierer, die in der "Hex-Welt"
- aufgewachsen sind, gibt es eine Möglichkeit,
- CHAR-Literale ("Literal" ═ direkt im
- Quelltext stehender Wert) hexadezimal zu
- definieren: 20X entspricht dem
- Leerzeichen ("space") in {ASCII}.
-
- Fitted-Modula-2 Version 2.0 besitzt zwei Bugs,
- die nicht tragisch sind, aber eine Abweichung zur
- Modula-Standardsyntax hervorrufen:
-
- ■ Vor dem ersten Zweig einer {CASE}-
- Verzweigung darf kein Pipezeichen (|) stehen:
-
- CASE x OF
- | 1: ...;
- | 2: ...;
- ist nicht zulässig! Es muß heißen:
-
- CASE x OF
- 1: ...;
- | 2: ...;
-
- ■ Auch leere Prozeduren müssen
- mit einem BEGIN anfangen:
-
- PROCEDURE p;
- BEGIN
- END p;
-
- Das in Modula-2 normalerweise erlaubte:
-
- PROCEDURE p;
- END p;
-
- ist nicht zulässig.
-
- Die früheren Auflagen der Wirth'schen Sprachdefinition enthalten
- zusätzlich Ausdrücke wie EXPORT oder EXPORT QUALIFIED. Diese
- Bezeichener werden nicht unterstützt, in der Regel führen sie
- aber nicht zu Fehlermeldungen sondern werden ignoriert.
-
-
- Zurück zum {Index}
-
- .topic Rename
-
- Rename ▄
- ▀▀▀▀▀▀▀▀▀
-
- Mit Rename werden Dateien umbenannt oder vom einen zum
- anderen Verzeichnispfad verschoben.
-
- Rename ist mehrfach (mit unterschiedlichen Optionen und
- Fähigkeiten) definiert:
-
- {Files.Rename :Files_Rename}
- {FileSystem.Rename :FileSystem_Rename}
- {Directories.Rename:Directories_Rename}
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic Create
-
- Create ▄
- ▀▀▀▀▀▀▀▀▀
-
- Legt eine neue Datei an:
-
- {Files.Create:Files_Create}
- {FileSystem.Create:FileSystem_Create}
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic WriteLine
-
- WriteLine ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀
-
- {Terminal.WriteLine:Terminal_WriteLine}
- {InOut.WriteLine:InOut_WriteLine}
-
- identisch mit:
-
- {WriteString}(string); {WriteLn};
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic SetFileTime
-
- SetFileTime ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Setzen des Datum und der Uhrzeit einer Datei.
-
- {Files.SetFileTime :Files_SetFileTime}
- {Directories.SetFileTime:Directories_SetFileTime}
-
- Siehe auch: {GetFileTime}.
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic GetFileTime
-
- GetFileTime ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Lesen von Erstellungsdatum und -uhrzeit einer Datei.
-
- {Files.GetFileTime:Files_GetFileTime}
- {Directories.GetFileTime:Directories_GetFileTime}
-
- Siehe auch: {SetFileTime}.
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic WriteString
-
- WriteString ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Prozeduren:
-
- {InOut.WriteString :InOut_WriteString}
- {Terminal.WriteString:Terminal_WriteString}
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic Write
-
- Write ▄
- ▀▀▀▀▀▀▀▀
-
- Konstanten:
- {Files.WRITE:WRITEc}
-
- Prozeduren:
- {Files.Write :Files_Write}
- {Display.Write :Display_Write}
- {Terminal.Write:Terminal_Write}
- {TermIO.Write :TermIO_Write}
- {InOut.Write :InOut_Write}
- {TermBase.Write:TermBase_Write}
-
- siehe auch:
- {WriteChar}, {WriteWord} und {WriteNBytes};
-
- bei den verwandten Prozeduren:
- {WriteLn}, {WriteString} und {WriteLine}
-
- sowie der Komplementärprozedur {Read}
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic WriteChar
-
- WriteChar ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀
-
- Schreibt ein Zeichen {CHAR}.
-
- {Display.WriteChar :Display_WriteChar}
- {FileSystem.WriteChar:FileSystem_WriteChar}
-
- Zurück zum {Index} oder zu {Routinen}, siehe auch {Write}.
-
- .topic KeyPressed
-
- KeyPressed ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Überprüfung, ob ein Zeichen im Tastaturpuffer liegt.
-
- {KeyBoard.KeyPressed:KeyBoard_KeyPressed}
- {TermBase.KeyPressed:TermBase_KeyPressed}
- {TermIO.KeyPressed :TermIO_KeyPressed}
- {Terminal.KeyPressed:Terminal_KeyPressed}
- ────────────────────
- siehe auch: {GetKey}
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic Goto
-
- Goto ▄
- ▀▀▀▀▀▀▀
-
- Die Prozedur positioniert den Cursor auf dem Textbildschirm.
-
- {Display.Goto :Display_Goto}
- {Terminal.Goto:Terminal_Goto}
- {TermBase.Goto:TermBase_Goto}
- {TermIO.Goto :TermIO_Goto}
-
- Goto it KEINE Sprunganweisung innerhalb des Programmes auf ein Label!
- Dergleichen gibt es in Modula-2 nicht.
-
- siehe auch Display.{SetCursorPosition}
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic Close
-
- Close ▄
- ▀▀▀▀▀▀▀▀
-
- Die Prozedur schließt eine derzeit offene Datei.
-
- {Files.Close :Files_Close}
- {FileSystem.Close:FileSystem_Close}
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic Read
-
- Read ▄
- ▀▀▀▀▀▀▀
-
- Liest ein Zeichen (CHAR).
-
- Konstante:
- {Files.READ:READc}
-
- Prozeduren:
- {Files.Read :Files_Read} {TermBase.Read:TermBase_Read}
- {InOut.Read :InOut_Read} {Terminal.Read:Terminal_Read}
- {TermIO.Read:TermIO_Read}
-
- Siehe auch bei den verwandten Prozeduren:
-
- {ReadString}, {ReadLine}, {ReadInt}, {ReadCard}, {ReadWrd}, {ReadLongCard}, {ReadLongInt}, {ReadWord}, {ReadChar}
-
- und der Komplementärprozedur: {Write}
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic Length
-
- Length ▄
- ▀▀▀▀▀▀▀▀▀
-
- Die Prozedur gibt die Länge einer Datei bzw.
- die Länge einer Zeichenkette zurück.
-
- {Strings.Length :Strings_Length}
- {FileSystem.Length:FileSystem_Length}
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic WriteLn
-
- WriteLn ▄
- ▀▀▀▀▀▀▀▀▀▀
-
- Die Prozedur führt einen Zeilenvorschub durch.
-
- {Terminal.WriteLn:Terminal_WriteLn}
- {InOut.WriteLn :InOut_WriteLn}
-
- Siehe auch {WriteLine}
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic ReadLine
-
- ReadLine ▄
- ▀▀▀▀▀▀▀▀▀▀▀
-
- {Terminal.ReadLine:Terminal_ReadLine}
- {InOut.ReadLine :InOut_ReadLine}
-
- Siehe auch: {Read}
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic Delete
-
- Delete ▄
- ▀▀▀▀▀▀▀▀▀
-
- {Files.Delete :Files_Delete}
- {Strings.Delete :Strings_Delete}
- {Directories.Delete:Directories_Delete}
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic mSYSTEM
-
- MODULE SYSTEM (Laufzeitbibliothek) ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Das Pseudomodul SYSTEM ist nicht wie die anderen
- Standardmodule extern definiert.
- Allerdings stehen die Definitionen aus SYSTEM
- auch nur dann zur Verfü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.
-
- In SYSTEM definierte reservierte Worte (Reserved words):
-
- {SEG}, {OFS}, {ASM}, {ASSEMBLER}
-
- In SYSTEM deklarierte Typen:
-
- {ADDRESS}, {BYTE}, {WORD}
-
- In SYSTEM deklarierte Prozeduren:
-
- {NEW} {DISPOSE}
- {LONG} {SHORT}
- {SEGMENT} {OFFSET}
- {ADR} {FLAT}
- {PTR} {NEWPROCESS}
- {TRANSFER} {IOTRANSFER}
- {TRUNC} {FLOAT}
-
- Zurück zum {Index} oder zu {Routinen}
-
- .topic SEG, OFS
-
- SYSTEM.SEG / .OFS ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- SEG und OFS sind Komponenten des POINTER-Typs.
- Wenn diese importiert werden, kann in normaler
- Syntax auf den Segment- oder den Offset-Teil eines Zeigers
- zugegriffen werden.
-
- Beispiel:
-
- pointer.SEG: Segment-Teil des Zeigers "pointer".
- pointer.OFS: Offset-Teil des Zeigers "pointer".
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic ASM
-
- SYSTEM.ASM ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Das in Fitted-Modula-2 reservierte Wort "ASM"
- leitet eine {Assembler}-Anweisung ein.
- Jeder Bereich mit Inline-Assembler muß
- mit ASM / END eingeschlossen sein.
-
- Beispiel:
- PROCEDURE AsmDemo;
- BEGIN
- ASM
- ....
- END;
- END AsmDemo;
-
- Kommentare müssen Modula-üblich eingeklammert werden.
- Alle Assembler-Bezeichner müssen in Großbuchstaben geschrieben sein.
- Der {ASSEMBLER} muß zuvor aus dem Pseudomodul {SYSTEM} importiert werden.
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic Assembler
-
- "ASSEMBLER"-Befehl: ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Um den Inline-Assembler ({ASM}) verwenden zu können,
- muß vorher der Assembler mit:
-
- FROM SYSTEM IMPORT ASSEMBLER;
-
- importiert werden.
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic ADDRESS
-
- TYPE SYSTEM.ADDRESS ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Der Typ ADDRESS ist zu allen Zeiger-Typen kompatibel.
- ADDRESS selbst ist als POINTER TO WORD definiert.
-
- In dieser Implementierung ist der Typ ADDRESS mit keinem
- arithmetischen Typ kompatibel.
- Das liegt an der Tatsache, daß Prozessoren der Intel
- 8086-Serie Adressen in Segment-Offset-Darstellung benutzen.
- Es wäre nicht schwierig gewesen, eine automatische
- Umwandlung zwischen {LONGCARD} und {ADDRESS} zu implementieren.
- Wir glauben, daß es dem Geist der Sprache widersprochen hätte,
- wenn der Compiler irgendwelche "magischen" Tricks durchführen würde.
- Stattdessen stehen zu diesem Zweck zwei Prozeduren zur
- Verfügung: {FLAT} und {PTR}.
-
- In der Version 1.2 haben wir diese Regel etwas gelockert:
-
- ADDRESS + CARDINAL und ADDRESS - CARDINAL sind erlaubte Ausdrücke.
-
- Der CARDINAL-Wert wird mit dem Offset-Teil der Adresse
- verrechnet und das Ergebnis ist wieder eine Adresse.
-
- Auch für {INC} und {DEC} ist ADDRESS als erstes Argument erlaubt.
-
- Die Operation wird nur auf dem Offset-Teil der Adresse ausgeführt!
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic BYTE
-
- TYPE SYSTEM.BYTE ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- 1 Byte Speicherbedarf.
-
- Fü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 kompatiblen Typ sein.
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic WORD
-
- TYPE SYSTEM.WORD ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- 1 Wort (2 Bytes) Speicherbedarf.
-
- Fü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 kompatiblen Typ sein.
-
- Vorsicht: Die Größe des übergebenen Parameters wird
- auf gerade Bytezahl aufgerundet!
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic NEW, DISPOSE
-
- SYSTEM.NEW und SYSTEM.DISPOSE ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- 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:
-
- NEW(p)
-
- ruft die Prozedur Storage.{ALLOCATE} auf, die dem Typ entsprechen muß:
-
- PROCEDURE (VAR ADDRESS, CARDINAL)
-
- mit der Übergabe des Zeigers p und der Größe des Objekts auf p.
-
- DISPOSE(p)
-
- ruft die Prozedur Storage.{DEALLOCATE} auf, die dem Typ entsprechen muß:
-
- PROCEDURE (VAR ADDRESS, CARDINAL)
-
- mit der Übergabe des Zeigers p und der Größe des Objekts auf p.
-
- Die Prozeduren {ALLOCATE} und {DISPOSE} müssen also
- in einem Modul welches NEW und/oder DISPOSE benutzt,
- definiert werden, oder von einem anderen Modul (z.B. {Storage})
- importiert werden.
-
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic LONG
-
- SYSTEM.LONG ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE LONG(INTEGER): LONGINT;
- PROCEDURE LONG(CARDINAL): LONGCARD;
- PROCEDURE LONG(REAL): LONGREAL;
-
- LONG wandelt von INTEGER, CARDINAL oder REAL
- nach LONGINT, LONGCARD oder LONGREAL,um.
-
- Siehe auch: {SHORT}.
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic SHORT
-
- SYSTEM.SHORT ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SHORT(LONGINT): INTEGER;
- PROCEDURE SHORT(LONGCARD): CARDINAL;
- PROCEDURE SHORT(LONGREAL): REAL;
-
- SHORT wandelt von LONGINT, LONGCARD oder
- LONGREAL nach INTEGER, CARDINAL oder REAL um.
-
- Siehe auch: {LONG}.
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic ADR
-
- SYSTEM.ADR ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ADR(VAR adr: ADDRESS);
-
- ADR(Bezeichner) gibt die Adresse des Objekts "Bezeichner" aus (Typ {ADDRESS}).
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic FLAT
-
- SYSTEM.FLAT ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE FLAT(VAR adr: LONGCARD);
-
- FLAT({ADDRESS}) gibt eine unsegmentierte Adresse aus (LONGCARD).
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic PTR
-
- SYSTEM.PTR ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE PTR(adr: LONGCARD);
-
- PTR gibt die der unsegmentierten Adresse (LONGCARD)
- entsprechende Adresse in Segment-Offset-Darstellung
- ({ADDRESS}) aus.
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic NEWPROCESS
-
- SYSTEM.NEWPROCESS ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE NEWPROCESS(p: PROC;
- a: ADDRESS;
- n: CARDINAL;
- VAR p1: ADDRESS);
-
- 2NEWPROCESS erzeugt einen neuen Prozeß,
- dessen Startpunkt p ist und dessen n Bytes
- großer Arbeitsspeicher bei a beginnt.
- p1 ist der neue Prozeß-Zeiger.
- Dieser Prozeß ist nicht aktiviert bis ein
- SYSTEM.{TRANSFER} zu p1 vorgenommen wird.
-
- Die Start-Priorität des neuen Prozesses ist
- die aktuelle Priorität beim Aufruf von NEWPROCESS.
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic TRANSFER
-
- SYSTEM.TRANSFER ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE TRANSFER(VAR p1, p2: ADDRESS);
-
- TRANSFER setzt den laufenden Prozeß außer Kraft,
- weist ihn p1 zu und nimmt p2 auf.
- Der Wert vom laufenden Prozeß wird p1 erst zugewiesen,
- nachdem p2 identifiziert wurde;
- daher kann für p1 und p2 die gleiche Variable verwendet werden.
-
- Der Prozeß wird mit der gleichen Priorität wieder
- aufgenommen, die er beim Suspendieren hatte.
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic IOTRANSFER
-
- SYSTEM.IOTRANSFER ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE IOTRANSFER(VAR p1,
- p2: ADDRESS;
- intVector: CARDINAL);
-
- IOTRANSFER nimmt einen TRANSFER von p1 zu p2 vor.
- Ebenso wie es SYSTEM.{TRANSFER} tut,
- nachdem der laufende Prozeß zur Reaktivierung
- vorbereitet wurde, die geschieht wenn über den
- Interrupt-Vektor "intVector" ein Interrupt ausgelöst wird.
- Wenn der Interrupt durchgeführt wird, wird der
- Interrupt-Vektor mit seinem vorherigen Wert geladen
- und ein TRANSFER zum I/O-Prozeß (derjenige welcher den
- IOTRANSFER ausführte) wird durchgeführt.
- Anschließend besitzt p2 den Wert des Prozesses, der lief,
- als der Interrupt auftrat.
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic TRUNC
-
- SYSTEM.TRUNC ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE TRUNC(REAL): CARDINAL;
- PROCEDURE TRUNC(LONGREAL): LONGCARD;
-
- Die TRUNC- und {FLOAT}-Prozeduren dienen zur
- Umwandlung zwischen den zwei Integer/Cardinal-Typen
- und Real-Typen.
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic FLOAT
-
- SYSTEM.FLOAT ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE FLOAT(CARDINAL): REAL;
- PROCEDURE FLOAT(LONGCARD): LONGREAL;
-
- Die {TRUNC}- und FLOAT-Prozeduren dienen zur
- Umwandlung zwischen den zwei Integer/Cardinal-Typen und Real-Typen.
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic SEGMENT
-
- SYSTEM.SEGMENT ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SEGMENT(adr: ADDRESS):
- CARDINAL;
-
- SEGMENT(Bezeichner) gibt den Segmentteil der
- Adresse des Objekts "Bezeichner"aus.
-
- Beispiel:
-
- DX :═ SEGMENT(buffer);
-
- weist DX den Segment-Wert von ADR(buffer) zu.
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic OFFSET
-
- SYSTEM.OFFSET ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE OFFSET(adr: ADDRESS):
- CARDINAL;
-
- OFFSET(Bezeichner) gibt den Offsetteil der
- Adresse des Objekts "Bezeichner" aus.
-
- Zurück zum Pseudomodul {SYSTEM:mSYSTEM}
-
- .topic DOSSystem
-
- MODULE System ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Dieses Modul enthält systemspezifische Definitionen.
- Diese Version ist für MS/PC-DOS ab Version 2.0.
-
- Definierte Typen:
- ───────────────────┘
- TYPE
- {ErrorProc} ═ PROCEDURE(CARDINAL,
- ADDRESS);
-
- MemoryModel ═ (tiny,
- small,
- compact,
- medium,
- large,
- huge);
-
- Unterstützt werden z. Zt. nur "large" und "huge".
-
- In "System" definierte Variablen:
- ─────────────────────────────────
-
- VAR
- MemModel: MemoryModel;
- {DOSVersion}: CARDINAL;
- {PSP}: CARDINAL;
- {MemTop}: CARDINAL;
- {HeapBase}: CARDINAL;
- {StackSeg}: CARDINAL;
- {StackSize}: CARDINAL;
- {HeapTop}: CARDINAL;
- Has8087: BOOLEAN;
- {AX}, {BX}, {CX},
- {DX}, {SI}, {DI}: CARDINAL;
- {BP}, {DS}, {ES}: CARDINAL;
- {FLAGS}: BITSET;
-
- Definierte Konstanten:
- ──────────────────────
-
- CONST
- {carryFlag} ═ 0; {zeroFlag} ═ 6;
-
-
- Definierte Prozeduren:
- ──────────────────────
- {GetArg} {GetEnv}
- {Trap} {XTrap}
- {Move} {TermProcedure}
- {Terminate} {GetVector}
- {SetVector} {ResetVector}
- {InstallRTErrorHandler}
- {UninstallRTErrorHandler}
-
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic DOSVersion
-
- VAR System.DOSVersion: CARDINAL ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Die beim Start der Laufzeitbibliothek belegte Variable
- liefert die verwendete DOS-Version * 100 zurück:
-
- z.B.:
- für DOS 2.10: 210
- für DOS 3.30: 330
- für DOS 5.00: 500
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic PSP
-
- VAR System.PSP: CARDINAL ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Gibt das PSP (Programm-Segment-Prefix) in Paragraphen zurück.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic MemTop
-
- VAR System.MemTop: CARDINAL ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Gibt das Ende des Speichers (MemTop) in Paragraphen zurück.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic HeapBase
-
- VAR System.HeapBase: CARDINAL ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Gibt den Beginn des Heap in Paragraphen zurück.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic StackSeg
-
- VAR System.StackSeg: CARDINAL ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Gibt die Adresse des Stack-Segments in Paragraphen zurück.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic StackSize
-
- VAR System.StackSize: CARDINAL ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Liefert die Größe des Stacksegments (vorbelegter Stack-Pointer
- (SP-Register)) zurück.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic HeapTop
-
- VAR System.HeapTop: CARDINAL ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Liefert das Ende des Heaps in Paragraphen.
- Das Modul Storage kann diesen Wert anpassen.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic AX, BX, CX, DX, SI, DI, BP, DS, ES, FLAGS
-
- CPU-Register: ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Registervariablen aus dem Modul System:
-
- AX, BX, CX, DX, SI, DI: CARDINAL;
- BP, DS, ES : CARDINAL;
- FLAGS : BITSET;
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic carryFlag, zeroFlag
-
- System.carryFlag / .zeroFlag
- ──────────────────────────────┘
-
- CPU-Flags.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic ErrorProc
-
- System.ErrorProc ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- TYPE
- ErrorProc ═ PROCEDURE(CARDINAL,
- ADDRESS);
-
- Setzt einen Zeiger auf eine benutzerdefinierte
- Fehlerbehandlungsroutine.
- Im Fall eines Laufzeitfehlers werden die Fehlernummer
- und die Fehleradresse geliefert.
-
- siehe auch:
- {Standard-Fehlerroutinen:Laufzeitfehler}
-
- Die Fehleradresse kann mit der Adresse in der durch
- DBG2MAP erzeugten .MAP-Datei wie folgt verknüpft werden:
-
- a.SEG :═ a.SEG - (PSP + 10H);
-
- Nach der Rückkehr aus der benutzerdefinierten
- Fehlerroutine wird zur Standard-Fehlerroutine
- verzweigt und hiermit das Programm abgebrochen.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic GetArg
-
- System.GetArg ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetArg(VAR arg: ARRAY OF CHAR;
- VAR length: CARDINAL );
-
- Liefert das nächste Argument in der Kommandozeile.
-
- 1. Leerzeichen trennen Argumente.
-
- 2. "/" leitet ein neues Argument ein (Option).
-
- 3. Um die obigen Voreinstellung zu überschreiben,
- kann ein Modula-2-String angegeben werden.
-
- Beispiel:
- COMMAND arg1 "arg 2" /option "command's last arg"
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic GetEnv
-
- System.GetEnv ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetEnv(var: ARRAY OF CHAR;
- VAR val: ARRAY OF CHAR);
-
- Lädt "val" mit dem Wert der Environmentvariable "var".
- Wenn "var" nicht gefunden wird, wird ein Null-String
- in "val" zurückgeliefert.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic Trap
- System.Trap ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Trap(intno: CARDINAL);
-
- Lädt die CPU-Register mit den Inhalten
- von {AX}..{DI} und führt dann den angegebenen
- Softwareinterrupt "intno" aus.
- Bei der Rückkehr vom Interrupt werden die Register
- in AX..DI und die Prozessorflags in {FLAGS} gesichert.
-
- siehe auch {XTrap}
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic XTrap
-
- System.XTrap ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE XTrap(intno: CARDINAL);
-
- Lädt die CPU-Register mit den Inhalten von {AX}..{ES}
- und führt dann den angegebenen Softwareinterrupt "intno" aus.
-
- Bei der Rückkehr vom Interrupt werden die Register
- in AX..ES und die Prozessorflags in {FLAGS} gesichert.
-
- siehe auch {Trap}
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic Move
-
- System.Move ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Move(src: ADDRESS;
- dest: ADDRESS;
- size: CARDINAL );
-
- Bewegt "size" Bytes von "src" nach "dest".
- Der Pseudocode hierfür sieht folgendermaßen aus:
-
- IF FLAT(src) > FLAT(dest) THEN
- (bewege von der niedrigen zur hohen Adresse)
- ELSE
- (bewege von der hohen zur niedrigen Adresse)
- END
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic TermProcedure
-
- System.TermProcedure ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE TermProcedure(p :PROC);
-
- Installiert eine Prozedur, die ausgeführt wird,
- wenn das Programm beendet wird.
- Es können bis zu 20 Ende-Prozeduren installiert werden.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic Terminate
-
- System.Terminate ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Terminate(exitStatus: CARDINAL);
-
- Die Prozedur unterbricht die Programmausführung und
- setzt das DOS-Errorlevel auf "exitStatus".
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic GetVector
-
- System.GetVector ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetVector(IntNum: CARDINAL;
- VAR ISR: ADDRESS);
-
- Die Prozedur lädt den Wert des Interruptvectors "IntNum"
- aus dem BIOS-Interruptbereich in die Variable "ISR".
-
- Siehe auch {SetVector}.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic SetVector
-
- System.SetVector ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SetVector(IntNum: CARDINAL;
- ISR: PROC);
-
- Installiert eine Interrupt-Subroutine (ISR),
- die dann aufgerufen wird, wenn der Interrupt
- "IntNum" ausgeführt werden soll.
- Die in der Interrupt-Vektor geladene Adresse
- ist die Startadresse der ISR-Prozedur,
- bei der der vom Compiler generierte
- Prozedur-Eintrittscode ausgelassen wird.
- Die Interrupt-Subroutine muß mit abgeschalteter
- Stacküberprüfung (*{$S-:Switches_sS}*) compiliert werden,
- da der Compiler bei eingeschalteter
- Stack-Überprüfung Assembleranweisungen erzeugt,
- die den Stackpointer manipulieren.
-
- Siehe auch {GetVector}.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic ResetVector
-
- System.ResetVector ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ResetVector(IntNum: CARDINAL;
- ISR: ADDRESS);
-
- Lädt den Wert des Interruptvektor
- "IntNum" in die Interrupt-Subroutine (ISR).
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic InstallRTErrorHandler
-
- System.InstallRTErrorHandler ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE InstallRTErrorHandler(errorProc:
- ErrorProc);
-
- Installiert die Fehlerbehandlungsroutine, die dann
- aufgerufen wird, wenn ein Laufzeitfehler auftritt.
- Es können bis zu zehn Fehlerbehandlungsroutinen
- installiert werden.
- Es wird jedoch nur die zuletzt installierte im
- Falle eines Laufzeitfehlers ausgeführt.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic UninstallRTErrorHandler
-
- System.UnInstallRTErrorHandler ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE UninstallRTErrorHandler;
-
- Deinstalliert die zuletzt mit {InstallRTErrorHandler}
- installierte Fehlerprozedur "errorProc".
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic ErrorMessage
-
- System.ErrorMessage ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ErrorMessage(msg: ARRAY OF CHAR);
-
- Schreibt die Meldung msg an die Standard-Fehlerausgabe {StdErr}.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic ErrorLn
-
- System.ErrorErrorLn ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ErrorLn;
-
- Schreibt eine neue Zeile an die Standard-Fehlerausgabe {StdErr}.
-
- Zurück zum Modul {System:DOSSystem}
-
- .topic ASCII
-
- MODULE ASCII ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Die Werte für ASCII-Zeichen müssen in Modula oktal angegeben werden.
- Alle Zeichen unter 32 sowie das Zeichen 127 (Backspace)
- sind, da sie normalerweise nicht direkt geschrieben
- werden können, im Modul ASCII vordefiniert:
-
- Standard ASCII-Steuerzeichen:
-
- ┌────┬────────────╥────┬────────────┐
- │ nul│NUL ═ 00C ║ soh│SOH ═ 01C │
- │ stx│STX ═ 02C ║ etx│ETX ═ 03C │
- │ eot│EOT ═ 04C ║ enq│ENQ ═ 05C │
- │ ack│ACK ═ 06C ║ bel│BEL ═ 07C │
- │ bs │ BS ═ 10C ║ ht │ HT ═ 11C │
- │ lf │ LF ═ 12C ║ vt │ VT ═ 13C │
- │ ff │ FF ═ 14C ║ cr │ CR ═ 15C │
- │ so │ SO ═ 16C ║ si │ SI ═ 17C │
- │ dle│DLE ═ 20C ║ dc1│DC1 ═ 21C │
- │ dc2│DC2 ═ 22C ║ dc3│DC3 ═ 23C │
- │ dc4│DC4 ═ 24C ║ nak│NAK ═ 25C │
- │ syn│SYN ═ 26C ║ etb│ETB ═ 27C │
- │ can│CAN ═ 30C ║ em │ EM ═ 31C │
- │ sub│SUB ═ 32C ║ esc│ESC ═ 33C │
- │ fs │ FS ═ 34C ║ gs │ GS ═ 35C │
- │ rs │ RS ═ 36C ║ us │ US ═ 37C │
- ├────┼────────────╫────┴────────────┤
- │ del│DEL ═ 177C ║ │
- └────┴────────────╨─────────────────┘
-
- Was die Steuerzeichenkombinationen erzeugen:
-
- ┌─────────────╥─────────────╥─────────────┐
- │ CtrlA ═ 01C ║ CtrlB ═ 02C ║ CtrlC ═ 03C │
- │ CtrlD ═ 04C ║ CtrlE ═ 05C ║ CtrlF ═ 06C │
- │ CtrlG ═ 07C ║ CtrlH ═ 10C ║ CtrlI ═ 11C │
- │ CtrlJ ═ 12C ║ CtrlK ═ 13C ║ CtrlL ═ 14C │
- │ CtrlM ═ 15C ║ CtrlN ═ 16C ║ CtrlO ═ 17C │
- │ CtrlP ═ 20C ║ CtrlQ ═ 21C ║ CtrlR ═ 22C │
- │ CtrlS ═ 23C ║ CtrlT ═ 24C ║ CtrlU ═ 25C │
- │ CtrlV ═ 26C ║ CtrlW ═ 27C ║ CtrlX ═ 30C │
- │ CtrlY ═ 31C ║ CtrlZ ═ 32C ║ │
- └─────────────╨─────────────╨─────────────┘
-
- Modula-2 Zeilenende-Zeichen:
-
- EOL ═ 36C;
-
- Modula-2 Textdatei-Endezeichen:
-
- EOF ═ CtrlZ;
-
- Zurück zum {Index}, Ende mit ESC
-
- .topic InOut
-
- MODULE InOut ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Dies ist das Standardmodul InOut, wie es in dem
- Buch "Programming in Modula-2" von Niklaus
- Wirth definiert wurde.
- Einige Erweiterungen wurden eingebaut, hauptsächlich
- zur Unterstützung der Datentypen {LONGINT} und {LONGCARD}.
-
- CONST
- {EOL} ═ 36C;
-
- VAR
- {Done} : BOOLEAN;
- {termCH}: CHAR;
-
- ─────────────────────────────────────
-
- definierte Prozeduren:
-
- {OpenInput} {OpenOutPut}
- {RedirectInput} {RedirectOutput}
- {CloseInput} {CloseOutput}
- {ReadString} {Read:InOut_Read}
- {ReadInt} {ReadLine:InOut_ReadLine}
- {ReadWrd} {Write:InOut_Write}
- {ReadCard} {WriteLn:InOut_WriteLn}
- {WriteInt} {WriteLine:InOut_WriteLine}
- {WriteCard} {WriteString:InOut_WriteString}
- {WriteOct} {WriteHex}
- {WriteWrd} {ReadLongInt}
- {ReadLongCard} {WriteLongInt}
- {WriteLongCard}
-
- Zurück zum {Index}, Ende mit ESC
-
- .topic EOL
-
- InOut.EOL
- ───────────┘
- CONST
- EOL ═ 36C;
-
- Zeilenende-Kennung
-
- Zurück zum Modul {InOut}
-
- .topic Done
-
- InOut.Done
- ────────────┘
-
- VAR
- Done : BOOLEAN;
-
- "Done" wird von den Prozeduren {OpenInput}, {OpenOutput},
- {RedirectInput}, {RedirectOutput}, {Read:InOut_Read},
- {ReadInt}, {ReadCard}, {ReadLongInt}, {ReadLongCard},
- {ReadWrd} und {WriteWrd} gesetzt, um anzeigen,
- ob der Aufruf der Prozedur erfolgreich war.
-
- Zurück zum Modul {InOut}
-
- .topic termCH
-
- InOut.termCH
- ──────────────┘
-
- VAR
- termCH: CHAR;
-
- In dieser (globalen) Variable wird das letzte gelesene
- Zeichen der Leseprozeduren (ReadXXXX) des Moduls InOut gespeichert.
-
- Zurück zum Modul {InOut}
-
- .topic OpenInput
-
- InOut.OpenInput ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE OpenInput(defext: ARRAY OF CHAR);
-
- Fragt den Benutzer nach einer Datei für die Eingabeumleitung.
- Wenn das letzte Zeichen der Eingabe ein Punkt ist,
- wird "defext" (default Extension) an den Dateinamen angehängt.
-
- Zurück zum Modul {InOut}
-
- .topic OpenOutPut
-
- InOut.OpenOutput ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE OpenOutput(defext :ARRAY OF CHAR);
-
- 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ängt.
-
- Zurück zum Modul {InOut}
-
- .topic RedirectInput
-
- InOut.RedirectInput ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE RedirectInput(from: ARRAY OF CHAR);
-
- Leitet die Eingabe aus der Datei "from" um.
-
- Zurück zum Modul {InOut}
-
- .topic RedirectOutput
-
- InOut.RedirectOutput ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE RedirectOutput(to: ARRAY OF CHAR);
-
- Leitet alle Ausgaben in die Datei "to" um.
-
- Zurück zum Modul {InOut}
-
- .topic CloseInput
-
- InOut.CloseInput ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE CloseInput;
-
- Die mit {OpenInput} oder {RedirectInput} geöffnete Datei
- wird geschlossen und das Terminal als Eingabegerät
- wieder aktiviert.
-
- Zurück zum Modul {InOut}
-
- .topic CloseOutput
-
- InOut.CloseOutput ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE CloseOutput;
-
- Die mit {OpenOutPut} oder {RedirectOutput} geöffnete
- Datei wird geschlossen und das Terminal als Ausgabegerät
- wieder aktiviert.
-
- Zurück zum Modul {InOut}
-
- .topic InOut_Read
-
- InOut.Read ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Read(VAR ch: CHAR);
-
- Liest ein Zeichen aus der Standard-Eingabe.
-
- Zurück zum Modul {InOut} oder zur {Read}-Übersicht.
-
- .topic ReadString
-
- InOut.ReadString ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadString(VAR s: ARRAY OF CHAR);
-
- Liest eine Zeichenkette.
-
- 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öglichkeiten gegeben:
-
- ASCII.BS löscht das letzte Zeichen
-
- ASCII.DEL löscht die gesamte Eingabe
-
- ASCII.ESC löscht die gesamte Eingabe und
- beendet die Funktion mit RETURN.
-
- Zurück zum Modul {InOut}
-
- .topic InOut_ReadLine
-
- InOut.ReadLine ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadLine(VAR s: ARRAY OF CHAR);
-
- 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.
-
- Wenn vom Terminal gelesen wird, sind folgende
- Editiermöglichkeiten gegeben:
-
- {ASCII}.BS löscht das letzte Zeichen
-
- {ASCII}.DEL löscht die gesamte Eingabe
-
- {ASCII}.ESC löscht die gesamte Eingabe
- und beendet die Funktion mit RETURN.
-
- Zurück zum Modul {InOut} oder zur {ReadLine}-Übersicht.
-
- .topic ReadInt
-
- InOut.ReadInt ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadInt(VAR x: INTEGER);
-
- Ein Zeichenfeld wird aus dem Eingabegerät
- gelesen und dann in eine INTEGER-Zahl umgewandelt.
-
- Zurück zum Modul {InOut}
-
- .topic ReadCard
-
- InOut.ReadCard ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadCard(VAR x: CARDINAL);
-
- Eine Zeichenkette wird aus dem Eingabegerät
- gelesen und dann in eine CARDINAL-Zahl konvertiert.
-
- Zurück zum Modul {InOut}
-
- .topic ReadWrd
-
- InOut.ReadWrd ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadWrd(VAR w: WORD);
-
- Liest ein {WORD} aus der Eingabe-Datei.
-
- Achtung:
- ────────
- ReadWrd ist nur dann erlaubt, wenn die Eingabe
- aus einer Datei umgeleitet wird!
-
- Zurück zum Modul {InOut}
-
- .topic InOut_Write
-
- InOut.Write ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Write(ch: CHAR);
-
- Schreibt ein Zeichen an die Standardausgabe.
-
- Zurück zum Modul {InOut} oder zur {Write}-Übersicht.
-
- .topic InOut_WriteLn
-
- InOut.WriteLn ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteLn;
-
- Identisch zu {Write:InOut_Write} ({ASCII}.EOL).
- Schreibt einen Zeilenumbruch.
-
- Zurück zum Modul {InOut} oder zur {WriteLn}-Übersicht.
-
- .topic InOut_WriteString
-
- InOut.WriteString ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteString(s: ARRAY OF CHAR);
-
- Schreibt die Zeichenkette "s" in die Standardausgabe.
-
- Zurück zum Modul {InOut} oder zur {WriteString}-Übersicht.
-
- .topic WriteInt
-
- InOut.WriteInt ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteInt(x: INTEGER; n: CARDINAL);
-
- Schreibt die INTEGER-Zahl "x" rechtsbündig
- in ein Feld mit "n" Zeichen.
-
- Zurück zum Modul {InOut}
-
- .topic WriteCard
-
- InOut.WriteCard ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteCard(x, n: CARDINAL);
-
- Schreibt die CARDINAL-Zahl "x" rechtsbündig
- in ein Feld mit "n" Zeichen.
-
- Zurück zum Modul {InOut}
-
- .topic WriteOct
-
- InOut.WriteOct ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteOct(x, n: CARDINAL);
-
- Schreibt "x" in oktaler Form in ein
- rechtsbündiges Feld von mindestens "n" Zeichen.
-
- Wenn (n <═ 3) und (x < 100H) dann werden
- drei, ansonsten sechs Zeichen geschrieben.
-
- Zurück zum Modul {InOut}
-
- .topic WriteHex
-
- InOut.WriteHex ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteHex(x, n: CARDINAL);
-
- Schreibt "x" in hexadezimaler Form in
- ein rechtsbündiges Feld von mindestens "n" Zeichen.
-
- Wenn (n <═ 2) und (x < 100H) dann werden
- zwei, ansonsten vier Zeichen geschrieben.
-
- Zurück zum Modul {InOut}
-
- .topic WriteWrd
-
- InOut.WriteWrd ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteWrd(w: WORD);
-
- Schreibt "w" in die Ausgabedatei.
-
- Die Operation ist nur dann erlaubt,
- wenn die Ausgabe in eine Datei umgeleitet wird.
-
- Zurück zum Modul {InOut}
-
- .topic ReadLongInt
-
- InOut.ReadLongInt ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadLongInt(VAR x: LONGINT);
-
- Eine Zeichenkette wird aus dem Eingabegerät
- gelesen und dann in eine LONGINT-Zahl umgewandelt.
-
- Zurück zum Modul {InOut}
-
- .topic ReadLongCard
-
- InOut.ReadLongCard ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadLongCard(VAR x: LONGCARD);
-
- Eine Zeichenkette wird aus dem Eingabegerät
- gelesen und dann in eine LONGCARD-Zahl umgewandelt.
-
- Zurück zum Modul {InOut}
-
- .topic WriteLongInt
-
- InOut.ReadLongInt ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteLongInt(x: LONGINT; n: CARDINAL);
-
- Schreibt die LONGINT-Zahl "x" rechtsbündig in
- ein Feld von mindestens "n" Zeichen.
-
- Zurück zum Modul {InOut}
-
- .topic WriteLongCard
-
- InOut.WriteLongCard ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteLongCard(x: LONGCARD; n: CARDINAL);
-
- Schreibt die LONGCARD-Zahl "x" rechtsbündig in
- ein Feld von mindestens "n" Zeichen.
-
- Zurück zum Modul {InOut}
-
- .topic InOut_WriteLine
-
- InOut.WriteLine ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteLine(s: ARRAY OF CHAR);
-
- identisch mit:
- {WriteString:InOut_WriteString}(s); {WriteLn:InOut_WriteLn};
-
- Zurück zum Modul {InOut} oder zur {WriteLine}-Übersicht.
-
- .topic MLongJump
-
- MODULE LongJump ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- SetJump sichert die Umgebung des
- Vaterprozesses in dem übergebenen Parameter
- und gibt 0 zurück.
-
- LongJump stellt die gesicherte Umgebung
- eines vorherigen SetJump wieder her.
- Die Ausführung wird als Rückgabe (RETURN)
- von SetJump wieder aufgenommen.
- Der Rückgabewert wird SetJump untergeschoben.
-
- Logischerweise darf der Zeiger auf die
- zurückgelieferten Parameter nicht NIL (RETURN 0) sein.
-
- Wenn LongJump aufgerufen wird, muß die Prozedur,
- die den korrespondierenden SetJump
- durchgeführt hat, noch aktiv sein.
-
- Beispiel:
-
- PROCEDURE main;
- ...
- IF SetJump(env) ═ 0 THEN
- Parse
- ELSE
- WriteString("error in Parse")
- END;
- ...
-
- PROCEDURE Parse;
- ...
- IF errorcond THEN
- LongJump(env, 1)
- END;
- ...
-
-
- Die Prozedur "main" ruft SetJump auf, um die aktuelle
- Ausführungsumführung in "env" zu sichern.
- SetJump liefert 0 zurück und anschließend
- wird "Parse" aufgerufen.
-
- Falls Parse einen Fehler entdeckt,
- ruft die Prozedur LongJump mit einem
- Rückgabewert von 1.
- Die Hauptprozedur "main" wird am
- Rückgabe-Punkt von SetJump fortgesetzt,
- die IF-Bedingung Abfrage wird {FALSE} und
- der String ausgegeben.
-
- ------------------------
-
- deklarierter Typ:
- {JumpBuffer}
-
- deklarierte Prozeduren:
- {SetJump} {LongJump}
-
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic JumpBuffer
-
- LongJump.JumpBuffer
- ─────────────────────┘
-
- TYPE
- JumpBuffer ═ RECORD
- savPC, savCS,
- savSP, savBP: CARDINAL;
- END;
-
- Globale Pufferung der Routinen des Moduls LongJump.
-
- Zurück zum Modul {LongJump:MLongJump}
-
- .topic SetJump
-
- LongJump.SetJump ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SetJump(VAR mark: JumpBuffer):
- CARDINAL;
-
- Sichert die Umgebung des aktuellen Vaterprozesses in "MARK".
- Es wird 0 zurückgegeben.
-
- Zurück zum Modul {LongJump:MLongJump}
-
- .topic LongJump
-
- LongJump.LongJump ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE LongJump(VAR mark: JumpBuffer;
- return: CARDINAL);
-
- Restauriert die in "mark" gesicherte Prozeßumgebung
- und kehrt von {SetJump} mit dem Rückgabewert "return" zurück.
-
- Zurück zum Modul {LongJump:MLongJump}
-
- .topic FileSystem
-
- MODULE FileSystem ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Dieses Modul enthält die Dateiroutinen wie sie
- Niklaus Wirth in seinem Buch "Programming in Modula-2" beschrieben hat.
- Alle Prozeduren setzen File.res auf "done" wenn der
- Aufruf erfolgreich war; sonst wird File.res auf "notdone" gesetzt.
- File.eof ist TRUE nachdem eine neue Datei erzeugt wurde
- oder wenn eine Leseoperation (Read????) aufgerufen wurde
- und keine weiteren Daten zur Verfügung stehen.
-
- TYPE
- {FDPtr}; (* Nur für internen Gebrauch *)
- {Response} ═ (done, notdone);
- {IOMode} ═ (read, write, io);
- {File} ═ RECORD
- id: INTEGER;
- res: Response;
- eof: BOOLEAN;
- mode: IOMode;
- fdptr: FDPtr; (* Nur für internen Gebrauch *)
- END;
-
- deklarierte Prozeduren:
-
- {LookUp} {Create:FileSystem_Create}
- {Reset} {Close:FileSystem_Close}
- {Rewrite} {Rename:FileSystem_Rename}
- {ReadWord} {WriteWord}
- {ReadChar} {WriteChar:FileSystem_WriteChar}
- {GetPos} {SetPos}
- {GetLPos} {SetLPos}
- {LLength} {Length:FileSystem_Length}
- {ReadNBytes} {WriteNBytes}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic FDPtr
-
- FileSystem.FDPtr
- ──────────────────┘
-
- TYPE
- FDPtr;
-
- File-Description-Pointer, nur für internen Gebrauch!
-
- Zurück zum Modul {FileSystem}
-
- .topic Response
-
- FileSystem.Response
- ─────────────────────┘
-
- TYPE
- Response ═ (done, notdone);
-
- Überprüfung, ob die Dateioperation erfolgreich durchgeführt wurde.
-
- Zurück zum Modul {FileSystem}
-
- .topic IOMode
-
- FileSystem.IOMode
- ───────────────────┘
-
- TYPE
- IOMode ═ (read, write, io);
-
- Der Modus in dem die Datei behandelt werden soll:
-
- read ═ nur lesen
- write ═ nur schreiben
- io ═ lesen und schreiben
-
- Zurück zum Modul {FileSystem}
-
- .topic File
-
- FileSystem.File
- ─────────────────┘
-
- TYPE
- File ═ RECORD
- id: INTEGER;
- res: Response;
- eof: BOOLEAN;
- mode: IOMode;
- fdptr: FDPtr; ( Nur für internen Gebrauch )
- END;
-
- Der Record enthält alle für Dateioperationen wichtigen Daten.
-
- Zurück zum Modul {FileSystem}
-
- .topic LookUp
-
- FileSystem.LookUp ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Lookup(VAR f: {File};
- filename: ARRAY OF CHAR;
- new: BOOLEAN);
-
- Öffnet die in "filename" genannte Datei.
- Falls die Datei nicht vorhanden ist, wird sie,
- wenn "new" TRUE ist, neu erstellt, sonst ein Fehler zurückgegeben.
-
- LookUp versucht immer zu erst eine Datei
- für {io:IOMode} zu öffnen.
- Falls dies fehlschlägt, wird versucht, die Datei zum Lesen zu öffnen.
- f.mode wird äquivalent zum Öffnungsmodus gesetzt.
-
- Zurück zum Modul {FileSystem}
-
- .topic FileSystem_Create
-
- FileSystem.Create ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Create(VAR f: {File};
- mediumname: ARRAY OF CHAR);
-
- Erstelle eine neue temporäre Datei.
-
- Falls "mediumname" mit einer Variable im
- DOS-Environment übereinstimmt, wird diese
- Variable für den Pfad zu der Temporä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.
-
- Zurück zum Modul {FileSystem} oder zur {Create}-Übersicht.
-
- .topic FileSystem_Close
-
- FileSystem.Close ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Close(VAR f: {File});
-
- Schließt die Datei "f".
-
- Falls die Datei mit {Rename:FileSystem_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.
-
- Zurück zum Modul {FileSystem} oder zur {Close}-Übersicht.
-
- .topic Reset
-
- FileSystem.Reset ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Reset(VAR f: {File});
-
- Setzt den Dateizeiger an den Anfang der Datei "f".
-
- Zurück zum Modul {FileSystem}
-
- .topic Rewrite
-
- FileSystem.ReWrite ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Rewrite(VAR f: {File});
-
- Setzt den Dateizeiger an den Anfang der Datei und
- schneidet den Rest ab (leert den Inhalt) der Datei.
-
- Zurück zum Modul {FileSystem}
-
- .topic FileSystem_Rename
-
- FileSystem.Rename ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Rename(VAR f: {File};
- filename: ARRAY OF CHAR );
-
- Ändert den Namen der Datei "f" in "filename".
-
- Die Datei kann zu einem anderen Verzeichnis oder
- auf ein anderes Laufwerk umbenannt (bewegt) werden.
-
- Hinweis:
-
- Der Verzeichniseintrag wird erst geändert,
- wenn die Datei geschlossen ({Close:FileSystem_Close}) wird.
-
- Zurück zum Modul {FileSystem} oder zur {Rename}-Übersicht.
-
- .topic ReadWord
-
- FileSystem.ReadWord ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadWord(VAR f: {File};
- VAR w: {WORD});
-
- Lese einen WORD-Wert aus einer Datei.
-
- Falls die Leseoperation zum Dateiende gelangt,
- wird File.eof auf TRUE gesetzt.
-
- Zurück zum Modul {FileSystem}
-
- .topic WriteWord
-
- FileSystem.WriteWord ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteWord(VAR f: {File};
- w: {WORD});
-
- 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.
-
- Zurück zum Modul {FileSystem}
-
- .topic ReadChar
-
- FileSystem.ReadChar ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadChar(VAR f : {File};
- VAR ch: CHAR);
-
- Liest einen Zeichen aus der Datei.
- Das Zeichen {ASCII}.CR wird zu {ASCII}.EOL konvertiert.
- {ASCII}.LF wird ignoriert.
-
- Die Prozedur setzt {File}.res auf "done",
- wenn der Aufruf erfolgreich war,
- ansonsten wird file.res auf "notdone" gesetzt.
-
- Zurück zum Modul {FileSystem}
-
- .topic FileSystem_WriteChar
-
- FileSystem.WriteChar ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteChar(VAR f: {File};
- ch: CHAR);
-
- Schreibt das Zeichen "ch" in die Datei.
-
- {ASCII}.EOL wird zu der Sequenz ASCII.CR ASCII.LF konvertiert.
-
- Zurück zum Modul {FileSystem} oder zur {WriteChar}-Übersicht.
-
- .topic GetPos
-
- FileSystem.GetPos ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetPos(VAR f: {File};
- VAR highpos,
- lowpos : {CARDINAL});
-
- Liefert die aktuelle Position des Dateizeigers.
-
- Siehe auch {SetPos}, {SetLPos} und {GetLPos}.
-
- Zurück zum Modul {FileSystem}.
-
- .topic SetPos
-
- FileSystem.SetPos ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- PROCEDURE SetPos(VAR f: {File};
- highpos,
- lowpos: {CARDINAL});
-
- Bewegt den Dateizeiger zur Position highpos * 65536 + lowpos.
-
- Siehe auch {SetLPos}, {GetPos} und {GetLPos}.
-
- Zurück zum Modul {FileSystem}.
-
- .topic GetLPos
-
- FileSystem.GetLPos ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- PROCEDURE GetLPos(VAR f : {File};
- VAR pos: {LONGCARD});
-
- Liefert die aktuelle Position des Dateizeigers.
-
- Siehe auch {GetPos}, {GetLPos} und {SetLPos}.
-
- Zurück zum Modul {FileSystem}
-
- .topic SetLPos
-
- FileSystem.SetLPos ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SetLPos(VAR f: {File};
- pos: {LONGCARD});
-
- Bewegt den Dateizeiger zur Position highpos * 65536 + lowpos.
-
- Siehe auch {SetPos}, {GetPos} und {GetLPos}.
-
- Zurück zum Modul {FileSystem}
-
- .topic FileSystem_Length
-
- FileSystem.Length ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Length(VAR f: {File};
- VAR highlen,
- lowlen : {CARDINAL});
-
- Gibt die Länge der Datei zurück.
-
- Siehe auch {LLength}
-
- Zurück zum Modul {FileSystem} oder zur {Length}-Übersicht.
-
- .topic LLength
-
- FileSystem.LLength ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE LLength(VAR f: {File};
- VAR length: {LONGCARD});
-
- Gibt die Länge der Datei zurück.
-
- Siehe auch {Length:FileSystem_Length}.
-
- Zurück zum Modul {FileSystem}
-
- .topic ReadNBytes
-
- FileSystem.ReadNBytes ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadNBytes(VAR f: {File};
- buffPtr: {ADDRESS};
- n: {CARDINAL};
- VAR nRead: CARDINAL);
-
- Die Prozedur versucht, "n" Bytes zu lesen.
-
- Bei der Rückkehr wird die Anzahl der gelesenen Bytes
- in "nRead" zurückgeliefert.
- Falls das Dateiende erreicht wird, wird File.eof auf TRUE gesetzt.
-
- siehe auch {WriteNBytes}.
-
- Zurück zum Modul {FileSystem}
-
- .topic WriteNBytes
-
- FileSystem.WriteNBytes ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteNBytes(VAR f: {File};
- buffPtr: {ADDRESS};
- n: {CARDINAL};
- VAR nWritten: CARDINAL);
-
- Die Prozedur schreibt "n" Bytes in die Datei.
-
- Bei der Rückkehr wird die aktuelle Zahl geschriebener
- Bytes in "nWritten" zurückgegeben.
-
- siehe auch {ReadNBytes}.
-
- Zurück zum Modul {FileSystem}
-
- .topic MathLib0
-
- MODULEs MathLib0/LMathLib0 ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- MathLib0:
- ═══════════╝
-
- Das MathLib0-Modul wie es von Niklaus Wirth in seinem
- Buch "Programming in Modula-2" definiert wurde.
-
- LMathLib0:
- ════════════╝
-
- Die LONGREALs-Version von Mathlib0.
-
- M2Reals, Mathlib0 und LMathLib0 benutzen den
- Coprozessor 8087/80x87, falls vorhanden.
-
- In MathLib0 und LMathLib0 definierte Prozeduren:
-
- {sqrt} {exp}
- {ln} {sin}
- {cos} {arctan}
- {real} {entier}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic sqrt
-
- (L)MathLib0.sqrt ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE MathLib0.sqrt(x: REAL): REAL;
- PROCEDURE LMathLib0.sqrt(x: LONGREAL): LONGREAL;
-
- Zurück zum Modul (L){MathLib0}
-
- .topic exp
-
- (L)MathLib0.exp ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE MathLib0.exp(x :REAL): REAL;
- PROCEDURE LMathLib0.exp(x: LONGREAL): LONGREAL;
-
- Zurück zum Modul (L){MathLib0}
-
- .topic ln
-
- (L)MathLib0.ln ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE MathLib0.ln(x: REAL): REAL;
- PROCEDURE LMathLib0.ln(x: LONGREAL): LONGREAL;
-
- Zurück zum Modul (L){MathLib0}
-
- .topic sin
-
- (L)MathLib0.sin ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE MathLib0.sin(x: REAL): REAL;
- PROCEDURE LMathLib0.sin(x: LONGREAL): LONGREAL;
-
- Zurück zum Modul (L){MathLib0}
-
- .topic cos
-
- (L)MathLib0.cos ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE MathLib0.cos(x: REAL): REAL;
- PROCEDURE LMathLib0.cos(x: LONGREAL): LONGREAL;
-
- Zurück zum Modul (L){MathLib0}
-
- .topic arctan
-
- (L)MathLib0.arctan ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE MathLib0.arctan(x: REAL): REAL;
- PROCEDURE LMathLib0.arctan(x: LONGREAL): LONGREAL;
-
- Zurück zum Modul (L){MathLib0}
-
- .topic real
-
- (L)MathLib0.real ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE MathLib0.real(x: INTEGER): REAL;
- PROCEDURE LMathLib0.real(x: LONGINT): LONGREAL;
-
- Zurück zum Modul (L){MathLib0}
-
- .topic entier
-
- (L)MathLib0.entier ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE MathLib0.entier(x: REAL): INTEGER;
- PROCEDURE LMathLib0.entier(x: LONGREAL): LONGINT;
-
- Zurück zum Modul (L){MathLib0}
-
- .topic NumberConversion
-
- MODULE NumberConversion ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Das Modul enthält Prozeduren zur Umwandlung von
- Zahlen ({INTEGER}/{CARDINAL}/{LONGINT}/{LONGCARD})
- in Strings und wieder zurück.
-
- CONST
- {MaxBase} ═ 16;
-
- TYPE
- {BASE} ═ [2..MaxBase];
-
-
- definierte Prozeduren:
-
- {StringToCard} {StringToInt}
- {StringToNum} {CardToString}
- {CardToString} {NumToString}
- {StringToLongCard} {StringToLongInt}
- {StringToLongNum} {LongCardToString}
- {LongIntToString} {LongNumToString}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic MaxBase
-
- CONST NumberConversion.MaxBase
- ════════════════════════════════╝
-
- Basis für die "Num"-Umwandlungen
-
- CONST
- MaxBase ═ 16
-
- TYPE
- BASE ═ [2..MaxBase];
-
- Zurück zum Modul {NumberConversion}
-
- .topic BASE
-
- TYPE NumberConversion.BASE
- ════════════════════════════╝
-
- CONST
- MaxBase ═ 16;
-
- TYPE
- BASE ═ [2..MaxBase];
-
- Zurück zum Modul {NumberConversion}
-
- .topic StringToCard
-
- NumberConversion.StringToCard ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE StringToCard(str: ARRAY OF CHAR;
- VAR num: CARDINAL;
- VAR done: BOOLEAN);
-
- Zurück zum Modul {NumberConversion}
-
- .topic StringToInt
-
- NumberConversion.StringToInt ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
-
- PROCEDURE StringToInt(str: ARRAY OF CHAR;
- VAR num: INTEGER;
- VAR done: BOOLEAN);
-
- Zurück zum Modul {NumberConversion}
-
- .topic StringToNum
-
- NumberConversion.StringToNum ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE StringToNum(str: ARRAY OF CHAR;
- base: BASE;
- VAR num: CARDINAL;
- VAR done: BOOLEAN);
-
- Zurück zum Modul {NumberConversion}
-
- .topic CardToString
-
- NumberConversion.CardToString ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE CardToString(num: CARDINAL;
- VAR str: ARRAY OF CHAR;
- width: CARDINAL);
-
- Zurück zum Modul {NumberConversion}
-
- .topic IntToString
-
- NumberConversion.IntToString ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE IntToString(num: INTEGER;
- VAR str: ARRAY OF CHAR;
- width: CARDINAL);
-
- Zurück zum Modul {NumberConversion}
-
- .topic NumToString
-
- NumberConversion.NumToString ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE NumToString(num: CARDINAL;
- base: BASE;
- VAR str: ARRAY OF CHAR;
- width: CARDINAL);
-
- Zurück zum Modul {NumberConversion}
-
- .topic StringToLongCard
-
- NumberConversion.StringToLongCard ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE StringToLongCard(str: ARRAY OF CHAR;
- VAR num: LONGCARD;
- VAR done: BOOLEAN);
-
- Zurück zum Modul {NumberConversion}
-
- .topic StringToLongInt
-
- NumberConversion.StringToLongInt ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE StringToLongInt(str: ARRAY OF CHAR;
- VAR num: LONGINT;
- VAR done: BOOLEAN);
-
- Zurück zum Modul {NumberConversion}
-
- .topic StringToLongNum
-
- NumberConversion.StringToLongNum ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE StringToLongNum(str: ARRAY OF CHAR;
- base: BASE;
- VAR num: LONGCARD;
- VAR done: BOOLEAN);
-
- Zurück zum Modul {NumberConversion}
-
- .topic LongCardToString
-
- NumberConversion.LongCardToString ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE LongCardToString(num: LONGCARD;
- VAR str: ARRAY OF CHAR;
- width: CARDINAL);
-
- Zurück zum Modul {NumberConversion}
-
- .topic LongIntToString
-
- NumberConversion.LongIntToString ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE LongIntToString(num: LONGINT;
- VAR str: ARRAY OF CHAR;
- width: CARDINAL);
-
- Zurück zum Modul {NumberConversion}
-
- .topic LongNumToString
-
- NumberConversion.LongNumToString ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE LongNumToString(num: LONGCARD;
- base: BASE;
- VAR str: ARRAY OF CHAR;
- width: CARDINAL);
-
- Zurück zum Modul {NumberConversion}
-
- .topic RealInOut
-
- MODULE RealInOut ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Das Modul ist eine Erweiterung von InOut und
- enthält die Routinen für das Lesen und Schreiben
- von Fließkommazahlen.
- Das Modul erledigt seine Ein- und Ausgaben
- über das Modul {InOut:InOut}.
-
- definierte Variable:
-
- {Done:RealInOut_Done}
-
- definierte Prozeduren:
-
- {ReadReal} {WriteReal}
- {ReadLongReal} {WriteLongReal}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic RealInOut_Done
-
- VAR RealInOut.Done
- ───────────────────┘
- VAR
- Done: BOOLEAN;
-
- Globale Kontrollvariable für die Prozeduren den Moduls RealInOut.
-
- .topic ReadReal
-
- RealInOut.ReadReal ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadReal(VAR x: REAL);
-
- Liest einen String.
- Dieser wird anschließend in eine REAL-Zahl umgewandelt,
- die dann in "x" zurü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.
-
- Zurück zum Modul {RealInOut}.
-
- .topic WriteReal
-
- RealInOut.WriteReal ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteReal(x: REAL;
- n: CARDINAL);
-
- "x" wird in wissenschaftlicher Notation rechtsbündig
- in ein Feld von mindestens n Zeichen geschrieben.
-
- Zurück zum Modul {RealInOut}.
-
- .topic ReadLongReal
-
- RealInOut.ReadLongReal ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadLongReal(VAR x: LONGREAL);
-
- Siehe auch {ReadReal}.
-
- Zurück zum Modul {RealInOut}.
-
- .topic WriteLongReal
-
- RealInOut.WriteLongReal ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteLongReal(x: LONGREAL;
- n: CARDINAL);
-
- Siehe auch {WriteReal}
-
- Zurück zum Modul {RealInOut}.
-
- .topic Storage
-
- MODULE Storage ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Dieses Modul ist für die Bearbeitung des
- Modula-2-Heaps zwischen {System.HeapTop:HeapTop}
- und {System.MemTop:MemTop} verantwortlich.
-
- Die Prozeduren in Storage verändern
- System.HeapTop je nachdem, wie der Heap
- vergrößert oder verkleinert wird.
-
- In Storage sind folgende Prozeduren definiert:
-
- {ALLOCATE} {DEALLOCATE} {Available}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic ALLOCATE
-
- Storage.ALLOCATE ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ALLOCATE(VAR a: ADDRESS;
- size: CARDINAL);
-
- Allokiert "size" Bytes im Heap und gibt einen
- Zeiger auf diesen Bereich in "a" zurück.
-
- Zurück zum Modul {Storage}
-
- .topic DEALLOCATE
-
- Storage.DEALLOCATE ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE DEALLOCATE(VAR a: ADDRESS;
- size: CARDINAL);
-
- Gibt eine vorher allokierten Speicherblock der Größe "size" wieder frei.
- Wenn die Compiler-Option (*{$T:Switches_sT}*) gesetzt ist,
- werden Zeiger vor dem Zugriff auf NIL geprüft.
- Außerdem setzt Storage.DEALLOCATE den übergebenen Zeiger auf NIL.
-
- Zurück zum Modul {Storage}
-
- .topic Available
-
- Storage.Available ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Available(size: CARDINAL): BOOLEAN;
-
- TRUE falls ein Speicherblock der Größe "size"
- für die Zuweisung verfügbar ist.
-
- Zurück zum Modul {Storage}
-
- .topic Strings
-
- MODULE Strings ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Ein String ist ein ARRAY OF CHAR.
-
- Falls der String nicht komplett in das Array paßt,
- wird er von dem Zeichen 0C abgeschlossen.
-
- Im Modul Strings sind folgende Prozeduren definiert:
-
- {Append} {Assign}
- {CompareStr} {Concat}
- {Copy} {Delete:Strings_Delete}
- {Insert} {Length:Strings_Length}
- {Pos}
-
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic CompareStr
-
- Strings.CompareStr ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE CompareStr(s1, s2: ARRAY OF CHAR): INTEGER;
-
- Vergleicht zwei Zeichenketten s1 und s2.
-
- Rückgabe:
- 0 falls s1 ═ s2
- -1 falls s1 < s2
- +1 falls s1 > s2
-
- Zurück zum Modul {Strings}.
-
- .topic Assign
-
- Strings.Assign ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Assign(VAR source, dest: ARRAY OF CHAR);
-
- kopiert den String "source" nach "dest".
-
- Zurück zum Modul {Strings}.
-
- .topic Strings_Length
-
- Strings.Length ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Length(s :ARRAY OF CHAR ): CARDINAL;
-
- Liefert die Länge der Zeichenkette "s" zurück.
-
- Zurück zum Modul {Strings} oder zur {Length}-Übersicht.
-
- .topic Concat
-
- Strings.Concat ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Concat(s1, s2: ARRAY OF CHAR;
- VAR result: ARRAY OF CHAR);
-
- Hängt die Zeichenkette "s2" an "s1" und liefert das
- Ergebnis in "result" zurück.
-
- Siehe auch {Append}.
-
- Zurück zum Modul {Strings}.
-
- .topic Pos
-
- Strings.Pos ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Pos(subs, s: ARRAY OF CHAR): CARDINAL;
-
- Sucht den SubString "subs" in "s" und liefert die Position zurück.
-
- Rückgabe:
-
- Index des ersten Austretens von "subs" in "s"
- oder > HIGH(s) falls kein passender Bereich
- gefunden wurde.
-
- Zurück zum Modul {Strings}.
-
- .topic Strings_Delete
-
- Strings.Delete ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Delete(VAR s: ARRAY OF CHAR;
- pos, len: CARDINAL);
-
- Löscht "len" Zeichen aus der Zeichenkette "s" ab der Position "pos".
-
- Zurück zum Modul {Strings} oder zur {Delete}-Übersicht.
-
- .topic Copy
-
- Strings.Copy ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Copy(src: ARRAY OF CHAR;
- pos, len: CARDINAL;
- VAR dest: ARRAY OF CHAR);
-
- Kopiert "len" Zeichen ab der Position "pos" von "src" nach "dest".
-
- Zurück zum Modul {Strings}.
-
- .topic Append
-
- Strings.Append ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Append(VAR s1: ARRAY OF CHAR;
- s2: ARRAY OF CHAR);
-
- Hängt s2 an das Ende von s1.
-
- Die Prozedur arbeitet äquivalent zu {Concat}(s1, s2, s1)
- aber klarer und effizienter.
-
-
- Zurück zum Modul {Strings}.
-
- .topic Insert
-
- Strings.Insert ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Insert(subs: ARRAY OF CHAR;
- VAR s: ARRAY OF CHAR;
- at: CARDINAL);
-
- Fügt den Substring "subs" an der
- Position "at" in den String "s" ein.
-
-
- Zurück zum Modul {Strings}.
-
- .topic TermBase
-
- MODULE TermBase ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Das Modul {Terminal} erledigt die Arbeit der Prozeduren
- KeyPressed, Read, Write und Goto über dieses Modul.
-
- Durch das Überschreiben der Methoden AssignRead, AssignWrite
- und AssignGoto mit effizienteren kann der Benutzer
- die Ein- und Ausgaben selbst wesentlich beschleunigen.
-
- TYPE
- {StatusProcedure} ═ PROCEDURE(): BOOLEAN;
- {ReadProcedure} ═ PROCEDURE(VAR CHAR);
- {WriteProcedure} ═ PROCEDURE(CHAR);
- {GotoProcedure} ═ PROCEDURE(CARDINAL, CARDINAL);
-
-
- definierte Prozeduren:
-
- {AssignGoto} {AssignRead}
- {AssignWrite} {Goto:TermBase_Goto}
- {KeyPressed:TermBase_KeyPressed} {Read:TermBase_Read}
- {UnAssignGoto} {UnAssignRead}
- {UnAssignWrite} {Write:TermBase_Write}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic StatusProcedure
-
- TermBase.StatusProcedure
- ─────────────────────────┘
-
- TYPE
- StatusProcedure ═ PROCEDURE(): BOOLEAN;
-
- Zurück zum Modul {TermBase}.
-
- .topic ReadProcedure
-
- TermBase.ReadProcedure
- ───────────────────────┘
- TYPE
- ReadProcedure ═ PROCEDURE(VAR CHAR);
-
- Zurück zum Modul {TermBase}.
-
- .topic WriteProcedure
-
- TermBase.WriteProcedure
- ────────────────────────┘
- TYPE
- WriteProcedure ═ PROCEDURE(CHAR);
-
-
- Zurück zum Modul {TermBase}.
-
- .topic GotoProcedure
-
- TermBase.GotoProcedure
- ───────────────────────┘
- TYPE
- GotoProcedure ═ PROCEDURE(CARDINAL, CARDINAL);
-
-
- Zurück zum Modul {TermBase}.
-
- .topic AssignRead
-
- TermBase.AssignRead ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE AssignRead(rp: ReadProcedure;
- sp: StatusProcedure;
- VAR done: BOOLEAN);
-
- Sichert die aktuelle Read- und KeyPressed-Prozeduren
- in einem Prozedur-Stack und installiert die stattdessen
- zu benutzende neue Prozedur.
-
- Zurück zum Modul {TermBase}.
-
- .topic AssignWrite
-
- TermBase.AssignWrite ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE AssignWrite(wp: WriteProcedure;
- VAR done: BOOLEAN);
-
- Sichert die aktuelle Write-Prozedur in einem
- Prozedur-Stack und installiert stattdessen die
- zu benutzende neue Prozedur.
-
-
- Zurück zum Modul {TermBase}.
-
- .topic UnAssignRead
-
- TermBase.UnAssignRead ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE UnAssignRead(VAR done :BOOLEAN);
-
- Poppt die von {AssignRead} auf den Prozedur-Stack
- geschriebenen Read- und KeyPressed-Prozeduren zurück
- und macht sie wieder aktiv.
-
-
- Zurück zum Modul {TermBase}.
-
- .topic UnAssignWrite
-
- TermBase.UnAssignWrite ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE UnAssignWrite(VAR done: BOOLEAN);
-
- Poppt die von {AssignWrite} auf den Prozedur-Stack
- geschriebene Write-Prozedur zurück und macht
- sie wieder aktiv.
-
- Zurück zum Modul {TermBase}.
-
- .topic TermBase_KeyPressed
-
- TermBase.Keypressed() ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE KeyPressed(): BOOLEAN;
-
- Fordert den derzeit installierten KeyPressed-Service an.
-
- Während der Initialisierung von TermBase ist
- {TermIO.KeyPressed:TermIO_KeyPressed} aktiv.
-
- Zurück zum Modul {TermBase} oder zur {KeyPressed}-Übersicht.
-
- .topic TermBase_Read
-
- TermBase.Read ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Read(VAR ch: CHAR);
-
- Fordert die derzeit installierte Read-Prozedur an.
-
- Während der Initialisierung von TermBase ist
- {TermIO.Read:TermIO_Read} aktiv.
-
- Zurück zum Modul {TermBase} oder zur {Read}-Übersicht.
-
- .topic TermBase_Write
-
- TermBase.Write ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Write(ch: CHAR);
-
- Fordert die derzeit installierte Write-Prozedur an.
-
- Während der Initialisierung von TermBase ist
- {TermIO.Write:TermIO_Write} aktiv.
-
- Zurück zum Modul {TermBase} oder zur {Write}-Übersicht.
-
- .topic AssignGoto
-
- TermBase.AssignGoto ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE AssignGoto(gp: GotoProcedure;
- VAR done: BOOLEAN);
-
- Sichert die aktuelle {Goto}-Prozedur in
- einem Prozedur-Stack und installiert die
- stattdessen zu benutzende neue Prozedur.
-
-
- Zurück zum Modul {TermBase}.
-
- .topic UnAssignGoto
-
- TermBase.UnAssignGoto ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE UnAssignGoto(VAR done: BOOLEAN);
-
- Poppt die von {AssignGoto} auf den
- Prozedur-Stack geschriebene Goto-Prozedur
- zurück und aktiviert sie erneut.
-
- Zurück zum Modul {TermBase}.
-
- .topic TermBase_Goto
-
- TermBase.Goto ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Goto(line, pos: CARDINAL);
-
- Ruft die aktuell installierte Goto-Prozedur auf.
-
- Während der Initialisierung von TermBase
- ist {TermIO.Goto:TermIO_Goto} installiert.
-
- Zurück zum Modul {TermBase} oder zur {Goto}-Übersicht.
-
- .topic Terminal
-
- MODULE Terminal ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Die gesamten aktuellen Ein- und Ausgaben
- verwenden Prozeduren des Moduls {TermBase}.
- Das aufrufende Programm kann ebenso direkt
- die Prozeduren aus TermBase verwenden.
-
- In Terminal definierte Prozeduren:
-
- {ClrScreen :ClrScreen} {Goto :Terminal_Goto}
- {KeyPressed:Terminal_KeyPressed} {Read :Terminal_Read}
- {ReadLine :Terminal_ReadLine} {ReadAgain}
- {Write :Terminal_Write} {WriteString:Terminal_WriteString}
- {WriteLn :Terminal_WriteLn} {WriteLine:Terminal_WriteLine}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic Terminal_KeyPressed
-
- Terminal.KeyPressed ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE KeyPressed(): BOOLEAN;
-
- Die Prozedur gibt {TRUE} zurück, wenn eine
- Taste gedrückt wurde; sonst wird {FALSE} gemeldet.
-
- Zurück zum Modul {Terminal} oder zur {KeyPressed}-Übersicht.
-
- .topic Terminal_Read
-
- Terminal.Read ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Read(VAR ch: CHAR);
-
- Liefert das nächste eingegebene Zeichen.
- Hierzu wird {TermBase.Read:TermBase_Read} verwendet.
-
- Zurück zum Modul {Terminal} oder zur {Read}-Übersicht.
-
- .topic Terminal_ReadLine
-
- Terminal.ReadLine ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadLine(VAR string:
- ARRAY OF CHAR);
-
- Lese eine ganze Zeile mithilfe von {Read:Terminal_Read}
- mit Echo mit Ausnahme des Abschlußzeichens (EOL oder ESC).
-
- {ASCII}.BS} löscht das letzte gelesene Zeichen.
-
- {ASCII}.DEL löscht alle Zeichen.
-
- {ASCII}.ESC} löscht alle Zeichen und bricht die Eingabe ab.
-
- {ReadAgain}, gefolgt von {Read:Terminal_Read} kann
- benutzt werden, um das abschließende Zeichen zu ermitteln (EOL oder ESC).
-
- Zurück zum Modul {Terminal} oder zur {ReadLine}-Übersicht.
-
- .topic ReadAgain
-
- Terminal.ReadAgain ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadAgain;
-
- Erzwingt beim nächsten Aufruf von Read das zuletzt
- gelesene Zeichen nochmals zurückzugeben.
-
- Zurück zum Modul {Terminal}.
-
- .topic Terminal_Write
-
- Terminal.Write ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Write(ch: CHAR);
-
- Schreibt "ch" mithilfe von {TermBase.Write:TermBase_Write}
- in die Standardausgabe.
-
- Zurück zum Modul {Terminal} oder zur {Write}-Übersicht.
-
- .topic Terminal_WriteString
-
- Terminal.WriteString ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteString(string: ARRAY OF CHAR);
-
- Schreibt unter Benutzung von {Terminal.Write:Terminal_Write}
- eine Zeichenkette "string" an die Standardausgabe.
-
- Zurück zum Modul {Terminal} oder zur {WriteString}-Übersicht.
-
- .topic Terminal_WriteLn
-
- Terminal.WriteLn ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteLn;
-
- Identisch mit: Write(ASCII.EOL).
-
- Zurück zum Modul {Terminal} oder zur {WriteLn}-Übersicht.
-
- .topic ClrScreen
-
- Terminal.ClrScreen ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ClrScreen;
-
- Identisch zu {Write}({ASCII}.FF).
- Die Prozedur benötigt ANSI.SYS!
-
- Zurück zum Modul {Terminal}.
-
- .topic Terminal_Goto
-
- Terminal.Goto ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Goto(line, pos: CARDINAL);
-
- Die Prozedur ruft {TermBase.Goto:TermBase_Goto}(line, pos) auf.
-
- Zurück zum Modul {Terminal} oder zur {Goto}-Übersicht.
-
- .topic Terminal_WriteLine
-
- Terminal.WriteLine ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteLine(string: ARRAY OF CHAR);
-
- Identisch mit:
- {WriteString:Terminal_WriteString}(string);
- {WriteLn:Terminal_WriteLn};
-
- Zurück zum Modul {Terminal} oder zur {WriteLine}-Übersicht.
-
- .topic TermIO
-
- MODULE TermIO ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Die Prozeduren dieses Moduls sind die
- Standard Ein- und Ausgabe-Routinen,
- die vom Modul {TermBase:TermBase} genutzt werden.
- Die Prozeduren des Moduls rufen die
- DOS-Funktionen 2, 8 und 0BH auf.
-
- Für die Bildschirm-Löschroutinen und Goto-Funktion
- muß ANSI.SYS installiert sein!
-
- In TermIO definierte Prozeduren:
-
- {Read :TermIO_Read}
- {Write :TermIO_Write}
- {KeyPressed:TermIO_KeyPressed}
- {Goto :TermIO_Goto}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic TermIO_Read
-
- TermIO.Read ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Read(VAR ch: CHAR);
-
- Wartet, bis ein Zeichen für das Lesen aus der
- Tastatur bereit steht und liest es dann.
- Das Zeichen wird nicht auf dem Bildschirm angezeigt.
-
- {ASCII}.CR wird nach {ASCII}.EOL konvertiert.
-
- Zurück zum Modul {TermIO} oder zur {Read}-Übersicht.
-
- .topic TermIO_Write
-
- TermIO.Write ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Write(ch: CHAR);
-
- Schreibt ch auf den Bildschirm.
-
- ■ ASCII.FF löscht den Bildschirm (ANSI.SYS muß installiert sein)
-
- ■ ASCII.EOL erzeugt auf dem Bildschirm die Ausgabe von CR LF.
-
- ■ ASCII.DEL erzeugt einen zerstörerischen Backspace.
-
- Zurück zum Modul {TermIO} oder zur {Write}-Übersicht.
-
- .topic TermIO_KeyPressed
-
- TermIO.KeyPressed ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE KeyPressed() :BOOLEAN;
-
- Gibt TRUE zurück, wenn im Tastaturpuffer ein Zeichen anliegt.
-
- Zurück zum Modul {TermIO} oder zur {KeyPressed}-Übersicht.
-
- .topic TermIO_Goto
-
- TermIO.Goto ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- PROCEDURE Goto(line, pos: CARDINAL);
-
- Positioniert den Cursor an line/pos. Es wird ANSI.SYS benötigt!
-
- Zurück zum Modul {TermIO} oder zu {Goto}-Übersicht.
-
- .topic Display
-
- MODULE Display ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- TYPE
- {DisplayBuffer} ═ ARRAY [0..24]
- OF ARRAY [0..79] OF CARDINAL;
-
- VAR
- {line0}: CARDINAL;
- {col0}: CARDINAL;
- {lineN}: CARDINAL;
- {colN}: CARDINAL;
- {snowy}: BOOLEAN;
- {displayMode}: CARDINAL;
- {displayPage}: CARDINAL;
- {displayAttr}: CARDINAL;
- {displayLines}: CARDINAL;
- {displayCols}: CARDINAL;
- {displayPtr}: POINTER TO DisplayBuffer;
-
- definierte Prozeduren:
-
- {GetDisplayMode} {SetDisplayMode}
- {SetCursorType} {GetCursorPosition}
- {SetCursorPosition} {ScrollUp}
- {ScrollDown} {ReadCharAttr}
- {WriteCharAttr} {WriteChar:Display_WriteChar}
- {ClrEOL} {Goto:Display_Goto}
- {ClrEOS} {Write:Display_Write}
- {DisplayString} {DisplayLine}
- {WriteScreen} {ReadScreen}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic displayMode
-
- Display.displayMode
- ─────────────────────┘
- VAR
- displayMode: CARDINAL;
-
- Wird beim Aufruf mit dem aktuellen Bildschirmmodus initialisiert.
-
- Zurück zum Modul {Display}
-
- .topic displayPage
-
- Display.displayPage
- ─────────────────────┘
- VAR
- displayPage :CARDINAL;
-
- Die Bildschirmseite.
-
- Wird abhängig vom aktuellen Bildschirmmodus initialisiert.
-
- Zurück zum Modul {Display}
-
- .topic displayAttr
-
- Display.displayAttr
- ─────────────────────┘
-
- VAR
- displayAttr :CARDINAL;
-
- Das Bildschirmattribut. Wird mit 07H initialisiert.
-
- Zurück zum Modul {Display}
-
- .topic displayLines
-
- Display.displayLines
- ──────────────────────┘
-
- VAR
- displayLines:CARDINAL;
-
- Die Anzahl der Bildschirmzeilen. Wird auf 25 initialisiert.
-
- Zurück zum Modul {Display}
-
- .topic displayCols
-
- Display.displayCols
- ─────────────────────┘
-
- VAR
- displayCols :CARDINAL;
-
- Die Anzahl der Bildschirmfarben.
-
- Wird abhängig vom aktuellen Bildschirmmodus initialisiert.
-
- Zurück zum Modul {Display}
-
- .topic snowy
-
- Display.snowy
- ───────────────┘
-
- VAR
- snowy :BOOLEAN;
-
- Die Variable dient der Überprüfung von "Schneetreiben" auf dem Bildschirm.
- Wenn TRUE: Warte auf Bildschirm-Retrace.
-
- snowy wird automatisch auf TRUE gesetzt, wenn der Bildschirmmodus <> 7 ist.
-
- Zurück zum Modul {Display}
-
- .topic line0, col0, lineN, colN
-
- aktuelle Fensterkoordinaten
- ─────────────────────────────┘
-
- VAR
- line0: CARDINAL;
- oberste Zeile, Startwert 0
-
- col0: CARDINAL;
- Spalte links, Startwert 0
-
- lineN: CARDINAL;
- letzte Zeile im Fenster
-
- colN: CARDINAL;
- letzte Spalte im Fenster
-
- Zurück zum Modul {Display}
-
- .topic displayPtr
-
- Display.displayPtr
- ────────────────────┘
-
- Zeiger auf den Bildschirmpuffer.
- Wird zur Initialisierungszeit geladen.
-
- TYPE
- DisplayBuffer ═ ARRAY [0..24] OF
- ARRAY [0..79] OF CARDINAL;
-
- VAR
- displayPtr: POINTER TO DisplayBuffer;
-
- Zurück zum Modul {Display}
-
- .topic GetDisplayMode
-
- Display.GetDisplayMode ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetDisplayMode(VAR mode, nCols,
- activePage: CARDINAL);
-
-
- Gibt den aktuellen Bildschirmmodus zurück.
-
- BIOS Interface-Routine.
-
- Zurück zum Modul {Display}
-
- .topic SetDisplayMode
-
- Display.SetDisplayMode ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SetDisplayMode(mode: CARDINAL);
-
- Setzt den Bildschirm-Modus.
-
- BIOS Interface-Routine.
-
- Zurück zum Modul {Display}
-
- .topic SetCursorType
-
- Display.SetCursorType ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SetCursorType(start, end: CARDINAL );
-
- Setzt die Cursor Start- und Endzeile.
-
- BIOS Interface-Routine.
-
- Zurück zum Modul {Display}
-
- .topic GetCursorPosition
-
- Display.GetCursorPosition ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetCursorPosition(VAR line: CARDINAL;
- VAR pos: CARDINAL);
-
- Meldet die aktuelle Cursorposition zurück.
-
- BIOS Interface-Routine.
-
- Zurück zum Modul {Display}
-
- .topic SetCursorPosition
-
- Display.SetCursorPosition ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SetCursorPosition(line: CARDINAL;
- pos: CARDINAL);
-
- Bewegt den Cursor nach line/pos.
-
- BIOS Interface-Routine.
-
- Siehe auch bei der {Goto}-Übersicht.
- Zurück zum Modul {Display}.
-
- .topic ScrollUp
-
- Display.ScrollUp ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- PROCEDURE ScrollUp(n,
- line1, pos1,
- line2, pos2: CARDINAL;
- attr: CARDINAL);
-
- Scrollt das Fenster um n Zeilen nach oben.
-
- ■ line1, pos1 ═ linke obere Ecke des Scrollfensters.
-
- ■ line2, pos2 ═ rechte untere Ecke des Scrollfensters.
-
- ■ attr = Farbattribut für neue Leerzeilen.
-
- ■ Falls n ═ 0 ist, wird das Fenster gelöscht.
-
- BIOS Interface-Routine.
-
- Siehe auch {ScrollDown}
-
- Zurück zum Modul {Display}
-
- .topic ScrollDown
-
- Display.ScrollDown ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ScrollDown(n,
- line1, pos1,
- line2, pos2: CARDINAL;
- attr: CARDINAL);
-
- Scrollt ein Window Scrolls um "n" Zeilen nach unten.
-
- BIOS Interface-Routine.
- Für die Beschreibung der Variablen siehe {ScrollUp}
-
- Zurück zum Modul {Display}
-
- .topic ReadCharAttr
-
- Display.ReadCharAttr ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadCharAttr(VAR ch: CHAR;
- VAR attr: CARDINAL);
-
- Liest das Zeichen und Bildschirmattribut unter dem Cursor.
-
- BIOS Interface-Routine.
-
- Zurück zum Modul {Display}
-
- .topic WriteCharAttr
-
- Display.WriteCharAttr ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteCharAttr(ch: CHAR;
- attr: CARDINAL);
-
- Schreibt das Zeichen "ch" und das Bildschirm-Attribut
- "attr" an die aktuelle Cursorposition.
- Der Cursor wird nicht bewegt.
-
- BIOS Interface-Routine.
-
- Zurück zum Modul {Display}
-
- .topic Display_WriteChar
-
- Display.WriteChar ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteChar(ch: CHAR);
-
- Schreibt das Zeichen ch an die aktuelle Cursorposition.
-
- BIOS Interface-Routine.
-
- Zurück zum Modul {Display} oder zur {WriteChar}-Übersicht.
-
- .topic Display_Goto
-
- Display.Goto ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Goto(line, col: CARDINAL);
-
- Bewegt den Cursor an line/pos innerhalb des
- von line0, col0 - lineN, colN definierten
- aktuellen Fensters.
-
- Zurück zum Modul {Display} oder zur {Goto}-Übersicht.
-
- .topic Display_Write
-
- Display.Write ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Write(ch: CHAR);
-
- Schreibt ein Zeichen an die aktuelle Bildschirmposition,
- für die Farbe wird displayAttr verwendet.
- Der Cursor wird weiterbewegt.
- Die Prozedur arbeitet innerhalb der von line0, col0 - lineN, colN
- definierten Fenster-Koordinaten.
-
- Die folgenden Steuerzeichen werden ausgeführt:
-
- BEL, EOL, CR, LF, FF, DEL, BS, HT.
-
- Zurück zum Modul {Display} oder zur {Write}-Übersicht.
-
- .topic ClrEOL
-
- Display.ClrEOL ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ClrEOL;
-
- Löscht bis zum Zeilenende.
- Hierzu wird {displayAttr} benutzt.
-
- Die Prozedur arbeitet in den Grenzen des aktuellen Windows.
-
- Zurück zum Modul {Display}.
-
- .topic ClrEOS
-
- Display.ClrEOS ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ClrEOS;
-
- Löscht bis zum Ende des aktuellen Windows.
- Hierzu wird {displayAttr} benutzt.
-
- Zurück zum Modul {Display}.
-
- .topic DisplayString
-
- Display.DisplayString ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE DisplayString(s: ARRAY OF CHAR;
- line, pos: CARDINAL;
- attr: CARDINAL);
-
- 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ü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.
-
- Zurück zum Modul {Display}
-
- .topic DisplayLine
-
- Display.DisplayLine ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE DisplayLine(line: ARRAY OF CHAR;
- lineno: CARDINAL;
- attr: CARDINAL);
-
- Schreibt eine 80 Zeichen lange Zeile direkt in den Bildschirmspeicher.
- "attr" das zu verwendende Bildschirmattribut (Farbe).
- Falls die Länge des Strings kleiner als 80 ist, wird
- der Rest mit Leerzeichen aufgefü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.
-
- Zurück zum Modul {Display}
-
- .topic WriteScreen
-
- Display.WriteScreen ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE WriteScreen(src, dest: ADDRESS;
- nWords: CARDINAL);
-
- Bewegt "nWords" "src" nach "dest".
-
- dest muß innerhalb des Bildschirmspeichers liegen.
- Falls {snowy} auf TRUE gesetzt ist, wird das
- vertikale Retrace-Signal des Monitors berücksichtigt.
-
- Zurück zum Modul {Display}
-
- .topic ReadScreen
-
- Display.ReadScreen ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ReadScreen(src, dest: ADDRESS;
- nWords: CARDINAL);
-
- Bewegt "nWords" "src" nach "dest".
- "src" muß sich innerhalb des Bildschirmspeichers befinden.
- Falls {snowy} ═ TRUE gesetzt ist, wird
- das vertikale Retrace-Signal des Monitors berücksichtigt.
-
- Die Prozedur arbeitet im Rahmen des aktuellen Bildschirmfensters.
-
- Zurück zum Modul {Display}
-
- .topic DisplayBuffer
-
- Display.Buffer
- ═════════════════╝
-
- TYPE
- DisplayBuffer ═ ARRAY [0..24] OF
- ARRAY [0..79] OF CARDINAL;
- VAR
- {displayPtr}: POINTER TO DisplayBuffer;
-
- Die Variable wird zu Initialisierungszeit geladen.
-
- Zurück zum Modul {Display}
-
- .topic Windows
-
- MODULE Windows ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Das Modul stellt eine einfache Implementation von
- Routinen für überlappende Text-Windows zur Verfügung.
- Alle Prozeduren dieses Moduls erwarten, daß sich die
- Bildschirmanzeige im Textmodus befindet.
-
- Das Modul installiert die Prozeduren {Write} und {Goto}
- aus dem Modul {Display} nach {TermBase}.
-
- definierter Typ:
-
- {Window}
-
- definierte Prozeduren:
-
- {OpenWindow} {SelectWindow}
- {CloseWindow} {CloseCurWindow}
- {NewWindowTitle}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic Window
-
- Windows.Window
- ════════════════╝
-
- TYPE Window;
-
- opaker Datentyp für die Steuerung der Fensterroutinen.
-
- Zurück zum Modul {Windows}.
-
- .topic OpenWindow
-
- Windows.OpenWindow ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE OpenWindow(VAR w: Window;
- l1, c1, l2, c2: CARDINAL;
- frame: BOOLEAN;
- header: ARRAY OF CHAR);
-
- Ö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-Überschrift wird automatisch in der
- obersten Fensterzeile zentriert.
-
- Zurück zum Modul {Windows}.
-
- .topic SelectWindow
-
- Windows.SelectWindow ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SelectWindow(w: Window;
- mustSave: BOOLEAN);
-
- 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 überlappen.
- Wenn "mustSave" {FALSE} ist, wird der Inhalt des
- aktuellen Fensters nicht gesichert und der Inhalt
- des neuen Fensters nicht restauriert
-
- Zurück zum Modul {Windows}.
-
- .topic CloseWindow
-
- Windows.CloseWindows ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE CloseWindow(w: Window);
-
- Schließe (zerstöre) Window "w".
-
- Zurück zum Modul {Windows}.
-
- .topic CloseCurWindow
-
- Windows.CloseCurWindows ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE CloseCurWindow;
-
- Schließe das oberste Fenster.
- Das vorher aktive Window wird zum aktuellen Fenster.
-
- Zurück zum Modul {Windows}.
-
- .topic NewWindowTitle
-
- Windows.NewWindowTitle ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE NewWindowTitle(header: ARRAY OF CHAR);
-
- Zeigt einen neuen Fenstertitel an.
-
- Zurück zum Modul {Windows}.
-
- .topic Break
-
- MODULE Break ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Dieses Modul erlaubt dem Benutzer, den
- Ctrl-Break (Vektor 1BH) und den von DOS generierten
- Ctrl-C Interrupt (Vektor 23H) auszulösen oder zu sperren.
- Bei der Initialisierung wird BREAK automatisch abgeschaltet.
- Das Anwendungsprogramm muß {EnableBreak} aufrufen, um die
- Verarbeitung von Abbruchtasten zuzulassen.
- Der Breakinterrupt-Handler prüft das DOS Busy-Flag
- um die Ausführung von Ctrl-Break während Aktivitäten
- von DOS zu verhü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 übergeben wird.
- Sollte die benutzerdefinierte Breakhandlerroutine ins
- Programm zurückkehren, wird das Programm mit
- einem Errorlevel von 6 beendet.
-
- Benutzung:
-
- Um zu verhindern, daß ein Benutzer das Programm mit Ctrl-Break oder Ctrl-C beendet, muß nur das Modul importiert werden.
- Wä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ängt.
-
- definierte Prozeduren:
-
- {EnableBreak} {InstallBreakHandler}
- {DisableBreak} {UninstallBreakHandler}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic DisableBreak
-
- Break.DisableBreak ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE DisableBreak;
-
- Schaltet die Überwachung von Crt-Break aus.
- Das Drücken von Ctrl-Break bleibt so ohne Wirkung.
-
- Zurück zum Modul {Break}
-
- .topic EnableBreak
-
- Break.EnableBreak ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE EnableBreak;
-
- Erlaubt die Ausführung von Ctrl-Break.
- Der voreingestellte Break-Handler beendet das Programm.
-
- Zurück zum Modul {Break}
-
- .topic InstallBreakHandler
-
- Break.InstallBreakHandler ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE InstallBreakHandler(breakHandler: PROC);
-
- Installation eines eigenen Break-Handlers -
- die Breaküberwachung muß eingestellt sein.
-
- Zurück zum Modul {Break}
-
- .topic UninstallBreakHandler
-
- Break.UninstallBreakHandler ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE UninstallBreakHandler;
-
- Deinstalliert die Benutzer-definierte Break-Handler-Prozedur.
-
- Zurück zum Modul {Break}
-
- .topic Directories
-
- MODULE Directories ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- In diesem Modul sind ein großer Teil der Verzeichnisoperationen definiert.
-
- definierte Typen:
- {DirEntry} {QueryProc}
-
- definierte Variable:
- {DirStatus}
-
- definierte Konstanten:
- {NORMAL} {READONLY}
- {HIDDEN} {SYSTEM}
- {DIRECTORY} {ARCHIVE}
-
- definierte Prozeduren:
- {GetFirstDir} {GetNextDir}
- {DirQuery} {Delete:Directories_Delete}
- {MkDir} {Rename:Directories_Rename}
- {RmDir} {GetFileTime:Directories_GetFileTime}
- {ChDir} {GetFileAttr}
- {SetFileAttr} {SetFileTime:Directories_SetFileTime}
- {GetCurDir} {ASCIIZ}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic DirEntry
-
- Directories.DirEntry
- ══════════════════════╝
-
- TYPE
- DirEntry ═ RECORD
- name :ARRAY [0..65] OF CHAR;
- attribute :BITSET;
- time :CARDINAL;
- date :CARDINAL;
- size :LONGCARD;
- END;
-
- Zurück zum Modul {Directories}
-
- .topic QueryProc
-
- Directories.QueryProc
- ══════════════════════╝
-
- TYPE
- QueryProc ═ PROCEDURE(DirEntry);
-
- PROCEDURE {DirQuery}(path: ARRAY OF CHAR;
- attributes: BITSET;
- p: QueryProc);
-
- Zurück zum Modul {Directories}
-
- .topic READONLY, HIDDEN, SYSTEM, DIRECTORY, ARCHIVE, NORMAL
-
- Dateiattribute
- ═══════════════╝
-
- Attributbits:
-
- NORMAL ═ (); READONLY ═ (0);
- HIDDEN ═ (1); SYSTEM ═ (2);
- DIRECTORY ═ (4); ARCHIVE ═ (5);
-
- Zurück zum Modul {Directories}
-
- .topic GetFirstDir
-
- Directories.GetFirstDir ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetFirstDir(Path: ARRAY OF CHAR;
- Attribute: BITSET;
- VAR Dir: DirEntry;
- VAR ok : BOOLEAN);
-
- Bei der Rückgabe:
- IF ok THEN
- ...
- END;
-
- "Dir" ist der erste Verzeichniseintrag der
- "Path" und "Attribute" besitzt.
-
- Zurück zum Modul {Directories}
-
- .topic GetNextDir
-
- Directories.GetNextDir ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetNextDir(VAR Dir:DirEntry;
- VAR ok :BOOLEAN);
-
- Bei der Rückgabe:
- IF ok THEN
- ...
- END;
-
- "Dir" ist der nächste Verzeichniseintrag bei
- dem "Path" und "Attribute" des letzten {GetFirstDir}
- oder GetNextDir übereinstimmen.
-
- Zurück zum Modul {Directories}
-
- .topic DirQuery
-
- Directories.DirQuery ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- TYPE
- {QueryProc} ═ PROCEDURE({DirEntry});
-
- PROCEDURE DirQuery(path: ARRAY OF CHAR;
- attributes: BITSET;
- p: QueryProc);
-
- Führt die Prozedur "p" für jeden Verzeichniseintrag
- aus, der mit der Suchmaske und dem
- angegebenen Attribut übereinstimmt.
-
- Zurück zum Modul {Directories}
-
- .topic MkDir
-
- Directories.MkDir ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE MkDir(dirName: ARRAY OF CHAR);
-
- Erstellt ein neues Verzeichnis.
-
- "dirName" kann jeder beliebige Pfadname inklusive
- einer optionalen Laufwerksbezeichnung sein.
-
- Zurück zum Modul {Directories}
-
- .topic RmDir
-
- Directories.RmDir ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE RmDir(dirName: ARRAY OF CHAR);
-
- Löscht das Verzeichnis dirName.
-
- "dirName" kann jeder beliebige Pfadname inklusive einer
- optionalen Laufwerksbezeichnungs sein.
-
- Zurück zum Modul {Directories}
-
- .topic ChDir
-
- Directories.ChDir ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ChDir(dirName: ARRAY OF CHAR);
-
- 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ßerdem wird zum anderen Laufwerk als aktuelles Laufwerk gewechselt
-
- Zurück zum Modul {Directories}
-
- .topic GetFileAttr
-
- Directories.GetFileAttr ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetFileAttr(fileName: ARRAY OF CHAR;
- VAR attr: BITSET);
-
- Liest die Attribut-Bits der Datei "fileName".
-
- "fileName" und "dirName" sind jeder beliebige Pfadname
- inklusive einer optionalen Laufwerksbezeichnung.
-
- Zurück zum Modul {Directories}
-
- .topic SetFileAttr
-
- Directories.SetFileAttr ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SetFileAttr(fileName: ARRAY OF CHAR;
- attr: BITSET);
-
- Setzt die Dateiattribut-Bits der Datei "fileName".
-
- "fileName" und "dirName" sind jeder beliebige
- Pfadname inklusive einer optionalen Laufwerksbezeichnung.
-
- Zurück zum Modul {Directories}
-
- .topic GetCurDir
-
- Directories.GetCurDir ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetCurDir(drive: CARDINAL;
- VAR curDir: ARRAY OF CHAR);
-
- Liefert das aktuelle Verzeichnis des angegebenen Laufwerks wobei gilt:
-
- drive ═ 0 - aktuelles Laufwerk
- ═ 1 - Laufwerk A
- ═ 2 - Laufwerk B
- ...
-
- Zurück zum Modul {Directories}
-
- .topic Directories_Delete
-
- Directories.Delete ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Delete(fileName: ARRAY OF CHAR);
-
- Löscht die Datei "fileName" vom Datenträger.
-
- "fileName" kann jeder beliebige Pfad- und Dateiname
- inklusive einer optionalen Laufwerksbezeichnung sein.
-
- Zurück zum Modul {Directories} oder zur {Delete}-Übersicht.
-
- .topic Directories_Rename
-
- Directories.Rename ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Rename(oldName,
- newName: ARRAY OF CHAR);
-
- 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.
-
- Zurück zum Modul {Directories} oder zur {Rename}-Übersicht.
-
- .topic Directories_GetFileTime
-
- Directories.GetFileTime ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetFileTime(fileName: ARRAY OF CHAR;
- VAR time: LONGCARD);
-
- Liefert das Datum die Uhrzeit der letzten Änderung der Datei "fileName".
-
- ■ time DIV 65536L ═ Datum der letzten Änderung
- ■ time MOD 65536L ═ Uhrzeit der letzten Änderung
-
- "fileName" kann jeder beliebige Pfadname inklusive
- einer optionalen Laufwerksbezeichnung sein.
-
- Zurück zum Modul {Directories} oder zur {GetFileTime}-Übersicht.
-
- .topic Directories_SetFileTime
-
- Directories.SetFileTime ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SetFileTime(fileName: ARRAY OF CHAR;
- time: LONGCARD);
-
- Setzt Datum und Uhrzeit einer Datei.
-
- "fileName" kann jeder beliebige Pfadname
- inklusive einer optionalen Laufwerksbezeichnung sein.
-
- Zurück zum Modul {Directories} oder zur {SetFileTime}-Übersicht.
-
- .topic ASCIIZ
-
- Directories.ASCIIZ ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ASCIIZ(VAR src,
- dest: ARRAY OF CHAR);
-
- Konvertiert die Zeichenkette "src" in einen
- Null-terminierten String in "dest"
- wie er von Dateiprozeduren verlangt wird.
-
- Zurück zum Modul {Directories}
-
- .topic DirStatus
-
- Directories.DirStatus ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- VAR
- DirStatus: CARDINAL;
-
- DOS-Status nach dem letzten Aufruf eines Datei-Prozeduraufrufs.
-
- Zurück zum Modul {Directories}
-
- .topic DTA
-
- MODULE DTA ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Lesen und Setzen der DOS-Disk-Transfer-Adress (DTA).
-
- In "DTA" definierte Prozeduren:
-
- {SetDTA} {GetDTA}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic SetDTA
-
- DTA.SetDTA ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SetDTA(adrs: ADDRESS);
-
- setzt die DTA nach "adrs".
-
- Zurück zum Modul {DTA}.
-
- .topic GetDTA
-
- DTA.GetDTA ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetDTA(VAR adrs :ADDRESS);
-
- Liest die aktuelle DAT und setzt den Zeiger nach "adrs".
-
- Zurück zum Modul {DTA}.
-
- .topic Files
-
- MODULE Files ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Modul für das DOS-Dateiverwaltungs-Interface.
-
- Weitere Informationen über diese Routinen
- sollten dem technischen Handbuch für DOS entnommen werden.
-
- definierte Konstanten:
- {StdIn} {StdOut} {StdErr} {StdCom} {StdPrn}
- {NORMAL:Files_NORMAL}
- {READONLY:Files_READONLY}
- {HIDDEN:Files_HIDDEN}
- {SYSTEM:Files_SYSTEM}
- {READ:READc}
- {WRITE:WRITEc}
- {IO}
- {NOINHERIT}
- {DENYWRITE}
- {DENYREAD}
- {DENYNONE}
-
- definierter Typ:
- {SeekMode}
-
- definierte Variable:
- {FileStatus}
-
- definierte Prozeduren:
- {Open} {Create:Files_Create}
- {CreateTemp} {Rename:Files_Rename}
- {CreateNew} {Delete:Files_Delete}
- {Seek} {Close:Files_Close}
- {Dup} {Read:Files_Read}
- {Lock} {Write:Files_Write}
- {Unlock} {GetFileTime:Files_GetFileTime}
- {Dup2} {SetFileTime:Files_SetFileTime}
-
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC.
-
- .topic StdIn, StdOut, StdErr, StdCom, StdPrn
-
- DOS-Standard-Handles
- ══════════════════════╝
-
- CONST
- StdIn ═ 0; StdOut ═ 1
- StdErr ═ 2 StdCom ═ 3;
- StdPrn ═ 4
-
- Zurück zum Modul {Files}
-
- .topic Files_NORMAL, Files_READONLY, Files_HIDDEN, Files_SYSTEM
-
- Dateiattribut-Bits
- ═══════════════════╝
-
- Diese Bits werden benötigt, um Dateien zu erzeugen.
-
- Es dürfen mehrere der Bits gleichzeitig verwendet werden.
-
- CONST
- NORMAL ═ (); READONLY ═ (0);
- HIDDEN ═ (1); SYSTEM ═ (2);
-
- Zurück zum Modul {Files}
-
- .topic READc, WRITEc, IO, NOINHERIT, DENYWRITE, DENYREAD, DENYNONE
-
- Flags für die Datei-Zugriffsrechte
- ════════════════════════════════════╝
-
- Flags für die Zugriffsrechte beim Öffnen von Dateien.
-
- Es muß eines aus der ersten Gruppe ausgewählt werden
- oder eines oder mehrere aus der zweiten Gruppe gewählt
- und diese dann zusammenaddiert werden.
-
- ■ READ ═ (); Öffnet die Datei zum Lesen.
-
- ■ WRITE ═ (0); Öffnet die Datei zum Schreiben.
-
- ■ IO ═ (1); Öffnet die Datei zum Lesen und Schreiben.
-
-
- Datei-Zugriffsrechte ab DOS 3.1:
-
- ■ DENYALL ═ (4); Zurückweisung aller anderen Prozesse.
-
- ■ DENYWRITE ═ (5); Zurückweisen der
- Schreibfunktion für alle anderen Prozesse.
-
- ■ DENYREAD ═ (4,5); Zurückweisern des Lesens für alle anderen Prozesse.
-
- ■ DENYNONE ═ (6); Freier Zugriff für andere Prozesse.
-
- ■ NOINHERIT ═ (7); Kein Zugriff für Tochterprozesse.
-
-
- Zurück zum Modul {Files}
-
- .topic SeekMode
-
- Files.SeekMode
- ═══════════════╝
-
- Suchmodus - für die Benutzung mit "Seek".
-
- TYPE
- SeekMode ═ (SEEKABS, SEEKCUR, SEEKEND);
-
- ■ SEEKABS: Angabe der absoluten Suchposition.
-
- ■ SEEKCUR: Relative Angabe der Suchposition zum aktuellen Dateizeiger.
-
- ■ SEEKEND: Angabe der absoluten Suchposition vom Dateiende aus.
-
-
- Zurück zum Modul {Files}
-
- .topic FileStatus
-
- Files.FileStatus
- ═════════════════╝
-
- VAR
- FileStatus: CARDINAL;
-
- DOS-Fehlercode für die letzten Dateifunktionen.
-
- Liefert 0 zurück, wenn der letzte Dateiaufruf erfolgreich war.
-
- Zurück zum Modul {Files}
-
- .topic Open
-
- Files.Open ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Open(VAR fd: INTEGER;
- name: ARRAY OF CHAR;
- mode: BITSET);
-
- Öffnet eine Datei abhängig vom angegebenen Dateimodus.
-
- Bei der Rückkehr enthät der Datei-Deskriptor den
- von DOS zurückgegebenen Wert oder -1 wenn ein Fehler aufgetreten ist.
-
- Zurück zum Modul {Files}
-
- .topic Files_Create
-
- Files.Create ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Create(VAR fd: INTEGER;
- name: ARRAY OF CHAR;
- attr: BITSET);
-
- Erstellt eine neue Datei oder schneidet eine bestehende Datei ab.
-
- Falls Create erfolgreich war, wird die Datei für
- Lesen und Schreiben geöffnet.
- "fd" erhält den Datei-Deskriptorwert, der von DOS zurückgeliefert wurde.
- Falls Create fehlgeschlagen ist, enthält "fd" den Wert -1.
-
- Zurück zum Modul {Files} oder zur {Create}-Übersicht.
-
- .topic CreateTemp
-
- Files.CreateTemp ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE CreateTemp(VAR fd: INTEGER;
- VAR path: ARRAY OF CHAR;
- attr: BITSET);
-
- Erstellt ab DOS 3.x eine neue Datei mit einmalig vergebenem Namen.
-
- Beim Eintritt in die Prozedur sollte die Variable "path"
- den Namen des Verzeichnisses enthalten,
- in dem die Temporärdatei angelegt wird und
- genügend Platz (14 Bytes), damit DOS den Namen anhängen kann.
-
- Bei der Rückkehr aus der Prozedur enthält
- die Variable "path" den kompletten Namen der Temporärdatei.
-
- Hinweis: DOS löscht die Temporärdatei nicht automatisch.
- Falls die Datei nicht mehr benötigt wird,
- muß sie vom Benutzer gelöscht werden.
-
- Zurück zum Modul {Files}
-
- .topic CreateNew
-
- Files.CreateNew ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE CreateNew(VAR fd: INTEGER;
- name: ARRAY OF CHAR;
- attr: BITSET);
-
- Entspricht {Create:Files_Create}.
- CreateNew schlägt jedoch fehl, wenn die Datei bereits existiert (DOS 3.x).
-
- Zurück zum Modul {Files}
-
- .topic Files_Close
-
- Files.Close ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Close(fd: INTEGER);
-
- Schließt die Datei.
- Jede weitere Ein- oder Ausgabe auf diesen Datei-Deskriptor schlägt fehl.
-
- Zurück zum Modul {Files} oder zur {Close}-Übersicht.
-
- .topic Files_Read
-
- Files.Read ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Read(fd: INTEGER;
- buffer: ADDRESS;
- bytes: CARDINAL;
- VAR nread: CARDINAL);
-
- Lese die angegebene Anzahl von Bytes aus der Datei.
-
- Bei der Rückkehr enthält "nwritten" die aktuelle Anzahl gelesener Bytes.
-
- Zurück zum Modul {Files} oder zur {Read}-Übersicht.
-
- .topic Files_Write
-
- Files.Write ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Write(fd: INTEGER;
- buffer: ADDRESS;
- bytes: CARDINAL;
- VAR nwritten: CARDINAL);
-
- Schreibe die angegebene Anzahl von Bytes in die Datei.
-
- Bei der Rückkehr enthält "nwritten" die aktuelle
- Anzahl geschriebener Bytes.
-
- Zurück zum Modul {Files} oder zur {Write}-Übersicht.
-
- .topic Seek
-
- Files.Seek ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Seek(fd: INTEGER;
- mode: SeekMode;
- VAR offset: LONGCARD);
-
- Die Prozedur bewegt den Dateizeiger zu der mit "offset"
- angegebenen Adresse in der Datei,
- je nach der in Mode angegebenen Startegie
-
- Bei der Rückkehr enthält "offset" die neue Dateizeigerposition.
-
- Zurück zum Modul {Files}
-
- .topic Lock
-
- Files.Lock ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Lock(fd: INTEGER;
- offset: LONGCARD;
- length: LONGCARD);
-
- Sperrt den Dateibereich ab dem Offset "offset" für "length" Bytes.
-
- Erst ab DOS 3.1!
-
- Zurück zum Modul {Files}
-
- .topic Unlock
-
- Files.Unlock ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Unlock(fd: INTEGER;
- offset: LONGCARD;
- length: LONGCARD);
-
- Hebt die Sperrung des Dateibereichs ab "offset" für "length"
- Bytes wieder auf. Die Prozedur benötigt DOS ab 3.1
-
- Zurück zum Modul {Files}
-
- .topic Dup
-
- Files.Dup ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Dup(fd: INTEGER;
- VAR newfd: INTEGER);
-
- Erzeugt einen neuen Datei-Handle für "fd" in "newfd".
-
- Zurück zum Modul {Files}
-
- .topic Dup2
-
- Files.Dup2 ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Dup2(fd, fd2 :INTEGER);
-
- Dupliziert den Dateihandle fd auf fd2.
-
- Zurück zum Modul {Files}
-
- .topic Files_GetFileTime
-
- Files.GetFileTime ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetFileTime(fd: INTEGER;
- VAR time: LONGCARD);
-
- Liefert die Zeit und das Datum der letzten Änderung der Datei.
-
- ■ time DIV 65536L ═ Datum der letzten Änderung
-
- ■ time MOD 65536L ═ Zeit der letzten Änderung
-
- Zurück zum Modul {Files} oder zur {GetFileTime}-Übersicht.
-
- .topic Files_SetFileTime
-
- Files.SetFileTime ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SetFileTime(fd: INTEGER;
- time: LONGCARD);
-
- Setzt das Datum und die Uhrzeit der Datei.
-
- Zurück zum Modul {Files} oder zur {SetFileTime}-Übersicht.
-
- .topic Files_Rename
-
- Files.Rename ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Rename(oldname,
- newname: ARRAY OF CHAR);
-
- Ä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.
-
- Zurück zum Modul {Files} oder zur {Rename}-Übersicht.
-
- .topic Files_Delete
-
- Files.Delete ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Delete(name: ARRAY OF CHAR);
-
- Löscht die in "name" angegebene Datei.
-
- Zurück zum Modul {Files} oder zur {Delete}-Übersicht.
-
- .topic FileSpec
-
- MODULE FileSpec ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Die Prozeduren dieses Moduls erlauben dem Benutzer,
- komplette Dateinamen zu manipulieren.
-
- Keine der Prozeduren führt eine Überprüfung auf die
- Richtigkeit der Pfadnamen durch. Sie trennen nur
- die einzelnen Komponenten auf der Grundlage der DOS-Sytax für Pfadnamen.
-
- Beispiel:
-
- ParseFileSpec gibt für "\m2\comp" ein
- Verzeichnis "m2" und einen Dateinamen "comp"
- zurück - auch dann, wenn "\m2\comp" der Name eines
- vorhandenen Unterverzeichnisses ist.
-
- Definierte Prozeduren:
-
- {ParseFileSpec} {ExtractDirPath}
- {ExtractFileName} {DropExt}
- {HasExt}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic ParseFileSpec
-
- FileSpec.ParseFileSpec ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ParseFileSpec(
- filespec: ARRAY OF CHAR;
- VAR drive: CHAR;
- VAR dir: ARRAY OF CHAR;
- VAR name: ARRAY OF CHAR;
- VAR ext: ARRAY OF CHAR);
-
-
- Nur belegte Teile aus "filespec" werden wieder zurückgeliefert.
- Die anderen Felder werden mit einer Null in ersten Feld geladen.
-
- ■ drive: das angegebene Laufwerk
-
- ■ dir: der angegebene Verzeichnispfad
-
- ■ name: der Dateiname ohne die Extension
-
- ■ ext: die Dateiendung
-
- Beispiel:
- ParseFileName("d:m2\comp\mc.mod", drive, dir, name, ext);
-
- würde zurückliefern:
-
- drive ═ "d"
- dir ═ "m2\comp"
- name ═ "mc"
- ext ═ "mod"
-
- Zurück zum Modul {FileSpec}
-
- .topic ExtractDirPath
-
- FileSpec.ExtractDirPath ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ExtractDirPath(
- filespec: ARRAY OF CHAR;
- VAR dir: ARRAY OF CHAR);
-
- Liefert die Dateibezeichnung ohne den Dateinamen in "dir".
-
- Das Beispiel:
- ExtractDirName("d:m2\comp\mc.mod", dir);
- liefert zurück:
- dir ═ "d:m2\comp"
-
- Zurück zum Modul {FileSpec}
-
- .topic ExtractFileName
-
- FileSpec.ExtractFileName ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE ExtractFileName(
- filespec: ARRAY OF CHAR;
- VAR name: ARRAY OF CHAR);
-
- Gibt in "name" den Dateinamen von "filespec" zurück.
-
- Beispiel:
- ExtractFileName("d:m2\comp\mc.mod", name);
-
- gibt zurück:
- name ═ "mc.mod"
-
- Zurück zum Modul {FileSpec}
-
- .topic DropExt
-
- FileSpec.DropExt ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE DropExt(
- filespec: ARRAY OF CHAR;
- VAR newspec: ARRAY OF CHAR);
-
- Die Prozedur liefert in "newspec" den Dateinamen mit
- der vollen Pfadangabe zurück.
-
- Beispiel:
- ExtractFileName("d:m2\comp\mc.mod", newspec);
-
- gibt zurück:
- newspec ═ "d:m2\comp\mc"
-
- Zurück zum Modul {FileSpec}
-
- .topic HasExt
-
- FileSpec.HasExt ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE HasExt(filespec: ARRAY OF CHAR): BOOLEAN;
-
- TRUE, falls die Dateiangabe eine Dateiendung besitzt.
-
- Zurück zum Modul {FileSpec}
-
- .topic KeyBoard
-
- MODULE KeyBoard ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Dieses Modul liefert die Schnittstelle zu den BIOS-Tastatur-Routinen.
-
- definierte Typen:
- {ShiftKeys} {ShiftStatus}
-
- definierte Prozeduren:
- {GetKey} {GetKeyCh}
- {GetFunKey} {GetShiftStatus}
- {KeyPressed:Keyboard_KeyPressed}
-
- Außerdem sind in KeyBoard alle {Tastaturcodes} als Konstanten definiert.
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic Tastaturcodes
-
- Tabelle der Tastaturcodes █
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- CONST
- Break ═ 80X; ShiftTab ═ 81X;
- AltQ ═ 82X; AltW ═ 83X;
- AltE ═ 84X; AltR ═ 85X;
- AltT ═ 86X; AltY ═ 87X;
- AltU ═ 88X; AltI ═ 89X;
- AltO ═ 8AX; AltP ═ 8BX;
-
- AltA ═ 90X; AltS ═ 91X;
- AltD ═ 92X; AltF ═ 93X;
- AltG ═ 94X; AltH ═ 95X;
- AltJ ═ 96X; AltK ═ 97X;
- AltL ═ 98X; AltZ ═ 09EX;
-
- AltX ═ 09FX; AltC ═ 0A0X;
- AltV ═ 0A1X; AltB ═ 0A2X;
- AltN ═ 0A3X; AltM ═ 0A4X;
-
- F1 ═ 0ADX; F2 ═ 0AEX;
- F3 ═ 0AFX; F4 ═ 0B0X;
- F5 ═ 0B1X; F6 ═ 0B2X;
- F7 ═ 0B3X; F8 ═ 0B4X;
- F9 ═ 0B5X; F10 ═ 0B6X;
-
- Home ═ 0B9X; Up ═ 0BAX;
- PgUp ═ 0BBX; Left ═ 0BDX;
- Right ═ 0BFX; End ═ 0C1X;
- Down ═ 0C2X; PgDn ═ 0C3X;
- Ins ═ 0C4X; Del ═ 0C5X;
-
- SF1 ═ 0C6X; SF2 ═ 0C7X;
- SF3 ═ 0C8X; SF4 ═ 0C9X;
- SF5 ═ 0CAX; SF6 ═ 0CBX;
- SF7 ═ 0CCX; SF8 ═ 0CDX;
- SF9 ═ 0CEX; SF10 ═ 0CFX;
- CF1 ═ 0D0X; CF2 ═ 0D1X;
- CF3 ═ 0D2X; CF4 ═ 0D3X;
- CF5 ═ 0D4X; CF6 ═ 0D5X;
- CF7 ═ 0D6X; CF8 ═ 0D7X;
- CF9 ═ 0D8X; CF10 ═ 0D9X;
- AF1 ═ 0DAX; AF2 ═ 0DBX;
- AF3 ═ 0DCX; AF4 ═ 0DDX;
- AF5 ═ 0DEX; AF6 ═ 0DFX;
- AF7 ═ 0E0X; AF8 ═ 0E1X;
- AF9 ═ 0E2X; AF10 ═ 0E3X;
-
- CtrlPrtSc ═ 0E4X; CtrlLeft ═ 0E5X;
- CtrlRight ═ 0E6X; CtrlEnd ═ 0E7X;
- CtrlPgDn ═ 0E8X; CtrlHome ═ 0E9X;
-
- Alt1 ═ 0EAX; Alt2 ═ 0EBX;
- Alt3 ═ 0ECX; Alt4 ═ 0EDX;
- Alt5 ═ 0EEX; Alt6 ═ 0EFX;
- Alt7 ═ 0F0X; Alt8 ═ 0F1X;
- Alt9 ═ 0F2X; Alt0 ═ 0F3X;
- AltMinus ═ 0F4X; AltEquals ═ 0F5X;
-
- CtrlPgUp ═ 0F6X;
-
- Zurück zum {Index}
- Ende mit ESC
-
- .topic ShiftKeys, ShiftStatus
-
- KeyBoard.ShiftKeys / .ShiftStatus
- ═══════════════════════════════════╝
-
- TYPE
- ShiftKeys ═ (rightShift,
- leftShift,
- Ctrl,
- Alt,
- ScrollLock,
- NumLock);
-
- ShiftStatus ═ SET OF ShiftKeys;
-
- Zurück zum Modul {KeyBoard}
-
- .topic KeyBoard_KeyPressed
-
- KeyBoard_KeyPressed ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE KeyPressed(): BOOLEAN;
-
- Wartet da ein Zeichen im Tastaturpuffer?
-
- Zurück zum Modul {KeyBoard} oder zur {KeyPressed}-Übersicht.
-
- .topic GetKey
-
- KeyBoard.GetKey ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetKey(VAR k: CHAR);
-
- Entspricht der "INKEY"-Funktion in BASIC.
-
- Es wird entweder ein Zeichen oder 0C oder mit dem
- nächsten Aufruf der erweiterte Tastaturcode zurückgeliefert.
-
- Zurück zum Modul {KeyBoard}
-
- .topic GetKeyCh
-
- KeyBoard.GetKeyCh ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetKeyCh(VAR ch: CHAR);
-
- Erweiterte Tastaturcodes werden in die oberen 128 ASCII-Zeichen übertragen,
- wie sie in der Tabelle der {Tastaturcodes} zusammengefaßt sind.
-
- Zurück zum Modul {KeyBoard}
-
- .topic GetFunKey
-
- KeyBoard.GetFunKey ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetFunKey(VAR ch: CARDINAL);
-
- Diese Prozedur unterstützt den internationalen Zeichensatz,
- der das obere Bit von CHAR benützt.
- Der Ordinalwert der regulären Zeichen wird zurückgegeben.
- Erweiterte Zeichen werden in die oberen 128 ASCII-Zeichen umgelagert.
- Anschließend wird 100H dazuaddiert.
- So wird von <F1> der Wert 01ADH zurückgegeben.
-
- Zurück zum Modul {KeyBoard}
-
- .topic GetShiftStatus
-
- KeyBoard.GetShiftStatus ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetShiftStatus(VAR st: ShiftStatus);
-
- Liefert den Status der Shift/Control-Tasten
-
- Zurück zum Modul {KeyBoard}
-
- .topic Menu
-
- MODULE Menu ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- In diesem Modul sind nur die beiden Menütypen {PopMenu}
- und {PullDownMenu} definiert.
-
- Das Modul verwendet das Modul {Windows}, um die Menüfenster zu erzeugen.
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic PopMenu
-
- Menu.PopMenu ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE PopMenu(line,
- col: CARDINAL;
- menu: ARRAY OF CHAR;
- width: CARDINAL;
- clear: BOOLEAN;
- VAR cmd: CARDINAL );
-
- Klappt ein Menü bei line, col auf.
-
- "menu" ist eine Zeichenkette von Menüs, die durch
- das Zeichen "|" getrennt werden.
- Der erste Eintrag enthält den Titel des Menüs.
- "width" ist die minimale Breite für das Menü-Window.
- Falls "clear" TRUE ist, wird das Menü nach der Menüauswahl
- zerstört, sonst bleibt es auf dem Bildschirm.
- Dann muß es mit Windows.{CloseCurWindow} entfernt werden.
- "cmd" ist 0, falls kein Menüpunkt ausgewählt wurde (ESC),
- ansonsten wird die Nummer des Menüpunktes zurückgegeben.
-
- Falls bei der Rückgabe cmd ═ 0 ist, wird das Fenster auf
- alle Fälle geschlossen, egal welcher Wert in clear abgegeben wurde.
-
- Beispiel:
- PopMenu(5, 10, "Hauptmenü|Hallo|Bye|Ende", 0, TRUE, cmd);
-
- Siehe auch {PullDownMenu}
-
- Zurück zum Modul {Menu}
-
- .topic PullDownMenu
-
- Menu.PullDownMenu ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE PullDownMenu(line : CARDINAL;
- frame : BOOLEAN;
- MainMenu: ARRAY OF CHAR;
- SubMenus: ARRAY OF CHAR;
- clear : BOOLEAN;
- VAR cmd1,
- cmd2 : CARDINAL);
-
- Erstellt ein Pulldown-Menü in der Zeile "line".
-
- In "frame" wird angegeben, ob der Pulldownbalken einen Rahmen bekommt.
- "MainMenu" ist eine Zeichenkette, in der die Menüpunkt,
- getrennt von einem "|" angegeben werden.
- "SubMenus" ist eine Zeichenkette mit Untermenüs, getrennt
- von "&"; jedes der Untermenüs enthält eine Liste von Auswahlpunkte,
- getrennt von "|".
- Bei der Rückgabe enthält "cmd1" die Nummer des gewählten
- Hauptmenüpunkts und "cmd2" die Nummer des entspechenden
- Untermenüpunkts. Falls der Benutzer ESC drückt, liefert cmd1 0 zurück.
-
- Alle Menüfenster werden vor der Rückkehr geschlossen.
-
- siehe auch {PopMenu}
-
- Zurück zum Modul {Menu}
-
- .topic Loader
-
- MODULE Loader ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- In diesem Modul ist nur die Prozedur {Execute} definiert,
- die dazu dient, andere Programme nachzuladen.
- Sie entspricht der Turbo-Pascal Prozedur "Exec".
-
- Zurück zum {Index} oder zu {Routinen},
-
- Ende mit ESC
-
- .topic Execute
-
- Loader.Execute ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Execute(pgm: ARRAY OF CHAR;
- args: ARRAY OF CHAR;
- VAR exitcode: CARDINAL);
-
- Die Prozedur startet das externe Programm "pgm" mit der Argument "args".
- Es muß der volle Pfadname des externen Programms angegeben werden.
-
- Bei der Rückkehr aus der Prozedur:
-
- ■ exitcode < 32768:
- Die Ausführung konnte nicht stattfinden.
- Der DOS-Exitcode wird zurückgegeben.
-
- ■ exitcode >═ 32768:
- exitcode MOD 256 ist der Exitcode
- des Programms "pgm"
-
- ■ (exitcode-32768) DIV 256
- ist der Grund für die Beendigung
- des Programms:
-
- 0 ═ normal
- 1 ═ durch Ctrl-C
- 2 ═ Kritischer Gerätefehler
- 3 ═ DOS-Funktion 31H (TSR)
-
- Execute versucht, dem aufgerufenen Programm möglichst
- viel Speicher zuzuweisen, indem der Speicher über System.{HeapTop}
- freigegeben wird.
- Das aufgerufene Programm darf nicht speicherresident verbleiben (TSR)!!!
-
- Zurück zum Modul {Loader}
-
- .topic Paths
-
- MODULE Paths ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Im Modul Paths ist nur die Prozedur {Locate} definiert.
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic Locate
-
- Paths.Locate ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE Locate(fileName: ARRAY OF CHAR;
- envPath: ARRAY OF CHAR;
- VAR PathAndName: ARRAY OF CHAR;
- VAR found: BOOLEAN);
-
- Es wird versucht, die im Environment-String "envPath" angebenen
- Pfade nach der Datei "filename" zu durchsuchen.
- Falls die Datei gefunden wird, wird der vollständige Name
- inklusive des Pfades in PathAndName zurückgegeben.
-
- Beispiel:
- Locate("M2IDE.CFG", "PATH", pathName, found);
- IF found THEN
- Lookup(f, pathName);
- ...
-
- Zurück zum Modul {Paths}
-
- .topic RealConversion
-
- MODULE RealConversion ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- definierte Prozeduren:
-
- {RealToString} {StringToReal}
- {LongRealToString} {StringToLongReal}
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic RealToString
-
- RealConversion.RealToString ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE RealToString(x: REAL;
- decDigits, n: INTEGER;
- VAR s: ARRAY OF CHAR;
- VAR ok: BOOLEAN);
-
- Konvertiert "x" in ein Zeichenfeld. "n" ist die Breite des Zeichenfeldes.
- ABS(decDigits) ist die Zahl der gewünschten Stellen.
- Das Ergebnis wird in "s" zurückgegeben.
- "ok" wird auf TRUE gesetzt, wenn die Umwandlung erfolgreich
- durchgeführt wurde.
-
- Die Ausgabe von "s" erfolgt im Fixkomma-Format,
- wenn "decDigits" positiv ist,
- sonst erfolgt die Ausgabe in wissenschaftlicher Notation.
- Falls "n" größer als die Zahl der benötigten Zeichen für die
- Umwandlung ist, wird s links mit Leerzeichen aufgefüllt.
-
- Falls decDigits > 0 ist, muß "n" >═ decDigits + 2 sein,
- sonst muß n >═ ABS(decDigits) + 7 sein.
-
- Beispiele:
-
- RealToString(1.148, 2, 6, s, ok) würde " 1.15" in s zurückgeben.
-
- RealToString(1.148, -2, 10, s, ok) würde " 1.15E+00" in s zurückgeben.
-
-
- Zurück zum Modul {RealConversion}
-
- .topic StringToReal
-
- RealConversion.StringToReal ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE StringToReal(s: ARRAY OF CHAR;
- VAR x: REAL;
- VAR ok: BOOLEAN);
-
- Konvertiert die Zeichenkette s in eine Real-Zahl.
- Es wird eine Realzahl im Modula-2-Fließkommazahlenformat erwartet.
-
- Zurück zum Modul {RealConversion}
-
- .topic LongRealToString
-
- RealConversion.LongRealToString ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE LongRealToString(x: LONGREAL;
- decDigits, n: INTEGER;
- VAR s: ARRAY OF CHAR;
- VAR ok: BOOLEAN);
-
- Arbeitet identisch wie {RealToString}.
-
- Zurück zum Modul {RealConversion}
-
- .topic StringToLongReal
-
- RealConversion.StringToLongReal ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE StringToLongReal(s: ARRAY OF CHAR;
- VAR x: LONGREAL;
- VAR ok: BOOLEAN);
-
- Arbeitet identisch wie {StringToReal}.
-
- Zurück zum Modul {RealConversion}
-
- .topic TimeDate
-
- MODULE TimeDate ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- In diesem Modul sind der Typ {Time} und die beiden
- Prozeduren {GetTime} und {SetTime} definiert.
-
- Zurück zum {Index} oder zu {Routinen}, Ende mit ESC
-
- .topic Time
-
- TYPE TimeDate.Time ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- TYPE
- Time ═ RECORD
- day,
- minute,
- millisec: CARDINAL;
- END;
-
- day ═ ((Jahr - 1900) * 16
- + Monat * 32
- + Tag_des_Monats)
- minute ═ Minuten seit
- Mitternacht
-
- millisec ═ Millisekunden der
- letzten vollen Minute
-
- Zurück zum Modul {TimeDate}
-
- .topic GetTime
-
- TimeDate.GetTime ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE GetTime(VAR time: Time);
-
- Liefert die Systemzeit.
-
- Zurück zum Modul {TimeDate}
-
- .topic SetTime
-
- TimeDate.SetTime ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- PROCEDURE SetTime(time: Time);
-
- Setzt die Systemzeit.
-
- Zurück zum Modul {TimeDate}
-
- .topic Compilerschalter
-
- Compilerschalter ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Durch im Programmtext enthaltene Befehle können verschiedene
- Compiler-Schalter gesetzt werden, die die Code-Erzeugung
- beeinflussen.
-
- Diese Befehle müssen am Anfang eines Kommentars stehen;
- mehrere Compiler-Befehle können durch Kommata getrennt
- in einem Kommentar aufgereiht werden.
-
- Beispiel:
-
- (* $S-, $R+ *)
-
- Ein "+" setzt den Schalter auf {TRUE}, ein "-" setzt ihn
- auf {FALSE} und ein "=" setzt den Wert auf den
- vorausgegangenen Wert zurück.
-
- Von Fitted Modula-2 Version 2.0 unterstützte Compilerschalter:
-
- {(*$A+/$A-*):Switches_sA}
- {(*$S+/$S-*):Switches_sS}
- {(*$R+/$R-*):Switches_sR}
- {(*$T+/$T-*):Switches_sT}
- {(*$L+/$L-*):Switches_sL}
-
- Zurück zum {Index}, Ende mit ESC
-
- .topic Switches_sA
-
- Befehl: $A, Vorbelegung: +
- ════════════════════════════╝
-
- Ausrichtung
- -----------
-
- Bei "+" werden alle neu deklarierten Variablen an Wortgrenzen
- (1 Wort ═ 2 Bytes) aus gerichtet.
- Record-Komponenten werden ungeachtet dieses Befehls gepackt
- (jedoch nicht ausgerichtet).
-
- Zurück zur Übersicht: {Compilerschalter}.
-
- .topic Switches_sS
-
- Befehl: $S, Vorbelegung: +
- ════════════════════════════╝
-
- Stack-Überlauf-Kontrolle
- ------------------------
-
- Bei "+" wird bei Eintritt in ein Unterprogramm geprüft,
- ob der verfügbare Platz auf dem Stack ausreicht. Diese
- Prüfung wird auch beim Kopieren von offenen Arrays in
- den lokalen Stack-Rahmen eines Unterprogramms durchgeführt.
-
- Zurück zur Übersicht: {Compilerschalter}.
-
- Zurück zum Menü {Compilerschalter}
-
- .topic Switches_sR
-
- Befehl: $R, Vorbelegung: +
- ════════════════════════════╝
-
- Bereichs-Prüfung
- ----------------
-
- Bei "+" wird vor jeder Zuweisung auf eine Variable
- eines Teilbereichs-Typs (Subrange) geprüft, ob der
- zuzuweisende Wert wirklich innerhalb der erlaubten
- Bereichsgrenzen liegt.
-
- Wenn die Compiler-Option $R gesetzt ist, erzeugt der
- Compiler Code zur Bereichsprüfung ("range check code")
- bei Zuweisungen zwischen {INTEGER}s und {CARDINAL}s.
- Der Wert ist unabhängig von der Zuweisungsrichtung außerhalb
- des zugelassenen Bereiches, wenn das höchstwertige Bit 1
- ist.
-
- Zurück zum Menü {Compilerschalter}
-
- .topic Switches_sT
-
- Befehl $T, Vorbelegung: +
- ═══════════════════════════╝
-
- Feld-Index-Prüfung
- ------------------
-
- Bei "+" wird bei jedem Zugriff auf ein Feld (Array)
- über Index zuvor geprüft, ob der Index nicht außerhalb
- der definierten Feldgrenzen liegt.
-
- Wenn die Compiler-Option $T gesetzt ist, werden Zeiger
- vor dem Zugriff auf NIL geprüft. Außerdem setzt
- Storage.{DEALLOCATE} den übergebenen Zeiger auf NIL.
-
- Zurück zum Menü {Compilerschalter}
-
- .topic Switches_sL
-
- Befehl $L, Vorbelegung -
- ══════════════════════════╝
-
- 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.
- Mit DBG2MAP kann anschließend eine Standard-MAP-Datei
- geschrieben werden, die mit TDMAP an das EXE-Programm
- angehängt werden kann, um die Bearbeitung mit dem
- Turbo-Debugger zu ermöglichen.
-
-
- Zurück zum Menü {Compilerschalter}
-
- .topic Laufzeitfehler
-
- Laufzeitfehler ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Wenn während der Ausführung eines Programms ein
- Laufzeitfehler auftritt, wird das Programm von der
- Laufzeitfehler-Behandlungsroutine abgebrochen und
- eine Nachricht über Art und Stelle (Adresse) des
- Fehlers ausgegeben.
-
- {Stack Overflow :eStack}
- {Range Overflow :eRange}
- {Integer Overflow :eIntOver}
- {Floating Point Overflow:eFloatOver}
- {No RETURN :eNoRet}
- {HALT :eHALT}
-
- Zurück zum {Index}, Ende mit ESC
-
- .topic eStack
-
- Runtime-Error 0
- ─────────────────┘
-
- Stack-Überlauf ($S Option)
-
- Zurück zum Menü {Laufzeitfehler}
-
- .topic eRange
-
- Runtime-Error 1
- ─────────────────┘
-
- Bereichs-Fehler ($R oder $T Option)
-
- Zurück zum Menü {Laufzeitfehler}
-
- .topic eIntOver
-
- Runtime-Error 2
- ─────────────────┘
-
- Integer/Cardinal-Überlauf (Division durch Null)
-
- Zurück zum Menü {Laufzeitfehler}
-
- .topic eFloatOver
-
- Runtime-Error 3
- ─────────────────┘
-
- Fehler bei einer Fließkomma-Operation
-
- Zurück zum Menü {Laufzeitfehler}
-
- .topic eNoRET
-
- Runtime-Error 4
- ─────────────────┘
-
- Funktion hat kein RETURN ausgeführt.
-
- Zurück zum Menü {Laufzeitfehler}
-
- .topic eHALT
-
- Runtime-Error 5
- ─────────────────┘
-
- HALT wurde aufgerufen.
-
- Zurück zum Menü {Laufzeitfehler}
-
- .topic Typen
-
- MODULA Standard-Typen ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Datentyp-Darstellung:
- ──────────────────────┘
-
- {CHAR} 1 Byte
- {INTEGER} 2 Bytes 2er-Komplement
- {CARDINAL} 2 Bytes
- {LONGCARD} 4 Bytes
- {LONGINT} 4 Bytes 2er-Komplement
- {BOOLEAN} 1 Byte (1 ═ TRUE, 0 ═ FALSE)
- {REAL:TREAL} 4 Bytes im Intel-8087-Format.
- {LONGREAL} 8 Bytes im Intel-8087-Format.
- {BITSET} 1 Wort. 0 ═ low Order Bit, 15 ═ high Order Bit.
- {SET} 1 bis 8 Worte (Mengen bis zu 256 Elemente)
- {POINTER} 4 Bytes im Intel-8086/88-Format
- {PROCEDURE} 4 Bytes POINTER zur Prozedur-Startadresse
-
- Adressen sind im Intel-8086-Format dargestellt:
-
- 1 Wort {BYTE} {OFFSET}
- 1 Wort {SEGMENT}
-
- Numerische Werte sind gleichfalls so dargestellt,
- wie bei der Intel 8086-Prozessor-Familie üblich:
- niederwertiges Byte zuerst, höherwertiges Byte zuletzt.
-
- Zurück zum {Index}, Ende mit ESC
-
- .topic CHAR
-
- CHAR ▄
- ▀▀▀▀▀▀▀
-
- Einfacher vorzeichenloser 8-Bit Datentyp.
-
- CHAR implementiert den {ASCII}-Zeichensatz,
- kann aber auch als normaler Datentype verwendet werden.
- CHARs müssen in oktaler Schreibweise angegeben werden.
- CHAR-Konstanten werden durch ein nachstehendes C gekennzeichnet.
- Das Modul {ASCII} vereinfacht die Zuweisung von ASCII-Zeichen,
- da dort alle Steuerzeichen als Konstante definiert sind.
-
- Zuweisungen von CHARs wären:
-
- CONST
- ch = 36C; (* oktal ! *)
- Space = ' '; (* direkt zugewiesen *)
- Qote = "'"; (* Hochkomma in Anführungszeichen *)
- Enter = ASCII.EOL; (* importiert! *)
-
- VAR
- c: CHAR;
- ...
- BEGIN
- c := '"'; (* Anführungszeichen in Hochkommas *)
- ...
-
- CHAR ist zuweisungskompatibel mit SYSTEM.{BYTE},
- muß aber im Gegensatz zu BYTE nicht importiert werden.
- CHAR-Konstanten werden mit einfachem (') oder
- doppeltem (") Hochkomma eingerahmt.
- Die in Pascal mögliche Notierung eines Hochkommas
- in einer Zeichenkette oder als CHAR ist nicht möglich.
- Stattdessen können genauso wie Assembler die beiden
- Kennungen gemischt werden:
-
- '"' wird für Anführungsstriche, "'" für Hochkomma verwendet.
-
- Der Typ String ist in Modula-2 nicht vordefiniert.
-
- Ein "String" ist ein ARRAY OF CHAR, beispielsweise:
-
- TYPE
- String: ARRAY [0..79] OF CHAR;
-
- Da Modula-Strings als normale Arrays im Gegensatz
- zu Turbo-Pascal Strings kein Längenbyte besitzen,
- kann das ARRAY bei 0 beginnen.
-
- Zurück zum {Typen}-Menü.
-
- .topic INTEGER
-
- INTEGER ▄
- ▀▀▀▀▀▀▀▀▀▀
-
- Vorzeichenabhängiger 16-Bit Datentyp.
-
- Wertebereich: -32768 bis 32767
-
- Zurück zum {Typen}-Menü.
-
- .topic CARDINAL
-
- CARDINAL ▄
- ▀▀▀▀▀▀▀▀▀▀▀
-
- Vorzeichenloser 16-Bit Datentyp.
-
- CARDINAL entspricht dem Turbo-Pascal Datentyp
- Word und ist zuweisungskompatibel zu dem
- systemabhängigen 16-Bit-Datentype SYSTEM.{WORD}.
-
- Wertebereich: 0 bis 65535.
-
- Zurück zum {Typen}-Menü.
-
- .topic LONGINT, LONGCARD
-
- LONGINT/LONGCARD ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Der Fitted-Modula-2-Compiler implementiert
- die 32-Bit Standard-Typen LONGINT und LONGCARD.
-
- Operanden des Typs LONGINT oder LONGCARD
- dürfen wie INTEGER oder CARDINAL in jedem Ausdruck auftauchen.
- Aber das ist auch schon alles!
-
- Teilbereiche (Subranges) dieser Typen sind nicht möglich.
-
- Keine Standard-Prozeduren akzeptieren Operanden
- dieser Typen (auß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önnen nur
- dezimal geschrieben werden und enden mit
- einem "L", falls der Wert kleiner als 65536 ist.
-
- Beispiel:
-
- ■ 123L und 123567 sind korrekte LONGCARD- oder LONGINT-Konstanten,
-
- ■ -1L und -348762 sind korrekte LONGINT-Konstanten
-
- Wertebereich für LONGINT: -2147483648 bis 2147483647.
-
- Wertebereich für LONGCARD: 0 bis 4294967297.
-
- Zurück zum {Typen}-Menü.
-
- .topic BOOLEAN, TRUE, FALSE
-
- Boolescher Datentyp ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Variablen vom Typ BOOLEAN können ausschließlich einen der vordefinierten Werte FALSE ( # 0) oder TRUE ( ═ 0) annehmen.
- Tatsächlich handelt es sich bei Boolean um einen Aufzählungstyp, der folgendermaßen deklariert ist:
- Zuweisungen wie PRED und SUCC sind möglich. FALSE ist ein SUCC oder PRED von TRUE.
-
- TYPE
- BOOLEAN = (FALSE, TRUE);
-
- Die Anwendung der Operatoren = <> > < >= <= IN innerhalb
- eines Ausdrucks erzeugt Ergebnisse vom Typ BOOLEAN.
-
- Zurück zum {Typen}-Menü.
-
- .topic TREAL
- REAL ▄
- ▀▀▀▀▀▀▀
-
- Fließkommazahlen. Der Datentyp entspricht dem Turbo-Pascal (ab 5.0)
- Datentyp Single und ist vier Bytes groß.
-
- REAL arbeitet mit sieben bis acht Stellen Genauigkeit. Für
- genauere Operation kann {LONGREAL} verwendet werden.
- Für Ein- und Ausgaben steht das Modul {RealInOut}, für
- mathematische Opertionen das Modul {MathLib0} zur Verfügung.
- String-Konvertierungen werden in {RealConversion} durchgeführt.
-
- Wertebereich für REAL: 1.5E-45 bis 3.4E38.
-
- Zurück zum {Typen}-Menü.
-
- .topic LONGREAL
-
- LONGREAL ▄
- ▀▀▀▀▀▀▀▀▀▀▀
-
- Ab der Version 2.0 von Fitted Modula-2 besteht eine Wahlmöglichkeit
- bei der Größe des REAL-Typs. Version 1.x unterstützte nur das
- 4-Byte-Format, mit dem eine Genauigkeit von etwa sieben Stellen
- erreicht wird, während mit dem acht Bytes langen LONGREAL-Format
- etwa 15 bis 16 Stellen möglich sind.
-
- Die Typen {REAL} and LONGREAL sind nicht kompatibel
- und es gibt keinerlei automatische Umwandlung zwischen
- diesen Typen. Stattdessen stehen für diese Umwandlungen
- die Standard-Prozeduren {SHORT} und {LONG} zur Verfügung.
- Konstanten vom Typ LONGREAL unterscheiden sich nicht von
- REAL-Konstanten. Der Typ wird durch den Kontext bestimmt.
- Sie können eine Konstante jedoch durch den Gebrauch der
- SHORT- oder der LONG-Procedure "typisieren".
-
- Beispiel:
- CONST
- longreal1 ═ LONG(1.0);
-
- Für Ein- und Ausgaben steht das Modul {RealInOut},
- für mathematische Opertionen das Modul {LMathLib0:MathLib0}
- zur Verfügung. String-Konvertierungen werden in {RealConversion}
- durchgeführt.
-
- Wertebereich für LONGREAL: 5.0E-324 bis 1.7E308.
-
- Zurück zum {Typen}-Menü.
-
- .topic BITSET
-
- BITSET ▄
- ▀▀▀▀▀▀▀▀▀
-
- Zusammengesetzter Datentyp der ein BYTE aufschlüsselt.
-
- Bitset-Werte werden in geschweiften Klammern geschrieben.
-
- Ein Bitset sind beispielsweise die {FLAGS} oder die
- Dateiattribute des Moduls {Directories}.
-
- Aufgeschüsselt werden Bitsets über eine sehr einfache Abfrage:
-
- IF FLAGS = (carryFlag) THEN ...
-
- Ist nur dann TRUE, wenn das CarryFlag (Bit 0 des Flagregisters)
- gesetzt ist.
-
- Das Flagregister ist in {System:DOSSystem} als
- VAR FLAGS: BITSET definiert.
-
- Zurück zum {Typen}-Menü.
-
- .topic SET
-
- SET ▄
- ▀▀▀▀▀▀
-
- Diese Deklaration vereinbart eine Menge des durch Elemententyp
- angegebenen Typs:
-
- Syntax:
- SET of Elemententyp
-
- Der entsprechende Basistyp muß ordinal sein und darf maximal 256
- verschiedene Werte beinhalten, deren Grenzen innerhalb des Bereichs
- 0..255 liegen müssen.
-
- Über geschweiften Klammern und eine Aufzählung von Ausdrücken
- ist die Definition von Teilbereichen auch innerhalb einer
- Mengen-Deklaration möglich.
-
- () steht hier für eine leere Menge, die mit allen anderen
- Mengentypen kompatibel ist.
-
- Beispiel:
-
- (* Mengen mit ordinalen Basistypen *)
-
- TYPE
- Tag ═ (Son, Mon, Die, Mit, Don, Fre, Sam);
- CharSet ═ SET OF CHAR;
- Tage ═ SET OF Tag;
-
- (* Mengen mit Angaben von Unterbereichen *)
-
- ('0'..'9', 'A'..'Z', 'a'..'z', '_')
- (1, 5, I + 1 .. J - 1)
- (Mon..Fre)
-
- Zurück zum {Typen}-Menü.
-
- .topic POINTER, NIL
-
- POINTER ▄
- ▀▀▀▀▀▀▀▀▀▀
-
- Eine Zeigervariable enthält die Speicheradresse
- einer anderen Variablen des Typs, für den die
- Zeigervariable deklariert wurde.
-
- Mit den folgenden Operationen lassen sich einer
- Zeigervariablen Werte zuordnen:
-
- ■ den Prozeduren {NEW} oder {ALLOCATE}
-
- ■ der Standardprozedur {PTR}
-
- Das reservierte Wort NIL steht für einen
- Zeiger, der "nirgendwohin" zeigt.
-
- Der vordefinierte Datentyp POINTER steht für
- einen untypisierten Zeiger, der mit jedem anderen
- Zeigertyp kompatibel ist.
-
- Beispiele:
-
- (* POINTER Typdeklarationen: *)
-
- TYPE
- BytePtr = POINTER TO BYTE;
- WordPtr = POINTER TO CARDINAL;
- IdentPtr = IdentRec;
- IdentRec = RECORD
- IdentStr: ARRAY [0..15] OF CHAR;
- RefCount: CARDINAL;
- Next: IdentPtr;
- END;
-
- Zurück zum {Typen}-Menü.
-
- .topic PROCEDURE
-
- PROCEDURE ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀
-
- Modula-2 implementiert den Typ PROCEDURE als Zeiger auf eine Prozedur.
-
- Zurück zum {Typen}-Menü.
-
- .topic ReservedWord, ABS, AND, CAP, CHR, DEC, DIV, INC, MOD, NOT, ODD, ORD, VAL, FAR, NEAR, HALT
-
- Reservierte Worte ▄
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Ein Teil der Befehle in Modula gehört zum Sprachumfang und kann auch in
- dem Buch "Programming in Modula-2" von N. Wirth nachgelesen werden.
-
- Hier sind nur die wichtigsten Standardprozeduren und Standardoperatoren
- aufgeführt:
-
- ▄ Prozeduren
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
-
- ABS(x) : Absoluter Wert eines numerischen Operanden x
- CAP(x) : Umwandlung eines Zeichens (x) in seinen Großbuchstaben
- CHR(x) : Das Zeichen {CHAR} mit dem ordinalen Wert x
- DEC(x) : Verkleinere x um 1
- FAR : Adreß-Zuweisung
- HALT : Beendet das Programm
- INC(x) : Vergrößere x um 1
- NEAR : Adress-Zuweisung
- ODD : {TRUE}, falls der ordinale Wert X eine ungerade Zahl ist.
- ORD(X) : Der {CARDINAL}-Wert des Arguments X
- VAL(t,x): Der Wert x konvertiert zum TYP t
-
- ▄ Operatoren
- ▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ╒═════╤══════════════╤══════════════╤══════════════╕
- │ Op. │ INTEGER/CARD.│ REAL │ SET │
- ╞═════╪══════════════╪══════════════╪══════════════╡
- │ + │Addition │Addition │Vereinigung │
- │ - │Subtraktion │Subtraktion │Differenz │
- │ * │Multiplikation│Multiplikation│Durchschnitt │
- │ / │ --- │Division │ --- │
- │ DIV │Division │ --- │ --- │
- │ MOD │Modulo │ --- │ --- │
- ╘═════╧═════════════════════════════╧══════════════╛
-
- Diese relationalen Operatoren liefern als Ergebnistyp BOOLEAN:
-
- ╒═════╤══════════════════════╕
- │ Op. │ Operation │
- ╞═════╪══════════════════════╡
- │ = │gleich │
- │<> # │ungleich │
- │ < │kleiner als │
- │ > │größer als │
- │ <= │kleiner oder gleich │
- │ >= │größer oder gleich │
- ╞═════╪══════════════════════╡
- │ IN │"Element von". TRUE, │
- │ │wenn der linke Operand│
- │ │(ordinaler Typ) in der│
- │ │Menge auf der rechten │
- │ │Seite enthalten ist; │
- │ │FALSE, falls nicht. │
- ╘═════╧══════════════════════╛
-
-
- Zurück zum {Index}, Ende mit ESC
-
- .TOPIC IDECopyright
-
- M2IDE für Fitted Modula-2 Version 2.0
- ╚═══════════════════════════════════════╝
-
- Copyright 1991 (C) DMV - Daten- & Medien-Verlag, Eschwege
- Programm von W. Rinke, Hilfetexte von J. Braun
- geschrieben mit Turbo Pascal(R) 6.0 und TurboVision(R)
- letzte Änderungen: 29.08.91
- Ein Projekt der toolbox(R)
-