DEFINITION MODULE FormAusLib;
(*------------------------------------------------------------------------*)
(* [DE] Routinen die gemeinsam von {T|F|S}FormAus genutzt werden. *)
(* *)
(* Der Parameter "Laenge" gibt jeweils die Anzahl uebergebener Bytes an *)
(* wenn nicht explizit etwas anderes in der Prozedurebeschreibung ange- *)
(* geben ist. *)
(* *)
(* [EN] Routines used by {T|F|S}FormAus. NOT for direct use !!! *)
(* *)
(* The parameter "Laenge" defines the number of bytes handed over in all *)
(* procedures if not explicitly describes having another meaning *)
(*------------------------------------------------------------------------*)
(* Implementation : Michael Riedl *)
(* Licence : GNU Lesser General Public License (LGPL) *)
(*------------------------------------------------------------------------*)
(* $Id: FormAusLib.def,v 1.5 2018/06/09 08:22:43 mriedl Exp mriedl $ *)
FROM SYSTEM IMPORT BYTE;
FROM Deklera IMPORT STRING;
TYPE StrPrt = POINTER TO STRING;
PROCEDURE WrByteStr(Str : ARRAY OF BYTE; (* F"ur Mocka *)
Laenge : CARDINAL);
(*-----------------------------------------------------------------*)
(* Schreibt eine als BYTE-Feld uebergebene Zeichenkette auf den *)
(* Standardausgebekanal *)
(* *)
(* Write a string handed over as an BYTE-array to standart output *)
(*-----------------------------------------------------------------*)
PROCEDURE WrByteStrN(Str : ARRAY OF BYTE; (* F"ur Mocka *)
Laenge : CARDINAL);
(*-----------------------------------------------------------------*)
(* Schreibt eine als BYTE-Feld uebergebene Zeichenkette auf den *)
(* Standardausgebekanal. Dabei wird "Laenge" als fixe Breite der *)
(* der ausgegebenen Zeichenkette (rechtsbuendig) genutzt (siehe *)
(* TIO.WrStrForm) *)
(* *)
(* Write a string handed over as an BYTE-array to standart output *)
(* with a fixed length given in "Laenge" and right orientation. *)
(* See TIO.WrStrForm for more details (Laenge is handed over as *)
(* negative integer to WrStrForm). *)
(*-----------------------------------------------------------------*)
PROCEDURE ByteToStr(Str : ARRAY OF BYTE;
Laenge : CARDINAL) : StrPrt;
(*-----------------------------------------------------------------*)
(* Konvertiert eine als BYTE-Feld uebergebene Zeichenkette in *)
(* einen Zeiger auf ein Zeichenkettenfeld (ARRAY OF CHAR) *)
(* *)
(* Converts a string handed over as an BYTE-array to a pointer to *)
(* an array of characters *)
(*-----------------------------------------------------------------*)
PROCEDURE ByteToInt(i : ARRAY OF BYTE;
Laenge : CARDINAL) : INTEGER;
(*-----------------------------------------------------------------*)
(* Konvertiert eine als BYTE-Feld uebergebene vorzeichenbehatete *)
(* Ganzzahl in eine INTEGER. *)
(* *)
(* Converts a integer value handed over as an arry of byte to a *)
(* "propper" integer. *)
(*-----------------------------------------------------------------*)
PROCEDURE ByteToCard(i : ARRAY OF BYTE;
Laenge : CARDINAL) : CARDINAL;
(*-----------------------------------------------------------------*)
(* Konvertiert eine als BYTE-Feld uebergebene nicht vorzeichen- *)
(* behafete Ganzzahl in eine CARDINAL. *)
(* *)
(* Converts a cardinal value handed over as an arry of byte to a *)
(* "propper" cardinal. *)
(*-----------------------------------------------------------------*)
PROCEDURE ByteToLngCard(i : ARRAY OF BYTE;
Laenge : CARDINAL) : LONGCARD;
(*-----------------------------------------------------------------*)
(* Konvertiert eine als BYTE-Feld uebergebene nicht vorzeichen- *)
(* behafete Ganzzahl in eine LINGCARD. Wenn Laenge nicht zu einer *)
(* LONGCARD passt wird MAX(LONGCARD) zurueckgegeben. *)
(* *)
(* Converts a real value handed over as an arry of byte to a *)
(* "propper" long cardinal. If the parameter "Laenge" does not fit *)
(* to a LONGREAL MAX(LONGREAL) is returned. *)
(*-----------------------------------------------------------------*)
PROCEDURE ByteToLngReal(x : ARRAY OF BYTE;
Laenge : CARDINAL) : LONGREAL;
(*-----------------------------------------------------------------*)
(* Konvertiert eine als BYTE-Feld uebergebene Gleitkommazahl *)
(* in eine LONGREAL. Laenge gibt hier die Anzahl uebergebenen *)
(* BYTEs an und muss fuer den Typ REAL oder LONGREAL passen, *)
(* ansonsten wird IEEE.NAN zurueckgegeben. *)
(* *)
(* Converts a real value handed over as an array of byte to a *)
(* "propper" longreal. The procedure uses the parameter "Laenge" *)
(* to decide if the value x is a REAL or a LONGREAL. *)
(* If x cannot be represented as a IEEE.NAN is returned. *)
(*-----------------------------------------------------------------*)
PROCEDURE PreParseFormat( FmtAlt : ARRAY OF CHAR;
VAR FmtNeu : ARRAY OF CHAR;
VAR done : BOOLEAN);
(*---------------------------------------------------------------*)
(* Ersetzt im ersten Schritt alle vorkommenden "nX" Anweisungen *)
(* durch das intern genutze Format Xn. *)
(* *)
(* Ersetzt im im zweiten Schritt alle vorkommenden "n(fmt)" *)
(* Anweisungen durch fmt,(n-1)*[fmt]. *)
(* *)
(* Beispiel : "36X,2(1X,I2)" wird zu "X36,X1,I2,X1,I2" *)
(* *)
(* Es sind maximal vier Klammern erlaubt und der Wiederholungs- *)
(* faktor kann nur im Intervall 1..9 liegen, was aber in Anbe- *)
(* tracht der Limitation der Anzahl der ausschreibbaren Parmeter *)
(* voellig ausreichend sein sollte. *)
(* *)
(* Replaces occurences of "nX" format instructions by "Xn" and *)
(* then handles bracketed format expressions "n(fmt)" to replace *)
(* them by n time fmt *)
(* *)
(* Sample : "36X,2(1X,I2)" becomes "X36,X1,I2,X1,I2" *)
(* *)
(* The number of brackets is limited to 4 at the moment which *)
(* sould be ok taking the limitation of maximal allowed *)
(* parameter (9) into consideration. *)
(*---------------------------------------------------------------*)
END FormAusLib.