IMD 1.16: 29/05/2007 12:03:24 FOGCPM.012 --FOGCPM012AREACAL CMDAREACAL DBFAREACAL DOC AREACG CMD GRAFGEN CMD DBGRAF DOC DRAWBOX CMD DTUNE23 COM !"DTUNE23 COMz#$%&'()*+,-./012-11-00 85 DTUNE23 DOC 3456MEMTIP DOC789PRINT MEM:;<SCREEN MEM=>?SUPERBAKCMD@ABDBFTOTXTCMD CDEFDBASM ASMGHIJKLMNOPQRSTUVDBASM ASMW-CPM012 DOC DBCLEAN COMpXYZ[\]^_`abcdeDBCLEAN DOCfDBCLINICBASghijklmnopqrstuvDBCLINICBASwxyzLIBRARY CMD{LIBRARY DOC|}~LIBRARY DOC)LIBADD CMDLIBED2 CMDLIBEDIT CMDLIBFIND CMDLREPORTSCMDLIBRARY DBF$KEYWORDSDBFAUTHORS NDXDATES NDXKEYWORDSNDXZIPS NDXThis is the disk name. USE AREACAL ERASE SET TALK OFF ? ? ? " NAME OF FILE AREACAL.CMD BY J. GAVLAK " ? ACCEPT 'DO YOU WANT A PRINTOUT ? ANS. YES OR. RET ' TO PSTATUS ERASE IF PSTATUS = "YES" SET FORMAT TO PRINT SET PRINT ON SET EJECT OFF ENDIF STORE 4 TO N @ 2,10 SAY "AREA BY COODINATES" @ N,10 SAY "POINT" @ N,22 SAY "X-CORD" @ N,32 SAY "Y-CORD" STORE N+1 TO N @ N,10 SAY POINT @ N,20 SAY XCORD @ N,30 SAY YCORD * SECT 1: STORES X1 & Y1 STORE XCORD TO MXCORD1 STORE YCORD TO MYCORD1 * SECT 2: STORES X2 & Y2 ALSO X1*Y2 & Y1*X2 SKIP STORE N+1 TO N @ N,10 SAY POINT @ N,20 SAY XCORD @ N,30 SAY YCORD STORE XCORD TO MXCORD2 STORE YCORD TO MYCORD2 STORE MXCORD1*YCORD TO SUMXY STORE MYCORD1*XCORD TO SUMYX SKIP * SECT3: STORES X3 & Y3 ON 1ST. PASS DO WHILE .NOT. EOF STORE N+1 TO N @ N,10 SAY POINT @ N,20 SAY XCORD @ N,30 SAY YCORD STORE XCORD TO MXCORDN STORE YCORD TO MYCORDN * SECT 4: 1ST. PASS BACK TO PT 2, STORES X2*Y3 & Y2*X3 SKIP-1 STORE SUMXY + XCORD*MYCORDN TO SUMXY STORE SUMYX + YCORD*MXCORDN TO SUMYX SKIP 2 * SECT 5: HAS SKIPPED TO NEXT NEW PT. OR EOF ENDDO GOES TO NEXT NEW PT. OR EOF * SECT 6: HAS REACHED EOF. STORE N+2 TO N STORE SUMXY + MXCORDN*MYCORD1 TO SUMXY STORE SUMYX + MYCORDN*MXCORD1 TO SUMYX STORE (INT(SUMXY*100-SUMYX*100))/200.00 TO AREA @ N,10 SAY " AREA = " @ N,18 SAY AREA @ N,40 SAY CHR(13) SET PRINT OFF SET FORMAT TO SCREEN RETURN E AREACAL ERASE SET TALK OFF ? ? ? " NAME OF FILE AREACAL.CMD BY J. GAVLAK " ? ACCEPT 'DO YOU WANT A PRINTOUT ? ANS. YES OR. RET ' TO PSTATUS ERASE IF PSTATUS = "YES" SET FORMAT TO PRINT SET PRINT ON SET EJECT OFF ENDIF STORE 4 TO N @ 2,10 SAY "AREA BY COODINATES" @ N,10 SAY "POINT" @ N,22 SAY "X-CORD" @ N,32 SAY "Y-CORD" STORE N+1 TO N @ N,10 SAY POINT @ N,20 SAY XCORD @ N,30 SAY YCORD * SECT 1: STORES X1 & Y1 STORE XCORD TO MXCORD1 STORE YCORD TO MYCORD1  TPOINTClXCORDNlYCORDNl 1 0.00 0.00 2 20.00 0.00 3 20.00 25.00 4 10.00 25.00 5 10.00 25.00    ) )                  AREA COMPUTATIONS BY JACK GAVLAK A USE O DBASEII AN ON THA APPRECIATE IT MAN APPLCATION I OCCURRE T M THA MIGH B ABL T CONVER PROGRA THA AN CO-WORKE HA WRITTE FO M٠ HP-41C IΠ RP THA WOUL CALCULAT TH ENCLOSE ARE O SERIE O POINT KNOWIN ONL THEI COORDINATE USIN TH X- AXIӠ FO REFERENCE. TH RESULT O THI CONVERSIO YIELDE TW FAIRL SHOR CMD FILES AREACA AN AREACG BOT O THES FILE PROCES DAT (TH COORDINATE O TH POINTS AN YIEL THŠ ENCLOSE ARE ANĠ THŠ ENCLOSE ARE PLU THŠ X-CENTEҠ OƠ GRAVIT RESPECTIVELY I ON ONL DESIRE TH ARE US AREACAL FO BOTH THE AREA AND X-CG USE THE AREACG FILE. WHEΠ CREATINǠ THŠ DBƠ FILŠ POINTӠ CAΠ BŠ ADDED INSERTED OҠ CORRECTEĠ WITȠ EASŠ USINǠ THŠ APPROPRIAT DBASEI COMMANDS THER I N LIMI T TH NUMBE O POINT USED REMEMBEҠ T STAR A AN POIN YO DESIR ANĠ NUMBE THŠ POINTӠ FRO͠ TϠ Π GOINǠ IΠ COUNTEҠ CLOCKWIS DIRECTION ANSWEҠ TH QUESTIO 'D YO WAN PRINTOUԠ ? USINǠ CAPITALӠ FO YE I TH ANSWE I YES IƠ NEGATIV COORDINATEӠ AR USE PLAC MINU SIG I TH PROPEҠ PLAC IN THE DBF.  O THI CONVERSIO YIELDE TW FAIRL SHOR CMD FILES AREACA AN AREACG BOT O THES FILE PROCES DAT (TH COORDINATE O TH POINTS AN YIEL THŠ ENCLOSE ARE ANĠ THŠ ENCLOSE ARE PLU THŠ X-CENTEҠ OƠ GRAVIT RESPECTIVELY I ON ONL DESIRE TH ARE US AREACAL FO BOTH THE AREA AND X-CG USE THE AREACG FILE. WHEΠ CREATINǠ THŠ DBƠ FILŠ POINTӠ CAΠ BŠ ADDED INSERTED OҠ CORRECTEĠ WITȠ EASŠ* PROGRAM NAME IS AREACG.CMD * BY JACK GAVLAK JUNE 12, 1984 USE AREACAL ERASE ? 'PROGRAM NAME IS AREACG.CMD BY JACK GAVLAK' ? ACCEPT 'DO YOU WANT A PRINTOUT ? ANS. YES OR RET.' TO PSTATUS ERASE IF PSTATUS = "YES" SET FORMAT TO PRINT SET PRINT ON SET EJECT OFF ENDIF SET TALK OFF STORE 5 TO N STORE 0 TO COUNT STORE 0 TO SUMAREA STORE 0 TO SUMMONTX @ 2,10 SAY "AREA BY COORDINATES" @ 3,9 SAY "AND CENTER OF GRAVITY" @ N,10 SAY "POINT" @ N,22 SAY "X-CORD" @ N,32 SAY "Y-CORD" STORE N+1 TO N @ N,10 SAY POINT @ N,20 SAY XCORD @ N,30 SAY YCORD * SECT 1: STORES X1 & Y1 STORE XCORD TO MXCORD1 STORE YCORD TO MYCORD1 SKIP * SECT 2: DO WHILE .NOT. EOF STORE N+1 TO N @ N,10 SAY POINT @ N,20 SAY XCORD @ N,30 SAY YCORD STORE XCORD TO MNEXTX STORE YCORD TO MNEXTY STORE MXCORD1*YCORD TO SUMXY STORE MYCORD1*XCORD TO SUMYX SKIP STORE XCORD TO MTIPX STORE YCORD TO MTIPY STORE SUMXY + MNEXTX*YCORD TO SUMXY STORE SUMYX + MNEXTY*XCORD TO SUMYX STORE SUMXY + XCORD*MYCORD1 TO SUMXY STORE SUMYX + YCORD*MXCORD1 TO SUMYX STORE (MXCORD1 + MNEXTX + MTIPX)/3 TO XBARTRI STORE (SUMXY-SUMYX) TO INCAREA STORE SUMAREA + INCAREA TO SUMAREA STORE XBARTRI*INCAREA TO INCMONTX STORE SUMMONTX + INCMONTX TO SUMMONTX SKIP IF EOF STORE N+1 TO N @ N,10 SAY POINT @ N,20 SAY XCORD @ N,30 SAY YCORD STORE N+2 TO N STORE (INT((SUMMONTX/SUMAREA)*100))/100.00 TO XCG STORE (INT(SUMAREA*100))/200.00 TO SUMAREA @ N,10 SAY "AREA = " @ N,18 SAY SUMAREA @ N+1,10 SAY "X-CENTER GRAVITY =" @ N+1,29 SAY XCG @ N+1,35 SAY CHR(13) SET PRINT OFF SET FORMAT TO SCREEN RETURN ENDIF SKIP-1 ENDDO wwvwww ww ww ww ww wwww ww ww wwwwPROGRAM NAME IS AREACG.CMD * BY JACK GAVLAK JUNE 12, 1984 USE AREACAL ERASE SET TALK OFF STORE 5 TO N STORE 0 TO COUNT STORE 0 TO SUMAREA STORE 0 TO SUMMONTX @ 2,10 SAY "AREA BY COORDINATES" @ 3,9 SAY "AND CENTER OF GRAVITY" @ N,10 SAY "POINT" @ N,22 SAY "X-CORD" @ N,32 SAY "Y-CORD" STORE N+1 TO N @ N,10 SAY POINT @ N,20 SAY XCORD @ N,30 SAYCORD1 TO SUMXY STORE SUMYX + YCORD*MXCORD1 TO SUMYX STORE (MXCORD1 + MNEXTX + MTIPX)/3 TO XBARTRI STORE (SUMXY-SUMYX) TO INCAREA STORE SUMAREA + INCAREA TO SUMAREA STORE XBARTRI*INCAREA TO INCMONTX STORE SUMMONTX + INCMONTX TO SUMMONTX SKIP IF EOF STORE N+1 TO N @ N,10 SAY POINT @ N,20 SAY XCORD @ N,30 SAY YCORD STORE N+2 TO N STORE (INT((SUMMONTX/SUMAREA)*100))/100.00 TO XCG STORE (INT(SUMAREA*100))/200.00 TO SUMAREA @ N,10 SAY "AREA = " @ N,18 SAY SUMAREA @ N+1,1* GRAFGEN.CMD * COPYRIGHT (c) 1983 BY DAVID A. BASSKIN * FREE UNLIMITED USE GRANTED - NO RESALE OR * COMMERCIAL USE PERMITTED - SEE COPYRIGHT NOTE * IN TEXT FILE DBGRAF.DOC * SET COLON OFF SET INTENSITY OFF SET TALK OFF ERASE STORE 0 TO X DO WHILE X<256 @ 4,0 SAY 'THIS IS CHARACTER NUMBER' @ 4,25 SAY X USING '##' POKE 62000,X STORE 1 TO Y DO WHILE Y<51 STORE Y+1 TO Y ENDDO STORE X+1 TO X ENDDO RELEASE X,Y RETURN  DBGRAF - Graphics generator for DBASE II on the Osborne 1 by David A. Basskin 42 Charles St. E., Toronto, Ontario, Canada M4Y 1T5 ---------------------------------------------------- Copyright (c) 1983 by David A. Basskin Unlimite fre us an reproductio o thi tex an th program associate wit i ar hereb grante t al user provide tha n charg o lev i mad fo th use copyin o operatio thereof Th righ t sel thi tex o an o th program associate therewit i expressl no grante t an person firm or corporation. ---------------------------------------------------- I you'r on o th man wh receive fre cop o dBas I wit you Osborne yo ma hav wondere ho t g abou usin th graphic capabilit o you computer featur no documente i th dBas maua i th POK command whic doe th sam jo an work th sam wa a tha comman i BASIC Al yo d i i issu fro withi dBas comman fil th command POKE , an tha characte wil appea o th screen Th location fo th visibl scree o th 5 characte scree o th unmodifie Osborn (u t re 1.4 are: Upper left: 61440 Upper right: 61491 Lower left: 64384 Lower right: 64435 Yo ca hi an locatio o th 2 b 5 scree ver simpl b rememberin tha althoug th scree appear t b 5 character wide i i actuall 12 character i width Thu th leftmos locatio o th secon visibl lin woul b 6156 (i.e. 6144 128) d no hav a Osborn wit th scree modificatio added s ɠ can' sa whethe th addressin work i precisel th sam fashion althoug th principl woul b th same An Osborn user wit th scree upgrad wh ca advise me on this will be appreciated. Now th questio o characters Yo ca us th complet characte set althoug POKEin anythin bu th graphic character i reall wast o tim i dBase give th powe o th " x, SAY comman wher an ar horizonta an vertica scree coordinate respectively Ho ca yo fin ou whic ar th characters I'v provide simpl characte generator CHARGEN.CM whic i read t ru o you Osborn unde dBase Yo ca pu th displa o hol i th usua manner b typin control-S You'l soo fin tha th firs 3 character - th graphic character - ar th onl one you'r intereste i fo thes purposes bu I'v se i t generat th whol characte se i yo haven' poke int th innard o th Osborn enoug t se the yet. Finally hav provide scree progra tha draw bo withi th 2 b 5 frame DRAWBOX.CMD I yo examin th cod fo thi you'l ge th ide o ho yo ca us variabl nam fo th locatio paramete o th POK comman t addres scree locations in sequence. Wil thi mak you program mor effective Wil i hel brin peace Lowe th pric o bread Fee th hungry Wh knows Al ca sa i hav fu wit it ɠ hop i help yo lear somethin abou th Osborne and dBase II. An suggestions comments idea o reactio woul b ver muc appreciated messag ca b lef fo m o thi syste (RCP #1 Toronto o sen t th abov address M hom numbe i 368-1085 i yo want to call me. David A. Basskin July 13, 1983 ---------------------------------------------------- Osborne is a trademark of the Osborne Computer Corp. dBase II is a trademark of Ashton-Tate Inc. ----------------------------------------------------ha draw bo withi th 2 b 5 frame DRAWBOX.CMD I yo examin th cod fo thi you'l ge th ide o ho yo c* DRAWBOX.CMD * COPYRIGHT (c) 1983 BY DAVID A. BASSKIN * FREE UNLIMITED USE GRANTED - NO RESALE OR * COMMERCIAL USE PERMITTED - SEE COPYRIGHT NOTE * IN TEXT FILE DBGRAF.DOC * SET INTENSITY OFF SET TALK OFF * SET THE SCREEN BOUNDARIES STORE 61440 TO UL,START STORE UL+51 TO UR STORE UL+(128*23) TO BL STORE BL+51 TO BR,BRV STORE UR+128 TO URV STORE UL+128 TO ULV STORE BL-128 TO BLV ERASE * DRAW THE BOX * DRAW THE TOP LINE DO WHILE START<=UR POKE START,24 STORE START+1 TO START ENDDO * DRAW THE RIGHT SIDE LINE DO WHILE URV<=BR POKE URV,4 STORE URV+128 TO URV ENDDO * DRAW THE BOTTOM LINE DO WHILE BRV>=BL POKE BRV,23 STORE BRV-1 TO BRV ENDDO * DRAW THE LEFT SIDE LINE DO WHILE BLV>=(UL+128) POKE BLV,1 STORE BLV-128 TO BLV ENDDO * ONCE THE BOX IS DRAWN, IT CAN BE FILLED @ 2, 2 SAY "TEST LINE NUMBER 1" @ 4, 2 SAY "TEST LINE NUMBER 2" @ 7,12 SAY "TEST LINE NUMBER 3" @ 10,12 SAY "TEST LINE NUMBER 4" @ 16, 6 SAY "FINAL TEST LINE" SET CONSOLE OFF WAIT SET CONSOLE ON  RELEASE START,UL,UR,BL,BR,ULV,URV,BLV,BRV RETURN - SEE COPYRIGHT NOTE * IN TEXT FILE DBGRAF.DOC * SET INTENSITY OFF SET TALK OFF * SET THE SCREEN BOUNDARIES STORE 61440 TO UL,START STORE UL+51 TO UR STORE UL+(128*23) TO BL STORE BL+51 TO BR,BRV STORE UR+128 TO URV STORE UL+128 TO ULV STORE BL-128 TO BLV ERASE * DRAW THE BOX * DRAW THE TOP LINE DO WHILE START<=UR POKE START,24 STORE START+1 TO START ENDDO * DRAW THE RIGHT SIDE LINE DO WHILE URV<=BR POKE URV,4 STORE URV+128 TO URV ENDDO * DRAW THE BOTTOM LINE DO WHILE BRV>=BL POKE BRV,23 STORE BRV-1 TO BRV ENDDO * DRAW THE LEFT SIDE LINE DO WHILE BLV>=(UL+128) POKE BLV,1 STORE BLV-128 TO BLV ENDDO * ONCE THE BOX IS DRAWN, IT CAN BE FILLED @ 2, 2 SAY "TEST LINE NUMBER 1" @ 4, 2 SAY "TEST LINE NUMBER 2" @ 7,12 SAY "TEST LINE NUMBER 3" @ 10,12 SAY "TEST LINE NUMBER 4" @ 16, 6 SAY "FINAL TEST LINE" SET CONSOLE OFF WAIT SET CONSOLE ON ͫCopyright (C) 1984 BORLAND IncATelevideo 912/920/92Pg0= ERT)1(1~7#~=% o&ͦoͦܐԩͣ}!!"8~#(}:$= +*!Z!*B!!:(=2!Z: <2!!!:O::O:!*B! !45(!.+/ 0y0( d!kZ!{Z͈͈o&  :(y ͠|( *"x2y( >28!?"9!!>2 :D]SXN]D [ (!e}̈́A8Q0G: x@!\w# (   yV. V!h6# (*(.(!8}(*(̈́w#>?> w#a{ |͒}͛Ɛ'@'7||}>"C"6# ""͐ͩ*B"[R5*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#E͊w}8uRB0 >R@RR!+ͨ z R!+ͨ z <!+ͨ z <!+ͨ z <!#ͨ z <!+ͨ z T]KB!z> S>))0 = |JJDMgo>jB0 7?= H\<z5+)+<z {0Gɯgo||H}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'ͬͬdͬ ͬ} wͦWͧ _}8(8J`9{T]=o`9y w >uJ u` }>(; xQ }} ˸T}ٕ(0D=C ,= ( [ 0%D , 7 ͏ ?(8u x O - ; 8˸x X ,-xG}; }م 9; .>#n0[ D = - nx P ,-(-˸G,-; }ٕ? 9.>͏ 8u ?= u+-(>O 0u O 8͏ ?x P , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx(ͼ ?}ٽÏ }ց; <(; 7D = |٤g{٣_z٢Wy١Ox٠GD u J }x>uu}ƀ/ƀo; -J }0W-J W,}l˸ͨ 8 ; ` x( -ͨ 8J -ͨ 8,J }l8;*!` ! >u` ` u--- J ,,,-xGg?+2n*8t z~,->uxua}.; OJ , ; !U >,k- o&0%,` }g; }؉}颋.:}8c~I$I~L*kٷx˸; }0G,͙<},-(-J ! >0 a` o8 Oþ >um.`1pF,t6|!wS<.z}[|%FXc~ur1}Oٯx(<˸ͨ 8; !~Jͨ 0O!><ͨ 8 =  7 <` O ; 7 0 W-J OT0 j oD,:j !I}袋.}8c~I$I~L!>u` ` 77 ` = O nf^VNF!DLT\I!!53!r1!\!> x #-= o˸xO(- }(x>8(C ,C `iM!>u|; |J>| )=|(DMbo˸ͦ88ͦx(0 8> Mx(>-Ͳ{(ay(Ͱͦ \z(>.Ͳ (Ͱ ~ͦ{>EͲ>+|(|Dg>-Ͳ|/ 0:p# ~# +>0w#,-  60#J˸}րogM| .(C = ~> x0w#xG%P %P ZJDM%P = _~65i+~hìx-Sx9?+{Η@}|C C gZJDM0D ,7}o˸  #yO!@9i&   # w# /w# w#!9! E9!!9~(+F͊!"9!(#>2*Ͳ"|>" :( ͆ *6#w*6#6 !\$![ (̈́( #:~CONTRMKBDLSTAUXUSR>2$*#~ Ͷ$*:> >w###6  #6++p>2S-$Ͷ:*6###ww#w$w#w: ##N#F*B> w#w#[s#r>2S$Ͷ$*6 #-Nw#Fwq#p#6#w#w#w* :( ͒: *^ F* < >26"~͟*-w#ww#͟"~ <@*Ͳ!\  <ʮ!\$> >2*|>! * \$\<(!: [1Á\!(f"> 2:!<"F( #~#6e>!["N>!~8>O6*"w (=(&("( :(N 8y(~#x+% (6*#~[*#~ *~(h#"b=  8 J= B== ͯ}8= ͵}/ͭ !*###~-_~(4Q6*>2>*##w:>*##~*#~(E[ ( ( ( !][ ( ( ((w#(6!]~-#8~>7  [>OkͼMs #rkͼpX á[ [ (( #w(q*#~[ (  *##~6͜O$*#~(08ʦ=ʦ==ʩ=ʬò+###~-_q46͡> *:4^q}Ò*|(M|( M6-#͐ͦ[R8 (G> ͒C~͒#*ͦC!h !lTRUEFALSEͦ!9^#(~#(G~͒#> ͒> Ò "F![(#RR0*4#4> RR *4 #4(>>2$*V(/˖:(#~+ x y2!͵( =( X:(R*:(###~-_-͌X> :("͟"*^˞*V˖0 SRѷR8A* N#F#s#r$ 0})jS\*###w* N#FB ͟r+s> !T]>)j)0 0= UR!#U*^#V#N#F#^#V>">!2DM"~x(L* :O(o:" C}=( ?*-N#Fp+qq#p! * F+N+++V+^Bq#p>>> SRѷR* s#r$ s#r"S"! N#FB(^x * 6#[<(H*! Kq#p##K[! *! 4 #4! x *$ *>w""{_!"*nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* 5KB!>u~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6# * *!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#VS>O"w2x2!"" @*>2"!"""!\Ͳ*: !~6go(\R*s#r_2x( s x(T]DMR0 -a%}̈́o*!~6o&͠|ͣ}%^C User break1:% I/O% Run-time% error ͒%, PC=[R"͍% Program aborted*1!8͍!}Ͳe! Cross-Reference Listing !C"G*G[͐*G[*&C !6"@!":!"8*:*8͇E *:*8!"6*@ !2*6+)))) ͽEʭ *6!R"8 *@ !2*6+)))) ͪE *6!": !}2B X !}2B*B& 6i)!("0!2Ͳ"B*B^#V!NE!*B!ͥ*B^#V"***!s#r**!s#r**",!2 *,Ͳ*,!ͥ*,*,^#Vs#r*,^#V".*0*.s#r*.!s#rá"*B^#V"***",!2 *, \E`"*,^#V^#V*0aE]"!(!ͥ*(".*0*.s#r*.!s#r*,^#V*(s#r*,*(s#rá"!2 *, ͽEʌ"**!2 *0!á"**!2 *0!( !"$"&*D&E#!G !GͲ!l͝}oE#!l8!G._!}2F!}2D#!}2E*F&!G mtEB#!}2D!l͝}2E! }2c#*F&!}2F!G*F&n&}2*&[$*&" *E&Eʊ#!* sØ$*D&Eʟ#!* sØ$*&Q!a!zkE#!* sØ$*&Q!^a!$a!_a!A!ZkE#!* sØ$*&Q!0!9kE#$!* sØ$*&!'N*&!"N}oER$!* sØ$*&*&NEq$!* sØ$*&* &NEʐ$!* sØ$!* s* n&Rʱ$R$* * &s$R$* *&(s$* *&s !"*Ͳ!HͲ!}2.!}2!h!jͪ"* m!tEʦ%!}2.!}2*Ͳ*&RŔSOURCE CODE LINE TOO LONG !!!!!͐'*j&Q!a!aE%!}2*g&R®&*j&R&R&R&R!&* *k&e.*Ͳë&R?&R?&R‘&*k&!*NE[&!}2gt&*j&!NEt&!}2g* *&e.*Ͳë&* *k&e.*Ͳ'R&*j&!NE&!}2g'R'*i&! a*i&*&a}oE'!}2g!}2'R'*k&Q!A!Zk!0!9k!.aEʀ'!H *k&e.!HͲ*k&!.NE}'!}2'!H m!NEʠ'!}2G'*&}oE'!H .CMD!HͲ!}2G!}2g*&!aE4%!!}2*&!G mͯE`)*&!G mͯ!G*&n&* &N}oE_(*&!}2(!}2*&!G mͯ!G*&n&* &a}oE(*&!ͯE(*&!}2!*&!G*&n&s*&!}2f(!!*&s! m!NE)])!; }o!!n&Q!0!9k}o}oE])*4! *)!(!D"2"4!}2g!}2G!}2D!}2E!GͲ!l*2 <!l5!aE**&RR! e.!q́File *2 !q́ not found !!!!!!͐!}2.!}2h* &}2i!h!jͪ"*j&!a*.&}o}oE=+*)!")!G$!i[*)!́: !G !q͐*-&Eʺ**)R!́: !G !q͐+*)!d!NE+R! ͽR! e.!q́Cross Referenced Through Line: *)!'*G&E:+*4!H !}2G3*!lD!hP!nͲ!!n m5zʠ+"h!n*h!n*hn&(s*h#r+!n P!Ͳ! h5!3!gͲ!3!g =!3z5!aE,!}2g ,!}2g*g&53 !*!%Ͳ!}2.!}22!i! <b!ib5!aEʴ,ŔCould not open ! !q́ (print output file).͐b!}22!}2.!! <b!b5!aE+-ŔCould not open ! !q  (xref output file).͐b!}22!}2.*2& *Ð/ .!}2"*n&*&!<ͯEʵ-!*&5zʟ-}2![͐b*&#~-*n&*&*s.! ![! !q͐b!!!R5z .}2![͐b*&#-!!*s !""!*!!aEʇ/*!"*^#V*=-*!!@-*"!* m5zʵ.}2![**&n&b*&#Æ.![* &e.!* mRqb!}2*^#V"*!aEt/*&!}2*&!͛EL/*!@-![* &e.!qb!}2![*^#V!b*^#V".*^#V*=- !#"(!<}2#*(!#=-#! !}2! }2!"),EB!2!+))))ACCE!2!+))))ACCEPT!2!+))))ADDI!2!+))))ADDITIVE!2!+))))ALL!2!+))))ALTE!2!+)))) ALTERNATE!2!+))))AND!2! +))))APPE!2! +))))APPEND!2! +))))ASCE!2! +)))) ASCENDING!2! +))))BEFO!2!+))))BEFORE!2!+))))BLAN!2!+))))BLANK!2!+))))BOTT!2!+))))BOTTOM!2!+))))BROW!2!+))))BROWSE!2!+))))CANC!2!+))))CANCEL!2!+))))CASE!2!+))))CHAN!2!+))))CHANGE!2!+))))CLEA!2!+))))CLEAR!2!+))))COMM!2!+))))COMMAND!2!+))))CONS!2!+))))CONSOLE!2! +))))CONT!2!!+))))CONTINUE!2!"+))))COPY!2!#+))))COUN!2!$+))))COUNT!2!%+))))CREA!2!&+))))CREATE!2!'+))))DATE!2!(+))))DEFA!2!)+))))DEFAULT!2!*+))))DELE!2!++))))DELETE!2!,+))))DELETED!2!-+))))DELI!2!.+)))) DELIMITED!2!/+))))DESC!2!0+)))) DESCENDING!2!1+))))DISP!2!2+))))DISPLAY!2!3+))))DO!2!4+))))EDIT!2!5+))))EJEC!2!6+))))EJECT!2!7+))))ELSE!2!8+))))ENDC!2!9+))))ENDCASE!2!:+))))ENDD!2!;+))))ENDDO!2!<+))))ENDI!2!=+))))ENDIF!2!>+))))ENDT!2!?+))))ENDTEXT!2!@+))))ERAS!2!A+))))ERASE!2!B+))))EXTE!2!C+))))EXTENDED!2!D+))))FIEL!2!E+))))FIELD!2!F+))))FIELDS!2!G+))))FILE!2!H+))))FILES!2!I+))))FIND!2!J+))))FOR!2!K+))))FORM!2!L+))))FORMAT!2!M+))))FROM!2!N+))))GET!2!O+))))GO!2!P+))))GOTO!2!Q+))))HEAD!2!R+))))HEADING!2!S+))))IF!2!T+))))INDE!2!U+))))INDEX!2!V+))))INPU!2!W+))))INPUT!2!X+))))INSE!2!Y+))))INSERT!2!Z+))))JOIN!2![+))))LIKE!2!\+))))LIST!2!]+))))LOCA!2!^+))))LOCATE!2!_+))))LOOP!2!`+))))MARG!2!a+))))MARGIN!2!b+))))MEMO!2!c+))))MEMORY!2!d+))))MODI!2!e+))))MODIFY!2!f+))))NOT!2!g+))))NOTE!2!h+))))OF!2!i+))))OFF!2!j+))))ON!2!k+))))OR!2!l+))))OTHE!2!m+)))) OTHERWISE!2!n+))))PACK!2!o+))))PICT!2!p+))))PICTURE!2!q+))))PRIM!2!r+))))PRIMARY!2!s+))))PRIN!2!t+))))PRINT!2!u+))))QUIT!2!v+))))READ!2!w+))))RECA!2!x+))))RECALL!2!y+))))RECO!2!z+))))RECORD!2!{+))))REIN!2!|+))))REINDEX!2!}+))))RELE!2!~+))))RELEASE!2!+))))REMA!2!+))))REMARK!2!+))))RENA!2!+))))RENAME!2!+))))REPL!2!+))))REPLACE!2!+))))REPO!2!+))))REPORT!2!+))))RESE!2!+))))RESET!2!+))))REST!2!+))))RESTORE!2!+))))RETU!2!+))))RETURN!2!+))))SAVE!2!+))))SAY!2!+))))SECO!2!+)))) SECONDARY!2!+))))SELE!2!+))))SELECT!2!+))))SET!2!+))))SKIP!2!+))))SORT!2!+))))STOR!2!+))))STORE!2!+))))STRU!2 !+)))) STRUCTURE!2!+))))SUM!2!+))))TEXT!2!+))))TO!2!+))))TOP!2!+))))TOTA!2!+))))TOTAL!2!+))))UPDA!2!+))))UPDATE!2!+))))USE!2!+))))USIN!2!+))))USING!2!+))))WAIT!2!+))))WHIL!2!+))))WHILE!2!+))))WITH! }2! }2! }2!}2- !!Ͳ!8!b*&(Q!A!Zk!0!9k!-a!/a!+a!!a!@a![a!]a!a! aECR*&(b*&!aEʪC! *&(e.!Ͳ*&!NEC!! m!ͽ*&! N! m! N}oEB*&! NED!! m!ͽ! oED! .SRC!Ͳ! .TXT!Ͳ NEWFILE.CMD!Ͳ! .PRN!Ͳ! .XRF!Ͳ! .STR!Ͳ! .CMD!Ͳ! !%Ͳ#!!I *#! e.!I |!R5L+!Ͳ! CREATE\EnE!I CREA!IͲ*#!"#Þ]! ACCEPT\EʮE!I ACCE!IͲ*#!"#Þ]! RENAME\EE!I RENA!IͲ*#!"#Þ]! INDEX\E-F!I INDE!IͲ*#!"#Þ]! INPUT\ElF!I INPU!IͲ*#!"#Þ]! RELEASE\EʭF!I RELE!IͲ*#!"#Þ]! LOCATE\EF!I LOCA!IͲ*#!"#Þ]! REPLACE\E.G!I REPL!IͲ*#!"#Þ]! RESTORE\EoG!I REST!IͲ*#!"#Þ]! CHANGE\EʯG!I CHAN!IͲ*#!"#Þ]! STORE\EG!I STOR!IͲ*#!"#Þ]! IF\E(H!I IF!IͲ*#!"#Þ]! CASE\EfH!I CASE!IͲ*#!"#Þ]! POKE\EʤH!I POKE!IͲ*#!"#Þ]! PEEK\EH!I PEEK!IͲ*#!"#Þ]! CALL\E I!I CALL!IͲ*#!"#Þ]! FIND\E^I!I FIND!IͲ*#!"#Þ]! GOTO\EʚI!I GO!IͲ*#!"#Þ]! SUM\EI!I SUM!IͲ*#!"#Þ]!I !!5L+ENDIF\E"J!I ENDI!IͲ*#!"#Þ]!I *#!5L+ENDCASE\EpJ!I ENDC!IͲ*#!"#Þ]!I *#! 5L+ OTHERWISE\EJ!I OTHE!IͲ*#! "#Þ]!I *#! 5L+ SET DEFAULT\EK!I SET DEFA!IͲ*#! "#Þ]!I *#! 5L+ SET CONSOLE\ElK!I SET CONS!IͲ*#! "#Þ]!I *#! 5L+ SET INTENSITY\EK!I SET INTE!IͲ*#! "#Þ]!I *#! 5L+ SET ALTERNATE\EL!I SET ALTE!IͲ*#! "#Þ]!I *#! 5L+ SET INDEX\EpL!I SET INDE!IͲ*#! "#Þ]!I *#! 5L+ SET PRINT\EL!I SET PRIN!IͲ*#! "#Þ]!I *#!5L+SET CALL\EM!I SET CALL!IͲ*#!"#Þ]!I *#!5L+SET TALK\EjM!I SET TALK!IͲ*#!"#Þ]!I *#! 5L+ SET COLON\EʾM!I SET COLO!IͲ*#! "#Þ]!I *#! 5L+ SET DEBUG\EN!I SET DEBU!IͲ*#! "#Þ]!I *#! 5L+ SET ESCAPE\EgN!I SET ESCA!IͲ*#! "#Þ]!I *#! 5L+ SET FORMAT\EʼN!I SET FORM!IͲ*#! "#Þ]! SET\EN!I SET!IͲ*#!"#Þ]!I *#! 5L+ APPEND BLANK\EPO!I  APPE BLAN!IͲ*#! "#Þ]!I *#!5L+APPEND\EʝO!I APPE!IͲ*#!"#Þ]!I *#!5L+DELETE\EO!I DELE!IͲ*#!"#Þ]!I *#!5L+EDIT\E5P!I EDIT!IͲ*#!"#Þ]!I *#!5L+ENDDO\EʁP!I ENDD!IͲ*#!"#Þ]!I *#!5L+DO WHILE\EP!I DO WHIL!IͲ*#!"#Þ]!I *#!5L+DO CASE\E$Q!I DO CASE!IͲ*#!"#Þ]! DO\E^Q!I DO!IͲ*#!"#Þ]!I *#!5L+ERASE\EʪQ!I ERAS!IͲ*#!"#Þ]!I *#!5L+CANCEL\EQ!I CANC!IͲ*#!"#Þ]!I *#!5L+CLEAR\ECR!I CLEA!IͲ*#!"#Þ]!I *#!5L+CONTINUE\EʒR!I CONT!IͲ*#!"#Þ]!I *#!5L+DISPLAY STRUCTURE\ER!I  DISP STRU!IͲ*#!"#Þ]!I *#!5L+DISPLAY MEMORY\EIS!I  DISP MEMO!IͲ*#!"#Þ]!I *#!5L+DISPLAY\EʗS!I DISP!IͲ*#!"#Þ]!I *#!5L+ELSE\ES!I ELSE!IͲ*#!"#Þ]!I *#!5L+EJECT\E.T!I EJEC!IͲ*#!"#Þ]!I *#!5L+DELETE\E{T!I DELE!IͲ*#!"#Þ]!I *#!5L+GOTO TOP\ET!I GO TOP!IͲ*#!"#Þ]!I *#! 5L+ GOTO BOTTOM\E!U!I  GO BOTT!IͲ*#! "#Þ]!I *#! 5L+ GO BOTTOM\EtU!I GO BOTT!IͲ*#! "#Þ]!I *#!5L+PACK\EʿU!I PACK!IͲ*#!"#Þ]!I *#!5L+LOOP\E V!I LOOP!IͲ*#!"#Þ]!I *#!5L+SKIP\EUV!I SKIP!IͲ*#!"#Þ]!I *#!5L+RETURN\EʢV!I RETU!IͲ*#!"#Þ]!I *#!5L+COPY STRUCTURE EXTENDED\E W!I COPY STRU EXTE!IͲ*#!"#Þ]!I *#!5L+COPY STRUCTURE\EdW!I  COPY STRU!IͲ*#!"#Þ]!I *#!5L+SELECT PRIMARY\EʾW!I  SELE PRIM!IͲ*#!"#Þ]!I *#!5L+SELECT SECONDARY\EX!I  SELE SECO!IͲ*#!"#Þ]!I *#!5L+USE\EcX!I USE!IͲ*#!"#Þ]!I *#!5L+COUNT\EʯX!I COUN!IͲ*#!"#Þ]!I *#!5L+INSERT\EX!I INSE!IͲ*#!"#Þ]!I *#!5L+LIST\EGY!I LIST!IͲ*#!"#Þ]!I *#!5L+QUIT\EʒY!I QUIT!IͲ*#!"#Þ]!I *#! 5L+ READ NOUPDATE\EY!I  READ NOUP!IͲ*#! "#Þ]!I *#!5L+READ\E6Z!I READ!IͲ*#!"#Þ]!I *#!5L+RECALL\EʃZ!I RECA!IͲ*#!"#Þ]!I *#!5L+REPORT\EZ!I REPO!IͲ*#!"#Þ]!I *#!5L+WAIT\E[!I WAIT!IͲ*#!"#Þ]!I *#!5L+BROWSE\Eh[!I BROW!IͲ*#!"#Þ]!I *#!5L+RESET\Eʴ[!I RESE!IͲ*#!"#Þ]!I *#!5L+SAVE TO\E\!I SAVE TO!IͲ*#!"#Þ]!I *#!5L+COPY TO\EV\!I COPY TO!IͲ*#!"#Þ]!I *#!5L+TOTAL ON\Eʨ\!I TOTA ON!IͲ*#!"#Þ]!I *#!5L+SORT TO\E\!I SORT TO!IͲ*#!"#Þ]!I *#!5L+JOIN TO\EJ]!I JOIN TO!IͲ*#!"#Þ]!I *#! 5L+ UPDATE FROM\Eʞ]!I  UPDA FROM!IͲ*#! "##!ߩ!"'*'*ͯE]![! b*'!"'ö]ߩ!۩!"'*'*ͯE*^!I[! b*'!"']۩!ש!"'*'*ͯEp^![! b*'!"'B^ש!ө*#!I m5z^"%!I !I*%n&e.!IͲ*%#Ó^ө!ϩ*1&}oE^ͧ]*1&E_![́* b![!I !q͐b!I !!5TEXT\!I !!5text\}o!I !!5Text\}oE_!}21!!O5zʭ_"%![!*b*%#Ì_![͐b*!"ϩ!˩!I !!5! e.\!I !!5! e.\}oE#`!I!!ͽ!I !!5! e.o!I !!5! e.o}oE_˩!ǩ!I*%!n&!<N!I*%!n&!>N}o!I*%!n&!=N}o!I*%!n&!+N}o!I*%!n&!-N}o!I*%!n&!*N}o!I*%!n&!/N}o!I*%!n&!,N}oEza*%!"%Öb!I*%!Rn&!<N!I*%!Rn&!>N}o!I*%!Rn&!=N}o!I*%!Rn&!+N}o!I*%!Rn&!-N}o!I*%!Rn&!*N}o!I*%!Rn&!/N}o!I*%!Rn&!,N}oEʖb*%!"%ǩ!é*#"%!}2/*%!I m͇Ec*/&!N!I*%n&!"N}oEc!}2/Üc*/&!N!I*%n&!'N}oE5c!}2/Üc*/&!N!I*%n&!"N}oEjc!}2/Üc*/&!N!I*%n&!'N}oEʜc!}2/*/&!N!I*%n&! N}oEcj`!I !I*%n&e.!IͲ*%!"%õbé!!8!b*&(Q!Ya!NaE d!!"!!ͽ!*!͛Eʔd![! ͐b*!"![͐b![́Structured Listing of: ! !q͐b![́Page *!͐b![͐b!"cR! e.!qb͐Ŕ,============================================bͩR͐bR! e.!qb͐Ŕ||bͩŔ( dTUNE (C) Command File Utility b͐Ŕ||͐bͩR! e.!qb͐Ŕ||bͩŔ( Copyright 1984, 1985 by UCS, inc. b͐Ŕ||͐bͩR! e.!qb͐Ŕ||bͩŔ( ALL RIGHTS RESERVED b͐Ŕ||͐bͩR! e.!qb͐Ŕ||bͩŔ( Version 2.3x b͐Ŕ||͐bͩR! e.!qb͐Ŕ,============================================bͩR͐bR͐bR! e.!qb͐Ŕ'File to be processed must be type :bͩŔ .CMD͐bR! e.!qb͐Ŕ'Structured Source will be saved as :bͩŔ .TXT͐bR! e.!qb͐Ŕ'Structured .CMD will be saved as :bͩŔ .STR͐bR! e.!qb͐Ŕ'Cross Reference will be saved as :bͩŔ .XRF͐bR! e.! qb͐Ŕ'Line Numbered Source will be saved as :bͩŔ .PRN͐bR! e.!qb͐Ŕ'Original Source will be saved as :bͩŔ .SRC͐b!!R! e.!qb͐Ŕ Enter name ofbͩŔ .CMD b͐Ŕfile to process: bͩB! ͪEʼj!!ͽR! e.! qb͐Ŕ Do you want abͩŔ CROSS REFERENCE b͐Ŕof the .CMD file Y/N ? bͩd*&(}2!!ͽR! e.! qb͐Ŕ Do you want abͩŔ STRUCTURED b͐Ŕversion of thebͩŔ SOURCE b͐Ŕ file Y/N ? bͩd*&(}2!!ͽR! e.!qb͐Ŕ Do you want abͩŔ STRUCTURED b͐Ŕversion of thebͩŔ PROCESSED b͐Ŕ file Y/N ? bͩd*&(}2!!ͽR! e.!qb͐Ŕ Do you want abͩŔ Structured Listing b͐ŔY/N? bͩd*&}2! ! <b! b!Y! <b!Yb!! <b! +El!\b!"!!ͽR! e.!qWorking ! !q͐b! ͝}oEo! 8!I._b!I \E~m! 8!I._b_!I !!5TEXT\!I !!5text\}oEʯn!"#!IͲy^! 8!I._bENDT!I |!͛endt!I |!͛}oE)n_![!.b*!"*!KNEWnDd!Y[!I !q͐b!I !!5ENDT\!I !!5endt\}oEm!}20!I!n&!*N! ͝}o}oE-o! 8!I._b_![!.b*!"*!KNE#oDd!}20no!I!n&!*N! ͝}oEgo!}20!IͲno!}20*0&}oEʶn!"#!IͲD͟b![!.b*!"*!KNEoDd!Y[!I !q͐b5m!Y[!b!Yb! b! ! nb!Y! nbR͐b*&(!YNE[t! b!I! <b! +Elp!I\b!Ib!"!!ͽR! e.!q Saving STRUCTURED version : ! !qb! ͝}oECt! 8!I._b_!I !!5L+TEXT\Eʿq!I[!I !q͐b! 8!I._bENDT!I |!͛endt!I |!͛}oEq_!I !!5ENDT\!I !!5endt\}oEq!}20!I !!5L+CASE\E"r*!R"]!I[!I !q͐b*!"@t!I !!5L+DO CASE\Err]*!"!I[!I !q͐b@t!I !!5L+DO WHIL\!I !!5L+IF\}oEr]*!"!I[!I !q͐b@t!I !!5L+ENDD\!I !!5L+ENDI\}oEVs*!R"]!I[!I !q͐b@t!I !!5L+ELSE\!I !!5L+OTHE\}oEs*!R"]!I[!I !q͐b*!"@t!I !!5L+ENDC\E%t*!R"]!I[!I !q͐b@t]!I[!I !q͐bp!I[!b!Ib*&(!YNE$x! b!}21!"!"!!ͽR! e.!q! Printing STRUCTURED listing of: ! !qbid! ͝}oE x*!"*!<͛Euid! 8!I._b*1&}oE6u_!I !!5L+ENDT\Eʤu!!O5zʅu"%![!*b*%#du![͐b*!"!}21!I !!5L+CASE\Ev*!R"ͧ]![!I !q͐b*!"x!I !!5L+DO CASE\EPvͧ]*!"![!I !q͐bx!I !!5L+DO WHIL\!I !!5L+IF\}oEvͧ]*!"![!I !q͐bx!I !!5L+ENDD\!I !!5L+ENDI\}oE4w*!R"ͧ]![!I !q͐bx!I !!5L+ELSE\!I !!5L+OTHE\}oEʳw*!R"ͧ]![!I !q͐b*!"x!I !!5L+ENDC\Ex*!R"ͧ]![!I !q͐bx^t! b![! ͐b*&(!YNEX|!Yb!! <b! +Eix!\b!b!"!!ͽR! e.!q Saving STRUCTURED version : ! !qb!Y͝}oE@|!Y8!I._b_!I !!5L+TEXT\Eʼy![!I !q͐b!Y8!I._bENDT!I |!͛endt!I |!͛}oE|y_!I !!5ENDT\!I !!5endt\}oEy!}20!I !!5L+CASE\Ez*!R"3^![!I !q͐b*!"=|!I !!5L+DO CASE\Eoz3^*!"![!I !q͐b=|!I !!5L+DO WHIL\!I !!5L+IF\}oEz3^*!"![!I !q͐b=|!I !!5L+ENDD\!I !!5L+ENDI\}oES{*!R"3^![!I !q͐b=|!I !!5L+ELSE\!I !!5L+OTHE\}oE{*!R"3^![!I !q͐b*!"=|!I !!5L+ENDC\E"|*!R"3^![!I !q͐b=|3^![!I !q͐bx![!b!b*&!YNEK}!Ybͼ/*.&}oEK}!"+!!ͽR! e.!qPreparing Line Numbered File: ! !qb!+! !ib!!ͽR!  e.!qSaving Cross Reference : ! !qb*+:-!b!!ͽR! e.!"qDone... !e.!qbqSaving Cross Reference : ! !qb*+:-!b!!ͽR! e.!"qDone... !e.! !q͐b*!"=|!I !!5L+DO CASE\Eoz3^*!"![!I !q͐b=|!I !!5L+DO WHIL\!I !!5L+IF\}oEz3^*!"![!I !q͐b=|!I !!5L+ENDD\!I !!5L+ENDI\}oES{*!R"3^![!I !q͐b=|!I !!5L+ELSE\!I !!5L+OTHE\}oE{*!R"3^![!I !q͐b*!"=|!I !!5L+ENDC\E"|*!R"3^![!I !q͐b=|3^![!I !q͐bx![!b!b*&!YNEK}!Ybͼ/*.&}oEK}!"+!!ͽR! e.!qPreparing Line Numbered File: ! !qb!+! !ib!!ͽR! dTUNE (C) A Utility for dBASEII(tm) Command Files COPYRIGHT 1984, 1985 by U.C.S., inc. ALL RIGHTS RESERVED dBASEII is a trademark of Aston-Tate Version 2.3x Z-80 Processors ONLY!!! February 26, 1985 dTUNE is a utility for use with dBASEII command files. dTUNE can do many things for the dBASEII programmer, including, shrink the size and increase the speed of almost any dBASEII .CMD file; Prepare a structured version of your source file; Prepare a structured version of the processed file; Print a structured listing of the processed file; Prepare a cross reference listing of all non-reserved words, and a line numbered .PRN file for reference. dTUNE is a 'Cost-Effective' alternative to some other dBASEII utilities designed to optimize command files. dTUNE is written  in Borland International's Turbo Pascal and processes files rapidly. dTUNE will not disturb any TEXT-ENDTEXT portions of your command file. dTUNE is designed to handle upper case, lower case, or mixed case input. The only requirement is that the file to be processed be of type .CMD (.PRG for 16 bit version). dTUNE is astonishingly simple to use. Just execute DTUNE, and you will be prompted for the FILENAME of the .CMD file to be processed. You will be asked if you wish to save a structured version of the SOURCE file, a structured version of the PROCESSED file, a CROSS REFERENCE file, and a structured listing of the PROCESSED file. You may select any or all of these options. Once dTUNE has been given answers to all its questions, it will begin to process the input file. As dTUNE processes lines of the source file, it will print a dot to the screen. As long as DTUNE is printing dots to the screen, it's still reading. Once the file has been read and processed, dTUNE will notify you of its continuing activities, including the preparation of the structured files and the cross reference, if requested. dTUNE will ALWAYS process your input file, and save a trim- med version of it as .CMD and rename the source to type .SRC. dTUNE can provide varying amounts of compression, depending on your programming habits. dTUNE will generally trim at least 15% from the size of your input file. If you are very liberal with your comments and structuring, dTUNE can trim as much as 70% from the size of your .CMD file. If you request a CROSS REFERENCE, dTUNE will save two files, one type .PRN which is a line numbered listing of your processed command file (sans comment lines), and one type .XRF which is the actual cross reference listing. The line numbers listed after each variable refer to the appropriate line on the .PRN file. You will find this to be an invaluable aid in debugging or modifying .CMD files. dTUNE is provided with a terminal installation program that will configure dTUNE to various terminals. To install dTUNE for your terminal, run DTUNEINS. Select [S]creen installation and choose your terminal from the list provided. [Q]uit out of DTUNEINS and your version of dTUNE is ready to run. DTUNEINS.COM, DTUNEINS.MSG, and DTUNEINS.DTA are not necessary after you have installed dTUNE. They may be deleted from your work disk. dTUNE has been thoroughly tested by Terry Carroll of Bedford, Texas, Steve Aidikonis of Streamwood, Illinois and Dr. Don Saba of San Diego, California. Their patience, understanding of dBASEII, and suggestions were invaluable to the development of this program and are gratefully acknowledged. James A. Gronek President U.C.S., inc. Sysop, The Lost Dutchman's Gold Mine RCP/M Phoenix, Az. 602-848-6708 300-1200 Baud ing of dBASEII, and sugg dBase II Screen and Print Formatting Programming Tip by David A. Basskin, Toronto, Ontario INTRODUCTION I you'v go a OSBORN an a EPSO MX-80 yo ma fin thes tw file o som use Rathe tha goin t th troubl o typin ou contro code t forma th scree wit underline and/o half-intensit character ever tim yo se u scree o pag forma file yo ca us th macr substitutio functio o dBas t tak ove thi tiresom job M suggestio i t kee the o th sam dis a DBASE.CO an RESTOR the t memor a your convenience. SCREEN.MEM Jus RESTOR thi fil o memor variable an us th followin command i you scree forma files: &BL - begins underlining &EL - ends underlining &BH - begins half-intensity &EH - ends half-intensity not tha th underlinin functio underline th whol fiel t whic i applies whethe o no filled. To underline one field, you could type: . DISPLAY &BL,FIELD1,&EL,FIELD2 ... and so on. PRINT.MEM Thi fil i use i th sam wa a SCREEN Ther i n nee t releas al th variable fro th former SCREEΠ an PRIN shar n variable name an s bot ca b use together Th command will change the setup of an Epson MX-80 as follows: &BC - begin compressed print &EC - end compressed print &BD - begin double-strike &ED - end double-strike &BE - begin emphasized print &EE - end emphasized print &BI - begin italic print &EI - end italic print &BL - begin underlining &EL - end underlining &BS - begin superscript &ES - end superscript &BW - begin double width &EW - end double width &RESET - clear all settings to power-on defaults and move paper to top of form. Not tha thes code won' wor i .FR file  generate b REPORT the mus appea i .FMԠ o .CMD files. MODIFICATIONS I you'r usin differen printer o dBas o differen computer th principl behin thi programmin ti ca b easil adapted I you termina support revers vide o blinkin curso (whic th Osborn doe not) thos code coul easil b adde t SCREEN Similarly proportiona spacing toggle could be added to PRINT. Send any questions or comments to: David A. Basskin 5 Douville Ct., Toronto, Ont., M5A 4E7 Phone: 368-1085 ==================================================== superscript &ES - end superscript &BW - begin double width &EW - end double width &RESET - clear all settings to power-on defaults and move paper to top of form. Not tha thes code won' wor i .FR file BCdEC dBIdBLDdEI3dELYdRESETndBEdEEdBDdEDdBWdEWdBSdESe CHR(15) CHR(18)CHR(27)+CHR(52)CHR(27)+CHR(53)CHR(27)+CHR(45)+'1'CHR(27)+CHR(45)+'0'CHR(27)+CHR(64)CHR(27)+CHR(69)CHR(27)+CHR(70)CHR(27)+CHR(71)CHR(27)+CHR(72)CHR(27)+CHR(87)+'1'CHR(27)+CHR(87)+'0'CHR(27)+CHR(83)+'0'CHR(27)+CHR(84)BL dEL dBH dEH )d CHR(27)+"l" CHR(27)+"m" CHR(27)+')' CHR(27)+'('BB* backup and restore utility ERASE INPUT "DO YOU WISH TO BACKUP (1) OR RESTORE (2)" TO CHOICE SET talk OFF STORE 1 TO begin,piece,temp,length STORE " " TO block STORE " " TO infile,outfile ACCEPT "ENTER SOURCE DRIVE" TO source ACCEPT "ENTER DESTINATION DRIVE" TO destin SET DEFAULT TO &source DO CASE CASE choice = 1 * hard disk backup routine for dbf files STORE t TO check DO WHILE check ACCEPT "ENTER FILE NAME (RETURN TO EXIT)" TO filename IF filename= " " ERASE RETURN ENDIF filename= " " IF .not. FILE( "&FILENAME" ) ERASE ? "FILE NOT FOUND PLEASE RE-ENTER" ?? chr(7) ELSE STORE f TO check ENDIF .not. FILES ENDDO WHILE check INPUT "ENTER DISKETTE SIZE (IN THOUSANDS)" TO disksize INPUT "ENTER CHARACTORS PER RECORD " TO recsize STORE (disksize*1000)/recsize TO temp STORE trim(str(temp,6)) TO block STORE source + ":" + filename TO infile USE &infile DO WHILE .not. eof ? " INSERT DISKETTE " + str(piece,1) + " INTO DRIVE " + destin WAIT RESET ERASE USE &infile GO begin STORE filename + "." + str(piece,1) TO outfile STORE destin + ":" + trim(outfile) TO outfile ? " NOW COPYING" SET talk ON COPY next &block TO &outfile SET talk OFF STORE piece+1 TO piece STORE # + 1 TO begin RESET ENDDO WHILE .not. eof CASE choice = 2 * hard disk restore routine ERASE ACCEPT "ENTER FILE NAME OF FILE RESTORING FROM " TO filename STORE 1 TO COUNT STORE t TO RESTORE DO WHILE RESTORE ERASE STORE filename + "." + str(COUNT,1) TO infile STORE t TO disk:chk DO WHILE DISK:CHK IF FILE( "&INFILE" ) STORE f TO disk:chk ELSE ERASE ?? chr(7) ? "FILE NOT FOUND PLEASE RE-ENTER" ?? "LOOKING FOR " ? "  "+infile WAIT RESET ENDIF .not. FILES ENDDO disk:chk STORE destin + ":" + filename TO outfile IF COUNT=1 USE &infile ERASE ? "COPYING FIRST BACK-UP DISK IN" SET TALK ON COPY TO &outfile SET TALK OFF ELSE USE &outfile SET TALK ON ERASE ? "APPENDING TO FILE..." APPEND FROM &infile SET TALK OFF ENDIF COUNT=1 ACCEPT "DO YOU HAVE ANY MORE DISKS TO RESTORE FROM (Y/N)? " TO more IF more= 'N' STORE f TO RESTORE LOOP ENDIF more= 'N' USE STORE COUNT+1 TO COUNT ? "INSERT DISK " +str(COUNT,1) WAIT RESET ENDDO WHILE RESTORE ENDCASE RETURN ERASE ?? chr(7) ? "FILE NOT FOUND PLEASE RE-ENTER" ?? "LOOKING FOR " ? " ERASE SET TALK OFF SET ECHO OFF SET BELL OFF SET CONFIRM ON SET DEFAULT TO A: CLEAR STORE 240 TO maxlength * * etsi muunnettavan tiedoston nimi* * STORE F TO ok DO WHILE .NOT. ok STORE ' ' TO filename @ 02,06 SAY 'Mink{ dBASE.DBF muunnat MailMerge.TXTiksi >> '; GET filename READ ERASE @ 04,06 SAY 'Varmistu, ett{ valittu .DBF-tiedosto on A:ssa! ' SET CONSOLE OFF WAIT SET CONSOLE ON IF FILE('&filename') STORE T TO ok ELSE ERASE ? CHR(7) @ 01,00 'Levyll{ ovat ainoastaan n{m{ .DBF-tiedostot:' ? LIST FILES LIKE *.dbf STORE 100 TO delay DO WHILE delay > 0 STORE delay-1 TO delay ENDDO delay > 0 ERASE ENDIF FILE('&filename') ENDDO .NOT. ok * * lue tiedoston rakenne ja valitse muunnettavat kent{t * ERASE SET CONFIRM OFF ? ' *** Tutkitaan .DBF-tiedoston rakenne ***' USE &filename COPY STRUCTURE EXTENDED TO tempstru USE tempstru STORE F TO ok DO WHILE .NOT. ok STORE 0 TO count STORE 2 TO offset STORE 0 TO length GOTO TOP ERASE @ 01,01 SAY ' TIEDOSTO/TYYPPI/PITUUS'; + ' - Ilmoita mitk{ kentist{ valitaan mukaan.' DO WHILE .NOT. eof STORE 'E' TO include @ # +(offset),01 SAY STR(#,2)+'.'+field:name+' '+field:type+' '; +STR(field:len,3)+' luetaan MailMerge-tiedostoksi (K/E) '; GET include READ IF !(include)='K' IF field:type='C' STORE 'var'+STR(count+10,2) TO variable STORE field:name TO &variable STORE length+field:len TO length STORE count+ 1 TO count ENDIF field:type='C' IF field:type='E' STORE 'var'+STR(count+10,2) TO variable STORE 'STR('+field:name; +','+STR(field:len,2); +','+STR(field:dec,2)+')' TO &variable STORE length+field:len TO length STORE COUNT+1 TO count ENDIF field:type='E' ENDIF !(include)='K' SKIP IF # = 20 ERASE STORE -19 TO offset ENDIF # = 20 ENDDO .NOT. eof @ 24,10 SAY 'Meniv{tk| valinnat t(iptop) vai f(ibaan) '; GET ok READ IF length>maxlength STORE F TO ok ERASE ? CHR(7) ? 'MM-tietueesta tulee liian pitk{, '; + 'lyhenn{ '+STR(length-maxlength,3); + ' merkill{ kentti{!' STORE 100 TO DELAY DO WHILE delay>0 STORE delay-1 TO delay ENDDO delay>0 ERASE ENDIF length>maxlength ENDDO .NOT. ok USE DELETE FILE tempstru * * saumaa kent{t yhdeksi v{liaikaiskent{ksi * ERASE ? ' *** Rakennetaan v{liaikaistiedostoa ***' ? USE template COPY STRUCTURE TO tempfile USE ERASE ? ' *** Tietueet saatetaan yhteen ***' ? SELECT PRIMARY USE &filename SELECT SECONDARY USE tempfile SELECT PRIMARY GOTO TOP DO WHILE .NOT. eof .AND. count>0 STORE '"' TO m:concat STORE 0 TO loop DO WHILE count>loop STORE 'var'+STR(loop+10,2) TO variable STORE &variable TO variable STORE m:concat-&variable TO m:concat STORE loop+1 TO loop IF count>loop STORE m:concat-'","' TO m:concat ELSE STORE m:concat-'"' TO m:concat ENDIF count>loop ENDDO count>loop SELECT SECONDARY APPEND BLANK REPLACE concat WITH m:concat ? m:concat SELECT PRIMARY SKIP ENDDO .NOT. eof .AND. count>0 SELECT PRIMARY USE * * kopioi saumattu .DBF-tiedosto .SDF/.MM-tiedostoksi * STORE F TO ok DO WHILE .NOT. ok ERASE STORE " " TO mmfilename SET CONFIRM ON @ 01,05 SAY 'Nime{ uusi MailMergen .TXT-tyypin tiedosto: '; GET mmfilename READ SET CONFIRM OFF @ 03,05 SAY 'Siis '+!(mmfilename)-'.TXT, T(osi) vai F(iba)? ' GET ok READ ENDDO .NOT. ok ERASE @ 01,05 SAY !(mmfilename)-'.TXT rakentuu parhaillaan. Hetki vain!' SELECT SECONDARY COPY TO &mmfilename SDF DELIMITED WITH , USE DELETE FILE tempfile ERASE @ 05,05 SAY ' *** dBASE-tietosi ovat nyt my|s MailMerge-k{yt|ss{ *** ' @ 07,05 SAY ' (Tarkista vaikka allaolevasta hakemistosta!)' SET INTENSITY OFF LIST FILES LIKE *.txt CLEAR RELEASE ALL QUIT A:ssa! ' SET CONSOLE OFF WAIT SET CONSOLE ON IF FILE('&filename') STORE T TO ok ELSE ERASE ? CHR(7) @ 0;***************************************************************************** ;* Code for dBASE-callable machine-language subroutines. * ;* (c) 1983 by Bertel Schmitt POB 137 Charlottesville, VA 22902 * ;* (804) 293 5197 * ;* The following routines are stand-alone, they assemble separately. * ;* They are not an example for effective code, I am a business-man, not * ;* a programmer. And most of my exposure to assembly comes from a * ;* vintage RCA 1802 machine ..... * ;* * ;* Cleanups and revisions will be greatly appreciated ... * ;* * ;* ++++++ WE NEED MORE ROUTINES !!!! ++++++ * ;*  * ;* * ;* Wish-list: * ;* 1.) A date-input checker to weed-out things like "02/31/83" FAST! * ;* 2.) A Gregorian to Julian and v.v. routine. * ;* 3.) A rounding-routine for floating point variables. * ;* Those truncated numbers are DRIVING MY CPA CRAZY !!!! * ;* * ;* START CODING AND LEAVE THE STUFF ON THIS SYSTEM! * ;* B.S. * ;* P.S.: Pardon my English .... I'm German..... * ;***************************************************************************** ;***************************************************************************** ; ; THIS ROUTINE RIGHT-JUSTIFIES THE CALLED DBASE-STRING ;***************************************************************************** TRUE EQU 0FFFFH FALSE EQU NOT TRUE ; SOME EQUATES BLANK EQU 020H ORG 0A42EH ; OR WHEREVER YOU WANT IT .... ; POINTER TO VAR IS IN H,L ; WHICH POINTS TO LENGTH MOV C,L ;SAVE VARIABLE MOV B,H ;POINTER LDAX B ;LOAD LENGTH BYTE STA LENGTH ;AND STORE IT ADD C ;ADD IT TO POINTER MOV C,A MVI A,00H ;ZERO ACCU ADC B ;IN CASE OF A CARRY MOV B,A ; B POINTS TO LASTBYTE NOW MOV D,B ; AND D, H TOO MOV E,C ;NOW DO THE WORK LOOP: LDAX B ;GET BYTE XRI BLANK ;IS IT A BLANK? CNZ ADDBYT ;NOPE, SO STORE IT DCX B ;DECREMENT POINTER LDA LENGTH ;LOAD LENGTH BYTE DCR A ;DECREMENT STA LENGTH ;STORE LENGTH BYTE AWAY JZ UPVAR ;IF ZERO, RESTORE VAR JMP LOOP ;AND DO IT AGAIN UPVAR: ;NOW PAD THE REST OF THE VAR WITH BLANKS MOV A,E ;GET STOREAWA POINTER SUB L ;SUBTRACT VARPOINTER INR A ;DEC 1 TO ADJUST STA LENGTH ;STORE UPLOOP: MVI A,BLANK ;LOAD A BLANK CALL ADD2 ;STORE IN VAR DCX B ;DECREMENT POINTER LDA LENGTH ;LOAD LENGTH BYTE DCR A ;DECREMENT STA LENGTH ; AND STORE JNZ UPLOOP ; IF NOT DONE RET ; GO HOME ADDBYT: ;STOREAWAY SUB LDAX B ;GET CHAR ADD2: STAX D ;STORE AWAY DCX D ;DECREMENT POINTER RET ;AND RETURN LENGTH EQU $ DB 000H ;STORAGE FOR LENGTH BYTE END ;***************************************************************************** ; *** ZIPCHECK.ASM ****** ; This proved to be the most valuable routine in our maillist package. ; This checks a Variable 'ST11', where ST is a state abbreviation and ; 11 are the first two digits of the zipcode. ; Valid combinations are taken from the list below. ; If ok, the variable remains unchanged. ; On error, the called variable contains 'ERR0' ; '0' reflects the following conditions: ; 1: No such state ; 2: Wrong zip for this state ; ; Foreign addresses must have 'ZZ' as state and are being left alone by ; this routine. ;***************************************************************************** START EQU 0A470H ENDTAB EQU 0EEH ; END OF TABLE ENDSTA EQU 0FFH ; END OF STATE ORG START BEGIN: INX H ; POINT TO FIRST BYTE LXI B,ZIPTAB ; POINT TO START OF TABLE MOV D,M ; LOAD STATE INX H ; INTO D,E MOV E,M ; H,L POINTS TO INX H ; ZIP ; NOW ; CHECK FOR FOREIGN ZZ FIRST MVI A,'Z' CMP D JNZ LOOP1; NO MATCH CMP E RZ ;FOREIGN, GO HOME ; SCAN LIST FOR FIRST CHARACTER LOOP1: LDAX B ; GET CHAR CPI ENDTAB ; END OF TABLE? JZ ERROR1 ; YUP, NO SUCH STATE CMP D ; COMPARE WITH 1ST IN VAR JZ FOUND1 ; MATCH.. INX B ; INCREMENT POINTER JMP LOOP1 ; AND DO AGAIN ; IF FOUND, COMPARE NEXT CHAR FOUND1: INX B ;POINT TO NEXT LDAX B ;GET IT CMP E ;COMPARE WITH 2ND JNZ LOOP1 ;NO MATCH, SEARCH ON ... ; MATCH, GO AND LOOK FOR ZIP. ; GET ZIP-WORD, CONVERT TO BYTE INX B ;BUMP TABLEPOINTER MOV A,M ;GET ZIPCODE... ANI 00001111B ;MASK OFF MSBs RRC ; MOVE LOWER RRC ; 4 BITS RRC ; UP RRC MOV D,A ;STORE INX H ;INCREMENT POINTER MOV A,M ;GET 2nd BYTE OF ZIP ANI 00001111B ;MASK OFF MSBs ORA D ;REBUILD MOV E,A ;AND STORE ; SCAN CODE FOR BYTE LOOP2: LDAX B ; GET CHAR CPI ENDSTA ; END OF STATE? JZ ERROR2 ; YUP, WRONG ZIP CMP E ; COMPARE WITH ZIP RZ ; MATCH, GO HOME INX B ; INCREMENT POINTER JMP LOOP2 ; AND DO AGAIN ; ERRORHANDLERS ERROR1: INX H ;BUMP POINTER MVI M,'1' ;STORE DCX H ;ERRORCODE JMP MAINE ERROR2: MVI M,'2' ;IN POS4 DCX H ;OF VAR MAINE: MVI M,'R' ;AND NOW ERR DCX H MVI M,'R' DCX H MVI M,'E' DCX H RET ;GO HOME NOSTA EQU '1' WRZIP EQU '2' ; The following info is copied from the US Zipcode book. ; Small possessions and islands might not be on it ..... ZIPTAB: DW 'AL' DB 035H,036H,0FFH DW 'AK' DB 099H,0FFH DW 'AZ' DB 085H,086H,0FFH DW 'AR' DB 071H,072H,0FFH  DW 'CA' DB 090H,091H,092H,093H,094H,095H,096H,0FFH DW 'CO' DB 080H,081H,0FFH DW 'CT' DB 006H,0FFH DW 'DE' DB 019H,0FFH DW 'DC' DB 020H,022H,0FFH DW 'FL' DB 032H,033H,034H,0FFH DW 'GA' DB 030H,031H,0FFH DW 'HI' DB 096H,0FFH DW 'ID' DB 083H,0FFH DW 'IL' DB 060H,061H,062H,0FFH DW 'IN' DB 046H,047H,0FFH DW 'IA' DB 050H,051H,052H,0FFH DW 'KS' DB 066H,067H,0FFH DW 'KY' DB 040H,041H,042H,0FFH DW 'LA' DB 070H,071H,0FFH DW 'ME' DB 003H,004H,0FFH DW 'MD' DB 020H,021H,0FFH DW 'MA' DB 001H,002H,0FFH DW 'MI' DB 048H,049H,0FFH DW 'MN' DB 055H,056H,0FFH DW 'MS' DB 038H,039H,0FFH DW 'MO' DB 063H,064H,065H,0FFH DW 'MT' DB 059H,0FFH DW 'NE' DB 068H,069H,0FFH DW 'NV' DB 089H,0FFH DW 'NH' DB 003H,0FFH DW 'NJ' DB 007H,008H,0FFH DW 'NY' DB 010H,011H,012H,013H,014H,009H,0FFH DW 'NC' DB 027H,028H,0FFH DW 'ND' DB 058H,0FFH DW 'OH' DB 043H,044H,045H,0FFH DW 'OK' DB 073H,074H,0FFH DW 'OR' DB 097H,0FFH DW 'PA' DB 015H,016H,017H,018H,019H,0FFH DW 'PR' DB 000H,007H,008H,0FFH DW 'RI' DB 002H,0FFH DW 'SC' DB 029H,0FFH DW 'SD' DB 057H,0FFH DW 'TN' DB 037H,038H,0FFH DW 'TX' DB 075H,076H,077H,078H,079H,0FFH DW 'UT' DB 084H,0FFH DW 'VT' DB 005H,0FFH DW 'VA' DB 022H,023H,024H,0FFH DW 'WA' DB 097H,098H,099H,0FFH DW 'WV' DB 024H,025H,026H,0FFH DW 'WI' DB 053H,054H,0FFH DW 'WY' DB 082H,083H,0FFH DW 'VI' DB 000H,0FFH DW 'NM' DB 087H,088H,0FFH DB 0EEH; END OF TABLE end ;***************************************************************************** ; *** Flushleft.asm ***** ; THIS ROUTINE LEFT-JUSTIFIES A DBASE-STRING. ;***************************************************************************** ; SOME EQUATES BLANK EQU 020H ORG 0A5d7H ; save parameters start: mov b,m ;get length inx h ;point to start shld varpt ;save for later mvi c,00h ;init count mov d,h ;init movepointer mov e,l call spclp ;scan mov a,c ;get count cpi 00h ;if zero... rz ;..do nothing sta spaces ;save spacount for later mov d,h ;init movepointer mov e,l lhld varpt ;restore varpointer mov a,b ;get length sub c ;subtract spaces mov b,a ;b is now length of remaining string mvi c,00h ;zero c ; now move the string, c is counter move: LDAX D ;get first nonblank MOV M,A ;and store it inx h ;update regs inx d inr c mov a,c cmp b ;whole string moved? jnz move ;nope, go on mvi b,00h ;yep, zero count NOP NOP lda spaces ;get spacecount mov c,a ;and put into c mvrst: mvi m,blank ;blank inr b mov a,b cmp c ;done? rz ;yep INX H ;BUMP POINTER JMP MVRST ;NOPE ;scan var for leading spaces, if none, return ;c is count spclp: mov a,c ;get count cmp b ;compare with length jnc finivar ;reached end, all spaces mov a,m ;get char cpi blank ;space ? Rnz ;NOPE, GO HOME inr c ;yep, update counter inx h ;update varpointer jmp spclp ; and do again halt finivar: mvi c,00h ;zero count ret ;and return fdchr: inr c ;counter update ret spaces: db 00h varpt: dw 0000h end ;********* THIS CLEARS WINDOWS ON YOUR SCREEN FAST ********* ; ENTER WITH A CALL TO A STRING WHICH CONTAINS ; It is presently installed for three windows called A, B, C ; the coordinates are below. ; ---------------------------- ; ! A ! B ! ; ! ! ! ; ---------------------------- ; ! ! ; ! ! ; ! C ! ; !  ! ; ! ! ; ---------------------------- ; ; Enter the routine with any of the three characters in the ; called string. ; "A" clears window A, "AB" clears windows A & B etc. ; THIS ROUTINE PRESENTLY EVALUATES ONLY THE FIRST THREE CHARS ; IN THE STRING. ; IF THERE'S A DIFFERENT CHAR THAN A,B,C THEN NOTHING ; HAPPENS START EQU 0A628H ; SET THIS TO RIGHT START BDOS EQU 0005H TRUE EQU 0FFFFH FALSE EQU NOT TRUE TESTING EQU FALSE IF TESTING ORG 0100H LXI H, 6500H MVI M, 02H INX H MVI M, 'B' INX H MVI M, ' ' LXI H, 06500H CALL START - 01000H RST 7 ORG START - 1000H ENDIF IF NOT TESTING ORG START ENDIF MVI D,00H; RESET D ;EVALUATE COMMAND STRING FIRST, POINTER IS HL EVAL: MOV E,M ;LOAD LENGTH OF STRING INX H ;POINT TO FIRST SHLD VARPT ;AND SAVE IT ; D BECOMES COUNT EVALLP: MOV A,D ; GET COUNT FOR CHARACTERS CMP E ; STRING LENGTH EXHAUSTED ? JNC EEVAL ; YEP CPI 03H ; 3 EXHAUSTED? JNC EEVAL ; YEP ;NOW WORK ON THE CHAR MOV A,M ;GET IT CPI 020H ;IS IT A SPACE (END OF COMMAND)? JZ EEVAL ;YUP CPI 41H ;LESS THAN A? RC ;YEP, RETURN CPI 44H ;MORE THAN C? RNC ;YEP,RETURN ; ITS VALID, UPDATE COUNTERS INR D ;CHARCOUNT INX H ;AND POINTER JMP EVALLP EEVAL: MOV A,D ;GET COUNT CMP 00H ;ZERO? RZ ;YEP, GO HOME LHLD VARPT ;RESTORE VARPOINTER MOV A,D ;GET BOXCOUNT STA BOXES ; AND SAVE MVI A,00H ;CLEAR ... STA MAINC ;..MAIN COUNTER MAINLP: LDA MAINC ;GET COUNTER LXI H,BOXES ;POINT TO BOXES CMP M ;DONE ? RNC ;YEP, GO HOME LHLD VARPT ;RESTORE HL ;GET TYPE OF BOX MOV A,M ; HL IS VARPOINTER INX H ; INCREMENT SHLD VARPT ; AND STORE FOR NEXT ; TYPE IN ACCU, VARPT POINTS TO NEXT SUI 041H ;CHANGE CHAR TO NUMBER ; A=0, B=1, C=2 ; NOW POINT TO THE RIGHT TABLE LXI B,BOXA ; BC IS TABLEPOINTER MVI E,00H ; CLEAR COUNT INCLP: CMP E ; DONE? JZ DONE INX B! INX B! INX B! INX B! ;SKIP A FIELD INR E ;UPDATE LOOP JMP INCLP ;WE ARE AT THE RIGHT TABLE NOW ;POSITION CURSOR DONE: LDAX B ; GET X-CCORD ADI 20H ;ADD OFFSET STA XPOS ;STORE IN COMMAND STRING INX B ;BUMP POINTER LDAX B ; GET Y-COORD ADI 1FH ; ADD OFFSET-1 (FOR INR) STA YPOS ;STORE IT INX B ; BUMP POINTER ;LINE IS PREPARED FOR CURSORPOS MVI A,00H STA LOP1C ;RESET COUNTER LDAX B ;GET COLS STA COLS ;SAVE INX B ;BUMP LDAX B ;GET ROWS STA ROWS ;SAVE ;WE ARE AT THE START OF THE BOX NOW, LOCATIONS ; ARE INITIALIZED, NOW CLEAR THE BOX LOOP1: LDA LOP1C ;GET COUNTER LXI H,ROWS ;POINT TO ROWS CMP M ;DONE ? JNC ENDMAIN ;YEP, GO HOME LXI H,YPOS ;POINT TO COMMAND STRING INR M ;INC YPOS IN STRING ; COMMAND STRING INITIALIZED LXI D,POSXY ;POINT TO COMMAND CALL POSCURS ;POSITION CURSOR ; CURSOR POSITIONED MVI A,00H STA LOP2C ;RESET COUNTER LOOP2: LDA LOP2C ;GET COUNTER LXI H,COLS ;POINT TO COLUMS CMP M ;DONE ? JNC ENDLP1 ;YEP, DO NEXT LOOP MVI E,020H ;LOAD SPACE CALL CONOUT ;CONSOLE OUTPUT LXI H,LOP2C ;POINT TO COUNTER INR M ;INCREMENT IT JMP LOOP2 ENDLP1: LXI H,LOP1C ;POINT TO COUNTER INR M ;INCREMENT IT JMP LOOP1 ;AND DO AGAIN ENDMAIN: LXI H,MAINC ;POINT TO MAIN COUNTER INR M ;INCREMENT IT JMP MAINLP ; AND GO HOME SAVEREG: ;SAVE ALL REGS XTHL PUSH D PUSH B PUSH PSW PCHL RESTRC: POP H POP PSW POP B POP D XTHL RET POSCURS: MVI A, 00H ; CLEAR STA UPFLAG ; FLAGS STA LEFTFLAG ; This is a kludge to overcome a problem with the typestring-function ; in CP/M: It uses '$' as a terminator and doesn't print it. ; The following isn't pretty, but it works ... LDA YPOS ; TEST POSITION CPI 24H ;IS IT A $? JNZ NODOLY; NOPE DCR A ; Y-1 STA YPOS MVI A, 0FFH ;YEP SET UPFLAG STA UPFLAG NODOLY: LDA XPOS ; TEST XPOS CPI 24H; IS IT A$? JNZ OUTCURS ; NOPE NORMAL OUTPUT DCR A STA XPOS MVI A, 0FFH ; YEP, SET LEFTFLAG STA LEFTFLAG OUTCURS: CALL OUTSTR ; POSITION LDA UPFLAG CPI 0FFH ; SET? JNZ OUTC2 ;NOPE MVI E,0AH ;LINEFEED CALL CONOUT OUTC2: LDA LEFTFLAG CPI 0FFH ;SET RNZ ;NOPE, GO HOME MVI E, 0CH ;FORESPACE CALL CONOUT ;SEND IT RET ; AND GO HOME OUTSTR: CALL SAVEREG ; STRING ADDR IS IN DE MVI C,09 CALL BDOS CALL RESTRC RET CONOUT: CALL SAVEREG MVI C,06H ;DIRECT CONSOLE IO CALL BDOS ;CHARACTERS HAS TO BE IN E CALL RESTRC RET ;STORAGE AND PARAMETERS VARPT: DW 00H ; HL STORAGE BOXES: DB 00H ; HOW MANY ? MAINC: DB 00H ; COUNTER FOR MAIN LOOP LOP1C: DB 00H ; LOOP 1 COUNT LOP2C: DB 00H ; LOOP 2 COUNT ROWS: DB 00H ; TO BLANK COLS: DB 00H ; TO BLANK UPFLAG: DB 00H LEFTFLAG: DB 00H ; Coordinates for the three windows ; -X---Y---B--C- BOXA: DB 1 , 2 ,58, 3 BOXB: DB 60, 2 ,19, 3 BOXC: DB 1 , 6 ,78, 17 ; x/y positioning string on my tube, a SOROC 120 POSXY: DB 1BH,'=' YPOS: DB 00H; ADD 20H XPOS: DB 00H; ADD 20H DB '$' END ; ;***************************************************************************** ;* Check keyboard for keypress. * ;* * ;* This routine checks the console and returns the ASCII-character * ;* in the called variable. If no key was pressed, 00Hex is returned. * ;* This routine is useful to interrupt long printouts (for example). * ;***************************************************************************** ; bdos equ 0005h dicon equ 06h ; direct console input getstat equ 0ffh ; command for status org 43158; set this to your starting address start: mov a,m ;get length byte cpi 00h ;got to be at least 1 rz ; do nothing if empty string inx h ;bump varpointer push h ; and save it mvi c,dicon ;set up for direct console io mvi e,getstat ;and request status call bdos ;do the function call pop h ; restore varpointer ani 07fh ; get rid of hi order bit mov m,a ; A holds 00 for no char, ret ; or Ascii-code of char end AREACG CMD GRAFGEN CMD DBGRAF DOC DRAWBOX CMD DTUNE23 COM !"DTUNE23 COMz#$%&'()*+,-./012DTUNE23 DOC 3456MEMTIP DOC789PRINT MEM:;<SCREEN MEM=>?SUPERBAKCMD@ABDBFTOTXTCMD CDEFDBASM $$$GHIJKLMNOPQRSTUVDBASM $$${ 6*6*6*(%&& &&&&&#&(&$$$$$$$$$$$:6"5&5!!9s!! 9s#r!!9s#r!!9s#r!!9s#r!9^#V!9ʙ͋$!9^#V##^#V "@*!9^#V##^#V!͋$!<!F5s5*@^#V1!9`5*@^#Vͯ8s5!<M585 6͋568":!!*@\*:!!!9~‰!!9*@q 9ʉ!!9s#r! 9~#fo#s#r*:*ʟ!!9s! 9^#V!~¼!!.! 9^!*! 9! 9^#Vͻ!!9s!!9s#r! ! 9s!9~#fo#s#r+*@^#V!9͐eM!!9s#r!9~#fo#s#r+!9^#V!*ʆ!! 9^#V*@\!!9*@>N*@#^#V! 9^#V9! 9^#V*@#s#r!*@ s*@p !9^#V!&!9^#V!X %s NOT FOUND There are a maximum of %d records Processing There were %d bad end of file markers removed and %d records with illegal characters were rewritten!!9s#r! 9~#fo+s#r!eW! 9^#V! 9~#fo^!! 9^#V! 9~#fo^!! 9^#V!9~#fos!9~#fo#s#r+! 9^#V! 9~#fo^! dT! ! 9^#V!9~#fos!9~#fo#s#r+à! 9^#V^!*9ʲ! 9^#V^! 9ʲ! 9^#V^!9ʲ! ! 9^#Vs!9~#fo#s#r+!9^#V*:+!9^#VI!!<M585 6s5*@^#V!9~#foͯ885  6͋5ͅ8!*@^#V!9^#V͐e?!!!9^#V!!Q !9s!9^!y*‰!9^!Y*ʍ!! Unable to determine whether the end of file mark at record #%d is reasonable Is this the end of the file[Y/N]:!T!T! T!C T! T! T! T!@ T!I T!K T!k T!m T! T! T! T! TDBCLEAN is a utility program for cleaning up DBASE II files.Because of some bugs, DBASE will occasionally place invalid characters in the record status field or in the data field thatefffectively lock up the database. DBASE is also known to mis-count the records which causes problems with some of the com-mands. DBCLEAN attempts to repair these damaged DBASE files andthe interested user should see the source file DBCLEAN.C for details. To use DBCLEAN simply type DBCLEAN filename.dbf >>>>> Caution: DBCLEAN rewrites the database in place so it <<<<<>>>>> should only be used on a copy of your working dataset <<<<<>>>>> until you have a corrected version. <<<<<d (o&o&! 9^#V!^#V!9s#r! 9^#V! ^!* !F5s5!9^#V!^#V1!9! ! 9^#V!9^#V!^#V.!9^#V0(!ͭ!9s#rz" ! T!] T͋$!!9^#VM&!9s#r!*M !9^#V! !9^#V! 9^#VK+!!9s#r!9^#V))))!9~#fo^zʨ !9~#fo#s#r+r !9^#V!9^#V!s#r!9^#V!9^#V! s!!9^#V! s!F5 s5!9^#V1!9!!9^#V! s#r!9^#VInsufficient HEAP space to open DBASE file description blockCalled from db_open! 9^#V!^#V!9~#fo!9s#r!9^#V!9^#V!9^#V!^#VK+!9s#r!9^#V!9~#fo*!!9^#V!9~#fos! 9^#V! ^#V#!9^#V! s#r!9^#V!!9^#Vs!9^#V!*:!!!!9s! 9^#V!^#V!9~#fo!9s#r!9^#V!9^#V!9^#V!^#V.!9s#r!9~#fo*! 9^#V! ~#fo#s#r+! 9^#V#^#V!9^#V! ^#V͟S!!9!9^#V!^#V.!F5s5!9^#V!^#V1!9! 9^#V! ^#V!9^#V#s#r!!9^#V! s!9^#V!9^#V!9^#V!dʀ!!9!9^#V!^#V!9^#V+ͯ885  6`5'!9!9^#V!^#V!9~#foͯ8`5!9M585ͣ8K!9^#V#^#Vͯ8s5!9^#V!^#Vͯ8s5!9M5͋56s5!9^#V! ^#Vͽ8͋5 6͋5ͣ8K!!9M585ͅ8ʭ!9^#V!^#Vͯ8s5! 9M5͋56s5!9^#V! ^#Vͽ8͋5 685ͅ8ʭ!'!9^#V!e!!9!9^#V!^#V!9^#V#^#V!9~#foͯ885  6`5!!9s#r'!il!9!9^#V! 9M5s5!9^#V!^#V1!9`5;5‹!!9^#V! ^#V!9^#V\!9M58!9^#V!^#Vͯ8s5!9M585 6͋568!9^#V! s#r!9^#V! ^#V62*<#2|g}o|/g}/o^#V#DM!99`i|z2͏:}ͨ}}4|C!}C|4!}|\}|?>o&zo&|v}|>o&|o&z2͏:||/g}/o#z/W{/_èDM!>2))һ#}o|g :=2³}:=2³}DM!>)) =}}/o|/g#}|C4|g}o{_;||7g}o!{_;)6}}o|gN#F# N#F#z_{c##^#VBK^#Vz#yʃ###q#x~#~#fo}|>?o&}|>o&{_;|g}o³|g}o~# x!9~#!|!"! 9! 9^#V!=͗!9^#V"! 9! 9^#V!=͗*! 9^#V!9N#F`i~ʊ!`i#DM+^*ʇ!`!! !9N#F`i~! 9^#V`i#DM+^*!ä!!9N#F!PYDM`i *! 9^#V! ͋*!! 9^#V͋!#! 9^#V͋!9N#F! 9^#V͋dc!! 9^#V`iͫ͋dʈ!`i! 9N#F! ^#V`i^#V͐!9^#V!!9^#V`i~#fo#s#r+s!!! 9^#V! DM`i͞!`i DM"! 9N#F!!9s#r`i~ʯ! ^!f!!9s#r! ^0(!9~#fo s#r! ^!ʯ*! ^#Vs#r! ^#V"!! s!9^#V! 9N#F! ^!6! ^#V`i^#V>!9s#r!9^#V! ^#V! ^.*6!`in& s!! 9^#V!*o!`in&s!`is#r! s#r!`i~#€! ^#V!*ʹ!!9! ^.*! 9^#V! ^#V`is#r! ^#V! ^#V! s#r!`in& s! 9^#V`i~#fo#s#r+s!! 9N#F! ^#V!*>`i! s#r*|^*!9s#r*^#V"Å! ^#Vͭ!9s#rz…!! s#r/!`in& s!9^#V! s#r*|!e!""*DM!9^#V*"PY͞`i"!**͟,**>!9s#re!!9^#V*"`i 0123456789abcdef!9^#V"5! 9! 9^#V!y͗!*5s!9^#V*5#"5+s!!L9N#F!N9~#fo#s#r+^!F9s#rz4!F9^#V!%*#!!9s!!D9s#r! !B9s#r!!@9s#r!N9^#V^!F9s#r!-*>!!D9s#r!N9~#fo#s#r+^!F9s#r!F9^#V!0*Y!0!B9s#r!!>9s#r!N9~#fo#s#r+^!F9s#r!0Iʾ!F9^#V!9Jʾ!>9^#V! !F9~#fo!>9s#rd!F9^#V!.*3!!@9s#r!N9~#fo#s#r+^!F9s#r!0I3!F9^#V!9J3!@9^#V! !F9~#fo!@9s#r!F9^#V!l*ʄ!N9~#fo#s#r+^!F9s#r!:9!R9~#fos#rM5`53!F9^#V!d*ʺ!:9!R9~#fo##s#r++^#Vͽ8`53!F9^#V!e*!F9^#V!f*!F9^#V!g*!9!R9~#fos#r883!:9!R9~#fo##s#r++^#Vͯ8`5!F9^#V!9!!>9M5s5͛!9!49s#r!:9M585ͅ8ʷ!9! !>9M5ͮ5s55!9!49s#r!-!69~#fo+s#rs!9! !>9M5s55!9!49s#r!9! !>9M5s5͛!9!49s#r!9!!>9M5s5͛!9!49s#r!:9M58!49s#rU4!89s#r.!F9^#V!e*a!d!!B9^#V!*{!Ã!B9^#V!9! 9888!9! 9!49s#rU4!89s#r!!@9s#r.!:9M58!F9s#r!F9^#V!9!69s#rsio>dduxs)eKfKc!9!49~#fo>!89s#r!89^#V!@9~#foeQ!@9^#V!89s#r!D9~#ʌ!>9~#fo+s#r#!89~#foeʌ!B9^#V`i[!!69s#ré!69~#fo#s#r!49^#V~!69^#V!@9~#fod!49~#fo#s#r+^`iÚ!D9~# !>9~#fo+s#r#!89~#foe ! `i1!F9^#V`iã! 9N#F`iͽ8s5! 9M5͋53787^!9~#fo+s#rs!9`iͽ8͟5M56`5;5A!9^#V!9N#F! 9M585ͅ8[ ! 9M58!9s#r! 9! 9M585Ͱ68556`5`iͽ8s5!9M5͋5378)!9~#fo7^!9~#fo+s#rs! 9`iͽ8͟5M56`5!9^#V!9M5s55!98*J" ͖ *DM*o&ʹ o&**+++*DM*!9N#F#^#Vkb6#> 6 #= >6#=  : >! AU![ !@!aU!{U!`w# .6!O!!\!w#!{o|g O!\!w#@!!!|a{ !9^#V*y !9}|ڇ!*y "y |!LF2=:FOWF2=:FRbF2=:FCpF2=2 =:FM{F2=:FI†F2 =:FX“F>2=:FZŸF2 =:FP7: =<2 =:F7G[F0FAF:FðFO!~6GF#~ FFBx+#F~F2=G2=!!!!ͻ3!:o&!s!f$"!!!DM!"H"*H"dS$`i^! *±"`i^! *ʹ"`i#DMÕ"`i^zS$`i^!>*"!!9s#r"`i^!<*$!!9s#r`i#DM^! *#`i^! *#"`i!9s#r`i#DM~\#`i^! *J#`i^! *Y#!`i#DM+s\#$#!9^#V0(!9~#ʎ#!!9^#V-&!9s#rç#!!9^#VM&!9s#r!9^#V!*$!g$!04!9^#V!͛4!$!͛4!U4!!.! ͋$P$`i*H"#"H"+)!s#r`i#DM~P$`i^! *>$`i^! *M$!`i#DM+sP$$È"!!*H"F͋$Can't open file for redirection: !9~#ʥ$!$͕3͂ A:$$$.SUB!"!!sG@>X==ʮI!I!>êI_!= I II~=w4{ I> H~II7ȷ!!JOC@@J> NG!'JC{GDISK FULLcon:CON:lst:LST:prn:PRN:pun:PUN:rdr:RDR:! 9^#V!! 9^#VM&!! 9s#r!!9s#rÌ&! 9~#fos#r!9~#fo#s#r!9^#V! dʶ&! 9^#V!^#V!$*&k&!"!!DM&`iDM`i~#&!9^#V`i^#V3&&! ^#V!9s#r!9^#V!#!9s#r!9^#V!J'!9^#V^! 9^#VszJ'!"!!9^#V!ʁ'!9^#V#^! 9^#V#sz'!"!! ^#V! 9^#V!s#r!9^#V##^! 9^#V##s!9^#V###^! 9^#V###s!6*! 9^#V!s#r! 9^#V!9^#V!9^#V!9^#V!9^#V!^#V! 9!d'(!!9^#V!9^#V!dU(!9^#V! e_(!"!!9^#V)))DM! ^#V! ^#V!9s#r!! s! s! s`is!$! s#r!9^#V!$DM(`i&DM`i%͞(!% ^z((!"!! 9^#V )!"!! 9^#V!%)!͓ !͓ *h)! 9^#V![)!͓ *e)!"!È)! 9^#V!*ʈ)!"!!!! s#r!# s!$ s`i!9^#V!s#r! 9^#V!#!% s!)!*!9^#V!s#r)!)!9^#V!s#r!!! 9^#V!%s!!9N#F!͓ !!% s!!ɳ$+z-W.NLSEEK_DN.LSTEN.UTOXGOEM.LLDPEN.LLIS9PDN.LAD)QEN.LPOPDM.LDVEM.XTOIOF(NDB_SEEC!N.19C!CN.20FNDB_REAC!YN.21CdM.RMC!vN.22FrLAPUTC_C!N.23!9^#V!dp+!9^#V! ez+!"!!9^#V)))DM! 9^#V! 9^#V! ^#V`i^)?*^#V!DM!9^#V!9s#r!9^#V!$~0,!9^#V!$^!>DM!9~#fo͟,!9^#VBK!9^#V! 9^#V,0,!!9^#V`i>ͫ!9s#rzʛ,!9^#V!9^#V`i! 9^#VD3!9s#rzʛ,!9^#V!9~#fo>.PY!9^#V!.PYDM`i!9~#fo͞,!9^#V`i>!9^#V`i! 9^#V,,`i!9^#V!9N#F!!͓ !!͓ "|"-!! 9^#V!$ ^!!9^#Vͻ3!$ ^! 9~#fo!$ szv-`i!~#fo#s#r!:H*o&|.!}2G*!}2I*}2H*!G*! ͓ ! !͓ :I*o&*-!}2H*!! :H*o&#}2H*G*#s! :H*o&#}2H*G*#s!"I+:H*o&DM! 9~#foe".! 9^#VBK*I+G*!9^#Vͻ3`i*I+"I+`i:H*o&>}2H*`i! 9N#F!!9s#rÀ.!9~#fo#s#r!9^#V!9~#fodʶ.! 9^#V͓ `i#DM+s!*¶.q.!9^#Vɳ$7/A1A1!9^#V!d.!9^#V! e.!"!!9^#V)))DM! 9^#V! 9^#V! ^#V! ^).^#V!DM!9^#V!9s#r!9^#V!$~ʮ/!9^#V!$^!>DM!9~#fo͟ʐ/!9^#VBK!9^#V! 9^#Vq0ʮ/!!9^#V`i>ͫ!9s#rz0!9^#V!9^#V`i! 9^#VL3!9s#rz0!9^#V!9~#fo>.PY!9^#V!.PYDM`i!9~#fo͞h0!9^#V`i>!9^#V`i! 9^#Vq0h0`i!9^#V!9N#F!!͓ !!͓ "*¬0**0!"!!!30*|0!! 9^#V! 9^#V!$ ^!ͻ3!"͓ "| 1!!$ ^! 9~#fo!$ sz=1`i!~#fo#s#r!!9N#F!!9s#rj1!9~#fo#s#r!9^#V!9~#fod1`i#DM+^!9s#r!9^#V! *ʰ1! !9^#V͓ !9^#V!9^#V͓ [1!9^#V!9^#V!d 2!9^#V! e 2!9^#V)))^z2!"F5!9^#V)))^#VBK!9^#Vü2!͓ *[2!"F5!#͓ !!$ s! 9!! ^#Vͯ885͂6s5!$ ^ͽ8͋5 6͟5M5 6`52!"F5i:2n222!!# s! 9M585ͅ8 3!!! s#r!$ s!"F5! 9M58!$ s! 9M585Ͱ68!! s#r! 9M5!Q3"*!"*Š3*!4|3#4*+"}R3o&"*!9!.9^#V !9!͓ ! 9F+N+V+^+~+ngx3w# 3!9^#V#N#F#nx3s# 3!9^#V#~#fox4 44# 4!*4!}!}!9^#V#~#foxR4~R4# A4!9~#foj4#a4}!9^#V#^#V#N#F4!9^#V#^#V#N#FA4!9^#V#~#foxR4~ʼ4# í4A4!9^#V#^#V#N#Fí4!9^#V#n~44#4!|!9^#V#n5#5x4 +~54IY*y#"y*|ʦZ*!*DQ5!*Bw#w#w#w*B~#~#~#~" 5*BV+^+V+^* 5" 5*Ds#r#s#r* 5*D*B"D"B*B>w#´5*B~8#5t8=ɯ<*B*D###555555+5*B*D#6*B*D#*6*B*D#?6*B*D#T6*B*D#i6*B~/w#y6*D~?G*B^#V#~#fo))Ҟ6#–6DM*Bs#r#q#p*D~?W*B###~6~w+667~w+66~#6Oñ5*B,56y2*5*D456:*52*5f7,5*Bw#"7:*55*B,56y2*5*D456f705*Bw#U7:*55!05w#l7> 2+5!,5~w#}7O05!45#’7y­7!,54!+55w7!+557!,5~w#º7O05!45#7y­7á705!45#7*D45~#7*B05~# 8!,5w#8> 2+5!,5~w#*8U8,5!45#>8U8I8!+55$8*B,5w#d858!5t8!<58t8588t85t885t8t88*Bs#r#6#6*Bs#r#z86#6*B^#V$8*B,5w#d858!5t8!..documentation for dbclean.com DBCLEAN This program removes extraneous ^Z 's from a dbase database. Occassionall problem hav arise whil usin dBase wher dBas insert prematur ^ (en o file marker Th symptom o thi malad ar displa structur show (eg 1 records bu listing the database only produces 7 records. Fix the database by typing: A> dbclean b:filename.dbf In a matter of minutes your database will be fixed. 1000 'DBCLINIC.BAS IS A UTILITY PROGRAM FOR UPDATING THE FILE HEADER IN .DBF 1010 'FILES CREATED UNDER DBASEII. IT ALSO WILL GET A CORRECT RECORD COUNT 1020 'FOR .DBF OR .TXT FILES AND EVEN A RECORD LENGTH FOR .TXT FILES. THIS 1030 'VERSION IS SET UP FOR A 80-COLUMN BY 24-LINE SCREEN AND TO RECOGNIZE 1040 'DRIVES A: THRU D: ONLY (SEE LINE 1230.). 1050 ' 1060 '====================== STANDARD 'TRANSFORM' EQUATES ========================= 1070 ' 1080 DEFINT A-Z: WIDTH 79: WIDTH LPRINT 131 1090 ZERO=0: ONE=1: TWO=2: THREE=3: FOUR=4: FIVE=5: SIX=6: SEVEN=7: EIGHT=8: NINE=9 1100 AFFIRM=ONE: NEGATIVE=TWO: DEFAULT=THREE: FALSE=ZERO: TRUE=NOT(FALSE) 1110 OFFSET=32: FILEERR=53 1120 BACKSPACE$=CHR$(EIGHT): BELL$=CHR$(SEVEN): CARRIAGERETURN$=CHR$(13) 1130 COLON$=":": COMMA$=",": DELETEKEY$=CHR$(127): ESCAPEKEY$=CHR$(27) 1140 LINEFEED$=CHR$(10): NLLSTR$="": ONESPACE$=" ": PERIOD$=".": QUOTE$=CHR$(34) 1150 SEMICOLON$=";": SPACEBAR$=CHR$(32): TABKEY$=CHR$(NINE) 1160 DEF FNPR(N)=N>31 AND N<127 'TESTS FOR ALL PRINTABLE ASCII CHARACTERS 1170 DEF FNAL(N)=N>96 AND N<123 'TESTS FOR LOWER-CASE ASCII CHARACTERS ONLY 1180 DEF FNAU(N)=N>64 AND N<91 'TESTS FOR UPPER-CASE ASCII CHARACTERS ONLY 1190 DEF FNNU(N)=N>47 AND N<58 'TESTS FOR NUMERIC ASCII CHARACTERS ONLY 1200 ' 1210 ' 1220 DIM PART$(TWO),FLD$(32) 1230 DEF FNDV(N)=N>64 AND N<69 'ASCII CODE RANGE OF ACCEPTABLE DRIVES (A-D) 1240 CLEARSCREEN$=CHR$(26) 'THIS MAY BE DIFFERENT FOR YOUR TERMINAL 1250 DBFHEADER=520 'NUMBER OF CHARACTERS (BYTES) IN .DBF HEADER 1260 PASTENDERR=62: NOFILE=FALSE 1270 DATEFORM$="mm/dd/yy" 1280 ' 1290 ON ERROR GOTO 6580 1300 FOR SCROLL=ONE TO 40: PRINT: NEXT SCROLL 1310 ' REPEAT [MAINLINE PROGRAM STARTS HERE] 1320 ' REPEAT 1330 PRINT " * * * * * * * * * * * * * * *" 1340 PRINT " * DICK'S DBASE CLINIC *" 1350 PRINT " * Version 2.0 9/11/84 *" 1360 PRINT " * * * * * * * * * * * * * * *" 1370 PRINT: PRINT: PRINT 1380 PRINT " Copyright 1984 by Dick Bollinger. Permission granted for private" 1390 PRINT " use only. Not to be sold in any form for commercial profit." 1400 PRINT: PRINT: PRINT 1410 PRINT " THIS PROGRAM ACCEPTS ONLY STANDARD DATABASE" 1420 PRINT " (DBF) AND SDF (TXT) FILENAMES CREATED UNDER" 1430 PRINT " ASHTON-TATE'S DBASEII (TM). ALWAYS ENTER A" 1440 PRINT " COMPLETE FILENAME: (E.G., A:MYFILE.DBF)" 1450 PRINT: PRINT 1460 PRINT " < < AFTER A DISK CHANGE, PRESS RETURN KEY FOR RESET > >" 1470 PRINT: PRINT 1480 PRINT " ENTER FILENAME (DIR=DIRECTORY): "; 1490 ' REPEAT 1500 GOSUB 6800 1510 IF NOT (LEN(DUMMY$)>ONE) THEN 1540 1520 DRV$=LEFT$(DUMMY$,TWO) 1530 DRV=ASC(LEFT$(DRV$,ONE)) 1540 ' ENDIF 1550 IF NOT (DUMMY$=NLLSTR$) THEN 1590 1560 FILEOK=FALSE 1570 RESET 1580 GOTO 1830 1590 IF NOT (LEFT$(DUMMY$,TWO)="DI") THEN 1640 1600 FILEOK=FALSE 1610 GOSUB 5840 1620 PRINT: PRINT: GOTO 1460 1630 GOTO 1830 1640 IF NOT (FNDV(DRV)=FALSE OR MID$(DRV$,TWO,TWO)<>COLON$) THEN 1720 1650 FILEOK=FALSE 1660 NASTY$=" Specify Disk Drive! " 1670 PRINT NASTY$;BELL$; 1680 ENTRYLEN=LEN(DUMMY$) 1690 GOSUB 5740 1700 GOSUB 5790 1710 GOTO 1830 1720 IF NOT (RIGHT$(DUMMY$,FOUR)<>".DBF" AND RIGHT$(DUMMY$,FOUR)<>".TXT") THEN 1800 1730 FILEOK=FALSE 1740 NASTY$=" Invalid File Type! " 1750 PRINT NASTY$;BELL$; 1760 ENTRYLEN=LEN(DUMMY$) 1770 GOSUB 5740 1780 GOSUB 5790 1790 GOTO 1820 1800 ' ELSE 1810 FILEOK=TRUE 1820 ' ENDIF 1830 ' ENDIF 1840 IF NOT (FILEOK=TRUE) THEN 1490 1850 FILETRY$=DUMMY$ 1860 EXT$=RIGHT$(FILETRY$,THREE) 1870 FILEFOUND=FALSE: NOFILE=FALSE 1880 OPEN "I",# ONE,FILETRY$ 1890 IF NOT (NOFILE<>TRUE) THEN 1920 1900 FILEFOUND=TRUE 1910 GOTO 1970 1920 ' ELSE 1930 PRINT: PRINT: PRINT 1940 PRINT " * * * ERROR: Data File Entered Was Not Found! - Check Spelling!" 1950 PRINT BELL$: PRINT: PRINT: PRINT: PRINT 1960 GOSUB 5740 1970 ' ENDIF 1980 CLOSE # ONE 1990 PRINT CLEARSCREEN$: PRINT 2000 IF NOT (FILEFOUND=TRUE) THEN 1320 2010 ' REPEAT 2020 CLOSE: MODE=ZERO 2030 PRINT CLEARSCREEN$;" ";FILETRY$ 2040 PRINT: PRINT: PRINT 2050 PRINT " < < < M A I N M E N U > > >" 2060 PRINT: PRINT 2070 PRINT " WARD [A] - DISPLAY FILE RECORD LENGTH (DBF OR TXT FILE)" 2080 PRINT 2090 PRINT " WARD [B] - DISPLAY FULL FILE STRUCTURE (DBF FILE ONLY)" 2100 PRINT 2110 PRINT " WARD [C] - COUNT # OF RECORDS IN FILE (DBF OR TXT FILE)" 2120 PRINT 2130 PRINT " WARD [D] - DISPLAY/CHANGE RECORD COUNT (DBF FILE ONLY)" 2140 PRINT 2150 PRINT " WARD [E] - DISPLAY/CHANGE ENTRY DATE (DBF FILE ONLY)" 2160 PRINT: PRINT 2170 PRINT " [F] = SELECT ANOTHER FILENAME [X] = EXIT TO CP/M" 2180 PRINT: PRINT 2190 PRINT " YOUR CHOICE (A-F,X): [ ]"; BACKSPACE$; BACKSPACE$; 2200 VALID=FALSE 2210 ' REPEAT 2220 DUMMY$=INKEY$ 2230 IF NOT (LEN(DUMMY$)=ONE) THEN 2600 2240 IF NOT (FNPR(ASC(DUMMY$))=TRUE) THEN 2590 2250 J=ASC(DUMMY$) 2260 IF NOT (FNAL(ASC(DUMMY$))=TRUE) THEN 2280 2270 DUMMY$=CHR$(J-OFFSET) 2280 ' ENDIF 2290 IF NOT (DUMMY$="F") THEN 2330 2300 NEWFILE=TRUE: VALID=TRUE 2310 MODE=ZERO: PRINT "F] "; 2320 GOTO 2580 2330 IF NOT (DUMMY$="X") THEN 2370 2340 EXIT=TRUE: VALID=TRUE 2350 MODE=ZERO: PRINT "X] "; 2360 GOTO 2570 2370 ' ELSE 2380 NEWFILE=FALSE: EXIT=FALSE 2390 MODE=ASC(DUMMY$)-64 2400 IF NOT (MODE>FIVE OR MODEZERO AND MODE ZERO) THEN 2980 2960 PRINT " (This Total INCLUDES a Single SPACE Record Delimiter)" 2970 GOTO 3040 2980 IF NOT (EXT$="TXT" AND RECLEN<>ZERO) THEN 3010 2990 PRINT " (This Total DOES NOT Include CR/LF Record Delimiter)" 3000 GOTO 3030 3010 ' ELSE 3020 PRINT 3030 ' ENDIF 3040 ' ENDIF 3050 GOTO 5190 3060 ' WARD-B 3070 GOSUB 5320 3080 CLOSE # ONE 3090 OPEN "R",# ONE,FILETRY$,THREE 3100 FIELD # ONE, ONE AS SPACER$, TWO AS FILSIZE$ 3110 GET # ONE,ONE 3120 FILSIZE=CVI(FILSIZE$) 3130 CLOSE # ONE 3140 OPEN "R",# ONE,FILETRY$,EIGHT 3150 FIELD #ONE,EIGHT AS HDR$ 3160 HDR=ONE 3170 FOR FLDNO=ONE TO 32 3180 FOR PARTNO=ONE TO TWO 3190 HDR=HDR+ONE 3200 GET #ONE,HDR 3210 PART$(PARTNO)=HDR$ 3220 NEXT PARTNO 3230 FLD$(FLDNO)=PART$(ONE)+PART$(TWO) 3240 NEXT FLDNO 3250 CLOSE # ONE 3260 PRINT CLEARSCREEN$ 3270 PRINT TAB(22);"STRUCTURE FOR FILE: ";FILETRY$ 3280 ARGU=FILSIZE: FMT=FIVE 3290 GOSUB 6350 3300 FILSIZE$=ARGU$ 3310 PRINT TAB(22);"NUMBER OF RECORDS: ";FILSIZE$ 3320 PRINT TAB(22);"DATE OF LAST UPDATE: ";DATE$ 3330 PRINT TAB(22);"PRIMARY USE DATABASE" 3340 PRINT TAB(22);"FLD NAME TYPE WIDTH DEC" 3350 FLD=ONE: NOMORE=FALSE 3360 ' REPEAT 3370 IF NOT (LEFT$(FLD$(FLD),ONE)<>CHR$(13)) THEN 3690 3380 IF NOT (FLD=32) THEN 3400 3390 NOMORE=TRUE 3400 ' ENDIF 3410 ARGU=FLD: FMT=THREE 3420 GOSUB 6350 3430 FLD1$=ARGU$ 3440 NAM$=LEFT$(FLD$(FLD),10) 3450 TYP$=MID$(FLD$(FLD),12,ONE) 3460 WID=ASC(MID$(FLD$(FLD),13,ONE)) 3470 ARGU=WID: FMT=THREE 3480 GOSUB 6350 3490 WID$=ARGU$ 3500 DEC=ASC(RIGHT$(FLD$(FLD),ONE)) 3510 IF NOT (DEC>ZERO) THEN 3560 3520 ARGU=DEC: FMT=THREE 3530 GOSUB 6350 3540 DEC$=ARGU$ 3550 GOTO 3580 3560 ' ELSE 3570 DEC$=NLLSTR$ 3580 ' ENDIF 3590 PRINT TAB(22);FLD1$; TAB(30);NAM$; TAB(43);TYP$; TAB(48);WID$; TAB(55);DEC$ 3600 FLD=FLD+ONE 3610 IF NOT (FLD=13 OR FLD=31) THEN 3670 3620 PRINT TAB(22);"[more...]";BELL$; 3630 ' REPEAT 3640 DMY$=INKEY$ 3650 IF NOT (LEN(DMY$)=ONE) THEN 3630 3660 PRINT CARRIAGERETURN$; 3670 ' ENDIF 3680 GOTO 3710 3690 ' ELSE 3700 NOMORE=TRUE 3710 ' ENDIF 3720 IF NOT (NOMORE=TRUE) THEN 3360 3730 IF NOT (FLD>ONE) THEN 3790 3740 ARGU=RECLEN: FMT=FIVE 3750 GOSUB 6350 3760 RECLEN$=ARGU$ 3770 PRINT TAB(22);"** TOTAL ** ";RECLEN$ 3780 GOTO 3820 3790 ' ELSE 3800 PRINT 3810 PRINT " * * ERROR: File Structure of ";FILETRY$;" Is Vacant!!" 3820 ' ENDIF 3830 GOTO 5190 3840 ' WARD-C 3850 ANSWER=ZERO: DISPLCNT=ZERO 3860 IF NOT (RECLEN>ZERO) THEN 4320 3870 IF NOT (EXT$="TXT") THEN 3890 3880 RECLEN=RECLEN+TWO 3890 ' ENDIF 3900 FACTOR#=128/RECLEN 3910 OPEN "R",# ONE,FILETRY$,128 3920 FIELD # ONE, 128 AS DUMMY1$ 3930 FILE=ONE 3940 GOSUB 7060 3950 IF NOT (ANSWER<32767) THEN 4300 3960 IF NOT (NORECORDS=FALSE) THEN 4270 3970 PULLBACK=16 3980 OKAYREC=ANSWER-PULLBACK 3990 IF NOT (OKAYREC<=ZERO) THEN 4010 4000 OKAYREC=ONE 4010 ' ENDIF 4020 EOFLOC=ZERO 4030 WHILE EOFLOC=ZERO AND OKAYREC<=ANSWER 4040 GET # ONE,OKAYREC 4050 A$=DUMMY1$ 4060 EOFLOC=INSTR(A$,CHR$(26)) 4070 IF NOT (EOFLOC=ZERO) THEN 4100 4080 OKAYREC=OKAYREC+ONE 4090 GOTO 4120 4100 ' ELSE 4110 OKAYREC=OKAYREC-ONE 4120 ' ENDIF 4130 WEND 4140 FILENGTH#=(OKAYREC*128)+EOFLOC 4150 IF NOT (EXT$="DBF") THEN 4180 4160 DATALEN#=FILENGTH#-DBFHEADER 4170 GOTO 4200 4180 ' ELSE 4190 DATALEN#=FILENGTH# 4200 ' ENDIF 4210 RECVALUE#=DATALEN#/RECLEN 4220 DISPLCNT=CINT(RECVALUE#) 4230 IF NOT (EXT$="TXT") THEN 4250 4240 RECLEN=RECLEN-TWO 4250 ' ENDIF 4260 GOTO 4290 4270 ' ELSE 4280 DISPLCNT=ZERO 4290 ' ENDIF 4300 ' ENDIF 4310 CLOSE # ONE 4320 ' ENDIF 4330 PRINT CLEARSCREEN$ 4340 PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT 4350 IF NOT (DISPLCNT> NO << RECORDS IN ";FILETRY$ 4370 GOTO 4460 4380 IF NOT (ANSWER=32767) THEN 4430 4390 RECVALUE#=ANSWER*FACTOR# 4400 DISPLCNT=CINT(RECVALUE#) 4410 PRINT " LIMITED OUT AT ";DISPLCNT;" RECORDS - PROBABLY MORE!!" 4420 GOTO 4450  4430 ' ELSE 4440 PRINT " FILE ";FILETRY$;" CONTAINS ";DISPLCNT;" RECORDS, BY COUNT" 4450 ' ENDIF 4460 ' ENDIF 4470 GOTO 5190 4480 ' WARD-D 4490 OPEN "R",# ONE,FILETRY$,THREE 4500 FIELD # ONE, ONE AS SPACER$, TWO AS FILSIZE$ 4510 GET # ONE,ONE 4520 FILSIZE=CVI(FILSIZE$) 4530 PRINT CLEARSCREEN$ 4540 PRINT: PRINT: PRINT: PRINT: PRINT: PRINT 4550 PRINT " FILE HEADER OF ";FILETRY$;" SHOWS ";FILSIZE;" RECORDS" 4560 PRINT: PRINT 4570 PRINT " ENTER RECORD COUNT CHANGE: "; 4580 ' REPEAT 4590 ACCUM=ZERO 4600 GOSUB 7210 4610 IF NOT (NUMCOUNT=ZERO) THEN 4680 4620 NASTY$=" I Must Have A Number!! " 4630 PRINT NASTY$;BELL$; 4640 ENTRYLEN=ZERO 4650 GOSUB 5740 4660 GOSUB 5790 4670 GOTO 4790 4680 IF NOT (VAL(DUMMY$)>32767) THEN 4760 4690 NASTY$=" Limited to 32,767 Records!! " 4700 PRINT NASTY$;BELL$; 4710 ENTRYLEN=LEN(DUMMY$) 4720 NUMCOUNT=ZERO 4730 GOSUB 5740 4740 GOSUB 5790 4750 GOTO 4780 4760 ' ELSE 4770 ACCUM=VAL(DUMMY$) 4780 ' ENDIF 4790 ' ENDIF 4800 IF NOT (NUMCOUNT>ZERO) THEN 4580 4810 LSET FILSIZE$=MKI$(ACCUM) 4820 PUT # ONE,ONE 4830 GET # ONE,ONE 4840 CLOSE # ONE 4850 PRINT: PRINT: PRINT 4860 FILSIZE=CVI(FILSIZE$) 4870 PRINT " FILE HEADER UPDATED TO ";FILSIZE;" RECORDS" 4880 GOTO 5190 4890 ' WARD-E 4900 GOSUB 5320 4910 PRINT CLEARSCREEN$ 4920 PRINT: PRINT: PRINT: PRINT: PRINT: PRINT 4930 PRINT " FILE ";FILETRY$;" LAST ENTRY DATE IS: ";DATE$ 4940 PRINT: PRINT 4950 PRINT " ENTER 'LAST ENTRY' DATE CHANGE: ";DATEFORM$;STRING$(EIGHT,EIGHT); 4960 ENTRIES=ZERO: DUMMY$=NLLSTR$ 4970 WHILE ENTRIES<>NINE 4980 GOSUB 5560 4990 DUMMY$=DUMMY$+DIGITS$ 5000 ENTRIES=ENTRIES+THREE 5010 PRINT CHR$(12); 5020 WEND 5030 IF NOT (DUMMY$="000000") THEN 5060 5040 DATE$=CHR$(0)+CHR$(0)+CHR$(0) 5050 GOTO 5110 5060 ' ELSE 5070 MON$=CHR$(VAL(LEFT$(DUMMY$,TWO))) 5080 DAY$=CHR$(VAL(MID$(DUMMY$,THREE,TWO))) 5090 YEAR$=CHR$(VAL(RIGHT$(DUMMY$,TWO))) 5100 DATE$=MON$+DAY$+YEAR$ 5110 ' ENDIF 5120 OPEN "R",# ONE,FILETRY$,SIX 5130 FIELD # ONE, THREE AS SPACER$, THREE AS FILDATE$ 5140 LSET SPACER$=SPACER1$: LSET FILDATE$=DATE$ 5150 PUT # ONE,ONE: CLOSE # ONE 5160 GOSUB 5320 5170 PRINT: PRINT: PRINT 5180 PRINT " FILE HEADER UPDATED TO ";DATE$;" 'LAST ENTRY' DATE" 5190 ' ENDGOTO 5200 PRINT: PRINT: PRINT 5210 PRINT " < < Press Any Key To Return To Main Menu > >" 5220 PRINT 5230 ' REPEAT 5240 DUMMY$=INKEY$ 5250 IF NOT (LEN(DUMMY$)=ONE) THEN 5230 5260 ' ENDIF 5270 IF NOT (NEWFILE=TRUE OR EXIT=TRUE) THEN 2010 5280 PRINT CLEARSCREEN$: PRINT 5290 IF NOT (EXIT=TRUE) THEN 1310 5300 SYSTEM 5310 ' [END OF MAINLINE PROGRAM] 5320 ' GET_FILE_DATE 5330 OPEN "R",# ONE,FILETRY$,SIX 5340 FIELD # ONE,THREE AS SPACER$,THREE AS FILDATE$ 5350 GET # ONE, ONE 5360 SPACER1$=SPACER$: DATE$=FILDATE$: CLOSE # ONE 5370 IF NOT (DATE$=NLLSTR$) THEN 5400 5380 DATE$="00/00/00" 5390 GOTO 5540 5400 ' ELSE 5410 MON=ASC(LEFT$(DATE$,ONE)) 5420 DAY=ASC(MID$(DATE$,TWO,ONE)) 5430 YEAR=ASC(RIGHT$(DATE$,ONE)) 5440 ARGU=MON: FMT=TWO 5450 GOSUB 6350 5460 MON$=ARGU$+"/" 5470 ARGU=DAY: FMT=TWO 5480 GOSUB 6350 5490 DAY$=ARGU$+"/" 5500 ARGU=YEAR 5510 GOSUB 6350 5520 YEAR$=ARGU$ 5530 DATE$=MON$+DAY$+YEAR$ 5540 ' ENDIF 5550 RETURN 5560 ' GET_TWO_DIGITS 5570 DIGITS$=NLLSTR$: DIGIT$=NLLSTR$ 5580 ' REPEAT 5590 DIGIT$=INKEY$ 5600 IF NOT (LEN(DIGIT$)=ONE) THEN 5710 5610 IF NOT (ASC(DIGIT$)>47 AND ASC(DIGIT$)<58) THEN 5650 5620 DIGITS$=DIGITS$+DIGIT$ 5630 PRINT DIGIT$; 5640 GOTO 5700 5650 IF NOT (ASC(DIGIT$)=EIGHT) THEN 5690 5660 PRINT STRING$(ENTRIES+LEN(DIGITS$),EIGHT); 5670 PRINT CHR$(24);DATEFORM$;STRING$(EIGHT,EIGHT); 5680 ENTRIES=ZERO: DUMMY$=NLLSTR$: DIGITS$=NLLSTR$: DIGIT$=NLLSTR$ 5690 ' ENDIF 5700 ' ENDIF 5710 ' ENDIF 5720 IF NOT (LEN(DIGITS$)=TWO) THEN 5580 5730 RETURN 5740 ' NASTYTIMER 5750 FOR TIMER=ONE TO 400 5760 NOP=ZERO 5770 NEXT TIMER 5780 RETURN 5790 ' NASTYCLEAR 5800 FOR CLEARING=ONE TO LEN(NASTY$)+ENTRYLEN 5810 PRINT BACKSPACE$;ONESPACE$;BACKSPACE$; 5820 NEXT CLEARING  5830 RETURN 5840 ' GET_DIRECTORY 5850 PRINT CLEARSCREEN$: PRINT: PRINT 5860 PRINT " WHICH DRIVE? [ ]";BACKSPACE$;BACKSPACE$; 5870 DUMMY$=NLLSTR$: OKAY=FALSE 5880 ' REPEAT 5890 DUMMY$=INKEY$ 5900 IF NOT (LEN(DUMMY$)=ONE) THEN 6030 5910 IF NOT (FNPR(ASC(DUMMY$))=TRUE) THEN 6020 5920 J=ASC(DUMMY$) 5930 IF NOT (FNAL(J)=TRUE) THEN 5950 5940 DUMMY$=CHR$(J-OFFSET) 5950 ' ENDIF 5960 IF NOT (FNDV(ASC(DUMMY$))=TRUE) THEN 5990 5970 OKAY=TRUE: PRINT DUMMY$;"] " 5980 GOTO 6010 5990 ' ELSE 6000 PRINT BELL$; 6010 ' ENDIF 6020 ' ENDIF 6030 ' ENDIF 6040 IF NOT (OKAY=TRUE) THEN 5880 6050 DRV$=DUMMY$+COLON$ 6060 PRINT: PRINT 6070 PRINT " [1] = ALL FILES [2] = *.DBF FILES ONLY [3] = *.TXT FILES ONLY" 6080 PRINT: PRINT 6090 PRINT " CHOICE: [ ]";BACKSPACE$;BACKSPACE$; 6100 DUMMY=ZERO 6110 ' REPEAT 6120 DUMMY$=INKEY$ 6130 IF NOT (LEN(DUMMY$)=ONE) THEN 6200 6140 IF NOT (DUMMY$="1" OR DUMMY$="2" OR DUMMY$="3") THEN 6170 6150 DUMMY=VAL(DUMMY$) 6160 GOTO 6190 6170 ' ELSE 6180 PRINT BELL$; 6190 ' ENDIF 6200 ' ENDIF 6210 IF NOT (DUMMY>ZERO AND DUMMYZERO) THEN 6560 6530 PAD$="000000" 6540 PAD=FMT-LEN(ARGU$) 6550 ARGU$=LEFT$(PAD$,PAD)+ARGU$ 6560 ' ENDIF 6570 RETURN 6580 ' CANT_FIND_FILE 6590 IF NOT (ERR=FILEERR) THEN 6630 6600 CLOSE: NOFILE=TRUE 6610 RESUME NEXT 6620 GOTO 6790 6630 IF NOT (ERR=PASTENDERR) THEN 6710 6640 PRINT CLEARSCREEN$;BELL$ 6650 PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT 6660 PRINT " * * * ERROR: Database File Is EMPTY Or Contents Invalid - Aborting!!" 6670 CLOSE: PRINT: PRINT 6680 GOSUB 5740 6690 RESUME 1280 6700 GOTO 6780 6710 ' ELSE 6720 PRINT CLEARSCREEN$;BELL$ 6730 PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT 6740 PRINT " * * * ERROR: An Unexpected Error Has Occurred - Halting Program!" 6750 CLOSE: PRINT 6760 PRINT " ERR =";ERR;" AND ERL =";ERL: PRINT 6770 STOP 6780 ' ENDIF 6790 ' ENDIF 6800 ' GETCHARS 6810 CHARCOUNT=ZERO 6820 DUMMY$=NLLSTR$ ' 6830 ' REPEAT 6840 DUMMY1$=INKEY$ 6850 IF NOT (LEN(DUMMY1$)=ONE) THEN 7020 6860 IF NOT (DUMMY1$=BACKSPACE$ AND CHARCOUNT>ZERO) THEN 6910 6870 CHARCOUNT=CHARCOUNT-ONE 6880 DUMMY$=LEFT$(DUMMY$,CHARCOUNT) 6890 PRINT BACKSPACE$+ONESPACE$+BACKSPACE$; 6900 GOTO 7010 6910 IF NOT (FNPR(ASC(DUMMY1$))) THEN 7000 6930 J=ASC(DUMMY1$) 6940 IF NOT (FNAL(J)) THEN 6960 6950 DUMMY1$=CHR$(J-OFFSET) 6960 ' ENDIF 6970 DUMMY$=DUMMY$+DUMMY1$ 6980 CHARCOUNT=CHARCOUNT+ONE 6990 PRINT DUMMY1$; 7000 ' ENDIF 7010 ' ENDIF 7020 ' ENDIF 7040 IF NOT (DUMMY1$=CARRIAGERETURN$) THEN 6830 7050 RETURN 7060 ' GET_LAST_RECORD_NO 7070 ANSWER=ZERO 7080 FOR EXPONENT = 14 TO ZERO STEP -ONE 7090 GET #FILE, ANSWER+(2^EXPONENT) 7100 IF NOT (NOT (EOF(FILE))) THEN 7120 7110 ANSWER=ANSWER+(2^EXPONENT) 7120 ' ENDIF 7130 NEXT EXPONENT 7140 IF NOT (ANSWER=ZERO) THEN 7170 7150 NORECORDS=TRUE 7160 GOTO 7190 7170 ' ELSE 7180 NORECORDS=FALSE 7190 ' ENDIF 7200 RETURN 7210 ' GETNUM 7220 NUMCOUNT=ZERO 7230 DUMMY$=NLLSTR$ 7240 ' REPEAT 7250 DUMMY1$=INKEY$ 7260 IF NOT (LEN(DUMMY1$)=ONE) THEN 7380 7270 IF NOT (DUMMY1$=BACKSPACE$ AND NUMCOUNT>ZERO) THEN 7320 7280 NUMCOUNT=NUMCOUNT-ONE 7290 DUMMY$=LEFT$(DUMMY$,NUMCOUNT) 7300 PRINT BACKSPACE$;ONESPACE$;BACKSPACE$; 7310 GOTO 7370 7320 IF NOT (FNNU(ASC(DUMMY1$))) THEN 7360 7330 NUMCOUNT=NUMCOUNT+ONE 7340 DUMMY$=DUMMY$+DUMMY1$ 7350 PRINT DUMMY1$; 7360 ' ENDIF 7370 ' ENDIF 7380 ' ENDIF 7400 IF NOT (DUMMY1$=CARRIAGERETURN$) THEN 7240 7410 RETURN 7420 END NT DUIF 7010 ' ENDIF 7020 ' ENDIF 7040 IF NOT (DUMMY1$=CARRIAGERETURN$) THEN 6830 7050 RETURN 7060 ' GET_LAST_RECORD_NO 7070 ANSWER=ZERO 7080 FOR EXPONENT = 14 TO ZERO STEP -ONE 7090 GET #FILE, ANSWER+(2^EXPONENT) 7100 IF NOT (NOT (EOF(FILE))) THEN 7120 7110 ANSWER=ANSWER+(2^EXPONENT) 7120 ' ENDIF 7130 NEXT EXPONENT 7140 IF NOT (ANSWER=ZERO) THEN 7170 7150 NORECORDS=TRUE 7160 GOTO 7190 7170 ' ELSE 7180 NORECORDS=FALSE 7190 ' ENDIF 7200 RETURN 7210 ' GETNUM 7220 NUMCOUNT=ZERO 7230 DUMMY$=NLLSTR$ 7240 ' REPEAT 7250 DUMMY1$=INKEY$ 7260 IF NOT (LEN(DUMMY1$)=ONE) THEN 7380 7270 IF NOT (DUMMY1$=BACKSPACE$ AND NUMCOUNT>ZERO) THEN 7320 7280 NUMCOUNT=NUMCOUNT-ONE 7290 DUMMY$=LEFT$(DUMMY$,NUMCOUNT) 7300 PRINT BACKSPACE$;ONESPACE$;BACKSPACE$; 7********************************** LIBRARY.CMD ******************** Library System Main Menu. ******************** The LIBRARY System maintains ******************** a history and count of all ******************** keywords used in the LIBRARY ******************** database. SET TALK OFF SET DEFA TO B STORE 0 TO CHOICE *************************** Display Main Menu. DO WHILE CHOICE <> 4 ERASE TEXT Library System Main Menu 1. Add new references 2. Print Reports 3. Edit References 4. Exit ENDTEXT INPUT " Enter choice (1-4) " TO CHOICE **************** Branch to appropriate procedure **************** based upon choice. DO CASE CASE CHOICE = 1 DO LIBADD CASE CHOICE = 2 DO LREPORTS CASE CHOICE = 3 DO LIBEDIT ENDCASE ENDDO (while choice # 4) *QUIT  LIBRARY CROSS-REFERENCING SYSTEM Sample  Description of the system: Thi syste allow th use t stor reference t journa article an books alon wit lis o keyword (subjects fo eac reference I automaticall maintain "history o al th keyword tha ar i th database Ne addition t th database an change t th database automaticall updat th keyword database Th use ca displa lis o al availabl keywords an ca als searc fo reference tha contai an given keyword, or group of keywords. Databases and Index Files: Th mai databas i calle LIBRARY.DAT an i ha thi structure:  STRUCTURE FOR FILE: B:LIBRARY .DBF NUMBER OF RECORDS: 00005 DATE OF LAST UPDATE: 00/00/00 PRIMARY USE DATABASE FLD NAME TYPE WIDTH DEC 001 AUTHOR C 040 002 TITLE C 040 003 PUB C 030 004 DATE C 008 005 PAGES C 008 006 ABSTRACT C 254 007 KEYWORDS C 080 ** TOTAL ** 00461  Tw inde file ar maintaine a al times Th firs maintain a alphabetica listin b autho an title Thi inde wa created with the command:  INDEX ON AUTHOR+TITLE TO AUTHORS  Th secon inde maintain chronologica order Sinc th DAT i store i MM/DD/Y fashion th inde fil wa create suc tha th yea i o greate importanc tha th mont an date Hence thi inde wa create wit th command: INDEX ON $(DATE,7,2)+$(DATE,1,5) TO DATES Th secon databas maintain histor o al keyword use i th mai database a wel a counte o ho man record i th mai databas us eac keyword Th fil i calle KEYWORDS.DBF an i has thi structure:  STRUCTURE FOR FILE: B:KEYWORDS.DBF NUMBER OF RECORDS:  00010 DATE OF LAST UPDATE: 00/00/00 PRIMARY USE DATABASE FLD NAME TYPE WIDTH DEC 001 KEYWORD C 020 002 KEYNO N 004 ** TOTAL ** 00025  This file is indexed on the keywords field, using the command:  INDEX ON KEYWORD TO KEYWORDS  Software Structure The command files are structured as follows: _______________ | LIBRARY.CMD | | | | Main Menu | |_____________| | ------------------------------------------- ______|________ __________|_________ ________|______ | LIBADD.CMD | | LREPORTS.CMD | |LIBEDIT.CMD | | Add new data| | Present sort, | | Allow edits,| | and update | | search, and | | and update | | keyword list| | report options, | | the keyword | _______________ | and print report | | file. | |__________________| |_____________| | | __________|_________ ________|______ | LIBFIND.CMD | | LIBED2.CMD | | Search for and | | Display Edit| | display references| | screen and | | by subject. | | allow edits | |___________________| |_____________| User-Interface Whe t use call u th LIBRAR system i firs present the Main Menu, as below:  Library System Main Menu 1. Add new references 2. Print Reports 3. Edit References 4. Exit Enter choice (1-4)  I th use wishe t Ad ne references h i presente with a custom "APPEND" screen, as below:  Record No. 1 Enter new Data, ^Q to Quit ---------------------------------------------------------- Author: : Title : : Pub. : : Date : : : Pages : : Abstract: : Keyword 1 : : Keyword 2 : : Keyword 3 : : Keyword 4 : : Keyword 5 : : Keyword 6 : : Keyword 7 : : ---------------------------------------------------------  I th use want t Prin Reports th scree ask i h wishe t prin keyword o references I th use selec keywords the th keywor fil i displayed alphabetically i two columns, as below:  BANK PERFORMANCE DBASE II PRIMARY DISK DRIVES ROBBERS DOG BISCUITS SECONDARY MULTIPLE FILES UPDATE  If the user wishes to see references, the screen first asks:  How do you want references sorted? 1. Alphabetically by Author 2. Chronologically by Date 3. Original Order  Then th use ca typ i th subject h wishe t searc for in a screen as below: Keyword 1 : : Keyword 2 : : Keyword 3 : : Keyword 4 : : Keyword 5 : : Keyword 6 : : Keyword 7 : :  I th use request t searc o mor tha on keyword th scree ask i th use want reference wit AL o AN keyword Then th appropriat reference ar displaye i th forma below:  Author: Blaine, Appy Title : Dog Biscuits in your Disk Drives Pub. : Data Based Advisor Date : 01/01/83 Pages : 12-345 Keywords : DBASE II, DISK DRIVES, DOG BISCUITS, Abstract : A complete listing of items not to put into your disk drives. Includes mention of those sticky little yellow "Post-It" pads, which tend to disable drive B on many computers. However, dog biscuits are the ultimates no-no for putting into floppy drives.  Edit ar handle b askin th use fo th las nam o th mai autho o th referenc t edit I ther i n suc author th use i tol so I ther ar numerou reference b thi author the thos ar displaye an th use i aske t selec b recor number Onc th referenc t edi i found th referenc i displaye o th scree i exactl th sam forma a th APPEN format an th use ca mak changes. Program Listings The programs used in the LIBRARY system are displayed below:  ********************************** LIBRARY.CMD ******************** Library System Main Menu. ******************** The LIBRARY System maintains ******************** a history and count of all ******************** keywords used in the LIBRARY ******************** database. SET TALK OFF SET DEFA TO B STORE 0 TO CHOICE *************************** Display Main Menu. DO WHILE CHOICE <> 4 ERASE TEXT Library System Main Menu 1. Add new references 2. Print Reports 3. Edit References 4. Exit ENDTEXT INPUT " Enter choice (1-4) " TO CHOICE **************** Branch to appropriate procedure **************** based upon choice. DO CASE CASE CHOICE = 1 DO LIBADD CASE CHOICE = 2 DO LREPORTS CASE CHOICE = 3 DO LIBEDIT ENDCASE ENDDO (while choice # 4)  Here is LIBADD.CMD, used for adding new records.  *************************************** LIBADD.CMD *************************************** Add new data. ************** Open Data Files SELECT PRIMARY USE LIBRARY INDEX AUTHORS,DATES SELECT SECONDARY USE KEYWORDS INDEX KEYWORDS SET EXACT ON ************** Initialize memory variables. STORE " " TO K1,K2,K3,K4,K5,K6,K7 SELECT PRIMARY GO BOTT DO WHILE AUTHOR <> " " .OR. # <= 1 ************ Display custom APPEND screen, (which ************ was created with ZIP). ERASE APPEND BLANK @ 1, 3 SAY "Record No. "+STR(#,3)+" Enter new Data, ^Q to Quit" @ 2, 0 SAY "--------------------------------------------------" @ 2,50 SAY "------------------------------" @ 4, 3 SAY "Author" @ 4,12 GET AUTHOR @ 5, 3 SAY "Title" @ 5,12 GET TITLE @ 6, 3 SAY "Pub." @ 6,12 GET PUB @ 7, 3 SAY "Date" @ 7,12 GET DATE PICT "99/99/99" @ 7,26 SAY "Pages" @ 7,32 GET PAGES @ 9, 3 SAY "Abstract" @ 9,12 GET ABSTRACT @ 13, 3 SAY "Keyword 1" @ 13,13 GET K1 @ 14, 3 SAY "Keyword 2" @ 14,13 GET K2 @ 15, 3 SAY "Keyword 3" @ 15,13 GET K3 @ 16, 3 SAY "Keyword 4" @ 16,13 GET K4 @ 17, 3 SAY "Keyword 5" @ 17,13 GET K5 @ 18, 3 SAY "Keyword 6" @ 18,13 GET K6 @ 19, 3 SAY "Keyword 7" @ 19,13 GET K7 @ 21, 0 SAY "--------------------------------------------------" @ 21,50 SAY "------------------------------" READ ****************** ONLY perform this step if not exiting this program. IF AUTHOR <> " " ****************** Update the Keyword File. SELECT SECONDARY STORE " " TO TEMPKEY STORE 1 TO COUNT STORE STR(COUNT,1) TO MAC DO WHILE K&MAC <> " " .AND. COUNT < 8 STORE !(K&MAC) TO K&MAC FIND &K&MAC IF # > 0 REPLACE KEYNO WITH KEYNO+1 ELSE APPEND BLANK REPLACE KEYWORD WITH K&MAC REPLACE KEYNO WITH 1 ENDIF (# > 0) *** Put keyword into temporary TEMPKEY string. STORE TEMPKEY+TRIM(K&MAC)+", " TO TEMPKEY **** Clear out K&MAC memory variables, and increment count. STORE " " TO K&MAC STORE COUNT +1 TO COUNT STORE STR(COUNT,1) TO MAC ENDDO (k&mac<>" ") ENDIF [not exiting this program (author <> "")] SELECT PRIMARY *********************** Put tempkey into keywords on Primary file. REPLACE KEYWORDS WITH TEMPKEY ENDDO (while author <> " ") *********************** Get rid of any "blank" records. DELETE ALL FOR AUTHOR = " " .AND. TITLE = " " PACK *********************** Return to Main Menu. SET EXACT OFF RETURN  LREPORTS, below, presents options for, and prints reports.  **************************** LREPORTS.CMD ********** Asks user if they want keyword ********** listing or to search references ********** By subjects. Provides the keyword ********** listing, branches to LIBFIND for ********** search by subject. ERASE STORE " " TO RCHOICE @ 5,10 SAY " Which Report do you want " @ 7, 5 SAY "1. Keyword Listing" @ 8, 5 SAY "2. References by Subject" @ 10,8 SAY "Enter choice (1-2) " GET RCHOICE READ *********** Do appropriate report based upon user's request. DO CASE CASE RCHOICE = "1" ******* Ask about hardcopy ERASE STORE " " TO LP @ 5,10 SAY " Send Keywords to printer (Y/N) " GET LP READ IF !(LP)="Y" *SET PRINT ON ENDIF (lp=y) *********** print keywords in two alphabetized columns. ERASE USE KEYWORDS GO BOTT STORE (#+1)/2 TO MIDDLE STORE 1 TO COUNTER USE KEYWORDS INDEX KEYWORDS STORE "Y" TO OK DO WHILE COUNTER <= MIDDLE .AND. !(OK)="Y" ? KEYWORD SKIP MIDDLE IF .NOT. EOF ?? KEYWORD SKIP -1*MIDDLE-1 ENDIF (not eof) STORE COUNTER + 1 TO COUNTER ************** If keyword list going to the screen,  ************** Pause every 20 lines. IF COUNTER/20 = INT(COUNTER/20) .AND. !(LP) <> "Y" ? ? ? " Continue? (Y/N) " WAIT TO OK ENDIF (counter/20 and not lp) ************* If keyword list going to the ************* printer, eject page every 60 lines. IF COUNTER/60 = INT(COUNTER/60) .AND. !(LP) = "Y" EJECT ENDIF (counter/60 and lp) ENDDO (counter and ok) ************* If keyword list going to the screen, pause ************* before returning to the main menu. IF !(LP) <> "Y" ? ? ? " Press any key to return to main menu..." WAIT ENDIF (lp <> y) CASE RCHOICE = "2" DO LIBFIND ENDCASE RETURN  Th LIBFINĠ comman fil fin an display record tha hav subjects in common.  *********************************** LIBFIND.CMD ********** Pull out records with certain subjects. ********** First, ask for sort order. ERASE STORE 1 TO ORDER ? ? " How do you want references sorted? " ? ? " 1. Alphabetically by Author " ? " 2. Chronologically by Date" ? " 3. Original Order" @ 9,4 SAY "Enter choice (1-3) " GET ORDER PICT "9" READ *********** Use appropriate index. DO CASE CASE ORDER = 1 USE LIBRARY INDEX AUTHORS CASE ORDER = 2 USE LIBRARY INDEX DATES CASE ORDER = 3 USE LIBRARY OTHERWISE RETURN ENDCASE ************************* Next, get search criteria. ERASE STORE " " TO K1,K2,K3,K4,K5,K6,K7,K8 @ 3,5 SAY "Keyword 1 " GET K1 @ 4,5 SAY "Keyword 2 " GET K2 @ 5,5 SAY "Keyword 3 " GET K3 @ 6,5 SAY "Keyword 4 " GET K4 @ 7,5 SAY "Keyword 5 " GET K5 @ 8,5 SAY "Keyword 6 " GET K6 @ 9,5 SAY "Keyword 7 " GET K7 READ *********************** Count how many keywords to search on. *********************** and store to the variable kcount. STORE 0 TO KCOUNT STORE "1" TO MAC DO WHILE K&MAC <> " " STORE KCOUNT+1 TO KCOUNT STORE STR(KCOUNT+1,1) TO MAC ENDDO ************** Now, set up search condition into ************** a memory variable called CND. ************** First, set up initial search condition. STORE CHR(34)+" "+!(TRIM(K1))+","+CHR(34)+" $KEYWORDS" TO CND ************** If many keywords to search on, ************** ask about the logic of the search. STORE "0" TO LOGIC IF KCOUNT > 1 ? @ 12,2 SAY " References with 1) ALL keywords or 2) ANY keyword " GET LOGIC READ IF LOGIC = "1" STORE " .AND. " TO LOGIC ELSE STORE " .OR. " TO LOGIC ENDIF (logic=1) *********** Then finish the 'condition' string (CND). STORE 2 TO COUNT DO WHILE COUNT <= KCOUNT STORE STR(COUNT,1) TO MAC STORE CND+LOGIC+CHR(34)+" "+!(trim(K&MAC))+","+CHR(34)+; " $KEYWORDS" TO CND STORE COUNT+1 TO COUNT ENDDO (count <=kcount) ENDIF (kcount > 1) *********** Ask about hardcopy. ERASE STORE " " TO LP @ 5,5 SAY " Send report to printer (Y/N) " GET LP READ ************ Prepare printer if necessary. IF !(LP)="Y" @ 7,5 SAY "Ready printer, then press any key..." WAIT SET PRINT ON ENDIF (LP = Y) ************ Use LF to count line-feeds for formatting ************ On the screen and printer. STORE 0 TO LF ************ Finally, print the report, listing only ************ references for whom &CND is true. ERASE DO WHILE .NOT. EOF IF &CND ? "Author:",AUTHOR ? "Title :",TITLE ? "Pub. :",PUB ? "Date :",DATE," Pages : ",PAGES ? ? "Keywords : "+KEYWORDS ? "Abstract : " STORE LF+7 TO LF ****************** Break off long abstract at space ****************** Nearest the right margin. STORE TRIM(ABSTRACT) TO STRING STORE LEN(TRIM(STRING)) TO TLEN DO WHILE TLEN > 60 **************** Find space nearest right margin STORE 60 TO SPOT DO WHILE $(STRING,SPOT,1)<>" " STORE SPOT-1 TO SPOT ENDDO (while not " ") **************** Print sub-string and break off section. ? $(STRING,1,SPOT-1) STORE LEN(TRIM(STRING))-SPOT TO TLEN STORE $(STRING,SPOT+1,TLEN) TO STRING STORE LF+1 TO LF ENDDO (while len > 60) ? STRING ? ? STORE LF+3 TO LF ************* Count line feeds, and start on ************* new page, if necessary. IF LF >= 55 EJECT STORE 0 TO LF ENDIF (lf > 55) ENDIF (cnd) SKIP ENDDO (while not eof) SET PRINT OFF USE RETURN LIBEDIT prepares for editing, and manages keyword file updates.  ***************************** LIBEDIT.CMD ************* Allows user to look up a reference ************* by primary author name, and change ************* data. Automatically updates the ************* keyword history file. ************* Set up databases and memory variables. SELE PRIM USE LIBRARY INDEX AUTHORS,DATES SELE SECO USE KEYWORDS INDEX KEYWORDS SELE PRIM STORE " " TO K1,K2,K3,K4,K5,K6,K7 ************** Find out who to edit. ERASE ? ACCEPT " Enter Main Author's last name " TO SEARCH STORE !(SEARCH) TO SEARCH ERAS *************** Determine if 0, 1 or many references *************** By this author, and react accordingly. FIND &SEARCH STORE 0 TO HOWMANY COUNT WHILE !(AUTHOR) = SEARCH TO HOWMANY DO CASE CASE HOWMANY = 0 STORE 0 TO RECNO ? ? " There is no &SEARCH on the database." ? WAIT CASE HOWMANY = 1 FIND &SEARCH STORE # TO RECNO CASE HOWMANY > 1 FIND &SEARCH LIST WHILE LNAME = &SEARCH AUTHOR, TITLE, PUB ? INPUT " Which one (by number) " TO RECNO ENDCASE *********** Edit appropriate record, if recno > 0 ERASE IF RECNO > 0 GOTO RECNO *************** Peel out individual keywords from *************** the long KEYWORDS field in the *************** library database. STORE 2 TO START STORE 1 TO COUNT STORE KEYWORDS TO TEMP DO WHILE "," $(KEYWORDS) STORE STR(COUNT,1) TO SCOUNT STORE $(KEYWORDS,START,@(",",KEYWORDS)-2) TO K&SCOUNT REPLACE KEYWORDS WITH $(KEYWORDS,@(",",KEYWORDS)+1,50) STORE COUNT+1 TO COUNT ENDDO (while "," $keywords) ************* just in case user deletes any or all ************* keywords, subtract 1 from the total number ************* of references for this keyword from ************* The keywords file. SELE SECO STORE 1 TO X STORE "1" TO MAC DO WHILE K&MAC <> " " FIND &K&MAC REPLACE KEYNO WITH KEYNO-1 STORE X+1 TO X STORE STR(X,1) TO MAC ENDDO ****** Now branch to LIBED2 to do the edit. ****** (LIBED2 is stolen from the LIBADD command file.) SELE PRIM DO LIBED2 ENDIF (recno > 0) **************** Before returning to main menu, **************** Eliminate any keywords for which there **************** are no references ERASE ? " Updating keyword file.........." SELE SECO DELE ALL FOR KEYNO=0 PACK RETURN  LIBED i a extensio o LIBED an handle th actua scree display in editing data. It is mostly a clone of LIBADD.  **************************************** LIBED2.CMD **************************** Allow user to edit reference, **************************** then re-update keywords file. *************** (This command file was created by "borrowing" *************** a portin of LIBADD.CMD, and modifying). ERASE @ 1, 3 SAY "Record No. "+STR(#,3) @ 2, 0 SAY "--------------------------------------------------" @ 2,50 SAY "------------------------------" @ 4, 3 SAY "Author" @ 4,12 GET AUTHOR @ 5, 3 SAY "Title" @ 5,12 GET TITLE @ 6, 3 SAY "Pub." @ 6,12 GET PUB @ 7, 3 SAY "Date" @ 7,12 GET DATE PICT "99/99/99" @ 7,26 SAY "Pages" @ 7,32 GET PAGES @ 9, 3 SAY "Abstract" @ 9,12 GET ABSTRACT @ 13, 3 SAY "Keyword 1" @ 13,13 GET K1 @ 14, 3 SAY "Keyword 2" @ 14,13 GET K2 @ 15, 3 SAY "Keyword 3" @ 15,13 GET K3 @ 16, 3 SAY "Keyword 4" @ 16,13 GET K4 @ 17, 3 SAY "Keyword 5" @ 17,13 GET K5 @ 18, 3 SAY "Keyword 6" @ 18,13 GET K6 @ 19, 3 SAY "Keyword 7" @ 19,13 GET K7 @ 21, 0 SAY "--------------------------------------------------" @ 21,50 SAY "------------------------------" READ ****************** Update Keyword File. SELECT SECONDARY STORE " " TO TEMPKEY STORE 1 TO COUNT STORE STR(COUNT,1) TO MAC DO WHILE K&MAC <> " " .AND. COUNT < 8 STORE !(K&MAC) TO K&MAC FIND &K&MAC IF # > 0 REPLACE KEYNO WITH KEYNO+1 ELSE APPEND BLANK REPLACE KEYWORD WITH K&MAC REPLACE KEYNO WITH 1 ENDIF (# > 0) *** Now, concatentate K&MAC into temporary KEYWORDS string. STORE TEMPKEY+TRIM(K&MAC)+", " TO TEMPKEY STORE COUNT +1 TO COUNT STORE STR(COUNT,1) TO MAC ENDDO (k&mac<>" ") *********************** Put tempkey into keywords SELECT PRIMARY REPLACE KEYWORDS WITH TEMPKEY   RETURN  17, 3 SAY "Keyword 5" @ 17,13 GET K5 @ 18, 3 SAY "Keyword 6" @ 18,13 GET K6 @ 19, 3 SAY "Keyword 7" @ 19,13 GET K7 @ 21, 0 SAY "--------------------------------------------------" @ 21,50 SAY "------------------------------" READ ****************** Update Keyword File. SELECT SECONDARY STORE " " TO TEMPKEY STORE 1 TO COUNT STORE STR(COUNT,1) TO MAC DO WHILE K&MAC <> " " .AND. COUNT < 8 STORE !(K&MAC) TO K&MAC FIND &K&MAC IF # > 0 REPLACE KEYNO WITH KEYNO+1 ELSE APPEND BLANK REPLACE KEYWORD WITH K&MAC REPLACE KEYNO WITH 1 ENDIF (# > 0) *** Now, concatentate K&MAC into temporary KEYWORDS string. STORE TEMPKEY+TRIM(K&MAC)+", " TO TEMPKEY STORE COUNT +1 TO COUNT STORE STR(COUNT,1) TO MAC ENDDO (k&mac<>" ") *********************** Put tempkey into keywords SELECT PRIMARY REPLACE KEYWORDS WITH TEMPKEY  *************************************** LIBADD.CMD *************************************** Add new data. ************** Open Data Files SELECT PRIMARY USE LIBRARY INDEX AUTHORS,DATES SELECT SECONDARY USE KEYWORDS INDEX KEYWORDS SET EXACT ON ************** Initialize memory variables. STORE " " TO K1,K2,K3,K4,K5,K6,K7 SELECT PRIMARY GO BOTT DO WHILE AUTHOR <> " " .OR. # <= 1 ************ Display custom APPEND screen, (which ************ was created with ZIP). ERASE APPEND BLANK @ 1, 3 SAY "Record No. "+STR(#,3)+" Enter new Data, ^Q to Quit" @ 2, 0 SAY "--------------------------------------------------" @ 2,50 SAY "------------------------------" @ 4, 3 SAY "Author" @ 4,12 GET AUTHOR @ 5, 3 SAY "Title" @ 5,12 GET TITLE @ 6, 3 SAY "Pub." @ 6,12 GET PUB @ 7, 3 SAY "Date" @ 7,12 GET DATE PICT "99/99/99" @ 7,26 SAY "Pages" @ 7,32 GET PAGES @ 9, 3 SAY "Abstract" @ 9,12 GET ABSTRACT @ 13, 3 SAY "Keyword 1" @ 13,13 GET K1 @ 14, 3 SAY "Keyword 2" @ 14,13 GET K2 @ 15, 3 SAY "Keyword 3" @ 15,13 GET K3 @ 16, 3 SAY "Keyword 4" @ 16,13 GET K4 @ 17, 3 SAY "Keyword 5" @ 17,13 GET K5 @ 18, 3 SAY "Keyword 6" @ 18,13 GET K6 @ 19, 3 SAY "Keyword 7" @ 19,13 GET K7 @ 21, 0 SAY "--------------------------------------------------" @ 21,50 SAY "------------------------------" READ ****************** ONLY perform this step if not exiting this program. IF AUTHOR <> " " ****************** Update the Keyword File. SELECT SECONDARY STORE " " TO TEMPKEY STORE 1 TO COUNT STORE STR(COUNT,1) TO MAC DO WHILE K&MAC <> " " .AND. COUNT < 8 STORE !(K&MAC) TO K&MAC FIND &K&MAC IF # > 0 REPLACE KEYNO WITH KEYNO+1 ELSE APPEND BLANK REPLACE KEYWORD WITH K&MAC REPLACE KEYNO WITH 1 ENDIF (# > 0) *** Put keyword into temporary TEMPKEY string. STORE TEMPKEY+TRIM(K&MAC)+", " TO TEMPKEY **** Clear out K&MAC memory variables, and increment count. STORE " " TO K&MAC STORE COUNT +1 TO COUNT STORE STR(COUNT,1) TO MAC ENDDO (k&mac<>" ") ENDIF [not exiting this program (author <> "")] SELECT PRIMARY *********************** Put tempkey into keywords on Primary file. REPLACE KEYWORDS WITH TEMPKEY ENDDO (while author <> " ") *********************** Get rid of any "blank" records. DELETE ALL FOR AUTHOR = " " .AND. TITLE = " " PACK *********************** Return to Main Menu. SET EXACT OFF RETURN K&MAC) TO K&MAC FIND &K&MAC IF # > 0 REPLACE KEYNO WITH KEYNO+1 ELSE APPEND BLANK REPLACE KEYWORD WITH K&MAC REPLACE KEYNO WITH 1 ENDIF (# > 0) *** Put ke**************************************** LIBED2.CMD **************************** Allow user to edit reference, **************************** then re-update keywords file. *************** (This command file was created by "borrowing" *************** a portin of LIBADD.CMD, and modifying). ERASE @ 1, 3 SAY "Record No. "+STR(#,3) @ 2, 0 SAY "--------------------------------------------------" @ 2,50 SAY "------------------------------" @ 4, 3 SAY "Author" @ 4,12 GET AUTHOR @ 5, 3 SAY "Title" @ 5,12 GET TITLE @ 6, 3 SAY "Pub." @ 6,12 GET PUB @ 7, 3 SAY "Date" @ 7,12 GET DATE PICT "99/99/99" @ 7,26 SAY "Pages" @ 7,32 GET PAGES @ 9, 3 SAY "Abstract" @ 9,12 GET ABSTRACT @ 13, 3 SAY "Keyword 1" @ 13,13 GET K1 @ 14, 3 SAY "Keyword 2" @ 14,13 GET K2 @ 15, 3 SAY "Keyword 3" @ 15,13 GET K3 @ 16, 3 SAY "Keyword 4" @ 16,13 GET K4 @ 17, 3 SAY "Keyword 5" @ 17,13 GET K5 @ 18, 3 SAY "Keyword 6" @ 18,13 GET K6 @ 19, 3 SAY "Keyword 7" @ 19,13 GET K7 @ 21, 0 SAY "-----------------!---------------------------------" @ 21,50 SAY "------------------------------" READ ****************** Update Keyword File. SELECT SECONDARY STORE " " TO TEMPKEY STORE 1 TO COUNT STORE STR(COUNT,1) TO MAC DO WHILE K&MAC <> " " .AND. COUNT < 8 STORE !(K&MAC) TO K&MAC FIND &K&MAC IF # > 0 REPLACE KEYNO WITH KEYNO+1 ELSE APPEND BLANK REPLACE KEYWORD WITH K&MAC REPLACE KEYNO WITH 1 ENDIF (# > 0) *** Now, concatentate K&MAC into temporary KEYWORDS string. STORE TEMPKEY+TRIM(K&MAC)+", " TO TEMPKEY STORE COUNT +1 TO COUNT STORE STR(COUNT,1) TO MAC ENDDO (k&mac<>" ") *********************** Put tempkey into keywords SELECT PRIMARY REPLACE KEYWORDS WITH TEMPKEY RETURN  2" @ 14,13 GET K2 @ 15, 3 SAY "Keyword 3" @ 15,13 GET K3 @ 16, 3 SAY "Keyword 4" @ 16,13 GET K4 @ 17, 3 SAY "Keyword 5" @ 17,13 GET K5 @ 18, 3 SAY "Keyword 6" @ 18,13 GET K6 @ 19, 3 SAY "Keyword 7" @ 19,13 GET K7 @ 21, 0 SAY "-----------------***************************** LIBEDIT.CMD ************* Allows user to look up a reference ************* by primary author name, and change ************* data. Automatically updates the ************* keyword history file. ************* Set up databases and memory variables. SELE PRIM USE LIBRARY INDEX AUTHORS,DATES SELE SECO USE KEYWORDS INDEX KEYWORDS SELE PRIM STORE " " TO K1,K2,K3,K4,K5,K6,K7 ************** Find out who to edit. ERASE ? ACCEPT " Enter Main Author's last name " TO SEARCH STORE !(SEARCH) TO SEARCH ERAS *************** Determine if 0, 1 or many references *************** By this author, and react accordingly. FIND &SEARCH STORE 0 TO HOWMANY COUNT WHILE !(AUTHOR) = SEARCH TO HOWMANY DO CASE CASE HOWMANY = 0 STORE 0 TO RECNO ? ? " There is no &SEARCH on the database." ? WAIT CASE HOWMANY = 1 FIND &SEARCH STORE # TO RECNO CASE HOWMANY > 1 FIND &SEARCH  LIST WHILE LNAME = &SEARCH AUTHOR, TITLE, PUB ? INPUT " Which one (by number) " TO RECNO ENDCASE *********** Edit appropriate record, if recno > 0 ERASE IF RECNO > 0 GOTO RECNO *************** Peel out individual keywords from *************** the long KEYWORDS field in the *************** library database. STORE 2 TO START STORE 1 TO COUNT STORE KEYWORDS TO TEMP DO WHILE "," $(KEYWORDS) STORE STR(COUNT,1) TO SCOUNT STORE $(KEYWORDS,START,@(",",KEYWORDS)-2) TO K&SCOUNT REPLACE KEYWORDS WITH $(KEYWORDS,@(",",KEYWORDS)+1,50) STORE COUNT+1 TO COUNT ENDDO (while "," $keywords) ************* just in case user deletes any or all ************* keywords, subtract 1 from the total number ************* of references for this keyword from ************* The keywords file. SELE SECO STORE 1 TO X STORE "1" TO MAC DO WHILE K&MAC <> " " FIND &K&MAC REPLACE KEYNO WITH KEYNO-1 STORE X+1 TO X STORE STR(X,1) TO MAC ENDDO ****** Now branch to LIBED2 to do the edit. ****** (LIBED2 is stolen from the LIBADD command file.) SELE PRIM DO LIBED2 ENDIF (recno > 0) **************** Before returning to main menu, **************** Eliminate any keywords for which there **************** are no references ERASE ? " Updating keyword file.........." SELE SECO DELE ALL FOR KEYNO=0 PACK RETURN S,START,@(",",KEYWORDS)-2) TO K&SCOUNT REPLACE KEYWORDS WITH $(KEYWORDS,@(",",KEYWORDS)+1,50) STORE COUNT+1 TO COUNT ENDDO (while "," $keywords) ************* just in case user deletes any or all ************* keywords, subtract 1 from the total number ************* of references for this keyword from ************* The keywords file. SELE SECO STORE 1 TO X STORE "1" TO MAC DO WHILE K&MAC <> " " FIND &K&MAC REPLACE KEYNO WITH KEYNO-1 ST*********************************** LIBFIND.CMD ********** Pull out records with certain subjects. ********** First, ask for sort order. ERASE STORE 1 TO ORDER ? ? " How do you want references sorted? " ? ? " 1. Alphabetically by Author " ? " 2. Chronologically by Date" ? " 3. Original Order" @ 9,4 SAY "Enter choice (1-3) " GET ORDER PICT "9" READ *********** Use appropriate index. DO CASE CASE ORDER = 1 USE LIBRARY INDEX AUTHORS CASE ORDER = 2 USE LIBRARY INDEX DATES CASE ORDER = 3 USE LIBRARY OTHERWISE RETURN ENDCASE ************************* Next, get search criteria. ERASE STORE " " TO K1,K2,K3,K4,K5,K6,K7,K8 @ 3,5 SAY "Keyword 1 " GET K1 @ 4,5 SAY "Keyword 2 " GET K2 @ 5,5 SAY "Keyword 3 " GET K3 @ 6,5 SAY "Keyword 4 " GET K4 @ 7,5 SAY "Keyword 5 " GET K5 @ 8,5 SAY "Keyword 6 " GET K6 @ 9,5 SAY "Keyword 7 " GET K7 READ *********************** Count how many keywords to search on." *********************** and store to the variable kcount. STORE 0 TO KCOUNT STORE "1" TO MAC DO WHILE K&MAC <> " " STORE KCOUNT+1 TO KCOUNT STORE STR(KCOUNT+1,1) TO MAC ENDDO ************** Now, set up search condition into ************** a memory variable called CND. ************** First, set up initial search condition. STORE CHR(34)+" "+!(TRIM(K1))+","+CHR(34)+" $KEYWORDS" TO CND ************** If many keywords to search on, ************** ask about the logic of the search. STORE "0" TO LOGIC IF KCOUNT > 1 ? @ 12,2 SAY " References with 1) ALL keywords or 2) ANY keyword " GET LOGIC READ IF LOGIC = "1" STORE " .AND. " TO LOGIC ELSE STORE " .OR. " TO LOGIC ENDIF (logic=1) *********** Then finish the 'condition' string (CND). STORE 2 TO COUNT DO WHILE COUNT <= KCOUNT STORE STR(COUNT,1) TO MAC STORE CND+LOGIC+CHR(34)+" "+!(trim(K&MAC))+","+CHR(34)+" $KEYWORDS" TO CND STORE COUNT+1 TO COUNT ENDDO (count <=kcount) ENDIF (kcount > 1) *********** Ask about hardcopy. ERASE STORE " " TO LP @ 5,5 SAY " Send report to printer (Y/N) " GET LP READ ************ Prepare printer if necessary. IF !(LP)="Y" @ 7,5 SAY "Ready printer, then press any key..." WAIT SET PRINT ON ENDIF (LP = Y) ************ Use LF to count line-feeds for formatting ************ On the screen and printer. STORE 0 TO LF ************ Finally, print the report, listing only ************ references for whom &CND is true. ERASE DO WHILE .NOT. EOF IF &CND ? "Author:",AUTHOR ? "Title :",TITLE ? "Pub. :",PUB ? "Date :",DATE," Pages : ",PAGES ? ? "Keywords : "+KEYWORDS ? "Abstract : " STORE LF+7 TO LF ****************** Break off long abstract at space ****************** Nearest the right margin. STORE TRIM(ABSTRACT) TO STRING STORE LEN(TRIM(STRING)) TO TLEN DO WHILE TLEN > 60 **************** Find space nearest right margin STORE 60 TO SPOT DO WHILE $(STRING,SPOT,1)<>" " STORE SPOT-1 TO SPOT ENDDO (while not " ") **************** Print sub-string and break off section. ? $(STRING,1,SPOT-1) STORE LEN(TRIM(STRING))-SPOT TO TLEN STORE $(STRING,SPOT+1,TLEN) TO STRING STORE LF+1 TO LF ENDDO (while len > 60) ? STRING ? ? STORE LF+3 TO LF ************* Count line feeds, and start on ************* new page, if necessary. IF LF >= 55 EJECT STORE 0 TO LF ENDIF (lf > 55) ENDIF (cnd) SKIP ENDDO (while not eof) SET PRINT OFF USE RETURN TO LF ****************** Break off long abstract at space ****************** Nearest the right margin. STORE TRIM(ABSTRACT) TO STRING STORE LEN(TRIM(STRING)) TO TLEN DO WHILE TLEN > 60 **************** Find spac**************************** LREPORTS.CMD ********** Asks user if they want keyword ********** listing or to search references ********** By subjects. Provides the keyword ********** listing, branches to LIBFIND for ********** search by subject. ERASE STORE " " TO RCHOICE @ 5,10 SAY " Which Report do you want " @ 7, 5 SAY "1. Keyword Listing" @ 8, 5 SAY "2. References by Subject" @ 10,8 SAY "Enter choice (1-2) " GET RCHOICE READ *********** Do appropriate report based upon user's request. DO CASE CASE RCHOICE = "1" ******* Ask about hardcopy ERASE STORE " " TO LP @ 5,10 SAY " Send Keywords to printer (Y/N) " GET LP READ IF !(LP)="Y" *SET PRINT ON ENDIF (lp=y) *********** print keywords in two alphabetized columns. ERASE USE KEYWORDS GO BOTT STORE (#+1)/2 TO MIDDLE STORE 1 TO COUNTER USE KEYWORDS INDEX KEYWORDS STORE "Y" TO OK DO WHILE COUNTER <= MIDDLE .AND. !(OK)="Y" ? KEYWORD SKIP MIDDLE IF .NOT. EOF ?? KEYWORD SKIP -1*MIDDLE-1 ENDIF (not eof) STORE COUNTER + 1 TO COUNTER ************** If keyword list going to the screen, ************** Pause every 20 lines. IF COUNTER/20 = INT(COUNTER/20) .AND. !(LP) <> "Y" ? ? ? " Continue? (Y/N) " WAIT TO OK ENDIF (counter/20 and not lp) ************* If keyword list going to the ************* printer, eject page every 60 lines. IF COUNTER/60 = INT(COUNTER/60) .AND. !(LP) = "Y" EJECT ENDIF (counter/60 and lp) ENDDO (counter and ok) ************* If keyword list going to the screen, pause ************* before returning to the main menu. IF !(LP) <> "Y" ? ? ? " Press any key to return to main menu..." WAIT ENDIF (lp <> y) # CASE RCHOICE = "2" DO LIBFIND ENDCASE RETURN  ENDIF (not eof) STORE COUNTER + 1 TO COUNTER ************** If keyword list going to the screen, ************** Pause every 20 lines. IF COUNTER/20 = INT(COUNTER/20) .AND. !(LP) <> "Y" ? ? ? " Continue? (Y/N) " WAIT TO OK ENDIF (counter/20 and not lp) ************* If keyword list going to the ************* printer, eject page every 60 lines. IF COUNTER/60 = INT(COUNTER/60) .AND. !(LP) = "Y" EJECT ENDIF (counter/60 and lp) ENDDO (counter and ok) ************* If keyword list going to the screen, pause ************* before returning to the main menu. IF !(LP) <> "Y" ? ? ? " Press any key to return to main menu..." WAIT ENDIF (lp <> y) AUTHORC(pTITLEC(pPUBC qDATEC'qPAGESC/qABSTRACTC7qKEYWORDSCP5r Seco, Sally and Prim, Sally Primary and Secondary Databases Byte 12/12/8412-23 This article deals with the use of primary and secondary databases in custome-designed dBASE II softwares sysems. It discusses the dBASE II SELECT PRIMARY and SELECT SECONDARY commands, as well as the UPDATE, JOIN, and TOTAL commands. Not a bad work. TEST, PRIMARY, SECONDARY, Blaine, Appy Dog Biscuits in your Disk Drives Data Based Advisor 01/01/8312-345 A complete listing of items not to put into your disk drives. Includes mention of those sticky little yellow "Post-It" pads, which tend to disable drive B on many computers. However, dog biscuits are the ultimates no-no for putting into floppy drives. DBASE II, DISK DRIVES, DOG BISCUITS, Noupdate, Ned Speeding up the REPLACE Proceudre Data Based Advisor 06/15/8412-23 An in-depth discussion of the esoteric NOUPDATE command that is used with the dBASE II REPLACE command to speed up automatic replaces of database with one or more active index files. Also mentions the esoteric RANDOMIZE command. DBASE II, UPDATE, PERFORMANCE, Smith, Sam. Dog Day Afternoon Sybex 01/01/8423 This is a screenplay about two guys who rob a bank and get caught.   ksdhfksdf0 lkd0f l df akj fkl sfdl f kjd fl falkf 22/21/212121 jkh dkfh ldkhf *dfg dfgs dfg 45/6 / 356 dfsg $ AAAA, BBBB, CCCC,  CCCC HAHAHA XXX XXXX ZZZ OR PLEASE SATURN STOP THIS TIME UUUUU WORK YYYYY ZZZZZ DO ALIGN ENDIF (if align = y) ENDI *dfg dfgs dfg 45/6 / 356 dfsg  KEYWORDCpKEYNONp DBASE II 5 MULTIPLE FILES 4 PRIMARY 3 SECONDARY 4 DISK DRIVES 1 DOG BISCUITS 1 UPDATE 1 PERFORMANCE 1 BANK 1 ROBBERS 1TEST 0MP/M 0*BASIC 0*CBASIC 0*CB80 0*CB86 0*AM-86 0*DM-86 0*FORTRAN 0*COBOL 0*PASCAL 0*WHIPORWILL 0*SNOBOL 0*BANANA 0*CHERRY 0*VANILLA 0*STRAWBERRY 0*PLAID 0*BLUE 0*GREEN 0*RED 0*ORANGE 0*YELLOW 0*PINK 0*WHITE 0*BLACK 0*8080 0*8086 0*GOLD 0*SILVER 0*M-68000 0*WORDSTAR 0*LOTUS 0*MULTIPLAN 0*SUPERCALC 0*TEXTRA 0*EDIX 0*HOWDY 0 BANK 1 ROBBERS 1T-1 TO SPOT ENDDO (while not " ") ? $(STRING,1,SPOT-1) STORE LEN(TRIM(STRING)) TO TLEN STORE $(STRING,SPOT+1,TLEN-(SPOT+1)) TO STRING ENDDO ? STRING RTAUTHOR+TITLEe no references ERASE ? " Updating keyword file.........." SELE SECO DELE ALL FOR KEYNO=0 PACK RETURN CK RETURN ------" READ ****************** Update KeND is true. ERASE DO WHILE .NOT. EOF IF &CND ? "Author:",AUTHOR ? "Title :",TITLE ? "Pub. :",PUB ? "Date :",DATE," Pages : ",PAGES ? ? "Keywords : "+KEYWORDS ? "Abstract : " STORE LF+7 TO LF ****************** Break off long abstract at  Blaine, Appy Dog Biscuits in your Disk Drives Noupdate, Ned Speeding up the REPLACE Proceudre Seco, Sally and Prim, Sally Primary and Secondary Databases Smith, Sam. Dog Day Afternoon LEN DO WHILE TLEN > 60 **************** Find space nearest right margin ksdhfksdf0 lkd0f l df akj fkl sfdl f sfdhlsd fsd f kjsdhfdkshl sjdhf sjdgfasdfg jjshdf sjdf skdg skdfsd fklksk fskf sdlf khjd kdsj lksdhalsdfdsf sfdhlsd fsd f kjsdhfdkshl sjdhf sjdgfasdfg jjshdf sjdf skdg skdkjdfsddglsdsf gslfg slfg sjdh gl dg g sjdhf sjdgfasdfg jjshdf sjdf skdg skdfsd fklksk fskf sdlf khjd kdsj lksdhalsdfdsf kjdfsddglsdsf gslfg slfg sjdh gl dg g sfdhlsd fsd f kjsdhfdkshl sjdhf sjdgfasdfg jjshdf sjdf skdg skd% .$(DATE,7,2)+$(DATE,1,5)nces ERASE ? " Updating keyword file.........." SELE SECO DELE ALL FOR KEYNO=0 PACK RETURN CK RETURN ------" READ ****************** Update KeND is true. ERASE DO  Blaine, Appy Dog Biscuits in your Disk Drives Noupdate, Ned Speeding up the REPLACE Proceudre Seco, Sally and Prim, Sally  8301/018401/018406/158412/12 Blaine, Appy Dog Biscuits in your Disk Drives Noupdate, Ned Speeding up the REPLACE Proceudre Seco, Sally and Prim, Sally Primary and Secondary Databases Smith, Sam. Dog Day Afternoon LEN DO WHILE TLEN > 60 **************** Find space nearest right margin KEYWORD,2)+$(DATE,1,5)nces ERASE ? " Updating keyword file.........." SELE SECO DELE ALL FOR KEYNO=0 PACK RETURN CK RETURN ------" READ ****************** Update KeND is true. ERASE DO  8301/018401/018406/158412/12 Blaine, Appy Dog Biscuits in your Disk Drives Noupdate, Ned Speeding up the REPLACE Proceudre Seco, Sally and Prim, Sally BANK DBASE II DISK DRIVES DOG BISCUITS MULTIPLE FILES PERFORMANCE PRIMARY ROBBERS SECONDARY UPDATE dre Seco, Sally and Prim, Sally Primary and Secondary Databases Smith, Sam. Dog Day Afternoon LEN DO WHILE TLEN > 60 **************** Find space nearest right margin /EDIX FORTRAN 'GOLD GREEN 0HOWDY +LOTUS )M-68000 MP/M MS-DOS ,MULTIPLAN MULTIPLE FILES ORANGE PASCAL PC-DOS PERFORMANCE "PINK STRAWBERRY UPDATE VANILLA WHIPORWILL #WHITE !YELDOG BISCUITS "PINK  MS-DOS MULTIPLE FILES PASCAL PC-DOS PERFORMANCE PRIMARY SECONDARY UPDATE WHIPORWILL FORTRAN MP/M MS-DOS MULTIPLE FILES PASCAL PC-DOS PERFORMANCE PRIMARY SECONDARY UPDATE WHIPLAID PRIMARY RED 2ROBBERS SECONDARY (SILVER SNOBOL STRAWBERRY -SUPERCALC .TEXTRA UPDATE VANILLA WHIPORWILL #WHITE *WORDSTAR !YELLOW STRAWBERRY UPDATE VANILLA WHIPORWILL #WHITE !YELDOG BISCUITS "PINK  MS-DOS MULTIPLE FILES PASCAL PC-DOS PERFORMANCE PRIMARY SECONDARY UPDATE WHIPORWILL FORTRAN MP/M MS-DOS MULTIPLE FILES PASCAL PC-DOS PERFORMANCE PRIMARY SECONDARY UPDATE WHI%' ZIP+LNAME+FNAMEWS COMo}~88d Hit any key to return to WordStar: Replace diskette with file , hit any Adams Andy Axelrod Andy Doe Ruth Frankenstein Fred Jones James Mills Amy Mills Amy Noonan Ned Smith Dave Smith Sam 12121 Noonan Ned 12345 Axelrod Andy 12345 Doe Ruth 91234 Jones James 91234 Smith Dave 92111 Smithsonian Lucy 92122 Adams Andy 92122 Frankenstein Fred 92122 Mills Amy 92122 Mills Amy 92122 Smith Sam ng marker, ¾, and the block end marker,  ˾, a& This is the release date of the disk. BASM ASM W-CPM012 DOC DBCLEAN COM X8DBCLEAN DOC fDBCLINICBAS gMBCLINICBAS w LIBRARY CMD {LIBRARY DOC |TIBRARY DOC LIBADD CMD LIBED2 CMD LIBEDIT CMD LIBFIND CMD LREPORTSCMD MEMTIP .DOC F2 36 2816 22 PRINT .MEM 78 19 3072 24 SCREEN .MEM EE 38 3072 24 SUPERBAK.CMD B6 6F 2944 23 DBFTOTXT.CMD 37 72 4096 32 DBASM .ASM C3 1E 16512 129 DBCLEAN .COM F2 1E 14336 112 DBCLEAN .DOC DA 67 640 5 DBCLINIC.BAS 34 4F 19712 154 LIBRARY .CMD D6 5B 1024 8 LIBRARY .DOC BE D6 21632 169 LIBADD .CMD 79 18 2816 22 LIBED2  Fog Library Disk FOG-CPM.012 Copyright (1985) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. This disk contains files for the dBASE user. One (DBCLINIC) requires MBasic. Many of the.CMD (and related) files can be converted to dBASE III. Some have system-specific limitations Filename Description -11-00 .85 This is the release date of the disk. -CPM012 .DOC This is the description of the disk contents. AREACAL .CMD E204 3K [Area calculator 1 of 4] Calculate the area of space enclosed by a series of points. Two version, one with and one without X-center of gravity, are included here. Requires dBASE. AREACAL .DBF B4BF 1K [Area calculator 2 of 4] AREACAL .DOC CB74 2K [Area calculator 3 of 4] AREACG .CMD 6536 3K [Area calculator 4 of 4] GRAFGEN .CMD 5099 1K [Graphics Generator 1 of 3] Add screen graphics to dBASE programs run on an Osborne 1. DBGRAF .DOC 780A 4K [Graphics Generator 2 of 3] DRAWBOX .CMD 9D97 2K [Graphics Generator 3 of 3] DTUNE23 .COM 3B93 32K ver. 2.3x [dTUNE 1 of 2] Utility to shrink dBASE command file and build cross- reference of variables. For Z80 computers only. DTUNE23 .DOC B62B 4K ver. 2.3x [dTUNE 2 of 2] MEMTIP .DOC F236 3K [Memory Tips 1 of 3] Epson printer and Osborne 1 screen macros with instructions on how to use them with dBASE II. PRINT .MEM 7819 3K [Memory Tips 2 of 3] SCREEN .MEM EE38 3K [Memory Tips 3 of 3] SUPERBAK.CMD B66F 3K A backup and restore utility for dBASE. DBFTOTXT.CMD 3772 4K Convert dBASE data to MailMerge compatible file. Comments written in Finnish but should be easy for most users to understand. DBASM .ASM C31E 17K dBASE callable machine language sub-routines. DBCLEAN .COM F21E 14K [dBASE Cleanup 1 of 2] Remove extra ^Z markers from dBASE data files to help recover damaged data files. DBCLEAN .DOC DA67 1K [dBASE Cleanup 2 of 2] DBCLINIC.BAS 344F 20K MBasic program to update header information of dBASE data files. An aid to restoring some damaged files. LIBRARY .CMD D65B 1K [Library 1 of 13] A dBASE program to track books and other references. Allows searches for keywords, etc. to cross-references any material LIBRARY .DOC BED6 22K [Library 2 of 13] LIBADD .CMD 7918 3K [Library 3 of 13] LIBED2 .CMD EAEA 2K [Library 4 of 13] LIBEDIT .CMD 0833 3K [Library 5 of 13] LIBFIND .CMD A7BA 4K [Library 6 of 13] LREPORTS.CMD 8A25 3K [Library 7 of 13] LIBRARY .DBF 8248 5K [Library 8 of 13] KEYWORDS.DBF 9F08 2K [Library 9 of 13] AUTHORS .NDX ACE2 2K [Library 10 of 13] DATES .NDX C77F 1K [Library 11 of 13] KEYWORDS.NDX 91F8 3K [Library 12 of 13] ZIPS .NDX 6197 1K [Library 13 of 13] y 4 of 13] LIBEDIT .CMD 0833 3K [Library 5 of 13] ' This is the release date of the disk. DBASM ASM G@BASM ASM W-CPM012 DOC DBCLEAN COM X8DBCLEAN DOC fDBCLINICBAS gMBCLINICBAS w LIBRARY CMD {LIBRARY DOC |TIBRARY DOC LIBADD CMD LIBED2 CMD LIBEDIT CMD LIBFIND CMD