home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR7 / FOXTAILS.ZIP / FOXTAILS.DOC < prev    next >
Text File  |  1992-06-13  |  22KB  |  684 lines

  1.  
  2.             █▀▀▀▀          █           █                ██
  3.             █▀▀  ▄▄▄▄ █ █ ▄█▄ ▄▄▄▄  ▄  █  ▄▄▄▄    ▄█▄█▄  █
  4.             █    █  █  █   █  ▄▄▄█  ▄  █  █▄▄▄    ▄█▄█▄  █
  5.             █    █▄▄█ █ █  █  █▄▄█  █  █  ▄▄▄█     ▀ ▀  ███
  6.         ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  7.               Copyright 1992 by dbF Software Productions
  8.  
  9. Ever wonder how we do our FoxPro stuff?  Well, so do we sometimes.
  10. But FoxTails is a great place to start.  10 programming tools and UDF's
  11. are included, with source code.  They're all liberally commented,
  12. documented with samples.  Admit it, Fox Pros, haven't you
  13. ever wanted to:
  14.  
  15. Validate GET's using Popup's easily and quickly
  16. Convert data to Word Perfect MailMerge
  17. Enter Keyboard stuff using your mouse
  18. Do wonderful signs like we use?
  19. Use a calendar format for Date entry (yes, DATE entry)
  20. Easily display report files
  21. ... and more!!
  22. Well, FoxTails are some simple, clever tools to do just that, and
  23. for only $25!  Plus, registered FoxTail users get 1st (free) crack at
  24. FoxTails #2!
  25. Order a pre-registered copy today.........................
  26.  
  27. We'd like to hope that you see some potential uses for these tools.
  28. We also hope that you recognize the fact that you're using
  29. SHAREWARE, and therefor have a moral and legal responsibility
  30. to register this software if you find it helpful.  At $25, ya
  31. gotta admit it's a small price to pay for a clear conscience.
  32. And we'll make sure you get the next batch (FoxTails #2 - the
  33. Toolkit's Revenge) when they're hot off the presses.  At the
  34. rate these are rolling out, they should be ready by June or
  35. July.
  36.  
  37. Around the same time, look for our 1st dBase IV ToolKit,
  38. "dBaseX #1."
  39.  
  40. To Register, send $25(US) to:
  41.  
  42.   ╔══════════════════════════════╗
  43.   ║                              ║
  44.   ║   dbF Software Productions   ║
  45.   ║      P.O. Box 37194          ║
  46.   ║   Cleve., Ohio 44137-0194    ║
  47.   ║       CIS: 72117,165         ║
  48.   ║      (216)491-4581           ║
  49.   ║        Member ASP            ║
  50.   ║                              ║
  51.   ╚══════════════════════════════╝
  52.  
  53.  
  54. System Requirements:
  55.     FoxTails #1 requires a system with a working copy of FoxPro
  56. Version 2.0.  Certain tools (Lookup or Pickpop with large
  57. databases) work best with a 386 or better based system.
  58.  
  59.     FoxTails are not initially compiled, to take less space.
  60. Fox will automatically compile them when they are 1st used.
  61. All FoxTails can be used separate to each other, and do not
  62. require all of FoxTails to be installed or accessible.
  63.  
  64. Installation:
  65.     FoxTails is distributed as Shareware.  Simply Unzip the
  66. file FTail1.Zip in a directory (preferably by itself initially),
  67. and start it using the following command:
  68. FOX Foxtails <Enter>
  69.  
  70.     An Installation batch file (INSTALL.BAT) is provided for
  71. registered users to do this automatically.
  72.  
  73. Error Handling:
  74.     Very little error handling is performed by FoxTails, since
  75. they are programming tools, and not intended for end users.
  76. It's important for the programmer using them to take care to
  77. use them properly.  Use the documentation, sample code and
  78. help file to learn the ins and outs properly.
  79.  
  80. Support:
  81.     Technical Support can only be provided to registered users
  82. of FoxTails.  To register your copy, please send $25(US) to:
  83.  
  84. dbF Software Productions
  85. PO Box 37194
  86. Cleveland, Ohio
  87. 44137-0194
  88.  
  89. Please allow several weeks for delivery.  All registered
  90. FoxTail users will receive a shareware copy of FoxTails #2
  91. when available.
  92.  
  93. Support is also provided through the CompuServe Information
  94. System.  Send Inquiries to 72117,165.  We're usually hanging
  95. around the Data Based Advisor, FoxForum and Borland Dbase areas.
  96. (We're also now on Prodigy at XRCG88A)
  97.  
  98.  
  99. FoxTail #1
  100.  
  101.   ╔══════════════════════════╗
  102.   ║                          ║
  103.   ║        CPACK             ║
  104.   ║                          ║
  105.   ╚══════════════════════════╝
  106.  
  107. CPack will take information which has blanks
  108. either left or right and pack that field with a
  109. passed character.  So if you had an order number
  110. which is always preceded by 0's, CPack will pack
  111. it as the user entered it (so a "345" on a
  112. 6-length field would become "000345").
  113.  
  114. You can use CPack in either a GET, a REPLACE or a
  115. STORE.
  116.  
  117. Example:
  118.  
  119. @5,5 GET FVar VALID CPack(Pchar,What, Mem) PICTURE "XXXXXXXXXX"
  120.  
  121. Parameters:
  122.         PChr.   What Character to Pack it with.
  123.         What.   The field/memvar to be Cpacked.  (Use only
  124. in a STORE)
  125.         Mem.    Is this a memory variable?  (Use only if
  126. it's a memvar)
  127.  
  128. If you're doing this to a database field during a
  129. get, you can get (yuck-yuck) away with simply
  130. CPACK(Pchr).  A Cpack() will default the Pchr to "0".
  131.  
  132.  
  133.  
  134.  
  135. FoxTail #2
  136.  
  137.   ╔══════════════════════════╗
  138.   ║                          ║
  139.   ║       DBFIXED            ║
  140.   ║                          ║
  141.   ╚══════════════════════════╝
  142.  
  143.  
  144. This program will help you import data files into
  145. a dbF format.  Files that have some kind of fixed
  146. record length but with a header (ie, a Cobol data
  147. file) length.  You try finding (or already know)
  148. combinations of record and
  149. header lengths until you find one that fits...
  150.  
  151. For example, a Cobol file has a fixed record
  152. length, except for the header.  Trial and error
  153. will let you find a working match of header and
  154. record, which you can than approve and port to a
  155. database.
  156.  
  157. There are no parameters for this.
  158.  
  159. For what it's worth, one of the identified tools
  160. for Fox Tails #2 (Revenge of the Toolkit) is an
  161. enhanced version of dbFixed that will have let the
  162. user define the fields that the results should be
  163. stored in.
  164.  
  165. See the registration help for information on how
  166. to get your paws on Fox Tails #2.
  167.  
  168.  
  169.  
  170.  
  171. FoxTail #3
  172.  
  173.   ╔══════════════════════════╗
  174.   ║                          ║
  175.   ║       GET_DATE           ║
  176.   ║                          ║
  177.   ╚══════════════════════════╝
  178.  
  179. Get_date allows the user to point and click at a
  180. Date which is displayed calendar-style.  The only
  181. parameter is the initial date to be used.
  182.  
  183. You can use Get_date in two ways.  First, you can
  184. use it for an original entry of a date.  An
  185. Example:
  186.  
  187. Dt = GET_Date(DATE())
  188.  
  189. Second, you can also call it as part of a VALID statement.
  190. For that you would actually call the Valid statement
  191. first, since GET_DATE does no real validation checking.
  192. If the routine would usually return a false back to the
  193. GET, call up GET_DATE as part of a loop.  See the sample
  194. to see how that's done.  And be amazed.
  195.  
  196.  
  197.  
  198.  
  199. FoxTail #4
  200.  
  201.   ╔══════════════════════════╗
  202.   ║                          ║
  203.   ║       LOOKUP             ║
  204.   ║                          ║
  205.   ╚══════════════════════════╝
  206.  
  207. By far the most powerful and complex of the tools.  Lookup
  208. provides a whole platform for Power Seeks using the Browse
  209. function, and let's the user launch into an activity from
  210. within.  Through the use of ON KEY LABELS you can create a
  211. full range of actions to be taken.
  212.  
  213. You may notice some similarities here.  There are really
  214. two sources of inspiration here.  First is an EXCELLENT
  215. article written by the Great George Goley IV, in Data Based
  216. Advisor some time back.  Second is a template design in UI2,
  217. part of the GENSYS system.  But there are significant changes
  218. to both of them.
  219.  
  220. You can nest Lookups, limited (we hope) by memory only.  The
  221. system takes care of that automatically, through use of the
  222. NumLkp variable.  Also, this is made to find a record and then
  223. perform the next task WHILE REMAINING IN THE BROWSE, using OKL's.
  224.  
  225. DANGER, WILL ROBINSON!!!
  226. This Critter is easy to break.  How?  The most common errors
  227. (not by us, of course...we're perfect):
  228.  
  229. 1>      Improper Browse statements as part of the parameter
  230. list (includes databases not set up, etc.)
  231. 2>      Multi-user access of the Junk database (fairly easy
  232. to add on to, but it'll make it more convoluted...later, perhaps?).
  233. 3>      Remember when you launch into your subsequent functions
  234. to take care of your OKL's and retain the database situations
  235. (index, relations, etc.).
  236. 4>      Speed...this can be dead slow like a wiener dog on an AT.
  237. It's pretty good on a faster machine...
  238.  
  239. The Parameters?  Hold onto your hats, here they are:
  240.  
  241. PARAMETER Ttlstr, Fldlist, Defsrch, Toprow,
  242. Topcol, botrow, Botcol, Db, Ldb, Exwin, key1, key2
  243.  
  244. TtlStr          String for Title Line of Browse Box
  245. Fldlist         Browse Field List in FoxPro Format
  246. Defsrch         Beginning Default Search
  247. Toprow          Top Row (relative) of Box
  248. Topcol          Top Column (relative) of Box
  249. Botrow          Bottom Row (relative) of Box
  250. Botcol          Bottom Column (relative) of Box
  251. db              Database Alias to be in use after lookup
  252. ldb             Database Alias to be in use during lookup
  253. Exwin           Window to activate upon exit
  254. Key1            For Scoping (limiting) the scroll...
  255.                 Beginning value of index or Scope
  256. Key2            For Scoping (limiting) the scroll...
  257.                 Ending value of index or Scope
  258.  
  259.  
  260.  
  261.  
  262. Now, how do you call this magical beast?  You do so by
  263. STRICTLY ADHERING to the following:
  264.  
  265. 1:      Define variable Numlkp = "0"  (Counter)
  266. 2:      Open databases, set relations, etc.
  267. 3:      Define the window where it takes place
  268. 4:      Activate said window, display information
  269. 5:      Define any OKL's that are to take place
  270. 6:      Call Lokup with the proper parameters
  271. 7:      Release (reset) OKL's
  272. 8:      Release Window
  273.  
  274. #1:
  275. Numlkp = "0"
  276. #2:
  277. SELECT A
  278. USE Account ORDER Name IN A
  279. USE Policy ORDER Acct IN B
  280. SET RELATION TO Acc_Pnum INTO Policy
  281. #3:
  282. DEFINE WINDOW Acc_Lookup FROM  17, 0 TO 22, 66
  283. FLOAT
  284. #4:
  285. ACTIVATE WINDOW Acc_Lookup
  286. @ 0, 1 SAY "<F1>    - Lookup Help"
  287. @ 1, 1 SAY "<F2>    - Edit Account"
  288. @ 2, 1 SAY "<F3>    - Policy (1-Many) Lookup"
  289. @ 3, 1 SAY "Account Lookup Screen - Tap <Esc> to
  290. Exit"
  291. #5:
  292. PUSH KEY
  293. ON KEY LABEL F1 DO Hlp
  294. ON KEY LABEL F2 DO Edt
  295. ON KEY LABEL F3 DO Pol
  296. #6:
  297. DO Lokup WITH "Accounts",'ACCOUNT.ACC_NAME:H="Account Name",;
  298. ACCOUNT.ACC_PNUM:H="Acc #",ACCOUNT.ACC_STATE:H="State",;
  299. Fnd=FOUND("Policy"):H="Policy"','',5,0,16,70,ALIAS(),;
  300. 'ACCOUNT','','NONE','NONE'
  301. #7:
  302. POP KEY
  303. #8:
  304. RELEASE WINDOW Acc_lookup
  305.  
  306. Now, what exactly are we doing?  We're creating a way to
  307. select a record from a database and "launch" into another
  308. task, using the Browse feature.  The 3 OKL's define the
  309. tasks to be launched into.
  310.  
  311.  
  312.  
  313.  
  314. FoxTail #5
  315.  
  316.   ╔══════════════════════════╗
  317.   ║                          ║
  318.   ║       MKEY               ║
  319.   ║                          ║
  320.   ╚══════════════════════════╝
  321.  
  322.  
  323. Program MKey, allows a user to actually perform a majority
  324. of data entry using just the mouse.
  325.  
  326. Now, why would someone want to do that?  Well, as a true
  327. couch potato, I could try to claim some level of
  328. slouch-saving doing this.
  329.  
  330. More importantly (and seriously), it shows how relatively
  331. simple it is to maximize the capabilities of the computer
  332. for someone who is physically challenged (or whatever the
  333. current "politically correct" term is these days) to
  334. access programs already written.
  335.  
  336. There are other situations where access to the keyboard is
  337. limited, I suppose.  Like when my wife hides it from me.
  338.  
  339. Now, how would you use this program?
  340. Welllll....like this:
  341.  
  342. The key thing is to include Mkey(Var, length) in any VALID
  343. statement so that it would be called.  It would also help
  344. to initialize an OKL so that the Right mouse button would
  345. call Mkey.  This would allow the program to be called
  346. whenever the user tapped the button.  This is how you would
  347. perform Mkey during GET's:
  348.  
  349.    ON KEY LABEL RIGHTMOUSE DO Mkey WITH "","",.T.,0
  350.  
  351. For an original data entry, you'd use:
  352.  
  353. Dt = Mkey("Dt",DATE())
  354.  
  355. You don't need the 3rd and 4th parameter this example,
  356. since 3> it isn't a GET statement, and 4> a date has a length of 8, period.
  357.  
  358. Simple, huh?
  359. Well, there are some limitations.  They are as
  360. follows:
  361. 1>      Memo field probably won't work too well here.
  362. We could have included them, and perhaps will in a
  363. subsequent release.  But they represent a
  364. different colored horse story.
  365.  
  366.  
  367.  
  368.  
  369.  
  370. 2>      The field must have some kind of default
  371. condition.  If it doesn't, Fox will give it a
  372. Logical field type, which is pretty useless.
  373.  
  374. The parameters are stated as such:
  375. Mkey((<FieldC1>, <FieldC2> , <FieldL1> [,<FieldN>])
  376.  
  377. Where:
  378. <FieldC1>:      is the name of the field
  379. <FieldC2>:      is the initial starting value
  380. <FieldL1>:      is it a GET? (a .F. means it's a STORE)
  381. <FieldN1>:      is the maximum length (for Chr and
  382. numeric only)
  383.  
  384.  
  385.  
  386.  
  387. FoxTail #6
  388.  
  389.   ╔══════════════════════════╗
  390.   ║                          ║
  391.   ║     PICKPOP              ║
  392.   ║                          ║
  393.   ╚══════════════════════════╝
  394.  
  395. Pickpop is a program that allows a programmer to
  396. easily create unlimited validation POPUPs for a
  397. GET statement that still looks like a normal GET
  398. statement.  It can also be used as part of a
  399. STORE, or X=PICKPOP....there are several
  400. parameters:
  401.  
  402. *       Passed Parameters:
  403. PICKPOP(<FieldC1>, <FieldC2>, <FieldC3>,
  404. <FieldC4>, <FieldC5>, <FieldL1>, <FieldL2>)
  405.  
  406. Where:
  407.  
  408. <FieldC1>:      is the name of the POPUP
  409. <FieldC2>:      is the name of the database that the popup uses
  410. <FieldC3>:      is the name of the CDX tag that the popup uses...
  411. <FieldC4>:      is the name of the field to be verified...
  412. <FieldC5>:      is the expression to be replaced from the POPUP.
  413. <FieldL1>:      is the expression to be validated a Field?
  414. <FieldL2>:      is this a variable STORE (as opposed to a GET)?
  415.  
  416. Remember, PICKPOP Requires that a Popup has been
  417. DEFINED prior to the calling!
  418.  
  419. An example:
  420.  
  421. 1>      Define the popup:
  422. DEFINE POPUP Title FROM 10,5 TO 13,32 PROMPT FIELD
  423. Ttle TITLE "Choose one!"
  424. ON SELECTION POPUP Title DEACTIVATE POPUP Title
  425.  
  426. 2>      Perform the Get:
  427. @5,15 GET People.Title DEFAULT SPACE(25) VALID ;
  428. Pickpop("Title","Title","Ttle","People.Title","Title.Ttle",.T.,.F.)
  429.  
  430. or, as part of a STORE (1st define the Popup as in Step 1:
  431. S = ' '         <----define the variable before calling!!
  432. S =
  433. Pickpop("State","State","St_Code","S","State.St_name",.F.,.T.)
  434.  
  435.  
  436.  
  437.  
  438. FoxTail #7
  439.  
  440.   ╔══════════════════════════╗
  441.   ║                          ║
  442.   ║         REORG            ║
  443.   ║                          ║
  444.   ╚══════════════════════════╝
  445.  
  446. This program will recreate all generic Compound
  447. Indexes for all open databases.
  448.  
  449. This program assumes the following:
  450.     All databases that you want indexed are currently
  451. open and available for business (this means that
  452. they are accessible in a multi-user situation)
  453.  
  454.         That no index includes a relation in either the
  455. CDX Tag's Expression or the FOR clause.
  456.         That all indexes are CDX Tags.
  457.         That none of the Tags are UNIQUE.
  458.         That you're a deserving boy or girl.
  459.  
  460. If any of these conditions exists, Reorg will make
  461. trouble in your life!!
  462.  
  463.  
  464.  
  465.  
  466. FoxTail #8
  467.  
  468.   ╔══════════════════════════╗
  469.   ║                          ║
  470.   ║        SIGN              ║
  471.   ║                          ║
  472.   ╚══════════════════════════╝
  473.  
  474. SIGN is a function that will blow up the
  475. characters of a user-supplied string into big
  476. letters and scroll them about the screen.  To call
  477. SIGN, you pass the following parameters:
  478.  
  479. <FieldC1>, <FieldN1>, <FieldN2>, <FieldC2>,
  480. <FieldN3>
  481.  
  482. Where:  <FieldC1> is the string you want converted
  483.  
  484. <FieldN1>:      is the vertical position (0-18)
  485. <FieldN2>:      is the horizontal position
  486. (0-[79-9*LEN(<FieldC1>)])
  487. <FieldC2>:      Slide Direction: (T)op, (B)ottom,
  488. (L)eft, (R)ight
  489. <FieldN3>:      Time delay (Seconds) between updates
  490.  
  491. Example:
  492. We'll do "FERRET" (always a favourite, don't you
  493. agree?) from 8,1 scrolling from the right with a
  494. .1 second delay between updates
  495.  
  496. DO Sign WITH "FERRET", 8,1,"R",.1
  497.  
  498.  
  499.  
  500.  
  501. FoxTail #9
  502.  
  503.   ╔══════════════════════════╗
  504.   ║                          ║
  505.   ║        STEP              ║
  506.   ║                          ║
  507.   ╚══════════════════════════╝
  508.  
  509.  
  510. Step lets the mouse take care of numeric, date or character
  511. entry, by letting you place areas where striking that area
  512. (an invisible button) would increase or decrease the numeric
  513. value by a specified amount.  You can also pass limits.  So
  514. you can create a place where the user can click through a 1-10
  515. by 1, or an area where they go more gradually, by .125, if you
  516. wish.
  517.  
  518. Called by:
  519.     Step(Vr,Stype,Mn,Mx,Stp,Fld)
  520. Parameters:
  521.     Vr        The name of the field to be stepped, not the name
  522.             of the field you're currently Validating
  523.     Stype    The type of Stepping you wish to do.
  524.             C = Character
  525.             Y = Year
  526.             M = Month
  527.             W = Week
  528.             D = Day
  529.             Anything else is whatever the Stp value is.
  530.  
  531.     Mn        Minimum value for Dates and Numeric Steps.
  532.             Min is also the Position # (from left) of the
  533.             string you're modifying.  So, for example if you
  534.             are working on:      
  535.                              "ABCDE"
  536.  
  537.             your Mn value would be 4, since the position held by
  538.             the "D" is the 4th from the left.
  539.  
  540.     Mx        the Maximum value for Dates and Numeric Steps.
  541.  
  542.     Stp        Step amount.  Usually 1, it tells the number to step by.
  543.             If you wanted to increment by 1/4, stp would be .25
  544.  
  545.     Fld        Is this a Field you're Stepping on?  If so, send .T.
  546.  
  547. Example Code for Numeric Stepping:
  548.  
  549. @4,5 SAY ""        &&    Marker for the Invisible Button #1
  550. @6,5 SAY ""        &&    Marker for the Invisible Button #2
  551. *    Invisible Button #1
  552. @4,5 GET Inc FUNCTION '*I' SIZE 1,1,1 VALID Step("X","N",45,55,1,.F.) ;
  553. DEFAULT 1 ERROR "Min of 1"
  554. @5,5 GET X VALID BETWEEN(X,45,55) PICTURE "99"
  555. *    Invisible Button #2
  556. @6,5 GET Dec FUNCTION '*I' SIZE 1,1,1 VALID Step("X","N",45,55,-1,.F.) ;
  557. DEFAULT 1 ERROR "Max of 100"
  558.  
  559. We use the 2 invisible buttons to drive X
  560.  
  561.  
  562.  
  563.  
  564. FoxTail #10
  565.  
  566.   ╔══════════════════════════╗
  567.   ║                          ║
  568.   ║    WPCONV                ║
  569.   ║                          ║
  570.   ╚══════════════════════════╝
  571.  
  572. WpConv will take an array of database fields, functions,
  573. memory variables or any of that good stuff and convert
  574. them into fields that you can use in a Word Perfect
  575. MailMerge file.  This way you can create a mailing list
  576. easily.  Simply call the routine:
  577.  
  578. =WPCONV('<File Name>',@<Array Name>, [<FieldL1>], [<FieldC1>])
  579.  
  580. Where:= <File Name>
  581.         is the file that you want the results stored in,
  582.  
  583. and:    <Array Name>
  584.         is the array that has all of the NAMES of
  585. information you want stored (usually field names)
  586.  
  587. and:    <FieldL1>
  588.         is whether you want a blank record to be the 1st
  589.  
  590. and:    <FieldC1>
  591.         is the field-delimiting character (defaults to ',')
  592.  
  593. one created (this is optional, default is .F., or no)
  594.  
  595.  
  596.  
  597.             ###############################
  598.             #*****************************#
  599.             #*    COMING ATTRACTIONS!    *#
  600.             #*****************************#
  601.             ###############################
  602.  
  603. FoxTails #2:  The Toolkit's Revenge
  604.  
  605. FoxTails #2 will pick up where FoxTails #1 began, namely
  606. by giving you the programmer even more tools to make
  607. FoxPro work for you!
  608.  
  609. Some of the tools we're working on include:
  610.  
  611. ViewMaster:
  612. Similar to CREATE VIEW xxx, but instead of a .VUE file,
  613. creates a program which you can easily modify!
  614.  
  615. BrowBld:
  616. Create complicated BROWSE statements through a menu, and
  617. save them as either code or in a database for further use.
  618.  
  619. DbFixed2:
  620. or, "Son of DbFixed."  Takes up where dbFixed left off.
  621. Direct Low-level I/O to specific database fields.
  622.  
  623. All of these tools and more, when FoxTails #2 makes its
  624. debut!
  625.  
  626.  
  627.  
  628. Credits, Blame and Excuses...
  629.  
  630. FoxTails is written by R.L. Coppedge, with the exception
  631. of Lookup, which is by R.L. Coppedge and Jerry Hare.
  632.  
  633. Documentation is by R.L. Coppedge, with help from Helen Coppedge
  634. (thanx, dear).
  635.  
  636. Testing and final lookabouts by Jim Johnson.
  637. Debugging and Beta help:
  638. Susan M. Cunningham
  639. Randy Wallin
  640. Martin Schiff
  641.  
  642. Packaging and distribution by dbF Software Productions.
  643.  
  644. Fox, FoxPro are owned by Fox Holdings (lucky stiffs) or
  645. Microsoft, depending on when you're reading this.
  646.  
  647. Word Perfect is owned by Word Perfect Corporation
  648.  
  649. dBase is owned by Borland International.
  650.  
  651. dbF Software Productions is a member of the Association of
  652. Shareware Professionals.
  653. Substantial Penalty for Early Withdrawal.
  654.  
  655.  
  656.  
  657. ASP Information:
  658.  
  659. This program is produced by a member of the Association of
  660. Shareware Professionals (ASP). ASP wants to make sure that
  661. the shareware principle works for you. If you are unable to
  662. resolve a shareware-related problem with an ASP member by 
  663. contacting the member directly, ASP may be able to help.  
  664. The ASP Ombudsman can help you resolve a dispute or problem
  665. with an ASP member, but does not provide technical support
  666. for members' products. Please write to the ASP Ombudsman at
  667. 545 Grover Road, Muskegon, MI 49442 or send a CompuServe 
  668. message via CompuServe Mail to ASP Ombudsman 70007,3536.
  669.  
  670. DisClaimers:
  671.  
  672. THIS SOFTWARE AND MANUAL ARE SOLD 'AS IS' AND WITHOUT WARRANTIES
  673. AS TO PERFORMANCE OF MERCHANTABILITY OR ANY OTHER WARRANTIES
  674. WHETHER EXPRESSED OR IMPLIED.  BECAUSE OF THE VARIOUS HARDWARE
  675. AND SOFTWARE ENVIRONMENTS INTO WHICH THIS PROGRAM MAY BE PUT, NO
  676. WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE IS OFFERED.
  677.  
  678. GOOD DATA PROCESSING PROCEDURE DICTATES THAT ANY PROGRAM BE
  679. THOROUGHLY TESTED WITH NON-CRITICAL DATA BEFORE RELYING ON IT.
  680. THE USER MUST ASSUME THE ENTIRE RISK OF USING THE PROGRAM.  ANY
  681. LIABILITY OF dbF SOFTWARE PRODUCTIONS ITS PRINCIPALS WILL BE
  682. LIMITED EXCLUSIVELY TO PRODUCT REPLACEMENT OR REFUND OF PURCHASE
  683. PRICE.
  684.