¢¢=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-¢¢ (KNOWLEDGE IS NEVER OLD, ITS ALWAYS¢CURRENT. This old article is worth¢reading. Ye Ol Editor.) ¢¢ SYNFILE+ PAGE¢¢ Data File Specifications¢April 30, 1985¢Copyright 1985 Daniel L. Moore¢REPRINTED from ACE Newsletter¢December, 1987¢¢¢ There are actually four different¢files that together make up one¢SynFile+ datafile. The files can be¢identified by their extenders. They¢are .TBL, .CNF, .IDX, and .Dxx. The¢.TBL file contains a description of¢the database form. The .CNF file¢contains the number of records and¢disks. The .IDX file is the current¢index data. And, the .Dxx files are¢the actual data files.¢¢THE .TBL FILE¢¢ The .TBL file is actually made up¢of three tables and two numeric¢entities. The three tables are the¢Definitions table, the Name table and¢the Special Data table. Each table is¢headed by a two byte length entry, and¢then the data bytes. If the table has¢a zero length, there is only a length¢entry.¢¢THE DEFINITIONS TABLE¢¢ The first table, the Definitions¢table, consists of a sequence of¢eleven bytefield definitions. There¢is one entry for each field in the¢database. The format of each entry¢is:¢¢Byte # Use¢ 0 screen column position¢ 1 screen row position¢ 2-3 field name offset and name¢length¢ 4 field type byte¢ 5 field data length¢ 6 field mask length¢ 7 field special offset (low 8¢bits)¢ 8 field data offset (low 8 bits)¢ 9 field data offset (high 3 bits)¢field special offset¢ (high 5 bits)¢ 10 field decimal position¢¢ The first two bytes simply give¢the row and column position of the¢start of the field name. The screen¢is 40 columns by 21 lines and 0,0 is¢the upper left hand corner.¢¢ The field name is actually stored¢in the second data table. The low 11¢bits of this 16 bit entry are the¢offset to the field name in the Name¢table. The high 5 bits are the field¢name length.¢¢ The low four bits of the field¢type entry, identify the field type.¢The high bit of the field type is a¢flag for the justification of the¢field. If it is set, the field is¢right justified. There are eleven¢field types in SynFile+ and each has a¢number associated with it. They are:¢¢ ID number Field Type¢ 0 ASCII field¢ 1 floating point¢ 2 cumulative computed¢ 3 table look-up¢ 4 dollar¢ 5 record number¢ 6 date¢ 7 integer¢ 8 counter¢ 9 conditional¢ 10 computed¢¢ The field data length is the¢length of the data stored in the disk¢record. For ASCII fields, it is one¢greater than the field mask length.¢For floating point, cumulative, dollar¢and computed fields, it is 6 bytes.¢For table look-up and conditional¢fields, it is one byte. All other¢fields have a data length of 2 bytes.¢¢ The field mask length is the¢length of the mask(underlines) for the¢characters respectively.¢¢ The special offset is 13 bits¢split between byte 7 and 9. Byte 7 has¢the low 8 bits of data, and the¢Special Data table has the high 5. It¢is used by computed, cumulative,¢conditional and table look-up fields.¢The counter field also uses this¢entry, but not as a pointer. Counter¢fields use it as the increment for the¢field.¢¢ The field offset is 11 bits long.¢ The low 8 bits are stored in byte 8,¢and the high 3 bits are stored in the¢low 3 bits of byte 9. This is the¢offset from the start of the record to¢the start of the data from this¢field.¢¢ The field decimal position is¢just that. It tells SynFile how to¢display floating point numbers. The¢current version of SynFile only uses¢the low 4 bits of this byte.¢¢ The others are reserved for¢future use. If the value of this byte¢is 15, the field will be displayed in¢floating point, which is - however -¢the Atari FP ROM formats the number.¢For any other value, SynFile will¢force the display of a decimal point¢and N digits to the right of the¢decimal.¢¢THE NAME TABLE¢¢ The Name table contains all the¢field names. Each field name is¢stored as a text entry, with no¢delimiters or separators between¢entries. The names may NOT be stored¢in the same order as the fields¢entries in the Definitions table(this¢may occur if the form is edited in the¢CREATE module of SynFile).¢¢THE SPECIAL DATA TABLE¢¢ The Special Data table contains¢all formulas and table look-up field¢datas.¢¢FORMULAS¢¢ Formulas for computed,¢cumulative, and conditional fields are¢stored as a sequence of command¢tokens. The CREATE module parses the¢user entered formula, and converts it¢to a tokenized RPN formula. As¢retrieved, all commands use the top 1¢or 2 entries from the stack. If the¢high bit of a token is set, then the¢field referenced is an integer(16 bit¢data) field, a FLOAT will¢automatically be executed on the field¢when the data is retrieved. The¢command tokens are:¢¢ TOKEN VALUE COMMAND¢ 0 + (add the top two values)¢ 1 - (subtract the top value from¢second value)¢ 2 *¢ 3 /¢ 4 LOG (take the natural LOG of top¢number)¢ 5 LOG10 (take the common log of¢top number)¢ 6 EXP¢ 7 EXP10¢ 8 ABS¢ 9 SORT¢ 20 numeric constant¢ 30 = (set true flag if top 2¢entries are equal)¢ 31 >¢ 32 <¢ 33 <>¢ 34 >=¢ 35 <=¢ 126 current data¢ 127 END (end of formula flag)¢¢ Numeric constants(20) are stored¢in 6 byte internal floating point¢representations of the number.¢Entries 30 to 35 are used to compare 2¢numbers on the stack for use in¢conditional operations.¢¢ To interpret a computed field,¢use the special data offset to set a¢pointer to the formula. The retrieve¢tokens one byte at a time until the¢END token is found. The value on the¢top of the stack at that time is the¢result of the calculation.¢¢TABLE LOOK-UP¢¢ Table Look-up entries are stored¢in packed entries(the lenght of the¢entries is equal to the length of the¢longest entry, not to the mask¢length). The field data for a table¢look-up field is the table entry¢number. The first byte of a look-up¢table is the number of entries in the¢table, and the second byte is the¢length of the entries in the table.¢Each entry is stored as a text¢string(with no length byte) and is¢right justified in the table with¢underline characters(ASCII 95) as¢filler on the left.¢¢CONDITIONALS¢¢ Conditional entries are a¢combination of formula entries and¢table look-up entries. The special¢offset for a 2 entry look-up table.¢Immediately after the look-up table¢data is the formula data for the¢conditional field.¢¢ The last thing in the .TBL file¢are two numeric entries. Each entry¢is 16 bits long(2 bytes, stored low¢byte, high byte). The first entry is¢the field count, the second entry is¢the total record length in bytes. The¢record length is one greater than the¢sum of the field data lengths.¢¢THE .CNF FILE¢¢ The .CNF file contains eight¢entries. Each entry is 16 bits long(2¢bytes, stored low byte, high byte).¢The entries are:¢¢ 1 The length of the index array¢entries¢ 2 the total number of records in¢the datafile¢ 3 the number of data disks in the¢datafile¢ 4 the number of active records in¢the datafile¢ 5 the current record number¢ 6 the number of index fields¢ 7 the current value of the counter¢field¢ 8 the sort¢direction(ascending/descending flag)¢¢THE .IDX FILE¢¢ The length of the .IDX file¢varies with the total number of¢records in the file, and the length of¢the current index. (Both these¢numbers are in the .CNF file). The¢first 32 bytes of the .IDX file are¢the current index field. There are 16¢two-byte entries, the first byte of¢each entry is the field number, the¢second is the length of the index data¢for that index entry. Any unusued¢entries have undefined values, usually¢0.¢¢ *************************************¢