åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå9011ANN2   ‚Uªÿ BOOT       ˆDIRECTORY  ÈSoundexAFT		ÓBnTcolorAT"BnT_DocHFT#AlphasortA˜TextonHGRA$EaslPaintA		LADAM_BASEA$üABASE_DOCA2§CrnchMAKEA7(CRUNCHERHT;ÔCrnchDocHT<ÓalphabetIH@%TENNISany1HA		ÀBIOS_7_90HJJYT_8_90HTU{BIOS_8_90HY‰SBASICEX01Hfputing":?:?104INVERSE105? "   the ADAM by D.Zimmerman  ":FOR zz=1 TO 4000:NEXT zz:NORMAL107POKE 16953, 42110FOR ac=1 TO mc-1120 cl(ac)=ac+1130NEXT ac140 cl(mc)=0: ac=1150FOR an=1 TO mn-1160 nl(an)=an+1170NEXT an180 nl(mn)=0: an=1: kn=0: kc=0: sl=0190HOME200POKE 17059, 12:POKE 17115, 31:POKE 17126, 252:TEXT205?:? " DIRECTORY CONTAINS "; kn; " NAMES "210? "    IN "; kc; " SOUNDEX FOLDERS."220? " ROOM FOR "; mn-kn; " MORE NAMES"225INVERSE230? " ============================ ":NORMAL:?240? "  åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå8POKE 17059, 13:POKE 17115, 31:POKE 17126, 252:TEXT10HOME:VTAB 11:HTAB 3:INVERSE20? "SOUNDEX TELEPHONE ASSISTANT"30FOR z=1 TO 3000:NEXT:NORMAL40POKE 17059, 8:POKE 17115, 29:POKE 17126, 244:TEXT50 d$=CHR$(4)60 mn=100: mc=100: yes=1: no=0: nu$=""70 s$="01230120022455012623010202"80DIM co$(mc), nr(mc), cl(mc), na$(mn), nl(mn), nf$(mn), ph$(mn)85INVERSE90?:?:? "  Adapted and modified for  ":?:?:?:NORMAL100? "  SOUNDEX TELEPHONE ASSISTANT"102? "  was published in January"103? "  issue of Popular ComSADAMCON_02HlßINTRO_SB_3Ay#SBLISTING_H~ÛPRINTERFIXHƒ&SHOWOFF_IIHˆREADMETWOA´BLOCKS LEFT” 1. FIND SIMILAR NAMES":?250? "   2. ADD NAMES":?260? "   3. DELETE NAMES":?270? "   4. LIST ENTIRE DIRECTORY"280? "       BY SOUNDEX FOLDER.":?290? "   5. SAVE NAMES TO DISK":?300? "   6. LOAD NAMES FROM DISK":?310? "   7. CLEAR MEMORY":?320? "   8. END."330?340INPUT "     SELECT 1-8 -> "; se350HOME360IF se=8 THEN GOTO 4050370IF se<1 OR se>7 THEN GOTO 190380ON se GOSUB 400, 630, 980, 1270, 2030, 2230, 2650390GOTO 200400POKE 17059, 15:POKE 17115, 23:POKE 17126, 244:TEXT405HOME:VTAB 2:HTAB 61170? "PRESS "; :INVERSE:? " <RETURN> "; :NORMAL:? " TO CONTINUE.":GET zz$1180RETURN1190GOSUB 17701200IF ok=yes THEN GOTO 12401210? "DON'T HAVE THAT NAME."1220? " PRESS "; :INVERSE:? "<RETURN>"; :NORMAL:? " TO CONTINUE ":GET zz$1230RETURN1240GOSUB 18901250?:?:HTAB 7:FLASH:? " NAME DELETED ":NORMAL:FOR zz=1 TO 2500:NEXT zz1260RETURN1270HOME:POKE 17059, 13:POKE 17115, 31:POKE 17126, 246:TEXT1275VTAB 2:HTAB 5:FLASH1280? " LIST ENTIRE DIRECTORY":NORMAL1284HTAB 5:FLASH:? " BY SOUNDEX CODES     ":NOR cn=nl(cn)600GOTO 570610?:? "END OF LIST"615SPEED =255620GOTO 420630HOME:POKE 17059, 6:POKE 17115, 31:POKE 17126, 246:TEXT635VTAB 2:HTAB 10640FLASH:? " ADD NAMES ":NORMAL:?:?650? " PRESS "; :INVERSE:? "<RETURN>"; :NORMAL:? " FOR MENU.":?660 n$=nu$: nf$=nu$: ph$=nu$670INPUT "ENTER LAST NAME: "; x$680IF x$="" THEN RETURN690GOSUB 2590700 n$=x$: x$=""710INPUT "ENTER FIRST NAME: "; x$720IF x$="" THEN RETURN730GOSUB 2590740 nf$=x$: x$=""750INPUT "ENTER PHONE # : "; ph$760?770GOSUB 1440780GOSUB 8:FLASH:? "  END OF LIST  ":NORMAL:?:PR #01420? " PRESS "; :INVERSE:? "<RETURN>"; :NORMAL:? " TO CONTINUE ":GET zz$1430RETURN1440 l1$=nu$1450FOR c=1 TO LEN(n$)1460 c$=MID$(n$, c, 1)1470 sq=ASC(c$)-ASC("A")+11480IF sq<1 OR sq>26 THEN GOTO 15001490 l1$=l1$+MID$(s$, sq, 1)1500NEXT c1510 l2$=LEFT$(l1$, 1): lc$=l2$1520FOR c=2 TO LEN(l1$)1530 c$=MID$(l1$, c, 1)1540IF c$=lc$ THEN GOTO 15601550 l2$=l2$+c$: lc$=c$1560NEXT c1570 l3$=LEFT$(n$, 1)1580FOR c=2 TO LEN(l2$)1590 c$=MID$(l2$, c, 1)1600IF6:POKE 17126, 244:TEXT985VTAB 2:HTAB 8990FLASH:? " DELETE A NAME ":NORMAL:?:?1000? "       ENTER LAST NAME: "1010?:? " OR ENTER "; :INVERSE:? " <RETURN> "; :NORMAL:? " FOR MENU.":?:?1020 n$=nu$: x$=""1030INPUT x$1040IF x$=nu$ THEN RETURN1050GOSUB 25901060 n$=x$: x$=""1070? "ENTER FIRST NAME:"1080 nf$=nu$: x$=""1090INPUT x$1100IF x$=nu$ THEN RETURN1110GOSUB 25901120 nf$=x$: x$=""1130GOSUB 14401140GOSUB 16501150IF ok=yes THEN GOTO 11901160?:? "DON'T HAVE ANYTHING LIKE       THAT NAME.":?:?410FLASH:? " FIND SIMILAR NAMES ":NORMAL:?:?420?:? "      ENTER LAST NAME OR"430? "      "; :INVERSE:? "<RETURN>"; :NORMAL:? " FOR MENU.":?440 n$=nu$: x$=""450INPUT x$460IF x$=nu$ THEN RETURN470GOSUB 2590480 n$=x$: x$=""490GOSUB 1440500GOSUB 1650510IF ok=yes THEN GOTO 540520?:?:?:? "THERE IS NO SOUNDEX FOLDER FOR THAT NAME.":?530GOTO 420540? "UNDER CODE "; c$; " ARE THE "550? " FOLLOWING NAMES:":?555SPEED =90560 cn=nr(cc)570IF cn=0 THEN GOTO 610580? na$(cn); " "; nf$(cn); " "; ph$(cn)590MAL:?:?1286IF sl=0 THEN GOTO 14101288INPUT "   (P)rinter or (S)creen? "; zz$1290IF zz$="P" OR zz$="p" THEN  pz=1:GOSUB 3000:GOTO 13101300SPEED =901310 cc=sl:IF pz=1 AND zc=0 THEN GOTO 13401320? co$(cc)1330? "----"1340 cn=nr(cc)1350? na$(cn); " "; nf$(cn); " "; ph$(cn)1360 cn=nl(cn)1370IF cn>0 THEN GOTO 13501372 cc=cl(cc)1374IF pz=0 THEN ?1390IF cc>0 AND pz=0 THEN GOTO 13201395IF cc>0 AND pz=1 AND zc=0 THEN GOTO 13401397IF cc>0 AND pz=1 AND zc=1 THEN GOTO 13201400SPEED =255: pz=01410?:?:HTAB 1650790IF ok=yes THEN GOTO 870800IF an>0 THEN GOTO 820810GOTO 950820GOSUB 1710830IF ok=yes THEN GOTO 870840? "NO MORE SOUNDEX FOLDERS LEFT."850? "PRESS <RETURN> TO CONTINUE.":GET zz$860RETURN870GOSUB 1770880IF ok=yes THEN GOTO 930890GOSUB 1830900IF ok=no THEN GOTO 950910? "NAME ADDED. ENTER NEXT NAME:":?920GOTO 650930? "NAME ALREADY EXISTS. ENTER NEXT NAME:":?940GOTO 650950? "NO MORE NAME CARDS LEFT."960? "PRESS <RETURN> TO CONTINUE.":GET zz$970RETURN980HOME:POKE 17059, 4:POKE 17115, 2 c$="0" THEN GOTO 16201610 l3$=l3$+c$1620NEXT c1630 l3$=LEFT$(l3$+"000", 4)1640 c$=l3$:RETURN1650 ok=no: cc=sl: pc=01660IF cc=0 THEN RETURN1670IF co$(cc)<>c$ THEN GOTO 16901680 ok=yes:RETURN1690IF co$(cc)>c$ THEN RETURN1700 pc=cc: cc=cl(cc):GOTO 16601710IF ac<>0 THEN GOTO 17301720 ok=no:RETURN1730 ok=yes: sc=ac: ac=cl(ac): kc=kc+1: co$(sc)=c$: cl(sc)=cc: nr(sc)=0: cc=sc1740IF pc<>0 THEN GOTO 17601750 sl=cc:RETURN1760 cl(pc)=cc:RETURN1770 ok=no: cn=nr(cc): pn=01780IF cn=0 THEN RETURN1790IFSUB 17702460IF ok=yes THEN GOTO 25002470GOSUB 18302480IF ok=no THEN GOTO 25102490? "--OK":GOTO 23302500? "--CANCEL: DUPLICATE NAME.":GOTO 23302510? "--CANCEL: NO MORE NAME CARDS LEFT."2520? d$; "close "; fi$2530RETURN2540?2550IF ERRNUM(0)=5 THEN ? " END OF FILE "; fi$2555IF ERRNUM(0)<>5 THEN ? d$; "close "; fi$:GOTO 40502560? d$; "close "; fi$2580RETURN2590 x2$="": x3$=""2600FOR i=1 TO LEN(x$)2610 x2$=MID$(x$, i, 1)2620IF x2$>="a" AND x2$<="z" THEN  x2$=CHR$(ASC(x2$)-32)2630 x3$=x3$+x2$:NE THEN RETURN1950IF cc<>sl THEN GOTO 19801960 sl=cl(cc)1970GOTO 19901980 cl(pc)=cl(cc)1990 co$(cc)=nu$: cl(cc)=ac2000 ac=cc2010 kc=kc-12020RETURN2030HOME:POKE 17059, 8:POKE 17115, 29:POKE 17126, 244:TEXT2035IF kn>0 THEN GOTO 20602040VTAB 12:HTAB 5:FLASH:? " THE DIRECTORY IS EMPTY. ":NORMAL2050FOR zz=1 TO 2500:NEXT zz:RETURN2060HTAB 6:FLASH:? "SAVE NAMES TO DISK ":NORMAL:?:?2063ONERR  GOTO 40002065? d$; "catalog "2067CLRERR2070? "ENTER NAME FOR THE OUTPUT FILE":? "OR "; :INVERSE:? " <RETURN> SUB 17702460IF ok=yes THEN GOTO 25002470GOSUB 18302480IF ok=no THEN GOTO 25102490? "--OK":GOTO 23302500? "--CANCEL: DUPLICATE NAME.":GOTO 23302510? "--CANCEL: NO MORE NAME CARDS LEFT."2520? d$; "close "; fi$2530RETURN2540?2550IF ERRNUM(0)=5 THEN ? " END OF FILE "; fi$2555IF ERRNUM(0)<>5 THEN ? d$; "close "; fi$:GOTO 40502560? d$; "close "; fi$2580RETURN2590 x2$="": x3$=""2600FOR i=1 TO LEN(x$)2610 x2$=MID$(x$, i, 1)2620IF x2$>="a" AND x2$<="z" THEN  x2$=CHR$(ASC(x2$)-32)2630 x3$=x3$+x2$:NE"2243CLRERR2250?:? "NAME FOR INPUT FILE"2260? " PRESS "; :FLASH:? " <RETURN> "; :NORMAL:? " FOR MENU."2270 fi$=nu$2280INPUT fi$2290IF fi$=nu$ THEN RETURN2300ONERR  GOTO 25502310? d$; "open "; fi$2320? d$; "read "; fi$2330INPUT n$, nf$, ph$2340? n$; ","; nf$; ","; ph$2350GOSUB 14402360GOSUB 16502370IF ok=yes THEN GOTO 24502380IF an>0 THEN GOTO 24002390GOTO 25102400GOSUB 17102410IF ok=yes THEN GOTO 24502420? "--CANCEL: NO MORE SOUNDEX FOLDERS LEFT."2430? d$; "close "; fi$2440RETURN2450GO na$(cn)+nf$(cn)<>n$+nf$ THEN GOTO 18101800 ok=yes:RETURN1810IF na$(cn)+nf$(cn)>n$+nf$ THEN RETURN1820 pn=cn: cn=nl(cn):GOTO 17801830IF an<>0 THEN GOTO 18501840 ok=no:RETURN1850 ok=yes: sn=an: an=nl(an): kn=kn+1: na$(sn)=n$: nf$(sn)=nf$: ph$(sn)=ph$: nl(sn)=cn: cn=sn1860IF pn<>0 THEN GOTO 18801870 nr(cc)=cn:RETURN1880 nl(pn)=cn:RETURN1890IF pn<>0 THEN GOTO 19201900 nr(cc)=nl(cn)1910GOTO 19301920 nl(pn)=nl(cn)1930 na$(cn)=nu$: nf$(cn)=nu$: ph$(cn)=nu$: nl(cn)=an: an=cn: kn=kn-11940IF nr(cc)<>0XT i2640 x$=x3$:RETURN2650RUN3000HOME:VTAB 113010? "   DO YOU WANT SOUNDEX CODES"3020? "   INCLUDED IN THE LISTING? "3030INPUT ""; zc$3040IF zc$="Y" OR zc$="y" THEN  zc=13045IF zc$<>"Y" AND zc$<>"y" THEN  zc=03050PR #13060RETURN4000IF ERRNUM(0)=8 THEN FLASH:? " PLEASE PUT A DISK IN !!":NORMAL4005IF ERRNUM(0)<>8 THEN GOTO 40504010? " PRESS ANY KEY "4020INPUT zz$4040RESUME4050POKE 17059, 0:POKE 17115, 241:POKE 17126, 31:POKE 16953, 95:TEXT65535ENDT."2430? d$; "close "; fi$2440RETURN2450GO"; :NORMAL:? " FOR MENU."2080 fo$=nu$2090INPUT ""; fo$2100IF fo$=nu$ THEN RETURN2110? d$; "open "; fo$2120? d$; "write "; fo$2130 cc=sl2140 cn=nr(cc)2150? na$(cn); ","; nf$(cn); ","; ph$(cn)2160 cn=nl(cn)2170IF cn>0 THEN GOTO 21502180 cc=cl(cc)2190IF cc>0 THEN GOTO 21402200? d$; "close "; fo$2210? "DIRECTORY SAVED IN "; fo$2220RETURN2230HOME:POKE 17059, 11:POKE 17115, 24:POKE 17126, 244:TEXT2233VTAB 2:HTAB 5:FLASH2235? " LOAD NAMES FROM DISK ":NORMAL2237ONERR  GOTO 40002240? d$; "catalog10REM          BTCOLOR  by W. Motel50GOSUB 2000:REM  introduction90DIM c$(15)100 c$(0)="0 Transparent"101 c$(1)="1 Black"102 c$(2)="2 Md Green"103 c$(3)="3 Lt Green"104 c$(4)="4 Dk Blue"105 c$(5)="5 Lt Blue"106 c$(6)="6 Dk Red"107 c$(7)="7 Cyan"108 c$(8)=" 8 Md Red"109 c$(9)=" 9 Lt Red"110 c$(10)="10 Dk Yellow"111 c$(11)="11 Lt Yellow"112 c$(12)="12 Dk Green"113 c$(13)="13 Magenta"114 c$(14)="14 Gray"115 c$(15)="15 White"130 s1=PEEK(17059): s2=PEEK(17115): s3=PEEK(17126)200GOSUB 1000:GOS 1  change BACKDROP"1170? "  2  change NORMAL"1180? "  3  change INVERSE"1190? "  4  END   (with RESET)"1193? "  5  END   (no   RESET)"1199RETURN1300? "  >> Pick color # for "; n$; :INPUT "   "; a1310IF a<0 OR a>15 THEN 13001320?1330RETURN1400?1410FOR c=0 TO 71420? TAB(3); c$(c); TAB(16); c$(c+8)1430NEXT1440RETURN2000TEXT2010VTAB 2:? " BACKGROUND & TEXT COLOR DEMO ":?:?2020? " This program allows you to":? " see the effects of different"2030? " combinations of colors for":? " the Adam Text 17126, hi*16+lo:GOTO 2001000TEXT1010? "  Current BACKDROP is "1015 hi=INT(PEEK(17059)/16)1016 lo=PEEK(17059)-(hi*16)1020? "            "; c$(lo)1040? "  Current NORMAL is "; PEEK(17115)1050 hi=INT(PEEK(17115)/16)1060 lo=PEEK(17115)-(hi*16)1070? "    TEXT is "; c$(hi)1080? "    BACK is "; c$(lo)1090INVERSE1100? "  Current INVERSE is "; PEEK(17126)1110 hi=INT(PEEK(17126)/16)1120 lo=PEEK(17126)-(hi*16)1130? "    TEXT is "; c$(hi)1140? "    BACK is "; c$(lo)1145NORMAL1149RETURN1150?1160? " 15 controls the background screen color  and the text color.  'POKING' the correct value into this memorylocation will determine what background and text color combinationwill be created.     For example, when Basic is booted, the value 241 will be found.(Try it: type "PRINT PEEK(17115)" and hit <return>)Now, type "POKE 17115,19:TEXT" and hit <return>.   WOW! Did you get a pretty light-green background withblack text?  If not, type "PRINT PEEK(17115)" and hit return to seewhat you typed!     Wel Screen."2040?:? " You will be able to change":? " the BACKDROP COLOR, the"2050? " BACKGROUND COLOR, and the":? " TEXT COLOR.":?2060? " You will also be able to":? " change the BACKGROUND and":? " TEXT color for inverse."2070VTAB 23:HTAB 1:? "  Press Any Key to Continue":GET m$:RETURNACK is "; c$(lo)1090INVERSE1100? "  Current INVERSE is "; PEEK(17126)1110 hi=INT(PEEK(17126)/16)1120 lo=PEEK(17126)-(hi*16)1130? "    TEXT is "; c$(hi)1140? "    BACK is "; c$(lo)1145NORMAL1149RETURN1150?1160? " UB 1150210INPUT " "; a$:IF a$<"1" OR a$>"5" THEN 200220IF a$="4" THEN POKE 17059, s1:POKE 17115, s2:POKE 17126, s3:TEXT:END221IF a$="5" THEN TEXT:END225GOSUB 1000:GOSUB 1400:?230IF a$="2" THEN 300240IF a$="3" THEN 400250? "  Change BACKDROP"260 n$="Backdrop":GOSUB 1300:POKE 17059, a:GOTO 200300? "  Change NORMAL"310 n$="text":GOSUB 1300: hi=a320 n$="back":GOSUB 1300: lo=a330POKE 17115, hi*16+lo:GOTO 200400? "  Change INVERSE"410 n$="text":GOSUB 1300: hi=a420 n$="back":GOSUB 1300: lo=a430POKExLBasic programs.  In fact,you should get into the habit of starting EVERY program with the same commands.So, how do you do it?  Here's how:     Memory location 17115 ADD EXCITING COLORS TO YOUR BASIC PROGRAMS!It's easy to add exciting color to your Basic programs.  In fact,you should get into the habit of starting EVERY program with the same commands.So, how do you do it?  Here's how:     Memory location 171 1  change BACKDROP"1170? "  2  change NORMAL"1180? "  3  change INVERSE"1190? "  4  END   (with RESET)"1193? "  5  END   (no   RESET)"1199RETURN1300? "  >> Pick color # for "; n$; :INPUT "   "; a1310IF a<0 OR a>15 THEN 13001320?1330RETURN1400?1410FOR c=0 TO 71420? TAB(3); c$(c); TAB(16); c$(c+8)1430NEXT1440RETURN2000TEXT2010VTAB 2:? " BACKGROUND & TEXT COLOR DEMO ":?:?2020? " This program allows you to":? " see the effects of different"2030? " combinations of colors for":? " the Adam Textl, you ask, that's good and well for light-green and blacktext, but what about other color combinations?The following chart will help you determine the right number for whatever background/text color combination you desire!The left-most column lists the colors (abbreviated) from TRansparentto WHite for the background color.  The top row lists the colors fromTRansparent to WHite for the text color.     To use the chart, select the background color that you desire andmove across to the column for the+---+---+---+---+---+---+---+---+---+---|DB |  4| 20| 36| 52|***| 84|100|116|132|148|164|180|196|212|228|244|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|LB |  5| 21| 37| 53| 69|***|101|117|133|149|165|181|197|213|229|245|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|DR |  6| 22| 38| 54| 70| 86|***|118|134|150|166|182|198|214|230|246|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|CY |  7| 23| 39| 55| 71| 87|103|***|135|151|167|183|199|ion should be avoided sincepoking this number would make any text invisible over the same colorbackground.     You might have noticed that the top and bottom of your screen arestill black.  To change this, poke memory location 17059 with whatevercolor number you would like that is found in the FIRST column (labeledTR).  For example, to get light green, type 'POKE 17059,3: TEXT' and    hit <return>.      The memory location 17126 controls the text/background colors for the INVERSE command.  The sam 59| 75| 91|107|123|139|155|171|***|203|219|235|251|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|DG | 12| 28| 44| 60| 76| 92|108|124|140|156|172|188|***|220|236|252|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|MA | 13| 29| 45| 61| 77| 93|109|125|141|157|173|189|205|***|237|253|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|GR | 14| 30| 46| 62| 78| 94|110|126|142|158|174|190|206|222|***|254|---+---+---+---+---+---+---+---+---+---+---+-|TR |***| 16| 32| 48| 64| 80| 96|112|128|144|160|176|192|208|224|240|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|BL |  1|***| 33| 49| 65| 81| 97|113|129|145|161|177|193|209|225|241|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|MG |  2| 18|***| 50| 66| 82| 98|114|130|146|162|178|194|210|226|242|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|LG |  3| 19| 35|***| 67| 83| 99|115|131|147|163|179|195|211|227|243|---+---+---+---+---+---+--- text color that you want.  For        example, to select a light-green background (LG), choose the ROW        labeled 'LG'.  Now, move across to the COLUMN labeled 'BL' for BLack.The number in this square is 19.  By poking memory location 17115 with the number 19, you will get a light-green background with black text!     Any other background/text combination can be determined in a       similar fashion.  You will notice that several squares contain three    astericks(***).  All squares with this notat215|231|247|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|MR |  8| 24| 40| 56| 72| 88|104|120|***|152|168|184|200|216|232|248|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|LR |  9| 25| 41| 57| 73| 89|105|121|137|***|169|185|201|217|233|249|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|DY | 10| 26| 42| 58| 74| 90|106|122|138|154|***|186|202|218|234|250|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|LY | 11| 27| 43|e table values apply.====================================================================B G|                                                               |A R|                  T E X T   C O L O R                          |C N|                                                               |K D|   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |TR |BL |MG |LG |DB |LB |DR |CY |MR |LR |DY |LY |DG |MA |GR |WH |---|===============================================================--+---+---+---+---+---|WH | 15| 31| 47| 63| 79| 95|111|127|143|159|175|191|207|223|239|***|===================================================================||                                                                  ||                     K E Y   T O   C O L O R S                    ||                                                                  ||           TR = TRANSPARENT           MR = MEDIUM RED             ||           BL = BLACK                 LR = LIGHT  RED             ||    tem$(count)=CHR$(18) THEN GOSUB 350330IF item$(count)="" GOTO 400340NEXT:GOTO 400349REM  item-reentry subroutine350 count=count-1:VTAB 16:INVERSE:? " RE-ENTER:"; :NORMAL:?  "  "; item$(count):?360? " ITEM #"; count; :INPUT "? "; item$(count)370VTAB 16:?:?:?:?:?:?:?:?380IF item$(count)=CHR$(18) GOTO 350390RETURN400HOME:VTAB 9:? "  * * * * * * * * * * * * * *":VTAB 12:? " NOW SORTING YOUR "; count-1; " ITEMS"425?:? SPC(10); "PLEASE WAIT":VTAB 17:? "  * * * * * * * * * * * * * *":VTAB 24449REM  shel==================================| 47| 63| 79| 95|111|127|143|159|175|191|207|223|239|***|===================================================================||                                                                  ||                     K E Y   T O   C O L O R S                    ||                                                                  ||           TR = TRANSPARENT           MR = MEDIUM RED             ||           BL = BLACK                 LR = LIGHT  RED             ||    $="N" GOTO 700599REM  data storage600HOME:VTAB 8:? "   PLEASE INSERT TAPE OR DISK", , , "  IN  DRIVE AND SELECT DRIVE #", , , "  (1, 2, 5, 6 [0 = ESCAPE])"610VTAB 18:INPUT "    DRIVE #?  "; drive%:IF drive%=0 GOTO   700620IF drive%=3 OR drive%=4 OR drive%>6 GOTO 600630VTAB 21:INPUT "   FILENAME?  "; name$640HOME:VTAB 9:? "  * * * * * * * * * * * * * *":VTAB 12:?   SPC(7); "STORING LIST --"650?:? SPC(9); "PLEASE WAIT":VTAB 17:? "  * * * * * * * * *  * * * * *":VTAB 24660ONERR  GOTO 600: d$=CHR$(4):? 10REM  alphabetical sorting program20REM  by George A. Havach30REM  CIS User I.D. 70337,3062100HOME:VTAB 12:? " ABOUT HOW MANY ITEMS TO SORT?":?:INPUT   n:DIM item$(n+10)200HOME:VTAB 3:? " NO MORE THAN "; n; " ITEMS,", , , "       PLEASE!"225VTAB 7:? " FOLLOW LAST ITEM WITH", , , "   A SIMPLE       <RETURN>"250VTAB 11:? " TO RE-ENTER AN ITEM,", , , "   INPUT          'CONTROL-R'"300FOR count=1 TO n+10310VTAB 18:? " ITEM #"; count; :INPUT "? ";                  item$(count):VTAB 18:?:?:?:?:?320IF i       MG = MEDIUM GREEN          DY = DARK YELLOW            ||           LG = LIGHT  GREEN          LY = LIGHT YELLOW           ||           DB = DARK BLUE             DG = DARK GREEN             ||           LB = LIGHT BLUE            MA = MAGENTA                ||           DR = DARK RED              GR = GRAY                   ||           CY = CYAN                  WH = WHITE                  ||                                                                  |==================================l sort450 guide=1455 guide=2*guide:IF guide<count GOTO 455460 guide=INT((guide-1)/2):IF guide=0 GOTO 500465FOR i=1 TO count-guide: j=i470 k=j+guide:IF item$(k)<item$(j) THEN  q$=item$(j):        item$(j)=item$(k): item$(k)=q$: j=j-guide:IF j>0 GOTO 470475NEXT:GOTO 460499REM  data disposal500HOME:VTAB 8:? SPC(9); "YOUR "; count-1; " ITEMS":?:?      SPC(8); "ARE NOW SORTED!"525VTAB 18:? "  WOULD YOU LIKE TO STORE", , , " YOUR LIST TO DISK OR TAPE?", , , " (y/n)"550VTAB 24:GET key$:IF key$="n" OR key       MG = MEDIUM GREEN          DY = DARK YELLOW            ||           LG = LIGHT  GREEN          LY = LIGHT YELLOW           ||           DB = DARK BLUE             DG = DARK GREEN             ||           LB = LIGHT BLUE            MA = MAGENTA                ||           DR = DARK RED              GR = GRAY                   ||           CY = CYAN                  WH = WHITE                  ||                                                                  |==================================d$; "OPEN "; name$; ",D";   drive%670? d$; "WRITE "; name$:FOR listing=2 TO count:?            item$(listing):NEXT680? d$; "CLOSE "; name$:CLRERR699REM  data display700HOME:VTAB 18:? "  WOULD YOU LIKE A HARDCOPY?", , , "      (y/n)"710VTAB 24:GET key$:IF key$="y" OR key$="Y" GOTO 730720GOTO 760730HOME:VTAB 17:? "   LOAD PAPER IN PRINTER--", , , "  PRESS ANY KEY", , , , , "  (CONTROL-C ABORTS)"740VTAB 24:GET key$:IF key$=CHR$(3) GOTO 760750PR #1:GOTO 770760HOME:VTAB 18:? "      PRESS ANY KEY FOR A"? " HGR or HGR2 screen."2050RETURNNTER:"120GOSUB 180130VTAB 1:HTAB 1:INPUT "TYPE MESSAGE:"; st$135GOSUB 300140IF LEN(st$)>31 THEN ? "MESSAGE TOO LONG!  31 MAX!!":? "  press any key to continue":GET m$150IF LEN(st$)>31 THEN  st$="":VTAB 1:HTAB 1:? CHR$(24):GOTO 130154IF LEN(st$)=0 THEN 130155HGR:HCOLOR =4158 ht=2:REM   horizontal tab 159 vt=5:REM  vertical tab160GOSUB 180170ROT =16: ht=2: vt=8:GOSUB 180:ROT =32: ht=3: vt=13:GOSUB 180179END180 ht=7*(ht-1): vt=8*vt-1190FOR i=1 TO LEN(st$)200 c1LOMEM :290005REM   :program by Bob Zimmerman6POKE 17115, 23:POKE 17059, 7:POKE 17126, 253:TEXT:POKE 25568, 23:POKE 25431, 7:POKE 25471, 237GOSUB 20008? CHR$(4); "bload alphabetI":?9? " Please Use Capital Letters":VTAB 2310INVERSE11? "  Press Any Key To Continue   ":NORMAL:GET a$12HGR:HCOLOR =320POKE 16766, 9630POKE 16767, 10933SCALE =1:ROT =0:VTAB 2140 vt=5: ht=5: st$="SHAPE TABLE TEXT FOR HGR"60GOSUB 18070 vt=7: ht=5: st$="PROVIDING TEXT AND NUMBERS"80GOSUB 18090 vt=9: ht=5: st$="TRY IT!"M.BLUE": c$(6, 2)="DK.RED"48 c$(7, 2)="AQUA": c$(8, 2)="MDM.RED": c$(9, 2)="LT.RED"49 c$(10, 2)="DK.YELLOW": c$(11, 2)="LT.YELLOW": c$(12, 2)="DK.GREEN"50 c$(13, 2)="PURPLE": c$(14, 2)="GREY": c$(15, 2)="WHITE"51 cn%(0)=0: cn%(1)=0: cn%(2)=1: cn%(3)=152 cn%(4)=9: cn%(5)=6: cn%(6)=2: cn%(7)=1453 cn%(8)=5: cn%(9)=11: cn%(10)=854 cn%(11)=13: cn%(12)=12: cn%(13)=15: cn%(14)=10: cn%(15)=360 c%=3: ap%=0: fp%=1: bc%=1: fc%=1: res%=1: r=159: dn=070POKE 25568, 27:GOSUB 500: d$=CHR$(4):GOSUB 10000100 hol=FRh=ASC(MID$(st$, i, 1))-32210IF ch=0 THEN 230220DRAW ch AT ht, vt230 ht=ht+8240NEXT i250RETURN300FOR i=1 TO LEN(st$)310 p$=MID$(str$, i, 1):IF ASC(p$)>90 THEN  p$=CHR$(ASC(p$)-32)320 m$=m$+p$330NEXT i340 st$=m$: m$="":RETURN2000VTAB 2:INVERSE:? " PRINTING TEXT IN HGR OR HGR2 ":NORMAL2010VTAB 7:HTAB 1:? " This program demonstrates":? " how to print text messages":? " on the HGR or HGR2 screens."2020?:? " The program will load a":? " alphabet shape table and":? " will draw each letter on the"2030, , , "         SCREEN LISTING OF ITEMS":VTAB 24:GET key$770HOME:VTAB 24:FOR listing=2 TO count:?                     item$(listing):NEXT:PR #0800ENDPE])"610VTAB 18:INPUT "    DRIVE #?  "; drive%:IF drive%=0 GOTO   700620IF drive%=3 OR drive%=4 OR drive%>6 GOTO 600630VTAB 21:INPUT "   FILENAME?  "; name$640HOME:VTAB 9:? "  * * * * * * * * * * * * * *":VTAB 12:?   SPC(7); "STORING LIST --"650?:? SPC(9); "PLEASE WAIT":VTAB 17:? "  * * * * * * * * *  * * * * *":VTAB 24660ONERR  GOTO 600: d$=CHR$(4):? 10LOMEM :3310020 ms=0: zm=0:GOSUB 900040DIM p(400, 5), c$(16, 2), cn%(16)41 c$(0, 1)="BLACK": c$(1, 1)="GREEN": c$(2, 1)="DK.RED"42 c$(3, 1)="WHITE": c$(4, 1)="BLACK": c$(5, 1)="MDM.RED"43 c$(6, 1)="MDM.BLUE": c$(7, 1)="WHITE": c$(8, 1)="DK.YELLOW": c$(9, 1)="DK.BLUE"44 c$(10, 1)="GREY": c$(11, 1)="LT.RED": c$(12, 1)="DK.GREEN"45 c$(13, 1)="LT.YELLOW": c$(14, 1)="AQUA": c$(15, 1)="PURPLE"46 c$(0, 2)="BLACK": c$(1, 2)=c$(0, 2): c$(2, 2)="GREEN": c$(3, 2)="LT.GREEN"47 c$(4, 2)="DK.BLUE": c$(5, 2)="MD100GOSUB 180110 vt=19: ht=5: st$="ENTER:"120GOSUB 180130VTAB 1:HTAB 1:INPUT "TYPE MESSAGE:"; st$135GOSUB 300140IF LEN(st$)>31 THEN ? "MESSAGE TOO LONG!  31 MAX!!":? "  press any key to continue":GET m$150IF LEN(st$)>31 THEN  st$="":VTAB 1:HTAB 1:? CHR$(24):GOTO 130154IF LEN(st$)=0 THEN 130155HGR:HCOLOR =4158 ht=2:REM   horizontal tab 159 vt=5:REM  vertical tab160GOSUB 180170ROT =16: ht=2: vt=8:GOSUB 180:ROT =32: ht=3: vt=13:GOSUB 180179END180 ht=7*(ht-1): vt=8*vt-1190FOR i=1 TO LEN(st$)200 cE(0):GOSUB 1000:IF PDL(7)=1 THEN GOSUB 1100120IF PDL(9)=1 THEN GOSUB 1200130IF PDL(13)=1 THEN GOSUB 2000140GOSUB 1000:IF PDL(13)=2 THEN GOSUB 3000160IF PDL(13)=3 THEN GOSUB 3100170IF PDL(13)=4 THEN GOSUB 3200180GOSUB 1000:IF PDL(13)=5 THEN GOSUB 3400200IF PDL(13)=6 THEN GOSUB 3600210IF PDL(13)=7 THEN GOSUB 3700220GOSUB 1000:IF PDL(13)=8 THEN GOSUB 3750240IF PDL(13)=10 THEN GOSUB 4000250IF PDL(13)=11 THEN GOSUB 5000252GOSUB 1000:IF PDL(13)=0 THEN GOSUB 6000254IF PDL(13)=9 THEN GOSUB 6450260GOTOes%=2 THEN PR #13610HOME:INPUT "QUIT(Y/N)"; yn$3620IF yn$="NO" OR yn$="N" OR yn$="n" OR yn$="no" THEN PR #0:RETURN3630HOME:INPUT "SAVE THIS PICTURE(Y/N)"; yn$3640PR #03650IF yn$="YES" OR yn$="Y" OR yn$="y" OR yn$="yes" THEN GOSUB 40003660IF fp%>1 THEN GOSUB 34803670END3700IF res%=2 THEN PR #13710IF ap%=0 AND fp%=1 THEN 37303720HOME:? "SORRY!! FRAME COLOR":GOSUB 3230:RETURN3730 s$="FRAME":GOSUB 3800: bc%=nc:GOSUB 500:RETURN3750IF res%=2 THEN PR #13760IF ap%=0 AND fp%=1 THEN 37803770HOME:? "SORRHEN GOSUB 12801260RETURN1280 s$="TEMP"+STR$(fp%)1290HTAB 1:? d$; "OPEN "; s$1300HTAB 1:? d$; "WRITE "; s$1310FOR lp=0 TO ap%-11320? p(lp, 1):? p(lp, 2)1330? p(lp, 3):? p(lp, 4)1340? p(lp, 5):NEXT lp1350HTAB 1:? d$; "CLOSE "; s$1360 fp%=fp%+1: ap%=0:RETURN2000IF res%=2 THEN PR #12010HOME:? "INPUT BRUSH COLOR(0-15)"2020PR #0:INPUT c%:IF c%>15 OR c%<0 THEN 20002040RETURN3000IF ap%=0 THEN RETURN3005 ap%=ap%-13010 xf=p(ap%, 2): yf=p(ap%, 3)3020 xt=p(ap%, 4): yt=p(ap%, 5)3030HCOLOR =cn%(fc%)30c%:? fc%4070? ap%:? fp%4080HTAB 1:? d$; "CLOSE "; n$4090GOSUB 600:GOSUB 12804110 fp%=fp%-14120FOR lp=fp% TO 1 STEP -14130 yn$="TEMP"+STR$(lp)4140 s$=n$+STR$(lp)4150HTAB 1:? d$; "RENAME "; yn$; ","; s$4170GOSUB 600:NEXT lp: dn=14190IF res%=2 THEN PR #14200HOME:? "PICTURE SAVED AS"4210? n$4220PR #0:RETURN5000TEXT5010INPUT "NEED A LISTING"; yn$5020IF yn$="NO" OR yn$="N" OR yn$="n" OR yn$="no" THEN 50805030HOME:SPEED =1005040HTAB 1:? d$; "CATALOG"5050? "HIT ANY KEY TO GO ON"5060GET yn$:SPEED#03290ON res% GOSUB 3310, 33203300RETURN3310HGR: r=159:RETURN3320HGR2: r=192:RETURN3400IF res%=2 THEN PR #13410HOME:? "ERASE PICTURE(Y/N)"3420INPUT yn$3430IF yn$="NO" OR yn$="N" OR yn$="n" OR yn$="no" THEN PR #0:RETURN3440PR #03450IF fp%>1 THEN GOSUB 34803460 ap%=0:GOSUB 32903470RETURN3480IF dn=1 THEN  dn=0:RETURN3490 fp%=fp%-13500IF fp%=0 THEN  fp%=1:RETURN3510 s$="TEMP"+STR$(fp%)3520HTAB 1:? d$; "CLOSE "; s$3530HTAB 1:? d$; "DELETE "; s$3540FOR lp=1 TO 300:NEXT lp3550GOTO 34903600IF r 100500POKE 25431, bc%:POKE 25471, fc%:GOTO 3290600FOR hol=1 TO 300:NEXT hol:RETURN1000IF zm=1 THEN 61001002 x=INT(255*PDL(3)/255): y=INT(r*PDL(1)/255)1005 vsp=33024+4*ms: hsp=33025+4*ms1010IF y>r THEN  y=r1012IF y<0 THEN  y=01013IF x<0 THEN  x=01014IF x>254 THEN  x=2541020POKE vsp, y:POKE hsp, x:CALL 30000:RETURN1100 fx=x: fy=y:RETURN1200 tx=x: ty=y1210HCOLOR =c%: p(ap%, 1)=c%1220 p(ap%, 2)=fx: p(ap%, 3)=fy1230 p(ap%, 4)=tx: p(ap%, 5)=ty1240HPLOT fx, fy TO tx, ty1250 ap%=ap%+1:IF ap%=400 TY!! CANVAS COLOR":GOSUB 3230:RETURN3780 s$="CANVAS":GOSUB 3800: fc%=nc3782IF fc%=0 OR fc%=1 THEN POKE 33027, 15:GOTO 37903784POKE 33027, 13790GOTO 5003800HOME:? "SELECT NEW COLOR FOR"3810? s$; " (0-15)"; 3820INPUT nc3830IF nc<0 OR nc>15 THEN 38003840PR #0:RETURN4000IF res%=2 THEN PR #14010HOME:? "NAME FOR THIS PICTURE"4020INPUT n$4030IF LEN(n$)>6 THEN ? "NAME TOO LONG (6 char. max)":GOSUB 600:GOSUB 600:GOTO 40104035PR #04040HTAB 1:? d$; "OPEN "; n$4050HTAB 1:? d$; "WRITE "; n$4060? res%:? b40HPLOT xf, yf TO xt, yt3050RETURN3100IF res%=2 THEN PR #13110HOME3120IF zm=1 THEN  r$="FINE ":GOTO 31403130 r$="REG. "3140? "MODE="; r$; " :BRUSH="; c$(c%, 1)3150? "CANVAS= "; c$(fc%, 2)3160? "FRAME= "; c$(bc%, 2)3170PR #0:RETURN3200IF ap%<1 AND fp%=1 THEN 32503210IF res%=2 THEN PR #13220HOME:? "SORRY!! RESOLUTION"3230? "CANNOT BE CHANGED ONCE PICTURE"3240? "IS STARTED!!":PR #0:RETURN3250HOME:? "SELECT RESOLUTION:"3260INPUT "1=HGR / 2=HGR2"; res%3270IF res%<>1 AND res%<>2 THEN 32503280PR  =2555080 x=254: y=1925090INPUT "WHICH PICTURE"; n$5100HTAB 1:? d$; "OPEN "; n$5110HTAB 1:? d$; "READ "; n$5120INPUT res%:INPUT bc%:INPUT fc%5130INPUT ep%:INPUT fp%5140HTAB 1:? d$; "CLOSE "; n$5141POKE vsp, y:POKE hsp, x5145GOSUB 500:CALL 30000: ep%=ep%-15150FOR lp=1 TO fp%5160IF lp=fp% THEN  ap%=ep%:GOTO 51805170 ap%=3995180 s$=n$+STR$(lp)5190HTAB 1:? d$; "OPEN "; s$5200? d$; "read "; s$5210FOR hol=0 TO ap%5220INPUT c%:? CHR$(8):INPUT fx:? CHR$(8)5225INPUT fy:? CHR$(8)5230INPUT tx:? CHR$vailable -----"9250? "*=Save Completed Picture"9260? "0=Toggle Regular/Fine Modes"9270? "#=Retrieve & Restore A "9280HTAB 6:? "Completed Picture"9290?:?:HTAB 10:? "HIT ANY KEY":GET yn$9300POKE 17059, 5:POKE 17115, 240:TEXT9310RETURN10000 off=0: addr=30000: ml=3000010010READ val:IF val=256 THEN 1004010020POKE addr+off, val10030 off=off+1:GOTO 1001010040FOR addr=32000 TO 3200710050READ val:POKE addr, val10060NEXT addr10070FOR addr=32008 TO 3203110080POKE addr, 0:NEXT addr10090FOR addr=33024 THEN  y=y+1: x=x+16160IF dir=8 THEN  x=x-16170IF dir=9 THEN  y=y-1: x=x-16180IF dir=12 THEN  y=y+1: x=x-16190IF x<0 THEN  x=06191IF x>254 THEN  x=2546192IF y<0 THEN  y=06193IF y>r THEN  y=r6200 vsp=33024+4*ms: hsp=33025+4*ms6210POKE vsp, y:POKE hsp, x6220CALL 30000:RETURN6450IF res%=2 THEN PR #16500HOME:? "FOR: 1=BRUSH / 2= FRAME-CANVAS"6510INPUT lp6520IF lp<>1 AND lp<>2 THEN 65006530SPEED =100:GOSUB 66006550PR #0:SPEED =255:RETURN6600FOR hol=0 TO 156605IF (hol/2)=INT(hol/2) THEN 66206610?vailable -----"9250? "*=Save Completed Picture"9260? "0=Toggle Regular/Fine Modes"9270? "#=Retrieve & Restore A "9280HTAB 6:? "Completed Picture"9290?:?:HTAB 10:? "HIT ANY KEY":GET yn$9300POKE 17059, 5:POKE 17115, 240:TEXT9310RETURN10000 off=0: addr=30000: ml=3000010010READ val:IF val=256 THEN 1004010020POKE addr+off, val10030 off=off+1:GOTO 1001010040FOR addr=32000 TO 3200710050READ val:POKE addr, val10060NEXT addr10070FOR addr=32008 TO 3203110080POKE addr, 0:NEXT addr10090FOR addr=33024 T7059, 11:TEXT9120HTAB 10:? "OVERLAY DATA":HTAB 10:? "------------":?9130? "O=Brush             Controller"9140? "[=Set Start Point           #1"9150? "]=Set End Point & Draw  -----"9160? "1=Select Brush Color    | O |"9170? "2=Erase Last Line Drawn |   |"9180? "3=Display Current Stats [   ]"9190? "4=Select Resolution     |---|"9200? "5=Erase Picture         |123|"9210? "6=Quit                  |456|"9220? "7=Set Frame Color       |789|"9230? "8=Set Canvas Color      |*0#|"9240? "9=List Colors A(8):INPUT ty:? CHR$(8)5240HCOLOR =c%5250HPLOT fx, fy TO tx, ty5260NEXT hol5270HTAB 1:? d$; "CLOSE "; s$5290GOSUB 600:NEXT lp5300IF res%=2 THEN PR #15310HOME:? "PICTURE RESTORED"5320PR #0: dn=1:RETURN6000 zm=zm-1: zm=ABS(zm)6020ON (zm+1) GOTO 6050, 60606030FOR lp=1 TO 300:NEXT lp:RETURN6050HOME:? "REGULAR MODE"6055GOTO 60306060HOME:? "FINE MODE"6065GOTO 60306100 dir=PDL(5)6110IF dir=1 THEN  y=y-16120IF dir=2 THEN  x=x+16130IF dir=3 THEN  y=y-1: x=x+16140IF dir=4 THEN  y=y+16150IF dir=6 TO 3302710100READ val:POKE addr, val10110NEXT addr:RETURN11000DATA      14,226,6,1,205,32,25311010DATA      58,24,252,253,33,32,0,33,0,12511020DATA      17,0,0,205,44,253,58,23,252,25311030DATA      33,8,0,17,0,0,33,0011040DATA      129,205,44,253,201,25611100DATA      252,252,192,192,192,192,0,011110DATA      11,11,00,15---|"9200? "5=Erase Picture         |123|"9210? "6=Quit                  |456|"9220? "7=Set Frame Color       |789|"9230? "8=Set Canvas Color      |*0#|"9240? "9=List Colors A hol; "= "; c$(hol, lp)6615GOTO 66306620? hol; "= "; c$(hol, lp); :HTAB 156630NEXT hol:RETURN9000POKE 17115, 31:POKE 17059, 159010TEXT:VTAB 5:HTAB 119020FLASH:? "*********"9030HTAB 11:? "* "; :NORMAL:? "EASEL"; :FLASH:? " *"9040HTAB 11:? "*********":NORMAL9050?:HTAB 14:? "by":?9060HTAB 9:? "GREGG NOBLETT":?:HTAB 15:? "A"9070?:HTAB 8:? "High Resolution":?:HTAB 79080? "Picture Painting":?:HTAB 12:? "Program"9090?:HTAB 8:? "(Written 08/85)"9100FOR hol=1 TO 20000:NEXT hol9110POKE 17115, 27:POKE 11GOTO 40000300FOR i=1 TO 83:? a(i):NEXT i1000IF aa$="" THEN 10301010GOSUB 59980:? "FILE ALREADY DEFINED....":GOSUB 59990:? "ERASE CURRENT FILE  BEFORE REDEFINEING.": i=2000:GOSUB 599701020GOTO 400001030CLEAR:GOSUB 19001099 x=01100GOSUB 599801110? "      NAME FOR FIELD # "; x+1; "?":? TAB(9); "(MAX 10 CHARS)":?1120 lc=10:GOSUB 500101130 a$(x)=w$1200GOSUB 599901210? "MAXIMUM CHARACTERS IN FIELD "; x+1; "?":? "   (LIMIT IS 40 CHARACTERS)":?1220 lc=2: ld=1:GOSUB 510101230IF w<1 OR w>40 THEN  e$="OER? ":?3120 lc=3: ld=1:GOSUB 51010:IF w=0 THEN 410003130IF w<1 OR w>a(81) THEN GOSUB 59560:GOSUB 59800:GOSUB 59850:GOTO 31203140FOR i=a(81) TO w-1 STEP -1: b$(i+1)=b$(1):NEXT i3150 b=1: x=0: a$=STR$(w): b$(w-1)=""3160GOSUB 3900:GOSUB 59990:GOSUB 28003170 b$(w-1)=b$(w-1)+w$:IF (x+1)=a(80) THEN 32003180 b=b+a(x): x=x+1:GOTO 31603200 a(81)=a(81)+1:GOSUB 2900:IF g=1 THEN  g=0:GOTO 410003210GOSUB 59990:? "CONTINUE INSERTING RECORDS (Y/N)":?3220 lc=1:GOSUB 50010:IF w$<>"Y" AND w$<>"y" THEN 400003230 w=:?1350 lc=1:GOSUB 500101360IF w$="Y" OR w$="y" THEN  x=x+1:GOTO 11001370IF w$<>"N" AND w$<>"n" THEN GOSUB 59550:GOSUB 59800:GOSUB 59850:GOTO 13501400GOSUB 599801410? "YOU HAVE COMPLETED DEFINING THE FIELDS.":GOSUB 599901420 a(80)=x+1: a(81)=01430 c=FRE(x)-1000: a(83)=b: b=INT(c/b):IF b>999 THEN  b=9991440? "THERE IS ROOM FOR "; b; " RECORDS.": a(82)=b1450 i=1000:GOSUB 59970: aa$="D":GOTO 410001900DIM a(83), a$(39), b(39), b$(999):RETURN2000GOSUB 2900:IF g=1 THEN  g=0:GOTO 410002100 b=1: x=0: b$(=1: x=0: a$=STR$(z)4150IF b(x)=0 THEN 42004160GOSUB 4900:GOSUB 59990:GOSUB 28004170 b$(z-1)="("+b$(z-1)+")"4180 b$(z-1)=LEFT$(b$(z-1), b)+w$+MID$(b$(z-1), b+a(x)+1)4190 b$(z-1)=MID$(b$(z-1), 2, LEN(b$(z-1))-2)4200IF (x+1)=a(80) THEN 42204210 b=b+a(x): x=x+1:GOTO 41504220IF z=a(81) THEN 410004230GOSUB 59990:? "CHANGE NEXT RECORD (Y/N)?":?4240 lc=1:GOSUB 50010:IF w$<>"Y" THEN 410004250 z=z+1:GOTO 41404900GOSUB 59980:? TAB(3); "--- CHANGE RECORD(S) ---":RETURN5000GOSUB 5800:IF g=1 THEN  g=0:GOTO 4____________________________":GOSUB 599902850 lc=a(x):IF a(x+40)<>0 THEN  ld=0:GOSUB 51010:GOTO 28702860GOSUB 500102870IF LEN(w$)<a(x) THEN FOR i=1 TO a(x)-LEN(w$): w$=w$+" ":NEXT i2880RETURN2900 g=0:IF a(81)>=a(82) THEN  g=1:GOSUB 59980:? "FILE IS FULL!!": i=1000:GOSUB 599702910RETURN3000GOSUB 2900:IF g=1 THEN  g=0:GOTO 410003010GOSUB 5800:IF g=1 THEN  g=0:GOSUB 59990:? "USE THE APPEND ROUTINE....": i=1000:GOSUB 59970:GOTO 410003100GOSUB 3900:GOSUB 5900:GOSUB 599903110? "INSERT BEFORE RECORD NUMBUTSIDE VALID RANGE. RE-ENT ER.":GOSUB 59800:GOSUB 59850:GOTO 12201240IF b+w>236 THEN  e$="RECORD OVERFLOW. REDUCE FIELD  LENGTH.":GOSUB 59800:GOSUB 59850:GOTO 12201250 a(x)=w:GOSUB 599901260? "IS FIELD "; x+1; " ALPHA OR NUMERIC (A/N)?":?1270 lc=1:GOSUB 500101280IF w$="A" OR w$="a" THEN  a(x+40)=0:GOTO 13101290IF w$<>"N" AND w$<>"n" THEN GOSUB 59550:GOSUB 59800:GOSUB 59850:GOTO 12701300 a(x+40)=11310 b=b+a(x):IF b=236 THEN 14001320IF x>38 THEN 14001330GOSUB 599801340? "INPUT ANOTHER FIELD (Y/N)?"w+1:GOTO 31403900GOSUB 59980:? TAB(3); "--- INSERT RECORD(S) ---":RETURN4000GOSUB 5800:IF g=1 THEN  g=0:GOTO 410004010GOSUB 4900:GOSUB 69004020GOSUB 59990:? "INPUT FIELD(S) TO BE CHANGED."4030GOSUB 68004040FOR i=0 TO 39:IF b(i)<>0 THEN  g=14050NEXT i:IF g=1 THEN  b=0:GOTO 41004060GOTO 410004100GOSUB 4900:GOSUB 5900:GOSUB 599904110? "BEGIN CHANGES WITH RECORD NUMBER?":?4120 lc=3: ld=1:GOSUB 51010: z=w:IF z=0 THEN 410004130IF z<1 OR z>a(81) THEN GOSUB 59560:GOSUB 59800:GOSUB 59850:GOTO 41204140 ba(81))=""2200GOSUB 59980: a$=STR$((a(81))+1):? TAB(3); "--- APPEND RECORD(S) ---":GOSUB 599902210GOSUB 28002220 b$(a(81))=b$(a(81))+w$2230IF (x+1)=a(80) THEN 22502240 b=b+a(x): x=x+1:GOTO 22002250 a(81)=a(81)+12260GOSUB 59990:? "CONTINUE WITH NEXT RECORD (Y/N)?":?2270 lc=1:GOSUB 500102280IF w$="Y" OR w$="y" THEN 20002290GOTO 410002800? "RECORD # "; a$; "   MAX CHARS = "; a(x); "  "; 2810IF a(x+40)=0 THEN ? " ALPHA":GOTO 28302820? " NUMERIC"2830?:?:? "FIELD # "; x+1; "NAMED: "; a$(x)2840? "___10005100GOSUB 59980:? TAB(3); "--- DELETE RECORD(S) ---":GOSUB 59005110GOSUB 5700:IF g=1 THEN  g=0:GOTO 410005120GOSUB 59980:? "YOU HAVE REQUESTED THE DELETION":? "OF RECORD NUMBER(S) "; y; " THROUGH "; z5130GOSUB 59990:? "IS THIS CORRECT (Y/N)?":?5140 lc=1:GOSUB 50010:IF w$<>"Y" THEN 51005200 f=z-y+1:IF z<a(81) THEN FOR i=z TO a(81): b$(i-f)=b$(i):NEXT i5210FOR i=1 TO f: a(81)=a(81)-1: b$(a(81))="":NEXT i:GOSUB 5900:GOTO 410005700 g=0:GOSUB 59990:? "FIRST RECORD TO PROCESS?":?5710GOSUB 5790:IF w=0ETURN6910GOSUB 59980:? " WANT TO SUPPRESS ANY FIELDS":? TAB(13); "(Y/N)?":?:RETURN6920GOSUB 59980:? "INPUT FIELD(S) TO BE SUPPRESSED>":RETURN6930GOSUB 59980:? "SUPPRESS RECORD NUMBERS (Y/N)?":?:RETURN6940GOSUB 59980:? "OUTPUT TO SCREEN OR PRINTER":? TAB(13); "(S/P)?":?:RETURN7000GOSUB 5800:IF g=1 THEN  g=0:GOTO 410007100GOSUB 59980:? TAB(3); "--- FIND RECORD(S) ---":GOSUB 59007110GOSUB 5700:IF g=1 THEN  g=0:GOTO 410007200GOSUB 65007210GOSUB 59980:? "SEARCH FIELD NAMED?":?7220 lc=10:GOSUB 50010723N  g=0:GOTO 410006100GOSUB 59980:? TAB(3); "--- LIST RECORD(S) ---":GOSUB 59006110GOSUB 5700:IF g=1 THEN  g=0:GOTO 410006200GOSUB 65006210GOSUB 59980:IF c=1 THEN ? CHR$(13)+CHR$(4)+"PR#1":GOSUB 599906220GOSUB 66006230FOR i=y-1 TO z-16240GOSUB 67006250NEXT i6260GOSUB 59990:GOSUB 59990:? CHR$(13)+CHR$(4)+"PR#0":GOTO 410006500GOSUB 6900:GOSUB 69106510 lc=1:GOSUB 50010:IF w$<>"Y" THEN 65306520GOSUB 6920:GOSUB 68006530GOSUB 69306540 lc=1:GOSUB 50010:IF w$="Y" THEN  d=1:GOTO 65606550 d=06560GOSUB 67007450 j=a(b)-LEN(x$)7500NEXT j:NEXT i7510GOSUB 59990:GOSUB 59990:? CHR$(13)+CHR$(4)+"PR#0":GOTO 410007900 b=-1:FOR k=0 TO a(80)-1:IF w$=a$(k) THEN  b=k: k=a(80)7910NEXT k7920IF b>=0 THEN RETURN7930GOSUB 59980:? "NO FIELD NAMED: "; w$: i=500:GOSUB 59970:GOSUB 599907940? "VALID FIELD NAMES ARE:":?7950FOR k=0 TO a(80)-1:? a$(k): i=500:GOSUB 59970:NEXT k7960 g=1:RETURN8000GOSUB 5800:IF g=1 THEN  g=0:GOTO 410008100GOSUB 59980:? TAB(3); "--- SORT RECORD(S) ---":GOSUB 59008110GOSUB 5700:IF g=1 THENID$(b$(i), e, a(k))6740 e=e+a(k):NEXT k:?6750IF c<>0 THEN RETURN6760GOSUB 59990:? "PRESS 'RETURN' TO TERMINATE":? "OR":? "PRESS ANY OTHER KEY TO CONTINUE"6770GET w$:IF w$=CHR$(13) THEN  i=z-1:RETURN6780GOSUB 59980:RETURN6800? "USE FIELD NUMBERS (NOT NAMES)."6810? "END YOUR LIST BY INPUTTING THE # 0.":?:?6820 lc=2: ld=1:GOSUB 51010:IF w<0 OR w>a(80) THEN GOSUB 59560:GOSUB 59800:GOSUB 59850:GOTO 68206830IF w=0 THEN RETURN6840 b(w-1)=1:HTAB (1):GOSUB 51010:GOTO 68206900FOR i=0 TO 39: b(i)=0:NEXT i:R THEN  g=1:RETURN5720IF w>=1 AND w<=a(81) THEN 57405730GOSUB 59560:GOSUB 59800:GOSUB 59850:GOTO 57105740 y=w:GOSUB 59990:? "LAST RECORD TO PROCESS?":?5750GOSUB 5790:IF w=0 THEN  g=1:RETURN5760IF w<y OR w>a(81) THEN GOSUB 59560:GOSUB 59800:GOSUB 59850:GOTO 57505770 z=w:RETURN5790 lc=3: ld=1:GOSUB 51010:RETURN5800 g=0:IF a(81)=0 THEN  g=1:GOSUB 59980:? "FILE IS EMPTY!!": i=500:GOSUB 599705810RETURN5900GOSUB 59990:? "LAST RECORD IN FILE IS: "; a(81): i=500:GOSUB 59970:RETURN6000GOSUB 5800:IF g=1 THE0GOSUB 7900:IF g=1 THEN  g=0:GOTO 72107300GOSUB 59990:? "LOOK FOR A MATCH WITH?":?7310 lc=a(b):GOSUB 50010:GOSUB 599907320 f=1:IF b>0 THEN FOR i=0 TO b-1: f=f+a(i):NEXT i7330GOSUB 59980:IF c=1 THEN ? CHR$(13)+CHR$(4)+"PR#1":GOSUB 599907340? "SEARCH OF FIELD NAMED: "; a$(b):? "IN        RECORDS "; y; " THROUGH "; z7350? "FOR THE STRING: "; w$:GOSUB 59990: x$=w$:GOSUB 66007400FOR i=y-1 TO z-17410 t$=MID$(b$(i), f, a(b))7420FOR j=0 TO a(b)-LEN(x$)7430IF x$<>MID$(t$, j+1, LEN(x$)) THEN 75007440GOSUB 69406570 lc=1:GOSUB 50010:IF w$="P" THEN  c=1:RETURN6580IF w$<>"S" THEN GOSUB 59550:GOSUB 59800:GOSUB 59850:GOTO 65706590 c=0:RETURN6600? "FORMAT BY FIELD #, NAME, SIZE, TYPE:":?6610FOR l=1 TO a(80):IF b(l-1)<>0 THEN 66606620IF l<10 THEN ? " "; 6630? l; ":   "; a$(l-1); SPC(30-LEN(a$(l-1))); :IF a(l-1)<10 THEN ? " "; 6640? a(l-1); " "; :IF a(39+l)=1 THEN ? "N":GOTO 66606650? "A"6660NEXT l:?:?:RETURN6700IF d=1 THEN 67206710? "( "; i+1; " )"6720 e=1:FOR k=0 TO a(80)-1:IF b(k)<>0 THEN 67406730? M  g=0:GOTO 41008120IF z-y<1 THEN  e$="YOU MUST PROVIDE A RANGE > 1 TO SORT.":GOSUB 59800:GOTO 410008200GOSUB 59980:? "SORT ON FIELD NAMED?":?8210 lc=10:GOSUB 500108220GOSUB 7900:IF g=1 THEN  g=0:GOTO 82008300GOSUB 59980:? "SORTING RECORD NUMBERS "; y; " THROUGH "; z; 8400 y=y-1: z=z-1: f=1:IF b>0 THEN FOR i=0 TO b-1: f=f+a(i):NEXT i8410 j=z-y+18420 j=INT(j/2)8430 k=z-j8440 d=08450FOR i=y TO k8460 l=i+j8470IF a(40+b)=1 THEN 85008480IF MID$(b$(i), f, a(b))<=MID$(b$(l), f, a(b)) THEN 85508490GOT0GOSUB 41900:IF g=1 THEN  g=0:GOTO 4000030010GOSUB 5800:IF g=1 THEN  g=0:GOTO 4000030100GOSUB 59980:? TAB(3); "--- SAVE FILE TO TAPE ---":GOSUB 5999030110GOSUB 20900:ONERR  GOTO 3090030200? x$; "OPEN "; w$30205? x$; "CLOSE "; w$30210? x$; "DELETE "; w$30220? x$; "OPEN "; w$30230? x$; "WRITE "; w$30300FOR i=0 TO 83:? a(i):NEXT i30310FOR i=0 TO 39:? a$(i):NEXT i30320FOR i=0 TO a(81):? b$(i):NEXT i30400 t$="CLOSE "+w$:? x$; t$30410CLRERR:GOTO 4000030900GOSUB 59980:? "I/O ERROR. RECOMMEND CHECKINGERIC.":GOSUB 59800:GOTO 410009300 d=0: f=1:IF b>0 THEN FOR i=0 TO b-1: f=f+a(i):NEXT i9310FOR i=y-1 TO z-19320 d=d+VAL(MID$(b$(i), f, a(b)))9330NEXT i9400GOSUB 59980:? "TALLY FOR FIELD NAMED "; a$(b)9410? "IN RECORD(S) "; y; " THROUGH "; z; " IS:":GOSUB 599909420? d9430GOSUB 59990:? "PRESS ANY KEY TO CONTINUE..."9440GET w$:GOTO 4100010000GOSUB 5998010010? "DO YOU WISH TO ERASE THIS FILE (Y/N)?":?10020 lc=1:GOSUB 5001010030IF w$<>"Y" THEN 4000010040CLEAR:GOSUB 59980:? "FILE HAS BEEN ERASED...": 40500, 41000, 1000, 20000, 30000, 11000, 12000, 40500, 40500, 1000041000GOSUB 41900:IF g=1 THEN  g=0:GOTO 4000041010POKE 17115, 16:POKE 17059, 7:GOSUB 59980:GOSUB 59990:GOSUB 5999041020? TAB(7); "1. APPEND RECORD(S)"41030? TAB(7); "2. INSERT RECORD(S)"41040? TAB(7); "3. CHANGE RECORD(S)"41050? TAB(7); "4. DELETE RECORD(S)"41060? TAB(7); "5. LIST RECORD(S)"41070? TAB(7); "6. FIND RECORD(S)"41080? TAB(7); "7. SORT RECORD(S)"41090? TAB(7); "8. TALLY RECORD(S)"41100? TAB(7); "9. ** NEXT MENU **"415GOSUB 59980:END20000IF aa$="D" THEN 1000020100GOSUB 59980:? TAB(2); "--- READ FILE FROM TAPE ---":GOSUB 5999020110CLEAR:GOSUB 1900:GOSUB 20900:ONERR  GOTO 3090020200? x$; "OPEN "; w$20210? x$; "READ "; w$20300FOR i=0 TO 83:INPUT a(i):NEXT i20310FOR i=0 TO 39:INPUT a$(i):NEXT i20320FOR i=0 TO a(81):INPUT b$(i):NEXT i20400? x$; "CLOSE "; w$20410 aa$="D":CLRERR:GOTO 4000020900? TAB(8); "SPECIFY FILE NAME":? TAB(7); "(MAX 30 CHARACTERS)":?20910 lc=30:GOSUB 5001020920 x$=CHR$(13)+CHR$(4):RETURN3000O 85108500IF VAL(MID$(b$(i), f, a(b)))<=VAL(MID$(b$(l), f, a(b))) THEN 85508510 t$=b$(i)8520 b$(i)=b$(l)8530 b$(l)=t$8540 d=18550NEXT i8560IF d>0 THEN 84408570IF j>1 THEN 84208580GOTO 410009000GOSUB 5800:IF g=1 THEN  g=0:GOTO 410009100GOSUB 59980:? TAB(3); "--- TALLY RECORD(S) ---":GOSUB 59009110GOSUB 5700:IF g=1 THEN  g=0:GOTO 410009200GOSUB 59980:? "TALLY ON FIELD NAMED?":?9210 lc=10:GOSUB 500109220GOSUB 7900:IF g=1 THEN  g=0:GOTO 92009230IF a(40+b)<>1 THEN  e$="FIELD SPECIFIED IS NOT NUMB  TAPE.":GOSUB 59990:? "PRESS ANY KEY TO RETURN TO MENU"30910GET w$:CLRERR:GOTO 4000040000POKE 17115, 240:POKE 17059, 4:GOSUB 59980:GOSUB 59990:GOSUB 5999040010? TAB(7); "1. USE ADAMBASE"40020? TAB(7); "2. DEFINE RECORD FORMAT"40030? TAB(7); "3. READ FILE FROM TAPE"40040? TAB(7); "4. WRITE FILE TO TAPE"40050? TAB(7); "5. READ TAPE CATALOG"40060? TAB(7); "6. EXIT TO BASIC"40080?:?40090? TAB(7); "9. ERASE FILE FROM MEMORY"40500VTAB (23):GET i$: i=ASC(i$)-48:IF i<0 OR i>9 THEN 4050040510ON i+1 GOTO i=1000:GOSUB 59970:GOTO 4000011000GOSUB 59980:POKE 17059, 10:TEXT:ONERR  GOTO 3090011010? CHR$(13)+CHR$(4)+"CATALOG"11020GOSUB 59990:? "PRESS ANY KEY TO RETURN TO MENU...":?11030GET w$:CLRERR:GOTO 4000012000POKE 17059, 6:GOSUB 59980:? "   "; :FLASH:? "RETURNING TO"; :NORMAL:? " BASIC "; :FLASH:? "DESTROYS"12001NORMAL:? "   "; :FLASH:? "ANY DATA CURENTLY IN MEMORY":NORMAL:GOSUB 59990:? "    IS THAT OK (Y/N)?":?12010 lc=1:GOSUB 50010:IF w$<>"Y" AND w$<>"y" THEN 4000012020POKE 17059, 5:POKE 17115, 16:00VTAB (23):GET i$: i=ASC(i$)-48:IF i<0 OR i>9 THEN 4150041510ON i+1 GOTO 41500, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 4000041900IF aa$<>"D" THEN POKE 17059, 3:GOSUB 59980:GOSUB 59990:? "   NO FILE IN MEMORY.....": i=500:GOSUB 59970: g=141910RETURN50000 lc=4050010 w$=""50020GET i$:IF ASC(i$)<>8 THEN 5006050030IF LEN(w$)>1 THEN  w$=LEFT$(w$, LEN(w$)-1):? i$:GOTO 5001050040IF LEN(w$)=1 THEN  w$="":? i$; 50050GOTO 5002050060IF ASC(i$)=44 THEN GOSUB 59500:GOSUB 59800:GOTO 5002050070IF ASC(iord.When you use the backspace key, the cursor will move down aline, do not retype the whole field, just your correction.     This program was designed to be customized easily, add to, delete from, "anything you'd like".A few words on the exiting progam:RECORD FORMATTINGEach record is restricted to a TOTAL of 236 characters, toallow for "CHANGE" of a record.  The program will calculatethe tatal possible records, based on available memory/lengthof each record + some room for "work space".The num6051080IF ld=0 THEN RETURN51090IF (w-INT(w))<>0 THEN GOSUB 59540:GOSUB 59800:GOSUB 59850:GOTO 5101051100 ld=0:RETURN59500 e$="SORRY, COMMAS NOT PERMITTED!":RETURN59510 e$="MAX FIELD LENGTH HAS BEEN REACHED":RETURN59520 e$="PLEASE! YOU MUST INPUT SOMETHING!":RETURN59530 e$="INVALID NUMERICAL FORM> RE-ENTER DATA.":RETURN59540 e$="AN INTEGER VALUE IS REQUESTED, PLEASE.":RETURN59550 e$="PLEASE RESPOND IN THE FORMAT REQUESTED.":RETURN59560 e$="NUMBER OUTSIDE VALID RANGE. RE-ENTER.":RETURN59800 ch=PEEKIND ROUTINEWill FIND a match for a given string, and output the matchedrecord to Screen or Printer.SORT ROUTINEThis routine utilizes the "shell sort" method to sort the records. Large files may take awhile,  Be patient.TALLYSums named NUMERIC field, and displays the result.SAVE/READ FILESTHIS ROUTINE HAS ON OCCASION HAS CAUSED A CRASH !!I would suggest getting a catalog before READing a file, TYPE THE NAME CAREFULLY !! (remember that word ?) I don't know exactly what caused the crashes.  I have                       *** ADAMBASE DOCUMENTATION ***     This program was originally written for the Apple  and was dependent an several ML routines in the Apple that didn't work very well on ADAM. Some translations were simpleSome not. Some work, but not quite the neatest possible.. I will attempt to point out some pitfalls, mainly in the inputting of data. ONE word is "CAREFULLY", USE the   backspace key to go back and correct.  Using the "ARROW"key will not work, it ADDS a character to the rec$)<>13 THEN 5010050080IF LEN(w$)>0 THEN RETURN50090GOSUB 59520:GOSUB 59800:GOTO 5002050100IF LEN(w$)>=lc THEN GOSUB 59510:GOSUB 59800:GOTO 5002050110 w$=w$+i$:? i$; :GOTO 5002051000 lc=40: ld=051010 w=051020GOSUB 5001051030IF LEFT$(w$, 1)=CHR$(0) THEN 5106051040IF (LEFT$(w$, 1)="." OR LEFT$(w$, 1)="-") AND (LEN(w$)>1) THEN 5107051050IF LEFT$(w$, 1)>"/" AND LEFT$(w$, 1)<":" THEN 5107051060GOSUB 59530:GOSUB 59800:GOSUB 59850:GOTO 5101051070 li=LEN(w$): w=VAL(w$): w$=STR$(w):IF li<>LEN(w$) THEN 510ber of fields il limited to 40.  This is just to keepthings managable, this to could be changed, for special applications if desired.  APPEND RECORDSThis routine adds records to the END of the existing file(or newly formatted file).INSERT ROUTINE  does same as APPEND, but INSERTS between existing records.CHANGE ROUTINEChanges specified fields contents in specified records.DELETE ROUTINEDeletes Records in range provided by userLIST RECORDSOutputs records specified by user, to Screen or PrinterF(36): cv=PEEK(37):VTAB (22):HTAB (1)59810GOSUB 5995059820? e$; 59830 i=500:GOSUB 5997059850HTAB (1):? CHR$(7):RETURN59950? CHR$(7):FOR i=1 TO 30: i=i:NEXT i:? CHR$(7):RETURN59970FOR i=i TO 0 STEP -1: i=i:NEXT i:RETURN59980TEXT59990?:?:?:RETURN0) THEN 5106051040IF (LEFT$(w$, 1)="." OR LEFT$(w$, 1)="-") AND (LEN(w$)>1) THEN 5107051050IF LEFT$(w$, 1)>"/" AND LEFT$(w$, 1)<":" THEN 5107051060GOSUB 59530:GOSUB 59800:GOSUB 59850:GOTO 5101051070 li=LEN(w$): w=VAL(w$): w$=STR$(w):IF li<>LEN(w$) THEN 510found that the only times I had problems it was when I misspelled file-names, so a word to the wise......     This works fine on my Adam, but I understand that notall ADAMS were created equal, so if anyone has any problems let me know.  For those of you that like to tinker, the following is a listing of all of the variables, their usage, and a list of the major subroutines.A$        Temporary working buffer.A$(*)     Field names.A(*)      Field and file control array. A(0)-A(39)= # of         0000     PRIMARY MENU ROUTINE41000     SECONDARY MENU ROUTINE50000     ALPHA-NUMERIC INPUT ROUTINE51000     NUMERIC INPUT ROUTINE59500     ERROR MESSAGES59800     MISCELLANEOUS UTILITY SUBROUTINESThere `tis, DbaseIII (tm) it's not  but whatta ya wany fo nutin ? .......Any comments,ideas,  problems, the number is 72257,2007./z                                                           Press <CR> to continue: ; alternate input registerX$        Temporary string register; alternate string input   fields(suppress output,inhibit           selection during CHANGE operations.C         Temporary counter; Printer-selected flag.CH        Horizontal cursor position register.CV        Vertical cursor position register.D         Flag(suppress display of record #) and temporary          register.E         Character position counter.G         Error-condition flag. Used to notify calling           routine if subroutine aborted.I         Temporary loop counter.I$        Input character buffer.J      ,220,19,203,122210DATA     40,17,122,230,127,87220DATA    62,255,50,136,220,62,127230DATA    50,137,220,19,24,8,62,0240DATA    50,136,220,50,137,220250DATA    0,237,83,140,220,217260DATA    14,38,217,17,112,220270DATA    205,174,30,241,209,225,193,201,0,0,0,0,0,0280DATA    39,7,145,19,93,98,115,97,118,101,32,80,82,79,71290DATA    82,65,77,46,77,65,44,97,186,139,0,0,160,139,0300DATA    0,186,145,2,44,108,186,139,0,0,0310DATA    197,229,213,205,133,251320DATA    59,59,225,17,18,0,25,17,0,220330DA        register.Y         Temporary registerZ         Temporary register                         MAJOR SUBROUTINES1000      RECORD FORMATTING ROUTINE2000      APPEND ROUTINE3000      INSERT ROUTINE4000      CHANGE ROUTINE5000      DELETE ROUTINE6000      LIST ROUTINE7000      FIND ROUTINE8000      SORT ROUTINE9000      TALLY ROUTINE10000     ERASE FILE ROUTINE11000     CATALOG ROUTINE12000     PROGRAM EXIT ROUTINE20000     READ FILE FROM TAPE ROUTINE30000     SAVE FILE TO TAPE ROUTINE4  characters to each field, A(40)-A(79) indicate          Alpha (= 0), or NUMERIC (= 1), A(80)= TOTAL # OF          FIELDS, A(81)= CURRENT FILE RECORD COUNT or EOF          MARKER, A(82)= MAX # of RECORDS PERMITTED IN FILE          A(83)= MAX # of CHARACTERS IN A RECORD.AA$       Used as a flag to indicate if a file has been           defined.B         Temporary working register (# of characters           allowed in a field,starting position of a field.B$(*)     Records arrayB(*)      Used to flag10POKE 17115, 23:POKE 17059, 7:POKE 17126, 244:TEXT13GOSUB 200015VTAB 10:HTAB 8:? "WORKING"20POKE 16149, 255:POKE 16150, 25530 a=56320: b=040READ z:IF z=999 THEN 99050POKE a+b, z60 b=b+1:GOTO 40100DATA    205,205,31110DATA    197,229,213120DATA    245,237,91,223,62130DATA    237,107,239,62140DATA    229,167,237,82150DATA    229,193,3,237,91,237,62160DATA    27,225,237,184,1,30,0170DATA    33,246,62,237,184180DATA    1,55,0,33,206,220,237,184190DATA    33,128,209,167,237,82200DATA    34,149   Temporary loop counter.K         Temporary loop counter.L         Temporary loop counter.LC        Maximum characacters to be allowed during input.LD        If non-zero, only interger values will be accepted          as valid during numeric input.LI        Temporary registerT$        Temporary record working buffer.W         Numeric input register.W$        String input register.X         Temporary register; alternate input registerX$        Temporary string register; alternate string input  TA    1,31,0,237,176,195,0,220340DATA    1,30,0,17,217,62,237,176350DATA    229,237,91,223,62360DATA    237,107,239,62,167370DATA    237,82,229,193,3,3,225380DATA    237,176,209,225,193,201,999990TEXT1000? "Run the cursor over the        following line to save Cruncher"; :?1010?1020? "  BSAVE CRUNCHER,A56320,L207"1030VTAB 3:HTAB 1:END2000VTAB 3: t$="   PROGRAM CRUNCHER UTILITY   ":GOSUB 5000:?:?2010? "   This program will enable ":? " you to convert any program":? " written in Basic so that"202Milwaukee, WI 53207"2240VTAB 23:HTAB 1:GOSUB 6000:GET m$:TEXT2250VTAB 3:HTAB 1:GOSUB 5000:?:?2260? "   You will be prompted to":? " BSAVE a portion of memory":? " created by this program."2270?:? "   You will see the message:":?:? " BSAVE CRUNCHER,A56320,L20  7":?2280? "   Run your cursor under":? " BSAVE CRUNCHER,A56320,L207 and"; 2290? " continue to run the cursor":? " to the end of the line.":? " Then hit <return> and your"2300? " CRUNCHER program will be":? " done!"2310VTAB 23:HTAB 1:GOSUB 6000:2100IF VAL(m$)=1 THEN TEXT:END2110IF VAL(m$)=2 THEN TEXT:GOTO 22002120IF VAL(m$)=3 THEN TEXT:HTAB 1:? CHR$(4); "catalog":VTAB 23:HTAB 12130GOSUB 6000:GET m$:TEXT:GOTO 20602200TEXT:VTAB 3:HTAB 1:GOSUB 5000:?:?2210? "   This program originally":? " appeared in 'THE ADAM ":? " TECHNICAL JOURNAL', vol. 1,"2220? " no. 3.  You are encouraged":? " to subscribe to benefit from":? " a rich source of ADAM"2230? " technical data.  The address":? " is:":?:? " Serendipity Productions":? " P.O. Box 07592"2235? " Milwaukee, WI 53207"2240VTAB 23:HTAB 1:GOSUB 6000:GET m$:TEXT2250VTAB 3:HTAB 1:GOSUB 5000:?:?2260? "   You will be prompted to":? " BSAVE a portion of memory":? " created by this program."2270?:? "   You will see the message:":?:? " BSAVE CRUNCHER,A56320,L20  7":?2280? "   Run your cursor under":? " BSAVE CRUNCHER,A56320,L207 and"; 2290? " continue to run the cursor":? " to the end of the line.":? " Then hit <return> and your"2300? " CRUNCHER program will be":? " done!"2310VTAB 23:HTAB 1:GOSUB 6000:GET m$2320TEXT:VTAB 3:HTAB 1:GOSUB 5000:?:?2330? "   For more detailed":? " information, see the":? " documentation file for the"2340? " CRUNCHER program.":VTAB 23:HTAB 1:GOSUB 6000:GET m$:TEXT:RETURN5000INVERSE:? t$:NORMAL:RETURN6000INVERSE:? "  Press Any Key To Continue   ":NORMAL:RETURNL', vol. 1,"2220? " no. 3.  You are encouraged":? " to subscribe to benefit from":? " a rich source of ADAM"2230? " technical data.  The address":? " is:":?:? " Serendipity Productions":? " P.O. Box 07592"2235? " 0? " ADAM will be able to load it":? " about 7 times faster than":? " normal!":?2030? " If you already have a file":? " entitled 'CRUNCHER' then":? " exit this program when"2040? " prompted on the next screen":?2050VTAB 23:HTAB 1:GOSUB 6000:GET m$:TEXT2060VTAB 3:GOSUB 5000:?:?2070VTAB 8:HTAB 1:? " DO YOU HAVE A CRUNCHER FILE?":?:?2080? "   1. Yes - Exit Program":? "   2. No  - Continue Program":? "   3. Don't Know!":?2090VTAB 18:HTAB 1:? " PLEASE SELECT:"; :GET m$:IF VAL(m$)<1 OR VAL(m$)>3 THEN 2090ÜÍÍÅåÕõí[ß>íkï>å§íRåÁí[í>áí¸!ö>í¸7!ÎÜí¸!€Ñ§íR"•ÜËz(zæW>ÿ2ˆÜ>2‰Ü>2ˆÜ2‰ÜíSŒÜÙ&ÙpÜÍ®ñÑáÁÉ'‘]bsave PROGRAM.MA,aº‹ ‹º‘,lº‹ÅåÕÍ…û;;áÜí°ÃÜÙ>í°åí[ß>íkï>§íRåÁáí°ÑáÁÉRSE:? t$:NORMAL:RETURN6000INVERSE:? "  Press Any Key To Continue   ":NORMAL:RETURNL', vol. 1,"2220? " no. 3.  You are encouraged":? " to subscribe to benefit from":? " a rich source of ADAM"2230? " technical data.  The address":? " is:":?:? " Serendipity Productions":? " P.O. Box 07592"2235? " Milwaukee, WI 53207"2240VTAB 23:HTAB 1:GOSUB 6000:GET m$:TEXT2250VTAB 3:HTAB 1:GOSUB 5000:?:?2260? "   You will be prompted to":? " BSAVE a portion of memory":? " created by this program."2270?:? "   You will see the message:":?:? " BSAVE CRUNCHER,A56320,L20  7":?2280? "   Run your cursor under":? " BSAVE CRUNCHER,A56320,L207 and"; 2290? " continue to run the cursor":? " to the end of the line.":? " Then hit <return> and your"2300? " CRUNCHER program will be":? " done!"2310VTAB 23:HTAB 1:GOSUB 6000:x	E     The Crunch Program, created by the CrnchMAKE programoriginally appeared in "The Adam Technical Journal", Volume  1, Number 3, Copyright 1985.  The CrnchMAKE progra                FAST LOADING CRUNCHER PROGRAM                     documentation file     The Crunch Program, created by the CrnchMAKE programoriginally appeared in "The Adam Technical Journal", Volume  1, Number 3, Copyright 1985.  The CrnchMAKE proget the message,      'File Not Found'.     If your tape or disk does not have a copy of CRUNCHER,  then first run CrnchMAKE to make a CRUNCHER program.  4. You will see the message, BSAVE PROGRAM.MA,a#####,l###  5. Run your cursor under BSAVE and change the word         PROGRAM.MA to the title of your program and continue to run  the cursor to the end of the number after the lower-case L     For example, if you saw the message:  BSAVE PROGRAM.MA,a43293,l1098                                ^          Milwaukee, WI  53207          Published bi-monthly     Here's the information you need to use the CRUNCHER     program:     When you load a SmartBasic program, the interpreter     must convert the text into tokenized code, just as if you    were typing it all in from the keyboard.  That can take a    lot of time, as you must know if you've ever loaded a 24 K   program from tape!     The beauty of the CRUNCHER program is that it saves     your Basic program on your tape or disk just as it is afut the name of the program you have just saved.  For example, if    you BSAVED your program as FASTDEMO, then you would type:BRUN FASTDEMO and hit <return>.  8. You will get the message: Illegal Form of OS Command.   Just ignore this, because it's a bug in basic.  9. Type: RUN     Your program will run just like it used to!     For further information, we suggest that you send for a copy of the ADAM TECHNICAL JOURNAL, volume 1, number 3.  The cost is $5.l1098                                ^     f information separate from the code.  So what the CRUNCHER program does is to save all of this critical information     along with your BASIC program and then re-distribute this    information upon loading.     To crunch a program, do the following:  1. Load Basic  2. Load your Basic program that you want CRUNCH-ed  3. Type:  BRUN CRUNCHER     Note: it should be obvious, but when you type BRUN      CRUNCHER, the CRUNCHER program must be on the tape or disk   in your drive!  Otherwise, you'll just gram is an original program for the Puget Sound Adam Network by Bob     Zimmerman.     We highly recommend that you subscribe to the Adam      Technical Journal to be able to receive all of the           information and data necessary to make your ADAM a more      powerful tool.     You may subscribe as follows:          Send $18 per year US & Canada          or $23 per year any other country          payable by check or money order to          SERENDIPITY PRODUCTIONS          PO Box 07592                               |          Run cursor to here   |          and hit <return>      Your program name cannot be longer than 10 characters.     If it is less than 10, put spaces to fill between the     end of your program name and the comma.     Do not change any of the numbers after the 'a' or the     lower-case 'L'.  6. Your drive should whirl and save a binary file (file    type H) with the name that you put in place of PROGRAM.MA.  7. TYPE: BRUN My-program-name, where obviously you pter  it has been interpreted.  So, when you load it, it doesn't   have to be interpreted-- and that saves a lot of time.     For example, a program 24 K long would take about 4     minutes and 26 seconds to load from tape EXCLUDING the time  that it takes to locate it on tape.  After this same program has been CRUNCH-ed, it will load in about 36 seconds, or     about 7 times faster.     Now, you can't just BSAVE a tokenized BASIC program     because ADAM stores the variables and other critical pieces  o`m?€†Ž¬¹ÈÎÖÞìõùÿ	 ,8CO]ft…‹”œ¥¯¾ÊØäðþ(0=FR^jt‚›£®¹ÆÒÛçõý	I $$	@ l6	$g< ö--&(57%%I)<ßø#7I	d¾®eI@ $I$I$I$$$–bI <o) 	$@)-%I`	-$$?66	-$$¼I	??deä?-äg ??I!,?d6&-$?',-%	-ä?7&@-	$<?'	-ä?&@d-&)e$ä?®-I@ 	  Iá@--8?'	I ?	-%@$?66Lå$!$d6?o&!$$,-¾m2?I	¸?$$-!$$,-66?)-%À?7&@$- off too much.           Jay Forman of MW RUTH says that their firm is pulling out of the AMIGA and Atari markets, but is determined to stick with ADAM.   Terry Fowler of ADAM's HOUSE seems to be doing a     booming business, and is likely to contiue with ADAM for the forseeable future.  Steve Majors of the ADAM Connection      recently announced plans to start a new newsletter.  Quite a few smaller, part-time software developers continue to turn  out an occasional software package.  The overall quality ox	Ey try not to use unconfirmed rumors, but sometimes it's hard!) and part editorial.  It originally appeared in the July, 1990 MOAUG newsletter and was written  by P. HerrinThe following article is part vendor information, part       gossip (sorry... I really try not to use unconfirmed rumors, but sometimes it's hard!) and part editorial.  It originally appeared in the July, 1990 MOAUG newsletter and was written  by P. Her I have never     received confirmation from them.  Ron Collins and others     have recently reported that Big John Lingrel is once again   performing some hardware repair.           Syd Carter is still active in the field of hardware          development, and has produced several new products within    the past year, including "extended play" datapacks, clock    card, and sound digitizer.  Other developers have produced   new products, too, most notably Chris Braymen with his MIDI  interface and Micro Inendors are considering the possibility of scaling  down their operations.  E&T Software, MW Ruth, and even NIAD have been subject to such speculation.  The fact is that all these vendors have excellent reputations, and have always    been reliable.  As of now, all continue to ship orders;      there is little likelihood that any of them will drop ADAM   completely.  But it would not be too surprising if they      decided to advertise less and branch out into other          endeavors, if ADAM business slacks-!$$,-µ?	-%<ß"$d-%!$$´
-%$–2&	-$$<¨-$$$!$$l	I	??$$$!$$¬f`666!$$¬ª•$$$	-$$?66!$$,-¾?	%¨ $?66!$$,-¾?-<8çd-I$$$?M%	-$$ü66&I$$ß36®!$$l	666´#!l	¾&I$äl	öI	??d<?'I	??,<,<,--HI)-%'%'%'ý?@a)-%ÿÿÿÿÿ 130155HGR:HCOLOR =4158 ht=2:REM   horizontal tab 159 vt=5:REM  vertical tab160GOSUB 180170ROT =16: ht=2: vt=8:GOSUB 180:ROT =32: ht=3: vt=13:GOSUB 180179END180 ht=7*(ht-1): vt=8*vt-1190FOR i=1 TO LEN(st$)200 cf  such software improves consistently. As to hardware repair, Phil Kosowsky is still doing general  repairs on computer  components, and he offers a $10         discount to members of ANY user group.  I believe that Ed    Jenkins of E&T is still doing disk drive repairs and         conversions, and building larger memory expanders.  Howard   Pines of the Emerald Coast AUG does general repairs and      double-sided disk drive conversions. There are several       others whose names crop up in meetings, butrington.  Original title was "TENNIS, ANYONE?"      Please, read Note To Editors at the end of this file before  printing.  Thank you. ...PJH ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                             Sometimes, trying to keep up with ADAM developers is a lot   like sitting on the center line at a tennis match. ALPHA-1, a longtime ADAM vendor, has been out of business    for some time now.  There is talk that several of our most   faithful vnovations  with the PowerMate hard     drive and a new multiple interface board.  Thomas            Electronics has released a mouse.  All these are products    that were never expected to be available for the ADAM.       Reports indicate that the new video module from OAS of       Canada  might be ready by ADAMCON 02 (?) All the new products, and many others, are sold by ADAM'S    HOUSE, NIAD, and MW Ruth, which makes it difficult to        believe that any of these companies is likely to stop        supeanwhile, the best way to see new products is to support    the vendors who are supporting ADAM.  Our twin enemies are   piracy and lack of enthusiasm.  ADAM owners are directly     responsible for the future of ADAM.  One of the best things  we can possibly do is to write directly to the vendors and   tell them what YOU want to see in the future. One of the WORST things we can do is to develop a fatalistic attitude.  I can't tell you how many times I've heard "The   ADAM is dead", but I can tell you thatcommunity    will determine which projects actually get off the drawing   board.  In the absence of a scanner for ADAM, Jim Walters    offers a digitizing service for those who need something     scanned.  He can, for example, turn your hand-drawn          illustrations into RLE files accessible by ADAM.  They will  work with any number of graphics print programs. There is both good news and bad news in the case of Solomon  Swift.  The bad news is that the ACT newsletter has still    not been mailed, excee's ready for them. The other worst thing we can do is to allow piracy to make   further inroads in the community, thereby driving our        software producers out of business.  The programmer who      works on a shoestring in his spare time just because he      loves ADAM (and the wonderful people who make up the ADAM    community) cannot continue to produce the products we want   if he is going to sell only six copies of his program. There are few enough of us that each of us can make a real         dial.  IF YOU     HAVEN'T RECEIVED YOUR COPY, please contact Sol directly at   the Phoenix 2000 address. TELEGAMES USA continues to sell hard-to-find Coleco          cartridges (ad elsewhere in this issue) and accepts phone    orders with a major credit card, or check or money order by  mail.  This is NOT an ADAM-only firm. It's a tennis match, all right.  The overall picture appears different from week to week... sometimes from day to day! It will be interesting to see what is unveiled at ADAMCON 02.   Mporting the ADAM community any time soon. Nevertheless, other projects have been shelved due to lack   of support, among them an image scanner.  The people who are capable of building such items just can't  take the risk of  investing the time and money required for initial            development unless they can be assured of a market. Walters Software continues to produce new utility cartridges (see article in this issue) and has a number of other        projects in mind.  Again, the enthusiasm of the  I've been hearing it  ever since I first bought my computer in 1985.  The person   speaking invariably ends up selling his ADAM and then        regretting it.  And who did he sell it to?  A NEW ADAM       OWNER, that's who.  Somebody who is in urgent need of        information, and who needs to join at LEAST one users' group (preferably several.)  A person who got a bargain on the     computer and can therefore justify buying additional         products, provided we have managed to keep 'em coming until  hpt for a few advance copies.  The       mailing cannot be done until Sol's new company makes some    sort of financial breakthrough, and it's a slower process    than expected.  The good news is that Sol's new Phoenix 2000 products are very good, indeed, and have been appearing in   rapid succession.  Sol has made some new contributions to    the public domain, too, and he reports that he has managed   to get a lot of work done on the newer version of GODOS.  By now, everyone should have received the originfference in the fate of the community. As all long-time ADAM owners know, this is a great little    computer which has been VASTLY underrated.  It can and will  do just about anything we want it to do, provided we want it badly enough and keep our hardware and software developers   interested.  We MUST support the folks who are supporting    ADAM in order to keep things interesting.    Fortunately,    they WANT to continue with us, so we have the necessary      measure of control.  All we have to do is sp~~~~~~~~~~~~~~~~~~~It's JULY already?  I was just glancing through some past newsletters and      realized that I've been jabbering on about the STARTER PAK II for an awful     long time, and that the world in general is probably waiting on the edge of    their respective seats!!!  OK, so maybe not EVERYBODY is panting as hard as I  am, but it's gotta be awful close... Well, unfortunately, you're going to have to wait another month.  It's not     that I haven't finished the PAK.  It's been done for a feUTH item   in AIM, and it looked as though I was saying that RUTH was   thinking about dropping ADAM.  THIS IS NOT TRUE AND IT IS    NOT WHAT I SAID.  Thank you....  PJH                     t it to do, provided we want it badly enough and keep our hardware and software developers   interested.  We MUST support the folks who are supporting    ADAM in order to keep things interesting.    Fortunately,    they WANT to continue with us, so we have the necessary      measure of control.  All we have to do is sppostion that almost everyone who had a copy of CP/M had used   it some, or at least read the manual before attempting the procedures outlined in my column. This revelation was reinforced the day that MOAUG member Ed Cavanaugh came     over and we were talking about CP/M.  I made the offehanded (but quite true)   statement that the ADAM CP/M manual, like most other CP/M books, STINKS!  I've been putting along under CP/M for so long that I had forgotten how bewildering it can be to the newcomer.  So in  wrixO a file.  (In SmartBASIC, if you want to read a doc file, you have to exit BASIC and get it from the word processor!  Not so with CP/M.)  To see the      contents of a filThe following is the July, 1990 column by MOAUG CP/M librarian Jerome Hess.    (column is printed under the title BIOS CALL.)  It may be edited to remove     date references if deemed necessary.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~eak up. The ball is in OUR court.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~NOTE TO EDITORS: This is the end of the original article,    but I later realized I left Alan Neeley out of the article   entirely and would appreciate your adding his name somehow.  I also neglected to mention Larry Overman and the fact that  ADAM'S HOUSE does hardware repairs!!!  One more thing... if  you print this under my name, please do not take items out   of context.  I recently read only PART of the MW Rw weeks, by the time  you read this.  If I can find some blank disks, I'll even bring a few copies   to the July meeting.  But during June's meeting, I overheard something that    caught me off guard.  There I was, sitting in the back of the meeting, when    near me I overheard two members discussing CP/M and its uses<?>.  One said,    "Well, I've been trying to follow along in the newsletter, but I still can't   make heads nor tails of it."  That's when it hit me!  I started this column    under the presupeak up. The ball is in OUR court.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~NOTE TO EDITORS: This is the end of the original article,    but I later realized I left Alan Neeley out of the article   entirely and would appreciate your adding his name somehow.  I also neglected to mention Larry Overman and the fact that  ADAM'S HOUSE does hardware repairs!!!  One more thing... if  you print this under my name, please do not take items out   of context.  I recently read only PART of the MW Rting BIOS CALL, I'd forgotten to outline some of the basics!   I told the world that I'd be more than happy to send     them a STARTER PAK if they'd only send me a disk or datapack that had been     formatted and SYSGENed, but I never explained either term! So, for those of you who have been keeping up, you may find this month's       column a trifle boring.  But if you hang in there, I think it will be well     worthwhile! For those of you who have been waiting for STARTER PAK II, here's a glimpse of wc.  When your drive stops spinning, you will have labelled SmartKeys at the bottom of your screen, and you will have a      prompt that looks like this: A> That A> prompt is your key to a whole new world! Meanwhile, there are all those SmartKeys with the cryptic labels.  It could be you will never even use the keys, but you'll want to understand the commands.  Your SmartKeys are labelled as follows: I=DIR  Pressing this key and <RETURN> will give you a DIRectory of all the     files on Drive A:  Whe                          WHAT CP/M IS I NOT: J      1) CP/M is NOT a language... you can't program in CP/M.     2) As it comes from Coleco, CP/M is NOT very impressive.     3) It's NOT something "JUST FOR HAKKERZ"     4) It's NOT something you have to be a genius to use.     5) You do NOT need to be a programmer to use it.               ... and most importantly...     6) You do NOT have to sacrifice small animals to pagan gods in order to        work under CP/M.  Trust me on this.               CATALOG in Basic,  except it's a little more versatile. II=ERA   Pressing this key by itself will do little except display an error    message telling you that no filename was specified.  ERA is the CP/M command   for ERASE and works just like the SmartBASIC command DELETE.  If you enter     "ERA BOB.TXT," you will erase the file named BOB.TXT.  You can also use ERA    with the Wildcard (indicated by an asterisk.) For example, if you enter "ERA   *.TXT", you would erase ALL files with a .TXT extension no going to restructure and recatalog our entire CP/M library and make full lists          available for public consumption. So, let's backtrack, and begin at the very beginning.  That is:                                 LET'S BOOT CP/M: Take your ORIGINAL CP/M disk (or datapack) and place it in the appropriate     drive, and pull the RESET switch.  After a period of time, and opening screen  will appear that will announce "COLECO ADAM CP/M 2.2 for the ADAM ...          copyright Digital Research... " ethat's contained:  How about a utility to let you get at all those files on    the IBM bulletin board systems that have the .ZIP extension?  How about a      full- fledged, and VERY functional, text editor?  How about one of the FINEST  modem programs in the public domain that allows EXTERNAL modem users to let    ADAM communicate at speeds of 19200 BAUD!!!!  Well, it's all there, plus a lot more! But first, let's help the newer folks catch up a bit by looking at some common misconceptions about CP/M.   ther you booted from disk or datapack, A: will always    represent the drive you used to boot CP/M.  If you have more than one drive    and you'd like to know what's on the other drive (say B:) all you need to do   is press SmartKey I and the letter B with a colon (B:) and then <RETURN>. CP/M will go to that drive and take a DIRectory of what's there.  DIR can be used   by itself, or it can be used in "WILDCARD" by substituting the asterisk (*)    for any and all letters in a filename.  DIR is exactly like                   What CP/M IS:  CP/M is an operating system, just like MS/DOS for the IBMs or PRODOS for the   Apples or CDOS for the Commodores.  By itself, it won't do anything except let you make your disk drives (or datapacks) spin around and look pretty technical onscreen. CP/M is merely a platform from which you can run other programs.  IT's NOT A   PROGRAM ITSELF.  And there are literally thousands of programs in the public   domain for you to use, absolutely FREE!  If MOAUG will allow me, I am matter what their   name.  III=REN   This stands for REName.  The CP/M command REName works very much     like the RENAME command does in SmartBASIC. It simply changes the name of a    file.  The important thing to remember is that the command line is             "backwards", so you have to give a little forethought to what you're doing     before you go ahead and do it.  For example, if you want to change the name of BOB.TXT to JOE.TXT, you would enter the command like this:  REN                JOE.TXT=Bfile named DOC.TXT, you would enter TYPE DOC.TXT <RETURN>. The   contents of the file will scroll on your screen.  You can use several CONTROL  keys to help you out.  While the test is scrolling, CONTROL-S will stop the    scrolling and CONTROL-Q will start it again.  (CONTROL-S means the CONTROL key pressed at the same time as the S key, and so on.)  This is similar to the way those same keys are used to control scrolling in BASIC.  In addition, like in  SmartBASIC, CONTROL-P will send output to the printeon't want them in  the same user area.  You could put MADAM7 in USER area <A4> and VDE in USER    area <A7>.  Then to go from boot-up to MADAM7, you would enter USERA4.         Realize, though, that if you "bury" files in another user area, they will not  show up on your main directory.  (This is a good way to "hide" files in case   you are sharing your ADAM with someone else.) V=SAVE   SAVe is a very specialized command with limited uses.  Chances are    you won't be using it much for awhile. What it act screen full of gibberish. The SmartKeys are fine and dandy and will, indeed, save a few keystrokes, but  if you prefer to display 25 lines instead of 24, you can eliminate the         SmartKeys by pressing SHIFT-UNDO (that is, hold down the SHIFT key and at the  same time press UNDO.)  This will disable the SmartKeys.  They will disappear  from your screen.  From that point on, the SmartKeys do not apply.  Pressing   SmartKey I, for example, will no longer give you a directory (instead, it will give you  we'll discuss later. VI=TYPE  Unfortunately, there is no SmartBASIC command that is equivalent to   TYPE, which is too bad because TYPE does something we all REALLY need!  TYPE   will type a text file on the screen so that it can be read!  This is much      simpler than having to send the file to the printer every time you want to     read a file.  (In SmartBASIC, if you want to read a doc file, you have to exit BASIC and get it from the word processor!  Not so with CP/M.)  To see the      contents of a OB.TXT.  In other words, the NEW file name goes FIRST! IV=USER   When you boot CP/M you are in the MAIN directory. You are in the     USER area called 0 of drive A, that's the same <A> that you see at the bottom  of the screen when you boot up.  CP/M will allow you to have several USER      areas, or SUBDIRECTORIES if you're used to working off a harddrive. USER is    the command that will allow you to move between them.  Let's say that you have a terminal program and an editor on the same disk, but you dr, but in CP/M, EVERYTHING from that point on will be sent to the printer. In order to stop "dumping" to  the printer, press CONTROL-P again.  (This is the same as entering "PR#1" and  "PR#0" in SmartBASIC.)  And, as in almost every other aspect of computing,     CONTROL-C will stop the task at hand.  You must remember, though, that the     TYPE command is not too smart, and will try to TYPE any file you tell it to,   whether or not it's a text file.  Typing a .COM file or .LBR file will only    result in aually does is to save to     tape or disk all the contents of a specified memory.  For example, if you had  a program in memory and you knew that it was 16k long, you would enter "SAVE   065 FILE.EXT".  The 065 tells ADAM how much of the memory to SAve, and the     rest of the line tells ADAM to name the file FILE.EXT (or whatever name you    choose.`  This command is MOST useful for folks who do a lot of assembly       language programming!  For the most part I just ignore it, but there are some  uses thatControl-A, which doesn't mean anything.)  When you want a directory,  then, you will enter DIR instead of hitting SmartKey I.  If you change your    mind, you can get the SmartKeys back by hitting SHIFT-UNDO again. Next month, we will discuss how to format and SYSGEN a datapack! the task at hand.  You must remember, though, that the     TYPE command is not too smart, and will try to TYPE any file you tell it to,   whether or not it's a text file.  Typing a .COM file or .LBR file will only    result in ark from a written draft.  It is easier to do correct work from a      written medium than it is from the "top-of-the-head". Work slowly and carefully.  Be sure that you are writing the instructions in   their proper format and that they are in the proper sequence for your          programming language.                             Chapter Four: INPUT    Once the computer output has been established, the question arises as to where this output is going to come from.     The answer of course is from the„Ot be determined before the input can be established.  ^On the paper that was used to lay out the heading and title information, write in what output is wanted from the cThe following article consists of two short chapters in the FUNDAMENTALS OF    COMPUTER PROGRAMMING manual by John Y. Terry of MOAUG.  Because of their       brevity, both were printed in one issue of the MOAUG newsletter (August, 1990)~~~~~~~~~~~~~~~~urpose. It is best to have all input data available on the system prior to doing data  manipulation. Sometimes the result of one data manipulation is the input for another data    manipulation.  This possibility must be considered. At this point in the program, other sections of the program may be used.  Some inputted data may need to be immediately output to disk, print, etc.  Keep the use of other program sections as limited as possible to maintain the integrity of the program and to facilitate debued, and programmed. If any output is to be to disk or to tape, this must also be programmed in the desired format. Remember, when determining the output, that not all of the input data need be  output.  Use only what is needed. When programming the output element, do not be concerned with the input or any other section of the program except the housekeeping section.  Always keep the housekeeping section in mind. Program the output section from the previously prepared draft of that section. Always wo screen full of gibberish. The SmartKeys are fine and dandy and will, indeed, save a few keystrokes, but  if you prefer to display 25 lines instead of 24, you can eliminate the         SmartKeys by pressing SHIFT-UNDO (that is, hold down the SHIFT key and at the  same time press UNDO.)  This will disable the SmartKeys.  They will disappear  from your screen.  From that point on, the SmartKeys do not apply.  Pressing   SmartKey I, for example, will no longer give you a directory (instead, it will give you  input and data manipulation sections of the   program. When determining the input, it must be established if the input is to be from  disk, tape, keyboard, modem, etc.  Each of the input devices must be           considered separately and be programmed according to the input devices'        specific requirements. The inputted data must either be used immediately or stored for use at another time.  The holding areas and counters established in the housekeeping section  of the program are used for this p~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~FUNDAMENTALS OF COMPUTER PROGRAMMING, by John Y. Terry, Sr. MOAUG                             Chapter Three: OUTPUT   The program's output must be determined before the input can be established.   On the paper that was used to lay out the heading and title information, write in what output is wanted from the computer, again using X's and 9's as before. All of the output must be established, and its position on the page or screen  determingging or changing the program later. Care must be taken to insure the logical flow of the program from start to     finish.  Remember, the computer will do exactly what it is told to do when it  is told to do it.  If the program is not in a logical form, the results will   be unpredictable and difficult to fix later.                Next Month: DATA MANIPULATION           for use at another time.  The holding areas and counters established in the housekeeping section  of the program are used for this p your MASTER COPY   of CP/M in drive one, and pull reset.  After CP/M boots,   you can take a DIRectory of the tape and see that it       contains about 19 files of varying types.  One of these files (or programs, if you prefer) is called  FORMAT.COM. FORMAT does exactly that: it will format a     datapack or STANDARD disk (no 360s or 720s here!)   So,    after your drive stops spinning, just type FORMAT and      <RETURN>.  Your drive will spin around some more, then a   message will appear asking you whi„;its drives!  It knows that a  datapack is larger than a standard ADAM disk drive, and    that it can't BACKUP the entire tape, so it will let you   know this and then aborBIOS CALL by Jerome Hess, MOAUG CP/M librarian.  This      article originally appeared in the August, 1990 issue of   MOAUG newsletter, and is a continuation of last month's    article discussing topics of interest to VERY NEW CP/M     users.  This mont   it also allows you a chance to stop the process, just in   case!                       Once ADAM starts formatting the datapack, I would suggest  you go make yourself a sandwich.  Data drives are kind of  slow, and there really isn't much to watch, except the     block counter.  Well, you've made (and probably eaten)     that sandwich, and now ADAM wants to know if you want to   VERIFY the tape. There are a lot of folks out there who like to live        dangerously and would automatically say NO!  I  at the majority of the   ADAMites out there in that it is being written under the   assumption that you have at least two drives.  And since   they are what most people have two of, I'm going to use 2  DDP drives as a reference, although ANY combination of two drives will do. The requirements for this part are very simple.  Have on   hand:     (1) A blank datapack.     (2) Your master copy of CP/M.      (3) A copy of this article to          talk you through. Put the blank datapack in drive two andurpose. It is best to have all input data available on the system prior to doing data  manipulation. Sometimes the result of one data manipulation is the input for another data    manipulation.  This possibility must be considered. At this point in the program, other sections of the program may be used.  Some inputted data may need to be immediately output to disk, print, etc.  Keep the use of other program sections as limited as possible to maintain the integrity of the program and to facilitate debuch drive you want to     format.  MAKE SURE THAT YOU PRESS A LETTER OTHER THAN A!   (Don't laugh; I've accidentally formatted several MASTERs  in my time!)    In this case, since you are formatting in the second tape  drive, you will want to choose drive B. Enter it so and    press <RETURN>. ADAM will then tell you to insert the      medium into drive B and hit Return.  This is done so that  if you suddenly realize your one and ONLY copy of DRAGON'S LAIR is in drive B:  you'll have time to get it out, andh: Making a WORK TAPE (how to SYSGEN a    tape using two data drives, batch transfer of .COM files,  what the .COM files do, how to ERAse files.)   THIS NOTE   MAY BE ALTERED OR DELETED as long as Jerome is credited.======================================================= M Okay.  We know what CP/M is and ISN'T, as well as what all those neat little SmartKeys are for.  Now, let's get down  and make a WORK TAPE for CP/M that we can play with and    mess up and NOT CARE!!! This section is going to be aimedlive in     Florida, where the humidity is in excess of 100% at least  once each day.  I'm not stupid.  I'm going to press Y and  let it verify those blocks! Boy, that sandwich sure was good. Now is the time to go    grab a slice of that cake that your wife has been          hiding!!!  Verifying is almost as slow as formatting. After all is said and eaten, ADAM will display a message   saying "FORMAT SUCCESSFUL" (or if not it will ABORT) and   asking you if you want to format another.  Well, I think   th the .COM extension.  This is accomplished       thusly: N         COPY A:*.COM B: MThis tells ADAM to search drive A: and copy all the .COM   files to drive B:.  The asterisk (*) is sometimes referred to as "Wild Card".  It represents any and every file.  So, " *.COM" means every file ending in ".COM".  This          instruction tells ADAM to search drive A: and copy all the files (no matter what their first name) with a .COM        extension to drive B:  The <*> fills in for all the        missing leve your DESTINATION is on.  That will be drive B:.  Watch closely, because the spacing on this next part is real close!  After it's done, ADAM will say "SYSTEM WRITTEN SUCCESSFULLY" and then ask   you to name a destination drive again (in case you want to do another tape) or press <Enter> to reboot.  Well, we     only had one tape formatted, so we sure can't SYSGEN any   more.  So press <Return>.  The A: drive will spin some     more to reboot, then everything will be okay! We now have a prime ADAM CP/M twe will want to work with.  But, as     intermediate CP/Mers, we don't really need ALL of these    files.  So let's start ERAsing the ones we won't be using. Don't panic; you still have them intact on your master     copy.  Just to make sure, you can type DIR A: and you'll   see ALL the files on drive A: (even though your current    drive is still B: drive.) Let's look at what the files do, and decide which ones we  want to keep on our work tape. The file ADAM.COM allows you to move EOS files from an EORY VERSATILE program and has a  lot more uses than I'm going to explain here, but in a     nutshell, COPY.COM is a file copying program. It can be    used to copy one file at a time or even a whole bunch of   programs.  Since there are several programs that we want   on the other tape, we are going to do a MASS file copy. You will remember that only the files which end in .COM    are ones (at this point anyway) that can be run directly.  The rest are just support files.  So let's JUST copy the   files withat we've eaten just about all that we can hold at this   point, so NO, let's not format another just now.  Press N. ADAM will drop back down to drive A: and wait for you to   run another program.  Well, in CP/M, formatting a tape     isn't enough.  We want to SYSGEN that puppy, too!  SYSGEN  copies the ADAM CP/M SYSTEM from the one datapack to       another.  So type the command SYSGEN and <Return>.  SYSGEN will ask you which drive your SOURCE is on.  (That would   be A:)  Then it wants to know which dritters on the left side of the period. Once this has been accomplished, ADAM will show you the    name of each file AS it is being copied.  Once this has    finished we will want to move over to drive B: and start a little clean up. You move from drive to drive by merely    typing the letter of the new drive followed by a colon. So entering "B:" will put us on B drive. Once there, if you take a DIRectory, you will discover     about 15 files, all with the .COM extension.  Most of      these are the ones ape that has been formatted and SYSGENed and is ready to be mailed off to ME for a     copy of MOAUG's STARTER PAK! But wait; don't lick those    stamps yet!  There's more I want to show you. I said that we were going to make this a full WORKING copy of CP/M. Well, as I stated earlier, CP/M doesn't do much   by itself.  So let's put some programs on that tape. In your directory of drive A: you should have run across a program called COPY.COM.  That's the one we're going to    use next!  COPY.COM is a VES tape to a CP/M tape.  To use it, you would just type in    the word ADAM then hit <Return>.  The program would load,  and then ask you which drive the "ADAM" datapack is in     (that is, the one with the EOS file you want.)  You enter  the appropriate letter for the drive.  The computer will   read the drive, display a directory, and ask the filename  and type of file.  The file type is usually A, H, a, or h  (for more information on filetype, see your SmartBASIC     manual.)  After you enter the name andilar to ADAM.COM that I won't go    into them here more than to say that you'll need to be     sure of your spelling with both these programs.  We'll     keep CPMADAM.COM on the work tape, too.    The next three files are all useful to assembley language  programmers (OOH, there's that word again! Yeeecch!)  but  we'll just eliminate them by entering ERA DDT.COM <Return> ERA DUMP.COM <Return> and ERA ED.COM <Return>.  That takes care of THAT! Our tape is now rid of them.  Next is FORMAT.COM which we alsng "ERA ASM.COM". Next is BACKUP.COM which, as its name implies, will        "BACKUP" the entire contents of a CP/M datapack from one   tape to another.  To use it, you just type BACKUP.  The    program will load and ask you which drive is to be the     source, and which is to be the destination.  Be careful,   though, because BACKUP knows its drives!  It knows that a  datapack is larger than a standard ADAM disk drive, and    that it can't BACKUP the entire tape, so it will let you   know this and then ae a datapack can be SYSGENed     quite a few times with several DIFFERENT systems with no   ill effects! The other files (PIP, STAT, SUBMIT and XSUB) are all very  useful in their own way, but don't have too much function  on a starter datapack, so you can go ahead and ERAse them. Briefly, PIP is an enhanced COPY, STAT shows the           STATistics of your system and drive, and SUBMIT and XSUB   are used more extensively later on in the CP/M life. Now our work tape should contain only the following filte this work    tape.  It is a fairly complex little program and can do    several things besides just copy programs.  For a more     complete definition of COPY I must refer you to the CP/M   manual (I know I said it was a bad book, but the           information is a bit too long of a subject to start here.) Anyway, this file is a keeper.  We WON'T ERAse it.        CPMADAM.COM is EXACTLY like ADAM.COM except in reverse! It allows you to transfer a CP/M file from CP/M to EOS. The   instructions are so sim type of file, the   computer will ask you the CP/M file name (what you want to call it in CP/M) and will then proceed to copy the file    from EOS format to CP/M.  As ADAM.COM is the ONLY way to   transfer files from an EOS to a CP/M datapack, this is a   file we'll want to keep. Next in your directory is ASM.COM. This is a VERY powerful assembly language assembler, but as it goes beyond the     scope of this column, we won't be needing it on our work   disk, so we'll ERAse it from the datapack by enterio used last month.  To      refresh your memory, it formats STANDARD datapacks and     disks (no extended length here) so that they may be used   in CP/M.  We'll keep this one on the tape. Of the remaining files, only SYSGEN.COM is really a        keeper.  As we discussed last month, it will transfer the  CP/M operating SYSTEM from an ORIGINAL datapack to one you are creating.  It will also allow you to update some of    your old SYSTEMs once you receive one of the STARTER PAKs. To the best of my knowledgbort the program.  We want to keep     this file on our work disk.CONFIG.COM is another good program that is ENTIRELY ADAM   SPECIFIC but not really necessary to our work tape, so     we'll just get rid of it for now.  For those of you who    haven't experimented with CONFIG, it allows you to change  the SmartKey definitions, color of the screens, port       assignments, etc.  But for our present project, we won't   need it. Enter ERA CONFIG.COM to remove it.  The next is COPY.COM, which we used to creaes: ADAM.COM, BACKUP.COM, COPY.COM, CPMADAM.COM, FORMAT.COM,   and SYSGEN.COM.  We have ERAsed all the others. Well, that should cover it.  We all now have at least one  working CP/M datapack.  The rules are all the same for     making up others.  The more WORKING datapacks that you     have, the less often you'll have to play around with the   original. Next month: I PROMISE we'll get into STARTER PAK II.  In   the meantime, let's start thinking of some projects that   we can start working on in refere      lines:\\10 REM PART 1 <CR>\\20 INPUT "YOUR NAME? ";na$ <CR>         (na"string")\\30 INPUT "A NUMBER FROM 2 TO 5 ";p <CR>\\40 ? "HI! ";na$ <CR>                    (? = PRINT)\\50 ? <CR>\\60 FOR i=1 to p <CR>\\70 ? na$ <CR>\\80 NEXT i <CR>\\If you get an "error" message, compare what you have "entered"    with the text. Usually SmartBASIC will point out the error. \\Now!, once you are SURE the lines displayed on your screen match  the listing, "SAVE" the "program" to a datapack or disc, by   OUCH with an issue-specific BBS concerning Veteran's      Affairs.  The number and the format of the BBS will        change, but if anyone is interested in looking into the    new VETS BBS I'll try and provide what info I can. The reason I mention this is that Dale has been carrying   the NATIONAL ADAM ECHO for the past 18 months. This        service will NOT carry over to the VET BBS.  But fear not! Ken Macht of the GALLIFREY BBS has chosen to accept the    thankless task of continuing in Dale's footstepnumber of repetitions of your     name, one below the other. \\Once you have satisfactorily "RUN" the program, try making the    following changes, ONE AT A TIME, and then "RUN" the result.\\Change line 70 to read:-\\70 ? na$; <CR>. \\You can easily do this by entering LIST 70 <CR>. Then move the    flashing cursor up to the BEGINNING of the displayed line 70,     then along the line to the end, and over the first blank space.   Then press the (;) key, followed by a RETURN. This will           automatic†	J\\\Next change line 70 to read:-\\70 ? TAB(2*p);na$ <CR>\\When you RUN this version, the repeats of your name will be       displayed in "echelon" formation, or in a c\r~45,80\\\I\K\Q\W\C\\\\\\SMARTBASIC EXERCISES \\\\BY FRANCIS NAISH.\w\A\\NOTE. Wherever you see <CR> in the following text, it means that  you should press the RETURN key. \\PART 1.\\First, "load" SmartBASIC, then enter the following program  nce to the proposed CP/M  workshops!  The most obvious is a review of the past two   BIOS CALLs, but that shouldn't take too long, then what?   Parcheesi? In closing:  By the time you read this, Orlando will have  lost one of its more active BBS's to the scourge of time   and money.  Yes, The MIDAS TOUCH is going offline.  Dale   Malone has been operating the BBS for several years now    with very little support from the outside, and has decided that it's time to call it quits.  He is replacing the      T    "entering" SAVE PRACTICE1 <CR>.\\Then "RUN" the program, by  "entering" RUN <CR>. On the screen,   you will be presented with a request for your name. Enter your    name and press RETURN. \\Next you will be asked to "ENTER A NUMBER FROM 2 TO 5". Enter     your selection and press RETURN. \\(The number you enter will show up later as the specific number   of times your name is reprinted on the screen.)\\After you enter your number selection, the screen will display    "HI! (your name), followed by a s.  He will be carrying the ADAM ECHO.  So please call GALLIFREY at    (407) 273-9104 and drop Ken a line.  Even if you don't     plan to become a regular user, let him know that ALL the   modeming members of MOAUG appreciate what's being done for Little Orphan ADAM...           Questions?  Comments?               Jerome Hess              PO Box 678203              Orlando, FL 32867with very little support from the outside, and has decided that it's time to call it quits.  He is replacing the      Tally change the line 70 that is retained in "memory",    without you having to retype the whole line, but will not alter   the program you have "SAVED".\\Then "RUN" the changed program. You will see that the repititions of your name, which were previously one below the other, are now  all following one another on the same line. \\So!, that is the effect of simply adding a semi-colon after the   "STRING", na$. Spectacular! isn't it?.\\If you wish, before you make the next change, you can SAVE this   as PRerations to the program, by     making the following changes :-\\35 If p<2 OR p>5 THEN GOTO 30 <CR>\\145 ? <CR>\\150 INPUT "AGAIN? Y/N ";an$ <CR>\\160 IF an$="y" or an$="Y" THEN GOTO 05 <CR>\\170 ? "THAT'S ALL" :END <CR>\\And delete line 06.\\Now you can go through the whole scene as often as you wish by    answering "Y" or "y" to the question "AGAIN Y/N". Note that ANY   other key than "Y" or "y" will end the program. This is because   ADAM has been commanded, in line 160, to go back to line 5, the ad:-\\70 ? TAB(2*p);na$ <CR>\\When you RUN this version, the repeats of your name will be       displayed in "echelon" formation, or in a column slanted towards  the lower right corner of the screen.\\If you wish, SAVE this as PRACTICE1C\\Next change line 70 to read:-\\70 ? na$; " "; <CR>\\Now the repeats will be back on one line, but separated by a      space. Save this as PRACTICE1D.\\Next change line 70 to read:- \\70 ? na$, <CR>\\With this version the repeats will line up in columns. Save this \Save this as PRACTICE 2B. \\One last comment - all "strings" must be exactly as defined in    the parentheses. All commands that ADAM recognizes may be typed   in either upper or lower case letters. (RUN, run, GOTO, goto,     NEXT, next, etc..)\\And, like Bugs Bunny says, "That's All, Folks!.".\\\\Francis Naish.\\\\V.I.S.A.\\\\ the question "AGAIN Y/N". Note that ANY   other key than "Y" or "y" will end the program. This is because   ADAM has been commanded, in line 160, to go back to line 5, the d 115 are variations of line 20.)\\Add the following lines :-\\120 FOR i=1 TO p:FORj=1 TO 2 <CR>\\130 ? na$(j) <CR>\\140 NEXT j:NEXT i <CR>\\Delete lines 60, 70 and 80. (Do this by entering each line number followed by a <CR>.)\\Now LIST to see your program and SAVE as PRACTICE2 and RUN. You   should see alternate names. If you wish, you may experiment with  line 130 as you did with line 70 in PART 1.\\(We should really dimension the variable na$(j). Another time.\\You can make other interesting altACTICE1A, so that you can try it out again, in the future\\Next, change line 70 to read:-\\70 ? TAB (5);na$ <CR>\\You will see, that when you RUN this version, the repititions of  your name are now, once again, one below the other, but they have been moved over on the screen until they are below your name in   the line HI! (your name). \\If you wish to do so, SAVE this as PRACTICE1B.\\\\\r~05,80\\\I\K\W\Q\CPAGE 4.\\\r~05,40\\\I\K\W\Q\CSMARTBASIC EXERCISES, CONT..\w\A\\\\Next change line 70 to re  beginning of the program, if the answer is "Y" or "y". But, if    any other answer is provided, ADAM continues to line 170 which    tells it to print THAT'S ALL and end the program. Save this as    PRACTICE2A.\\If "Bill" is one of the group, the following routine will give    him special treatment.\\\r~45,80\\\I\K\Q\A\\\\\\Add the lines:-\\165 GOSUB 200 <CR>\\200 FOR j=1 TO 2 <CR>\\210 IF na$(j)="BILL" OR na$(j)="Bill" THEN ? "SEE YOU LATER,      BILL!)" <CR>\\220 NEXT j <CR>\\230 RETURN <CR>\ as PRACTICE1E.\\PART 2.\\Here we change "operators" and "name2", we will use "Garry"       becomes na$(2) and "name1", we will use "Bill", becomes na$(1).   Type NEW <CR> and LOAD PRACTICE1 <CR>. Then LIST <CR>\\Add the following lines:-\\05 HOME <CR>             (This moves cursor to top of screen.)\\110 ? "YOUR NAME?" <CR>\\115 INPUT na$(2) <CR>\\Change na$ to na$(1) in lines 20, 40, and 70. (LIST 20 and        modify, etc)\\Now RUN <CR> and type in 2 names when asked. (Note  that lines    110 an~	J   selecting nominees for induction, and the final outcome was       agreement, within those participating in the discussions, that    the matter should be "managed" from \r~05,80\\\I\K\Q\W\CPAGE 5.\\\\REPORT ON ADAMCON 02.\\\r~05,40\\\I\K\Q\ATo paraphrase my opening remarks with regard to ADAMCON   01, ADAMCON 02 was surely successful for those who attended. The  only sobering note, if you can use that phrase with he tradition established at   ADAMCON 01. Richard Clee, President of MTAG, gave the opening     address, on behalf of both MTAG and LAUGH, as co-hosts, welcoming the people who were attending the convention. For those of us who had been at '01, it was something like a family reunion, and      every bit as enjoyable. Renewing established contacts is usually  pleasant, and to add to that, is the pleasure of meeting people,  whose names you have heard repeatedly, throughout your            association with ADAtise and ambitions, you should seriously consider attending  the next ADAMCON, to enjoy that unique experience.\\\\If there were ever any doubts about the future of ADAM, one       half-hour spent at a gathering such as ADAMCON, should be         sufficient to convince even the most pessimistic of soothsayers,  that ADAM is "in for the long haul". Among those attending, the   general opinion about ADAM's future, was sufficiently optimistic, that there is already a volunteer convener of ADAMCON 03. But    ed throughout the   day, and the registrants were split into two, "manageable-sized", groups, which alternated, between the two rooms set aside for     seminar purposes. This meant that the person acting as convener   for each subject, was able to relate to smaller groups, which     provided a better forum for information interchange.\\\\Thursday's schedule included sessions on BASIC Programming by     Dale (and Neil) Wick, Product Demonstrations by Syd Carter and    Eric Danz, Graphics by Pat Herrington,flappable", contributed significantly toward making it all     work, as well as it did. I suspect Ken probably went home, after  clearing up behind everyone else, and slept for a couple of days. He certainly didn't get much sleep during the show. Well done     Ken!. I hope that, in retrospect, you had as good a time as the   rest of us.\\\\After the usual period of registration activity in the afternoon, ADAMCON 02 started off with a reception, as an ice-breaker, on    Wednesday evening, August 15th, in treference to  a convention, was the obvious absence of many of the well-known   figures of ADAMdom, as well as many suppliers. I am sure they all had valid reasons for staying away, but they missed a splendid    "gathering of the clans".\\\\The atmosphere during the convention was "electric", or perhaps I should say "electronic". Whatever it was, if you have never       experienced the buoyant sensation, that goes with being among     people who share, not only your enthusiasms, but their knowledge, experM, but who you have not met to that point in  time. The atmosphere at the reception, in fact throughout the     entire convention, was relaxed and convivial. An enjoyable        beginning to an enjoyable and informative gathering.\\\r~45,80\\\I\K\Q\A\\\\\\\\\\Thursday, August 16th, was the first of the planned seminar-days. A "general" session, was scheduled after breakfast, and again, at the end of the sessions, to permit topics of general interest to  be aired and discussed. Sessions were programm until such time as he officially announces, that ADAMCON 03 is    "go", I prefer to respect his anonymity.\\\\A vote of appreciation goes out to Monte Neece, ADAM's ubiquitous convention organizer, and the executives and members of MTAG and  LAUGH, who devoted their efforts toward  making ADAMCON 02 the    success it was. And a special vote of thanks goes out to Ken      Batcher,  who laboured unceasingly, as Master of Ceremonies,      throughout the entire convention, and whose ability to remain     "un The ADAM News Network by   Dean Roades, ADAM Repairs by Phil Kosowsky, Hardware Design and   Marketing by Syd Carter, and Powermate/EOS by Ron Mitchell. In a  general session, scheduled immediately following lunch, the       subject was User's Groups and the ADAM Community. This was        conducted by Dave Hill, together with a panel of representatives  from various User's Groups, including Ron Mitchell of AUFG, Pat   Herrington of MOAUG, Dean Roades of 463 AUG, Rich Clee of MTAG,   Faye Deere of ECAUG anAD, and ADAM'S HOUSE was noticeable. Reedy Software issued an "ADAMCON 02 Software         Specials" flyer for the occasion, and provided prizes for the     "draw" at the Banquet, as did many other suppliers, but it would  have been much more meaningful if they, and other ADAM suppliers, had sent someone to be at the convention. These first two ADAM    Conventions have been the highlight of the ADAM community to      date, and it is a pity that the opportunity to impact on          ADAMites, by attendance am       Writing by Eric Danz and SmartBASIC Programming by Dale Wick. At  11 a.m. the ADAM Store was opened to conventioners, to provide    them with an opportunity to "shop" for the "goodies" displayed    there, before the "store" was opened to the "general public" from 2 to 5 p.m..  Among the "storekeepers" were Eric Danz of ADAMZAP  Software with his software products, Alan Neeley of ADAM-Link of  Utah, with his own telecommunications creations, as well as       general ADAM items, Pat Herrington and Jim make it "miserable" for our U. S. based         companies to bring items for display, and sale at our Canadian    conventions. That doesn't help our image one iota, and it         certainly causes grief for the U.S vendors. The presence of such  a levy may well have been a significant factor in the decision by other ADAM vendors not to attend ADAMCON 02 and display and sell  their wares.\\\\After the "limited" sales session, the conventioners were "free"  to pursue their own pleasures until Saturday morn" volumes for the ADAM News Network,    Jim Walters of Walters Software, with supplies of his software    products, Ron Collins and John Villilo with Chris Brayman's       MIDI-MITE interface, and Jim Clancy, an ADAMite from Montreal,    with an extensive array of his personal ADAM equipment and        publications for sale.\\\r~05,80\\\I\K\Q\W\CPAGE 6.\\\\REPORT ON ADAMCON 02 CONT.,\\\r~05,40\\\I\K\Q\AAlthough the sales area appeared well-occupied, the       absence of such vendors as M. W. Ruth, NId yours truly from VISA.\\\\Friday, August 17th, started with a general session to discuss a  proposal to establish a Roll of Honour for deserving ADAMites.    The session was chaired by Richard Clee and a series of           proposals, developed by a group of ADAM News Network executives,  was presented to the conventioners, for their consideration and   subsequent discussion.\\\\After this "general" meeting, the group again split into two      smaller bodies, and attended sessions on Video Game Prograt them, is missed by those we depend     upon, for our supply of the "latest" and "greatest".\\\\One of the realities of holding a convention in Canada, as far as our U.S. based suppliers is concerned, is the problem of Canada's "refundable" 15% tax levy, imposed at the border on all goods     imported for possible resale. This, despite the so-called Free    Trade Agreement, and the absence of "Customs Duties" on computer  hard and software. Even if there is no duty, Ottawa, and Excise   Canada, manage to Poulin, of MOAUG, with Solomon Swift's Phoenix 2000 "Convention Specials", Ken Batcher   of ADAM Distributing And Marketing, with a selection from his     stock of ADAM items, an MTAG table of their regular supply of     both expendables and other items, including TriSyd 320K           datapacks, Syd Carter of TriSyd Video Games with a selection of   his products, including the "all-new" Dynomite Sound Digitizer,   with or without SmartClock, Dean Roades and Bart Lynch selling    subscriptions and "librarying, when        Richard Clee devoted further time to the Roll of Honour concept.  The idea of having some form of "recognition", for those ADAMites who have made significant contributions to the short, but         eventful history of the system, was generally supported by the    attendees. There was some discussion about the criteria for       selecting nominees for induction, and the final outcome was       agreement, within those participating in the discussions, that    the matter should be "managed" frthis     function, while still managing to consume his meal. A feat that   took considerable skill and resourcefulness.\\\\While the diners lingered over coffee and liqueurs, four ADAMs,   which had been set up at the far end of the dining room, were     involved in a free-for-all, time-limited, play-off, to choose the convention's "Addictus Champion". The noise level in the          assembly, rose in direct proportion to the scores of the various  players, and the final outcome of the competition, was a by Ron Collins and John     Vilillo, (ably assisted, and sometimes "prompted" by Ron's young  son), Terminal (BBS) Programs by Alan Neeley, Product             Demonstrations by Jim Walters, and Powermate/CP/M/T-DOS by Ron    Mitchell.\\\\After lunch the group attended sessions on IBM/ADAM               Communications by Dave Hill, and Advanced SmartBASIC Programming  by Dale Wick.\\\r~45,80\\\I\K\Q\A\\\\\\\\\\That completed the regular convention sessions, except for the    Awards Banquet and a f gift           certificates, to a grand prize of a 10 megabyte Hard Drive. All   of the "prizes" were donated and the draw itself was a highlight  of the evening, due, in no small measure, to the relentless good  humour of our Master of Ceremonies, Ken Batcher.\\\\The evening progressed, through the closing address by Richard    Clee, as Convention Chairman, to the painful but necessary        farewells, accompanied by promises of regular communication, with friends and acquaintances alike.\\\\If I hads, the group, minus a few early "departees", for various   reasons, repaired to the Rotterdam Room, which had been the       locale of most of the group meals. There, with gay abandon, they  celebrated the success of the convention with an excellent Prime  Rib of Beef dinner, replete with a plentiful supply of wines, and a cash bar for those who preferred other libations. The food was  exceptional and the service, better than average. In his          inimitable fashion, Ken Batcher managed to act as M.C at om within the ADAM News Network  organization, and the selection committee, comprised of the       executives of A.N.N., should act in that capacity. It was left to the A.N.N executives to finalize the nomination and selection     criteria, and agreed that ADAMCON 03 would be the most suitable   forum for the first induction ceremony.\\\\Following the general session, the group proceeded, as on         previous days, to split into two smaller groups, and attend       sessions on The MIDI Interface, given winner,  in the form of a young ADAMite from Moncton, named David Barnett, with his Mother cheering him on. Well done, David!.\\\\During the course of the after-dinner period, subsequent to the   Addictus championship, a "Draw" was conducted, using numbered     tickets and ticket-stubs, drawn from an ADAMCON 02 Cap. At the    conclusion of the draw, most convention registrants had received  two "awards", which ranged from free, one-year memberships in     various User Groups, through software packages andurther period of the ADAM store, open to    anyone, from 2 until 5 P.M..\\\\Before dealing with the final Awards Banquet, I should mention    that, throughout the convention, an ADAM had been made available, to anyone who wished to participate in a contest to achieve the   "highest" scores at ADDICTUS, Jack Reedy's "mesmerizing" video    game. More on this later.\\\\After an informal session of "socializing" in the ADAMCON 02      "Hospitality Suite", which, I believe, doubled as Ken Batcher's   quarter the chance to vote on the success of ADAMCON 02, I would vote a definite "YES". I thoroughly enjoyed myself, and I'm sure  everyone else did too. What a pity more ADAMites couldn't         attend.\\\\DAVID COBLEY.\\\\"Draw" was conducted, using numbered     tickets and ticket-stubs, drawn from an ADAMCON 02 Cap. At the    conclusion of the draw, most convention registrants had received  two "awards", which ranged from free, one-year memberships in     various User Groups, through software packages anda program by clearing the screen and giving it a nice neat title-\\\\\    ] 10 HOME : INVERSE\\\\HOME clears the screen, INVERSE says make black letters on a      white background. (Unless you have a colour-modified version of   SmartBASIC.)\\\\\    ] 20 ?"**********************" \\\    ] 30 ?"*                    *"\\\    ] 40 ?"*    Program Title   *"\\\    ] 50 ?"*                    *"\\\    ] 60 ?"**********************"\\\    ] 70 NORMAL\\\    ] RUN\\\r~45,80\\\I\K\Q\A\\\\\\Line 70 r\r~05,80\\\I\K\Q\W\CPAGE 9.\\\r~05,40\\\I\K\Q\W\CINTRODUCTION TO SMARTBASIC.\\\\BY CHARLES A. SMITH.\\\\\I\K\Q\W\CLESSON 3.\w\A\\Here is the third part of the series of lessons on SmartBASIC     programming by our own Charles Smith. BDC.\\\\Whatever you want to do on a computer (except use a mouse or a    joystick) is going to involve typing. The better your typing      skills the less frustrating the task of finding the right keys to tell ADAM  what to do. So don't get discouraged - just keep at helpful in reviewing or changing  a program at a later date.\\\\If you are typing a long program it's smart to SAVE it from time  to time - possible power failure - ADAM forgets very quickly when turned off. Every time you add more to a previously SAVEd program give it a slightly different name or ADAM will store the same     name twice. Delete the old one if you  want by typing DELETE      followed by the old name.\\\\Now and then ADAM will signal that you have typed an ERROR.       That's something ths, p 29,30\\\\\    String variables, p 34,36\\\\\    IF / THEN commands, p 48,53\\\\\    DATA / READ commands, p 60,70\\\\\    FOR / NEXT commands, p 71,81\\\\\    Low resolution GRaphics, p 112,116\\\\Not much is given on Hi Resolution GRaphics, p A-33, A-36 but you can have some fun with it. Hi-Res is the basis for Arcade games   and other picture and action programs.\\\\Something I have never seen in the Instruction books is what I    call Program Housekeeping; one example - I always start  gift           certificates, to a grand prize of a 10 megabyte Hard Drive. All   of the "prizes" were donated and the draw itself was a highlight  of the evening, due, in no small measure, to the relentless good  humour of our Master of Ceremonies, Ken Batcher.\\\\The evening progressed, through the closing address by Richard    Clee, as Convention Chairman, to the painful but necessary        farewells, accompanied by promises of regular communication, with friends and acquaintances alike.\\\\If I hadeturns the text back to white on black, (or your         standard screen colours.) \\\\Another trick that makes good programming sense is the REM        statement-\\\\\    ]300 GOSUB 5000 REM April Schedule\\\\Line 300 begins with a command to GO to a SUBroutine which in     this case is an April Schedule of some sort. REM is not a program command and ADAM dutifully ignores it. It is simply a convenient  REMinder to the programmer as to what the Subroutine at Line 5000 was all about. This can be very    it. Two fingers on each hand is all I can manage but that gives   me about 35 words a minute.\\\\At this point you may want to dig out the SmartBASIC Manual that  came with the ADAM. In my view it's not too well presented and is far from being a complete text on BASIC but you should be able to learn a lot from it after what you've covered here. There is      really no end to the programming possibilities at your finger     tips. I suggest you look at these areas-\\\\\    Arithmetic order of operationat he just can't handle. A popular one is      SYNTAX ERROR. Look and you'll probably find the error (I have yet to win an argument with a computer on that subject). At other     times ADAM will reprint your faulty Line with a statement below   telling you he expected something else. Very helpful - the APPLE  II doesn't have that feature.\\\\There are, of course, many other areas to cover but the foregoing should be enough either to whet your appetite or turn you off     forever against BASIC programming.e-read from the Basic  program from line 1000 to 1225.  There is of course the element   of early lucky choices but otherwise if players decide first to   identify the hidden numbers (but not their position) by choosing  the same number for each position (say 3,3,3) then the difficulty as measured by the final score is about the same for each         selection. This game could be modified for 2 players with a       cumulative score, otherwise just write down and add the           scores.\L\\4 REM   HIDDEN 0, y AT x\\\    80 GOTO 20\\one is      SYNTAX ERROR. Look and you'll probably find the error (I have yet to win an argument with a computer on that subject). At other     times ADAM will reprint your faulty Line with a statement below   telling you he expected something else. Very helpful - the APPLE  II doesn't have that feature.\\\\There are, of course, many other areas to cover but the foregoing should be enough either to whet your appetite or turn you off     forever against BASIC programming.10); "?"; "  "; "?"; "  "; "?"\\130 g=g+1:IF g>t THEN GOTO 510\\140 PRINT "TRY #"; g\\150 GET cho$(g, 1)\\155 FOR k=1 TO 200:NEXT\\160 GET cho$(g, 2)\\165 FOR k=1 TO 200:NEXT\\170 GET cho$(g, 3)\\175 GOTO 599\\180 PRINT TAB(10); cho$(g, 1); "  "; cho$(g, 2); "  "; \\cho$(g, 3);\\200 REM   Check for clues\\205 FOR i=1 TO 3\\210 IF cho$(g, i)=com$(i) THEN  clue$(g, i)="Y"\\215 NEXT i\\218 FOR i=1 TO 3:FOR j=1 TO 3\\220 IF clue$(g, i)<>"Y" AND cho$(g, i)=com$(j) AND i<>j AND       clue$(g, j)<>†	Jr to our SmartBASIC library. BDC.\\DEL is used to delete a line number or a range of line numbers;   it uses the same syntax as LIST.  Do not confuse it with DELETE   whSMARTBASIC PROGRAM LISTING.\\\\HIDDEN NUMBERS.\\\\BY FRANCIS NAISH.\w\A\\HIDDEN NUMBERS is a simplified MASTERMIND using numbers instead   of colors. It may help introduce young people to the logic        required. The instructions can easily be pr I hope it is the former - best of luck.\\\\Charles.\\\\EDITOR'S NOTE.\\I have a feeling that the following short program was intended to be printed with Lesson 2, which dealt with graphics. My apologies if that was the case. Better late than never. BDC.\W\C\\SMARTBASIC PROGRAM LISTING.\\\\RANDOMLINE \\\\BY CHARLES A. SMITH.\w\A\\\    10 GR\\\    20 COLOR =INT(RND(1)*16)\\\    30 x=INT(RND(1)*40)\\\    40 y=INT(RND(1)*40)\\\    50 HLIN 0, x AT y\\\    60 COLOR =INT(RND(1)*16)\\\    70 VLIN NUMBERS (F.Naish - 7/90)\\5 REM   An easier MASTERMIND\\6 ONERR  GOTO 2100\\10 GOTO 999\\30 HOME\\40 DIM cho$(t, 3):DIM clue$(t, 3):DIM true$(t, 3)\\45 g=0\\50 com$(1)=STR$(INT(RND(1)*n+1))\\60 com$(2)=STR$(INT(RND(1)*n+1))\\70 com$(3)=STR$(INT(RND(1)*n+1))\\\r~05,80\\\I\K\Q\W\CPAGE 12.\\\\\I\K\Q\W\CSMARTBASIC PROGRAM LISTING CONT.,\\\r~05,40\\\I\K\Q\W\CHIDDEN NUMBERS CONT.,\w\L\\100 REM  Display\\110 PRINT "I HAVE CHOSEN FROM 1 TO "; n\\115 PRINT "   *** YOUR GUESS? ***"\\120 PRINT TAB( I hope it is the former - best of luck.\\\\Charles.\\\\EDITOR'S NOTE.\\I have a feeling that the following short program was intended to be printed with Lesson 2, which dealt with graphics. My apologies if that was the case. Better late than never. BDC.\W\C\\SMARTBASIC PROGRAM LISTING.\\\\RANDOMLINE \\\\BY CHARLES A. SMITH.\w\A\\\    10 GR\\\    20 COLOR =INT(RND(1)*16)\\\    30 x=INT(RND(1)*40)\\\    40 y=INT(RND(1)*40)\\\    50 HLIN 0, x AT y\\\    60 COLOR =INT(RND(1)*16)\\\    70 VLIN "Y" THEN  clue$(g, i)="y"\\222 NEXT j:NEXT i\\225 IF clue$(g, 1)="y" AND clue$(g, 2)="y" AND clue$(g, 3)=\\"y" THEN GOSUB 250\\230 GOTO 300\\250 FOR i=1 TO 3:FOR j=1 TO 3:FOR k=2 TO 3\\255 IF cho$(g, i)=com$(j) AND cho$(g, k)=com$(j) AND i<>j AND     j<>k AND k>i THEN  clue$(g, k)=" "\\260 NEXT k:NEXT j:NEXT i\\265 RETURN\\300 REM  Re-order clues\\305 j=1:FOR i=1 TO 3\\310 IF clue$(g, i)="Y" THEN  true$(g, j)="Y": j=j+1\\320 NEXT i:IF j>3 THEN 370\\325 FOR i=1 TO 3\\330 IF clue$(g, i)="y" THENn=3: t=5\\1240 IF d=2 THEN  n=4: t=6\\1245 IF d=3 THEN  n=5: t=7\\1250 IF d<1 OR d>3 THEN GOTO 1230\\1260 GOTO 30\\2000 REM Random Number Routine\\2005 r=0\\2010 POKE 64885, 0\\2020 PRINT:PRINT:PRINT "Press any key"\\2030 IF PEEK(64885)=0 THEN  r=r-1:GOTO 2030\\2040 seed=RND(r)\\2050 RETURN\\2100 PRINT:PRINT:PRINT "Error?"\\2105 PRINT:GOTO 550\A\\Francis Naish is a founder member of V.I.S.A., and is a regular.  contributor to our SmartBASIC library. BDC.\\150 PRINT:PRINT "SCORE: Maximum turnsIF an$="Y" OR an$="y" THEN GOTO 1200\\570 PRINT:PRINT "SO LONG!":END\\\r~45,80\\\I\K\Q\L\\\\\\\\\\\\599 REM  Check of keys pressed\\600 FOR i=1 TO 3\\610 IF cho$(g, i)="9" THEN GOTO 510\\620 IF cho$(g, i)<STR$(1) OR cho$(g, i)>STR$(n) THEN\\GOTO 140\\630 NEXT i:GOTO 180\\999 HOME\\1000 PRINT:PRINT:PRINT "For the game of HIDDEN NUMBERS"\\1005 PRINT "try to identify the 3 numbers"\\1010 PRINT "chosen by the computer,"\\1015 PRINT "some of which may be the same."\\1025 PRINT:PRINT:PRINT "She reset switch or in CP/M when you hit    Control-P (^P). Sometimes, after a while, it may straighten up.   The problem is almost invariably in the microswitch that the      printhead activates when it reaches the leftmost end of it's      travel. This encounter opens the microswitch, which is normally   in the closed position.\\As a rule, microswitches are a high-reliability component, but    they can malfunction. \\\r~45,80\\\I\K\Q\A\\\\\\A lot depends upon the manufacturer. Trademarked switches a allowed"\\1155 PRINT TAB(8); "less incorrect choices"\\1160 PRINT:PRINT "GIVE UP? Dial 9,9,9!"\\1170 PRINT:PRINT:PRINT "Press any key"; k$\\1175 GET k$\\1200 HOME:PRINT:PRINT:PRINT "Make your selection"\\1205 PRINT:PRINT " Selection  Numbers  Turns"\\1210 PRINT "            chosen   allowed"\\1215 PRINT:PRINT "     1      1 to 3      5"\\1220 PRINT:PRINT "     2      1 to 4      6"\\1225 PRINT:PRINT "     3      1 to 5      7"\\1226 CLEAR\\1230 PRINT:INPUT "Selection?  "; d\\1235 IF d=1 THEN    true$(g, j)="y": j=j+1\\340 NEXT i:IF j>3 THEN 370\\370 PRINT TAB(20); true$(g, 1); "  "; true$(g, 2); "  "; true$(g, 3)\\380 IF true$(g, 1)="Y" AND true$(g, 2)="Y" AND true$(g, 3)=\\"Y" THEN GOTO 530\\390 GOTO 130\\500 REM   End routine\\510 PRINT "The correct numbers are:"\\520 PRINT TAB(10); com$(1); "  "; com$(2); "  "; com$(3)\\525 PRINT:PRINT "(Your score is 0)":GOTO 550\\530 PRINT:PRINT "CONGRATULATIONS!"\\540 PRINT "Your score is "; (t-g+1)\\550 INPUT "Play again? (y/n)   "; an$\\560 †	J CONT..\w\A\\Probably the next most important of the housekeeping files are    those that deal with copying files. There are quite a number of   specialized programs arouADAM PRINTER MALFUNCTION.\w\A\\Have you ever had this problem? When you first turn on your ADAM, the printer head moves to the left, the daisy wheel spins and     spins and spins and spins and nothing happens. The same thing     happens when you pull ttart with a guess and then"\\1030 PRINT "use your powers of deduction."\\1040 GOSUB 2000\\1045 HOME\\1100 PRINT "CLUES"\\1105 PRINT:PRINT TAB(2); "Y-One choice exactly matches"\\1110 PRINT TAB(4); "both number and position."\\1115 PRINT:PRINT TAB(2); "y-One choice matches number"\\1120 PRINT TAB(4); "but not position."\\1122 PRINT TAB(4); "(Not otherwise matched.)"\\1135 PRINT:PRINT "NOTE:The order of the clues"\\1140 PRINT TAB(6); "is of no significance."\\1150 PRINT:PRINT "SCORE: Maximum turnsre     usually good for millions of operations. However, the switch      Coleco used in this function is a nondescript component.\\Replacing this switch will correct this malfunction in almost     every case. It is easy to remove and no disassembly of the        printer is necessary to get at it. Some soldering is involved,    but any twelve-year-old would have no trouble with this.\\PROCEDURE:\\First turn off the power to the printer. To be completely  safe,  you may remove the ADAM from the A.C. power   sure that the contact lever is pointing to the front of the       printer (away from the platen). If you have noted  the switch     position as you removed  it, (which I advised), you  will         encounter few problems. It is a trifle awkward getting the screws in, but you should have no real problem.\\I have repaired several printers that had become "slow to start", and in each case, this simple procedure has effected a 100%       cure.\\\\Thomas J. Keene\\\\IEAUG\\\\                            ou just removed is rated at 3 amps at 125 volts  A.C. Your replacement switch should resemble the original switch  as closely as possible. Most complete electronic supply  houses   will be able to match your switch physically. I strongly          recommend that you replace it with a 5 amp switch. There is       virtually no difference in price.\\The hole positions are fairly standardized, but it is a good idea to take your old switch with you when you shop for the new one.   Check it over. You need a switc  sure that the contact lever is pointing to the front of the       printer (away from the platen). If you have noted  the switch     position as you removed  it, (which I advised), you  will         encounter few problems. It is a trifle awkward getting the screws in, but you should have no real problem.\\I have repaired several printers that had become "slow to start", and in each case, this simple procedure has effected a 100%       cure.\\\\Thomas J. Keene\\\\IEAUG\\\\                            t. Radio Shack     gets about $1.50 for theirs. Their catalog number 275-016 is      rated at 5 amps at 250 volts A.C. and probably will work OK, even though it doesn't have the arc tip on the lever. An almost exact  replacement is the SONY part # 1-516-309-00. It runs about $3.00  and is of outstanding quality.\\After you have purchased a suitable replacement switch,   solder  the two wires to the COMMON and NC(Normally closed) positions on  the switch. Then install the new switch in the printer. Just be source altogether.    With a small Phillips head screwdriver, loosen the two screws     holding the microswitch. Use care not to drop the screws into the printer. NOTE THE POSITION OF THE SWITCH. Lift it out so that you may disconnect the wiring.\\You may unsolder the two wires, if you wish, but there is plenty  of wire, so I recommend clipping the wires, close to the switch   with a small pair of wire cutters.  Next, remove about 1/8 inch   of insulation from the ends of the two wires.\\The microswitch y                                      r theirs. Their catalog number 275-016 is      rated at 5 amps at 250 volts A.C. and probably will work OK, even though it doesn't have the arc tip on the lever. An almost exact  replacement is the SONY part # 1-516-309-00. It runs about $3.00  and is of outstanding quality.\\After you have purchased a suitable replacement switch,   solder  the two wires to the COMMON and NC(Normally closed) positions on  the switch. Then install the new switch in the printer. Just be h that is normally closed, but 98% of the  switches will come with both "normally open" and          "normally closed" sets of contacts. The shape of these switches   can vary greatly. Try to find one whose contact lever resembles   your original. \\Some have roller levers, while others are simply flat. The ADAM   switch has a small arc at the tip of the lever. This is the  kind to look for. \\Don't get taken on the price. Sometimes exact replacement  parts  for specific equipment may run to $15. Forget i†	JY DAVID COBLEY.\\\r~05,40\\\I\K\Q\A\         When I first purchased my copy of SHOWOFF II,   at ADAMCON 01, I also purchased David White's SpeedyWRITE II and  SpeedyWRIT\r~05,80\\\I\K\Q\W\CPAGE 17.\\\\CREATING AN INDENTED LINE USING SHOWOFF II.\\\\BY DAVID COBLEY.\\\r~05,40\\\I\K\Q\A\         When I first purchased my copy of SHOWOFF II,   at ADAMCON 01, I also purchased David White's SpeedyWRITE II and  SpeedyW but not now!. The results with SHOWOFF II speak for themselves. This  document was prepared using the program, as I intend to use it in the ADVISA. Don't you think it is effective?.\\\\\         There is, however, one correction I would like to make  to Digital Express's manual on SHOWOFF II. On page 6 of my copy,  in the third paragraph from the end of the page, Digital Express  state that "Another limitation, and probably the most annoying,   is the way that the enhanced version MUST work with blank sp. I had absolutely no idea what exactly the    program could do, but for the asking price, I couldn't resist. So I bought it and bundled it home to Vancouver Island, along with   all my other goodies.\\\\\         What an extremely fortunate happenstance that turned    out to be. SHOWOFF II has made it possible for me to produce a    newsletter that compares favourably with any other in the ADAM    world, except perhaps for those produced using sophisticated      laser printers, or offset printing, such aWOFF II. The trick is in using that        ubiquitous character, the SOLIDUS, or "backslash" first. Quite by chance, I happened to try using a SOLIDUS at the beginning of a   line, when I was trying to formulate a sequence of lines in a     series of tabulations, not all of which started at the beginning  of a line. You can imagine my pleasure at finding that, if you do commence a line with a SOLIDUS, followed by any number of blank   spaces, SHOWOFF II will indent the first printable character, an  amount  It permits me to     decide how many lines I will have in a column. It permits me to   change my margins, fonts, print density, line spacing and         justification, as I choose, when I choose. What more could any    editor ask than that?. That it could transcribe hardcopy, maybe?. What a boon that would be!.\\\\\         I have been so pleased with SHOWOFF II, that I have     never learned the complex system of control codes, that go with   manipulating SpeedyWRITE 2 or SPELL. Some other time perhaps,RITE SPELL. You may wonder why I wanted such a collection  of word processing software. The answer is simply that I was not  satisfied with the results I had achieved to date, using my "new" Panasonic KX-P 1180 dot-matrix printer and either Walters Easy    Printer Patch or Terry Fowler's FILEPRINTER, to produce our       newsletter, the V.I.S.A. ADVISA.\\\\\         Quite by accident, on one of the sales tables set out   at ADAMCON 01, I noticed a disc copy of SHOWOFF II, complete with the original manualaces. You cannot start ANY line with blank spaces -- they will be       ignored in printing." I'm pleased to be able to report that this  statement is not precisely correct. If it were, how would I have  indented each of the first lines of the paragraphs in this        article?. With great difficulty, I suspect!.\\\\\r~45,80\\\I\K\Q\A\\\\\\\\\\\\\         The fact of the matter is -- it is possible to start    any line with a blank space, or several blank spaces for that     matter, while using SHOs I suspect is the case with PSAN and NIAD newsletters. I am able to format my material   in newspaper column form and be certain of the eventual print. I  could print in double column format with FILEPRINTER, but I never felt that I was "in control". Just when I thought I had           FILEPRINTER figured out, it would confound me with some new       wrinkle. And I especially did not like ADAM deciding when         printing of the second column would occur.\\\\\         Nothing like that with SHOWOFF II.equivalent to the number of spaces, "after the SOLIDUS".   It ignores the space occupied by the SOLIDUS like a plague, but   carefully counts the blank spaces between the SOLIDUS and the     first character to be printed. So, if you want to start a line x  number of spaces in, remember to create that number of spaces,    "after the SOLIDUS", in your screen copy. It doesn't matter       whether you create the spaces individually, using the space bar,  or collectively, using the TAB key. ADAM and SHOWOFF II wlong as the result suits your      purposes, whatever they are.\\\\\         Having let you into my secret, I suppose you will all   be considering switching to SHOWOFF II for printing your          newsletters. Good show!. I'm sure that Sol Swift can use the      business. In case you don't have his latest address, it's Phoenix 2000, P.O.Box 1292, King's Mountain, NC, USA., 28086. \\\\\         Give him my thanks when you write. Without SHOWOFF II   and the ADAM News Network, this newsletter would stiled by a SOLIDUS. But SHOWOFF II has been "taught" that the  SOLIDUS is simply a "CONTROL" character, an "unprintable" thing.  So, it chooses to ignore the character, or chooses not to print   the "unprintable". \\\\\         Whatever it does, it serves to create the effect the    writer requires, which is to print the first "printable"          character in the line, a certain number of spaces from the        beginning of the line. Which you can choose to call "indenting"   or tabulating, or whatever, as ne of the best Adam newsletters that I have the privilege of receiving. It is small but its price of $ 5.00 per year makes it a  real bargain. I strongly suggest you subscribe to this fine newsletter.In additonal PSAN has some of the finest PD utilities and other disk   collections.They have given us permission to place some of these PD programs on our  ANN disks. This month we have:Soundex  A  Which allows you to edit and file names in soundex files. It is called a telephone assistant.Bntcolor  A  Mol be         somewhat less than it presently is. So, not only my thanks to     Solomon Swift for creating SHOWOFF II, but also to Barry Wilson   for creating the ADAM News Network. But the ADAM News Network is  another story, to be written later.\\\\DAVID COBLEY.\\ effect the    writer requires, which is to print the first "printable"          character in the line, a certain number of spaces from the        beginning of the line. Which you can choose to call "indenting"   or tabulating, or whatever, as ill      treat them all exactly alike.\\\\\         Until I mentioned it, I wonder how many of you noticed, that each of the paragraphs in this article were indented. Now I  don't usually indent my paragraphs. It's a waste of space!. But   in this instance, I wanted to impress the reader with the point   at hand. Namely that SHOWOFF II will print a line starting with   what appears, in the final copy, as a blank space. Of course, we  know the first space wasn't blank at all, don't we?. It was       occupi9011-2From the MOAUG newsletter - Pat Herrington - Editor.TENNISany1 H   Pat Herrington      Information on ADAM suppliers and the state of ADAM..BIOS_7_90  H   Jerome Hess    Information for those new to CP/M.BIOS_8_90  H   Jerome Hess    Part 2 of "New CP/M'ers"JYT_8_90   H   John Y.Terry   Chapter 3 and 4 of 'Fundamentals of Computer Programming'..===========================================================THE PUGET SOUND ADAM USER GROUP of Washington State (22607 SE 322nd Kent WA 98042) has olong as the result suits your      purposes, whatever they are.\\\\\         Having let you into my secret, I suppose you will all   be considering switching to SHOWOFF II for printing your          newsletters. Good show!. I'm sure that Sol Swift can use the      business. In case you don't have his latest address, it's Phoenix 2000, P.O.Box 1292, King's Mountain, NC, USA., 28086. \\\\\         Give him my thanks when you write. Without SHOWOFF II   and the ADAM News Network, this newsletter would stildifies Adam text screen by changing background, text , etc.  colors as well as in inverse also. Read Bnt-DOC in smartwriter for further details.EaslPaint A  Allows you to draw your own high resolution pictures, save or retrieve drawings.Alphasort A  Sorts items, prints them to screen or adam printer.TextonHGR A  Shows how to print text on your HGR or HGR2 screen. This   program loads an extensive alphabet shape table. TO USE you must also  have alphabetI on the same disk. (I believe this is the shape  by the author, Thomas J. Keene, of the Inland Empire ADAM User's Group, IEAUG, of Orange, Ca. USA.. The article was provided in CP/M format by the author, and was converted to EOS by the undersigned.Approximately one page..SHOWOFF_II H This is an article, by the undersigned, which describes a method he has discovered for "indenting" lines of text when using the Digital Express SmartWRITER Enhancement program, SHOWOFF II. Approximately two pages.B. David Cobley,Newsletter Editor & Corresponding Secre==================VANCOUVER & THE ISLANDS SENIOR ADAMPHILES..INPUT TO THE ADAM NEWS NETWORK, A.N.N., FOR SEPT/OCT. 1990..PLEASE NOTE. All VISA files on this disc are formatted in SHOWOFF II, Digital Express's SmartWRITER enhancement utility. The format is intended to print the text in double-column, compressed-italics printing, on standard letter-size paper. .SBASICEX01 H This is an exercise for teaching the process of SmartBASIC programming for beginners by providing ongoing typing practice while ex by the author, Thomas J. Keene, of the Inland Empire ADAM User's Group, IEAUG, of Orange, Ca. USA.. The article was provided in CP/M format by the author, and was converted to EOS by the undersigned.Approximately one page..SHOWOFF_II H This is an article, by the undersigned, which describes a method he has discovered for "indenting" lines of text when using the Digital Express SmartWRITER Enhancement program, SHOWOFF II. Approximately two pages.B. David Cobley,Newsletter Editor & Corresponding Secrember Charles A. Smith. The file includes a short SmartBASIC program listing which serves to illustrate points made in the series.Approximately two pages..SBLISTING H This is a listing of a SmartBASIC program titled "Hidden Numbers", developed by Francis Naish, a founder member of V.I.S.A. The program is a modification of an original program titled "Mastermind".Approximately two and one-third pages..PRINTERFIX H This is a technical article on replacing a microswitch in the ADAM printer. It was providedtable   file).alphabetI H  See TextonHGR. (I tried bruning this by itself and locked up my set).ADAM BASE A  Filing program for organizing lists of data, etc. Read ABASE DOC in smartwriter.CrunchMAKE A  Makes binary file called cruncher. Read CrnchDoc.All of these programs will either run or brun in smartbasic. You must  load smartbasic first to use them.We appreciate the contribution of PSAN and hope to have other programs of theirs on future ANN disks.=========================================tary,Vancouver & The Islands Senior ADAMphiles, V.I.S.A.,862 Shorewood Drive,Parksville, B.C.,CANADA. V9P 1S6.Phone: 604-248-9567.===========================================================READMETWO A    Dean Roades    ANN       This file, which describes all the files on this disk.  My thanks to PSAN and VISA, not only for their contributions to ANN, but also for the README files they prepared.  It made my job a lot easier.ical article on replacing a microswitch in the ADAM printer. It was providedplaining the ramifications of each step. The exercise was created by Francis Naish, a founder member of V.I.S.A. and a regular contributor to our newsletter. Approximately two and one-third pages..ADAMCON 02 H This is a report of the activities at ADAMCON 02 which took place in Mississauga, Ontario, Canada during August 1990. The report was written by the undersigned.Approximately four pages..INTRO_SB_3 H Is the third lesson in a new series of instructional articles on SmartBASIC programming by our meåååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå