DEFINITION MODULE KermMisc;
(************************************************************************)
(*  This Module contains several service routines                       *)
(*  written:            08.10.85     Matthias Aebi                      *)
(*  last modification:  13.03.86     Matthias Aebi                      *)
(************************************************************************)

FROM KermParam IMPORT Packet;

EXPORT QUALIFIED ClrScr, GotoXY, SendChar, RecvChar, SendBreak, WriteChar,
                 InitPort, SetBaud, ReadChar, AddBits, BitAND, BitOR,
                 BitXOR, PrtErrPacket, ToChar, UnChar, Ctl, IncPackNum,
                 DecPackNum, ReadString, DispInit, DispFile, DispTry,
                 DispPack, DispMsg, StringToCard, CardToString;

PROCEDURE ClrScr;
(* Clear Screen / Window and position cursor in upper left corner *)

PROCEDURE GotoXY(x,y: INTEGER);
(* Move cursor to position x,y on the screen / working window *)

PROCEDURE SendChar(ch: CHAR; portNr: CARDINAL);
(* Send ch trough specified port *)

PROCEDURE RecvChar(VAR ch: CHAR; portNr: CARDINAL): BOOLEAN;
(* Receve ch from specified port. Busy read, TRUE if got char *)

PROCEDURE ReadChar(VAR ch: CHAR): BOOLEAN;
(* Receive ch from console. Busy read, TRUE if got char *)

PROCEDURE ReadString(VAR s: ARRAY OF CHAR);
(* Receive a string from console (terminated by CR) *)
(* Return empty string if ESC was pressed *)

PROCEDURE InitPort(portNr: CARDINAL);
(* Init specified port *)

PROCEDURE SetBaud(baudRate: CARDINAL; portNr: CARDINAL);
(* Set baudRate on specified port *)

PROCEDURE SendBreak(portNr: CARDINAL);
(* Send a Break through specified port *)

PROCEDURE WriteChar(ch: CHAR);
(* Write ch and ORD(ch). Control characters are prefixed by ^ *)

PROCEDURE AddBits(ch: CHAR): CARDINAL;
(* Count the number of 1-Bits in Character (needed for Parity) *)

PROCEDURE BitAND(v1,v2: CARDINAL): CARDINAL;
(* AND Bits in v1 and v2 *)

PROCEDURE BitOR(v1,v2: CARDINAL): CARDINAL;
(* OR Bits in v1 and v2 *)

PROCEDURE BitXOR(v1,v2: CARDINAL): CARDINAL;
(* XOR Bits in v1 and v2 *)

PROCEDURE PrtErrPacket(pack: Packet; len: CARDINAL);
(* print the error message received *)

PROCEDURE ToChar(value: CARDINAL): CHAR;
(* convert number to printable ASCII *)

PROCEDURE UnChar(ch: CHAR): CARDINAL;
(* convert printable ASCII to number *)

PROCEDURE Ctl(ch: CHAR): CHAR;
(* make control character printable & reverse *)

PROCEDURE IncPackNum(packNum: CARDINAL): CARDINAL;
(* return (packNum + 1) MOD 64 *)

PROCEDURE DecPackNum(packNum: CARDINAL): CARDINAL;
(* return (packNum - 1) MOD 64 *)

PROCEDURE DispInit;
(* initialize Send / Recv status display Screen *)

PROCEDURE DispTry;
(* Display total number of retries and increment by one *)

PROCEDURE DispPack;
(* Display total number of packets and increment by one *)

PROCEDURE DispFile(fileName: ARRAY OF CHAR);
(* Display the current Filename *)

PROCEDURE DispMsg(message: ARRAY OF CHAR);
(* Display a message in the status screen *)

PROCEDURE StringToCard(str: ARRAY OF CHAR; VAR num: CARDINAL): BOOLEAN;
(* convert a numeric string to cardinal. Return TRUE if successful *)

PROCEDURE CardToString(num: CARDINAL; VAR str: ARRAY OF CHAR);
(* convert a cardinal to a numeric string. Return TRUE if successful *)

END KermMisc.

.
