|##########| |#MAGIC #|CLABLLHC |#PROJECT #|"ImportAll" |#PATHS #|"StdProject" |#FLAGS #|xx---x--x---x-x----------------- |#USERSW #|-------------------------------- |#USERMASK#|-------------------------------- |#SWITCHES#|xx---xxxxx------ |##########| |==============================================================================| | Modul : InOut | | Autor : Thomas Pfrengle | | Datum : 10.10 991 | | Verwendung : Ausgabe von Strings, Zeichen und Zahlen auf einen Strom | | Änderungen : - | |==============================================================================| DEFINITION MODULE InOut; (* $ A- *) FROM Streams IMPORT Stream,Termination; FROM ASCII IMPORT cr,lf,eof,sp,ff; | Alle Prozeduren in diesem Modul haben einen Handle als Parameter, der | zu den Handlen aus dem Modul Streams kompaltibel ist. Man kann hier also einen | eigenen Stream übergeben, den man mit Streams geöffnet hat. Übergibt man | keinen Handle, wird der aktuelle Standartstrom aus Streams genommen, existiert | noch keiner, wird ein Standart-ConsoleWindow als Stream geöffnet. VAR Return : BOOLEAN:=TRUE; | Gibt an, ob am Programmende auf ein | Return gewartet wird Sandardeinstellung. GROUP ParamGrp = Return; | | OpenInput : Dient dazu den Standarteingabekanal (normalerweise das | NewCon-Window) auf ein anderes Gerät, oder eine Datei | umzulegen, der Name des Gerätes/Files steht in name. | OpenOutput : Wie OpenInPut, jedoch für den Ausgabekanal. | | CloseInput, | CloseOutPut : Einen selbst geöffneten Ein/Ausgabekanal sollte man mit | diesen Prozeduren am Programmende wieder schließen. Als | Standardkanal gilt nach dem schließen, der zuletzt aktive | Standardstrom | PROCEDURE OpenInput(REF name : STRING); PROCEDURE CloseInput; PROCEDURE OpenOutput(REF name : STRING); PROCEDURE CloseOutput; GROUP RedirectionGrp = OpenInput,CloseInput,OpenOutput,CloseOutput; | | Style : Aufzählungstyp mit verschiedenen Schriftformen, | die mit SetStyle gesetzt werden können. | normal : Normale Schrift | italic : Kursive Schrift | undelined : Unterstrichen | bold : Fettdruck | invers : Invertierte Ausgabe | | SetStyle : Setzt einen der Schreibstile aus dem Aufzählungstyp Style. | | ClearStyle : Setzt den Standartschreibstil. | | SetColor : Setzt Vordergrund- (foreground) und Hintergrundfarbe | (background). | ClearWindow: Löscht Ausgabefenster. TYPE Style = (normal,italic,underlined,bold,invers); PROCEDURE SetStyle(style : Style;handle : Stream:=NIL); PROCEDURE ClearStyle(handle : Stream:=NIL); PROCEDURE SetColor(foreground,background : SHORTINT;handle : Stream:=NIL); PROCEDURE ClearWindow(handle : Stream:=NIL); GROUP StyleGrp = SetStyle,ClearStyle,SetColor,ClearWindow; | | AUFGABE : Gibt ein Zeichen aus. | PARAMETER : c <= Zeichen das ausgegeben werden soll | BEMERKUNGEN : Ist c=&10 und WriteLnBuffer ist TRUE, dann wird der Puffer| | ausgegeben, wenn einer vorhanden ist. PROCEDURE Write(c : CHAR;handle : Stream:=NIL); | | AUFGABE : Gibt eine Zeichenkette aus | PARAMETER : s <= String der ausgegeben werden soll | BEMERKUNGEN : Ist &10 im String enthalten und WriteLnBuffer ist TRUE, | dann wird der Puffer ausgegeben, wenn einer vorhanden ist.| | WriteMString gibt einen Modula-String aus. PROCEDURE WriteString(REF s : STRING;handle : Stream:=NIL); PROCEDURE WriteMString(REF s : ARRAY OF CHAR;handle : Stream:=NIL); | | AUFGABE : Wie WriteString, jedoch wird vor dem String noch ein Esc | ausgegeben. | PARAMETER : s <= String der ausgegeben werden soll | BEMERKUNGEN : Besonders für Esc-Sequencen zur Druckersteuerung zu ge- | brauchen, sonst wie bei WriteString PROCEDURE WriteEsc(REF s : STRING;handle : Stream:=NIL); | | AUFGABE : Führt einen Zeilenvorschub durch. | PARAMETER : Keine. | BEMERKUNGEN : Ist WriteLnBuffer TRUE, wird der Puffer ausgegeben, sofern | die Ausgabe gepuffert ist. | PROCEDURE WriteLn(handle : Stream:=NIL); | | AUFGABE : Gibt den Puffer aus, wenn keiner existiert, entsteht ein | Laufzeitfehler. | PARAMETER : Keine. | BEMERKUNGEN : Keine. PROCEDURE WriteBuffer(handle : Stream:=NIL); | | AUFGABE : Ausgabe einer Integerzahl. | PARAMETER : val <= Zahl die Ausgegeben werden soll. | field <= Größe des Feldes, in dem die Zahl positioniert | werden soll. | BEMERKUNGEN : Ist field = 0 wird die Zahl in einem genau passenden Feld | positioniert. Ist field > 0 wird die Zahl rechtsbündig, | für field < 0 linksbündig angeordnet. PROCEDURE WriteInt(val : LONGINT; field : INTEGER:=0; handle : Stream:=NIL); | | AUFGABE : Gibt eine Integerzahl als Hexwert aus, sonst wie WriteInt. | PARAMETER : val <= Ausgabewert. | field <= Feldgröße. | dollar <= Gibt an, ob ein "$" vor die Zahl gesetzt werden soll | BEMERKUNGEN : Keine. | PROCEDURE WriteHex(val : LONGINT; field : INTEGER:=0; dollar : BOOLEAN:=FALSE; handle : Stream:=NIL); | | AUFGABE : Gibt eine Integerzahl als Binärzahl aus, sonst wie WriteInt. | PARAMETER : val <= Ausgabewert. | field <= Feldgröße. | sign <= Gibt an, ob ein "%" vor die Zahl gesetzt werden soll | BEMERKUNGEN : Keine. | PROCEDURE WriteBin(val : LONGINT; field : INTEGER:=0; sign : BOOLEAN:=FALSE; handle : Stream:=NIL); | | AUFGABE : Ausgabe einer Cardinalzahl. | PARAMETER : val <= Zahl die Ausgegeben werden soll. | field <= Größe des Feldes, in dem die Zahl positioniert | werden soll. | BEMERKUNGEN : Ist field = 0 wird die Zahl in einem genau passenden Feld | positioniert. Ist field > 0 wird die Zahl rechtsbündig, | für field < 0 linksbündig angeordnet. PROCEDURE WriteCard(val : LONGCARD;field: INTEGER:=0;handle : Stream:=NIL); | | AUFGABE : Gibt eine Cardinalzahl als Hexwert aus, sonst wie WriteCard. | PARAMETER : val <= Ausgabewert. | field <= Feldgröße. | dollar <= Gibt an, ob ein "$" vor die Zahl gesetzt werden soll | BEMERKUNGEN : Keine. | PROCEDURE WriteCardHex(val : LONGCARD; field : INTEGER:=0; dollar : BOOLEAN:=FALSE; handle : Stream:=NIL); | | AUFGABE : Gibt eine Cardinalzahl als Binärzahl aus, sonst wie WriteCard. | PARAMETER : val <= Ausgabewert. | field <= Feldgröße. | sign <= Gibt an, ob ein "%" vor die Zahl gesetzt werden soll | BEMERKUNGEN : Keine. | PROCEDURE WriteCardBin(val : LONGCARD; field : INTEGER:=0; sign : BOOLEAN:=FALSE; handle : Stream:=NIL); | | AUFGABE : Ausgabe einer Fließkommazahl. | PARAMETER : val <= Ausgabewert. | field <= Ausgabefeld, in dem die Zahl kommabündig | positioniert wird. | digits <= Zahl der auszugebenden Nachkommastellen. | BEMERKUNGEN : Keine. PROCEDURE WriteReal(val : LONGREAL; field, digits : CARDINAL; handle : Stream:=NIL); | | AUFGABE : Ausgabe einer Fließkommazahl in Exponetialdarstellung. | PARAMETER : val <= Ausgabewert. | digits <= Zahl der auszugebenden Nachkommastellen. | BEMERKUNGEN : Zahl wird linksbündig ausgegeben. PROCEDURE WriteExpReal(val : LONGREAL; digits: CARDINAL; handle : Stream:=NIL); GROUP WriteGrp = WriteString,WriteMString,WriteEsc,WriteLn,WriteBuffer,WriteInt, WriteHex,WriteReal,WriteExpReal,Write; | | AUFGABE : Liest ein Zeichen ein. | PARAMETER : c => Gelesenes Zeichen. | BEMERKUNGEN : Keine. PROCEDURE Read(VAR c :CHAR;handle : Stream:=NIL); | | AUFGABE : Liest einen Boolwert ein. | PARAMETER : => gelesener Boolwert. | BEMERKUNGEN : Siehe Handbuch. PROCEDURE ReadBool(handle : Stream:=NIL;returnEqualTrue : BOOLEAN:=FALSE):BOOLEAN; | | AUFGABE : Liest einen String ein. | PARAMETER : s => eingelesener String. | BEMERKUNGEN : Siehe Handbuch. | : ReadMString liest einen Modula-String ein. PROCEDURE ReadString(VAR s : STRING;terms := Termination:(sp,lf,cr,ff,eof,eof,eof,eof);handle : Stream:=NIL); PROCEDURE ReadMString(VAR s : ARRAY OF CHAR;terms:= Termination:(sp,lf,cr,ff,eof,eof,eof,eof);handle : Stream:=NIL); | | AUFGABE : Die folgenden Read-Prozeduren lesen alle einen Zahlenwert | ein. | PARAMETER : val => gelesener Wert vom jeweiligen Typ von val. | BEMERKUNGEN : Die Zahl wird bis zum ersten Auftreten einer Nichtziffer | ausgwertet. Gibt man vor der Zahl ein `$` an, wird die | darauffolgende Zahl als Hex-Zahl ausgewertet, durch ein `%` | wird sie als Binärzahl verstanden. Dies funktioniert nicht bei | ReadReal,ReadFFP,ReadLongReal. Drückt man als Eingabe nur auf Return, | wird die übergebene Variable nicht verändert PROCEDURE ReadShortInt(VAR val : SHORTINT;handle : Stream:=NIL); PROCEDURE ReadInt(VAR val : INTEGER;handle : Stream:=NIL); PROCEDURE ReadLongInt(VAR val : LONGINT;handle : Stream:=NIL); PROCEDURE ReadShortCard(VAR val : SHORTCARD;handle : Stream:=NIL); PROCEDURE ReadCard(VAR val : CARDINAL;handle : Stream:=NIL); PROCEDURE ReadLongCard(VAR val : LONGCARD;handle : Stream:=NIL); PROCEDURE ReadReal(VAR val : REAL;handle : Stream:=NIL); PROCEDURE ReadFFP(VAR val : FFP;handle : Stream:=NIL); PROCEDURE ReadLongReal(VAR val : LONGREAL;handle : Stream:=NIL); GROUP ReadGrp = Read,ReadBool,ReadString,ReadMString,ReadShortInt,ReadInt, ReadLongInt,ReadShortCard,ReadCard,ReadLongCard,ReadReal,ReadFFP, ReadLongReal; StreamGrp = Streams.ExceptionGrp,Streams.GlobalGrp; All = ParamGrp,WriteGrp,StyleGrp,ReadGrp,StreamGrp,RedirectionGrp; END InOut.