summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/cwebdir/cweav-w2c.ch')
-rw-r--r--Build/source/texk/web2c/cwebdir/cweav-w2c.ch1453
1 files changed, 83 insertions, 1370 deletions
diff --git a/Build/source/texk/web2c/cwebdir/cweav-w2c.ch b/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
index 22e44e5a250..4ff1c15f3f0 100644
--- a/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
+++ b/Build/source/texk/web2c/cwebdir/cweav-w2c.ch
@@ -1,30 +1,31 @@
-@q Changes for CWEB in TeX Live from numerous contributors. @>
-@q This file is in the Public Domain. @>
+@q Changes for CWEB in TeX Live from numerous contributors. @>
+@q This file is in the Public Domain. @>
-@q Most of the original Kpathsea changes by Wlodek Bzyl and Olaf Weber @>
-@q were merged with the set of change files of the CWEBbin project; @>
-@q see https://github.com/ascherer/cwebbin for the original parts. @>
+@q Most of the original Kpathsea changes by Wlodek Bzyl and Olaf Weber @>
+@q were merged with the set of change files of the CWEBbin project; @>
+@q see https://github.com/ascherer/cwebbin for the original parts. @>
-@q This stripped change file {comm,ctang,cweav,ctwill}-w2c.ch has been @>
-@q created from the set of change files {comm,ctang,cweav}-patch.ch, @>
-@q {comm,ctang,cweav}-ansi.ch, {comm,ctang,cweav}-extensions.ch, @>
-@q {comm,ctang,cweav}-output.ch, {comm,ctang,cweav}-i18n.ch, and @>
-@q cweav-twill.ch for CTWILL, and {comm,ctang,cweav,ctwill}-texlive.ch @>
-@q with the 'tie' processor and is used as a monolithic changefile for @>
-@q {common,ctangle,cweave}.w in TeX Live. @>
+@q This stripped change file {comm,ctang,cweav,ctwill,cwebman}-w2c.ch @>
+@q has been created from the elaborate set of change files @>
+@q {comm,ctang,cweav,cwebman}-patch.ch, @>
+@q {comm,cweav,cwebman}-extensions.ch, {comm,ctang,cweav}-output.ch, @>
+@q {comm,ctang,cweav}-i18n.ch, and cweav-twill.ch for CTWILL, and @>
+@q {comm,ctang,cweav,ctwill,cwebman}-texlive.ch with the 'tie' processor @>
+@q and is used as a monolithic changefile for {common,ctangle,cweave}.w @>
+@q and cwebman.tex in TeX Live. @>
-@q Please send comments, suggestions, etc. to tex-k@@tug.org. @>
+@q Please send comments, suggestions, etc. to tex-k@@tug.org. @>
@x
-\def\title{CWEAVE (Version 3.64)}
+\def\title{CWEAVE (Version 4.0)}
@y
-\def\title{CWEAVE (Version 3.64 [\TeX~Live])}
+\def\title{CWEAVE (Version 4.0 [\TeX~Live])}
@z
@x
- \centerline{(Version 3.64)}
+ \centerline{(Version 4.0)}
@y
- \centerline{(Version 3.64 [\TeX~Live])}
+ \centerline{(Version 4.0 [\TeX~Live])}
@z
@x
@@ -36,348 +37,35 @@
@x
}
@y
-}}
-\datecontentspage
+}}\datecontentspage
@z
@x
-@s not_eq normal @q unreserve a C++ keyword @>
+@d banner "This is CWEAVE (Version 4.0)"
@y
-@z
-
-@x
-@d banner "This is CWEAVE (Version 3.64)\n"
-@y
-@d banner "This is CWEAVE, Version 3.64"
+@d banner "This is CWEAVE, Version 4.0"
/* will be extended by the \TeX~Live |versionstring| */
@z
@x
-@ We predeclare several standard system functions here instead of including
-their system header files, because the names of the header files are not as
-standard as the names of the functions. (For example, some \CEE/ environments
-have \.{<string.h>} where others have \.{<strings.h>}.)
-
-@<Predecl...@>=
-extern int strlen(); /* length of string */
-extern int strcmp(); /* compare strings lexicographically */
-extern char* strcpy(); /* copy one string to another */
-extern int strncmp(); /* compare up to $n$ string characters */
-extern char* strncpy(); /* copy up to $n$ string characters */
-@y
-@ For string handling we include the {\mc ANSI C} system header file instead
-of predeclaring the standard system functions |@!strlen|, |@!strcmp|,
-|@!strcpy|, |@!strncmp|, and |@!strncpy|.
-@^system dependencies@>
-
-@<Include files@>=
-#include <string.h>
-@z
-
-@x
-int main (ac, av)
-int ac; /* argument count */
-char **av; /* argument values */
-@y
-int main (@t\1\1@>
-int ac, /* argument count */
-char **av@t\2\2@>) /* argument values */
-@z
-
-@x
- make_xrefs=force_lines=make_pb=1; /* controlled by command-line options */
- common_init();
- @<Set initial values@>;
-@y
- @<Set initial values@>;
- common_init();
- @<Start \TEX/ output@>;
-@z
-
-@x
- if (show_banner) printf(banner); /* print a ``banner line'' */
+ if (show_banner) puts(banner); /* print a ``banner line'' */
@y
if (show_banner) cb_show_banner(); /* print a ``banner line'' */
@z
@x
-@d max_bytes 90000 /* the number of bytes in identifiers,
-@y
-@d max_bytes 1000000 /* the number of bytes in identifiers,
-@z
-
-@x
-@d max_names 4000 /* number of identifiers, strings, section names;
-@y
-@d max_names 10239 /* number of identifiers, strings, section names;
-@z
-
-@x
-@d max_sections 2000 /* greater than the total number of sections */
-@d hash_size 353 /* should be prime */
-@d buf_size 100 /* maximum length of input line, plus one */
-@y
-@d max_sections 10239 /* greater than the total number of sections */
-@d hash_size 8501 /* should be prime */
-@d buf_size 1000 /* maximum length of input line, plus one */
-@z
-
-@x
-@d max_refs 20000 /* number of cross-references; must be less than 65536 */
-@d max_toks 20000 /* number of symbols in \CEE/ texts being parsed;
-@y
-@d max_refs 65535 /* number of cross-references; must be less than 65536 */
-@d max_toks 65535 /* number of symbols in \CEE/ texts being parsed;
-@z
-
-@x
-@d max_texts 4000 /* number of phrases in \CEE/ texts being parsed;
-@y
-@d max_texts 10239 /* number of phrases in \CEE/ texts being parsed;
-@z
-
-@x
-@d max_scraps 2000 /* number of tokens in \CEE/ texts being parsed */
-@d stack_size 400 /* number of simultaneous output levels */
-@y
-@d max_scraps 10000 /* number of tokens in \CEE/ texts being parsed */
-@d stack_size 2000 /* number of simultaneous output levels */
-@z
-
-@x
@i common.h
@y
@i comm-w2c.h
@z
@x
-xref_ptr=xmem; name_dir->xref=(char*)xmem; xref_switch=0; section_xref_switch=0;
-@y
-xref_ptr=xmem; init_node(name_dir); xref_switch=0; section_xref_switch=0;
-@z
-
-@x
@d append_xref(c) if (xref_ptr==xmem_end) overflow("cross-reference");
@y
@d append_xref(c) if (xref_ptr==xmem_end) overflow(_("cross-reference"));
@z
@x
-@d no_xref (flags['x']==0)
-@d make_xrefs flags['x'] /* should cross references be output? */
-@y
-@d no_xref (!make_xrefs) /* should cross references be suppressed? */
-@z
-
-@x
-void
-new_xref(p)
-name_pointer p;
-@y
-static void
-new_xref(
-name_pointer p)
-@z
-
-@x
- append_xref(m); xref_ptr->xlink=q; p->xref=(char*)xref_ptr;
-@y
- append_xref(m); xref_ptr->xlink=q; update_node(p);
-@z
-
-@x
-void
-new_section_xref(p)
-name_pointer p;
-@y
-static void
-new_section_xref(
-name_pointer p)
-@z
-
-@x
- if (r==xmem) p->xref=(char*)xref_ptr;
-@y
- if (r==xmem) update_node(p);
-@z
-
-@x
-void
-set_file_flag(p)
-name_pointer p;
-@y
-static void
-set_file_flag(
-name_pointer p)
-@z
-
-@x
- p->xref = (char *)xref_ptr;
-@y
- update_node(p);
-@z
-
-@x
-further details about them will be explained later. A |text_pointer| variable
-is an index into |tok_start|.
-@y
-further details about them will be explained later. A \&{text\_pointer}
-variable is an index into |tok_start|.
-@z
-
-@x
-tok_ptr=tok_mem+1; text_ptr=tok_start+1; tok_start[0]=tok_mem+1;
-tok_start[1]=tok_mem+1;
-max_tok_ptr=tok_mem+1; max_text_ptr=tok_start+1;
-@y
-tok_ptr=max_tok_ptr=tok_mem+1;@/
-tok_start[0]=tok_start[1]=tok_mem+1;@/
-text_ptr=max_text_ptr=tok_start+1;
-@z
-
-@x
-int names_match(p,first,l,t)
-name_pointer p; /* points to the proposed match */
-char *first; /* position of first character of string */
-int l; /* length of identifier */
-eight_bits t; /* desired ilk */
-@y
-boolean names_match(@t\1\1@>
-name_pointer p, /* points to the proposed match */
-const char *first, /* position of first character of string */
-size_t l, /* length of identifier */
-eight_bits t@t\2\2@>) /* desired |ilk| */
-@z
-
-@x
-void
-init_p(p,t)
-name_pointer p;
-eight_bits t;
-@y
-void
-init_p(
-name_pointer p,
-eight_bits t)
-@z
-
-@x
- p->ilk=t; p->xref=(char*)xmem;
-@y
- p->ilk=t; init_node(p);
-@z
-
-@x
-void
-init_node(p)
-name_pointer p;
-@y
-void
-init_node(
-name_pointer p)
-@z
-
-@x
- p->xref=(char*)xmem;
-}
-@y
- p->xref=(void *)xmem;
-}
-
-static void
-update_node(
-name_pointer p)
-{
- p->xref=(void *)xref_ptr;
-}
-@z
-
-@x
-void skip_limbo();
-@y
-static void skip_limbo(void);@/
-@z
-
-@x
-void
-skip_limbo() {
-@y
-static void
-skip_limbo(void) {
-@z
-
-@x
-unsigned
-skip_TeX() /* skip past pure \TEX/ code */
-@y
-static eight_bits
-skip_TeX(void) /* skip past pure \TEX/ code */
-@z
-
-@x
-eight_bits get_next();
-@y
-static eight_bits get_next(void);@/
-@z
-
-@x
-eight_bits
-get_next() /* produces the next input token */
-{@+eight_bits c; /* the current character */
-@y
-static eight_bits
-get_next(void) /* produces the next input token */
-{
- eight_bits c; /* the current character */
-@z
-
-@x
- else if (c=='\'' || c=='"' || (c=='L'&&(*loc=='\'' || *loc=='"'))@|
-@y
- else if (c=='\'' || c=='"'@|
- || ((c=='L' || c=='u' || c=='U')&&(*loc=='\'' || *loc=='"'))@|
- || ((c=='u' && *loc=='8')&&(*(loc+1)=='\'' || *(loc+1)=='"'))@|
-@z
-
-@x
- else if (*loc=='>') if (*(loc+1)=='*') {loc++; compress(minus_gt_ast);}
- else compress(minus_gt); break;
-@y
- else { if (*loc=='>') { if (*(loc+1)=='*') {loc++; compress(minus_gt_ast);}
- else compress(minus_gt); } } break;
-@z
-
-@x
- case '!': if (*loc=='=') compress(not_eq); break;
-@y
- case '!': if (*loc=='=') compress(non_eq); break;
-@z
-
-@x
- while (isalpha(*++loc) || isdigit(*loc) || isxalpha(*loc) || ishigh(*loc));
-@y
- while (isalpha((eight_bits)*++loc) || isdigit((eight_bits)*loc) @|
- || isxalpha((eight_bits)*loc) || ishigh((eight_bits)*loc));
-@z
-
-@x
- *id_loc++='$'; *id_loc++=toupper(*loc); loc++;
-@y
- *id_loc++='$'; *id_loc++=toupper((eight_bits)*loc); loc++;
-@z
-
-@x
- if (delim=='L') { /* wide character constant */
- delim=*loc++; *++id_loc=delim;
- }
-@y
- if (delim=='L' || delim=='u' || delim=='U') { /* wide character constant */
- if (delim=='u' && *loc=='8') { *++id_loc=*loc++; }
- delim=*loc++; *++id_loc=delim;
- }
-@z
-
-@x
err_print("! String didn't end"); loc=limit; break;
@y
err_print(_("! String didn't end")); loc=limit; break;
@@ -390,19 +78,7 @@ get_next(void) /* produces the next input token */
@z
@x
- if (c=='\\') if (loc>=limit) continue;
- else if (++id_loc<=section_text_end) {
- *id_loc = '\\'; c=*loc++;
- }
-@y
- if (c=='\\') { if (loc>=limit) continue;
- else { if (++id_loc<=section_text_end) {
- *id_loc = '\\'; c=*loc++;
- } } }
-@z
-
-@x
- printf("\n! String too long: ");
+ fputs("\n! String too long: ",stdout);
@y
fputs(_("\n! String too long: "),stdout);
@z
@@ -414,21 +90,13 @@ get_next(void) /* produces the next input token */
@z
@x
- case xref_roman: case xref_wildcard: case xref_typewriter:
- case noop: case TeX_string: c=ccode[c]; skip_restricted(); return(c);
-@y
- case xref_roman: case xref_wildcard: case xref_typewriter: case noop:
- case TeX_string: c=ccode[(eight_bits)c]; skip_restricted(); return(c);
-@z
-
-@x
err_print("! Input ended in section name");
@y
err_print(_("! Input ended in section name"));
@z
@x
- printf("\n! Section name too long: ");
+ fputs("\n! Section name too long: ",stdout);
@y
fputs(_("\n! Section name too long: "),stdout);
@z
@@ -446,20 +114,6 @@ get_next(void) /* produces the next input token */
@z
@x
-void skip_restricted();
-@y
-void skip_restricted(void);@/
-@z
-
-@x
-void
-skip_restricted()
-@y
-void
-skip_restricted(void)
-@z
-
-@x
err_print("! Control text didn't end"); loc=limit;
@y
err_print(_("! Control text didn't end")); loc=limit;
@@ -478,68 +132,18 @@ skip_restricted(void)
@z
@x
-void phase_one();
-@y
-static void phase_one(void);@/
-@z
-
-@x
-void
-phase_one() {
-@y
-static void
-phase_one(void) {
-@z
-
-@x
if (++section_count==max_sections) overflow("section number");
@y
if (++section_count==max_sections) overflow(_("section number"));
@z
@x
-void C_xref();
-@y
-static void C_xref(eight_bits);@/
-@z
-
-@x
-void
-C_xref( spec_ctrl ) /* makes cross-references for \CEE/ identifiers */
- eight_bits spec_ctrl;
-@y
-static void
-C_xref(@t\1\1@> /* makes cross-references for \CEE/ identifiers */
- eight_bits spec_ctrl@t\2\2@>)
-@z
-
-@x
-void outer_xref();
-@y
-static void outer_xref(void);@/
-@z
-
-@x
-void
-outer_xref() /* extension of |C_xref| */
-@y
-static void
-outer_xref(void) /* extension of |C_xref| */
-@z
-
-@x
case translit_code: err_print("! Use @@l in limbo only"); continue;
@y
case translit_code: err_print(_("! Use @@l in limbo only")); continue;
@z
@x
- else lhs->xref=(char*)q->xlink;
-@y
- else lhs->xref=(void *)q->xlink;
-@z
-
-@x
err_print("! Missing left identifier of @@s");
@y
err_print(_("! Missing left identifier of @@s"));
@@ -552,81 +156,28 @@ outer_xref(void) /* extension of |C_xref| */
@z
@x
-void section_check();
-@y
-static void section_check(name_pointer);@/
-@z
-
-@x
-void
-section_check(p)
-name_pointer p; /* print anomalies in subtree |p| */
-@y
-static void
-section_check(
-name_pointer p) /* print anomalies in subtree |p| */
-@z
-
-@x
- printf("\n! Never defined: <"); print_section_name(p); putchar('>'); mark_harmless;
+ fputs("\n! Never defined: <",stdout);
+ print_section_name(p); putchar('>'); mark_harmless;
@y
fputs(_("\n! Never defined: <"),stdout);
print_section_name(p); putchar('>'); mark_harmless;
@z
@x
- printf("\n! Never used: <"); print_section_name(p); putchar('>'); mark_harmless;
+ fputs("\n! Never used: <",stdout);
+ print_section_name(p); putchar('>'); mark_harmless;
@y
fputs(_("\n! Never used: <"),stdout);
print_section_name(p); putchar('>'); mark_harmless;
@z
@x
-If the |per_cent| parameter is 1 a |'%'| is appended to the line
-@y
-If the |per_cent| parameter is 1, a |'%'| is appended to the line
-@z
-
-@x
-@d tex_printf(c) fprintf(active_file,c)
-@y
-@d tex_printf(c) fprintf(active_file,"%s",c)
-@d tex_puts(c) fputs(c,active_file)
-@z
-
-@x
-void
-flush_buffer(b,per_cent,carryover)
-char *b; /* outputs from |out_buf+1| to |b|,where |b<=out_ptr| */
-boolean per_cent,carryover;
-@y
-static void
-flush_buffer(@t\1\1@>
-char *b, /* outputs from |out_buf+1| to |b|, where |b<=out_ptr| */
-boolean per_cent,boolean carryover@t\2\2@>)
-@z
-
-@x
- if (b<out_ptr) strncpy(out_buf+1,b+1,out_ptr-b);
-@y
- if (b<out_ptr) strncpy(out_buf+1,b+1,(size_t)(out_ptr-b));
-@z
-
-@x
-void
-finish_line() /* do this at the end of a line */
-@y
-static void
-finish_line(void) /* do this at the end of a line */
-@z
-
-@x
@ In particular, the |finish_line| procedure is called near the very
beginning of phase two. We initialize the output variables in a slightly
tricky way so that the first line of the output file will be
`\.{\\input cwebmac}'.
-@<Set init...@>=
+@<Start \TEX/...@>=
out_ptr=out_buf+1; out_line=1; active_file=tex_file;
*out_ptr='c'; tex_printf("\\input cwebma");
@y
@@ -649,102 +200,24 @@ tex_puts("cwebma");
@z
@x
-void
-out_str(s) /* output characters from |s| to end of string */
-char *s;
-@y
-static void
-out_str(@t\1\1@> /* output characters from |s| to end of string */
-const char*s@t\2\2@>)
-@z
-
-@x
-void break_out();
-@y
-static void break_out(void);@/
-@z
-
-@x
-void
-break_out() /* finds a way to break the output line */
-@y
-static void
-break_out(void) /* finds a way to break the output line */
-@z
-
-@x
printf("\n! Line had to be broken (output l. %d):\n",out_line);
@y
printf(_("\n! Line had to be broken (output l. %d):\n"),out_line);
@z
@x
-void
-out_section(n)
-sixteen_bits n;
-@y
-static void
-out_section(
-sixteen_bits n)
-@z
-
-@x
-void
-out_name(p,quote_xalpha)
-name_pointer p;
-boolean quote_xalpha;
-@y
-static void
-out_name(
-name_pointer p,
-boolean quote_xalpha)
-@z
-
-@x
-void
-copy_limbo()
-@y
-static void
-copy_limbo(void)
-@z
-
-@x
default: err_print("! Double @@ should be used in limbo");
@y
default: err_print(_("! Double @@ should be used in limbo"));
@z
@x
-eight_bits
-copy_TeX()
-@y
-static eight_bits
-copy_TeX(void)
-@z
-
-@x
@d app_tok(c) {if (tok_ptr+2>tok_mem_end) overflow("token"); *(tok_ptr++)=c;}
@y
@d app_tok(c) {if (tok_ptr+2>tok_mem_end) overflow(_("token")); *(tok_ptr++)=c;}
@z
@x
-int copy_comment();
-@y
-static int copy_comment(boolean,int);@/
-@z
-
-@x
-int copy_comment(is_long_comment,bal) /* copies \TEX/ code in comments */
-boolean is_long_comment; /* is this a traditional \CEE/ comment? */
-int bal; /* brace balance */
-@y
-static int copy_comment(@t\1\1@> /* copies \TeX\ code in comments */
-boolean is_long_comment, /* is this a traditional \CEE/ comment? */
-int bal@t\2\2@>) /* brace balance */
-@z
-
-@x
err_print("! Input ended in mid-comment");
@y
err_print(_("! Input ended in mid-comment"));
@@ -775,163 +248,27 @@ int bal@t\2\2@>) /* brace balance */
@z
@x
-else if (c=='\\' && *loc!='@@')
- if (phase==2) app_tok(*(loc++))@; else loc++;
-@y
-else { if (c=='\\' && *loc!='@@') {
- if (phase==2) app_tok(*(loc++))@; else loc++; } }
-@z
-
-@x
-eight_bits cat_index;
-
-@ @<Set in...@>=
- for (cat_index=0;cat_index<255;cat_index++)
- strcpy(cat_name[cat_index],"UNKNOWN");
+static void print_text(text_pointer p);@/
@y
-
-@ @<Set in...@>=
-{int c; for (c=0;c<256;c++) strcpy(cat_name[c],"UNKNOWN");}
+#if 0
+static void print_text(text_pointer p);@/
+#endif
@z
@x
-void
-print_cat(c) /* symbolic printout of a category */
-eight_bits c;
-@y
static void
-print_cat(@t\1\1@> /* symbolic printout of a category */
-eight_bits c@t\2\2@>)
-@z
-
-@x
- printf(cat_name[c]);
-@y
- fputs(cat_name[c],stdout);
-@z
-
-@x
-void
-print_text(p) /* prints a token list for debugging; not used in |main| */
-text_pointer p;
+print_text(@t\1\1@> /* prints a token list for debugging; not used in |main| */
@y
-#ifdef DEAD_CODE /* not used in |main| */
+#if 0
static void
print_text(@t\1\1@> /* prints a token list for debugging; not used in |main| */
-text_pointer p@t\2\2@>)
@z
@x
- fflush(stdout);
}
@y
- update_terminal;
}
-#endif /* |DEAD_CODE| */
-@z
-
-@x
-@d app(a) *(tok_ptr++)=a
-@d app1(a) *(tok_ptr++)=tok_flag+(int)((a)->trans-tok_start)
-@y
-@d app(a) *(tok_ptr++)=(token)(a)
-@d app1(a) *(tok_ptr++)=(token)(tok_flag+(int)((a)->trans-tok_start))
-@z
-
-@x
-void
-app_str(s)
-char *s;
-@y
-static void
-app_str(
-const char *s)
-@z
-
-@x
-void
-big_app(a)
-token a;
-@y
-static void
-big_app(
-token a)
-@z
-
-@x
-void
-big_app1(a)
-scrap_pointer a;
-@y
-static void
-big_app1(
-scrap_pointer a)
-@z
-
-@x
- && pp->cat!=prerangle
-@y
- && pp->cat!=prerangle @|
-@z
-
-@x
- && pp->cat!=ftemplate
-@y
- && pp->cat!=ftemplate @|
-@z
-
-@x
-token_pointer
-find_first_ident(p)
-text_pointer p;
-@y
-static token_pointer
-find_first_ident(
-text_pointer p)
-@z
-
-@x
-void
-make_reserved(p) /* make the first identifier in |p->trans| like |int| */
-scrap_pointer p;
-@y
-static void
-make_reserved(@t\1\1@> /* make the first identifier in |p->trans| like |int| */
-scrap_pointer p@t\2\2@>)
-@z
-
-@x
-void
-make_underlined(p)
-/* underline the entry for the first identifier in |p->trans| */
-scrap_pointer p;
-@y
-static void
-make_underlined(@t\1\1@>
-/* underline the entry for the first identifier in |p->trans| */
-scrap_pointer p@t\2\2@>)
-@z
-
-@x
-void underline_xref();
-@y
-static void underline_xref(name_pointer);@/
-@z
-
-@x
-void
-underline_xref(p)
-name_pointer p;
-@y
-static void
-underline_xref(
-name_pointer p)
-@z
-
-@x
- p->xref=(char*)xref_ptr;
-@y
- update_node(p);
+#endif
@z
@x
@@ -941,12 +278,6 @@ if (cat1==lbrace || cat1==int_like || cat1==decl) {
reduce(pp,1,fn_decl,0,1);
}
@y
-\.{CWEAVE} indents declarations after old-style function definitions.
-With the \.{-i} option they will come out flush left. You won't see
-any difference if you use ANSI-style function definitions.
-
-@d indent_param_decl flags['i'] /* should formal parameter declarations be indented? */
-
@<Cases for |exp|@>=
if(cat1==lbrace || cat1==int_like || cat1==decl) {
make_underlined(pp); big_app1(pp);
@@ -1014,14 +345,7 @@ else if (cat1==stmt || cat1==function) {
big_app1(pp+1); reduce(pp,2,cat1,-1,41);
}
@y
-@ The original manual described the \.{-o} option for \.{CWEAVE}, but this was
-not yet present. Here is a simple implementation. The purpose is to suppress
-the extra space between local variable declarations and the first statement in
-a function block.
-
-@d order_decl_stmt flags['o'] /* should declarations and statements be separated? */
-
-@<Cases for |decl|@>=
+@ @<Cases for |decl|@>=
if (cat1==decl) {
big_app1(pp); big_app(force); big_app1(pp+1);
reduce(pp,2,decl,-1,40);
@@ -1044,9 +368,7 @@ else if (cat1==stmt) {
big_app1(pp+1); reduce(pp,2,function,-1,52);
}
@y
-@ Outdent after parameter declarations with option \.{-i}.
-
-@<Cases for |fn_decl|@>=
+@ @<Cases for |fn_decl|@>=
if (cat1==decl) {
big_app1(pp); big_app(force); big_app1(pp+1); reduce(pp,2,fn_decl,0,51);
}
@@ -1061,34 +383,6 @@ else if (cat1==stmt) {
@z
@x
-void
-reduce(j,k,c,d,n)
-scrap_pointer j;
-eight_bits c;
-short k, d, n;
-@y
-static void
-reduce(
-scrap_pointer j, short k,
-eight_bits c,
-short d, short n)
-@z
-
-@x
-void
-squash(j,k,c,d,n)
-scrap_pointer j;
-eight_bits c;
-short k, d, n;
-@y
-static void
-squash(
-scrap_pointer j, short k,
-eight_bits c,
-short d, short n)
-@z
-
-@x
overflow("token");
@y
overflow(_("token"));
@@ -1101,38 +395,6 @@ short d, short n)
@z
@x
-{ scrap_pointer k; /* pointer into |scrap_info| */
- if (tracing==2) {
- printf("\n%d:",n);
- for (k=scrap_base; k<=lo_ptr; k++) {
- if (k==pp) putxchar('*'); else putxchar(' ');
- if (k->mathness %4 == yes_math) putchar('+');
- else if (k->mathness %4 == no_math) putchar('-');
- print_cat(k->cat);
- if (k->mathness /4 == yes_math) putchar('+');
- else if (k->mathness /4 == no_math) putchar('-');
-@y
-{ scrap_pointer k_l; /* pointer into |scrap_info| */
- if (tracing==2) {
- printf("\n%d:",n);
- for (k_l=scrap_base; k_l<=lo_ptr; k_l++) {
- if (k_l==pp) putxchar('*'); else putxchar(' ');
- if (k_l->mathness %4 == yes_math) putchar('+');
- else if (k_l->mathness %4 == no_math) putchar('-');
- print_cat(k_l->cat);
- if (k_l->mathness /4 == yes_math) putchar('+');
- else if (k_l->mathness /4 == no_math) putchar('-');
-@z
-
-@x
-text_pointer
-translate() /* converts a sequence of scraps */
-@y
-static text_pointer
-translate(void) /* converts a sequence of scraps */
-@z
-
-@x
if (tok_ptr+6>tok_mem_end) overflow("token");
@y
if (tok_ptr+6>tok_mem_end) overflow(_("token"));
@@ -1151,316 +413,42 @@ translate(void) /* converts a sequence of scraps */
@z
@x
-void
-C_parse(spec_ctrl) /* creates scraps from \CEE/ tokens */
- eight_bits spec_ctrl;
-@y
-static void
-C_parse(@t\1\1@> /* creates scraps from \CEE/ tokens */
- eight_bits spec_ctrl@t\2\2@>)
-@z
-
-@x
-switch (next_control) {
- case section_name:
- app(section_flag+(int)(cur_section-name_dir));
- app_scrap(section_scrap,maybe_math);
- app_scrap(exp,yes_math);@+break;
- case string: case constant: case verbatim: @<Append a string or constant@>;
- @+break;
- case identifier: app_cur_id(1);@+break;
- case TeX_string: @<Append a \TEX/ string, without forming a scrap@>;@+break;
- case '/': case '.':
- app(next_control); app_scrap(binop,yes_math);@+break;
- case '<': app_str("\\langle");@+app_scrap(prelangle,yes_math);@+break;
-@.\\langle@>
- case '>': app_str("\\rangle");@+app_scrap(prerangle,yes_math);@+break;
-@.\\rangle@>
- case '=': app_str("\\K"); app_scrap(binop,yes_math);@+break;
-@.\\K@>
- case '|': app_str("\\OR"); app_scrap(binop,yes_math);@+break;
-@.\\OR@>
- case '^': app_str("\\XOR"); app_scrap(binop,yes_math);@+break;
-@.\\XOR@>
- case '%': app_str("\\MOD"); app_scrap(binop,yes_math);@+break;
-@.\\MOD@>
- case '!': app_str("\\R"); app_scrap(unop,yes_math);@+break;
-@.\\R@>
- case '~': app_str("\\CM"); app_scrap(unop,yes_math);@+break;
-@.\\CM@>
- case '+': case '-': app(next_control); app_scrap(ubinop,yes_math);@+break;
- case '*': app(next_control); app_scrap(raw_ubin,yes_math);@+break;
- case '&': app_str("\\AND"); app_scrap(raw_ubin,yes_math);@+break;
-@.\\AND@>
- case '?': app_str("\\?"); app_scrap(question,yes_math);@+break;
-@.\\?@>
- case '#': app_str("\\#"); app_scrap(ubinop,yes_math);@+break;
-@.\\\#@>
- case ignore: case xref_roman: case xref_wildcard:
- case xref_typewriter: case noop:@+break;
- case '(': case '[': app(next_control); app_scrap(lpar,maybe_math);@+break;
- case ')': case ']': app(next_control); app_scrap(rpar,maybe_math);@+break;
- case '{': app_str("\\{"@q}@>); app_scrap(lbrace,yes_math);@+break;
-@.\\\{@>@q}@>
- case '}': app_str(@q{@>"\\}"); app_scrap(rbrace,yes_math);@+break;
-@q{@>@.\\\}@>
- case ',': app(','); app_scrap(comma,yes_math);@+break;
- case ';': app(';'); app_scrap(semi,maybe_math);@+break;
- case ':': app(':'); app_scrap(colon,no_math);@+break;@/
- @t\4@> @<Cases involving nonstandard characters@>@;
- case thin_space: app_str("\\,"); app_scrap(insert,maybe_math);@+break;
-@.\\,@>
- case math_break: app(opt); app_str("0");
- app_scrap(insert,maybe_math);@+break;
- case line_break: app(force); app_scrap(insert,no_math);@+break;
- case left_preproc: app(force); app(preproc_line);
- app_str("\\#"); app_scrap(lproc,no_math);@+break;
-@.\\\#@>
- case right_preproc: app(force); app_scrap(rproc,no_math);@+break;
- case big_line_break: app(big_force); app_scrap(insert,no_math);@+break;
- case no_line_break: app(big_cancel); app(noop); app(break_space);
- app(noop); app(big_cancel);
- app_scrap(insert,no_math);@+break;
- case pseudo_semi: app_scrap(semi,maybe_math);@+break;
- case macro_arg_open: app_scrap(begin_arg,maybe_math);@+break;
- case macro_arg_close: app_scrap(end_arg,maybe_math);@+break;
- case join: app_str("\\J"); app_scrap(insert,no_math);@+break;
-@.\\J@>
- case output_defs_code: app(force); app_str("\\ATH"); app(force);
- app_scrap(insert,no_math);@+break;
-@.\\ATH@>
- default: app(inserted); app(next_control);
- app_scrap(insert,maybe_math);@+break;
-}
-@y
-switch (next_control) {
- case section_name:
- app(section_flag+(int)(cur_section-name_dir));
- app_scrap(section_scrap,maybe_math);
- app_scrap(exp,yes_math);@+break;
- case string: case constant: case verbatim:
- @<Append a string or constant@>;@+break;
- case identifier: app_cur_id(1);@+break;
- case TeX_string:
- @<Append a \TEX/ string, without forming a scrap@>;@+break;
- case '/': case '.':
- app(next_control);@+app_scrap(binop,yes_math);@+break;
- case '<': app_str("\\langle");@+app_scrap(prelangle,yes_math);@+break;
-@.\\langle@>
- case '>': app_str("\\rangle");@+app_scrap(prerangle,yes_math);@+break;
-@.\\rangle@>
- case '=': app_str("\\K");@+app_scrap(binop,yes_math);@+break;
-@.\\K@>
- case '|': app_str("\\OR");@+app_scrap(binop,yes_math);@+break;
-@.\\OR@>
- case '^': app_str("\\XOR");@+app_scrap(binop,yes_math);@+break;
-@.\\XOR@>
- case '%': app_str("\\MOD");@+app_scrap(binop,yes_math);@+break;
-@.\\MOD@>
- case '!': app_str("\\R");@+app_scrap(unop,yes_math);@+break;
-@.\\R@>
- case '~': app_str("\\CM");@+app_scrap(unop,yes_math);@+break;
-@.\\CM@>
- case '+': case '-': app(next_control);@+app_scrap(ubinop,yes_math);@+break;
- case '*': app(next_control);@+app_scrap(raw_ubin,yes_math);@+break;
- case '&': app_str("\\AND");@+app_scrap(raw_ubin,yes_math);@+break;
-@.\\AND@>
- case '?': app_str("\\?");@+app_scrap(question,yes_math);@+break;
-@.\\?@>
- case '#': app_str("\\#");@+app_scrap(ubinop,yes_math);@+break;
-@.\\\#@>
- case ignore: case xref_roman: case xref_wildcard:
- case xref_typewriter: case noop:@+break;
- case '(': case '[': app(next_control);@+app_scrap(lpar,maybe_math);@+break;
- case ')': case ']': app(next_control);@+app_scrap(rpar,maybe_math);@+break;
- case '{': app_str("\\{"@q}@>);@+app_scrap(lbrace,yes_math);@+break;
-@.\\\{@>@q}@>
- case '}': app_str(@q{@>"\\}");@+app_scrap(rbrace,yes_math);@+break;
-@q{@>@.\\\}@>
- case ',': app(',');@+app_scrap(comma,yes_math);@+break;
- case ';': app(';');@+app_scrap(semi,maybe_math);@+break;
- case ':': app(':');@+app_scrap(colon,no_math);@+break;@/
- @t\4@> @<Cases involving nonstandard characters@>@;
- case thin_space: app_str("\\,");@+app_scrap(insert,maybe_math);@+break;
-@.\\,@>
- case math_break: app(opt);@+app_str("0");@+
- app_scrap(insert,maybe_math);@+break;
- case line_break: app(force);@+app_scrap(insert,no_math);@+break;
- case left_preproc: app(force);@+app(preproc_line);@+app_str("\\#");
- app_scrap(lproc,no_math);@+break;
-@.\\\#@>
- case right_preproc: app(force);@+app_scrap(rproc,no_math);@+break;
- case big_line_break: app(big_force);@+app_scrap(insert,no_math);@+break;
- case no_line_break: app(big_cancel);@+app(noop);@+app(break_space);@+
- app(noop);@+app(big_cancel); app_scrap(insert,no_math);@+break;
- case pseudo_semi: app_scrap(semi,maybe_math);@+break;
- case macro_arg_open: app_scrap(begin_arg,maybe_math);@+break;
- case macro_arg_close: app_scrap(end_arg,maybe_math);@+break;
- case join: app_str("\\J");@+app_scrap(insert,no_math);@+break;
-@.\\J@>
- case output_defs_code: app(force);@+app_str("\\ATH");@+app(force);
- app_scrap(insert,no_math);@+break;
-@.\\ATH@>
- default: app(inserted);@+app(next_control);
- app_scrap(insert,maybe_math);@+break;
-}
-@z
-
-@x
overflow("scrap/token/text");
@y
overflow(_("scrap/token/text"));
@z
@x
-case not_eq: app_str("\\I");@+app_scrap(binop,yes_math);@+break;
-@y
-case non_eq: app_str("\\I");@+app_scrap(binop,yes_math);@+break;
-@z
-
-@x
else err_print("! Double @@ should be used in strings");
@y
else err_print(_("! Double @@ should be used in strings"));
@z
@x
-void app_cur_id();
-@y
-void app_cur_id(boolean);@/
-@z
-
-@x
-void
-app_cur_id(scrapping)
-boolean scrapping; /* are we making this into a scrap? */
-@y
-void
-app_cur_id(@t\1\1@>
-boolean scrapping@t\2\2@>) /* are we making this into a scrap? */
-@z
-
-@x
-text_pointer
-C_translate()
-@y
-static text_pointer
-C_translate(void)
-@z
-
-@x
if (next_control!='|') err_print("! Missing '|' after C text");
@y
if (next_control!='|') err_print(_("! Missing '|' after C text"));
@z
@x
-void
-outer_parse() /* makes scraps from \CEE/ tokens and comments */
-@y
-static void
-outer_parse(void) /* makes scraps from \CEE/ tokens and comments */
-@z
-
-@x
-void
-push_level(p) /* suspends the current level */
-text_pointer p;
-@y
-static void
-push_level(@t\1\1@> /* suspends the current level */
-text_pointer p@t\2\2@>)
-@z
-
-@x
if (stack_ptr==stack_end) overflow("stack");
@y
if (stack_ptr==stack_end) overflow(_("stack"));
@z
@x
-void
-pop_level()
-@y
-static void
-pop_level(void)
-@z
-
-@x
-eight_bits
-get_output() /* returns the next token of output */
-@y
-static eight_bits
-get_output(void) /* returns the next token of output */
-@z
-
-@x
- return(a);
-@y
- return((eight_bits)a);
-@z
-
-@x
-void
-output_C() /* outputs the current token list */
-@y
-static void
-output_C(void) /* outputs the current token list */
-@z
-
-@x
-void make_output();
-@y
-static void make_output(void);@/
-@z
-
-@x
-void
-make_output() /* outputs the equivalents of tokens */
-{
- eight_bits a, /* current output byte */
-@y
-static void
-make_output(void) /* outputs the equivalents of tokens */
-{
- eight_bits a=0, /* current output byte */
-@z
-
-@x
- else if (b!='|') out(b)@;
-@y
- else { if (b!='|') out(b)@;
-@z
-
-@x
- }
-@y
- } }
-@z
-
-@x
- printf("\n! Illegal control code in section name: <");
+ fputs("\n! Illegal control code in section name: <",stdout);
@y
fputs(_("\n! Illegal control code in section name: <"),stdout);
@z
@x
- printf("\n! C text in section name didn't end: <");
+ fputs("\n! C text in section name didn't end: <",stdout);
@y
fputs(_("\n! C text in section name didn't end: <"),stdout);
@z
@x
- if (b=='\'' || b=='"')
- if (delim==0) delim=b;
- else if (delim==b) delim=0;
-@y
- if (b=='\'' || b=='"') {
- if (delim==0) delim=b;
- else if (delim==b) delim=0; }
-@z
-
-@x
if (j>buffer+long_buf_size-3) overflow("buffer");
@y
if (j>buffer+long_buf_size-3) overflow(_("buffer"));
@@ -1473,21 +461,7 @@ make_output(void) /* outputs the equivalents of tokens */
@z
@x
-void phase_two();
-@y
-static void phase_two(void);@/
-@z
-
-@x
-void
-phase_two() {
-@y
-static void
-phase_two(void) {
-@z
-
-@x
-reset_input(); if (show_progress) printf("\nWriting the output file...");
+reset_input(); if (show_progress) fputs("\nWriting the output file...",stdout);
@y
reset_input(); if (show_progress) fputs(_("\nWriting the output file..."),stdout);
@z
@@ -1505,42 +479,6 @@ reset_input(); if (show_progress) fputs(_("\nWriting the output file..."),stdout
@z
@x
-void finish_C();
-@y
-static void finish_C(boolean);@/
-@z
-
-@x
-void
-finish_C(visible) /* finishes a definition or a \CEE/ part */
- boolean visible; /* nonzero if we should produce \TEX/ output */
-@y
-static void
-finish_C(@t\1\1@> /* finishes a definition or a \Cee\ part */
- boolean visible@t\2\2@>) /* nonzero if we should produce \TeX\ output */
-@z
-
-@x
- if (out_ptr>out_buf+1)
- if (*(out_ptr-1)=='\\')
-@.\\6@>
-@.\\7@>
-@.\\Y@>
- if (*out_ptr=='6') out_ptr-=2;
- else if (*out_ptr=='7') *out_ptr='Y';
-@y
- if (out_ptr>out_buf+1) {
- if (*(out_ptr-1)=='\\') {
-@.\\6@>
-@.\\7@>
-@.\\Y@>
- if (*out_ptr=='6') out_ptr-=2;
- else if (*out_ptr=='7') *out_ptr='Y';
- }
- }
-@z
-
-@x
err_print("! Improper macro definition");
@y
err_print(_("! Improper macro definition"));
@@ -1571,36 +509,6 @@ finish_C(@t\1\1@> /* finishes a definition or a \Cee\ part */
@z
@x
-void footnote();
-@y
-static void footnote(sixteen_bits);@/
-@z
-
-@x
-void
-footnote(flag) /* outputs section cross-references */
-sixteen_bits flag;
-@y
-static void
-footnote(@t\1\1@> /* outputs section cross-references */
-sixteen_bits flag@t\2\2@>)
-@z
-
-@x
-void phase_three();
-@y
-static void phase_three(void);@/
-@z
-
-@x
-void
-phase_three() {
-@y
-static void
-phase_three(void) {
-@z
-
-@x
if (no_xref) {
finish_line();
out_str("\\end");
@@ -1617,56 +525,24 @@ if (no_xref) {
@z
@x
- phase=3; if (show_progress) printf("\nWriting the index...");
+ phase=3; if (show_progress) fputs("\nWriting the index...",stdout);
@y
phase=3; if (show_progress) fputs(_("\nWriting the index..."),stdout);
@z
@x
- if ((idx_file=fopen(idx_file_name,"w"))==NULL)
-@y
- if ((idx_file=fopen(idx_file_name,"wb"))==NULL)
-@z
-
-@x
fatal("! Cannot open index file ",idx_file_name);
@y
fatal(_("! Cannot open index file "),idx_file_name);
@z
@x
- @<Tell about changed sections@>; finish_line(); finish_line();
-@y
- @<Tell about changed sections@>@; finish_line(); finish_line();
-@z
-
-@x
- @<Do the first pass of sorting@>;
- @<Sort and output the index@>;
-@y
- @<Do the first pass of sorting@>@;
- @<Sort and output the index@>@;
-@z
-
-@x
- if ((scn_file=fopen(scn_file_name,"w"))==NULL)
-@y
- if ((scn_file=fopen(scn_file_name,"wb"))==NULL)
-@z
-
-@x
fatal("! Cannot open section file ",scn_file_name);
@y
fatal(_("! Cannot open section file "),scn_file_name);
@z
@x
- @<Output all the section names@>;
-@y
- @<Output all the section names@>@;
-@z
-
-@x
@.\\end@>
finish_line();
fclose(active_file);
@@ -1679,106 +555,9 @@ finish_line(); fclose(active_file); active_file=NULL;
@z
@x
-if (show_happiness) printf("\nDone.");
+ fputs("Done.",stdout);
@y
-if (show_happiness) {
- if (show_progress) new_line;
fputs(_("Done."),stdout);
-}
-@z
-
-@x
-for (c=0; c<=255; c++) bucket[c]=NULL;
-@y
-for (c=0; c<256; c++) bucket[c]=NULL;
-@z
-
-@x
- if (cur_name->xref!=(char*)xmem) {
-@y
- if (cur_name->xref!=(void *)xmem) {
-@z
-
-@x
-collate[0]=0;
-strcpy(collate+1," \1\2\3\4\5\6\7\10\11\12\13\14\15\16\17");
-/* 16 characters + 1 = 17 */
-strcpy(collate+17,"\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37");
-/* 16 characters + 17 = 33 */
-strcpy(collate+33,"!\42#$%&'()*+,-./:;<=>?@@[\\]^`{|}~_");
-/* 32 characters + 33 = 65 */
-strcpy(collate+65,"abcdefghijklmnopqrstuvwxyz0123456789");
-/* (26 + 10) characters + 65 = 101 */
-strcpy(collate+101,"\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217");
-/* 16 characters + 101 = 117 */
-strcpy(collate+117,"\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237");
-/* 16 characters + 117 = 133 */
-strcpy(collate+133,"\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257");
-/* 16 characters + 133 = 149 */
-strcpy(collate+149,"\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277");
-/* 16 characters + 149 = 165 */
-strcpy(collate+165,"\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317");
-/* 16 characters + 165 = 181 */
-strcpy(collate+181,"\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337");
-/* 16 characters + 181 = 197 */
-strcpy(collate+197,"\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357");
-/* 16 characters + 197 = 213 */
-strcpy(collate+213,"\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377");
-/* 16 characters + 213 = 229 */
-@y
-collate[0]=0;
-strcpy((char *)collate+1,
- " \1\2\3\4\5\6\7\10\11\12\13\14\15\16\17");
-/* 16 characters + 1 = 17 */
-strcpy((char *)collate+17,
- "\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37");
-/* 16 characters + 17 = 33 */
-strcpy((char *)collate+33,
- "!\42#$%&'()*+,-./:;<=>?@@[\\]^`{|}~_");
-/* 32 characters + 33 = 65 */
-strcpy((char *)collate+65,
- "abcdefghijklmnopqrstuvwxyz0123456789");
-/* (26 + 10) characters + 65 = 101 */
-strcpy((char *)collate+101,
- "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217");
-/* 16 characters + 101 = 117 */
-strcpy((char *)collate+117,
- "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237");
-/* 16 characters + 117 = 133 */
-strcpy((char *)collate+133,
- "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257");
-/* 16 characters + 133 = 149 */
-strcpy((char *)collate+149,
- "\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277");
-/* 16 characters + 149 = 165 */
-strcpy((char *)collate+165,
- "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317");
-/* 16 characters + 165 = 181 */
-strcpy((char *)collate+181,
- "\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337");
-/* 16 characters + 181 = 197 */
-strcpy((char *)collate+197,
- "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357");
-/* 16 characters + 197 = 213 */
-strcpy((char *)collate+213,
- "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377");
-/* 16 characters + 213 = 229 */
-@z
-
-@x
-void unbucket();
-@y
-static void unbucket(eight_bits);@/
-@z
-
-@x
-void
-unbucket(d) /* empties buckets having depth |d| */
-eight_bits d;
-@y
-static void
-unbucket(@t\1\1@> /* empties buckets having depth |d| */
-eight_bits d@t\2\2@>)
@z
@x
@@ -1788,144 +567,78 @@ eight_bits d@t\2\2@>)
@z
@x
-void section_print();
-@y
-static void section_print(name_pointer);@/
-@z
-
-@x
-void
-section_print(p) /* print all section names in subtree |p| */
-name_pointer p;
-@y
-static void
-section_print(@t\1\1@> /* print all section names in subtree |p| */
-name_pointer p@t\2\2@>)
-@z
-
-@x
-@ @<Output all the section names@>=section_print(root)
-@y
-@ @<Output all the section names@>=section_print(root);
-@z
-
-@x
-void
-print_stats() {
-@y
-void
-print_stats(void) {
-@z
-
-@x
- printf("\nMemory usage statistics:\n");
+ puts("\nMemory usage statistics:");
@.Memory usage statistics:@>
printf("%ld names (out of %ld)\n",
- (long)(name_ptr-name_dir),(long)max_names);
+ (ptrdiff_t)(name_ptr-name_dir),(long)max_names);
printf("%ld cross-references (out of %ld)\n",
- (long)(xref_ptr-xmem),(long)max_refs);
+ (ptrdiff_t)(xref_ptr-xmem),(long)max_refs);
printf("%ld bytes (out of %ld)\n",
- (long)(byte_ptr-byte_mem),(long)max_bytes);
- printf("Parsing:\n");
+ (ptrdiff_t)(byte_ptr-byte_mem),(long)max_bytes);
+ puts("Parsing:");
printf("%ld scraps (out of %ld)\n",
- (long)(max_scr_ptr-scrap_info),(long)max_scraps);
+ (ptrdiff_t)(max_scr_ptr-scrap_info),(long)max_scraps);
printf("%ld texts (out of %ld)\n",
- (long)(max_text_ptr-tok_start),(long)max_texts);
+ (ptrdiff_t)(max_text_ptr-tok_start),(long)max_texts);
printf("%ld tokens (out of %ld)\n",
- (long)(max_tok_ptr-tok_mem),(long)max_toks);
+ (ptrdiff_t)(max_tok_ptr-tok_mem),(long)max_toks);
printf("%ld levels (out of %ld)\n",
- (long)(max_stack_ptr-stack),(long)stack_size);
- printf("Sorting:\n");
+ (ptrdiff_t)(max_stack_ptr-stack),(long)stack_size);
+ puts("Sorting:");
printf("%ld levels (out of %ld)\n",
- (long)(max_sort_ptr-scrap_info),(long)max_scraps);
-}
+ (ptrdiff_t)(max_sort_ptr-scrap_info),(long)max_scraps);
@y
puts(_("\nMemory usage statistics:"));
@.Memory usage statistics:@>
printf(_("%ld names (out of %ld)\n"),
- (long)(name_ptr-name_dir),(long)max_names);
+ (ptrdiff_t)(name_ptr-name_dir),(long)max_names);
printf(_("%ld cross-references (out of %ld)\n"),
- (long)(xref_ptr-xmem),(long)max_refs);
+ (ptrdiff_t)(xref_ptr-xmem),(long)max_refs);
printf(_("%ld bytes (out of %ld)\n"),
- (long)(byte_ptr-byte_mem),(long)max_bytes);
+ (ptrdiff_t)(byte_ptr-byte_mem),(long)max_bytes);
puts(_("Parsing:"));
printf(_("%ld scraps (out of %ld)\n"),
- (long)(max_scr_ptr-scrap_info),(long)max_scraps);
+ (ptrdiff_t)(max_scr_ptr-scrap_info),(long)max_scraps);
printf(_("%ld texts (out of %ld)\n"),
- (long)(max_text_ptr-tok_start),(long)max_texts);
+ (ptrdiff_t)(max_text_ptr-tok_start),(long)max_texts);
printf(_("%ld tokens (out of %ld)\n"),
- (long)(max_tok_ptr-tok_mem),(long)max_toks);
+ (ptrdiff_t)(max_tok_ptr-tok_mem),(long)max_toks);
printf(_("%ld levels (out of %ld)\n"),
- (long)(max_stack_ptr-stack),(long)stack_size);
+ (ptrdiff_t)(max_stack_ptr-stack),(long)stack_size);
puts(_("Sorting:"));
printf(_("%ld levels (out of %ld)\n"),
- (long)(max_sort_ptr-scrap_info),(long)max_scraps);
-}
+ (ptrdiff_t)(max_sort_ptr-scrap_info),(long)max_scraps);
@z
@x
@** Index.
@y
-@** Extensions for modern {\tt CWEB}. The following sections introduce changes
-and extensions to the code that have been created by numerous contributors over
-the course of a quarter century. They make \.{CWEB} adhere to modern coding
-standards and introduce new or improved features.
+@** Extensions to \.{CWEB}. The following sections introduce new or improved
+features that have been created by numerous contributors over the course of a
+quarter century.
Care has been taken to keep the original section numbering intact, so this new
-section should have the same number as the original ``\&{250.~Index},'' and
-additional material follows below.
+material should nicely integrate with the original ``\&{263.~Index}.''
-@* Set {\tt CWEAVE} flags.
-At least one of these is already used in \.{COMMON}.
+@* Formatting alternatives.
+\.{CWEAVE} indents declarations after old-style function definitions.
+With the \.{-i} option they will come out flush left. You won't see
+any difference if you use ANSI-style function definitions.
+
+@d indent_param_decl flags['i'] /* should formal parameter declarations be indented? */
@<Set init...@>=
- make_xrefs=force_lines=make_pb=indent_param_decl=order_decl_stmt=1;
- /* controlled by command-line options */
-
-@* Function declarations. Here are declarations---conforming to
-{\mc ANSI~C}---of all functions in this code, as far as they are
-not already in |"common.h"|. These are private to \.{CWEAVE}.
-
-@<Predecl...@>=
-static eight_bits copy_TeX(void);@/
-static eight_bits get_output(void);@/
-static eight_bits skip_TeX(void);@/
-static text_pointer C_translate(void);@/
-static text_pointer translate(void);@/
-static token_pointer find_first_ident(text_pointer);@/
-static void app_str(const char *);@/
-static void big_app(token);@/
-static void big_app1(scrap_pointer);@/
-static void copy_limbo(void);@/
-static void C_parse(eight_bits);@/
-static void finish_line(void);@/
-static void flush_buffer(char *,boolean,boolean);@/
-static void make_reserved(scrap_pointer);@/
-static void make_underlined(scrap_pointer);@/
-static void new_section_xref(name_pointer);@/
-static void new_xref(name_pointer);@/
-static void outer_parse(void);@/
-static void output_C(void);@/
-static void out_name(name_pointer,boolean);@/
-static void out_section(sixteen_bits);@/
-static void out_str(const char *);@/
-static void pop_level(void);@/
-static void print_cat(eight_bits);@/
-#ifdef DEAD_CODE
-static void print_text(text_pointer p);@/
-#endif
-static void push_level(text_pointer);@/
-static void reduce(scrap_pointer,short,eight_bits,short,short);@/
-static void set_file_flag(name_pointer);@/
-static void skip_limbo(void);@/
-static void squash(scrap_pointer,short,eight_bits,short,short);@/
-static void update_node(name_pointer p);@/
-
-@* Language setting. This global variable is defined and set in \.{COMMON} by
-the `\.{+l}' (or `\.{-l}') command-line option.
-
-@<Global var...@>=
-extern const char *use_language; /* prefix to \.{cwebmac.tex} in \TEX/ output */
+indent_param_decl=true;
+
+@ The original manual described the \.{-o} option for \.{CWEAVE}, but this was
+not yet present. Here is a simple implementation. The purpose is to suppress
+the extra space between local variable declarations and the first statement in
+a function block.
+
+@d order_decl_stmt flags['o'] /* should declarations and statements be separated? */
+
+@<Set init...@>=
+order_decl_stmt=true;
@* Output file update. Most \CEE/ projects are controlled by a
\.{Makefile} that automatically takes care of the temporal dependecies