MODULE CVTHEX;   (*$VER 1.0*)  (*$HDR -1*)

(* converts a binary file to hex inline statements for Modula-2 *)


FROM ASCII IMPORT EOL;
FROM Streams IMPORT ConnectStream, DisconnectStream, BinaryStream, Stream,
 TextStream, InputStream, OutputStream, ReadWord, WriteStr,WriteChar;
FROM Conversions IMPORT HexToString;
FROM Terminal IMPORT WriteString, WriteLn, ReadString,Write;
FROM BreakLib IMPORT CheckBreak;

VAR
 i,w,res,outres: CARDINAL;
 s: ARRAY [0..11] OF CHAR;
 in,out: ARRAY [0..33] OF CHAR;
 is,os: Stream;
 done: BOOLEAN;

BEGIN
 WriteString("Convert Binary File to Hex Inline Statements");
 WriteLn; WriteLn;

 WriteString("Input File: ");
 ReadString(in);
 WriteString("Output File: ");
 ReadString(out);
 WriteLn;

 ConnectStream(is,in,BinaryStream,InputStream,res);
 IF res = 0 THEN
   ConnectStream(os,out,TextStream,OutputStream,outres);
   IF res = 0 THEN

     ReadWord(is,w,res);
     WHILE (res = 0) & NOT (CheckBreak()) DO
       i := 0;
       WriteStr(os,'  INLINE(',outres);
       Write('.');
       REPEAT
         HexToString(w,s,5,done);
         WriteStr(os,s,outres);
         ReadWord(is,w,res);
         IF (i = 4) OR (res # 0) THEN
            WriteStr(os,'H',outres);
         ELSE
            WriteStr(os,'H,',outres);
         END;
         INC(i);
       UNTIL (res # 0) OR (i = 5) OR (CheckBreak());
       WriteStr(os,');',outres);
       WriteChar(os,EOL,outres);
     END;
     DisconnectStream(is,res);
     DisconnectStream(os,outres);
   ELSE
     WriteString("%Cannot open output file.");
   END;
 ELSE
   WriteString("%Cannot open input file.");
 END;
 WriteLn;
END CVTHEX.