Pour être tout à fait précis je parle de ceci (rajouté APRÈS COUP dans mon .h principal, le code étant déjà fonctionnel sans toutes ces définitions) :
typedef struct {
word *stack;
byte *prog_block_ptr;
word *stack_var_ptr; /* Ça c'est le « frame pointer » */
word pc_page;
print_buf_t *pbf_p;
char *ti_location;
char *ti_status;
pg_table_t *pg_table;
byte *pg_start;
word pg_count;
word cur_page;
word MRU_pg_p;
word font_style;
int ligne_courante;
int position_x;
/* Deuxième fenêtre (upper window) */
Bool upper_win_active;
word pos_x_upper_win;
word pos_y_upper_win;
word taille_up_win;
/* print.c */
print_buf_t text, room, stream3;
Bool stream3_active;
Bool output_disabled;
} structure_magique_t;
register word *stack_base asm ("a4");
register byte *base_ptr asm ("a3");
register long pc_offset asm ("d7");
#define structure_magique ((structure_magique_t*)stack_base)
#define stack (structure_magique->stack)
#define prog_block_ptr (structure_magique->prog_block_ptr)
#define stack_var_ptr (structure_magique->stack_var_ptr) /* Ça c'est le « frame pointer » */
#define pc_page (structure_magique->pc_page)
#define ti_location (structure_magique->ti_location)
#define ti_status (structure_magique->ti_status)
#define pbf_p (structure_magique->pbf_p)
#define pg_table (structure_magique->pg_table)
#define pg_start (structure_magique->pg_start)
#define pg_count (structure_magique->pg_count)
#define cur_page (structure_magique->cur_page)
#define MRU_pg_p (structure_magique->MRU_pg_p)
#define font_style (structure_magique->font_style)
#define ligne_courante (structure_magique->ligne_courante)
#define position_x (structure_magique->position_x)
/* Deuxième fenêtre (upper window) */
#define upper_win_active (structure_magique->upper_win_active)
#define pos_x_upper_win (structure_magique->pos_x_upper_win)
#define pos_y_upper_win (structure_magique->pos_y_upper_win)
#define taille_up_win (structure_magique->taille_up_win)
/* print.c */
#define text (structure_magique->text)
#define room (structure_magique->room)
#define stream3 (structure_magique->stream3)
#define stream3_active (structure_magique->stream3_active)
#define output_disabled (structure_magique->output_disabled)
Bon et en plus des macros ça a nécessité quand même une toute petite modification au _main ^^ (ajout des trucs en vert) :
stack_base = malloc(STACK_SIZE + sizeof (structure_magique_t));
if (!stack_base) {
ST_helpMsg (FRENCH ? "pas assez de mémoire" : "not enough memory");
return;
}
stack_base += STACK_SIZE / 2;
memset (stack_base, 0, sizeof (structure_magique_t));
(et bien sûr la suppression des déclarations de variables globales ^^)