Drawing program.
- v=Key In Pixel Cursor Position
- x=Set x-Point At Last Pixel
- d=Draw Line From Last 2 x-Points
- c=Circle From Last 2 x-Points
- g=Put Up The Reference Grid
- F=Fill In The Bounded Area
- q=Quickness Of Pixel Cursor
- a=Set Attribute For Character
- y=Put Character In Buffer
- z=Write Character Now In Buffer
- k=Keep Screen In Screen Buffer
- r=restore Screen A= Draw arc
- w=Write Charactere=erase line
- j=Joystick/PixelJ=Joystick line
- b=Border Color
- i=Ink Color
- p=Paper Color
- l=LPRINT Screen
- U=LOAD Screen
- s=SAVE Screen
- N=New Screen
- E=Exit Program
Joystick must be in left port. Characters must be upper or lower case as shown above.
Appears on
Library tape from the Sinclair Computer Users Society (SINCUS).
Gallery
Source Code
5 REM use joystick-hit cap H forhelp-early WES! 10 CLEAR 51175: DIM c(9) 20 LET px=0: LET py=0: LET lx=0: LET ly=0: LET x=0: LET y=0 30 FOR a=65000 TO 65122 40 READ d: POKE a,d 50 NEXT a 60 DATA 205,090,254,000,000,237,075,125,092,062,014,211,245,062,001,219,246,087,203,079,032,007,120,254,000,040,001,005,122,203,071,032,007,120,254,175,040,001,004,122,203,087,032,007,121,254,000,040,001,013,122,203,095,032,007,121,254,255,040,001,012,122,245,197,205,062,038,205,090,254,000,000,193,197,205,062,038,193,241,203,127,200,024,172,033,232,199,024,003,033,232,226,017,000,064,024,011,017,232,199,024,003,017,232,226,033,000,064,001,000,027,237,176,201,001,255,001,011,120,177,032,251,201 80 LET cx=0: LET cy=0 90 REM on err goto 100 removed temp while under construction 95 REM with apologizes to Wes, I'm trying to improve the capabilities of this program 100 IF INKEY$="E" THEN ON ERR RESET : STOP 105 IF INKEY$="A" THEN GO SUB 2000 110 IF INKEY$="N" THEN CLS 120 IF INKEY$="l" THEN COPY 130 IF INKEY$="k" THEN RANDOMIZE USR 65097: GO SUB 1300 140 IF INKEY$="r" THEN RANDOMIZE USR 65084 150 IF INKEY$<>"g" THEN GO TO 160 152 RANDOMIZE USR 65102: GO SUB 1100 153 IF INKEY$="g" THEN GO TO 153 155 RANDOMIZE USR 65089 160 IF INKEY$="d" THEN PLOT lx,ly: DRAW (px-lx),(py-ly) 170 IF INKEY$="x" THEN LET lx=px: LET px=x: LET ly=py: LET py=y: GO SUB 1300 175 IF INKEY$="x" THEN GO TO 175 180 IF INKEY$="c" THEN CIRCLE lx,ly,INT (.5+SQR ((lx-px)*(lx-px)+(ly-py)*(ly-py))) 190 IF INKEY$<>"b" THEN GO TO 200 194 INPUT AT 0,0;"Border Color? ";a 196 IF a>=0 AND a<=7 THEN BORDER INT a 200 IF INKEY$<>"i" THEN GO TO 210 204 INPUT AT 0,0;"Ink Color? ";a 206 IF a>=0 AND a<=7 THEN INK INT a 210 IF INKEY$<>"p" THEN GO TO 220 214 INPUT AT 0,0;"Paper Color? ";a 216 IF a>=0 AND a<=7 THEN PAPER INT a 220 IF INKEY$="s" THEN INPUT AT 0,0;"Screen Name? ";N$: IF N$<>"" THEN SAVE N$SCREEN$ 225 IF INKEY$="e" THEN GO SUB 7250 230 IF INKEY$="j" THEN GO SUB 1300: GO SUB 1010 235 IF INKEY$="J" THEN GO SUB 1300: GO SUB 1800 240 IF INKEY$="q" THEN INPUT AT 0,0;"Cursor Speed? 0-9 (0=fast)";a: IF a>=0 AND a<=9 THEN POKE 65116,INT a 250 IF INKEY$<>"F" THEN GO TO 260 251 LET xmin=x: LET xmax=x: PLOT x,y 252 IF POINT (xmin-1,y)=0 THEN PLOT xmin-1,y: LET xmin=xmin-1: GO TO 252 253 IF POINT (xmax+1,y)=0 THEN PLOT xmax+1,y: LET xmax=xmax+1: GO TO 253 254 FOR j=xmin TO xmax: LET ymax=y+1 255 IF POINT (j,ymax)=0 THEN PLOT j,ymax: LET ymax=ymax+1: GO TO 255 256 NEXT j 257 FOR j=xmin TO xmax: LET ymax=y-1 258 IF POINT (j,ymax)=0 THEN PLOT j,ymax: LET ymax=ymax-1: GO TO 258 259 NEXT j 260 IF INKEY$="w" THEN GO SUB 1200: INPUT AT 0,0;"Character? ";n$: PRINT AT cy,cx;n$(1) 270 IF INKEY$="U" THEN INPUT AT 0,0;"Screen Name? ";n$: LOAD n$SCREEN$ 280 IF INKEY$="a" THEN GO SUB 1200: INPUT AT 0,0;"Attribute Byte? ";a: POKE (22528+cx+32*cy),a 290 IF INKEY$<>"v" THEN GO TO 300 292 INPUT AT 0,0;"Cursor x Position? ";a: IF a>=0 AND a<=255 THEN LET x=INT a 294 INPUT AT 0,0;"Cursor y Position?";a: IF a>=0 AND a<=175 THEN LET y=INT a 300 IF INKEY$="y" THEN GO SUB 1200: GO SUB 1400: FOR j=0 TO 7: LET c(j+1)=PEEK (start+256*j): NEXT j: GO SUB 1300: LET c(9)=PEEK (22528+cx+32*cy) 310 IF INKEY$="z" THEN GO SUB 1200: GO SUB 1400: FOR j=0 TO 7: POKE (start+256*j),c(j+1): NEXT j: POKE (22528+cx+32*cy),c(9) 320 IF INKEY$="h" THEN GO SUB 1500 1000 GO TO 100 1010 OVER 1: LET p=USR 65000: OVER 0 1020 LET y=INT (p/256): LET x=p-y*256: RANDOMIZE USR 65102 1030 PRINT #1;x;" ",y;" " 1040 IF |(2,1)=1 THEN GO TO 1040 1050 RANDOMIZE USR 65089 1060 RETURN 1100 FOR j=0 TO 30 STEP 2 1110 FOR k=0 TO 20 STEP 2 1120 PRINT AT k,j;"\::": NEXT k: NEXT j 1160 RETURN 1200 RANDOMIZE USR 65102 1210 RANDOMIZE USR 65089: PRINT AT cy,cx;"\::" 1220 IF |(1,1)=2 AND cy<21 THEN LET cy=cy+1 1230 IF |(1,1)=1 AND cy>0 THEN LET cy=cy-1 1240 IF |(1,1)=4 AND cx>0 THEN LET cx=cx-1 1245 PRINT AT cy,cx;" " 1250 IF |(1,1)=8 AND cx<31 THEN LET cx=cx+1 1260 IF |(2,1)=0 THEN GO TO 1210 1270 RANDOMIZE USR 65089: RETURN 1300 POKE 20735,8: POKE 20991,8: POKE 21247,8: POKE 21503,9: POKE 21759,74: POKE 22015,172: POKE 22271,170: POKE 22527,73: PAUSE 20: POKE 20735,0: POKE 20991,0: POKE 21247,0: POKE 21503,0: POKE 21759,0: POKE 22015,0: POKE 22271,0: POKE 22527,0: RETURN 1400 LET tempy=cy: LET start=16384 1410 IF tempy>7 THEN LET tempy=tempy-8: LET start=start+2048: GO TO 1410 1420 LET start=start+cx+32*tempy: RETURN 1500 RANDOMIZE USR 65102: CLS 1520 PRINT "v=Key In Pixel Cursor Position" 1530 PRINT "x=Set x-Point At Last Pixel" 1540 PRINT "d=Draw Line From Last 2 x-Points" 1550 PRINT "c=Circle From Last 2 x-Points" 1560 PRINT "g=Put Up The Reference Grid" 1570 PRINT "F=Fill In The Bounded Area" 1580 PRINT "q=""Quickness"" Of Pixel Cursor" 1600 PRINT "a=Set Attribute For Character" 1610 PRINT "y=Put Character In Buffer" 1620 PRINT "z=Write Character Now In Buffer" 1630 PRINT "k=Keep Screen In Screen Buffer" 1640 PRINT "r=restore Screen \:: A= Draw arc" 1642 PRINT "w=Write Character\::e=erase line" 1643 PRINT "j=Joystick/Pixel\::J=Joystick line" 1650 PRINT "b=Border Color \::i=Ink Color" 1660 PRINT "p=Paper Color \::l=LPRINT Screen" 1670 PRINT "U=LOAD Screen \::s=SAVE Screen" 1680 PRINT "N=New Screen \::E=Exit Program" 1690 PRINT "\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::" 1700 PRINT "\::Joystick Must Be In Left Port \::" 1710 PRINT "\::\::Characters Must Be Upper Or \::\::" 1720 PRINT "\::\::\::Lower Case As Shown Above \::\::\::" 1730 IF INKEY$="h" THEN GO TO 1730 1740 RANDOMIZE USR 65089: RETURN 1800 OVER 0: LET p=USR 65000: OVER 1 1810 LET y=INT (p/256): LET x=p-y*256: RANDOMIZE USR 65102 1820 PRINT AT 0,0;x;" ",y;" " 1830 IF |(2,1)=1 THEN GO TO 1040 1840 RANDOMIZE USR 65089 1850 RETURN 1900 OVER 1: LET p=USR 65000: OVER 0 1910 LET y=INT (p/256): LET x=p-y*256: RANDOMIZE USR 65102 1920 PRINT #1;x;" ",y;" " 1930 IF |(2,1)=1 THEN GO TO 1040 1940 RANDOMIZE USR 65089 1950 RETURN 2000 REM draw arc 2001 REM "curve"by Paul Bingham, LIST, 2/85 adapted by Paul Hill 2010 LET q=60: DIM s(20): DIM u(20): DIM n(20): DIM f(120): DIM r(120) 2020 INPUT "total number of corners; ";g 2030 LET w=g-1 2040 INPUT "1st coordinates: x=";s;"y=";u 2050 FOR i=1 TO w+1 2060 LET s(i)=s: LET u(i)=u 2070 PLOT s,u: IF i=w+1 THEN GO TO 2090 2080 INPUT "next coordinates:x=";s;"y=";u 2090 NEXT i 2100 GO SUB 2120 2110 PAUSE 0: RETURN 2120 LET f(1)=s(1): LET r(1)=u(1) 2130 FOR e=2 TO q-1 2140 LET j=((e-1))/(q-1): LET n(1)=(1-j)^w 2150 FOR i=1 TO w 2160 LET n(i+1)=(g-i)/i*j/(1-j)*n(i) 2170 NEXT i 2180 LET f(e)=0: LET r(e)=0 2190 FOR i=1 TO w+1 2200 LET f(e)=f(e)+n(i)*s(i) 2210 LET r(e)=r(e)+n(i)*u(i) 2220 NEXT i 2230 NEXT e 2240 LET f(q)=s(g): LET r(q)=u(g) 2250 INPUT "Curve only-c;Frame & Curve-f";z$ 2260 IF z$="c" THEN GO TO 2310 2270 FOR i=1 TO w 2280 PLOT s(i),u(i) 2290 DRAW s(i+1)-s(i),u(i+1)-u(i) 2300 NEXT i 2310 FOR e=2 TO q-1 2320 PLOT f(e),r(e) 2330 NEXT e 2340 FOR i=1 TO g 2350 PLOT OVER 1;s(i),u(i) 2360 NEXT i 2370 RETURN 7250 LET xe=PEEK 23677 7255 LET ye=PEEK 23678 7260 IF |(1,1)=2 AND ye<175 THEN LET ye=ye-1 7262 IF |(1,1)=1 AND ye>0 THEN LET ye=ye+1 7264 IF |(1,1)=4 AND xe>0 THEN LET xe=xe-1 7265 PLOT INVERSE 1;xe,ye 7266 IF |(1,1)=8 AND xe<2550 THEN LET xe=xe+1 7268 IF |(2,1)=0 THEN GO TO 7260 7305 RETURN 9999 SAVE "arcSCRATCH"