! ************************************************************************
! * *
! * D R A W *
! * Extemely Useless Doodle Program *
! * *
! ***********************************************************************
! Version 1.0 Written by Lee Pallmann for UltraSoft on 01/27/86
!
! This program is designed to run on an AM60/AM62/AM62A terminal.
ON ERROR GOTO ERROR
PRINT TAB(-1,12); "Ultra"; TAB(-1,11); "Draw "; TAB(-1,12); "1.0"
FOR I = 1 TO 1000 : NEXT I
PRINT TAB(-1,0);
HEADER: RESTORE
PRINT TAB(1,1);
FOR I = 1 TO 6
READ TEXT
PRINT SPACE(8); TAB(-1,12); TEXT[1;1];
PRINT TAB(-1,11); TEXT[2;LEN(TEXT)];
NEXT I
PRINT
DATA Box, Line, Fill, Text, Clear, Quit
FOR I = 1 TO 10
PRINT "--------";
NEXT I
PRINT TAB(-1,12);
CALL DISPLAY
WAIT'FOR'COMMAND:
XCALL GET,KEY
KEY = UCS(KEY)
IF KEY = "B" AND FLAG = 1 THEN RETURN
IF KEY = "B" THEN CALL MSG : GOTO BOX
IF KEY = "Q" THEN GOTO QUIT
IF KEY = "L" AND FLAG = 2 THEN RETURN
IF KEY = "L" THEN CALL MSG : GOTO LINE
IF KEY = "F" AND FLAG = 1 THEN RETURN
IF KEY = "F" THEN CALL MSG : GOTO FILL
IF KEY = "T" THEN I = C : CALL MSG : GOTO TEXT
IF KEY = "C" THEN GOTO CLEAR
IF ASC(KEY) = 27 THEN GOTO QUIT
IF ASC(KEY) = 11 THEN R=R-1 ! Up
IF ASC(KEY) = 10 THEN R=R+1 ! Down
IF ASC(KEY) = 8 THEN C=C-1 ! Left
IF ASC(KEY) = 12 THEN C=C+1 ! Right
IF ASC(KEY) = 13 THEN C=1 : R=R+1
IF ASC(KEY) < 14 THEN CALL DISPLAY
GOTO WAIT'FOR'COMMAND
DISPLAY:IF R > 24 THEN R=24
IF C > 80 THEN C=80
IF C < 1 THEN C=1
IF R < 3 THEN R = 3
PRINT TAB(R,C);
RETURN
BOX: R1 = R : C1 = C
IF FLAG=0 PRINT TAB(R,C); "+"; TAB(-1,5);
FLAG=1
CALL WAIT'FOR'COMMAND
FLAG=0 : I=0
IF R < R1 THEN I=R : R=R1 : R1=I : I=1
IF C < C1 THEN I=C : C=C1 : C1=I : I=I+1
IF R1=R OR C1=C THEN PRINT CHR(7); : GOTO HEADER
XCALL BOX,R1,C1,R,C
IF I=1 OR I=3 THEN R=R1
IF I > 1 THEN C=C1
GOTO HEADER
LINE: R1 = R : C1 = C
PRINT TAB(-1,23);
XCALL GET, KEY
IF KEY = CHR(27) OR UCS(CHAR) = "L" THEN PRINT TAB(-1,24); : GOTO HEADER
IF KEY = CHR(12) THEN C=C+1 : CHAR = "Z" : CALL PLINE : GOTO HORIZ
IF KEY = CHR(8) THEN C=C-1 : CHAR = "Z" : CALL PLINE : GOTO HORIZ
IF KEY = CHR(10) THEN R=R+1 : CHAR="6" : CALL PLINE : GOTO VERT
IF KEY = CHR(11) THEN R=R-1 : CHAR="6" : CALL PLINE : GOTO VERT
GOTO LINE
HORIZ:
XCALL GET, KEY
IF KEY=CHR(27) OR UCS(CHAR)="L" THEN PRINT TAB(-1,24); : GOTO HEADER
IF KEY=CHR(12) THEN C=C+1 : CHAR="Z" : CALL PLINE : H = 1
IF KEY=CHR(8) THEN C=C-1 : CHAR="Z" : CALL PLINE : H = 0
IF KEY=CHR(11) AND H=1 THEN CHAR="5" : CALL PLINE : GOTO VERT
IF KEY=CHR(11) AND H=0 THEN CHAR="1" : CALL PLINE : GOTO VERT
IF KEY=CHR(10) AND H=1 THEN CHAR="3" : CALL PLINE : GOTO VERT
IF KEY=CHR(10) AND H=0 THEN CHAR="2" : CALL PLINE : GOTO VERT
GOTO HORIZ
VERT:
XCALL GET, KEY
IF KEY=CHR(27) OR UCS(CHAR)="L" THEN PRINT TAB(-1,24); : GOTO HEADER
IF KEY=CHR(10) THEN R=R+1 : CHAR="6" : CALL PLINE : V = 1
IF KEY=CHR(11) THEN R=R-1 : CHAR="6" : CALL PLINE : V = 0
IF KEY=CHR(12) AND V=1 THEN CHAR="1" : CALL PLINE : GOTO HORIZ
IF KEY=CHR(12) AND V=0 THEN CHAR="2" : CALL PLINE : GOTO HORIZ
IF KEY=CHR(8) AND V=1 THEN CHAR="5" : CALL PLINE : GOTO HORIZ
IF KEY=CHR(8) AND V=0 THEN CHAR="3" : CALL PLINE : GOTO HORIZ
GOTO VERT
PLINE: IF R < 2 THEN R=2
IF R > 24 THEN R=24
IF C < 1 THEN C=1
IF C > 80 THEN C=80
PRINT TAB(R,C); CHAR; TAB(-1,5);
R1 = R : C1 = C
RETURN
FILL: R1 = R : C1 = C
IF FLAG=0 PRINT TAB(R,C); "+"; TAB(-1,5);
FLAG=1
FILL2: CALL WAIT'FOR'COMMAND
IF ABS(R-R1)<1 OR ABS(C-C1)<1 THEN PRINT CHR(7); : GOTO FILL2
FLAG=0 : I=0
IF R < R1 THEN I=R : R=R1 : R1=I : I=1
IF C < C1 THEN I=C : C=C1 : C1=I : I=I+1
IF R1=R OR C1=C THEN PRINT CHR(7); : GOTO HEADER
FOR I=R1 TO R
PRINT TAB(I,C); TAB(-1,33); TAB(I,C1); TAB(-1,32);
NEXT I
PRINT TAB(R1,C1);
GOTO HEADER
TEXT: XCALL GET,KEY
IF KEY = CHR(13) THEN C = 1 : R = R + 1 : CALL DISPLAY
IF KEY = CHR(27) THEN GOTO HEADER
IF KEY = CHR(127) THEN PRINT TAB(-1,5); CHR(32); TAB(-1,5); : &
C = C - 1 : GOTO TEXT ! Handle Delete
PRINT KEY;
C = C + 1
GOTO TEXT
MSG: PRINT TAB(-1,1); TAB(-1,9); SPACE(30); TAB(-1,11);
IF KEY = "T" THEN PRINT "Text Mode (ESC to Exit)";
IF KEY = "B" THEN PRINT "Box Mode ('B' to Finish)";
IF KEY = "F" THEN PRINT "Fill Mode ('F' to Finish)";
IF KEY = "L" THEN PRINT "Line Mode (ESC to Finish)";
PRINT TAB(-1,12);
CALL DISPLAY
RETURN
ERROR: PRINT TAB(-1,11); TAB(23,20);
PRINT "This Program has Died an Unseemly Death!"
QUIT: PRINT TAB(1,1); TAB(-1,9); TAB(2,1); TAB(-1,9);
PRINT TAB(24,1); TAB(-1,12);
END