They are defined in src/struct.h.
The first basic structure is not a structure, it is an union defined as :
union data { GString *str; int i; float d; GDate *date; gboolean b; gpointer anything; }; |
Its main purpose is to hold different fields 'data.
FIXME : write a table with field types (T_*) and corresponding field in union data
typedef struct _record record; struct _record { int id; union data *cont; struct location *file_loc; }; |
id is the id of the record (each record has a different id, 0 means that the record is unavailable (deleted, ...)).
cont is an array holding the different's field (therefore it has a size = number of field in the table)
file_loc is used in file operations (loading/saving)
struct _table { gchar *name; char short_name[5]; field *fields; int nb_fields; record **records; GList **indexes; int max_records; GList *locations; }; |
name and short_name are the name (and its short version) of the table
fields is an array of size nb_fields filled with field structures (see below).
records is an array of pointer to record structures, the highest array position is given by max_records but there may be NULL pointers in this array (as well as records where id equals 0)
indexes and locations shouldn't be used in plug-ins
struct _field { gchar *name; gchar *i18n_name; field_type type; property **properties; GList *ok_if; }; |
name and i18n_name hold the name (and its translation in the user favorite language) of the field
type holds the type of the field; given by
enum _field_type { T_STRING = 0, T_STRINGS = 1, T_INTEGER = 2, T_REAL = 3, T_DATE = 4, T_BOOLEAN = 5, T_RECORD = 6, T_RECORDS = 7, T_MULTIMEDIA = 8 }; |
properties and ok_if aren't useful :)
struct _subtable { gchar *name; gchar *i18n_name; table *table; st_field *fields; int nb_fields; condition *cond; }; |
name and i18n_name have the same meaning as for fields
table holds the table from which the subtable is derived
fields holds an array (of size nb_fields) filled with st_field (see below).
cond isn't really for you
struct _st_field { gchar *name; gchar *i18n_name; int no; field_type type; GList *link_format; view *v; }; |
name and i18n_name have their usual meaning
no holds the index of the field of the table that this field is derived from (is this clear ?). It may be -1 if type is T_RECORDS
type has the same meaning as in field with the extra value T_RECORDS.
link_format and v are used for relations between tables and you don't need to know anything about them