MASTERFILE BUSINESS/DOMESTIC FILING SYSTEM FOR 48K ZX SPECTRUM CONTENTS Chapter Page GLOSSARY OF TERMS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 OVERVIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 FILE STRUCTURE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 PLANNING A FILE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 MENUS, PROMPTS, MODES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 BASIC COMMAND MODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 GETTING STARTED. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 MAIN MENU OPTIONS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 EMPTY FILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 DATA NAMES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 EDIT MODE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 MICRO-PRINT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 WORD PROCESSING. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 ADD A RECORD MODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 DISPLAY MODE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 UPDATE MODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 EXERCISE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 SEARCH MODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 TOTAL/AVERAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 LOAD AND SAVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 STATISTICS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 USER BASIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16-17 MICRODRIVE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 SOME POKES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 OUTPUT TO NON-ZX PRINTERS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 MASTERFILE 09 ENHANCEMENTS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 COPYRIGHT NOTICE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1 GLOSSARY OF TERMS ADD Insert a new record onto the end of the file ARGUMENT In search mode, something with which records are to be compared AUTO-PROMPT Where new data items are solicited automatically BACK OUT Change one's mind COMMAND MODE Where cursor is flashing K and awaits line number or Basic keyword DATA NAME Legend associated with a data reference DATA REFERENCE Letter A-Z by which data items are identified DISPLAY MODE Where selected records are viewed in a report EDIT MODE Where report formats are created/altered EMPTY FILE One devoid of records, data names, report formats FILE Collection of records, and associated data names and report formats GENERAL Overall attributes of a report INVERT Flip select status of all records ITEM Data, 1-128 characters in length LITERAL TEXT Static text, e.g. a heading, in a report MAIN MENU The menu offered when the program is loaded MENU List of key options MICRO-PRINT Compression of displayed text on the screen MM Abbreviation for main menu NULL TEXT Legend shown in a report in the absence of an item PAD Fill out data with spaces in a report PROMPT Instruction to the user, or small menu PURGE Erase all selected records RAM Random access memory available for operating the program RECORD Collection of up to 26 items, each with a different data reference REPORT Display of selected records REPORT ELEMENT A part or a report, e.g. heading, box, data spec. REPORT REFERENCE Character 0-9, A-Z identifying a report RESET Clear select status of all records SEARCH MODE Where records are selected or otherwise by comparing with an argument SELECTED Eligible for display in a report SEQUENCE Where records are listed in ascending order by one item UPDATE MODE Where a record can be altered USER BASIC Basic which you can supply for special processlng 2 OVERVIEW MASTERFILE is a filing and retrieval system for use with the 48K ZX Spectrum. It is almost entirely machine-coded for compactness and speed, and offers about 32K of data per file. Files can be saved and loaded independently from the program, and stored either on cassette or Microdrive cartridge. Because MASTERFILE display formats are user-defined, the range of applications is enormous, both for domestic use and for business. Address lists, library catalogues, personnel files, stock inventories, school exam results, family trees - all these are easily handled by MASTERFILE. Some of the main features of the program are; - Menu-driven - Dynamic variable-length file - User-defined data names and report formats - Sequence by any data type - File search by any number of criteria - Display 1-22 records per screen - Micro-print feature for up to 51 characters per line - Print to the ZX Printer - Print to other printers via suitable interface - Total/average - Update, copy, erase any record - Save/load files, save program - Optional User Basic interface - Microdrive compatible - Speed of operation FILE STRUCTURE A file is an organised collection of data which is stored on cassette or cartridge, and which can be loaded into RAM for enquiry or update purposes. It may be simple like a telephone list, or complex like a personnel data file. But in every case, a file is made up of records, each of which is usually related to a particular identifying item e.g. a person, a recipe, a part number. Each MASTERFILE record is in turn made up of up to 26 different items of data e.g. name, address, telephone number, stock level. Data items are all treated by MASTERFILE as being of variable length, up to 128 characters long. There is no rigid record structure, and items can be stored in any order within a record; for this reason records are tagged with a data reference letter. A record cannot have more than one of any data reference; this is an important limitation to bear in mind when designing the structure of your file. All data is stored in character format. One of the many advantages of a computer file over a card index system is that you can sort it into any order. MASTERFILE does not actually sort your file, but instead lets you view it in any sequence you choose. And you can have different logical views of the same data in different sequences, a feature normally seen only in large computer systems. Further, you can be selective about which items are required in a report, and choose the display style. You will compose a report format for each view of the file which you need. Once the formats are built, they are saved automatically as part of the file. While items are referred to using a single letter, you can associate a word or phrase with each reference letter, which MASTERFILE then displays whenever you use data references. (Especially in AUTOPROMPT, q.v.) We call these data names, and these names are also stored automatically as part of your file. PLANNING A FILE We do recommend that you work through the section entitled 'EXERCISE' before starting your own file. After that, we suggest the following approach. The most important task is to decide what data is to go into each record. Allocate a letter A-Z to each kind of data you wish to store. Try to estimate the average record size, using the formula 1 + N + D, where N is the number of items per record, and D is the average number of keystrokes of data per record. Then divide this into 32,000 for the approximate maximum number of records. Also allow a few dozen bytes for each display format which you will compose. Remember that while any item can be present or not in a record, you cannot have more than one item of the same data reference in one record. If your file does require multiple items associated with a given person, then you must either have multiple records (which wastes file space), or allocate a range of different data references - which can complicate file searching. The next step is to allocate a name or description for each data reference. Do this as described in DATA NAMES, after creating an empty file - see EMPTY FILE. Next, add just a few records - see ADD A RECORD MODE. Now comes the hard work, where you must design and specify the way you want to view your file. Remember that you can have many different views, different sequences, different formats, different contents. Start with a simple format - it may be helpful to plan it on paper first. Leave embellishments such as lines and boxes until last, after you have 'frozen' the positions of your data and headings. Give special attention to the 'interval' which affects the spacing between displayed records. See EDIT MODE, MICRO-PRINT and WORD PROCESSING. Once you are satisfied with your report format(s), and your data organisation, you are ready to build your file. Do remember to take a file save from time to time. 4 MENUS, PROMPTS, MODES MASTERFILE menus are yellow and respond to upper-case or lower-case keys impartially. When MASTERFILE is loaded, it presents the Main Menu (MM). The MM screen also displays the file name (up to 10 characters) and the MASTERFILE version number. When a key correspon- ding to one of the options on the menu is used, MASTERFILE either takes the indicated action, or immediately offers another menu or prompt. A prompt is a one-line instruction or menu in the lower part of the screen, and takes priority over any other menu. All the yellow menus and prompts respond to just a single key. But where MASTERFILE requires a textual response, the flashing L cursor appears and you terminate your response with the ENTER key. MASTERFILE nearly always offers a menu or prompt, but there is one exception: when in DISPLAY mode the menu would obliterate your display, so it is not usually shown. But you can overlay your display with the menu, by using the Q key - and use Q again to remove the menu. MASTERFILE operates in a variety of modes, usually shown by a blue heading. (But not DISPLAY mode - we leave lines 0-21 to you. DISPLAY mode always shows Report n in red on line 22.) The important modes are described in the glossary, and some modes - SEARCH, DISPLAY, MM - are accessible by several menu routes. It would be a little dangerous to allow a single-key response to erase data, so MASTERFILE always asks for confirmation via the Y key. Likewise, User Basic is potentlally drastic, and again requires Y to confirm. If you see Y to confirm you can back out with any key except Y. BASIC COMMAND MODE With a few exceptions, MASTERFILE runs under machine code control and the BREAK key is ineffective. But if you need to adapt the Basic (e.g. for Microdrive) or if you need to put in your own User Basic, then you must get into COMMAND mode. This can be done only when MASTERFILE offers a flashing L cursor, e g. press L at MM. If you then respond with CAPS SHIFT held down and 6, you get H STOP in INPUT etc and now you are in COMMAND mode and can list and alter the Basic. To resume MASTERFILE processing, give the command GOTO 1, which takes you to the main menu again. GOTO 1 should also be used to recover any accidental drop into COMMAND mode. Do not CLEAR or RUN, since these will cause MASTERFILE to fail. 5 GETTING STARTED Your MASTERFILE cassette contains two identical recordings - either consecutive, or one each side. Each recording as in two parts: (a) Program: MF (b) Bytes: MF mcode Part (a) is in Basic, and includes the example file. Before loading MASTERFILE Basic, remember this first vital step: CLEAR 57036 (or whatever number is indicated on cassette label) Now you can load the program, using: LOAD "" or LOAD "MF" Once loaded it automatically loads part (b) which is about 8K of machine coded MASTERFILE logic. Just leave the cassette playing until MM appears. The reason for the CLEAR nnnnn is to reserve the top part of RAM for the MASTERFILE machine code. We cannot put the CLEAR into the MASTERFILE Basic, because that would erase MASTERFILE key variables, including F$ which contains the file. MASTERFILE will not work if any other interface software has to use RAM above the CLEAR address. MAIN MENU OPTIONS The main menu represents the top logical level of processing and offers functions which affect the file as a whole. Some functions are described more fully elsewhere in this manual. A Add a new record onto the end of the file. A one-byte record is inserted and you can see the Recs= and Sel= counts increment. See ADD A RECORD MODE, q.v. C Lists all report references, together with top-most heading of each report. You can switch to DISPLAY mode by pressing the report reference of your choice, or you can use ENTER to return to MM. D Switch to DISPLAY mode to view selected records, The report format used will be either the first one created, or the last one used. If there are no report formats yet, EDIT mode is entered. Several other menus offer a D option. See DISPLAY MODE. E Switch to EDIT mode to review or update report formats. See EDIT MODE. L Load a file which has been saved via MM V, F etc. See LOAD AND SAVE. N Review or update names. See DATA NAMES. S Switch to SEARCH mode to identify records according to the values of data they contain. See SEARCH MODE. I Invert the SELECT status of every record. Selected records will become unselected, and vice versa. R Reset the SELECT status of all records to unselected, which will show Sel=00000. To select all records, use R then I. P Purge -i.e. erase- all selected records. As with all erasures, confirm with the Y key. T Compute total and average of numeric data across all selected records. T is also available from DISPLAY mode. See TOTAL/AVERAGE. V Save program and file, or file only. See LOAD AND SAVE. U Process all selected records via User Basic. See USER BASIC. 6 EMPTY FILE You should keep a version of MASTERFILE which has an empty file, and use it whenever you need to start a new file application. To create your empty file, you must clear the example file as follows: (a) Erase all records: MM RIPV (b) Erase all report formats: MM E. Then R1XY which erases report format 1. Then R2XY to erase report 2, and so on for 3, 4, etc. Then M back to MM. (c) Erase all data names: MM N. Then EY, EY, etc until no more data names are displayed. Then M back to MM. Now save the program, via MM VPEMPTY etc. This also provides you with an additional back-up of the program. You may also wish to save the empty file by itself, via MM VFEMPTY etc. Note that an empty file still contains essential system information within F$. DATA NAMES It is advisable - although not essential - to give each of your data references a name. Data names can be up to 128 characters in length, and are stored as part of the file. They are essential if you wish to use auto-prompt when adding new records. Use MM N to review or alter your data names. You will see the same menu as appears in ADD A RECORD mode, but options F and D do not function. Use A to add a new data name, N to browse through the names, R to replace a name, E to erase a name. Use M or D to return to MM. The order in which you add data names determines the order in which data is auto-prompted. EDIT MODE Entered via MM E, EDIT mode is concerned with the creation and modification of report formats. Up to 36 report formats may be defined, giving that many logical views of your selected records. Some effort is required to edit a report format, but this is typically a once-only task. The menu reached via MM E invites you to create a new format via A or review/alter an existing format via R. You can also use M to return to MM. After A or R, give the report reference, 0-1, A-Z, as prompted. The report reference Ref n is then shown at top right while in EDIT mode. When a report format is first created, it is given the following General characteristics: a) Background paper colour of 7 (white) b) Screen border colour of 7 c) Sequence - none, unsorted d) Interval of one record every 2 lines You can change these at any time just by using menu option R while General is displayed. You are then prompted for a to d. Reply to a and b with key 0-7. Reply to c with the data reference of the data by which the report is to be sequenced, or else ENTER if no sequence is required. Reply to d with 1-22, being the interval down the screen at which records are displayed. To show just one record per screen, use an interval of 22. To list one record every line, use an interval of 1. Continued on p. 8 7 Continued from p. 7 You must add some report elements: these describe headings, lines, boxes, and data to appear in the report. There is no limit to the number of elements. You can even display the same data more than once. Use EDIT menu option A to add a new element, whereupon another menu asks what kind of element is being added. All elements except data elements are static, and will always appear whether or not any records are selected. They are: L Literal - e.g. title, column heading, currency symbol B Box - a rectangle drawn to pixel resolution H Horizontal line V Vertical line For a literal, press L and supply the data as prompted, i.e. line number, Micro-print*, column, paper, bright or not, inverse or not, flash or not, and the literal text. If text overflows the rightmost column it will resume on the next line, column 0. Ink colour is not prompted - MASTERFILE always uses contrast. For a box, press B and supply as prompted the co-ordinates of the top-left corner, depth in pixels less 1, width in pixels less 1. For a line, press H or V and supply as prompted the left-most or top-most pixel, and the length in pixels less 1. So much for the static elements - now we consider the data elements. Data elements specify which items of a record are to be displayed, where, and with what attributes. Having pressed A to add an element, press D and reply to a quite long list of prompts: (a) Data reference of the target item (b) Line - the line at which the first selected record is to display the item (c) Micro-print* (d) Column (e) Width - number of columns wide. MASTERFILE lets you display data in any character rectangle (f) Depth - number of lines deep (g) Spectrum attributes - paper, bright or not, inverse or not, flash or not (h) Pad or not - Pad will fill the rectangle with the chosen paper colour (i) Null text - if data is absent in a record, then you can supply text to appear in its place, e.g. not known, or -. The default null text is a single space. Numeric data will be shown right-justified, provided that the field depth is 1, and Pad=N. The above fully describes how an item of the first selected record appears in your report. Items from further records will be displayed lower down the screen, at whatever interval you have in General. You can browse through your report elements by using N (next element), and any element can be replaced by using R and then followlng the prompts. There is also an element erase option, E. You can go straight to DISPLAY mode via D, to see the result of your changes. The report format as a whole can be erased using X, or copied using C. C - copy - is very useful when you want to build a format similar to one already built, perhaps you just want the same layout but different sequence. After C or X you see the initial EDIT menu. An interesting use of Null Text is to use an unused data reference in a data element. This is how we get the lines of dashes between records in our example file, REPORT 2. The null text is a line of dashes, and always appears because the target data reference is never present in the records. Plan your report formats on paper before coding them. Aim for an exact number of records per screen, by choosing suitable line numbers and interval. Beware overlapping elements, or overlapping records - MASTERFILE does not check for these. * See MICROPRINT, next chapter 8 MICRO-PRINT The normal character size of Spectrum allows 32 columns across the TV screen. By compres- sing the characters to 6-bit or even 5-bit width, instead of the normal 8-bit width, more characters per line are made possible. The Micro-print feature allows two degrees of compression, either to 42-column pitch or to 51-column pitch. Thus any display can show text in normal or compressed form, or any mixture. Both literal text and data text can be so treated. The advantages of Micro-print are not only that more data per screen is seen, but especi- ally with 42-pitch the clarity can be enhanced due to the improved proportions of the characters. The only drawback is that Micro-print takes a little longer to generate, and data is 'painted' rather than flashed up. The way to specify Micro-print is as follows: In EDIT mode, when supplying a literal or data element, you are prompted with Micro-prt Y/N. Reply with the N key to stay with 32-pitch for that element. Otherwise, press Y and then you are prompted with 42-Pitch Y/N. Reply Y to select 42-pitch,or N to select 51-pitch characters. Then when you are prompted for column and width (in the case of data elements), you will find that MASTERFILE lets you extend to column 41 or 50, according to which pitch you selected. Due to the way that Micro-print was built into MASTERFILE (at version 08) we have had to suppress the FLASH option for Micro-printed text. Indeed, EDIT mode displays your Micro- print pitch in place of the FLASH status, when you review such elements of a report. Notice that when giving column number for a Micro-prlnt element, the number is in terms of the selected pitch. The text will be displayed at X co-ordinate calculated as 6 times the column (if 42-pitch) or 5 times (if 51-pitch). The approximate 'real' column number is 6/8 or 5/8 of the Micro-print column. Because of the attribute geometry of the ZX Spectrum, paper and ink colours must change only at natural character boundaries, so your Micro-print text colour extends both sides to a natural character edge. The Micro-print feature of MASTERFILE is a licensed adaptation of a package called MICROPRINT, which can be used in your own programs. The package is available from: Myrmidon Software P.O. Box 2, Tadworth, Surrey, KT2O 7LU, England. WORD PROCESSING When data is displayed via DISPLAY mode, MASTERFILE performs rudimentary word-processing such that leading blanks are ignored, a clean left margin is maintained, and word-breaks are minimised. This means that text can be entered without having to worry about spacing. MASTERFlLE will start a newline rather than split a word, unless the last line is already reached. The vertical line character (VLC) has a special use in MASTERFlLE. A VLC is found via Sinclair extended mode symbol-shift S, i.e. the little red mark under the S key of the Spectrum keyboard. The VLC is a force-line-break signal, so you may wish to use it in an address for example. You key the text as a single data item but with VLCs as line separa- tors. Now when the data is displayed in a 4-line-deep paragraph, for example, each VLC forces a change of line. This is ideal for address labels. Notice that when in UPDATE mode, item data is shown without word-processing, and VLCs are visible. But in DISPLAY mode the VLCs do not appear. If there is insufficient room to display an item, truncation occurs on the screen, al- though the full data is kept in the file. 9 ADD A RECORD MODE The usual way to add a new record is via MM A, which builds an empty record onto the end of the file. The menu then invites you to add (insert) an item (A), auto-prompt items (P), or exit to DISPLAY mode (D) or to MM (M). Other menu options are shown, but are not immediately applicable. To put data into a new record, you can use A and supply the data reference and the text. The text is a maximum of 128 characters, and trailing spaces are dropped. No tokens, graphics, colour controls, are allowed - they are altered to ? if entered. CAPS SHIFT/LOCK may be used. The item is displayed in bright white under its red data ref/name. An alternative method of data entry is via (P), which is Auto-Prompt. This causes MASTER- FILE to solicit each item by scanning your data names. Auto-prompt obviates the need to remember all your data references, and also makes it unlikely to omit an item. You just enter text, concluding with ENTER for each prompted item. MASTERFILE briefly displays it before prompting the next item. If you have no data for an item, just use ENTER on its own. ENTER quickly followed by SPACE will end the prompts. Having added one or more items, you can browse through them for checking, using N for each next item. And you can replace using R, or erase using E. Instead of holding the N key down to reach an item, you can summon it directly using the G key followed by the target data ref. But if you attempt to G an item which is not present, MASTERFILE waits for you to give a different ref or back out via ENTER. If you use R to start a replacement, and wish to back out, just delete or blank your reply and press ENTER. MASTERFILE will leave the original item intact. Before you can add another record, you must first go back to MM (M). There is a way to insert a record at a particular place in the file - using DISPLAY mode C. See DISPLAY MODE. 10 DISPLAY MODE DISPLAY mode is for viewing your selected records in a way dictated by one of your report formats. You can display via MM D, but there are many other menus which offer the same D option. The report format used is that which was last used, or else the first format. Another way to DISPLAY mode is via MM C where you choose a report ref. The contents of lines 0-21 depend upon your report format - you have a free hand here. Line 22 shows the following: Report n Q = menu No more (red) (yellow) (blue) where n is the report reference, and the blue legend can be ..more when there are more records to be displayed than there is room for on the current screen. Once line 22 is displayed - some sequenced reports can take a few moments to fill the page - a list of menu functions is available. The menu is not normally shown, but you can summon it with Q-and banish it again with Q. The functions are as follows: N If ..more is shown in line 22, use N to see the next page of the report. 1-9 Advance the report by 1-9 records. Sorry, we do not have a 'back 1' function, so be careful not to overshoot. Use 1-9 to position a record at top-of-screen ready for options U,E,O and C below. B Resume the report from the first record. P Copy lines 0-21 to the ZX Printer, or equivalent. Use the S (single) to print just the current page. Or, use A (all) to print the current page and all further pages. To abort a print, hold the H key down or use BREAK and GO TO 1. U Enter UPDATE mode with the top-most displayed record. If DISPLAY mode is resumed from UPDATE mode, the same target record is shown. E Erase top-most record. (Y to confirm). O (Letter O) un-selects the top-most record. The record is not erased. C Copy the top-most record. A new record identical to the top-most record is inserted next to it. The copy record can now be altered via U etc, and so here we have a means of inserting a record at a particular place in the file. S Enter SEARCH mode. T Compute and display total/average. R Switch to a different report format, resuming at the same top record as currently displayed. You are prompted for the new report ref, and so it just needs two keys to switch from one report to another. The reports need not be in the same sequence. This facility is particularly useful to switch from a summary report (say 20 records per page) to a full expansion (1 record per page) of the top record. M Return to MM. Q Display the menu just described - press Q again before doing anything else. 11 UPDATE MODE This mode is where a record can be updated, i.e. its component items can be reviewed, replaced or erased, and new items can be added. The target record for update is always the top one displayed in DISPLAY mode. Indeed, UPDATE mode can normally only be reached from DISPLAY mode, with at least one record displayed. Use N and 1-9 keys to position the tar- get record at the top of the screen, then press U. Now your options are almost identical to those described in ADD A RECORD MODE, and indeed the same menus and prompts are offered. The difference is that you can use D to resume DISPLAY mode at the same target record on completion of the update. 12 EXERCISE Here is a short exercise showing how to set up a sample file of names and telephone numbers, starting from an empty file. Follow the steps described in EMPTY FILE before starting this. We shall use the following notation: ‡ = ENTER key is pressed (Do not key the commments in brackets) Follow this exercise exactly, and slowly - taking note of every menu and prompt. Start at MM of the empty file. We show the menu responses as capital letters but you can use unshifted keys. Here we go: NANname‡ATtel number‡M (This defines two data names: name for data ref N and tel number for data ref T. Now we will add some records:) AANJones P‡AT01-234 5678‡M (We have stored one record, with the telephone number of P. Jones. Now for another record:) APAtkins R‡0232-66554‡M (This time we used auto-prompt to enter the data for R. Atkins. Do a few more this way:) APSmith John‡2332-45664‡M APAirport‡01-887 23459‡M APHairdresser‡876-5432‡M (We now have 5 records, and now we must use EDIT mode to compose a report format so we can view our file:) EA1 (start of report ref 1) AL0‡N8‡1YNNTelephone-List‡ (Puts a heading 'Telephone-List' in blue at line 0 column 8.) ADN3‡N1‡16‡1‡7YNNN‡ (To show names starting at line 3, col 1, 16 characters max, 1 line deep, paper white, bright, inverse no, flash no, pad no, no null text.) ADT3‡N18‡14‡1‡2YNNN---‡ (To show tel numbers starting at line 3, col 18, 14 characters max, 1 line deep, paper red, bright, inverse no, flash no, pad no, null text of '---'.) (We can now test the report by going to DISPLAY mode:) D (Looks OK, but how about sorting it by name, and making a few other changes? Go back to EDIT mode:) MER1 (Review report ref 1:) R76N3‡ (Background paper stays white, border set to yellow, sequence by N, interval to 3 lines.) AB0‡165‡163‡255‡ (Now we have described a box. See the effects of these changes now:) D (The display is sorted by name - see why it is best to place initials after surnames - and note the border and interval changes. Now reset interval to 2 and finish off with some refinements:) MER1 (Review report ref 1:) R76N2‡ (resets interval to 2) ADZ4‡N0‡32‡1‡7NNNN--------------------------------‡ (We have used data ref Z which is ab- sent from our file. There are 32 dashes. See the effect.) D (Now let us update Jones - his number has changed:) 3 (Puts Jones at the top) U (to UPDATE mode) GT (get telephone number) R01-995 3311‡D (replace with new data, return to DISPLAY mode.) (Finally, we can take a save of the file:) MVFTELNUM‡‡ We leave you to experiment further - edit more report formats, update the file, explore the search facilities, etc. Leave no menu option untried. 13 SEARCH MODE We have seen that MM RI will make the whole file available for DISPLAY mode viewing. But when a file is very long, it is more useful to let the computer pick out just the records you need. SEARCH mode does this, and very swiftly, by looking at a particular item in each record and comparing it with an argument which you supply. Records which qualify are flagged as selected and are reflected in the Sel=nnnnn value. To start a search from scratch, you would ensure that no records are selected initially. Use MM R to set Sel= 00000. Now use MM S to start the search dialogue. The first search menu invites A (all) or L (sel) or M (MM). Use A to search all unselected records, and select those which match. Use L to search only those records already selec- ted, and unselect those which do not match. The use of L will decrease the count if any selected records fail to match. Having pressed A or L, you are then asked for the data reference of the items to be com- pared. Press the corresponding key, or back out via ENTER. The next menu asks whether the data is to be treated as character (C) or numeric (N). Numeric data is normalised in flight to nnnnnnnnnnn.nn, e.g. 23.198 is treated as 00000000023.19 for the purpose of the comparison. The next menu asks for the type of comparison, and a good way to remember your choice here is the acronym G L U E S. Note that S (scan) only works if the previous menu response is C, denoting character search. Finally, you are asked for the argument, i.e. the value with which the target items are to be compared. If you have chosen numeric treatment, then the argument must be numeric too. MASTERFILE then responds by updating the Sel=nnnnn count and re-offering the top SEARCH menu, from which you can refine the search further, or exit to MM or to DISPLAY mode. Now let us examine in more detail the comparison process. For a numeric search, the meanings of G, L, U and E should be self-evident. But if a record does not have a target item present, then the comparison is deemed to fail even if the comparison type is U (unequal). If a record is met with a non-numeric target item, then the search halts with the prompt NON-NUMERIC DATA: SKIP (OR) UPDATE. If you choose U then the search cannot be resumed directly. S (skip) moves on to the next record. If there are several non-numeric records together, you may need to keep S pressed for several seconds. Character search is a little more involved. (1) Upper case and lower case letters are considered equal for the purpose of comparison. (The same applies to sequence in DISPLAY mode). (2) If the argument is shorter than the item in the record, but equal as far as it goes, then argument and item are considered equal. Thus if we search for 'FRED' we will match records having 'FREDERICK', 'fred', 'Freda', etc. (3) If the argument is longer than the item in the record, they will not match. The argument 'FRED' will not match a record 'FRE'. Character scan (S) hunts for equality anywhere within the target items, so that the argu- ment 'FRED' will match strings within the data 'Alfred the Great', 'Manfred Mann', or 'Aunt Freda'. There is a way to search based upon the presence or absence of an item, regardless of its value, since an absent item is considered to start with binary zero. Thus a character search with argument ' 0' (note the leading blank) will differentiate records with the item from those without it. Use comparison type L to select those records without the item, and G to select those with the item. We have chosen the search menu letters so that with practice you will soon make searches without even looking at the menus. Your search parameters are listed on the screen to remind you what you entered. You can reach SEARCH mode directly from DISPLAY mode, as well as from MM. We finish this chapter with a short example of a three-pass search, which you can use on the example file. We will search for all records where 'salary' is between 14000 and 15000 and 'department' is 'admin'. Using the same notation as in the earlier EXERCISE section, we start at MM: RSASNG14000‡ (gives us everyone with salary over 14000) LSNL15000‡ (keeps only those with salary below 15000) LDCEadm‡ (keeps only those with department starting 'adm') D (display the selected records) 14 TOTAL/AVERAGE MASTERFILE can compute and display the total and average of numeric items of selected records. As with numeric search, the data is normalised in flight, ignoring any decimal places beyond the second. The total is displayed with most leading zeros suppressed. Any non-numeric item halts the process with the same skip/update option as described in SEARCH mode. If a selected record has no target item, then it is deemed to have value zero for the purpose of computing the average. Negative numbers are not acceptable, and the only non-numeric character allowed is a single decimal point. Total/average can be done from MM or from DISPLAY mode. The result is shown in lines 19-21. In DISPLAY mode, this can be printed. It is possible only to total items of one data reference at a time. For more complex arithmetic processing one must write some User Basic, q.v. LOAD AND SAVE Use MM V to initiate a SAVE. A simple menu asks you to choose between F (file only) or P (program and file); or you can back out with ENTER. When you select P, the save is in two parts. First, the Basic (which includes the F$ file), then the machine code. You are asked for the save name, up to 10 characters, which becomes the name of the Basic component and is displayed in blue in MM. If you press ENTER alone, this is taken to mean 'same name as before'. The name used for the second part of the save is built into the Basic. When you select F, only character array F$ is saved, and the name is solicited as with P. You may wish to put an automatic VERIFY into line 4020, just before the GOTO USR R. VERIFY "" DATA F$(): (See BASIC COMMAND mode for how to access the Basic in order to make this change). The VERIFY suggested here is applicable only to a file-only save, F, not to a program and file save, P. Then after a file save, rewind the tape, insert ear jack, and play the tape. If all is well, MM is resumed. Otherwise, GOTO 1 and try the save again. The file in F$ includes system data, data names, and report formats - as well as your file records. To load any file which has been saved separately, i.e. via MM V F, you use MM V L. You must give the exact file name, or back out with ENTER. If you forget the name, just give a name of xxx and play the tape. Spectrum will display Character Array: filename, and you can then BREAK, GOTO 1, and try again. On successful load, MM is resumed with the new file name and revised statistics. It is not necessary to purge a file before loading another, since Spectrum wipes out F$ before loading the new F$. To load MASTERFILE initially, CLEAR nnnnn: LOAD "" and play any tape which has on it a full save (i.e. saved via MM V P). The value of nnnnn for version 08 is 57036. We suggest that you keep at least three generations of your files for security, using 3 or 4 cassettes in rotation. Never make a save of the 'son' directly over the 'father', since any power interruption would leave you with no file at all. See MICRODRIVE for adaptation to the use of Microdrive cartridges. 15 STATISTICS MASTERFILE gives an almost constant display of file statistics, in line 23. This clears only while text is being keyed. The display consists of: Recs=nnnnn Sel=nnnnn Spa=nnnnn The first count is the number of records in the file, and does not include the special data names and report format records which share F$ with the file proper. The second count is the number of records currently flagged as SELECTED, i.e. eligible for display in DISPLAY mode, and eligible for User Basic, total/average etc. Note that when records are first created, they are created as SELECTED. The third figure is the approximate number of RAM bytes available for file expansion. The figure varies by a small amount depending upon the machine stack, but is a good guide to the amount of spare space you have. Any attempt to overflow the file will result in a flashing red prompt FILE FULL in the lower part of the screen. Press any key to resume, but with the last operation aborted. It is recommended that old records be purged, or the file split into two files (again via MM P), when spare bytes fall below 500 or so. And you will need even more spare space if the file is ever to be converted to cartridge (see MICRODRIVE). USER BASIC Although MASTERFILE is a versatile filing system, all it does is hold data, search it, and present it. Any processing on the data is done by virtue of you updating individual items. But if you are prepared to write some Basic, you can convert MASTERFILE into a file pro- cessor too. With User Basic you can examine and even update the file. For example, suppose you have a file of pupil records, with a series of exam result items in each record - you can compute the average mark for each pupil and store this as an extra item in each record. User Basic is given control by MM U Y. Only selected records are passed to User Basic for processing. The program as delivered has no User Basic other than a simple return, so that MM U Y has no effect on the file until some extra Basic is inserted. When you invoke User Basic via MM U Y, Basic is given control at specific line numbers, as follows. Line 4900. Control comes to 4900 just once, before any records are processed. You can use this control point to establish parameters for use at the other points, e.g. INPUT a discount rate, or set a switch. As with each control point, you must terminate with a GOTO USR R statement. Line 5000. Control comes here at the start of each selected record, but before any data from the record is passed. Use this to perform any record initialisation, e.g. zero an accumulator. Terminate with GOTO USR R. Line 6000. Control comes here once for each item in a selected record. The item is ac- cessible in C$, which is a dimensioned character array, length 130. C$(1) is the data reference A-Z, and C$(2 TO) is the data itself, rightfilled with spaces. You can store it into another variable if you need to use the data later on. Think of line 6000 as 'data capture'. Terminate with GOTO USR R. Line 7000. Control comes here once for each selected record, after all items have been seen at line 6000. Here you can perform processing on the data you captured at line 6000, and then set up C$ in one of the following ways: (a) LET C$="" to signal that no change is to be made to the record. (b) LET C$="X" - which sets C$(2 TO) to blanks - to signal that the item whose data ref is 'X' is to be erased, if present on the record. 'X' must be capital A-Z. (c) LET C$="X" and C$(2 TO)=data, to signal that the item whose data ref is 'X' is to be inserted, or replaced if already there. 'X' must be capital A-Z. 16 Control must be returned to MASTERFILE proper via GOTO USR R. Note that only one data item per record can be affected by line 7000 in any one pass of User Basic. You might be able to provide multiple item updates using several passes, but this would need some clever use of line 4000 etc. Line 9000 (version 09 or higher only). Control comes here once, after all selected records have been processed. You may use this point to print totals, reset switches, beep a 'completion' signal, etc. Control must be returned to MASTERFILE via GOTO USR R. The order in which records are passed though User Basic is unsequenced, ie the order the records were first added to the file. You must not re-dimension C$, and on no account disturb variables F$ and R. Be prepared for relatively long delays while User Basic pro- cesses the file. Completion of User Basic processing is signalled by return of MM. Use the technique described in BASIC COMMAND MODE to get into a position to code your User Basic. Once it is coded, GOTO USR 1 [sic] to return to MM. Test it on just a few selected records initially. When it works, take a program save via MM V P etc, so that you can use it thereafter. We finish this chapter with a simple example of User Basic, where in a stock file there are records which contain two relevant items, quantity of stock Q, and unit cost C. We require to generate a new item V being the value of stock, computed as the product of quantity x unit cost (Q*C). Further, we wish to be able to recalculate all value data on demand. It is very easy: 4900 GOTO USR R 5000 LET C=0: LET Q=0: GOTO USR R 6000 IF C$(1)="Q" THEN LET Q=VAL C$(2 TO) 6010 IF C$(1)="C" THEN LET C=VAL C$(2 TO) 6020 GOTO USR R 7000 LET C$="V": LET C$(2 TO)=STR$(Q*C): GOTO USR R Line 4900 has no file initialisation to do. Line 5000 sets variables C and Q to zero in case we don't find data in a record - better a zero value than misleading residue of previous record. Line 6000 etc captures the Q and C items, and also converts them to numeric into variables of the same name - but we could have used any suitable variable names. Line 7000 builds a 'V' item and passes it back for insertion or replacement. By the way, we avoided the slicker '7000 LET C$="V"+STR$(...' because a bug in ROM sometimes gives a wrong result with string concatenation. In the above example, any non-numeric data in the quantity or unit cost data would halt with a Basic diagnostic. For this situation, or any other halt, just recover with GOTO 1. 17 MICRODRIVE With a few changes to the Basic part of MASTERFILE, the program will work perfectly with the Microdrive. Many users will be able to adapt MASTERFILE themselves, but for the less confident, we suggest an adaptation along the following lines. Remember that the Micro- drive does not give you bigger MASTERFILE files - just more convenient access. Start by loading MASTERFILE from cassette in the normal way. Include any User Basic required, and empty the file. Save the machine code by breaking via MM L and CAPS SHIFT 6, entering without line number: SAVE *"m";1;"MF mcode"CODE 57037,8499 (see footnote) Next, alter the lines which contain SAVE and LOAD: 4020 SAVE *"m";VAL "1";C$(TO VAL "10") DATA FS(): GOTO USR R 4030 SAVE *"m";VAL "1":C$(TO VAL "10") LINE VAL "4035": GOTO USR R 4035 LOAD *"m";VAL "1";"MF mcode"CODE: GOTO VAL "1" 4050 LOAD *"m";VAL "1";C$(TO VAL "10") DATA F$(): GOTO USR R And now alter line 1: 1 PRINT ;: PAPER VAL "7": GOTO USR (etc) (In case you were wondering, VAL "nnn" saves 3 RAM bytes compared with just nnn. GOTO 1 and take a save via MM V P etc - this will save just the Basic, and you need not do this again except after revising your User Basic. Now, assuming you have earlier saved your files onto cassette via MM V F etc, you must now transfer them to cartridge, and we suggest the following little program: 10 LOAD "" DATA F$(): INPUT N$: SAVE *"m";1;N$ DATA F$() MASTERFILE modified as described will run entirely using your Microdrive number 1, and we suggest the use of FILE SAVE rather than PROGRAM SAVE, for most purposes. Note that you cannot re-save onto the same cartridge using the same name, so we recommend the use of date-stamped names, e.g. ACCTAug24. This also helps you to read your CAT directory and decide which files are old enough to be erased. You should seriously consider backup of files either by saving to a different cartridge, or copying to cassette as follows: 10 INPUT N$: LOAD *"m";1;N$ DATA F$(): SAVE N$ DATA F$() Note: '57037,8499' applies to MASTERFILE version 08; for other versions, use 'n+1, 65535-n' where n is the CLEAR number on the cassette label. 18 SOME POKES To patch the machine code logic of MASTERFILE, get into BASIC COMMAND Mode, and use POKE with no line numhers. Then GOTO 1 and take a save via MM V P etc. (Or for Microdrive, save the machine code as described under MICRODRIVE.) Here are some possibilities: (a) If you want more than 26 data references, we can increase the range to allow 0-9 and the special characters between 9 and A, as follows: POKE 64282,48: POKE 64306,48: POKE 58166,48 (version 08} or POKE 65534,48 (version 09 or higher). (b) When text is being keyed, the PIP note is deliberately more audible than the Spectrum default. You can POKE this to taste at 57725. (version 08) or 65535 (version 09 or higher). OUTPUT TO NON-ZX PRINTERS There are many interfaces which can connect dot-matrix and other printers to a Spectrum. Because MASTERFILE does its printing using a Basic COPY (in line 4010), you must choose an interface which will support COPY. Also, the interface code must not clash with MF mcode, which runs in the top 8K or so of RAM. TASMAN, HILDERBAY, and KEMPSTON all have printer interfaces compatible with MASTERFILE. The KEMPSTON interface even has transparent COPY support. There are two methods of COPY - ASCII and HI-RES. ASCII transmits just standard ASCII characters as generated via the SCREEN$ function. The advantages of ASCII are printing speed and compatibility with all kinds of printer, e.g. daisy-wheel - disadvantages are that hi-res lines and boxes are not reproduced; neither is Micro-Print data. HI-RES transmits dot-for-dot, but is somewhat slower and is only applicable to dot-matrix printers. Many interfaces can also copy a double-size image of the screen - 4 dots for every screen pixel. At the date of issue of this manual, the three named interfaces all support both ASCII and HI-RES COPY to a large range of printers, and are compatible with MASTERFILE. If you wish to print ASCII text beyond column 31, then you can LPRINT through your inter- face within User Basic. However, you must then take responsibility for formatting the output. Also, there is no way to sequence the selected records as they pass through User Basic. For more information about interfaces, please contact the suppliers named above. Advice is also available from TRANSFORM Ltd who retail both printers and interfaces, and who also have experience with MASTERFILE. See the computer press, such as Sinclair User, for addresses and telephone numbers. 19 MASTERFILE VERSION 09 ENHANCEMENTS (a) DISPLAY mode: Backspace by one record can be done, by using the 0 (zero) key. Note that for sequenced reports this can take several seconds. (b) ADD RECORD mode: You can add another record without going back to MM by using the = menu option, provided that at least one item is present in the current record. (c) Word processing: VLC behaves like a space when text has reached the bottom line of its paragraph. So whereas before a VLC in the last line would truncate the text, version 09 will print text in the end of the paragraph. (d) User Basic: This has an 'end-of-file' control point, at Basic line 9000. COPYRIGHT NOTICE Program MASTERFILE and this manual are the copyright of Campbell Systems and may not be reproduced, hired, or re-sold without the written consent of Campbell Systems. We allow and expect legitimate users to take backup copies of the program for their own security. CAMPBELL SYSTEMS 57 Trap's Hill, Loughton, Essex, IG10 1TD, England. 20