The general syntax of the file is similar to that of MAPPOST. Certain words, prefixed with a #, are recognised as "heading" words. Some heading words process one "line" of information, though this can be split over more than one physical line by using a comma as a line continuation symbol. Others introduce multiple items separated by commas and terminated with a semicolon. In this case each item may be split over as many as lines as desired.
Each line of information consists of a number of keywords followed by an equals sign and a value. Alternatively values may be given without a keyword, the first value belongs to the first keyword and so on.
Heading words tables, fields and totals introduce multiple items.
The syntax is as follows:
| Heading Word | Keyword | Default | Comments |
|---|---|---|---|
| #null | char | '!' | |
| #program | name | Mandatory | |
| type | 1 | ||
| flags | 8 | ||
| top_proc | NONE | ||
| description | Blank | ||
| device | 3 | ||
| filename | Blank | ||
| printer | 0 | ||
| read | 0 | ||
| write | 0 | ||
| mapname | Blank | ||
| mapnr | 0 | ||
| writer | Blank | ||
| modifier | Blank | ||
| #procedure | name | Mandatory | The procedure attributes are followed by a comma introducing a list of sub procedures or a semi colon if there are none. |
| body | Same as procedure name | ||
| owner | 0 | ||
| descr | Blank | ||
| proc | Mandatory | Sub procedures are separated by commas. The list of sub procedures is terminated with a semi colon. Defines subsidiary procedures of preceding procedure | |
| option | In sequence | ||
| entry_cond | 0 | ||
| ret_option | 0 | ||
| #body | name | Mandatory | |
| type | 1 | ||
| flags | 0 | ||
| access_mode | 3 | ||
| direction | 0 | ||
| descr | Blank | ||
| mapname | Blank | ||
| remarks | Blank | ||
| map | 0 | ||
| maptype | 2 | ||
| attach | 0 | ||
| attach_fld | 0 | ||
| del_quest | 0 | ||
| auto_remark | 0 | ||
| rep_cond | 0 | ||
| del_cond | 0 | ||
| device | 0 | ||
| ip_device | 0 | ||
| esc_option | 0 | ||
| owner | 0 | ||
| command | Blank | ||
| #tables #table |
name | Mandatory | Define tables of preceding procedure body. |
| role | Blank | Define tables of preceding procedure body. | |
| joined_via with_role id_role |
None None Blank |
As many of these as required to specify join path to table | |
| flags | 0 | ||
| val_mode | 0 | ||
| search | 0 | ||
| index | 0 | ||
| index_role | 0 | ||
| table_ref | In sequence | ||
| table_cond | 0 | ||
| no_rmk | 0 | Remark when record not found | |
| exist_rmk | 0 | Remark when record found | |
| scan_quest | 0 | Message for scanning records | |
| list_map | 0 | Map to display list of choices | |
| detail _map | 0 | Map to display item in list | |
| lock_quest | 0 | Remark for dealing with locked records | |
| add_quest | 0 | Question for adding new record (main table) or allowing check over ride (other tables) | |
| match_rmk | 0 | Remark to display if parent and child records do not match | |
| val_cond | 0 | Condition to validate | |
| post_cond | 0 | Condition to post | |
| #qabfields | name | Mandatory | Define fields of preceding procedure body |
| role | Blank | Define fields of preceding procedure body | |
| ref | In sequence | ||
| table_ref | 0 | ||
| fieldnr | REF | ||
| flags | 3 | ||
| formula | 0 | ||
| validation | 0 | ||
| input_cond | 0 | ||
| type | Blank | ||
| length | 0 | ||
| prec | 0 | ||
| scale | 0 | ||
| occurs_low | 1 | ||
| occurs_high | |||
| fail | 0 | Field to return to | |
| #formula | number part |
Mandatory 1 |
Define formulas and Conditions of preceding procedure body The formula text follows delimited by rows of underscores. |
| remark | 0 | ||
| flags | 0 | ||
| #totals | Define totalling operations of preceding procedure body | ||
| ref | Mandatory | Field reference of field being totalled | |
| seq | 1 | To cater for multiple totalling of same field | |
| name | Mandatory | Name of Target Field | |
| role | Blank | Role of Target Field | |
| table_ref | 0 | Table reference of target field in this procedure | |
| type | 1 | ||
| validation | 0 | Condition on total value | |
| tot_cond | 0 | Condition to total | |
| occurs | |||
| #end | (none) | QABUTIL will not read past this point | |
|
The above is followed by the macro definitions as follows: | |||
| #documentation | word_type | Mandatory | |
| name | Mandatory | ||
|
The text follows between underscores: | |||
| #macro | name | Mandatory | |
| number | Mandatory | ||
| type | 1 | ||
| map | 0 | ||
Maps are listed out in MAPPOST format:
| #mapname | name | Same as program name | |
| #language | number | Sets language to update | |
| #plus #upright #underscore #dot |
char char char char |
'+' '|' '_' '.' |
Define the special characters to be used for plus, dot and so on |
| #map #remark #window #datamap |
} | mapnr curs_rows curs_cols beep map_flags |
(Mandatory) 0 0 0 0 |
Post map text The effect of using #remark, #window and #datamap rather than map is to select the correct default colours |
|
#help |
mapnr | (Mandatory) | Posts help message | |
|
|
fieldnr | (Mandatory) | ||
|
|
beep | 0 | ||
|
|
shares | (none) | ||
The map text follows.