This file is part of Miscellaneous Programs
. Download the collection to get this file.
Simple drawing program.
Content
Source Code
10 GO TO 640: REM DESIGNER
20 REM LINE DRAW
30 IF (X1<LF AND X2<LF) OR (X1>RT AND X2>RT) OR (Y1>TP AND Y2>TP) OR (Y1<BT AND Y2<BT) THEN LET OT=1: RETURN
40 LET ED=(TP AND Y1>TP)+(BT AND Y1<BT)
50 IF Y1<BT OR Y1>TP THEN LET X1=FN B(): LET Y1=ED
60 LET ED=(TP AND Y2>TP)+(BT AND Y2<BT)
70 IF Y2<BT OR Y2>TP THEN LET X2=FN C(): LET Y2=ED
80 LET ED=(RT AND X1>RT)+(LF AND X1<LF)
90 IF X1<LF OR X1>RT THEN LET Y1=FN D(): LET X1=ED
100 LET ED=(RT AND X2>RT)+(LF AND X2<LF)
110 IF X2<LF OR X2>RT THEN LET Y2=FN E(): LET X2=ED
120 IF X1-LF>=0 AND X2-LF>=0 AND X1-LF<=255 AND X2-LF<=255 AND Y1-BT>=0 AND Y1-BT<=167 AND Y2-BT>=0 AND Y2-BT<=167 THEN PLOT X1-LF,Y1-BT+8: DRAW INT (X2-X1),INT (Y2-Y1)
130 RETURN
140 REM CURSER
150 LET AN=0: LET S=1: GO SUB 400
160 PRINT AT 21,0;"X1=";O1;TAB 8;"Y1=";O2,R$: LET X=O1: LET Y=O2
170 GO SUB 250: IF T$="2" THEN GO SUB 400: PRINT AT 21,16;R$: LET X=O1: LET Y=O2: GO TO 160
180 LET X5=X: LET Y5=Y: IF T$="0" THEN RETURN
190 PRINT AT 21,0;"X2=";X;" ";AT 21,8;"Y2=";Y;" ": PAUSE 50: GO SUB 250: IF T$="2" THEN GO SUB 400: PRINT AT 21,16;R$: LET X=O1: LET Y=O2: GO TO 190
200 IF T$="0" THEN RETURN
210 RESTORE : READ X2,X4,Y2,Y4,X1,Y1,X3,Y3: OVER 1: GO SUB 20
220 INPUT "OK?";Q$: IF Q$="Y" OR Q$="y" THEN OVER 0: LET A$=FN C$()
230 GO SUB 20: OVER 0: PRINT AT 21,0;"X1";AT 21,8;"Y1": IF Q$<>"Y" OR Q$<>"y" THEN PLOT OVER 1;X3-LF,Y3-BT+8: PLOT OVER 1;X4-LF,Y4-BT+8
240 GO TO 170
250 PLOT BRIGHT 1; OVER 1;X-LF,Y-BT+8: PAUSE 2: PLOT BRIGHT 0; OVER 1;X-LF,Y-BT+8: LET T$=INKEY$: IF T$="" THEN GO TO 250
260 LET X=X+(T$="8")-(T$="5")
270 LET X=X+10*(T$="I")-10*(T$="T")
280 LET Y=Y+(T$="7")-(T$="6")
290 LET Y=Y+10*(T$="U")-10*(T$="Y")
300 IF X>RT THEN LET X=RT
310 IF X<LF THEN LET X=LF
320 IF Y>TP THEN LET Y=TP
330 IF Y<BT THEN LET Y=BT
340 IF T$="1" THEN PLOT OVER 1;X-LF,Y-BT+8: RETURN
350 IF T$="0" OR T$="2" THEN RETURN
360 PRINT AT 21,3;X;" ";AT 21,11;Y;" "
370 GO TO 250
380 REM ROTATE
390 INPUT "ANGLE? ",AN: LET AN=AN*PI/180: INPUT "SCALE FACTOR? ",S: IF S=0 THEN LET S=1
400 INPUT "COORDINATES OF ORIGIN? "'O1,O2: IF Z$="2" AND O1<127 THEN LET O1=127
410 IF Z$="2" AND O2<83 THEN LET O2=83
420 LET LF=O1-127: LET BT=O2-83: LET RT=LF+255: LET TP=BT+167
430 CLS
440 FOR I=2 TO LEN A$ STEP 8
450 IF I>LEN A$ THEN LET SR=0: GO TO 640
460 RESTORE 910
470 READ I1,X1,I1,Y1,I1,X2,I1,Y2,X3,X4,Y3,Y4
480 LET X1=O1+INT (X3*COS AN+Y3*SIN AN)
490 LET X2=O1+INT (X4*COS AN+Y4*SIN AN)
500 LET Y1=O2+INT (-X3*SIN AN+Y3*COS AN)
510 LET Y2=O2+INT (-X4*SIN AN+Y4*COS AN)
520 IF SR=1 THEN OVER 1
530 GO SUB 20: IF SR=1 THEN GO SUB 580: IF T$="0" THEN LET T$="": LET SR=0: RETURN
540 NEXT I: LET SR=0
550 INPUT """ENTER"" = CONTINUE /""COP""= COPY ";Q$
560 IF Q$="COP" THEN COPY
570 RETURN
580 REM DELETE LINE
590 PRINT OVER 0;AT 21,0;"YCONFIRMNDELETE0QUIT": LET OT=0: OVER 1: GO SUB 20: GO SUB 20: LET T$=INKEY$: IF OT=1 THEN GO TO 620
600 IF T$<>"0" AND T$<>"Y" AND T$<>"y" AND T$<>"N" AND T$<>"n" THEN GO TO 580
610 IF T$="0" THEN RETURN
620 OVER 0: IF T$="Y" OR T$="y" OR OT=1 THEN GO SUB 20: RETURN
630 OVER 1: GO SUB 20: PAUSE 50: OVER 0: LET A$=A$( TO I-1)+A$(I+8 TO ): LET I=I-8: RETURN
640 REM MENU
650 BORDER 0: INK 0: PAPER 6: CLS : PRINT PAPER 2; INK 7;AT 1,12;"DESIGNER"
660 PRINT 'TAB 13; FLASH 1;"SELECT"; FLASH 0''" 1) INITIALIZE DISPLAY"
670 PRINT '" 2) ADD NEW LINES"''" 3) SCALE/ROTATE"
680 PRINT '" 4) DELETE LINES"''" 5) STOP "
690 LET R$=" 0QUIT1DEF2MOVE"
700 INPUT Z$: CLS
710 IF Z$="1" THEN GO SUB 800
720 IF Z$="2" THEN GO SUB 140
730 IF Z$="3" THEN LET SR=0: GO SUB 380
740 IF Z$="4" THEN LET SR=1: GO SUB 380
750 IF Z$="5" THEN GO TO 780
760 CLS : GO TO 640
770 DATA X,X,Y,Y,X5,Y5,X1,Y1
780 INPUT "DO YOU WISH TO SAVE THIS DESIGN?";Q$: IF Q$="Y" OR Q$="y" THEN SAVE "DESIGNER": PRINT "REWIND THE TAPE THEN ANY KEY WILL LET YOU VERIFY ": PAUSE 0: VERIFY "DESIGNER": PRINT " VERIFY COMPLETE"
790 STOP
800 REM BASIC SETUP
810 LET LF=0: LET BT=LF: LET TP=167: LET RT=255: LET A$=""
820 DEF FN A()=256*CODE (A$(I1))+CODE A$(I1+1)
830 DEF FN A$()=CHR$ INT (X3/256)+CHR$ (X3-256*INT (X3/256))+CHR$ INT (Y3/256)+CHR$ (Y3-256*INT (Y3/256))
840 DEF FN B$()=CHR$ INT (X4/256)+CHR$ (X4-256*INT (X4/256))+CHR$ INT (Y4/256)+CHR$ (Y4-256*INT (Y4/256))
850 DEF FN B()=X1+(X2-X1)*(ED-Y1)/(Y2-Y1)
860 DEF FN C()=X2+(X1-X2)*(ED-Y2)/(Y1-Y2)
870 DEF FN D()=Y1+(Y2-Y1)*(ED-X1)/(X2-X1)
880 DEF FN E()=Y2+(Y1-Y2)*(ED-X2)/(X1-X2)
890 DEF FN C$()=A$+FN A$()+FN B$()
900 LET A$=" ": RETURN
910 DATA I,(FN A()-O1)/S,I1+2,(FN A()-O2)/S,I1+2,(FN A()-O1)/S,I1+2,(FN A()-O2)/S,X1,X2,Y1,Y2
920 FOR F=1 TO LEN A$: PRINT CODE A$(F): NEXT F
930 SAVE "DESIGNER" LINE 10
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

