–€€@LƒÌ}ˬð5 _­¬Š$ŽŠ%Ž l0¬±$)ªÈ$ð±$Hȱ$ UhšŠL"©À š`©€e$…$æ%`­…$­…%` Œ ©R @©P €Š!àÐ( L¹(©Œ©1© ©€  ­ YäÎ ðŠI˜` ­ d  LÇd M  Œ* €@ ÿ­ …$­ …%­ …C¢©C ‘$¥$)¥%1© U©dÊߥ$9¥%:¬ ¢ˆ˜!0 SèàÐñ¥$ç¥%è©š™Èúš¹ð ÉDðÈÈÈÀÐð©D™©Ë™©™` ­ }œJ‚)ðLr 윂Éd M  Œ* €@ ÿ­ …$­ …%­ …C¢©C ‘$¥$)¥%1© U©dÊߥ$9¥%:¬ ¢ˆ˜!0 SèàÐñ¥$ç¥%è©š™Èúš¹ð} ÉDðÈÈÈÀÐð©D™©Ë™©™` ­ }œJ‚)ðLr 윂ÉðÉðJÉ ð É ð ¥š(°(°  p LÇ ¥ª(°ù¬¹ƒ)ð  ‘ JŽœ}‹L= ¥¬(° Á ¬L ­ 0q A­ ­  ‘¬¢ © ™ÈÊùŠI©Bƒ J¬™œ‹™©C™©™™¢œ;É?ð™Èèà ð D W ¶}©€… ‚ÐLLÇ ¥©©…­ ©‡` W ¬¹ƒ)„¹‹¹ŒLꍜA…! ­¬ ¹Éß°©…"œ‚)ð-Œ‡˜Ý† p°" }ä  °±$þ‡­‘G©@……LÇL ¥ˆœ…08`©©Q¥")ð<Ð2Q­0 â°- ±G‘$Ș݆õ UL# ; p8¥(ý†…(°Æ)¥(0Ê¥)ÐÆNQ`  }±$‘GȘ݆õ‡LU ­œ‚)ðL­ œ‡݆ ë âðLà š±GȘ‡Œ‹ÐŒŒР݆©L¯LÇ ­œ‚)ðW>…Z ‡  œHœHœ‚)ðœƒH }p hƒ âûœ‹œŽŒ Ž¬hy™hy™œƒ™ D ”©‚LÂ>…ó ËLñ œJJ    ! LA© *ˆÐù` ­œBÉþðFÉ }ýð7É'°8é  š¹M H¹N H` 8 € Z ß â  \LdÃÊòÃJóóœJЩ!¢ð©"ªŽ¥!¢ ÉðG¥F¥E @­F (À‹Ð®ð©!ÍÐÑL¯ }ÀÐù ©ÿÑEÐÈÑEðì ¥­¢­É!𢩠‘EˆÐûœ^ èœ^ ‘EÈÀÐõ  ©‘E©ÿÈÌÐö 7©‘EÈ©‘E® d‘E Š©/‘EÈ©‘E ”©š™Èú© DÎ }ø .L } ‰¢ œ;FÊ÷ d  ‚¢Ž¬œ;É?ÐÎÝFÐ7œFÉ?ð™Èèà Ðá(Ð . ‚Ð ®œŒ Z D­ð ü®LÂLè d Á ‚}Ð . D üí ”L ‘¬  ©€™ p  âø ˜‘E`© ,© d¬¹)ß ™ D üêL¬¹) ðÑ ¥§œ…0BœM݊ÐœL݉ðœ…}ð Ë©…œMŒœL‹ ê° œN݆ð ¥Š‡LÇ ¥«œ‡Nœ‰LœŠMLÇ ì[ T Š±E qEHȱE ‹qEªhšŠ¢Ž 0 Š‘GÈ¹Ô ‘GÈÀÐö} HLǬLà ±GîɛÐéÀ°©€L ü°¥ ä LÇFREE SECTORS® © ‘Gœ) ð©*‘GÈ© ‘GÈœ‘GèÈÀ õ© ‘GȌ®¥*jœj ˆ©>‘G} ©<‘GŒœ¢d R¢ R¢ R¢ ˜ð¢+ ©›‘G Œ`Ž¢ÿ…D„Cè8¥C횥Déà ÐêŠ 0¬‘Gî¥D€C` ±$ˆ0dÉ:Ð÷ÈÈ©¢±$É.Ð àÐÈ© Ðî},É*Ð ©?ì°%$É?ðÉ0É:)ßÉAÉ[ © à ð© ÐÈìð¹;èг­;É ðŠI` ¥¥©ÿ ©pî­iî©ÍðN A©š¹}ð#0!)CÉð)ÐÏ¢œ;É?ðÙÐÁèÈà Ð ­ ­ ­ ¹0œ8ŠI` } ì°`L€œ…0  … Ë0"Lâ Jœ‡ ‘GœŒ }‘GÈœ‹}‘G Ë ©‚­L¯þÐþ Õ©‹Œ‡©}†`8œŠŒ‰Lœ‹‰œŒŠ`œ…ðLpœ‹ŒÐ8` Õ Ì04 }±G)ü݁Ð,±G)ŒȱG‹ȱG}Hœ„Ðh0©})Hh†©‡` œœBÉ!ð ¥€8`8­iiš(¢©ÐZ ±EÐ6€!©JÀðŒ©S Sä©d¬ê©Š€!™ Ì ê ‘E š û` T©} ‘E ê8 š û8LÌ¥FŠE hŒ  Œ Ž r9ÀƒðLœ ¥£­)© © ¥Eiª¥Fi(L¶ d±E™î©‘EÈÀÐò`¬  d¹î‘EÈÀÐö`œ‰H)}šhŠð/¹×Hœ‰ ^ŠjˆÐùi šhE‘EÀd  Š±Ei‘EȱEi‘E`  ÈÌ°W±Eðö¢ÿè üœ×QE‘EŠHŠI˜8é ‹©À‹*°úŒh‹‹Àd   Šœƒ)¿ }ƒ8±Eé‘EȱEé‘E ˜‘EœŒ` ¥¢†IºèèŽ Š!ŽÊœ)…Eœ1…Fœð5ŠIŒˆÐ¹! ÈÀö ¥¡©€™!Șˆˆ˜JH©jm9…Ghm:…H` ¥ Œˆ𠈩}ˆ™!`ŠGŽŠHŽLlŒ‰œŠ Z dLÇ©© ŒÈ©8 l­I€0î¬ ÌÐä`Œ©ÐÌ _©}† ; ¥$Í ¥%í ° pLl`¢¬¹}ݚÐÈèà ÐòŠI(`DOS SYSh…Ch…D ±C® šŠICš­`­0íŠI ©Ðä „B®ß0ŠäðüŒÔx …D­Ó)ãDÓ`}Need DOS2.5,type Y ÒÅÔÕÒ}Λd÷›  €€ddJ€ÿþýüûì\Ì|DOS SYSCOPY130 COM}B€}B€}-}CDOS SYS}­ …C­ C*ɐ( ‹Ð> Ë¥C8jJ…3©j…2­…C­…D ( ±C‘2ˆù0±2‘Cˆù© Þ ÀŒÔ „BXÈ` N ©1?©ñ¢ l© ¢LlD:RAMDISK}.COM›©LÍu ÐL¥1©©í¢ ÍL ¥;ÐLê˜HL³ê³êºŽ  T `ºŽ  ” `8©ž©Ÿ… ©… ­œêɐР© ©  àêêê¥Ð Ø`TŽU “©À } ŠL’­ð­žð ? . “ t䩍`…ðöÿàá©€Ÿ©Gà©á¢©B©J Œ©Ð~¢©ôD©E©H©I ©B Vä0d©ÿÍôÐVÍõ!}ÐQ¢© D©E©H©I VäFÀˆÐ9 ’,ž0 ©,ŸŸ0 s0hhLž­Ð ©¢ ŠL©ª` ’©Ð÷˜H ’hšÐ DH­¡EšhÈКÈЭ"}¢ ­£¡©¢D©E©L­¢8í H­£í¡I­¡É4ê°­£Éê° ­ 0©€ ŸŸþHÐþI,Ÿ0­ 0Î  9© .¢©Gâ©ã VäLO#},ž0 L÷ɐÉ4*IJ`lâlàD1:AUTORUN.SYS›NEED MEM.SAV TO LOAD THIS FILE.›D8:MEM.SAV› ’©J y08© B©|D©E©ŠH©I$} Vä0 ’0 `©B©;D©ELŒ`­?<0LV䠐`@ÿ¢ŽžŽŸʆ v s©…ð? F0Ξ05©:¢ Š©[¢ Š©B©D©E©H©I%} Vä­ÉYÐ8©…¢ © B Vä¥ œ¥ ©@… ©… ©/¢D©E ŒžˆŒ €`E:›D8:DUP.SYS›ERROR-SAVING USER MEMORY ON DISK›TYPE Y TO &}STILL RUN DOS› œ©B©;D©E© J Œ œ(`©ð 9¢ Vä©ðî ­âÇ­ãÈ©âªÃ© ï©ðàÇ­áÈ©àªÃ© ï ’­ž-'}”ðî”LLu ÄèŽÅÆ¢©ÃD©E©H©ILVä 9© .lú¿ 9© .l­œ… ­… `­žÐ` s©…ð$©B Œ©B©ŠH©(}I©|D©E Vä© BLVä n䢩B©,D©E© JLVä© ¢B Vä¢ © BLVäDŽE¢ŽIÊ© BêꭝðåLÿÿÿàáu • óœ}ÿÿM­Ð)𠩍!©"`ûó3ö!£ö3ö<öLäóî!¬!ÀÐ ©!©ä"¹; `RUN "D:INTRO.SYS"›âãàá°1NEED D1 THRU D8›ÿàáu`9:²$ 7 DISK€FLASÈDÌÉÁFILE€FLAÇLINEÓWIDTÈKEÙÊERÒBAKCOÌUPPEÒTITCÓ"PB™h@E@€+} d9€;@€,96€." DISK #188 éîæïíéîäi,}© +@‚1AR@CAYUA@gA @xyA‹A-}A@A@†©6-n]%6‚-F:A`,%AV$F:Aa,9‚%@@pMƒ-@@&Q"„Y.}‚%ƒ„] ƒs116,6,6,7,6,6,6,6,6,6,6,2,2,2,2,2,2,2,2,112,2›xE‚%@'@e.‚%@(F:A`,E‚%@)F:Aa/},‚r(( ðõâìéã  äïíáéî  óïæô÷áòå+(C( ](********************r( INFO MINDER–(0}********************¢^ (3(% INFO MINDER is a full-featured fully^(& flexible database that is useful for ŠY.(& an1}y record keeping purposes. It also Y(& allows modification to add report ªc.(& forms when needed. 2}@-@@c( ÐÒÅÓÓ ÓÔÁÒÔ ÆÏÒ ÉÎÓÔÒÕÃÔÉÏÎÓ ÈRAY@4!AU5ƒ-@@PRF:B2y,"@3}AÜ ƒ6-@& Aô###############################›þ### TEXT DISPLAY TO SCREEN OR #›### PRINTER4} by Les Ellingham #›###############################›;…;@,#6…. D:README.TXT/6†-;6‡-&V@5}@6@@…V@@K:0†" A:) A6‡-‡%@6})ƒ-@ˆD)@„N.ƒ!ˆ&@*„"@2!( $'. A0X(@>:„,b*„"AU' 6‡-‡%@7}* A0l ƒv"F:@„,!@!" A`€‡!@T A`Š Ap”(ÈÉÔ ÒÅÔÕÒΠÔÏ ÃÏÎÔÉÎÕÅ8}ž)@‰š(>:A%,$² F:A•,A6APŒ:F:A•,"A6#@.@:6†-@9}Æa(0(%END OF MANUAL - PRESS ÓÔÁÒÔ TO RE-RUND(ANY KEY TO EXITVAdAUa@ÐF:B2y,"@%Ú:}-F:Ad,AU*AdAU-%ä A î*'(ERROR F:A•, CHECK DISK*ø‰@*‰@;}$&Š-@@"(@& Š 6‡-$) +@‚@) A  $-@@$( I<}NFOMINDER*'('( (S)creen or (P)rinter4)@‰>!!‰"@€)‰"AApH!!‰"@ƒ)‰"AA=}`R A \26ˆ-@7/@@E:2$f""? :? "Width 1) 40 columns"›p? " 2) 80 >}columns"›z66GET #2,KEY:KEY=KEY-48:IF KEY<1 OR KEY>2 THEN 610›„26ˆ-@@/@@P:2$ŽB A ?}0(ýÃÈÅÃË ÐÒÉÎÔÅÒ ÁÎÄ ÈÉÔ ÒÅÔÕÒÎBAdAU˜)@‹@¢ A çè›ò/ +@/6‚-F:@}A`,%AV$F:Aa,ü+‚%@@q+‚%@A@'AŒA'A Ž$€ D:A}INTRO.SYSAV$F:Aa,ü+‚%@@q+‚%@A@'AŒA'A Ž$€ D: ¡¢zÔ@ë@XMØRMAØZERÏONÅTWÏTHREÅFOUÒSEVEÎEIGHÔUPCASÅFMØLLEÎWRMØÉFXšFYšFWšFLDNAM€FSIZšFPOSšMUSšFNDXšWNDXšB€CH€FNAM€P€KEY€K C}J€KK€XN€PšDBNAME€OUNAME€ER€IMF€DBE€L€HD1€HD2€REC€OLDREC€BLANK€FL€BL€BAR€S€SV€F€ZZ€FNS€DE€UNDE€A€D€IÇNÒØCHACÔDL±DL²ÙÊËJ±J²WØK± D}K²ATRACÔOLDØOLDÙSHFLOËNXÔÆÃEOÌNSÖOËNCÁNDÅNPÒNNØFÁBÓDEÌSDÌBIT·ÒP²SHFTÐP±EOÆDÁRPTYPÅ×FÂCLEAÒNFÄDÂXÓYÓFÐINNE×NÄNDØERRSAÖOUÆMORÅF E}MODÅUPDATÅAPPENÄCONSOÌOPTIOÎSTARÔCÈNULÌHDÆPÇLÎDLISÔDÍDMÈ F} @@@€@@@@@€€ G}€€€€€€@€ €!€"€#€$€%€&€' H}€(€)€*€+€,€-€.€/€0€1€2€3€4€5€67 I}89:;<=>?@ABCDEF J}GHIJKLMNOPQRSTUV K}WXYZ[\]^_`abcdef L}ghijklmnopqrstu M}vwxyz''INFO MINDER 1.0 by James W. Brown›d6€-@!6-AnW6‚-ƒ N}-@'6„-@36…-@?6†-@K6‡-@W6ˆ-@s6‰-@dx1 6Š-ˆ6‹-A0!6Œ-A 16-…$Š% O}@}%%Ž9,9,9,‘;Š$ˆ,’9Š,“9Š,‚”9Š$„,•9Š,–9Š,‡%%—;@5,˜;ƒ,™;ˆ,š;@,Œ›;€,œ;€,;€,‘ P}ž;$€,Ÿ9,– ;@,¡;@,›&&¢;@7,£;@,€;@, ¥;‹,Š;@p,§;‹,ªš;Œ,©;Œ,Ž Q} ª;@7,«;@0,¬;ƒ,Ÿ00­;@2,®;@),¯;@),°;ƒ,±;€,Ã$$²;@",³;…,Ž;…,µ;ƒ,¶;ƒ,ô A˜ R}LSort index›Q7 6·-ž'6¹-P:?P%ž$M:ž,'A,1 A“7º‚VS ¹!ƒ-„@!S(Sort will take P:@0$¹, S}'@ to ¹ minutes.[-„@"(Sorting]LAY‚A`‚-Aa@?AY@4LSc T}reen off›`H · „º„AY‚'A`»3AaŒEAY@4H$j6·-P:·'„,6-ž&·t 6œ-‚~ Ÿ-ƒƒ U}'-@@"'(·:Ÿª7ƒ<†,ˆ 6¿-Ÿ%·‰6À-€$Ÿ&€%ƒ6Á-À%Â&ƒŠ6Ã-€$¿&€%ƒ6Ä-Ã%Â&ƒ6œ.ž7À<Á,6.ž7Ã<Ä,’ V}I œ36›.6ž7Ã<Ä,.œ%6ž7À<Á,.›.6¹-Ÿ8¿,:6Ÿ8¿,-Ÿ8Ÿ,C6Ÿ8Ÿ,-¹I6œ-ƒœ ŸŠœA@¯ Å‚ A °Position W} cursor›º -ÆÇ&ƒ(¬Ä -¹œ&ƒ(Î 6Æ-¹6Ç-œ$ÐInput/modify screen›Õ7 È‚6Æ-‚6Ç-ƒ6É-‚$6¹-Ž8Ê,-6 X}œ-8Ê,7 AÚ )ƒËäËÌA @æ Ê"Í6Î-ƒ$è Ê"Ï6Î-‚$ê Ê"Ð AR6Î-ƒ$ì Ê"Ñ6Î-‚6 Y}É-6ƒ$î Ê"Ò6Î-‚6É-ƒ$ð Ê"‚6Î-ƒ$ø Ë"…6Î-‚$ú"Ë"@)Ë"@#6Î-ƒ"$ü'Ë"@*Ó!‚ A Z}9' A ™þÓÒA `Ë"@6Î-‚6É-ƒ$Ë"@6Î-‚6É-6ƒ$' Ë"†6š7ƒ<ƒ,.µ AR$ [}6Î-ƒ'$-Ë"@!6š7ƒ<ƒ,.¶$ AR*6Î-ƒ-$ "Ë"@:, A0" A ™"Ë"@:, A1" A ™. \}Ë"@:,)Ë"Ô)Ë"Õ)Ë"Ö$ A2. A ™"Ë"@:, A3" A ™  Ë"Ì A5 A ™%"Ë"@:, A5 ]}" A ™*;Ë@: ,*Ë@:z,-¹œ'(>:Ë%×,1 A3; A ™/ A3 A ( Pack pointers›2 6Ÿ8 ^}Ø,-Ù%Ú$Û‹ $Œ Unpack pointers›–  6Ü-Ø!žÜ$  6Û-P:Ÿ8Ø,'Ú,6Ù-Ÿ8Ø,&Ú$Ûï $ð Display record R›ú  A' _} AF 6˜.š7ƒ<ƒ,˜0µ*Ý"‚$ -„@#(Record Ø ÞAHA†A‚S $T ›^ !!6®.ENTER `}KEY TO SEARCH FORh  A•-„@È‚r 4!(Enter part or all of key:%›.6ß-B:›,4ȉ|  ß"‚6›.ª7ƒ<€,$€ a}  ß €6›7ß%ƒ,.ª7ƒ<€&ß,· $ž Cursor up›Â  œ8Ó, A$Ì  A76œ-œ&„ A4Ö A $  b}Cursor down›& A70 1 œ8à,6Ê-Ó6¹-Ž8Ê,$6œ-8Ê,. A1$:  6œ-œ%„ A4 A $€ Cursor c}left›Š ! ¹!Ž8Ê,6¹-¹&ƒ A!$” : Ê!Ó A76Ê-Ê&ƒ$6¹-Ž8Ê,-6œ-8Ê,7 A:$ž Aã $ä Curso d}r right›î (¹ Ž8Ê,%8Ê,&ƒ6¹-¹%ƒ% A($ø : Ê à A76Ê-Ê%ƒ$6¹-Ž8Ê,-6œ-8Ê,7 A:$ A1G $ e}H Find 1st fld on line Y›\ -Óàf  œ"8,6¹-Ž8,6Ê-$p  « $¬ Cursor to next fld›¶  A7Êà f}6Ê-Ó&ƒÀ ' 6Ê-Ê%ƒ6¹-Ž8Ê,6œ-8Ê,' A$tFix size field›yÓ!‚)Ê"‚)Ê„$P:Ê'„,$~) º‚6À-Ž8Ê,-À%…œ g})(ª7ƒ<@ ,ƒ ¿-ƒ„ˆ 1ÀœÃ1À%@œÄ$Ä"@:°,)Ä"@:¬,6Ä-Ã$6Ã-@:°,’ -Àœ(>:Ã,>:Ä,— ¿œ à h}×6Ã-Ã&ס Ä×6Ä-Ä&׊ 6¥.>:Ã,6¥7„,.>:Ä,° A7™6Ã-A:¥, áµà ƒ)Ã!@(A7™º6’8Ê'„,-Ã6ß-ƒ¿ i} Ÿ-ƒŠ6ß-ß%’8Ÿ, ŸÄ-@2…(߬¬Î-„@#(¬Ð( ß!Œ-À%…œ(MaxTotŒ( AÓ º„ $×0 j}á-À%…œ(BAD SIZE& A0 A7•<Repeat field›F-Ž8Ê,8Ê,6¿-“8Ê&Ï,P-¿¿%’8Ê&Ï,&ƒZ6Ë-@:©7<,,%× k}(>:Ë,d n A5 AŸ$ !!Set up entry/display screen›ª -ƒâŽ!-„8Ï%,!(‘7ˆ$&‡<ˆ$,:Ÿ l} È4 -„8Ò,4(#Next Prev Save Delete Cancel $Mark data fields› Ê-Óà 6ß-8Ê,6¹-Ž8Ê,6œ-8Ê, m}" -¹œ(«7ƒ<ß,, Êg$hWrite a record›r ABP ãš| 6©.š á$š á€/6¢.DISK WRITE ERROR % A n}y/ A–Ë$ÌPack screen to record›Ö 6¿-ƒ1äåË6š7¿<¿,.>:Ë,Û 6æ-ÓÓ!‚6æ-Ï%ƒà Ê-æàå2‚”8Ê& o}Ó,@ˆê" 6œ-8Ê,6¹-Ž8Ê,"6À-¹%8Ê,&ƒô Ÿ-¹À1ŸœËþ Ë×6Ë-Ë&× 6¿-¿%ƒ6š7¿<¿,.>:Ë, Ÿ Ê! p} 2‚‚‚‚/$0Unpack record to screen›5 6æ-ÓÓ!‚6æ-Ï%ƒ: 6¿-„Ê-æàD 6œ-8Ê,6¹-Ž8Ê,6ß-8Ê,N -¹œX q}-¿¿%ß&ƒ]6Ë-@:š7<,,%×(>:Ë,b g 6¿-¿%ßl Êv"6˜.š7ƒ<ƒ,6¹-Ž8Ð,&ˆ"6œ-8Ð,€ -¹œ (³… ˜4¶-¹ r}œ(ŽŠ -ä&ƒå&ƒ(؏ -äå(˜“$”Read data base›–ç 6Ý-‚ AE0™ A•-„@ȉž$$( s}Do you want to enable access£$$(to deleted records [Y or N]š˜6Ý-˜4Y²! As6è-‚6Ø-‚(Î!$ŽéA t}E@¶2-„@((Create an index now.ȉ2˜ž ˜4Y Au A“Œ AF؁6Ü-ƒÆÜ 6ž-Ø u}$Ð"š7ƒ<ƒ,4µ)Ý6Ø-Ø%ƒ" AGÚš7ƒ<ƒ,0µ6è-è%ƒäC-„@ +(Ø records in database.C(è deleted records. v}î ãÛÙ÷ AE@øRead a record› AFPãÛÙ  ãš á 6©.š  6Ü-‚ $*  á 6Ü-ƒ4=F:ê, w}A6)6¢.DISK READ ERROR 3 Ay= A–[$\Pack record to index›f Ø ƒ $p6Ÿ-é"‚)+š7ƒ<ƒ,4¶*Ý"‚,z) x}Ÿ6ž7€$+Ø&ƒ,%ƒ<€$Ø,.±& A&)$„ 6Ÿ-ƒ-ƒéŽ 6Ê-•8,6ß-–8,6¿-“8Ê,˜6›7Ÿ,.š7¿<¿%ß&ƒ,6Ÿ-Ÿ%ߢ ¬6 y}ž7€$+Ø&ƒ,%ƒ<€$Ø,.›¶ A&¿$ÀRecord to screen›Ê AD A‘#$ˆ›’,"6®.ADD AN ENTRY TO DATAB z}ASE, A•œ. ž!6¢.DATABASE IS FULL.+ A–.$Š 6Ó-Í° A@ AA6Ê-Ï%ƒº -äå(µ A Ä {} (Î $Î6 A“-„@",( Processing...6 AWØ ãÛÙ6ž-ž%ƒ6Ø-žâ! AC AG! ABë |}$ì›ö##6®.CHECK/CHANGE/DELETE ENTRY A•6¯.®  ž ƒ6¢.€ A–$< é ƒ/6¢.You must create an }} index first.9 A–<$ 6Ó-Ò6Ê-Ó AY (Î $( -äå(š7ƒ<ƒ,2 AC AG< ãÛÙ AB ~}F"6¢.RECORD UPDATED" A”O$P(Un)delete›Zš7ƒ<ƒ,4µ6˜.¶dš7ƒ<ƒ,4¶6˜.µn6š7ƒ<ƒ,.˜x -äå(˜ }‚ A’³$ŽCreate index›Ÿ' Au AvÎ*é' A$›"""6®.REPORT DATABASE CONTENTS, €}& ž ƒ A•6¢.€# A–&$6# 6¯.® A6®.¯# A•@ 6Ó-Ï%ƒÞ!ƒ A…J AVÞ"ƒ A@ }T!!6·-+“8â,%’8â,%â!@v*Þ"„,^·3>:@',B>:…,¬h' Ø-ƒž A($F:Ad,"…'$m Ør·3>:@ ‚}',B>:ƒ,¬{$|Close/exit›† ã ë#6®.DATABASE CLOSED# A•š ( (Enter  Ò  to restart.€( ƒ}(Enter  Ñ  to quit.® 6ì-6ƒÈ‰ž((Choice˜Â ˜4R6ì-ƒÌ ˜4Q6ì-‚Ö ì ‚ A AU  „}Û 6ž-‚6â-‚ß$àSet file mode to update›ê í"î $ô 6í-îãþãí‚ C$DSet file mode to append› …}N í"ï $X 6í-ïãbãí‚ §$ Get a record› A)6Ø-ƒ  Ø!ž Aˆ6Î-‚$*46œ.ž7€$+Ø& †}ƒ,%ƒ<€$Ø,"›3œ)œ1±*6Ø-Ø%ƒ4 AY 4! AV A'! AF9$š7ƒ<ƒ,0µ*Ý"‚6Ø-Ø%ƒ$ AY > 6®.¯ A• ‡}H! A@ AA! ADR! 6Ê-Ó A !É"‚AYW 6Ø-Ø%É\ Ø ƒ)Ø!ž Aˆ$a AY@f0Î ˆ} A“-„@"0( Processing...o$pMain menu›z"6®. INFO MINDER A•"(„--6—.#| ‰} |Ž/+(#/(—˜/+(#| Add a new entry. |/(—¢/+(#| Check/c Š}hange/delete an entry. |/(—¬/+(#| Create/change index. |/(—¶/+(#| Update (re-sort) index. |/(— ‹}À/+(#| Produce database report. |/(—Ê/+(#| Copy live records to a new file.|/(—Ï/+(#| Close database and exi Œ}t/restart.|/(—Ô++(#Ù 6à-Ï%âÞ Ai6œ-@ðˆè Ab A‡ò }F:ð,ñAa`ü- A‰6œ-œ%„!œ!@-6œ-@ Å‚ Aa F:ð,òAa  A‰Å‚ó Ž}ô$L 6ì-6ƒL+œ&†,'„APAQASAATAcAU.ì ‚A`7$8Highlight line Y›B } -„œ(|›$œ›Š7'6®.COPY LIVE RECORDS TO NEW FILE-6¯.®7 A•° ž ƒ6¢.€ A–$º% A‡ }Ae%Î"‚AcÄ 6õ-ë Ar(Î$É 6¹-ƒ6®.¯ A•Î Ø-ƒžØ A' AFâÜ A‘ ‘}$ìAš7ƒ<ƒ,4µ ëš!-„@9(¹ RECORDS COPIED.A6¹-¹%ƒö Øûë A‘ÿ$› $ -„†$(Enter f ’}ilename in form&-‡@&(Dn:filename.ext š (Fileȉc$d›n6®.OPEN OUTPUT FILEx A• “}(‚6š.or P: AdëŒ ¡ È‚– Aeëˆ‚¡  á 6Î-ƒ$Ÿ  á 6Î-‚Ã.6¢.FILE OPEN ERROR $ ”} Ay. A–Ç$ô›þ--(%Use  ÏÐÔÉÏΠ key to select an option.""(Press  ÓÔÁÒÔ  when ready.W$X›] •}6®. OPEN DATABASE6¯.®b A•6š.¬l Ad6ç-‚v   È‚€ 6í-î ApŠããí‚ ”  á 6Ø –}-‚š AE A‘$², áF:ê,"Ap Aq,ÎAp@·.6¢.FILE OPEN ERROR $ Ay. A–»  —}ApŒCreate new database file›Æ AtÐ 6®.¯ A•Ú-„@( CREATING  ä Aqã6ž-‚î ˜}㈂  áø 6õ-ã Arã6ç-ƒ Î $ á&6¢.FILE CREATE ERROR & Ay A– Aq  ™} Write header›* Ar õ£4 õâ,FIELDS> Ê-ƒâH6™.‘7Ê$ˆ&‡<Ê$ˆ,R õ’8Ê,,™\ Êf õÛ š}Ù áp 6Î-ƒ $z. á$6¢.ERROR WRITING HEADER: . Ayƒ A–6Î-‚$„Read header›Ž 6Î-‚ As ›}㥘- ¥0£6¢.NOT AN  6¢7ˆ,.£* A–-$¢ ãâ6“8‚,-ƒ6’8‚,-ƒ¬ Ê-ƒâ¶5 ㍙6’8Ê,-*6“8Ê,-“8Ê&ƒ,%’8 œ}Ê&ƒ,568Ï%Ê,-À6‘7Ê$ˆ&‡<Ê$ˆ,.™Ê ÊÔ ãÛÙ á6Î-ƒ$Þ$ á$6¢.ERROR READING HEADER: ç Ay A– }$è›í!6®. DEFINE FIELDS! A•ò(² Total=1 ü%%( Status 01 Done!-„8ƒ,&ƒ-ƒŠ ž}((! 8 6Ó-‚6à-„$Š AA!6Ê-ƒ+ A 8(ÎAt % AC6â-‚6“8‚,-ƒ%6’8‚,-ƒ -ƒŠ6Ÿ-$@ Ÿ}%6¥.š7Ÿ%ƒ<Ÿ%„,%¥4ª7ƒ<„,At€ 6¿-A:¥,¿‚At€# 6â-â%ƒ#6‘7â$ˆ&‡<â$ˆ,.š7Ÿ&‡<Ÿ,$ 6’8â,-¿)6“8â,-“  }8â&ƒ,%’8â&ƒ,.68Ï%â,-’8â,8 K$L›Q 6®. DEFINE INDEX A•V 6Â-‚6é-‚(²`' -ƒâ#(‘7$ˆ&‡<$ ¡}ˆ,¬’8,' j9-„@9(%Fld# to index,0 if done,-1 to cancel:oÊ Ê"‚$qÊ ‚Aut? Ê!â+6¢.REQUES ¢}TED FIELD NOT DEFINED5 A–? Au0y 6é-é%ƒ6•8é,-Ê~7-„@3(Enter # of characters to index:7ƒ= ƒ £})!’8Ê,)6¢.VALUE OUT OF RANGE3 A–= AuPˆT Â%!€/6¢.TOO MANY CHARS. MAX SIZE IS @6¢7B:¢,%ƒ,.=:€,J A– €}T AuP 6–8é,-6Â-Â%’9-„@9( Max total: €. Current total: ¬¯ Au0°Read DB to new ind ¥}ex›º 6í-‚ AVÎ AE A‘$ÜAppend err nr›æ6¢7B:¢,%ƒ,.=:F:ê,,?$@Title screen›J (} Š} T$-@„$(INFO MINDER 1.0^-@†(byh(-@@((James W. Brownm$-„@$(On men §}u screens:n!!(Use  ÏÐÔÉÏΠ and  ÓÔÁÒÔ .r*-„@*(On data entry screens:|,,($Use ÃÔÒÌ-arrow keys or ÔÁ or ÒÅ š}ÔÕÒΆ--(%to move cursor. Put cursor on action++(#box and press  ÒÅÔÕÒΠ to execute. š3(3( recs, € max ind ©}ex, I:‚, free.£$€›©6®. SELECT REPORT® A•(³/+(#/(—ž/+(#| ª} Report to screen. |/(—œ/+(#| Report to printer. |/(—Â/+(#| Report to file (user code). «} |/(—Ö.+(#.(Û Aià6œ-@ðˆå Ab A‡êF:ð,ñA ¬}…ï- A‰6œ-œ%„!œ!@-6œ-@ô Å‚ AeùF:ð,òAeû A‰Å‚óôþ46Þ-+œ& ­}†,'„Þ"„*6¢.Printer ready?4 A” Þ!„ Ae (ÎA $ For RPTYPE=3› #6¢.NOT IMPLEMENTED# ®}A–k $4!Set up rept hdrs›9!-@6@(<<<>!1 -„ˆ1(#Enter report header (70 chars max):C! È‚ ¯}ŠH!3 6-B:Š, @p)6Š7%@,.¬3 A… R! 6ö-‚6÷-@™6§.¬\! Ê-ƒâ6ß-’8Ê,f!6§7B:§,%ƒ,.¬p!6§7 °}B:§,%ƒ,.‘7Ê$ˆ&‡<Ê$ˆ,z! ß!ˆ6§7B:§,%ƒ,.ª7ƒ<ß&ˆ,„! ÊŽ!6§7B:§,%ƒ,. Rec—!$˜!Print rept line›¢!6¥.š7ƒ<ƒ,§! ±}¥4µ6¥.¬¬! Ê-ƒâ¶! 6ß-’8Ê,6¹-“8Ê,À!6¥7B:¥,%ƒ,.¬Å!6¥7B:¥,%ƒ,.š7¹<¹%ß&ƒ,Ê! ß ˆ6¥7B:¥,%ƒ,.ª7ƒ<ˆ&ß,Ô! ÊÙ! ²} 6÷-÷%ƒ÷ @dA†Þ! ö!‚-ƒ†3¬ ã! 6ö-ö%ƒ6÷-@è!""3Šª7ƒ<ƒ%·$@6,Page öí! 3¬ 3§ò! ³} 3¥¬Øû!$ü! Delay›" -ƒˆ _"$`"›j"4*6¢. REQUESTED RECORD NOT IN DATABASE4 A–Ã"$Ä" Buzz›Î"/2 Ž}‚@U@ˆ!-ƒ…% /2‚‚‚‚'#$(# Error›2#! 0†††!2‚@U@ˆ<# A‡F# 0†‚‚2‚‚‚‚ µ}‹#$Œ#Wait/return› #3-„@"/(Press  ÒÅÔÕÒΠ when ready 3˜ï#$ð# Notice›ú#'0†@ˆ'2‚A!@ ¶}ˆ$ A‡$ 0†‚‚2‚‚‚‚S$$T$Clear bottom of screen›^$&œ-@!@#-„œ"(ª& œ·$$ž$N ·}otice msg›Â$! A— A’! A‘%$%Draw box around S$›&% (}0%' 6-B:®,6Ÿ-@&P:'„,'6¿-%„:% ž}(ª7ƒ<Ÿ,­7ƒ<¿,D%(ª7ƒ<Ÿ,| ® |N%(ª7ƒ<Ÿ,­7ƒ<¿,%$€%Error msg›Š%! A— A! A‘ ¹}ã%$ä%Status msg›î% A“ø%-„@!(¢G&$H& Init›J&%6º-AU A€%6Ú-BL&!6ð-B2y º}6ò-@!6ñ-…N&7/6ª.% 76¬. P&E(6«.                              6-@ »}€A6±7,.|E R&**6­. T&6£.INFO MINDER FILEV&(6€.DATABASE IS EMPTY.(6Ö-AV Œ}X& 6².Field# Name Size^&# 6³. D6Ž.Und6ã-…#6ë-†`&36Ô-A&6Õ-AT'6Ì-AU36ó-Adb&'6Å œ}-@w6È-A'6ê-A•d&$6á-B6°.«7ƒ,$6ô-AUf&-6ï-@ 6î-@'6ä-@5-6å-„p&Ê-ƒŠ$ Ÿ}„&ƒ„r&26œ-Ê%@68Ê,-œ)6Ž8Ê,-@268Ê,-ˆt&*68Ê%ƒ,-œ6Ž8Ê%ƒ,-@!*68Ê%ƒ,-„v& Êx&- 6Ò-„$Š%ƒ6Ñ-Ò%ƒ ¿}6Í-Ò%„%6Ð-Ò%…-6Ï-Ò%†~& -ƒŠ€&0 6Ê-Ï%6Ž8Ê,-@'68Ê,-„$%†06’8,-‚‚& „&1 #A™P-‚Š"Ÿ"6”8,-Ÿ À}-6”8$„,-Ÿ1 Ž& #A™`-ÒÏ’&""Ÿ6Ž8,-Ÿ68,-†"68,-ƒ–& ˜&* 68‚,-†6Ž8‚,-@7$68‚,-ƒ*6é-‚š&) 6µ Á}.A6¶.D6×-A() A‘œ&@†‚K:ž&@@‚S:¢&16»-F:A`,!6Œ-F:Aa,16ø-» Â}%AV$Œ€&<+6ù-F:ø%†,%AV$F:ø%@,%A@<6ú-P:ù'AV,Š&'-A6AQ#A' š&7AR@ Ã}f+ASù&AV$ú7ATúª&?AU„!AV@e-AW‚?AX@¬& Main›¶&' 6é-‚º Ä}„ ApÎ' A`À&ìA™Ý&Þ&%%121,108,96,91,81,72,64,60,53,47›è&6,12,18,28,36›€D8:INFOMIND.BA Å}S ApÎ' A`À&ìA™Ý&Þ&%%121,108,96,91,81,72,64,60,53,47›è&6,12,18,28,36›€D8:INFOMIND.BA ›› Table of Contents›››1.0 INTRODUCTION . . . . . . . . . . . . . . 1›1.1 Purpose . . . . . . . .Ç} . . . . . . . . . 1›1.2 Goals . . . . . . . . . . . . . . . . . 1›1.3 Tradeoffs . . . . . . . . . . . . . . . . 1›1.4 SÈ}pecial Features . . . . . . . . . . . . 2›1.5 Requirements . . . . . . . . . . . . . . 2›1.6 Installation . . . . . . . É}. . . . . . . 2›1.7 Contacting the Author . . . . . . . . . . 3››2.0 USER GUIDE . . . . . . . . . . . . . . . 4›2.1 GettiÊ}ng Started . . . . . . . . . . . . . 4›2.2 Main Menu . . . . . . . . . . . . . . . . 4›2.2.1 Add a New Entry . . . . . . . Ë}. . . . . 5›2.2.2 Check/Change/Delete an Entry . . . . . 5›2.2.3 Create/Change Index . . . . . . . . . . 5›2.2.4 Update (Ì}Re-sort) Index . . . . . . . . 5›2.2.5 Produce Database Report . . . . . . . . 5›2.2.6 Copy Live Records to New File . . .Í} . . 6›2.2.7 Close Database and Exit/Restart . . . . 6›2.3 Data Entry/Modification Screen . . . . . 6›2.3.1 Status InformÎ}ation . . . . . . . . . . 6›2.3.2 Action Boxes . . . . . . . . . . . . . 6›2.3.3 Data Fields . . . . . . . . . . . . . . Ï} 7›2.3.4 Cursor Movement . . . . . . . . . . . . 7›2.3.5 Control Keys . . . . . . . . . . . . . 7›2.4 Indexing and SortingÐ} . . . . . . . . . . 8›2.4.1 Defining the Index . . . . . . . . . . 8›2.4.2 Sorting the Index . . . . . . . . . . . 8›2.Ñ}4.3 When the Index is Used . . . . . . . . 8›2.5 Reports . . . . . . . . . . . . . . . . . 9›2.5.1 Report to Screen . . .Ò} . . . . . . . . 9›2.5.2 Report to Printer . . . . . . . . . . . 9›2.5.3 Report to Disk (User Code) . . . . . . 9›2.6 HinÓ}ts . . . . . . . . . . . . . . . . . . 10››3.0 CUSTOMIZING GUIDE . . . . . . . . . . . . 11›3.1 Size Limits and Memory Usage Ô} . . . . . . 11›3.2 Setting Up for Your Printer . . . . . . . 11›3.3 Custom Reports. . . . . . . . . . . . . . 12›3.4 Data FiÕ}le Format and File Utilities . . . 12››4.0 PROGRAMMER GUIDE . . . . . . . . . . . . 14›4.1 Call Tree . . . . . . . . . . . .Ö} . . . . 14›4.2 Subroutine Descriptions . . . . . . . . . 18›4.3 Key Variables . . . . . . . . . . . . . . 23›4.3.1 Arrays .×} . . . . . . . . . . . . . . . 23›4.3.2 Strings . . . . . . . . . . . . . . . . 24›4.3.3 Scalars . . . . . . . . . . . . . . Ø}. . 24›4.3.4 Special Pointers . . . . . . . . . . . 24›4.4 Tricks . . . . . . . . . . . . . . . . . 25››5.0 EPILOGUE . . .Ù} . . . . . . . . . . . . . 26›››››››››››› INFO MINDER Version 1.0› › › 1.0 INTRODUCTION › › › 1.1 PuÚ}rpose › › This program was written to provide a flexible, general purpose data › management capability for the Atari Û}8-bit machines. It permits › convenient full-screen data entry and modification, flexible indexing, › and generationÜ} of basic printed reports. It is designed to allow for › relatively easy user modification to add custom report formats Ý}when › needed. › › › 1.2 Goals › › A number of goals guided the development of this program. First, since › Þ}no data management program for a computer with limited memory is likely › to provide just what you need, this one is writß}ten in Atari BASIC so it › can be modified by users with minimum difficulty. › › Second, since sometimes you need to à}perform global editing operations on › a data file, which are not convenient using a database approach, the › databasá}e file format is a standard DOS text file. Thus, it is easy to › write programs to perform special functions on your datâ}a files, or to use › any text editor for things like global search and replace. It is also › possible to use regularã} DOS commands to make backup copies, rename › database files, etc. You can also use any available disk drives for all › ä} file operations. › › Third, the user interface should be as convenient as possible to make it › easy to enter or å}modify large amounts of data. › › › 1.3 Tradeoffs › › Any design requires tradeoffs, especially when memory is constræ}ained. In › order to permit the use of text editors and simple user programs with the › database files, as well as tç}he use of DOS commands for file operations, › the database consists of a single disk file, and no index is stored on › è} the disk. Thus, an index must be created in memory whenever it is › needed. This in turn means that the number of recé}ords that can be › managed is limited by available memory rather than by disk space. It › also means that things canê} be a little slow when it is time to build and › sort an index. › › The memory limitation also means that the number ë}of features and options › included had to be limited. Every feature takes memory, and only those › which seemed mostì} important were included, in order to maximize the › memory available for user data. In particular, there are no "DOS" ›í} features built in. › › The use of BASIC also means there are a few areas where performance is › slow. It also mî}akes it too hard to do program overlays from disk, which ›› 1›››››››››INFO MINDER Version 1.0›› ï} is the usual technique used to cram more features into a program of this › type. › › Finally, error handling is leð}ss complete than I would like. However, it › seemed like some errors are so unlikely that they didn't justify the 100 › ñ} bytes or so of memory it would take to trap each one. If some error that › is not trapped keeps biting you, you may ò}want to add a trap for it. › › › 1.4 Special Features › › This program has a few special features not commonly found ó}in data › management programs, even on larger machines. One of the most important › is the ability to repeat the conô}tents of a field from the previous › record. This is a great time saver when entering data where one or more › itemsõ} are the same in several successive records. › › Another unusual feature is the automatic switching of the printer to › ö} condensed print mode when the width of a report exceeds 80 columns. › However, the use of this feature requires you to÷} customize the program › for the specific printer used (see 3.2 below). › › › 1.5 Requirements › › INFO MINDER shø}ould run in any Atari 8-bit system with at least 48K RAM › and Atari BASIC. It was developed and tested on a "stock" Ataù}ri 800. › › INFO MINDER requires at least one disk drive, although some operations › will run faster with two drives.ú} If a database file is larger than half › the space available on a disk, two drives are required to support › functiû}ons such as database copy (pack) and reports to disk. › › A printer which supports 80 columns is required for reports froü}m the › simplest databases. A printer with a 132-column mode is required for › reports from databases with more thaný} a few fields. As originally › distributed, INFO MINDER supports mode switching only for the Gemini 10X › printer, aþ}lthough other printers can be supported with a simple › customizing step (see 3.2). › › This program uses only standaÿ}rd I/O operations as described in the Atari › BASIC manual. It has been tested on an Atari 800 with Atari DOS 2.0 › }using single sided, single density disks. As far as I know, there is › nothing in the program that should cause it to fa}il with any other DOS › that supports the standard Atari interfaces. However, it causes a hard › crash with MYDOS 3.}1x, and I have been unable to find the reason. I have › not tested it with any other DOS. (If you have any interesting }› experiences to report, I would like to hear about them.) › › › 1.6 Installation › › This program is normally (i}.e., the last time I saw it) supplied as an › ARC file which contains the following files: ›› } 2›››››››››INFO MINDER Version 1.0›› › - README.TXT - brief instructions › - INFOMIND.BAS - program text in BASIC} LIST/ENTER format › - INFOMIND.DOC - this document in ready-to-print format › › After UnARCing and printing the RE}ADME.TXT and INFOMIND.DOC files, you › should use BASIC to ENTER the program file, do any customizing you need › to d}o, then SAVE it to another disk which contains DOS. The program will › load much more quickly in SAVE format. › › If } you are using a printer other than a Gemini 10X, you should perform › the printer customization (3.2, below) before SAVE }ing the program. › › › 1.7 Contacting the Author › › If you are using this program, you are, like it or not, a beta t }ester. › After all, that's part of the game with public domain software. The › complexity of this program is such th }at I estimate it would take about › 10**23 years to test all possible, interesting usage scenarios. As you › might g }uess, I have not yet tested them all. If you discover problems › with this program, I would like to hear about them. Yo}u can contact me › on GEnie (GEnieMAIL JWBROWN) or the old fashioned way at: › › James W. Brown › 3}605 Fairmeade Rd. › Pasadena, CA 91107 › › If you send a blank 5.25" diskette and a stamped (3 oz. postage), }self- › addressed disk mailer with a COMPLETE description of your problem, I will › try to put together a fix and sen}d you an update, which will, with any › luck, also contain fixes for any other problems which have been reported. › I}t would be a good idea to include on the disk a copy of your database › file that caused the problem. › › HOWEVER, pl}ease keep in mind that one man's bug is another man's feature. › If you want the program to work a little differently, it} may be that › somebody else would be very upset if it did that. If I see such › requests, I'll try to suggest a pri}vate fix for the requester, without › changing the "official" version. › › I really don't have a lot of time to put i}nto this, so I can't guarantee › a quick response. Please be sure your problem occurs using Atari DOS › 2.0S, and do}cument the COMPLETE sequence of steps you went through to › cause the problem. If I can't reproduce your problem, I prob}ably can't › fix it. ››››››››››› 3››››››››INFO MINDER Version 1.0›› › › 2.0 USER GUIDE › }› This section explains how to use all the features of INFO MINDER. › › › 2.1 Getting Started › › Before starting}, you should have a good supply of blank, formatted disks › ready, with identification labels attached. It is also helpf}ul to keep a › notebook of what files are on what disks, and when they were last › modified. After performing the in}stallation as described above, and any › customization you wish to do, simply RUN the program. › › The title screen p}rovides a summary of the instructions for operating the › two major types of screens: menus and data entry. It also pro}vides › information on the maximum number of records and the maximum number of › index characters the program is curr}ently configured for, as well as the › remaining free memory. You can change these numbers as described below › in t }he CUSTOMIZING GUIDE section (3.0). Press RETURN when you are › finished with the title screen. › › The first thing !}you will be prompted for is the file name for your data › file. Enter a DOS filename as shown in the prompt. Be sure to"} include › the drive code. You can use any name you want, but the extension ".IMF" › is suggested. Since you do not#} have any INFO MINDER files yet, this will › create a new file. Later, if you specify the name of an existing file, › $} it will be opened for updating. In that case you will also be asked if › you want to access deleted records. If you a%}nswer "Y", you will be able › to operate on records that have been marked deleted, as well as "active" › (i.e. not de&}leted) records. It is necessary to do this if you want to › undelete any deleted records. If you answer "N" at this poi'}nt, deleted › records will not be read from the database for the remainder of the › session. You can change your min(}d later by closing and reopening the › database. › › If you are creating a new data base, you will see the DEFINE FIE)}LDS › screen. Enter names and sizes for the fields you want to define in your › data base. Use the cursor controls *}as described below (2.3) to make › changes. When you are finished, move the cursor to the Done box and › press RETUR+}N, or press CTRL-S or CTRL-W. (CTRL-C to cancel will erase › and allow you to start over here.) › › After the databa,}se is opened, you are asked if you want to create an › index. It is usually best to answer "Y" at this time, but see the-} › section "Hints" below. Finally, if the database already exists, it is › read to initialize the internal table of .}record pointers. › › › 2.2 Main Menu › › After getting the database defined and opened, you are shown the main › /}menu. Use the OPTION key to move the cursor to a menu selection, then ›› 4›››››››››INFO MINDER V0}ersion 1.0›› press START to select it. Hold each key until you hear a sound from the › speaker. › › › 2.2.1 Add 1}a New Entry › › This selection allows you to add a new record to the end of the database. › Fill in the screen with t2}he values you want, then select the Save box or › press CTRL-S to save the record. See the section on the data entry › 3} screen (2.3 below) for details. › › › 2.2.2 Check/Change/Delete an Entry › › This selection allows you to view or 4}modify an existing record. You must › have defined an index before you can use this function. You are prompted › fo5}r (part of) the index. If you remember which field(s) you have › indexed, enter the initial part of an index string. Yo6}u will start at › the first record whose index is greater than or equal to the string you › enter. If you don't reme7}mber, just press RETURN, and you will start with › the first record. Records are accessed in the order they exist on the8} › disk, unless you have sorted the index after reading the data base, in › which case they will be accessed in the o9}rder of the sorted index. › › Use the Next and Prev boxes (or CTRL-N and CTRL-P) to move from one › record to another:} until you find the one you want. You can then enter › new values for any fields or change the record status (delete/und;}elete › box or CTRL-D/CTRL-U). When you are satisfied with the changes, select › the Save box or press CTRL-S. If y<}ou change your mind and want to leave › the record unchanged, select the Cancel box or press CTRL-C, or move to › ano=}ther record. › › › 2.2.3 Create/Change Index › › If you did not create an index when you opened the file, or if you w>}ant › to change the index definition, you can select this option. See Indexing › and Sorting (2.4 below). › › › ?}2.2.4 Update (Re-sort) Index › › This selection will cause the index in memory to be sorted. It does NOT › affect th@}e data on the disk. All subsequent operations will use the new › ordering. If you later add new records, they will appeA}ar at the end and › will not be sorted until you explicitly request another sort. If you › modify fields which are pB}art of the index, you should also re-sort when › you are finished. › › › 2.2.5 Produce Database Report › › This sC}election results in the display of a secondary menu, where you › select the type of report you want. All reports are proD}duced in the ›› 5›››››››››INFO MINDER Version 1.0›› order of the current index in memory. YoE}u should think about sorting the › index before generating a report. See Reports (2.5 below). › › › 2.2.6 Copy Live F}Records to New File › › This is the "pack" function of most database programs. It copies all › "active" records (i.eG}. those not marked "deleted") from the input file to › an output file, in the order specified by the current index in memH}ory. › It is usually a good idea to use this function after you have made a › batch of updates and done an index sortI}. If you do it immediately before › or after a report, the report will reflect the contents of the new › database. ›J} › › 2.2.7 Close Database and Exit/Restart › › This option closes the current database and allows you to start over wK}ith › a new one, to reopen the current one, or to return to BASIC. The index › in memory is erased. › › › 2.3 DaL}ta Entry/Modification Screen › › This screen is used by those functions which allow you to add or modify › records inM} the database. A variant is used to define the fields in a › database. Another variant is used by the Report to Screen N}function. › They are all used in pretty much the same way. › › › 2.3.1 Status Information › › The upper right corO}ner of the screen displays two pieces of information › about the current record: the record number and status. The recoP}rd › number represents the order of the record in the database if no index is › defined; otherwise it is the index orQ}der. The status is "A" for an › active record and "D" for a deleted one. › › › 2.3.2 Action Boxes › › The top roR}w represents actions that can be performed. Those actions that › are applicable in the current state have white boxes beS}side them. You › can execute the indicated action either by moving the cursor to the › highlighted box and pressing T}RETURN, or by holding CTRL and pressing the › first letter of the action name. › › To move from the current record toU} the next record (in index order), › select Next or use CTRL-N. To move to the previous record, select Prev › or useV} CTRL-P. If no index is defined, the on-disk order is used. › › To save the record currently on the screen to the databaW}se file on disk, › select Save or use CTRL-S. CTRL-W is an alias for CTRL-S (for dBASE › fans). If this is done froX}m the ADD screen, the record is appended to ›› 6›››››››››INFO MINDER Version 1.0›› the databaY}se. If it is done from the CHANGE screen, the existing record › is overwritten. › › To delete the record (if it is cZ}urrently active) select Delete or use › CTRL-D. To undelete it (if it is currently deleted), select Undelete or › us[}e CTRL-U. The record will be overwritten on disk at this time, so you › should have made all other desired changes first\}. › › To return to the main menu without doing anything to the record, select › Cancel or use CTRL-C. › › › 2.3.3]} Data Fields › › You enter or change data in the defined fields by typing into the white › boxes in the body of the d^}ata entry screen. Use the DELETE/ BACKSPACE › key or the left arrow (with CTRL) to erase mistakes. Data entry is › _}always in "typeover" mode. DO NOT attempt to use CTRL-INSERT. › › A special feature of INFO MINDER allows you to repeat `}the value from a › previous record. Pressing CTRL-R while the cursor is in a data field › recalls the value of that a}field from the last record read from or written › to disk. In ADD mode, this is useful for "ditto"-ing the field. In › b} CHANGE mode, it will reset the field on the screen to what was last read › from the disk. › › › 2.3.4 Cursor Movec}ment › › You can move the cursor around the data entry screen by using the › CTRL+arrow keys in the normal way. Whend} you move the cursor beyond the › end of a box, it moves to the beginning of the next box. You can also › move to the}e beginning of the next box by pressing TAB or RETURN (except › in action boxes, where RETURN executes the action; use Tf}AB or arrows to › move around in the action boxes). › › › 2.3.5 Control Keys › › The following control key combing}ations (hold CTRL while pressing the key) › are defined when in the data entry screen: › › CTRL-C Cancel and returq}Ã?ÿb%DOS SYSb)AUTORUN SYSb*INTRO SYSb„BINFOMINDBASbçÆINFOMINDDOCB ¶README TXTn to main menu › CTRL-D Delete current record › CTRL-N Move to Next record › CTRL-P Move to Previous recr}ord › CTRL-R Repeat value from corresponding field in last › record read or written › CTRL-S Saves} current record to disk › CTRL-U Undelete current record › CTRL-W Save (Write) current record to disk ›››››› t} 7››››››››INFO MINDER Version 1.0›› › › 2.4 Indexing and Sorting › › › 2.4.1 Defining the Inu}dex › › You enter the index definition screen either during file opening or by › selecting the Create/Change Index opv}tion from the main menu. This will › present a screen which allows you to specify which parts of which fields › you w}want to include in the index. You select the field number and the › number of characters from THE BEGINNING of that fielx}d to be included in › the index. You can include portions of as many fields as you like, › subject to the maximum toy}tal index size shown at the bottom of the › screen. (If this turns out to be too small, see the section on size › liz}mits in the CUSTOMIZING GUIDE, below.) The fields will be indexed in › the order you specify them. › › If you enter {}a 2-digit number in the "# of characters" field, and then › want to enter a 1-digit number for the next field, you must c|}ompletely › overwrite the number on the screen by entering either a leading zero or a › trailing space. › › If yo}}u make a mistake, enter -1 in the field# field, then restart and › create a new index. › › When you are finished, ent~}er zero. › › › 2.4.2 Sorting the Index › › The index is only sorted when you specifically request it from the main › } menu. You must sort the index before the ordering it implies can take › effect. › › Sorting tends to take time, €}so plan carefully when you want to do it. › The screen is reduced to two lines to speed up the sort (by reducing › "c}ycle stealing" for the video). The estimated time needed for the sort › is displayed as a range. The lower number appli‚}es if the index is › already properly sorted (it takes that long to check). The higher number › is an estimate if thƒ}e index is in random order. It is possible that the › sort will take a little longer than the upper estimate in the wors„}t case. › The estimate line is not displayed if the upper estimate is less than one › minute. › › The second line…} of the display is a progress indicator. The numbers › displayed are internal variables of the sort, and have no special†} meaning › to the user. › › › 2.4.3 When the Index is Used › › Whenever an index is defined, it is used for all s‡}ubsequent record access › operations. However, the order of the index in memory is the same as the ›› ˆ} 8›››››››››INFO MINDER Version 1.0›› order of the records in the input database until the index is sorted. › › ›‰} 2.5 Reports › › The usual goal of using a data management program is to produce reports. › The approach used in Š}INFO MINDER is to provide some basic capability and › allow you to extend and customize to meet your special needs. I di‹}d it › this way out of frustration with commercial programs that can never › generate the report I want anyway, even Œ}with a lot of complex commands. › It turns out to be easier to write a program in a programming language › than to tr}y to "program" a report generator. Besides, we only have 48K › to play with. › › › 2.5.1 Report to Screen › › ReŽ}port to Screen provides a display like the data entry screen but with › the default action of going to the next record wh}en you press RETURN. It › is useful for a quick review of database contents. Press CTRL-C whenever › you want to ab}ort the report and return to the main menu. › › › 2.5.2 Report to Printer › › Report to Printer provides the default ‘}print format. You are first asked › if the printer is ready. Be sure the printer is powered on, on-line, and › posi’}tioned at the top line beyond the perforation. Press RETURN. You › are then prompted for a report header. Enter up to “}70 characters, which › will appear at the top of each page. You can enter anything you like › here; it is usually a”} good idea to include the file name and date. › › Column headings are printed under the header line. These are formed fr•}om › the field names. There is no capability to define custom column headings › except by reprogramming (which is no–}t hard). › › The first column of the report is the record status. If the record is › deleted, a "D" will appear here—}; otherwise, it is blank. The last › column is the record number. This is the number of the record as it › appears˜} in the input database, unless an index has been defined and › sorted. In that case, it is the order of the index. › › ›™} 2.5.3 Report to Disk (User Code) › › The third selection, Report to File (User Code), is not supported in the › š}basic version of INFO MINDER (you will get an error message if you try to › select it). You must write a subroutine to g›}enerate the desired report. › This option provides a "hook" for you to add any special capability you › might need, sœ}uch as generating a mail-merge file from an address › database. See the PROGRAMMER GUIDE section, below, for information} on › how to write such a routine. › › ›› 9›››››››››INFO MINDER Version 1.0›› 2.6 Hints ›ž} › Since INFO MINDER has not been optimized for blinding speed, it helps to › do things so that time-consuming steps Ÿ}do not have to be repeated. While › you can do things in almost any order you like, the following hints may › help y }ou get your task done faster. › › If you have an existing data base, it is better to add all new records › you are re¡}ady to add before making changes to old ones, or vice versa. › That is, do not jump back and forth between adding and cha¢}nging. This is › because whenever you go into ADD mode, the database is closed and › re-opened in "append" mode, whi£}ch requires DOS to read the whole file to › find the end. You really don't want to do this more often than › necessa€}ry. › › If you know in advance how you are going to want the database sorted, it › is best to define the index at the¥} beginning, when you are asked on the › OPEN DATABASE screen. This way the index is built in memory as each › recordŠ} is processed. If you define the index later, the database must be › re-read completely. › › If your database is lar§}ge (more than about 200 records), it will take › some time to sort the index. If the order is one you will want to use ›š} again, it will help if you do a copy operation to create a new database › in the sorted order. Even if you change t©}he database or add new records, › subsequent sorts will usually be faster if you start with a database that › is mostª}ly in order. ›››››››››››››››››››››››››››››› 10››››››››INFO MINDER Version 1.0›› › › 3.0 CUSTO«}MIZING GUIDE › › This section describes the changes you are likely to want to make to INFO › MINDER. Unlike most pro¬}grams, INFO MINDER is designed to facilitate › certain kinds of changes. Of course, not every possibility could be › ­} designed in, and so the PROGRAMMER GUIDE section (4.0), provides even › more detail for those who need to make more spec®}ialized changes. › › In order to make any of the changes described here, you need at least a › minimal knowledge of A¯}tari BASIC. The remainder of this document assumes › you know all you need to know to make simple changes to a BASIC pro°}gram. › › › 3.1 Size Limits and Memory Usage › › Because the index is kept in memory rather than on disk, the availab±}le › memory limits the size of the data base. There are two key quantities: › the maximum number of records in the d²}ata base (RMAX) and the maximum › number of characters to be indexed (XMX). The current values of these › parameters³}, as well as the remaining free memory, are displayed on the › title screen. The basic constraint is › › RŽ}MAX*(XMX+6) + free < constant. › › If you need to be able to store more records than the current value of › RMAX, youµ} can increase it provided you decrease XMX to stay within the › constraint. If you want to sort more or longer fields, y¶}ou can increase › XMX at the expense of decreasing RMAX. If you want to add any new code, › be sure there are at lea·}st a few hundred bytes of free memory before you › start. To be safe, reduce RMAX to 100 while making code changes, thenž} › increase it to just below the (new) constraint. › › Both RMAX and XMX are found on line 100. Use the BASIC editor¹} feature to › make any desired changes, then RUN the modified program. If the title › screen shows zero free memory,º} or if you get an error message from BASIC › (probably ERROR 2), you have violated the constraint and will have to › »}reduce RMAX or XMX. › › WARNING: If you generate a data base with a large number of records, and › later reduce RMAXŒ}, you may not be able to access all the records in your › data base. INFO MINDER acts as though it reached end-of-file iœ}f it tries › to read more than RMAX records, and IT DOES NOT GIVE YOU A WARNING › MESSAGE. Hey, I'm trying to save mŸ}emory again. › › › 3.2 Setting Up for Your Printer › › INFO MINDER has a unique feature: it automatically sets the p¿}rinter to › 132 column mode if the width of a report requires it, and sets it back to › 80 column mode when the reporÀ}t is finished. However, in order to do this › it needs to know the control codes to send to the printer to change › Á}modes. ›› 11›››››››››INFO MINDER Version 1.0›› › In order to save memory, the codes are "hardÂ}-coded" rather than read from › a printer driver file. If you have a Star Gemini 10X printer, you are › all set; if Ã}not, you need to change the printer control codes as part of › the installation process. The lines to change are 5470 anÄ}d 5490, which › set the printer to 132 column mode and 80 column mode, respectively. › Look up the required codes in Å}your printer manual, and modify the LPRINT › statements accordingly. Note that CHR$(27) is the ESCape character, › wÆ}hich begins most printer control sequences. › › › 3.3 Custom Reports › › INFO MINDER does not include a report writerÇ} utility for producing custom › reports. The built-in report generator prints records one line per › record, with thÈ}e column headers obtained from the field names. Reports › go only to the printer via the LPRINT statement. › › If yoÉ}u want to generate custom report formats, or generate reports to › disk files, there are several "hooks" provided to makeÊ} this easier. The › third option on the report menu selects "user code". In order to use › this option, you need toË} write your own report formatter. Subroutine › 8200 is the place-holder for this. › › The following are done for youÌ} before 8200 is called: › › 1. Prompt for output file name › 2. Open output file › 3. Prompt for report headerÍ} string (HD1$) › 4. Reopen the data base › 5. Loop through the data base reading records and calling 8200. › › Î}Given these preconditions, the work you have left is to unpack the record › from the input buffer, REC$ (see format belowÏ}), produce the output lines › you want, and write them to the output file, #OUF, using PRINT #OUF... › statements. TÐ}ake a look at 8500 and 8600 for an example of how to do it. › › › 3.4 Data File Format and File Utilities › › A key gÑ}oal of INFO MINDER is to provide a data base file format that you › can process with any text editor or with simple progrÒ}ams. INFO MINDER › data base files are standard Atari DOS text files with a fixed format as › follows: › › Line Ó}1 - "INFO MINDER FILE" › › Line 2 - n,FIELDS (n is the number of fields) › › Lines 3 to 2+n - m,s (m=size of field; sÔ}=field name, padded with blanks › to 8 characters) › › Lines 3+n etc. - data records: › ›› Õ} 12›››››››››INFO MINDER Version 1.0›› Col 1 - Record status: "A" for active, "D" for deleted › › Col 2 tÖ}o 1+m1 - Field 1, Field 2, etc. ›››››››››››››››››››››››››››››››››››››››››››››››››››››› 13››››››››×}INFO MINDER Version 1.0›› › › 4.0 PROGRAMMER GUIDE › › If the customizing options described above are still not enougØ}h to meet › your needs, here is a roadmap that will help you find the places in the › program you should look at to tÙ}ry more ambitious modifications. This › "map" consists of the subroutine call tree, abstracts of each subroutine › iÚ}n numerical order, descriptions of key variables, and finally a few › words about some programming tricks used. › › › Û} 4.1 Call Tree › › This section shows which subroutines call which others. Descriptions of › each subroutine are in Ü}the following section (4.2). Every subroutine › starts with a line number of the form "xx00" and ends with "xx99". The Ý}› "xx00" line is always a REM statement. (If you really want to squeeze › out a few extra bytes of memory for indexiÞ}ng a large data base, you can › delete the REM statements and renumber the first statement following each › to "xx00"ß}.) › › In the following call tree listing, the symbol "*" means that the › numbered subroutine is a "leaf" of the treà}e, i.e. it does not call any › other subroutine. › › Routines numbered 8700 and higher are low-level utility routinesá}. These › not expanded in the tree below, but are found listed together at the end. › › Routines whose descriptions â}are in upper case produce a new screen with › the corresponding description in the box at the top of the screen. › › ã}9800 - Initialize program › -- 8000 - Title screen › -- 9100* › 9900 - Main › -- 7000 - OPEN DATABASE › ä} -- 9500* - Draw box around S$ › -- 6400* - Enter filename › -- 4500 - Read data base › -- 9500*å} › -- 7300 - Read header › -- 9600 › -- 7900* - Append error number › -- 7500 -æ} DEFINE INDEX › -- 9500 › -- 9600 › -- 9300 › -- 4600 - Read a record › ç} -- 7900* - Append error number › -- 9600 › -- 4700 - Pack record to index › -- 260è}0* - Pack pointers › -- 9100 ›› 14›››››››››INFO MINDER Version 1.0›› -- 7100 - Creaé}te new database file › -- 7400 - DEFINE FIELDS › -- 9500 › -- 4100* - Mark data fields ›ê} -- 2000 - Data screen (See below) › -- 4300* - Pack screen to record › -- 9500 › ë} -- 7200 - Write header › -- 7900* - Append error number › -- 9600 › -- 7900* - Appenì}d error number › -- 9600 › -- 7900* - Append error number › -- 9600 › -- 6000 - Main menu › í} -- 9500 › -- 6900* - Instructions on screen: Use OPTION key... › -- 6200* - Highlight line Y › -- 870î}0 › -- 8900 › (main menu:) › -- 5000 - ADD AN ENTRY TO DATABASE › -- 9600 › -- 40ï}00* - Set up entry/display screen › -- 4100* - Mark data fields › -- 2000 - Data screen (See below) › ð} -- 9300 › -- 5700* - Set file mode to append › -- 4300* - Pack screen to record › -- 47ñ}00 - Pack record to index › -- 2600* - Pack pointers › -- 4200 - Write a record › -- 79ò}00* - Append error number › -- 9600 › -- 5100 - CHECK/CHANGE/DELETE ENTRY › -- 9500 › ó} -- 9600 › -- 5900 - Get a record › -- 2900 - ENTER KEY TO SEARCH FOR › -- 9500 › ô} -- 8800 › -- 5600* - Set file mode to update › -- 2700* - Unpack pointers › õ} -- 4600 - Read a record › -- 7900* - Append error number › -- 9600 › -- 9500 ›ö} -- 4000* - Set up entry/display screen › -- 4100* - Mark data fields › -- 4400* - Unp÷}ack record to screen › -- 2000 - Data screen (See below) › -- 8800 › -- 9300 › ø} -- 4300* - Pack screen to record ›› 15›››››››››INFO MINDER Version 1.0›› -- 4700 -ù} Pack record to index › -- 2600* - Pack pointers › -- 4200 - Write a record › -- 7900* -ú} Append error number › -- 9600 › -- 9400 › -- 5300 - Create index › -- 7500 - DEFINEû} INDEX › -- 9500 › -- 9600 › -- 7600 - Read DB to new index › -- 5600* - Seü}t file mode to update › -- 4500 - Read data base › -- 9500* › -- 7300 - Read heý}ader › -- 9600 › -- 7900* - Append error number › -- 7500 - DEFINE INDEþ}X › -- 9500 › -- 9600 › -- 9300 › -- 4600 - Read a recoÿ}rd › -- 7900* - Append error number › -- 9600 › -- 4700 - Pack record t}o index › -- 2600* - Pack pointers › -- 9100 › -- 1100 › -- 9300 › } -- 1100 - Sort index › -- 9300 › -- 5400 - REPORT DATABASE CONTENTS › -- 9500 › -- 9}600 › -- 8100 - SELECT REPORT › -- 9500 › -- 6900* - Instructions on screen: Use OPTION }key... › -- 6200* - Highlight line Y › -- 8700 › -- 8900 › -- 9400 › } -- 6500 - OPEN OUTPUT FILE › -- 9500 › -- 6400* - Enter filename › }-- 7900* - Append error number › -- 9600 › -- 8500* - Set up report headers › -- 5600* - }Set file mode to update › -- 4000* - Set up entry/display screen › -- 2800 - Display record R › } -- 2700* - Unpack pointers › -- 4600 - Read a record › -- 7900* - Append error number › } -- 9600 ›› 16›››››››››INFO MINDER Version 1.0›› -- 4800 - Record to sc }reen › -- 4400* - Unpack record to screen › -- 9100 › -- 8600* - Print report li }ne › -- 8200 - (Reserved for user-defined report) › -- 9600 › -- 6300 - COPY LIVE RECORD }S TO NEW FILE › -- 9500 › -- 9600 › -- 8700 › -- 6500 - OPEN OUTPUT FILE ›  } -- 9500 › -- 6400* - Enter filename › -- 7900* - Append error number › -- 9600 ›  } -- 7200 - Write header › -- 7900* - Append error number › -- 9600 › -- 9500 › } -- 2700 › -- 4600 - Read a record › -- 7900* - Append error number › -- 9600 › } -- 9100 › -- 5500 - Close and exit › -- 9500 › -- 9000 › › 2000 - Input/modify data scr}een › -- 1200* - Position cursor › -- 5200 - (Un)delete › -- 9200 › -- 3900 - Repeat field from previous} record › -- 3500 - Move cursor to next field › -- 3700 - Fix size field › -- 9000 › } -- 1200* - Position cursor › -- 1200* - Position cursor › -- 3000 - Cursor up › -- 9000 › -- 3700 }- Fix size field › -- 9000 › -- 3400* - Find first field on line Y › -- 1200* - Position cursor › } -- 3100 - Cursor down › -- 3700 - Fix size field › -- 9000 › -- 1200* - Position cursor › --} 3400* - Find first field on line Y › -- 3200 - Cursor left › -- 1200* - Position cursor › -- 3700 - Fix s}ize field › -- 9000 › -- 9000 ›› 17›››››››››INFO MINDER Version 1.0›› -- 330}0 - Cursor right › -- 1200* - Position cursor › -- 3700 - Fix size field › -- 9000 › -- 3100 }› -- 9000 › › › The following are "utility" routines, called from many other places. › › 8700* - Delay loop › › } 8800 - REQUESTED RECORD NOT IN DATABASE › -- 9600 › › 8900* - Buzz › › 9000 - Error: flash red border/sound} › -- 8700* - Delay loop › › 9100* - Wait for RETURN › › 9200 - Notice: flash blue border/beep › -- 8700* -} Delay loop › › 9300* - Clear bottom of screen › › 9400 - Notice message › -- 9700 - Status message › -- }9300* - Clear bottom of screen › -- 9200 - Notice flash › -- 8700* - Delay loop › -- 9100 - Wait for RETURN › }› 9500* - Draw box around S$ › › 9600 - Error message › -- 9700 - Status message › -- 9300* - Clear botto}m of screen › -- 9000 - Error flash › -- 8700* - Delay loop › -- 9100* - Wait for RETURN › › 9700 - Statu}s message › -- 9300* - Clear bottom of screen › › › 4.2 Subroutine Descriptions › › This section provides a bri }ef description of each subroutine, › concentrating on those which you may want to modify or which contain › something!} of special interest. › › 1100 Sort the index in memory - The sort algorithm used here is the ›› "} 18›››››››››INFO MINDER Version 1.0›› "Shell" sort, which is usually faster than the simple bubble sort for a › la#}rge number of records, and uses no extra memory. To save sorting time, › the video display is reduced to two lines while$} sorting (line 1117). The › custom display list required for this is set up by lines 9890-9898 in › "Page 6" memory,%} so you should avoid using any Page 6 utilities with INFO › MINDER, or else delete lines 1117, 1120, and 9890-9898. Line&} 1120 › restores the BASIC Graphics 0 display list. › › 1200 Position Cursor - Writes a space at the previous cursor '}position, › saved in OLDX and OLDY, and rewrites the cursor at X,Y. › › 2000 Input/modify screen - This routine handl(}es keyboard input when a › data entry screen is displayed. It GETs a character from the keyboard › (K:) and takes th)}e corresponding action. For cursor keys, recognized › control keys, etc., it calls the appropriate action subroutine, if*} any, › sets the cursor, and sets control variables OK and/or NXT. At return, OK › causes the current record to be w+}ritten, while NXT<>0 causes the next or › previous record to be selected. › › 2600 Pack Pointers - This routine combi,}nes the two record pointers from › the BASIC NOTE/POINT commands into a single word to save storage. It › uses the c-}onstant SHIFTP to multiply one pointer to make room for the › other. › › 2700 Unpack Pointers - This routine unpacks .}the pointers packed by 2600. › › 2800 Display Record R - Read the record indexed at position R and output › it accord/}ing to the type of report selected. › › 2900 Enter Search Key - Prompt for a key value to position the data base › fo0}r a record operation. › › 3000 Cursor Up › 3100 Cursor Down › 3200 Cursor Left › 3300 Cursor Right - This gro1}up of routines moves the cursor on the data › entry screen, accounting for the location of data entry fields. › › 3402}0 Find First Field on Line Y - Find the field number (F) and the X › coordinate of the first field on the line containing3} the cursor (Y). › › 3500 Cursor to Next Field - Move the cursor to the beginning of the next › field. › › 3700 F4}ix Size Field - This is a rather complex routine (translation: › don't mess) which checks the size values entered when de5}fining fields in › the data base (i.e., when FA=0). It also takes care of leading and › trailing spaces, keeps a run6}ning tally of the size of the record defined, › and issues an error message if you try to define a field or a record that7} › is too big. › › 3900 Repeat Field - In response to CTRL-R, this routine copies into the › field containing the8} cursor the value from the corresponding field in the › last record read from or written to disk. ›› 9} 19›››››››››INFO MINDER Version 1.0›› › 4000 Set Up Entry/Display Screen - Display the field names, highlighted › :} data entry fields, action boxes, etc., for the data entry/display screen. › › 4100 Mark Data Fields - Display the rev;}erse highlight for each input › field on a data entry screen. › › 4200 Write a Record - Write the current record (REC<}$) to the data base › file, and save the record for possible subsequent use by 3900. › › 4300 Pack Screen to Record -=} Pack the values in the data fields on the › input screen into the record string, REC$, removing the inverse video › >}bit. Also play some sounds to indicate progress, as this is not a real › fast process. › › 4400 Unpack Record to Scr?}een - Opposite of 4300, except no sound is › needed because progress is visible on the screen. Also customizes one › @} action box to "Delete" if the record is active and "Undelete" if deleted. › › 4500 Read Data Base - This routine reads tA}he entire data base to set up › the memory index. It prompts for whether to accept deleted records › (unless the datB}a base is new), offers the opportunity to define an index, › reads records until end of file or RMAX records are read, diC}splays record › counts on the screen, and builds the index in memory. › › 4600 Save a copy of the previous record forD} possible later use by 3900. › Read the record pointed to by the current pointer pair (P1,P2) into REC$. › › 4700 PacE}k the record pointers and any parts of the record defined as › parts of the index into arrays in memory. If no index hasF} been defined › (NDX=0), only the pointers are packed. › › 4800 Unpack the record to the screen then pause for a RETUG}RN. › › 5000 Add an Entry to the Data Base - Set up the data entry screen. When › the fields are filled in and the SH}ave option is executed, pack the screen › to record format, add the record to the index in memory, and write it to › I}the data base. › › 5100 Check/Change/Delete an Entry - Prompt and input the index value for › the desired record, reaJ}d and display the record on the data entry screen, › accept any changes and wait for the Save option, then rewrite the reK}cord › and update the index. › › 5200 Delete or Undelete a Record - Invert the status of the record › (active <->L} deleted). › › 5300 Create an Index - Define the fields to include in the index, then › read the data base and createM} the index. › › 5400 Report Data Base Contents - If the data base is empty, issue an › error message and return. OthN}erwise: select the type of report desired. › If it is a screen report, then set up the display screen; otherwise set › O} up report headers. If it is a print report and the report line length is ›› 20›››››››››INFO P}MINDER Version 1.0›› more than 80 characters, then send a control string to set the printer to › 132 column mode. FoQ}r each record in the data base, call 2800 to generate › the report record. If CTRL-C is pressed, quit the loop. If the R}printer › was set to 132 columns, reset it to 80. › › 5500 Close Data Base and Exit - Close the data base file and prS}ompt for › restart or exit to DOS. › › 5600 Set File Mode to Update - If the data base file is not already in › uT}pdate mode, close it and reopen in update mode. › › 5700 Set File Mode to Append - See 5600 above. › › 5900 Get a RecU}ord - Call 2900 to prompt for the record key, find the › first record with a larger or equal key, set up the screen, and V}read and › unpack the record to the screen. › › 6000 Main Menu - Display the main function menu, process the inputs, W}and › call the routine to process the requested action. (This routine › continues through line 6199.) › › 6200 HX}ilight Line Y - Place the cursor to highlight the selected menu › line. › › 6300 Copy Live Records to New File - PromY}pt for and open an output file, › write the data base header, copy all undeleted records, then close the › output filZ}e. › › 6400 Prompt for File Name - Display a prompt for a filename and set the › shift lock to upper case. › › 65[}00 Open Output File - Call 6400 to prompt, close the output file (in › case it was open), get the file name, reset the sh\}ift lock, and open the › file for output. Return OK = true if successful. › › 6900 Instructions to Screen - Display ]}instructions for use of OPTION and › START keys for menus. › › 7000 Open Data Base - Call 6400 to prompt for the data^} base file name, › get the file name and reset the shift lock. Set INNEW=0 to indicate the › data base is an already_}-existing one (not new -- this will be set to 1 if › the open succeeds as an "old" file). Open the file for update › `} (read/rewrite). If the file does not exist, call 7100 to create a new › data base and set INNEW=1 to indicate it is newa}. Call 4500 to read the › data base. › › 7100 Create Data Base File - Call 7400 to define the fields in the data › b} base. Close and reopen the data base file for output. Call 7200 to › write the header information. Close the data bc}ase. Set INNEW=1 to › indicate it is new. › › 7200 Write Header - Write header information to the data base file (sed}e › file format description above). Return OK to indicate success or › failure. ›› 21›››e}››››››INFO MINDER Version 1.0›› › 7300 Read Header - Read the data base header information to set up the › field defif}nition tables. › › 7400 Define Fields - Set up a screen for defining data base fields. Call › 2000 to input and editg} the field names and sizes using the data entry and › editing routines. Call 4300 to pack the screen into REC$. Pick thh}e › field names and sizes out of REC$ to set up the corresponding tables. › Calculate the position table from the sizi}e table. Copy the field sizes › to the field width table used to drive the screen displays. (This is › another placj}e that would be good to stay away from if you get the urge to › modify.) › › 7500 Define Index - Display the field nuk}mbers and names. Prompt for and › input the numbers of the fields to be used in the index and the number of › characl}ters to be used from each field. Display a running tally of the › total size of the index, and complain if anything is om}ut of range. › › 7600 Read Data Base to Build Index - Call 5600 to open the data base file › in update mode. Call 45n}00 to read the data base. › › 7900 Append BASIC Error Number - PEEK the BASIC error number and append › it to the endo} of the error message ER$. › › 8000 Display Title Screen › › 8100 Display Report Selection Menu › › 8200 Place-hop}lder for user report - This is a dummy routine which is › intended to be written by the user to create custom reports. Sq}ee the › customizing section above. › › 8500 Set Up Report Headers - Prompt for and accept a line of text for the › r} first line of the report header. Construct column headings for the › second header line from the data base field names}s, padding each one to a › minimum width of eight characters. › › 8600 Print Report Line - Set up the report line frot}m REC$. Put a "D" in › col. 1 for deleted records. Put each field in the next available space › (padding to 8 charau}cters if necessary), plus one blank between fields. › Count lines; if near the bottom of the page, space to the next pagv}e and › print the two header lines. Print the record. › › 8700 Delay Loop - Pause for a few seconds. › › 8800 Sew}t error message: record not in data base. › › 8900 Buzz - Make a short buzz sound. › › 9000 Error - Flash a red bordx}er and a sound indicating an error. › › 9100 Wait for RETURN - Prompt and wait for a RETURN. › › 9200 Notice - Flash y}a green border and a sound indicating a non-error ›› 22›››››››››INFO MINDER Version 1.0›› conz}dition. › › 9300 Clear Bottom of Screen - Clear screen lines 21-23. › › 9400 Notice Message - Put a non-error message{} (ER$) on the bottom of the › screen, using 9700, 9200, and 9100. › › 9500 Draw Box Around S$ - Clear the screen and |}write the string S$, › centered, with a box around it. › › 9600 Error Message - Put an error message (ER$) on the bot}}tom of the › screen, using 9700, 9000, and 9100. › › 9700 Status Message - Put an information message (no flash or so~}und) on › the bottom of the screen. › › 9800 Initialization - Assign values to all constants. › › 9900 Main - Cal}l 7000 to get the data base open and/or defined. Call › 6000 to display the main menu and process the response. When › €} exit/restart is selected and 6000 returns, see if restart was selected › (MORE>0) -- if so, loop back to 9000; other}wise exit to BASIC and we're › DONE! › › There are also a couple of DATA statements living here, which are used by › ‚} 9800. 9950 contains sound values used for progress tones. 9960 contains › X coordinates for the five action boxes oƒ}n the data entry screen, which › must be coordinated with the print statement in 4040. › › › 4.3 Key Variables › › „} This section describes some of the dynamic variables and arrays which you › may need to understand to make modification…}s. Key single "variables" › which are actually used as constants are described elsewhere. › › › 4.3.1 Arrays › › †} FX, FY, and FW hold the X and Y coordinates and width, respectively, for › each field displayed on the screen. Index va‡}lues 0 to 2*FMX are used for › the data base DEFINE FIELDS screen; index values 2*FMX+1 to 3*FMX+5 are › used for thˆ}e data entry screen. › › FSIZ contains the widths of the fields (redundant with FW(2*FMX+6...)); › FPOS contains the ‰}field position offsets within REC$. These should be › used to pick fields out of REC$ for producing custom reports. IndŠ}exes › for data fields run from 1 to NFD, with index 0 referring to the status › character in position 1. › › FND‹}X and WNDX contain the field numbers and substring widths in each › field used for building the index. › › P containsŒ} a packed pair of NOTE/POINT record pointers for each data base ›› 23›››››››››INFO MINDER Version} 1.0›› record (see 2600/2700). › › › 4.3.2 Strings › › ER$ contains the text of a message (usually an error messaŽ}ge) to be › displayed. › › KEY$ contains the key value for the current record. › › REC$ contains a data base reco}rd in external disk format. OLDREC$ › contains a copy of the last record read from or written to disk, for › possibl}e subsequent use by the CTRL-R command. All custom reports should › be generated from REC$. › › S$ contains a string‘} to be displayed in the title box at the top of the › screen. SV$ contains a copy of S$ to be restored later in case scr’}eens › are "stacked". › › XN$ contains up to RMAX index values, each XMX characters long, one for › each record. “} The indexing corresponds to the record pointers in array P. › › › 4.3.3 Scalars › › DA is set to one if deleted reco”}rds are to be accessed; zero otherwise. › › F is the number of the field containing the cursor or otherwise being › •}processed. › › FA and FB are the start and end field numbers for the current screen. FA › is zero when processing th–}e DEFINE FIELDS screen, and is 2*FMX+1 when › processing the data entry screen. This is a key context test in several › —} places. › › NFD is the number of fields defined in the current data base. › › NR is the number of records defined˜} in the current data base. › › R is the current record number, as an index into the record pointer › table. › › X™} and Y contain the screen location for the cursor on data entry screens. › › › 4.3.4 Special Pointers › › NNX, NPR, Nš}SV, NDE, and NCA are field numbers for the action boxes (Next, › Prev, Save, Delete, Cancel) on the data entry screen. W›}hile they are › basically constants, their values are computed from FMX at › initialization. Several other offsets aœ}nd limits are computed from › these, so do not modify them. › › ›› 24›››››››››INFO MINDER Ver}sion 1.0›› 4.4 Tricks › › A key design goal was to make this program as straightforward as › possible, to permit ž}maximum ease of user modification. However, an › equally important but conflicting goal was to provide as much memory asŸ} › possible to support the largest possible data bases. As a result, there › are only a few programming "tricks" use }d, and those that are used are › primarily for the purpose of saving memory. › › The most significant is the use of n¡}amed constants. Using a "variable" › such as "ONE" instead of the explicit constant "1" saves several bytes › for ev¢}ery occurrence, since explicit constants are stored in 6-byte › floating point format. This becomes a big win when a con£}stant is used › often enough so the savings overcome the memory cost of defining the › variable. › › Another memo€}ry saving trick is the packing of pointers. The BASIC NOTE › and POINT commands use a pair of integer pointers to addres¥}s a record on › disk. Subroutines 2600 and 2700 pack/unpack this pair of integers into a › single (6-byte) floating-Š}point variable in array P, using the constant › SHIFTP as a multiplier. The value of 10000 used for SHIFTP will support §}› file systems using up to 9999 sectors and 9999 bytes per sector -- far › more than supported by any DOS I know of. š} You can change SHIFTP if you › need to make room for really big hard disk partitions. ››››››››››››››››››››››››››››››››› ©} 25››››››››INFO MINDER Version 1.0›› › › 5.0 EPILOGUE › › I have tried to explain as much ª}about this program as I could fit on a › disk with the program itself. Of course, there is a tradeoff between › sayi«}ng too little and saying too much so no one can find what they want › in an ocean of information. No doubt there will be¬} something you would › like to know that is not covered explicitly here. Please take the time › to read through this­} material more than once, and take a look at the › source code, before giving up. If you still can't figure out how to ›®} accomplish what you want to do, you can write to the author as indicated › in section 1. › › On another note, if¯} you invent some really wonderful enhancement to this › program, please share it with the rest of the PD world. If your °}› contribution is so extensive that you need to do a major revision to the › doc file (this file), write to me (inclu±}ding a stamped, self-addressed › disk mailer and a blank disk), and I'll send the source for the doc file › in RUNOFF²} format. You will need a copy of The Print Tool, formerly › available from Antic Software, to process the text for the D³}OC file. › Alternatively, you can upload, use almost any version of RUNOFF on a VAX › or PDP-11 (you DO have one of tŽ}hose handy, don't you?), and download the › result. This is called dedication. Well, what do you expect for free? › µ} ›››››››››››››››››››››››››››››››› 26›››››››› › Well, what do you expect for free? › S› NOTE: There is no DUP.SYS on this› **** disk due to lack of space!!››› =======================› INFO MINDER Vers·}ion 1.0› by James W. Brown› =======================››› INSTALLATION NOTES &› LAST-MINUTE BUG REPORT››ž}› There are three main files on this› diskette:›› README.TXT -you're reading it›› INFOMIND.DOC -DOCumentation for› ¹} the Info Minder› database program›› INFOMIND.BAS -the program itself››› Please READ the documentation.› Uº}se DOS Copy to copy the DOC file› to a printer:›› D1:INFOMIND.DOC,P:›› You will want to refer to it often› as you lea»}rn to use the program.›› To start, simply prepare a› formated work disk to hold your› data, and use BASIC to run the› source Œ}file:›› RUN"D1:INFOMIND.BAS"›› And you're ready to go! ›››-----------------------------------›Known problems since theœ} program's documentation was written:››"If you do not opt to accept›deleted records at startup, and›then later delete recordsŸ} during›the session, when you display›records using the Check/Change›screen, you will not be able to›move in the reverse "Pre¿}v"›direction past a deleted record. ›The work-around is either to leave›and re-enter the Check/Change›screen with a lower indÀ}ex, or to›re-sort the index to move the›deleted records out of the way."››(This file will, with any luck, be›updated occasionÁ}ally when bugs are›reported or fixed.)››deleted records out of the way."››(This file will, with any luck, be›updated occasion'