|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T v
Length: 4264 (0x10a8)
Types: TextFile
Names: »vt640vdu.mod«
└─⟦060c9c824⟧ Bits:30007080 DKUUG TeX 2/12/89
└─⟦this⟧ »./DVIware/crt-viewers/others/dvitovdu/src/vt640vdu.mod«
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
└─⟦af5ba6c8e⟧ »unix3.0/DVIWARE.tar.Z«
└─⟦ca79c7339⟧
└─⟦this⟧ »DVIware/crt-viewers/others/dvitovdu/src/vt640vdu.mod«
IMPLEMENTATION MODULE vt640vdu;
(* Author: Andrew Trevorrow
Implementation: Modula-2 under VAX/UNIX 4.2 BSD
Date Started: June, 1986
Description:
Implements the InitVT640 procedure that initializes the generic VDU
routines and parameters used in DVItoVDU.
The VT640 VDU has a Transparent mode in which it behaves like a VT100, but
it can also emulate a Tektronix 4010 terminal in which the screen is
1024 pixels wide by 780 pixels high.
(The actual resolution of the VT640 screen is 640 by 480 pixels;
the appropriate scaling is done automatically.)
The bottom left pixel is the point (x=0,y=0). Note that x coordinates
increase to the right and y coordinates increase up the screen.
DVItoVDU uses a coordinate scheme in which horizontal (=h) coordinates
also increase to the right but vertical (=v) coordinates increase DOWN the
screen, i.e. the top left pixel on the screen is the point (h=0,v=0).
This means that the Tektronix 4010 routines will have to do a
simple translation of the vertical coordinates passed by DVItoVDU.
*)
FROM vduinterface IMPORT
(* PROCEDURE variables: *)
StartText,
MoveToTextLine,
ClearTextLine,
ClearScreen,
StartGraphics,
LoadFont,
ShowChar,
ShowRectangle,
ResetVDU,
(* INTEGER variables: *)
DVIstatusl,
windowstatusl,
messagel,
commandl,
bottoml,
windowv,
windowh,
windowht,
windowwd;
FROM tek4010vdu IMPORT
TEK4010ClearScreen,
TEK4010StartText,
TEK4010StartGraphics,
TEK4010LoadFont,
TEK4010ShowChar,
TEK4010ShowRectangle;
FROM ansivdu IMPORT
MoveAbs;
FROM screenio IMPORT
Write, WriteString;
CONST
CAN = 30C; (* VT100 mode *)
ESC = 33C;
GS = 35C; (* Tektronix mode *)
(******************************************************************************)
PROCEDURE InitVT640;
(* The dialog region will be the top 4 text lines in VT100 mode:
Line 1 = DVI status line,
Line 2 = window status line,
Line 3 = message line,
Line 4 = command line.
The window region will be text lines 5 to 24 in VT100 mode.
*)
BEGIN
DVIstatusl := 1; (* DVItoVDU assumes top text line = 1 *)
windowstatusl := 2;
messagel := 3;
commandl := 4;
bottoml := 24; (* also number of text lines on screen *)
(* The above values assume the VT640 is in VT100 mode;
the following values assume it is emulating a Tektronix 4010.
Note that windowv must be given a value using DVItoVDU's coordinate scheme
where top left pixel is (0,0).
*)
windowv := 130; (* approx. height in TEK4010 pixels of 4 text lines
i.e. 4 * 780/24 *)
windowh := 0;
windowht := 780-windowv;
windowwd := 1024;
MoveToTextLine := VT640MoveToTextLine;
ClearTextLine := VT640ClearTextLine;
ClearScreen := VT640ClearScreen;
StartText := TEK4010StartText;
StartGraphics := TEK4010StartGraphics;
LoadFont := TEK4010LoadFont;
ShowChar := TEK4010ShowChar;
ShowRectangle := TEK4010ShowRectangle;
ResetVDU := VT640ResetVDU;
END InitVT640;
(******************************************************************************)
PROCEDURE VT640MoveToTextLine (line : CARDINAL);
BEGIN
Write(GS); (* cannot send CAN if VT640 is already in VT100 mode *)
Write(CAN); (* switch to VT100 mode *)
MoveAbs(line,1);
END VT640MoveToTextLine;
(******************************************************************************)
PROCEDURE VT640ClearTextLine (line : CARDINAL);
BEGIN
Write(GS);
Write(CAN);
MoveAbs(line,1);
Write(ESC);
WriteString('[K'); (* erase to end of line *)
END VT640ClearTextLine;
(******************************************************************************)
PROCEDURE VT640ClearScreen;
BEGIN
Write(GS);
Write(CAN);
Write(ESC);
WriteString('[2J'); (* erase all alphanumerics - need for VIS550! *)
TEK4010ClearScreen;
END VT640ClearScreen;
(******************************************************************************)
PROCEDURE VT640ResetVDU;
BEGIN
Write(GS); (* cannot send CAN if VT640 is already in VT100 mode *)
Write(CAN); (* switch to VT100 mode *)
END VT640ResetVDU;
(******************************************************************************)
BEGIN
END vt640vdu.