--- title: "Supershaper" id: 71978 type: "computer_media" slug: "supershaper" url: "http://localhost/computer_media/supershaper/" markdown_url: "http://localhost/computer_media/supershaper.md" published_at: "2026-10-20T14:58:55+00:00" modified_at: "2026-10-20T14:58:56+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/1a_Shaper_1.png" excerpt: "Design user-defined graphics with a joystick on an 8×8 grid, or enter them as binary or decimal rows, then save the set and merge it into your own programs." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "Ken Wildman" slug: "ken-wildman" taxonomy: "indiv" url: "http://localhost/indiv/ken-wildman/" genre: - name: "User Defined Graphics" slug: "user-defined-graphics" taxonomy: "genre" url: "http://localhost/type/user-defined-graphics/" media_contents: - id: 71988 title: "Misc Programs" type: "computer_media" url: "http://localhost/computer_media/misc-programs/" media_type: "Program" programmers: - name: "Ken Wildman" slug: "ken-wildman" taxonomy: "indiv" url: "http://localhost/indiv/ken-wildman/" tsrun_member: "Misc Programs (198x)(-)(TS2068)(US)(Cassette)/SideB/1_shaper.tap" mediadate: "1984" images: - url: "http://localhost/wp-content/uploads/2026/10/1a_Shaper_1.png" - url: "http://localhost/wp-content/uploads/2026/10/1a_Shaper_0.png" - url: "http://localhost/wp-content/uploads/2026/10/1b_Shapemove.png" - url: "http://localhost/wp-content/uploads/2026/10/1c_dancer.png" media_type_tags: "User Defined Graphics" --- # Supershaper A set of tools for designing user-defined graphics. The main program, `shaper`, gives a menu-driven 8×8 editor in which squares are painted by moving a cursor with a joystick and holding the fire button. Patterns can also be typed in as eight binary rows or eight decimal values. Each finished shape is shown with its binary and decimal values for every row and POKEd into the chosen UDG from A to U. The program can display the current UDG area in binary, decimal and address form, collect all 21 characters into a string array, and save that array to tape. It also has several pages of instructions. A second program, `shapemove`, loads a saved shape array and writes it into a single `DATA` statement. Following the step-by-step instructions in its `REM` lines, the user then moves that statement, together with a short loader routine, into a target program. Two shape files, `library1` and `library2`, follow on the tape, and a short demonstration, `dancer`, animates four UDGs at random positions once the `library2` shapes have been installed. The title screen reads “Supershaper, © 1983 Ken Wildman, © 1984 C.W. Associates”, and the instructions refer to an instruction sheet packed with the tape. *** ## Program Analysis ### Program Structure 1. **Menu** (lines 1–18): nine options, dispatched with a single computed `GO TO` that adds together terms such as `(7000 AND CH=1)`. 2. **Editor** (lines 1000–1310): draws the 8×8 grid with `PLOT` and `DRAW`, then loops reading `STICK (1,2)` for direction and `STICK (2,2)` for the fire button. Pressing `a` finishes the shape. 3. **Conversions** (lines 2000–4050): decimal-to-binary and binary-string input into the grid array `f()`, and a routine that prints each row’s binary and decimal values. 4. **Assignment** (lines 5000–5310): asks for a letter and POKEs the eight row values into `USR l$`, then draws lines from the grid to a small box holding the new graphic, labelled with its letter. 5. **Array and save** (lines 9500–9890): reads the 168 bytes at 65368 into `p$(21,24)` as 3-digit strings and saves them with `SAVE s$ DATA p$()`. ### Shapemove and Dancer `shapemove` loads the array with `LOAD n$ DATA p$()` and then writes the digits straight into the body of its own line 1, a `DATA` statement that starts out filled with zeros, beginning at the fixed address 26714. After each three digits it adds a comma, the number marker `CHR$ 14` and five zero bytes. Those hidden binary values stay zero until the line is edited and entered again, and step 3 of the instructions, which changes line 1 into line 9890, is what makes BASIC rebuild them. Lines 9850–9875 then `READ` the 168 values into `USR "a"` to `USR "u"+7`. `dancer` starts at line 250, which only prints “LIST THE PROGRAM BEFORE RUNNING”. Its line 100 tells the user to add the graphics from `library2` first. The animation then cycles through UDGs a–d forward and back three times at one spot and moves to a random new position. ### Potential Issues - Line 3 calls `GO SUB 600`, but there is no line 600. It works because execution continues from line 640, the next line. - The paint routine at line 2230 prints a space, not a block, for each 1 bit, so patterns entered in binary or decimal do not show up on the grid. - Menu option 7 lists the arrays `r()`, `t()` and `p$()`, which only exist after option 6 has been run. Choosing 7 first stops with an error. - The instructions describe a blinking `*` cursor, but the editor prints it with `FLASH 0`. - `shapemove` assumes its line 1 is the first line in memory, at the standard TS2068 program start. Any change to where the program is loaded would make it overwrite the wrong bytes. - In `dancer` the backward half of each cycle has no `PAUSE`, so it runs much faster than the forward half. ## Source Code ``` 1 BORDER 6: PAPER 7: INK 0: CLS 2 PRINT AT 11,10;"SUPERSHAPER ";AT 18,6;"* 1983 Ken Wildman";AT 19,6;"* 1984 C.W. Associates" 3 PAUSE 180: GO SUB 600: BORDER 7 4 LET f=65535: CLS : REM flag for number of letters decoded 10 CLS : PRINT AT 0,10;"SUPERSHAPER";AT 2,11;"MAIN MENU";AT 3,11;".................." 11 PRINT AT 5,3;"1. REVIEW INSTRUCTIONS.";AT 7,3;"2. CREATE NEW CHARACTERS." 12 PRINT AT 9,3;"3. INPUT BINARY PATTERN";AT 11,3;"4. INPUT DECIMAL PATTERN";AT 13,3;"5. VIEW CURRENT CHARACTERS";AT 15,3;"6. INSERT INTO AN ARRAY" 13 PRINT AT 17,3;"7. CHECK THE SHAPES ARRAY";AT 19,3;"8. SAVE THE SHAPES ARRAY";AT 21,3;"9. EXIT THE PROGRAM" 15 INPUT "Press ""Choice"" Then ""ENTER""";CH 17 GO TO (7000 AND CH=1)+(700 AND CH=2)+(760 AND CH=3)+(830 AND CH=4)+(330 AND CH=5)+(9500 AND CH=6)+(9800 AND CH=7)+(9810 AND CH=8)+(18 AND CH=9) 18 STOP 330 LET t5=0: REM bit decoder 340 LET p=65368: INK 9 350 CLS 360 PRINT : PRINT "Binary / Dec./ Address" 370 FOR i=0 TO 7 380 PRINT 390 LET x=PEEK (p+i) 400 LET bd=128 410 DIM b(8) 420 FOR j=1 TO 8 430 LET b(j)=INT (x/bd) 440 LET x=x-b(j)*bd 450 LET bd=bd/2 460 IF b(j)=1 THEN PAPER 0 470 PRINT b(j); 480 PAPER 7 490 NEXT j 500 PRINT " ";PEEK (p+i);" ",p+i;" "; 510 NEXT i 520 PRINT : PRINT : PRINT 530 LET p=p+8 540 REM last p=65536 550 IF t5=1 AND p=65400 THEN PAPER 7: INK 0: RETURN 560 IF p<65536 THEN GO TO 370 570 INPUT "Press any key to continue ";d$ 580 GO TO 10 640 REM SET UP SUBROUTINE LINE NUMBERS 650 LET mainscr=1000 652 LET edstik=1200 654 LET patrn=4000 656 LET charasgn=5000 660 LET decbin=2000 662 LET binstr=3500 664 LET paint=2200 670 RETURN 700 REM CREATE SHAPE 710 GO SUB mainscr 720 GO SUB edstik 730 GO SUB patrn 740 GO SUB charasgn 745 INPUT "Do you wish to change this?";e$ 750 IF e$="y" THEN GO TO 720 755 GO TO 10 760 REM BINARY INPUT 770 GO SUB mainscr 780 GO SUB binstr 790 GO SUB paint 795 INPUT "Do you wish to change this?";e$ 800 IF e$="y" THEN GO SUB edstik 805 GO SUB patrn 810 GO SUB charasgn 820 GO TO 10 825 REM 830 REM DECIMAL INPUT 840 GO SUB mainscr 850 GO SUB decbin 860 GO SUB paint 870 GO SUB patrn 875 INPUT "Do you wish to change this?";e$ 880 IF e$="y" THEN GO SUB edstik 890 GO SUB patrn 900 GO SUB charasgn 910 GO TO 10 990 STOP 1000 REM BUILD MAIN SCREEN 1020 CLS : PRINT AT 11,0;"Set CAPS LOCK to off - L Cursor" 1030 PRINT AT 21,0;: INPUT "Press any key to continue";d$ 1038 CLS 1040 PRINT AT 0,1;"COLUMNS" 1050 FOR c=1 TO 8: PRINT AT 1,c;c: NEXT c 1060 FOR l=2 TO 9: PRINT AT l,9;l-1: NEXT l 1070 DIM r$(10) 1080 DATA "L","I","N","E","S" 1090 FOR r=3 TO 7: READ r$(r): PRINT AT r+1,11;r$(r): NEXT r 1095 RESTORE 1100 FOR c=8 TO 72 STEP 8 1110 PLOT c,160 1120 DRAW 0,-64 1130 NEXT c 1140 FOR l=160 TO 96 STEP -8 1150 PLOT 8,l 1160 DRAW 64,0 1170 NEXT l 1180 DIM f(10,10) 1190 FOR l=2 TO 9: FOR c=1 TO 8: LET f(l,c)=0: NEXT c: NEXT l 1195 RETURN 1200 REM EDit with STIKs 1205 LET l=2: LET c=1 1210 FLASH 0: PRINT AT l,c;"*" 1220 PRINT AT 2,15;"Column="; FLASH 1;c; FLASH 0;" Line="; FLASH 1;l-1; FLASH 0; 1230 IF |(2,2)=1 THEN PRINT AT l,c;"::": LET f(l,c)=1 1240 IF |(2,2)=0 THEN PRINT AT l,c;" ": LET f(l,c)=0 1250 PAUSE 35 1260 IF |(1,2)=1 AND l>2 THEN LET l=l-1 1270 IF |(1,2)=2 AND l<9 THEN LET l=l+1 1280 IF |(1,2)=4 AND c>1 THEN LET c=c-1 1290 IF |(1,2)=8 AND c<8 THEN LET c=c+1 1300 IF INKEY$="a" OR INKEY$="A" THEN RETURN 1310 GO TO 1210 2000 REM DECBIN / decimal to binary conversion 2010 FOR i=2 TO 9 2020 INPUT " Enter decimal value for line ";(i-1);x 2030 LET bd=128 2040 DIM b(8) 2050 FOR j=1 TO 8 2060 LET b(j)=INT (x/bd) 2070 LET x=x-b(j)*bd 2080 LET bd=bd/2 2090 LET f(i,j)=b(j) 2100 NEXT j 2110 NEXT i 2120 RETURN 2200 REM PAINT / fill grid 2210 FOR i=2 TO 9 2220 FOR j=1 TO 8 2230 IF f(i,j)=1 THEN PRINT AT i,j;" " 2240 NEXT j 2250 NEXT i 2260 RETURN 3500 REM BINSTR / puts binary into string 3510 FOR i=0 TO 7 3520 INPUT "Enter binary pattern for line ";(i+1);b$ 3530 FOR j=1 TO 8 3540 LET f(i+2,j)=VAL b$(j) 3550 NEXT j 3560 NEXT i 3570 RETURN 4000 REM PATRN / prints binary and decimal equivalnts 4001 PRINT AT 2,15;" ";AT 11,0;" BINary Decimal"; 4002 DIM v(10) 4005 PRINT AT 12,1;: FOR l=2 TO 9: PRINT TAB 1;: FOR c=1 TO 8: 4010 PRINT f(l,c); 4012 LET v(c)=f(l,c) 4020 NEXT c 4025 LET vt=v(1)*128+v(2)*64+v(3)*32+v(4)*16+v(5)*8+v(6)*4+v(7)*2+v(8) 4030 PRINT TAB 11;"=";vt 4040 NEXT l 4050 RETURN 5000 REM CHARASGN 5001 REM REDEFINED CHARACTERS 5003 LET n$="" 5004 REM q=chars(1-21) r=code t=st. add p$=dec.eq. 5005 PRINT : PRINT "Character being redefined? " 5007 INPUT l$ 5008 PRINT AT 21,0;" " 5010 FOR l=2 TO 9 5020 FOR c=1 TO 8 5030 LET v(c)=f(l,c) 5040 NEXT c 5075 LET vt=v(1)*128+v(2)*64+v(3)*32+v(4)*16+v(5)*8+v(6)*4+v(7)*2+v(8) 5100 POKE USR l$+(l-2),vt 5110 NEXT l 5112 PLOT 75,159 5114 DRAW 65,-28 5120 PLOT 75,95 5130 DRAW 65,20 5140 DRAW 0,15: DRAW 15,0: DRAW 0,-15: DRAW -15,0 5160 PRINT AT 6,18;CHR$ (47+CODE l$) 5170 PRINT AT 6,20;"=Graphic """;l$;"""" 5300 INPUT "Press any key to continue";d$ 5310 RETURN 6999 STOP 7000 REM Instructions 7005 CLS 7010 PRINT AT 0,10;"SUPERSHAPER": OVER 1: PRINT AT 0,9;" ___________": OVER 0 7015 PRINT AT 3,5;"___________" 7020 OVER 1: PRINT AT 3,5;"SUPERSHAPER is a program ";"designed to assist in producing ";"User-Defined-Characters.": OVER 0 7030 PRINT : PRINT TAB 5;"User-Defined-Characters are";"those which have been programmed" 7040 PRINT "to assume a variety of shapes to";"satisfy the needs of a specific " 7050 PRINT "program." 7060 PRINT : PRINT TAB 5;"When the TS 2068 is first ";"turned on, the user-definable ";"area of RAM (from 65368d) is " 7070 PRINT "initialized with the letters A-U" 7080 PRINT "loaded as a pattern of binary ";"digits (1's and 0's) as shown on";"the following screens..." 7085 PRINT : PRINT " (Press any key to continue)" 7090 IF INKEY$="" THEN GO TO 7090 7100 LET t5=1: CLS : GO SUB 340 7110 PAUSE 60: CLS 7120 PRINT TAB 5;"We have emphasized the 1's"'"by printing them in inverse form";"so that you can more clearly"'"discern the patterns." 7130 PRINT : PRINT TAB 5;"The TS 2068 uses these bits";"to form each character. We could" 7140 PRINT "form our own characters by using";"the method shown in the Manual,"' 7150 PRINT "a rather complicated procedure"'"which requires POKEing each of" 7160 PRINT "the eight lines which make up "'"the character." 7170 PRINT : PRINT TAB 5;"Before the character can"'"be POKEd, it must be laid out on"'"graph paper."; 7180 PRINT TAB 14;"___________" 7190 OVER 1: PRINT AT 16,14;"SUPERSHAPER allows";: OVER 0 7200 PRINT "you to lay out your character on";"the screen, using an Atari-type joystick." 7210 INPUT "Press any key to continue";d$ 7230 CLS : PRINT TAB 5;"The basic format that you"'"will be working with consists of"; 7240 PRINT "an 8 by 8 grid pattern with a"'"blinking ""*"". The ""*"" can be "'"moved by pushing the joystick in"'"the desired direction." 7250 PRINT : PRINT TAB 5;"To ""paint"" a grid square"'" you must"; 7260 PRINT " press the joystick"'"button."; 7270 PRINT : PRINT TAB 5;"If you release the button"'"the square will return to white "'"(binary zero)."''" To keep a square black "'"(binary 1) you must hold the"'"button down while moving "; 7280 PRINT "to the next square. You can return to"'"any square to make changes. "'"When satisfied with the shape," 7290 PRINT "just press the ""a"" key ( STOP )." 7300 INPUT "Press any key to continue";d$ 7310 CLS : PRINT AT 0,11;"___________" 7315 OVER 1: PRINT AT 0,5;"Next ""SUPERSHAPER"" will ask"'"you to select ";: OVER 0 7320 PRINT "a character to be redefined. You may select any"'"key from ""A"" to ""U"". Just press"'"the selected key and the program"'"will do the rest." 7330 PRINT : PRINT TAB 5;"As the display indicates,"'"the new shape can be accessed byusing the graphics form of the "; 7340 PRINT "letter, i.e.,CAPS SHIFT / 9 then"'"the letter."''" Or you can PRINT the CHS$ "'"of the character."; 7350 PRINT " These CHR$'s"'"start at code 144 for ""graphics"""'"""A"" and go up by one for each"'"letter, thereafter." 7355 INPUT "Press any key to continue";d$ 7360 CLS : PRINT TAB 5;"Thus: ""PRINT CHR$ 146"" =" 7370 PRINT "the shape that you've stored on "'"the ""C"" key." 7380 PRINT : PRINT : PRINT TAB 5;"___________";AT 5,5; OVER 1;"SUPERSHAPER"; OVER 0;" also provides a"'"method for saving your designs"'"and incorporating them into "'"other programs." 7390 PRINT : PRINT TAB 5;"This method is explained "'"in the instruction sheet packed"'"with the tape." 7500 PRINT : PRINT TAB 5;"You may also incorporate shapes that you have designed on graph paper, or shapes from other programs for the TS 2068."'"If you are working from graph"'"paper"; 7510 PRINT " read across each row from"'"left to right, counting each"'"black box as a 1 and each white" 7520 INPUT "Press any key to continue";d$ 7530 CLS : PRINT "box as a ""0"". You will thus "'"have eight lines of eight "'"characters (0's & 1's)."''" To enter these lines of "'"characters just select ""3. INPUT";"BINARY.."" choice from the MAIN ";"MENU. Follow the prompts and "'"input each line of characters "'"as requested." 7540 PRINT : PRINT TAB 5;"When adding shapes from "'"other programs you must first "'"determine whether you have "'"BINARY or DECIMAL numbers. "'"Both types will be found in DATA"'"statements at the program's end." 7550 PRINT : PRINT TAB 5;"For BINARY numbers, the "'"DATA statement will contain only";"1's & 0's. For DECIMAL numbers"'"the DATA statement will be " 7560 INPUT "Press any key to continue";d$ 7570 CLS : PRINT "filled with numbers ranging "'"from 0 to 255."''" Select the appropriate"'"Input choice (3 or 4) from the"'"MAIN MENU. The prompts will "'"direct you to enter each line"'"of eight numbers for the BINARY"'"input, or a single DECIMAL"'"number for each line. In either"'"case do not enter comma's (,)"'"from the DATA statemnt." 7580 PRINT : PRINT TAB 5;"You're now ready to start"'"building a tape ""library"" of"'"shapes."''" GOOD LUCK!!!" 7790 INPUT "Press any key to continue";d$ 7800 GO TO 10 7990 STOP 9500 REM INITIALIZE STORAGE ARRAY 9505 DIM q(21): DIM r(21): DIM t(21): DIM p$(21,24) 9510 FOR i=1 TO 21 9520 LET q(i)=i: LET r(i)=i+143: LET t(i)=65360+i*8 9530 NEXT i 9600 REM STORE NEW CHARACTER SHAPES 9604 CLS : FLASH 1: PRINT AT 11,11;"WORKING..." 9605 LET n$="" 9700 LET ct=0: LET p=65368 9710 LET ct=ct+1: FOR j=0 TO 7 9720 LET m$=STR$ (PEEK (p+j)) 9730 IF LEN m$=3 THEN GO TO 9760 9740 IF LEN m$=2 THEN LET m$="0"+m$: GO TO 9760 9750 LET m$="00"+m$ 9760 LET n$=n$+m$ 9770 NEXT j 9775 LET p$(ct)=n$: LET n$="" 9780 IF p=65528 THEN FLASH 0: GO TO 10 9790 LET p=p+8: GO TO 9710 9800 CLS : FOR i=1 TO 21: PRINT CHR$ (i+64);" ";r(i);" ";t(i);" ";p$(i): NEXT I 9805 INPUT "Press any key to continue";d$: GO TO 10 9810 REM SAVE THE ARRAY OF NEW SHAPES 9820 CLS : PRINT TAB 5;"You must name the character"'"array containing your shapes,"'"that will be saved. The name"'"must be less than 10 characters"'"long." 9830 PRINT : PRINT TAB 5;"Enter the selected name"'"and then press ENTER." 9840 INPUT s$ 9850 CLS : PRINT AT 10,5;"Now prepare to record the"'"array. Position the tape in"'"the recorder and set to RECORD." 9870 SAVE s$ DATA p$() 9880 CLS : PRINT AT 11,8;"SAVE COMPLETE" 9890 INPUT "Press any key to continue";d$: GO TO 10 1 BORDER 6: PAPER 7: INK 0: CLS 2 PRINT AT 11,10;"SUPERSHAPER ";AT 18,6;"* 1983 Ken Wildman";AT 19,6;"* 1984 C.W. Associates" 3 PAUSE 180: GO SUB 600: BORDER 7 4 LET f=65535: CLS : REM flag for number of letters decoded 10 CLS : PRINT AT 0,10;"SUPERSHAPER";AT 2,11;"MAIN MENU";AT 3,11;".................." 11 PRINT AT 5,3;"1. REVIEW INSTRUCTIONS.";AT 7,3;"2. CREATE NEW CHARACTERS." 12 PRINT AT 9,3;"3. INPUT BINARY PATTERN";AT 11,3;"4. INPUT DECIMAL PATTERN";AT 13,3;"5. VIEW CURRENT CHARACTERS";AT 15,3;"6. INSERT INTO AN ARRAY" 13 PRINT AT 17,3;"7. CHECK THE SHAPES ARRAY";AT 19,3;"8. SAVE THE SHAPES ARRAY";AT 21,3;"9. EXIT THE PROGRAM" 15 INPUT "Press ""Choice"" Then ""ENTER""";CH 17 GO TO (7000 AND CH=1)+(700 AND CH=2)+(760 AND CH=3)+(830 AND CH=4)+(330 AND CH=5)+(9500 AND CH=6)+(9800 AND CH=7)+(9810 AND CH=8)+(18 AND CH=9) 18 STOP 330 LET t5=0: REM bit decoder 340 LET p=65368: INK 9 350 CLS 360 PRINT : PRINT "Binary / Dec./ Address" 370 FOR i=0 TO 7 380 PRINT 390 LET x=PEEK (p+i) 400 LET bd=128 410 DIM b(8) 420 FOR j=1 TO 8 430 LET b(j)=INT (x/bd) 440 LET x=x-b(j)*bd 450 LET bd=bd/2 460 IF b(j)=1 THEN PAPER 0 470 PRINT b(j); 480 PAPER 7 490 NEXT j 500 PRINT " ";PEEK (p+i);" ",p+i;" "; 510 NEXT i 520 PRINT : PRINT : PRINT 530 LET p=p+8 540 REM last p=65536 550 IF t5=1 AND p=65400 THEN PAPER 7: INK 0: RETURN 560 IF p<65536 THEN GO TO 370 570 INPUT "Press any key to continue ";d$ 580 GO TO 10 640 REM SET UP SUBROUTINE LINE NUMBERS 650 LET mainscr=1000 652 LET edstik=1200 654 LET patrn=4000 656 LET charasgn=5000 660 LET decbin=2000 662 LET binstr=3500 664 LET paint=2200 670 RETURN 700 REM CREATE SHAPE 710 GO SUB mainscr 720 GO SUB edstik 730 GO SUB patrn 740 GO SUB charasgn 745 INPUT "Do you wish to change this?";e$ 750 IF e$="y" THEN GO TO 720 755 GO TO 10 760 REM BINARY INPUT 770 GO SUB mainscr 780 GO SUB binstr 790 GO SUB paint 795 INPUT "Do you wish to change this?";e$ 800 IF e$="y" THEN GO SUB edstik 805 GO SUB patrn 810 GO SUB charasgn 820 GO TO 10 825 REM 830 REM DECIMAL INPUT 840 GO SUB mainscr 850 GO SUB decbin 860 GO SUB paint 870 GO SUB patrn 875 INPUT "Do you wish to change this?";e$ 880 IF e$="y" THEN GO SUB edstik 890 GO SUB patrn 900 GO SUB charasgn 910 GO TO 10 990 STOP 1000 REM BUILD MAIN SCREEN 1020 CLS : PRINT AT 11,0;"Set CAPS LOCK to off - L Cursor" 1030 PRINT AT 21,0;: INPUT "Press any key to continue";d$ 1038 CLS 1040 PRINT AT 0,1;"COLUMNS" 1050 FOR c=1 TO 8: PRINT AT 1,c;c: NEXT c 1060 FOR l=2 TO 9: PRINT AT l,9;l-1: NEXT l 1070 DIM r$(10) 1080 DATA "L","I","N","E","S" 1090 FOR r=3 TO 7: READ r$(r): PRINT AT r+1,11;r$(r): NEXT r 1095 RESTORE 1100 FOR c=8 TO 72 STEP 8 1110 PLOT c,160 1120 DRAW 0,-64 1130 NEXT c 1140 FOR l=160 TO 96 STEP -8 1150 PLOT 8,l 1160 DRAW 64,0 1170 NEXT l 1180 DIM f(10,10) 1190 FOR l=2 TO 9: FOR c=1 TO 8: LET f(l,c)=0: NEXT c: NEXT l 1195 RETURN 1200 REM EDit with STIKs 1205 LET l=2: LET c=1 1210 FLASH 0: PRINT AT l,c;"*" 1220 PRINT AT 2,15;"Column="; FLASH 1;c; FLASH 0;" Line="; FLASH 1;l-1; FLASH 0; 1230 IF |(2,2)=1 THEN PRINT AT l,c;"::": LET f(l,c)=1 1240 IF |(2,2)=0 THEN PRINT AT l,c;" ": LET f(l,c)=0 1250 PAUSE 35 1260 IF |(1,2)=1 AND l>2 THEN LET l=l-1 1270 IF |(1,2)=2 AND l<9 THEN LET l=l+1 1280 IF |(1,2)=4 AND c>1 THEN LET c=c-1 1290 IF |(1,2)=8 AND c<8 THEN LET c=c+1 1300 IF INKEY$="a" OR INKEY$="A" THEN RETURN 1310 GO TO 1210 2000 REM DECBIN / decimal to binary conversion 1 BORDER 6: PAPER 7: INK 0: CLS 2 PRINT AT 11,10;"SUPERSHAPER ";AT 18,6;"* 1983 Ken Wildman";AT 19,6;"* 1984 C.W. Associates" 3 PAUSE 180: GO SUB 600: BORDER 7 4 LET f=65535: CLS : REM flag for number of letters decoded 10 CLS : PRINT AT 0,10;"SUPERSHAPER";AT 2,11;"MAIN MENU";AT 3,11;".................." 11 PRINT AT 5,3;"1. REVIEW INSTRUCTIONS.";AT 7,3;"2. CREATE NEW CHARACTERS." 12 PRINT AT 9,3;"3. INPUT BINARY PATTERN";AT 11,3;"4. INPUT DECIMAL PATTERN";AT 13,3;"5. VIEW CURRENT CHARACTERS";AT 15,3;"6. INSERT INTO AN ARRAY" 13 PRINT AT 17,3;"7. CHECK THE SHAPES ARRAY";AT 19,3;"8. SAVE THE SHAPES ARRAY";AT 21,3;"9. EXIT THE PROGRAM" 15 INPUT "Press ""Choice"" Then ""ENTER""";CH 17 GO TO (7000 AND CH=1)+(700 AND CH=2)+(760 AND CH=3)+(830 AND CH=4)+(330 AND CH=5)+(9500 AND CH=6)+(9800 AND CH=7)+(9810 AND CH=8)+(18 AND CH=9) 18 STOP 330 LET t5=0: REM bit decoder 340 LET p=65368: INK 9 350 CLS 360 PRINT : PRINT "Binary / Dec./ Address" 370 FOR i=0 TO 7 380 PRINT 390 LET x=PEEK (p+i) 400 LET bd=128 410 DIM b(8) 420 FOR j=1 TO 8 430 LET b(j)=INT (x/bd) 440 LET x=x-b(j)*bd 450 LET bd=bd/2 460 IF b(j)=1 THEN PAPER 0 470 PRINT b(j); 480 PAPER 7 490 NEXT j 500 PRINT " ";PEEK (p+i);" ",p+i;" "; 510 NEXT i 520 PRINT : PRINT : PRINT 530 LET p=p+8 540 REM last p=65536 550 IF t5=1 AND p=65400 THEN PAPER 7: INK 0: RETURN 560 IF p<65536 THEN GO TO 370 570 INPUT "Press any key to continue ";d$ 580 GO TO 10 640 REM SET UP SUBROUTINE LINE NUMBERS 650 LET mainscr=1000 652 LET edstik=1200 654 LET patrn=4000 656 LET charasgn=5000 660 LET decbin=2000 662 LET binstr=3500 664 LET paint=2200 670 RETURN 700 REM CREATE SHAPE 710 GO SUB mainscr 720 GO SUB edstik 730 GO SUB patrn 740 GO SUB charasgn 745 INPUT "Do you wish to change this?";e$ 750 IF e$="y" THEN GO TO 720 755 GO TO 10 760 REM BINARY INPUT 770 GO SUB mainscr 780 GO SUB binstr 790 GO SUB paint 795 INPUT "Do you wish to change this?";e$ 800 IF e$="y" THEN GO SUB edstik 805 GO SUB patrn 810 GO SUB charasgn 820 GO TO 10 825 REM 830 REM DECIMAL INPUT 840 GO SUB mainscr 850 GO SUB decbin 860 GO SUB paint 870 GO SUB patrn 875 INPUT "Do you wish to change this?";e$ 880 IF e$="y" THEN GO SUB edstik 890 GO SUB patrn 900 GO SUB charasgn 910 GO TO 10 990 STOP 1000 REM BUILD MAIN SCREEN 1020 CLS : PRINT AT 11,0;"Set CAPS LOCK to off - L Cursor" 1030 PRINT AT 21,0;: INPUT "Press any key to continue";d$ 1038 CLS 1040 PRINT AT 0,1;"COLUMNS" 1050 FOR c=1 TO 8: PRINT AT 1,c;c: NEXT c 1060 FOR l=2 TO 9: PRINT AT l,9;l-1: NEXT l 1070 DIM r$(10) 1080 DATA "L","I","N","E","S" 1090 FOR r=3 TO 7: READ r$(r): PRINT AT r+1,11;r$(r): NEXT r 1095 RESTORE 1100 FOR c=8 TO 72 STEP 8 1110 PLOT c,160 1120 DRAW 0,-64 1130 NEXT c 1140 FOR l=160 TO 96 STEP -8 1150 PLOT 8,l 1160 DRAW 64,0 1170 NEXT l 1180 DIM f(10,10) 1190 FOR l=2 TO 9: FOR c=1 TO 8: LET f(l,c)=0: NEXT c: NEXT l 1195 RETURN 1200 REM EDit with STIKs 1205 LET l=2: LET c=1 1210 FLASH 0: PRINT AT l,c;"*" 1220 PRINT AT 2,15;"Column="; FLASH 1;c; FLASH 0;" Line="; FLASH 1;l-1; FLASH 0; 1230 IF |(2,2)=1 THEN PRINT AT l,c;"::": LET f(l,c)=1 1240 IF |(2,2)=0 THEN PRINT AT l,c;" ": LET f(l,c)=0 1250 PAUSE 35 1260 IF |(1,2)=1 AND l>2 THEN LET l=l-1 1270 IF |(1,2)=2 AND l<9 THEN LET l=l+1 1280 IF |(1,2)=4 AND c>1 THEN LET c=c-1 1290 IF |(1,2)=8 AND c<8 THEN LET c=c+1 1300 IF INKEY$="a" OR INKEY$="A" THEN RETURN 1310 GO TO 1210 2000 REM DECBIN / decimal to binary conversion 2010 FOR i=2 TO 9 2020 INPUT " Enter decimal value for line ";(i-1);x 2030 LET bd=128 2040 DIM b(8) 2050 FOR j=1 TO 8 2060 LET b(j)=INT (x/bd) 2070 LET x=x-b(j)*bd 2080 LET bd=bd/2 2090 LET f(i,j)=b(j) 2100 NEXT j 2110 NEXT i 2120 RETURN 2200 REM PAINT / fill grid 2210 FOR i=2 TO 9 2220 FOR j=1 TO 8 2230 IF f(i,j)=1 THEN PRINT AT i,j;" " 2240 NEXT j 2250 NEXT i 2260 RETURN 3500 REM BINSTR / puts binary into string ```