--- a
+++ b/Streams.ISO.mi
@@ -0,0 +1,273 @@
+IMPLEMENTATION MODULE Streams;
+
+  (*------------------------------------------------------------------------*)
+  (* Interface between ISO M2 and Michael Riedls Streams Module             *)
+  (*                                                                        *)
+  (* Letzte Veraenderung:                                                   *)
+  (*                                                                        *)
+  (* 05.02.16, MRi: Erstellen der ersten Version                            *)
+  (* 03.11.17, MRi: Erstellen der ersten Version                            *)
+  (* 13.01.18, MRi: Umstellen von LONGLONGCARD auf CommonIO.FilePtr         *)
+  (*------------------------------------------------------------------------*)
+  (* Offene Punkte:                                                         *)
+  (*                                                                        *)
+  (* - Testen, Testen, Testen                                               *)
+  (* - Get/SetPos eventuell aus FileSystem direkt uebernehmen               *)
+  (*------------------------------------------------------------------------*)
+  (* Licence : GNU Lesser General Public License (LGPL)                     *)
+  (*------------------------------------------------------------------------*)
+
+  (* $Id: Streams.mod,v 1.1 2017/11/03 22:49:37 mriedl Exp $ *)
+
+                  IMPORT SYSTEM;
+                  IMPORT Errors;
+FROM   FileSystem IMPORT File;       (* File ist Platzhalter *)
+(*
+                  IMPORT FileSystem;
+ *)
+                  IMPORT CommonIO; 
+                  IMPORT ChanConsts;
+                  IMPORT IOChan;
+                  IMPORT RndFile;
+                  IMPORT SeqFile;
+                  IMPORT IOResult;
+                  IMPORT IOConsts;
+FROM   ChanConsts IMPORT ChanFlags,   (* readFlag,writeFlag,oldFlag,textFlag *)
+                         OpenResults; (* opened *)
+
+IMPORT TIO;
+
+CONST MaxDateiNamenLaenge =   255; (* _POSIX_PATH_MAX *)
+
+PROCEDURE OpenStream(VAR Str     : Stream;
+                         DatName : ARRAY OF CHAR; (* Dateiname *)
+                         creat   : BOOLEAN);
+
+          VAR flags : ChanConsts.FlagSet;
+              res   : ChanConsts.OpenResults;
+BEGIN
+      flags:=ChanConsts.FlagSet{};
+      IF creat THEN
+        INCL(flags,ChanConsts.writeFlag);
+        INCL(flags,ChanConsts.rawFlag);
+        SeqFile.OpenWrite(Str,DatName,flags,res);
+        IF (res # opened) THEN
+          (* Datei existiert, also oeffnen und abschneiden *)
+          INCL(flags,ChanConsts.oldFlag);
+          SeqFile.OpenWrite(Str,DatName,flags,res);
+          SeqFile.Rewrite(Str);
+        END;
+      ELSE
+        INCL(flags,ChanConsts.textFlag);
+        INCL(flags,ChanConsts.rawFlag);
+        INCL(flags,ChanConsts.readFlag);
+        INCL(flags,ChanConsts.oldFlag);
+        SeqFile.OpenRead(Str,DatName,flags,res);
+      END;
+      IF (res # opened) THEN (* Ausarbeiten ... *)
+        Errors.WriteLn;
+        Errors.WriteString(" *** Datei '");
+        Errors.WriteString(DatName);
+        Errors.WriteString(
+        "' konne nicht geoeffnet werden (Streams.OpenStream) ***");
+        Errors.WriteLn;
+        Errors.WriteLn;
+      END;
+END OpenStream;
+
+PROCEDURE CloseStream(VAR Str : Stream);
+
+BEGIN
+      SeqFile.Close(Str);
+END CloseStream;
+
+PROCEDURE ConnectStream(VAR Str : Stream;
+                            f   : File);
+
+          VAR name : ARRAY [0..MaxDateiNamenLaenge-1] OF CHAR;
+BEGIN
+      IOChan.GetName(f,name);
+      Errors.WriteLn;
+      Errors.WriteString("Streams.ConnectStream not implemented (Stream = ");
+      Errors.WriteString(name);
+      Errors.WriteChar(")");
+      Errors.WriteLn;
+      Errors.WriteLn;
+END ConnectStream;
+
+PROCEDURE CloseAll();
+
+BEGIN
+      Errors.ErrOut("Streams.CloseAll not implemented");
+END CloseAll;
+
+PROCEDURE SetWrite(VAR Str : Stream);
+
+          VAR Name : ARRAY [0..MaxDateiNamenLaenge-1] OF CHAR;
+              pos  : RndFile.FilePos;
+              res  : ChanConsts.OpenResults;
+BEGIN
+      IOChan.GetName(Str,Name);
+(***
+      Errors.WriteLn;
+      Errors.WriteString("Streams.SetWrite not implemented (Stream = ");
+      Errors.WriteString(name);
+      Errors.WriteChar(")");
+      Errors.WriteLn;
+      Errors.WriteLn;
+ ***)
+      IOChan.GetName(Str,Name);
+      pos := RndFile.CurrentPos(Str);
+      SeqFile.Close(Str);
+      SeqFile.OpenWrite(Str,Name,SeqFile.write,res);
+      RndFile.SetPos(Str,pos);
+END SetWrite;
+
+PROCEDURE SetRead(VAR Str : Stream);
+
+          VAR Name : ARRAY [0..MaxDateiNamenLaenge-1] OF CHAR;
+              pos  : RndFile.FilePos;
+              res  : ChanConsts.OpenResults;
+BEGIN
+      IOChan.GetName(Str,Name);
+      Errors.WriteLn;
+      Errors.WriteString("Streams.SetRead not implemented (Stream = ");
+      Errors.WriteString(Name);
+      Errors.WriteChar(")");
+      Errors.WriteLn;
+      Errors.WriteLn;
+(***
+      IOChan.GetName(Str,Name);
+      pos := RndFile.CurrentPos(Str);
+      SeqFile.Close(Str);
+      SeqFile.OpenRead(Str,Name,SeqFile.read,res);
+      RndFile.SetPos(Str,pos);
+ ***)
+END SetRead;
+
+PROCEDURE ReWrite(VAR Str : Stream);
+
+BEGIN
+      SeqFile.Rewrite(Str); (* Geht das gut ??? *)
+END ReWrite;
+
+(* 
+ * PROCEDURE Append(VAR Datei : Stream);
+ * 
+ *           (*----------------------------------------------------------------*)
+ *           (* Versetzt die ge"offnete Datei Datei in Schreibmodus und stellt *)
+ *           (* den Dateizeiger an das Dateiende.                              *)
+ *           (*----------------------------------------------------------------*)
+ * 
+ * BEGIN (* Mu3 noch installiert werden ! *)
+ * END Append;
+ *)
+
+PROCEDURE WriteBuffer(VAR Str : Stream);
+
+BEGIN
+      IOChan.Flush(Str);
+END WriteBuffer;
+
+PROCEDURE ReSet(VAR Str : Stream);
+
+BEGIN
+       IOChan.Reset(Str);
+END ReSet;
+
+PROCEDURE GetPos(VAR Str : Stream;
+                 VAR Pos : LONGCARD);
+
+          VAR pos : RndFile.FilePos;
+              pt  : POINTER TO CommonIO.FilePrt;
+BEGIN
+      pos:=RndFile.CurrentPos(Str);
+      pt:=SYSTEM.ADR(pos);
+      Pos:=VAL(LONGCARD,pt^);
+END GetPos;
+
+PROCEDURE SetPos(VAR Str : Stream;
+                     Pos : LONGCARD);
+
+          VAR pos  : RndFile.FilePos;
+              apos : POINTER TO RndFile.FilePos;
+              ptll : POINTER TO CommonIO.FilePrt;
+              pll  : CommonIO.FilePrt;
+BEGIN
+      (* Holla die Waldfee - schaut hier bitte nicht hin ... *)
+      (* alles durch die gaaaanz kalte Kueche.               *)
+      pos:=RndFile.StartPos(Str);
+      ptll:=SYSTEM.ADR(pos);
+      ptll^:=ptll^ + VAL(CommonIO.FilePrt,Pos);
+      pll:=ptll^;
+      apos:=SYSTEM.ADR(pll);
+      RndFile.SetPos(Str,apos^);
+END SetPos;
+
+PROCEDURE IsEOL(str : Stream) : BOOLEAN;
+
+          VAR res : IOConsts.ReadResults;
+BEGIN
+      res := IOResult.ReadResult(str);
+      IF (res = IOConsts.endOfLine) THEN
+        RETURN TRUE;
+      ELSE
+        RETURN FALSE;
+      END;
+END IsEOL;
+
+PROCEDURE IsEOF(str : Stream) : BOOLEAN;
+
+          VAR res : IOConsts.ReadResults;
+BEGIN
+      res := IOResult.ReadResult(str);
+      IF (res = IOConsts.endOfInput) THEN
+        RETURN TRUE;
+      ELSE
+        RETURN FALSE;
+      END;
+END IsEOF;
+
+PROCEDURE GetChar(VAR Datei : Stream;
+                  VAR Char  : CHAR);
+
+          VAR i : CARDINAL;
+              Name : ARRAY [0..MaxDateiNamenLaenge-1] OF CHAR;
+              ch: CHAR; 
+              res: IOConsts.ReadResults;
+BEGIN
+(*
+      IOChan.RawRead(Datei,SYSTEM.ADR(Char),1,i);
+      IF IsEOL(Datei) THEN
+        Char := CommonIO.EoL; 
+      ELSIF IsEOF(Datei) THEN
+        Char := CommonIO.EoF;
+      ELSIF (i # 1) THEN
+        IOChan.GetName(Datei,Name);
+        Errors.WriteString(" *** Lesefehler auf Datei '");
+        Errors.WriteString(Name);
+        Errors.WriteString("' in Streams.GetChar ***");
+        Errors.WriteLn;
+      END;
+      (* Schau nach ob wir am Ende der Datei angekommen sind ... *)
+      IOChan.Look(Datei,ch,res);
+ *)
+      IOChan.Look(Datei,Char,res);
+      IF (res = IOConsts.allRight) THEN
+        IOChan.Skip(Datei);
+      ELSIF (res = IOConsts.endOfLine) THEN
+        Char := CommonIO.EoL; 
+        IOChan.Skip(Datei);
+      ELSIF (res = IOConsts.endOfInput) THEN
+        Char := CommonIO.EoF;
+        IOChan.SetReadResult(Datei,IOConsts.endOfInput); END;
+END GetChar;
+
+PROCEDURE PutChar(VAR Datei : Stream;
+                      Char  : CHAR);
+
+BEGIN
+      IOChan.RawWrite(Datei,SYSTEM.ADR(Char),1);
+END PutChar;
+
+END Streams.