image of READY prompt

Wang2200.org

Listing of file='SKETCHPL' on disk='vmedia/2282_graphics_crt_demos.wvd.zip'

# Sector 71, program filename = 'SKETCHPL'
0000 DEFFN'0 "LIST S HEX(03) D 100,"
0001 DEFFN'1 "LIST S HEX(03) D 145,299"
0002 DEFFN'2 "LIST S HEX(03) D 700,899"
0004 DEFFN'4 "SCRATCH T#1,"; HEX(22); "SKETCHPL"; HEX(22); ": SAVE DC T#1, ()"
     ; HEX(22); "SKETCHPL" ;HEX(22)
0008 REM STUBBED ERASE
0017 DEFFN'17 "RENUMBER 145-299 TO 150 STEP 5"
0018 DEFFN'18 "RENUMBER 700-899 TO 700 STEP 5"
0099 DEFFN'126 HEX(60)
0100 DIM C(50,2),P$(100)12,P$12,P0$12,P1$12,K$1,K0$,P9$3
0105 DIM X,Y,R,S,P,D
0106 PRINT HEX(020D0C030F);TAB(14);HEX(020400020E);" Computer Aided Sketch Pad
     . ";HEX(020402000F)
0107 PRINT AT(3,0);
   : LINPUT "Graphic CRT is at what address?" ?-P9$
   : IF VER(P9$,"HHH")<3 OR POS("C4" = STR(P9$,,1))=0 THEN 107
0108 SELECT #15 <P9$>
   : ERRORGOTO 107
0109 $OPEN #15
   : ERRORGOTO 107
0110 SELECT PLOT  <P9$>
0120 PRINT AT(3,0,70);HEX(06);
0130 REM % INITIAL CONDITIONS
0132 GOSUB '50(999,999,999,999,999,-1)
   : P0$=P1$
0134 FOR I=1 TO 100
   : P$(I)=P0$
   : NEXT I
0136 X=400
   : Y=256
   : R=50
   : S=6
   : D=+1
0138 PLOT  <,,HEX(E5E103)>
0140 SELECT D
0142 GOSUB 650
0150 REM % MAIN LOOP
0155 GOSUB '53(X,Y,R,S,P,D)
0160 GOSUB '51(X,Y,R,S,P)
0165 GOSUB '52(X,Y,S,D)
0170 X0=X
   : Y0=Y
   : R0=R
   : S0=S
   : P0=P
   : D0=D
0175 KEYIN K$,,180
   : GOTO 175
0180 ON VAL(K$) GOSUB ,,715,705,720,725,710,8,755,751,730,740,745,735,805,,,,7
     16,706,721,726,711,,,,731,741,746,736,9999
   : ELSE GOTO 175
0185 IF VAL(K$)=10 THEN 195
0190 KEYIN K$,190,180
0195 IF VAL(K0$)=10 THEN 210
0200 GOSUB '51(X0,Y0,R0,S0,P0)
0205 GOSUB '52(X0,Y0,S0,-1)
0210 K0$=K$
0215 GOTO 155
0400 REM %CALCULATE IMAGE
0404 DIM X1,Y1,R1,S1,T1,I1,P1,R1(2,2),C1(50,2)
0408 DEFFN '51(X1,Y1,R1,S1,P1)
0409 MAT REDIM C(S1,2),C1(S1,2)
0412 T1=360/S1
0416 FOR I1=1 TO S1
0420 C1(I1,1)=R1*COS((I1-1)*T1)
0424 C1(I1,2)=R1*SIN((I1-1)*T1)
0428 NEXT I1
0432 R1(1,1),R1(2,2)=COS(P1)
   : R1(1,2)=+SIN(P1)
   : R1(2,1)=-SIN(P1)
0436 MAT C=C1*R1
0440 RETURN
0444 REM %PLOT
0448 DIM I1,D1,S1,X0,X1,Y0,Y1
0452 DEFFN'52(X1,Y1,S1,D1)
0456 IF D1>0 THEN PLOT  <,,HEX(E1)>,<,,R>
   : ELSE PLOT <,,HEX(E2)>,<,,R>
0460 X0=ROUND((C(1,1),0)
   : Y0=ROUND((C(1,2),0)
0464 PLOT  <X1+X0,Y1+Y0,U>
0468 FOR I1=2 TO S1+1
0472 IF I1<=S1 THEN 476
   : X1=ROUND((C(1,1),0)
   : Y1=ROUND((C(1,2),0)
   : GOTO 480
0476 X1=ROUND((C(I1,1),0)
   : Y1=ROUND((C(I1,2),0)
0480 PLOT  <X1-X0, Y1-Y0, D>
0482 X0=X1
   : Y0=Y1
0484 NEXT I1
0488 RETURN
0500 REM % PACK
0502 DIM X1,Y1,R1,S1,P1,D1,P1$12
0505 DEFFN'50(X1,Y1,R1,S1,P1,D1)
   : PACK (-###) P1$ FROM X1,Y1,R1,S1,P1,D1
   : RETURN
0550 REM % MENU
0555 DIM R1,C1
0560 DEFFN'53(X,Y,R,S,P,D)
0561 R1=2
   : C1=16
0565 PRINT AT(R1,C1);"Co-orinates of Centroid:"
0570 PRINT TAB(C1+5);
   : PRINTUSING 600,"X:",X
0575 PRINT TAB(C1+5);
   : PRINTUSING 600,"Y:",Y
0580 PRINT
   : PRINT TAB(C1);
   : PRINTUSING 605,"Number of sides:",S
0585 PRINT TAB(C1);
   : PRINTUSING 605,"Diameter:",2*R
0590 PRINT TAB(C1);
   : PRINTUSING 610,"Angle of rotation:",P,"`"
0595 RETURN
0600 %##  ###
0605 %###################  -### ###
0610 %###################  +### ###
0649 REM % SF KEY MENU
0650 PRINT AT(11,0);TAB(25);HEX(0E);"\D3\C6\A0\CB\C5\D9\D3\BA"
   : PRINT
0651 PRINT TAB(5); "'5  - Move Down";TAB(40);"'6  - Move Up"
0652 PRINT TAB(5);"'12 - Move Right";TAB(40);"'13 - Move Left"
0653 PRINT TAB(5);"'4  - Rotate left";TAB(40);"'7  - Rotate right"
0654 PRINT TAB(5);"'11 - Increase Size";TAB(40);"'14 - Decrease Size"
0655 PRINT TAB(5);"'3  - Increase number of sides";TAB(40);"'19 - Decrease num
     ber of sides"
0656 PRINT TAB(5);"'10 - Save Polygon";TAB(40);"'9  - Delete Polygon"
0657 PRINT TAB(5);"'15 - Re-draw Entire Screen";TAB(40);"'31 - Exit Program"
0658 PRINT TAB(12); "(Use upper case SF keys for more coarse adjustments)"
0659 RETURN
0700 REM % ADJUSTMENT SUBROUTINES
0704 REM '4,'20 - ROTATE LEFT
0705 P=P+1
   : RETURN
0706 P=P+10
   : RETURN
0709 REM '7,'23 - ROTATE RIGHT
0710 P=P-1
   : RETURN
0711 P=P-10
   : RETURN
0714 REM '3,'19 - NUMBER OF SIDES
0715 S=MIN(S+1,50)
   : RETURN
0716 S=MAX(S-1,2)
   : RETURN
0719 REM '5,'22 - DOWN
0720 Y=MAX(Y-1,ABS(R))
   : RETURN
0721 Y=MAX(Y-10,ABS(R))
   : RETURN
0724 REM '6,'22 - UP
0725 Y=MIN(Y+1,512-ABS(R))
   : RETURN
0726 Y=MIN(Y+10,512-ABS(R))
   : RETURN
0729 REM '11,'27 - INCREASE SIZE
0730 R=MIN(R+1,800-X,512-Y)
   : RETURN
0731 R=MIN(R+10,800-X,512-Y)
   : RETURN
0734 REM '14,'30 - DECREASE SIZE
0735 R=MAX(R-1,0)
   : RETURN
0736 R=MAX(R-10,0)
   : RETURN
0739 REM '12,'28 - MOVE RIGHT
0740 X=MIN(X+1,800-ABS(R))
   : RETURN
0741 X=MIN(X+10,800-ABS(R))
   : RETURN
0744 REM '13,'29 - MOVE LEFT
0745 X=MAX(X-1,ABS(R))
   : RETURN
0746 X=MAX(X-10,ABS(R))
   : RETURN
0750 REM '10 - SAVE POLYGON
0751 GOSUB '55(X,Y,R,S,P,+1)
   : RETURN
0754 REM '9 - DELETE POLYGON
0755 GOSUB '55(X,Y,R,S,P,-1)
   : RETURN
0800 REM % REDRAW
0801 DIM X2,Y2,R2,S2,P2,D2,I2
0805 PLOT  <,,HEX(03E5)>
0806 FOR I2=1 TO 100
0807 IF P$(I2)=P0$ THEN 825
0810 UNPACK (-###) P$(I2) TO X2,Y2,R2,S2,P2,D2
0815 GOSUB '51(X2,Y2,R2,S2,P2)
0820 GOSUB '52(X2,Y2,S2,D2)
0825 NEXT I2
   : RETURN
0850 REM % STORE POLYGON
0851 DIM L2$2,X2,Y2,R2,S2,P2,D2
0855 DEFFN'55(X2,Y2,R2,S2,P2,D2)
   : GOSUB '50(X2,Y2,R2,S2,P2,-D2)
0860 MAT SEARCH P$(),=P1$ TO L2$ STEP 12
0865 IF L2$>HEX(0000) THEN STR(P$(),VAL(L2$,2),12)=P0$
0870 GOSUB '50(X2,Y2,R2,S2,P2,D2)
0875 MAT SEARCH P$(),=P0$ TO L2$ STEP 12
0880 IF L2$>HEX(0000) THEN STR(P$(),VAL(L2$,2),12)=P1$
   : ELSE STOP "ARRAY FULL STUBBED." #
0885 RETURN
9999 DEFFN'31
   : $CLOSE
   : LOAD T "START"