L}6CD l0C)HCC WhL/h `CmCDiD`  R@P1  Y0,0'@R !L` ` C D     )16CS )  C)D1 p p 0 C9DI pCDL~CiCDiD` ` C D     )16CS )  C)D1 p p }0 C9DI pCDL~CiCDiD` DD˙`  J)L !}D L(( LL()  L| L( S LH 0p n  } CY?  q  L L  ` )} `A! d߰")-݆ "  $G@LLLI $j") $G% }H 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(0 })8` d)L ݆  LGȘ ݆LL d  ! LL d)N>Q  HH) }  hyhyB q L> Lm JJ  Ln*` sB%' }8  H H` 1 { LL   !L     Hh SY?  q  1L }  !? S   q L   Ll  Lg E`L   !L)  q 1L}) `L0AM݊L݉ ML  N݆LLLNLMLHG!@}1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  q} L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF } G) *Gȩ GȽG GȌd q q G`  8   0G  `D}CEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?L[ 0 : L`L  `, 0`Y}`piH n0)բY? 08`0 }  0$L GGȽG L `8L`L}8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE`}E8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTE} H8EEȱEEȩEh J E8   . m  i`LI!)E1FR}1LJ舩9GIH`LJJ`HGHh l`} S gL   8 rii `дCDCG W  }C  Lq` X٨`DOS SYS IIIIIIIIIIIIIIIC`0 ߩ0}}}: L DDOS DOSDOS SYS B%LLd}}}CDOS SYS} 0`BDELV !B }`LVH! hLd` l`0 ` T0΀LN@Ԡ  Ȍ Y }`EڅکEۅۥI٩LY 0 ) `SLSAL=L? n L  ɐ   B!}jbi  a0^^^4WTU@i kL QLcba ac`D1:*.AR4h"}֍BJ V`06 2N- 2Gfgde,h0 h 0! H# ``֍ *`,#}i0  ,ip L,i0 LllfDEHIBLV `8`fg`dDeEf8dHgeIH$}Igefd`  b @iLjL:L:DELkE:D1:DUP.SYSc`B` nBDE%} J V 0 ` BLV  ;HLL}A˺Ƞٺ̠D2:*.*1AH h/ e) > 23Li: 6i) Q8 :8Li:.DE 2 1l,)1'}A) DE 18DDAEEHHIIB O30?9A 1A BJ ,1AP IA m3̭1A >8A8(}~8A 1L Ls31A 8A 1  6Li: 2J!U!!=! e)&A 6 !i) ?!!2!! 4Y] 23BI)}D!E 2 i)8TD!E000A0,0"10k0H:L/Li:MAKE SYS FILES:DISK#?(OPTION=NO DUP)WRITING*} NEW DOS & DUP:DISK 2PUSH "Y" TO WRITE DOS & DUP:DISK 2& DUPONLY D2:DOS.SYSD2:DUP.SYSԠΠuB:)&+}A&A LAh :Ls3LA _! 23Li:`"Y" TO COPY?COPY:SOURCE,DEST?٠ŠŠΠԠ F,}ILE NAME D1:MPPSCOPEAL! 64A3A %Lo$tBD %Lm# A6A7A 2BHI8DAE m38A0 -}: Li:6A7A7A6A7A AjBAٿ01uB: "8A  " 8A . "8A  " 𩛝 "! 23 .}AjL'!AQ! 4YLW"آ! 23  a%, APL$0A 2 \3 %3AtBDL#1uB: "4 " D"EL# \3 |23/}A %3A %% 23Li:!tBCKSE0A 23AtBCKE2AiADгȘ 2A 20A2AB B0}DDEE0A"AH#AI O3  |3LL$A2A0AHHIIH O3 |3LL$A0A 2A 2A 6, ALO"Li:t1}BDL# u% %@LG" % 21A+A/A+A DE"AH#AIB O3  |3LP%/A>b 6 S9 +A+A2}JB ", AptBDE V0= IH BDEHHII V0  l%/A u%L$ |3 , AP u%LO"Li: D"E3}`1AL4>C 6LS9tB?* = ,ɛ`tB,ɛ`4AH5AH |2h5Ah4A`tB:L!tB% 23Li:`Ġ4}κӮĠĺΠԠԠK& t23A f2 u! %3A %b&Г L&NEW FILE NAME:OLD,NEW?5}ŠӠĠ& t2#PROTECT:FILE NAME?& t2$B m3Li:UNPROTECT:FILE NAME?ˠӠŠġX'6} 4 t2 u!tBD E' 23Li:i!ALG"!AN7' 4XLW"j' 23 !B a% m36ALO""X" TO DELETEԠŠˠDELETE:7}FILE NAME?ŠŠŠ3A&A 6 'A 6 3,+A8 6,A-A S+ 8 4 (&A+A C> 23 S9 (8} :H 5hɀLk( ( 84A0 (L' 8 4 ('A+A b> 23 S9 )64A0 (8 :0U 8)A(A 84A09} (L' 6> 23 4,3A @ 23Li:(A)A S)L 7HɐhH a6 6hL-( 9 )9 R6 ;,mm %A$A`:}``)A(A`+AȢ> 23 8? e)&A 6> 232A*٢> 23 8? e)'A 6? 23&A'A+A S)L:`;} 6> 4E 6(`910`3> s- ) 6 (L~' SECTORS 1-720) 23,A-AЍ(A)A2A.A/A5A6A0A7A` 6? <}23 4 爹8Aɛ߈8Aɛ ).A5A0.A5A 4 s*,A-A ,A/? 23 4 ,A(A-A)A` ݈8Aɛ=} 4 s*ˎ(A)A-A)A (A,AL)``6 s- )2A (L~'.!@ 6 )2A3A (&A'A 6 ,A>}-A S+ |+ |+4A : ɀR4A 8L.+ 8 :0 3A4A 54A (?} 8L* 5Ld( 6.A͈p s+ s+ s+Ԣ͈`*͈`+ 4 8/, , e)8 6+ 4X* 1l,',, 23@}B.DE m3Li:FORMAT:DISK NUMBER?PUSH "X" TO FORMAT DISK 2DISK 2 BEING FORMATTED, DENSITY:Ǜ S)9 6 R6L T TA} @@` a6ѩݢ@ 23(Li:OFFN/A 3AA4A1A*A1Ai1Ai*A*Aiy:`#n4An3AB}( h l,;1A0NEW DRIVE OR DENSITY:PRESS DRIVE #?, 8ɛ. e) J- T 0 C} J- R-L:Aj` 3A.3A .A` -b#A- 4XLi: V.Ls-`ҠԺآϠ̠D}B $A8"A#A%A 48A ;0 򩠝;`PRESS "X" TO CANCEL RESIDUP=bE} b. aLS.. 4X V.L: b.Lb.;ʈ`/ 6 0. 6â. 23 8ɛL:Y W .L|.N P .LF}|.800 эL|. RETRY X TIME(S); WRITE VERIFY:ƛy.;.ʈ` Select # error retries; verify (Y/N)f/ t2iG}@R N i k U/ 23Li:Lv3Ԡ٠LOAD:FILE NAME?0M0k0 t2iH4AsB 300 30080,00H}Li:10& 3 M0 3 k0ihAi ,i0 2 BD0EHI,iHD0E m3I}H"IHI0D0E O3M000⪍0 0k000ઍ0 0 Li:0莵00D0EJ}HILm3A:SAVE:FILE NAME,START,END(,INIT,RUN)=D1EHI H3 W2 3*A 1 Li:lGO TO HEX ADDREK}SS= 8 6Z9 23 6{9 23 6@ 23 8ɛL: e) r7 5LJ1=U 1 4X& QL}b  1 Li:aalŠԠĺآϠԠ/)`` BHLm3tDBEJBM}Lm3 8Ўi`'LB ]2BLDBEHILO3 /2L64A5A`*A4A5AL2 /2 \34A5A *ALBɛ;,7MBɛ"N},:NB1MB*ALBA"DtB*A*ALB*ADtBȩ:tBȩiLBtBɛ6,2/ .*A*=*A֩#3 23Li:LBiLO}BsB5A4A`ŠϠDEHI B B VLi:`tm4ADBiE` V0` |3 86Li:HHH, AP  l% P}hhR S 9 9h`*A(A)A5ALB5Aɛ*,& -4).)A.(A )A)A*Aө3 23Li:)A(A`4Ϡ٠Q}Ġ̠80 8 8``5ALBD800HLB,ɛ5Ah`w4 23Li:ĠŠ 23L8 R}4H 6h`Ԅ ؠȱ8A)8Aȩ8A`8A ذ ٦Ԥ`8DAEHIB O3H`ʠ̠BʠĩS}ЌЍ`'A,A-A )6 8 :0)Aۥ(A`La6?͈` :0*A` lT}5'A Ȍ*A v50B*A v502Ԅ ݢԄ (۰ ؠ)͈`iˊi` 5U}4A 8` 8ˍ4AL8 5ˍ4A` 48A a?U?L23H h` Q?A? 23 86 S)Li:L6CV}OPY SECTORS 8 6i? 23 6? 23 6? 23L6=L23 6=L23 8ɛ`  L=9( )L79(` 4Lt2 23L4 23L4 6 s-W} t2i!A` 8 4YD9EHI H3'ALi7 8C 5L,7L (8LJ7P 08 C9L 7Z 6 5L 7EL: e) r7 l5L,7'A X}` 61AƝD?E3A,A-A )64A[W 48A?0  ?4A0Lu8ɀi 8鈍4A m4A m4A??1Y}A 10(3A)A(A L73A@ 23`1AL~7 Q80 ~7 6}@ 23PC 86PLP1A BDAEJNKLVZ}4A4A m4A m4A@?L7;5A5A͈`i͐`p栅3A٠ 6P DAE 2B[}HILO3}8 23@`  )` &¢&L23 9 S)Li:L6 )9L6 a6L6 6> 23 S9L6 6L6 Disk Drive Speed\}:___ RPM~~~Drive # X PRESS:=check drive speed=list error sectors=print error sectors=zero error sect]}ors=exit to main menuةj R- 'SR 4ح$Aiͭiʎ%Ab b. x, -D:E͍HI H3 ^}@ Aʚ 4 6> 23 2H 6hɛ=L5== 23iil  _}  (Lr}---***Ӡ***--- (C)1984 John Chenoweth & Ron Bieber distributed by Rana Systems Ġ`}|DENSITY D1: D2: D3:OFF D4:OFF||RESIDUP: BUFFER: VERIFY:|a} Š=FILE LIST <+OPTION=PRINT>  AKE SYS FILES b}ORMAT DISK  OPY FILE ECONFIGURE/ON  EW FILE NAME BVERT RESIDUP  ROTECT FILE ERIFY/RETRc}Y  NPROTECT FILE OAD FILE  ELETE FILE INARY SAVE  HOLE DISK COPY O TO ADDRESS  OPd}Y SECTORS PEED CHECK  EST SECTORS XIT SMARTDOS MWCNPUDKTFROVLBe}GSE6s#| .r&v'b )"&&&&**+-..//011ԠΠՠPRESS CHOICE OR FOR MENUCOPY WHOLE DISK Insert source f}disk and Λ Insert DESTINATION disk and Λ DONE!"E" TO EXIT;ANY OTHER KEY TO CONTINUE TO CONTINUESource g}drive # ?DESTINATION drive # ?Source drive is # XDestination drive is # XEnter first sectorEnter last sectorˠh}ŠXҾ Currently on SECTOR:SECTORS READ: SECTORS WRITTEN:ERROR SECTORS: EMPTY SECTORS:Seci}tor XXX:xxxxxxxxxxxxxxxxxxxBREAK KEY ABORT-128DEVICE TIMEOUT-138 DOESN'T RESPOND-139INPUT FRAMING-140 UNKNOWN ERROR-141 FRj}AME OVERRUN-142 DATA CHECKSUM-143 DEVICE DONE-144 ˠҠTEST SECTORS ϠӠDOUBLE-SECTORED Pressk} drive or for menu٠ŠŠXŠŠ٠K:P::E 2 1l,)1a(F@m}0resentingJJn}HNNNNNNNNNNHJNNo}NJ€NMMMMMMMMMMMMMMMMMQRRRRRRRRRRRRREp}||ZRRRRRRRRRRRRRCNNNNNNNNNNNNNNq}䀢MMMMMMMMMMMMMM!0ublic$or}main$atabase0rogramfor!tari bitcomputerss}4# t} B JKIHiDiELV`L  BLV`nLtpl Lq &u}` Fj`8冨凪` EӅӥ `ʆǪƩ Ɛee` Ʀv}ʆǢ &Ɛeǐ  L '&&&8儨児祂*L&&*ń8&&L 6w}`hihiHHȱȱL~c !#3`LqJJJJ`H ~h`Hȩx}h ML VL L L H8`HhHh :L BHIy} V䅠L Lq LԆ ؠPIPP` P L L L Lz}H- 8塪墨hL L  L ȹP`텠8堨塪 芨Oȩ-`PP i{}P棩 Ѥģ0-ģ6000:,80H & &ehe&eģ0ʥ 8堅塅`|}$ &*i0:0i Ʀ`¢ 护°ڱ%ȱ%E L;!担CS -}}L;!I L;!H L;! L;! &B V NLMȑ` MLN%B VLS:!E:!H ' ~}!!  'h)0I!!L[\ZUVT` "!!` 0d qҥ `Hh}ƣĢ`ƥĤ`Ѣ "`ȱѢĦ`膡`}` Ƥ8`ŦeѠe桊L"`5#4$@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ } !"#$%&'()*+,-./0123456789:;<=>?`abcdefghijklmnopqrstuvwxyz{|}~߀}5$ǜ  B }JKIHiDiELV`L  BLV`nLtpl Lq &` Fj}`8冨凪` EӅӥ `ʆǪƩ Ɛee` ƦǢ &Ɛeǐ}  L '&&&8儨児祂*L&&*ń8&&L 6`hih}iHHȱȱL~c !#3`LqJJJJ`H ~h`Hȩh ML} VL L L H8`HhHh :L BHI V䅠L} Lq LԆ ؠPIPP` P L L L LH8}墨hL L  L ȹP`텠8堨塪 芨Oȩ-`PP iP}棩 Ѥģ0-ģ6000:,80H & &ehe&eģ0ʥ 8堅塅`$ &*}0:0i Ʀ`¢ 护 }  箮} NLM` MLN%BL) ) ) )L)8 ) ) ) ) )} )L))m ))m ))m ) )m )8 ) ) ) )L5)))) )`L))͛)L))ɛ͛)}L))L)8)逍))aL)z͛)L)8) ))`"`L) ))m)))m))))))LL*)m)})i )L*`eLR* F >"N*M*M*N*L*M*N*Lg* >"`L* * * O*8}***͖**L*8******͖***L******͓***L +8*****m**i}*Ů*寰L^+8***i*i*** "***** )*m*m*8**}* "* -IL+(IL+* -` o**Il*Ie*I^*IW*IP*II*IB*I;}*I4*I-*I&*I*I*I*I *IL,* -* )**L0L0*I *I~L-*͘***L},* ͘**L,8*****I~L,*m**m* *͖***L-****L0L0*ILv-8*}**Ů*寐Ls- ***m**i*E *ELs-**L0L0*IL.8***Ů*寐L-}*m**m**m**m*ii8****8 "8***e*e L0L0}*IL.8***Ů*寐L.*m**m*ii*m**m*8****8 })*m**m* L0L0*I *I}L.* *** a"****L0L0*IL/*m**i8}*E *ELn/*m***i*8***͖**Ln/8******m**i8**L0L0}*IL/*M* *M*L/*͕**L/**L/8*********L0L0*I*I *IL 0L0* }*m**m**8***E *ELP0 LX0***m**i*E *EL0**L0L+*L^+}*`L0000000m00iI L0͗0L0800L00`L0 00i0i0}0000 *000000HH00 0hh0`L1 x1}x1)x1x1 @e~1i1~1i1iy1~1i1i}1ȑ|1~1i1i{1ȑz1x1 V}~1i1i`L*2  2"2$2#2!2 2 1&2%2&2%2`Lg2 _2a2c2b2`2 _}2 1`L2222L22 822L2`L22UVL22 L2`L2  >"2222L222L2} >"`ΩL33 - oIL93 2L<3L?3L%3`LE3A3@3 " 2A3@3 - 2`Lo3k3j3k3j3 B}3j3k3i " 3T 2`L33 o33 )33`*.*L33}3L4D:43 "3333L43m33iѮL[43m33i8逑3m33iHH3m}33i )hh3L433IL53i3iIDL53i3iI:L53i3i}3񦡥 "33L533Io33ILV53i3iI:G33ѮL53i}3iI:L53i3iI:L53i3i3 "33i33Ӯ33 "` }L5 (@ a" "5 -(@ 055 -5ILM6@(LT6(@ 3`L[6V6U6V6U6 -} 3W6W6IYL6`L6W6INL6`L6 2Lj6--Are you sure? (Y/N)忠ٯΩL666L66 X66}~ 2L 76 X66 2 26`%S DIRECTORY 宮  宠D:*.*LA7(u7 ! 5@(Lf778(@ }") '(@ )L8R "7$@ U$@ -  277I(L7L7 7 - 3 "} 2L7 7, - 3R '`%S FORMAT DISK%E which drive? drive %C%ED :*.*LJ8(u8 !8 -} 3880L888L8~ 2883 ! 6L88@(@ "8B((@ `%S %E%S%E}L8 8 '(u -88 68嬅 288 - 5@(Lm98(@88 ! 6Lm9}(@8 `Lt9 n9o9)n9 p9o9 n9 `L999 o999 o }9e99e999`L9 9999 q999 `L: :::HH: 9hh::}HH: ohh`L:l:( 'L:K:: l:IL::m l3L::~ B3 "}l:   3 l:)`L:::)`宮L2;::)  : ; };   3`堠󮠠L;_;):s:r;b;`_; !:s:r})L< ";c ;s ;   3`L<`L << <<<<<LO<o(m=== !=(=(=}( \<=셣= :((== s(et(e(( '2==L >`. L> >>>> }! \< 9)) o)((>> d2`L>(>(>(>>>>(>(L|?((>> }s(et(e>>> >)>)>)>>>L?`L?}?}?0L?9}?L?`L?`L? ?} %@ a"ͦ??L?%@? d28????L???%@? d2`L@  @@@@ }@@ @L@)L@@@@ !@@@@ 9@ 9((@ ?@@@@@@@@L*@)L@@}@@ !@ ' @@@ @(@(@)@@@ @@ @LgA)LgA@@@@ !@)@)@)@}@@ :@@@@ 9)@)@)@@@L@`LsA hAjA ' oAnAjA lAkAmAoA}nAjAiAhA @`NLAA((A q9((A q9)((A 9(A (A (( r(q(A d2}(p(o(A d2(((A 9)((A 9`뮮LoBBU B3((((](( pA(m(}((m((((( ! A((( ! \<))) 9`LBBB(m((m(mBBiB(m}B(i((L:C >(m((m(BBLD(m((m(ii((LD8(((}(寐LC((L DB((( ! \<(( :((( ! \<(( :((L:CBL}D =`L#DDD(m((m(8DDD(D(L_D >(m((m(DŮD寐LE(m((m(Ů}寐LE((LD8((((LED((( !(( :((( !(( :8((}((L_DDL&E =`L6EE+ B3 $@ a" $@ 0ILE$@ (E'E(m((m}(i)Ei*E'E)E(E*ELE8)E'E DLE8'E)E B`d5#LE EEEEL.FEmEEiEmE}EiEqEiELE`L5F/F(((( HH/F (((( 8(RI}(SIs(m(t(m(SIRIt(s( "(M( (M(LAJ(M)LAJ lB((( ! \<(( :(}(( ! \<(( :((((( ! \<s(mRIt(mSI(( '2(SI(RI(m((m}(ii(( <((RIM( SIM(LNK)(( ! \<)( :`LTK((LuK8(}(((`( (LK`(((( 8(OK(PKs(mOKt(mPK((( >((( !(}( :((( !(( :8((((s(m(t(m(t(PKOKs( )((( ! \<}((t(s( '2`L}L(((((( =((`LL( (LL > zL((``W+LL(((( s(e}t(e8(L(L(L(L(LLLL(L(LMLLL !L(L(L(LL : }\<((LL '28L(LL(LLLLM`LM(((()( L8((((((`LM(m((m((}(LM > M8((((8((`2 %U%UL$N "N -(] 0 N N(] )U}VLkN LVN(m((m(ii((N ! 2   & 2 ( N N 2F N NM( TLN}(T  N NXm NYm N8p N N ["`迠ٯΩL,O !NO B3O( X6LSO( B3`LX}O`ҩL`O XO(((( s(et(eHHXO QIGLS zL((}RRQ ]OQ((QLSR l3` LSS B3 " 6LT`S B3(((( }s(et(e( ( a" >(S(S(SSSSSS !S(S(LT \ aI]L.baa0aI!LKba aLKb`LPb`LXb Pb }8PbRbQbSbTb a`Lb ~bbbb~b eeeLeeeeLf)LCkLf8e@%%@ =eeM(Lf)LCkLfeme }ei@eemeeiee eL@k eI eILhemeeiI L$geLhemeeiI<Lg }eieeeiI>Lwgeemeei!LgeieeeiI=Lgeemeei[Lgeme }eiemeeieeLhemeeiI>L^heieeeiI=L1heemeei]LUheme }eiemeeieeLhemeeiI=LhemeeiemeeieeLh)LCk eL@k eI }LwiemeeiI LheLtiemeei ~?Li)LCkLtiemeei ~?Loiee }eLoiemeeiemeeieeLi eL@k eIL{jemeeiI LieLxjemeei }I"Li)LCkLxjee eeeeemeeiI"L6jeeeL6jemeeiemeei }eeLieeeLWj)LCkLxjemeei8e ee eL@k eIL@kemeeiI LjeL@ke }meeiI&1emeeiI|emeeiI)L8kemeeiemeeiemeeiI) }L/k eeeL@k)LCkL$eee8e` } &|()LkXk "  XkILkkY -LglXkILlko -LglXkILlk -LglXkI }L.lk -LglXkILBlk -LglXkILVlk -LglXkILglk -XkLxlk - 2 " 3` Press }RETURN to %S all records%E!or enter a conditional expressionusing:# or 形 ( means record n }umber)"Valid comparisons: You may also use parentheses, (for AND) and (for OR). Example:! }copyprintLmlR "lLmml !Lmml !l l l m m" m }E mc m Rm  &A a"l B3 &@ 0ILrn`@&Ln@$)Ln&@ a }Ln$@&@ eLn))Ln) k)LDn`Ln nnnnnnLonmnnmn n }nLn`Looo 6oo oo]o]o]`!Press RETURN to print all fields;or specify fiel }ds by name, one!at a time, enter blank when done.LoR "oZ o| Ro -Xo ] [" ($A a }"(($@ 0WoWoILt ptI1Lx  tI3Lxu%u !Lxu%u ! 3} m(in( 0}iFm(in(i ' zL((`L y((((((((((((((((((((((( 1}(((((((()(())))=$<$`򮮮Ly:s:r)((( !:s:r) 2}Lyy B3 A((Ly > ' y](XipYiP a"`L"zzzmzmzŮ寐LQz 3}zzLjzzzmzmzzz`Lz) ' (] )Lz](` oM(L 4}z 'zu l3 y](`(( ! 9(( 9(()( : o( o((( 5}  zr(q(( zp(o(q( r( o( p(L{( l3 y](`(( r(q( '2( 6}p(o( '2(( :)( :`L{ {{{ {{ym{ym{{{{ 7}{ym{ym{ {e{{e{{{{{{{{{ym{ym{` 8}L| ||(|(LQ}|| ||ym|ym||)||ym|ym||| | 9}|ym|ym||`LZ}S}R}8R}R}S}S}}}VTS}R} {V}U}T} !yi \<o(m(p(i :}%@ '2`L} }8}}}}8}}}}}} ye}ye} ;}}} ye}ye}}M} }M}L~}}} "}}}} "}Ӯ}} "` <}L~ ~~~~~~~~~~m~~m~ 6 W}%o(m(p(i@$A "o =}(m(p(i@$yI+L~~ W}$@%@ <0L~~~~ W}LS~~ W}$@%@ <Š0L8~ >}~~~~~ W}LL;~~ W}$@%@ <Š0L~~~~ W}L~~ W}$@%@ <0L;8~ ?}~~~~~ W}L~Ͱ~~~Lv~~~~ }~~8~~~~~Ͳ~~~L@~Ͳ~~~LE~) @}]~~  ]~) ]~~  ]~~~~ ~ ^ ~~ ^~e~~i~ ^ A} ~~ ^~e~~i~~ͮ~~~Lg~~~~ ~`Lp(()lh {i(h( B}l(kjj(k(Llih !)(( 9i(h(l)jklhkj {lih C}9L(M( (M(LG(((())Lglih !)(( 9` %S SORT%E D} %U%E俠+-宮箮 E}箮宠%EL<(up ! 5@(LU` y(@(] " znnLO8hii F}h 6hi "((LɃ| ! 3nLOh(i(L  - 2 "ih ! 3n G}LOih hiih zyyihyy ["nLڄ ($A a" " -(( H}$@ 0ILnLڄLτ$@ =((M(Lτ "( -((LinL.( <yyT - 3y I}yI+yI- yILyIL.nnL -(m(l(okjj(k(Lmolkj |om J}l ! \(Ւ(Ԓ(ג(֒(ْ(ؒ)ᒭ(ݒ(ܒ(㒭(ے(ڒ)⒠) '(@  r})L '`( ҩ ! A(( !ђLߒޒLՒߒԒޒݒ(ܒ(㒍(ߒޒ )L: s}((((( (L蕭(((())(((( 8(宍ޒ(寍ߒޒ(ߒ(L啭(()(@ t}ߒޒ pA(mޒ((mߒ()(( ! \<))) 9L%(@(( pA((((()(( u}((ӒҒ ! A 'ْ(ؒ(ᒍ)ݒ(ܒ(㒍(ے(ڒ(⒍)Ւ(Ԓ(ג(֒( zL((` %S v} READFile not found.%EL(u ! ;L 5@(L:s:r) '(@ :s:r) w}LE ! 'L.K:+  3L((( (L5$i6$i M TI} 5$i6$i  'L x}K: (` "㩱Ԯ堭L◢ ](L  "( -(] -L B3` y}%S DOS MENU irectory rase File rotect Filenprotect File ename File ormat Disk opy Recordsrite Structure z} ain MenuERASEPROTECT UNPROTECTRENAMEL5$i6$iР5$i6$iؑ(u ! R # . : {}H X e r   R ߗ 3IDL] >7LLIELv! 8LLIPL# 8L |}LIUL$ 8LLIRL 8LLIFLԙ G8LLICL险 NLLIWL NLLIML }}LL 2L@IML`L"Xi Yi( ["`  %S MENUOS Functions pen File lter ~}Fieldshange Records iew Records ead Recordsrint Records ort File: Close FileLi<$i=$ =L }5$i6$i5$i6$ih(uV ! R c r }        }R ߗ 3==IDL LÜ=IOL LÜ=IAL LÜ=ICL͛ LÜ=IVLݛ CLÜ=IRL LÜ=IPL uL }Ü=ISL 9LÜ=IL  yLÜ=I!Lu C B3 "yIPL\WyLRO -LoPyLh梜d - 3LÜ= }I?L P B3 "8ii  3LÜ 2=L``⚉) : 9V DISKBASE 1.0 Documentation April 1988 Todd Bake 722 Clairepointe S }t. Clair Shores, Mi. 48081 DISKBASE is a public domain database program for Atari 8-bit } computers. Designed for ease of use, DISKBASE has many powerful features such as the ability to print records and fiel }ds selectively, to read data from ascii files, to copy all or some records or just the data "structure", and to sor }t files of over 2500 records (regardless of record size) without any additional disk space required! } DISKBASE requires 48K and can be used with any DOS with a MEMLO of $1D00 or less (this includes Atari DOS 2.0 and 2.5, } DOS XL, and SpartaDOS). IMPORTANT NOTE: If you are using SpartaDOS, do NOT use the "TDLINE" progra }m, as this interferes with DISKBASE's functioning. Also you should set KEY OFF, since DISKBASE has it's own "fast key" } feature (assuming you're using an XL or XE). Each of DISKBASE's features are discussed below. }MAIN MENU After DISKBASE loads, the Main Menu is displayed. Besides the choices listed in the menu, the }re are the following additional features: Pressing "!" causes the write verify feature of DOS to be } toggled on and off. Turning write verify off speeds up the write-to-disk process a little, and usually it's safe enoug }h to do without it; if you want to be cautious, though, the verify feature can be left on (the default). } You may also press "?" to see the amount of free memory left, although this has no bearing on how much space is le }ft for new records (that depends on disk space only); it merely reflects the remaining memory buffer space. Genera }lly speaking, you don't need to worry about this; it will only affect the maximum number of records that can be sor }ted, which will vary depending on the record size. Each of the items on the Main Menu is discussed below. } page 1 DOS FUNCTIONS These are the same as the usual }DOS functions and fairly self-explanatory, with the exception of COPY RECORDS and WRITE STRUCTURE. }Since DISKBASE files use absolute sector/byte pointers, you should not use the regular DOS Copy feature to duplicate the }m; if you do, the new file will not contain valid pointers for its new location on the disk. Instead, use this bui }lt-in COPY routine. Unfortunately, because of the small amount of buffer space available to the program, you need t }wo drives (or a RAMdisk) to copy a file between disks, as disk switching isn't supported. The DOS Duplicate Disk f }unction can be used, however. NOTE: If you're using SpartaDOS, then you CAN use the DOS Copy function to copy DISKBASE }files after all, since Sparta returns relative file pointers, not absolute. If you copy Sparta files to or from ot }her DOS's, though, you must use DISKBASE's COPY feature. Besides copying entire files, COPY RECORDS lets } you copy just selected records if you choose. After being prompted for the destination filename, you are asked to } input a conditional expression describing which records you want to be included in the new file. Just press RETURN } to copy the whole file, or enter a conditional expression as described under the PRINT RECORDS section of this doc }umentation, if you want only certain records transferred. WRITE STRUCTURE is the same as COPY, except that on }ly the file header information (field names/lengths, etc.) is copied, not the data itself. You can use this to sta }rt a new file with the same field definitions, but different data. Press "M" to return to the Main Menu. } OPEN FILE This is used to create a new file or open an old file for changes or additions. W }hen you select this option, you are prompted for a filename. If the file is not found, then DISKBASE assumes you w }ant to start a new file. (If you made a mistake, you can press ESC to abort, here and most other places in the program. }) If any file is already open when you select this option, it is saved and closed before the "new" file is opened. } Opening a New File You will be prompted for the number of fields you want in each record, wh }ich can be from 1 to 255. Then you are asked for the field name length; this is simply the size of the "label", which i }s the same for all fields. It can be from 1 to 20. Obviously, if you have a large number of fields, you'll want t }o keep the field name length short; remember you'll still need room in the buffer for a least one record! } page 2 Next the field name/length entry screen will appear, and you } will be prompted to enter a name and length for each field. Pressing RETURN moves the cursor from Field Name to Fiel }d Length, or from Field Length to Field Name on the next line. You can use the up and down arrow keys to move from } one line to another if you wish to make changes to what you have already entered. If you specified more fields th }an can fit on one screen, then the screen will scroll up when you reach the end; or it will scroll down again if you mov }e the cursor back up past the top. You don't HAVE to enter a name for each field now, and you can come back and ch }ange field names (but not lengths!) later, but if you don't enter names, you won't be able to specify fields for th }e PRINT and SORT and SEARCH routines until you do, so enter something. Field lengths can be from 1 to 255. } When you're sure the file has been defined the way you want it, press ESC. The file will be created, and you will b }e returned to the Main Menu. Opening an Old File After you enter the filename, the file will }be opened and you will be returned to the Main Menu. Whenever a file is open, its name will be displayed } at the bottom of the Main Menu screen. Needless to say, you should NEVER remove the disk when a file is open! } ALTER FIELDS If you want to change the field names of an already created file, as stated above, }this function allows you to do so. The file must be open; then selecting ALTER FIELDS will take you to the field n }ame/length entry screen as described above. You will not be able to change field lengths at this point, however, only n }ames. Press ESC when you're finished and the changes will be recorded. CHANGE RECORDS Once a } file is opened, select CHANGE RECORDS to change or add data. This will take you to the edit screen, where the first re }cord will be displayed. The Edit Screen At the top of the edit screen, the name of the curren }tly open file is displayed, as well as the current record number followed by the total number of records in the fil }e separated by a slash (e.g., "1/12"). Also shown is the number and length of the field that the cursor is current }ly positioned on. Below this information, the name and contents of each field is displayed. For instanc }e: page 3 Name :Todd Bake Address :722 Clairepointe } City :St.Clair Shores State :Mi Zip :48081 If a field is too long to fit on the screen, t }hen only part of it will show. However, this "window" can be scrolled to view or edit the entire contents of the f }ield. In CHANGE mode, moving the cursor past the end of the line will cause the window to scroll left; moving the }cursor back past the beginning of the window will cause it to scroll right. You can also use TAB and CTRL-TAB to move t }he cursor and scroll the window by larger amounts. In VIEW mode (see below), the cursor will appear on the colon s }eparating the field name from the data; pressing the left or right arrow keys, TAB or CTRL-TAB will scroll the wind }ow. Pressing the up and down arrow keys will move the cursor from one field to another. Pressing RETURN } will also move you to the next field. If there are too many fields to fit on one screen, then the screen will scr }oll up or down when the cursor moves past the bottom or top. You can also press CTRL-U to scroll up a whole page or } CTRL-D to scroll down a page, or CTRL-T to go to the "top" (first field) or CTRL-B to go to the "bottom" (last field). } (You don't have to press CTRL if you're in VIEW mode.) To edit the contents of a field in CHANGE mode, } simply type in the data you wish. Note that all the usual editing keys such as insert and delete function normall }y within the window. (All fields are interpreted as strings, so you should right-justify any numerical data, if yo }u think you will want to sort records by those fields later.) Press CTRL-N to go to the next record, or }CTRL-P to go to the previous record (just N or P in VIEW mode). You will also go to the next record automatically }if you press RETURN while in the last field. The Options Menu Line Pressing ESC in CHANGE or }VIEW modes causes the Options Menu Line to appear at the bottom of the screen. These options are each described be }low. GOTO # To go to a particular record, press "G" at the Options Menu, then enter the desir }ed record number. FIND To search for a record with a particular contents, press "F". You will } be prompted for a field name and a string to search for. page 4 You don }'t have to enter the entire field name, just enough of it to distinguish it from any other field; likewise anything that } begins with the string you entered will match. You will also be asked if you want the search to proceed forward o }r backward from the current point, or to be global (search the whole file). Press "+" to search forward, "-" to se }arch backward, or "G" to search the whole file starting at the beginning. When a record containing the s }pecified data is found, you are asked if you want the search to continue. Press "Y" to continue to search past tha }t record, or "N" to stop there for further editing/viewing. You may also cancel the search at any time b }y pressing ESC. DELETE Press "D" to delete the current record. You will be asked to verify t }hat you want the record deleted, and if you then respond "Y", the record will be removed. Deleted records CANNOT be "un }deleted", so make sure that's really what you want before you confirm! (Technical note: deleted records are actuall }y placed at the end of the file as blanks, so deleting a record will not reduce the file size. If you need to free } up some space on your disk, you can COPY the file to another name, then erase the old file containing the extra bl }ank records. Of course, the blanks at the end of the file are used for the new records that you add, so there is no nee }d to go through the copying procedure if you know you will be adding new records.) BOF P }ress "B" to go to the Beginning of the File, i.e., record number 1. EOF Press "E" to go to th }e End of the File, the last record. CHANGE/VIEW In either the CHANGE or VIEW mode, you can switch }to the alternate mode by pressing "C" or "V", as appropriate, from the Options Menu. Press M to ret }urn to the Main Menu. Press ESC to return to editing/viewing if you don't wish to select any of these options. } VIEW RECORDS Selecting VIEW RECORDS from the Main Menu is much the same as CHANGE RECORDS, except as }noted above. page 5 READ RECORDS By selecting th }is option, you can read data into the currently open file from an ascii file. This allows you to use your favorite } word processor to create data files, then enter them to DISKBASE for management. Such ascii files can also be created }by DISKBASE itself, and files in this form can of course be copied using the standard Copy function of whatever DOS } you're using, unlike regular DISKBASE files. When you select READ RECORDS you will be prompted for a } filename, and if the file is found, its contents will be read in and added to the end of the open database. You can }interrupt the READ process by pressing START. When creating ascii files using a word processor, each fie }ld should end in a RETURN. Do NOT put an extra RETURN between records. Essentially READ treats input from the file } you specify as if it were keyboard input, after first going to the end of the file and entering CHANGE mode. (You } could conceivably take advantage of this fact by placing characters in the ascii file corresponding to various DIS }KBASE keypresses, to achieve macro-like effects.) PRINT RECORDS DISKBASE allows you to send record }s to a printer, disk file, or the screen, in three different formats. You can print all or just certain fields, of } all or just certain records. First you are prompted as to where you want the output sent. If you choos }e printer output, you are also given the option of entering a printer control string, i.e., a string of characters to fo }rmat your particular printer for whatever kind of pitch or page spacing that you prefer; see your printer manual fo }r specifics. If you select disk output, you are prompted for a filename. (Remember you can press ESC at any of th }ese points to cancel the procedure.) You are then prompted to select the format of the output. Pick "1- }regular format" to print records in a form resembling the way they appear on the edit screen, "2-horizontal format" to p }rint one record per line across the page, or "3-data only" to create ascii files that DISKBASE can READ back in aga }in. Press the corresponding number key. Next you are asked to specify which fields to print. Just enter } a blank if you want to print all fields, otherwise enter the names of the fields you want to be printed, one at a time }. When you're finished, enter a blank to continue. Finally you are asked to type a conditional expressi }on to specify which records you want printed. Just press RETURN to print all records. Otherwise, enter the condit }ional expression in this form: page 6 #=integer } ...or... fieldname="string" You are not limited to the equals sign; you can use =, <,} >, <=, >=, or <> as comparisons. "#=integer" specifies which record numbers to print. Literally, }you might enter: #=3 ...to print record 3, or #<127 ...to pri}nt all records less than 127. Or: #>=34 ...to print records greater than or equal to 34. } Examples of fieldname/string comparisons are: city="Detroit" ...or... } LastName<"Smith" ...and so on. Note that you DO NOT put quotes around the field name, but you DO }put quotes around the comparison string. Note also that as with the Search function described previously, any field tha}t begins with the specified string will match, regardless of what characters follow. To avoid undesired matches of} this sort, you could enter: LastName="Smith " ...with some trailing blanks to insur}e that something like "Smithley" wouldn't match. You can also use parentheses, "&" (for AND) and "|" (fo }r OR), to create as complex an expression as you wish. For example: #<100 & (name="Smith" | name="Jones }") ...would print records less than 100 whose "name" field was "Smith" or "Jones". Note that "&" takes  }precedence over "|" unless parentheses are used. Without the parentheses, the above example would print records le }ss than 100 whose "name" field was "Smith", and also ANY records whose "name" was "Jones". (If you're in doubt about } page 7 precedence, just use parentheses.) Nested parentheses are okay too}. Note that the conditional expression may be up to 250 characters, although the input window is only 24} characters wide; it will scroll if necessary the same as input windows on the edit screen. After y}ou enter the expression, printing proceeds. Press ESC to cancel printing. (All of the above rules also }apply to the conditional expression entered when using COPY RECORDS, mentioned previously.) SORT } Since all of the available buffer space is used by the Sort routine, whatever file is currently open (if any) is sav}ed and closed when you make this selection. You are asked for the name of the file you want sorted. If the file i}s extraordinarily huge (over 2600 records or so depending on record size, field name length, etc.), DISKBASE may no}t be able to sort it. (Three bytes are required for each record in the file, and the free memory area is about 8K; also} space is needed for the field names and lengths.) In any case, DISKBASE will let you know if the file is too big }to sort. If all is well, you will then be asked if you want an ascending (A-Z) or descending (Z-A) sort. Press "+}" for ascending, "-" for descending. DISKBASE will report as it indexes, sorts, then relinks the file in} sorted order. The contents of the records is not actually moved, only the pointers connecting the records. This means} that the links between the records will be somewhat convoluted after the sort; record 1 may be near the beginning }of the physical file and record 2 near the end, etc. This will cause no problem for DISKBASE's handling of the fil}e, but it may slow down subsequent Search and Print procedures somewhat. Therefore, it's highly recommended that, }if possible, you use the Copy function to first move any file to be sorted to RAMdisk, sort it there, then Copy it back }to the floppy disk. The sort will be MUCH faster on the RAMdisk, and when the file is Copied back to floppy, the p}ointers will be "untangled" so that consecutive records will actually be next to each other on the disk. ESC: } Close File Pressing ESC from the Main Menu saves the buffer and closes the currently open file. Be SUR!}E to do this before leaving the program, or you may lose changes in your data or even foul up the file irreparably."} When you are ready to leave the program, do so by pressing RESET. TECHNICAL STUFF #} In case anyone wants to write their own programs to manipulate page 8 $} DISKBASE files, or just happens to be curious, here are some notes on the file structure. DISKBASE f%}iles consist of a header, followed by records in the form of a doubly-linked list. When the file is first created, the&} list will consist of all blank records; when the user adds records beyond the last blank, a new block of blanks is '}appended (a message to this effect is displayed at the bottom of the screen when this occurs). The (}size of a block is equal to the number of records in the memory buffer. The minimum buffer size is a half K; if the use)}r defines a record size smaller than that, then there will be a number of records in the buffer. If the record siz*}e is larger than 512 bytes, then the buffer is expanded to accommodate at least one record. A DISKB+}ASE file will always contain a number of actual records (counting blanks) evenly divisible by the number of records in t,}he buffer. Even a file with no records input by the user will contain one block of blanks into which newly entered-} records will be placed. Each record begins with 6 bytes of pointer information: the sector/byte locatio.}n of the previous record, and the sector/byte location of the next record. (The sector value is 2 bytes, LSB first/}.) Record 1 points to 0,0 as its previous record, and the final record points to a random location as its next record (0}actually it points to where the next record would be appended, if it were appended at that time, but that may chang1}e). Following the pointer information is the actual data of the record. Fields are not delimited in any2} way. The header consists of the following: 1 byte: the version number (1) 3} (files that don't begin with this byte will be rejected by DISKBASE 4} when the user tries to open them). 2 bytes: LSB,MSB of the number 5} of non-blank records in the file. 2 bytes: LSB,MSB of the total n6}umber of records in the file, including blanks. 7} page 9 3 bytes: file pointer (sector LSB,MSB; byte) t8}o the last record in the file, including blanks. 1 byte: the number9} of fields in each record. 1 byte: the field name length. n bytes: the:} field names; the size of this part of the header equals the numb;}er of fields times the field name length. n bytes: the field data lengths; <} the size of this part is equal to the number of fields, each byte =} signifying the length of the corresponding field. 3 bytes: f>}ile pointer (sector LSB,MSB; byte) to the first record in the fil?}e. 3 bytes: file pointer (sector LSB,MSB; byte) to the last non-blan@}k in the file. A FINAL NOTE DISKBASE can handle up to 65536 records. Since eaA}ch record must consist of at least 7 bytes, that many records would take up 458,752 bytes, which is more than even B}a double-sided, double-density disk contains. Just in case you're one of those rare people rich enough to afford aC} hard drive, however, consider yourself warned. (Though I can't imagine anyone typing in two-to-the-sixteenth-power recD}ords anyway!) ------------------------------------------------------------------- E} page 10 Documentation April 1988 Todd Bake 722 Clairepointe S $2764-1-1-1-1-1-12753-1-1-1-1-1-12715-1-1-1-1-1-127830-1-1-1-1-12750-1-1-1-1-1-12751G}18-1-1-1-1-1-1-12753-1-1-1-1-1-12715-1-1-1-1-1-127830-1-1-1-1-12750-1-1-1-1-1-12751