Home grown paint program for the 2068.
Copied from the “Hacker” TSUG of Las Vegas, NV March 1986. Copied by P. Hill, SINCUS.
The Modify Paper+Ink modify modes are copied exact, but with mono color monitor, it is hard to tell if they work.
Copyrighted – given to public domain – you are free to copy but not to profit from.
To SAVE run 9998
STOP to break into prg
Need joystick left side
MODES
- DRAW “d” Use joy stick or arrow keys, fire button draws-“z” causes skip space-“x” causes two space skip
- ERASE “e”to enter or exit erase mode. Can enter from other modes.
- LINE “l” flashing line drawn to cursor from last point drawn. “z” or”x” will ink inline.
- ARC “a” arc value shown at bottom and flashing line will curve. More “a” increases arc, “s” decreases arc. “l” resets arc to zero.
- RAY “r” works like line: lines radiate from common pt to follow cursor. “z” and “x” work with ray to space lines. arc modes work with ray.
- BOX “q” move cursor diagonally to stretch a box to size. Fire button, cursor keys, “z”, “x”, “e” work similar as with line mode.
- BRUSH draw. Enter”l” mode, form brush size by length of brush, then “b”. if line is vertical to start, length of brush is only that wide in horizont sweeps, vertical sweeps will be one pixel wide. Can enter “e” from brush, erase wide sweeps.
- FILL works in any mode, “f”=solid fill, “g”= 50% fill, “h”=stripes. Must be inside area to be filled. Must be a right side. Tone sounds on complete.
- COPY to copy an object on screen, “q” to form flashing box around object. While still flashing, and around object hit “w” for copy. Move box with arrow or joystick to increase or decrease size with “a” or”s” , fire bottun places object, takes awhile to work, wait 30 secs or so. “d” to get out of copy mode.
KEYS USED
- “1”-INK SELECT
- “2”-Border Select
- “3”-SAVE page
- “4”-LOAD page
- “5”-left arrow
- “6”-down arrow
- “7”-up arrow
- “8”-right arrow
- “0”-CLS with caps shift
- “q”-Box mode
- “w”-copy mode
- “e”-Erase mode
- “r”-Ray mode
- “t”-paper select
- “y”-Global paper
- “u”-ink change
- “i”-Global Ink
- “o”-Print page-2040
- “p”-Modify paper
- “a”-increase arc/copy
- “s”-decrease arc/copy
- “d”-DRAW mode
- “f”-FILL mode
- “g”-50% Fill mode
- “h”-fill striped
- “l”-LINE mode-arc reset
- “z”-1 space skip
- “x”-2 space skip
- “c”-Circle mode
- “b”-BRUSH mode
- “m”-ink modify
Appears on
Library tape of the Indiana Sinclair Timex User’s Group.
Source Code
2 CLS : INPUT "DOCUMENTATION Y/N ";A$ 3 IF A$="Y" THEN LIST 6000 10 REM "Paint"\*Rheesware 1984 LIST 6000 for documentation 20 POKE 23658,0: GO TO 8000 30 REM :{ GO TO 200: REM -joystick 40 LET a=|(1,1): IF s<>|(2,1) THEN LET s=|(2,1) 45 LET b=1: IF INKEY$<>"" THEN GO SUB 5000 50 IF NOT a THEN GO TO 100 60 LET x=x+x(a,b): LET y=y+y(a,b) 70 LET x=ABS x: LET y=ABS y 100 PLOT x,y: GO SUB mode: GO TO 40 200 IF NOT a THEN GO TO 40 210 LET x=x-x(a,b): LET y=y-y(a,b): GO TO 30 250 LET e=0: GO TO 8200 300 REM DRAW 310 PLOT x,y: IF s THEN PLOT OVER 0; INVERSE e; INK ink;x,y 390 RETURN 400 REM -line/ray- 410 LET x2=x1-x: LET y2=y1-y: IF arc THEN GO TO 450 415 DRAW x2,y2: PLOT x,y: DRAW x2,y2 420 IF s THEN PLOT OVER 0; INVERSE e; INK ink;x,y: DRAW OVER 0; INVERSE e; INK ink;x2,y2:: IF NOT r THEN LET x1=x: LET y1=y 430 RETURN 450 ON ERR GO TO 455: DRAW x2,y2,arc 455 ON ERR GO TO 460: PLOT x,y: DRAW x2,y2,arc 460 ON ERR GO TO 470: IF s THEN PLOT OVER 0; INVERSE e; INK ink;x,y: DRAW OVER 0; INVERSE e; INK ink,x2,y2,arc: IF NOT r THEN LET x1=x: LET y1=y: LET arc=0: GO TO 8200 470 ON ERR GO TO 200: RETURN 500 REM -brush- 510 ON ERR GO TO 2000: GO SUB 415: ON ERR GO TO 200: RETURN 600 REM -box- 610 LET x2=x1-x: LET y2=y1-y 615 DRAW x2,0: DRAW 0,y2: DRAW -x2,0: DRAW 0,-y2 620 PLOT x,y: DRAW x2,0: DRAW 0,y2: DRAW -x2,0: DRAW 0,-y2 630 IF s THEN OVER 0: LET x1=x: LET y1=y: DRAW x2,0: DRAW 0,y2: DRAW -x2,0: DRAW 0,-y2 640 INVERSE 0: INK 8: OVER 1: RETURN 800 REM CIRCLE 810 ON ERR GO TO 815: PLOT x,y: CIRCLE x,y,ABS x2 815 ON ERR GO TO 820: CIRCLE x,y,ABS x2 820 ON ERR GO TO 890: IF NOT s THEN STOP 830 CIRCLE INK ink; INVERSE e; OVER 0;x,y,ABS x2 890 ON ERR GO TO 200: RETURN 900 REM COPY 910 LET fm=1+ABS arc 915 IF SGN arc=-1 THEN GO TO 930 920 ON ERR GO TO 922: DRAW x2*fm,0: DRAW 0,y2*fm: DRAW -x2*fm,0: DRAW 0,-y2*fm 922 GO SUB 980 925 GO TO 970 930 ON ERR GO TO 940: DRAW x2/fm,0: DRAW 0,y2/fm: DRAW -x2/fm,0: DRAW 0,-y2/fm 940 GO SUB 980 950 ON ERR GO TO 960: PLOT x,y: DRAW x2/fm,0: DRAW 0,y2/fm: DRAW -x2/fm,0: DRAW 0,-y2/fm 960 GO TO 975 970 ON ERR GO TO 975: PLOT x,y: DRAW x2*fm,0: DRAW 0,y2*fm: DRAW -x2*fm,0: DRAW 0,-y2*fm 975 GO SUB 980: IF s THEN GO SUB 3000 977 ON ERR GO TO 200: RETURN 980 PLOT x1,y1 985 ON ERR GO TO 990: DRAW x2,0: DRAW 0,y2: DRAW -x2,0: DRAW 0,-y2 990 ON ERR GO TO 200: RETURN 1000 REM -fill- 1010 INVERSE e: LET e=NOT e: INK ink: ON ERR GO TO 1150: LET fm=1: OVER 0 1020 LET xmin=x: LET xp=x: LET yp=y 1025 IF POINT (x,y)=e THEN STOP 1030 GO TO 1100 1040 IF g THEN GO TO 1200 1042 PLOT x,y: LET x=x-1 1050 IF POINT (x,y)=e THEN LET xmin=x+1: LET x=xmax: GO TO 1070 1060 GO TO 1040 1070 LET y=y+fm: IF POINT (x,y)=NOT e THEN GO TO 1100 1080 LET x=x-1: IF POINT (x,y)=e THEN GO TO 1120 1090 LET xmax=x: GO TO 1040 1100 LET x=x+1: IF POINT (x,y)=e THEN LET xmax=x-1: GO TO 1040 1110 GO TO 1100 1120 IF x=xmin THEN GO TO 1140 1125 FOR x=x TO xmin STEP -1: IF NOT POINT (x,y)=e THEN LET xmax=x: GO TO 1040 1130 NEXT x 1140 IF fm=1 THEN LET fm=-1: LET x=xp: LET y=yp-1: GO TO 1100 1150 INVERSE 0: LET e=NOT e: INK 8: LET x=xp: LET y=yp: OVER 1: BEEP .4,-10: GO TO 200: RETURN 1200 LET i=(x*g+y)/2: IF i=INT i THEN PLOT x,y 1210 LET x=x-1: GO TO 1050 2000 ON ERR GO TO 2020: PLOT x,y: DRAW x2,y2 2020 IF NOT s THEN GO TO 2050 2030 ON ERR GO TO 2050: GO TO 420 2050 ON ERR GO TO 200: RETURN 3000 ON ERR RESET : IF y2=0 OR x2=0 THEN RETURN : REM -copy2- 3010 INK ink: OVER 0: INVERSE e: LET x3=x: LET y3=y: IF SGN arc=-1 THEN GO TO 3100 3020 FOR y=0 TO fm*y2 STEP SGN y2: FOR x=0 TO fm*x2 STEP SGN x2 3030 ON ERR GO TO 3040: IF POINT (x1+x/fm,y1+y/fm) THEN PLOT x3+x,y3+y 3040 IF INKEY$=" " THEN GO TO 3050 3045 NEXT x: NEXT y 3050 BEEP .4,-10: LET y=y3: LET x=x3: INK 8: INVERSE 0: OVER 1: RETURN 3100 FOR y=0 TO y2 STEP SGN y2: FOR x=0 TO x2 STEP SGN x2 3110 ON ERR GO TO 3120: IF POINT (x+x1,y+y1) THEN PLOT x3+x+fm,y3+y/fm 3120 GO TO 3040 4000 REM -wash- 4010 PRINT AT NOT PI,NOT PI;: FOR i=NOT PI TO 21: PRINT PAPER bord;,,: NEXT i: RETURN 4020 PRINT AT NOT PI,NOT PI;: FOR i=NOT PI TO 21: PRINT INK ink;,,: NEXT i: RETURN 4050 ON ERR GO TO 4095: FOR i=NOT PI TO 21: FOR g=NOT PI TO 31 4060 IF INT (ATTR (i,g)/8)=bord THEN PRINT AT i,g; PAPER ink;" " 4070 NEXT g: NEXT i: GO TO 4095 4080 ON ERR GO TO 4095: FOR i=NOT PI TO 21: FOR g=NOT PI TO 31 4085 IF ATTR (i,g)-8*INT (ATTR (i,g)/8)=bord THEN PRINT AT i,g; INK ink;" " 4090 NEXT g: NEXT i 4095 BEEP .4,-10: ON ERR GO TO 200: RETURN 5000 REM READ key 5010 LET i$=INKEY$: IF i$>"4" AND i$<"9" THEN LET a=VAL i$+6: RETURN 5020 IF i$="z" THEN LET s=1: LET b=2: RETURN 5030 IF i$="x" THEN LET s=1: LET b=3: RETURN 5040 IF i$="1" THEN GO TO 5200 5045 IF i$="2" THEN GO TO 5220 5050 IF i$="m" THEN PLOT INK ink;x,y: PLOT x,y: LET b=3: RETURN 5055 IF i$="p" THEN PLOT PAPER bord;x,y: PLOT x,y: LET b=3: RETURN 5060 IF i$="3" THEN ON ERR GO TO 5230: GO TO 5600 5065 IF i$="o" THEN ON ERR GO TO 5230: COPY : STOP 5070 IF i$=CHR$ 12 THEN PAPER bord: INK 9: CLS : PAPER 8: INK 8: GO TO 8200 5080 IF i$="e" THEN LET e=NOT e: GO TO 8200 5090 IF i$="d" THEN LET m$="Draw": LET arc1=0: LET mode=310: GO TO 250 5100 IF i$="l" THEN LET x1=x: LET r=0: LET arc1=.2: LET arc=0: LET y1=y: LET m$="Line": LET mode=410: GO TO 250 5105 IF i$="r" THEN LET x1=x: LET arc=0: LET arc1=.2: LET r=1: LET y1=y: LET m$="Ray": LET mode=410: GO TO 250 5110 IF i$="b" THEN IF m$="Line" THEN LET m$="Brush": LET r=1: LET arc1=0:: LET mode=510: GO TO 250 5120 IF arc1 THEN IF i$="a" OR i$="s" THEN LET arc=arc+(arc1 AND i$="a")-(arc1 AND i$="s"): LET a$="Arc/Size="+STR$ (INT (arc*10)/10)+" ": GO TO 8200 5125 IF i$="q" THEN LET x1=x: LET y1=y: LET m$="Box": LET mode=610: LET arc1=0: GO TO 250 5130 IF i$="f" THEN LET g=0: GO TO 1000 5135 IF i$="g" THEN LET g=1: GO TO 1000 5140 IF i$="h" THEN LET g=2: GO TO 1000 5145 IF i$="4" THEN GO TO 5500 5150 IF i$="c" THEN IF m$="Line" THEN LET m$="Circle": LET mode=810: LET arc1=0: GO TO 250 5155 IF i$="w" THEN IF m$="Box" THEN GO TO 5300 5160 IF i$="t" THEN GO TO 4000 5165 IF i$="y" THEN GO TO 4050 5170 IF i$="u" THEN GO TO 4020 5175 IF i$="i" THEN GO TO 4080 5180 IF i$=" STOP " THEN ON ERR RESET : STOP : GO TO 8200 5190 RETURN 5200 LET ink=ink+1: IF ink>7 THEN LET ink=0 5210 GO SUB 8200: RETURN 5220 LET bord=bord+1: IF bord>7 THEN LET bord=0 5225 BORDER bord: RETURN 5230 POKE 23658,0: BEEP .5,-10: GO TO 8200 5300 LET arc1=1: LET arc=0: LET mode=910: LET m$="Copy" 5320 LET x1=x: LET y1=y: GO TO 250 5500 LET i$=m$: LET m$="Start tape": GO SUB 8200: ON ERR GO TO 5520: OVER 0: PRINT AT 0,0; INK 9: LOAD ""SCREEN$ 5520 INK 8: OVER 1: LET m$=i$: GO TO 5230 5600 INPUT "NAME? "; LINE i$ 5610 IF i$="" THEN LET i$="paint" 5620 SAVE i$SCREEN$ : STOP 6000 REM instructions delete when done-copy to 2040- 6005 REM Copied from the "Hacker"TSUG of Las Vegas, NV March 1986 6010 REM 2405 Howard Dr.,Las Vegas, NV 89104-copied by P. Hill, SINCUS, 1229 Rhodes Rd. Johnson Cty, NY13790 6011 REM -the Modify Paper+Ink modify modes are copied exact-but with mono color monitor, it is hard to tell if they work. 6015 REM copyrighted-given to public domain-you are free to copybut not to profit from. 6020 REM to SAVE run 9998 STOP to break into prg Need joystick left side 6025 REM small cursor need monitor to see 6030 REM MODES-DRAW-"d"-use joy stick or arrow keys, fire button draws-"z" causes skip space-"x" causes two space skip 6035 REM MODES-ERASE-"e"to enteror exit erase mode. Can enter from other modes. 6040 REM MODES-LINE-"l"flashing line drawn to cursor from last point drawn."z" or"x" will ink inline. 6050 REM MODES-ARC-"a"arc value shown at bottom and flashing line will curve.More "a" increases arc,"s" dereases arc. "l" resets arc to zero. 6055 REM MODES-RAY-"r" works like line-lines radiate from common pt to follow cursor."z" and "x"work with ray to space lines. arc modes work with ray. 6060 REM MODES-BOX-"q" move cursor diagonally to strech a box to size.fire button,cursor keys, "z","x","e" work similiar as with line mode. 6065 REM MODES-BRUSH-draw. Enter"l"mode,form brush size by length of brush, then "b". if line isvertical to start, length of brush is only that wide in horizontsweeps, vertical sweeps will be one pixel wide. 6070 REM BRUSH cont-can enter "e" from brush, erase wide sweeps 6075 REM MODES-FILL-works in anymode, "f"=solid fill, "g"= 50% fill,"h"=stripes. must be inside area to be filled. Must be a right side. tone sounds on complete. 6080 REM MODES-COPY- to copy an object on screen,"q" to form flashing box around object. while still flashing, and around objecthit "w" for copy-move box with arrow or jystck-increase or decrease size with "a"or"s", firebotton places object, takes awhile towork, wait 30 secs or so."d" to get out of copy mode. 6085 REM KEYS USED 6090 REM "1"-INK SELECT 6095 REM "2"-Border Select 6100 REM "3"-SAVE page 6105 REM "4"-LOAD page 6110 REM "5"-left arrow 6115 REM "6"-down arrow 6120 REM "7"-up arrow 6125 REM "8"-right arrow 6130 REM "0"-CLS with caps shift 6135 REM "q"-Box mode 6140 REM "w"-copy mode 6145 REM "e"-Erase mode 6150 REM "r"-Ray mode 6155 REM "t"-paper select 6160 REM "y"-Global paper 6165 REM "u"-ink change 6170 REM "i"-Global Ink 6175 REM "o"-Print page-2040 6180 REM "p"-Modify paper 6185 REM "a"-increase arc/copy 6190 REM "s"-decrease arc/copy 6195 REM "d"-DRAW mode 6200 REM "f"-FILL mode 6205 REM "g"-50% Fill mode 6210 REM "h"-fill striped 6215 REM "l"-LINE mode-arc reset 6220 REM "z"-1 space skip 6225 REM "x"-2 space skip 6230 REM "c"-Circle mode 6235 REM "b"-BRUSH mode 6240 REM "m"-ink modify 8000 REM -startup- 8010 BORDER NOT PI: LET bord=NOT PI: LET ink=NOT PI: PAPER 7: INK 9: OVER 1: INVERSE NOT PI: BRIGHT NOT PI: CLS : INK 8: PAPER 8 8020 DIM x(14,PI): DIM y(14,PI): FOR i=1 TO 10: FOR a=1 TO 3: READ x(i,a),y(i,a): NEXT a: NEXT i 8030 FOR i=11 TO 14: READ x(i,1),y(i,1): NEXT i 8040 LET e=0: LET x=100: LET y=x: LET s=0 8050 DIM c$(8,7): FOR i=1 TO 8: READ c$(i): NEXT i 8060 LET arc=0 8190 LET i$="d": GO SUB 5020: GO TO 30 8200 REM -modeprint- 8210 ON ERR GO TO 8230: POKE 23659,0: PRINT AT 22,0; OVER 0; INK 0; PAPER 7;m$,("(erase)" AND e),c$(ink+1),(a$ AND (arc1 AND arc)) 8230 POKE 23659,2: ON ERR GO TO 200: RETURN 9500 DATA NOT PI,1,NOT PI,2,NOT PI,3,NOT PI,-1,NOT PI,-2,NOT PI,-3,NOT PI,NOT PI,NOT PI,NOT PI,NOT PI,NOT PI,-1,NOT PI,-2,NOT PI,-3,NOT PI,-1,1,-2,2,-3,3,-1,-1,-2,-2,-3,-3,NOT PI,NOT PI,NOT PI,NOT PI,NOT PI,NOT PI,1,NOT PI,2,NOT PI,3,NOT PI,1,1,2,2,3,3,1,-1,2,-2,3,-3 9510 DATA -8,0,0,-8,0,8,8,0 9520 DATA "Black","Blue","Red","Magenta","Green","Cyan","Yellow","White" 9998 SAVE "PAINTsinc" LINE 0: BEEP .01,.1: VERIFY "": BEEP 1,2: BEEP .2,.5