**LIB MENUS
MODULE;
PSPEC DRAWLINES();
PROC DRAWLINES;
$LI X=%7FF0, Y=%7FF1, X0=%7FF2, Y0=%7FF3,
    XS=%7FF4, YS=%7FF5, LNTH=%7FF6, HITE=%7FF7,
    STATUS=%7FF9,
    COLP=%7FFA, COLS=%7FFB;
ADDR [INTEGER16] GRAM.PTR,CHSTR;
INTEGER32 I;
REAL XA,YA,XB,YB;
INITIALISECORE (1,1,1,1);
DEFINEDEVICE (1,%"*","MOT");
SETNDCSPACE2 (1,0.733);
INITIALISEVIEWSURFACE(1);
SELECTVIEWSURFACE (1);
SETWINDOW(0,2880,0,2112);
SELECTOUTPUT(0);
MAKE(INTEGER16, %8000, %F80000) => GRAMPTR;
MAKE(INTEGER16,%2000,%FA0000) => CHSTR;
FOR I < 1920 DO
   %20 => CHSTR^[I];
OD
FOR I < %8000 DO
   %0 => GRAMPTR^[I];
OD
FOR I<18 DO
0 => GRAMPTR^[%7FEE+I];
OD
0 => GRAMPTR^[X0] => GRAMPTR^[Y0];
3 => GRAMPTR^[XS] => GRAMPTR^[YS];
6=> GRAMPTR^ [%7FF6];
6=> GRAMPTR^ [%7FF7];
%7007 => GRAMPTR^[COLP];
%FFFF => GRAMPTR^[COLP];
SET.LINE.INDEX(2);
NEWLINES(2);
CAPTION(%"NOW DRAW A LINE BETWEEN TWO POINTS. LAY DOWN THE FIRST");
NEWLINES(1);
CAPTION(%"POINT BY DEPRESSING THE PEN AND WAITING UNTIL AN X APPEARS.");
NEWLINES(1);
CAPTION(%"RAISE PEN AND MOVE TO ANOTHER POINT. DEPRESS AND A LINE WILL");
NEWLINES(1);
CAPTION(%"BE DRAWN. IF THE PEN IS KEPT DOWN THE X WILL BLINK. TRY IT.");
NEWLINES(2);
1 => GRAMPTR^[STATUS];
WHILE 1 = 1 DO
   WHILE GRAMPTR^[STATUS] & %8000 = 0 DO OD
2112 -   GRAMPTR^[X] => YA;
   GRAMPTR^[Y] => XA;
   MOVE.ABS.2(XA,YA);
   SET.TEXT.INDEX(2);
   TEXT(%"X",1);
   WAIT (0, 1);
   1 => GRAMPTR^[STATUS];
   WHILE GRAMPTR^[STATUS] & %8000 = 0 DO OD
   2112 - GRAMPTR^[X] => YB;
   GRAMPTR^[Y] => XB;
   SET.TEXT.INDEX(0);
   TEXT(%"X",1);
   LINE.ABS.2(XB,YB);
   WAIT (0, 1);
   1 => GRAMPTR^[STATUS];
OD
END
PSPEC PAINT();
PROC PAINT;
$LI X=%7FF0, Y=%7FF1, X0=%7FF2, Y0=%7FF3,
    XS=%7FF4, YS=%7FF5, LNTH=%7FF6, HITE=%7FF7,
    STATUS=%7FF9,
    COLP=%7FFA, COLS=%7FFB;
ADDR [INTEGER16] GRAM.PTR,CHSTR;
INTEGER32 I;
INTEGER NO;
DATAVEC MENU($LO8)
"BLACK" '$L
"RED" '$L
"GREEN" '$L
"YELLOW" '$L
"BLUE" '$L
"PURPLE" '$L
"PALE BLUE" '$L
"WHITE" '$L
"BLACK" '$L
"MAROON" '$L
"DARK GREEN" '$L
"OCHRE" '$L
"DARK BLUE" '$L
"MAUVE" '$L
"GREY-GREEN" '$L
"GREY" '$L
"BRUSH 1" '$L
"BRUSH 2" '$L
"BRUSH 3" '$L
"BRUSH 4" '$L
"BRUSH 5" '$L
"BRUSH 6" '$L
"BRUSH 7" '$L
"BRUSH 8" '$L
END
DATAVEC COLOR($LO16)
0 %1001 %2002 %3003
%4004 %5005 %6006 %7007
%8008 %9009 %A00A %B00B
%C00C %D00D %E00E %F00F
END
SELECTOUTPUT(0);
PROMPT(%"PRESS 'RETURN' FOR A MENU - 'E''RETURN' TO EXIT");
MAKE(INTEGER16, %8000, %F80000) => GRAMPTR;
MAKE(INTEGER16, 1920,%FA0000) => CHSTR;
FOR I < %1920 DO
   %20 => CHSTR^[I];
OD
FOR I < %8000 DO
   %4444 => GRAMPTR^[I];
OD
FOR I<16 DO
0 => GRAMPTR^[%7FEE+I];
OD
0 => GRAMPTR^[X0] => GRAMPTR^[Y0];
3 => GRAMPTR^[XS] => GRAMPTR^[YS];
3 => GRAMPTR^[LNTH] => GRAMPTR^[HITE];
%7007 => GRAMPTR^[COLP];
%8FF8 => GRAMPTR^[COLS];
L1:
SET.UP.MENU(^MENU,66,0);
NEWLINES(2);
CAPTION(%"NOW PAINT A PICTURE. MOVE THE CURSOR TO A LINE IN THE");
NEWLINES(1);
CAPTION(%"MENU AND DEPRESS THE PEN TO SELECT A COLOUR OR BRUSH SIZE.");
NEWLINES(1);
CAPTION(%"RAISE THE PEN AND PAINT BY DEPRESSING THE PEN.");
NEWLINES(3);
1 => GRAMPTR^ [STATUS];
%7FFF &> GRAMPTR^[STATUS];
WHILE GRAMPTR^[STATUS] & %8000 = 0 DO OD
L2:
IF FIND.MENU.ITEM() => NO < 16 THEN
   COLOR[NO] => GRAMPTR^[COLP];
   COLOR[NO] => GRAMPTR^[COLS];
ELSE
   NO-15 => GRAMPTR^[LNTH] => GRAMPTR^[HITE];
FI
GRAMPTR^ [STATUS] & %7FFF ! 4 => GRAMPTR^[STATUS];
IF INCH() = '$L THEN;
GRAMPTR^[STATUS] & %FFFB ! %8000 => GRAMPTR^[STATUS];
-> L2;
FI
RELEASELIB(%"MENUS");
END
PAINT();
DRAWLINES();
*END
