@X @~
~V7 56 2 -5
~D10
~H                    MUSS
~
~
~D10
~H            GRA161
~D10
~MMANCHESTER UNIVERSITY  -  CONFIDENTIAL~
~
~
                                                              ISSUE 11~
~V9 -1
~P
~V9 1
~YGRA161
~S~M~OGRAPHICS UTILITIES IMPLEMENTATION DESCRIPTION
~S~M~OSection 16 Version 1
~S~OSection 16.1 VIP Graphics Device Driver
~S1~O1. General Description
~BThis module is the graphics device driver for a VIP
graphics unit.  It consists of a set of procedures for
controlling line drawing and text output from a VIP.
~S1~O2. Interface
~
Procedures~
   VIP.INIT~
   VIP.TERM~
   VIP.NEW.FRAME~
   VIP.LINE~
   VIP.TEXT~
   VIP.MARKER~
   VIP.ATTR~
   VIP.REPORT~
~
Data Structures~
~S1~O2.1 Hardware Specification
~BThe VIP is a colour graphics interface system
which drives a colour monitor. It contains a
microprocessor which controls its operation. This
is driven through the command set described below.
Each command is introduced by an alphabetic letter
and followed by groups of decimal digits.
~T%30
~
~
1) Vxxxyyyaaabbb~IDraws a line from X,Y to A,B where
each coordinate is an absolute decimal 3 digit number
which may include leading spaces.~
~
2) Ossrrxxxyyy<text><cr>~IDisplays text at X,Y in characters
of size S in the X-plane and R in the Y-plane.~
~
3) G~IThis selects graphics mode.~
~
4) Z0nn~IThis clears the screen with colour N.~
~
5) D0nnrrggbb~IThis defines a colour as the number N.
The colour is specified by levels of red (R), green (G),
and blue (B).~
~
6) Cnn~IThis selects the colour defined as number N.~
~
All formatting characters (CR,LF) are otherwise ignored.
~S1~O2.2 Software Interface
~BThis consists of the following procedures.
~
~
1) VIP.INIT ()~IInitialises the VIP.~
~
2) VIP.TERM ()~IResets the VIP.~
~
3) VIP.NEW.FRAME ()~IClears the screen and sets default characteristics.~
~
4) VIP.LINE (X1, Y1, X2, Y2)~IDraws a line from X1, Y1 to X2, Y2 in the
format preselected by the Graphics library.~
~
5) VIP.TEXT (X, Y, STRING,~
             LENGTH)~IGenerates a text string
at X, Y with a preselected format and rotation.~
~
6) VIP.MARKER (X, Y, SYMBOL)~IGenerates the specified symbol at X, Y.~
~
7) VIP.ATTR (NO.)~ISets the attribute specified by NO. to the
specified value. These include defining and selecting colour and selecting
line type.~
~
8) VIP.REPORT (RVEC, IVEC)~ISets up the device capabilities in RVEC
and IVEC.  This procedure is irrelevant to the SUBSET. It is only
used by the full  CORE.~
~S1~O3.1 Outline of Operation
~BThe procedures above send their output in the format required by the
VIP as described earlier, to the current stream.
~S1~O3.2 Data Structures
~
~
~Y
~V9 -1
~P
~V9 -1
~D15
~HFLOWCHARTS
~
~
~H               GRA161
~V9 -1
~F
@TITLE GRA16(1,11)
@COL 1S-2R-3R-4R-5R-6F
@FLOW 1-2-3-4-5-6
@BOX 1.0
VIP DRIVER PROCEDURES
@BOX 2.0
DECLARATIONS
@BOX 3.0
@BOX 4.0
PROCEDURES IN SUBSECTION:
   VIP INIT
   VIP TERM
   VIP NEW FRAME
   VIP LINE
   VIP TEXT
   VIP MARKER
   VIP ATTRIBUTE
   VIP REPORT
@BOX 5.0
@BOX 6.0
*END
@BOX 1.1
$AD PW0,PW1,PW2,PW3,PW4,PW5,PW6;
$IN32 CC.IND,C.RED,C.BLUE,C.GREEN;
$IN32 PTR,BLOCK.NO,OLD.SEG.NO,OLD.OUTPUT.STREAM,C.COLOUR;
$IN32 C.LINE.INDEX,C.LINE.STYLE,C.TEXT.INDEX,C.CHARPATH;
$RE NDC.HEIGHT,NDC.SCALE,CHARSZ.WIDTH,CHARSZ.HEIGHT;
$IM$LI SYS14.SEG.SIZE;
MODULE(VIP.INIT,VIP.TERM,VIP.NEW.FRAME,VIP.LINE,
   VIP.TEXT,VIP.MARKER,VIP.ATTR,VIP.REPORT);
@BOX 2.1
*GLOBAL 7;
$IN COLOUR,RED,BLUE,GREEN,LINE.TYPE,CHAR.TYPE;
$LI CR=%D;
$LI/$LO8 DASHED=2;
*GLOBAL 0;
@BOX 3.1
@BOX 4.1
PSPEC VIP.INIT();
PSPEC VIP.TERM();
PSPEC VIP.NEW.FRAME();
PSPEC VIP.LINE($RE,$RE,$RE,$RE);
PSPEC VIP.TEXT($RE,$RE,ADDR[$LO8],$IN);
PSPEC VIP.MARKER($RE,$RE,$LO8);
PSPEC VIP.ATTR($IN);
PSPEC VIP.REPORT(ADDR[$RE],ADDR[$IN32]);
PSPEC DEC2($IN);
PSPEC DEC3($IN);
@BOX 5.1
PROC DEC2(HEX);
$IN TENS;
OUTCH(HEX/10=>TENS + '0);
OUTCH(HEX - (TENS*10) + '0);
END
PROC DEC3(HEX);
$IN TENS,HUNS;
OUTCH(HEX/10=>TENS/10=>HUNS + '0);
OUTCH(TENS - (HUNS*10) + '0);
OUTCH(HEX - (TENS*10) + '0);
END
   #GRA16.1
   #GRA16.2
   #GRA16.3
   #GRA16.4
   #GRA16.5
   #GRA16.6
   #GRA16.7
   #GRA16.8
@BOX 6.1
*END
@END
@TITLE GRA16.1(1,11)
@COL 1S-2R-3R-4F
@FLOW 1-2-3-4
@BOX 1.0
VIP INIT ()
@BOX 2.0
SET GRAPHICS MODE
@BOX 3.0
DEFINE COLOURS
SET DEFAULTS
@BOX 4.0
END
@BOX 1.1
PROC VIP.INIT;
$IN I;
@BOX 2.1
::UNNECESSARY
@BOX 3.1
VIP.NEW.FRAME();
VIP.NEW.FRAME();
512.0 => NDC.SCALE;
1.0 => CHARSZ.WIDTH => CHARSZ.HEIGHT;
@BOX 4.1
END
@END
@TITLE GRA16.2(1,11)
@COL 1S-2R-3F
@FLOW 1-2-3
@BOX 1.0
VIP TERM()
@BOX 2.0
TERMINATE
@BOX 3.0
END
@BOX 1.1
PROC VIP.TERM;
@BOX 2.1
::NO ACTION REQUIRED
@BOX 3.1
END
@END
@TITLE GRA16.3(1,11)
@COL 1S-3R-4F
@FLOW 1-3-4
@BOX 1.0
VIP NEW FRAME ()
@BOX 3.0
CLEAR SCREEN
@BOX 4.0
END
@BOX 1.1
PROC VIP.NEW.FRAME;
@BOX 3.1
CAPTION(%"Z000");
NEWLINES(1);
@BOX 4.1
END
@END
@TITLE GRA16.4(1,11)
@COL 1S-2R-3R-4R-5F
@FLOW 1-2-3-4-5
@BOX 1.0
VIP LINE (X.MIN, Y.MIN, X.MAX, Y.MAX)
@BOX 2.0
CONVERT NDC TO DEVICE COORDINATES
@BOX 3.0
SELECT LINE COLOUR
@BOX 4.0
ISSUE LINE DRAWING INSTRUCTIONS
@BOX 5.0
END
@BOX 1.1
PROC VIP.LINE (X.MIN, Y.MIN, X.MAX, Y.MAX);
$IN X0, Y0, X1, Y1;
@BOX 2.1
X.MIN * NDC.SCALE => X0;
Y.MIN * NDC.SCALE => Y0;
X.MAX * NDC.SCALE => X1;
Y.MAX * NDC.SCALE => Y1;
@BOX 3.1
C.LINE.INDEX => COLOUR;
VIP.ATTR(7);
@BOX 4.1
OUTCH('V);
DEC3(X0);DEC3(Y0);
DEC3(X1);DEC3(Y1);
NEWLINES(1);
@BOX 5.1
END
@END
@TITLE GRA16.5(1,11)
@COL 1S-2R-3R-4R-5F
@FLOW 1-2-3-4-5
@BOX 1.0
VIP TEXT (X, Y, STRING, LENGTH)
@BOX 2.0
CONVERT NDC TO DEVICE COORDINATES
@BOX 3.0
SET TEXT COLOUR
@BOX 4.0
ISSUE TEXT DRAWING INSTRUCTIONS
@BOX 5.0
END
@BOX 1.1
PROC VIP.TEXT (X, Y, STRING, LENGTH);
$IN X0, Y0;
@BOX 2.1
X * NDC.SCALE => X0;
Y * NDC.SCALE => Y0;
@BOX 3.1
C.TEXT.INDEX => COLOUR;
VIP.ATTR(7);
@BOX 4.1
CAPTION(%"O0101");
DEC3(X0);DEC3(Y0);
CAPTION(STRING);
OUTCH(CR);
NEWLINES(1);
@BOX 5.1
END
@END
@TITLE GRA16.6(1,11)
@COL 1S-2R-3R-4R-5F
@FLOW 1-2-3-4-5
@BOX 1.0
VIP MARKER (X, Y, SYMBOL);
@BOX 2.0
SET LINE COLOUR
@BOX 3.0
CONVERT NDC TO DEVICE COORDS
@BOX 4.0
ISSUE INSTRUCTIONS TO OUTPUT MARKER
AS A SINGLE TEXT CHARACTER
@BOX 5.0
END
@BOX 1.1
PROC VIP.MARKER (X, Y, SYMBOL);
$IN X0, Y0;
@BOX 2.1
C.LINE.INDEX => COLOUR;
VIP.ATTR(7);
@BOX 3.1
X * NDC.SCALE => X0;
Y * NDC.SCALE => Y0;
@BOX 4.1
CAPTION(%"O0101");
DEC3(X0);DEC3(Y0);
OUTCH(SYMBOL);
OUTCH(CR);
NEWLINES(1);
@BOX 5.1
END
@END
@TITLE GRA16.7(1,11)
@COL 6C-7R
@COL 1S-2R-3C-4R-5F
@COL 8C-9R
@COL 10C-11R
@ROW 6-3-8-10
@FLOW 1-2
@FLOW 6-7-5
@FLOW 3-4-5
@FLOW 8-9-5
@FLOW 10-11-5
@BOX 1.0
VIP ATTRIBUTE(ATTRIBUTE.NUMBER)
@BOX 2.0
SWITCH ON ATTRIBUTE
@BOX 3.0
SELECT
COLOUR
@BOX 4.0
SEND COMMAND TO SELECT COLOUR
@BOX 5.0
END
@BOX 6.0
DEFINE
COLOUR
@BOX 7.0
SEND COMMAND TO DEFINE COLOUR
@BOX 8.0
LINE
TYPE
@BOX 9.0
SEND COMMAND TO SELECT
LINE TYPE
@BOX 10.0
CHAR
TYPE
@BOX 11.0
SEND COMMAND TO SELECT
CHAR FONT
@BOX 1.1
PROC VIP.ATTR(NO);
@BOX 2.1
SWITCH NO-1&7\ LINETYPE,IGN,
IGN,IGN,CHARTYPE,IGN,SELCOL,DEFCOL;
@BOX 3.1
SELCOL:
@BOX 4.1
OUTCH('C);DEC2(COLOUR);
@BOX 5.1
NEWLINES(1);
IGN:
END
@BOX 6.1
DEFCOL:
@BOX 7.1
CAPTION(%"D0");
DEC2(CC.IND);DEC2(C.RED);
DEC2(C.GREEN);DEC2(C.BLUE);
@BOX 8.1
LINETYPE:
@BOX 9.1
OUTCH('L);
OUTCH('0);
OUTCH('1);
@BOX 10.1
CHARTYPE:
@BOX 11.1
OUTCH('U);
OUTCH('2);
@END
@TITLE GRA16.8(1,11)
@COL 1S-2R-3R-4F
@FLOW 1-2-3-4
@BOX 1.0
VIP REPORT (RVEC, IVEC)
@BOX 2.0
REPORT INTEGER DEVICE CAPABILITY
@BOX 3.0
REPORT REAL DEVICE CAPABILITY
@BOX 4.0
END
@BOX 1.1
PROC VIP.REPORT (RVEC, IVEC);
@BOX 2.1
0 => IVEC ^[0] => IVEC ^ [1]; ::NOT USED;
0 => IVEC ^[2];   0 => IVEC ^[3];   0 => IVEC ^[4];
0 => IVEC ^[5];   0 => IVEC ^[6];   0 => IVEC ^[7];
0 => IVEC ^[8];   0 => IVEC ^[9];   0 => IVEC ^[10];
0 => IVEC ^[11];  0 => IVEC ^[12];  0 => IVEC ^[13];
0 => IVEC ^[14];  0 => IVEC ^[15];  0 => IVEC ^[16];
0 => IVEC ^[17];  0 => IVEC ^[18];  0 => IVEC ^[19];
0 => IVEC ^[20];  0 => IVEC ^[21];  0 => IVEC ^[22];
0 => IVEC ^[23];  0 => IVEC ^[24];  0 => IVEC ^[25];
0 => IVEC ^[26];  0 => IVEC ^[27];  0 => IVEC ^[28];
0 => IVEC ^[29];  0 => IVEC ^[30];  0 => IVEC ^[31];
0 => IVEC ^[32];  0 => IVEC ^[33];  0 => IVEC ^[34];
@BOX 3.1
0.0 => RVEC ^[0];   0.0 => RVEC ^[1];
0.0 => RVEC ^[2];   0.0 => RVEC ^[3];
0.0 =>  RVEC ^[4];  0.0 =>  RVEC ^[5];
0.0 => RVEC ^[6];   0.0 => RVEC ^[7];
0.0 =>  RVEC ^[8];  0.0 =>  RVEC ^[9];
0.0 =>  RVEC ^[10]; 0.0 =>  RVEC ^[11];
0.0 =>  RVEC ^[12]; 0.0 =>  RVEC ^[13];
@BOX 4.1
END
@END

