| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- IMPLEMENTATION MODULE Regis;
- IMPORT ASCII;
- FROM STextIO IMPORT WriteChar, WriteString;
- FROM NumberIO IMPORT WriteCard, WriteInt;
- IMPORT IO, termios, FIO;
- VAR
- savedTerm : termios.TERMIOS;
- flushFlag : INTEGER;
- haveTerm : BOOLEAN;
- PROCEDURE Pair(x, y : CARDINAL); (* [x,y] *)
- BEGIN
- WriteChar("["); WriteCard(x, 1);
- WriteChar(","); WriteCard(y, 1);
- WriteChar("]");
- END Pair;
- PROCEDURE Signed(n : INTEGER); (* +n / -n *)
- BEGIN
- IF n < 0 THEN WriteInt(n, 1);
- ELSE WriteChar("+"); WriteCard(VAL(CARDINAL, n), 1);
- END;
- END Signed;
- PROCEDURE PairRel(dx, dy : INTEGER); (* [+dx,-dy] *)
- BEGIN
- WriteChar("["); Signed(dx);
- WriteChar(","); Signed(dy);
- WriteChar("]");
- END PairRel;
- PROCEDURE Enter; (* DCS 1 p *)
- BEGIN
- WriteChar(ASCII.esc); WriteChar("P"); WriteString("1p");
- END Enter;
- PROCEDURE EnterResume; (* DCS p *)
- BEGIN
- WriteChar(ASCII.esc); WriteChar("P"); WriteChar("p");
- END EnterResume;
- PROCEDURE Exit; (* ST *)
- BEGIN
- WriteChar(ASCII.esc); WriteChar("\");
- END Exit;
- PROCEDURE ScreenErase;
- BEGIN WriteChar("S"); WriteString("(E)"); END ScreenErase;
- PROCEDURE AddressWindow(x0, y0, x1, y1 : CARDINAL);
- BEGIN
- WriteChar("S"); WriteString("(A");
- Pair(x0, y0); Pair(x1, y1);
- WriteChar(")");
- END AddressWindow;
- PROCEDURE MoveTo(x, y : CARDINAL);
- BEGIN WriteChar("P"); Pair(x, y); END MoveTo;
- PROCEDURE MoveRel(dx, dy : INTEGER);
- BEGIN WriteChar("P"); PairRel(dx, dy); END MoveRel;
- PROCEDURE LineTo(x, y : CARDINAL);
- BEGIN WriteChar("V"); Pair(x, y); END LineTo;
- PROCEDURE LineRel(dx, dy : INTEGER);
- BEGIN WriteChar("V"); PairRel(dx, dy); END LineRel;
- PROCEDURE Dot;
- BEGIN WriteChar("V"); WriteString("[]"); END Dot;
- PROCEDURE Rect(x0, y0, x1, y1 : CARDINAL);
- BEGIN
- WriteChar("P"); Pair(x0, y0);
- WriteChar("V"); Pair(x1, y0);
- WriteChar("V"); Pair(x1, y1);
- WriteChar("V"); Pair(x0, y1);
- WriteChar("V"); Pair(x0, y0);
- END Rect;
- PROCEDURE Circle(edgeX, edgeY : CARDINAL);
- BEGIN WriteChar("C"); Pair(edgeX, edgeY); END Circle;
- PROCEDURE CircleCenter(cx, cy : CARDINAL);
- BEGIN WriteChar("C"); WriteString("(C)"); Pair(cx, cy); END CircleCenter;
- PROCEDURE Arc(degrees : INTEGER; x, y : CARDINAL);
- BEGIN
- WriteChar("C"); WriteString("(A"); WriteInt(degrees, 1);
- WriteChar(")"); Pair(x, y);
- END Arc;
- PROCEDURE FillTriangle(x1, y1, x2, y2 : CARDINAL);
- BEGIN
- WriteChar("F"); WriteString("(V");
- Pair(x1, y1); Pair(x2, y2);
- WriteChar(")");
- END FillTriangle;
- PROCEDURE TextOut(s : ARRAY OF CHAR);
- BEGIN WriteChar("T"); WriteChar("'"); WriteString(s); WriteChar("'"); END TextOut;
- PROCEDURE TextSize(n : CARDINAL);
- BEGIN WriteChar("T"); WriteString("(S"); WriteCard(n, 1); WriteChar(")"); END TextSize;
- PROCEDURE TextSizeWH(w, h : CARDINAL);
- BEGIN
- WriteChar("T"); WriteString("(S");
- Pair(w, h); WriteChar(")");
- END TextSizeWH;
- PROCEDURE TextDir(deg : CARDINAL);
- BEGIN WriteChar("T"); WriteString("(D"); WriteCard(deg, 1); WriteChar(")"); END TextDir;
- PROCEDURE TextSlant(deg : CARDINAL);
- BEGIN WriteChar("T"); WriteString("(I"); WriteCard(deg, 1); WriteChar(")"); END TextSlant;
- PROCEDURE UseColor(reg : CARDINAL);
- BEGIN WriteChar("W"); WriteString("(I"); WriteCard(reg, 1); WriteChar(")"); END UseColor;
- PROCEDURE ColorName(c : CHAR);
- BEGIN
- WriteChar("W"); WriteString("(I(");
- WriteChar(c); WriteString("))");
- END ColorName;
- PROCEDURE SetRGB(reg, r, g, b : CARDINAL);
- BEGIN
- WriteChar("S"); WriteString("(M"); WriteCard(reg, 1);
- WriteString("(R"); WriteCard(r, 1);
- WriteChar("G"); WriteCard(g, 1);
- WriteChar("B"); WriteCard(b, 1);
- WriteString("))");
- END SetRGB;
- PROCEDURE SetHLS(reg, h, l, s : CARDINAL);
- BEGIN
- WriteChar("S"); WriteString("(M"); WriteCard(reg, 1);
- WriteString("(H"); WriteCard(h, 1);
- WriteChar("L"); WriteCard(l, 1);
- WriteChar("S"); WriteCard(s, 1);
- WriteString("))");
- END SetHLS;
- PROCEDURE BgRegister(reg : CARDINAL);
- BEGIN WriteChar("S"); WriteString("(I"); WriteCard(reg, 1); WriteChar(")"); END BgRegister;
- PROCEDURE WriteOverlay; BEGIN WriteChar("W"); WriteString("(V)"); END WriteOverlay;
- PROCEDURE WriteReplace; BEGIN WriteChar("W"); WriteString("(R)"); END WriteReplace;
- PROCEDURE WriteComplement; BEGIN WriteChar("W"); WriteString("(C)"); END WriteComplement;
- PROCEDURE WriteErase; BEGIN WriteChar("W"); WriteString("(E)"); END WriteErase;
- PROCEDURE Pattern(n : CARDINAL);
- BEGIN WriteChar("W"); WriteString("(P"); WriteCard(n, 1); WriteChar(")"); END Pattern;
- PROCEDURE PatternBits(s : ARRAY OF CHAR);
- BEGIN WriteChar("W"); WriteString("(P"); WriteString(s); WriteChar(")"); END PatternBits;
- PROCEDURE LineWidth(n : CARDINAL);
- BEGIN WriteChar("W"); WriteString("(L"); WriteCard(n, 1); WriteChar(")"); END LineWidth;
- PROCEDURE PVMult(n : CARDINAL);
- BEGIN WriteChar("W"); WriteString("(M"); WriteCard(n, 1); WriteChar(")"); END PVMult;
- PROCEDURE ShadeOn; BEGIN WriteChar("W"); WriteString("(S1)"); END ShadeOn;
- PROCEDURE ShadeOff; BEGIN WriteChar("W"); WriteString("(S0)"); END ShadeOff;
- PROCEDURE ShadeRefY(y : CARDINAL);
- BEGIN WriteChar("W"); WriteString("(S[,"); WriteCard(y, 1); WriteString("])"); END ShadeRefY;
- PROCEDURE MacroDef(name : CHAR);
- BEGIN WriteChar("@"); WriteChar(":"); WriteChar(name); END MacroDef;
- PROCEDURE MacroEnd;
- BEGIN WriteChar("@"); WriteChar(";"); END MacroEnd;
- PROCEDURE MacroRun(name : CHAR);
- BEGIN WriteChar("@"); WriteChar(name); END MacroRun;
- PROCEDURE MacroClearAll;
- BEGIN WriteChar("@"); WriteChar("."); END MacroClearAll;
- PROCEDURE ReportPosition;
- BEGIN WriteChar("R"); WriteString("(P)"); END ReportPosition;
- PROCEDURE ReportError;
- BEGIN WriteChar("R"); WriteString("(E)"); END ReportError;
- PROCEDURE Unbuffered;
- BEGIN
- flushFlag := termios.tcsflush();
- savedTerm := termios.InitTermios();
- haveTerm := termios.tcgetattr(FIO.StdIn, savedTerm) # -1;
- IO.UnBufferedMode(0, TRUE);
- IO.UnBufferedMode(1, TRUE);
- END Unbuffered;
- PROCEDURE Buffered;
- VAR res : INTEGER;
- BEGIN
- IO.BufferedMode(0, TRUE);
- IO.BufferedMode(1, TRUE);
- IF haveTerm THEN
- haveTerm := FALSE;
- res := termios.tcsetattr(FIO.StdIn, flushFlag, savedTerm);
- END;
- END Buffered;
- END Regis.
|