256Fermer258
SallyLe 19/11/2009 à 11:58
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 ^^)