
 |

  This page was not translated into English yet...
 Format interne
Dans Ma Tirelire 2, tous les noms de base commencent par "MaTi-" sauf
les bases de comptes qui commencent par "MaTi=".
Cela permet de les repérer rapidement dans la liste de toutes les
bases du Palm. Il n'y a rien de plus horrible que de ne pas savoir à
quelle application appartient une base rien qu'en lisant son nom.
Il y a en tout 6 types de base différents, le CreatorID est toujours
'MaT2' :
LA base des types : "MaTi-Types"
Type : 'Type'
Elle contient toute la hiérarchie des types d'opération.
Il peut y avoir jusqu'à 255 types d'opération. Chaque type a un
identifiant unique sur 8 bits différent de 0xff (TYPE_UNFILED) qui
est le type "Non classé" (non présent dans la base).
Ci-suit la structure C de chaque enregistrement :
struct s_type
{
#define TYPE_RELATIONSHIP_SIZE sizeof(UInt32)
#define TYPE_RELATIONSHIP_OFFSET 0
#define TYPE_UNFILED (NUM_TYPES - 1)
UInt32 ui_id:8; // ID du type
UInt32 ui_parent_id:8; // ID du type parent, TYPE_UNFILED si aucun
UInt32 ui_child_id:8; // ID du premier fils, TYPE_UNFILED si aucun
UInt32 ui_brother_id:8; // ID du prochain frère, TYPE_UNFILED si aucun
#define TYPE_ATTR_SIZE sizeof(UInt32)
#define TYPE_ATTR_OFFSET TYPE_RELATIONSHIP_SIZE
//#define TYPE_NONE 0 // Undefined
#define TYPE_DEBIT 1
#define TYPE_CREDIT 2
#define TYPE_ALL 3
UInt32 ui_sign_depend:2;
UInt32 ui_folded:1; // Is type folded is types list dialog
UInt32 ui_reserved:29; // Reserved for future use
// Account name/wildcard visibility
#define TYPE_ONLY_IN_ACC_LEN (23 + 1)
Char ra_only_in_account[TYPE_ONLY_IN_ACC_LEN];
#define TYPE_NAME_MAX_LEN (31 + 1)
Char ra_name[0]; // Type fini par NUL (longueur variable)
};
LA base des modes : "MaTi-Modes"
Type : 'Mode'
Elle contient tous les modes de paiement.
Il peut y avoir jusqu'à 31 modes de paiement. Chaque mode a un
identifiant unique sur 5 bits différent de 0x1f (MODE_UNKNOWN) qui
est le mode "Inconnu" (non présent dans la base).
Ci-suit la structure C de chaque enregistrement :
struct s_mode
{
#define MODE_UNKNOWN (NUM_MODES - 1)
UInt32 ui_id:5; // Mode ID
#define MODE_VAL_DATE_NONE 0
#define MODE_VAL_DATE_CUR_MONTH 1
#define MODE_VAL_DATE_NEXT_MONTH 2
#define MODE_VAL_DATE_PLUS_DAYS 3
#define MODE_VAL_DATE_MINUS_DAYS 4
UInt32 ui_value_date:3; // 0 pas de raccourci sur date de valeur
// 1 => ancien XX=YY
// 2 => ancien XX-YY
// 3 => ancien +ZZ
// 4 => nouveau -ZZ
// 5-7 => réservés (équivalent à 0)
UInt32 ui_first_val:6; // XX ou ZZ selon ui_value_date
UInt32 ui_debit_date:5; // YY
UInt32 ui_cheque_auto:1; // Mode à sélectionner si chèque auto
UInt32 ui_reserved:12; // Pour le futur : toujours à 0
// Account name/wildcard visibility
#define MODE_ONLY_IN_ACC_LEN (23 + 1)
Char ra_only_in_account[MODE_ONLY_IN_ACC_LEN];
#define MODE_NAME_MAX_LEN (31 + 1)
Char ra_name[0]; // Type fini par NUL (longueur variable)
};
LA base des descriptions/macros : "MaTi-Descriptions"
Type : 'Desc'
Elle contient toutes les descriptions/macros.
Il peut y avoir jusqu'à 256 descriptions. En réalité il n'y a pas
de limite, mais comme il en faut une, c'est 256...
Ci-suit la structure C de chaque enregistrement :
struct s_desc
{
#define DESC_HEADER_OFFSET 0
#define DESC_HEADER_SIZE sizeof(UInt32)
UInt32 ui_sign:2; // 0 pas de signe, 1 -, 2 +
UInt32 ui_is_mode:1; // Le champ ui_mode contient une valeur
UInt32 ui_mode:5; // ID du mode à initialiser (si ui_is_mode)
UInt32 ui_is_type:1; // Le champ ui_type contient une valeur
UInt32 ui_type:8; // ID du type à initialiser (si ui_is_type)
UInt32 ui_shortcut:8; // Caractère de raccourci pour la macro
UInt32 ui_cheque_num:1; // Numéro de chèque auto à calculer
UInt32 ui_auto_valid:1; // Validation automatique après execution
UInt32 ui_reserved:5; // Pour le futur : toujours à 0
Char ra_amount[11 + 1]; // Somme de la macro finie par NUL
// mais toujours 12 octets
Char ra_account[dmCategoryLength]; // Nom du compte de la macro fini par NUL
// mais toujours 16 octets (si ui_is_xfer)
Char ra_xfer[dmCategoryLength]; // Nom du compte de transfert fini par NUL
// mais toujours 16 octets (si ui_is_xfer)
// Account name/wildcard visibility
#define DESC_ONLY_IN_ACC_LEN (23 + 1)
Char ra_only_in_account[DESC_ONLY_IN_ACC_LEN];
#define DESC_MAX_LEN (255 + 1)
Char ra_desc[0]; // Description finie par NUL
// (longueur variable)
};
LA base des devises : "MaTi-Currencies"
Type : 'Curr'
Elle contient toutes les devises et leur relation par rapport à la
devise de référence, elle même dans la base.
Cette base peut contenir un AppInfoBlock contenant juste un UInt32.
Cet UInt32, s'il est présent, contient la date de création de la
base externe (5.) qui a servi à la dernière mise à jour. Celà
permet de ne faire la mise à jour qu'une seule fois. Voir le point
5. pour les détails sur la base externe.
Il peut y avoir jusqu'à 256 devises. Chaque devise a un identifiant
unique sur 8 bits.
Ci-suit la structure C de chaque enregistrement :
struct s_currency
{
UInt32 ui_id:8; // ID de la devise
UInt32 ui_reference:1; // C'est LA devise servant de référence
UInt32 ui_reserved:23; // Reserved for future use
double d_reference_amount; // Somme en monnaie de référence
double d_currency_amount; // Équivalent dans cette devise
#define CURRENCY_ISO4217_LEN 4
Char ra_iso4217[CURRENCY_ISO4217_LEN]; // Nom ISO-4217
#define CURRENCY_NAME_MAX_LEN (4 + 1)
Char ra_name[0]; // Nom devise fini par NUL (longueur variable)
};
*** Attention les doubles
sont aussi au format big endian sur 8 octets
En perl, sur une machine big endian, intel, FreeBSD, je fais :
$double = unpack('d', scalar reverse VALEUR_DOUBLE_PALM);
LA base externe des devises : "MaTi-ExternalCurrencies"
Type : 'CurX'
Cette base est facultative et ouverte uniquement en lecture par Ma
Tirelire. Elle est fabriquée par un programme qui reçoit tous les
jours les cours des devises du jour et qui tourne sur
ma-tirelire.net. En important cette base, la base des devises (4.)
est mise automatiquement à jour au prochain lancement de Ma
Tirelire.
Cette base n'a pas de limite en nombre d'enregistrements, puisque
ce nombre dépend des informations obtenues par le programme de mise
à jour.
Ci-suit la structure C de chaque enregistrement :
struct s_external_currency
{
UInt32 ui_int; // Partie entière
UInt32 ui_dec; // Partie décimale
UInt32 ui_dec_factor; // Facteur à appliquer pour la partie décimale
UInt32 ui_nb_eur; // Équivalent en euros
Char ra_iso4217[0]; // Nom de la monnaie au standard ISO-4217
};
Le rapprochement/mise à jour de la base des devises se fait grace
au code ISO-4217 qui doit être identique.
Les bases de comptes : "MaTi=..."
Type : 'Acnt'
Elles contiennent les propriétés de base, les propriétés des
comptes et toutes les opérations.
Alors là ça se complique ;-)
Les propriétés de base
Les propriétés de base sont stockées dans le AppInfoBlock de
la base à la suite des catégories qui servent à la gestion des
comptes (comme dans Ma Tirelire 1.0.X).
Ci-suit la structure C du bloc :
struct s_db_prefs
{
UInt32 ul_access_code; // Code to access database
#define MATI_DB_PREFS_VERSION 1
UInt32 ul_version:4; // Last version is 1
UInt32 ul_cur_category:4; // Current category
UInt32 ul_show_all_cat:1; // All categories are visible XXX
#define DM_REMOVE_RECORD 0
#define DM_DELETE_RECORD 1
UInt32 ul_remove_type:1; // DmRemoveRecord or DmDeleteRecord
UInt32 ul_deny_find:1; // [Dis]allow global find feature in this DB
#define SORT_BY_DATE 0
#define SORT_BY_VALUE_DATE 1
//#define SORT_BY_XXX 2 -> 7 // Reserved for future use
UInt32 ul_sort_type:3; // Sort type : by [value] date
UInt32 ul_list_date:1; // 1 if list date is value date, 0 else
UInt32 ul_check_locked:1; // Checking and Flagging are locked
UInt32 ul_auto_repeat:1; // Compute repeats automaticaly
UInt32 ul_repeat_days:7; // Repeat interval
UInt32 ul_list_type:1; // 1 if list descritpion is type, 0 else
#define SPLIT_LABEL_DESC 0
#define SPLIT_LABEL_TYPE 1
UInt32 ul_splits_label:1; // In trans form, splits label: 0=desc, 1=type
#define SPLIT_SORT_DESC 0
#define SPLIT_SORT_TYPE 1
#define SPLIT_SORT_AMOUNT 2
UInt32 ul_splits_sort:2; // Trans form, splits sort by: desc/type/amount
UInt32 ul_reserved1:4; // Réservé
#define VIEW_ALL 0
#define VIEW_WORST 1
#define VIEW_TODAY 2
#define VIEW_CHECKED 3
#define VIEW_MARKED 4
#define VIEW_CHECKNMARKED 5
#define VIEW_DATE 6
#define VIEW_TODAY_PLUS 7
#define VIEW_LAST VIEW_TODAY_PLUS
#define VIEW_SELECT_DATES (VIEW_LAST + 1)
#define VIEW_SELECT_AT_DATE (VIEW_LAST + 2)
//#define VIEW_XXX 8 -> 15 // Reserved for future use
UInt32 ul_sum_type:4; // Sum type
UInt32 ul_sum_date:5; /* Somme le X du mois */
UInt32 ul_sum_todayplus:5; /* Somme aujourd'hui + X jours */
UInt32 ul_sum_at_date:1; // cf. s_sum_date field below
#define ACCOUNTS_SUM_ALL 0
#define ACCOUNTS_SUM_SELECT 1
#define ACCOUNTS_SUM_NON_SELECT 2
#define ACCOUNTS_SUM_XXX 3
UInt32 ul_accounts_sel_type:2; // Type de sélection dans l'écran des comptes
UInt32 ul_accounts_currency:8; // Monnaie utilisée dans l'écran des comptes
UInt32 ul_reserved2:7; // Réservé
UInt16 uh_selected_accounts; // Bit a 1 si le compte est
// sélectionné dans l'écran des
// comptes
DateType s_sum_date; // Sum at a date. Only if ul_sum_at_date
#define DB_PREFS_STATS_NUM 14
struct s_stats_prefs rs_stats[DB_PREFS_STATS_NUM]; // Choix dans les stats
Char ra_note[0]; // Note (NUL terminated)...
};
Seul le tableau rs_stats a été ajouté par rapport au
format de la version 0. La définition de la structure C
struct s_stats_prefs suit :
struct s_stats_prefs
{
DateType rs_date[2];
#define STATS_MENU_NONE 0
#define STATS_MENU_CUR_MONTH 1
#define STATS_MENU_LAST_MONTH 2
#define STATS_MENU_LAST2_MONTH 3
#define STATS_MENU_CUR_YEAR 4
#define STATS_MENU_LAST_YEAR 5
#define STATS_MENU_ALL 6
UInt32 ui_menu_choice:3; // Choix dans le menu, rs_date ne compte pas
#define STATS_MENU_WEEK_POS 6
UInt32 ui_week_bounds:1; // Seulement si ui_menu_choice != NONE
#define STATS_BY_TYPE 0
#define STATS_BY_MODE 1
#define STATS_BY_WEEK 2
#define STATS_BY_BIWEEK 3
#define STATS_BY_MONTH 4
#define STATS_BY_QUARTER 5
#define STATS_BY_YEAR 6
#define STATS_BY_MINAVGMAX 7
UInt32 ui_by:4; // Par (type, mode, semaine, ...)
UInt32 ui_type_any:1;
UInt32 ui_type:8;
UInt32 ui_mode_any:1;
UInt32 ui_mode:5;
#define STATS_ON_ALL 0
#define STATS_ON_DEBITS 1
#define STATS_ON_CREDITS 2
#define STATS_ON_FLAGGED 3
UInt32 ui_on:2; // Sur toutes les op, débits, crédits, marqués
UInt32 ui_val_date:1; // En fonction de la date de valeur
UInt32 ui_ignore_nulls:1; // Ignorer les montants nuls
UInt32 ui_type_children:1; // Inclut les fils du type sélectionné
UInt32 ui_reserved:4; // Toujours à 0
UInt16 uh_checked_accounts;
};
Le SortInfoBlock de la base est utilisé pour stocker des infos
temporaires qui peuvent ne pas être présentes, mais qui peuvent
éviter des recherches répétées d'un même résultat.
Ci-suit la structure C du bloc :
struct s_db_sortinfos
{
DateType s_last_repeat_date; // Date of the last global repeat computation
};
Les enregistrements se divisent en deux avec un header
commun. D'une part il y a les propriétés de compte (un
enregistrement par compte) et d'autre part, les enregistrement
correspondant aux opérations (un enregistrement par opération).
Toutes les sommes sont en centimes avec le type t_amount :
typedef Int32 t_amount;
Dans le code C qui suit, la structure struct
s_account_prop est la définition d'un compte et la structure
struct s_transaction celle d'une opération.
Un compte a toujours sa date et son heure à 0. Celà permet de trier
tous les enregistrements par date et de retrouver systématiquement
les propriétés de compte en tête de base.
#define COMMON_HEADER \
DateType s_date; /* Date */ \
TimeType s_time; /* Heure */ \
t_amount l_amount /* Somme en centimes */ \
union u_acc_flags
{
struct
{
UInt32 ui_checked:1; // Always 1, correspond to checked trans.
UInt32 ui_marked:1; // Enregistrement marqué
UInt32 ui_warning:1; // Warning if overdrawn account
UInt32 ui_stmt_num:1; // Gestion des numéros de relevé
UInt32 ui_currency:8; // Account currency
UInt32 ui_cheques_by_cbook:6;// Number of cheques by chequebook
UInt32 ui_take_last_date:1; // When creating new record, take last date
UInt32 ui_reserved:13; // -31 Reserved... */
} s_bit;
#define ACCOUNT_CHECKED 0x80000000
#define ACCOUNT_MARKED 0x40000000
#define ACCOUNT_WARNING 0x20000000
#define ACCOUNT_STMT_NUM 0x10000000
#define ACCOUNT_CURRENCY 0x0ff00000
#define ACCOUNT_CHEQUES_BY_CBOOK 0x000fc000
#define ACCOUNT_TAKE_LAST_DATE 0x00002000
#define ACCOUNT_RESERVED 0x00001fff
UInt32 ui_all;
};
//
// For each account, first record has this type
struct s_account_prop
{
COMMON_HEADER;
/* Flags */
union u_acc_flags u_flags;
#define ui_acc_checked u_flags.s_bit.ui_checked
#define ui_acc_marked u_flags.s_bit.ui_marked
#define ui_acc_warning u_flags.s_bit.ui_warning
#define ui_acc_stmt_num u_flags.s_bit.ui_stmt_num
#define ui_acc_currency u_flags.s_bit.ui_currency
#define ui_acc_cheques_by_cbook u_flags.s_bit.ui_cheques_by_cbook
#define ui_acc_take_last_date u_flags.s_bit.ui_take_last_date
#define ui_acc_reserved u_flags.s_bit.ui_reserved
#define ui_acc_flags u_flags.ui_all
t_amount l_overdraft_thresold;
t_amount l_non_overdraft_thresold;
#define NUM_CHECK_BOOKS 4
UInt32 rui_check_books[NUM_CHECK_BOOKS];
Char ra_number[24];
Char ra_note[1]; // Pour le \0
};
// On passe par là car sizeof(struct s_account_prop) donne 62 au lieu
// de 61 à cause du ra_note[1] de fin
#define ACCOUNT_PROP_SIZE (offsetof(struct s_account_prop, ra_note) + 1)
union u_rec_flags
{
struct
{
#ifdef __m68k__
UInt32 ui_checked:1; // 0 Opération effectuée
UInt32 ui_marked:1; // 1 Enregistrement marqué
UInt32 ui_alarm:1; // 2 Alarme positionnée...
UInt32 ui_mode:5; // 3-7 Mode de paiement (CB, chèque...)
UInt32 ui_type:8; // 8-15 Type d'opération (ski, EDF...)
UInt32 ui_value_date:1;// 16 Date de valeur présente ou non
UInt32 ui_check_num:1; // 17 N° de chèque présent ou non
UInt32 ui_repeat:1; // 18 Opération avec répétition
UInt32 ui_xfer:1; // 19 Si cet enr. est un transfert
UInt32 ui_xfer_cat:1; // 20 Contient la cat et pas le uniqueID
UInt32 ui_stmt_num:1; // 21 Numéro de relevé ou non
UInt32 ui_currency:1; // 22 Une devise est présente
UInt32 ui_splits:1; // 23 Ventilation présente ou non
UInt32 ui_reserved:7; // 24-30 Réservé... */
UInt32 ui_internal_flag:1; // 31 usage interne uniquement
#else
# error "Little endian not yet supported"
#endif
} s_bit;
#ifdef __m68k__
# define RECORD_CHECKED 0x80000000
# define RECORD_MARKED 0x40000000
# define RECORD_ALARM 0x20000000
# define RECORD_MODE_MASK 0x1f000000
# define RECORD_MODE_SHIFT 24
# define RECORD_TYPE_MASK 0x00ff0000
# define RECORD_TYPE_SHIFT 16
# define RECORD_VALUE_DATE 0x00008000
# define RECORD_CHECK_NUM 0x00004000
# define RECORD_REPEAT 0x00002000
# define RECORD_XFER 0x00001000
# define RECORD_XFER_CAT 0x00000800
# define RECORD_STMT_NUM 0x00000400
# define RECORD_CURRENCY 0x00000200
# define RECORD_SPLITS 0x00000100
# define RECORD_RESERVED 0x000000fe
# define RECORD_INTERNAL_FLAG 0x00000001
#else
# error "Little endian not yet supported"
#endif
UInt32 ui_all;
};
//
// For each transaction
struct s_transaction
{
COMMON_HEADER;
/* Flags */
union u_rec_flags u_flags;
#define ui_rec_checked u_flags.s_bit.ui_checked
#define ui_rec_marked u_flags.s_bit.ui_marked
#define ui_rec_alarm u_flags.s_bit.ui_alarm
#define ui_rec_mode u_flags.s_bit.ui_mode
#define ui_rec_type u_flags.s_bit.ui_type
#define ui_rec_value_date u_flags.s_bit.ui_value_date
#define ui_rec_check_num u_flags.s_bit.ui_check_num
#define ui_rec_repeat u_flags.s_bit.ui_repeat
#define ui_rec_xfer u_flags.s_bit.ui_xfer
#define ui_rec_xfer_cat u_flags.s_bit.ui_xfer_cat
#define ui_rec_stmt_num u_flags.s_bit.ui_stmt_num
#define ui_rec_currency u_flags.s_bit.ui_currency
#define ui_rec_splits u_flags.s_bit.ui_splits
#define ui_rec_reserved u_flags.s_bit.ui_reserved
#define ui_rec_internal_flag u_flags.s_bit.ui_internal_flag
#define ui_rec_flags u_flags.ui_all
Char ra_note[0]; /* Dans l'ordre :
* - Date de valeur (facultatif)
* - N° chèque (facultatif)
* - Répétition (facultatif)
* - Transfert (facultatif)
* - N° de relevé (facultatif)
* - Devise (facultatif)
* - Sous-opération(s) (facultatif)
* - Description
*/
};
Une opération peut avoir des options, comme dans Ma Tirelire 1,
mais un peu plus. Ces options sont forcément ordonnées et leur
présence est conditionnée à un bit dans les flags.
Date de valeur si bit ui_rec_value_date à 1 :
struct s_rec_value_date
{
DateType s_value_date; // Date de valeur
};
Numéro de chèque chèque si bit ui_rec_check_num à 1
:
struct s_rec_check_num
{
UInt32 ui_check_num; // Numéro du chèque
};
Répétition si bit ui_rec_repeat à 1 :
struct s_rec_repeat
{
UInt16 uh_repeat_type:2; /* mois, fin de mois */
#define REPEAT_MONTHLY 0
#define REPEAT_MONTHLY_END 1
#define REPEAT_WEEKLY 2
#define REPEAT_TYPE_LAST REPEAT_WEEKLY
UInt16 uh_repeat_freq:6; /* Tous les... */
UInt16 uh_reserved:8;
DateType s_date_end; /* 0 si infini */
};
Transfert si bit ui_rec_xfer à 1 :
struct s_rec_xfer
{
UInt32 ul_reserved:8; // (en tête par compatibilité)
UInt32 ul_id:24; // uniqueID OU ID de catégorie (si ui_xfer_cat)
};
Numéro de relevé si bit ui_rec_stmt_num à 1 :
struct s_rec_stmt_num
{
UInt32 ui_stmt_num; // Numéro du relevé
};
Devise si bit ui_rec_currency à 1 :
struct s_rec_currency
{
Int32 l_currency_amount; // Montant dans la devise
UInt32 ui_currency:8; // ID de la devise
UInt32 ui_reserved:24; // Réservé...
};
Sous-opération(s) si bit ui_rec_sub_tr à 1 :
struct s_rec_sub_transaction
{
UInt16 uh_num:8; // Nombre de sous-opérations à suivre
UInt16 uh_reserved:8; // Réservé...
UInt16 uh_size; // Taille en octets des sous-opérations
// qui suivent
};
struct s_rec_one_sub_transaction
{
UInt32 ui_type:8; // Type de la sous-opération
UInt32 ui_reserved:24; // Réservé
t_amount l_amount; // Somme en centimes (toujours positive)
Char ra_desc[0]; // Description
};
Les sous-opérations sont un cas un peu particulier dans la mesure
où leur longueur est variable.
On a d'abord une structure struct s_rec_sub_transaction
puis suivent autant de structures struct
s_rec_one_sub_transaction avec leur description que l'indique
le champ uh_num de la structure struct
s_rec_sub_transaction de base.
Dans le cas où une description, avec son caractère NUL final, a une
longueur impaire, un deuxième caractère NUL suit la description.
Ensuite suit la description toujours terminée par NUL (même si
vide).
Lorsqu'une opération a l'option transfert, les deux opérations
liées ont certains champs en commun (identiques) ou dépendants :
Champ | Valeur, commentaire |
---|
date | identique |
heure | identique |
somme | opposée et convertie dans la devise du
compte |
|
checked | indépendant |
marked | indépendant |
alarm | indépendant |
mode | identique (À VOIR) |
type | identique (À VOIR) |
|
value_date | indépendant |
check_num | indépendant |
repeat | identique |
xfer | toujours présent |
xfer_cat | présent si opération absente dans le
compte de transfert |
stmt_num | indépendant |
currency |
si les 2 comptes n'ont pas la même monnaie
devise avec la monnaie du compte de transfert
sinon
impossible (car ça n'a pas de sens) |
splits | indépendant, mais la somme des sous-opérations de chacune ne doit pas excéder la somme de l'autre (en plus de la sienne, comme c'est le cas pour une opération sans transfert) |
À tout celà il faut ajouter les préférences de Ma Tirelire.
Elles sont stockées avec le CreatorID 'MaT2' et l'id 0.
Ci-suit la structure C des préférences de Ma Tirelire 2 :
struct s_mati_prefs
{
UInt32 ul_no_beta_alert:1; // No alert box signaling beta software
UInt32 ul_db_must_be_corrected:1; // Une BD a au - une opération foireuse
UInt32 ul_replace_desc:1; // Description remplacée dans op_form
UInt32 ul_XXX1:1; // Free to use...
UInt32 ul_auto_lock_on_power_off:1; // Lock auto à l'extinction
UInt32 ul_time_select3:1; // Boîte de sélection de l'heure OS3
UInt32 ul_left_handed:1; // Barre de scroll à gauche
#define PW_TIMEOUT_NONE 0
#define PW_TIMEOUT_30S 1
#define PW_TIMEOUT_60S 2
#define PW_TIMEOUT_120S 3
#define PW_TIMEOUT_300S 4
UInt32 ul_timeout:3; // Temps d'inactivité au bout du quel le code
// d'accès est redemandé
#define DM_REMOVE_RECORD 0 // Suppression immédiate
#define DM_DELETE_RECORD 1 // Suppression à la prochaine synchro (cond.)
UInt32 ul_remove_type:1; // DmRemoveRecord or DmDeleteRecord
// for types, modes and desc DB
UInt32 ul_XXX2:2; // Free to use...
#define FIRSTNEXT_NOT_CHECKED 0
#define FIRSTNEXT_NOT_FLAGGED 1
#define FIRSTNEXT_NOT_CHK_FLG 2
#define FIRSTNEXT_FLAGGED 3
UInt32 ul_firstnext_action:2; // Action des icones premier/suivant
#define FIRST_FORM_DBASES 0
#define FIRST_FORM_ACCOUNTS 1
#define FIRST_FORM_TRANS 2
#define FIRST_FORM_XXX 3
UInt32 ul_first_form:3; // Formulaire à afficher au lancement
// de l'appli
UInt32 ul_select_focused_num_flds:1; // Sélectionne le contenu des champs
// numériques qui obtiennent le focus
UInt32 ul_reserved:13;
UInt32 ul_access_code; // Code d'accès à l'application
Char ra_last_db[dmDBNameLength]; // Nom de la dernière base utilisée
FmFontID ui_list_font; // Fonte dans les listes
FmFontID ui_list_bold_font; // Version "grasse"
#define COLOR_REPEAT 0
#define COLOR_XFER 1
#define COLOR_CREDIT 2
#define COLOR_DEBIT 3
#define COLOR_CURRENCY 4
#define COLOR_RESERVED2 5
#define COLOR_RESERVED3 6
#define COLOR_RESERVED4 7
IndexedColorType ra_colors[8];
#define USER_REPEAT_COLOR 0x0001 /* Repeat color user defined */
#define USER_XFER_COLOR 0x0002 /* Xfer color user defined */
#define USER_CREDIT_COLOR 0x0004 /* Credit color user defined */
#define USER_DEBIT_COLOR 0x0008 /* Debit color user defined */
#define USER_CURRENCY_COLOR 0x0010 /* Currency color user defined */
#define USER_RESERVED2_COLOR 0x0020
#define USER_RESERVED3_COLOR 0x0040
#define USER_RESERVED4_COLOR 0x0080
#define USER_XFER_BOLD 0x0100 /* Xfer are in bold face */
#define USER_REPEAT_BOLD 0x0200 /* Repeats are in bold face */
#define USER_CURRENCY_ULINE 0x0400 /* Currency amounts are underlined */
UInt16 uh_list_flags;
};
|