@database
@author "Andrew Forrest"
@(C) "1993 Andrew Forrest"
@wordwrap
@index reference

@node main "Flexer -- the flexible database"
Nice Aardvaark Software presents...

		@{b}F L E X E R -- The Flexible Database@{ub}

				©1991-1993 by Andrew Forrest



				1. @{"Introduction" link introduction}

				2. @{"Read this" link legalities} (important)

				3. @{"The instructions" link instructions}
@endnode


@node introduction "Some brief words of introduction"
@{b}Rhetoric@{ub}
 Do you need a @{"database" link database}? Dissatisfied with the choice available? Don't want to splash out on expensive packages? Enjoy rhetorical questions? You need @{i}Flexer -- The Flexible Database@{ui}.

@{b}Thanks to...@{ub}
 This writing of this program was made considerably easier by the following computer artists:

	François Lionet, Europress Software (for @{i}AMOS@{ui});
	Hisoft (for @{i}Devpac 3@{ui});
	Dan Sylva, Electronic Arts (for @{i}Deluxe Paint II@{ui});
	Matt Dillon (for @{i}DMouse@{ui} and @{i}DME@{ui});

As usual, thanks to Commodore Amiga for building the machine in the first place.
@endnode


@node legalities "Please read over this section carefully"
@{b}Legal stuff@{ub}
 This version of @{i}Flexer -- The Flexible Database@{ui} (version 1 and all revisions thereof, including its accompanying documentation and ancillary software files and excluding those files which are © Commodore Amiga), hereafter refered to as the "Program", are ©1991-1993 by Andrew Forrest.

The Program is Freely Distributable, i.e. you are encouraged to pass on copies of this program for free or, at most, for a nominal copying fee. You are not allowed to distribute modified versions of the Program, or to sell the Program at a profit without the prior consent of the author.

The author cannot be held legally responsible for any mistakes or failures in the Program or its documentation. (Although in practice I have found the program to be perfectly reliable.)
@endnode


@node instructions "Instruction manual"
@{b}Prerequisites@{ub}
 These instructions assume you are familiar with your computer from the introductory manuals which came with it. If there is something about which you are not sure as concerns the computer itself and its `normal' operation, that's where to look.

@{b}Hardware@{ub}
 This program should run on all Amigas with 512K or more memory, although to work with large databases, more memory is certainly recomended. NTSC (American and Japanese) televisions are catered for, and `international' (ie. non-American) keyboards may be used with the program. It has been tested and works on an A500 running Workbench 1.3 and an A1200 running Workbench 3.0. If it does not work on your machine... sorry!

@{b}Getting started@{ub}
 You can start the program just now by double-clicking on it's Workbench icon. However there are other methods of starting the program and you can also @{"install" link installation} the program on a different disk.

The instructions are in two parts. You are advised to read the @{"turorial" link basics} first. The rest of the instructions take the form of a reference guide, covering

@{"creating" link new-database} your own database, @{"adding" link adding-records} and @{"removing" link removing-records} records, @{"editing" link editing-fields} the contents of fields, @{"saving" link save} a database project, @{"sorting" link sorting} a database, @{"searching" link searching} for specific records, @{"adding" link adding-fields} and @{"removing" link removing-fields} fields, @{"renaming" link renaming-fields} fields, changing the @{"layout" link changing-layout} of a database, changing the program's @{"settings" link settings}, the @{"undo" link undo} facility & opening and closing the @{"Workbench" link workbench}.
@endnode


@node installation "Getting the thing to run"
@{b}Different ways to run the program@{ub}
 To start the program, type in its name from the CLI/Shell or double­click on the "Flexer" icon from the Workbench.

@{b}Installing on another disk@{ub}
 You may want to install the program on a different disk -- simply copy the program (drag its Workbench icon) to the new disk. There is a file which accompanies the program and stores its current @{"settings" link settings}, (it's called "flexer.prefs" and doesn't have an icon) -- you don't need to copy this across (the program will create a new preferences file if  necessary) but if you do, make sure it stays in the same directory as the  program itself.

@{b}Other files@{ub}
 The program will also look for an icon file (used when database projects are saved to disk) called "def_file", in the drawer "ENV:Flexer". If you have  AmigaDOS Release 2 or above, this should pose no problem -- simply copy the  "Flexer" drawer from "ENVARC:" on this disk to the "Env-Archive" drawer on  your boot disk (inside the "Prefs" drawer).                                    

Users with Workbench 1.3, however, should read the accompanying file "@{"1.3 Users.readme" link "1.3 Users.readme/main"}" for information on installing the icon. (The program will still work without the icon file, but without it, it will be unable to save projects with Workbench icons.)
@endnode


@node basics "The Getting Started Guide"
@{b}Starting the program@{ub}
 The easiest way to explain the program's operation is by example. So start @{i}Flexer@{ui} now by double-clicking on its icon.

The main area of the screen is given over to a display of the database's contents. As there is currently no database in memory (note the "no records" at the bottom of the screen), this part of the screen is also empty.

@{b}Opening a file@{ub}
 Choose "Open..." from the "Project" @{"menu" link menus}. When the @{"file requester" link file-requester} appears on the screen, click on the name of the @{i}Flexer@{ui} disk. After a little disk activity, the disk's contents should be listed in the requester. Click on the "Examples" drawer, then click on the file "Fiction books" to select it. Click on the filename again (or on the "Okay" button) to open the file.

After a brief delay, a table is drawn on screen. The rows represent records; the columns represent fields. The title of each field can be seen at the top of each column.

@{b}Viewing records@{ub}
 You can move around the table by using the slider bars to the right and bottom of the screen and the arrow buttons in the lower­right­hand corner. The keyboard arrow keys can also be used to scroll the display. Note that the field (column) titles remain at the top of the screen at all times and cannot scroll off the top of the screen.

The line of text at at the bottom of the screen tells you how many records are in the database and how many are `hidden' (more about this later on). The "Record n out of x" tells you the number of the record currently shown. As there are several records currently on the screen, this message has little meaning. However, if you select a field, by clicking with the mouse on it, the record to which that field belongs will become the `current' record and its number displayed at the bottom of the screen.

@{b}Viewing records as "cards"@{ub}
 Currently, the database is shown as a list or table. The other method of displaying the data is as `index cards', with one record (card) per screen. To display the data this way, choose the first item in the "Records" menu, "Show as cards".

Upon the screen, in front of your very eyes, is a single record of the example file. The little rectangles all over the place are fields, the contents of the fields are displayed inside the rectangles and their names are above the rectangles.

As the display of one record takes up the whole screen -- the "Record n out of x" tells you which one it is -- there is no need to scroll left and right or up and down. However, the scroll bar on the right of the screen still has a function; that of moving between records. Try moving it up and down to see all of the records. As before, the arrow keys can be used for this.

@{b}Adding records@{ub}
 To @{"add" link adding-records} a record to a database, choose the "Add" item from the "Records" menu.

Enter data in one of the newly-created fields by clicking on it with the mouse and typing in the new contents. @{"Editing" link editing-fields} an existing field is a similar process.

@{b}Saving the file@{ub}
 Once you've made some changes to a file, you will usually want to save these changes on disk. To do this, choose @{"Save" link save} from the "Project" menu. (If you wish to save the file under a different name, you have two options: @{"Save as..." link save-as} and @{"Save copy..." link save-copy}.)

@{b}About...@{ub}
 Important one this. The "About..." item in the "Project" menu gives you a copyright message (in case you missed it at the top of the screen) and a little logo, so be sure not to miss that.

@{b}Quitting@{ub}
 To end your session with "Flexer", choose the "Quit program..." item from the "Project" menu. Don't worry about choosing this item by mistake -- the program asks for confirmation before quitting.
@endnode

@node adding-fields "Adding fields"
@{b}New fields@{ub}
 You can add fields at any time, regardless of how many records are already in the database. New fields start off empty (or set to zero).

To add a new field, choose the "New fields..." item from the "Fields" menu. A dialogue box will appear which allows you to give this new field a name and specify the type of data which it holds.

Change the name of the field in the usual way (type in a new name) and choose a data type for your field by clicking on one of the radio buttons. As the default, @{"Plain text" link text-fields} is selected, but other types available are @{"Whole number" link integer-fields}, @{"Real number" link real-fields}, @{"Decimal currency" link currency-fields}, @{"Date" link date-fields} and @{"Time" link time-fields}.

To confirm your choice of field name and format, click the "Next field..." button. This button adds the field to the database but leaves the requester on the screen in case you wish to create another field. To stop creating fields, (without creating another one), click on "Stop".

(Note that you are limited to a maximum of 20 fields per database -- the program will prevent you from adding field #21. I hope this isn't too limiting.)
@endnode


@node integer-fields "Wholesome fields"
@{b}Whole numbers@{ub}
 Use a `whole number' field when the field's contents are to be an integer quantity. So, for example, if you are making a database of your video collection, and each cassette is numbered, you may wish to have a field called "Serial Number" which holds a number representing the video's code.

`Whole numbers' are integers, positive or negative (with no letters or punctuation marks), in the range 0 to ±2 billion, and are stored exactly. If the field must contain numbers outside this range or fractional numbers, use a @{"real number" link real-fields} field instead.
@endnode


@node real-fields "Real fields"
@{b}Real numbers@{ub}
 A `real number' field allows you to handle decimal numbers; numbers which have digits after the decimal point.

For example: if you wanted to keep a database of various cars and their average miles­per­gallon fuel efficiency, a real number field would come in useful, as it could hold a number such as 20.45 rather than just 20. Note that the period (".") is used to represent the decimal point, not the comma (",") as in some European countries. Also, real number fields are only accurate to about five or six decimal digits.
@endnode


@node currency-fields "Fields of money"
@{b}Decimal Currency@{ub}
 This field format allows you to store a number which has exactly two digits after the decimal point. It allows you to represent Pounds and pence, or Dollars and cents, or Francs and centimes.

`Decimal currency' fields are restricted to holding numbers in the range 0 to ±10 000 000. Here, however, the number is stored @{i}exactly@{ui}, rather than approximately as with @{"real" link real-fields} numbers.

(If you need to keep track of @{i}larger@{ui} sums of money than 10 million, use a @{"whole number" link integer-fields} field and forget about the pennies, or simply send me a big wodge of cash and I will alter the program suitably.)
@endnode


@node date-fields "Date fields"
@{b}Date format@{ub}
 This field format, funnily enough, allows the storage of dates. The future (and the past) is well provided for and dates can be stored which range from AD 1 to AD 5 million. (If you are reading this in the year AD 5 000 000, @{i}Flexer@{ui} is probably not a suitable database package.)

The format in which dates are displayed can vary and may be changed via the program's @{"preference settings" link settings}. Dates are automatically checked for accuracy so that "29 February 1987", for example, would be changed to "1 March 1987" (1987 was not a leap year). Also, be careful that you specify the year in full -- if you mean "1988", don't write "'88", as this will be taken as AD 88(!).
@endnode


@node time-fields "Fields of Time"
@{b}Time of day@{ub}
 Say you are keeping a database of each meal you eat, (for dietry purposes, for example). In this case, the `time­of­day' field-type comes in useful, as you can keep a record of just @{i}when@{ui} you had that pepperoni and gurkin pizza with double banana. The program's @{"preferences" link settings} come in to play here, as they allow the user to switch between 12­hour and 24­hour time formats.
@endnode


@node text-fields "Textual thangs"
@{b}Plain text@{ub}
 Use this field type for storing any other data. No need to specify how long text fields should be -- this is a @{i}flexible@{ui} database after all, just as long as you keep their contents less than 256 characters. `Plain text' fields should be used to store things such as names, addresses, phone numbers (phone numbers have brackets and spaces in them which make @{"whole number" link integer-fields} fields unsuitable), video titles, pizza varieties, code numbers (if they contain letters or other non­numeric symbols)... basically anything.

If `plain text' fields can store any textual data, why not store @{"dates" link date-fields}, @{"times" link time-fields} and @{"numbers" link real-fields} as text? Good question. However these `special' formats validate (check) the fields whenever their contents are altered. In addition, text fields are always sorted in (what passes for) alphabetical order, whereas dates, for example, are always sorted strictly by chonological order. Also, what if you suddenly take the urge to display all of your `time­of­day' fields in 24­hour format? If they are stored as text, then you would need to alter each record manually. However, if they are stored in actual time­of­day format a simple trip to the @{"settings" link settings} menu-item would be all that was required.
@endnode


@node removing-fields "Exterminate!"
@{b}Remove field...@{ub}
 What about removing fields? Simply click on a field and choose "Remove field..." from the "Fields" menu.

However, a word of warning: this does not just remove the field from the @{i}current@{ui} record -- it removes every instance of this field from the @{i}entire@{ui} database, and there is no way to @{"undo" link undo} it (unless you have wisely made a @{"backup copy" link save-copy} of the database). So if you are looking at the list view of the database, an entire column will be removed, never to be seen again. To prevent you from accidentally removing a field, we at Nice Aardvaark Software have thoughtfully ensured that the program asks for confirmation before taking such drastic action.
@endnode


@node new-database "A new life is born..."
@{b}Creating a new database@{ub}
 Choose the "New..." item from the "Project" menu. A dialogue will appear which is identical to the @{"New field..." link adding-fields} requester. In fact it @{i}is@{ui} the "New field..." requester. However, the difference is that the old database has been obliterated and the fields you create now will go to make up a brand, spanking new database file.
@endnode


@node removing-records "Kill de wascally wecords"
@{b}Deleting records@{ub}
 How about deleting records? To do this, select a record (in the `card' view by moving to it; in the `list' view by clicking on one of its fields), then choose "Remove..." from the "Records" menu. You will be asked for confirmation before the record is actually removed (beacuse you can't @{"undo" link undo} it).
@endnode


@node sorting "Sort 'em out"
@{b}Sorting records@{ub}
 Easy­peasy this one. Just choose "Sort in order..." from the "Records" menu.

The records are always sorted according to the first field in the list view. If the first fields of two records are identical, the second field is compared, if @{i}they@{ui} are identical, the third field is compared, and so on.

So to sort a hypothetical address file by its surname field switch to "Show as list" and drag the surname field to the first @{"position" link changing-layout} in the list.

@{b}Sorting order@{ub}
 If you have the sudden urge to sort one or more of your database's fields in reverse (descending) order, that too is easily done. Select "Choose sorting order..." from the "records" menu. Upon the screen will appear a requester with a list of fields. Select which fields you wish to be in @{i}descending@{ui} order by highlighting their names with the mouse (unselected fields are sorted in ascending order). Then click on the "Sort 'em!" button and wait.

@{b}Insertion Sort@{ub}
 (Technical note: the records are sorted using the `insertion sort' algorithm incorporating a binary search. This algorithm is much, much quicker than the `bubble-sort' method used in version 1.1 of the program.)
@endnode


@node searching "Searching..."
@{b}Searching for records@{ub}
 I bet you have been wondering why there is a line at the bottom of the screen which says "n shown / n hidden". No? Well the idea is that it is possible to `hide' some (or all) of the records in a database, and, by specifying certain criteria for records to be shown or hidden, it is possible to view only the records in which you are interested. Allow me to demonstrate (I assume you have the @{"example" link basics} file ("Examples:Fiction books) still open so if you don't, open it now).

@{b}Hiding and showing@{ub}
 Make sure you are looking at the list view. Scroll up and down a little. There are quite a lot of records, huh? Right, now choose "Hide all" from the "Records" menu. And all of the records dissappear. Where have they gone? Well, look at the message at the bottom of the screen -- "0 shown / 45 hidden" -- all the records are hidden. Now choose "Show all", again in the "Records" menu. And magically, all of the records reappear.

How about hiding individual records? Click on a field of a record. Now choose "Hide this record" and watch it dissappear. At the bottom of the screen, you should see that 1 record is hidden. Right. All very interesting, but hardly useful.

It is more useful to be able to show or hide records depending on certain criteria. We shall now, by way of example, search for all the books in the database which were written by Terry Pratchett.

Again "Hide all" of the records. Now choose "Show selected...", also in the "Records" menu. A requester appears on the screen with a list, somewhat like that of the file-requester. Click on the "Add..." button.

@{b}Specifying a search criterion@{ub}
 In the new dialogue which appears, click on "Author", then on the "equal to" button. Now click on the text gadget at the bottom of the requester and type in "pratchett, terry". When the original requester is once more revealed, the top line in the list should read `Author equal to "pratchett, terry"'. As if you hadn't guessed, this instructs the database to look for all the records for which the "Author" field is "pratchett, terry". Now click on the "Search" button.

The display should now show only the records in the database which represent books by Terry Pratchett.

@{b}A different criterion@{ub}
 Right, now hide all of the records again, and again choose "Show selected...". This time, click on the first and only item in the list (the one which reads `Author equal to "pratchett, terry"') and when the other requester appears, select the field "Price £", select the "NOT" check box at the top, and the "greater than" radio button in the middle before entering "2" in the string gadget and clicking on "Ok". You have replaced one criterion with a different one.

The query you have just constructed will search for every book in the database which does not cost more than £2.00. As you can confirm by clicking on the "Search" button.

@{b}Multiple criteria@{ub}
 But wait, some of the books seem to have an blank price field. Of course, this means that their price is unknown. What if we wanted only to show books with a @{i}known@{ui} price of not more than £2.00. "Hide all" of the records again and then again choose "Show selected...". This time, leave the top line of the query intact, but "Add..." another criterion and select "Price £", "NOT", "Equal to" and leave the string gadget blank.

Click on "Search".

Not bad, eh?

Hiding specific records is a similar process. That is to say, to hide records which conform to certain criteria, choose the "Hide selected..." item from the "Records" menu and, as usual, specify a set of constraints for the records which are to be hidden. Try it out now.

By careful use of "hide" and "show", it is possible to obtain lists of records which satify pretty complex sets of criteria.
@endnode


@node settings "Setting the settings"
@{b}Program preference settings@{ub}
 Choose the "Set settings..." item in the "Settings" menu and you should see a requester appear, which lets you control the way the program displays @{"dates" link date-format} and @{"times" link time-format} and whether or not projects get saved with Workbench @{"icons" link save-icons} and to determine the @{"resolution" link screen-resolution} of the @{i}Flexer@{ui} screen.

The settings dialogue box has three buttons at the bottom. "Save" will store the new settings in the settings file. Clicking "Use" does not save the new settings on disk, but will use them until you quit the program. "Cancel", predictably, causes the program to forget about any changes you have made to the settings.

@{b}Where the settings are stored@{ub}
 The file in which the settings are stored is called "Flexer.prefs" and is loaded whenever the program starts up. This file is usually stored in the drawer in which the main program resides, but if it is not there, the program will look for it in the drawer "ENV:Flexer/". (If it cannot find a settings file, the program uses its default settings.)
@endnode


@node date-format "Date format"
@{b}Date settings@{ub}

@{b}Suffixes in dates@{ub}
 This means that whenever a date is displayed, the day will be suffixed by "st", "nd", "rd" or "th". So 21 January 1992 will be displayed as "21st January 1992". Useless (particularly if you do not speak English) but cool.

@{b}Abbreviate months and weekdays@{ub}
 Basically, if you want to have January written as "Jan" or Monday written as "Mon", this option is for you.

@{b}American dates@{ub}
 In the UK, dates tend to be written in the order day­month­year, whereas in the United States, the order is month­day­year. Ticking this box gives you US, as opposed to UK dates. If your country has a different system, sorry, but you will have to make do with one or the other.

@{b}Dates as nn/nn/nnnn@{ub}
 This option means that dates are expressed numerically, separated by slashes ("/"). Thus 21st of January 1992 would be expressed as "21/1/1992" (or "1/21/1992" if "American dates" had been selected).

@{b}Show weekdays@{ub}
 If this option is selected, the day of the week will be included in each date displayed. This is calculated automatically and need not be manually typed in to each date. So if this option were selected, 21 January 1992 would be displayed as "Tuesday 21 January 1992".
@endnode


@node time-format "Telling Time"
@{b}Time settings@{ub}
 Only one option here. It's either 12­hour or 24­hour format. If you select the check-box marked "24­hour clock", all times will be given in 24­hour format, otherwise 12­hour format will be used.
@endnode


@node screen-resolution "Screen mode"
@{b}Screen resolution setting@{ub}
 This section allows you to choose the resolution (number of screen pixels per area) of the @{i}Flexer@{ui} screen.

@{b}Horizontal resolution@{ub}
 This can be selected from "Low resolution" and "High resolution". High-res is the default and has twice the resolution of low-res -- you can get twice as much information per line (twice as many dots on the screen). It also consumes twice as much memory as low­resolution, so if you've got a 512K computer, you should probably stick to low-res.

@{b}Interlace mode@{ub}
 This can be switched on or off. Interlace doubles the @{i}vertical@{ui} resolution of the screen, but can cause flicker. You may find, however, that a low­resolution, interlaced screen is a little more readable than a hires, non­interlaced one. Again, interlace-mode doubles the memory used for the screen.
@endnode


@node save-icons "Workbench icons for files"
@{b}Save icons settings@{ub}
 If this check­box is selected, every database which is saved will have a Workbench icon attatched. The Workbench `Tool Types' of the file will then contain some of the program settings, which will be loaded whenever the project is loaded.

If a project already has an icon, its icon will remain the same when the file is saved (regardless of whether "Save icons" is selected), but @{i}new@{ui} files are given the default icon image which is stored in "ENV:Flexer/def_file.info" (and also "ENVARC:Flexer/def_file.info").

(Users of Release 2 and above: if this file is not found, the default project icon will be used.)
@endnode


@node adding-records "Adding records to a database"
@{b}Adding records@{ub}
 There are several ways of adding records to a database. The easiest is simply to press the <down-arrow> key after having altered the last record in the database. This makes it possible to type in a lot of records without continually switching between keyboard and mouse.

Another way is to choose "Add" from the "Records" menu. This adds a records after the current one.

A record is also created automatically when you create a @{"new database" link new-database} file.

The number of records which you can have in a database is restricted only by the available memory in your computer.
@endnode


@node changing-layout "Altering the screen layout"
@{b}Moving fields@{ub}

@{b}List view@{ub}
 To change the order of the fields in the list, use the mouse to drag a column to a new position. For example: to swap round the first two fields, move the mouse over the first field's title area, hold down the left mouse button, drag the mouse over the second field and release the mouse button.

To change the size of a field in the list, use the mouse to drag the field's right­hand border left or right.

@{b}Card view@{ub}
 It is a simple task to rearrange the index card display. To move a field, drag the field by its top (or left­hand) border. To change the size of a field, drag the right­hand border of the field box left or right. Note that neither of these operations affect the @{i}contents@{ui}, merely the @{i}appearance@{ui} of the fields.
@endnode


@node database "A database is..."
@{b}What's a database?@{ub}
 A @{i}database@{ui} is simply a collection of data, usually arranged as @{i}records@{ui} (each of which holds information about one item) and which are sub­divided into @{i}fields@{ui}.

A phone book is a database, each line is one record and each line is divided into fields such as "Name" and "Phone number". This software allows you to maintain a database on your Amiga. It can be a database of anything, from people's phone numbers to details of your video collection.
@endnode


@node editing-fields "What's in the fields?"
@{b}Editing fields@{ub}
 Fields are where textual information is displayed and can be edited.

To edit the contents of a field, click on the field with the mouse. A vertical bar, the @{i}insertion point@{ui}, appears in the field and indicates where keyboard input will appear. Use the left and right arrow keys to move the insertion point. Text to the left of the insertion point can be deleted using the <backspace> key and text to the right of the insertion point can be deleted using the <Del> key. Enter text at the insertion point by typing it in at the keyboard.

Once you have finished editing a field, the <tab> or <Enter> keys will take you to the next field. (Holding down the shift key with <tab> or <Enter> will take you to the @{i}previous@{ui} field.) The return key will take you to the first field of the next record. The contents of this new field (if it contains anything) will then be highlighted. Enter new data in the field by typing it in at the keyboard. (Amiga A600 owners: you haven't got an <Enter> key, so don't go looking for it!)

Selected text can generally be replaced by entering replacement text at the keyboard, or deleted by pressing the <backspace> or <Del> keys.

You can also select text by holding down the shift key while moving the insertion point -- the text will be highlighted in gold (well, orangey­yellow). Text can also be selected by dragging the mouse over it, or by double­ or triple­ clicking the mouse on the field.

The "Edit" menu may be used when editing text. Use the "Cut" and "Copy" menu items to respectively remove or copy selected text and the "Paste" item to insert previously cut or copied text into the current field, either at the insertion point or replacing selected text. The "Erase" menu item erases selected text.
@endnode


@node file-requester "What's all this file-requesting business then?"
@{b}The file requester@{ub}
 The file requester is used to select a project on disk. When the program requires you to specify the name of a project -- to save or load a database, for example -- it will present a file requester.

Initially the requester shows a list of disks and devices connected to your system (including @{"logical devices" link logical-devices}). You can use the arrow gadgets and slider bar to move up and down the list.

Click on one of the items in the list to select it. To list the contents of one of the devices, simply select its name -- after a short delay, that device's contents -- its files and directories -- will be listed.

If you select a file (files are identified by an icon resembling a dog-eared piece of paper) the name of the file will appear in the field at the bottom of the requester. If you select a directory (directories have small "drawer" icons to their left), the contents of that directory will be displayed. You can also select a directory or file by typing in its name in the field at the bottom of the requester.

The "Volumes" button takes you back to the list of devices and the "Parent" button displays the files in the directory which contains the current directory (its @{i}parent@{ui} directory)

Once you have selected a file in a particular directory, you can click on "Okay" (or press <Enter>) to choose that file and close the requester. Click "Cancel" (or press <Esc>) if you want to back out of the current operation @{i}without@{ui} choosing a file.
@endnode


@node logical-devices "Logical devices -- what they are"
@{b}Logical devices@{ub}
 Logical devices are things which, although they do not represent @{i}real@{ui} disks or peripherals, appear and behave like regular disks.

For example, the "RAM:" or "Ram disk:" is not a real disk, but is a simulation of a disk in the computer's main memory and behaves to all intents and purposes like a (very fast) real disk. (You can store projects in the ram disk, but be warned that when you switch off the machine, the computer's memory, including the ram disk, is erased.)

An other example of a logical device is "C:". This appears to be a real disk, but is in fact a @{i}directory@{ui} of a real disk (it's where some AmigaDOS commands are stored). Several other logical devices represent directories elsewhere.

This program allows you to save and open projects to and from real as well as logical devices.
@endnode


@node menus "Menu? What menu?"
@{b}What menus are@{ub}
 Like many other Amiga tools @{i}Flexer@{ui} is operated by means of a system of @{i}pull­down menus@{ui}. Hold down the right mouse button and you will see the titles of the menus appear at the top of the screen.

Drag the mouse to a menu title and the full menu list will be displayed. Drag the mouse over a menu @{i}item@{ui} to select it. @{i}Choose@{ui} an item by releasing the right mouse button while a menu item is selected (while the mouse pointer is over it).

Menu items which are not available or inappropriate are rendered in light grey (@{i}shadowed@{ui}) and may not be chosen.

@{b}What menus are there?@{ub}
 The menu system in @{i}Flexer@{ui} is as follows:

Project -- project-related items
	@{"New..." link new-database} -- create a new database project
	Open... -- open an existing project

	@{"Save" link save}
	@{"Save as..." link save-as}
	@{"Save copy..." link save-copy}

	About...

	Quit program...

@{"Edit" link editing-fields}
	Cut
	Copy
	Paste

	Erase

	@{"Undo" link undo}

Records
	@{"Add" link adding-records}
	@{"Remove..." link removing-records}

	@{"Choose sorting order..." link sorting}
	Sort in order

	@{"Show all" link searching}
	Hide all
	Hide this record
	Show selected...
	Hide selected...

Fields
	@{"New fields..." link adding-fields}
	@{"Remove Field..." link removing-fields}
	@{"Change name..." link renaming-fields}

Settings
	@{"Open Workbench" link workbench}
	Close Workbench

	@{"Set settings..." link settings}
@endnode


@node renaming-fields "Only the names have been changed"
@{b}Renaming fields@{ub}
 Picture the situation: you've just entered a hundred records into a database, then you suddenly realise that you have mispelt the name of one of the fields. Arghhh!! Or that you forgot to even @{i}give@{ui} a field a name and there is a field called "Field 2" instead of "Surname". Double Arghhh!!

Help is at hand. Merely select the offending field (by clicking on it), and choose the item "Change name..." from the "Fields" menu. It is now a simple matter of typing in a new name or amending the old name.
@endnode


@node save "Saving the current project to disk"
@{b}Save@{ub}
 This item in the "Project" menu stores the database project on disk. If the database does not yet have a name, you will be prompted to choose a name under which the project should be saved. Subsequent "Saves" will store the project under the same name.

To save the project under a differnt name, use @{"Save as..." link save-as} or @{"Save copy..." link save-copy}.
@endnode


@node save-as "Save as..."
@{b}Save as...@{ub}
 This menu item allows you to pick a new name for the file, under which it will be saved in future (when you subsequently select @{"Save" link save}). The file requester will appear, allowing you to select a new name, and a different disk drawer if necessary.
@endnode


@node save-copy "Save copy..."
@{b}Saving a copy of the database@{ub}
 If you want to save the file under a different name, say to make a back­up of the file on a different disk, but you want to retain the old name of the file for use afterwards, the "Save copy..." item is the one you want. It allows you to make a one­off copy of the file under a different name. It also allows you to choose the format in which the file is to be saved. Choose "Save copy..." now, to see what I mean. The standard file­requester appears on the screen, but it has an extra gadget at the bottom, to enable you to pick the format for the file. Click on the little button with the circular arrow to choose between `normal format' and `ASCII text'.

@{b}File formats@{ub}
 The basic difference between the two is that saving in normal format will allow you to open the file again at a later date. When you choose @{"Save" link save} or @{"Save as..." link save-as}, the file is saved in normal format. Normal format files can only be read by the this program (and this program can only read normal format files).

Use "ASCII text" when you wish to load the database into a word processor or a different database program. In this case, the database is stored as a big lump of text, with fields separated by `tab' characters and each record on a separate line (kind of like the `list' view of the database).
@endnode


@node undo "I take it all back"
@{b}Undo@{ub}
 The "Undo" function in this program is limited to undoing minor changes in the database, so it is really only of limited use.

The "Undo" item is in the "Edit" menu and the text of this menu item describes exactly what it is that will be done. So if for example you have just @{"moved" link changing-layout} a field, the menu will read "Undo position field"; if the last operation was not undo­able, the item will be marked "Undo unavailable".

You can undo @{"editing" link editing-fields} (of a field's contents), and various resizing and repositioning of fields. @{"Name changes" link renaming-fields} to fields can also be undone.
@endnode


@node workbench "Opening and closing the Workbench screen"
@{b}The Workbench:@{ub}

@{b}Closing...@{ub}
 If you have only 512K of memory in your Amiga, you may feel the need to close the Workbench screen in order to conserve memory. Choose "Close Workbench" from the "Settings" menu to give you more room to breathe. If there are program windows occupying the Workbench screen, your attempt to close it will fail.

@{b}...and opening@{ub}
 But if you regret your hasty closing of the Workbench, it's a simple matter to open it again (assuming, of course, that there is enough memory to do this). The necessary step is to choose "Open Workbench" from the "Settings" menu.
@endnode


@node reference "Program reference"

@{"Adding fields" link adding-fields} to a database
 @{"Adding records" link adding-records} to a database
 @{"Copyright" link legalities} information
 @{"Currency" link currency-fields} field-type
 What is a @{"database" link database}?
 @{"Date" link date-fields} field-type
 @{"Editing" link editing-fields} fields
 Using the @{"file requester" link file-requester}
 @{"Installing" link installation} and running the program
 Changing the @{"layout" changing-layout} of fields
 What @{"logical devices" link logical-devices} are
 @{"Menus" link menus}
 Creating a @{"new" link new-database} database
 @{"Real number" link real-fields} field-type
 @{"Removing fields" link removing-fields} from a database
 @{"Removing records" link removing-records} from a database
 @{"Renaming fields" link renaming}
 @{"Saving" link save} a database project
 @{"Searching" link searching} for records
 Changing program @{"settings" link settings}
 @{"Sorting" link sorting} the database
 @{"Plain Text" link text-fields} field-type
 @{"Time" link time-fields} field-type
 How to @{"undo" link undo}
 @{"Whole number" link integer-fields} field-type
 Opening and closing the @{"Workbench" link workbench}


@endnode
