home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / umind.zip / U-MIND.DOC < prev    next >
Text File  |  1986-04-25  |  51KB  |  873 lines

  1.  
  2.                 -----------------------------------------------
  3.                 :                                             :
  4.                 : Supplement To Ultra-Utilities Documentation :
  5.                 :                                             :
  6.                 :           >>>>>> Ultra-Mind <<<<<<          :
  7.                 :                                             :
  8.                 :  The Intelligent Database Program Generator :
  9.                 :                                             :
  10.                 -----------------------------------------------
  11.  
  12.                   RELEASE 1.0, First Release, December, 1983
  13.                              Author: Wat Buchanon
  14.           
  15.           
  16.                     
  17.  
  18.           Ultra-Mind program and documentation Copyright (C), 1983, The
  19.           FreeSoft Company, P.O. Box 27608, St. Louis, MO 63146.  All Rights
  20.           Reserved.  Please see Ultra-Utilities documentation for warranty and
  21.           duplication policy.
  22.                                Table Of Contents
  23.                                -----------------
  24.  
  25.           Introduction........................................UM-1
  26.           
  27.           Defining And Generating Your Database...............UM-2
  28.           
  29.           How To Use The Generated Program....................UM-8
  30.           
  31.           Appendix A: Format Of Ultra-Mind Disk Files.........UM-11
  32.           
  33.           Appendix B: Wish List...............................UM-13
  34.           
  35.           Appendix C: The Ultra-Utilities.....................UM-14
  36.           
  37.           Appendix D: Limited License For Ultra-Mind..........UM-15
  38.           UM-1)                   Introduction
  39.                                   ------------
  40.           
  41.           At FreeSoft, we do quite a lot of database work, both for ourselves 
  42.           and for clients.  After writing about the seven millionth database 
  43.           manager, we came to a startling conclusion: very little was actually 
  44.           changing from program to program.  We admittedly are experts when it 
  45.           comes to reinventing the wheel, but this time a thought struck us, 
  46.           "Why not write a database program generator?" (TA-DA! Sound of 
  47.           trumpets...).  Well, that was several years ago, and Ultra-Mind is 
  48.           the end result.  Basically what it does is allow you to set up your 
  49.           unique database needs, and then actually writes a dedicated database 
  50.           program in BASIC while you watch.
  51.           
  52.           What we found was that we were doing in a few minutes what used to 
  53.           take hours or days.  Here's a brief outline of Ultra-Mind's 
  54.           capabilities and features:
  55.           
  56.           1) This program allows you to set up a customized data entry system 
  57.              and then writes a dedicated BASIC database manager program.
  58.           
  59.           2) The data entry can be divided into multiple screens, called 
  60.              "pages".
  61.           
  62.           3) Several different types of input fields are supported: Numeric,    
  63.              Alphanumeric, Formatted Numeric, Calculated, Automatic Date, and   
  64.              Automatic Time.  In addition, the user can specify any keys that   
  65.              are restricted from entry for each individual field (No Z's 
  66.              allowed, for instance).
  67.            
  68.           4) Non-field symbols, such as titles or borders, can be placed any-   
  69.              where on the data entry screens for a truly professional 
  70.              appearance.
  71.           
  72.           5) Generated program is documented with remarks for easy 
  73.              customization.
  74.           
  75.           6) Sophisticated hashing algorithm nullifies BASIC's slow execution.  
  76.              Typical record access (no matter how many records in the system)   
  77.              when the key field is known is under 1/2 second.
  78.           
  79.           7) Knowledge of BASIC, data-file input/output routines, or other      
  80.              special functions is not required.  A small amount of BASIC 
  81.              formula format is helpful for using calculation fields.
  82.           
  83.           8) All generated programs can be compiled for added speed under the   
  84.              Search and List functions.
  85.           
  86.           9) Number of fields and total field characters dependent only on 
  87.              available memory (total field characters per record must be less   
  88.              than 65,536 characters not counting program size).
  89.  
  90.           We hope you'll enjoy this package and will choose to support The 
  91.           FreeSoft Company in our endeavor to bring you the most interesting 
  92.           software at the best price.  We place this product in your hands at 
  93.           no cost in order for you to truly judge its appropriatness for your 
  94.           applications.
  95.           UM-2)           Defining And Generating Your Database
  96.                           -------------------------------------
  97.  
  98.           Before executing the Ultra-Mind program generator, you should insure 
  99.           that the following programs are on the diskette in your logged 
  100.           (default) disk drive:
  101.           
  102.           1) Ultra-Mind program generator (U-MIND.BAS)
  103.           2) Ultra-Mind skeleton program (SKELETON.BAS)
  104.           3) BASIC programming language  (BASIC.COM or BASICA.COM)
  105.  
  106.           From the DOS prompt, type: BASIC U-MIND
  107.           and the program should load and execute after a few seconds.  You 
  108.           will first be presented with the question:
  109.           
  110.           Do you wish to:
  111.           
  112.           1) Define a database
  113.           2) Generate an already defined database
  114.           
  115.           You should reply by pressing the '1' key (don't press <ENTER> after 
  116.           this). The program will ask you for a filename for the resulting 
  117.           program (8 characters, first character alphabetic).  DO NOT add an 
  118.           extension (a period followed by 1-3 characters) to this filename. The 
  119.           program will now ask you for the title of the program and the 
  120.           author's name (yours!). Finally, you'll be asked which disk drive 
  121.           will later be used to hold the data file.  You should have a disk 
  122.           with plenty of room in this drive, as the generated program itself,
  123.           as well as several other information files will be sent to this drive
  124.           while Ultra-Mind is working.         
  125.           
  126.             You are now presented with the screen layout display. This display 
  127.           is used to tell Ultra-Mind the information you wish to have displayed
  128.           in your database program data entry screens, as well as to define the
  129.           type of input fields.
  130.           
  131.           The bottom of the screen is used as a message area in both the 
  132.           program generator and in your generated program.  Therefore, the top 
  133.           23 lines of the screen are reserved for your information.
  134.           
  135.           First, a little background on database files.  A database file
  136.           consists of a group of individual entries called "records".  A record
  137.           might be a recipe, information on an employee, or an address book
  138.           listing.  Each record is further subdivided into groups of 
  139.           information called "fields".  In an employee record, one field might 
  140.           contain the date the employee was hired, and another might have his 
  141.           zip code.  One of the fields in each record is predefined as the "key 
  142.           field".  This is the field that best identifies each record, and will 
  143.           be used to retrieve the record from the file.  If a file contained 
  144.           records of inventory parts, you might designate the inventory number 
  145.           as the key field.  In an address list, you might use the person's 
  146.           last name as a key field.
  147.           
  148.           Why the last name instead of the full name?  Ultra-Mind works best in 
  149.           applications where you know the key field.  It's easy to forget 
  150.           whether you entered a person as George Smith or W. G. Smith, so the 
  151.           last name system would work best.  If you're not sure of the key 
  152.           field exactly, there is a mechanism for still finding the record, but 
  153.           it is much slower.
  154.           UM-3)
  155.           O.K., back to the program.  At the bottom of the screen, you should 
  156.           see the message:
  157.           
  158.           <Key Field>, Page 1: Use arrow keys to position cursor, then press 
  159.             <H>.
  160.           
  161.           There are three parts to a field, it's number (the key field is 
  162.           always field number 1), the field prompt (that tells you what to 
  163.           enter), and the input field area itself.  Directly above the message 
  164.           area in the center you should see a diamond character.  This is 
  165.           Ultra-Mind's "cursor", and is what you will move around to point to 
  166.           different areas of the screen.  Practice moving the cursor around 
  167.           with the arrow keys (or the number keys 8=up, 2=down, 6=right, and 
  168.           4=left).  Notice that if you press the Home key (or 7 key), the 
  169.           cursor jumps to the upper left hand corner of the screen.  The PgUp 
  170.           (or 9) key moves the cursor to the upper right, the PgDn (or 3) moves 
  171.           to the lower right, and the End (or 1) key moves the cursor to the 
  172.           lower left corner.  Select a place that will be appropriate for the 
  173.           key field and press the 'H' key.  Notice that the characters "1)" 
  174.           appear where the cursor used to be.  That's the field number that 
  175.           will make it easy for you to later tell the generated program which 
  176.           field you want to update or search for.
  177.           
  178.           At the bottom of the screen, a new message appears telling you to 
  179.           enter the field prompt you wish to use.  Type in a descriptive 
  180.           message that will prompt the user to type in the correct information 
  181.           for that field (like NAME: or PART NUMBER:, for instance).  You have 
  182.           up to 50 characters for the field prompt, and you can leave it blank 
  183.           should you wish.  The program will again ask you to position the 
  184.           cursor and press the <H> key.  Don't worry about moving the cursor 
  185.           over other characters on the screen, it's doesn't destroy what it 
  186.           moves over.  Don't allow your information to overlap other fields, 
  187.           though, or you will get an error message.
  188.           
  189.           When you've positioned the cursor and pressed the H key, you'll see 
  190.           your field prompt appear at that location.  Now, we must tell the 
  191.           computer what type of field this is.  The different field types each 
  192.           ask different questions, so we'll cover them one at a time.
  193.           
  194.           NUMERIC
  195.           -------
  196.           This type of field is composed only of numeric symbols, that is 0-9, 
  197.           the plus and minus signs and the decimal point (period).  Although it
  198.           is kept as a string of characters in the disk file, it is converted 
  199.           into a number when displayed by the generated program.  Only numeric 
  200.           fields can be used by calculation fields (described below).
  201.           
  202.           When you select this type of field, you will be asked to type in the
  203.           length of the field.  This is the number of characters that the 
  204.           largest possible number that can be entered will have.  FOR ALL 
  205.           FIELDS, THE FIELD NUMBER, FIELD PROMPT, AND INPUT FIELD MUST NOT BE 
  206.           GREATER THAN 79 CHARACTERS LONG TOTAL.  Because the number of fields 
  207.           is limited only by your computer's memory (and believe us, you have 
  208.           plenty of room), this really isn't a problem.  Just split up extra 
  209.           long fields into smaller ones.  You will then be asked to locate the
  210.           cursor and press <H>.  When you have done so, the input field appears
  211.           as a series of small boxes.  This field now looks exactly as it will
  212.           on the data entry screen of the generated program.
  213.           UM-4)
  214.           There is still more information the computer needs about this field.  
  215.           It next asks if you wish to restrict input characters.  If you type 
  216.           "N", any numeric character can be typed into the field.  If you 
  217.           answer "Y", you will be shown a list of all numeric characters and 
  218.           asked to type an "X" under the characters you wish to restrict.  Type 
  219.           a space under those you wish to allow.  Those characters that you 
  220.           restrict will be dead on the keyboard during entry of this field.
  221.           
  222.           Now the program asks you how many lines of edit checking you wish to 
  223.           have.  If you don't wish to check the field for entry errors, just 
  224.           type a 0.  Otherwise, for each edit check you'll be asked to enter an 
  225.           edit string.  The format for an edit string is:
  226.           
  227.           TESTSYMBOL VALUE
  228.           
  229.           Where TESTSYMBOL is either a > (greater than), < (less than), or = 
  230.           (equal to), and VALUE is a number.  Edit checks should be entered in 
  231.           the negative.  In otherwords the edit check:
  232.           < 52 
  233.           will tell the operator they've made an error only if the number they 
  234.           enter into this field is less than 52. 
  235.           
  236.           Finally, you'll be asked if you wish to use a special printing format 
  237.           when this field is later displayed.  If you do, just type the format 
  238.           as you would the format string in a BASIC PRINT USING statement 
  239.           (without surrounding quotes).  You should consult your BASIC manual 
  240.           on the PRINT USING statement if you're unsure of this.  As an 
  241.           example, if a field contained the number 342342.345 and your special 
  242.           printing format was ###,###.## the number would be displayed as 
  243.           342,342.34 when the record is displayed later.        
  244.           
  245.           ALPHANUMERIC
  246.           ------------
  247.           This field is used for entries that are either all alphabetic or 
  248.           mixed letters, symbols, and numbers.  Even if a number is entered 
  249.           into an alphanumeric field, it will be considered only a string of 
  250.           characters, and calculation fields cannot use it.
  251.           
  252.           This type of field needs the same type of information as numeric 
  253.           fields in the way of field position, field length, and input 
  254.           character restriction, except that it does not ask for edit checks or 
  255.           special printing formats.  There is only one type of edit check for 
  256.           alphanumeric fields and that is for a null entry (<ENTER> pressed 
  257.           without entering any characters).  Null entries can be allowed in any 
  258.           field except the key field.
  259.  
  260.           FORMATTED NUMERIC
  261.           -----------------
  262.           This is a special type of field that allows you to enter numbers into 
  263.           a "template".  For instance, the parentheses, space,  and hyphen in  
  264.           the following number (323) 343-3423 identify it as a phone number.  
  265.           Although formatted numeric fields are handy for entering numeric data 
  266.           into a template, the resulting number is treated as a string of 
  267.           characters, including the special symbols used in the template, and 
  268.           cannot be used by calculation fields.  After locating the cursor 
  269.           where you wish the input template to appear and pressing H, the 
  270.           computer will ask you to enter your special format.  Any special keys 
  271.           can go into the template except the backslash (\).  The backslash is 
  272.           used to show where the input numbers will be located.  If we wanted a 
  273.           phone number field like the one above, we would enter our format as:
  274.           (\\\) \\\-\\\\
  275.           UM-5)
  276.           When it's displayed on the screen, the backslashes will be converted 
  277.           to the familiar small input boxes.  Pay attention to your format, as 
  278.           its a bit easy to get confused.  For example, the format:
  279.           \\/\\/\\
  280.           could actually be used for entry of a date.  Look closely and see how 
  281.           it would displayed.  (Hint: 01/14/84).
  282.           
  283.           CALCULATED
  284.           ----------
  285.           This type of field is not entered by the user at all.  It is 
  286.           calculated from values in other numeric fields.  It is not displayed 
  287.           at all during the data entry process, only later when the record is 
  288.           retrieved from the file and displayed.  It's helpful to know BASIC's 
  289.           format for specifying formulas when using this type of field.  You 
  290.           need to pay attention to what the field numbers are of the numeric 
  291.           fields to be used and the resulting calculation field.  Here's an 
  292.           example.  If we were working on field 5 and we specified a 
  293.           calculation field, the computer would ask us how many calculation 
  294.           lines we wished to have.  For this example we'll just do something 
  295.           simple in a single calculation line.  To specify numeric or 
  296.           calculation fields in a calculation line, use the symbols F# followed 
  297.           by the field number in parentheses.  O.K., let's add the values in 
  298.           field 2 and field 4 and display that in our calculation field (field 
  299.           5, remember?).  Here's how our calculation line would look:
  300.           F#(5)=F#(2)+F#(4)
  301.           You can do all kinds of tricky things with calculation fields, and 
  302.           it's easy to get yourself in trouble with them, so practice is in 
  303.           order before using them.  If you need to store temporary values in a 
  304.           variable, use the variables U1# through U100#.
  305.           
  306.           You can also specify a special printing format for this field, just 
  307.           as you can for numeric fields.
  308.           
  309.           DATE AND TIME FIELDS
  310.           --------------------
  311.           These field types are also done automatically, but in the data entry 
  312.           stage.  It permanently stores the date or time in the field at the 
  313.           moment of data entry.  It's useful for fields such as "Last Updated 
  314.           ON: 03-15-1983".  Just use the U>pdate function on these fields each 
  315.           time you update a record.
  316.           
  317.           Each time you finish entering a field, you are presented with a list 
  318.           of choices:
  319.           
  320.           1) Enter new field, 2) Start new page, 3) Enter non-field symbols, 4) 
  321.           Quit.
  322.           
  323.           Select "Enter new field" to continue adding fields to that page.  
  324.           Whoops!  What's a page?  Well, that's a special feature of Ultra-Mind 
  325.           that keeps your screens from getting cluttered.  You can have as many 
  326.           display screens (called "pages") as you wish.  When you select "Start 
  327.           new page" the screen layout area is erased and you continue with a 
  328.           fresh slate.
  329.           
  330.           The "Enter non-field symbols" option is used to "prettify" your 
  331.           screen layouts with titles, borders, etc.  When you select this 
  332.           option, you will again be asked to locate the cursor where you wish 
  333.           to place the symbols.  Then you will asked to enter the symbols you 
  334.           wish to place there.  There are two different ways to specify the
  335.           UM-6)
  336.           characters:
  337.           
  338.           1) Just type them in from the keyboard.  (Note: your string cannot    
  339.              begin with an "@" symbol).  
  340.           
  341.           2) Using a special syntax.  The syntax is:
  342.              @,REPEAT,ASCIICODE,ASCIICODE,ASCIICODE...etc.
  343.              The @ symbol in the first position tells the computer that the     
  344.              special syntax follows.  The REPEAT is a numeric value that tells 
  345.              how many times to repeat the following symbols.  The ASCIICODE's 
  346.              are the ASCII values of the symbols you with to display.  
  347.              Confusing?  It's easier than it sounds.  Let's look at a couple of 
  348.              examples:
  349.              @,79,61
  350.              would print a string of 79 equal signs (ASCII code 61).
  351.              @,10,40,41
  352.              would print the sequence () ten times for a total length of 20 
  353.              characters.  It would look like this:
  354.              ()()()()()()()()()()
  355.              The reason for using this syntax is so you can draw vertical lines 
  356.              of characters on the screen.  Try this sequence:
  357.              @,10,42,31,29
  358.              It should have drawn a vertical line of 10 equal signs.  The 
  359.              special codes 31 and 29 are used to move the cursor down a row and 
  360.              backspace one character after each equal sign is printed.  The 
  361.              special control codes are:
  362.                     28 - Move right one character
  363.                     29 - Move left one character
  364.                     30 - Move up one row
  365.                     31 - Move down one row
  366.              Please note that because of Microsoft BASIC peculiarities, you 
  367.              won't be able to print a vertical line of more than 13 characters 
  368.              at one time (all sorts of strange things happen).  To get around 
  369.              this anomaly, just print a string of 13 vertical characters and 
  370.              then print a string of 10 more just beneath it for a line that 
  371.              will stretch from top to bottom of the screen.  Experimentation is 
  372.              in order to get the most out of this feature.
  373.           
  374.           If you're like us and don't happen to like digging through the BASIC 
  375.           manual for the chart of ASCII codes, you might appreciate this 
  376.           feature:  When asked to enter the symbols, just type the @ symbol 
  377.           alone.  You will now enter the <Help> mode.  To find out a 
  378.           character's ASCII code, just type it on the keyboard.  Nifty, eh?
  379.           
  380.           One last caveat, the non-field symbols are not checked very closely 
  381.           for overlapping other screen info, so caution is the word.  Wrap 
  382.           around is allowed on the horizontal only.
  383.           
  384.           When you're all done entering your screen displays, the fun part 
  385.           starts.  Just enter the selection "Quit" and the program will ask 
  386.           you if you wish to go ahead and generate the database.  If you don't, 
  387.           you can always generate it later by selecting the "Generate an 
  388.           already defined database" function when first executing this program.
  389.           
  390.           As the program is being written, just sit back and appreciate the 
  391.           number of hours it would have taken you to do this by hand.  All in
  392.           all, program generation should take only a few minutes.
  393.           UM-7)
  394.           During the definition and generation process, a number of important 
  395.           files are created.  The extensions of the programs tell what their 
  396.           purpose are.  Let's assume your program is called TEST.  The files 
  397.           TEST.ATR and TEST.HDR contain information that is used to generate 
  398.           the program.  These are both explained in Appendix A.  It's not 
  399.           necessary to keep these files on your program disk once the program 
  400.           is generated.  In the generation process, two more files are created: 
  401.           TEST.BAS is your database program, and TEST.BAT is a DOS batch file 
  402.           used to execute the program.  YOU SHOULD ALWAYS USE THE BATCH FILE TO 
  403.           START YOUR PROGRAM since it sets important record size pointers.  If 
  404.           you choose to compile the program, you can discard the batch file.
  405.           Otherwise, to execute your database program, you should exit to DOS, 
  406.           make sure a copy of BASIC is on your program diskette, and type the 
  407.           word TEST at a DOS prompt.
  408.           
  409.           The first time this program is loaded will be very time consuming.  
  410.           If you used the DOS TYPE command to look at the program, you would 
  411.           see that it is in ASCII format with line numbers out of sequence.
  412.           It's a good idea once the program is loaded to break out by pressing 
  413.           the BREAK key while holding down the CTRL key, and save the program 
  414.           in compressed format using the BASIC command SAVE "TEST.BAS".  The 
  415.           program can be restarted then by entering the command RUN.
  416.           
  417.           TIPS FOR MAKING DEFINITION A PLEASANT EXPERIENCE
  418.           ------------------------------------------------
  419.           1) Always have a couple of disks with plenty of room and copies of 
  420.              BASIC on them on hand just in case.
  421.           
  422.           2) There's no way to go back if you make an error during definition, 
  423.              so move slowly and have some sense of direction.  Freestyle coding 
  424.              can be fast, but you're better off at least having a rough sketch 
  425.              of what you'd like to end up with before starting.  This goes 
  426.              double if you intend to use edit lines, special printing formats,  
  427.              or calculation fields.
  428.           
  429.           3) Since the method used to make copies of screen information on the 
  430.              printer is by pressing the PrtSc key while holding down the SHIFT 
  431.              key, you'll want to be careful about using non-printable 
  432.              characters for non-field symbols or in field prompts.  They can    
  433.              cause some printers to do all sorts of wild things.
  434.           UM-8)              How To Use The Generated Program
  435.                              --------------------------------
  436.           Once the program is loaded as above described, you can remove the 
  437.           program diskette.  After a brief title display, you'll be instructed 
  438.           to mount your data disk in the drive specified during the generation 
  439.           process, and press the "C" key.  All data disks used by Ultra-Mind 
  440.           programs must be first initialized with special information.  When 
  441.           you press the "C" key, the program will look for and load in this 
  442.           information if it exists.  Otherwise, it will automatically begin 
  443.           the initialization process.  You will be asked if the data file 
  444.           should use all available disk space, or if you'd like to specify the 
  445.           maximum number of records on that diskette.  After getting your 
  446.           choice, initialization will begin.  Depending on the number of 
  447.           records that must be initialized, this can take a few minutes or so.
  448.           
  449.           When choosing the size of your data file, keep this in mind: this 
  450.           program will work most efficiently when there is lots of room on the 
  451.           disk.  Even though you know your particular program will never have 
  452.           more than 200 records, go ahead and use all available space.  The 
  453.           "Specify number of records" option is mainly included for testing
  454.           purposes.  Diskettes are cheap, your time isn't.
  455.           
  456.           You'll also be asked to give the data diskette a "volume label".  
  457.           Just type in a word or two (Like Disk #1), and record this on the 
  458.           diskette's label.  It just identifies the diskette to the system.
  459.           The volume label really serves no function in this program.  However, 
  460.           we envisioned it for our report generator program (forthcoming) so 
  461.           that you could extend your data file over several diskettes, yet have 
  462.           them all act as one big file for reports.  If you already know that 
  463.           your file will be too big to put on one data diskette, you might use 
  464.           this to divide your file (two disks, labeled A-L and M-Z might be an 
  465.           example for a name list file).
  466.           
  467.           Once this data diskette is loaded into the program, it is important 
  468.           that you DO NOT REMOVE THE DATA DISKETTE before doing either of two 
  469.           things:
  470.           
  471.           1) Choose the "X-tend Work To New Data Diskette" function.
  472.           2) Choose the "Quit and return to BASIC" function.
  473.           
  474.           Removing or swapping diskettes without doing either of these will at 
  475.           best confuse the program into not knowing where the hell your data 
  476.           is and at worst absolutely destroying your data files (ouch).
  477.  
  478.           Data disk in place, initialized, and special information loaded?  
  479.           Good, now you're in the MAIN MENU area of your program.  In the 
  480.           middle of the screen are your current list of choices, which we'll 
  481.           cover in a moment, and at the top is some important information about 
  482.           your data diskette and the current status of the program.
  483.           UM-8)
  484.           The top of the screen lists the number of initialized records as well 
  485.           as the number of records you have already entered.  It also displays 
  486.           the volume label name of the current data diskette.  At the top left 
  487.           of the screen is a message marked "Current Record".  This is used for 
  488.           two things, first to let you know that a record has been retrieved 
  489.           using the "Get A Record" function before updating or deleting it, or 
  490.           to allow you to continue a "Search For And List Records" function 
  491.           from a certain point after aborting a search.  If no record has been 
  492.           recently retrieved with the "Get A Record" function, the current 
  493.           record will be NONE.  Otherwise, it will be a number between 1 and 
  494.           the number of records initialized on that data diskette.
  495.           
  496.           Let's go through the commands on the main menu screen:
  497.           
  498.           GET A RECORD
  499.           ------------
  500.           This simply retrieves an entered record and displays it on the 
  501.           screen.  It will prompt you for the key field of your desired record 
  502.           and then will search for it.  Remember to use the correct case to 
  503.           enter the key field, as this program views lowercase and uppercase 
  504.           letters differently.  JOE SMITH and joe smith and Joe Smith are each 
  505.           considered different records.  When the record is displayed, you'll 
  506.           be asked "Is This It (Y/N)?"  This allows you to find the correct 
  507.           record when two or more records have identical key fields.  If you 
  508.           just can't find a record that you know should be in there, use the 
  509.           "Search For And List Records" to scan through the data file and note 
  510.           the correct key field.
  511.           
  512.           When the correct record is displayed, you'll see a short menu at the 
  513.           bottom of the screen.  The Update, Delete, and Add functions are 
  514.           described below.  The Menu function takes you back to the main menu 
  515.           page, and the Switch Page function let's you look at the various 
  516.           pages of the record, if there are more than one.
  517.           
  518.           SEARCH FOR AND LIST RECORDS
  519.           ---------------------------
  520.           This function is used to list all active (and deleted if you wish) 
  521.           records in the data file, or to select records on the contents of one 
  522.           of the fields.
  523.           
  524.           You will first be asked to enter the record # to start the search or 
  525.           press <ENTER> to start at current record.  If you had just completed 
  526.           a partial search and want to continue from the point you left off, 
  527.           just press the <ENTER> key.  Otherwise, enter the record number you 
  528.           wish to start the listing with (the first record in a datafile is 
  529.           record #1).  If you press <ENTER> and there is no current record in 
  530.           memory, the search will begin at record #1.  Except for this 
  531.           function, we don't make much use of record numbers with this system.
  532.           
  533.           Next, you will be asked whether you wish to display records that have 
  534.           been deleted.  Records in a data file exist in one of three states: 
  535.           Active (meaning it contains a valid record), Deleted (meaning it 
  536.           contains a record marked as deleted), and Empty (meaning it has not 
  537.           yet ever contained a record).  Accidentally deleted records can be 
  538.           restored to active status by using this function unless they have 
  539.           been overwritten by recently added records.
  540.           
  541.           The next prompt is whether you wish to select records for display by 
  542.           the contents of one it's fields.  If you don't, you will see every 
  543.           record on file.
  544.           UM-9)
  545.           If you do, you'll be asked which field you wish to test.  Then, 
  546.           you'll be asked to enter a test string.  The three types of tests 
  547.           that can be made on a field are:
  548.           
  549.           >STRING  (field contains "STRING" somewhere in it)
  550.           <STRING  (field begins with "STRING")
  551.           =STRING  (field contains "STRING" exactly and only)
  552.            
  553.           Once again, lowercase is considered different than uppercase.  For 
  554.           our purposes here at FreeSoft, we don't use lowercase at all for 
  555.           field information and it makes life much easier.
  556.           
  557.           If a match is found, you have the choice of either continuing the 
  558.           search or aborting it.  If you abort, operation continues just as if 
  559.           the record were retrieved with the "Get A Record" function.
  560.           
  561.           ADD A RECORD
  562.           ------------
  563.           This function is used to add records to the data file.  It is pretty 
  564.           much a straight ahead entry procedure.  After all fields have been 
  565.           entered, you can proofread the current page and either abort the add 
  566.           or go ahead and save the record on disk.
  567.           
  568.           DELETE CURRENT RECORD
  569.           ---------------------
  570.           This function is used to mark records as "deleted" status.  Deleted 
  571.           records cannot be retrieved by a "Get A Record" function and can only 
  572.           be viewed by the "Search For And List Records" function.  Deleted 
  573.           records can be overwritten by newly added records as the space is 
  574.           needed.
  575.           
  576.           UPDATE CURRENT RECORD
  577.           ---------------------
  578.           Any of a field's records, including the key field, can be modified
  579.           using this function.  Like the "Delete Current Record" function, the
  580.           record must first be retrieved using the "Get A Record Function". 
  581.           You may wish to review the record and note the field numbers you 
  582.           want to modify before selecting the "Update Current Record" 
  583.           function, because the prior contents of a field are erased as soon 
  584.           as you specify that you wish to modify that field.
  585.           
  586.           X-TEND WORK TO NEW DATA DISKETTE
  587.           --------------------------------
  588.           This function is used to close the data file on one data diskette and 
  589.           load the special information from a new one.  The new disk must be 
  590.           already initialized or initialization procedures will begin 
  591.           automatically.  NEVER SWAP DATA DISKETTES WITHOUT SELECTING THIS 
  592.           FUNCTION FIRST!
  593.           
  594.           INITIALIZE NEW DATA DISKETTE
  595.           ----------------------------
  596.           This is used to perform the initialization procedures on a data 
  597.           diskette so that it can be used to hold your data file.  THIS DOES 
  598.           NOT LOAD IN THE SPECIAL INFORMATION!  Always verify that the volume 
  599.           label specified in the MAIN MENU display corresponds the data 
  600.           diskette mounted in the drive before attempting to do any work with 
  601.           it!
  602.           UM-10)
  603.           QUIT AND RETURN TO BASIC
  604.           ------------------------
  605.           This is the only approved way of ending the program.  Ending the 
  606.           program by any other means could possibly lead to a destroyed data 
  607.           file!
  608.           
  609.           Well, that about does it.  Chances are good that you'll find many 
  610.           more undocumented features (hopefully not bugs), that we'll need to 
  611.           include in the next revision of this manual.  We always appreciate 
  612.           your comments and suggestions.  Keep those cards and letters coming 
  613.           (we always wanted to say that).
  614.                                           
  615.           UM-11)     APPENDIX A: FORMAT OF THE ULTRA-MIND DISK FILES
  616.                      -----------------------------------------------
  617.           
  618.           Chances are, you're going to want to do some rather exciting and 
  619.           unusual things with this package.  To aid you in your endeaver, 
  620.           here's a description of the data files used by these programs.
  621.           
  622.           In the following examples, we use the filespec TEST for the program 
  623.           name.
  624.           
  625.           TEST.HDR
  626.           --------
  627.           NF  - Number of defined fields
  628.           ND  - Number of defined display pages
  629.           TB  - Total number of field characters - 1 (one byte variable         
  630.                 STAT$ is added to beginning of each record to hold         
  631.                 record status: A=Active, D=Deleted, E=Empty
  632.           
  633.           TEST.ATR
  634.           --------
  635.           AU$ - Author's name
  636.           NA$ - Program's filespec (including drive but without extension)
  637.           TI$ - Program title
  638.              For each field defined by NF in TEST.HDR:
  639.                PG - Page number
  640.                MR - Field prompt row
  641.                MC - Field prompt column
  642.                M$ - Field prompt string
  643.                TY - Field type (1=Numeric, 2=Alphanumeric, 3=Formatted numeric, 
  644.                     4=Calculation, 5=Date, 6=Time, 7=Non-field symbols)
  645.           
  646.                    If TY=1
  647.                    -------
  648.                    FR  - Field row
  649.                    FC  - Field column
  650.                    FL  - Field length
  651.                    AI$ - String of acceptable input characters
  652.                    EL  - Number of edit lines
  653.                         For each EL: EL$ - Edit line
  654.                    SP$ - Special printing format (Y or N)
  655.                         If SP$="Y": SF$ - special printing format string
  656.           
  657.                    If TY=2
  658.                    -------
  659.                    FR  - Field row
  660.                    FC  - Field column
  661.                    FL  - Field length
  662.                    AI$ - String of acceptable input characters
  663.                       If not key field:  AI$ - Null entry valid (Y or N)
  664.           
  665.                    If TY=3
  666.                    -------
  667.                    FR  - Field row
  668.                    FC  - Field column
  669.                    FL  - Field length
  670.                    AF$ - Input format string
  671.                    AI$ - String of acceptable input characters
  672.           UM-12)
  673.                    If TY=4
  674.                    -------
  675.                    FR  - Field row
  676.                    FC  - Field column
  677.                    CL  - Number of calculation lines
  678.                        For each CL: CL$ - Calculation line string
  679.                    SP$ - Special printing format (Y or N)
  680.                        If SP$="Y": SF$ - Special printing format string
  681.           
  682.                    If TY=5 or TY=6
  683.                    ---------------
  684.                    FR - Field row
  685.                    FC - Field column
  686.                    FL - Field length
  687.           
  688.                    If TY=7
  689.                    -------
  690.                    No further variables
  691.           
  692.           TEST.VOL
  693.           ---------
  694.           V$ - Volume label string of data diskette
  695.            
  696.           TEST.DEF
  697.           --------         
  698.           MAXSIZE - Number of initialized records on data diskette
  699.           GOOD    - Number of entered records on data diskette
  700.           
  701.           TEST.DAT
  702.           --------
  703.           The data file is a variable length random file than varies with the 
  704.           number of fields, length of fields, etc.  Study the blocking and un-  
  705.           blocking procedures in your generated program to see the format of 
  706.           your data file.
  707.           
  708.           HASHING ALGORYTHM EXPLAINED
  709.           ---------------------------
  710.           This package uses a hashing routing for placing and retrieveing data 
  711.           records.  Basically, what happens is that your key field is converted 
  712.           to a number between 1 and the number of initialized records on your 
  713.           data diskette.  This becomes the record number for the record.  If a 
  714.           record is already in that location, the file is scanned sequentially 
  715.           from that record until an empty or deleted record space is found.  
  716.           The hashing algorythm we're using was developed and placed in the 
  717.           public domain by Bruce L. Tonkin and we're indebted to him for its 
  718.           usefulness.
  719.             To be effective, the hashing algorythm must be reasonably "random" 
  720.           to insure that records will spread out through the available space 
  721.           instead of clumping together.  This is what gives this package such 
  722.           excellent retrieval speed under typical circumstances.
  723.           UM-13)                  APPENDIX B: WISH LIST
  724.                                   ----(²KKKKKKKKKKKKKKKCà             For many purposes, this package will be sufficient "off the 
  725.           shelf".  However, we encourage you all to do what you do best: take a 
  726.           skeleton package and refine it to something really phenomenal.  
  727.           Here's our wish list for Ultra-Mind:
  728.           
  729.           1) Better documentation:  O.K., we admit that this isn't the best in 
  730.              the world, but it's all in there if you look close enough.  This 
  731.              manual definitely needs a re-write.  We'll take responsibility for 
  732.              this and offer the fact that we wanted to get the darned thing out 
  733.              as our only excuse.
  734.           
  735.           2) Sample definition (.HDR & .ATR) files: This is the best way for    
  736.              folks to learn how to get the fanciest use out this package.  If   
  737.              you develope a snazzy file for keeping track of your video tape    
  738.              collection or christmas card list, why not share it with all of    
  739.              us.  The definition files are rather small, so it's not necessary  
  740.              to distribute the package in generated form.  We'll give this      
  741.              responsibility to y'all.
  742.           
  743.           3) Report generator program:  We're working on this one and it should 
  744.              be ready in the first quarter of 1984.
  745.           
  746.           4) Better UPDATE function:  We sorely need an update function that 
  747.              uses the INS and DEL keys like an editor instead of wiping out the 
  748.              field to be replaced.  Any of you hot shots care to take this on?
  749.           
  750.           5) Better lineprinter support: A small assembly language program that 
  751.              would print the screen and turn all non-printable characters into  
  752.              periods would be great.  BASIC routines are just too slow.  We 
  753.              give this one to you also.
  754.           
  755.           6) Definition file editor:  Let's make it easy to take a definition   
  756.              file and either edit, delete, or add field information.  This 
  757.              would be great for "cloning" one data file's information into      
  758.              a new one, not to mention making it less frustrating when you      
  759.              make a mistake near the end of a lengthy definition session.  Any
  760.              takers?
  761.           
  762.           7) A natural evolution would allow you to define how your title   
  763.              and main menu pages will look. 
  764.            
  765.           As you can see, we've got all kinds of suggestions for making this 
  766.           product better.  After all, if we'd taken the time to do everything 
  767.           to Ultra-Mind that we wanted, you probably would never get it in your 
  768.           hands.  Sooner or later, you just have to take the darn thing and say 
  769.           "sink or swim, booger".
  770.            
  771.           One thing we do ask is that you not distribute the program in 
  772.           modified form.  Instead, offer your corrections or improvements as    
  773.           merge files.  That way, we can continue to support this package with  
  774.           updates and corrections from our end.  Otherwise, we just won't be 
  775.           able to keep track of all of the modifications floating around.  Be 
  776.           sure to send us any of your improvements or suggestions, though.  
  777.           They just might find a permanent home in Ultra-Mind.
  778.           UM-14)             APPENDIX C: THE ULTRA-UTILITIES
  779.                              -------------------------------
  780.  
  781.           The FreeSoft Company produces only user supported software.  If you 
  782.           find the software to be useful, we have a registration program so you
  783.           can support us.  As long as we keep getting the great support 
  784.           we've enjoyed so far, we'll continue to add packages to our one and 
  785.           only product: The Ultra-Utilities.  Our registration and duplication 
  786.           policies are in the Library #1 documentation.  Do not distribute this 
  787.           program until you have obtained, read, and understand these policies!
  788.           
  789.           If you don't have the complete 5-volume Ultra-Utility set, you don't 
  790.           know what you're missing.  To get the entire set, read and follow the 
  791.           below carefully:
  792.           
  793.           1) We now offer two libraries of the Ultra-Utilities.  FOR EACH 
  794.              LIBRARY that you want, send us one double sided, or two single     
  795.              sided diskettes formatted 8 sectors per track.  Do not send 
  796.              diskettes formatted 9 sectors per track or we'll just waste our    
  797.              time reformatting them.
  798.           
  799.           2) Send them to us along with a POSTAGE PAID, SELF-ADDRESSED RETURN   
  800.              MAILER.  A couple of stiff pieces of cardboard is suggested for    
  801.              envelope mailers.  We will not try to protect your diskettes from  
  802.              damage any better than you do.  Also, please make sure that you've 
  803.              got the correct amount of postage.  We hate to bitch, but we 
  804.              sometimes get up to 5 requests per day that arrive postage due.
  805.           
  806.           3) Send this conglomeration to: The FreeSoft Company, P.O. Box 27608, 
  807.              St. Louis, MO  63146.  Drop a note in the envelope telling us 
  808.              which library you want and where you heard about us.  If you don't 
  809.              send enough disks for both libraries, we'll assume you want only   
  810.              Library #1.
  811.           
  812.           The Ultra-Utilities Includes:
  813.           LIBRARY#1
  814.           ---------
  815.           ULTRA-ZAP: disk repair/modification utility with functions for 
  816.           display/modify disk sectors, display/modify file sectors, copy disk 
  817.           sectors, fill disk sectors, search for byte sequences (ASCII or 
  818.           numeric) in disk sectors, search for byte sequences in file sectors, 
  819.           interrogate disk format and protection schemes, modify BIOS disk 
  820.           parameter table.
  821.           
  822.           ULTRA-FORMAT: functions for formatting single standard tracks, 
  823.           re-format a "flaky" track without erasing old data, and format a 
  824.           non-standard (copy protected) track.
  825.           
  826.           ULTRA-FILE: functions for display file's directory information, 
  827.           assign or remove hidden status, assign or remove system status, 
  828.           display list of sectors allocated to a file, build a disk file from 
  829.           scratch, restore accidentally erased files, produce a unique roadmap 
  830.           of a diskette, and selectively kill files from a menu.
  831.           UM-14)
  832.           LIBRARY #2
  833.           ----------
  834.           ULTRA-OPTIMIZE: takes a standard BASIC program saved in ASCII format 
  835.           and optimizes it so that the /N switch can be used with the BASIC 
  836.           compiler to produce smaller and more efficient object code.
  837.           
  838.           ULTRA-MIND: intelligent database generator program that allows you to 
  839.           define a database with six different field types, full input control, 
  840.           and multiple full screens, and generates a unique BASIC program that 
  841.           offers record access in typical applications in less than 1/2 second 
  842.           (no matter how many records in the file).
  843.           
  844.           Coming soon to LIBRARY #2: Ultra-Report: report program generator for 
  845.           databases created with Ultra-Mind.
  846.           All of the Ultra-Utilties work with PC-DOS versions 1.10, 2.00 and
  847.           2.10
  848.           UM-15)        APPENDIX D: LIMITED LICENSE FOR ULTRA-MIND
  849.                         ------------------------------------------
  850.           
  851.           U-MIND.BAS and SKELETON.BAS are copyrighted programs and are owned 
  852.           soley by The FreeSoft Company.  You are free to use and distribute 
  853.           these and all other Ultra-Utility programs under the policies set 
  854.           forth in the LIBRARY #1 documentation manual.  By using this 
  855.           software, you agree not to distribute or duplicate any Ultra-Utility 
  856.           program until you have obtained, read, and understand all duplication 
  857.           and registration policies listed in that manual.
  858.           
  859.           You agree not to distribute any Ultra-Utility program in modified 
  860.           form and you agree not remove any information concerning The FreeSoft 
  861.           Company, it's products or copyrights from the programs or 
  862.           documentation.
  863.           
  864.           The FreeSoft Company gives sole ownership to you for all programs 
  865.           generated by Ultra-Mind.  You agree not to copyright such programs as 
  866.           not to interfere with our existing copyrights.  Otherwise, you are 
  867.           free to compile, modify, sell, or destroy any programs generated by 
  868.           Ultra-Mind.  No royalties are due The FreeSoft Company under any 
  869.           circumstance for the sale of programs generated by Ultra-Mind.
  870.           
  871.           If you have a problem with the above policies, we'll be willing to 
  872.           consider a special license for registered users only.
  873.