| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- IMPLEMENTATION MODULE PrinterUtils;
- (*
- * ModBase
- * Release 3.0
- * (c) Copyright 1986 - 1991 PMI
- * P.O. Box 8402
- * Green Bay Wi 53308
- * All Rights Reserved
- * by Ed Ross
- *)
- FROM SYSTEM IMPORT BYTE,ADR;
- FROM DateFunctions IMPORT Date,DateToStr;
- FROM StrConv IMPORT RealToStr,CardinalToStr,IntegerToStr,LongIntegerToStr;
- FROM StringIO IMPORT WriteEol;
- FROM M2Strings IMPORT Length,Assign;
- FROM StrEdit IMPORT Center,RightJustify,CrunchBlanks,Append,MakeCurrency;
- FROM Storage IMPORT ALLOCATE,DEALLOCATE;
- FROM NumTypes IMPORT Real8;
- FROM LowLevel IMPORT Fill;
- TYPE DisplayLine = POINTER TO DisplayRec;
- DisplayRec = RECORD
- Str : POINTER TO ARRAY[0..300] OF CHAR;
- NbrBytes : CARDINAL;
- END;
- PROCEDURE OverWrite(obj : ARRAY OF CHAR; VAR targ : ARRAY OF CHAR; Pos : CARDINAL);
- VAR
- J : CARDINAL;
- K : CARDINAL;
- BEGIN
- K := Length(obj) + Pos;
- IF K > Length(targ)
- THEN K := Length(targ)
- ELSE K := Length(obj)
- END;
- FOR J := 0 TO Length(obj) -1 DO
- targ[Pos + J] := obj[J];
- END;
- END OverWrite;
- PROCEDURE SetupDisplayLine(VAR PL : DisplayLine; NbrOfCols:CARDINAL);
- BEGIN
- ALLOCATE(PL,SIZE(PL^));
- PL^.NbrBytes := NbrOfCols + 2;
- ALLOCATE(PL^.Str,PL^.NbrBytes);
- ClearDisplayLine(PL);
- END SetupDisplayLine;
- PROCEDURE RemoveDisplayLine(VAR PL : DisplayLine);
- BEGIN
- DEALLOCATE(PL^.Str,PL^.NbrBytes);
- DEALLOCATE(PL,SIZE(PL^));
- PL := NIL;
- END RemoveDisplayLine;
- PROCEDURE AddPrintElemt(VAR PL: DisplayLine; elemt: ARRAY OF BYTE; PT : CHAR;
- ColNbr, NbrCols : CARDINAL; Justification : CHAR);
- TYPE
- DTypes = RECORD
- CASE : CHAR OF
- 'R' : R : Real8;
- |'I' : I : INTEGER;
- |'L' : L : LONGINT;
- |'C' : C : CARDINAL;
- |'D' : D : Date;
- |'S' : S : ARRAY[0..300] OF CHAR; (* string *)
- |'$' : Dollar : Real8; (* Prefix with $ dollar type *)
- |'%' : Percent :Real8; (* percent type suffix with '%'*)
- END;
- END;
- CharSet = SET OF CHAR;
- VAR
- P : POINTER TO DTypes;
- S : ARRAY [0..300] OF CHAR;
- ok : BOOLEAN;
- BEGIN
- P := ADR(elemt);
- P^.S[NbrCols] :=0C;
- CASE PT OF (* first go through the conversions *)
- 'R','%','$' : RealToStr(P^.R,2,NbrCols,S);
- |'I' : IntegerToStr(P^.I,NbrCols,S);
- |'C' : CardinalToStr(P^.C,NbrCols,S);
- |'L' : LongIntegerToStr(P^.L,NbrCols,S);
- |'D' : DateToStr(P^.D,S,ok);
- IF NOT ok
- THEN S:= '?????'
- END;
- END;
- IF PT IN CharSet{'R','I','C','L','D','%'}
- THEN
- Assign( S,P^.S);
- END;
- IF PT = '%'
- THEN Append(P^.S,'%');
- ELSIF PT = 'R'
- THEN
- MakeCurrency('$',P^.S);
- Assign( P^.S,S); (* kluge here *)
- RightJustify(S,NbrCols);
- Assign(S,P^.S );
- END;
- CASE Justification OF
- 'C' : Center(P^.S,NbrCols);
- |'R' : RightJustify(P^.S,10);
- END;
- OverWrite(P^.S,PL^.Str^,ColNbr);
- S := S; (* debug stop *)
- END AddPrintElemt;
-
- PROCEDURE PrintDisplayLine(PL : DisplayLine; Handle : CARDINAL);
- BEGIN
- WriteEol(Handle,PL^.Str^);
- END PrintDisplayLine;
- PROCEDURE GetDisplayLine(PL : DisplayLine; VAR Display : ARRAY OF CHAR);
- BEGIN
- Assign(PL^.Str^,Display );
- END GetDisplayLine;
- PROCEDURE ClearDisplayLine(VAR PL : DisplayLine);
- BEGIN
- Fill(ADR(PL^.Str^),PL^.NbrBytes-1,' ');
- PL^.Str^[PL^.NbrBytes-1] := CHR(0);
- END ClearDisplayLine;
- END PrinterUtils.
|