@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@W!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H  }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `8  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D8:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D8:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED697 FREE SECTORS COPYING---D8:COPY32.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 144ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u(F@T}0resentingJJU}HNNNNNNNNNNHJNNV}NJ€NMMMMMMMMMMMMMMMMMQRRRRRRRRRRRRREW}||ZRRRRRRRRRRRRRCNNNNNNNNNNNNNNX}䀢MMMMMMMMMMMMMM!0ublic$oY}main$atabase0rogramfor!tari bitcomputersZ}4# [} B JKIHiDiELV`L  BLV`nLtpl Lq &\}` Fj`8冨凪` EӅӥ `ʆǪƩ Ɛee` Ʀ]}ʆǢ &Ɛeǐ  L '&&&8儨児祂*L&&*ń8&&L 6^}`hihiHHȱȱ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 La}H- 8塪墨hL L  L ȹP`텠8堨塪 芨Oȩ-`PP ib}P棩 Ѥģ0-ģ6000:,80H & &ehe&eģ0ʥ 8堅塅`c}$ &*i0:0i Ʀ`¢ 护°ڱ%ȱ%E L;!担CS -d}L;!I L;!H L;! L;! &B V NLMȑ` MLN%B VLS:!E:!H ' e}!!  'h)0I!!L[\ZUVT` "!!` 0d qҥ `Hhf}ƣĢ`ƥĤ`Ѣ "`ȱѢĦ`膡`g}` Ƥ8`ŦeѠe桊L"`5#4$@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ h} !"#$%&'()*+,-./0123456789:;<=>?`abcdefghijklmnopqrstuvwxyz{|}~߀i}5$ǜ  B j}JKIHiDiELV`L  BLV`nLtpl Lq &` Fjk}`8冨凪` EӅӥ `ʆǪƩ Ɛee` ƦǢ &Ɛeǐl}  L '&&&8儨児祂*L&&*ń8&&L 6`hihm}iHHȱȱL~c !#3`LqJJJJ`H ~h`Hȩh MLn} VL L L H8`HhHh :L BHI V䅠Lo} Lq LԆ ؠPIPP` P L L L LH8p}墨hL L  L ȹP`텠8堨塪 芨Oȩ-`PP iPq}棩 Ѥģ0-ģ6000:,80H & &ehe&eģ0ʥ 8堅塅`$ &*r}0:0i Ʀ`¢ 护 }  箮s} NLM` MLN%BL) ) ) )L)8 ) ) ) ) )t} )L))m ))m ))m ) )m )8 ) ) ) )L5)))) )`L))͛)L))ɛ͛)u}L))L)8)逍))aL)z͛)L)8) ))`"`L) ))m)))m))))))LL*)m)v})i )L*`eLR* F >"N*M*M*N*L*M*N*Lg* >"`L* * * O*8w}***͖**L*8******͖***L******͓***L +8*****m**ix}*Ů*寰L^+8***i*i*** "***** )*m*m*8**y}* "* -IL+(IL+* -` o**Il*Ie*I^*IW*IP*II*IB*I;z}*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(}iFm(in(i ' zL((`L y(((((((((((((((((((((((}(((((((()(())))=$<$`򮮮Ly:s:r)((( !:s:r)}Lyy B3 A((Ly > ' y](XipYiP a"`L"zzzmzmzŮ寐LQz}zzLjzzzmzmzzz`Lz) ' (] )Lz](` oM(L}z 'zu l3 y](`(( ! 9(( 9(()( : o( o(((}  zr(q(( zp(o(q( r( o( p(L{( l3 y](`(( r(q( '2(}p(o( '2(( :)( :`L{ {{{ {{ym{ym{{{{}{ym{ym{ {e{{e{{{{{{{{{ym{ym{`}L| ||(|(LQ}|| ||ym|ym||)||ym|ym||| | }|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~ ^(} ~~ ^~e~~i~~ͮ~~~Lg~~~~ ~`Lp(()lh {i(h()}l(kjj(k(Llih !)(( 9i(h(l)jklhkj {lih *}9L(M( (M(LG(((())Lglih !)(( 9` %S SORT%E+} %U%E俠+-宮箮,}箮宠%EL<(up ! 5@(LU` y(@(] " znnLO8hii-}h 6hi "((LɃ| ! 3nLOh(i(L  - 2 "ih ! 3n.}LOih hiih zyyihyy ["nLڄ ($A a" " -((/}$@ 0ILnLڄLτ$@ =((M(Lτ "( -((LinL.( <yyT - 3y0}yI+yI- yILyIL.nnL -(m(l(okjj(k(Lmolkj |om1}l ! \}a q(er(e($A "(@$ba ڈb(($A *`(a?} q(er(e$(A "L: $A a"o(map(i$@ , @$ba ڈb@} $A *`o(map(iHH$@ hho(map(iѮL`I`I`I `IA}LaLbILXiYiXixYi )L8bb8aaLJ`ILʍ^LʍcIcc`B}I`I `ILJ8(aELJbILD "XixYiXiYi "b "LGba`IC}L΋^Ly((( ! A_L ~__L΋`L zL 醭((((  zt(s(s( t(D}L䎢( l3 ' y](` zL`%S OPEN FILEL(u ! 5@(L y(@(] ":s:r) '(] E} ':s:r)ILm ʉL)L{ L) :](` %S ALTERL(u ! ;L ʉ` %S CHANGELŏF}(u ! ;L(( (L(Ȍ( \Y` %S VIEW=%E廠%E%EG}LF(u ! ;L( (Lu( \YL ! 3`L)((((̀H}큐L)L =((( ! \<(( :((((((L̀큐L)L@$LZ&@I}$@ b;$Ȍ]&@ ^L呩 ! 9 9(((( s(et(eJ}(( d2((((L(m(((m((L)LO ! ' (K}@ (()((LВ)LВ !))) : 9L})))LW` $%E 箮M}箮 %S COPY %S WRITELQђђLl(uB !Ly(u6 !)1;s0;r((( !:s:r)LN}` " @( 5@(LГ`(](@ "L񓢒 ! 3`ђL" -L:(u6 ! mL`(u6 !O} " - >(Ւ(Ԓ(ג(֒(ْ(ؒ)ᒭ(ݒ(ܒ(㒭(ے(ڒ)⒠) '(@ P})L '`( ҩ ! A(( !ђLߒޒLՒߒԒޒݒ(ܒ(㒍(ߒޒ )L:Q}((((( (L蕭(((())(((( 8(宍ޒ(寍ߒޒ(ߒ(L啭(()(@R}ߒޒ pA(mޒ((mߒ()(( ! \<))) 9L%(@(( pA((((()((S}((ӒҒ ! A 'ْ(ؒ(ᒍ)ݒ(ܒ(㒍(ے(ڒ(⒍)Ւ(Ԓ(ג(֒( zL((` %ST} READFile not found.%EL(u ! ;L 5@(L:s:r) '(@ :s:r)U}LE ! 'L.K:+  3L((( (L5$i6$i M TI} 5$i6$i  'LV}K: (` "㩱Ԯ堭L◢ ](L  "( -(] -L B3`W}%S DOS MENU irectory rase File rotect Filenprotect File ename File ormat Disk opy Recordsrite StructureX} ain MenuERASEPROTECT UNPROTECTRENAMEL5$i6$iР5$i6$iؑ(u ! R # . : Y}H X e r   R ߗ 3IDL] >7LLIELv! 8LLIPL# 8LZ}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``O -LoPyLh梜d - 3LÜ=V DISKBASE 1.0 Documentation April 1988 Todd Bake 722 Clairepointe Sb}t. Clair Shores, Mi. 48081 DISKBASE is a public domain database program for Atari 8-bit c} computers. Designed for ease of use, DISKBASE has many powerful features such as the ability to print records and field}ds selectively, to read data from ascii files, to copy all or some records or just the data "structure", and to sore}t files of over 2500 records (regardless of record size) without any additional disk space required! f} 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,g} DOS XL, and SpartaDOS). IMPORTANT NOTE: If you are using SpartaDOS, do NOT use the "TDLINE" prograq}bŠb٠bˠӳbb%DOS SYSb*)DUP SYSbSAUTORUN SYSbaDISKBASEDOC `MENU m, as this interferes with DISKBASE's functioning. Also you should set KEY OFF, since DISKBASE has it's own "fast key" r} feature (assuming you're using an XL or XE). Each of DISKBASE's features are discussed below. s}MAIN MENU After DISKBASE loads, the Main Menu is displayed. Besides the choices listed in the menu, thet}re are the following additional features: Pressing "!" causes the write verify feature of DOS to be u} toggled on and off. Turning write verify off speeds up the write-to-disk process a little, and usually it's safe enougv}h to do without it; if you want to be cautious, though, the verify feature can be left on (the default). w} You may also press "?" to see the amount of free memory left, although this has no bearing on how much space is lex}ft for new records (that depends on disk space only); it merely reflects the remaining memory buffer space. Generay}lly speaking, you don't need to worry about this; it will only affect the maximum number of records that can be sorz}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 (}actually it points to where the next record would be appended, if it were appended at that time, but that may chang}e). Following the pointer information is the actual data of the record. Fields are not delimited in any} way. The header consists of the following: 1 byte: the version number (1) } (files that don't begin with this byte will be rejected by DISKBASE } when the user tries to open them). 2 bytes: LSB,MSB of the number } of non-blank records in the file. 2 bytes: LSB,MSB of the total n}umber of records in the file, including blanks. } page 9 3 bytes: file pointer (sector LSB,MSB; byte) t}o the last record in the file, including blanks. 1 byte: the number } 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 ea(}ch record must consist of at least 7 bytes, that many records would take up 458,752 bytes, which is more than even )}a double-sided, double-density disk contains. Just in case you're one of those rare people rich enough to afford a*} hard drive, however, consider yourself warned. (Though I can't imagine anyone typing in two-to-the-sixteenth-power rec+}ords anyway!) ------------------------------------------------------------------- ,} page 10---------------------------------------------------------------- !