home *** CD-ROM | disk | FTP | other *** search
- 100 CLS : CLEAR
- 120 ON TIMER (1) GOSUB 6120
- 140 TIMER ON
- 150 ON ERROR GOTO 10600
- 160 '
- 170 ' ****** TITLE SCREEN ******
- 171 SCREEN 2,0,0: SCREEN 0,1,0,0:KEY OFF:COLOR 4,0,1:CLS
- 172 PRINT:PRINT
- 173 PRINT:PRINT
- 180 PRINT " ************************************************************"
- 200 PRINT " ****** COMPUTER ASSISTED DESIGN AND DRAWING PROGRAM ******"
- 220 PRINT " ************************************************************"
- 222 PRINT:PRINT:PRINT
- 224 PRINT " COLOR VERSION - WRITTEN BY: "
- 226 PRINT:PRINT
- 228 PRINT " MICHAEL F. MILAN "
- 230 PRINT:PRINT " 1985"
- 232 FOR W7=1 TO 5000: NEXT W7
- 240 '
- 260 KEY OFF
- 280 DIM PIXARAY%(7361)
- 300 DIM STORE%(7361)
- 310 DIM X(20),Y(20),B(20),XP(100),YP(100)
- 315 CV=160:CH=100:CLR=2
- 320 '
- 340 '****** INSTRUCTION SCREENS ******
- 360 '
- 380 SCREEN 2,0,0:CLS
- 400 SCREEN 0,1,0,0:CLS: COLOR 15,1,4 : KEY OFF : CLS
- 420 L$= "COMPUTER ASSISTED DESIGN BY MICHAEL F. MILAN M.D."
- 440 GOSUB 5960
- 460 COLOR 6,1,4
- 480 PRINT TAB(6)"*********************************************************************" : PRINT
- 500 COLOR 15,1,4
- 520 PRINT"USE NUMERIC KEYPAD TO DRAW"TAB(50)"DIAG'S ANGLE = 45 DEGREES"
- 540 PRINT
- 560 PRINT"SPACE BAR TO CHANGE COLOR OF CURSOR " TAB(50)"X KEY TO END "
- 580 PRINT
- 600 COLOR 0,1,4
- 620 PRINT "CTRL F-1 : X=7,Y=6 CURSOR MOVEMENT" TAB(50)"SHIFT F-1 : CIRCLE"
- 640 PRINT "CTRL F-2 : X=01,Y=1 CURSOR MOVEMENT" TAB(50)"SHIFT F-2 : CHANGE DIAG (A/B)"
- 660 PRINT "CTRL F-3 : ELIPSE GENERATOR " TAB(50)"SHIFT F-3 : DRAW ANY ANGLE "
- 680 PRINT "CTRL F-4 : CHANGE CURSOR MOTION (X,Y)" TAB(50)"SHIFT F-4 : PIE CHART"
- 700 PRINT "CTRL F-5 : DRAW LINE " TAB(50)"SHIFT F-5 : "
- 720 PRINT "CTRL F-6 : FILLED RECTANGLE" TAB(50)"SHIFT F-6 :"
- 740 PRINT "CTRL F-7 : RECTANGLE" TAB(50)"SHIFT F-7 :"
- 760 PRINT "CTRL F-8 : *PAINT* INSIDE OF FIGURE" TAB(50)"SHIFT F-8 :"
- 780 PRINT "CTRL F-9 : PRESENT (X,Y) POSITION" TAB(50)"SHIFT F-9 :JOYSTICK DRAWING"
- 800 PRINT "CTRL F-10: CHANGE CURSOR POSITION" TAB(50)"SHIFT F-10 :BEZIER CURVE FIT"
- 820 PRINT
- 840 COLOR 14,1
- 860 PRINT "PROGRAM SAVE: S=SAVE SCREEN E=ERASE O=OVERLAY R=REPLACE P=PRINT ON SCREEN"
- 865 PRINT
- 880 PRINT "DRAW LINE : B=DEFINE START LINE T=DEFINE END LINE (WITH CURSOR LOCATION)"
- 900 COLOR 15,1,4
- 920 SOUND 800,1: SOUND 1200,1: SOUND 1800,1
- 940 PRINT "STIKE ANY KEY"
- 960 K$=INKEY$: IF K$="" THEN 960:BEEP:CLS
- 980 '
- 1000 ' ****** INSTRUCTION SCREEN PAGE 2 ******
- 1020 '
- 1040 CLS: LOCATE 1,2:PRINT:PRINT
- 1060 COLOR 0,1,4
- 1080 PRINT " ALT F-1: BSAVE SCREEN IMAGE " TAB(50) " \ TO CLEAR PROMPTS"
- 1100 PRINT " ALT F-2: BLOAD SCREEN IMAGE "
- 1120 PRINT " ALT F-3: SAVE FOR NEG. IMAGE"
- 1140 PRINT " ALT F-4: LOAD FOR NEG. IMAGE"
- 1160 PRINT " ALT F-5: BSAVE TO ANY FILE"
- 1180 PRINT " ALT F-6: BLOAD TO ANY FILE"
- 1200 PRINT " ALT F-7: SAVE PART OF SCREEN"
- 1220 PRINT " ALT F-8: PUT TO NEW LOCATION"
- 1240 PRINT " ALT F-9: CHANGE COLOR AND PALETTE"
- 1260 PRINT " ALT F-10: INSTRUCTION "
- 1280 PRINT:COLOR 6,1:PRINT "BEZEIR CURVE FITTING: `.' TO DEFINE CONTROL POINTS";
- 1282 PRINT TAB(24) "` C ' TO CLEAR ALL CONTROL POINTS"
- 1284 PRINT:PRINT:PRINT TAB(24) "PRESS JOYSTICK BUTTON (2) TO ACTIVATE CURSOR KEYS AGAIN" :PRINT:PRINT
- 1300 COLOR 14,1: PRINT "STRIKE ANY KEY TO SELECT BACKGROUND COLOR AND PALETTE"
- 1320 BEEP
- 1340 '
- 1360 SOUND 200,1: SOUND 400,1: SOUND 800,1: SOUND 1600,1: SOUND 3200,1
- 1380 K$=INKEY$: IF K$="" THEN 1380
- 1400 ' ************************
- 1420 ' * MAIN CAD PROGRAM !!! *
- 1440 ' ************************
- 1460 CLS
- 1480 GOSUB 7880
- 1500 '
- 1520 A=7 : B=6 : W$=" 45 DEGREE MODE "
- 1540 ' CV=160:CH=100:CLR=1
- 1560 PSET (CV,CH)
- 1580 PSET (CV,CH)
- 1600 '
- 1620 ' ****** KEYPAD FUNCTIONS DEFINED ******
- 1640 '
- 1660 K$=INKEY$: IF K$=" " THEN 1660
- 1680 IF LEN(K$)>1 THEN 2220
- 1700 IF K$="X" OR K$="x" THEN 1720 ELSE 1740
- 1720 SCREEN 2,0,0: CLS: KEY ON : END
- 1740 'STOR
- 1760 IF K$="S" OR K$="s" THEN OLDX=CV:OLDY=CH:OLDCOLR=POINT(CV,CH):GET(0,8)-(319,191),STORE%:BEEP:STORFLAG=1: PSET (OLDX,OLDY),OLDCOLR:GOTO 2120
- 1780 'OVERLAY
- 1800 IF K$="O" OR K$="o" THEN PUT (0,8),STORE%,OR:BEEP:PSET(OLDX,OLDY),OLDCOLR:GOTO 2120
- 1820 'REPL
- 1840 IF K$="R" OR K$="r" THEN PUT(0,8),STORE%,PSET:BEEP:PSET (OLDX,OLDY),OLDCOLR:GOTO 2120
- 1860 '
- 1880 IF K$="E" OR K$="e" THEN CLS:PSET (CV,CH):GOTO 2120
- 1900 IF K$="B" OR K$="b" THEN STARTX=POINT(0):STARTY=POINT(1):BEEP:GOTO 2120
- 1920 IF K$="T" OR K$="t" THEN ENDX=POINT(0) :ENDY=POINT(1) :BEEP:GOTO 10060
- 1923 IF K$="P" OR K$="p" THEN BEEP :GOSUB 4422
- 1926 IF K$="[" OR K$="{" THEN STARTX=POINT(0):STARTY=POINT(1):BEEP:GOTO 2120
- 1928 IF K$="]" OR K$="}" THEN ENDX=POINT(0) :ENDY=POINT(1) :BEEP:GOTO 2120
- 1930 IF K$="." THEN GOSUB 11000
- 1931 IF K$="C" OR K$="c" THEN GOSUB 11200
- 1932 IF K$="N" THEN W$=SPC(20):GOTO 2120
- 1935 IF K$="\" THEN GOSUB 11300 ' ERASE PROMPT AREA
- 1940 '
- 1952 '
- 1954 '
- 1960 ' ****** COLOR CHANGE WITH SPACE BAR ******
- 1980 '
- 2000 IF K$<>CHR$(32) THEN 1660
- 2020 CLR=CLR+1 : IF CLR>3 THEN CLR=0
- 2040 PSET (CV,CH),CLR
- 2060 '
- 2080 ' ****** HEADING DISPLAYED ******
- 2100 '
- 2120 LOCATE 1,(42-LEN(W$))/2:PRINT W$
- 2130 TIMER ON
- 2140 GOTO 1660
- 2160 '
- 2180 ' ****** CURSOR KEYS ACTIVATED ******
- 2200 '
- 2220 K= ASC (RIGHT$(K$,1))
- 2240 SOUND 1200,1
- 2260 '
- 2280 '
- 2300 ' ****** CURSOR KEYS ******
- 2320 '
- 2340 '
- 2360 IF K=72 THEN GOSUB 3380 ' UP
- 2380 IF K=80 THEN GOSUB 3480 ' DOWN
- 2400 IF K=77 THEN GOSUB 3600 ' RIGHT
- 2420 IF K=75 THEN GOSUB 3720 ' LEFT
- 2440 IF K=71 THEN GOSUB 3840 ' UP AND LEFT
- 2460 IF K=73 THEN GOSUB 3960 ' UP AND RIGHT
- 2480 IF K=79 THEN GOSUB 4080 ' DOWN AND LEFT
- 2500 IF K=81 THEN GOSUB 4200 ' DOWN AND RIGHT
- 2520 '
- 2540 '
- 2560 IF K=84 THEN GOSUB 8360 ' SHIFT F-1 CIRCLE GENERATOR
- 2580 IF K=85 THEN GOSUB 7180 ' SHIFT F-2 CHANGE DIAGONAL SUBROUTINE
- 2600 IF K=86 THEN GOSUB 8560 ' SHIFT F-3 RADIUS ANGLE DRAW
- 2620 IF K=87 THEN GOSUB 8860 ' SHIFT F-4 PIE CHART
- 2640 IF K=88 THEN GOSUB ***** ' SHIFT F-5
- 2660 IF K=89 THEN GOSUB ***** ' SHIFT F-6
- 2680 IF K=90 THEN GOSUB ***** ' SHIFT F-7
- 2700 IF K=91 THEN GOSUB ***** ' SHIFT F-8
- 2720 IF K=92 THEN GOSUB 20000 ' SHIFT F-9 JOYSTICK CONTROL
- 2740 IF K=93 THEN GOSUB 16000 ' SHIFT F-10 BEZIER CURVE FITTING
- 2760 '
- 2780 '
- 2800 IF K=94 THEN GOSUB 4320 ' CTRL F-1 CURSOR MOVEMENT: X=07, Y=6
- 2820 IF K=95 THEN GOSUB 4380 ' CTRL F-2 CURSOR MOVEMENT: X=1, Y=1
- 2840 IF K=96 THEN GOSUB 4500 ' CTRL F-3 ELIPSE SUBROUTINE
- 2860 IF K=97 THEN GOSUB 4760 ' CTRL F-4 CHANGE CURSOR MOTION TO ANY LENGTH
- 2880 IF K=98 THEN GOSUB 5200 ' CTRL F-5 LINE
- 2900 IF K=99 THEN GOSUB 5400 ' CTRL F-6 BOX WITH FILL
- 2920 IF K=100 THEN GOSUB 5620 ' CTRL F-7 BOX
- 2940 IF K=101 THEN GOSUB 7380 ' CTRL F-8 PAINT INTERIOR
- 2960 IF K=102 THEN GOSUB 5060 ' CTRL F-9 X,Y COORIDINATES OF CURSOR
- 2980 IF K=103 THEN GOSUB 4880 ' CTRL F-10 MOVE CURSOR TO ANY (X,Y)POSITION
- 3000 '
- 3020 '
- 3040 IF K=104 THEN GOSUB 6940 ' ALT F-1 BSAVE SCREEN
- 3060 IF K=105 THEN GOSUB 7040 ' ALT F-2 BLOAD SCREEN
- 3080 IF K=106 THEN GOSUB 6300 ' ALT F-3 SAVE SCREEN FOR CREATING NEG
- 3100 IF K=107 THEN GOSUB 6580 ' ALT F-4 LOAD SCREEN FOR NEGATINE IMAGE
- 3120 IF K=108 THEN GOSUB 10220 ' ALT F-5 BSAVE TO FILE OF CHOICE
- 3140 IF K=109 THEN GOSUB 10460 ' ALT F-6 BLOAD TO FILE OF CHOICE
- 3160 IF K=110 THEN GOSUB 6862 ' ALT F-7 SAVE PART OF SCREEN
- 3180 IF K=111 THEN GOSUB 6880 ' ALT F-8 PUT TO NEW LOCATION
- 3200 IF K=112 THEN GOSUB 7760 ' ALT F-9 COLOR INSTRUCTIONS
- 3220 IF K=113 THEN GOTO 3280 ' ALT F-10 INSTRUCTIONS REVEIW
- 3240 '
- 3260 ' SAVE SCREEN WHILE DISPLAYING INSTRUCTIONS!
- 3280 GET (0,8)-(319,191),PIXARAY%: INSTRFLAG=1 : GOTO 380
- 3300 GOTO 1660
- 3320 '
- 3340 ' ****** EXECUTION OF CURSOR MOTION ******
- 3360 '
- 3380 LINE (CV,CH)-(CV,CH-B),CLR 'UP
- 3400 CV=CV: CH=CH-B
- 3420 PSET (CV,CH)
- 3440 RETURN 2120
- 3460 '
- 3480 LINE (CV,CH)-(CV,CH+B),CLR 'DOWN
- 3500 CV=CV: CH=CH+B
- 3520 PSET (CV,CH)
- 3540 RETURN 2120
- 3560 '
- 3580 '
- 3600 LINE (CV,CH)-(CV+A,CH),CLR 'RIGHT
- 3620 CV=CV+A: CH=CH
- 3640 PSET (CV,CH)
- 3660 RETURN 2120
- 3680 '
- 3700 '
- 3720 LINE (CV,CH)-(CV-A,CH),CLR 'LEFT
- 3740 CV=CV-A: CH=CH
- 3760 PSET (CV,CH)
- 3780 RETURN 2120
- 3800 '
- 3820 '
- 3840 LINE (CV,CH)-(CV-A,CH-B),CLR 'UP & LEFT
- 3860 CV=CV-A: CH=CH-B
- 3880 PSET (CV,CH)
- 3900 RETURN 2120
- 3920 '
- 3940 '
- 3960 LINE (CV,CH)-(CV+A,CH-B),CLR 'UP & RIGHT
- 3980 CV=CV+A:CH=CH-B
- 4000 PSET (CV,CH)
- 4020 RETURN 2120
- 4040 '
- 4060 '
- 4080 LINE (CV,CH)-(CV-A,CH+B),CLR 'DOWN & LEFT
- 4100 CV=CV-A:CH=CH+B
- 4120 PSET (CV,CH)
- 4140 RETURN 2120
- 4160 '
- 4180 '
- 4200 LINE (CV,CH)-(CV+A,CH+B),CLR 'DOWN & RIGHT
- 4220 CV=CV+A:CH=CH+B
- 4240 PSET (CV,CH)
- 4260 RETURN 2120
- 4280 '
- 4300 '
- 4320 A=7 : B=6 :W$="45 DEGREE MODE "
- 4330 LOCATE 1,1:PRINT SPC(39)
- 4340 RETURN 2120
- 4360 '
- 4380 A=1 : B=1 : W$="X & Y MOVEMENT=1"
- 4390 LOCATE 1,1:PRINT SPC(39)
- 4400 RETURN 2120
- 4420 '
- 4422 ' ****** SCREEN LABEL SUBROUTINE ******
- 4423 LOCATE 1,1:PRINT SPC(39)
- 4424 LOCATE 1,1: INPUT "ENTER LABEL";P$
- 4425 XP=(CV/8)+.5: YP=(CH/8)+.5
- 4426 LOCATE YP,XP:PRINT P$
- 4427 LOCATE 1,1:PRINT SPC(39)
- 4428 CV=CV+6
- 4429 PSET (CV,CH),2
- 4430 RETURN 2120
- 4432 '
- 4440 '
- 4460 ' ****** CIRCLE SUBROUTINE ******
- 4480 '
- 4500 LOCATE 1,1: PRINT" "
- 4520 LOCATE 1,1: INPUT "ENTER RADIUS";R
- 4540 LOCATE 1,1: INPUT "COLOR: 0,1,2,3)";C
- 4560 LOCATE 1,1: INPUT " START IN DEGREES";F
- 4580 LOCATE 1,1: INPUT " END IN DEGREES ";E
- 4600 LOCATE 1,1: INPUT " ASPECT RATIO";A2
- 4620 PI=3.141593 : F=F*PI/180 : E=E*PI/180
- 4640 CIRCLE (CV,CH),R,C,F,E,A2
- 4660 LOCATE 1,1:PRINT" "
- 4680 RETURN 2120
- 4700 '
- 4720 ' ****** GIVE CURSOR ANY MOTION ******
- 4740 '
- 4760 LOCATE 1,1: INPUT "CURSOR MOTION X,Y";A,B
- 4780 LOCATE 1,1: PRINT " "
- 4800 RETURN 2120
- 4820 '
- 4840 ' ****** MOVE CURSOR TO ANY POSITION ******
- 4860 '
- 4880 LOCATE 1,1: INPUT "CURSOR POSITION: X , Y " ; X2,Y2
- 4900 LOCATE 1,1: PRINT " "
- 4920 PRESET (CV,CH)
- 4940 CV=X2 : CH=Y2
- 4960 PSET (CV,CH)
- 4980 RETURN 2120
- 5000 '
- 5020 ' ****** PRESENT CURSOR POSITION ******
- 5040 '
- 5060 LOCATE 1,1:PRINT "CURSOR AT:(X,Y)" TAB(30) "("CV",";CH")" TAB(60) "SPACE BAR TO CONT."
- 5080 IF INKEY$=CHR$(32) THEN 5100 ELSE 5060
- 5100 LOCATE 1,1: PRINT " "
- 5120 RETURN 2120
- 5140 '
- 5160 ' ****** LINE USING PHYSICAL COORIDANATES ******
- 5180 '
- 5200 LOCATE 1,1:INPUT "DRAW LINE FROM (X,Y) TO (X1,Y1)";S,T,U,V
- 5220 LOCATE 1,1:PRINT" "
- 5240 LOCATE 1,1:INPUT "COLOR (0,1,2,3)";W
- 5260 LOCATE 1,1:PRINT" "
- 5280 LOCATE 1,1:PRINT" "
- 5300 LINE (S,T)-(U,V),W
- 5320 RETURN 2120
- 5340 '
- 5360 ' ****** RECTANGLE FILLED WITH COLOR ******
- 5380 '
- 5400 LOCATE 1,1: INPUT "RECTANGLE; DIAGONAL FROM (X,Y) TO (X1,Y1)";S,T,U,V
- 5420 LOCATE 1,1:PRINT " "
- 5440 LOCATE 1,1: INPUT "COLOR (0,1,2,3)";W
- 5460 LOCATE 1,1:PRINT " "
- 5480 PRESET (CV,CH)
- 5500 LINE (S,T)-(U,V),W,BF
- 5520 CV=U:CH=V
- 5540 RETURN 2120
- 5560 '
- 5580 ' ****** RECTANGLE WITHOUT FILLED COLOR ******
- 5600 '
- 5620 LOCATE 1,1: INPUT "RECTANGLE; DIAGONAL FROM (X,Y)TO (X1,Y1)";S,T,U,V
- 5640 LOCATE 1,1:PRINT" "
- 5660 LOCATE 1,1: INPUT "COLOR (0,1,2,3)";W
- 5680 LOCATE 1,1:PRINT " "
- 5700 PRESET (CV,CH)
- 5720 LINE (S,T)-(U,V),W,B
- 5740 CV=U:CH=V
- 5760 RETURN 2120
- 5780 '
- 5800 '
- 5820 ' ****** CENTERED TITLE ******
- 5840 '
- 5860 '
- 5880 GOTO 200 ' GO TO MAIN PROGRAM
- 5900 '
- 5920 '
- 5940 '
- 5960 ' L$ IS A STRING CONTAINING A TITLE
- 5980 '
- 6000 LOCATE 1, (80-LEN(L$))/2
- 6020 PRINT L$
- 6040 RETURN
- 6060 '
- 6080 ' ****** TIME DISPLAY SUBROUTINE ******
- 6100 '
- 6120 OLDROW=CSRLIN ' SAVE CURRENT ROW
- 6140 OLDCOL=POS(0) ' SAVE CURRENT COLUMN
- 6160 LOCATE 1,1:PRINT TIME$;
- 6180 LOCATE OLDROW,OLDCOL 'RESTORE ROW & COL
- 6200 RETURN
- 6220 '
- 6240 '
- 6260 ' ****** STORAGE SUBROUTINES ******
- 6280 '
- 6300 ' PUT SCREEN IMAGE INTO ARRAY
- 6320 ERASE PIXARAY%: ' TO REDIMENSION
- 6340 DIM PIXARAY% (7361): 'SCREEN
- 6360 GET (0,8)-(319,191),PIXARAY%
- 6380 '
- 6400 'PUT IN DISK
- 6420 OPEN "PICTURE" FOR OUTPUT AS #1
- 6440 FOR ELEMENT=0 TO 7361
- 6460 PRINT #1, PIXARAY%(ELEMENT)
- 6480 NEXT ELEMENT
- 6500 CLOSE
- 6520 PSET (CV,CH)
- 6540 RETURN 2120
- 6560 '
- 6580 ' READ IMAGE FROM DISK INTO ARRAY
- 6600 ERASE PIXARAY%: ' CLEAR
- 6620 DIM PIXARAY%(7361)
- 6640 ELEMENT=0
- 6660 OPEN "PICTURE" FOR INPUT AS #1
- 6680 IF EOF(1) THEN CLOSE: GOTO 6800
- 6700 INPUT #1, PIXARAY%(ELEMENT)
- 6720 ELEMENT=ELEMENT+1
- 6740 GOTO 6680
- 6760 '
- 6780 ' PUT ARRAY BACK ON SCREEN
- 6800 PUT (0,8), PIXARAY%, PRESET
- 6820 PRESET (CV,CH)
- 6840 RETURN 2120
- 6860 '
- 6862 ' ****** SAVE PART OF SCREEN ******
- 6864 ERASE PIXARAY%
- 6866 T5=4+INT(((STARTX-ENDX)*2+7)/8)*(STARTY-ENDY)
- 6868 DIM PIXARAY%(T5)
- 6870 GET (STARTX,STARTY)-(ENDX,ENDY),PIXARAY%
- 6872 PSET (CV,CH)
- 6874 RETURN 2120
- 6876 '
- 6878 ****** PUT PART OF SCREEN TO NEW LOCATION ******
- 6880 '
- 6882 PUT (STARTX,STARTY),PIXARAY%,OR ' OVERLAY
- 6884 BEEP
- 6886 PSET (CV,CH):PSET (ENDX,ENDY),0
- 6888 RETURN 2120
- 6889 ' ****** SAVE IMAGE ON DISK IN FILE "IMAGE.BIN" ******
- 6900 '
- 6920 ' SAVE ONTO DISK WITH BSAVE AND BLOAD
- 6940 DEF SEG=&HB800: 'COLOR BUFFER
- 6960 BSAVE "IMAGE.BIN",0,16192
- 6980 CLS
- 7000 PSET (CV,CH)
- 7020 RETURN 2120
- 7040 DEF SEG=&HB800: '
- 7060 BLOAD "IMAGE.BIN",0
- 7080 DEF SEG
- 7100 PSET (CV,CH)
- 7120 RETURN 2120
- 7140 '
- 7160 '
- 7180 ' ****** DIAGNAL ANGLE SUBROUTINE ******
- 7200 '
- 7220 LOCATE 1,1:PRINT" "
- 7240 LOCATE 1,1
- 7260 INPUT "DIAG. ANGLE: 30 , 45 , 60";M
- 7280 LOCATE 1,1:PRINT" "
- 7300 IF M=30 THEN A=6: B=9:W$="30 DEGREE MODE"
- 7320 IF M=45 THEN A=7: B=6:W$="45 DEGREE MODE"
- 7340 IF M=60 THEN A=11:B=5:W$="60 DEGREE MODE"
- 7360 RETURN 2120
- 7380 '
- 7400 ' ****** PAINT SUBROUTINE ******
- 7420 '
- 7440 CLR=OLDCLR
- 7460 LOCATE 1,1:INPUT "PAINT; PALETTE #: (0,1,2,3) ";C3
- 7480 LOCATE 1,1:PRINT" "
- 7500 LOCATE 1,1:INPUT "WHAT IS BOUNDRY COLOR";C7
- 7520 LOCATE 1,1:PRINT" "
- 7580 PAINT (CV-24,CH),C3,C7
- 7600 PSET (CV,CH),C3
- 7620 '
- 7640 RETURN 2120
- 7660 '
- 7680 PAINT (CV,CH),0,0
- 7700 'PSET (CV,CH)
- 7720 '
- 7740 RETURN 2120
- 7760 '
- 7780 '
- 7800 ' ****** COLOR SELECTION SUBROUTINE ******
- 7820 '
- 7840 GET (0,8)-(319,191),PIXARAY% : INSTRFLAG=1
- 7860 SCREEN 2:CLS
- 7880 SCREEN 0,1,0,0 : COLOR 15,8,1 : CLS
- 7900 LOCATE 1,27: PRINT" SELECT COLORS FROM LIST "
- 7920 PRINT : PRINT
- 7940 PRINT" BACKGROUND PALETTE"
- 7960 PRINT
- 7980 PRINT " 0 BLACK 8 GRAY 0: 1 GREEN"
- 8000 PRINT " 1 BLUE 9 LIGHT BLUE 2 RED "
- 8020 PRINT " 2 GREEN 10 LIGHT GREEN 3 BROWN"
- 8040 PRINT " 3 CYAN 11 LIGHT CYAN "
- 8060 PRINT " 4 RED 12 LIGHT RED 1: 1 CYAN "
- 8080 PRINT " 5 MAGENTA 13 LIGHT MAGENTA 2 MAGENTA"
- 8100 PRINT " 6 BROWN 14 YELLOW 3 WHITE "
- 8120 PRINT " 7 WHITE 15 HIGH INTENSITY WHITE "
- 8140 COLOR 4,8,1:PRINT"***************************************************************************"
- 8160 COLOR 15,8,1:PRINT:
- 8180 INPUT "DO YOU WANT TO CHANGE COLOR SETTINGS? Y/N";K$
- 8200 IF K$="Y" OR K$="y" THEN 8240
- 8220 IF K$="N" OR K$="n" THEN 8300
- 8240 PRINT:PRINT:
- 8260 INPUT "BACKGROUND COLOR 1-15";KK
- 8280 INPUT "PALETTE NUMBER 1 OR 0";JJ
- 8300 CLS : SCREEN 1,0 : COLOR KK,JJ
- 8310 IF INSTRFLAG=1 THEN PUT(0,8),PIXARAY%,OR : INSTRFLAG=0 : GOTO 2120
- 8320 RETURN 1500
- 8340 '
- 8360 ' ****** CILCLE SUBROUTINE (MEDIUM RESOLUTION) ******
- 8380 '
- 8400 LOCATE 1,1:PRINT" "
- 8420 LOCATE 1,1:INPUT "RADIUS";R3
- 8440 LOCATE 1,1:INPUT "COLOR: 0,1,2,3:";C3
- 8460 LOCATE 1,1:PRINT " "
- 8480 '
- 8500 CIRCLE (CV,CH),R3,C3,,,.8333
- 8520 '
- 8540 RETURN 2120
- 8560 '
- 8580 '
- 8600 ' ****** ANGLES GENERATED BY RADIUS DRAWING ******
- 8620 '
- 8640 LOCATE 1,1:PRINT " "
- 8660 LOCATE 1,1:INPUT "LENGTH OF SIDES ";R4
- 8680 LOCATE 1,1:INPUT " COLOR ";C4
- 8700 LOCATE 1,1:INPUT "HEADING (IN DEGREES) SIDE 1";F4
- 8720 LOCATE 1,1:INPUT " HEADING (IN DEGREES) SIDE 2";E4
- 8740 PI=3.141593 : F4=F4*PI/180 : E4=E4*PI/180
- 8760 '
- 8780 CIRCLE (CV,CH),R4,C4,-F4,-E4,.8333
- 8800 CIRCLE (CV,CH),R4,0 , F4, E4,.8333
- 8820 LOCATE 1,1:PRINT" "
- 8840 RETURN 2120
- 8860 '
- 8880 ' *********************************************************************
- 8900 ' ****** PIE CHART ******
- 8920 ' *********************************************************************
- 8940 ' SCREEN 1,0 : COLOR 1,1
- 8960 ' CLS
- 8980 '
- 9000 PI=3.1415926535#
- 9020 DIM SECTOR%(25)
- 9040 '
- 9060 LOCATE 1,10: PRINT "TO STOP, ENTER A NEGATIVE"
- 9080 FOR D5= 1 TO 1000:NEXT D5
- 9100 TOTAL = 0
- 9120 J2 = 0
- 9140 ' INPUT LOOP
- 9160 J2 = J2+1
- 9180 LOCATE 1,1: PRINT " "
- 9200 LOCATE 1,1: INPUT "SIZE OF SECTOR";SECTOR%(J2)
- 9220 LOCATE 1,1: PRINT " "
- 9240 ' LOCATE 1,1: INPUT SECTOR(J2)
- 9260 IF SECTOR%(J2)<0 THEN 9340
- 9280 TOTAL = TOTAL+SECTOR%(J2)
- 9300 GOTO 9140
- 9320 '
- 9340 ' CONTINUE
- 9360 LOCATE 1,1: INPUT "RADIUS";RADIUS
- 9380 LOCATE 1,1:PRINT" "
- 9400 N=J2-1
- 9420 '
- 9440 IF CV=160 AND CH=100 THEN 9460 ELSE 9480
- 9460 LOCATE 22,1:PRINT"TOTAL=";TOTAL
- 9480 LOCATE 1,1:INPUT "TITLE OF PIE CHART";W$
- 9490 LOCATE 1,1:PRINT" "
- 9500 '
- 9520 BEGA=0
- 9540 ' (RADIUS LINE)
- 9560 '
- 9580 FOR J2=1 TO N
- 9600 ENDA=2*PI*SECTOR%(J2)/TOTAL+BEGA
- 9620 MIDA=(BEGA+ENDA)/2
- 9640 '
- 9660 X9 = CV+COS(MIDA)*RADIUS*1.2
- 9680 Y9 = CH-SIN(MIDA)*RADIUS*1
- 9700 M$ = STR$(SECTOR%(J2))
- 9720 LOCATE (Y9+5)/8, X9/8-LEN(M$)/2 +.5
- 9740 PRINT M$;
- 9760 '
- 9780 A1 = -BEGA-.001
- 9800 A2 = -ENDA
- 9820 CIRCLE(CV,CH),RADIUS,,A1,A2
- 9840 '
- 9860 BEGA=ENDA
- 9880 X9 = CV+COS(MIDA)*RADIUS/2
- 9900 Y9 = CH-SIN(MIDA)*RADIUS/2
- 9920 PAINT (X9,Y9),(J2 MOD 4),3
- 9940 NEXT J2
- 9960 '
- 9980 ERASE SECTOR%
- 10000 RETURN 2120
- 10020 '
- 10040 ' ****** LINE USING CURSOR POSITION ******
- 10060 '
- 10080 ' ###################################################################
- 10100 ' ****** LINE BY CURSOR POSITION ******
- 10120 '
- 10140 LINE (STARTX,STARTY)-(ENDX,ENDY),CLR
- 10160 PSET (CV,CH)
- 10180 GOTO 2120
- 10200 ' ###################################################################
- 10220 '
- 10240 ' ****** SAVE ONTO DISK WITH BSAVE AND BLOAD ******
- 10260 '
- 10280 LOCATE 1,1: INPUT "WHAT IS THE NAME OF FILE";FILE$
- 10300 LOCATE 1,1:PRINT" "
- 10320 DEF SEG=&HB800: 'COLOR BUFFER
- 10340 BSAVE FILE$ ,0,16192
- 10360 CLS
- 10380 PSET (CV,CH)
- 10400 RETURN 2120
- 10420 '
- 10440 ' ****** LOAD TO SCREEN IMAGE FROM DISK FILE ******
- 10460 '
- 10480 DEF SEG=&HB800: '
- 10500 LOCATE 1,1:INPUT"WHAT IS THE FILE NAME ";FILE$
- 10520 LOCATE 1,1:PRINT" "
- 10540 BLOAD FILE$,0
- 10560 DEF SEG
- 10580 RETURN 2120
- 10600 '
- 10610 ' ****** ERROR TRAP ******
- 10620 BEEP:BEEP:BEEP
- 10625 TIMER OFF
- 10630 LOCATE 1,1:PRINT SPC(39)
- 10640 LOCATE 25,1:PRINT SPC(39)
- 10650 LOCATE 1,1:PRINT "ERROR # " ERR "IN LINE" ERL;
- 10660 RESUME 10670
- 10670 POKE 1050,PEEK(1052)
- 10680 LOCATE 25,1:PRINT " -PRESS ANY KEY TO CONTINUE";
- 10690 K$=INKEY$: IF K$="" THEN 10690
- 10700 GOSUB 10720
- 10710 GOTO 2120
- 10720 LOCATE 1,1:PRINT SPC(39)
- 10730 LOCATE 25,1:PRINT SPC(39)
- 10740 RETURN
- 10750 '
- 11000 '
- 11010 ' ****** PLOT CONTROL POINTS FOR BEZEIR CURVE FITTING ******
- 11020 X(I)=POINT(0): Y(I)=POINT(1)
- 11030 ' W$=VAL(X(I)) "," VAL(Y(I))
- 11040 NC=NC+1 : I=I+1
- 11050 BEEP
- 11060 IF NC=>21 THEN W$="> LIMIT CON. PTS." ELSE W$="ANOTHER CONTROL POINT?"
- 11070 RETURN 2120
- 11080 '
- 11200 '
- 11210 ' ****** CLEAR CONTROL POINTS (BEZEIR CURVE FITTING) ******
- 11220 FOR I2=0 TO I
- 11230 X(I)=0 :Y(I)=0
- 11235 I=I+1
- 11240 NEXT I2
- 11250 NC=0 : I=0
- 11255 BEEP:BEEP
- 11260 RETURN 2120
- 11270 '
- 11280 '
- 11300 '
- 11320 ' ****** CLEAR PROMPT AREAS ******
- 11340 '
- 11350 TIMER OFF
- 11360 LOCATE 1,1:PRINT SPC(39)
- 11380 LOCATE 25,1: PRINT SPC(39)
- 11400 IF INKEY$="" THEN 11400
- 11420 BEEP
- 11440 RETURN 2120
- 11460 '
- 11480 '
- 16000 ' ***********************************************
- 16020 ' *********** BEZFIT ******************
- 16040 ' ***********************************************
- 16060 '
- 16080 '
- 16100 ' *** BEZFIT FOR INTERACTIVE BEZIER CURVE FITTING ***
- 16120 '
- 16124 TIMER OFF
- 16140 ' DIM X(20),Y(20),B(20),XP(100),YP(100)
- 16160 ' KEY OFF: SCREEN 1,0,0,0: COLOR 0,0 CLS
- 16180 DEF FN LCASE$(A$)=CHR$(ASC(A$+" ") -32*("A"<=A$ AND A$<="Z"))
- 16200 DUMP$="BEZDUMP": B$=CHR$(29)
- 16220 ON ERROR GOTO 19820
- 16240 '
- 16260 ' *** DISPLAY MAIN MENU AND BRANCH ON RESPONSE ***
- 16280 '
- 16300 CO=CLR
- 16310 FLAG=0
- 16320 GOSUB 18620
- 16335 LOCATE 1,1
- 16340 PRINT " 1 PLOT 2 ERASE 3 CHANGE CURVE OR LINE"
- 16360 LOCATE 25,1
- 16380 PRINT "4 DUMP 5 CLEAR 6 RELD SCREEN 7 QUIT ";
- 16400 OP=VAL(INPUT$(1))
- 16420 GOSUB 18620: ON OP GOTO 16540,17160,17260,18000,18200,18300,18500
- 16440 GOSUB 18760: GOTO 16300
- 16460 '
- 16480 '
- 16500 ' *** PLOT A CURVE ***
- 16520 '
- 16540 LOCATE 1,1: PRINT "NUMBER OF CONTROL PTS.= ";NC
- 16560 IF NC<1 OR NC>21 THEN GOSUB 18740: GOTO 16260
- 16580 N=NC-1
- 16600 LOCATE 25,1
- 16620 PRINT " WANT TO SEE THE POINTS (TYPE y OR n): ";
- 16640 Q$=FN LCASE$(INPUT$(1)): GOSUB 18620
- 16660 FOR I=0 TO N
- 16690 LOCATE 1,1: PRINT SPC(39) : LOCATE 1,1
- 16700 PRINT "POINT" I+1 B$ ":" X(I) Y(I);
- 16740 IF Q$="y" THEN PSET (X(I),Y(I))
- 16760 LOCATE 25,1: PRINT "TYPE k TO KEEP, c TO CHANGE: ";
- 16780 R$=FN LCASE$(INPUT$(1)): GOSUB 18660
- 16800 IF R$<>"c" THEN 16900
- 16820 PRESET (X(I),Y(I))
- 16850 LOCATE 1,1
- 16860 PRINT SPC(18)
- 16880 GOTO 16680
- 16900 NEXT I
- 16920 IF N=0 THEN PSET (X(0),Y(0)),CO: GOTO 16980
- 16940 IF N=1 THEN LINE (X(0),Y(0))-(X(1),Y(1)),CO: GOTO 16980
- 16960 GOSUB 18920
- 16980 GOSUB 18620: PRINT "PRESS ANY KEY TO ERASE THE DATA";
- 17000 IN$=INPUT$(1)
- 17020 LOCATE 1,1:PRINT SPC(39)
- 17040 LOCATE 25,1: PRINT SPACE$(39);
- 17080 GOTO 16300
- 17100 '
- 17120 ' *** ERASE A CURVE ***
- 17140 '
- 17160 CO=0:FLAG=1
- 17180 GOTO 16540
- 17200 '
- 17220 '
- 17240 ' *** ALTER A CURVE ***
- 17260 GOSUB 18620
- 17270 LOCATE 1,1
- 17280 PRINT "1ERASE 1ST CURVE,2 DIS COORD,3 ALT PT ";
- 17320 LOCATE 25,1
- 17340 PRINT "4 DIS NEW CURVE, 5 RETURNS MAIN MENU: ";
- 17360 OQ=VAL(INPUT$(1))
- 17380 GOSUB 18620
- 17400 ON OQ GOTO 17480,17560,17700,17900,16300
- 17420 GOSUB 18740: GOTO 17240
- 17440 '
- 17460 ' *** ERASE THE LAST CURVE ***
- 17480 CO=0:FLAG=1: GOSUB 19520
- 17500 CO=CLR:FLAG=0: GOTO 17240
- 17520 '
- 17540 ' *** DISPLAY THE COORDINATES ***
- 17560 FOR I=0 TO N
- 17580 PSET ( X(I), Y(I) ),2
- 17620 NEXT I
- 17640 GOTO 17240
- 17660 '
- 17680 ' *** ALTER A POINT ***
- 17700 INPUT; "ID # OF POINT: ", I
- 17720 LOCATE 1,1: PRINT SPC(38)
- 17740 LOCATE 25,1: PRINT "OLD X,Y:" X(I-1) B$ ","Y(I-1);
- 17760 LOCATE 1,6: INPUT; "NEW X: ",V$
- 17780 IF V$="" THEN PRINT X(I-1) B$; ELSE X(I-1)=VAL(V$)
- 17820 LOCATE 1,20: INPUT; "NEW Y: ",V$
- 17840 IF V$="" THEN PRINT Y(I-1); ELSE Y(I-1)=VAL(V$)
- 17860 GOTO 17240
- 17880 '
- 17900 ' *** DISPLAY NEW CURVE ***
- 17920 GOSUB 18920
- 17940 GOTO 17240
- 17960 '
- 17980 ' *** DUMP THE SCREEN ***
- 18000 DEF SEG=&HB800
- 18020 PRINT "NAME OF FILE (WAS " DUMP$ "): ";
- 18040 INPUT; "", NEWDUMP$
- 18060 IF NEWDUMP$ <> "" THEN DUMP$=NEWDUMP$
- 18080 BSAVE DUMP$,0,&H4000
- 18100 DEF SEG=0
- 18120 GOTO 16300
- 18140 '
- 18160 '
- 18180 ' *** CLEAR THE SCREEN ***
- 18200 CLS
- 18220 GOTO 16300
- 18240 '
- 18260 '
- 18280 ' *** RELOAD SCREEN ***
- 18300 DEF SEG=&HB800
- 18320 PRINT "NAME OF FILE (WAS " DUMP$ "): ";
- 18340 INPUT; "", NEWDUMP$
- 18360 IF NEWDUMP$ <> "" THEN DUMP$=NEWDUMP$
- 18380 BLOAD DUMP$,0
- 18400 DEF SEG=0
- 18420 GOTO 16300
- 18440 '
- 18460 '
- 18480 ' *** QUIT ***
- 18500 CLOSE
- 18520 ON ERROR GOTO 0
- 18540 LOCATE 1,1
- 18560 GOTO 2120
- 18580 '
- 18600 '
- 18620 ' *** CLEAR THE PROMPT AREA ***
- 18640 LOCATE 1,1: PRINT SPC(39)
- 18660 LOCATE 25,1: PRINT SPC(39): LOCATE 1,1
- 18680 RETURN
- 18700 '
- 18720 '
- 18740 ' *** INVALID RESPONSE TO A PROMPT ***
- 18760 GOSUB 18620: PRINT "INVALID REQUEST";
- 18780 LOCATE 25,1: PRINT " - PRESS ANY KEY TO CONTINUE";
- 18800 LOCATE 1,1
- 18820 POKE 1050,PEEK(1052)
- 18840 IF INKEY$="" THEN 18840
- 18850 GOSUB 18640
- 18860 RETURN
- 18880 '
- 18900 '
- 18920 ' *** PLOT A CURVE ***
- 18940 GOSUB 18620
- 18960 INPUT; "NUMBER OF POINTS TO BE PLOTTED: ",NU
- 18980 IF NU<3 THEN RETURN ELSE IF NU>100 THEN NU=100
- 19000 NP=NU-2
- 19020 XP(0)=X(0)
- 19040 YP(0)=Y(0)
- 19060 FOR IP=1 TO NP
- 19080 LOCATE 25,30
- 19100 IF IP MOD 2 THEN PRINT "COMPUTING"; ELSE PRINT SPC(10)
- 19120 U=IP/(NP+1)
- 19140 B(0)=(1-U)^N: B(N)=U^N
- 19160 IF IP>NP/2 THEN 19260
- 19180 FOR I=1 TO N-1
- 19200 B(I)=(N-I+1)/I * U/(1-U) * B(I-1)
- 19220 NEXT I
- 19240 GOTO 19320
- 19260 FOR I=N-1 TO 1 STEP -1
- 19280 B(I)=(I+1)/(N-I) * (1-U)/U * B(I+1)
- 19300 NEXT I
- 19320 XP(IP)=0
- 19340 YP(IP)=0
- 19360 FOR I=0 TO N
- 19380 XP(IP)=XP(IP)+B(I)*X(I)
- 19400 YP(IP)=YP(IP)+B(I)*Y(I)
- 19420 NEXT I
- 19440 NEXT IP
- 19460 XP(NP+1)=X(N)
- 19480 YP(NP+1)=Y(N)
- 19500 GOSUB 18620
- 19520 PRINT " 1 JUST CURVE, 2 CURVE AND HULL: ";
- 19540 IN=VAL(INPUT$(1))
- 19545 IF FLAG=0 THEN GOTO 19550 ELSE GOTO 19560
- 19550 LOCATE 1,1:PRINT SPC(39)
- 19552 LOCATE 1,1:INPUT "COLOR (0,1,2,3)"; CO
- 19560 PSET (X(0),Y(0)),CO
- 19580 IF IN=1 THEN 19680
- 19600 FOR I=1 TO N
- 19620 LINE -(X(I),Y(I)),CO
- 19640 NEXT I
- 19660 PSET (XP(0),YP(0)),CO
- 19680 FOR IP=1 TO NP+1
- 19700 LINE -(XP(IP),YP(IP)),CO
- 19720 NEXT IP
- 19740 RETURN
- 19760 '
- 19780 '
- 19800 '
- 19820 ' *** ERROR TRAP ***
- 19840 BEEP
- 19860 GOSUB 18620: PRINT "ERROR NO." ERR "IN LINE" ERL;
- 19880 RESUME 19900
- 19900 GOSUB 18800
- 19920 GOTO 16260
- 19940 '
- 19960 ' *** JOYSTICK DRAWING SUBROUTINE ***
- 19980 ' ***************************************
- 20000 ' SCREEN 1,0: COLOR K,CLR
- 20020 STRIG(0) ON
- 20040 STRIG(4) ON
- 20060 ON STRIG(0) GOSUB 20200
- 20080 ON STRIG(4) GOSUB 20260
- 20100 PSET(STICK(0)*2.8,STICK(1)*2.1)
- 20120 X = STICK(0)*2.8
- 20140 Y = STICK(1)*2.1
- 20160 LINE -(X,Y),CLR
- 20180 GOTO 20120
- 20200 CLR=CLR+1 : IF CLR>3 THEN CLR=0
- 20240 RETURN
- 20260 '
- 20280 PSET(STICK(0)*2.8,STICK(1)*2.1),CLR: STRIG(0) OFF: STRIG(4) OFF
- 20300 RETURN 2120