summaryrefslogtreecommitdiff
path: root/support/rnototex/screenhandlers.pas
diff options
context:
space:
mode:
Diffstat (limited to 'support/rnototex/screenhandlers.pas')
-rw-r--r--support/rnototex/screenhandlers.pas189
1 files changed, 189 insertions, 0 deletions
diff --git a/support/rnototex/screenhandlers.pas b/support/rnototex/screenhandlers.pas
new file mode 100644
index 0000000000..2a99cc7c10
--- /dev/null
+++ b/support/rnototex/screenhandlers.pas
@@ -0,0 +1,189 @@
+{ operations for input/output of data from the terminal.
+ Randall Venhola 5-May-1987 }
+
+[environment('screenhandlers')] MODULE screenhandlers;
+
+
+TYPE
+ wordinteger = [WORD] 0..65535;
+ byterange = [BYTE] 0..255;
+
+
+
+VAR
+terminalerror : [HIDDEN,STATIC] integer := 0;
+cursorrow : [HIDDEN,STATIC] wordinteger := 1;
+cursorcolumn : [HIDDEN,STATIC] wordinteger := 1;
+
+
+
+[GLOBAL] PROCEDURE clearsubscreen( line, column : integer );
+
+ FUNCTION LIB$ERASE_PAGE(lineno, colno : wordinteger) : integer; extern;
+
+ VAR
+ l, c : wordinteger;
+
+BEGIN
+ l := line;
+ c := column;
+ terminalerror := lib$erase_page(l,c);
+END;
+
+
+
+
+[GLOBAL] PROCEDURE clearscreen;
+
+BEGIN
+ clearsubscreen(1,1);
+END;
+
+
+
+
+[GLOBAL] PROCEDURE positioncursor( line, column : integer );
+
+ FUNCTION LIB$SET_CURSOR( lineno, colno : wordinteger ) : integer; extern;
+
+ VAR
+ l, c : wordinteger;
+
+BEGIN
+ l := line;
+ c := column;
+ terminalerror := lib$set_cursor(l,c);
+ cursorrow := line;
+ cursorcolumn := column
+END;
+
+
+[GLOBAL] PROCEDURE rollttyforward;
+BEGIN
+ positioncursor(cursorrow+1, cursorcolumn)
+END;
+
+
+[GLOBAL] PROCEDURE rollttyback;
+BEGIN
+ if cursorrow > 1 then
+ positioncursor(cursorrow-1, cursorcolumn)
+END;
+
+
+[GLOBAL] PROCEDURE putstringtoterminal( string : VARYING [limit] of CHAR;
+ line, column : integer;
+ reversevideo : boolean;
+ blinking : boolean);
+CONST
+ maxscreenwidth = 132;
+
+VAR
+ l, c, flags, newcolumn : wordinteger;
+
+ FUNCTION LIB$PUT_SCREEN(outtext : VARYING [C] OF CHAR;
+ lineno : wordinteger; colno : wordinteger;
+ flags : wordinteger) : integer; extern;
+
+
+BEGIN
+ l := line;
+ c := column;
+ if reversevideo then
+ if blinking then
+ flags := 3
+ else
+ flags := 2
+ else
+ flags := 0;
+ terminalerror := lib$put_screen(string, l, c, flags);
+ newcolumn := 1 + length(string) + cursorcolumn;
+ if newcolumn > maxscreenwidth then
+ positioncursor(cursorrow + 1, 1)
+ else
+ positioncursor( cursorrow, newcolumn)
+END;
+
+
+[GLOBAL] PROCEDURE ttywriteln;
+const
+ carriagereturn = 13;
+ linefeed = 10;
+
+var
+ endofline : [STATIC] VARYING[2] of char;
+BEGIN
+ endofline.body[1] := chr(carriagereturn);
+ endofline.body[2] := chr(linefeed);
+ endofline.length := 2;
+ putstringtoterminal(endofline, cursorrow, cursorcolumn, false, false);
+ positioncursor(cursorrow + 1, 1)
+END;
+
+
+
+
+[GLOBAL] PROCEDURE ttyreadln( VAR string : VARYING [limit] of char );
+
+ FUNCTION LIB$GET_SCREEN(VAR inputtext : VARYING [lim1] OF CHAR;
+ promptstring : VARYING [lim2] OF CHAR; VAR outlen : wordinteger := %IMMED 0) : integer; extern;
+
+ VAR
+ len : wordinteger;
+ prompt : [STATIC] VARYING [2] OF CHAR := '>';
+
+BEGIN
+ terminalerror := lib$get_screen(string, prompt, len);
+ ttywriteln
+END;
+
+
+
+[GLOBAL] PROCEDURE findcursor( var line, column : integer );
+
+BEGIN
+ line := cursorrow;
+ column := cursorcolumn;
+END;
+
+
+
+[GLOBAL] FUNCTION terminalerrorcode : integer;
+
+BEGIN
+ terminalerrorcode := terminalerror;
+END;
+
+
+
+
+[GLOBAL] PROCEDURE ttywritestring( string : VARYING [limit] OF CHAR);
+
+BEGIN
+ putstringtoterminal(string, cursorrow, cursorcolumn, false, false);
+END;
+
+
+[GLOBAL] PROCEDURE ttywriteint( int : integer );
+const
+ maxintchars = 20;
+var
+ s : varying[maxintchars] of char;
+BEGIN
+ writev(s, int:1);
+ ttywritestring( s )
+END;
+
+
+[GLOBAL] PROCEDURE ttywritereal( floating : real; fieldwidth,
+ ndigits : integer);
+const
+ maxfieldwidth = 30;
+var
+ s : varying[maxfieldwidth] of char;
+BEGIN
+ writev(s, floating:fieldwidth:ndigits);
+ ttywritestring( s )
+END;
+
+END.