LBSOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUNDINVALID KERNEL FILExةw,@  4  J  ȱ⩤i8#) ) 8Le /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// SIG, Washington Apple Pi 7910 Woodmont Ave. #910 Bethesda, Md. 20814 (301) 654-8?(TREESORT.HELLO aǴ!o-(TREETEXT Ǵ!o(TREETISE!&?Ǵ!Ǵ%%SEG.T jK1Ÿ/ Ǵ-!״)*MENU.MAKER K1;*QUICK.NOTElǴ.!*&SORTER  Ǵ!o$*SOS.DRIVER o4fǴ.!/ *SOS.INTERP 4keǴ.! *SOS.KERNEL @,VǴ.!aIII.BSB.01IC.07u' *AUTO.BASIC [-Ǵ/!o)/AUTO.BASIC.INFOAǴ!ǴDISKNAME.DATǴ!Ǵ(FILESORT  Ǵ!o(HELLO Ǵ-!Ǵ *HELLO.TEXTm#im#iЛ#Lȱ  6L憦  Lsmm l y` @8(Je稽 ʈ060 WELCOME! WAP /// SIG Public Domain Library Disk Category: Business Basic/3BSB-07 Disk Format: Self-booting This is a disk for the A CONV&CONV$CONV%LEFT$RIGHT$MID$INSTR>=<^/*-+NEXT WITHOUT FOSYNTARETURN WITHOUT GOSUOUT OF DATILLEGAL QUANTITOVERFLOOUT OF MEMORUNDEF'D STATEMENBAD SUBSCRIPRANGINVOKSTACK OVERFLOREDIM'D ARRADIVISION BY ZERILLEGAL DIRECTYPE MISMATNDEELSCONLISCLEAGENETABTSPCUSINTHEAMOSTEANOEXTENSIODIAFNOAAAAAAAAAAAAAASGNINTABSATYPRECAAAAAAAAAAPDLBUTTONSQRRNDLOGEXPCOSSINTANATNAAAAAAAAAAAASTR$HEX$CHR$LENVALASCTENAACONVOERRLIERKBEOTIMEDATEPREFIXEXFNEXFN%OUTREINDENAAAAAAAPOHOMA SUB$OFTRACNOTRACNORMAINVERSSCALERESUMALEGOTIRESTORSWAGOSURETURRESTOOALOASAVDELETRURENAMLOCUNLOCCREATEXECHAIAAACATALOAADATIMAGCADEAPRIssssssssss\3!z~IssssssssssssIG%ӓ,ssևwn7}|tttUUZ{fzxxˆU膅[L<^ENFONEXINPUOUTPUDIREAWRITOPECLOSATEXABYAAAAAWINDOINVOKPERFORAAFRHPOVP̠Ώ h:gpOn[n٧s]ds3issssssss0b>&dsjs|T}|s[  !"#$%&'()*+,-./0123456789:;<=>ŭ᭭򭭪𭭠򠭠頭퀠Šӳ頠𠠀𠠠堠젭ӠΠSOS NTRPRHeLZĠР쁭堠堠ՠP򠭠έ魭HER SUBROUTINEnSLOW=110xFLASH/2=FLASH/2):۴ =11:=07 FLASH$ SLOW FLASH:".d1/Menu.Maker": WAP /// SIG HELLO PROGRAM. SHORT VERSION 6/8/90 DGO :#1,".D1/hello.text" ž#170 (#1;ERIN$ 2ERIN$<40F#1/P=23:=25:"PRESS ANY KEY TO CONTINUE.":G$U".d1/Menu.Maker"T":#2;FLASH$:#2%dFLASH=110: FLAS But best information on programming comes from our Basic series by Taylor Pohlman (3BSB-01 through 05). On this side (Side Two) are two Basic programs by Robert Boston. An Auto Basic Editor and a Treesort sorting program. Both include documentapple /// Business Basic Programmer. Along with the standard version 1.23 of Business Basic, we've included many invokables and utility programs that you will find useful as you attempt to program in Business Basic. Manuals are in the WAP office. CSTRING TOO LONFORMULA TOO COMPLECAN'T CONTINUUNDEF'D FUNCTIOVARIABLSOS CALFILES BUSNOT SOI/FILE TOO LARGWRITE PROTECDISK SWITCHEBAD PATFILE NOT FOUNPATH NOT FOUNVOLUME NOT FOUNDUPLICATE FILDISK FULFILE LOCKEFILE NOT OPEDEVICE DISCONNECTERESOURCE UNAVAILABLDIRECTORY FULDUPLICATE VOLUM ERROR Please Press SPACE BAR IN PROGRAM INTERRUPTED%&'(%+.@C$DE FG!H"I'MN#PQRTW(X潭`: 808`:dd@՚H Z#IJJ iLOPP$pX0S&ȱhȱKȱLe潥ɂ逅$L# $mKL x~ m khLgLsLc h5逢)&a TH THLgL6k8:9: STT`)ɀLK$Lb8gLOPPKLMNhhm Vf0 mLf) mWA 0 -a mL8fW;8<< 悕` 6kLU*i kXX 4XLy \\'_ch_chbi^g \ihh ] Qp aj ih `p b iq bqn %jjg56Ly { b bq | XHWHHHֺh$PLh wlȱȱ%$LWH mh x~  m#W", mȱ28eLeji`Lwl mȱ"Ɂɂ ȱ :, iTjj ȱiVjj8逪XW0 Vf0WHW$ 0X: h ,@dd )e dʙdH &eh(dL ddک,ddLd:e``eLeHELLO ue 5eLse6e:7ee8ee:e`EAd j @a(% -, bLs j {ghhL<^gHhHhH , - b j$% @ag5h6h6hhhhh8g5h6h 悅`6 "]La ud `L  d.CONSOLE[[ TdSdddddd0 ddddd`dd A 6 s e 9c()' 9cKHLI jLdj89弅:彬: 悅`H hɝɞɜ)`dd  6芅 e ()'` e'()HKIL 9cL>hL<^) i!Ls j @aLK$L% :: 悅 lc!)` +b` +b` sL :b#`L,H s h ऊL(,L8f` A KL jLdjOPPKLL h AKL` Ѽ   (`H shLs Aji!S)Lt`SSS`L` z :0.`9::hhgg.%g& $gegަhH逪hhʰ` ҥ [ aLT ҥIJJABB=>>;<<?@@T ě hhhHH  `89$ 0~!L`!sm?iٰcL`S )!a{)Qi ڐ߽S) -ai) -aɢ ɣɍж$HS -ahʥ0SSȩ5%"/װ&hԐɈf0ɔĐ 8,f 8f L_ʅSS=ȄL`ȱi8eiidHddhd) _ ƢLh _L>h jhP _S @a-Qggeg5hih 6i6 "]S" ]$%SSSg a aL^ S S`La8 SiUjjS):,$f 0$ p fHhH_HcH uhch_hhhfhi0hhhB B A` ֥'( )&񦕤LNKM$Lb ě $m wl "m6X6+5 56ɀ56H $mhɀ(Z)& mL k~ wlL ͝dL Nsd# wl^_ ꂅ__hg^`8 悕`gHhHhH5?6@6@*5g5666gҦhhhhhhhhg:e:;e; ;m;`@c@c?be^@e@ _m__^ \Lx] i6g55``BY BSAMHH H] LPL(\)&P ěj9ȑ9ȑ99i=:i: >i>`Ɂ7XWWXjnXWi` ]?@@bgchch )^ ]b ]b^b^L\b8g+H__^8_ABB 9::)ѭ [ I[ aυ婶ZeLLL^$%Lae LGidFddddddd.ddddddddd ɕdˏd`Ls  Apple Business BASIC v1.23 - Copyright Apple Computer, 1980-83 d wlOZL^L^-L(dPL<^OPMNKLhhLg` Ls ҥ?ieCiLa,  aFL s a iLg ]hhh5h689H: H:HLHKHH6H5HHH` ui` pi` Qp j pi `p i` j jK$L%8eȢ 9:: Ga.ghh 悅` A` \\ɾ,L<^hhZkKhLhhhe9e:: mLg jei `Ls j:,"hhhhLgɜEɝDɞLb Hɾɺдmhɾ Qp aj pi `p j` jLi j,656 wh H5Gh`lmm566 Lx5Hȱ5ȱ5 F665 w56h(` x("LH)&h`( '&'`lmm566LxĠLx znInEz{iLx y? zL||uu`8i$iznIii0ĨV y${Wiuu8Iem_B_B`)&N> ȱI8gJJ hhge ghh f feLH>H= x\L|F )XHABB8 __^hHI8e^ @1 @+?%GHHHIJJih BABGHh`$  ě u Дs IJJ^__Lveȱeȱe `LćHƽ Ƽh`$ lȱlLL{ɝɍLɎСL s HI s shmHmHlHHɦ# shmHmHlHH , hHLt  ,, shTTLui ui,L3$0 |Lu xijk6kxyy xxy6i L[ s r$PLsi,L3-hLs L*tɘcɭ_ TTLdd`jk8L|L3L3TL3,L3i LL r$PLLBLsș Ȅ ( qƚƚ` s s),;,=,#,(,,ѼLL<^L<^ llmm$P$?TUJ)TU  ' Lsi imLqLsh E0`H ty ))ELyq  8 $0!PizEn{dUeUi hLqLs `wLr !L2 {}$ 0`QɀX zLs.+"2mXm tL qXXW zzEn{i x }H$ ]kh8 )KLe9e:: }Lgi , p s$8$0p`PL<^Յ H s r ɀ ȱX Hih0 & ?<I?iE W Lq s )L<^ȱQȱȅR dj sLHoUVV$ LhU Lp$ LL<^opL^```?EXTRA IGNORED?REENTER $0pL,`LgXW ׫ k*iXX 4X \\L<^Xii7 { n k$ |WlXVVE$ P% eT{||Hd ̐h p IkLo00$0 L>o "m nV dj$D$ P 膼Lo$0",i [ kLoHSHhp< {}$ p0H 07h ]k ,LmUVV `p F sLn 2 ukLoF вLm jȪЖ LL<^~p l nhhLgOPP` Add# 6d s S SS@Ln A " r ,; s lLn#f  ;П ⭩,SLn "mʆ,S _S% nLh "mL_T ST#L(, U VV ׫$ 0  QpU= d hkddhe##5ddˏdd?Ll ,?#$04dHHd = d hkddˡddhhd`LsL#&F  ; s b 0` L+l$ Nsd#Lzm566ȱ5Ll H# wl m#͉LchL$m QRKLLsh$0LU$^`=8WW>X> 悅XXXL:^ g`L<^ l Jj bx bp,_;Ll  ~q$0P oՅ5R66R l ~ L%l $m0 =k $m#`$L#i)8#Ll  s s( L7bʊ# L-l m hxd5d$0H h`L^bLb$%/%5$ &5 &5e$$5e%%$&%$e$% Lk ׫ sHH ~qLPkHHh$0'ph | ZlWȥmW`L$|hXWXL-hm lmmLkl VYZZ{|| w ᐥlmmYZZ LxWXX ox ExYW# kXX 4=^W^0A,lkj |yjJkjlkmlmi in`emeymlexlkewkjevjLkyi&m&l&k&j8iIiii9fjfkflfmf`nIngjIjgIm lkj`L<^}i0vvvvvj`Ly^Vy dv88; 54541r |LiHi z xz U{y xy рz xh '~z zLz z~ zm zl zk zj zL{LyJ eyexew~ev~f~ffffJ`5665y5x5w5zEn{z t $mlmkljkij8ihn`L,$0DpA q enHi80 @Lyu \ % @u ćh `&m&l&k&j`2L0 և yxLT}$0pLI oբRLi `u LLi u Lui0 ܆ چ,,% п 擩lm0u 1eL5665`iɀ*iH i  @8 ei $ tutt tj ȡhn` t` 0RN0R 0R$n-RRR`i` p`5665i`$0BP?iH i hLbe55f5f6e}Lme6u5u }`6ʈ`v`jip` ? #  ue }~ %u $ چ 0 u}` L uu  ) }Li <i@L{i$i0 p $ 1`ui` LL Lbb `}i~ei^~0] e e^`}`566i5`_cf_cfi^eub` ?^qbep`L<^ ?8b^e` rp`I` ? ㄩp^|be #^b ebbu|beiee^^iL56^f" ऩ थ (! ( ऩ थ (" ( द!LGb8Lऩ@iu +-ELj) e | ^ .' "5 1 p) iIii i)Lm` ?i $0 ׄ $0 $0 ^`Hhth`^Qb ^^ 8` `H Jh(L悈`H逨h` Hh8 Hɀjhji` HihJi(`  ~q$L ɺ b$P i pi$ȱLdjɻƟ dj 柰ީ Lihh sLg  s ! b   s "!!!+|] {n LU{HLʁIڢIڢ-(h#5ᆥ](IڢʥnH BiHɁy U{y рhɁ xhLB` vy{| g|S}dpL}Qz}c0~~D:~L̑56gh6hegehh `iɇoȘ戅 aziȅ xdo`Abi$nFn) i  j g g ^ ܇.Laz͠Lć ^ ׄ& ć ׄ ć ͠L- x |z K{ | T}{ x xnH yxn0 I B xh B Lр |  ZuL.y +|z% T}uH }h{ ~|H !z az ~hJ inIn`L~8;)q4X>Vt~w/z*|cYX ~uƀ1rP aziP | |iɈ { T}i8Huiiu x BU 瀩{h z` |] az 뀩]Laz | i8fe.șR0șRmymlylkykjyj00ڊIi i/ȄȪ)Re.șRI)ЪR0.ȩ+f.8f-RER/8 i:RRRRRR`y`'d |Ģ { &{f o0`LB ` H$ge &{h 80 '~L}H |h |zEn{iLxf d$h0Ly ef q80fL}COt#t$JZ mLKjk8 | ~Lm ^|-$nșRnȩ0iL f~ azea~ } \~ } &{e B{e yx %}ei0nihoi8傐IL|`7 z!L|iD8$n yiLyn)FjjjLyiɠ %}nnI*imLyjklm` s e-o+ smo..IE)2s S -+fh r$h8fL}fg s$gPf8ef B{f65m5l5k5n j5i`d,]WXX566 |m5 ^|l5k5n %j5i5` |m l)m |m`znth` |ht`i  y my`i n*` |jkjI*mlinLyFn`nEz0ʢiH xv5ui`uei0,iiL0y{n`nI0hhL,yLy |i{ xi` |={{ {LZ{ zL{ |8ii zivjwk xlym* 蕁24(y&x&w&v0⨥ymyxlxwkwvjvL{@jjj)(L{L<^~jklmL y56}5}} ,kk} , kklm Lٓ[ 80@ 6 2`  dkH) ojhJJJJ ojL 0:i`L<^ jHHHHHH s jhLyqhhh6h6h555_ȱ5VHHHH %L/5H6H6HH ?5^6_6_hhXhXhWLk ? % ?Џ`5566` xe5566ɂ66` s p `  zLseff z.!'$ iߪ$ 0 H8eAi\h$ P8 (Lt$ 0V` 痠U` hh R LsL  z (L[ Rީ  @Y%(&:$LU s և ^|iHn %jHkHlHK s n ZlHmH5 s iH jHH楩e ) ,LsLR eՅ7V8U #   785U6VLΔU7e778ҥU^V_bcF_hcCgDhebbc \^__`U8傅UV` |UȱU` L<^ |UUƜ0ƛ ӗWqeWȱWqei W` |8UUWȥVUX`UeUUVUO / +'L U)łiV VL LI 8U 7ȱ7 UU ЯUVULU7V8 p L LZ U qUU qUH85h688V77U U 5qUWȥ6qUX7qWWȥ8qWW ٥IiV) V LVU?e8V je?e>e8U>e5V?e665e=e@eee8 hx57 xLCx8I77JJ8 88` H dhjL YYHH dYZZ oxhhe5566ɂ逅66 wZZY L YIL=m ) s  ʊHYImm shhhhYhZhZHHE` 3YZZ xLCxl5Ym6Z78ߠȘH yxy hL3 j kqHHHH s H , ,H s s ~qhh 1 lhhXhXhWWȱW7ȱW8 eLNLXZWX ` GGH HlHmHmH khmhmhlh hk8j7k8Lޒ e7788IjJkJk )lmm'&`UR{R||L̐: / cRRȹRRȥ Rл s `Lsh sh5lh6mh6mhxhyhy x x Qȱx7ȱx88 Ƃ 7e7888ł75 楽HHȱȱ6H6H5H s =к bqhhh Lshhhh` ~R/mZlmYZ PujHkki^^`H"h{||kjkȱ{ "ie{||  V{|56|6 w&5L<^i8e` ě u8A?pB@B@ )onL܇jkL| Nsdȩ8 NsdL2Lа,L<^ A s ׫ g iq s= sXHXHWHHHH ajL? b rLiq HHH s iqhhh5ȱ6ȱLI65 g5H6 2|Hgȑgʆ5a g5ȑgȥg <^^^__ɂ逅____<;إy6 hlhm^Ȋ^LL:^ȥ5^H^h ͎el5emȆ6п  ͎e^e__ iLZe *& eegggegȱgehh Ľ ,L<^  8` ^LQ ŠhhL6 $P 訽5 ͎56ۥ 8ee L:^?be^@ce@c __^_ \__^;<<6  $Phihi^Ȋ^6h656H |mHlHkHjHiHl5 8eeghh^__` HHH H bqh hhhn0iɐ1 }L yxL%}\i FHHHHH 6hhhHHlm ,҄ shh)>=>hgh<<;[a{p ;<<ccb? @c@ube.a{bb,\(eb cc`ebcA[8饰 a{8`8\e@@He? ]@@?hbbb0 ea ȑbc8L@ @@h57Ri88 pi UŦLUUU HHHHL 2hh LW iL 2hlhkhn jhimhHɗ8 Ls`LIŚ1CUDVDVU Lŧ 0 7U L`L:^֩ ŚEĚ L| Qp QeeRee8 1  sL͙ɚʚ `pAƚЙϚŚњ˚ ̚8 悅DDF͚ Κ8 DiFEC CD)ӚDmӚDԚCBКLěŚAݚ⚠IȌ 8 ꂍ  8 ꂅJJ` ! ɃɄ b`" lJJJJYe s ˰L8Ls LԫN l@u=ekPe tMe )llNesOet NeOetMeCOeNeȌ=e>e;e ƬƫHH ,hohp` ɩCe0R`ȹR`ee?e@e ue 5e T L=e;e`Lso`n}pm aa`dyopd8isŠt`dyoopd8ip`J uv`&&&8孪孪宐橈`! @ uA?B@B 悅@=g>h>h ]=i>j>k a=g8i>hj>h 悅ki=5j>6k6SOS KRNLb.D1/SOS.INTERPŠ̠Š.D1/SOS.DRIVERР頞 0 ) (lH'&3&'&#e'#%e'%'&"$"$#%'#%h`$eh`L)i   HH `TH..TH..TH..THATS ALL, FOLKS!R`RT RT`#RT RRRRR`0R`RR 㵩:RRL㵆  ~ RR`BLOCKS FREE: BLOCKS USED: TOTAL BLOCKS: sj]"]\AjiGa@aI[5x<^sě xCxEx5eҥV{}g}gkj̐kIk~^hT}27uejewsHH st\hh H PASCODPASTXTTEXT PASDTABINARYFONT FOTO BASIC DATA WPTEXTSYSTEMRESERVRESERVCAT RPSDATRPSIDXAFDISCASMOD AFRPT SCNLIBk;eo $'>ed?eehi?e ueL5e qrL,op ɩ`et?ek;e`hZ L<^hZL<^L=ee>e ?e`opqrst !e5ehe?eLje LjeR=89R>:>:iR:RiRRiRL`8(RR(`EeFe  s bq Vml0L dMeL` bՍe :RRRiRȐȰRe9Re: J 2IHJh*=>> 95:6:6R L1 1Lԫ`L:^  aFL^R, ue 5eLڭR7>e?e5e?eJeKeLje֩ u>e?eՍ "] a a$% iLg֢   sLj$%`8f  a e ; ` s ɩ` YLILcopL7 z0xH ׫$0_ ;h8fH`aai shH2 h zJJJJf Ik ɩ` ̬ t os YLA ևLLק jWXX` ׫$`ɥ%e,ȥ,*,- y,,,-,,,ȱ,,- yL+,ȑ,` 2"p-,-L(Ġ %>,i-i8, ȱ,%,W,pp ڠ %p`l  " ) i ?ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij0 `8`HiHiH ihhȱh`86)IH)heuQɸ` ` W` ] %饚0` W` ߰4`)|E8LLLRLLLLL*LLLLLhh`LLL`SOS 1.3 01-NOV-82(C) 1980, 1982 BY APPLE COMPUTER INC. ) `G`î** }*`o^`on 8 JJAj@` *?($`ΠņɠŠ堠РѠ͠஠әƆH v?c,,,,h߈ߢ~))`3PLLP*%(i&`Ѕ񩏍E H pph`XǠĠӠ!((ͽϠРРSOS NTRPSOS DRVR(.D1(YYYYMMDDWHHMMSSMMM̱忠ΠͽŠ堠Р͠Ю̠Ɔx߭J ʈc(()o/ e/''ʈ((''()(1i / e/''ʈ((''((''((''' ('`ŠDAY, DD-MON-YY HH:MMSUNMONTUEWEDTHUFRISATJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECԠŠР@L&I/O ERRORINTERPRETER FILE NOT FOUNDINVALID INTERPRETER FILEINCOMPATIBLE INTERPRETERDRIVER FILE NOT FOUNDINVALID DRIVER FILEDRIVER FILE TOO LARGEROM ERROR: PLEASE NOTIFY YOUR DEALERTOO MANY DEVICESTOO MANY BLOCK DEVICESEMPTY DRIVER FILE '(i%%%h}%%`8 ȥ!8 !)"qȥ#q#e$ȱe%L)%`@(((( % %`((((࠰$(ɠH(@(h((((@(`%z %% %~(A{(L%`.8(.Je.&ʈ.s(1 6$P8"ȥ#L1$8"ȥ#(ϸ`"##L]$"qȥ#q0,$p)@"q"ȩq"8`*$% $% 8% $L$* $8%8 $`8 &'$% 8&$'% 8$%%`H   q ȥ q Hi hi 1  % H H ȱ h h % $$ 0 e e H i hi âz %` 1 8`    # &ȱ ' # i" i# # #`8 ȥ H h `8 6$P`8"#%#%"$w"$#%"`荚ٍ荺 荚`荺``` D ( )  * ) 4* * h* ))` L% q ȥ q Hi hi  i" i# #% $ȱ %ȱ &ȱ '`<!((g %(r(z(q( %y(i(0z %"#$ %&' $"#$%&'   `%$%ɠ%* " ~#C #p $ %*0"#)#)i $"% * %*  L! {" j% %ƌ(X#"$% "$ #%%& '   ` {" & ɠ% %)  !( (" %(r(z(q( %y(a(0: %   "$%&e$'e% R % <`` LLɠ8`ΛLL渠`ǽi `< Ȱ+<#5 ې'` ɐ /ݐE`W8`R` 5&i ` Ȱ 0i `<8> ȐT eİF cȰB)Hh5 ˭)*ȑƑȥǑ'(ȑ`L)ɭ)Ѷ*e`M) `ۅH)Ѱ%}ʈh Qܐ'``hi ` p6۽ʹZ5 HȐ/i i `гW8`0( ɐ Ȱ ʮ6E`5 խ ɐ ޢ ȰLȍ۱Ǎ X̰% & !J8` *LĢ `8 iۥƍۥǍ`ۅ %  6 )Ѱ Ѱ` 𝭧e ǐ bǰL*ۈ5ȱ۠ƍȱǍ X̐ H h1  /ݐE`ۈۅ ۅ 8ƭ X̐`LLŠǠ  ݭv̅w̅ ðzv̍ŭw̍ŭƭ ­ōō T̰]ŅƮņ X̠8iȱiiȱi ṰŅǭŅ XLōۭ۩ۅ ȱ8D`F`8eYƍťǍŠ)͠ Wٍۭۅ5ۅƭۅ X̰ ìۈۑ T̰ۅƭۅ X̰ۙ%ۍ" T`K8`)` İ ۱ۈ` ưW/ۈęۈЍ۩@` 8 MƐ  5 Q8`LŅ ۅ ۩ۍۅ Lɰ ʰۅۄÍÍۙ'Ù ۍ*ۨ  Ѝ۹ۙ8v- ðJ ¥ ð, ðLO ʰƥLT`'  mې浰``8 8 nʰ0 ̰+泱Ƴ m° x̰ ̐8` m° x̰8 ۢ8 ˰y ` ¥ nʰ泱Ƴ T̰#泪 Ѳ *Ƴ ` L:Ϡ`泑Ƴ` LaĥH8`JȘ I8`  S`ۈۥۥ۩Íۭۍۭۍ հL¢H8`Jj Ȅ ۍۆeۅiۅ Lɰ ʰWۅۄ ¦J> ɩE` eĐL Ȑ 15WL QL5WW{5 ې'`,55 ې'` ݠ B1 ȩȑ Lɦ8`5  @ R㥶i ` İG8`F`X8``éۅĩ >` T֩xxMH]@ Kۅ5H ɐE$ eİ Ȱ h`h`8`W h8`hR`hLҿ i x +ۅ5ۅ6 ǰ `E8<W`­ `0XLۅ5` ռ``ߤeI`IiţO`Ȯʆ/ )󘑡`()0zq 滅ѺY Ueۅ5Ѻ Ѻ  Qܐ'`i ҩ *C8/y.i/ ȑ  © $ E7<3W`ȽLֽȄ @8`R ) [)_[AͰ")[)_[A:0/.ЩȑΘ8e * ȩ`Loü 7)?۽۩ W٠Յ<ōōř ռV7 uM78 V榠=ü#)@5 ɐ /ݐE ) .) @L `lqhٯ޿=ϓTXIֲ̛̐~ؠIJK,-NOPQ0vt Ѷ"` ɰ Ȑ`E`Ɔ X̐8`>>5Ѷ Qܩ<`>`\ʊJJJJ ۍ۩  ˰Fȱ X̰6 0 Lɠ 0ۑۑ8ȱ`H8` ɹ $  8JJJJ8 ` ۪` H hQ)fʅ F jF jF jF &!  eװ*  ̰F湥 ƹ`Z8`@  ʰ泭ۑƳ ʐ` ʐ` ˰ ƹ Wː`ۘ . . .۪8*Jۦȱ ˦,+* ʈJj =ؠ yiȩ`y4泱ƳHhz ʠiȱizLA`L;ؠ"  `1` Đ7@8V۩ Lɠ۪8ۊ۠X)JJJƄ X Ġȱ۠ ȍ۱۠ ۭ) ۍ ð*)#  O̰``)(`N8` ) xհۈ ̰آ*գ  Ͱ ݢգ LvL{ؠ;i ڥ(8` ְ( ȱ5 HȦ)`Lxץ: ש ְ⥺i ꥻ(8`Lx Lxש u )۠0)p խ.8`)@ ϰ) ϰۈۅƭۅǭۅ5 X̰ *ƭ۬͵̶L  ΐ` Wհ> H۪ȱHۑhƳh sϰq ` ʰiȱi `)5©éՅĩ5 }JJ+`.`8`ɂ )`@ ש ְO ֤FHۑۑh8`P) հ Wհҥ,J+j泭۪ƳۑȊ ) ~ fPL ͊.>.ʱ+,EP!.E.Lw+,,ӄ*- P*e (` հB հ5 Wհ0,J۪泭ۑƳ sϰ(` L Ͱ2 ~ P kҐ#L8 T 2ΠHHȑhhȑ`Ld )N8` xհ*eȱ+eȱ,i۠Ѻ۹ۑ񥤅- ť.Lcԥ.La Ͱ$)rJ Lɰ )# Ԑ) ͰU..++,,IJ/ ӥ-.?Цե,J+jѲ4Ƴǥ4聠 H hH kh8`8-ȥ.L 8*Ʊ )8 0*-`.G.ʱ*+,EP'.E.LұE0+,,ӄ*p-e  )LBѠٳ )8`i (` )N8`*eȱ+eȱ,i۠Ѻ*ȱ+L - ť.Lkҥ. ՅL ͐Ld ~ pа.J/)@߅4N8`) ))УJ8` ۑȭۑǠۑۑȭۑ($S8`O8` "` / 򑺠+* ͐H h8` ΰi `()  *ǵ յý5Ņ4gȩυɩč5 iψ }.8` iϙLIѠ ˢ L΢ ΰ LϠ ˢ ΰ1` Đ@ АP8`B8`ۑJJJJ -ѥ +jѲ84ƳJJ 2ΐ3泑ƳLTΩ潑ƽ`ƱƳ ΰ( {Π۵*+)e`8`)` J J + ΰ" 0 ΰ 🱼ѼL8`ǩ Ϡ` ϰ ƑȥǑ` Ѻе*`)ȥ+8ۍې  ,ѺLTΠ"LΠ5 խ ɐ /ݐE`C8`)@ ϰa)ۥ,8ېu+J,\ ȱLJΠ) ϰ'#,J(] { ΰ ƑȥǑ.8` { ΰ,JѲ ƳL΅ƱƳ ΰҥ,J0`#$"0#`!qȱi 5H5Ƶ ǽ jh5`L2̩ƍv̥Ǎw̩ÎL%ϠƄǥLj̩۬L~̠HHh` ̐`*ѺG0?M`)J"u-- M8`۬` # ː`  = O̰)= I`JJJJѶQi Lˢ  0 ̐ `"L˦ `H8`8$$"$= O̰=`$0`#$"0`$Jۑĥ` İo!)N8`WپX0 ĥLä X0 ĥLà !"#$ Đ2@H AڰCŰrP` 3ڰ(` AڰѶ? İG8`Fە1 ռ İ ЩP߭)@N8`1@8` Aڰ񈱴ۈ)ۅƭۅ X̰ 3ڰLÍLT̥L㼠  ʰ` İK ХP8` LɐH80)N  հ)@LO ˰)0 ̐` M ­۠泭ۑƳѲƱƳ X̰ Rڰä,] Xx,f (I0јIFjFjFji```x@gŽPy+wLwԠ͠ŠԹ.D1 .D2 .D3 .D`HJJJJh)y` (2ϩ 1ޠ== f ɰ`ޭ`5=(5= i Х(`=H hDC5 L3ܵ ɐ /ݐ 8`5 ˥JJJJ8 H h ` ܠ825H h5 ɐ /ݐ 8`Hh ܥ5 `ɥܥܥܥܥ5`܅܅܅܅܅5`( ݰ)Ѻ ݰL ݰ泱Ƴ ʰȭۮ ʰͩΪΩۦ eװqȭqLJ  ˰Aۅƭۅ X̰2%&N  ʰƭ X̐`Ӏ堁ӠҠՈ՘̠ƠŠӠ̠ɤӮȪŅ͠Ϊ ܆5 HȰ4 )ߍ) hjjjjۥ0CF = -$(L !LLL&L L-LJ٥eƦ ,L  # ` (L.L…ҥÅӭƅХDžѥL1LUȑ  i ߩLL )  札)  ҩLL` **éL0;` H ) abRcdTefVghXijSdfhj RR`^0U ` 0 ʠ0 8 `ůàՠԠàࠝӢӠ ȠDž̖͌͊頀ϐωŠŠӠҠȠγ`%!^0 ^)@`a R =` *^)ـooL]^)?i |TU QTU]qUoqTITsUsprRprqs]ToUXa` RL=Xa` R` *R`X`U T  *\AX[ @F\B9ɏ5\o*Ɂo)[[ @^`U V  *C?^0: ݳ ٢ ^)?i` *)@o `p^ XiH 1h `)X0 8~X 1`C X`)X0`C РǠ𠠐ŠŠӠҠȠƠŮƠҢâӠUAQY @?ZY 9ZYY^TU QZoȥɭ }`` ? }``  }`X0i 8~XX0H }h襯` ©Wéĭ }0W`F X0A */5BL. zF`LLz Lz`Y `Ơ堧 B k L( LO  %   }` ` ?!©UéĩU󥣍V }`` ?)) $p10LYeieLVȱ d0L`Hȱ hh` WɸSI I.ȩ8A 8ɸ4ɠ(H)h h8   `    i Ȣ d` $,)?P^ GL㢮 5L}P.)(Ơ L`ޠ LR  稱 I)0JJJJѤ  БĈ` H`)à`֩ нѽ>`]PU]]UPPX0 0 PPXPP  į󠠩ҙ̙ɠΠɊՐӠӢ̢ՠҠŠԠҚРĠ鱃ԠȠࠠLQ  * WHHH>%H H @`)h8`  HШБˆeЅА SYSTEM FAILURE = $hh8`hhhxآY_Z@tPRVT,p S JJJJ ) ʍL@ i0i6`îӉ͠堧ǥӥ``HhHy)(h`H` 0L?i `h` `` `x)( 8 `jjJJԥ)եӬɂ )Ӆ҅`  `H0Xh`Π'à̠ȈL` 8`څ  Lk%  Lk8Lu텚8嚅 L L Ld V ``  h` ک V `ۅץ  VLFx) ( :` H ) L  .P'pб0 &L:L5'8+8`0Fܢ` ř,Ř 0 8f)J DžŠƠŚ̮ÎȠ Ӡ̠Ӡ` LL#L/LL'Lgab `abBcd cdBrcadbho:ab.cݰdDcݰd8abҊ v+abcde0f`   cCȱcD C Ea  UV 1 ELUFVG FUUCVDեYCWZDXWXCUDV[ v`b0WXYZiUcȥVcWX eeYZ ggE` @SATRnpqrstuvwxyz{|}~GA7  3  5  >>< (&20 *, **>> "2*&" " >>  ">> "8""> """"""< SOS DRVR"CUSTOM.3 )((8*,;((*,((+)((9/(p((>3  =9 :9 .(~|L|LNqooGoDDDcc0ccpc]]c"QM"|@@pAATT**| numbers, this program will permit a screen text printout whenever a keyboard input is allowed. Use the KEYPAD NUMBERS for this command. You will see a letter at the upper right screen position indicating your selection. Except for programs which have redefined the use of the keypadkmen to your printer. Use Control-1 to request screen text printout. Control-2 will toggle from normal to condensed size print. (if you have an Apple DMP) A QUICK NOTE: Included with your SOS.Driver file is the Attach.Driver. An explanation of how to use it follows: The "ATTACH" Driver will let you send a copy of what you see on the scre  )* i LiHh`PQPQ>P Q,PQ"PɀQ@PAQ`8`nɀ<)nopoLpp` 0h8蘠fȊf` ab 1abo)abaݰb L9c`` a N0Ioa0H ha`pLopna n`  3ɠ/8 L %iLɠ8逨J Hh $`b >_-%^%p_^^_ab"08^c_L8^c_L8^c_L8^c_ȑcc\] ab^_ ``aV R0M bba dda `Q8STRQ ST`c\ȱc]a  b 5DU e\^e]_ ^_ ^_LH8\^]_?Je\^e]_,78\^]_ ^ݰ_ ^_LH^_ $bL@A^_aoQ*@A RQL@A `T8`RLSJTKQHIQiHiIKNJ)M8逅OPOPHMIN'a MHNILHOIPaOHPI8JHFKIGFGaHMINNMʆSTL8HSITQQST>> ""*:<"">""""""""""""">>><2"<""">""" ""  ">"6**"""""&*2""""""""""""*,"" "" ">""""""""""""""**6"""""""> >>>xri ՄԐhh, (MIPLIOKN`ȑȥ.- * ө<ѩ ϩ - (A= NL% AҩA N= ,>- JD)3E)X,qȑ ;?L x0LC L '5դԦ kˍ12/ *̍m%%#$  " ` L ``(%, ( *x (I  ) (j` DÈ` ȑ`! (`.-LLL$?`?` hh- (*J%/hh`դ8eԅԥ `)ߍQI "L), (3C> SHJI̍ƅԥDžծ*x (3'͝ )X@ @ ' (  L "x) Q(`x)(` 2H1H` (& ( ( (##D0C 3 "'*CFMRZ_ '058FV[fjsuw;Profile Driver -- Copyright (C) 1983 by Apple Computer Inc.`.PROFILE&%1  % &$0) `/0) `,.0L tHsH`! (xy```,.0L HH`Ln,/023x #) "# (```'+.`% (.L,/0x ('( `,.0L& (,.0L7 Đ`ʥ逅8n134nʐ3x1eʍ1,/p/H h(eʅ8ʅİLa )`Y)D00L:1?24n2")Copyright (C) 1983 by Apple Computer Inc. HH` (# (KXT .")"#)  #`,.$ ()-'( / GMRU[`chnqt{ "/258:GTWZ]`cfi "%(.:?BSerial Printer Driver -- Copyright (C) 1983 by Apple Computer Inc..PRINTER AШ١ވH)Ih*#ЭУލLȱLȱӌLLȱѭ)I yJн%yK8 ѮIЬI,LIЍ/5ȱЍ069Ј8Ј Щ`JP (` $'*169B˷L H)H2Pʈ2˷LGDB ЭC-íHέ''G 6`,HH)Ʉ ) hHhh`. 4`.04:A`xLIB <BAC <C>н8 Ѡ .CONSOLE"NRP)  P`'G'Ȫhh`̽G` )D$6E%7F# D 5 (˱E$i$%6i67Fи$i($6EИ P QDL8H\0`(d  $,($  ,JATTACH.7A1 - Apple v1.3,1.31 - Quark v1.2,1.3,1.31 - rem Cue, exp Nor|CompLJ.ATTACH `e" .PPRINTER NQ12{y SCREEN DUMP ACTIVE >88  >!SHOLES 1!1!2@23#3#4$4$5%5%6^67&7&8*8*9(9(0)0)-_-=+=+\|QWERTYUI OP[{]}`~`~ASDFGHJ K L ;:;:'"'"ZXCVBNM ,<,<.>.>/?/?d0hp00000>0# #0~$ <"<"""<< <"""<"><$""< """"  "" 6***""""""""""<""< :< $"""2,"""""**6"""""< >>>` N=    `H Wh (0­1í2L-. * <өхυ L"= N8 =i N% JL@ҭ"A N! xLC L 'Lp- >)AE)H ;LLW x0Lx:9,<0 `Ld L)(I bL)8 ʪi)I8R & h:1ߠ*x (,< K 1x ` (`98  bLH8 xʍ6ʍ7hh)ɄJJRH88,< ʠʠ &,<0,80ʬ8ʠ6ʠ+È`&È` & IMk`4`5`6`7`8`9`<ȭ=` & @jI`:ȭpȭqé,i0L È`,g HH`LL! l      5  Hdcefh&+si  M0    x) `(,  LuL-upp<`uqq=L: vuL L L <Le Le ,g0L HH`! ( 9EKQWbmz`(" ((è%È`2ȭ3`1`d`c` C9L8 ; ;k`;);k`,@`<,m p<L<`<p<`,ms<L=q=L: ,lXL ==L: ,lCL <=L: <,n)LL8 L8 u:L8 ;)ߍ;j`; ;j`uBL8 uCL8 u)u;) u;L8st HH` MjH,: <J h̰ <rh,oL`%CYgu #1:CY` 9C<m><=m@=>@?AL8 >m<>@m=@<=L8 <m>?=m@AL8¥Ӆé҅L,5,6  & @jIH,5 p  He҅Ґhe…å逅h,23Lhґȥӑ,10 h0  `,g0L  ҅ӥĥŰ+,0p 4 Ls  Ls i )"|tȌs|ԥ f0)ĭ9)9҅xh(ĥŐL i,1HȊ©L,52,9-P" a{)9 Ln90$0%,7 ҥ L$0T,8OK50P;ҥ,8 L%\   8҅df`cnx  (,4h`dd,9P"<:J H) +̰ H) +ʭcP h̰ʩd8,h)ec efeede`,5 H  h 4  `5!    4(P 4 4  `,g0L,10kH0 WL)6La5 I`6 cef`7 I`8 iIi`9A)I@`a{ ~I)_ bJ) b) )ab)a a,h0& &+%a0 +hcefd(c,@cfabOO&+- ((((PPPPBTVSPLH   5"ʘ HH` (# (=  0`)aIAHOTW\_bx{'69@IPW]`cfjmpsx}(̠`x (̠` [   `L `` ``I FF x (̠%L#fowz*13579;=?ACFNWaehmpx "'+@\mrv{( 3  +J FF tѤ `U t`*8`AB*0 B8` L=?՝ԝϝН ` 1`*x (DEHG 1h H J IFD`* H FFLx 7( hL8 989::m8ʥi,;Ɂ)˭5i ɠ)54`x* ,< ʝ88 (`…ʍ0Åˍ142;)5I)5i 4`)5;`xH)$ 45R8 h(`x   h) `(" (  (È& 8  `)2ȱÍ3`)1`Ɂ" (cefd`Hcefh) `xÙ+(`xÙ&(`)4`)5`)6`)7`)8`)9`,i0!M:0p ȱq L `" (~)y ~JJ* I `x|x|,,}P-X~ F }~L } `,}0 x) `(`hh% ( ΍ ύ逅Ñ}`` " ( ĩ~Í'38;HMRUZekqv{4(C) Apple Computer 1983. Serial Card RS-232 Driver.t.RS232L c "߄P(C) Apple Computer Inc. 1983Mȩ`,(0LH  HL*,0))`Í-ȱÍ.ȱÍ/x0)0)? 00XȱÍ1``(LH*00fg `;?MOQSUWY[]`fjnx},49?HMRV\_dx}8f* 2*H UhX U'+`0`)0)0 X*4,2*,10M.-- x0 0`0֤F`,(0LH  ,-! (`í-ȑí.ȑí/ȑí0ȑí1ȑ``)M#-"ȩȩȭ*SEPH DHUEY NHMH` (# (B1BBl^`h[,($ ( h ))lfg % (*+,("-#.$/&1)%)?0'`,(0LHEąĩEŅ,/'+?8fPF ZCOPYRIGHT 1981 APPLE COMPUTERMICHAEL JOI P S V \ a h m p s x |     ' + < ? D G N U f k p x (+@EIR[ty} NQEpson Printer Driver2.EPSONER A               . 3 6 9 < ? B E H N S V \ _ b w      ! ( 0 7 I N S _  . G R Y f {    ! $ 4 9 F ORUX]`finsw| !%*/369<?BEJMRUX]`h  2;AGMS[fot|;?DGLTot <?BGLQgjox',/25:BGKORY\aelpu !$(+.147<?BFIL̑бʑΈ0 Б̱ΑʈeمΐeمАA萿 :  `ʝ"`t  !#%')+;CNU\eh "*-036<BLORX_fj &+388,:Jک@ׅפ؈۩MjL,:08*Ȅ B ,:J}΅н(I I $0;P̑бʑΈ,:JՐ̑ʈ0 Ցʭr̈A萠L: ֦ڱΑ0Б֤ h L  p,:0 JfiΥiώJe΅Хiю@ B $pI I `<Mj,:0pJՐ̑ʈ`pJհ0`ՑʭrpȐ`=m@< B h AL: 8p,:Jf׮@$PA B $P@/A'ʤ˅΄ϥ̤ͅЄ B $̑бʑΈ0Ƞ h L: $)טɀIim>ٮ@8pذ `$0";O,:0'???>>8?>p<<AAA@@8A@q==C)CB)B Crx 0, )ߍ:) J)*PR,T,V( : `,k<,: JI`I`<,:J̰`=m@>,:J}ʅ̽(ĩϭ & &υΠÑΈ~ F ~ҰةeÅÐн},,P,`,g$ ( $g " x) (,`% (gL,}0, `gé ĩ `:) j:;jN;~j 01 % (, :'`'LM :01 `,'0LM& (,'0LMIĥIC ,$P( n(.0- .-L 3L 3`,,P*M#-"x Z)(,,p` *+)+X,,PM#-" 2Z SHRH` (# ($GGjc`,'$ ( 2 *)6Ucfkw &+8;@CJMPSV]bejApple Dot Matrix Printer Driverv7.DMP A Copyright (C) 1983 by Apple Computer Inc.,`,'0LM ! (```*M#ȩ ȭ-ȩ`,'0LM @>L,, 3,,0-./(,$)x*%)/+(```04@DRTVXZ\^`belv{!$'*-049?BIIC ,$P( n(.0- .-L 3L 3`,,P*M#-"x Z)(,,p` *+)+X,,PM#-" I82-A/0M)-/M#-" &0x,) ++`x2Z SHRH` (# ($GGjc`,'$ ( 2 *)601 % (, :'`'LM :01 `,'0LM& (,'0LMI (C) 1983 by Apple Computer Inc.v7 .PARALLEL A`@dCopyright (C) 1983 by Apple Computer Inc.!$'*-036<?FKUn|  $)036=BEJQX]`ejorw "'.147:=@CWZadknDParallel Printer Driver -- Copyright ` ) `x,X0R p)(`KO} #9<CHKjoz $*-DINS^bkmoqyX ))hq mm0 stqs[L,j,XLl)`Z5L,lLp,VP VeLE,WWVfLEZZLpnl,Y0g,dP\,]0X]eLE\pqnp aLm bLm cZ )^ `ÍTȱÍU`n064e0[x R X([ `R )l) )g mmL)` mmL ),d-eYLfYuqgQ,V0L@VEPf>i\]M,j,qg$[H" (x^ÈȌm(`TȭU` n  q `ȩ`,S0L HH`Lfh,V W ,W0x_)_ qnZ[oprsXY\]mRl`)  __ ` ) (`^" ( ÙH 8fqhq:,V0-,X0x R) X)(LW h,TULarȥȑ`,S0LoEąĩEŅ o`n L# 8fqn,S0L lHkH`! (rs`^HH` (# (ALS`,S$ ( M iR)QKL % "_TUkVW S`% (SLn Zx R)(KL `,S0LrEąĩEŅq,k0stI82-A/0M)-/M#-" &0x,) ++`x,`,'0LM ! (```*M#ȩ ȭ-ȩ`,'0LM @>L,, 3,,0-./(,$)x*%)/+(```04@DRTVXZ\^`belv{!$'*-049?BIUcfkw &+8;@CJMPSV]bej!Apple // Super Serial Card Drivert.SSCARD A "߄P(C) ApplvЭ H ʊJyjhz|ֆ׆ح)JfJf$PIJfש ʈ8 @ש wx LVخ ʊJJJ莟mwwxixÈ``,t0L4 HH`L  d!  `ɖ" ( dÈ  ``,t0L4 d0Cս30. , V  @„ȄL5`ʝ`))ժu/((((PPPP @``` @@@@`xp<@ @ :H9H` (# ( -l..PcJt`,t$ ( t`tL4`,t0L4 HH`! (`ɖ" ( """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwwwwww(C) 1980 Apple Computer147:=@CWZadkn9Copyright (C) 1983 Apple Computer, Inc. Graphics Driver..GRAFIX b """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwwwwwwDINS^bkmoqy!$'*-036<?FKUn|  $)036=BEJQX]`ejorw "'.\pqnp aLm bLm cZ ) ` ) `x,X0R p)(`KO} #9<CHKjoz $*-fYuqgQ,V0L@VEPf>i\]M,j,qg$[HX ))hq mm0 stqs[L,j,XLl)`Z5L,lLp,VP VeLE,WWVfLEZZLpnl,Y0g,dP\,]0X]eLERl`)  __ ` ) (`^" ( Ù^ `ÍTȱÍU`n064e0[x R X([ `R )l) )g mmL)` mmL ),d-eYL 8fqn,S0L lHkH`! (rs`^" (x^ÈȌm(`TȭU` n  q `ȩ`,S0L HH`Lfh,V W ,W0x_)_ qnZ[oprsXY\]mKL `,S0LrEąĩEŅq,k0stH 8fqhq:,V0-,X0x R) X)(LW h,TULarȥȑ`,S0LoEąĩEŅ o`n L# HH` (# (ALS`,S$ ( M iR)QKL % "_TUkVW S`% (SLn Zx R)(e Computer Inc. 1983M 0ޤՐڢ,P<0 )ߍL- J,P,QJ,R,SJ,T,U,W`,t0L40 ( dȅɥŐ ĐL  }LO}~~Șݻ~`}}~L< L }ީ~` ɠɀ)ӮԮmwӥmxԐ mi` HHGH`  &`LL) @  .169DWfy   % * > A H K Z v z }      % , 1 5 : = B K R Z _ b g n s x ~    ) . 6 = J P S X [ \x{~'+.149?CGIKMOQSUWY[]_acegikmoqsuwy{}%(-47=FMUX\_jmz'+9;=?ACEGINR\aejns~  #&).369<ADGJMP^g $*-06=HLORWcfloruz/47=G`JJJJ)`%υߥ`1(ȦJJJ`&&*`JJ` **&*&ߥ`J` ***`` ` Jjjߊ` ߊ`JfJfFߪ߆` `JfJfJfF`ߩ`$011̰JJJJ) ܭL FܪJJJJ)`$PH8 nߩ nh ߍϭ - k, ϥ- kϱϮEϑʩ`P z  HH` k(h`$0#$E$0p Q%Qʑ`pPIE1p$E$0p Q%Q̑`pPIE1pΦ#$01ʐ1 ('Άѽн`8Hٰ hIiHمh8Iif٤Φݰ>Jj8ۅe݅eޅ $  m`!J8݅ eۅ$  m` , V $צ! LP \LD$7߭&ʰ,i8i#Hiihifʦʆi) v`i,ʐi,iPIIʥ)ifʦʆ̐pLj/Fϐ&Ȅ`'@τ`Fϐ@ E҅F8ئȢΆѽϽ`/(L%τ`ϩE҅0Ȅ(fL%)  %)`%  0.)      0  ` ` @ ``8٨JJJ ) u˘ vͽʅ̆`8Hi #iϤҐ мφi`Jf`<,ӅLx  mӥmԐL] h `  )`%)8`)    H   ʥ)Ģ    H Ģ L E% %) L 8`ۅ&ۥeepɀjff&ݥeepɀjffݠ %٥8٥ 8مڅ H , V Εm٭mڭ))njnjnjfjfjfj+mӥmԐ8L( Ӣ ,$0F y  h h`8٭028ٍڍ0Z$eٍeڍm٥m8٥08ٍڍ`8٥058ٍڍ0ԭeٍeڍ808@ ] I)!) g 80 J8}L y L 0yʽz0 y L7  Lh `*f*&*)` ` m j`Hآ Hӭԭ` L``  `L` H , 8 V ТΕLϦI ] +)J* g I V 8fxLL) L8``Lթ`~L8L)  =H 'HH N M))Mhh0 ϭPh0 йPL)`)L    $ 3 : = F d  > B H M s `e|&+.QVYcjuy~':{(Z.AUDIO C(C) 1980 by Apple Computer Inc.D vHuH` (# (jjA`,A$ (BC x) @( A`% (ALpx)`(BC `,A0Lp& (,A0Lp9 æĬSɀ֙TȌS 9S`YX`X-,AM$=FILNAM$,2):150130 FILNAM$ "CATALOG ANOTHER DISK? ";R$2R$="N"R$="NO"90:ۻR$<>"Y"R$<>"YES"1608"INSERT ANOTHER DISK AND HIT RETURN TO CONTINUE",R$80PFILNAM$,1)<>"."7);"FILENAME MUST BEGIN WITH .D1 OR .D2":HA LOCK before you begin."::5F"PUT DISK IN DRIVE 2 AND HIT RETURN TO START",R$PLAST=0:DELTA=10:X=0:TOT=0Z:=12:=25d"FILE NAME: ";FILNAM$nFILNAM$,3)<>"CAT"200/xFILNAM$)>3FILNAM$=FILNAM$,4)::1600FILNAM$,1)=" "FILNmemory."Q?"If not, the program will create a new textfile for you and will prompt for"Q@"your command. To see a list of commands and command syntax, type '?' when"MA"you get the '>' prompt. The program accepts only UPPER CASE, so press"'B"ALPYou must specify"S<".D1/ or .D2/ as the start of the file name. If you've forgotten the name of"V="your program's textfile, you can enter 'CAT .D2' when asked for the filename.":N>"If the file already exists, the program will load the file into "both individual characters and ranges of lines. Although it will move"L9"lines and renumber program text files, Apple /// BASIC's own RENUMBER".:"facility is faster and more reliable.":M;"The program works with only one text file at a time. BOSTON"::Q5"This program is a line editor for text files of BASIC programs up to 3,000"Q6"lines long. It generates line numbers automatically by whatever increment"P7"you wish. (Default is 10.) It allows you to insert, delete, and replace"M8Y-G THIS PROGRAM SUPPLIES LINE NUMBERS FOR A TEXT FILE WHICH IS TO BE9 CAPTURED AS A BASIC PROGRAM USING THE EXEC COMMAND. =2555(NUMB(3000),LINE$(3000),SEEKER(3000),MOVER$(3000)2:"79C";"AUTO BASIC"3"79C";"BY" 4"79C";"ROBERT AUTO.BASIC AND TREESORT $(/4:?IXad#ˆ̭U)? VW @ ?ddxtB˩Eʍ@Xx ,P Eʍ(itiBX`,A0Lp HH`! (```,A0Lp HH`L%&S```lBcguwy{}100:œ230FILNAM$,360#1,FILNAM$: ž#1350 X=1:TOT=1#1;STUFF$STUFF$=""260BREAK=STUFF$," ")-1"BREAK<>03208,STUFF$,1)<>" "LINE$(X-1)=LINE$(X-1)+STUFF$:2606STUFF$=STUFF$,2):300@NUMB(X)=STUFF$,BREAK))JLINE$(X)=STUFF$,BREAK+1)TX=X+1:260]^X=X-1:TOT=X:LAST=NUMB(TOT):"YOU HAVE ";TOT;" LINES IN ";FILNAM$;". LAST LINE IS ";LAST: h">",R$rTOT>120007)|R$,1)="C"1550R$,1)="D"1700R$,1)="I"1380R$,12B=ED$,201))-1:ONE$=LINE$(X),B):TWO$=ED$,B+2):THREE$=LINE$(X),B+1):LINE$(X)=ONE$+TWO$+THREE$::12701<ED$,196))=01360: THIS DELETES LETTERStFB=ED$,196)):ONE$=LINE$(X),B-1):TWO$=ED$,B+1):THREE$=LINE$(X),B+1+TWO$)):LINE$(X)":",R$:360$R$=""X=Z+1:11):1210:ۺ380 THIS IS THE EDIT ROUTINE6=1:=1:255);"I = INSERT, ";255);"D = DELETE"( =12:=1:NUMB(X):=12:=8:LINE$(X)"EDITS: ";ED$ED$=""1(ED$,201))=01340: THIS INSERTS LETTERSq>NUMB(MED)LOW=MED+1:ۻETOT"RANGE ERROR":360& THIS IS ESSENTIALLY A WHILE LOOPY>X+20Z=X+20:Z=YR$,1)="E"1270NUMB(X);LINE$(X):X=X+1:X<=Z1230ZNUMB(MED)LOW=MED+1:ۻBNUMB(HIGH)Y=HIGH~MED=.5*(LOW+HIGH))JE=NUMB(MED)Y=MED:ۻE$,BREAK+1)$RANGE1$="F"RANGE1$=NUMB(1))&RANGE1$="L"RANGE1$=NUMB(TOT))&RANGE2$="L"RANGE2$=NUMB(TOT))$RANGE2$="F"RANGE2$=NUMB(1))$B=RANGE1$):E=RANGE2$).X=0:Y=0:LOW=1:HIGH=TOT08B<=NUMB(LOW)X=LOW:ۻB=>NUMB(HIGH)XR$)=1X=1:Y=TOT:1200'R$," ")<>2"SYNTAX ERROR":3607R$,"/")=0RANGE1$=R$,3):RANGE2$=RANGE1$:1020&R$,"/")<4"SYNTAX ERROR":360*R$,"/")=R$)"SYNTAX ERROR":360ABREAK=R$,"/"):RANGE1$=R$,3,BREAK-3):RANGE2$=R2":FILNAM$,\740f THIS IS THE CLEAR ROUTINE pX=1TOTzNUMB(X)=0:LINE$(X)=""X2X=0:TOT=0:LAST=0:DELTA=10:"MEMORY CLEAR":360 THIS IS THE NEW ROUTINE)NUMB(1)<>0"MEMORY NOT CLEAR":360100 THIS IS THE LIST ROUTINE820#1,FILNAM$ X=1TOTSTUFF$=NUMB(X))+LINE$(X) #1;STUFF$X *FILNAM$;" SAVED "::360*4<>34"ERROR ";;" IN LINE ";:360>"NO SAVE. .D2 IS FULL":8H"PUT A NEW FORMATTED DISK IN .D2 AND HIT RETURN",R$R=".Dnly.360 THIS IS THE QUIT ROUTINE""QUIT ERASES MEMORY. Y/N ";R$3R$="N"R$="NO"550:ۻR$<>"Y"R$<>"YES"660/:=12:=30:"AUTO ENDED. READY TO REBOOT.": THIS IS THE SAVE ROUTINE œ730 FILNAM$:FILNAM$, œ L F/310 lists from the first line through line 310."K{" M 180/200 to L by 20 will move lines 180 through line 200"L|" to the end of the file and will set a line increment of 20."1}" L L will list the last line o-SAVE"v"Q---QUIT"Aw"Elements in (parentheses) must be included in the command."Sx"Elements in [brackets] may be omitted if you want the current default value."Oy"Examples: C with no parameters begins collection at the end of the file."Dz" INE)"D"E---EDIT (LINE)"N"L---LIST [(LINE/LINE)]"UO"RETURN AT PAUSE IN LISTING CONTINUES LISTING. ANY OTHER COMMAND STOPS LISTING"@P"RETURN DURING COLLECT OR EDIT STOPS COLLECTION OR EDITING"X"KL--CLEAR MEMORY"b"N---NEW FILE"l"S--PY (LINE/LINE) TO (LINE) [BY INCREMENT]"4"M---MOVE (LINE/LINE) TO (LINE) [BY INCREMENT]":"#---RENUMBER (LINE/LINE) FROM (LINE) [BY INCREMENT]":&"C---COLLECT NEW LINES [(START LINE) [BY INCREMENT]]"0"D---DELETE (LINE/LINE)":"I---INSERT (L)="E":950R$,1)="L":950R$,1)="#"1780R$,1)="M"1780R$,1)=34)1780R$="N"920R$="KL"870R$="S"700R$="Q"650%R$,1)<>"?""INVALID COMMAND" " PROGRAM COMMANDS:"934);"---CO=ONE$+THREE$::1270PCOUNT=1ED$):ED$,COUNT,1)=" ":ۻED$,COUNT,1)="|"LINE$(X),COUNT,1)=" "::۰LINE$(X),COUNT,1)=ED$,COUNT,1): Z1270 d THIS IS THE INSERT ROUTINE&nR$," ")=0"SYNTAX ERROR":360xRANGE1$=R$,R$," ")+1)B=RANGE1$)2B>LASTB<1"LINE NUMBER OUT OF RANGE":360 X=TOT3B=NUMB(X)"LINE ";B;" ALREADY IN FILE":1500HB0LINE$(X),"THEN")<>0LINE$(X),"GOSUB")<>0LINE$(X),"ELSE")<>0SEEKER(Y)=X:Y=Y+1$ . Y=Y-1:EOS=Y"8 THIS IS THE RENUMBER ROUTINEB SIZE=MOVE+DELTA*(EOT-1):MOVE>LAST2410:ۻR$,1)="#"E=LAST2410:ۻSIZE=D OF THE PROGRAM X=1EOT+NUMB(TOT+1)=MOVE:LINE$(TOT+1)=MOVER$(X)'TOT=TOT+1:LAST=MOVE:MOVE=MOVE+DELTA360E THIS SETS THE SEEKER ARRAY TO THOSE LINES WHICH CONTAIN NUMBERS1 TO BE CHANGED IN MOVE AND RENUMBER ROUTINES Y=1  X=P. COPY ABORTED.":360 \Y=1EOTfX=TOTPOINT-1)pNUMB(X+1)=NUMB(X):LINE$(X+1)=LINE$(X)zX+NUMB(POINT)=MOVE:LINE$(POINT)=MOVER$(Y)+MOVE=MOVE+DELTA:POINT=POINT+1:TOT=TOT+1YLAST=NUMB(TOT)3603 THIS SECTION COPIES TO THE EN MOVER$(Y)=LINE$(X).  THIS SECTION PUTS THE TWO FILES TOGETHER2* FIRST, WE FIND THE INSERT POINT IN THE ARRAY24MOVELAST2230>X=1&HMOVE>NUMB(X)X=X+1:POINT=X:2120=RZ>NUMB(POINT)7);"RANGE OVERLAMB(X)=>BNUMB(X)<=EEOT=EOT+1:X34)2310 THIS IS THE COPY ROUTINEY=0:Z=MOVE-DELTAX=SOTSOT+EOT-1Z=Z+DELTA:Y=Y+1$,1)=" "RANGE3$=RANGE3$,2):1920RRANGE3$,1)="E"MOVE=LAST+DELTA:ۻRANGE3$,1)="F"MOVE=1:MOVE=RANGE3$)ESOT=TOT: THIS SECTION DETERMINES SIZE OF RANGE1$/RANGE2$ OR(B/E)1EOT=0:B=0E=0MOVE=0"SYNTAX ERROR":360 X=1TOT4NU"L"E=LAST:ۻRANGE2$="F"E=NUMB(1):E=RANGE2$)?XRANGE1$="F"B=NUMB(1):ۻRANGE1$="L"B=LAST:B=RANGE1$)5bRANGE3$,"BY")=01920:BREAK=RANGE3$,"BY")+19lRANGE4$=RANGE3$,BREAK+1):RANGE3$=RANGE3$,BREAK-1)vDELTA=RANGE4$)1RANGE3AK+4):RANGE1$=RANGE1$,BREAK-2) &1850O0BREAK=RANGE1$,"TO"):RANGE3$=RANGE1$,BREAK+2):RANGE1$=RANGE1$,BREAK-2)B:RANGE1$,"/")=0RANGE2$=RANGE1$:1870:BREAK=RANGE1$,"/")9DRANGE2$=RANGE1$,BREAK+1):RANGE1$=RANGE1$,BREAK-1)?NRANGE2$=ER FOR MOVE/COPY/RENUMBER4R$)=1R$," ")=07);"SYNTAX ERROR":360<R$,"TO")=0R$,"FROM")=07);"SYNTAX ERROR":3601B=0:E=0:BREAK=R$," "):RANGE1$=R$,BREAK+1)fR$,1)<>"#"1840:BREAK=RANGE1$,"FROM"):RANGE3$=RANGE1$,BREANGE1$=RANGE3$,BREAK-1):RANGE2$=RANGE3$,BREAK+1)?RANGE1$="L"B=LAST:ۻRANGE1$="F"B=NUMB(1):B=RANGE1$)?RANGE2$="L"E=LAST:ۻRANGE2$="F"E=NUMB(1):E=RANGE2$)8B=0E=0"SYNTAX ERROR":360:SOT=TOT:EOT=0:1960/ THIS IS THE PARS5TOT=X:LAST=NUMB(X):X=X+1:NUMB(X)=LAST+DELTA:1650/ THIS IS THE PARSER FOR THE DELETE ROUTINE&R$," ")=0"SYNTAX ERROR":360)BREAK=R$," "):RANGE3$=R$,BREAK+1)BREAK=RANGE3$,"/")dBREAK=0RANGE1$=RANGE3$:RANGE2$=RANGE3$:RANGE2$):X=TOT+1:NUMB(X)=LAST+DELTA:1640e^BREAK=RANGE1$,"BY")+1:RANGE2$=RANGE1$,BREAK+1):DELTA=RANGE2$):NUMB(X)=RANGE1$,BREAK-1))(hNUMB(X)""TOT=TOT+1:ۺ1500LINE$(X)=" "+LINE$(X):360D THIS SECTION RESETS LINES TO ORIGINAL VALUES IF INSERT ABORTEDZ=X+1TOT)NUMB(Z)=NUMB(Z+1):LINE$(Z)=LINE$(Z+1)Z360! THIS IS THE COLLECT ROUTINE X=TOT+1&"R$)=1NUMB>NUMB(SOT+EOT)7);"RANGE OVERLAP. RENUMBER ABORTED":360L X=TOT:R$,1)="#"2410#V MOVE1X=X-1:2390I` SIZE=>NUMB(X+1)MOVE<=NUMB(X)"RANGE OVERLAP. MOVE ABORTED.":360j Y=SOTSOT+EOT-1)t TARGET$=NUMB(Y)):REP$=MOVE)+93)~ L=TARGET$):M=REP$) X=1EOS# POS=LINE$(SEEKER(X)),TARGET$) POS=02570% ANTE$=LINE$(SEEKER(X)),POS-5,5) ANTE$<>"GOTO "ANTE$<>"THEN "ANTE$<>"ELSE "ANTE$<>"OSUB "POS+L-1"4"54:=12:"79C";"Insert system disk and reboot.""79C";"3--Treetext explains how treesorts work, so"8<"79C";" you can use them in your own programs.":A"79C";"4--Quit "F:%P"Make your selection (1-4): ";r$Zr$="1""sorter"dr$="2""filesor_ "79C";"TREESORT PROGRAMS" "79C";"by" "79C";"Robert Boston"::1"79C";"This disk contains two programs:"::"79C";"1--Sorter sorts words from the keyboard. ":("79C";"2--Filesort sorts from one file to another.":2OT-6 NUMB(X)=NUMB(X+EOT):LINE$(X)=LINE$(X+EOT)@ #J TOT=TOT-EOT:LAST=NUMB(TOT):360T):Y=1 X=1EOT MOVER$(Y)=LINE$(SOT):Y=Y+1 Z=SOTTOT-1) NUMB(Z)=NUMB(Z+1):LINE$(Z)=LINE$(Z+1) Z TOT=TOT-1 X LAST=NUMB(TOT) MOVE02640  R$,1)="#"360 THIS IS THE MOVE ROUTINE MOVE=NUMB(SO:TWO$=LINE$(SEEKER(X)),POS+L)# LINE$(SEEKER(X))=ONE$+REP$+TWO$ TWO$,TARGET$)=02570/ POS=LINE$(SEEKER(X)),TARGET$,POS+L):2460 X NUMB(Y);"=>";MOVE NUMB(Y)=MOVE( MOVE=MOVE+DELTA2 Y< LAST=NUMB(TOT) F X=1TOTP POS=LINE$L):2550:ۺ2570& POS+L-1" "LINE$(SEEKER(X)),POS+L,1)<>":"TWO$=LINE$(SEEKER(X)),POS+L):2550A ONE$=LINE$(SEEKER(X)),POS-1) **KP ** 9/7/84 **KZ ** **Jd*********************************************************************nx430 **KP ** 9/7/84 **KZ ** **Jd*********************************************************************nx430 **K2 ** BY **K< ** **KF ** ROBERT BOSTON K *********************************************************************K ** **K ** TREESORT **K( ** ,more)="0":rec$(curr,prev)="0"rec$(node,word)370: goto search right"X7);"Duplicate entry"::550 THIS IS TREESORT":&"You may enter words in Uplow.":1"But type STOP in caps to end the list."::+&curr=curr+1:node=0:">";rec$(curr,word):0rec$(curr,word)=""550:ۻrec$(curr,word)="STOP"150?:rec$(curr,less)="0":rec$(curress=1:more=2:prev=3:curr=0:node=0rec$(curr,word)="Mm"rec$(curr,less)="0"rec$(curr,more)="0"rec$(curr,prev)="-1"I ******************************************************************* this is the input section5:" p of branch7rec$(node,more)<>"0"node=rec$(node,more)):580+rec$(node,more)=curr):550: to inputI *******************************************************************- this section establishes initial valuesrec$(1000,3)-word=0:l)<>"0"node=rec$(node,less)):580+^rec$(node,less)=curr):550: to inputIh *******************************************************************4r this section searches the right (greater) side?|rec$(curr,prev)=rec$(node,prev): set prev to togo to Menu: ";R$:"hello":node=rec$(node,more))200J6 ********************************************************************2@ this section searches the left (lesser) side3Jrec$(curr,prev)=node): set prev to this node7Trec$(node,less fl$,158#15 first we find the smallest value on this branch7rec$(node,less)<>"0"node=rec$(node,less)):200node<>0rec$(node,word)srec$(node,more)="0"node=rec$(node,prev)):node<>-1205:ۉ::"Press RETURN to J ********************************************************************$ this section prints the output8:"Name of output file (RETURN for .CONSOLE): ";fl$fl$=""#0:200 œ170#1,fl$180$<>30"Error ";;" in ";::J ********************************************************************B this section prints the output to the file and to the screen#15 first we find the smallest value on this branch7ptr%(node%,less%)<>0node%=ptr%(node%,less%):200+node%<>0#2;rec$(node%):rec$(node%)ptr%(node%,more%)=0node%=ptr%(node%,prev%):node%<>-1205::"File Alphabetized":::"Press RETURN to go to Menu: ";r$:"hello":node%=ptr%(node%,more%)200J6 **********************************d my old ox-like BASIC bubble sorter. It's big and it's dumb and it's slow, but it can handle about 7,200 words. I set it to work, made lunch, and ate while I watched an inning of baseball. Then I picked up my daughter at school, and made a beer run. Wd, and then zap it into its place in the tree before moving his lips to figure out the next word. Finally he decided he'd had enough, and after working through about half the file, he quit, saying that his poor little stack had overflowed. So I boote was eager to see how it would work when reading from a large file. I downloaded the mainframe file and cranked up the Pascal program. Poor old Pascal did what he usually does with ASCII files. He'd "readln" every now and then, mulling over each woruniversity's mainframe computer. Great! I had been looking for a big sorting job so I could try out a binary tree program my wife had written in Pascal on our Apple ///. It had been phenomenally fast on the short lists of words we'd typed into it, and I SORTING IN A BASIC TREE by Robert Boston Back in October, a friend asked if I could alphabetize the index of a book she's writing--500 lines on the t it.",l:"Do you want me to print? (Y/N): ";r$vr$=""7):620Ar$)=89r$)=121150:ۻr$)<>78r$)<>1107):620:tr%(curr%,prev%)=06Drec$(curr%)rec$(node%)370: goto search greater=X7);"Duplicate entry":555: this eliminates duplicatesJb"My memory is full. I can print this much of the file or forge********' this section reads the input file ž#1150#&curr%<7200curr%=curr%+1:610+node%=0:#1;rec$(curr%)0rec$(curr%)=""555=5curr%;" ";rec$(curr%): this prints input to the screen?:ptr%(curr%,less%)=0:ptr%(curr%,more%)=0:p%)=0:ptr%(curr%,prev%)=-1%:"Type name of input file: ";r$ #1,r$&:"Type name of output file: ";r$ œ490#2,r$:510*=30r$,:"Error ";;" in ";::485I************************************************************550: to inputI *******************************************************************- this section establishes initial valuesrec$(7200),ptr%(7200,2)yless%=0:more%=1:prev%=2:curr%=0:node%=0:rec$(curr%)="mm":ptr%(curr%,less%)=0:ptr%(curr%,more****************************************************4r this section searches the right (greater) sideD|ptr%(curr%,prev%)=ptr%(node%,prev%): set prev% to top of branch7ptr%(node%,more%)<>0node%=ptr%(node%,more%):580+ptr%(node%,more%)=curr%:**********************************2@ this section searches the left (lesser) side5Jptr%(curr%,prev%)=node%: set prev% to this node%7Tptr%(node%,less%)<>0node%=ptr%(node%,less%):580+^ptr%(node%,less%)=curr%:550: to inputIh ***************hen I got home the file was finished. I uploaded it to the mainframe and told my friend it was ready to be printed. But I couldn't get the problem out of my head. There had to be a way of combining the superior string-handling ability of BASIC with the quick sorting ability of Pascal's binary tree structures. I had tried it before with parallel arrays of string and number, but found that the treesearch concept combined with juggling parallel arrays was extremely complex, and MY poor little stafor example, the word after the median word becomes the "first" word, and the new median is the word halfway between the new "first" word and the last word. Using this system, a program must make only 25 to 30 comparisons to find the place of a new word ist in half with each comparison. (Binary means "two sided," not necessarily "base two" as in binary math.) One type of binary sort looks at the first word, the last word, and the median word in the list. If our new word is greater than the median word, st of hundreds or thousands of words. Using this sort, my friend's list required 69,532 comparisons--quite a saving compared to 124,750. But it still took 28 minutes to run. A binary sort, however, is much more efficient, for it keeps dividing the lisave a comparison. Each new word bubbles up until it meets a lesser word. Since we know the list is already in order, we don't have to search the rest. With our little eight-word list this sort saves 11 comparisons, but it can save much more in a lirds as we enter them, instead of entering them all and then sorting them. If the second word entered is less than the first, we swap their positions. Then if the third word is greater than the second, we know that it's also greater than the first, so we the number of items in the list. My friend's 500-word list, therefore, would require 124,750 comparisons. Using a slightly more efficient bubble sort (my old ox), we can make the procedure a bit less complicated. In this program, we can sort the wo order to sort the list of eight words, this bubble-sort program must make twenty-eight comparisons. This type of bubble sort is mathematically predictable using the following formula: Comparisons = N * (N-1)/2 where N isl "april" bubbles up to become word 0. Then the program starts at the bottom once more and bubbles "come" up to position 1. There's no need to compare word 1 and word 0 this time because we know that the least word is already in the top position. Int-to-last word, word 6. Since "w" is less than "y," "way" is numerically less than "your," and the program swaps their positions. Next it compares word 6 (now "way") with word 5, then word 5 with word 4, and so on, continuing to swap when necessary, unti 7 way In an upward bubble sort, the simplest kind of sorting procedure, a word "bubbles" up through the list until it finds another word less than itself. In this case, the program compares the last word, word 7, with the nex 0 mm 1 though 2 april 3 showers 4 might 5 come 6 your g Procedures For those who are learning to program, I should take a moment to explain a bit about sorting procedures. Old hands can skip this section. You can think of a one-dimensional string array as a list of words numbered from 0 to whatever:nal string array, thinking of it as an array of records, the data structure Pascal uses for binary trees. After working through it that way, I was able to rewrite the program using parallel string and integer arrays. Sortinck overflowed. Then I realized that BASIC really does have superior string-handling ability. In BASIC, I could use STR$ and VAL functions to convert numbers to strings and back to numbers. I didn't need two arrays. I could use a single two-dimension a list of 500. But then the program must move all the greater words down one space to make room for the new word, and that takes as much time as my old ox, even though the program knows where the new word should go. This type of binary sort is very good at FINDING a word in a long list, but it's no better than a bubble sort at PUTTING a word into that list. The Binary Tree and Pointers In a binary tree sort, however, the program doesn't move the words around in the lnter of node 3, the "showers" node, is set to 1, to point back to node 1. The LESS and MORE pointers of node 3 are set to 0. When we enter "might," the program sees that it's less than "mm," and that word 2 is the next lesser word. Since "might" irs" (word 3), the program sees that it's greater than "mm," and that word 1 is the next greater word. The program compares "showers" with word 1, finds that "showers" is less than "though," and changes the LESS pointer of node 1 from 0 to 3. The PREV poi integers called ptr%(x,2). x is the number of the node, and 0 (LESS), 1 (MORE), and 2 (PREV) are the pointers associated with that node. Entering Data Into The Binary Tree Referring to the above graphic, when we enter "showe. A number pointing back up the "branch" of the tree. (The PREV pointer.) We store the nodes' values in parallel arrays. The strings go into a linear string array, rec$(x), while the pointers are stored in a two-dimensional array ofing itself. (In the chart the number of each node is in parentheses.) 2. A number pointing to the next lesser node. (The LESS pointer.) 3. A number pointing to the next greater node. (The MORE pointer.) 4 * ***************************************************** Each "node" in the tree contains four values: 1. The str * * * * * * * * * * (PREV) 0 -1 (PREV) * * (node 2) april though (node 1) * * (LESS) 0 0 0 0 (MORE) * * (M) (L) * -1 (PREV) * * mm (node 0) * * (LESS) 2 1 (MORE) * * | | es of the tree would look like this: ***************************************************** * * * * care about left or right.) Besides its own word, each node contains pointers: the list numbers of the word to the right (MORE), the word to the left (LESS), and the previous word up the branch (PREV). If we enter "though" and "april," the first three nodsetting up the tree. It is in a node of the tree, where a branching occurs. In the following charts, words which are less than "mm," like "april," branch to the left. Greater words, like "showers," branch to the right. (Of course, the computer doesn't t of lower case letters. We could change that median to "MM" or "aa", or with a slight change in the program we could let the first word itself be the median. "mm" is the "zeroth" word in the program's list. It's never printed; it's just a means of ist. It simply keeps track of which word should be printed first, which second, and so forth. In this tree sort program, I define the "median" before entering any words. For my purposes, I assume that "mm" is the center point, since all our words consiss greater than "april," the MORE pointer of node 2 is set to 4 ("might's" node). As before, the LESS and MORE pointers of node 4 are set to 0, but the PREV pointer of node 4 is also set to 0. Why 0? Why not 2? And why does the PREV pointer in node 1 point to -1? Why not to 0? The answer lies in how the program prints the data. Printing From The Binary Tree We want the program to print the words in ascending order, so that the five words now in the tree (including "mm") e nodes to the left of the median, we now look, in the same way, at those branches to the right of the median. When the program winds up at a node which has a MORE of 0 and a PREV of -1, the printout is complete. Try drawing a tree with your own word THAT BRANCH. The PREV pointer of "april's" node (2) is 0, so we set the PREV pointer of node 4 to 0. And that's also why the PREV pointer in node 1 points to -1, for the top of its branch is node 0, which points to -1. Since we've already printed thht" over and over. Instead, we want to print "mm," (node 0), the node indicated by "april's" PREV pointer. And this is a general rule: THE PREV POINTER OF A NODE IN A RIGHT-HAND BRANCH IS ALWAYS THE SAME AS THE PREV POINTER OF THE NODE AT THE TOP OF0, the program must find the next word greater than "april." And here's the reason for node 4's PREV pointer: If PREV pointed to "april," the program would print "april" again and would go back to "might" in an infinite loop, printing "april" and "migrogram moves to node 4 ("might") and then checks to see if anything is less than node 4. Since node 4's LESS pointer is 0, it prints word 4 and then checks to see if anything is greater than "might" and less than "mm." Since node 4's MORE pointer is also the tree by following LESS pointers as far as it can. It finds "april" (node 2) and prints it. Node 2's PREV pointer points to node 0 ("mm"), but the MORE node points to another branch which is greater than "april" and less than "mm." Therefore, the p(M) * ***************************************************** To print the tree, the program starts at the median (node 0) and finds the least node in * * * (node 4) might showers (node 3) * * * * (L) 0 (M) 0 0 (L) 0 | | * * | | * * | | * * (PREV) 0 1 (PREV) * * * (node 2) april though (node 1) * * * * (L) 0 4 (M) (L) 3 0 (M) * * * * | | * * | | * * (PREV) 0 -1 (PREV) * * * * -1 (PREV) * * mm (node 0) * * (LESS) 2 1 (MORE) * * | | e 3) though (node 1) And the tree of the five nodes looks like this: ****************************************************would be in this order: april (node 2) might (node 4) mm (node 0) showers (nod list, using these concepts of entering and printing, and you'll get a good idea of how a binary tree works. Efficiency of the Tree Sort Compared to assembly-language programs, BASIC programs are always very slow, for their commands must first be interpreted into assembly language and because most of them can refer to memory addresses only indirectly, through variables. I recently read of an assembly-language sorter that will process 1,000 entries in less than 3 seconds. x=startstart+pl line$(x)&:"Press RETURN to continue: ";r$ page=page+1:start=start+pl+1Mpage300,310,320,330,340,350,340,370,360,360,310,300,330,380,310,310,390!x=starttotline:line$(x):*::"Press RETURN to go to menu: ";utput file name (RETURN=.CONSOLE): ";r$52r$=""fl$=".CONSOLE":ۻr$,1)<>"."07):40<#1,"treetise":x=1 Fž#1100P#1;line$(x):x=x+1:80d:totline=x:nr$<>""#1,fl$:#1:x=1totline:line$(x)::200xstart=1:page=1:pl=21line$(700)U :"This program prints a text file explaining how the treesort program works in"T"BASIC. You can print the text to .CONSOLE or to .PRINTER or you can load the"8"file named 'Treetise' into your word processor.":6("Specify oour Apple ///s do with this program. ram. ith about 205K allocated to the program. (Unfortunately, strings can't use the leftover space.) When someone talks about the superiority of IBM, you can smile smugly and point out that IBM's BASIC has only 64K available. It couldn't begin to do the job strings alone--plus an array holding 21,600 integers for the pointers, plus all of the other housekeeping notes the computer must write for itself. All of it adds up to about 140K. The /// has a lot of space left over, but then its BASIC is a monster, w and you'll see why. The old ox would need only one comparison per entry with an ordered list.) Capacity of the Program On our 256K Apple ///, this program can handle slightly over 7,200 seven-letter words--about 50K ofIC sorter. One note: This program works best when your entries are out of order . Unlike my old ox bubble sort, it will run most slowly when all entries are in order to start with. (Work through the tree with an ordered list, counting comparisons,y old ox which required 69,532 comparisons for the same file and took 28 minutes and 12 seconds to execute. This tree sort program required only 4,849 comparisons for that file and finished working in four and a half minutes. To me, that's a fast BAS I used to drive. I think of this tree sort in the same way, comparing it with other BASIC sorters. The simplest bubble sort of 500 entries requires 124,750 comparisons. I didn't want to take the time to time it. I assume it would take longer than mless I have an assembler program which translates assembly-language into code, but I can write a program in BASIC. Finally, speed is a relative concept. My Ford EXP is no grand prix racer, but it's fast enough for me--much faster than the Chevy truck("Lightning Sort"; Russ Gaspard. Compute! , September, 1984). But Gaspard never explained how it works. If something goes wrong or if I want to modify it, how do I fix it? In addition, I can't write an assembly-language program on my computer unr$:#0:"hello",pl=21::1306pl=13::130@pl=15::130Jpl=17::130Tpl=19::130^pl=5::130hpl=14::130rpl=18::130|pl=9::130pl=11::180/ WAP /// SIG MENU.MAKER PROGRAM (v. 6.1) =".D1"210: Coldstart (320: Warmstart &*X=11000: TEXT SLOW-DOWN LOOP ,X.1 CHANGE DISK SUBROUTINE23œ202:2200<RFa$=" YOU MAY SELECT YOUR DISK BY V,2))=0"12";џ,6);:ٟ;$П,2))=>12" PM-":" AM-" 1830WW=1530 =26:=21 1600 &:WW=1:0 :SEG=1;".D1/S EG.F" SEG=1".D1/SEG.G"diskname$=3802  CATCH PASCAL TEXT FILES "JUNE":1750M$="JULY":1750M$="AUGUST":1750M$="SEPTEMBER":1750M$="OCTOBER":1750M$="NOVEMBER":1750M$="DECEMBER":1750826);"-";M$;" ";Ѡ,2));", ";"19";Р,2);" ";/П,2))=>13П,2))-12;џ,6);:1780$~240:=24:=0:"@ ..... "DATE.TIME.LINE" ....JM=Ҡ,4,2))BTM1630,1640,1650,1660,1670,1680,1690,1700,1710,1720,1730,1740^M$="JANUARY":1750hM$="FEBRUARY":1750rM$="MARCH":1750|M$="APRIL":1750M$="MAY":1750M$=B$(I),"CAT 0")1140*B$(I),"FONT 0")18504B$(I),"FOTO 0")1930>B$(I),"PASTXT 0")2070H540R\A$="RUNNING "+B$(I),16,B)f"79C";A$;:=0pB$(I),16,B) z::SEG=1".D1/SEG.T"t=+B$(I),16,B) yCT=CT+1I=1:I=2I>2=-1:I=I-2:IBOTM<30THPOS=44I=IBOTM/2)*2:=+IBOTM/2)-1:0=+IBOTM/2-.5):I=IBOTM:I/2=I/2)I=I-1 œ2120B=B$(I),16)," ")-1 B$(I),"BASIC 0")850B$(I),"TEXT 0")890 81+LCA):::: RebootN=THPOS:B$(I);XA<8A>11540bA-7640,660,690,720l:=THPOS:B$(I);v:520: 500THPOS=4:I/2=I/2)I=I-1I=IBOTM THPOS=44:I/2<>I/2)I=I+1I13000Zha$="{,|,~,}; selects; to new disk; J/2)=4:=+1:ۙ=44B$(J);:J=J+1I:1,180,22:2,280,21:2,2380,23:8A$(1000),B$(1000),C%(511),C$(20),name$(20):=10:=0UCA=128:LCA=UCA+32CT=15 IF PREFIX$= PREFIX$+MID$(B$(I),1OLUME NAME (/DISKNAME) OR DEVICE NAME (.Dx)"P12);::"80C";a$;:Zb$="CHANGING DISKS"$d=23:=0::"80C";b$;::12).n=12:=20:"MAKE A NEW MENU FOR DISK: ";N$xN$)<2110=N$ :210 I=1L(A$(I),A$))200B$( 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T READ PASCAL TEXT FILES."04=10:"78C";"ANY KEY RETURNS TO THE MENU.">G$:::320H: Error Routine 202:U=11:"79C";"BAD PATH ERROR (NO DISK IN DISK DRIVE OR DESIRED FILE NOT FOUND.)"X=11000:X:::210Z a$="{,|,~,}; selects; back 1 level; 1842:::Z=1980*:=23:=0::"79C";"CONTINUE...?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"10 MENU.MAKER TEXT MODULESEG=0"MENU.MAKER"890&*X=11000: TEXT SLOW-DOWN LOOP ,X.1,180,22:2,280,21:2,2380,23:z:A$="LISTING "+B$(I),16,B)$=01:=0::"80C";A$;::12)>=23:=0::"tion. Enjoy! ograms to our PD library. m accepts only UPPER CASE, so press ALPHA LOCK before you begin. f the file already exists, the program will load the file into memory. If not, the program will create a new textfile for you and will prompt for your command. To see a list of commands and command syntax, type '?' when you get the '>' prompt. The progra faster and more reliable. The program works with only one text file at a time. You must specify .D1/ or .D2/ as the start of the file name. If you've forgotten the name of your program's textfile, you can enter 'CAT .D2' when asked for the filename. Itically by whatever increment you wish. (Default is 10.) It allows you to insert, delete, and replace both individual characters and ranges of lines. Although it will move lines and renumber program text files, Apple /// BASIC's own RENUMBER facility is AUTO BASIC BY ROBERT BOSTON This program is a line editor for text files of BASIC programs up to 3,000 lines long. It generates line numbers automa12405l=ơ):: Routine to back up one directory level.a$=С,l-1) s=a$)a$=a$,s-1)a$,1)="/"5060:s=s-1 5030=a$240( MENU.MAKER 6.10 * Thanks to C.M.Davidson for his help!30C$="N"C$="n"1160;:=23:=0::"79C";"PRESS ANY KEY TO HALT LISTING": $1020.202 8::Z=1B::=23:=0::"79C";"WOULD YOU LIKE A PRINTED COPY?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"1170*C$="N"C$="n"EAD PASCAL TEXT FILES."04=10:"78C";"ANY KEY RETURNS TO THE MENU."!>G$:::".D1/MENU.MAKER",320R",220(204::"79A";""; 2D=1:F=1 <#4;a$ FD=D+1 P#5;a$ZD=60#5;12)dD=60D=1nF=F+1::d$;::Y=1100:Y x13402  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T R".D1/MENU.MAKER",220 d$="" A$="PRINTING "+B$(I),16,B)=01:=0::"80C";A$;:#3,B$(I),16,B)Z=1#3;b$:"78A";b$Z=Z+1:Z=18:1290 1260 #4,B$(I),16,B)#5,".PRINTER"+ž#4#5;12):::".D1/MENU.MAKE