home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / dec93 / dev / misc / cweb.lha / CWeb / cweave-p.ch < prev    next >
Encoding:
Text File  |  1993-12-21  |  38.8 KB  |  1,300 lines

  1.                                 -*-Web-*-
  2. This file, CWEAVE-P.CH, is part of CWEB-p.
  3. It is a changefile for CWEAVE.W, Version 3.0.
  4.  
  5. Authors and Contributors:
  6. (H2B) Hans-Hermann Bode, Universität Osnabrück,
  7.   (hhbode@@dosuni1.rz.uni-osnabrueck.de or HHBODE@@DOSUNI1.BITNET).
  8.  
  9. (KG) Klaus Guntermann, TH Darmstadt,
  10.   (guntermann@@iti.informatik.th-darmstadt.de).
  11.  
  12. (AS) Andreas Scherer,
  13.   Abt-Wolf-Straße 17, 96215 Lichtenfels, Germany.
  14.  
  15. (CS) Carsten Steger, Universität München,
  16.   carsten.steger@informatik.tu-muenchen.de
  17.  
  18. Caveat utilitor:  Some of the source code introduced by this change file is
  19. made conditional to the use of specific compilers on specific systems.
  20. This applies to places marked with `#ifdef __TURBOC__' and `#ifdef _AMIGA'.
  21.  
  22. This program is distributed WITHOUT ANY WARRANTY, express or implied.
  23.  
  24. The following copyright notice extends to this changefile only, not to
  25. the masterfile CWEAVE.W.
  26.  
  27. Copyright (C) 1993 Andreas Scherer
  28. Copyright (C) 1991, 1993 Carsten Steger
  29. Copyright (C) 1991, 1992 Hans-Hermann Bode
  30.  
  31. Permission is granted to make and distribute verbatim copies of this
  32. document provided that the copyright notice and this permission notice
  33. are preserved on all copies.
  34.  
  35. Permission is granted to copy and distribute modified versions of this
  36. document under the conditions for verbatim copying, provided that the
  37. entire resulting derived work is distributed under the terms of a
  38. permission notice identical to this one.
  39.  
  40. Version history:
  41.  
  42. Version    Date        Author    Comment
  43. a1/t1    10 Oct 1991    H2B    First attempt for CWEAVE.W 2.1.
  44. p2    13 Feb 1992    H2B    Updated for CWEAVE.W 2.4, ANSI and Turbo
  45.                 changefiles merged together, typesetting of
  46.                 certain ANSI and special constructions fixed.
  47. p3    16 Apr 1992    H2B    Updated for CWEAVE.W 2.5.
  48. p4    22 Jun 1992    H2B    Updated for CWEAVE.W 2.6, retaining hack for
  49.                 underlining of customized iddentifiers.
  50. p5    21 Jul 1992    H2B    Extensions for C++ implemented.
  51. p5a    24 Jul 1992    KG    adaptions for other ANSI C compiler
  52. p5b    28 Jul 1992    H2B    Remaining headers converted to ANSI style.
  53. p5c    30 Jul 1992    KG    removed comments used after #endif
  54. p6    06 Sep 1992    H2B    Updated for CWEAVE.W 2.7, |dot_dot_dot| added,
  55.                 proper typesetting of formatted macro
  56.                 identifiers provided, bug in processing
  57.                 short comments fixed.
  58. p6a     15 Mar 1993     AS      adaptions for SAS/C 6.0 and use of German
  59.                                 macro file gcwebmac.tex
  60. p6b     28 Jul 1993     AS      new patch level due to minor changes
  61.         01 Aug 1993     AS      missing `ptrdiff_t' datatype included
  62. p6c    04 Sep 1993    AS    new patch level in accordance with Common
  63. p6d    09 Oct 1993    AS    Updated for CWEAVE.W 2.8. (This was p7)
  64. p7    13 Nov 1992    H2B    Converted to master change file, updated for
  65.                 CWEAVE.W 2.8. [Not released.]
  66. p7.5    29 Nov 1992    H2B    Updated for CWEAVE.W 2.9beta. [Not released.]
  67. p8    04 Dec 1992    H2B    Updated for CWEAVE.W 2.9++ (stuff went into
  68.                 the source file). [Not released.]
  69. p8a    10 Mar 1993    H2B    Restructured for public release. [Not released.]
  70. p8b    15 Apr 1993    H2B    Updated for CWEAVE.W 3.0beta. [Not released.]
  71. p8c    21 Jun 1993    H2B    Updated for final CWEAVE.W 3.0.
  72. p8d    25 Oct 1993    AS    Incorporated with Amiga version 2.8 [p7] and
  73.                 updated to version 3.0.
  74. ------------------------------------------------------------------------------
  75. @x l.1
  76. % This file is part of CWEB.
  77. % This program by Silvio Levy and Donald E. Knuth
  78. % is based on a program by Knuth.
  79. % It is distributed WITHOUT ANY WARRANTY, express or implied.
  80. % Version 3.0 --- June 1993
  81.  
  82. % Copyright (C) 1987,1990,1993 Silvio Levy and Donald E. Knuth
  83. @y
  84. % This file, CWEAVE.W, is part of CWEB-p.
  85. % This program by Silvio Levy and Donald E. Knuth
  86. % is based on a program by Knuth.
  87. % It is distributed WITHOUT ANY WARRANTY, express or implied.
  88. % Version 2.6 --- Don Knuth, June 1992
  89. % Version 2.6 [p5] --- Hans-Hermann Bode, July 1992
  90. % Version 2.6 [p5a] --- Klaus Guntermann, July 1992
  91. % Version 2.6 [p5b] --- Hans-Hermann Bode, July 1992
  92. % Version 2.6 [p5c] --- Klaus Guntermann, July 1992
  93. % Version 2.7 --- Don Knuth, July 1992
  94. % Version 2.7 [p6] --- Hans-Hermann Bode, September 1992
  95. % Version 2.7 [p6a] --- Andreas Scherer, March 1993
  96. % Version 2.7 [p6b] --- Andreas Scherer, July 1993
  97. % Version 2.7 [p6c] --- Andreas Scherer, September 1993
  98. % Version 2.8 --- Don Knuth, September 1992
  99. % Version 2.8 [p7] --- Andreas Scherer, October 1993
  100. % Version 3.0 --- Don Knuth, June 1993
  101. % Version 3.0 [p8c] --- Hans-Hermann Bode, June 1993
  102. % Version 3.0 [p8d] --- Andreas Scherer, October 1993
  103.  
  104. % Copyright (C) 1987,1990,1993 Silvio Levy and Donald E. Knuth
  105. % Copyright (C) 1991,1992,1993 Hans-Hermann Bode
  106. % Copyright (C) 1991,1993 Carsten Steger
  107. % Copyright (C) 1993 Andreas Scherer
  108. @z
  109. ------------------------------------------------------------------------------
  110. @x l.30
  111. \def\title{CWEAVE (Version 3.0)}
  112. @y
  113. \def\title{CWEAVE (Version 3.0 [p8d])}
  114. @z
  115. ------------------------------------------------------------------------------
  116. @x l.34
  117.   \centerline{(Version 3.0)}
  118. @y
  119.   \centerline{(Version 3.0 [p8d])}
  120. @z
  121. ------------------------------------------------------------------------------
  122. @x l.40
  123. Copyright \copyright\ 1987, 1990, 1993 Silvio Levy and Donald E. Knuth
  124. @y
  125. Copyright \copyright\ 1987, 1990, 1993 Silvio Levy and Donald E. Knuth
  126. \smallskip\noindent
  127. Copyright \copyright\ 1991, 1992, 1993 Hans-Hermann Bode
  128. \smallskip\noindent
  129. Copyright \copyright\ 1991, 1993 Carsten Steger
  130. \smallskip\noindent
  131. Copyright \copyright\ 1993 Andreas Scherer
  132. @z
  133. ------------------------------------------------------------------------------
  134. Activate this, if only the changed modules should be printed.
  135. x l.51
  136. \let\maybe=\iftrue
  137. y
  138. \let\maybe=\iffalse
  139. z
  140. ------------------------------------------------------------------------------
  141. @x l.54
  142. This is the \.{CWEAVE} program by Silvio Levy and Donald E. Knuth,
  143. based on \.{WEAVE} by Knuth.
  144. @y
  145. This is the \.{CWEAVE} program by Silvio Levy and Donald E. Knuth,
  146. based on \.{WEAVE} by Knuth, with {\mc ANSI-C} conforming changes
  147. and {\mc TURBO}-\CPLUSPLUS/ implementation made by Hans-Hermann Bode.
  148. Use of German macros and {\mc SAS/C~6.0} implementation made by Andreas
  149. Scherer based on ideas by Carsten Steger.
  150. @z
  151. ------------------------------------------------------------------------------
  152. @x l.64
  153. @d banner "This is CWEAVE (Version 3.0)\n"
  154. @y
  155. @d banner "This is CWEAVE (Version 3.0 [p8d])\n"
  156. @z
  157. ------------------------------------------------------------------------------
  158. @x l.78
  159. @<Predecl...@>=
  160. extern int strlen(); /* length of string */
  161. extern int strcmp(); /* compare strings lexicographically */
  162. extern char* strcpy(); /* copy one string to another */
  163. extern int strncmp(); /* compare up to $n$ string characters */
  164. extern char* strncpy(); /* copy up to $n$ string characters */
  165. @y
  166. @<Include files@>=
  167. #include <string.h>
  168. @z
  169. ------------------------------------------------------------------------------
  170. @x l.94
  171. int main (ac, av)
  172. int ac; /* argument count */
  173. char **av; /* argument values */
  174. @y
  175. int main (int ac, char **av)
  176. /* argument count and argument values */
  177. @z
  178. ------------------------------------------------------------------------------
  179. @x l.139
  180. @i common.h
  181. @y
  182. @i common-p.h
  183. @z
  184. ------------------------------------------------------------------------------
  185. @x l.223
  186. typedef struct xref_info {
  187.   sixteen_bits num; /* section number plus zero or |def_flag| */
  188.   struct xref_info *xlink; /* pointer to the previous cross-reference */
  189. } xref_info;
  190. typedef xref_info *xref_pointer;
  191. @y
  192. typedef struct xref_info {
  193.   sixteen_bits num; /* section number plus zero or |def_flag| */
  194.   struct xref_info HUGE *xlink; /* pointer to the previous cross-reference */
  195. } xref_info;
  196. typedef xref_info HUGE *xref_pointer;
  197. @z
  198. ------------------------------------------------------------------------------
  199. @x l.230
  200. xref_info xmem[max_refs]; /* contains cross-reference information */
  201. xref_pointer xmem_end = xmem+max_refs-1;
  202. @y
  203. #ifdef __TURBOC__
  204. xref_info HUGE *xmem; /* contains cross-reference information */
  205. xref_pointer xmem_end;
  206. #else
  207. xref_info xmem[max_refs]; /* contains cross-reference information */
  208. xref_pointer xmem_end = xmem+max_refs-1;
  209. #endif
  210. @z
  211. ------------------------------------------------------------------------------
  212. @x l.244
  213. xref_ptr=xmem; name_dir->xref=(char*)xmem; xref_switch=0; section_xref_switch=0;
  214. @y
  215. #ifdef __TURBOC__
  216. xmem=allocsafe(max_refs,sizeof(*xmem));
  217. xmem_end=xmem+max_refs-1;
  218. #endif
  219. xref_ptr=xmem; name_dir->xref=(char HUGE*)xmem; xref_switch=0; section_xref_switch=0;
  220. @z
  221. ------------------------------------------------------------------------------
  222. @x l.262
  223. @c
  224. void
  225. new_xref(p)
  226. name_pointer p;
  227. @y
  228. @c static void new_xref(name_pointer p)
  229. @z
  230. ------------------------------------------------------------------------------
  231. @x l.279
  232.   append_xref(m); xref_ptr->xlink=q; p->xref=(char*)xref_ptr;
  233. @y
  234.   append_xref(m); xref_ptr->xlink=q; p->xref=(char HUGE*)xref_ptr;
  235. @z
  236. ------------------------------------------------------------------------------
  237. @x l.293
  238. @c
  239. void
  240. new_section_xref(p)
  241. name_pointer p;
  242. @y
  243. @c static void new_section_xref(name_pointer p)
  244. @z
  245. ------------------------------------------------------------------------------
  246. @x l.306
  247.   if (r==xmem) p->xref=(char*)xref_ptr;
  248. @y
  249.   if (r==xmem) p->xref=(char HUGE*)xref_ptr;
  250. @z
  251. ------------------------------------------------------------------------------
  252. @x l.313
  253. @c
  254. void
  255. set_file_flag(p)
  256. name_pointer p;
  257. @y
  258. @c static void set_file_flag(name_pointer p)
  259. @z
  260. ------------------------------------------------------------------------------
  261. @x l.323
  262.   p->xref = (char *)xref_ptr;
  263. @y
  264.   p->xref = (char HUGE*)xref_ptr;
  265. @z
  266. ------------------------------------------------------------------------------
  267. @x l.334
  268. typedef token *token_pointer;
  269. typedef token_pointer *text_pointer;
  270. @y
  271. typedef token HUGE *token_pointer;
  272. typedef token_pointer HUGE *text_pointer;
  273. @z
  274. ------------------------------------------------------------------------------
  275. @x l.343
  276. token tok_mem[max_toks]; /* tokens */
  277. token_pointer tok_mem_end = tok_mem+max_toks-1; /* end of |tok_mem| */
  278. @y
  279. #ifdef __TURBOC__
  280. token HUGE *tok_mem; /* tokens */
  281. token_pointer tok_mem_end; /* end of |tok_mem| */
  282. #else
  283. token tok_mem[max_toks]; /* tokens */
  284. token_pointer tok_mem_end = tok_mem+max_toks-1; /* end of |tok_mem| */
  285. #endif
  286. @z
  287. ------------------------------------------------------------------------------
  288. @x l.353
  289. tok_ptr=tok_mem+1; text_ptr=tok_start+1; tok_start[0]=tok_mem+1;
  290. @y
  291. #ifdef __TURBOC__
  292. tok_mem=allocsafe(max_toks,sizeof(*tok_mem));
  293. tok_mem_end=tok_mem+max_toks-1;
  294. #endif
  295. tok_ptr=tok_mem+1; text_ptr=tok_start+1; tok_start[0]=tok_mem+1;
  296. @z
  297. ------------------------------------------------------------------------------
  298. @x l.359
  299. @c
  300. int names_match(p,first,l,t)
  301. name_pointer p; /* points to the proposed match */
  302. char *first; /* position of first character of string */
  303. int l; /* length of identifier */
  304. eight_bits t; /* desired ilk */
  305. @y
  306. @c int names_match(name_pointer p,char *first,int l,eight_bits t)
  307. /* |p|: points to the proposed match */
  308. /* |first|:  position of first character of string */
  309. /* |l|: length of identifier */
  310. /* |t|: desired |ilk| */
  311. @z
  312. ------------------------------------------------------------------------------
  313. @x l.342
  314.   return !strncmp(first,p->byte_start,l);
  315. @y
  316.   return( !strncmp(first,p->byte_start,l) );
  317. @z
  318. ------------------------------------------------------------------------------
  319. @x l.370
  320. void
  321. init_p(p,t)
  322. name_pointer p;
  323. eight_bits t;
  324. @y
  325. void init_p(name_pointer p,eight_bits t)
  326. @z
  327. ------------------------------------------------------------------------------
  328. @x l.375
  329.   p->ilk=t; p->xref=(char*)xmem;
  330. @y
  331.   p->ilk=t; p->xref=(char HUGE*)xmem;
  332. @z
  333. ------------------------------------------------------------------------------
  334. @x l.378
  335. void
  336. init_node(p)
  337. name_pointer p;
  338. @y
  339. void init_node(name_pointer p)
  340. @z
  341. ------------------------------------------------------------------------------
  342. @x l.382
  343.   p->xref=(char*)xmem;
  344. @y
  345.   p->xref=(char HUGE*)xmem;
  346. @z
  347. ------------------------------------------------------------------------------
  348. We append AMIGA specific keywords from Commodore and {\mc SAS}~Institute.
  349. @x l.467
  350. id_lookup("while",NULL,for_like);
  351. @y
  352. id_lookup("while",NULL,for_like);
  353.  
  354. #ifdef _AMIGA
  355. if(use_amiga_keywords) {
  356.    @<Keywords specific to {\mc SAS/C 6.0}@>@;
  357.    @<Registers of the Amiga@>@;
  358.    @<Keywords by Commodore@>@;
  359.    }
  360. #endif
  361. @z
  362. ------------------------------------------------------------------------------
  363. @x l.562
  364. @<Predec...@>=
  365. void   skip_limbo();
  366.  
  367. @ @c
  368. void
  369. skip_limbo() {
  370. @y
  371. @<Predec...@>=
  372. static void skip_limbo(void);
  373.  
  374. @ @c
  375. static void skip_limbo(void) {
  376. @z
  377. ------------------------------------------------------------------------------
  378. @x l.587
  379. @c
  380. unsigned
  381. skip_TeX() /* skip past pure \TEX/ code */
  382. @y
  383. @c static unsigned skip_TeX(void) /* skip past pure \TEX/ code */
  384. @z
  385. ------------------------------------------------------------------------------
  386. @x l.655
  387. @<Predecl...@>=
  388. eight_bits get_next();
  389.  
  390. @ @c
  391. eight_bits
  392. get_next() /* produces the next input token */
  393. @y
  394. @<Predecl...@>=
  395. static eight_bits get_next(void);
  396.  
  397. @ @c
  398. static eight_bits get_next(void) /* produces the next input token */
  399. @z
  400. ------------------------------------------------------------------------------
  401. Macro invocation may have multiple side effects.
  402. @x l.798
  403.     *id_loc++='$'; *id_loc++=toupper(*loc++);
  404. @y
  405.     *id_loc++='$'; *id_loc++=toupper(*loc); *loc++;
  406. @z
  407. ------------------------------------------------------------------------------
  408. @x l.933
  409. @<Predecl...@>=
  410. void skip_restricted();
  411.  
  412. @ @c
  413. void
  414. skip_restricted()
  415. @y
  416. @<Predecl...@>=
  417. void skip_restricted(void);
  418.  
  419. @ @c
  420. void skip_restricted(void)
  421. @z
  422. ------------------------------------------------------------------------------
  423. @x l.983
  424. @ The overall processing strategy in phase one has the following
  425. straightforward outline.
  426.  
  427. @<Predecl...@>=
  428. void phase_one();
  429.  
  430. @ @c
  431. void
  432. phase_one() {
  433. @y
  434. @ The overall processing strategy in phase one has the following
  435. straightforward outline.
  436.  
  437. @<Predecl...@>=
  438. static void phase_one(void);
  439.  
  440. @ @c
  441. static void phase_one(void) {
  442. @z
  443. ------------------------------------------------------------------------------
  444. @x l.1037
  445. @<Predecl...@>=
  446. void C_xref();
  447.  
  448. @ @c
  449. void
  450. C_xref( spec_ctrl ) /* makes cross-references for \CEE/ identifiers */
  451.   eight_bits spec_ctrl;
  452. @y
  453. @<Predecl...@>=
  454. static void C_xref(eight_bits);
  455.  
  456. @ @c
  457. static void C_xref( eight_bits spec_ctrl )
  458.    /* makes cross-references for \CEE/ identifiers */
  459. @z
  460. ------------------------------------------------------------------------------
  461. @x l.1065
  462. @<Predecl...@>=
  463. void outer_xref();
  464.  
  465. @ @c
  466. void
  467. outer_xref() /* extension of |C_xref| */
  468. @y
  469. @<Predecl...@>=
  470. static void outer_xref(void);
  471.  
  472. @ @c
  473. static void outer_xref(void) /* extension of |C_xref| */
  474. @z
  475. ------------------------------------------------------------------------------
  476. @x l.1168
  477.             else lhs->xref=(char*)q->xlink;
  478. @y
  479.             else lhs->xref=(char HUGE*)q->xlink;
  480. @z
  481. ------------------------------------------------------------------------------
  482. @x l.1226
  483. @<Predecl...@>=
  484. void section_check();
  485.  
  486. @ @c
  487. void
  488. section_check(p)
  489. name_pointer p; /* print anomalies in subtree |p| */
  490. @y
  491. @<Predecl...@>=
  492. static void section_check(name_pointer);
  493.  
  494. @ @c
  495. static void section_check(name_pointer p)
  496.    /* print anomalies in subtree |p| */
  497. @z
  498. ------------------------------------------------------------------------------
  499. @x l.1283
  500. void
  501. flush_buffer(b,per_cent,carryover)
  502. char *b;  /* outputs from |out_buf+1| to |b|,where |b<=out_ptr| */
  503. boolean per_cent,carryover;
  504. @y
  505. static void flush_buffer(char *b,boolean per_cent,boolean carryover)
  506.    /* outputs from |out_buf+1| to |b|, where |b<=out_ptr| */
  507. @z
  508. ------------------------------------------------------------------------------
  509. @x l.1312
  510. void
  511. finish_line() /* do this at the end of a line */
  512. @y
  513. static void finish_line(void) /* do this at the end of a line */
  514. @z
  515. ------------------------------------------------------------------------------
  516. % Additionally to the AMIGA keywords there is also a German version of
  517. % the TeX macros called gcwebmac.tex. You may include these macros by
  518. % setting the `+g' command line switch.
  519. @x l.1327
  520. `\.{\\input cwebmac}'.
  521.  
  522. @<Set init...@>=
  523. out_ptr=out_buf+1; out_line=1; active_file=tex_file;
  524. *out_ptr='c'; tex_printf("\\input cwebma");
  525. @y
  526. `\.{\\input ccwebmac}' or `\.{\\input gcwebmac}' if the `\.{+g}' option was
  527. set.
  528.  
  529. @<Set init...@>=
  530. if(use_german_macros) {
  531.    out_ptr=out_buf+1; out_line=1; active_file=tex_file;
  532.    *out_ptr='c'; tex_printf("\\input gcwebma");
  533.    }
  534. else {
  535.    out_ptr=out_buf+1; out_line=1; active_file=tex_file;
  536.    *out_ptr='c'; tex_printf("\\input ccwebma");
  537.    }
  538. @z
  539. ------------------------------------------------------------------------------
  540. @x l.1344
  541. void
  542. out_str(s) /* output characters from |s| to end of string */
  543. char *s;
  544. @y
  545. static void out_str(char*s) /* output characters from |s| to end of string */
  546. @z
  547. ------------------------------------------------------------------------------
  548. @x l.1362
  549. @<Predecl...@>=
  550. void break_out();
  551.  
  552. @ @c
  553. void
  554. break_out() /* finds a way to break the output line */
  555. @y
  556. @<Predecl...@>=
  557. static void break_out(void);
  558.  
  559. @ @c static void break_out(void) /* finds a way to break the output line */
  560. @z
  561. ------------------------------------------------------------------------------
  562. @x l.1401
  563. void
  564. out_section(n)
  565. sixteen_bits n;
  566. @y
  567. static void out_section(sixteen_bits n)
  568. @z
  569. ------------------------------------------------------------------------------
  570. @x l.1415
  571. void
  572. out_name(p)
  573. name_pointer p;
  574. {
  575.   char *k, *k_end=(p+1)->byte_start; /* pointers into |byte_mem| */
  576. @y
  577. static void out_name(name_pointer p)
  578. {
  579.   char HUGE *k;
  580.   char HUGE *k_end=(p+1)->byte_start; /* pointers into |byte_mem| */
  581. @z
  582. ------------------------------------------------------------------------------
  583. @x l.1442
  584. void
  585. copy_limbo()
  586. @y
  587. static void copy_limbo(void)
  588. @z
  589. ------------------------------------------------------------------------------
  590. @x l.1477
  591. eight_bits
  592. copy_TeX()
  593. @y
  594. static eight_bits copy_TeX(void)
  595. @z
  596. ------------------------------------------------------------------------------
  597. @x l.1505
  598. @<Predec...@>=
  599. int copy_comment();
  600.  
  601. @ @c
  602. int copy_comment(is_long_comment,bal) /* copies \TEX/ code in comments */
  603. boolean is_long_comment; /* is this a traditional \CEE/ comment? */
  604. int bal; /* brace balance */
  605. @y
  606. @c static copy_comment(boolean is_long_comment,int bal)
  607.    /* copies \TeX\ code in comments */
  608.    /* |is_long_comment|: is this a traditional \CEE/ comment? */
  609.    /* |bal|: brace balance */
  610. @z
  611. ------------------------------------------------------------------------------
  612. @x l.1731
  613. void
  614. print_cat(c) /* symbolic printout of a category */
  615. eight_bits c;
  616. @y
  617. static void print_cat(eight_bits c) /* symbolic printout of a category */
  618. @z
  619. ------------------------------------------------------------------------------
  620. @x l.1974
  621. @i prod.w
  622. @y
  623. @i prod-p.w
  624. @z
  625. ------------------------------------------------------------------------------
  626. The function |print_text| is never called in CWEAVE.
  627. @x l.2059
  628. void
  629. print_text(p) /* prints a token list for debugging; not used in |main| */
  630. text_pointer p;
  631. @y
  632. static void print_text(text_pointer p)
  633.    /* prints a token list for debugging; not used in |main| */
  634. @z
  635. ------------------------------------------------------------------------------
  636. @x l.2184
  637. @ @c
  638. void
  639. app_str(s)
  640. char *s;
  641. @y
  642. @ @c static void app_str(char *s)
  643. @z
  644. ------------------------------------------------------------------------------
  645. @x l.2191
  646. void
  647. big_app(a)
  648. token a;
  649. @y
  650. static void big_app(token a)
  651. @z
  652. ------------------------------------------------------------------------------
  653. @x l.2208
  654. void
  655. big_app1(a)
  656. scrap_pointer a;
  657. @y
  658. static void big_app1(scrap_pointer a)
  659. @z
  660. ------------------------------------------------------------------------------
  661. @x l.2309
  662. token_pointer
  663. find_first_ident(p)
  664. text_pointer p;
  665. @y
  666. static token_pointer find_first_ident(text_pointer p)
  667. @z
  668. ------------------------------------------------------------------------------
  669. @x l.2336
  670. void
  671. make_reserved(p) /* make the first identifier in |p->trans| like |int| */
  672. scrap_pointer p;
  673. @y
  674. static void make_reserved(scrap_pointer p)
  675. /* make the first identifier in |p->trans| like |int| */
  676. @z
  677. ------------------------------------------------------------------------------
  678. @x l.2367
  679. void
  680. make_underlined(p)
  681. /* underline the entry for the first identifier in |p->trans| */
  682. scrap_pointer p;
  683. @y
  684. static void make_underlined(scrap_pointer p)
  685. /* underline the entry for the first identifier in |p->trans| */
  686. @z
  687. ------------------------------------------------------------------------------
  688. @x l.2384
  689. @<Predecl...@>=
  690. void  underline_xref();
  691.  
  692. @ @c
  693. void
  694. underline_xref(p)
  695. name_pointer p;
  696. @y
  697. @<Predecl...@>=
  698. static void underline_xref(name_pointer);
  699.  
  700. @ @c
  701. static void underline_xref(name_pointer p)
  702. @z
  703. ------------------------------------------------------------------------------
  704. @x l.2420
  705.   p->xref=(char*)xref_ptr;
  706. @y
  707.   p->xref=(char HUGE*)xref_ptr;
  708. @z
  709. ------------------------------------------------------------------------------
  710. CWeave indents declarations after old-style function definitions.
  711. That's just awful!  Make this better looking!  You won't see the effect of
  712. this change if you use the ANSI-style function definitions.
  713. @x l.2128
  714. @<Cases for |exp|@>=
  715. if (cat1==lbrace || cat1==int_like || cat1==decl) {
  716.   make_underlined(pp); big_app1(pp); big_app(indent); app(indent);
  717.   reduce(pp,1,fn_decl,0,1);
  718. }
  719. @y
  720. @<Cases for |exp|@>=
  721. if(cat1==lbrace || cat1==int_like || cat1==decl) {
  722.   make_underlined(pp); big_app1(pp);
  723.   if (indent_param_decl) {
  724.     big_app(indent); app(indent);
  725.   }
  726.   reduce(pp,1,fn_decl,0,1);
  727. }
  728. @z
  729. ----------------------------------------------------------------------
  730. The most important change on indentation.
  731. @x l.2534
  732. @ @<Cases for |decl_head|@>=
  733. if (cat1==comma) {
  734.   big_app2(pp); big_app(' '); reduce(pp,2,decl_head,-1,33);
  735. }
  736. else if (cat1==unorbinop) {
  737.   big_app1(pp); big_app('{'); big_app1(pp+1); big_app('}');
  738.   reduce(pp,2,decl_head,-1,34);
  739. }
  740. else if (cat1==exp && cat2!=lpar && cat2!=exp) {
  741.   make_underlined(pp+1); squash(pp,2,decl_head,-1,35);
  742. }
  743. else if ((cat1==binop||cat1==colon) && cat2==exp && (cat3==comma ||
  744.     cat3==semi || cat3==rpar))
  745.   squash(pp,3,decl_head,-1,36);
  746. else if (cat1==cast) squash(pp,2,decl_head,-1,37);
  747. else if (cat1==lbrace || (cat1==int_like&&cat2!=colcol) || cat1==decl) {
  748.   big_app1(pp); big_app(indent); app(indent); reduce(pp,1,fn_decl,0,38);
  749. }
  750. else if (cat1==semi) squash(pp,2,decl,-1,39);
  751. @y
  752. @ @<Cases for |decl_head|@>=
  753. if (cat1==comma) {
  754.   big_app2(pp); big_app(' '); reduce(pp,2,decl_head,-1,33);
  755. }
  756. else if (cat1==unorbinop) {
  757.   big_app1(pp); big_app('{'); big_app1(pp+1); big_app('}');
  758.   reduce(pp,2,decl_head,-1,34);
  759. }
  760. else if (cat1==exp && cat2!=lpar && cat2!=exp) {
  761.   make_underlined(pp+1); squash(pp,2,decl_head,-1,35);
  762. }
  763. else if ((cat1==binop||cat1==colon) && cat2==exp && (cat3==comma ||
  764.     cat3==semi || cat3==rpar))
  765.   squash(pp,3,decl_head,-1,36);
  766. else if (cat1==cast) squash(pp,2,decl_head,-1,37);
  767. else if (cat1==lbrace || (cat1==int_like&&cat2!=colcol) || cat1==decl) {
  768.   big_app1(pp);
  769.   if (indent_param_decl) {
  770.     big_app(indent); app(indent);
  771.   }
  772.   reduce(pp,1,fn_decl,0,38);
  773. }
  774. else if (cat1==semi) squash(pp,2,decl,-1,39);
  775. @z
  776. ------------------------------------------------------------------------------
  777. Another change on indentation.
  778. @x l.2605
  779. @ @<Cases for |fn_decl|@>=
  780. if (cat1==decl) {
  781.   big_app1(pp); big_app(force); big_app1(pp+1); reduce(pp,2,fn_decl,0,51);
  782. }
  783. else if (cat1==stmt) {
  784.   big_app1(pp); app(outdent); app(outdent); big_app(force);
  785.   big_app1(pp+1); reduce(pp,2,function,-1,52);
  786. }
  787. @y
  788. @ @<Cases for |fn_decl|@>=
  789. if (cat1==decl) {
  790.   big_app1(pp); big_app(force); big_app1(pp+1); reduce(pp,2,fn_decl,0,51);
  791. }
  792. else if (cat1==stmt) {
  793.   big_app1(pp);
  794.   if (indent_param_decl) {
  795.     app(outdent); app(outdent);
  796.   }
  797.   big_app(force);
  798.   big_app1(pp+1); reduce(pp,2,function,-1,52);
  799. }
  800. @z
  801. ----------------------------------------------------------------------
  802. @x l.2863
  803. void
  804. reduce(j,k,c,d,n)
  805. scrap_pointer j;
  806. eight_bits c;
  807. short k, d, n;
  808. @y
  809. static void reduce(scrap_pointer j, short k, eight_bits c, short d, short n)
  810. @z
  811. ------------------------------------------------------------------------------
  812. @x l.2893
  813. void
  814. squash(j,k,c,d,n)
  815. scrap_pointer j;
  816. eight_bits c;
  817. short k, d, n;
  818. @y
  819. static void squash(scrap_pointer j, short k, eight_bits c, short d, short n)
  820. @z
  821. ------------------------------------------------------------------------------
  822. @x l.2989
  823. text_pointer
  824. translate() /* converts a sequence of scraps */
  825. @y
  826. static text_pointer translate(void) /* converts a sequence of scraps */
  827. @z
  828. ------------------------------------------------------------------------------
  829. @x l.3054
  830. void
  831. C_parse(spec_ctrl) /* creates scraps from \CEE/ tokens */
  832.   eight_bits spec_ctrl;
  833. @y
  834. static void C_parse(eight_bits spec_ctrl)
  835.   /* creates scraps from \CEE/ tokens */
  836. @z
  837. ------------------------------------------------------------------------------
  838. @x l.3124
  839.   @t\4@>  @<Cases involving nonstandard characters@>@;
  840. @y
  841.   @#@<Cases involving nonstandard characters@>@;@#
  842. @z
  843. ------------------------------------------------------------------------------
  844. @x l.3273
  845. @<Predec...@>=
  846. void app_cur_id();
  847.  
  848. @ @c
  849. void
  850. app_cur_id(scrapping)
  851. boolean scrapping; /* are we making this into a scrap? */
  852. @y
  853. @<Predec...@>=
  854. void app_cur_id(boolean);
  855.  
  856. @ @c
  857. void app_cur_id(boolean scrapping) /* are we making this into a scrap? */
  858. @z
  859. ------------------------------------------------------------------------------
  860. @x l.3298
  861. text_pointer
  862. C_translate()
  863. @y
  864. static text_pointer C_translate(void)
  865. @z
  866. ------------------------------------------------------------------------------
  867. @x l.3320
  868. void
  869. outer_parse() /* makes scraps from \CEE/ tokens and comments */
  870. @y
  871. static void outer_parse(void) /* makes scraps from \CEE/ tokens and comments */
  872. @z
  873. ------------------------------------------------------------------------------
  874. @x l.3424
  875. void
  876. push_level(p) /* suspends the current level */
  877. text_pointer p;
  878. @y
  879. static void push_level(text_pointer p) /* suspends the current level */
  880. @z
  881. ------------------------------------------------------------------------------
  882. @x l.3444
  883. void
  884. pop_level()
  885. @y
  886. static void pop_level(void)
  887. @z
  888. ------------------------------------------------------------------------------
  889. @x l.3466
  890. eight_bits
  891. get_output() /* returns the next token of output */
  892. @y
  893. static eight_bits get_output(void) /* returns the next token of output */
  894. @z
  895. ------------------------------------------------------------------------------
  896. BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG
  897. This one was sooooo terrible, I really have to write the story down.  When
  898. I received CWeb version 2.8 yesterday, I immediately started to implement
  899. all changes from CWeb version 2.7, patch level 6, modification level c.
  900. After a few hours, CTangle 2.8 [p7] worked perfectly well, also the complete
  901. ./examples directory was up to date, but there were severe problems with the
  902. newly compiled CWeave 2.8 [p7]: *every* section reference came out as a
  903. non-ASCII control character, instead of a string.  After locating all
  904. changes, I finally got hold of the origin: line 2958 of CWEAVE.W 2.8 was
  905. mistakenly modified by the changefile CWEAVE-P.CH 2.7 [p6c], so that
  906. instead of `section_code', `(eight_bits)section_name' was returned.  As
  907. all return codes are globally defined, I eliminate the casts to `eight_bits',
  908. only for the variable `a' is a change necessary.
  909. @x l.2966
  910.   return(a);
  911. @y
  912.   return((eight_bits)a);
  913. @z
  914. ------------------------------------------------------------------------------
  915. @x l.3508
  916. void
  917. output_C() /* outputs the current token list */
  918. @y
  919. static void output_C(void) /* outputs the current token list */
  920. @z
  921. ------------------------------------------------------------------------------
  922. @x l.3528
  923. @<Predecl...@>=
  924. void make_output();
  925.  
  926. @ @c
  927. void
  928. make_output() /* outputs the equivalents of tokens */
  929. @y
  930. @<Predecl...@>=
  931. static void make_output(void);
  932.  
  933. @ @c
  934. static void make_output(void) /* outputs the equivalents of tokens */
  935. @z
  936. ------------------------------------------------------------------------------
  937. @x l.3538
  938.   char *k, *k_limit; /* indices into |byte_mem| */
  939. @y
  940.   char HUGE *k;
  941.   char HUGE *k_limit; /* indices into |byte_mem| */
  942. @z
  943. ------------------------------------------------------------------------------
  944. We need a huge pointer here instead of j; k seems a good choice, since it is
  945. declared as index into byte_mem anyhow.
  946. @x l.3584
  947.     for (j=cur_name->byte_start;j<(cur_name+1)->byte_start;j++)
  948.       out(isxalpha(*j)? 'x':*j);
  949. @y
  950. #ifdef __TURBOC__
  951.     for (k=cur_name->byte_start;k<(cur_name+1)->byte_start;k++)
  952.       out(isxalpha(*k)? 'x':*k);
  953. #else
  954.     for (j=cur_name->byte_start;j<(cur_name+1)->byte_start;j++)
  955.       out(isxalpha(*j)? 'x':*j);
  956. #endif /* |__TURBOC__| */
  957. @z
  958. ------------------------------------------------------------------------------
  959. @x
  960.     for (j=cur_name->byte_start;j<(cur_name+1)->byte_start;j++)
  961.       if (islower(*j)) { /* not entirely uppercase */
  962. @y
  963. #ifdef __TURBOC__
  964.     for (k=cur_name->byte_start;k<(cur_name+1)->byte_start;k++)
  965.       if (islower(*k)) { /* not entirely uppercase */
  966. #else
  967.     for (j=cur_name->byte_start;j<(cur_name+1)->byte_start;j++)
  968.       if (islower(*j)) { /* not entirely uppercase */
  969. #endif /* |__TURBOC__| */
  970. @z
  971. ------------------------------------------------------------------------------
  972. @x l.3786
  973. @<Predecl...@>=
  974. void phase_two();
  975.  
  976. @ @c
  977. void
  978. phase_two() {
  979. @y
  980. @<Predecl...@>=
  981. static void phase_two(void);
  982.  
  983. @ @c
  984. static void phase_two(void) {
  985. @z
  986. ------------------------------------------------------------------------------
  987. @x l.3909
  988. @<Predecl...@>=
  989. void finish_C();
  990.  
  991. @ @c
  992. void
  993. finish_C(visible) /* finishes a definition or a \CEE/ part */
  994.   boolean visible; /* nonzero if we should produce \TEX/ output */
  995. @y
  996. @<Predecl...@>=
  997. static void finish_C(boolean);
  998.  
  999. @ @c
  1000. static void finish_C(boolean visible) /* finishes a definition or a \Cee\ part */
  1001.   /* |visible|: nonzero if we should produce \TeX\ output */
  1002. @z
  1003. ------------------------------------------------------------------------------
  1004. @x l.4080
  1005. @<Predecl...@>=
  1006. void footnote();
  1007.  
  1008. @ @c
  1009. void
  1010. footnote(flag) /* outputs section cross-references */
  1011. sixteen_bits flag;
  1012. @y
  1013. @<Predecl...@>=
  1014. static void footnote(sixteen_bits);
  1015.  
  1016. @ @c
  1017. static void footnote(sixteen_bits flag) /* outputs section cross-references */
  1018. @z
  1019. ------------------------------------------------------------------------------
  1020. @x l.4129
  1021. @<Predecl...@>=
  1022. void phase_three();
  1023.  
  1024. @ @c
  1025. void
  1026. phase_three() {
  1027. @y
  1028. @<Predecl...@>=
  1029. static void phase_three(void);
  1030.  
  1031. @ @c
  1032. static void phase_three(void) {
  1033. @z
  1034. ------------------------------------------------------------------------------
  1035. @x l.4221
  1036.     if (cur_name->xref!=(char*)xmem) {
  1037. @y
  1038.     if (cur_name->xref!=(char HUGE*)xmem) {
  1039. @z
  1040. ------------------------------------------------------------------------------
  1041. @x l.4251
  1042. char *cur_byte; /* index into |byte_mem| */
  1043. @y
  1044. char HUGE *cur_byte; /* index into |byte_mem| */
  1045. @z
  1046. ------------------------------------------------------------------------------
  1047. @x l.4294
  1048. @<Predecl...@>=
  1049. void  unbucket();
  1050.  
  1051. @ @c
  1052. void
  1053. unbucket(d) /* empties buckets having depth |d| */
  1054. eight_bits d;
  1055. @y
  1056. @<Predecl...@>=
  1057. static void unbucket(eight_bits);
  1058.  
  1059. @ @c
  1060. static void unbucket(eight_bits d) /* empties buckets having depth |d| */
  1061. @z
  1062. ------------------------------------------------------------------------------
  1063. @x l.4355
  1064.     else {char *j;
  1065. @y
  1066.     else {char HUGE *j;
  1067. @z
  1068. ------------------------------------------------------------------------------
  1069. @x l.4370
  1070.   case custom: case quoted: {char *j; out_str("$\\");
  1071. @y
  1072.   case custom: case quoted: {char HUGE *j; out_str("$\\");
  1073. @z
  1074. ------------------------------------------------------------------------------
  1075. @x l.4414
  1076. @<Predecl...@>=
  1077. void section_print();
  1078.  
  1079. @ @c
  1080. void
  1081. section_print(p) /* print all section names in subtree |p| */
  1082. name_pointer p;
  1083. @y
  1084. @<Predecl...@>=
  1085. static void section_print(name_pointer);
  1086.  
  1087. @ @c
  1088. static void section_print(name_pointer p) /* print all section names in subtree |p| */
  1089. @z
  1090. ------------------------------------------------------------------------------
  1091. @x l.4440
  1092. void
  1093. print_stats() {
  1094. @y
  1095. void print_stats(void) {
  1096. @z
  1097. ------------------------------------------------------------------------------
  1098. @x l.3817
  1099.   printf("%ld names (out of %ld)\n",
  1100.             (long)(name_ptr-name_dir),(long)max_names);
  1101.   printf("%ld cross-references (out of %ld)\n",
  1102.             (long)(xref_ptr-xmem),(long)max_refs);
  1103.   printf("%ld bytes (out of %ld)\n",
  1104.             (long)(byte_ptr-byte_mem),(long)max_bytes);
  1105.   printf("Parsing:\n");
  1106.   printf("%ld scraps (out of %ld)\n",
  1107.             (long)(max_scr_ptr-scrap_info),(long)max_scraps);
  1108.   printf("%ld texts (out of %ld)\n",
  1109.             (long)(max_text_ptr-tok_start),(long)max_texts);
  1110.   printf("%ld tokens (out of %ld)\n",
  1111.             (long)(max_tok_ptr-tok_mem),(long)max_toks);
  1112.   printf("%ld levels (out of %ld)\n",
  1113.             (long)(max_stack_ptr-stack),(long)stack_size);
  1114.   printf("Sorting:\n");
  1115.   printf("%ld levels (out of %ld)\n",
  1116.             (long)(max_sort_ptr-scrap_info),(long)max_scraps);
  1117. @y
  1118. #ifdef __TURBOC__
  1119.   printf("%ld names (out of %ld)\n",name_ptr-name_dir,(long)max_names);
  1120.   printf("%ld cross-references (out of %ld)\n",xref_ptr-xmem,(long)max_refs);
  1121.   printf("%ld bytes (out of %ld)\n",byte_ptr-byte_mem,(long)max_bytes);
  1122.   printf("Parsing:\n");
  1123.   printf("%ld scraps (out of %ld)\n",max_scr_ptr-scrap_info,(long)max_scraps);
  1124.   printf("%ld texts (out of %ld)\n",max_text_ptr-tok_start,(long)max_texts);
  1125.   printf("%ld tokens (out of %ld)\n",max_tok_ptr-tok_mem,(long)max_toks);
  1126.   printf("%ld levels (out of %ld)\n",max_stack_ptr-stack,(long)stack_size);
  1127.   printf("Sorting:\n");
  1128.   printf("%ld levels (out of %ld)\n",max_sort_ptr-scrap_info,(long)max_scraps);
  1129. #else
  1130.   printf("%ld names (out of %ld)\n",
  1131.             (long)(name_ptr-name_dir),(long)max_names);
  1132.   printf("%ld cross-references (out of %ld)\n",
  1133.             (long)(xref_ptr-xmem),(long)max_refs);
  1134.   printf("%ld bytes (out of %ld)\n",
  1135.             (long)(byte_ptr-byte_mem),(long)max_bytes);
  1136.   printf("Parsing:\n");
  1137.   printf("%ld scraps (out of %ld)\n",
  1138.             (long)(max_scr_ptr-scrap_info),(long)max_scraps);
  1139.   printf("%ld texts (out of %ld)\n",
  1140.             (long)(max_text_ptr-tok_start),(long)max_texts);
  1141.   printf("%ld tokens (out of %ld)\n",
  1142.             (long)(max_tok_ptr-tok_mem),(long)max_toks);
  1143.   printf("%ld levels (out of %ld)\n",
  1144.             (long)(max_stack_ptr-stack),(long)stack_size);
  1145.   printf("Sorting:\n");
  1146.   printf("%ld levels (out of %ld)\n",
  1147.             (long)(max_sort_ptr-scrap_info),(long)max_scraps);
  1148. #endif
  1149. @z
  1150. ------------------------------------------------------------------------------
  1151. @x l.4464
  1152. @** Index.
  1153. @y
  1154. @* Function declarations. Here are declarations---conforming to
  1155. {\mc ANSI~C}---of all functions in this code, as far as they are
  1156. not already in |"common.h"|.
  1157.  
  1158. @<Predecl...@>=
  1159. static void new_xref(name_pointer);@/
  1160. static void new_section_xref(name_pointer);@/
  1161. static void set_file_flag(name_pointer);@/
  1162. static void skip_limbo(void);@/
  1163. static unsigned skip_TeX(void);@/
  1164. static void flush_buffer(char *,boolean,boolean);@/
  1165. static void finish_line(void);@/
  1166. #ifdef DEAD_CODE
  1167. static void out_str_del(char *,char *);@/
  1168. #endif
  1169. static void out_str(char *);@/
  1170. static void out_section(sixteen_bits);@/
  1171. static void out_name(name_pointer);@/
  1172. static void copy_limbo(void);@/
  1173. static eight_bits copy_TeX(void);@/
  1174. static int copy_comment(boolean,int);@/
  1175. static void app_str(char *);@/
  1176. static void big_app(token);@/
  1177. static void big_app1(scrap_pointer);@/
  1178. static token_pointer find_first_ident(text_pointer);@/
  1179. static void make_reserved(scrap_pointer);@/
  1180. static void make_underlined(scrap_pointer);@/
  1181. static void reduce(scrap_pointer,short,eight_bits,short,short);@/
  1182. static void squash(scrap_pointer,short,eight_bits,short,short);@/
  1183. static text_pointer translate(void);@/
  1184. static void C_parse(eight_bits);@/
  1185. static text_pointer C_translate(void);@/
  1186. static void outer_parse(void);@/
  1187. static void push_level(text_pointer);@/
  1188. static void pop_level(void);@/
  1189. static eight_bits get_output(void);@/
  1190. static void output_C(void);@/
  1191. static void print_cat(eight_bits);@/
  1192. static void print_text(text_pointer p);@/
  1193.  
  1194. @ Finally, we include \.{string.h} for |strcpy|, |strncpy|, and |strncmp|.
  1195.  
  1196. @<Include...@>=
  1197. #include <string.h>
  1198.  
  1199. @ In accordance to the philosophy of \.{CWEB} that additional modules to
  1200. standard programs should not interfere with the module numbering, the new
  1201. patch level introduces Commodore and {\mc SAS} specific key words at the
  1202. end of the changes.
  1203.  
  1204.  @<Keywords specific to {\mc SAS/C 6.0}@>=
  1205.    id_lookup("__aligned",NULL,int_like);@+
  1206.    id_lookup("__asm",NULL,int_like);
  1207.    id_lookup("__chip",NULL,int_like);@+
  1208.    id_lookup("__far",NULL,int_like);
  1209.    id_lookup("__inline",NULL,int_like);@+
  1210.    id_lookup("__interrupt",NULL,int_like);
  1211.    id_lookup("__near",NULL,int_like);@+
  1212.    id_lookup("__regargs",NULL,int_like);
  1213.    id_lookup("__saveds",NULL,int_like);@+
  1214.    id_lookup("__stackext",NULL,int_like);
  1215.    id_lookup("__stdargs",NULL,int_like);
  1216.  
  1217. @ @<Registers of the Amiga@>=
  1218.    id_lookup("__d0",NULL,int_like);@+
  1219.    id_lookup("__d1",NULL,int_like);
  1220.    id_lookup("__d2",NULL,int_like);@+
  1221.    id_lookup("__d3",NULL,int_like);
  1222.    id_lookup("__d4",NULL,int_like);@+
  1223.    id_lookup("__d5",NULL,int_like);
  1224.    id_lookup("__d6",NULL,int_like);@+
  1225.    id_lookup("__d7",NULL,int_like);
  1226.    id_lookup("__a0",NULL,int_like);@+
  1227.    id_lookup("__a1",NULL,int_like);
  1228.    id_lookup("__a2",NULL,int_like);@+
  1229.    id_lookup("__a3",NULL,int_like);
  1230.    id_lookup("__a4",NULL,int_like);@+
  1231.    id_lookup("__a5",NULL,int_like);
  1232.    id_lookup("__a6",NULL,int_like);@+
  1233.    id_lookup("__a7",NULL,int_like);
  1234.    id_lookup("__fp0",NULL,int_like);@+
  1235.    id_lookup("__fp1",NULL,int_like);
  1236.    id_lookup("__fp2",NULL,int_like);@+
  1237.    id_lookup("__fp3",NULL,int_like);
  1238.    id_lookup("__fp4",NULL,int_like);@+
  1239.    id_lookup("__fp5",NULL,int_like);
  1240.    id_lookup("__fp6",NULL,int_like);@+
  1241.    id_lookup("__fp7",NULL,int_like);
  1242.  
  1243. @ @<Keywords by Commodore@>=
  1244.    id_lookup("GLOBAL",NULL,int_like);@+
  1245.    id_lookup("IMPORT",NULL,int_like);
  1246.    id_lookup("STATIC",NULL,int_like);@+
  1247.    id_lookup("REGISTER",NULL,int_like);
  1248.    id_lookup("VOID",NULL,int_like);@+
  1249.    id_lookup("APTR",NULL,int_like);
  1250.    id_lookup("LONG",NULL,int_like);@+
  1251.    id_lookup("ULONG",NULL,int_like);
  1252.    id_lookup("LONGBITS",NULL,int_like);@+
  1253.    id_lookup("WORD",NULL,int_like);
  1254.    id_lookup("UWORD",NULL,int_like);@+
  1255.    id_lookup("WORDBITS",NULL,int_like);
  1256.    id_lookup("BYTE",NULL,int_like);@+
  1257.    id_lookup("UBYTE",NULL,int_like);
  1258.    id_lookup("BYTEBITS",NULL,int_like);@+
  1259.    id_lookup("RPTR",NULL,int_like);
  1260.    id_lookup("STRPTR",NULL,int_like);@+
  1261.    id_lookup("SHORT",NULL,int_like);
  1262.    id_lookup("USHORT",NULL,int_like);@+
  1263.    id_lookup("COUNT",NULL,int_like);
  1264.    id_lookup("UCOUNT",NULL,int_like);@+
  1265.    id_lookup("CPTR",NULL,int_like);
  1266.    id_lookup("FLOAT",NULL,int_like);@+
  1267.    id_lookup("DOUBLE",NULL,int_like);
  1268.    id_lookup("BOOL",NULL,int_like);@+
  1269.    id_lookup("TEXT",NULL,int_like);
  1270.    id_lookup("BPTR",NULL,int_like);@+
  1271.    id_lookup("BSTR",NULL,int_like);
  1272.  
  1273.    id_lookup("byte",NULL,int_like);@+
  1274.    id_lookup("Class",NULL,int_like);
  1275.    id_lookup("ClassID",NULL,int_like);@+
  1276.    id_lookup("CxMsg",NULL,int_like);
  1277.    id_lookup("CxObj",NULL,int_like);@+
  1278.    id_lookup("dev_t",NULL,int_like);
  1279.    id_lookup("DIR",NULL,int_like);@+
  1280.    id_lookup("DisplayInfoHandle",NULL,int_like);
  1281.    id_lookup("ino_t",NULL,int_like);@+
  1282.    id_lookup("IX",NULL,int_like);
  1283.    id_lookup("Msg",NULL,int_like);@+
  1284.    id_lookup("Object",NULL,int_like);
  1285.    id_lookup("off_t",NULL,int_like);@+
  1286.    id_lookup("PFL",NULL,int_like);
  1287.    id_lookup("PLANEPTR",NULL,int_like);@+
  1288.    id_lookup("Tag",NULL,int_like);
  1289.    id_lookup("tPoint",NULL,int_like);@+
  1290.    id_lookup("ushort",NULL,int_like);
  1291.    id_lookup("u_char",NULL,int_like);@+
  1292.    id_lookup("u_int",NULL,int_like);
  1293.    id_lookup("u_long",NULL,int_like);@+
  1294.    id_lookup("u_short",NULL,int_like);
  1295.    id_lookup("WINDOW",NULL,int_like);
  1296.  
  1297. @** Index.
  1298. @z
  1299. ------------------------------------------------------------------------------
  1300.