Au total j'ai 680 lignes environ de fonctions qui sont toutes déclarées inline, et après j'ai ça :
void execute (word opcode, word num, word *param) {
switch (opcode)
{
case 0x01 : compare(num, param);
break;
case 0x02 : LTE(param[0], param[1]);
break;
case 0x03 : GTE(param[0], param[1]);
break;
case 0x04 : dec_chk(param[0], param[1]);
break;
case 0x05 : inc_chk(param[0], param[1]);
break;
case 0x06 : check_loc(param[0], param[1]);
break;
case 0x07 : bit(param[0], param[1]);
break;
case 0x08 : or(param[0], param[1]);
break;
case 0x09 : and(param[0], param[1]);
break;
case 0x0a : test_attr(param[0], param[1]);
break;
case 0x0b : set_attr(param[0], param[1]);
break;
case 0x0c : clr_attr(param[0], param[1]);
break;
case 0x0d : put_var(param[0], param[1]);
break;
case 0x0e : transfer(param[0], param[1]);
break;
case 0x0f : load_word_array(param[0], param[1]);
break;
case 0x10 : load_byte_array(param[0], param[1]);
break;
case 0x11 : get_prop(param[0], param[1]);
break;
case 0x12 : get_prop_addr(param[0], param[1]);
break;
case 0x13 : next_prop(param[0], param[1]);
break;
case 0x14 : plus(param[0], param[1]);
break;
case 0x15 : minus(param[0], param[1]);
break;
case 0x16 : multiply(param[0], param[1]);
case 0x17 : divide(param[0], param[1]);
break;
case 0x18 : mod(param[0], param[1]);
break;
/* Ox19 : gosub à deux opérandes (V4) */
/* opcodes V5 */
case 0x1a : if (!ADVANCED) goto illegal;
gosub (num, param, DROP_RETURN_VALUE);
break;
case 0x1b : if (!ADVANCED) goto illegal;
set_colour(param[0], param[1]);
break;
case 0x1c : if (!ADVANCED) goto illegal;
throw(param[0], param[1]);
break;
/*
* Missing opcodes
*/
/* opcodes V4 */
case 0x19 : /* version à 2 opérandes de gosub */
case 0x2c : if (STANDARD) goto illegal; /* version à 8 opérandes du même */
/* opcodes V3 */
case 0x20 : gosub(num, param, 0);
break;
case 0x21 : save_word_array(param[0], param[1], param[2]);
break;
case 0x22 : save_byte_array(param[0], param[1], param[2]);
break;
case 0x23 : put_prop(param[0], param[1], param[2]);
break;
case 0x24 : input(param[0], param[1]);
break;
case 0x25 : print_char(param[0]);
break;
case 0x26 : print_num(param[0]);
break;
case 0x27 : pi_random(param[0]);
break;
case 0x28 : push(param[0]);
break;
case 0x29 : pull(param[0]);
break;
case 0x2a : split_screen(param[0]);
break;
case 0x2b : set_window(param[0]);
break;
/* Ici des opcodes V4...*/
case 0x33 : output_stream(param);
break;
case 0x34 : /* input_stream(param[0]); */
break;
case 0x35 : /* sound_effect(num, param); */
break;
default :
if (ENHANCED) switch (opcode)
{
/* 0x2c : forme de gosub avec jusqu'à 8 arguments */
case 0x2d : erase_window(param[0]);
return;
case 0x2e : erase_line(param[0]);
return;
case 0x2f : set_cursor(param[0], param[1]);
return;
case 0x30 : get_cursor(param[0]);
return;
case 0x31 : set_font_style(param[0]);
return;
case 0x32 : /* buffer_mode(param[0]); */ /* TODO (?) */
#ifdef DEBUG
if (tracing & 1) scr_putline ("buffer_mode called");
#endif
return;
/* Ici des opcodes V3... */
case 0x36 : read_char(num, param);
return;
case 0x37 : scan_table(num, param);
return;
}
if (ADVANCED) switch (opcode)
{
case 0x38 : not(param[0]);
return;
case 0x39 : /* 8 ops */
case 0x3a : gosub (num, param, DROP_RETURN_VALUE);
return;
case 0x3b : tokenise(num, param);
return;
case 0x3c : encode_text(param[0], param[1], param[2], param[3]);
return;
case 0x3d : copy_table(param[0], param[1], param[2]);
return;
case 0x3e : print_table(num, param);
return;
case 0x3f : check_arg_count(param[0]);
return;
}
illegal : error("execute: Invalid Z-code instruction: $%02x", opcode);
}
}
je ne vois pas comment conserver du code pas trop illisible sans utiliser inline
edit : si je compte bien il y a 53 fonctions, pas 20

, mais la plupart font plus de 2 lignes ^^