home *** CD-ROM | disk | FTP | other *** search
/ Mega Top 1 / os2_top1.zip / os2_top1 / APPS / TEKST / CMTEX330 / SOURCE / SYM.H < prev    next >
C/C++ Source or Header  |  1992-04-21  |  14KB  |  445 lines

  1.  
  2. /*
  3.  * %Y%:%M%:%I%:%Q%
  4.  *
  5.  * Copyright 1987,1988,1991,1992 Pat J Monardo
  6.  *
  7.  * Redistribution of this file is permitted through
  8.  * the specifications in the file COPYING.
  9.  *
  10.  *
  11.  */
  12.  
  13. struct reg_t {
  14.     short    type_field;
  15.     short    level_field;
  16.     int    equiv_field;
  17. };
  18. typedef struct reg_t reg_t, *reg;
  19.  
  20. #define reg_type(R)        ((reg) (R))->type_field
  21. #define reg_level(R)        ((reg) (R))->level_field
  22. #define reg_equiv(R)        ((reg) (R))->equiv_field
  23.  
  24. struct sym_t {
  25.     reg_t    reg_field;
  26.     int    length_field;
  27.     str    text_field;
  28.     struct sym_t *hash_field;
  29. };
  30. typedef struct sym_t sym_t, *sym;
  31.  
  32. #define sym2reg(S)        ((reg) & ((sym) (S))->reg_field)
  33. #define reg2sym(R)        ((sym) R)
  34. #define eq_type(S)        reg_type(sym2reg(S))
  35. #define eq_level(S)        reg_level(sym2reg(S))
  36. #define equiv(S)        reg_equiv(sym2reg(S))
  37. #define length(S)        ((sym) (S))->length_field
  38. #define text(S)            ((sym) (S))->text_field
  39. #define hash(S)            ((sym) (S))->hash_field
  40. #define textbyte(S)        (*(byte *)text(S))
  41.  
  42. #define null_sym ((sym) 0)
  43.  
  44. global    sym    cur_cs;
  45. global    sym    warning_cs;
  46. global    sym    par_cs;
  47. global    sym    par_shape_cs;
  48. global    sym    undefined_cs;
  49. global    sym    null_cs;
  50.  
  51. global    sym    *active_base;
  52. global    sym    *single_base;
  53. global    sym    *hash_base;
  54. global    sym    *frozen_cs_base;
  55.  
  56. global    sym    *font_id_base;
  57.  
  58. #define font_id(F)        font_id_base[F]
  59. #define font_id_text(F)        text(font_id_base[F])
  60. #define font_id_length(F)    length(font_id_base[F])
  61.  
  62. global    reg    *skip_reg;
  63. global    reg    *mu_skip_reg;
  64. global    reg    *box_reg;
  65. global    reg    *int_reg;
  66. global    reg    *dimen_reg;
  67. global    reg    *toks_reg;
  68. global    reg    *fnt_reg;
  69. global    reg    *cat_code_reg;
  70. global    reg    *lc_code_reg;
  71. global    reg    *uc_code_reg;
  72. global    reg    *sf_code_reg;
  73. global    reg    *math_code_reg;
  74. global    reg    *del_code_reg;
  75.  
  76. #define MU_GLUE_PARS            3
  77. #define mu_glue_par(G)            reg_equiv(mu_skip_reg[G])
  78.  
  79. #define THIN_MU_SKIP_CODE        0
  80. #define MED_MU_SKIP_CODE        1
  81. #define THICK_MU_SKIP_CODE        2
  82.  
  83. #define thin_mu_skip            mu_glue_par(THIN_MU_SKIP_CODE)
  84. #define med_mu_skip            mu_glue_par(MED_MU_SKIP_CODE)
  85. #define thick_mu_skip            mu_glue_par(THICK_MU_USKIP_CODE)
  86.  
  87. #define GLUE_PARS            15
  88. #define glue_par(G)            reg_equiv(skip_reg[G])
  89.  
  90. #define LINE_SKIP_CODE            0
  91. #define BASELINE_SKIP_CODE        1
  92. #define PAR_SKIP_CODE            2
  93. #define ABOVE_DISPLAY_SKIP_CODE        3
  94. #define BELOW_DISPLAY_SKIP_CODE        4
  95. #define ABOVE_DISPLAY_SHORT_SKIP_CODE    5
  96. #define BELOW_DISPLAY_SHORT_SKIP_CODE    6
  97. #define LEFT_SKIP_CODE            7
  98. #define RIGHT_SKIP_CODE            8
  99. #define TOP_SKIP_CODE            9
  100. #define SPLIT_TOP_SKIP_CODE        10
  101. #define TAB_SKIP_CODE            11
  102. #define SPACE_SKIP_CODE            12
  103. #define XSPACE_SKIP_CODE        13
  104. #define PAR_FILL_SKIP_CODE        14
  105.  
  106. #define line_skip            glue_par(LINE_SKIP_CODE)
  107. #define baseline_skip            glue_par(BASELINE_SKIP_CODE)
  108. #define par_skip            glue_par(PAR_SKIP_CODE)
  109. #define above_display_skip        glue_par(ABOVE_DISPLAY_SKIP_CODE)
  110. #define below_display_skip        glue_par(BELOW_DISPLAY_SKIP_CODE)
  111. #define above_display_short_skip    glue_par(ABOVE_DISPLAY_SHORT_SKIP_CODE)
  112. #define below_display_short_skip    glue_par(BELOW_DISPLAY_SHORT_SKIP_CODE)
  113. #define left_skip            glue_par(LEFT_SKIP_CODE)
  114. #define right_skip            glue_par(RIGHT_SKIP_CODE)
  115. #define top_skip            glue_par(TOP_SKIP_CODE)
  116. #define split_top_skip            glue_par(SPLIT_TOP_SKIP_CODE)
  117. #define tab_skip            glue_par(TAB_SKIP_CODE)
  118. #define space_skip            glue_par(SPACE_SKIP_CODE)
  119. #define xspace_skip            glue_par(XSPACE_SKIP_CODE)
  120. #define par_fill_skip            glue_par(PAR_FILL_SKIP_CODE)
  121.  
  122. #define DIMEN_PARS            21
  123. #define dimen_par(D)            reg_equiv(dimen_reg[D])
  124.  
  125. #define PAR_INDENT_CODE            0
  126. #define MATH_SURROUND_CODE        1
  127. #define LINE_SKIP_LIMIT_CODE        2
  128. #define HSIZE_CODE            3
  129. #define VSIZE_CODE            4
  130. #define MAX_DEPTH_CODE            5
  131. #define SPLIT_MAX_DEPTH_CODE        6
  132. #define BOX_MAX_DEPTH_CODE        7
  133. #define HFUZZ_CODE            8
  134. #define VFUZZ_CODE            9
  135. #define DELIMITER_SHORTFALL_CODE    10
  136. #define NULL_DELIMITER_SPACE_CODE    11
  137. #define SCRIPT_SPACE_CODE        12
  138. #define PRE_DISPLAY_SIZE_CODE        13
  139. #define DISPLAY_WIDTH_CODE        14
  140. #define DISPLAY_INDENT_CODE        15
  141. #define OVERFULL_RULE_CODE        16
  142. #define HANG_INDENT_CODE        17
  143. #define H_OFFSET_CODE            18
  144. #define V_OFFSET_CODE            19
  145. #define EMERGENCY_STRETCH_CODE        20
  146.  
  147. #define par_indent            dimen_par(PAR_INDENT_CODE)
  148. #define math_surround            dimen_par(MATH_SURROUND_CODE)
  149. #define line_skip_limit            dimen_par(LINE_SKIP_LIMIT_CODE)
  150. #define hsize                dimen_par(HSIZE_CODE)
  151. #define vsize                dimen_par(VSIZE_CODE)
  152. #define max_depth            dimen_par(MAX_DEPTH_CODE)
  153. #define split_max_depth            dimen_par(SPLIT_MAX_DEPTH_CODE)
  154. #define box_max_depth            dimen_par(BOX_MAX_DEPTH_CODE)
  155. #define hfuzz                dimen_par(HFUZZ_CODE)
  156. #define vfuzz                dimen_par(VFUZZ_CODE)
  157. #define delimiter_shortfall        dimen_par(DELIMITER_SHORTFALL_CODE)
  158. #define null_delimiter_space        dimen_par(NULL_DELIMITER_SPACE_CODE)
  159. #define script_space            dimen_par(SCRIPT_SPACE_CODE)
  160. #define pre_display_size        dimen_par(PRE_DISPLAY_SIZE_CODE)
  161. #define display_width            dimen_par(DISPLAY_WIDTH_CODE)
  162. #define display_indent            dimen_par(DISPLAY_INDENT_CODE)
  163. #define overfull_rule            dimen_par(OVERFULL_RULE_CODE)
  164. #define hang_indent            dimen_par(HANG_INDENT_CODE)
  165. #define h_offset            dimen_par(H_OFFSET_CODE)
  166. #define v_offset            dimen_par(V_OFFSET_CODE)
  167. #define emergency_stretch        dimen_par(EMERGENCY_STRETCH_CODE)
  168.  
  169. #define INT_PARS            55
  170. #define int_par(I)            reg_equiv(int_reg[I])
  171.  
  172. #define PRETOLERANCE_CODE        0
  173. #define TOLERANCE_CODE            1
  174. #define LINE_PENALTY_CODE        2
  175. #define HYPHEN_PENALTY_CODE        3        
  176. #define CLUB_PENALTY_CODE        4
  177. #define EX_HYPHEN_PENALTY_CODE        5
  178. #define WIDOW_PENALTY_CODE        6
  179. #define DISPLAY_WIDOW_PENALTY_CODE    7
  180. #define BROKEN_PENALTY_CODE        8
  181. #define BIN_OP_PENALTY_CODE        9
  182. #define REL_PENALTY_CODE        10
  183. #define PRE_DISPLAY_PENALTY_CODE    11
  184. #define POST_DISPLAY_PENALTY_CODE    12
  185. #define INTER_LINE_PENALTY_CODE        13
  186. #define DOUBLE_HYPHEN_DEMERITS_CODE    14
  187. #define FINAL_HYPHEN_DEMERITS_CODE    15
  188. #define ADJ_DEMERITS_CODE        16
  189. #define MAG_CODE            17
  190. #define DELIMITER_FACTOR_CODE        18
  191. #define LOOSENESS_CODE            19
  192. #define TIME_CODE            20
  193. #define DAY_CODE            21
  194. #define MONTH_CODE            22
  195. #define YEAR_CODE            23
  196. #define SHOW_BOX_BREADTH_CODE        24
  197. #define SHOW_BOX_DEPTH_CODE        25
  198. #define HBADNESS_CODE            26
  199. #define VBADNESS_CODE            27
  200. #define PAUSING_CODE            28
  201. #define TRACING_ONLINE_CODE        29
  202. #define TRACING_MACROS_CODE        30
  203. #define TRACING_STATS_CODE        31
  204. #define TRACING_PARAGRAPHS_CODE        32
  205. #define TRACING_PAGES_CODE        33
  206. #define TRACING_OUTPUT_CODE        34
  207. #define TRACING_LOST_CHARS_CODE        35
  208. #define TRACING_COMMANDS_CODE        36
  209. #define TRACING_RESTORES_CODE        37
  210. #define UC_HYPH_CODE            38
  211. #define OUTPUT_PENALTY_CODE        39
  212. #define MAX_DEAD_CYCLES_CODE        40
  213. #define HANG_AFTER_CODE            41
  214. #define FLOATING_PENALTY_CODE        42
  215. #define GLOBAL_DEFS_CODE        43
  216. #define CUR_FAM_CODE            44
  217. #define ESCAPE_CHAR_CODE        45
  218. #define DEFAULT_HYPHEN_CHAR_CODE    46
  219. #define DEFAULT_SKEW_CHAR_CODE        47
  220. #define END_LINE_CHAR_CODE        48
  221. #define NEW_LINE_CHAR_CODE        49
  222. #define LANGUAGE_CODE            50
  223. #define LEFT_HYPHEN_MIN_CODE        51
  224. #define RIGHT_HYPHEN_MIN_CODE        52
  225. #define HOLDING_INSERTS_CODE        53
  226. #define ERROR_CONTEXT_LINES_CODE    54
  227.  
  228. #define pretolerance            int_par(PRETOLERANCE_CODE)
  229. #define tolerance            int_par(TOLERANCE_CODE)
  230. #define line_penalty            int_par(LINE_PENALTY_CODE)
  231. #define hyphen_penalty            int_par(HYPHEN_PENALTY_CODE)
  232. #define ex_hyphen_penalty        int_par(EX_HYPHEN_PENALTY_CODE)
  233. #define club_penalty            int_par(CLUB_PENALTY_CODE)
  234. #define widow_penalty            int_par(WIDOW_PENALTY_CODE)
  235. #define display_widow_penalty        int_par(DISPLAY_WIDOW_PENALTY_CODE)
  236. #define broken_penalty            int_par(BROKEN_PENALTY_CODE)
  237. #define bin_op_penalty            int_par(BIN_OP_PENALTY_CODE)
  238. #define rel_penalty            int_par(REL_PENALTY_CODE)
  239. #define pre_display_penalty        int_par(PRE_DISPLAY_PENALTY_CODE)
  240. #define post_display_penalty        int_par(POST_DISPLAY_PENALTY_CODE)
  241. #define inter_line_penalty        int_par(INTER_LINE_PENALTY_CODE)
  242. #define double_hyphen_demerits        int_par(DOUBLE_HYPHEN_DEMERITS_CODE)
  243. #define final_hyphen_demerits        int_par(FINAL_HYPHEN_DEMERITS_CODE)
  244. #define adj_demerits            int_par(ADJ_DEMERITS_CODE)
  245. #define mag                int_par(MAG_CODE)
  246. #define delimiter_factor        int_par(DELIMITER_FACTOR_CODE)
  247. #define looseness            int_par(LOOSENESS_CODE)
  248. #define time                int_par(TIME_CODE)
  249. #define day                int_par(DAY_CODE)
  250. #define month                int_par(MONTH_CODE)
  251. #define year                int_par(YEAR_CODE)
  252. #define show_box_breadth        int_par(SHOW_BOX_BREADTH_CODE)
  253. #define show_box_depth            int_par(SHOW_BOX_DEPTH_CODE)
  254. #define hbadness            int_par(HBADNESS_CODE)
  255. #define vbadness            int_par(VBADNESS_CODE)
  256. #define pausing                int_par(PAUSING_CODE)
  257. #define tracing_online            int_par(TRACING_ONLINE_CODE)
  258. #define tracing_macros            int_par(TRACING_MACROS_CODE)
  259. #define tracing_stats            int_par(TRACING_STATS_CODE)
  260. #define tracing_paragraphs        int_par(TRACING_PARAGRAPHS_CODE)
  261. #define tracing_pages            int_par(TRACING_PAGES_CODE)
  262. #define tracing_output            int_par(TRACING_OUTPUT_CODE)
  263. #define tracing_lost_chars        int_par(TRACING_LOST_CHARS_CODE)
  264. #define tracing_commands        int_par(TRACING_COMMANDS_CODE)
  265. #define tracing_restores        int_par(TRACING_RESTORES_CODE)
  266. #define uc_hyph                int_par(UC_HYPH_CODE)
  267. #define max_dead_cycles            int_par(MAX_DEAD_CYCLES_CODE)
  268. #define output_penalty            int_par(OUTPUT_PENALTY_CODE)
  269. #define hang_after            int_par(HANG_AFTER_CODE)
  270. #define floating_penalty        int_par(FLOATING_PENALTY_CODE)
  271. #define global_defs            int_par(GLOBAL_DEFS_CODE)
  272. #define cur_fam                int_par(CUR_FAM_CODE)
  273. #define escape_char            int_par(ESCAPE_CHAR_CODE)
  274. #define default_hyphen_char        int_par(DEFAULT_HYPHEN_CHAR_CODE)
  275. #define default_skew_char        int_par(DEFAULT_SKEW_CHAR_CODE)
  276. #define end_line_char            int_par(END_LINE_CHAR_CODE)
  277. #define new_line_char            int_par(NEW_LINE_CHAR_CODE)
  278. #define language            int_par(LANGUAGE_CODE)
  279. #define left_hyphen_min            int_par(LEFT_HYPHEN_MIN_CODE)
  280. #define right_hyphen_min        int_par(RIGHT_HYPHEN_MIN_CODE)
  281. #define holding_inserts            int_par(HOLDING_INSERTS_CODE)
  282. #define error_context_lines        int_par(ERROR_CONTEXT_LINES_CODE)
  283.  
  284. #define TOK_PARS            9
  285. #define tok_par(T)            reg_equiv(toks_reg[T])
  286.  
  287. #define OUTPUT_ROUTINE_CODE        0
  288. #define EVERY_PAR_CODE            1
  289. #define EVERY_MATH_CODE            2
  290. #define EVERY_DISPLAY_CODE        3
  291. #define EVERY_HBOX_CODE            4
  292. #define EVERY_VBOX_CODE            5
  293. #define EVERY_JOB_CODE            6
  294. #define EVERY_CR_CODE            7
  295. #define ERR_HELP_CODE            8
  296.  
  297. #define output_routine_reg        toks_reg[OUTPUT_ROUTINE_CODE]
  298. #define output_routine            tok_par(OUTPUT_ROUTINE_CODE)
  299. #define every_par            tok_par(EVERY_PAR_CODE)
  300. #define every_math            tok_par(EVERY_MATH_CODE)
  301. #define every_display            tok_par(EVERY_DISPLAY_CODE)
  302. #define every_hbox            tok_par(EVERY_HBOX_CODE)
  303. #define every_vbox            tok_par(EVERY_VBOX_CODE)
  304. #define every_job            tok_par(EVERY_JOB_CODE)
  305. #define every_cr            tok_par(EVERY_CR_CODE)
  306. #define err_help            tok_par(ERR_HELP_CODE)
  307.  
  308. #define FROZEN_CONTROLS            11
  309. #define FROZEN_CONTROL_SEQUENCE        frozen_cs_base
  310. #define FROZEN_PROTECTION        FROZEN_CONTROL_SEQUENCE[0]
  311. #define FROZEN_CR            FROZEN_CONTROL_SEQUENCE[1]
  312. #define FROZEN_END_GROUP        FROZEN_CONTROL_SEQUENCE[2]
  313. #define FROZEN_RIGHT            FROZEN_CONTROL_SEQUENCE[3]
  314. #define FROZEN_FI            FROZEN_CONTROL_SEQUENCE[4]
  315. #define FROZEN_END_TEMPLATE        FROZEN_CONTROL_SEQUENCE[5]
  316. #define FROZEN_ENDV            FROZEN_CONTROL_SEQUENCE[6]
  317. #define FROZEN_RELAX            FROZEN_CONTROL_SEQUENCE[7]
  318. #define FROZEN_END_WRITE        FROZEN_CONTROL_SEQUENCE[8]
  319. #define FROZEN_DONT_EXPAND        FROZEN_CONTROL_SEQUENCE[9]
  320. #define FROZEN_NULL_FONT        FROZEN_CONTROL_SEQUENCE[10]
  321.  
  322. #define cur_font_ptr        fnt_reg[0]
  323. #define cur_font        reg_equiv(cur_font_ptr)
  324. #define fam_fnt(R)        reg_equiv(fnt_reg[(R)+1])
  325.  
  326. #define mu_skip(R)        reg_equiv(mu_skip_reg[MU_GLUE_PARS + (R)])
  327. #define skip(R)            reg_equiv(skip_reg[GLUE_PARS + (R)])
  328. #define dimen(R)        reg_equiv(dimen_reg[DIMEN_PARS + (R)])
  329. #define count(R)        reg_equiv(int_reg[INT_PARS + (R)])
  330. #define toks(R)            reg_equiv(toks_reg[TOK_PARS + (R)])
  331. #define box(R)            reg_equiv(box_reg[R])
  332.  
  333. #define CAT_CODE        0
  334. #define LC_CODE            1
  335. #define UC_CODE            2
  336. #define SF_CODE            3
  337. #define MATH_CODE        4
  338. #define DEL_CODE        5
  339.  
  340. #define cat_code(R)        reg_equiv(cat_code_reg[R])
  341. #define lc_code(R)        reg_equiv(lc_code_reg[R])
  342. #define uc_code(R)        reg_equiv(uc_code_reg[R])
  343. #define sf_code(R)        reg_equiv(sf_code_reg[R])
  344. #define math_code(R)        reg_equiv(math_code_reg[R])
  345. #define del_code(R)        reg_equiv(del_code_reg[R])
  346.  
  347. #define par_shape_ptr        equiv(par_shape_cs)
  348.  
  349. struct shape_t {
  350.     scal    indent_field;
  351.     scal    width_field;
  352. };
  353. typedef struct shape_t shape_t;
  354.  
  355. struct par_shape_t {
  356.     mcell     node_field;
  357.     shape_t    par_shape_field[1];
  358. };
  359. typedef struct par_shape_t par_shape_t;
  360.  
  361. #define par_shape    ((par_shape_t *) par_shape_ptr)->par_shape_field
  362.  
  363. #define par_shape_indent(I)    par_shape[I - 1].indent_field
  364. #define par_shape_width(I)    par_shape[I - 1].width_field
  365.  
  366. global    ptr    hold_head;
  367. global    ptr    zero_glue;
  368. global    ptr    fil_glue;
  369. global    ptr    fill_glue;
  370. global    ptr    ss_glue;
  371. global    ptr    fil_neg_glue;
  372.  
  373. global    bool    no_new_control_sequence;
  374. global    int    cs_count;
  375.  
  376. sym    id_lookup();
  377. sym    new_sym();
  378.  
  379. sym    primitive();
  380. sym    freeze();
  381.  
  382. void    print_cs();
  383. void    sprint_cs();
  384.  
  385. bool    issingle();
  386. bool    isactive();
  387. bool    isfrozen();
  388.  
  389. global    int    cur_level;
  390. global    int    cur_group;
  391.  
  392. global    int    nsaves;
  393. global    reg    save_stack;
  394. global    reg    save_end;
  395. global    reg    save_ptr;
  396. global    reg    max_save_stack;
  397.  
  398. #define save_type    reg_type
  399. #define save_level    reg_level
  400. #define save_index    reg_equiv
  401.  
  402. #define saved(I)    save_index(save_ptr+I)
  403.  
  404. #define RESTORE_OLD_VALUE        0
  405. #define INSERT_TOKEN            1
  406. #define LEVEL_BOUNDARY            2
  407.  
  408. #define LEVEL_ZERO            MIN_QUARTERWORD
  409. #define LEVEL_ONE            (LEVEL_ZERO + 1)
  410. #define BOTTOM_LEVEL            0
  411. #define SIMPLE_GROUP            1
  412. #define HBOX_GROUP            2
  413. #define ADJUSTED_HBOX_GROUP        3
  414. #define VBOX_GROUP            4
  415. #define VTOP_GROUP            5
  416. #define ALIGN_GROUP            6
  417. #define NO_ALIGN_GROUP            7
  418. #define OUTPUT_GROUP            8
  419. #define MATH_GROUP            9
  420. #define DISC_GROUP            10
  421. #define INSERT_GROUP            11
  422. #define VCENTER_GROUP            12
  423. #define MATH_CHOICE_GROUP        13
  424. #define SEMI_SIMPLE_GROUP        14
  425. #define MATH_SHIFT_GROUP        15
  426. #define MATH_LEFT_GROUP            16
  427. #define MAX_GROUP_CODE            16
  428.  
  429. void    new_save_level();
  430. bool    realloc_save_stack();
  431. void    reg_destroy();
  432. void    reg_save();
  433. void    eq_define();
  434. void    reg_define();
  435. void    eq_gdefine();
  436. void    reg_gdefine();
  437. void    save_for_after();
  438. void    unsave();
  439. void    off_save();
  440. void    restore_trace();
  441. void    show_reg();
  442.  
  443. void    _sym_init();
  444. void    _sym_init_once();
  445.