home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / texmf / source / TeX / tex / defs.h < prev    next >
C/C++ Source or Header  |  1993-10-11  |  38KB  |  1,072 lines

  1. /* @<Constants...@>= */
  2.  
  3. #include "help.h"
  4.  
  5. /* Nummern der String-Konstanten: ... */
  6. #define STR_ENDWRITE            260 /* 1286 */
  7.  
  8. #define STR_OPENOUT            265 /* 1276 */
  9. #define STR_CLOSEOUT            266 /* 1277 */
  10. #define STR_SPECIAL            267 /* 1278 */
  11. #define STR_IMMEDIATE            268 /* 1279 */
  12. #define STR_SETLANGUAGE            269 /* 1280 */
  13. #define STR_WRITE            590 /* */
  14.  
  15. #define STR_INITEX            271 /* 1248 */
  16.  
  17. #define STR_SHOW            312 /* 1230 */
  18. #define STR_SHOWBOX            313 /* 1231 */
  19. #define STR_SHOWTHE            314 /* 1232 */
  20. #define STR_SHOWLISTS            315 /* 1233 */
  21.  
  22. #define STR_LOWERCASE            285 /* 1228 */
  23. #define STR_UPPERCASE            286 /* 1229 */
  24.  
  25. #define STR_MESSAGE            324 /* 1221 */
  26. #define STR_ERRMESSAGE            325 /* 1222 */
  27.  
  28. #define STR_OPENIN            322 /* 1219 */
  29. #define STR_CLOSEIN            323 /* 1220 */
  30.  
  31. #define STR_ERRORSTOPMODE        263 /* 1218 */
  32.  
  33. #define STR_AT                341 /* 1211 */
  34. #define STR_SCALED            342 /* 1212 */
  35.  
  36. #define STR_FONT_            289 /* 1210 */
  37.  
  38. #define STR_HYPHENCHAR            304 /* 1208 */
  39. #define STR_SKEWCHAR            305 /* 1209 */
  40.  
  41. #define STR_BY                291 /* 1199 */
  42.  
  43. #define STR_CHARDEF            350 /* 1186 */
  44. #define STR_MATHCHARDEF            351 /* 1187 */
  45. #define STR_COUNTDEF            352 /* 1188 */
  46. #define STR_DIMENDEF            353 /* 1189 */
  47. #define STR_SKIPDEF            354 /* 1190 */
  48. #define STR_MUSKIPDEF            355 /* 1191 */
  49. #define STR_TOKSDEF            356 /* 1192 */
  50.  
  51. #define STR_LET                357 /* 1184 */
  52. #define STR_FUTURELET            358 /* 1185 */
  53.  
  54. #define STR_INACCESSIBLE        347 /* 1183 */
  55.  
  56. #define STR_LONG            539 /* 1164 */
  57. #define STR_OUTER            540 /* 1165 */
  58. #define STR_GLOBAL            541 /* 1166 */
  59. #define STR_DEF                542 /* 1167 */
  60. #define STR_GDEF            543 /* 1168 */
  61. #define STR_EDEF            544 /* 1169 */
  62. #define STR_XDEF            545 /* 1170 */
  63.  
  64. #define STR_ABOVE            558 /* 1140 */
  65. #define STR_OVER            559 /* 1141 */
  66. #define STR_ATOP            560 /* 1142 */
  67. #define STR_ABOVEWITHDELIMS        561 /* 1143 */
  68. #define STR_OVERWITHDELIMS        562 /* 1144 */
  69. #define STR_ATOPWITHDELIMS        563 /* 1145 */
  70.  
  71. #define STR_FIL                309 /* */
  72. #define STR_PLUS_            310 /* */
  73. #define STR_MINUS_            311 /* */
  74.  
  75. /* --- */
  76. /* STR ohne Aenderung muessen noch ueberprueft werden, ob alle
  77.    Vorkommen ersetzt wurden
  78.  */
  79.  
  80. #define STR_INSERT            327 /* */
  81. #define STR_MU                334 /* */
  82. #define STR_KERN            337
  83. #define STR_MATH            340
  84. #define STR_DISCRETIONARY        346
  85. #define STR_SKIP            391 /* */
  86. #define STR_PT                393 /* */
  87.  
  88. #define STR_BOX                405 /* */
  89.  
  90. #define STR_ENDCSNAME            501 /* */
  91. #define STR_ENDGROUP            512 /* */
  92. #define STR_HRULE            517
  93. #define STR_MATHACCENT            519
  94. #define STR_NOALIGN            523
  95. #define STR_OMIT            526
  96. #define STR_PENALTY            527
  97. #define STR_PREVGRAF            528
  98. #define STR_READ            530 /* */
  99. #define STR_THE                533
  100. #define STR_PAR                593 /* */
  101.  
  102. #define STR_SPACEFACTOR            256 /* 664 */
  103. #define STR_PREVDEPTH            371 /* 665 */
  104. #define STR_DEADCYCLES            495 /* 666 */
  105. #define STR_INSERTPENALTIES        497 /* 667 */
  106.  
  107. #define STR_WD                499 /* 668 */
  108. #define STR_HT                502 /* 669 */
  109. #define STR_DP                503 /* 670 */
  110.  
  111. #define STR_LASTPENALTY            556 /* 671 */
  112. #define STR_LASTKERN            557 /* 672 */
  113. #define STR_LASTSKIP            567 /* 673 */
  114. #define STR_INPUTLINENO            587 /* 674 */
  115. #define STR_BADNESS            588 /* 675 */
  116.  
  117. #define STR_TRUE            407 /* 700 */
  118. #define STR_EM                546 /* 704 */
  119. #define STR_EX                547 /* 705 */
  120. #define STR_IN                548 /* 711 */
  121. #define STR_PC                549 /* 712 */
  122. #define STR_CM                550 /* 713 */
  123. #define STR_MM                551 /* 714 */
  124. #define STR_BP                552 /* 715 */
  125. #define STR_DD                553 /* 716 */
  126. #define STR_CC                554 /* 717 */
  127. #define STR_SP                555 /* 718 */
  128.  
  129. #define STR_PLUS            537 /* 726 */
  130. #define STR_MINUS            538 /* 727 */
  131. #define STR_WIDTH            564 /* 728 */
  132. #define STR_HEIGHT            565 /* 729 */
  133. #define STR_DEPTH            566 /* 730 */
  134.  
  135. #define STR_NUMBER            365 /* 731 */
  136. #define STR_ROMANNUMERAL        366 /* 732 */
  137. #define STR_STRING            367 /* 733 */
  138. #define STR_MEANING            368 /* 734 */
  139. #define STR_FONTNAME            369 /* 735 */
  140. #define STR_JOBNAME            370 /* 736 */
  141.  
  142. #define STR_AT_                406 /* 737 */
  143.  
  144. #define STR_IF                594 /* 752 */
  145. #define STR_IFCAT            595 /* 753 */
  146. #define STR_IFNUM            596 /* 754 */
  147. #define STR_IFDIM            597 /* 755 */
  148. #define STR_IFODD            598 /* 756 */
  149. #define STR_IFVMODE            599 /* 757 */
  150. #define STR_IFHMODE            600 /* 758 */
  151. #define STR_IFMMODE            601 /* 759 */
  152. #define STR_IFINNER            602 /* 760 */
  153. #define STR_IFVOID            603 /* 761 */
  154. #define STR_IFHBOX            604 /* 762 */
  155. #define STR_IFVBOX            605 /* 763 */
  156. #define STR_IFX                606 /* 764 */
  157. #define STR_IFEOF            607 /* 765 */
  158. #define STR_IFTRUE            608 /* 766 */
  159. #define STR_IFFALSE            609 /* 767 */
  160. #define STR_IFCASE            610 /* 768 */
  161. #define STR_FI                611 /* 769 */
  162. #define STR_OR                612 /* 770 */
  163. #define STR_ELSE            613 /* 771 */
  164.  
  165. #define STR_DOT_FMT            359 /* 779 */
  166. #define STR_DOT_TEX            360 /* 784 */
  167. #define STR_DOT_DVI            361 /* 787 */
  168. #define STR_TEXPUT            471 /* 789 */
  169.  
  170. #define STR_DOT_LOG            264 /* 790 */
  171. #define STR_NULLFONT            303 /* 794 */
  172. #define STR_DOT_TFM            326 /* 804 */
  173.  
  174. #define STR_TO                290 /* 835 */
  175. #define STR_SPREAD            297 /* 836 */
  176.  
  177. #define STR_DISPLAYSTYLE        299 /* 854 */
  178. #define STR_TEXTSTYLE            300 /* 855 */
  179. #define STR_SCRIPTSTYLE            301 /* 856 */
  180. #define STR_SCRIPTSCRIPTSTYLE        302 /* 857 */
  181.  
  182. #define STR_MATHORD            276 /* 859 */
  183. #define STR_MATHOP            277 /* 860 */
  184. #define STR_MATHBIN            278 /* 861 */
  185. #define STR_MATHREL            279 /* 862 */
  186. #define STR_MATHOPEN            280 /* 863 */
  187. #define STR_MATHCLOSE            281 /* 864 */
  188. #define STR_MATHPUNCT            282 /* 865 */
  189. #define STR_MATHINNER            283 /* 866 */
  190. #define STR_OVERLINE            259 /* 867 */
  191. #define STR_UNDERLINE            261 /* 868 */
  192.  
  193. #define STR_LEFT            292 /* 869 */
  194. #define STR_RIGHT            293 /* 870 */
  195.  
  196. #define STR_LIMITS            295 /* 871 */
  197. #define STR_NOLIMITS            296 /* 872 */
  198.  
  199. #define STR_SPAN            306 /* 891 */
  200. #define STR_CR                307 /* 892 */
  201. #define STR_CRCR            308 /* 893 */
  202. #define STR_ENDTEMPLATE            316 /* 894 */
  203.  
  204. #define STR_HYPHENATION            284 /* 934 */
  205. #define STR_PATTERNS            270 /* 946 */
  206.  
  207. #define STR_VSPLIT            294 /* 958 */
  208. #define STR_VBOX            298 /* 960 */
  209.  
  210. #define STR_END                343 /* 1018 */
  211. #define STR_DUMP            344 /* 1019 */
  212.  
  213. #define STR_PAGEGOAL            317 /* 963 */
  214. #define STR_PAGETOTAL            318 /* 964 */
  215. #define STR_PAGESTRETCH            319 /* 965 */
  216. #define STR_PAGEFILSTRETCH        320 /* 966 */
  217. #define STR_PAGEFILLSTRETCH        321 /* 967 */
  218. #define STR_PAGEFILLLSTRETCH        328 /* 968 */
  219. #define STR_PAGESHRINK            329 /* 969 */
  220. #define STR_PAGEDEPTH            330 /* 970 */
  221.  
  222. #define STR_HSKIP            589 /* 1020 */
  223. #define STR_HFIL            591 /* 1021 */
  224. #define STR_HFILL            592 /* 1022 */
  225. #define STR_HSS                614 /* 1023 */
  226. #define STR_HFILNEG            615 /* 1024 */
  227. #define STR_VSKIP            616 /* 1025 */
  228. #define STR_VFIL            617 /* 1026 */
  229. #define STR_VFILL            618 /* 1027 */
  230. #define STR_VSS                619 /* 1028 */
  231. #define STR_VFILNEG            620 /* 1029 */
  232.  
  233. #define STR_MOVELEFT            575 /* 1047 */
  234. #define STR_MOVERIGHT            576 /* 1048 */
  235. #define STR_RAISE            577 /* 1049 */
  236. #define STR_LOWER            578 /* 1050 */
  237. #define STR_COPY            579 /* 1051 */
  238. #define STR_LASTBOX            580 /* 1052 */
  239. #define STR_VTOP            581 /* 1053 */
  240. #define STR_HBOX            582 /* 1054 */
  241. #define STR_SHIPOUT            583 /* 1055 */
  242. #define STR_LEADERS            584 /* 1056 */
  243. #define STR_CLEADERS            585 /* 1057 */
  244. #define STR_XLEADERS            586 /* 1058 */
  245.  
  246. #define STR_INDENT            336 /* 1073 */
  247. #define STR_NOINDENT            338 /* 1074 */
  248.  
  249. #define STR_UNPENALTY            568 /* 1083 */
  250. #define STR_UNKERN            569 /* 1084 */
  251. #define STR_UNSKIP            570 /* 1085 */
  252. #define STR_UNHBOX            571 /* 1086 */
  253. #define STR_UNHCOPY            572 /* 1087 */
  254. #define STR_UNVBOX            573 /* 1088 */
  255. #define STR_UNVCOPY            574 /* 1089 */
  256.  
  257. #define STR_EQNO            362 /* 1120 */
  258. #define STR_LEQNO            363 /* 1121 */
  259. #define STR_DISPLAYLIMITS        364 /* 1122 */
  260.  
  261. /* */
  262. /* STR_MAX_ALL = last string in tex.pool */
  263. #define    STR_MAX_ALL        631 /* 914 */ /* 1290 */
  264.  
  265. #ifdef MLTEX
  266. #define STR_CHARSUBDEFMAX        (STR_MAX_ALL+1)
  267. #define STR_TRACING_CHARSUBDEF        (STR_CHARSUBDEFMAX+1)
  268. #define STR_CHARSUBDEF            (STR_TRACING_CHARSUBDEF+1)
  269.  
  270. #  ifdef ERW_INTERACTION
  271. #define STR_INTERACTION_MODE    (STR_CHARSUBDEF+1)
  272. #define STR_MAX            (STR_INTERACTION_MODE+1)
  273. #  else
  274. #define STR_MAX    (STR_CHARSUBDEF+1)
  275. #  endif
  276. #else
  277. #  ifdef ERW_INTERACTION
  278. #define STR_INTERACTION_MODE    (STR_MAX_ALL+1)
  279. #define STR_MAX            (STR_INTERACTION_MODE+1)
  280. #  else
  281. #define STR_MAX    (STR_MAX_ALL+1)
  282. #  endif
  283. #endif
  284.  
  285. #ifdef TEXXET
  286. #define    STR_BEGINL    (STR_MAX+1)
  287. #define STR_BEGINR    (STR_BEGINL+1)
  288. #define STR_ENDL    (STR_BEGINR+1)
  289. #define STR_ENDR    (STR_ENDL+1)
  290. #endif
  291.  
  292.  
  293. #ifdef MLTEX
  294. # if 0
  295. #  define effective_char(inchr) \
  296.     ( (is_ML_TeX && char_list_exists(inchr) && (inchr) <= char_sub_def_max) \
  297.     ? (eqtb[char_sub_base + (inchr)].qqqq.b1) \
  298.     : (inchr) )
  299. # endif
  300. #else
  301. #  define effective_char(inchr) (inchr)
  302. #endif
  303.  
  304. /* bei aelteren GCC's wird *10 mit mulX #10,dX uebersetzt */
  305. #if 0
  306. /* besser als "muls #10,d0" : */
  307. #define TEN_MULT(X)    ((((X) << 2) + (X)) << 1)
  308. #else
  309. #define TEN_MULT(X)    (10 * (X))
  310. #endif
  311.  
  312.  
  313. #ifdef FONTSTRUCT
  314. #define charbase(f)    fontdesc[f].charbase
  315. #define widthbase(f)    fontdesc[f].widthbase
  316. #define heightbase(f)    fontdesc[f].heightbase
  317. #define depthbase(f)    fontdesc[f].depthbase
  318. #define italicbase(f)    fontdesc[f].italicbase
  319. #define ligkernbase(f)    fontdesc[f].ligkernbase
  320. #define kernbase(f)    fontdesc[f].kernbase
  321. #define extenbase(f)    fontdesc[f].extenbase
  322. #define parambase(f)    fontdesc[f].parambase
  323.  
  324. #define fontbc(f)    fontdesc[f].fontbc
  325. #define fontec(f)    fontdesc[f].fontec
  326. #define fontcheck(f)    fontdesc[f].fontcheck
  327. #define fontparams(f)    fontdesc[f].fontparams
  328. #define fontglue(f)    fontdesc[f].fontglue
  329. #define hyphenchar(f)    fontdesc[f].hyphenchar
  330. #define skewchar(f)    fontdesc[f].skewchar
  331. #define bcharlabel(f)    fontdesc[f].bcharlabel
  332. #define fontbchar(f)    fontdesc[f].fontbchar
  333. #define fontfalsebchar(f)    fontdesc[f].fontfalsebchar
  334.  
  335. #else
  336.  
  337. #define charbase(f)    charbase[f]
  338. #define widthbase(f)    widthbase[f]
  339. #define heightbase(f)    heightbase[f]
  340. #define depthbase(f)    depthbase[f]
  341. #define italicbase(f)    italicbase[f]
  342. #define ligkernbase(f)    ligkernbase[f]
  343. #define kernbase(f)    kernbase[f]
  344. #define extenbase(f)    extenbase[f]
  345. #define parambase(f)    parambase[f]
  346.  
  347. #ifdef FONTPTR
  348. #define fontbc(f)    font_bcec[f].bc
  349. #define fontec(f)    font_bcec[f].ec
  350. #else
  351. #define fontbc(f)    fontbc[f]
  352. #define fontec(f)    fontec[f]
  353. #endif
  354. #define fontcheck(f)    fontcheck[f]
  355. #define fontparams(f)    fontparams[f]
  356. #define fontglue(f)    fontglue[f]
  357. #define hyphenchar(f)    hyphenchar[f]
  358. #define skewchar(f)    skewchar[f]
  359. #define bcharlabel(f)    bcharlabel[f]
  360. #define fontbchar(f)    fontbchar[f]
  361. #define fontfalsebchar(f)    fontfalsebchar[f]
  362.  
  363. #endif
  364.  
  365. #define fontused(f)    fontused[f]
  366. #define fontsize(f)    fontsize[f]
  367. #define fontdsize(f)    fontdsize[f]
  368. #define fontname(f)    fontname[f]
  369. #define fontarea(f)    fontarea[f]
  370.  
  371.  
  372.  
  373. #ifdef TEXXET
  374. #define push_LR(ptr) \
  375.   do { \
  376.     register long_halfword LR_tmp = getavail(); \
  377.     info(LR_tmp) = LR_type(ptr); \
  378.     link(LR_tmp) = LR_ptr; \
  379.     LR_ptr = LR_tmp; \
  380.   } while(0)
  381.  
  382. #define pop_LR \
  383.   do { \
  384.     register long_halfword LR_tmp = LR_ptr; \
  385.     LR_ptr = link(LR_tmp); \
  386.     freeavail(LR_tmp); \
  387.   } while(0)
  388. #endif
  389.  
  390.  
  391. #define minquarterword 0
  392. #define tokentype   (curinput.indexfield)
  393. #define paramstart   (curinput.limitfield)
  394.  
  395. #ifdef NEW_HELP
  396.  
  397. #define help0 \
  398.    do { static short tmp[] = { 0 }; helpptr = tmp; } while(0)
  399. #define zhelp1(s1) \
  400.    do { static short tmp[] = { s1 , 0 }; helpptr = tmp; } while(0)
  401. #define zhelp2(s2,s1) \
  402.    do { static short tmp[] = { s2 , s1 , 0 }; helpptr = tmp; } while(0)
  403. #define zhelp3(s3,s2,s1) \
  404.    do { static short tmp[] = { s3 , s2 , s1 , 0 }; helpptr = tmp; } while(0)
  405. #define zhelp4(s4,s3,s2,s1) \
  406.    do { static short tmp[] = { s4 , s3 , s2 , s1 , 0 }; \
  407.         helpptr = tmp; } while(0)
  408. #define zhelp5(s5,s4,s3,s2,s1) \
  409.    do { static short tmp[] = { s5 , s4 , s3 , s2 , s1 , 0 }; \
  410.         helpptr = tmp; } while(0)
  411. #define zhelp6(s6,s5,s4,s3,s2,s1) \
  412.    do { static short tmp[] = { s6 , s5 , s4 , s3 , s2 , s1 , 0 }; \
  413.         helpptr = tmp; } while(0)
  414.  
  415. #else
  416.  
  417. #define help0   helpptr = 0
  418. #define zhelp1(s1)   do { helpptr = 1; helpline[0] = s1; } while(0)
  419. #define zhelp2(s2,s1) \
  420.    do { helpptr = 2; helpline[0] = s1; helpline[1] = s2; } while(0)
  421. #define zhelp3(s3,s2,s1) \
  422.    do { helpptr = 3; helpline[0] = s1; helpline[1] = s2;\
  423.         helpline[2] = s3; } while(0)
  424. #define zhelp4(s4,s3,s2,s1) \
  425.    do { helpptr = 4; helpline[0] = s1; helpline[1] = s2; helpline[2] = s3; \
  426.      helpline[3] = s4; } while(0)
  427. #define zhelp5(s5,s4,s3,s2,s1) \
  428.    do { helpptr = 5; helpline[0] = s1; helpline[1] = s2; helpline[2] = s3; \
  429.      helpline[3] = s4; helpline[4] = s5;} while (0)
  430. #define zhelp6(s6,s5,s4,s3,s2,s1) \
  431.    do { helpptr = 6; helpline[0] = s1; helpline[1] = s2; helpline[2] = s3; \
  432.      helpline[3] = s4; helpline[4] = s5; helpline[5] = s6;} while(0)
  433.  
  434. #endif
  435.  
  436.  
  437. #define link(s) (mem[s].hh.v.RH)  /* the |link| field of a memory word */
  438. #define info(s) (mem[s].hh.v.LH)  /* the |info| field of a memory word */
  439.  
  440. #define isempty(s)  (link(s) == emptyflag) /* tests for empty node */
  441.   /* left link in doubly-linked list of empty nodes */
  442. #define llink(s)    info((s)+1)
  443.   /* right link in doubly-linked list of empty nodes */
  444. #define rlink(s)    link((s)+1)
  445.  
  446.  
  447. #define length(s) (strstart[(s)+1]-strstart[s])
  448.         /* the number of characters in string number |s| */
  449. #define curlength  (poolptr - strstart[strptr])
  450.  
  451.   /* put |ASCII_code| # at the end of |str_pool| */
  452. #define appendchar(c) \
  453.   strpool[poolptr++] = (c)
  454.   /* forget the last character in the pool */
  455. #define flushchar  decr(poolptr)
  456.   /* make sure that the pool hasn't overflowed */
  457. #define strroom(s) \
  458.   do { if (poolptr + (s) > poolsize) \
  459.       overflow(0, poolsize-initpoolptr);  /* "pool size" */ \
  460.   } while(0)
  461.  
  462. #define flushstring  do { decr(strptr); poolptr=strstart[strptr]; } while(0)
  463.  
  464.  
  465. #define str_eq_str(s,t) \
  466.   ( (length(s) == length(t)) && \
  467.     !strncmp( (char *) &strpool[strstart[(s)]], \
  468.           (char *) &strpool[strstart[(t)]], length(s)) )
  469.  
  470.  
  471.     /* Achtung: freeavail direkt verwendet in flush_node_list() */
  472. #ifdef STAT
  473.   /* single-word node liberation */
  474. #define freeavail(s) \
  475.   do { \
  476.     register halfword *availPTR = &avail; \
  477.     link(s) = *availPTR; *availPTR = (s); \
  478.     decr(dynused); \
  479.   } while(0)
  480. #else
  481. #define freeavail(s) \
  482.   do { \
  483.     register halfword *availPTR = &avail; \
  484.     link(s) = *availPTR; *availPTR = (s); \
  485.   } while(0)
  486. #endif
  487.  
  488. #ifdef STAT
  489. #define fastgetavail(s)  \
  490.   do { register halfword *availPTR = &avail; \
  491.     (s)=*availPTR; /*avoid |get_avail| if possible, to save time */ \
  492.     if( (s)==0 ) { \
  493.       (s)=getavail(); \
  494.     } else { \
  495.        *availPTR=link(s); link(s)=0; \
  496.        incr(dynused); \
  497.     } \
  498.   } while(0)
  499. #else
  500. #define fastgetavail(s)  \
  501.   do { (s)=avail; /*avoid |get_avail| if possible, to save time */ \
  502.   if( (s)==0 ) { (s)=getavail(); \
  503.   } else { avail=link(s); link(s)=0; } } while(0)
  504. #endif
  505.  
  506. #define ztype(s)  mem[s].hh.b0 /* identifies what kind of node this is */
  507. #define subtype(s) mem[s].hh.b1 /* secondary identification in some cases */
  508.     /* (br) added this for all functions new...() with const s1,s2 */
  509. #define set_type_subtype(s,s1,s2) \
  510.     mem[s].hh.w.LH = ((s1) * 256) + (s2)
  511.  
  512. #define ischarnode(s) ((s)>=himemmin)
  513.   /* does the argument point to a |char_node|? */
  514.     /* (br) added this all functions new...() */
  515. #define set_font_character(s,s1,s2)    set_type_subtype((s),(s1),(s2))
  516.  
  517. #define width(s) mem[(s)+widthoffset].cint /* width of the box, in sp */
  518. #define depth(s) mem[(s)+depthoffset].cint /* depth of the box, in sp */
  519. #define height(s) mem[(s)+heightoffset].cint /* height of the box, in sp */
  520. #define shiftamount(s) mem[(s)+4].cint /* repositioning distance, in sp */
  521. #define listptr(s) link((s)+listoffset)
  522.    /* beginning of the list inside the box */
  523. #define glueorder(s) subtype((s)+listoffset)
  524.    /* applicable order of infinity */
  525. #define gluesign(s) ztype((s)+listoffset)
  526.    /* stretching or shrinking */ 
  527. #define glueset(s) mem[(s)+glueoffset].gr
  528.    /* a word of type |glue_ratio| for glue setting */
  529.     /* (br) added this all functions new...() */
  530. #define set_gluesign_order(s,s1,s2) \
  531.     set_type_subtype((s)+listoffset,(s1),(s2))
  532.  
  533.  
  534. #define isrunning(s)  ((s)==nullflag)  /* tests for a running dimension */
  535.  
  536. #define floatcost(s)   mem[(s)+1].cint /* the |floating_penalty| to be used */
  537. #define insptr(s)      info((s)+4) /* the vertical list to be inserted */
  538. #define splittopptr(s) link((s)+4) /* the |split_top_skip| to be used */
  539.  
  540. #define markptr(s) mem[(s)+1].cint /* head of the token list for a mark */
  541. #define adjustptr(s) markptr(s)
  542.  
  543. #define ligchar(s) (s)+1   /* the word where the ligature is to be found */
  544. #define ligptr(s) link(ligchar(s))  /* the list of characters */
  545.  
  546. #define replacecount(s) subtype(s) /* how many subsequent nodes to replace */
  547.     /* (br) added this all functions new...() */
  548. #define set_type_replacecount(s,s1,s2)    set_type_subtype((s),(s1),(s2))
  549. #define prebreak(s) llink(s) /* text that precedes a discretionary break */
  550. #define postbreak(s) rlink(s) /* text that follows a discretionary break */
  551.  
  552. #define precedesbreak(s) (ztype(s)<mathnode)
  553. #define nondiscardable(s) (ztype(s)<mathnode)
  554.  
  555. #define glueptr(s) llink(s) /* pointer to a glue specification */
  556. #define leaderptr(s) rlink(s) /* pointer to box or rule node for leaders */
  557.  
  558. #define gluerefcount(s) link(s) /* reference count of a glue specification */
  559. #define stretch(s) mem[(s)+2].cint /*the stretchability of this glob of glue*/
  560. #define shrink(s)  mem[(s)+3].cint /*the shrinkability of this glob of glue*/
  561.  
  562. #define stretchorder(s) ztype(s)  /* order of infinity for stretching */
  563. #define shrinkorder(s) subtype(s) /* order of infinity for shrinking */
  564.     /* (br) added this all functions new...() */
  565. #define set_stretch_shrinkorder(s,s1,s2)    set_type_subtype(s,(s1),(s2))
  566.      
  567. #define penalty(s) mem[(s)+1].cint /*the added cost of breaking a list here*/
  568.  
  569. #define glueshrink(s) shiftamount(s) /* total shrink in an unset node */
  570. #define spancount(s) subtype(s) /* indicates the number of spanned columns */
  571.  
  572. #define gluestretch(s) mem[(s)+glueoffset].cint
  573.     /* total stretch in an unset node */
  574.  
  575.  
  576. #define fastdeleteglueref(s) \
  577.   do { if (gluerefcount(s)==0) freenode(s,gluespecsize); \
  578.        else decr(gluerefcount(s)); } while(0)
  579.  
  580. #define addtokenref(s) incr(tokenrefcount(s))
  581.    /* new reference to a token list */
  582. #define addglueref(s)  incr(gluerefcount(s))
  583.    /* new reference to a glue spec */
  584.  
  585. #define tailappend(s) \
  586.    do { \
  587.      register halfword *tailfPTR = &(curlist.tailfield); \
  588.      link( (*tailfPTR) ) = (s); \
  589.      *tailfPTR = link( (*tailfPTR) ); \
  590.    } while(0)
  591.  
  592.  
  593. #define eqlevelfield(s)  (s).hh.b1
  594. #define eqtypefield(s)   (s).hh.b0
  595. #define equivfield(s)    (s).hh.v.RH
  596. #define eqlevel(s)  eqlevelfield(eqtb[s]) /* level of definition */
  597. #define eqtype(s)   eqtypefield(eqtb[s])  /* command code for equivalent */
  598. #define equiv(s)    equivfield(eqtb[s])   /* equivalent value */
  599.  
  600.  
  601. #define skip(s)    equiv((s)+skipbase) /*|mem| location of glue specification*/
  602. #define muskip(s)  equiv((s)+muskipbase) /*|mem| location of math glue spec*/
  603. #define gluepar(s) equiv((s)+gluebase) /*|mem| location of glue specification*/
  604.  
  605. #define lineskip      gluepar(lineskipcode)
  606. #define baselineskip  gluepar(baselineskipcode)
  607. #define parskip       gluepar(parskipcode)
  608. #define abovedisplayskip  gluepar(abovedisplayskipcode)
  609. #define belowdisplayskip  gluepar(belowdisplayskipcode)
  610. #define abovedisplayshortskip  gluepar(abovedisplayshortskipcode)
  611. #define belowdisplayshortskip  gluepar(belowdisplayshortskipcode)
  612. #define leftskip  gluepar(leftskipcode)
  613. #define rightskip  gluepar(rightskipcode)
  614. #define topskip  gluepar(topskipcode)
  615. #define splittopskip  gluepar(splittopskipcode)
  616. #define tabskip  gluepar(tabskipcode)
  617. #define spaceskip  gluepar(spaceskipcode)
  618. #define xspaceskip  gluepar(xspaceskipcode)
  619. #define parfillskip  gluepar(parfillskipcode)
  620. #define thinmuskip  gluepar(thinmuskipcode)
  621. #define medmuskip  gluepar(medmuskipcode)
  622. #define thickmuskip  gluepar(thickmuskipcode)
  623.  
  624. #define parshapeptr    equiv(parshapeloc)
  625. #define outputroutine  equiv(outputroutineloc)
  626. #define everypar   equiv(everyparloc)
  627. #define everymath  equiv(everymathloc)
  628. #define everydisplay  equiv(everydisplayloc)
  629. #define everyhbox  equiv(everyhboxloc)
  630. #define everyvbox  equiv(everyvboxloc)
  631. #define everyjob  equiv(everyjobloc)
  632. #define everycr  equiv(everycrloc)
  633. #define errhelp  equiv(errhelploc)
  634. #define toks(s)  equiv((s)+toksbase)
  635. #define box(s)  equiv((s)+boxbase)
  636. #define curfont  equiv(curfontloc)
  637. #define famfnt(s)  equiv((s)+mathfontbase)
  638. #define catcode(s)  equiv((s)+catcodebase)
  639. #define lccode(s)  equiv((s)+lccodebase)
  640. #define uccode(s)  equiv((s)+uccodebase)
  641. #define sfcode(s)  equiv((s)+sfcodebase)
  642. #define mathcode(s)  equiv((s)+mathcodebase)
  643.   /* Note: |mathcode(c)| is the true math code plus |minhalfword| */
  644.  
  645. #define delcode(s)  eqtb[(s)+delcodebase].cint
  646. #define count(s)  eqtb[(s)+countbase].cint
  647. #define intpar(s)  eqtb[(s)+intbase].cint  /* an integer parameter */
  648. #define pretolerance  intpar(pretolerancecode)
  649. #define tolerance  intpar(tolerancecode)
  650. #define linepenalty  intpar(linepenaltycode)
  651. #define hyphenpenalty  intpar(hyphenpenaltycode)
  652. #define exhyphenpenalty  intpar(exhyphenpenaltycode)
  653. #define clubpenalty  intpar(clubpenaltycode)
  654. #define widowpenalty  intpar(widowpenaltycode)
  655. #define displaywidowpenalty  intpar(displaywidowpenaltycode)
  656. #define brokenpenalty  intpar(brokenpenaltycode)
  657. #define binoppenalty  intpar(binoppenaltycode)
  658. #define relpenalty  intpar(relpenaltycode)
  659. #define predisplaypenalty  intpar(predisplaypenaltycode)
  660. #define postdisplaypenalty  intpar(postdisplaypenaltycode)
  661. #define interlinepenalty  intpar(interlinepenaltycode)
  662. #define doublehyphendemerits  intpar(doublehyphendemeritscode)
  663. #define finalhyphendemerits  intpar(finalhyphendemeritscode)
  664. #define adjdemerits  intpar(adjdemeritscode)
  665. #define mag  intpar(magcode)
  666. #define delimiterfactor  intpar(delimiterfactorcode)
  667. #define looseness  intpar(loosenesscode)
  668. #define ztime  intpar(timecode)
  669. #define zday  intpar(daycode)
  670. #define zmonth  intpar(monthcode)
  671. #define zyear  intpar(yearcode)
  672. #define showboxbreadth  intpar(showboxbreadthcode)
  673. #define showboxdepth  intpar(showboxdepthcode)
  674. #define hbadness  intpar(hbadnesscode)
  675. #define vbadness  intpar(vbadnesscode)
  676. #define pausing  intpar(pausingcode)
  677. #define tracingonline  intpar(tracingonlinecode)
  678. #define tracingmacros  intpar(tracingmacroscode)
  679. #define tracingstats  intpar(tracingstatscode)
  680. #define tracingparagraphs  intpar(tracingparagraphscode)
  681. #define tracingpages  intpar(tracingpagescode)
  682. #define tracingoutput  intpar(tracingoutputcode)
  683. #define tracinglostchars  intpar(tracinglostcharscode)
  684. #define tracingcommands  intpar(tracingcommandscode)
  685. #define tracingrestores  intpar(tracingrestorescode)
  686. #define uchyph  intpar(uchyphcode)
  687. #define outputpenalty  intpar(outputpenaltycode)
  688. #define maxdeadcycles  intpar(maxdeadcyclescode)
  689. #define hangafter  intpar(hangaftercode)
  690. #define floatingpenalty  intpar(floatingpenaltycode)
  691. #define globaldefs  intpar(globaldefscode)
  692. #define curfam  intpar(curfamcode)
  693. #define escapechar  intpar(escapecharcode)
  694. #define defaulthyphenchar  intpar(defaulthyphencharcode)
  695. #define defaultskewchar  intpar(defaultskewcharcode)
  696. #define endlinechar  intpar(endlinecharcode)
  697. #define newlinechar  intpar(newlinecharcode)
  698. #define language  intpar(languagecode)
  699. #define lefthyphenmin  intpar(lefthyphenmincode)
  700. #define righthyphenmin  intpar(righthyphenmincode)
  701. #define holdinginserts  intpar(holdinginsertscode)
  702. #define errorcontextlines  intpar(errorcontextlinescode)
  703. #ifdef MLTEX
  704. #define char_sub_def_max    intpar(char_sub_def_max_code)
  705. #define tracing_char_sub_def    intpar(tracing_char_sub_def_code)
  706. #endif
  707. #ifdef ERW_INTERACTION
  708. #define interaction    intpar(interactionmodecode)
  709. #endif
  710.  
  711. #define dimen(s)     eqtb[(s)+scaledbase].cint
  712. #define dimenpar(s)  eqtb[(s)+dimenbase].cint /* a scaled quantity */
  713. #define parindent     dimenpar(parindentcode)
  714. #define mathsurround  dimenpar(mathsurroundcode)
  715. #define lineskiplimit  dimenpar(lineskiplimitcode)
  716. #define hsize  dimenpar(hsizecode)
  717. #define vsize  dimenpar(vsizecode)
  718. #define maxdepth  dimenpar(maxdepthcode)
  719. #define splitmaxdepth  dimenpar(splitmaxdepthcode)
  720. #define boxmaxdepth  dimenpar(boxmaxdepthcode)
  721. #define hfuzz  dimenpar(hfuzzcode)
  722. #define vfuzz  dimenpar(vfuzzcode)
  723. #define delimitershortfall  dimenpar(delimitershortfallcode)
  724. #define nulldelimiterspace  dimenpar(nulldelimiterspacecode)
  725. #define scriptspace  dimenpar(scriptspacecode)
  726. #define predisplaysize  dimenpar(predisplaysizecode)
  727. #define displaywidth  dimenpar(displaywidthcode)
  728. #define displayindent  dimenpar(displayindentcode)
  729. #define overfullrule  dimenpar(overfullrulecode)
  730. #define hangindent  dimenpar(hangindentcode)
  731. #define hoffset  dimenpar(hoffsetcode)
  732. #define voffset  dimenpar(voffsetcode)
  733. #define emergencystretch  dimenpar(emergencystretchcode)
  734.  
  735.  
  736. #define next(s) hash[s].v.LH
  737.     /* link for coalesced lists */
  738. #define ztext(s) hash[s].v.RH
  739.     /* string number for control sequence name */
  740. /* #define text(s) ztext(h) */
  741. #define hashisfull (hashused==hashbase)
  742.    /* test if all positions are occupied */
  743. #define fontidtext(s) ztext((s)+fontidbase)
  744.    /* a frozen font identifier's name */
  745.  
  746. #define savetype(s)  savestack[s].hh.b0
  747.   /* classifies a |savestack| entry */
  748. #define savelevel(s) savestack[s].hh.b1
  749.   /* saved level for regions 5 and 6, or group code */
  750. #define saveindex(s) savestack[s].hh.v.RH
  751.   /* |eqtb| location or |savestack| location */
  752.  
  753. #define saved(s)  savestack[(s)+saveptr].cint
  754.  
  755. #define endlinecharinactive()  ((endlinechar < 0) || (endlinechar > 255))
  756.  
  757. #define storenewtoken(s) \
  758.   do { register long_halfword q; \
  759.        q = getavail(); link(p)=q; info(q)=(s); \
  760.        p=q; /* |link(p)| is |null| */ } while(0)
  761. #define faststorenewtoken(s) \
  762.   do { register long_halfword q; \
  763.        fastgetavail(q); link(p)=q; info(q)=(s); \
  764.        p=q;  /* |link(p)| is |null| */ } while(0)
  765.  
  766.  
  767. #define topmark  curmark[topmarkcode]
  768. #define firstmark  curmark[firstmarkcode]
  769. #define botmark  curmark[botmarkcode]
  770. #define splitfirstmark  curmark[splitfirstmarkcode]
  771. #define splitbotmark  curmark[splitbotmarkcode]
  772.  
  773.  
  774. #define iflinefield(s) mem[(s)+1].cint
  775.  
  776. #define getxtokenoractivechar \
  777.   do { \
  778.     r_curcmd = getxtoken(); \
  779.     if ( r_curcmd == relax && curchr == noexpandflag ) { \
  780.       r_curcmd = 13;   /* active_char */ \
  781.       curchr = curtok - cstokenflag - activebase; \
  782.     } \
  783.   } while(0)
  784.  
  785.  
  786. #define dviout(s) \
  787.   do { dvibuf[dviptr] = (s); incr(dviptr); \
  788.        if (dviptr == dvilimit) dviswap(); } while(0)
  789.  
  790. #define location(s) mem[(s)+2].cint
  791.   /* \.{DVI} byte number for a movement command */
  792.  
  793.  
  794. #define nucleus(s) ((s)+1) /* the |nucleus| field of a noad */
  795. #define supscr(s)  ((s)+2) /* the |supscr| field of a noad */
  796. #define subscr(s)  ((s)+3) /* the |subscr| field of a noad */
  797. #define mathtype(s) link(s) /* a |halfword| in |mem| */
  798. #define fam(s)       font(s) /* a |quarterword| in |mem| */
  799.  
  800. #define leftdelimiter(s)  ((s)+4) /* first delimiter field of a noad */
  801. #define rightdelimiter(s) ((s)+5)
  802.    /* second delimiter field of a fraction noad */
  803. #define smallfam(s)  mem[s].qqqq.b0 /* |fam| for ``small'' delimiter */
  804. #define smallchar(s)  mem[s].qqqq.b1 /* |character| for ``small'' delimiter */
  805. #define largefam(s)   mem[s].qqqq.b2 /* |fam| for ``large'' delimiter */
  806. #define largechar(s)  mem[s].qqqq.b3 /* |character| for ``large'' delimiter */
  807. #define thickness(s)   width(s)  /* |thickness| field in a fraction noad */
  808. #define numerator(s)   supscr(s) /* |numerator| field in a fraction noad */
  809. #define denominator(s) subscr(s) /* |denominator| field in a fraction noad */
  810.  
  811. #define accentchr(s)  ((s)+4)   /* the |accent_chr| field of an accent noad */
  812. #define delimiter(s) nucleus(s) /* |delimiter| field in left and right noads */
  813. #define scriptsallowed(s) ((ztype(s)>=ordnoad)&&(ztype(s)<leftnoad))
  814.  
  815. #define displaymlist(s)      info((s)+1)
  816.    /* mlist to be used in display style */
  817. #define textmlist(s)         link((s)+1)
  818.    /* mlist to be used in text style */
  819. #define scriptmlist(s)       info((s)+2)
  820.    /* mlist to be used in script style */
  821. #define scriptscriptmlist(s) link((s)+2)
  822.    /* mlist to be used in scriptscript style */
  823.  
  824.  
  825. #if 0
  826. #define skipbyte(s) ((s).b0)
  827. #define nextchar(s) ((s).b1)
  828. #define opbyte(s)   ((s).b2)
  829. #define rembyte(s)  ((s).b3)
  830. #else
  831. #define skipbyte(s) *((quarterword *) &((s).b0))
  832. #define nextchar(s) *( ((quarterword *) &((s).b0)) + 1 )
  833. #define opbyte(s)   *( ((quarterword *) &((s).b0)) + 2 )
  834. #define rembyte(s)  ((s).b3)
  835.   /* *( ((quarterword *) &((s).b0)) + 3 ) */
  836. #endif
  837.  
  838. #define exttop(s)  ((s).b0) /* |top| piece in a recipe */
  839. #define extmid(s)  ((s).b1) /* |mid| piece in a recipe */
  840. #define extbot(s)  ((s).b2) /* |bot| piece in a recipe */
  841. #define extrep(s)  ((s).b3) /* |rep| piece in a recipe */
  842.  
  843.  
  844. #ifdef MLTEX
  845. #define char_list_exists(s) (equiv((s)+char_sub_base) > 0) /* min_halfword */
  846. #endif
  847.  
  848.         /* CharInfo() nur verwendet in readfontinfo() */
  849. #ifdef FONTPTR
  850. #ifdef MLTEX
  851. #define zcharinfo(s1,s2)   (*(charbase(s1)+effective_char(s2))).qqqq
  852. #else
  853. #define zcharinfo(s1,s2)   (*(charbase(s1)+(s2))).qqqq
  854. #endif
  855. #define CharInfo(s1,s2)   (*(charbase(s1)+(s2))).qqqq
  856. #define zcharwidth(s1,s2)  (*(widthbase(s1)+(s2).b0)).cint
  857. #else
  858. #ifdef MLTEX
  859. #define zcharinfo(s1,s2)   fontinfo[charbase(s1)+effective_char(s2)].qqqq
  860. #else
  861. #define zcharinfo(s1,s2)   fontinfo[charbase(s1)+(s2)].qqqq
  862. #endif
  863. #define CharInfo(s1,s2)   fontinfo[charbase(s1)+(s2)].qqqq
  864. #define zcharwidth(s1,s2)  fontinfo[widthbase(s1)+((s2).b0)].cint
  865. #endif
  866.  
  867. #if 0
  868. #define charexists(s)          (((s).b0) > minquarterword)
  869. #else        /* minquarterword = 0 */
  870. #define charexists(s)          (((s).cint) > 0x00ffffff)
  871. #endif
  872.  
  873. #ifdef FONTPTR
  874. #define zcharitalic(s1,s2) (*(italicbase(s1)+(((s2).b2)/4))).cint
  875. #define zcharheight(s1,s2) (*(heightbase(s1)+((s2)/16))).cint
  876. #define zchardepth(s1,s2)  (*(depthbase(s1)+((s2)%16))).cint
  877. #else
  878. #define zcharitalic(s1,s2) fontinfo[italicbase(s1) + (((s2).b2)/4)].cint
  879. #define zcharheight(s1,s2) fontinfo[heightbase(s1) + ((s2)/16)].cint
  880. #define zchardepth(s1,s2)  fontinfo[depthbase(s1) + ((s2)%16)].cint
  881. #endif
  882. #if 0
  883. #define heightdepth(s)         ((s).b1)
  884. #else
  885. #define heightdepth(s)    (*( ((quarterword *) &((s).b0)) + 1 ))
  886. #endif
  887.  
  888.    /* Tag field in char_info word: ... */
  889. #define notag    0    /* wird nirgends verwendet */
  890. #define ligtag    1
  891. #define listtag 2
  892. #define exttag    3
  893. #define chartag(s)             (((s).b2) % 4)
  894. #define mychartag(s)       ((unsigned short) ((s).cint & 0x00000300))
  895.                 /* Vergleich dann mit (..tag << 8) */
  896.  
  897. #ifdef FONTPTR
  898.  
  899. #define zcharkern(s1,s2) \
  900.    (*(kernbase(s1) + *( ((unsigned short *) &((s2).b0)) + 1 ))).cint
  901.  
  902. #define zligkernstart(s1,s2)   (ligkernbase(s1)+rembyte(s2))
  903.    /* beginning of lig/kern program */
  904.  
  905. #define zligkernrestart(s1,s2) \
  906.    (ligkernbase(s1)+ *( ((unsigned short *) &((s2).b0)) + 1) + \
  907.     (32768L-kernbaseoffset))
  908.  
  909. #else
  910.  
  911. #define zcharkern(s1,s2) \
  912.    fontinfo[kernbase(s1) + *( ((unsigned short *) &((s2).b0)) + 1 )].cint
  913.                 /* not +2, because sizeof(u_short) = 2 !! */
  914.     /* fontinfo[kernbase(s1) + 256*opbyte(s2)+rembyte(s2)].cint */
  915.  
  916. #define zligkernstart(s1,s2)   (ligkernbase(s1)+rembyte(s2))
  917.    /* beginning of lig/kern program */
  918.  
  919. #define zligkernrestart(s1,s2) \
  920.    (ligkernbase(s1)+ *( ((unsigned short *) &((s2).b0)) + 1) + \
  921.     (32768L-kernbaseoffset))
  922.   /* (ligkernbase(s1)+(256*opbyte(s2))+rembyte(s2)+(32768L-kernbaseoffset)) */
  923.  
  924. #endif
  925.  
  926.  
  927. #define zparam(s1,s2)  fontinfo[(s1) + parambase(s2)].cint
  928. #define param(s1,s2)       zparam(s1,s2)
  929.  
  930. #define slant(s)  param(slantcode,s)
  931.    /* slant to the right, per unit distance upward*/
  932. #define space(s)  param(spacecode,s) /* normal space between words*/
  933. #define spacestretch(s)  param(spacestretchcode,s) /* stretch between words*/
  934. #define spaceshrink(s)  param(spaceshrinkcode,s) /* shrink between words*/
  935. #define xheight(s)  param(xheightcode,s) /* one ex*/
  936. #define quad(s) param(quadcode,s) /* one em*/
  937. #define extraspace(s)  param(extraspacecode,s)
  938.    /* additional space at end of sentence*/
  939.  
  940. #define zmathsy(s1,s2) fontinfo[(s1)+parambase(famfnt((s2)+2))].cint
  941. #define mathsy(s1,s2)  zmathsy((s1),(s2))
  942. #define mathxheight(s) mathsy(5,s)   /* height of `\.x' */
  943. #define mathquad(s)    mathsy(6,s) /* \.{18mu} */
  944. #define num1(s)    mathsy(8,s) /* numerator shift-up in display styles */
  945. #define num2(s)    mathsy(9,s) /* numerator shift-up in non-display, non-\.{\\atop} */
  946. #define num3(s)    mathsy(10,s) /* numerator shift-up in non-display \.{\\atop} */
  947. #define denom1(s)    mathsy(11,s) /* denominator shift-down in display styles */
  948. #define denom2(s)    mathsy(12,s) /* denominator shift-down in non-display styles */
  949. #define sup1(s)    mathsy(13,s) /* superscript shift-up in uncramped display style */
  950. #define sup2(s)    mathsy(14,s) /* superscript shift-up in uncramped non-display */
  951. #define sup3(s)   mathsy(15,s) /* superscript shift-up in cramped styles */
  952. #define sub1(s)    mathsy(16,s) /* subscript shift-down if superscript is absent */
  953. #define sub2(s)    mathsy(17,s) /* subscript shift-down if superscript is present */
  954. #define supdrop(s)    mathsy(18,s) /* superscript baseline below top of large box */
  955. #define subdrop(s)    mathsy(19,s) /* subscript baseline below bottom of large box */
  956. #define delim1(s)    mathsy(20,s)
  957.   /* size of \.{\\atopwithdelims} delimiters in display styles */
  958. #define delim2(s)    mathsy(21,s)
  959.   /* size of \.{\\atopwithdelims} delimiters in non-displays */
  960. #define axisheight(s)    mathsy(22,s)
  961.   /* height of fraction lines above the baseline */
  962.  
  963. #define mathex(s) fontinfo[(s)+parambase(famfnt(cursize+3))].cint
  964. #define defaultrulethickness  mathex(8) /* thickness of \.{\\over} bars */
  965. #define bigopspacing1  mathex(9) /* minimum clearance above a displayed op */
  966. #define bigopspacing2  mathex(10) /* minimum clearance below a displayed op */
  967. #define bigopspacing3  mathex(11) /* minimum baselineskip above displayed op */
  968. #define bigopspacing4  mathex(12) /* minimum baselineskip below displayed op */
  969. #define bigopspacing5  mathex(13) /* padding above and below displayed limits */
  970.  
  971. #define crampedstyle(s)  (((s)&~1)+cramped)  /* cramp the style */
  972. #if 1
  973. #define substyle(s)  ((((s)/2)&~1)+scriptstyle+cramped) /* smaller and cramped */
  974. #define supstyle(s)  ((((s)/2)&~1)+scriptstyle+((s)&1)) /* smaller */
  975. #define numstyle(s)  ((s)+2-(((s)/3)&~1)) /* smaller unless already script-script */
  976. #define denomstyle(s)  (((s)&~1)+cramped+2-(((s)/3)&~1)) /* smaller, cramped */
  977. #else
  978. #define substyle(s)  (2*((s)/4)+scriptstyle+cramped) /* smaller and cramped */
  979. #define supstyle(s)  (2*((s)/4)+scriptstyle+((s)%2)) /* smaller */
  980. #define numstyle(s)  ((s)+2-2*((s)/6)) /* smaller unless already script-script */
  981. #define denomstyle(s)  (2*((s)/2)+cramped+2-2*((s)/6)) /* smaller, cramped */
  982. #endif
  983.  
  984. #define newhlist(s) mem[nucleus(s)].cint   /* the translation of an mlist */
  985.  
  986.  
  987. #define upart(s)  mem[(s)+heightoffset].cint /* pointer to \<u_j> token list */
  988. #define vpart(s)  mem[(s)+depthoffset].cint /* pointer to \<v_j> token list */
  989. #define extrainfo(s)  info((s)+listoffset) /* info to remember during template */
  990.  
  991. #define preamble  link(alignhead) /* the current preamble list */
  992.  
  993.  
  994. #define fitness(s)  subtype(s)
  995.    /* |very_loose_fit..tight_fit| on final line for this break */
  996. #define breaknode(s)  rlink(s) /* pointer to the corresponding passive node */
  997. #define zlinenumber(s)  llink(s) /* line that begins at this breakpoint */
  998. #define totaldemerits(s)  mem[(s)+2].cint
  999.    /* the quantity that \TeX\ minimizes */
  1000.  
  1001. #define curbreak(s)  rlink(s)
  1002.    /* in passive node, points to position of this breakpoint */
  1003. #define prevbreak(s)  llink(s)
  1004.    /* points to passive node that should precede this one */
  1005. #define serial(s)  info(s)  /* serial number for symbolic identification */
  1006.  
  1007.  
  1008. /* -------- BEGIN: Achtung, die Makros werden direkt in trybreak() verwendet */
  1009. #define converttobreakwidth(s)  \
  1010.   mem[prevr+(s)].cint = mem[prevr+(s)].cint-curactivewidth[s]+breakwidth[(s)-1]
  1011. #define storebreakwidth(s)  activewidth[s]=breakwidth[(s)-1]
  1012. #define newdeltatobreakwidth(s) \
  1013.   mem[q+(s)].cint = breakwidth[(s)-1]-curactivewidth[s]
  1014.  
  1015. #define newdeltafrombreakwidth(s) \
  1016.   mem[q+(s)].cint = curactivewidth[s]-breakwidth[(s)-1]
  1017.  
  1018. #define combinetwodeltas(s) \
  1019.   mem[prevr+(s)].cint = mem[prevr+(s)].cint+mem[r+(s)].cint
  1020. #define downdatewidth(s) \
  1021.   curactivewidth[s] = curactivewidth[s] - mem[prevr+(s)].cint
  1022.  
  1023. #define updateactive(s)  activewidth[s]=activewidth[s]+mem[r+(s)].cint
  1024. /* -------- END: Achtung, die Makros werden direkt in trybreak() verwendet */
  1025.  
  1026.  
  1027. #define brokenptr(s)  link((s)+1)
  1028.   /* an insertion for this class will break here if anywhere */
  1029. #define brokenins(s)  info((s)+1) /* this insertion might break at |broken_ptr| */
  1030. #define lastinsptr(s)  link((s)+2) /* the most recent insertion for this |subtype| */
  1031. #define bestinsptr(s)  info((s)+2) /* the optimum most recent insertion */
  1032.  
  1033.  
  1034. #ifdef TEXXET
  1035. #define L_code    2
  1036. #define begin_L_code    (L_code+before)
  1037. #define end_L_code    (L_code+after)
  1038.  
  1039. #define R_code    4
  1040. #define begin_R_code    (R_code+before)
  1041. #define end_R_code    (R_code+after)
  1042.  
  1043. #define end_LR(s)    odd(subtype(s))
  1044. #define end_LR_type(s)    (subtype(s)+after-before)
  1045. #define begin_LR_type(s)    (subtype(s)-after+before)
  1046.  
  1047. #define edge_node    stylenode
  1048. #define edge_node_size    stylenodesize
  1049. #define edge_dist(s)    depth(s)
  1050.  
  1051. #define LR_save    curlist.LRs_field
  1052.  
  1053. #define R_node    unsetnode
  1054. #define left_to_right    0
  1055. #define right_to_left    1
  1056. #define reflected    (1-cur_dir)
  1057.  
  1058. #define safe_info(p)    (((p) == 0L) ? 0L : info(p))
  1059. #endif
  1060.  
  1061.  
  1062. #define whatlang(s) link((s)+1) /* language number, in the range |0..255| */
  1063. #define whatlhm(s) ztype((s)+1) /* minimum left fragment, in the range |1..63| */
  1064. #define whatrhm(s) subtype((s)+1) /* minimum right fragment, in the range |1..63| */
  1065. #define writetokens(s)  link((s)+1) /* reference count of token list to write */
  1066. #define writestream(s)  info((s)+1) /* stream number (0 to 17) */
  1067. #define openname(s)  link((s)+1) /* string number of file name to open */
  1068. #define openarea(s)  info((s)+2) /* string number of file area for |open_name| */
  1069. #define openext(s)  link((s)+2) /* string number of file extension for |open_name| */
  1070.  
  1071. /* -- end -- */
  1072.