static char id_space[2] [32 +1]; typedef short COUNT; typedef char TEXT; union T_VALS { TEXT *id __attribute__ ((aligned (2), packed)) ; }; typedef union T_VALS VALS; struct T_VAL { COUNT pos __attribute__ ((aligned (2), packed)) ; VALS vals __attribute__ ((aligned (2), packed)) ; }; typedef struct T_VAL VAL; VAL curval = {0}; static short idc = 0; static int cur_line; static int char_pos; typedef unsigned short WORD; WORD get_id (char c) { curval.vals.id[0] = c; } WORD get_tok () { char c = 'c'; curval.vals.id = id_space[idc]; curval.pos = (cur_line << 10) | char_pos; return get_id (c); } main () { get_tok (); exit (0); }