Clarion DBMS data file.(CLARION.rfi):
Class: Database, Status: Almost Complete, Last change: 29.07.1999 11:01:58

data
  0 array [2] of char filesig /* file signature */

assert filesig='C3';

descr ('Clarion data file.',NL,
  'Info Source: TB117.TXT in (CLARION.ZIP, www.wotsit.org).')

type bit

TBit4 num+(4)

TKeyFTyp enum TBit4 (key,index)

TKeyType struc
  TKeyFTyp ftyp
  set 4 of (dupsw, uprsw, optsw, loksw) Flags
ends

type

TPrefix array[3] of char
TName array[12] of char

TSFAttr set 16 of (
  locked=0, // file is locked
  owned=1, // file is owned
  encrypted=2, // records are encrypted
  memo=3, // memo file exists
  compressed=4, // file is compressed
  reclaim=5, // reclaim deleted records
  read_only=6, // file is read only
  create=7 // file may be created
)

TFieldType enum byte (
  LONG=1,
  REAL=2,
  STRING=3,
  TOKEN=4, // STRING WITH PICTURE TOKEN
  BYTE=5,
  SHORT=6,
  GROUP=7,
  DECIMAL=8
)

TFldName array[16]of char

TFieldDesc struc
  TFieldType fldtype /* type of field */
  TFldName fldname /* name of field */
  word foffset /* offset into record */
  word length /* length of field */
  byte decsig /* significance for decimals */
  byte decdec /* number of decimal places */
  word arrnum /* array number */
  word picnum /* picture number */
ends

TFldNum word()

TKeyPart struc
  TFieldType fldtype /* type of field */
  TFldNum fldnum /* field number */
  word elmoff /* record offset of this element */
  byte elmlen /* length of element */
ends

TKeySection struc
  byte numcomps /* number of components for key */
  TFldName keynams       /* name of this key */
  TKeyType/*???*/ comptype /* type of composite */
  byte complen /* length of composite */
  array[@.numcomps]of TKeyPart Fields
ends

TPicStr struc
  word len
  array[@.len] of Char Pic
ends

TArrayDimRec struc
  word maxdim /* number of dims for array part */
  word lendim /* length of field */
ends

TArrayDesc struc
  word numdim /* dims for current field */
  word totdim /* total number of dims for field */
  word elmsiz /* total size of current field */
  array[@.totdim] of TArrayDimRec Dim
ends

const
  Days1801=DateToDays(1801,1,1)-4;

type
TAbsDate enum ulong ():displ=(INT(DaysToDay(Days1801+@)),'.',
  INT(DaysToMonth(Days1801+@)),'.',
  INT(DaysToYear(Days1801+@)))

TAbsTime enum ulong ():displ=(INT((@-1)div 360000),':',
  INT(((@-1)div 6000)mod 60),'''',
  INT(((@-1)div 100)mod 60),'.',INT((@-1)mod 100),'"')

THdr struc
  TSFAttr sfatr                  /* file attribute and status */
  byte numbkeys /* number of keys in file */
  ulong numrecs /* number of records in file */
  ulong numdels /* number of deleted records */
  word numflds        /* number of fields */
  word numpics        /* number of pictures */
  word nummars        /* number of array descriptors */
  word reclen         /* record length (including record header) */
  ulong offset /* start of data area */
  ulong logoef /* logical end of file */
  ulong logbof /* logical beginning of file */
  ulong freerec /* first usable deleted record */
  TName recname /* record name without prefix */
  TName memnam /* memo name without prefix */
  TPrefix filpre /* file name prefix */
  TPrefix recpre /* record name prefix */
  word memolen        /* size of memo */
  word memowid        /* column width of memo */
  ulong reserved /* reserved */
  TAbsTime chgtime /* time of last change */
  TAbsDate chgdate /* date of last change */
  word reserved2 /* reserved */
  array[@.numflds]of TFieldDesc FieldDesc
  array[@.numbkeys]of TKeySection Key
  array[@.numpics]of TPicStr Pic //Picture descriptors
  array[@.nummars]of TArrayDesc Pic //Picture descriptors
ends

data

0x0002 THdr Hdr

type

TFldNum enum TFldNum = Hdr.FieldDesc[@-1].fldname;

/*
set byteorder rev
type bit

TDigit num+(4)
TBCD(Sz) array[@:Sz*2] of TDigit:displ=(ShowArray(@,(@)))
set byteorder norm
*/

type
TBCD array of byte:displ=(ShowArray(@,(@)))

type

TRecKind set 8 of (new, old, revised, deleted, held)

TFieldData case Hdr.FieldDesc[@:#].fldtype of
  LONG: struc
     ulong L
     raw[] Rest
    ends
 //REAL
  STRING: array of Char
 //TOKEN=4, // STRING WITH PICTURE TOKEN
  BYTE: struc
     byte B
     raw[] Rest
  ends
  SHORT: struc
    word S
    raw[] Rest
  ends
  //GROUP=7,
  DECIMAL: TBCD //(Hdr.FieldDesc[@:#].length)
else raw[]
endc:[@:Size=(Hdr.FieldDesc[@:#].length when
  (Hdr.FieldDesc[@:#].fldtype<>TFieldType.GROUP)) exc 0]

TDataRec struc
  TRecKind rhd /* record header type and status */
  ulong rptr /* pointer for next deleted record or memo if active */
  array[Hdr.numflds]of TFieldData FD
  raw[] Rest
ends:[@:Size=Hdr.reclen]

data
Hdr.offset array[Hdr.numrecs] of TDataRec Dat


Other specifications.


FlexT home page, Author`s home page.