LnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!) /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// SIG, Washington Apple Pi 12022 Parklawn Drive Rockville, MD. 20852 (301)-984-030 %SEG.T jŸ/ 1-!/ *HELLO.TEXT1-*MENU.MAKER };>READ.ME.FIRSTk  *SOS.DRIVER o4;Z*SOS.INTERP 4ke1-! *SOS.KERNEL @,V1.!aIII.REP.06S.05Au' +DISKMAP.DOC'12!1,DISKMAP.TEXT?|1/!ͮDISKNAME.DAT1/!14*DMASM.TEXT 10!FLASHNAME.DATH1/!15HELLO >dLԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@L0 WELCOME! WAP /// SIG Public Domain Library Category/Number: Repairs/3REP-06 Disk Format: Self-booting BOTH sides Diskmap is a hard disk dir 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"5 WAP /// SIG HELLO PROGRAM. UPDATED 4/12/89 DGO :#1,".D1/hello.text" ž#170 (#1;ERIN$ 2ERIN$<40F#1/P=23:=25:"PRESS ANY KEY TO CONTINUE.":G$U-Z#2,".D1/FLASHNAME.DAT":#2;FLASH$:#2%dFLASH=110: FLASthis one is self-booting. On this side, you'll find the documentation. Read it carefully. Side two is also bootable and is the actualy program. Thanks for supporting our PD library by purchasing this disk! ectory fixer written by TAUS's Rick Sidwell. It will: 1) print a map of what blocks are used by each file on your disk, 2) check the structure of your disk for problems, and 3) fix any errors which exist. As with most of our PD disks, 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 keypadkmach file on your disk, 2) To check the structure of your disk for problems, and 3) To fix any errors which exist. On Side One: DISKMAP.DOC :Complete documentation for Disk Map. On Side Two: Disk Map program. Self booting (Pascal based). WAP /// SIG PUBLIC DOMAIN LIBRARY (JANUARY 1992) PDS NAME: Disk Map By Rick Sidwell DISK ID#: 3REP-07 BOOTABLE? Both Sides DESCRIPTION: This program is a hard disk directory fixer.It has three purposes: 1) To print a map of what blocks are used by e  )* 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"""""""> >>>xrL ==L: ,lCL <=L: <,n)LL8 L8 u:L8 ;)ߍ;j`; ;j`uBL8 uCL8 u)u;) u;L8    x) `(,  LuL-upp<`uqq=L: vuL L L #1:CY` 9C<m><=m@=>@?AL8 >m<>@m=@<=L8 <m>?=m@AL8 C9L8 ; ;k`;);k`,@`<,m p<L<`<p<`,ms<L=q=L: ,lXґȥӑ,10 h0  `,g0L  ҅ӥĥŰ+,0p 4 Ls  Ls i )"|tȌs|st HH` MjH,: <J h̰ <rh,oL`%CYgu9 Ln90$0%,7 ҥ L$0T,8OK50P;ҥ,8 L%\   8҅¥Ӆé҅L,5,6  & @jIH,5 p  He҅Ґhe…å逅h,23Lhʩd8,h)ec efeede`,5 H  h 4  `5!    4(P 4 4  `,g0L,10kH0 ԥ f0)ĭ9)9҅xh(ĥŐL i,1HȊ©L,52,9-P" a{) b) )ab)a a,h0& &+%a0 +hcefd(c,@cfabdf`cnx  (,4h`dd,9P"<:J H) +̰ H) +ʭcP h̰BTVSPLH   5"ʘ HH` (# (=  0`)aI88  >!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"""""< >>> <Le Le ,g0L HH`! ( 9EKQWbmz`(" ((è%È`2ȭ3`1`d`c`+È`&È` & IMk`4`5`6`7`8`9`<ȭ=` & @jI`:ȭpȭqé,i0L È`,g HH`LL! l      5  Hdcefh&+si  M0   h) `(" (  (È& 8  `)2ȱÍ3`)1`Ɂ" (cefd`Hc HH`! (`ɖ" (èÈ``,t0L4 HH`L  d!  `ɖ" ( dÈ  ``,t0L4 d0Cս30. , V  @„ȄL5/((((PPPP @``` @@@@`xp<@ @ :H9H` (# ( -l..PcJt`,t$ ( t`tL4`,t0L4www """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwwwwww(C) 1980 Apple Computer (+@EIR[ty} NQ9Copyright (C) 1983 Apple Computer, Inc. Graphics Driver..GRAFIX b """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwww     ! ( 0 7 I N S _  . G R Y f {    ! $ 4 9 F I P S V \ a h m p s x |     ' + < ? D G N U f k p x ?BEJMRUX]`h  2;AGMS[fot|              . 3 6 9 < ? B E H N S V \ _ b w  KORY\aelpu !$(+.147<?BFILORUX]`finsw| !%*/369<+;CNU\eh "*-036<BLORX_fj &+38;?DGLTot <?BGLQgjox',/25:BG̑ʈ0 Ցʭr̈A萠L: ֦ڱΑ0Б֤ h L  p,:0 JfiΥiώJe΅Хiю@ B $p̑бʑΈ0 Б̱ΑʈeمΐeمАA萿 :  `ʝ"`t  !#%')L: 8p,:Jf׮@$PA B $P@/A'ʤ˅΄ϥ̤ͅЄ B $̑бʑΈ0Ƞ h L: $)טɀIim>ٮ@8pذ `$0"8,:Jک@ׅפ؈۩MjL,:08*Ȅ B ,:J}΅н(I I $0;P̑бʑΈ,:JՐrx 0, )ߍ:) J)*PR,T,V( : `,k<,: JI`I`<,:J̰`=m@>,:J}ʅ̽(I I `<Mj,:0pJՐ̑ʈ`pJհ0`ՑʭrpȐ`=m@< B h A$g " x) (,`% (gL,}0, `gé ĩ `:) j:;jN;~j;O,:0'???>>8?>p<<AAA@@8A@q==C)CB)B C}0 x) `(`hh% ( ΍ ύ逅Ñ}`` " ( ĩ~Íĩϭ & &υΠÑΈ~ F ~ҰةeÅÐн},,P,`,g$ ( efh) `xÙ+(`xÙ&(`)4`)5`)6`)7`)8`)9`,i0!M:0p ȱq L `" (~)y ~JJ* I `x|x|,,}P-X~ F }~L } `,`ʝ`))ժuvЭ H ʊJyjhz|ֆ׆ح)JfJf$PIJfש ʈ8 @ש wx LVخ ʊJJJ莟mwwxix 0ޤՐڢ,P<0 )ߍL- J,P,QJ,R,SJ,T,U,W`,t0L40 ( dȅɥŐ ĐL /47=G\x{~'+.149?CGIKMOQSUWY[]_acegikmoqsuwy{}J) ܭL FܪJJJJ)`'+9;=?ACEGINR\aejns~  #&).369<ADGJMP^g $*-06=HLORWcfloruzp Q%Q̑`pPIE1pΦ#$01ʐ1`JJJJ)`%υߥ`1(ȦJJJ`&&*`JJ` **&*&ߥ`J` ***`` ` Jjjߊ` ߊ`JfJfFߪ߆` `JfJfJfF`ߩ`$011̰JJJ LP \LD$7߭$PH8 nߩ nh ߍϭ - k, ϥ- kϱϮEϑʩ`P z  HH` k(h`$0#$E$0p Q%Qʑ`pPIE1p$E$0(L%τ`ϩE҅0Ȅ(fL% ('Άѽн`8Hٰ hIiHمh8Iif٤Φݰ>Jj8ۅe݅eޅ $  m`!J8݅ eۅ$  m` , V $צ!ϤҐ мφi`Jf`<,&ʰ,i8i#Hiihifʦʆi) v`i,ʐi,iPIIʥ)ifʦʆ̐pLj/Fϐ&Ȅ`'@τ`Fϐ@ E҅F8ئȢΆѽϽ`/epɀjff&ݥeepɀjffݠ %)  %)`%  0.)      0  ` ` @ ``8٨JJJ ) u˘ vͽʅ̆`8Hi #i,$0F y բӅLx  mӥmԐL] h `  )`%)8`)    H   ʥ)Ģ    H Ģ L E% %) L 8`ۅ&ۥe륅eٍeڍ808٥8٥ 8مڅ H , V Εm٭mڭ))njnjnjfjfjfj+mӥmԐ8L( Ӣ й` m j`Hآ Hӭԭ h h`8٭028ٍڍ0Z$eٍeڍm٥m8٥08ٍڍ`8٥058ٍڍ0ԭ V 8fxL@ ] I)!) g 80 J8}L y L 0yʽz0 y L7  Lh `*f*&*)` ϭPh0 йPL)`)L` L``  `L` H , 8 V ТΕLϦI ] +)J* g I`LL) @L) L8``Lթ`~L8L)  =H 'HH N M))Mhh0 }LO}~~Șݻ~`}}~L< L }ީ~` ɠɀ)ӮԮmwӥmxԐ mi` HHGH`  &%(-47=FMUX\_jmz  .169DWfy   % * > A H K Z v z }      % , 1 5 : = B K R Z _ b g n s x ~    ) . 6 = J P S X [    $ 3 : = F d  > B H M s `e|&+.QVYcjuy~':{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,) ++`xEAD 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.MAKE30C$="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"79C";"PRESS ANY KEY TO HALT LISTING"::202 1020#2,B$(I),16,B)ž#242:::1160Z=1#2;A$:"78A";A$Z=Z+1:Z>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::"I82-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-,B$(I);v:520: 500THPOS=4:I/2=I/2)I=I-1I=IBOTM THPOS=44:I/2<>I/2)I=I+1I2=-1:I=I-2:IBOTM<30THPOS=44I=IBOTM/2)*2:=+IBOTM/2)-1:CA)"PRINT.ALL": OA+P 3HA=(81+UCA)A=(81+LCA):::: OA+Q Quits 3IA=(83+LCA)A=(83+UCA)"PRINT.SHOW": OA+S 2JA=(68+LCA)A=(68+UCA)/Screen.Savers/HELLON=THPOS:B$(I);XA<8A>11540bA-7640,660,690,720l:=THPOS:ٺ1600 =Q:WW=0A=:A=21A=9&oldprefix$=40A=31410: Control C "aborts" program to Basic(:A=13770: Return Selects a file *DA=27:50: Escape to change disks/FA=324000: back out one directory level 3GA=(80+UCA)A=(80+L"BASIC 0":150A$="TEXT 0":150A$="CAT 0":150A$="FONT 0":150A$="FOTO 0":150A$(L),"BLOCKS")510*=27:=19:"FREE MEMORY AVAILABLE: ";=7:=20:"80C";A$(L);$:=5:THPOS=4:I=1:IBOTM=J-1:620Q=:=26:=21:sic; +Q Quits."r12);::"80C";a$;:+w#9,"DISKNAME.DAT":#9;DISKNAME$:#9|d$=DISKNAME$$=23:=0::"80C";d$;::12)201M=3:=14:"This /// SIG Disk is \^ 19";Р,2)", Washington Apple `, Ltd."=4:B$(1)="":B$(2)=""A$=16,B) THEN 240 #1, d$="":=10:"80C";d$ ž#1300I=0"I=I+1:#1;A$(I):290,#1 6L=I-1@j=1:same=0 J:SEG=0 Tœ2030^CT<1CT=1cCT>13000Zha$="{,|,~,}; 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),VOLUME 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$0 WAP /// SIG MENU.MAKER PROGRAM (v. 6.2) =".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 $(/4:?IXad#ˆ̭U)? VW @ ?ddxtB˩Eʍ@Xx ,P Eʍ(itiBX`,A0Lp HH`! (```,A0Lp HH`L%&S```lBcguwy{}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 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+1~240:=24:=0:"@ ..... "DATE.TIME.LINE" ....JM=Ҡ,4,2))BTM1630,1640,1650,1 bO^֮WE APPRECIATE YOUR COMMENTS AND SUGGESTIONS TO MAKE THE /// SIG BETTER! DISKMAP by RICK SIDWELL ISK el; 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 lev 1600 &:WW=1:0 :SEG=1;".D1/S EG.F" SEG=1".D1/SEG.G"diskname$=3802  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T READ PASCAL TEXT FILES."04=10:"M$="NOVEMBER":1750M$="DECEMBER":1750826);"-";M$;" ";Ѡ,2));", ";"19";Р,2);" ";/П,2))=>13П,2))-12;џ,6);:1780$П,2))=0"12";џ,6);:ٟ;$П,2))=>12" PM-":" AM-" 1830WW=1530 =26:=211660,1670,1680,1690,1700,1710,1720,1730,1740^M$="JANUARY":1750hM$="FEBRUARY":1750rM$="MARCH":1750|M$="APRIL":1750M$="MAY":1750M$="JUNE":1750M$="JULY":1750M$="AUGUST":1750M$="SEPTEMBER":1750M$="OCTOBER":1750Program DiskMap; { DiskMap - Apple /// Disk Mapper and Integrity Checker Written by Rick Sidwell Copyright 1987 by Rick Sidwell. This program and its documentation may be copied and distributed freely on a non- Repeat #Write('Name of device to map: '); { Read device name from user } #Readln(S); #If EOF Then Exit(Program); { Check for abort }  SOSNum := DevNum(S); { Get SOS number } #If SOSNum=0 #Then &Begin &Writeln('No suce } { Adapted from procedure on p. 109 of the Pascal Tech. Ref. Manual } VAR #S: String; #SOSNum,PasNum:Integer; #Data: Packed Record ,RegUnits: Packed Array [1..20] of Byte; ,UsrUnits: Packed Array [128..147] of Byte; )End; ) Begin { GetDevice } H{ Blocks conflicting with others }   Function DevNum(Var S:String):Integer;External; Function BMScan(Var Used,Bitmap; I,Upper,Mode:Integer):Integer;External; Function GetDevice:Integer; { Ask for device name and return Pascal unit number of that devi used blocks on the disk } #BitMap: Packed Record Case Boolean of + True: (A: Packed Array [0..MaxBlock] of Boolean); + False: (B: Array [0..BMSize] of Buffer); +End; H{ Disk's bitmap } #Conflict: Packed Array [1..100] of Integer; ng; #OFName: String; { Output file name } #FO: Interactive; { Output file }  Buf: Buffer; { Buffer for reading blocks } #Used: Packed Array [0..MaxBlock] of Boolean; @ { Map ofFirst number of current range } #LastNum: Integer; { Last number of current range } #ConfNum: Integer; { Number of entries in Conflict }  I: Integer; { General purpose integer } #S: Stri#BMStart: Integer; { First block of bitmap }  ListPos, { Beginning position of list output } #CurPos, { Current position of output } #FirstNum, { Number of corrections made } #BadType: Boolean; { True if file with illegal type } #BCount: Integer; { Counts number of blocks in a file }  TotBlocks: Integer; { Total blocks } g= String[255];  VAR #VolNum: Integer; { Pascal volume number } #Verb: Integer; { Verbosity (0-4) } #NErr: Integer; { Number of errors detected } #NCorr: Integer; { of output } #MaxBlock= 32700; { Max. block # on disk } #BMSize = 8; { Max. # of blocks in bitmap J(should be (MaxBlock div 4096) + 1 }  TYPE #Byte= 0..255; #Buffer= Packed Array [0..511] of Byte; #LStrin{ BEFORE MODIFYING THIS PROGRAM, PLEASE ADD YOUR INITIALS TO THE VERSION. *For example, Version = '1.2dhj' }  CONST #Version = '1.2 '; { Version ID } #MaxPos= 80; { Width ication that you would like to see distributed widely, please contact the author, Rick Sidwell, CompuServe account 74066,3112, or care of TAU, Third Apple Users, 1113 Wheaton Oaks Drive, Wheaton, Illinois 60187. }  ersion number so that it is clear to users that it is a modified version. This is to protect users from modifications that inadvertantly destroy disks instead of fix them, something which is easy to do with a program of this type. If you have a modifprofit basis. All other rights, including the right of commercial distribution, adaptation to other computers, and modification are reserved. If you make any modifications, they must be for your own private use, and you must add your initials to the vch device.'); &End #Else &Begin &UnitStatus(0,Data,0); { Get SOS <-> Pascal conversion table } &PasNum := Scan(41,=Chr(SOSNum),Data)+1; { Look up Pascal number } &If PasNum = 42 &Then )Begin )Writeln('Device not accessible from Pascal.'); )End &Else If PasNum>20 &Then )Begin )GetDevice := PasNum+107; { Return user unit number } )Exit(GetDevice); )End &Else )Begin )GetDevice := PasNum; { Return regular unit number }  { Start new range } #LastNum := N; #If N=-1 #Then &Writeln(FO); #End; End { AddList };  Procedure MarkUsed(Blk:Integer); { Mark the block Blk as used. Make sure it isn't already used first. } Begin { MarkUsed } If Blk>= TotBlocks gin &Writeln(FO); &Write(FO,' ':ListPos); &CurPos := ListPos; &End; #Write(FO,FirstNum); { Print the range } #If FirstNum <> LastNum #Then # Write(FO,'-',LastNum); #CurPos := CurPos + Len; #FirstNum := N; &CurPos := CurPos + 2; &End; #Len := Log10(FirstNum); { Calculate length of item } #If FirstNum <> LastNum #Then &Len := Len + 1 + Log10(LastNum); #If CurPos+Len+2 >= MaxPos { Put on new line if it won't fit } #Then &Bethis continues previous item } Then #LastNum := N Else { If this doesn't continue sequence } #Begin #If CurPos<>ListPos { Print a comma unless first column } #Then &Begin &Write(FO,', '); List } If Verb<4 Then Exit(AddList); { Make sure verbosity is high enough }  If LastNum = -1 { If this is the first item } Then #Begin #FirstNum := N; #LastNum := N; #End Else If N = (LastNum+1) { If { Log10 } If N>9999 Then Log10 := 5 Else If N>999 Then Log10 := 4 Else If N>99 Then Log10 := 3 Else If N>9 Then Log10 := 2 Else Log10 := 1; End { Log10 };  Procedure AddList(N:Integer); { Prints N as an entry in a list }  VAR #Len: Integer; Begin { AddCurPos := HPos; { That is the current position too } FirstNum := -1; { No range yet } LastNum := -1; End { StartList };  Function Log10(N:Integer):Integer; { Returns the number of digits taken by N } Begin ; End { High };  Procedure StartList(HPos:Integer); { Begin a list of numbers; arg is current position }  Begin { StartList } ListPos := HPos; { List starts at specified position } &End;  Begin { Low } C.I := W; Low := C.L; End { Low };  Function High(W:Integer):Byte; { Returns the high order byte of W } VAR #C: Packed Record Case Boolean of (True: (I:Integer); (False: (H,L:Byte); &End;  Begin { High } C.I := W; High := C.HDuplicate volume'); &Otherwise Write('Number ',Err); &End { Case };  Writeln; #End; End { IOReport }; Function Low(W:Integer):Byte; { Returns the low order byte of W } VAR #C: Packed Record Case Boolean of (True: (I:Integer); (False: (H,L:Byte);&7: Write('Illegal pathname'); &8: Write('Disk full'); &10: Write('File not found'); &16: Write('Write protected'); &36: Write('Device not available'); &64: Write('Device error'); &73: Write('Directory full'); &80: Write('File busy'); &87: Write('x }; Function IOReport:Boolean; { Check IOResult, print error and return false if not 0, return true if 0 } VAR #Err: Integer; Begin { IOReport } Err := IOResult; IOReport := (Err=0); If Err<>0 Then #Begin #Write('I/O ERROR: '); #Case Err of ction GetFix(S:String):Boolean; { Print S, wait for Y or N, return true if Y } Begin { GetFix } Write(S); Readln(S); If S='' Then S:='N'; If ((S[1]='Y') or (S[1]='y')) Then #GetFix := True Else #Begin #GetFix := False; #Error(False); #End; End { GetFi)Exit(GetDevice); )End; &End; Until False; End { GetDevice };   Procedure Error(Fixed: Boolean); { Increments number of errors; also number of corrections if Fixed } Begin { Error } NErr := NErr+1; If Fixed Then #NCorr := NCorr+1; End { Error }; Fun { If block is out of range } Then #Begin #ConfNum := ConfNum+1; #Conflict[ConfNum] := Blk; #End Else #Begin #If Used[Blk] { If block is already in use } #Then &Begin &ConfNum := ConfNum+1; &Conflict[ConfNum] := Blk; &End; #Used[Blk] := True; #End; End { MarkUsed }; Procedure ShowConflicts; { Show blocks in Conflict, if there are any } VAR #I: Integer; #OldVerb: Integer; { Old verbosity } Begin { ShowConflictFO,Day:2,'-'); #Case Month of $0: Write(FO,'000'); $1: Write(FO,'Jan'); $2: Write(FO,'Feb'); $3: Write(FO,'Mar'); $4: Write(FO,'Apr'); $5: Write(FO,'May'); $6: Write(FO,'Jun'); $7: Write(FO,'Jul'); $8: Write(FO,'Aug'); $9: Write(FO,'Sep'); $10: #Kludge: Packed Record Case Boolean of 0True: (P4,P3,P2,P1: Byte); 0False: (Day: 0..31; 8Month: 0..15; 8Year: 0..127; 8Minute: Byte; 8Hour: Byte) -End { Record }; Begin { ShowDate } With Kludge Do #Begin #P1:=D1; P2:=D2; P3:=D3; P4:=D4; #Write(&253: Write(FO,'Applesoft Variables'); &254: Write(FO,'Relocatable Code'); &255: Write(FO,'ProDOS System'); &Otherwise Write(FO,'ProDOS Reserved (',T,')'); #End { Case }; End { ShowType }; Procedure ShowDate(D1,D2,D3,D4:Byte); { Display a date } VAR &240: Write(FO,'ProDOS Added Command'); &241,242,243,244,245,246,247,248: Write(FO,'ProDOS User Defined ',T-240); &250: Write(FO,'Integer BASIC Program'); &251: Write(FO,'Integer BASIC Variables'); &252: Write(FO,'Applesoft Program'); een Library'); &25: Write(FO,'/// EZ Pieces Data Base'); &26: Write(FO,'/// EZ Pieces Word Proc.'); &27: Write(FO,'/// EZ Pieces Spreadsheet'); &Otherwise Write(FO,'SOS Reserved (',T,')'); #End { Case } Else #Case T of &239: Write(FO,'Pascal Area');ssor'); &12: Write(FO,'SOS file'); &15: Write(FO,'Directory'); &16: Write(FO,'RPS Data'); &17: Write(FO,'RPS Index'); &18: Write(FO,'AppleFile Discard'); &19: Write(FO,'AppleFile Model'); &20: Write(FO,'AppleFile Report Format'); &21: Write(FO,'Scr&3: Write(FO,'Pascal Text'); &4: Write(FO,'ASCII Text'); &5: Write(FO,'Pascal Data'); &6: Write(FO,'Binary'); &7: Write(FO,'Font'); &8: Write(FO,'Screen Image'); &9: Write(FO,'BASIC Program'); &10: Write(FO,'BASIC Data'); &11: Write(FO,'Word Proce'?'; #End; Write(FO,Name); End { ShowName }; Procedure ShowType(T:Integer); { Display a file type } Begin { ShowType } If T<192 Then #Case T of &0: Write(FO,'Unknown'); &1: Write(FO,'Bad Blocks'); &2: Write(FO,'Pascal Code'); #End; End { CheckName }; Procedure ShowName(Name:LString); { Print file name, with possibly illegal characters } VAR #I: Integer; Begin { ShowName } S := ''; For I := 1 to Length(Name) Do #Begin #If (Name[I]<'!') or (Name[I]>'~') #Then &Name[I] := char must be letter } #Then &CheckName := True; #For I := 2 to Length(Name) { Others can be numbers or . } #Do &If ((Name[I]<'0') and (Name[I]<>'.')) or )((Name[I]>'9') and (Name[I]<'A')) or (Name[I]>'Z') &Then )CheckName := True;If Length(Name)=0 { Make sure name isn't empty } Then #Begin #CheckName := True #End Else #Begin #CheckName := False; { Assume it is legal } #If (Name[1]<'A') or (Name[1]>'Z') { First OldVerb; { Restore old verbosity } #End; ConfNum := 0; End { ShowConflicts };  Function CheckName(Name:LString):Boolean; { Return true if name is bad; false if it is legal } VAR #I: Integer; Begin { CheckName } { but only momentarily } #Writeln('ERROR: Some blocks in use by another file.'); #Write('Conflicting blocks: '); #StartList(20); #For I := 1 to ConfNum #Do &Begin &AddList(Conflict[I]); &Error(False); &End; #AddList(-1); #Verb :=s }  If ConfNum=1 Then #Begin #Writeln('ERROR: Block ',Conflict[1],' in use by another file.'); #Error(False); #End Else If ConfNum>0 Then #Begin #OldVerb := Verb; { Change verbosity to 4 } #Verb := 4; Write(FO,'Oct'); $11: Write(FO,'Nov'); $12: Write(FO,'Dec'); $13: Write(FO,'013'); $14: Write(FO,'014'); $15: Write(FO,'015'); $End { Case }; #Write(FO,'-'); #If Year<10 #Then &Write(FO,'0'); #Write(FO,Year,' ',Hour:2,':'); #If Minute<10 #Then &Write(FO,'0');  Write(FO,Minute); #End; End { ShowDate }; Procedure DoDir(SBlock:Integer;Prefix:LString;PP,PEN,PEL:Integer); { Generate map of directory starting at SBlock. Prefix is its prefix } { PP, PEN, and PEL contain parent info for cOffset+29]); &Writeln(FO,'Access byte: ',Buf[Offset+30]); &Writeln(FO,'Aux. field: ',Buf[Offset+31] + 256*Buf[Offset+32]); &Write(FO,'Modified: '); &ShowDate(Buf[Offset+33],Buf[Offset+34],Buf[Offset+35],Buf[Offset+36]); &Writeln(FO); &Writeln(FO,'Heafset+22]; PEOF := 256*EOF + Buf[Offset+23]; &Writeln(FO,'EOF: ',EOF); &Write(FO,'Created: '); &ShowDate(Buf[Offset+24],Buf[Offset+25],Buf[Offset+26],Buf[Offset+27]); &Writeln(FO); &Writeln(FO,'SOS Version: ',Buf[Offset+28], J' Min. Version: ',Buf[&EOF: Integer[10]; { End of file } # &Procedure ShowInfo; &Begin { ShowInfo } &Write(FO,'Type: '); &ShowType(Buf[Offset+16]); &Writeln(FO); &Writeln(FO,'Blocks used: ',FSize); &EOF := Buf[Offset+23]; EOF := 256*EOF + Buf[OfIndicated file size } &FileType, { Storage type } &Ptr: Integer; { Pointer to key block } &NameErr: Boolean; { Illegal file name found } f not } #VAR &Name: String[15]; { File name } &NameLen, { Length of file name } &HP, { Actual header pointer } &FSize, { Integer):Boolean; #{ Process the file with offset Offset in current directory block } #{ Header is the key block of the directory for consistency check } #{ PP, PEN, and PEL contain parent info for consistency check } #{ Returns True if active, False i,Begin { If not, print that block } ,AddList(Blk); ,MarkUsed(Blk); { and mark the block used } ,BCount := BCount+1; ,End; &End; #End { ListIndex };  #Function DoFile(Offset,Header,PP,PEN,PEL:er } &If Blk<>0 { If block in use } &Then )If Tree { If tree file, list that } )Then { index block } ,ListIndex(Blk,False) )Else Count for each existing block } #VAR &Buf: Buffer; &I,Blk: Integer; #Begin { ListIndex } #UnitRead(VolNum,Buf,512,Ptr); { Read index block } #For I := 0 to 255 #Do &Begin &Blk := Buf[I] + 256*Buf[I+256]; { Calc. block numb{ FixBlock } #UnitWrite(VolNum,Buf,512,N); { Write the block } #Error(IOReport); #End { FixBlock }; #Procedure ListIndex(Ptr:Integer;Tree:Boolean); #{ List blocks in index block Ptr, recursively if Tree (tree file) } #{ Adds one to B#NameErr: Boolean; { Illegal name } #VolDir: Boolean; { True if volume directory } #Procedure FixBlock(N:Integer); #{ Write Buf to block N of the disk, calling Error(True) if successful } #Begin per block } #NFiles, { Actual number of files } #FCount: Integer; { # files in directory } #Name: String[15]; { Directory name } Offset, { Offset of file entry } #Entry, { Entry number } #ELength, { Entry length } #EntPerBlock, { # entriesonsistency check } VAR #Buf: Buffer; { Buffer for directory blocks } #I, { General purpose integer } #L, { Back link for directories } #der pointer: ',HP); &End { ShowInfo }; # #Begin { DoFile } #FileType := Buf[Offset] div 16; { Get file type } #FSize := Buf[Offset+19] + 256*Buf[Offset+20]; #HP := Buf[Offset+37] + 256*Buf[Offset+38]; # #If FileType=0 { Skip inactive files } #Then &Begin &DoFile := False; &Exit(DoFile); &End #Else &DoFile := True; # #NameLen := Ord(Odd(Buf[Offset]) and Odd(15)); { Get length of file name } #{$R-} #Name[0] := Chr(file size? ') &Then )Begin )Buf[Offset+19] := Low(BCount); )Buf[Offset+20] := High(BCount); )FixBlock(PP); )End; &End; # #If Verb>=3 #Then &Writeln(FO); #End { DoFile }; # #Procedure ShowInfo; #Begin { ShowInfo } #Write(FO,'Created: '); #Sursive call to do it } )End; %Otherwise { Ignore it }; { Illegal storage type } %End { Case }; # #If (FileType<=3) and (BCount <> FSize) #Then &Begin &Writeln('ERROR: File size incorrect (should be ',BCount,')'); &If GetFix('Fix (AddList(-1); { Finish up the list } (ShowConflicts; { Report any problems } (End; %13: Begin { Subdirectory } % DoDir(Ptr,Prefix,PP,PEN,PEL); { Recocks } (StartList(14); (ListIndex(Ptr,False); (AddList(-1); { Finish up the list } (If Verb=4 (Then +Write(FO,'Data blocks: '); { Show data blocks } (StartList(13); (ListIndex(Ptr,True); oblems } (End; %3: Begin { Tree file } (If Verb=4 (Then +Writeln(FO,'Master index block: ',Ptr); { Show master index block } (MarkUsed(Ptr); (If Verb=4 (Then +Write(FO,'Index blocks: '); { Show index bld(Ptr); (If Verb=4 (Then +Write(FO,'Data blocks: '); { Show data blocks } (StartList(13); (ListIndex(Ptr,False); (AddList(-1); { Finish up the list } (ShowConflicts; { Report any pr+Writeln(FO,'Data block: ',Ptr); { Just one block } (MarkUsed(Ptr); (ShowConflicts; (End; %2: Begin { Sapling file } (If Verb=4 (Then ( Writeln(FO,'Index block: ',Ptr); { Show index block } (MarkUse; &End; & #Ptr := Buf[Offset+17] + 256*Buf[Offset+18]; { Get key block } #BCount := 1; { One block so far } #Case FileType of %1: Begin { Seedling file } (If Verb=4 (Then n &ShowInfo; # #If HP<>Header #Then &Begin &Writeln('ERROR: Header pointer incorrect (should be ',Header,')'); &If GetFix('Fix header pointer? ') &Then )Begin )Buf[Offset+37] := Low(Header); )Buf[Offset+38] := High(Header); )FixBlock(PP); )Endgal file name'); {*** Add option to rename } &Error(False); &End; # #If (FileType>3) and (FileType<>13) #Then &Begin &Writeln('ERROR: Illegal storage type'); &BadType := True; &Error(False); {*** Add option to delete } &End; # #If Verb>=3 #The(1: Writeln(FO,'(seedling)'); (2: Writeln(FO,'(sapling)'); (3: Writeln(FO,'(tree)'); (13: Writeln(FO,'(subdirectory)'); (Otherwise Writeln(FO,'(illegal type: ',FileType,')'); (End { Case }; &End; # #If NameErr #Then &Begin &Writeln('ERROR: Ille+34],Buf[Offset+35],Buf[Offset+36]); &Write(FO,' '); &ShowType(Buf[Offset+16]); &Writeln(FO); # End; # #If Verb>=3 #Then &Begin &Case FileType of { Show file type } (0: Writeln(FO,'(inactive)'); efix); { Display name } &ShowName(Name); &Write(FO,' '); # End; # #If Verb=1 #Then &Writeln(FO); # #If Verb=2 #Then &Begin &Write(FO,'':16-Length(Name)); &Write(FO,FSize:5,' '); &ShowDate(Buf[Offset+33],Buf[OffsetNameLen); { Get the file name } #MoveLeft(Buf[Offset+1],Name[1],NameLen); #NameErr := CheckName(Name); { Make sure it is legal } {$R+} # #If Verb>=3 #Then &Write(FO,'File '); #If Verb>=1 #Then &Begin &Write(FO,PrhowDate(Buf[28],Buf[29],Buf[30],Buf[31]); #Writeln(FO); #Writeln(FO,'SOS version: ',Buf[32],' Min. version: ',Buf[33]); #Writeln(FO,'Access byte: ',Buf[34]); #Writeln(FO,'Entry length: ',ELength,' ',EntPerBlock,' entries per block'); #Writeln(FO,'File count: ',FCount); #If VolDir #Then &Begin &Writeln(FO,'Bit map is at block ',Buf[39] + 256*Buf[40]); &Writeln(FO,'Total blocks: ',Buf[41] + 256*Buf[42]); &End #Else &Begin &Writeln(FO,'Parent pointer: ',Buf[39] + 256*Buf[40]); lock(SBlock); &End; #End; End { DoDir };  Procedure ShowFree; { Show blocks not used by any file, and blocks free in bitmap } Var I,BI,LastBMLoc:Integer; $Diff,BMRangeErr:Boolean; Begin { ShowFree }  If Verb=4 Then #Begin #Writeln(FO); #Write(FO,'try := 0; #End; If FCount <> NFiles Then #Begin #Writeln('ERROR: File count incorrect (should be ',NFiles,')'); #If GetFix('Fix file count? ') #Then &Begin &UnitRead(VolNum,Buf,512,SBlock); &Buf[37] := Low(NFiles); &Buf[38] := High(NFiles); &FixB&Offset := 4 + ELength*Entry; { Process next file } &Entry := Entry+1; &If DoFile(Offset,SBlock,I,Entry,ELength) &Then )NFiles := NFiles+1; &End; #L := I; #I := Buf[2] + 256*Buf[3]; { Follow link to next block } #Enpointer in directory'); &If GetFix('Fix reverse pointer? ') &Then )Begin { Fix reverse link } )Buf[0] := Low(L); )Buf[1] := High(L); )FixBlock(I); )End; &End;  While Entry (Buf[0] + 256*Buf[1]) { Verify reverse link } #Then &Begin &Writeln('ERROR: Incorrect reverse 0 }  I := SBlock; { Process each file in it } Entry := 1; { Start with second entry } NFiles := 0; { No files so far }  While I<>0 ShowConflicts; { Report problems } If Verb>=3 Then #Writeln(FO); Prefix := Concat(Prefix,Name,'/'); { Add directory name to prefix }   L := 0; { Back link starts out { Output block number } #MarkUsed(I); #I := Buf[2] + 256*Buf[3]; { Follow link to next block } #If I<>0 #Then &UnitRead(Volnum,Buf,512,I); Until I=0; AddList(-1); { Terminate list } #End; # If Verb>=3 Then #ShowInfo;  If Verb=4 Then #Write(FO,'Blocks used: '); { Show the blocks used by } StartList(13); { the directory } I := SBlock; Repeat #AddList(I); &Write(FO,'Volume directory ',Prefix); &End #Else &Begin &Writeln(FO); &Write(FO,'Header of subdirectory ',Prefix); &End; #ShowName(Name); #Writeln(FO); #End;  If NameErr Then #Begin #Writeln('ERROR: Illegal directory name'); #Error(False);MoveLeft(Buf[5],Name[1],I); NameErr := CheckName(Name); {$R+} VolDir := (Buf[4] >= 240); { See if volume directory }  ELength := Buf[35]; EntPerBlock := Buf[36]; FCount := Buf[37] + 256*Buf[38];  If Verb>=3 Then #Begin #If VolDir #Then &Begin f[26],', ',Buf[27]);  End { ShowInfo }; # Begin { DoDir } UnitRead(VolNum,Buf,512,SBlock); { Read first directory block }  I := Ord(Odd(Buf[4]) and Odd(15)); { Get length of directory name } {$R-} Name[0] := Chr(I); ') )Then ,Begin ,Buf[39] := Low(PP); ,Buf[40] := High(PP); ,Buf[41] := PEN; ,Buf[42] := PEL; ,FixBlock(SBlock); ,End; )End; &End; #Writeln(FO,'Reserved bytes: ',Buf[20],', ',Buf[21],', ',Buf[22],', ', +Buf[23],', ',Buf[24],', ',Buf[25],', ',Bu&Writeln(FO,' entry number: ',Buf[41],' entry length: ',Buf[42]); # If (PP<>(Buf[39] + 256*Buf[40])) or (PEN<>Buf[41]) or (PEL<>Buf[42]) &Then )Begin )Writeln('ERROR: Parent info not correct (',PP,',',PEN,',',PEL,')'); )If GetFix('Fix parent info?Unused Blocks: '); { Show unused blocks } #StartList(15); #I := -1; { Start at 0 (we'll add one) } #Repeat &I := BMScan(Used,BitMap,I+1,TotBlocks-1,0); &AddList(I); { Display next block } #Until (I=-1) or (I>=TotBlocks-1); #If I<>-1 Then AddList(-1); { Finish display if needed } #Writeln(FO); # #Write(FO,'Free in Bitmap: '); { Header for(VolNum,Buf,512,2); { Make sure it is SOS format } If (Buf[0]<>0) or (Buf[1]<>0) or (Buf[33]<>0) or (Buf[4]<240) Then #Begin #Writeln('Not a SOS volume.'); #Exit(Program); #End;  TotBlocks := Buf[41] + 256*Buf[42]; { Ryet }  BadType := False; { No file with bad type yet }  Writeln('DiskMap Version ',Version); { Show name and version } VolNum := GetDevice; { Get volume # of disk to map }   UnitReadFillChar(Used,Sizeof(Used),Chr(0)); NErr := 0; { No errors found yet } NCorr := 0; { No corrections either }  ConfNum := 0; { No conflicting blocks TotBlocks div 4096) + 1 &Do )UnitWrite(VolNum,BitMap.B[I],512,BMStart+I); &Error(IOReport); &End; #End;  End { ShowFree };  Begin { DiskMap } FillChar(BitMap,Sizeof(BitMap),Chr(0)); { Clear bitmap and used arrays } ngeErr #Then &Begin &Writeln('ERROR: Bitmap contains blocks not on disk.'); &End; #If GetFix('Fix Bitmap? ') { Our bitmap copy is good }  Then { Fix the user's? } &Begin &For I := 0 to (rr { Show error message(s) } Then #Begin #Writeln; #If Diff #Then &Begin &Writeln('ERROR: Bitmap doesn''t match file allocation.'); &If BadType &Then )Writeln(' (but file(s) with bad types not checked)'); &End; #If BMRa If I<>-1 Then AddList(-1); { Finish list if needed }   If Verb=4 Then #Begin #If not Diff { If no discrepancies, say so } #Then &Writeln(FO,'None'); #AddList(-1); #End;  If Diff or BMRangeE #Then % Begin {$Rangecheck-} &Diff := True; { Fix it, and set error flag } &BitMap.A[8*(I div 8) + 7-(I mod 8)] := Not Used[I]; &End; {$RangeCheck+} Until (I=-1) or (I>=TotBlocks-1); { Start at 0 (we'll add one) } Repeat #I := BMScan(Used,BitMap,I+1,TotBlocks-1,2); #AddList(I); { Display block } #If I<>-1 { That means we have a error }nish list if needed } If Verb=4 Then #Begin #Writeln(FO); #Write(FO,'Discrepancies: '); { Show discrepancy header } #End;  StartList(15); Diff := False; { No differences found yet } I := -1; {$RangeCheck-} &BMRangeErr := True; { We now have an error } &BitMap.A[8*(I div 8) + 7-(I mod 8)] := False; { Fix our copy } &End; {$RangeCheck+} Until (I=-1) or (I>=LastBMLoc); If I<>-1 Then AddList(-1); { Fi { No out of range blocks yet } Repeat #I := BMScan(Used,BitMap,I+1,LastBMLoc,1); #AddList(I); { Display next block } #If I>=TotBlocks { If out of range, correct it } #Then &Begin Else { If not, check only out of } #I := TotBlocks-1; { range blocks } LastBMLoc := 4096*(TotBlocks div 4096 + 1) - 1; { Check whole bitmap } BMRangeErr := False; bitmap display } #StartList(16);  End; { Show blocks free in bitmap; check them even if Verb<4 } If Verb=4 { If we are showing blocks } Then #I := -1 { start with block 0 } ead bitmap } BMStart := Buf[39] + 256*Buf[40];  For I := 0 to (TotBlocks div 4096) + 1 Do #UnitRead(VolNum,BitMap.B[I],512,BMStart+I); #  Write('Output map to: '); { Get output file name } Readln(OFName); If OFName='' { Default to .CONSOLE } Then #OFName := '.CONSOLE';  {$I-} Rewrite(FO,OFName); {$I+}  If Not IOReport Then #Exit(Program);  Write('Verbosity (0-4): '); { Get verbosity } Repeat #Rea; Assembly routines for DiskMap. ; Copyright 1987 by Rick Sidwell - see notice in documentation ; This file contains the following assembly procedures: ;  ; Function DevNum(Var Name:String):Integer ; Returns the SOS device number corresponding tO^Ԯ' corrected.'); #End; Close(FO,Lock); { That's all! } End.  No errors detected on this disk.') Else #Begin #Write(NErr,' error'); #If NErr>1 #Then &Write('s'); #Write(' found, '); #If NCorr=0 #Then &Write('none') #Else &Write(NCorr); #If NCorr=1 #Then &Write(' was') #Else &Write(' were'); #Writeln(ShowConflicts; { Make sure problems reported }  ShowFree; { Show the free blocks } Writeln;  If NErr=0 { Give a status report } Then #Writeln('ks div 4096) Do #MarkUsed(I);  ShowConflicts; { Report any problems }   DoDir(2,'/',0,0,0); { Generate the map } (0);MarkUsed(1);  If Verb=4 Then #Begin #Write(FO,'Bitmap: ',BMStart); { Show bitmap blocks } #If TotBlocks>4096 #Then &Writeln(FO,'-',BMStart + (TotBlocks div 4096)) #Else &Writeln(FO); #End; For I := BMStart to BMStart + (TotBlocdln(S); #If Length(S)=0 #Then &Verb := 2 #Else &Verb := Ord(S[1])-48; Until (Verb>=0) and (Verb<=4);  If Verb=4 Then #Begin #Writeln(FO); #Writeln(FO,'Bootstrap loader: 0,1'); { SOS always reserves these } #Writeln(FO); #End;  MarkUsedo device Name ;  ; Function BMScan(Var Used,Bitmap; I,Upper,Mode:Integer):Integer; ; Scans used block or bitmap array, starting at I, returning ; the next unused block or conflict. Upper is upper bound for ; scan. Mode is 0 to check Used, 1 to check Bitmap, and 2 to ; compare the two. ; First, define the standard Push and Pop macros (.macro Pop (PLA (STA %1 (PLA (STA %1+1 (.endm ( (.macro Push (LDA %1+1 (PHA (LDA %1 (PHA (.endm ( (.func DevNu ;Otherwise, Mode=2 -> compare Used with BitMap ; Compare Used with Bitmap. Report the next bit which is the same. Comp LSR UByte ;Get bit of Used (BCC $01  ASL BMByte ;Used set, how aboulization is now complete; the rest is mode-dependent. $04 LDY Mode ;See what to look for (BEQ UCheck ;Mode=0 -> check Used (DEY (BEQ BCheck ;Mode=1 -> check BitMap BNE $03 (LDA Upper+1 (CMP #0FF (BNE $03 (SEC (LDA EndBit ;Yes, # bits to go is Endbit - Current bit (SBC CBit (TAX (JMP $04 ( $03 LDA CBit ;Get # bits to go in X (EOR #07 (TAX ; Initiaap),Y (STA BMByte ( (LDY CBit ;Adjust current bytes to starting bits (BEQ $02 $01 LSR UByte (ASL BMByte (DEY (BNE $01 ( $02 LDA Upper ;See if we are already on the last byte (CMP #0FF ((CLC ;Point to starting byte of Bitmap (LDA BitMap (ADC I (STA BitMap (LDA BitMap+1 (ADC I+1 (STA BitMap+1 ( (LDY #0 ;Get current bytes (LDA (Used),Y (STA UByte (LDA (BitMBC I+1 (EOR #0FF (STA Upper+1 ( (CLC ;Point to starting byte of Used (LDA Used (ADC I (STA Used (LDA Used+1 (ADC I+1 (STA Used+1 ( 1 (ROR Upper (LSR Upper+1 (ROR Upper ( (SEC ;Calc. number of bytes ((Upper-I) div 8) (LDA Upper ;and take one's complement so we can INC it (SBC I (EOR #0FF (STA Upper (LDA Upper+1 (S(ROR I (LSR I+1 (ROR I (LSR I+1 (ROR I ( (LDA Upper ;Get ending bit number (Upper mod 8) (AND #7 (STA EndBit (LSR Upper+1 ;Get ending byte number (Upper div 8) (ROR Upper (LSR Upper+(Pop Mode ;Get parameters (Pop Upper (Pop I (Pop BitMap (Pop Used ( (LDA I ;Get starting bit number (I mod 8) (AND #7 (STA CBit (LSR I+1 ;Get starting byte number (I div 8) it number BMByte .equ 2 ;Current BitMap byte UByte .equ 3 ;Current Used byte  (Pop Return ;Save return address (PLA ;Remove function stack bias (PLA (PLA (PLA qu 0E6 ;Starting index Upper .equ 0E8 ;Upper bound Mode .equ 0EA ;Mode (0 for Used, 1 for Bitmap, 2 for compare) CBit .equ 0 ;Current bit number EndBit .equ 1 ;Ending b ;Device name Num .byte 0 ;Device number (.func BMScan,5 Return .equ 0E0 ;Return address Used .equ 0E2 ;Pointer to Used array BitMap .equ 0E4 ;Pointer to BitMap array I .e(.byte 0,84 ;Get_Dev_Num SOS call (.word GDNPrm (Push Num ;Return device number (Push Return ;Restore return address (RTS GDNPrm .byte 2 ;Get_Dev_Num parameter list .word Name m,1 Return .equ 0E0 Name .equ 0E2 (Pop Return ;Save return address  PLA ;Remove function stack bias (PLA (PLA (PLA  Pop Name ;Get address of Name t BitMap (BCS Report ;Report if it is too (BCC $09 ;Otherwise, go on to next bit $01 ASL BMByte ;Used reset, how about BitMap (BCC Report ;Report if it is too ;Otherwise, go on to next bit $09 DEX ;See if done with byte (BPL Comp ;No, do next bit (JSR NxtByte ;Get next byte (JMP Comp ; Report next bit set in BitMap. BCheck ASL BMByte ;Get the , and you must add your initials to the version number so that it is clear to users that it is a modified version. This is to protect users from modifications that inadvertantly destroy disks instead of fix them, something which is easy to do  be copied and distributed freely on a non-profit basis. All other rights, including the right of commercial distribution, adaptation to other computers, and modification are reserved. If you make any modifications, they must be for your own private use DiskMap - Apple /// Disk Mapper and Integrity Checker Written by Rick Sidwell EDITED by Dave Ottalini, WAP /// SIG 1/17/90 Copyright 1987 by Rick Sidwell. This program and its documentation may d ( BitMap ;Advance BitMap to next byte (BNE $06 (INC BitMap+1 $06 LDY #0 ;Get current bytes (LDA (Used),Y (STA UByte (LDA (BitMap),Y (STA BMByte (RTS ;Go back for more ( (.en$02 LDX #07 ;We aren't, so check all eight bits $03 INC I ;Increment byte index (BNE $04 (INC I+1 $04 INC Used ;Advance Used to next byte (BNE $05 (INC Used+1 $05 INC 1 (PHA (PHA (Push Return ;Restore return address (RTS $01 BNE $02 ;See if we are on the last byte (LDX EndBit ;We are, don't check the whole word (JMP $03 x (Push Return ;Restore return address (RTS NxtByte INC Upper ;One less byte to do (BNE $01 (INC Upper+1 (BNE $01 ;Make sure there is still work to do LDA #0FF ;If not, return -ound a bit to report; do so Report ASL I ;Byte index is in I; convert to bit index (ROL I+1 (ASL I (ROL I+1 (ASL I (ROL I+1 (TXA (EOR #7 (ORA I (STA I ( (Push I ;Return the indeUCheck LSR UByte ;Get the bit (BCC Report ;Report if if clear (DEX ;Otherwise, see if done with byte (BPL UCheck ;No, do next bit (JSR NxtByte ;Get next byte (JMP UCheck ; Fbit (BCS Report ;Report it if set (DEX ;Otherwise, see if done with byte (BPL BCheck ;No, do next bit (JSR NxtByte ;Get next byte (JMP BCheck ; Report next bit reset in Used. with a program of this type. If you have a modification that you would like to see distributed widely, please contact the author, Rick Sidwell, CompuServe account 74066,3112, or care of TAU, Third Apple Users, 1113 Wheaton Oaks Drive, Wheaton, Illinois 60187. That's enough legal stuff for now. Why did I put it there? To help prevent copies of DiskMap from going around which contain bugs, and to keep other people from making a profit since I don't. Why did I release the program for free distrinning the program with verbosity 4 if necessary) to see which one contains that block. No, this is not easy; it is an example of the lack of polish I mentioned above. This is, however, a serious problem which needs to be fixed. If it is not, t by the file currently being examined (the last name printed), is also used by another file. It will be one which was listed previously, but DiskMap will not just tell you which one. To find out, you need to look at the map for the previous files (rerulem fixed. Type Y to fix it, or N to leave it alone. Let us now examine each problem DiskMap can detect to see what it means, and what to do if it occurs. "Block x in use by another file" This error means that the specified block, which is used for, and checks for certain structural problems. Hopefully, that is all that will be printed, and no problems will be found. But if a problem is detected, DiskMap will tell you about it and, if DiskMap can fix the problem, ask whether you want the probr device or to a disk file, but you shouldn't put it on the disk you are mapping; this will confuse it. With that, DiskMap goes to work. It examines each file on the disk, prints the information about that file according to the verbosity you asked default is 2 if you just press return. DiskMap asks one more question before going to work: where would you like your disk map placed. Just press return to send it to the screen, or type .PRINTER to put it there. You can write to any charactethey use 4 - Show everything, including the disk blocks used by each file If you are running DiskMap to generate a map of your disk, choose 4. If you really don't want a map, try something a bit shorter; I personally prefer 1, although themeanings: 0 - Nothing but error messages 1 - List the filenames as they are being processed 2 - List the filenames and minimal information about each one 3 - Show everything about the files except the disk blocks e .PROFILE or .D1) and press return. If you want to change disks, do so before pressing return. DiskMap will then ask for something it calls a "verbosity level." This is simply an indication of how much output you want. The levels have the following TURN THIS WAP /// SIG PD DISK OVER AND REBOOT BY PUSHING AND AT THE SAME TIME. Once you get the program running, the rest is easy. DiskMap will first ask you what device you would like to map. Simply type the SOS device name (likDiskMap has to offer. DiskMap has three purposes: 1) To print a map of what blocks are used by each file on your disk, 2) To check the structure of your disk for problems, and 3) To fix any errors which exist. Running DiskMap is easy. SIMPLY might arise from an undiscovered bug. Please be sure to back up your disk before using DiskMap on it, just in case something happens. I have tested the program thoroughly, but that doesn't mean that it is perfect. OK, let's get on and see what ; DiskMap is just a good program. I have been trying to find time to do this for four months, and haven't, so I finally decided to let people use it as it stands. The second reason is that I don't want to take responsibility for the dire results whichbution? Several reasons: First, I just haven't had the time to polish the program. That doesn't mean it has bugs, just that some things it does could be done a lot better. This is, in my opinion, what distinguishes a good program from an excellent onehen modifying or deleting either of the files containing that bloc will either modify the other file, or put that block back into the bitmap, where another file might use it. Unfortunately, this is one of the few problems which DiskMap can not fix. If you are handy with a block editor, and familiar with the structure of SOS files, you can fix it manually. If not, try the following (making sure you have a backup first): Copy the file onto another disk, delete the file, and run DiskCheck again. This this error. DiskMap can fix it. "Parent data not correct" Each subdirectory contains data which indicates where the file entry of the subdirectory is in its parent's directory. If this information is wrong, DiskMap will give this error, and show tht should be. DiskMap can fix this error. "File size incorrect" The file size field of a file contains how many blocks are used by that file. It is this number which is printed in directory listings. If DiskMap detects that it is wrong, it gives tix this error. "Header pointer incorrect" The header pointer of a file points to the directory which owns it. SOS uses it when it needs to access the directory containing a file. If it is wrong, DiskMap will print this error, and tell you what iyou will be likely to lose some data. This is an error which DiskMap can fix. "Bitmap contains blocks not on the disk" This means that the bitmap indicates that some block is free which is not on the disk--the block number is too big. DiskMap can fally isn't, the problem isn't too serious--you will just not be able to use the full capacity of your disk. However if the bitmap says that a block is free which is really being used by some file, then you must fix the bitmap before using the disk, or tmap doesn't match file allocation" The bitmap is a structure on each SOS disk which tells SOS which blocks are free and which are allocated to a file. This error means that the bitmap is wrong. If the bitmap says that a block is allocated which restorage type the file is supposed to have, simply change it to the right type. Otherwise, you can just use the block editor to delete the file. In this case, run DiskMap again to make sure that all of the unused blocks are returned to the bitmap. "Bitorage type; it won't work. If you get this error and are using standard SOS, which doesn't support this illegal storage type, then SOS will not be able to access the file. You need to use a block editor to fix this problem. If you can tell what error, it just means that DiskMap is obsolete. However, you will probably also get a bitmap error, since DiskMap doesn't know how to find out what blocks this file is using. Don't trust DiskMap to fix bitmap errors if you have a file with an illegal stree, and directories (see the SOS manual for details). The byte which specifies which type this file is doesn't specify one of these types. If you are using a new version of SOS which has a new storage type, you'll get this error. But that's not yourfilename to a legal one. "Illegal directory name" This is the same as illegal filename, except that it is the name of a directory, not a normal file. "Illegal storage type" SOS supports four different storage types, called seedling, sapling, ure as for the single block case. "Illegal filename" SOS filenames may contain only letters, numbers, and periods; this one doesn't. That means that the file is inaccessable via SOS. You must use a block editor to fix this one; simply change the some data was probably lost before you discovered the problem. "Some blocks in use by another file" This error is the same as the previous one, except that there is more than one block involved; the offending blocks will be listed. Use the same cime, a bitmap error will be detected (deleting the file put the block back into the bitmap as a free block, but the block is not free; the other file is using it). This is an error which DiskMap can handle, so fix it. Then check both files carefully;ree numbers. The first number is the parent pointer, the second is the parent entry number, and the last is the parent entry length. See the SOS manual if you want to know what these numbers mean. DiskMap can fix this error. "Incorrect reverse pointer in directory" The individual blocks comprising a directory are linked together with both forward and reverse pointers. The forward pointer is used most often, but the reverse pointer is used occasionally. If they don't match, then DiskMap assumetime to do this for four months, and haven't, so I finally decided to let people use it as it stands. The second reason is that I don't want to take responsibility for the dire results which might arise from an undiscovered bug. Please be sure to back polish the program. That doesn't mean it has bugs, just that some things it does could be done a lot better. This is, in my opinion, what distinguishes a good program from an excellent one; DiskMap is just a good program. I have been trying to find there? To help prevent copies of DiskMap from going around which contain bugs, and to keep other people from making a profit since I don't. Why did I release the program for free distribution? Several reasons: First, I just haven't had the time toould like to see distributed widely, please contact the author, Rick Sidwell, CompuServe account 74066,3112, or care of TAU, Third Apple Users, 1113 Wheaton Oaks Drive, Wheaton, Illinois 60187. That's enough legal stuff for now. Why did I put itthat it is clear to users that it is a modified version. This is to protect users from modifications that inadvertantly destroy disks instead of fix them, something which is easy to do with a program of this type. If you have a modification that you w other rights, including the right of commercial distribution, adaptation to other computers, and modification are reserved. If you make any modifications, they must be for your own private use, and you must add your initials to the version number so DiskMap - Apple /// Disk Mapper and Integrity Checker Written by Rick Sidwell Copyright 1987 by Rick Sidwell. This program and its documentation may be copied and distributed freely on a non-profit basis. Alla$,1)="/"5060:s=s-1 5030=a$240 MENU.MAKER 6.2 * Thanks to C.M.Davidson for his help!DiskMap gives this error, and will fix it if desired. NOTE: SOURCE CODE TO THE PROGRAM IS ALSO INCLUDED ON THIS DISK. SEE THE FILES: SIDE ONE DISKMAP.TEXT DMASM.TEXT SIDE TWO DISKMAP.CODEE forward pointer error if listing the directory gives garbal files are inexplicably missing; such errors must be corrected manually with a block editor. Reverse pointer errors can be fixed by DiskMap. "File count incorrect" Each directory keeps track of how many files it contains. If this number is wrong, s that the reverse pointer is wrong and gives this error. If it is actually the forward pointer which is incorrect, then DiskMap can not detect or correct the problem. Suspect a forward pointer error if listing the directory gives garbage, or if sever up your disk before using DiskMap on it, just in case something happens. I have tested the program thoroughly, but that doesn't mean that it is perfect. OK, let's get on and see what DiskMap has to offer. DiskMap has three purposes: 1) To pr