! ************************************************************************ ! * * ! * 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. MAPS: MAP1 TEXT,S,10 MAP1 I,F,6 MAP1 KEY,S,1 MAP1 R,F,6,3 MAP1 C,F,6,3 MAP1 R1,F,6 MAP1 C1,F,6 MAP1 FLAG,F,6 MAP1 MSG,S,10 MAP1 CHAR,S,3 MAP1 H,F,6 MAP1 V,F,6 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 CLEAR: PRINT TAB(3,1); TAB(-1,10); CALL DISPLAY CALL HEADER 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