Arcscratch

Developer(s): Wes Brzozowski, Paul Hill
Date: 198x
Type: Program
Platform(s): TS 2068

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"
Scroll to Top