THE DATAMAGE data management system SPECIFICATIONS: RAM BASED PROCESSING: RECORD CAPAU: 8,000 (640KB) program needs 384K to execute DISK BASED PROCESSING: RECORD CAPACITY: 32,000 (512KB) DATA SEGMENTS IN RECORD: UP TO 200 MAXIMUM RECORD LENGTH: 7,000 BYTES MAXIMUM LENGTH OF STRING SEGMENT: 35 CHARACTERS PRECISION OF NUMERIC STORAGE: 16 DIGITS (FULL FLOATING POINT) DATABASE FILES ARE COMPATIBLE WITH BASIC, PASCAL AND ASSEMBLER HARDWARE REQUIREMENTS: MS-DOS COMPATIBLE COMPUTER WITH 256 KB RAM (1000 RECORD VERSION) (8088, 80126, 8286, 8386 V20, V30 or V40 microprocessor) MS-DOS DISK OPERATING SYSTEM (P.C. DOS) VERSION 2.0 OR HIGHER ONE DISK DRIVE (FLOPPY, FIXED, RAMDISK) PRINTER RESPONDING TO ASCII CODE 12 BY AUTOMATIC PAGINATION MONITOR (COLOR OR MONOCHROME) KEYBOARD RECOMMENDED SYSTEM CONFIGURATION: (CONFIG.SYS & AUTOEXEC.BAT FILES) ALLOCATE 10 IOCBs (FILES = 10 & BUFFERS = 10 IN CONFIG.SYS FILE) USE DISK I/O VERIFY OPTION (VERIFY ON IN AUTOEXEC. BAT FILE) VIDEO DRIVER (USE DEVICE = ANSI.SYS IN CONFIG.SYS FILE IF NECESSARY) EXPANDED RAM RECOMMENDED: ALLOWS THE SOFTWARE TO ACCESS LARGER FILES PRINTER BUFFER RECOMMENDED: FOR FASTER PROCESSING (NO PRINTER WAIT) MULTI-USER VERSION AVAILABLE for DOS 3.0 or higher. LOCKS RECORDS FEATURES: TOTALLY MENU-DRIVEN: NO COMMANDS TO MEMORIZE FLEXIBILITY: NO STRUCTURE OR FORMAT TO DEAL WITH USER FRIENDLY: LOGICAL, UNSTILTED ORGANIZATION AND OPERATION DATABASE BROWSING: RECORD NAMES AND NUMBERS ARE DISPLAYED. USER CAN PAGE UP/DOWN OR SCROLL "THROUGH" THE FILE, AND DISPLAY/UPDATE RECORDS BY PRESSING RETURN. SELECTION ABILITY: DATABASE CAN BE SELECTED TO A NUMERIC OR ALPHA- NUMERIC VALUE. ALPHANUMERIC SELECTS CAN FIND RECORDS CONTAIN- ING THE SEARCH STRING, AS WELL AS THOSE EQUAL TO IT. EXTRAPOLATIONAL ABILITY: CALCULATIONS CAN BE PERFORMED ON DATA IN DATABASE. TWO COUNTERS ARE PROVIDED IN COMPUTER MEMORY FOR EACH "SURVIVOR" RECORD, FOR USE BY THE OPERATOR. MACRO OPEARATION MODE: MACROS ARE RECORDED DURING EXECUTION AND CONTAIN THE DETAILS OF ALL MULTI-RECORD FUNCTIONS PERFORMED DURING MACRO RECORDING. THE MACRO CAN THEN BE RUN LIKE A PROGRAM. THE RESULTS OF THE MACRO WILL VARY WITH THE DATA RECORDED IN THE FILE. FORMAT CONVERSION: MOVE DATA INTO ANY FILE FROM ANY FILE, PRO- VIDED THEY HAVE A RECORD NUMBER OR SPECIFIED SEGMENT IN COMMON TO IDENTIFY THE RECORD PAIRS. ONE STEP OPERATION: YOU ALWAYS HAVE THE OPPORTUNITY TO SEE WHICH RECORDS ARE TO BE AFFECTED BY ANY OPERATION, BEFORE THE OPERATION IS EXECUTED. LARGE MEMORY USAGE: RECORD NUMBERS SEGMENT NAMES AND TWO COUNTERS ARE STORED IN RAM. PROGRAM HAS INSTANTANEOUS ACCESS TO VITAL INFORMATION. COMPUTATIONS CAN BE DESIGNED TO ACCESS THE DISK DRIVE LESS OFTEN, RESULTING IN VERY FAST CALCULA- IONS ON LARGE DATABASES. (RAM-BASED PROCESSING) INFINITE EXPANDABILITY: DATABASES PRODUCED ARE ACCESSIBLE FROM BASIC. THE SOURCE CODE TO LOAD A DATABASE IS INCLUDED IN THIS PACKAGE. FROM THIS STARTING POINT, ANYONE WHO HAS USED THE BASIC PROGRAMMING LANGUAGE CAN PRODUCE EXPANSION SOFTWARE THAT INTER-ACTS WITH THE DATABASE. FILE INDEXING: UP TO FIVE FIELDS CAN BE INDEXED IN MEMORY. INDEXES MAY BE UNIQUE, NON-UNIQUE, OR COMBINED TO FORM A CROSS-INDEX THAT MUST BE UNIQUE. NO SEGMENTS NEED BE INDEXED. THE USER-ASSIGNED RECORD NUMBERS ARE A UNIQUE INDEX THAT IS ALWAYS PRESENT. THEREFORE, YOU MAY HAVE UP TO SIX INDEXES INTO ANY FILE. SCREEN DUMP: YOU MAY DUMP THE CONTENTS OF THE CURRENT SCREEN AT ANY TIME BY HOLDING THE SHIFT KEY DOWN, AND PRESSING THE PRINT KEY. (BE SURE TO RESET THE PRINTER TO A NEW PAGE AFTER DUMPING) BENCHMARKS: (RAM-BASED PROCESSING) As a speed test, we used a file containing 7,911 records. This file was a small, mailout-compatible file, and occupied 2.5 MB on a full-height, 10MB Tandon drive. Clock 4.77 MH. (8088). INDEX SEARCH: The last record was found in four seconds. LOAD FILE: To load this monster took 4 minutes. CREATE NEW INDEX WHILE LOADING: 20 minutes. CALCULATION FROM DISK: 2 minutes 40 seconds CALCULATION FROM RAM: 13 seconds SELECT RECORDS: 10 minutes 35 seconds. SORT (NUMERIC DATA ON DISK): 3 hours 30 minutes. SORT ON RECORD NUMBERS (ALPHABETIZE): 1 hour 40 minutes GLOSSARY: computer buzzwords as defined in this package. DATABASE: First and foremost, a database is a disk file. All databases produced by this program are called YOURDATA.RAD. A database is divided into records, which are divided into data segments. A database can contain 8000 records, that can contain 200 data segments, each. A database can contain any information. From recipes and their ingredients, to the kilotonage of a nuclear blast produced by varying quantities of fissionable material. DATABASE DEFINITION: Once a user database has been designed, the DBSEMAKR program will write the database definition to disk. To define a new database, use DBSEMAKR. DATABASE DEFINITION FILES: The diskfiles HEADINGS.SAD, KEY.SAD and GDRECNOS.SAD comprise the database definition files. The file HEADINGS.SAD holds the names you give to the data segments in the database. The file KEY.SAD holds the numeric portion of the database definition. KEY.SAD holds three numbers for each data segment in the database. The first is the class, 1 through 3. The second is the length of the data segment on disk. Numeric segments all have a length of eight. The third number details if and how the segment is indexed. The file GDRECNOS .SAD holds the record numbers, 1 - 32767, that you choose to identify the records. The file extension .SAD connotes a sequentially accessed disk file, while the file extension .RAD connotes a random access diskfile. When the programs start, these files are read, error checked, and the database file is opened according to the instructions they hold. The programs will not operate without these files. RECORD: A record in a database describes a single item, that is in some way similar to the rest of the items in the database. For example, we might find both sacked manure and ten carat diamond pendants in the same database. The similarity between these two items is that both are sold by the same general store. DATA SEGMENT: Within records are data segments. As a record is a subset of the database, and describes a unit of the database, so a data segment is a subset of a record, and describes the same attribute of the record as do the data segments in other records. Also referred to as a "field." For example, we might have a data segment in our database called price. And a data segment called cost. So, in each record, representing each item we sell, we have a data segment holding the items' cost, and our price. The cost is in data segment number two and the price is in data segment number three. Making an operation such as raising all our prices ten percent take ten seconds, not hours of shuffling paper records. CLASS: Data segments can have one of three formats: Numeric segments store numbers. Numeric No Decimal store whole numbers. String segments store words as well as numbers, spaces, etc. STRING: A string segment can contain both letters and numbers. If it does contain numbers, they are available for printing or viewing only, and can not be totaled, averaged, or used in the manner of a numeric segment. NUMERIC: A numeric segment can hold only numbers, and the decimal point. It can be used in all number-oriented operations, as well as to print or view. RECORD ENTRY: The act of typing in records from the keyboard to the database, whether new or established. All segments entered can be re-checked and correctedbefore data is written to disk. UPDATE: The act of changing the information stored in the database. SORT: When records are sorted, a data in the record is compared to a comparitor. The records that compare positively (true) are placed in the survivor group, and those who compare negatively (false) are not. SURVIVOR GROUP: This package provides a real, rather that figurative survivor group. After a sorting operation excludes some records from the group the screen displays only the records now in the group, ignoring records that have not "passed" the sorting "tests" specified by the user. PRELIMINARY SORT: The first sort done. The target of this sort must be all records on disk. CONCURRENT SORT: The second (and on) sort can have a target of the survivors of the last sort, or the entire database, adding its' survivors to the current survivor group. NUMERIC SORT: A sort that uses numeric data segments, and compares numbers to other numbers. STRING SORT: A sort that uses string, or alphanumeric, segments, and compares strings to strings. MACRO: Not a single process, but any series of multi-record operations, recorded to disk while they were being done by the program. Once recorded, a macro can be "replayed" and may well produce different results, if the data in the database has changed. CASE/SPACING: The string sort routine can be directed to ignore case and spacing like the index search routine. If you direct the program to ignore case and spacing then entering `fredjones' will include records containing FRED JONES, Fred Jones, and Fred JONES in the survivor group. If you opt for strict equality only those records containing an exact match of the search string will be placed into the group. INSTRING SEARCH: The string sort routine offers two modes of matching: Strict equality and an instring search. If you opt for strict equality and enter FRED as your search string only those records containing the word fred (and nothing else) will be placed into the group. If you opt for an instring search all records containing the word fred, along with any other data that happens to be there, will get into the group. SORTING PLACE MARKER: A diskfile that records the record numbers and number of current survivors, along with their counters, if any. Sorting place markers are useful to eliminate some records, then take some action on the remainder. They provide the ability to re-load the previous survivor group, with counters, from disk, and continue processing with the previous group. COUNTER FIELD: One of sixteen thousand double precision variables provided in RAM to hold the results of calculations done on the data in the database. Two counters are provided for each survivor record. I/O GROUP: As the survivor group is a group of records stored in memory, the I/O group is a group of segments stored in memory. The declaration of an I/O group tells the program which of the data segments to display on the screen, accept from the keyboard, or print on the printer. Using an I/O group saves you the time taken to search out relevant information from a listing of the whole record. MS-DOS LEGAL PATHNAME: The programs ask the user to enter a MS-DOS legal pathname for marker and relational group diskfiles written and read. Anyone who uses this program without a thorough, hands-on understanding of the MS-DOS disk operating system, and its "tree" directory structure is inviting disaster. To familiarize yourself, if you have not already, with the MS-DOS disk operating system, review the manual that came with your computer, or acquire a readily-available privately authored textbook. MS-DOS is by far the easiest computer operating system ever designed. To write the marker or relational group to a disk other than the default disk holding the database, enter a drive designator (B:) before the filename. You access the alternate disk. FLAG: A coded message occupying a string segment designed to hold it. A flag is a message left in the record, and can have any meaning you assign. Used to reflect certain conditions in the record, and to sort for the records containing the flag. FILE INDEX: The purpose of a file index is to identify a record in the file by its' contents, rather than its' record number. If a file index is not available for a data segment each record will have to be read from disk and checked for that value. The sort routines in this package do that, but, when processing files with many records it takes time. The file index fills the need for speed by producing a numeric value for each indexed segment of each record, and placing it in the computers' memory. That takes a lot of memory; in fact, 80,000 bytes of RAM are assigned this task when 8,000 records are loaded by the program. When the user enters a search value, the contents of an index in a particular record, the program assigns a numeric value to it, and compares it to the values stored in RAM for that index, thereby bypassing the need to read the records from the disk and compare their contents to the search value, as in a sort. Unlike a sort, the full value contained in the record must be entered as the search value. James Brown, JAMES BROWN, and James Brown (2 spaces) are all the same values. The indexes can not be searched for Brown. To do that, use the string sort. UNIQUE INDEX: When a data segment is declared as unique all records must hold a different value in that segment. The advantage of this is that only one match for a search value will be found. The dis-advantage occurs during record entry-updating, when the computer refuses to accept a new record because of a duplicate found in another record. NON-UNIQUE INDEX: When a data segment is indexed as non-unique, the computer will allow duplicate entries. When searching a non-unique index multiple matches may, therefore, be found. The user views the record on the screen, then decides to accept the record or to continue the search. CROSS-INDEXING: When a data segment is declared as cross-indexed, it is combined with all other indexes declared as cross-indexed to form a unique index. For example, we might have a database compatible with the POWRMAIL format in which we also keep our customer billing data. Realizing that we may have two customers with the same name, and that we also might have two customers at the same company with the same phone number, we could create a cross index on this file that combined the name and phone number segments. That way, the computer wouldn't balk if we tried to enter two records with the same name, or the same phone. But, if we tried to enter a record that had duplications in both the name and the phone number, it would be rejected. When you are searching the datafile for a record the indexes operate independently of each other; you may select any, all, or any combination of the fields declaired as indexed. Case/spacing can also be ignored when searching indexes, but will be STRICTLY MATCHED when entering records. THE PROGRAMS AND THEIR FUNCTIONS: 1. SCRNBASE.EXE is the main program of the database. It lists and displays records, enters new records, updates records, and sorts the records in the database, and can perform calculations to extrapolate data. This program employs ram-based counters and indexes to provide the fastest d.m.s. environment going. Problem is, that uses up the PCs limited supply of chips rather quickly. So, this program will refuse to load files containing more than 8,000 records. To load a file that large the host machine needs to have AT LEAST 512K, and if possible, the full 640. 2. DISKBASE.EXE is the same program. Difference is it will load files holding up to 32,000 records, provided your machine can furnish the disk space to hold them all. Instead of loading the file index into ram this program reads it off the disk when it needs the index information. The counters are also placed into temporary files on disk. This method of using more computer than we have has a few drawbacks; mostly speed and available disk space. If at all possible use SCRNBASE. If your computer runs out of memory or your files swell beyond 8,000 records use DISKBASE. Due to the constant need for disk I/O this program is slower, and makes temporary files of outrageous dimensions when the counters are utilized: up to 412K. There is, however, a way to "cheat the (640K) hangman": Purchase a card having three-four megabytes of "expanded ram" on it. Use it all as a ramdisk, and copy the desired file into it before entering THE DATAMAGE. Of course, you will need to copy it back before you're through, but it can provide the ability to "fool" the computer into thinking that it is using a disk drive when it's using ram, and thusly thwart the 640K limit. Processing will not, however, be as rapid as it would using the ram-based program, because of the time taken by the device-drivers and IOCBs to access the expanded ram. But still far faster than from any H.D. 3. DBSEMAKR installs user-designed databases. Before installation, a database must be carefully designed. Database design is a heading later in these instructions. 4. POWRCOPY moves data between databases. It can be used to merge two or more databases, or to accomplish inter-database updates. Real-life uses of this program would include the moving of certain parts of a sales history or customer file into a new database designed for sales mail management, or updating the "master" database from details of daily transactions entered as records on other computers. 5. POWRMAIL.EXE is what's known "in the vernacular" as a sales mail manager. This program is not an integral part of the database. In fact, it is a custom expansion program developed to meet the need of one of the first users of THE DATAMAGE. It is included not only to provide the freebie proffered on the box, but to show how a stand-alone, independent program can inter-act with the database. 6. GO.EXE is the function selection program. It allows the usr to select multiple functions without leaving the system. GETTING STARTED: The diskettes (3) comprising your database software should be copied immediately. If you have a one-drive computer, place the D.O.S. disk in the drive and enter: DISKCOPY A: B:. You will be prompted when to place a new, formatted disk into the drive, and when to switch disks during the copy. Just remember, the original disk is the SOURCE disk, and the backup copy you are making is the TARGET disk. On a two drive machine the above is simplified by not having to switch disks. Simply place the original in drive A:, the backup in drive B:. If your computer is not equipped with a Hard Disk, make two copies of all three disks, the third being your "working" coy. This software was written to take full advantage of MS-DOS Version 2.0 or higher, and requires this operating system to run. A Hard Drive is NOT required; files can be kept on floppies. Most business users do employ a hard disk due to the volume of data to be stored and the speed offered by these direct access storage devices. The software you are about to use is a mainframe-style data management system, adapted to a micro. It has the capability to place and access files in any directory of any drive connected to the host machine. To "install" this software on a hard disk computer you must first prepare a directory to hold it. We suggest you make this new directory off the root, and name it "DB" though this is not mandatory. If you take our suggestion, switch the active drive to C: by entering "C:". Now, be certain you are in the root directory of drive C: by entering "CD\". At this point, entering "CD" should produce the response "C:\", signifying that we are in the root directory of drive C:. To cause MS-DOS to make the new directory, enter "MD DB". Now, switch to the new directory b entering "CD DB". At this point, entering "CD" should get the response "C:\DB". The first two disks (#1 & 2) contain the software, and the second program disk has a sample database as well. To transfer only the programs onto the Hard Disk, place disk #1 in drive A:, then enter "COPY A:*.EXE". When the copy is completed, repeat the process for disk #2. Entering "DIR" should now produce a listing of the programs that comprise the database. Since four sample databases are included with the software (for use while learning the programs) we will want to transfer them to the hard disk as well. Another explanation of how to do so is premature. First let us contrast the manner in which a data management system operates to the more common (on a micro) "filer". With the filer, all databases are kept in a single directory. The program loads, and the software displays a list of all existing database, from which a selection is made and the file loaded. The identifier of the file is the name. This software identifies the databases by disk address, i.e. the drive and directory in which the desired file is stored. On the surface, this would seem to be a more complex way of doing the same thing. There are, however, many real benefits to be realized by our method, not the least of which is the safety of the files. If the disk is "damaged" by power failure, a line "spike" etc. only the files in the active directory and possibly the root directory may be damaged. If you have twenty files and the worst happens, odds are this system will have nineteen files that are intact upon restart. The flexibility offered by the ability to place a certain group of records on a floppy is invaluable. The floppy can then be transferred to another computer and used. Filename duplication in different directories causes no problems. The benefits list is too long to detail here. Your database can reside anywhere; on a floppy or in it's own sub-dir of the hard disk. In the case of the floppy, it should be clearly marked as to what databases it holds. The name of the sub-directory on the hard drive can also be assigned a name descriptive of the data it contains. To install the four sample databases included with the package we must first make directories to hold them. Assuming we are still in the new dir we made to hold the programs (entering "CD" will confirm this, if the response is other than "C:\DB" you need to change back into it) we use the MD command four times to made four new sub-dirs OFF the new dir to hold the four sample databases. So, enter "MD SDB1". Then "MD SDB2" and so on until you have made four new dirs. The sample databases are on disks two and three. Place disk three in drive A: and enter "COPY A:\SDB1\*.* C:\DB\SDB1". Repeat the process for sample databases two and three. Switch to disk two and copy sample database four onto the hard disk. To load the software, regardless of disk drive configuration, the default drive and dir must be set to the one holding the programs. Unfortunately, the programs will not all fit onto a floppy. Sorry 'bout that! If you have a floppy-based machine, enter "A:". Place disk one in A:, and enter "GO". If you have a H. D., enter "C:", "CD\DB", "GO". The first screen accomplishes the selection of the function you wish to perform. As you see, there are six functions: three normal and three classed as "advanced." Selecting a function causes the computer to load and execute the program that does that job. Each of the programs provides too many functions to list on the screen. Select #1, "NORMAL FILE ACCESS." The BASE program loads and executes. If you see an error message, and the menu returns, the active drive/dir does not contain the program. Either switch disks or start over. If you are running off a floppy, the speaker will beep and the dialog box will instruct you to replace the program disk with a data disk. Place the sample data disk in the same drive you loaded from, close the door and press any key. If you are using a hard disk the program will not pause, but will go ahead and make a menu of the files on the hard drive in sub-dirs of the dir that holds the programs. To load one of the four sample DBs, use the up or down arrow keys to highlight the desired file, then press return. You should be pleased to know that I will require you to memorize no function keys nor command syntax. Five of the programs are menu-driven, and the BASE program employs a dialog box. Please don't be deceived by the slick user- interface, you must still understand what you're doing. The screen of the BASE program lists the user-assigned record numbers and names of the records contained in the selected file. The number 100 in the upper left corner of your screen is flashing. Press the down arrow key once. Now the number beneath it (200) is flashing. Press return. The screen clears, and record 200 is displayed. Now the screen displays the names of the data-segments I defined for the first sample, and the data entered in record 200. It is important to understand that the "headings" are the same for all records, and the data is different in each record. Press "Q", then "1". Now, press the down arrow key. Press return. Record 300 contains the same headings, but different entries for each heading. On the screen are two separate and important things: the format, or structure, of the file is on the left, and the data recorded in record 300 is on the right. The dialog box, or mini-menu, is at the bottom of the screen. It lists the functions available , prompts and receives commands from the user. Press "Q" (the Quit command in the box) and the box clears. The dialog is "PRESS 1 TO QUIT RECORD 300, OR 2 FOR NO:". Press "1". The screen clears, and the names of the records and their numbers are again displayed. In the dialog box the function you just used (record access) is listed (PRESS RETURN TO ACCESS). The dialog box associates keys with the functions they call. The dialog box also contains "MOTION KEYS". these keys "move" the display "through" the file to allow database browsing. Press the end key. The screen clears, and the last records in the file are displayed. Press the up arrow key a few times and the screen scrolls up, "uncovering" another record at the top each time. Press the home key. The first records in the file are displayed. Press the page down key and the screen clears, displaying the second screen of the file. To select a function or cause movement, simply press the key associated with the desired result by the dialog box. Let's say we want to record another record. In the case of the sample DB, we want to stock another item. Recording records (in computereze) is called ENTERING. I guess this is because new records are entering the file or system. Look at the dialog box. Sure enough: ENT. Press "F1", and give a positive response to the dialog. You are asked to select a number to identify the new record. Use 4000. The screen clears, and a blank format is displayed. You have accessed the record entry function. Press return. A box outlining the size of the name field in the file appears. Enter "BAD AZTECH 808". Press return. Enter some data for all the segments. Note that numeric segments will have no non-numeric input. After placing data in all ten segments, press home and review your input. Press the up or down arrow keys and select a segment. Press return, then escape. Re-enter some data. During numeric field access, add, subtract, multiply and divide functions also appear in the dialog box. Try these functions. Select another segment and edit its' content with the right/left arrow, insert/delete keys. Now, supposing we have what we want in the record, we need to write it in the disk file. Look at the dialog box. Sure enough: Write. (create is different) Press W, and give a positive response to the dialog. The disk drive light indicates you are recording the record. The screen clears, and the names and numbers of the records are again displayed. The enter function has done its' task, and returned control to the browse function. Press the end key. The last record is "BAD AZTECH 808". Use the arrow keys to cause number 4000 to flash. Press return. Aaah, the wizardry of the computer! Our new record has been re-called. F1 = ENTER FUNCTION: Press to enter a new record. F2 = DELETE FUNCTION: Press to erase a record. F3 = PRINT FUNCTION: Press to output all records now in the group to the printer. Data segments in the Input/output group will be printed, data segments not in the I/O group will be suppressed. F4 = PRINT FORMAT FUNCTION: When sorting or performing calculations, it's handy to have a file format sheet. It details the file. F5 = FIND FUNCTION: Press to access the file index, i. e. to select a record by its' content. Please read sections covering file indexing in the glossary. ONLY the records in the current group can be found. To find a record, the user simply enters the exact content of the desired record. The entry is indexed (a numeric value is extrapolated from it) and the computer searches the numeric equivalent of the contents of the other records, stored in RAM, for a match. If a match is found, that record is read into the buffer and displayed. The index routines do not ignore case. Pressing the caps-lock key at the beginning of each session will obviate case. F6 = SORT FUNCTION: Press to put the current survivor group in order. The "key" upon which to order the records may be on disk or in a counter field. If on disk, only numeric fields may be used. After the sort function has completed its' task (allow 15 minutes for a 4000 record file) the browse function will display (the print function will print, etc.) the record with the lowest value in the test field first. This function is useful for arranging mailing lists in order on zip code, and anywhere you wish to arrange the list by quantity. F7 = ALPHANUMERIC SELECT FUNCTION: Press to select records by alpha-numeric criterion. In a name/address file, we wish to work with only those records "whose" title field holds the data "PRESIDENT". First, we must define the target of the search. You may search either one segment in the records, or all segments defined as string. In this case, we know where the data is, in a segment called title, number three. So, we specify number four as the target of the selection process. We can match upper/lower case letters and ignore all spaces in our search, or we can have the computer look for srtict equality. Likewisw, we can specify an instring search, and get as survivors all those records that contain the search string, or specify equality, and end up with those records exactly equal to the search string. Then, we enter the search value: PRESIDENT. Finally, we specify that we want the survivors to contain the search value. We could reject all records containing the search value as well. The selection crucible now loads all records in the current group, and tests segment four to see if the search value is there. After the browse screen returns we look in the survivor records and find a goodly number of VICE- PRESIDENTS may have been included if an instring search was performed. F8 = NUMERIC SELECT FUNCTION: Press to select records by numeric criterion. In a customer file, there is a segment called amount due. If we wish to work with a group of only those records "whose" balance is now greater that zero (accounts whit a balance outstanding) we can use the numeric select function to reject those records "who" have a zero balance. Like the calc routine, the num-select function first asks for the whereabouts of the value to be tested. In this case, say, the amount due segment is number four. So, we direct the computer to look for the test value on disk, in segment four. Next, we must choose a comparison mode. Since we want only the records holding a value of greater than zero, we select the greater that option from the menu. Finally, we must specify the whereabouts of the comparitor. In this case the test value is the same for all records, zero. So, we specify a keyboard entry as comparitor, and enter zero. When the selection crucible starts each record now in the group is read into the buffer, and its' test value compared to the comparitor. If the record "fails" the test it will no longer appear on the browse screen, and will not be accessed by concurrent selection processes, nor appear on reports generated by the print function, or acted upon by the calc function. For all intents and purposes, a non-survivor record is not in the file, at least, until the group- reset function is used. F9 = CODE FUNCTION: Press to write a code to any segment in all records in the current group. The records containing the code or flag can then be identified by its' presence. Like F10, this function is used to identify a group of records not in memory. When records are identified in this manner, the identification stays in the records until removed. F10 = MARKER FUNCTION: There are times when we want to work with multiple groups. On a mainframe, hey, no problem! You've got a couple megabytes to work with, and virtual storage to back it up. This program, when loaded with a file containing the full 8000 records, comes dangerously close to "running out of chips" in a computer expanded to the full 8088 compliment of 640K. So, I've devised a little "V.S." of my own. The current group, with its' (128 KB of) counter values, can be shuffled off to the disk drive, to be re-loaded when needed. Thus freeing the RAM for another group. When re-loaded, the browse function will display only those records that were present at the time of the write, and data in the counter fields will be restored to the values stored at the time of the write. I do apologize for the necessity of doing this. This computer needs more chips! One use of the marker files is to pass a group of records to the POWRMAIL program. This marker must be called "MAILOUT." The POWRMAIL program loads this file, and prints sticky labels for the records included in it. The marker files are transient, and probably won't be any good tomorrow. They contain the INTERNAL record numbers of the group, and, tomorrow, that internal record number may represent another record that may not meet the parameters specified. This happens when a record is deleted. A "hole" is created in the file, and the browse screen displays a zero and a blank where the record was. When the next record is entered, the computer searches for "holes" before accessing more disk space. If it finds one, it is filled with the record to be added. F11 = GROUP RESET FUNCTION: Press to restore all records to the current group, and reset counters to 0. To access, press Alt + F1. F12 = INPUT/OUTPUT FUNCTION: Press to adjust the content of the I/O group (see glossary). F13 = CALCULATE FUNCTION: Press to perform a calculation. The entire screen will clear, and menus will guide you through the many possible ways you may calculate. The calc function first asks the whereabouts of the first value, the one to be acted upon. The data must be numeric, and may be on disk, stored in one of the two "counter" fields provided in RAM for each current survivor record, or it may be a keyboard entry. Next, we enter the desired process, i. e. add, subtract, etc. Then, depending on the process selected, we may enter the whereabouts of a second value, which may be the sam as the first value. If we simply want to move a value, say, from counter one to data segment eight in the file then we enter the whereabouts of only the first value. If we want to add segments four and eight, we must enter the whereabouts (segment eight in the file) of the second value as well. Finally, we are asked to specify where to place the results of the calculation. We can write it to disk, or place it in a counter field, in RAM. Only the records in the current survivor group will be calculated. Non-survivors are ignored by the calc function. F14 = TOTAL-AVERAGE FUNCTION: Press to total or average any numeric segment. Note that only the records now in the survivor group will be totaled or averaged. F15 = RE-NUMBER FUNCTION: Press to change the user-assigned record number of the record whose number is flashing. F16 = POSITION FUNCTION: Press to enter the position in the file to which you wish to go. If you are now at position 30, and want to go to position 4,000 that's a lot of PgDn keystrokes. This way, you move directly to the desired position. F17 = CHANGE MAIN DISPLAY SEGMENT: Press to see other data than the first field in line one of the browse screen. Myself, I kind of like to leave the record name up there, and assign the alternate display segment. The main ds will not accept zero (be turned off). F18 = CHANGE ALTERNATE DISPLAY SEGMENT: Press to change the alternate ds, which is a blank line when the program starts. Some folks like it that way, saying it makes the display easier to read. For that reason, you may turn it off. You may also display the counters in the alternate; this can't be done with the main ds. The alternate ds is automatically set after you do a sort, perform a calculation or select records, displaying the target data. F19 = LOAD FUNCTION: Press to load another file and the menu detailing the datafiles on the target disk re-appears. Select another file and press return. F20 = QUIT FUNCTION: Press to end the BASE program and return to the function selection menu, from which you may exit THE DATAMAGE. F21 = BEGIN MACRO RECORDING: (Ctrl + F1) Press to record the proceeding multi-record functions into a re-usable macro file. If you had a datafile detailing your customer base you might well wish to have a listing of those who owed you, possibly broken down into states or whatever. Next week, you need the same information from the file. After doing it manually until you are certain of your method, use F21 to make a macro of the operation. As the person who wrote this program I am still blown away by how fast it will run a macro. Mean, gnarly record select after 16-digit calculation after massive ascending sort; it really runs 'em. F22 = EXECUTE A MACRO: (Ctrl + F2) Press to run a macro. RECORD DISPLAY/UPDATE FUNCTIONS: Press RETURN to display/update the record whose number is flashing on the screen. The screen clears, and is filled by the names of the segments in the file, and the data recorded in the record accessed. The dialog box now shows more functions, accessed, this time, by the first (CAPITAL) letter. QUIT FUNCTION: Press to end display of current record, and return to browse. If you have changed the data on the screen, using the QUIT will NOT write your update(s) to disk. WRITE FUNCTION: Press to write the data on the screen to disk in the record number appearing on the screen. The routine will check the indexes, if any, and refuse to write a duplicate. RESET FUNCTION: Press to reset flashing segment to original or merge value. Original value will appear unless another record has been merged. PRINT FUNCTION: Press to output the current record to the printer. MERGE FUNCTION: Press to load another record. This records' data is made available to move into the current screen with the RESET function. CREATE FUNCTION: Press to write the data on screen to a new record. A number for the new record is entered, and the indexes, if any, are checked for duplicates. The routine will refuse to write on index violations, and display the offending index. DATA ENTRY/UPDATE FUNCTION: Press RETURN to enter/update the flashing data segment. The dialog box clears, and the first line details the segment accessed, while the second line lists the cursor movement keys. The last line has the available functions. If the segment is numeric, the Add, Subtract, Multiply and Divide functions are present. These functions emulate a calculator, with its' register loaded to the value stored in the segment. When the segment contains the desired data, press RETURN to end edit. ALPHABETIZATION: I hate to repeat myself, but I'm out of memory. I have designed it to what it does the most, finding records by their content, fastest. This package doesn't alphabetize. So, forget it, right? WRONG! The ability to produce alplabetic listings is there, and when accessed, works faster than any other can! Here's how: When entering records, leave gaps in the user-assigned record numbers, and place all initial records in the file in alpha order, if at all possible, on field one, which is displayed. When records are added, they are placed in the first available "hole", or at the end of the file. So, when the first record is added, initial alpha order is destroyed. You are, however, smarter than the computer, and you know this will happen. Before entering a record, scroll down in the file to where the record should go. If you have, as I suggested, placed the data by which you wish to establish alpha order in field one, you simply view the record names scrolling by on the screen as you would names in a paper-bound file drawer. When you get to where the record "goes" assign a record number MIDWAY between the previous and next record. O. K., you had to work a little, poor baby. Now, let's examine the fruits of your labour: If you've ever watched a computer alphabetize a file, you know it takes a while. Even if the system has sufficient RAM to load the target of the alpha order (which this one does NOT) it has to be read off disk at least once, and if not, many times. After the computer gets two alpha datas to compare, it must take them both apart, and do case test/conversion, then letter-by letter comparisons. This is stupid! Since you "filed" the record by u/a number, however, none of this is is necessary. To place the file in alpha order, simply press F6 to sort the file. Opt to order on the u/a record numbers. Now, instead of the onerous task of alpha comparison, the computer BLASTS through a set of binary numbers ALREADY IN RAM, and you don't have to wait. When the sort finishes, the file (OR CURRENT GROUP!) will be displayed, printed, searched, etc. in alpha order. There is something far more more important, here, than the accomplishment of a fast alpha sort by not doing it at all. Instead of relying upon the program to do everything for you, "you" used "your" head to cause the software to do something! YOU THUNK! DATE SORTING: Another example? This package has no date formats, and will not sort on dates. So, you can not use it to establish a group of records whose target dates lie between xx/xx/xx and, of course, yy/yy/yy, right? If todays' date is 1/2/1987 then todays' numeric date is 19870102. The year, then the month, and then the day. In files where date sorting is applicable, declare a numeric date right after the date in the string format of your choice. (see sample db #1) You still get a faster sort; the data is loaded and sorted, no conversion to a numeric format is necessary. And, again, you have "designed" a function into your file that the program does not perform. WRAP-UP: In case you haven't had enough, the instructions for the other five programs await you in their own files on disk #3. Allow me to thank you for trying THE DATAMAGE, and to apologize for these instructions, which certainly leave something to be desired. I believe that something is the authorship of someone skilled at communicating with people via the written word. Don't look at me, I am only just learning to communicate with a computer, via keyboard.