Fix #1: Build without warnings #3

Merged
mgrettondann merged 5 commits from origin/1-compile-without-warnings into main 2024-03-15 15:39:46 +00:00
12 changed files with 1530 additions and 436 deletions

23
arena.c
View File

@@ -1,13 +1,20 @@
#line 938 "nuweb.w"
#include "global.h" #include "global.h"
#line 6512 "nuweb.w"
typedef struct chunk { typedef struct chunk {
struct chunk *next; struct chunk *next;
char *limit; char *limit;
char *avail; char *avail;
} Chunk; } Chunk;
#line 6526 "nuweb.w"
static Chunk first = { NULL, NULL, NULL }; static Chunk first = { NULL, NULL, NULL };
static Chunk *arena = &first; static Chunk *arena = &first;
void *arena_getmem(n)
size_t n; #line 6540 "nuweb.w"
void *arena_getmem(size_t n)
{ {
char *q; char *q;
char *p = arena->avail; char *p = arena->avail;
@@ -18,6 +25,8 @@ void *arena_getmem(n)
return p; return p;
} }
/* Find a new chunk of memory */ /* Find a new chunk of memory */
#line 6561 "nuweb.w"
{ {
Chunk *ap = arena; Chunk *ap = arena;
Chunk *np = ap->next; Chunk *np = ap->next;
@@ -32,6 +41,8 @@ void *arena_getmem(n)
np = ap->next; np = ap->next;
} }
/* Allocate a new chunk of memory */ /* Allocate a new chunk of memory */
#line 6581 "nuweb.w"
{ {
size_t m = n + 10000; size_t m = n + 10000;
np = (Chunk *) malloc(m); np = (Chunk *) malloc(m);
@@ -42,9 +53,15 @@ void *arena_getmem(n)
arena = np; arena = np;
return sizeof(Chunk) + (char *) np; return sizeof(Chunk) + (char *) np;
} }
#line 6574 "nuweb.w"
} }
#line 6550 "nuweb.w"
} }
void arena_free()
#line 6598 "nuweb.w"
void arena_free(void)
{ {
arena = &first; arena = &first;
} }

View File

@@ -1,6 +1,10 @@
#line 944 "nuweb.w"
#include "global.h" #include "global.h"
/* Operating System Dependencies */ /* Operating System Dependencies */
#line 972 "nuweb.w"
#if defined(VMS) #if defined(VMS)
#define PATH_SEP(c) (c==']'||c==':') #define PATH_SEP(c) (c==']'||c==':')
#define PATH_SEP_CHAR "" #define PATH_SEP_CHAR ""
@@ -15,7 +19,11 @@
#define DEFAULT_PATH "." #define DEFAULT_PATH "."
#endif #endif
#line 945 "nuweb.w"
/* Global variable definitions */ /* Global variable definitions */
#line 1067 "nuweb.w"
int tex_flag = TRUE; int tex_flag = TRUE;
int html_flag = FALSE; int html_flag = FALSE;
int output_flag = TRUE; int output_flag = TRUE;
@@ -38,19 +46,39 @@ char * hyperoptions = "";
int includepath_flag = FALSE; /* Do we have an include path? */ int includepath_flag = FALSE; /* Do we have an include path? */
struct incl * include_list = NULL; struct incl * include_list = NULL;
/* The list of include paths */ /* The list of include paths */
#line 1097 "nuweb.w"
int nw_char='@'; int nw_char='@';
#line 1108 "nuweb.w"
char *command_name = NULL; char *command_name = NULL;
#line 1510 "nuweb.w"
unsigned char current_sector = 1; unsigned char current_sector = 1;
unsigned char prev_sector = 1; unsigned char prev_sector = 1;
#line 1707 "nuweb.w"
char blockBuff[6400]; char blockBuff[6400];
#line 2422 "nuweb.w"
int extra_scraps = 0; int extra_scraps = 0;
#line 3906 "nuweb.w"
char *source_name = NULL; char *source_name = NULL;
int source_line = 0; int source_line = 0;
#line 4241 "nuweb.w"
int already_warned = 0; int already_warned = 0;
#line 5108 "nuweb.w"
Name *file_names = NULL; Name *file_names = NULL;
Name *macro_names = NULL; Name *macro_names = NULL;
Name *user_names = NULL; Name *user_names = NULL;
int scrap_name_has_parameters; int scrap_name_has_parameters;
int scrap_ended_with; int scrap_ended_with;
#line 946 "nuweb.w"
#line 6478 "nuweb.w"
label_node * label_tab = NULL; label_node * label_tab = NULL;

161
global.h
View File

@@ -1,5 +1,9 @@
#line 826 "nuweb.w"
/* Include files */ /* Include files */
#line 835 "nuweb.w"
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@@ -7,7 +11,11 @@
#include <signal.h> #include <signal.h>
#include <locale.h> #include <locale.h>
#line 826 "nuweb.w"
/* Type declarations */ /* Type declarations */
#line 854 "nuweb.w"
#ifndef FALSE #ifndef FALSE
#define FALSE 0 #define FALSE 0
#endif #endif
@@ -15,12 +23,21 @@
#define TRUE 1 #define TRUE 1
#endif #endif
#line 1815 "nuweb.w"
typedef int *Parameters;
#line 3784 "nuweb.w"
#define MAX_INDENT 500 #define MAX_INDENT 500
#line 5074 "nuweb.w"
typedef struct scrap_node { typedef struct scrap_node {
struct scrap_node *next; struct scrap_node *next;
int scrap; int scrap;
char quoted; char quoted;
} Scrap_Node; } Scrap_Node;
#line 5083 "nuweb.w"
typedef struct name { typedef struct name {
char *spelling; char *spelling;
struct name *llink; struct name *llink;
@@ -35,20 +52,30 @@ typedef struct name {
unsigned char comment_flag; unsigned char comment_flag;
unsigned char sector; unsigned char sector;
} Name; } Name;
#line 5536 "nuweb.w"
#define ARG_CHR '\001' #define ARG_CHR '\001'
#line 5596 "nuweb.w"
typedef struct arglist typedef struct arglist
{Name * name; {Name * name;
struct arglist * args; struct arglist * args;
struct arglist * next; struct arglist * next;
} Arglist; } Arglist;
#line 5760 "nuweb.w"
typedef struct embed { typedef struct embed {
Scrap_Node * defs; Scrap_Node * defs;
Arglist * args; Arglist * args;
} Embed_Node; } Embed_Node;
#line 6240 "nuweb.w"
typedef struct uses { typedef struct uses {
struct uses *next; struct uses *next;
Name *defn; Name *defn;
} Uses; } Uses;
#line 6482 "nuweb.w"
typedef struct l_node typedef struct l_node
{ {
struct l_node * left, * right; struct l_node * left, * right;
@@ -56,13 +83,21 @@ typedef struct l_node
char name[1]; char name[1];
} label_node; } label_node;
#line 827 "nuweb.w"
/* Limits */ /* Limits */
#line 864 "nuweb.w"
#ifndef MAX_NAME_LEN #ifndef MAX_NAME_LEN
#define MAX_NAME_LEN 1024 #define MAX_NAME_LEN 1024
#endif #endif
#line 828 "nuweb.w"
/* Global variable declarations */ /* Global variable declarations */
#line 1036 "nuweb.w"
extern int tex_flag; /* if FALSE, don't emit the documentation file */ extern int tex_flag; /* if FALSE, don't emit the documentation file */
extern int html_flag; /* if TRUE, emit HTML instead of LaTeX scraps. */ extern int html_flag; /* if TRUE, emit HTML instead of LaTeX scraps. */
extern int output_flag; /* if FALSE, don't emit the output files */ extern int output_flag; /* if FALSE, don't emit the output files */
@@ -86,62 +121,135 @@ extern char * hyperoptions; /* The options to pass to the
extern int includepath_flag; /* Do we have an include path? */ extern int includepath_flag; /* Do we have an include path? */
extern struct incl{char * name; struct incl * next;} * include_list; extern struct incl{char * name; struct incl * next;} * include_list;
/* The list of include paths */ /* The list of include paths */
#line 1094 "nuweb.w"
extern int nw_char; extern int nw_char;
#line 1104 "nuweb.w"
extern char *command_name; extern char *command_name;
#line 1505 "nuweb.w"
extern unsigned char current_sector; extern unsigned char current_sector;
extern unsigned char prev_sector; extern unsigned char prev_sector;
#line 1703 "nuweb.w"
extern char blockBuff[6400]; extern char blockBuff[6400];
#line 2418 "nuweb.w"
extern int extra_scraps; extern int extra_scraps;
#line 3901 "nuweb.w"
extern char *source_name; /* name of the current file */ extern char *source_name; /* name of the current file */
extern int source_line; /* current line in the source file */ extern int source_line; /* current line in the source file */
#line 4237 "nuweb.w"
extern int already_warned; extern int already_warned;
#line 5100 "nuweb.w"
extern Name *file_names; extern Name *file_names;
extern Name *macro_names; extern Name *macro_names;
extern Name *user_names; extern Name *user_names;
extern int scrap_name_has_parameters; extern int scrap_name_has_parameters;
extern int scrap_ended_with; extern int scrap_ended_with;
#line 6491 "nuweb.w"
extern label_node * label_tab; extern label_node * label_tab;
#line 829 "nuweb.w"
/* Function prototypes */ /* Function prototypes */
extern void pass1();
extern void write_tex(); #line 1400 "nuweb.w"
extern void pass1(char *file_name);
#line 2034 "nuweb.w"
extern void write_tex(char *file_name, char *tex_name);
#line 2582 "nuweb.w"
void initialise_delimit_scrap_array(void); void initialise_delimit_scrap_array(void);
#line 2676 "nuweb.w"
void update_delimit_scrap(); void update_delimit_scrap();
#line 3100 "nuweb.w"
extern int has_sector(Name *, unsigned char); extern int has_sector(Name *, unsigned char);
extern void write_html();
extern void write_files(); #line 3227 "nuweb.w"
extern void source_open(); /* pass in the name of the source file */ extern void write_html(char *file_name, char *html_name);
extern int source_get(); /* no args; returns the next char or EOF */
#line 3764 "nuweb.w"
extern void write_files(Name *files);
#line 3889 "nuweb.w"
extern void source_open(char *name);
/* pass in the name of the source file */
extern int source_get(void);
/* no args; returns the next char or EOF */
extern int source_last; /* what last source_get() returned. */ extern int source_last; /* what last source_get() returned. */
extern int source_peek; /* The next character to get */ extern int source_peek; /* The next character to get */
#line 3964 "nuweb.w"
extern void source_ungetc(int*); extern void source_ungetc(int*);
extern void init_scraps();
extern int collect_scrap(); #line 4173 "nuweb.w"
extern int write_scraps(); extern void init_scraps(void);
extern void write_scrap_ref(); extern int collect_scrap(void);
extern void write_single_scrap_ref(); extern int write_scraps(FILE *file, char *spelling, Scrap_Node *defs,
extern int num_scraps(); int global_indent, char *indent_chars,
char debug_flag, char tab_flag, char indent_flag,
unsigned char comment_flag, Arglist *inArgs,
char *inParams[9], Parameters parameters,
char *title);
extern void write_scrap_ref(FILE *file, int num, int first, int *page);
extern void write_single_scrap_ref(FILE *file, int num);
extern int num_scraps(void);
#line 4501 "nuweb.w"
extern void add_to_use(Name * name, int current_scrap); extern void add_to_use(Name * name, int current_scrap);
Arglist * instance();
extern void collect_numbers(); #line 4575 "nuweb.w"
extern Name *collect_file_name(); extern Arglist *instance(Arglist *a, Arglist *par, char *arg[9], int *ch);
extern Name *collect_macro_name();
extern Arglist *collect_scrap_name(); #line 4984 "nuweb.w"
extern Name *name_add(); extern void collect_numbers(char *aux_name);
extern Name *prefix_add();
extern char *save_string(); #line 5116 "nuweb.w"
extern void reverse_lists(); extern Name *collect_file_name(void);
extern Name *collect_macro_name(void);
extern Arglist *collect_scrap_name(int current_scrap);
extern Name *name_add(Name **rt, char *spelling, unsigned char sector);
extern Name *prefix_add(Name **rt, char *spelling, unsigned char sector);
extern char *save_string(char *);
extern void reverse_lists(Name *names);
#line 5260 "nuweb.w"
extern int robs_strcmp(char*, char*); extern int robs_strcmp(char*, char*);
extern Name *install_args();
extern void search(); #line 5579 "nuweb.w"
extern Name *install_args(Name * name, int argc, char *arg[0]);
#line 6000 "nuweb.w"
extern void search(void);
#line 6247 "nuweb.w"
extern void format_uses_refs(FILE *, int); extern void format_uses_refs(FILE *, int);
#line 6302 "nuweb.w"
extern void format_defs_refs(FILE *, int); extern void format_defs_refs(FILE *, int);
#line 6413 "nuweb.w"
void write_label(char label_name[], FILE * file); void write_label(char label_name[], FILE * file);
extern void *arena_getmem();
extern void arena_free(); #line 6506 "nuweb.w"
extern void *arena_getmem(size_t n);
extern void arena_free(void);
#line 830 "nuweb.w"
/* Operating System Dependencies */ /* Operating System Dependencies */
#line 972 "nuweb.w"
#if defined(VMS) #if defined(VMS)
#define PATH_SEP(c) (c==']'||c==':') #define PATH_SEP(c) (c==']'||c==':')
#define PATH_SEP_CHAR "" #define PATH_SEP_CHAR ""
@@ -155,4 +263,5 @@ extern void arena_free();
#define PATH_SEP_CHAR "/" #define PATH_SEP_CHAR "/"
#define DEFAULT_PATH "." #define DEFAULT_PATH "."
#endif #endif
typedef int *Parameters;
#line 831 "nuweb.w"

47
html.c
View File

@@ -1,14 +1,17 @@
#include "global.h" #include "global.h"
static int scraps = 1; static int scraps = 1;
static void copy_scrap(); /* formats the body of a scrap */ static void copy_scrap(FILE *file, int prefix);
static void display_scrap_ref(); /* formats a scrap reference */ /* formats the body of a scrap */
static void display_scrap_numbers(); /* formats a list of scrap numbers */ static void display_scrap_ref(FILE *html_file, int num);
static void print_scrap_numbers(); /* pluralizes scrap formats list */ /* formats a scrap reference */
static void format_entry(); /* formats an index entry */ static void display_scrap_numbers(FILE *html_file, Scrap_Node *scraps);
static void format_user_entry(); /* formats a list of scrap numbers */
void write_html(file_name, html_name) static void print_scrap_numbers(FILE *html_file, Scrap_Node *scraps);
char *file_name; /* pluralizes scrap formats list */
char *html_name; static void format_entry(Name *name, FILE *html_file, int file_flag);
/* formats an index entry */
static void format_user_entry(Name *name, FILE *html_file, int sector);
void write_html(char *file_name, char *html_name)
{ {
FILE *html_file = fopen(html_name, "w"); FILE *html_file = fopen(html_name, "w");
FILE *tex_file = html_file; FILE *tex_file = html_file;
@@ -183,9 +186,7 @@ void write_html(file_name, html_name)
else else
fprintf(stderr, "%s: can't open %s\n", command_name, html_name); fprintf(stderr, "%s: can't open %s\n", command_name, html_name);
} }
static void display_scrap_ref(html_file, num) static void display_scrap_ref(FILE *html_file, int num)
FILE *html_file;
int num;
{ {
fputs("<a href=\"#nuweb", html_file); fputs("<a href=\"#nuweb", html_file);
write_single_scrap_ref(html_file, num); write_single_scrap_ref(html_file, num);
@@ -193,9 +194,7 @@ static void display_scrap_ref(html_file, num)
write_single_scrap_ref(html_file, num); write_single_scrap_ref(html_file, num);
fputs("</a>", html_file); fputs("</a>", html_file);
} }
static void display_scrap_numbers(html_file, scraps) static void display_scrap_numbers(FILE *html_file, Scrap_Node *scraps)
FILE *html_file;
Scrap_Node *scraps;
{ {
display_scrap_ref(html_file, scraps->scrap); display_scrap_ref(html_file, scraps->scrap);
scraps = scraps->next; scraps = scraps->next;
@@ -205,16 +204,12 @@ static void display_scrap_numbers(html_file, scraps)
scraps = scraps->next; scraps = scraps->next;
} }
} }
static void print_scrap_numbers(html_file, scraps) static void print_scrap_numbers(FILE *html_file, Scrap_Node *scraps)
FILE *html_file;
Scrap_Node *scraps;
{ {
display_scrap_numbers(html_file, scraps); display_scrap_numbers(html_file, scraps);
fputs(".\n", html_file); fputs(".\n", html_file);
} }
static void copy_scrap(file, prefix) static void copy_scrap(FILE *file, int prefix)
FILE *file;
int prefix;
{ {
int indent = 0; int indent = 0;
int c = source_get(); int c = source_get();
@@ -353,10 +348,7 @@ static void copy_scrap(file, prefix)
c = source_get(); c = source_get();
} }
} }
static void format_entry(name, html_file, file_flag) static void format_entry(Name *name, FILE *html_file, int file_flag)
Name *name;
FILE *html_file;
int file_flag;
{ {
while (name) { while (name) {
format_entry(name->llink, html_file, file_flag); format_entry(name->llink, html_file, file_flag);
@@ -395,10 +387,7 @@ static void format_entry(name, html_file, file_flag)
name = name->rlink; name = name->rlink;
} }
} }
static void format_user_entry(name, html_file, sector) static void format_user_entry(Name *name, FILE *html_file, int sector)
Name *name;
FILE *html_file;
int sector;
{ {
while (name) { while (name) {
format_user_entry(name->llink, html_file, sector); format_user_entry(name->llink, html_file, sector);

37
input.c
View File

@@ -1,21 +1,31 @@
#line 919 "nuweb.w"
#include "global.h" #include "global.h"
#line 3914 "nuweb.w"
static FILE *source_file; /* the current input file */ static FILE *source_file; /* the current input file */
static int double_at; static int double_at;
static int include_depth; static int include_depth;
#line 3921 "nuweb.w"
static struct { static struct {
FILE *file; FILE *file;
char *name; char *name;
int line; int line;
} stack[10]; } stack[10];
#line 3938 "nuweb.w"
int source_peek; int source_peek;
int source_last; int source_last;
int source_get() int source_get(void)
{ {
int c; int c;
source_last = c = source_peek; source_last = c = source_peek;
switch (c) { switch (c) {
case EOF: { case EOF:
#line 4088 "nuweb.w"
{
fclose(source_file); fclose(source_file);
if (include_depth) { if (include_depth) {
include_depth--; include_depth--;
@@ -26,12 +36,16 @@ int source_get()
c = source_get(); c = source_get();
} }
} }
#line 3946 "nuweb.w"
return c; return c;
case '\n': source_line++; case '\n': source_line++;
default: default:
if (c==nw_char) if (c==nw_char)
{ {
/* Handle an ``at'' character */ /* Handle an ``at'' character */
#line 3985 "nuweb.w"
{ {
c = getc(source_file); c = getc(source_file);
if (double_at) { if (double_at) {
@@ -41,7 +55,9 @@ int source_get()
} }
else else
switch (c) { switch (c) {
case 'i': { case 'i':
#line 4027 "nuweb.w"
{
char name[FILENAME_MAX]; char name[FILENAME_MAX];
char fullname[FILENAME_MAX]; char fullname[FILENAME_MAX];
struct incl * p = include_list; struct incl * p = include_list;
@@ -52,6 +68,8 @@ int source_get()
exit(-1); exit(-1);
} }
/* Collect include-file name */ /* Collect include-file name */
#line 4067 "nuweb.w"
{ {
char *p = name; char *p = name;
do do
@@ -68,6 +86,8 @@ int source_get()
exit(-1); exit(-1);
} }
} }
#line 4037 "nuweb.w"
stack[include_depth].file = source_file; stack[include_depth].file = source_file;
fullname[0] = '\0'; fullname[0] = '\0';
for (;;) { for (;;) {
@@ -95,6 +115,8 @@ int source_get()
source_peek = getc(source_file); source_peek = getc(source_file);
c = source_get(); c = source_get();
} }
#line 3994 "nuweb.w"
break; break;
case '#': case 'f': case 'm': case 'u': case 'v': case '#': case 'f': case 'm': case 'u': case 'v':
case 'd': case 'o': case 'D': case 'O': case 's': case 'd': case 'o': case 'D': case 'O': case 's':
@@ -125,12 +147,16 @@ int source_get()
exit(-1); exit(-1);
} }
} }
#line 3952 "nuweb.w"
return c; return c;
} }
source_peek = getc(source_file); source_peek = getc(source_file);
return c; return c;
} }
} }
#line 3969 "nuweb.w"
void source_ungetc(int *c) void source_ungetc(int *c)
{ {
ungetc(source_peek, source_file); ungetc(source_peek, source_file);
@@ -138,8 +164,9 @@ void source_ungetc(int *c)
source_line--; source_line--;
source_peek=*c; source_peek=*c;
} }
void source_open(name)
char *name; #line 4107 "nuweb.w"
void source_open(char *name)
{ {
source_file = fopen(name, "r"); source_file = fopen(name, "r");
if (!source_file) { if (!source_file) {

411
latex.c
View File

@@ -1,17 +1,25 @@
#line 893 "nuweb.w"
#include "global.h" #include "global.h"
static int scraps = 1; static int scraps = 1;
static void copy_scrap(); /* formats the body of a scrap */
static void print_scrap_numbers(); /* formats a list of scrap numbers */ #line 2041 "nuweb.w"
static void format_entry(); /* formats an index entry */ static void copy_scrap(FILE *file, int prefix, Name *name);
static void format_file_entry(); /* formats a file index entry */ /* formats the body of a scrap */
static void format_user_entry(); static void print_scrap_numbers(FILE *tex_file, Scrap_Node *scraps);
static void write_arg(); /* formats a list of scrap numbers */
static void write_literal(); static void format_entry(Name *name, FILE *tex_file, unsigned char sector);
static void write_ArglistElement(); /* formats an index entry */
void write_tex(file_name, tex_name, sector) static void format_file_entry(Name *name, FILE *tex_file);
char *file_name; /* formats a file index entry */
char *tex_name; static void format_user_entry(Name *name, FILE *tex_file,
unsigned char sector; unsigned char sector);
static void write_arg(FILE *tex_file, char *p);
static void write_literal(FILE *tex_file, char *p, int mode);
static void write_ArglistElement(FILE *file, Arglist *args, char **params);
#line 2060 "nuweb.w"
void write_tex(char *file_name, char *tex_name)
{ {
FILE *tex_file = fopen(tex_name, "w"); FILE *tex_file = fopen(tex_name, "w");
if (tex_file) { if (tex_file) {
@@ -19,6 +27,8 @@ void write_tex(file_name, tex_name, sector)
fprintf(stderr, "writing %s\n", tex_name); fprintf(stderr, "writing %s\n", tex_name);
source_open(file_name); source_open(file_name);
/* Write LaTeX limbo definitions */ /* Write LaTeX limbo definitions */
#line 2084 "nuweb.w"
if (hyperref_flag) { if (hyperref_flag) {
fputs("\\newcommand{\\NWtarget}[2]{\\hypertarget{#1}{#2}}\n", tex_file); fputs("\\newcommand{\\NWtarget}[2]{\\hypertarget{#1}{#2}}\n", tex_file);
fputs("\\newcommand{\\NWlink}[2]{\\hyperlink{#1}{#2}}\n", tex_file); fputs("\\newcommand{\\NWlink}[2]{\\hyperlink{#1}{#2}}\n", tex_file);
@@ -42,11 +52,19 @@ void write_tex(file_name, tex_name, sector)
if (hyperoptions[0] != '\0') if (hyperoptions[0] != '\0')
{ {
/* Write the hyperlink usage macro */ /* Write the hyperlink usage macro */
#line 2112 "nuweb.w"
fprintf(tex_file, "\\usepackage[%s]{hyperref}", hyperoptions); fprintf(tex_file, "\\usepackage[%s]{hyperref}", hyperoptions);
#line 2106 "nuweb.w"
} }
fputs("}\n", tex_file); fputs("}\n", tex_file);
#line 2067 "nuweb.w"
/* Copy \verb|source_file| into \verb|tex_file| */ /* Copy \verb|source_file| into \verb|tex_file| */
#line 2119 "nuweb.w"
{ {
int inBlock = FALSE; int inBlock = FALSE;
int c = source_get(); int c = source_get();
@@ -54,6 +72,8 @@ void write_tex(file_name, tex_name, sector)
if (c == nw_char) if (c == nw_char)
{ {
/* Interpret at-sequence */ /* Interpret at-sequence */
#line 2135 "nuweb.w"
{ {
int big_definition = FALSE; int big_definition = FALSE;
c = source_get(); c = source_get();
@@ -64,18 +84,26 @@ void write_tex(file_name, tex_name, sector)
update_delimit_scrap(); update_delimit_scrap();
break; break;
case 'O': big_definition = TRUE; case 'O': big_definition = TRUE;
case 'o': { case 'o':
#line 2259 "nuweb.w"
{
Name *name = collect_file_name(); Name *name = collect_file_name();
/* Begin the scrap environment */ /* Begin the scrap environment */
#line 2346 "nuweb.w"
{ {
if (big_definition) if (big_definition)
{ {
if (inBlock) if (inBlock)
{ {
/* End block */ /* End block */
#line 2377 "nuweb.w"
fputs("\\end{minipage}\\vspace{4ex}\n", tex_file); fputs("\\end{minipage}\\vspace{4ex}\n", tex_file);
fputs("\\end{flushleft}\n", tex_file); fputs("\\end{flushleft}\n", tex_file);
inBlock = FALSE; inBlock = FALSE;
#line 2351 "nuweb.w"
} }
fputs("\\begin{flushleft} \\small", tex_file); fputs("\\begin{flushleft} \\small", tex_file);
} }
@@ -84,17 +112,27 @@ void write_tex(file_name, tex_name, sector)
if (inBlock) if (inBlock)
{ {
/* Switch block */ /* Switch block */
#line 2374 "nuweb.w"
fputs("\\par\\vspace{\\baselineskip}\n", tex_file); fputs("\\par\\vspace{\\baselineskip}\n", tex_file);
#line 2359 "nuweb.w"
} }
else else
{ {
/* Start block */ /* Start block */
#line 2370 "nuweb.w"
fputs("\\begin{flushleft} \\small\n\\begin{minipage}{\\linewidth}", tex_file); fputs("\\begin{flushleft} \\small\n\\begin{minipage}{\\linewidth}", tex_file);
inBlock = TRUE; inBlock = TRUE;
#line 2363 "nuweb.w"
} }
} }
fprintf(tex_file, "\\label{scrap%d}\\raggedright\\small\n", scraps); fprintf(tex_file, "\\label{scrap%d}\\raggedright\\small\n", scraps);
} }
#line 2261 "nuweb.w"
fputs("\\NWtarget{nuweb", tex_file); fputs("\\NWtarget{nuweb", tex_file);
write_single_scrap_ref(tex_file, scraps); write_single_scrap_ref(tex_file, scraps);
fputs("}{} ", tex_file); fputs("}{} ", tex_file);
@@ -102,13 +140,19 @@ void write_tex(file_name, tex_name, sector)
write_single_scrap_ref(tex_file, scraps); write_single_scrap_ref(tex_file, scraps);
fputs("}}$\\equiv$\n", tex_file); fputs("}}$\\equiv$\n", tex_file);
/* Fill in the middle of the scrap environment */ /* Fill in the middle of the scrap environment */
#line 2387 "nuweb.w"
{ {
fputs("\\vspace{-1ex}\n\\begin{list}{}{} \\item\n", tex_file); fputs("\\vspace{-1ex}\n\\begin{list}{}{} \\item\n", tex_file);
extra_scraps = 0; extra_scraps = 0;
copy_scrap(tex_file, TRUE, name); copy_scrap(tex_file, TRUE, name);
fputs("{\\NWsep}\n\\end{list}\n", tex_file); fputs("{\\NWsep}\n\\end{list}\n", tex_file);
} }
#line 2268 "nuweb.w"
/* Begin the cross-reference environment */ /* Begin the cross-reference environment */
#line 2433 "nuweb.w"
{ {
fputs("\\vspace{-1.5ex}\n", tex_file); fputs("\\vspace{-1.5ex}\n", tex_file);
fputs("\\footnotesize\n", tex_file); fputs("\\footnotesize\n", tex_file);
@@ -116,8 +160,12 @@ void write_tex(file_name, tex_name, sector)
tex_file); tex_file);
fputs("\\setlength{\\itemindent}{-\\leftmargin}}\n", tex_file);} fputs("\\setlength{\\itemindent}{-\\leftmargin}}\n", tex_file);}
#line 2269 "nuweb.w"
if ( scrap_flag ) { if ( scrap_flag ) {
/* Write file defs */ /* Write file defs */
#line 2452 "nuweb.w"
{ {
if (name->defs) { if (name->defs) {
if (name->defs->next) { if (name->defs->next) {
@@ -130,15 +178,23 @@ void write_tex(file_name, tex_name, sector)
name->spelling); name->spelling);
} }
} }
#line 2271 "nuweb.w"
} }
format_defs_refs(tex_file, scraps); format_defs_refs(tex_file, scraps);
format_uses_refs(tex_file, scraps++); format_uses_refs(tex_file, scraps++);
/* Finish the cross-reference environment */ /* Finish the cross-reference environment */
#line 2446 "nuweb.w"
{ {
fputs("\n\\item{}", tex_file); fputs("\n\\item{}", tex_file);
fputs("\n\\end{list}\n", tex_file); fputs("\n\\end{list}\n", tex_file);
} }
#line 2275 "nuweb.w"
/* Finish the scrap environment */ /* Finish the scrap environment */
#line 2404 "nuweb.w"
{ {
scraps += extra_scraps; scraps += extra_scraps;
if (big_definition) if (big_definition)
@@ -146,32 +202,48 @@ void write_tex(file_name, tex_name, sector)
else else
{ {
/* End block */ /* End block */
#line 2377 "nuweb.w"
fputs("\\end{minipage}\\vspace{4ex}\n", tex_file); fputs("\\end{minipage}\\vspace{4ex}\n", tex_file);
fputs("\\end{flushleft}\n", tex_file); fputs("\\end{flushleft}\n", tex_file);
inBlock = FALSE; inBlock = FALSE;
#line 2410 "nuweb.w"
} }
do do
c = source_get(); c = source_get();
while (isspace(c)); while (isspace(c));
} }
#line 2276 "nuweb.w"
} }
#line 2145 "nuweb.w"
break; break;
case 'Q': case 'Q':
case 'D': big_definition = TRUE; case 'D': big_definition = TRUE;
case 'q': case 'q':
case 'd': { case 'd':
#line 2284 "nuweb.w"
{
Name *name = collect_macro_name(); Name *name = collect_macro_name();
/* Begin the scrap environment */ /* Begin the scrap environment */
#line 2346 "nuweb.w"
{ {
if (big_definition) if (big_definition)
{ {
if (inBlock) if (inBlock)
{ {
/* End block */ /* End block */
#line 2377 "nuweb.w"
fputs("\\end{minipage}\\vspace{4ex}\n", tex_file); fputs("\\end{minipage}\\vspace{4ex}\n", tex_file);
fputs("\\end{flushleft}\n", tex_file); fputs("\\end{flushleft}\n", tex_file);
inBlock = FALSE; inBlock = FALSE;
#line 2351 "nuweb.w"
} }
fputs("\\begin{flushleft} \\small", tex_file); fputs("\\begin{flushleft} \\small", tex_file);
} }
@@ -180,21 +252,33 @@ void write_tex(file_name, tex_name, sector)
if (inBlock) if (inBlock)
{ {
/* Switch block */ /* Switch block */
#line 2374 "nuweb.w"
fputs("\\par\\vspace{\\baselineskip}\n", tex_file); fputs("\\par\\vspace{\\baselineskip}\n", tex_file);
#line 2359 "nuweb.w"
} }
else else
{ {
/* Start block */ /* Start block */
#line 2370 "nuweb.w"
fputs("\\begin{flushleft} \\small\n\\begin{minipage}{\\linewidth}", tex_file); fputs("\\begin{flushleft} \\small\n\\begin{minipage}{\\linewidth}", tex_file);
inBlock = TRUE; inBlock = TRUE;
#line 2363 "nuweb.w"
} }
} }
fprintf(tex_file, "\\label{scrap%d}\\raggedright\\small\n", scraps); fprintf(tex_file, "\\label{scrap%d}\\raggedright\\small\n", scraps);
} }
#line 2287 "nuweb.w"
fputs("\\NWtarget{nuweb", tex_file); fputs("\\NWtarget{nuweb", tex_file);
write_single_scrap_ref(tex_file, scraps); write_single_scrap_ref(tex_file, scraps);
fputs("}{} $\\langle\\,${\\itshape ", tex_file); fputs("}{} $\\langle\\,${\\itshape ", tex_file);
/* Write the macro's name */ /* Write the macro's name */
#line 2306 "nuweb.w"
{ {
char * p = name->spelling; char * p = name->spelling;
int i = 0; int i = 0;
@@ -208,17 +292,25 @@ void write_tex(file_name, tex_name, sector)
fputc(*p++, tex_file); fputc(*p++, tex_file);
} }
} }
#line 2291 "nuweb.w"
fputs("}\\nobreak\\ {\\footnotesize {", tex_file); fputs("}\\nobreak\\ {\\footnotesize {", tex_file);
write_single_scrap_ref(tex_file, scraps); write_single_scrap_ref(tex_file, scraps);
fputs("}}$\\,\\rangle\\equiv$\n", tex_file); fputs("}}$\\,\\rangle\\equiv$\n", tex_file);
/* Fill in the middle of the scrap environment */ /* Fill in the middle of the scrap environment */
#line 2387 "nuweb.w"
{ {
fputs("\\vspace{-1ex}\n\\begin{list}{}{} \\item\n", tex_file); fputs("\\vspace{-1ex}\n\\begin{list}{}{} \\item\n", tex_file);
extra_scraps = 0; extra_scraps = 0;
copy_scrap(tex_file, TRUE, name); copy_scrap(tex_file, TRUE, name);
fputs("{\\NWsep}\n\\end{list}\n", tex_file); fputs("{\\NWsep}\n\\end{list}\n", tex_file);
} }
#line 2295 "nuweb.w"
/* Begin the cross-reference environment */ /* Begin the cross-reference environment */
#line 2433 "nuweb.w"
{ {
fputs("\\vspace{-1.5ex}\n", tex_file); fputs("\\vspace{-1.5ex}\n", tex_file);
fputs("\\footnotesize\n", tex_file); fputs("\\footnotesize\n", tex_file);
@@ -226,14 +318,22 @@ void write_tex(file_name, tex_name, sector)
tex_file); tex_file);
fputs("\\setlength{\\itemindent}{-\\leftmargin}}\n", tex_file);} fputs("\\setlength{\\itemindent}{-\\leftmargin}}\n", tex_file);}
#line 2296 "nuweb.w"
/* Write macro defs */ /* Write macro defs */
#line 2466 "nuweb.w"
{ {
if (name->defs->next) { if (name->defs->next) {
fputs("\\item \\NWtxtMacroDefBy\\ ", tex_file); fputs("\\item \\NWtxtMacroDefBy\\ ", tex_file);
print_scrap_numbers(tex_file, name->defs); print_scrap_numbers(tex_file, name->defs);
} }
} }
#line 2297 "nuweb.w"
/* Write macro refs */ /* Write macro refs */
#line 2474 "nuweb.w"
{ {
if (name->uses) { if (name->uses) {
if (name->uses->next) { if (name->uses->next) {
@@ -256,14 +356,22 @@ void write_tex(file_name, tex_name, sector)
command_name, name->spelling); command_name, name->spelling);
} }
} }
#line 2298 "nuweb.w"
format_defs_refs(tex_file, scraps); format_defs_refs(tex_file, scraps);
format_uses_refs(tex_file, scraps++); format_uses_refs(tex_file, scraps++);
/* Finish the cross-reference environment */ /* Finish the cross-reference environment */
#line 2446 "nuweb.w"
{ {
fputs("\n\\item{}", tex_file); fputs("\n\\item{}", tex_file);
fputs("\n\\end{list}\n", tex_file); fputs("\n\\end{list}\n", tex_file);
} }
#line 2301 "nuweb.w"
/* Finish the scrap environment */ /* Finish the scrap environment */
#line 2404 "nuweb.w"
{ {
scraps += extra_scraps; scraps += extra_scraps;
if (big_definition) if (big_definition)
@@ -271,37 +379,59 @@ void write_tex(file_name, tex_name, sector)
else else
{ {
/* End block */ /* End block */
#line 2377 "nuweb.w"
fputs("\\end{minipage}\\vspace{4ex}\n", tex_file); fputs("\\end{minipage}\\vspace{4ex}\n", tex_file);
fputs("\\end{flushleft}\n", tex_file); fputs("\\end{flushleft}\n", tex_file);
inBlock = FALSE; inBlock = FALSE;
#line 2410 "nuweb.w"
} }
do do
c = source_get(); c = source_get();
while (isspace(c)); while (isspace(c));
} }
#line 2302 "nuweb.w"
} }
#line 2150 "nuweb.w"
break; break;
case 's': case 's':
/* Step to next sector */ /* Step to next sector */
#line 1493 "nuweb.w"
prev_sector += 1; prev_sector += 1;
current_sector = prev_sector; current_sector = prev_sector;
c = source_get(); c = source_get();
#line 2153 "nuweb.w"
break; break;
case 'S': case 'S':
/* Close the current sector */ /* Close the current sector */
#line 1500 "nuweb.w"
current_sector = 1; current_sector = 1;
c = source_get(); c = source_get();
#line 2156 "nuweb.w"
break; break;
case '{': case '{':
case '[': case '[':
case '(': copy_scrap(tex_file, FALSE, NULL); case '(':
#line 2426 "nuweb.w"
copy_scrap(tex_file, FALSE, NULL);
c = source_get(); c = source_get();
#line 2160 "nuweb.w"
break; break;
case '<': { case '<':
#line 2192 "nuweb.w"
{
Parameters local_parameters = 0; Parameters local_parameters = 0;
int changed; int changed;
char indent_chars[MAX_INDENT]; char indent_chars[MAX_INDENT];
@@ -318,36 +448,66 @@ void write_tex(file_name, tex_name, sector)
c = source_get(); c = source_get();
} }
#line 2162 "nuweb.w"
break; break;
case 'x': { case 'x':
#line 2749 "nuweb.w"
{
/* Get label from */ /* Get label from */
#line 6398 "nuweb.w"
char label_name[MAX_NAME_LEN]; char label_name[MAX_NAME_LEN];
char * p = label_name; char * p = label_name;
while (c = source_get(), c != nw_char) /* Here is 150a-01 */ while (c =
#line 2750 "nuweb.w"
source_get(), c != nw_char) /* Here is 148c-01 */
*p++ = c; *p++ = c;
*p = '\0'; *p = '\0';
c = source_get(); c =
#line 2750 "nuweb.w"
source_get();
write_label(label_name, tex_file); #line 2750 "nuweb.w"
write_label(label_name,
#line 2164 "nuweb.w"
tex_file);
} }
#line 2164 "nuweb.w"
c = source_get(); c = source_get();
break; break;
case 'c': if (inBlock) case 'c':
#line 1785 "nuweb.w"
if (inBlock)
{ {
/* End block */ /* End block */
#line 2377 "nuweb.w"
fputs("\\end{minipage}\\vspace{4ex}\n", tex_file); fputs("\\end{minipage}\\vspace{4ex}\n", tex_file);
fputs("\\end{flushleft}\n", tex_file); fputs("\\end{flushleft}\n", tex_file);
inBlock = FALSE; inBlock = FALSE;
#line 1787 "nuweb.w"
} }
else else
{ {
/* Start block */ /* Start block */
#line 2370 "nuweb.w"
fputs("\\begin{flushleft} \\small\n\\begin{minipage}{\\linewidth}", tex_file); fputs("\\begin{flushleft} \\small\n\\begin{minipage}{\\linewidth}", tex_file);
inBlock = TRUE; inBlock = TRUE;
#line 1791 "nuweb.w"
} }
#line 2167 "nuweb.w"
c = source_get(); c = source_get();
break; break;
case 'f': { case 'f':
#line 2915 "nuweb.w"
{
if (file_names) { if (file_names) {
fputs("\n{\\small\\begin{list}{}{\\setlength{\\itemsep}{-\\parsep}", fputs("\n{\\small\\begin{list}{}{\\setlength{\\itemsep}{-\\parsep}",
tex_file); tex_file);
@@ -357,8 +517,12 @@ void write_tex(file_name, tex_name, sector)
} }
c = source_get(); c = source_get();
} }
#line 2170 "nuweb.w"
break; break;
case 'm': { case 'm':
#line 2965 "nuweb.w"
{
unsigned char sector = current_sector; unsigned char sector = current_sector;
int c = source_get(); int c = source_get();
if (c == '+') if (c == '+')
@@ -377,8 +541,12 @@ void write_tex(file_name, tex_name, sector)
} }
c = source_get(); c = source_get();
#line 2172 "nuweb.w"
break; break;
case 'u': { case 'u':
#line 3118 "nuweb.w"
{
unsigned char sector = current_sector; unsigned char sector = current_sector;
c = source_get(); c = source_get();
if (c == '+') { if (c == '+') {
@@ -393,10 +561,16 @@ void write_tex(file_name, tex_name, sector)
fputs("\\end{list}}", tex_file); fputs("\\end{list}}", tex_file);
} }
} }
#line 2174 "nuweb.w"
break; break;
case 'v': fputs(version_string, tex_file); case 'v':
#line 2187 "nuweb.w"
fputs(version_string, tex_file);
c = source_get(); c = source_get();
#line 2176 "nuweb.w"
break; break;
default: default:
if (c==nw_char) if (c==nw_char)
@@ -405,6 +579,8 @@ void write_tex(file_name, tex_name, sector)
break; break;
} }
} }
#line 2125 "nuweb.w"
} }
else { else {
putc(c, tex_file); putc(c, tex_file);
@@ -412,11 +588,15 @@ void write_tex(file_name, tex_name, sector)
} }
} }
} }
#line 2068 "nuweb.w"
fclose(tex_file); fclose(tex_file);
} }
else else
fprintf(stderr, "%s: can't open %s\n", command_name, tex_name); fprintf(stderr, "%s: can't open %s\n", command_name, tex_name);
} }
#line 2321 "nuweb.w"
static void write_arg(FILE * tex_file, char * p) static void write_arg(FILE * tex_file, char * p)
{ {
fputs("\\hbox{\\slshape\\sffamily ", tex_file); fputs("\\hbox{\\slshape\\sffamily ", tex_file);
@@ -439,9 +619,9 @@ static void write_arg(FILE * tex_file, char * p)
fputs("\\/}", tex_file); fputs("\\/}", tex_file);
} }
static void print_scrap_numbers(tex_file, scraps)
FILE *tex_file; #line 2498 "nuweb.w"
Scrap_Node *scraps; static void print_scrap_numbers(FILE *tex_file, Scrap_Node *scraps)
{ {
int page; int page;
fputs("\\NWlink{nuweb", tex_file); fputs("\\NWlink{nuweb", tex_file);
@@ -460,6 +640,8 @@ static void print_scrap_numbers(tex_file, scraps)
} }
fputs(".\n", tex_file); fputs(".\n", tex_file);
} }
#line 2535 "nuweb.w"
static char *orig_delimit_scrap[3][5] = { static char *orig_delimit_scrap[3][5] = {
/* {} mode: begin, end, insert nw_char, prefix, suffix */ /* {} mode: begin, end, insert nw_char, prefix, suffix */
{ "\\verb@", "@", "@{\\tt @}\\verb@", "\\mbox{}", "\\\\" }, { "\\verb@", "@", "@{\\tt @}\\verb@", "\\mbox{}", "\\\\" },
@@ -470,6 +652,8 @@ static char *orig_delimit_scrap[3][5] = {
}; };
static char *delimit_scrap[3][5]; static char *delimit_scrap[3][5];
#line 2554 "nuweb.w"
void initialise_delimit_scrap_array() { void initialise_delimit_scrap_array() {
int i,j; int i,j;
for(i = 0; i < 3; i++) { for(i = 0; i < 3; i++) {
@@ -495,7 +679,11 @@ void initialise_delimit_scrap_array() {
} }
} }
} }
#line 2586 "nuweb.w"
int scrap_type = 0; int scrap_type = 0;
#line 2590 "nuweb.w"
static void write_literal(FILE * tex_file, char * p, int mode) static void write_literal(FILE * tex_file, char * p, int mode)
{ {
fputs(delimit_scrap[mode][0], tex_file); fputs(delimit_scrap[mode][0], tex_file);
@@ -508,10 +696,9 @@ static void write_literal(FILE * tex_file, char * p, int mode)
} }
fputs(delimit_scrap[mode][1], tex_file); fputs(delimit_scrap[mode][1], tex_file);
} }
static void copy_scrap(file, prefix, name)
FILE *file; #line 2605 "nuweb.w"
int prefix; static void copy_scrap(FILE *file, int prefix, Name *name)
Name * name;
{ {
int indent = 0; int indent = 0;
int c; int c;
@@ -531,7 +718,9 @@ static void copy_scrap(file, prefix, name)
fputs(delimit_scrap[scrap_type][0], file); fputs(delimit_scrap[scrap_type][0], file);
indent = 0; indent = 0;
break; break;
case '\t': { case '\t':
#line 2680 "nuweb.w"
{
int delta = 8 - (indent % 8); int delta = 8 - (indent % 8);
indent += delta; indent += delta;
while (delta > 0) { while (delta > 0) {
@@ -539,41 +728,69 @@ static void copy_scrap(file, prefix, name)
delta--; delta--;
} }
} }
#line 2625 "nuweb.w"
break; break;
default: default:
if (c==nw_char) if (c==nw_char)
{ {
/* Check at-sequence for end-of-scrap */ /* Check at-sequence for end-of-scrap */
#line 2690 "nuweb.w"
{ {
c = source_get(); c = source_get();
switch (c) { switch (c) {
case 'c': { case 'c':
#line 1714 "nuweb.w"
{
fputs(delimit_scrap[scrap_type][1],file); fputs(delimit_scrap[scrap_type][1],file);
fprintf(file, "\\hbox{\\sffamily\\slshape (Comment)}"); fprintf(file, "\\hbox{\\sffamily\\slshape (Comment)}");
fputs(delimit_scrap[scrap_type][0], file); fputs(delimit_scrap[scrap_type][0], file);
} }
#line 2693 "nuweb.w"
break; break;
case 'x': { case 'x':
#line 2749 "nuweb.w"
{
/* Get label from */ /* Get label from */
#line 6398 "nuweb.w"
char label_name[MAX_NAME_LEN]; char label_name[MAX_NAME_LEN];
char * p = label_name; char * p = label_name;
while (c = source_get(), c != nw_char) /* Here is 150a-01 */ while (c =
#line 2750 "nuweb.w"
source_get(), c != nw_char) /* Here is 148c-01 */
*p++ = c; *p++ = c;
*p = '\0'; *p = '\0';
c = source_get(); c =
#line 2750 "nuweb.w"
source_get();
write_label(label_name, file); #line 2750 "nuweb.w"
write_label(label_name,
#line 2695 "nuweb.w"
file);
} }
#line 2695 "nuweb.w"
break; break;
case 'v': fputs(version_string, file); case 'v':
#line 2745 "nuweb.w"
fputs(version_string, file);
#line 2697 "nuweb.w"
case 's': case 's':
break; break;
case '+': case '+':
case '-': case '-':
case '*': case '*':
case '|': { case '|':
#line 2758 "nuweb.w"
{
do { do {
do do
c = source_get(); c = source_get();
@@ -581,12 +798,16 @@ static void copy_scrap(file, prefix, name)
c = source_get(); c = source_get();
} while (c != '}' && c != ']' && c != ')' ); } while (c != '}' && c != ']' && c != ')' );
} }
#line 2703 "nuweb.w"
case ',': case ',':
case ')': case ')':
case ']': case ']':
case '}': fputs(delimit_scrap[scrap_type][1], file); case '}': fputs(delimit_scrap[scrap_type][1], file);
return; return;
case '<': { case '<':
#line 2798 "nuweb.w"
{
Arglist *args = collect_scrap_name(-1); Arglist *args = collect_scrap_name(-1);
Name *name = args->name; Name *name = args->name;
char * p = name->spelling; char * p = name->spelling;
@@ -616,6 +837,8 @@ static void copy_scrap(file, prefix, name)
if (scrap_name_has_parameters) { if (scrap_name_has_parameters) {
/* Format macro parameters */ /* Format macro parameters */
#line 1962 "nuweb.w"
char sep; char sep;
sep = '('; sep = '(';
@@ -642,10 +865,14 @@ static void copy_scrap(file, prefix, name)
c = source_get(); c = source_get();
} }
#line 2826 "nuweb.w"
} }
fprintf(file, "{\\footnotesize "); fprintf(file, "{\\footnotesize ");
if (name->defs) if (name->defs)
/* Write abbreviated definition list */ /* Write abbreviated definition list */
#line 2844 "nuweb.w"
{ {
Scrap_Node *p = name->defs; Scrap_Node *p = name->defs;
fputs("\\NWlink{nuweb", file); fputs("\\NWlink{nuweb", file);
@@ -657,6 +884,8 @@ static void copy_scrap(file, prefix, name)
if (p) if (p)
fputs(", \\ldots\\ ", file); fputs(", \\ldots\\ ", file);
} }
#line 2830 "nuweb.w"
else { else {
putc('?', file); putc('?', file);
fprintf(stderr, "%s: never defined <%s>\n", fprintf(stderr, "%s: never defined <%s>\n",
@@ -667,14 +896,22 @@ static void copy_scrap(file, prefix, name)
fputs("}", file); fputs("}", file);
fputs(delimit_scrap[scrap_type][0], file); fputs(delimit_scrap[scrap_type][0], file);
} }
#line 2709 "nuweb.w"
break; break;
case '%': { case '%':
#line 2768 "nuweb.w"
{
do do
c = source_get(); c = source_get();
while (c != '\n'); while (c != '\n');
} }
#line 2711 "nuweb.w"
break; break;
case '_': { case '_':
#line 2777 "nuweb.w"
{
fputs(delimit_scrap[scrap_type][1],file); fputs(delimit_scrap[scrap_type][1],file);
fprintf(file, "\\hbox{\\sffamily\\bfseries "); fprintf(file, "\\hbox{\\sffamily\\bfseries ");
c = source_get(); c = source_get();
@@ -686,18 +923,28 @@ static void copy_scrap(file, prefix, name)
fprintf(file, "}"); fprintf(file, "}");
fputs(delimit_scrap[scrap_type][0], file); fputs(delimit_scrap[scrap_type][0], file);
} }
#line 2713 "nuweb.w"
break; break;
case 't': { case 't':
#line 2791 "nuweb.w"
{
fputs(delimit_scrap[scrap_type][1],file); fputs(delimit_scrap[scrap_type][1],file);
fprintf(file, "\\hbox{\\sffamily\\slshape fragment title}"); fprintf(file, "\\hbox{\\sffamily\\slshape fragment title}");
fputs(delimit_scrap[scrap_type][0], file); fputs(delimit_scrap[scrap_type][0], file);
} }
#line 2715 "nuweb.w"
break; break;
case 'f': { case 'f':
#line 2791 "nuweb.w"
{
fputs(delimit_scrap[scrap_type][1],file); fputs(delimit_scrap[scrap_type][1],file);
fprintf(file, "\\hbox{\\sffamily\\slshape file name}"); fprintf(file, "\\hbox{\\sffamily\\slshape file name}");
fputs(delimit_scrap[scrap_type][0], file); fputs(delimit_scrap[scrap_type][0], file);
} }
#line 2717 "nuweb.w"
break; break;
case '1': case '2': case '3': case '1': case '2': case '3':
case '4': case '5': case '6': case '4': case '5': case '6':
@@ -723,6 +970,8 @@ static void copy_scrap(file, prefix, name)
break; break;
} }
} }
#line 2630 "nuweb.w"
break; break;
} }
putc(c, file); putc(c, file);
@@ -732,6 +981,8 @@ static void copy_scrap(file, prefix, name)
c = source_get(); c = source_get();
} }
} }
#line 2646 "nuweb.w"
void update_delimit_scrap() void update_delimit_scrap()
{ {
/* {}-mode begin */ /* {}-mode begin */
@@ -759,6 +1010,8 @@ void update_delimit_scrap()
/* ()-mode insert nw_char */ /* ()-mode insert nw_char */
delimit_scrap[2][2][0] = nw_char; delimit_scrap[2][2][0] = nw_char;
} }
#line 2857 "nuweb.w"
static void static void
write_ArglistElement(FILE * file, Arglist * args, char ** params) write_ArglistElement(FILE * file, Arglist * args, char ** params)
{ {
@@ -801,6 +1054,8 @@ write_ArglistElement(FILE * file, Arglist * args, char ** params)
/* Format macro parameters */ /* Format macro parameters */
#line 1962 "nuweb.w"
char sep; char sep;
sep = '('; sep = '(';
@@ -827,10 +1082,14 @@ write_ArglistElement(FILE * file, Arglist * args, char ** params)
c = source_get(); c = source_get();
} }
#line 2897 "nuweb.w"
} }
fprintf(file, "{\\footnotesize "); fprintf(file, "{\\footnotesize ");
if (name->defs) if (name->defs)
/* Write abbreviated definition list */ /* Write abbreviated definition list */
#line 2844 "nuweb.w"
{ {
Scrap_Node *p = name->defs; Scrap_Node *p = name->defs;
fputs("\\NWlink{nuweb", file); fputs("\\NWlink{nuweb", file);
@@ -842,6 +1101,8 @@ write_ArglistElement(FILE * file, Arglist * args, char ** params)
if (p) if (p)
fputs(", \\ldots\\ ", file); fputs(", \\ldots\\ ", file);
} }
#line 2901 "nuweb.w"
else { else {
putc('?', file); putc('?', file);
fprintf(stderr, "%s: never defined <%s>\n", fprintf(stderr, "%s: never defined <%s>\n",
@@ -850,16 +1111,20 @@ write_ArglistElement(FILE * file, Arglist * args, char ** params)
fputs("}$\\,\\rangle$", file); fputs("}$\\,\\rangle$", file);
} }
} }
static void format_file_entry(name, tex_file)
Name *name; #line 2927 "nuweb.w"
FILE *tex_file; static void format_file_entry(Name *name, FILE *tex_file)
{ {
while (name) { while (name) {
format_file_entry(name->llink, tex_file); format_file_entry(name->llink, tex_file);
/* Format a file index entry */ /* Format a file index entry */
#line 2938 "nuweb.w"
fputs("\\item ", tex_file); fputs("\\item ", tex_file);
fprintf(tex_file, "\\verb%c\"%s\"%c ", nw_char, name->spelling, nw_char); fprintf(tex_file, "\\verb%c\"%s\"%c ", nw_char, name->spelling, nw_char);
/* Write file's defining scrap numbers */ /* Write file's defining scrap numbers */
#line 2944 "nuweb.w"
{ {
Scrap_Node *p = name->defs; Scrap_Node *p = name->defs;
fputs("{\\footnotesize {\\NWtxtDefBy}", tex_file); fputs("{\\footnotesize {\\NWtxtDefBy}", tex_file);
@@ -879,10 +1144,16 @@ static void format_file_entry(name, tex_file)
} }
putc('}', tex_file); putc('}', tex_file);
} }
#line 2940 "nuweb.w"
putc('\n', tex_file); putc('\n', tex_file);
#line 2931 "nuweb.w"
name = name->rlink; name = name->rlink;
} }
} }
#line 2986 "nuweb.w"
static int load_entry(Name * name, Name ** nms, int n) static int load_entry(Name * name, Name ** nms, int n)
{ {
while (name) { while (name) {
@@ -892,16 +1163,17 @@ static int load_entry(Name * name, Name ** nms, int n)
} }
return n; return n;
} }
static void format_entry(name, tex_file, sector)
Name *name; #line 2998 "nuweb.w"
FILE *tex_file; static void format_entry(Name *name, FILE *tex_file, unsigned char sector)
unsigned char sector;
{ {
Name ** nms = malloc(num_scraps()*sizeof(Name *)); Name ** nms = malloc(num_scraps()*sizeof(Name *));
int n = load_entry(name, nms, 0); int n = load_entry(name, nms, 0);
int i; int i;
/* Sort 'nms' of size 'n' for <Rob's ordering> */ /* Sort 'nms' of size 'n' for <Rob's ordering> */
#line 3018 "nuweb.w"
int j; int j;
for (j = 1; j < n; j++) for (j = 1; j < n; j++)
{ {
@@ -912,7 +1184,9 @@ static void format_entry(name, tex_file, sector)
{ {
Name * ki = nms[i]; Name * ki = nms[i];
if (robs_strcmp(ki->spelling, kj->spelling) < 0) if (
#line 3015 "nuweb.w"
robs_strcmp(ki->spelling, kj->spelling) < 0)
break; break;
nms[i + 1] = ki; nms[i + 1] = ki;
i -= 1; i -= 1;
@@ -920,15 +1194,21 @@ static void format_entry(name, tex_file, sector)
nms[i + 1] = kj; nms[i + 1] = kj;
} }
#line 3004 "nuweb.w"
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
{ {
Name * name = nms[i]; Name * name = nms[i];
/* Format an index entry */ /* Format an index entry */
#line 3038 "nuweb.w"
if (name->sector == sector){ if (name->sector == sector){
fputs("\\item ", tex_file); fputs("\\item ", tex_file);
fputs("$\\langle\\,$", tex_file); fputs("$\\langle\\,$", tex_file);
/* Write the macro's name */ /* Write the macro's name */
#line 2306 "nuweb.w"
{ {
char * p = name->spelling; char * p = name->spelling;
int i = 0; int i = 0;
@@ -942,8 +1222,12 @@ static void format_entry(name, tex_file, sector)
fputc(*p++, tex_file); fputc(*p++, tex_file);
} }
} }
#line 3041 "nuweb.w"
fputs("\\nobreak\\ {\\footnotesize ", tex_file); fputs("\\nobreak\\ {\\footnotesize ", tex_file);
/* Write defining scrap numbers */ /* Write defining scrap numbers */
#line 3050 "nuweb.w"
{ {
Scrap_Node *p = name->defs; Scrap_Node *p = name->defs;
if (p) { if (p) {
@@ -966,8 +1250,12 @@ static void format_entry(name, tex_file, sector)
else else
putc('?', tex_file); putc('?', tex_file);
} }
#line 3043 "nuweb.w"
fputs("}$\\,\\rangle$ ", tex_file); fputs("}$\\,\\rangle$ ", tex_file);
/* Write referencing scrap numbers */ /* Write referencing scrap numbers */
#line 3074 "nuweb.w"
{ {
Scrap_Node *p = name->uses; Scrap_Node *p = name->uses;
fputs("{\\footnotesize ", tex_file); fputs("{\\footnotesize ", tex_file);
@@ -992,10 +1280,16 @@ static void format_entry(name, tex_file, sector)
fputs("{\\NWtxtNoRef}.", tex_file); fputs("{\\NWtxtNoRef}.", tex_file);
putc('}', tex_file); putc('}', tex_file);
} }
#line 3045 "nuweb.w"
putc('\n', tex_file); putc('\n', tex_file);
} }
#line 3009 "nuweb.w"
} }
} }
#line 3104 "nuweb.w"
int has_sector(Name * name, unsigned char sector) int has_sector(Name * name, unsigned char sector)
{ {
while(name) { while(name) {
@@ -1007,14 +1301,15 @@ int has_sector(Name * name, unsigned char sector)
} }
return FALSE; return FALSE;
} }
static void format_user_entry(name, tex_file, sector)
Name *name; #line 3136 "nuweb.w"
FILE *tex_file; static void format_user_entry(Name *name, FILE *tex_file, unsigned char sector)
unsigned char sector;
{ {
while (name) { while (name) {
format_user_entry(name->llink, tex_file, sector); format_user_entry(name->llink, tex_file, sector);
/* Format a user index entry */ /* Format a user index entry */
#line 3148 "nuweb.w"
if (name->sector == sector){ if (name->sector == sector){
Scrap_Node *uses = name->uses; Scrap_Node *uses = name->uses;
if ( uses || dangling_flag ) { if ( uses || dangling_flag ) {
@@ -1081,6 +1376,8 @@ static void format_user_entry(name, tex_file, sector)
fputs(".\n", tex_file); fputs(".\n", tex_file);
} }
} }
#line 3140 "nuweb.w"
name = name->rlink; name = name->rlink;
} }
} }

60
main.c
View File

@@ -1,17 +1,25 @@
#line 878 "nuweb.w"
#include "global.h" #include "global.h"
#line 955 "nuweb.w"
#include <stdlib.h> #include <stdlib.h>
int main(argc, argv) int main(int argc, char** argv)
int argc;
char **argv;
{ {
int arg = 1; int arg = 1;
/* Interpret command-line arguments */ /* Interpret command-line arguments */
#line 1113 "nuweb.w"
command_name = argv[0]; command_name = argv[0];
#line 1119 "nuweb.w"
while (arg < argc) { while (arg < argc) {
char *s = argv[arg]; char *s = argv[arg];
if (*s++ == '-') { if (*s++ == '-') {
/* Interpret the argument string \verb|s| */ /* Interpret the argument string \verb|s| */
#line 1139 "nuweb.w"
{ {
char c = *s++; char c = *s++;
while (c) { while (c) {
@@ -56,8 +64,12 @@ int main(argc, argv)
} }
HasValue:; HasValue:;
} }
#line 1122 "nuweb.w"
arg++; arg++;
/* Perhaps get the prepend path */ /* Perhaps get the prepend path */
#line 1186 "nuweb.w"
if (prepend_flag) if (prepend_flag)
{ {
if (*s == '\0') if (*s == '\0')
@@ -66,7 +78,11 @@ HasValue:;
prepend_flag = FALSE; prepend_flag = FALSE;
} }
#line 1124 "nuweb.w"
/* Perhaps get the version info string */ /* Perhaps get the version info string */
#line 1214 "nuweb.w"
if (version_info_flag) if (version_info_flag)
{ {
if (*s == '\0') if (*s == '\0')
@@ -75,7 +91,11 @@ HasValue:;
version_info_flag = FALSE; version_info_flag = FALSE;
} }
#line 1125 "nuweb.w"
/* Perhaps get the hyperref options */ /* Perhaps get the hyperref options */
#line 1224 "nuweb.w"
if (hyperopt_flag) if (hyperopt_flag)
{ {
if (*s == '\0') if (*s == '\0')
@@ -85,7 +105,11 @@ HasValue:;
hyperref_flag = TRUE; hyperref_flag = TRUE;
} }
#line 1126 "nuweb.w"
/* Perhaps add an include path */ /* Perhaps add an include path */
#line 1196 "nuweb.w"
if (includepath_flag) if (includepath_flag)
{ {
struct incl * le struct incl * le
@@ -102,11 +126,17 @@ HasValue:;
includepath_flag = FALSE; includepath_flag = FALSE;
} }
#line 1127 "nuweb.w"
} }
else break; else break;
} }
#line 960 "nuweb.w"
/* Set locale information */ /* Set locale information */
#line 1240 "nuweb.w"
{ {
/* try to get locale information */ /* try to get locale information */
char *s=getenv("LC_CTYPE"); char *s=getenv("LC_CTYPE");
@@ -118,8 +148,12 @@ HasValue:;
fprintf(stderr, "Setting locale failed\n"); fprintf(stderr, "Setting locale failed\n");
} }
#line 961 "nuweb.w"
initialise_delimit_scrap_array(); initialise_delimit_scrap_array();
/* Process the remaining arguments (file names) */ /* Process the remaining arguments (file names) */
#line 1259 "nuweb.w"
{ {
if (arg >= argc) { if (arg >= argc) {
fprintf(stderr, "%s: expected a file name. ", command_name); fprintf(stderr, "%s: expected a file name. ", command_name);
@@ -128,11 +162,15 @@ HasValue:;
} }
do { do {
/* Handle the file name in \verb|argv[arg]| */ /* Handle the file name in \verb|argv[arg]| */
#line 1281 "nuweb.w"
{ {
char source_name[FILENAME_MAX]; char source_name[FILENAME_MAX];
char tex_name[FILENAME_MAX]; char tex_name[FILENAME_MAX];
char aux_name[FILENAME_MAX]; char aux_name[FILENAME_MAX];
/* Build \verb|source_name| and \verb|tex_name| */ /* Build \verb|source_name| and \verb|tex_name| */
#line 1304 "nuweb.w"
{ {
char *p = argv[arg]; char *p = argv[arg];
char *q = source_name; char *q = source_name;
@@ -150,6 +188,8 @@ HasValue:;
c = *p++; c = *p++;
} }
/* Add the source path to the include path list */ /* Add the source path to the include path list */
#line 1344 "nuweb.w"
if (trim != source_name) { if (trim != source_name) {
struct incl * le struct incl * le
= (struct incl *)arena_getmem(sizeof(struct incl)); = (struct incl *)arena_getmem(sizeof(struct incl));
@@ -165,6 +205,8 @@ HasValue:;
*trim = sv; *trim = sv;
} }
#line 1320 "nuweb.w"
*q = '\0'; *q = '\0';
if (dot) { if (dot) {
*dot = '\0'; /* produce HTML when the file extension is ".hw" */ *dot = '\0'; /* produce HTML when the file extension is ".hw" */
@@ -181,7 +223,11 @@ HasValue:;
*q = '\0'; *q = '\0';
} }
} }
#line 1285 "nuweb.w"
/* Process a file */ /* Process a file */
#line 1370 "nuweb.w"
{ {
pass1(source_name); pass1(source_name);
current_sector = 1; current_sector = 1;
@@ -191,7 +237,7 @@ HasValue:;
int saved_number_flag = number_flag; int saved_number_flag = number_flag;
number_flag = TRUE; number_flag = TRUE;
collect_numbers(aux_name); collect_numbers(aux_name);
write_html(source_name, tex_name, 0/*Dummy */); write_html(source_name, tex_name);
number_flag = saved_number_flag; number_flag = saved_number_flag;
} }
else { else {
@@ -203,9 +249,15 @@ HasValue:;
write_files(file_names); write_files(file_names);
arena_free(); arena_free();
} }
#line 1286 "nuweb.w"
} }
#line 1266 "nuweb.w"
arg++; arg++;
} while (arg < argc); } while (arg < argc);
} }
#line 963 "nuweb.w"
exit(0); exit(0);
} }

163
names.c
View File

@@ -1,9 +1,11 @@
#line 932 "nuweb.w"
#include "global.h" #include "global.h"
#line 5126 "nuweb.w"
enum { LESS, GREATER, EQUAL, PREFIX, EXTENSION }; enum { LESS, GREATER, EQUAL, PREFIX, EXTENSION };
static int compare(x, y) static int compare(char *x, char *y)
char *x;
char *y;
{ {
int len, result; int len, result;
int xl = strlen(x); int xl = strlen(x);
@@ -26,21 +28,22 @@ static int compare(x, y)
} }
else return EQUAL; else return EQUAL;
} }
char *save_string(s)
char *s; #line 5155 "nuweb.w"
char *save_string(char *s)
{ {
char *new = (char *) arena_getmem((strlen(s) + 1) * sizeof(char)); char *new = (char *) arena_getmem((strlen(s) + 1) * sizeof(char));
strcpy(new, s); strcpy(new, s);
return new; return new;
} }
static int ambiguous_prefix();
#line 5164 "nuweb.w"
static int ambiguous_prefix(Name *node, char *spelling,
unsigned char sector);
static char * found_name = NULL; static char * found_name = NULL;
Name *prefix_add(rt, spelling, sector) Name *prefix_add(Name **rt, char *spelling, unsigned char sector)
Name **rt;
char *spelling;
unsigned char sector;
{ {
Name *node = *rt; Name *node = *rt;
int cmp; int cmp;
@@ -64,18 +67,24 @@ Name *prefix_add(rt, spelling, sector)
if (cmp == EXTENSION) if (cmp == EXTENSION)
node->spelling = save_string(spelling); node->spelling = save_string(spelling);
return node; return node;
case PREFIX: { case PREFIX:
#line 5207 "nuweb.w"
{
if (ambiguous_prefix(node->llink, spelling, sector) || if (ambiguous_prefix(node->llink, spelling, sector) ||
ambiguous_prefix(node->rlink, spelling, sector)) ambiguous_prefix(node->rlink, spelling, sector))
fprintf(stderr, fprintf(stderr,
"%s: ambiguous prefix %c<%s...%c> (%s, line %d)\n", "%s: ambiguous prefix %c<%s...%c> (%s, line %d)\n",
command_name, nw_char, spelling, nw_char, source_name, source_line); command_name, nw_char, spelling, nw_char, source_name, source_line);
} }
#line 5193 "nuweb.w"
return node; return node;
} }
node = *rt; node = *rt;
} }
/* Create new name entry */ /* Create new name entry */
#line 5330 "nuweb.w"
{ {
node = (Name *) arena_getmem(sizeof(Name)); node = (Name *) arena_getmem(sizeof(Name));
if (found_name && robs_strcmp(found_name, spelling) == 0) if (found_name && robs_strcmp(found_name, spelling) == 0)
@@ -104,11 +113,12 @@ Name *prefix_add(rt, spelling, sector)
*rt = node; *rt = node;
return node; return node;
} }
#line 5198 "nuweb.w"
} }
static int ambiguous_prefix(node, spelling, sector)
Name *node; #line 5216 "nuweb.w"
char *spelling; static int ambiguous_prefix(Name *node, char *spelling, unsigned char sector)
unsigned char sector;
{ {
while (node) { while (node) {
switch (compare(node->spelling, spelling)) { switch (compare(node->spelling, spelling)) {
@@ -131,6 +141,8 @@ static int ambiguous_prefix(node, spelling, sector)
} }
return FALSE; return FALSE;
} }
#line 5264 "nuweb.w"
int robs_strcmp(char* x, char* y) int robs_strcmp(char* x, char* y)
{ {
int cmp = 0; int cmp = 0;
@@ -138,13 +150,21 @@ int robs_strcmp(char* x, char* y)
for (; *x && *y; x++, y++) for (; *x && *y; x++, y++)
{ {
/* Skip invisibles on 'x' */ /* Skip invisibles on 'x' */
#line 5298 "nuweb.w"
if (*x == '|') if (*x == '|')
x++; x++;
#line 5270 "nuweb.w"
/* Skip invisibles on 'y' */ /* Skip invisibles on 'y' */
#line 5298 "nuweb.w"
if (*y == '|') if (*y == '|')
y++; y++;
#line 5271 "nuweb.w"
if (*x == *y) if (*x == *y)
continue; continue;
if (islower(*x) && toupper(*x) == *y) if (islower(*x) && toupper(*x) == *y)
@@ -165,10 +185,9 @@ int robs_strcmp(char* x, char* y)
return -2; return -2;
return cmp; return cmp;
} }
Name *name_add(rt, spelling, sector)
Name **rt; #line 5303 "nuweb.w"
char *spelling; Name *name_add(Name **rt, char *spelling, unsigned char sector)
unsigned char sector;
{ {
Name *node = *rt; Name *node = *rt;
while (node) { while (node) {
@@ -190,6 +209,8 @@ Name *name_add(rt, spelling, sector)
node = *rt; node = *rt;
} }
/* Create new name entry */ /* Create new name entry */
#line 5330 "nuweb.w"
{ {
node = (Name *) arena_getmem(sizeof(Name)); node = (Name *) arena_getmem(sizeof(Name));
if (found_name && robs_strcmp(found_name, spelling) == 0) if (found_name && robs_strcmp(found_name, spelling) == 0)
@@ -218,8 +239,12 @@ Name *name_add(rt, spelling, sector)
*rt = node; *rt = node;
return node; return node;
} }
#line 5324 "nuweb.w"
} }
Name *collect_file_name()
#line 5363 "nuweb.w"
Name *collect_file_name(void)
{ {
Name *new_name; Name *new_name;
char name[MAX_NAME_LEN]; char name[MAX_NAME_LEN];
@@ -241,6 +266,8 @@ Name *collect_file_name()
/* File names are always global. */ /* File names are always global. */
new_name = name_add(&file_names, name, 0); new_name = name_add(&file_names, name, 0);
/* Handle optional per-file flags */ /* Handle optional per-file flags */
#line 5396 "nuweb.w"
{ {
while (1) { while (1) {
while (isspace(c)) while (isspace(c))
@@ -255,7 +282,9 @@ Name *collect_file_name()
break; break;
case 'i': new_name->indent_flag = FALSE; case 'i': new_name->indent_flag = FALSE;
break; break;
case 'c': c = source_get(); case 'c':
#line 5425 "nuweb.w"
c = source_get();
if (c == 'c') if (c == 'c')
new_name->comment_flag = 1; new_name->comment_flag = 1;
else if (c == '+') else if (c == '+')
@@ -266,6 +295,8 @@ Name *collect_file_name()
fprintf(stderr, "%s: Unrecognised comment flag (%s, %d)\n", fprintf(stderr, "%s: Unrecognised comment flag (%s, %d)\n",
command_name, source_name, source_line); command_name, source_name, source_line);
#line 5410 "nuweb.w"
break; break;
default : fprintf(stderr, "%s: unexpected per-file flag (%s, %d)\n", default : fprintf(stderr, "%s: unexpected per-file flag (%s, %d)\n",
command_name, source_name, source_line); command_name, source_name, source_line);
@@ -277,6 +308,8 @@ Name *collect_file_name()
else break; else break;
} }
} }
#line 5384 "nuweb.w"
c2 = source_get(); c2 = source_get();
if (c != nw_char || (c2 != '{' && c2 != '(' && c2 != '[')) { if (c != nw_char || (c2 != '{' && c2 != '(' && c2 != '[')) {
fprintf(stderr, "%s: expected %c{, %c[, or %c( after file name (%s, %d)\n", fprintf(stderr, "%s: expected %c{, %c[, or %c( after file name (%s, %d)\n",
@@ -285,7 +318,9 @@ Name *collect_file_name()
} }
return new_name; return new_name;
} }
Name *collect_macro_name()
#line 5446 "nuweb.w"
Name *collect_macro_name(void)
{ {
char name[MAX_NAME_LEN]; char name[MAX_NAME_LEN];
char args[1000]; char args[1000];
@@ -312,7 +347,9 @@ Name *collect_macro_name()
c = source_get(); c = source_get();
while (c == ' ' || c == '\t'); while (c == ' ' || c == '\t');
break; break;
case '\n': { case '\n':
#line 5564 "nuweb.w"
{
do do
c = source_get(); c = source_get();
while (isspace(c)); while (isspace(c));
@@ -323,6 +360,8 @@ Name *collect_macro_name()
exit(-1); exit(-1);
} }
/* Cleanup and install name */ /* Cleanup and install name */
#line 5547 "nuweb.w"
{ {
if (p > name && p[-1] == ' ') if (p > name && p[-1] == ' ')
p--; p--;
@@ -338,18 +377,26 @@ Name *collect_macro_name()
*p = '\0'; *p = '\0';
node = prefix_add(&macro_names, name, sector); node = prefix_add(&macro_names, name, sector);
} }
#line 5574 "nuweb.w"
return install_args(node, argc, arg); return install_args(node, argc, arg);
} }
#line 5473 "nuweb.w"
default: default:
if (c==nw_char) if (c==nw_char)
{ {
/* Check for terminating at-sequence and return name */ /* Check for terminating at-sequence and return name */
#line 5494 "nuweb.w"
{ {
c = source_get(); c = source_get();
switch (c) { switch (c) {
case '(': case '(':
case '[': case '[':
case '{': { case '{':
#line 5547 "nuweb.w"
{
if (p > name && p[-1] == ' ') if (p > name && p[-1] == ' ')
p--; p--;
if (p - name > 3 && p[-1] == '.' && p[-2] == '.' && p[-3] == '.') { if (p - name > 3 && p[-1] == '.' && p[-2] == '.' && p[-3] == '.') {
@@ -364,18 +411,26 @@ Name *collect_macro_name()
*p = '\0'; *p = '\0';
node = prefix_add(&macro_names, name, sector); node = prefix_add(&macro_names, name, sector);
} }
#line 5499 "nuweb.w"
return install_args(node, argc, arg); return install_args(node, argc, arg);
case '\'': arg[argc] = argp; case '\'':
#line 5517 "nuweb.w"
arg[argc] = argp;
while ((c = source_get()) != EOF) { while ((c = source_get()) != EOF) {
if (c==nw_char) { if (c==nw_char) {
c2 = source_get(); c2 = source_get();
if (c2=='\'') { if (c2=='\'') {
/* Make this argument */ /* Make this argument */
#line 5540 "nuweb.w"
if (argc < 9) { if (argc < 9) {
*argp++ = '\000'; *argp++ = '\000';
argc += 1; argc += 1;
} }
#line 5522 "nuweb.w"
c = source_get(); c = source_get();
break; break;
} }
@@ -387,6 +442,8 @@ Name *collect_macro_name()
} }
*p++ = ARG_CHR; *p++ = ARG_CHR;
#line 5501 "nuweb.w"
break; break;
default: default:
if (c==nw_char) if (c==nw_char)
@@ -400,6 +457,8 @@ Name *collect_macro_name()
exit(-1); exit(-1);
} }
} }
#line 5477 "nuweb.w"
break; break;
} }
*p++ = c; *p++ = c;
@@ -412,6 +471,8 @@ Name *collect_macro_name()
exit(-1); exit(-1);
return NULL; /* unreachable return to avoid warnings on some compilers */ return NULL; /* unreachable return to avoid warnings on some compilers */
} }
#line 5583 "nuweb.w"
Name *install_args(Name * name, int argc, char *arg[9]) Name *install_args(Name * name, int argc, char *arg[9])
{ {
int i; int i;
@@ -422,6 +483,8 @@ Name *install_args(Name * name, int argc, char *arg[9])
} }
return name; return name;
} }
#line 5604 "nuweb.w"
Arglist * buildArglist(Name * name, Arglist * a) Arglist * buildArglist(Name * name, Arglist * a)
{ {
Arglist * args = (Arglist *)arena_getmem(sizeof(Arglist)); Arglist * args = (Arglist *)arena_getmem(sizeof(Arglist));
@@ -431,6 +494,8 @@ Arglist * buildArglist(Name * name, Arglist * a)
args->name = name; args->name = name;
return args; return args;
} }
#line 5617 "nuweb.w"
Arglist * collect_scrap_name(int current_scrap) Arglist * collect_scrap_name(int current_scrap)
{ {
char name[MAX_NAME_LEN]; char name[MAX_NAME_LEN];
@@ -459,6 +524,8 @@ Arglist * collect_scrap_name(int current_scrap)
if (c==nw_char) if (c==nw_char)
{ {
/* Look for end of scrap name and return */ /* Look for end of scrap name and return */
#line 5666 "nuweb.w"
{ {
Name * node; Name * node;
@@ -467,6 +534,8 @@ Arglist * collect_scrap_name(int current_scrap)
case '\'': { case '\'': {
/* Add plain string argument */ /* Add plain string argument */
#line 5723 "nuweb.w"
char buff[MAX_NAME_LEN]; char buff[MAX_NAME_LEN];
char * s = buff; char * s = buff;
int c, c2; int c, c2;
@@ -483,9 +552,15 @@ Arglist * collect_scrap_name(int current_scrap)
} }
*s = '\000'; *s = '\000';
/* Add buff to current arg list */ /* Add buff to current arg list */
#line 5774 "nuweb.w"
*tail = buildArglist(NULL, (Arglist *)save_string(buff)); *tail = buildArglist(NULL, (Arglist *)save_string(buff));
tail = &(*tail)->next; tail = &(*tail)->next;
#line 5738 "nuweb.w"
#line 5673 "nuweb.w"
} }
*p++ = ARG_CHR; *p++ = ARG_CHR;
c = source_get(); c = source_get();
@@ -494,20 +569,30 @@ Arglist * collect_scrap_name(int current_scrap)
case '4': case '5': case '6': case '4': case '5': case '6':
case '7': case '8': case '9': { case '7': case '8': case '9': {
/* Add a propagated argument */ /* Add a propagated argument */
#line 5744 "nuweb.w"
char buff[3]; char buff[3];
buff[0] = ARG_CHR; buff[0] = ARG_CHR;
buff[1] = c; buff[1] = c;
buff[2] = '\000'; buff[2] = '\000';
/* Add buff to current arg list */ /* Add buff to current arg list */
#line 5774 "nuweb.w"
*tail = buildArglist(NULL, (Arglist *)save_string(buff)); *tail = buildArglist(NULL, (Arglist *)save_string(buff));
tail = &(*tail)->next; tail = &(*tail)->next;
#line 5748 "nuweb.w"
#line 5681 "nuweb.w"
} }
*p++ = ARG_CHR; *p++ = ARG_CHR;
c = source_get(); c = source_get();
break; break;
case '{': { case '{': {
/* Add an inline scrap argument */ /* Add an inline scrap argument */
#line 5751 "nuweb.w"
int s = collect_scrap(); int s = collect_scrap();
Scrap_Node * d = (Scrap_Node *)arena_getmem(sizeof(Scrap_Node)); Scrap_Node * d = (Scrap_Node *)arena_getmem(sizeof(Scrap_Node));
d->scrap = s; d->scrap = s;
@@ -515,23 +600,31 @@ Arglist * collect_scrap_name(int current_scrap)
d->next = NULL; d->next = NULL;
*tail = buildArglist((Name *)1, (Arglist *)d); *tail = buildArglist((Name *)1, (Arglist *)d);
tail = &(*tail)->next; tail = &(*tail)->next;
#line 5687 "nuweb.w"
} }
*p++ = ARG_CHR; *p++ = ARG_CHR;
c = source_get(); c = source_get();
break; break;
case '<': case '<':
/* Add macro call argument */ /* Add macro call argument */
#line 5767 "nuweb.w"
*tail = collect_scrap_name(current_scrap); *tail = collect_scrap_name(current_scrap);
if (current_scrap >= 0) if (current_scrap >= 0)
add_to_use((*tail)->name, current_scrap); add_to_use((*tail)->name, current_scrap);
tail = &(*tail)->next; tail = &(*tail)->next;
#line 5693 "nuweb.w"
*p++ = ARG_CHR; *p++ = ARG_CHR;
c = source_get(); c = source_get();
break; break;
case '(': case '(':
scrap_name_has_parameters = 1; scrap_name_has_parameters = 1;
/* Cleanup and install name */ /* Cleanup and install name */
#line 5547 "nuweb.w"
{ {
if (p > name && p[-1] == ' ') if (p > name && p[-1] == ' ')
p--; p--;
@@ -547,10 +640,14 @@ Arglist * collect_scrap_name(int current_scrap)
*p = '\0'; *p = '\0';
node = prefix_add(&macro_names, name, sector); node = prefix_add(&macro_names, name, sector);
} }
#line 5699 "nuweb.w"
return buildArglist(node, head); return buildArglist(node, head);
case '>': case '>':
scrap_name_has_parameters = 0; scrap_name_has_parameters = 0;
/* Cleanup and install name */ /* Cleanup and install name */
#line 5547 "nuweb.w"
{ {
if (p > name && p[-1] == ' ') if (p > name && p[-1] == ' ')
p--; p--;
@@ -566,6 +663,8 @@ Arglist * collect_scrap_name(int current_scrap)
*p = '\0'; *p = '\0';
node = prefix_add(&macro_names, name, sector); node = prefix_add(&macro_names, name, sector);
} }
#line 5703 "nuweb.w"
return buildArglist(node, head); return buildArglist(node, head);
default: default:
@@ -581,6 +680,8 @@ Arglist * collect_scrap_name(int current_scrap)
exit(-1); exit(-1);
} }
} }
#line 5644 "nuweb.w"
break; break;
} }
if (!isgraph(c)) { if (!isgraph(c)) {
@@ -599,10 +700,11 @@ Arglist * collect_scrap_name(int current_scrap)
exit(-1); exit(-1);
return NULL; /* unreachable return to avoid warnings on some compilers */ return NULL; /* unreachable return to avoid warnings on some compilers */
} }
static Scrap_Node *reverse(); /* a forward declaration */
void reverse_lists(names) #line 5779 "nuweb.w"
Name *names; static Scrap_Node *reverse(Scrap_Node *a); /* a forward declaration */
void reverse_lists(Name *names)
{ {
while (names) { while (names) {
reverse_lists(names->llink); reverse_lists(names->llink);
@@ -611,8 +713,9 @@ void reverse_lists(names)
names = names->rlink; names = names->rlink;
} }
} }
static Scrap_Node *reverse(a)
Scrap_Node *a; #line 5796 "nuweb.w"
static Scrap_Node *reverse(Scrap_Node *a)
{ {
if (a) { if (a) {
Scrap_Node *b = a->next; Scrap_Node *b = a->next;

301
nuweb.w
View File

@@ -954,9 +954,7 @@ then handles any files listed on the command line.
@o main.c -cc -d @o main.c -cc -d
@{ @{
#include <stdlib.h> #include <stdlib.h>
int main(argc, argv) int main(int argc, char** argv)
int argc;
char **argv;
{ {
int arg = 1; int arg = 1;
@<Interpret command-line arguments@> @<Interpret command-line arguments@>
@@ -1378,7 +1376,7 @@ is forced when generating HTML.
int saved_number_flag = number_flag; int saved_number_flag = number_flag;
number_flag = TRUE; number_flag = TRUE;
collect_numbers(aux_name); collect_numbers(aux_name);
write_html(source_name, tex_name, 0/*Dummy */); write_html(source_name, tex_name);
number_flag = saved_number_flag; number_flag = saved_number_flag;
} }
else { else {
@@ -1399,7 +1397,7 @@ During the first pass, we scan the file, recording the definitions of
each fragment and file and accumulating all the scraps. each fragment and file and accumulating all the scraps.
@d Function pro... @d Function pro...
@{extern void pass1(); @{extern void pass1(char *file_name);
@} @}
@@ -1413,8 +1411,7 @@ our data structures. Next, we seach all the scraps for references to
the user-specified index entries. Finally, we must reverse all the the user-specified index entries. Finally, we must reverse all the
cross-reference lists accumulated while scanning the scraps. cross-reference lists accumulated while scanning the scraps.
@o pass1.c -cc -d @o pass1.c -cc -d
@{void pass1(file_name) @{void pass1(char *file_name)
char *file_name;
{ {
if (verbose_flag) if (verbose_flag)
fprintf(stderr, "reading %s\n", file_name); fprintf(stderr, "reading %s\n", file_name);
@@ -1814,7 +1811,7 @@ Fragment parameters were added on later in nuweb's development.
There still is not, for example, an index of fragment parameters. There still is not, for example, an index of fragment parameters.
We need a data type to keep track of fragment parameters. We need a data type to keep track of fragment parameters.
@o global.h -cc -d @d Type decl...
@{typedef int *Parameters; @{typedef int *Parameters;
@| Parameters @} @| Parameters @}
@@ -2034,31 +2031,33 @@ modify nuweb to work with a different typesetting system, this would
be the place to look. be the place to look.
@d Function... @d Function...
@{extern void write_tex(); @{extern void write_tex(char *file_name, char *tex_name);
@} @}
We need a few local function declarations before we get into the body We need a few local function declarations before we get into the body
of \verb|write_tex|. of \verb|write_tex|.
@o latex.c -cc -d @o latex.c -cc -d
@{static void copy_scrap(); /* formats the body of a scrap */ @{static void copy_scrap(FILE *file, int prefix, Name *name);
static void print_scrap_numbers(); /* formats a list of scrap numbers */ /* formats the body of a scrap */
static void format_entry(); /* formats an index entry */ static void print_scrap_numbers(FILE *tex_file, Scrap_Node *scraps);
static void format_file_entry(); /* formats a file index entry */ /* formats a list of scrap numbers */
static void format_user_entry(); static void format_entry(Name *name, FILE *tex_file, unsigned char sector);
static void write_arg(); /* formats an index entry */
static void write_literal(); static void format_file_entry(Name *name, FILE *tex_file);
static void write_ArglistElement(); /* formats a file index entry */
static void format_user_entry(Name *name, FILE *tex_file,
unsigned char sector);
static void write_arg(FILE *tex_file, char *p);
static void write_literal(FILE *tex_file, char *p, int mode);
static void write_ArglistElement(FILE *file, Arglist *args, char **params);
@} @}
The routine \verb|write_tex| takes two file names as parameters: the The routine \verb|write_tex| takes two file names as parameters: the
name of the web source file and the name of the \verb|.tex| output file. name of the web source file and the name of the \verb|.tex| output file.
@o latex.c -cc -d @o latex.c -cc -d
@{void write_tex(file_name, tex_name, sector) @{void write_tex(char *file_name, char *tex_name)
char *file_name;
char *tex_name;
unsigned char sector;
{ {
FILE *tex_file = fopen(tex_name, "w"); FILE *tex_file = fopen(tex_name, "w");
if (tex_file) { if (tex_file) {
@@ -2496,9 +2495,7 @@ list.
}@} }@}
@o latex.c -cc -d @o latex.c -cc -d
@{static void print_scrap_numbers(tex_file, scraps) @{static void print_scrap_numbers(FILE *tex_file, Scrap_Node *scraps)
FILE *tex_file;
Scrap_Node *scraps;
{ {
int page; int page;
fputs("\\NWlink{nuweb", tex_file); fputs("\\NWlink{nuweb", tex_file);
@@ -2605,10 +2602,7 @@ command.
@| write_literal @} @| write_literal @}
@o latex.c -cc -d @o latex.c -cc -d
@{static void copy_scrap(file, prefix, name) @{static void copy_scrap(FILE *file, int prefix, Name *name)
FILE *file;
int prefix;
Name * name;
{ {
int indent = 0; int indent = 0;
int c; int c;
@@ -2930,9 +2924,7 @@ write_ArglistElement(FILE * file, Arglist * args, char ** params)
}@} }@}
@o latex.c -cc -d @o latex.c -cc -d
@{static void format_file_entry(name, tex_file) @{static void format_file_entry(Name *name, FILE *tex_file)
Name *name;
FILE *tex_file;
{ {
while (name) { while (name) {
format_file_entry(name->llink, tex_file); format_file_entry(name->llink, tex_file);
@@ -3003,10 +2995,7 @@ c = source_get();
@| load_entry @} @| load_entry @}
@o latex.c -cc -d @o latex.c -cc -d
@{static void format_entry(name, tex_file, sector) @{static void format_entry(Name *name, FILE *tex_file, unsigned char sector)
Name *name;
FILE *tex_file;
unsigned char sector;
{ {
Name ** nms = malloc(num_scraps()*sizeof(Name *)); Name ** nms = malloc(num_scraps()*sizeof(Name *));
int n = load_entry(name, nms, 0); int n = load_entry(name, nms, 0);
@@ -3144,10 +3133,7 @@ for (j = 1; j < @2; j++)
@o latex.c -cc -d @o latex.c -cc -d
@{static void format_user_entry(name, tex_file, sector) @{static void format_user_entry(Name *name, FILE *tex_file, unsigned char sector)
Name *name;
FILE *tex_file;
unsigned char sector;
{ {
while (name) { while (name) {
format_user_entry(name->llink, tex_file, sector); format_user_entry(name->llink, tex_file, sector);
@@ -3238,28 +3224,31 @@ copies most of the text from the source file straight into a
cross-reference information is printed out. cross-reference information is printed out.
@d Function... @d Function...
@{extern void write_html(); @{extern void write_html(char *file_name, char *html_name);
@} @}
We need a few local function declarations before we get into the body We need a few local function declarations before we get into the body
of \verb|write_html|. of \verb|write_html|.
@o html.c @o html.c
@{static void copy_scrap(); /* formats the body of a scrap */ @{static void copy_scrap(FILE *file, int prefix);
static void display_scrap_ref(); /* formats a scrap reference */ /* formats the body of a scrap */
static void display_scrap_numbers(); /* formats a list of scrap numbers */ static void display_scrap_ref(FILE *html_file, int num);
static void print_scrap_numbers(); /* pluralizes scrap formats list */ /* formats a scrap reference */
static void format_entry(); /* formats an index entry */ static void display_scrap_numbers(FILE *html_file, Scrap_Node *scraps);
static void format_user_entry(); /* formats a list of scrap numbers */
static void print_scrap_numbers(FILE *html_file, Scrap_Node *scraps);
/* pluralizes scrap formats list */
static void format_entry(Name *name, FILE *html_file, int file_flag);
/* formats an index entry */
static void format_user_entry(Name *name, FILE *html_file, int sector);
@} @}
The routine \verb|write_html| takes two file names as parameters: the The routine \verb|write_html| takes two file names as parameters: the
name of the web source file and the name of the \verb|.tex| output file. name of the web source file and the name of the \verb|.tex| output file.
@o html.c @o html.c
@{void write_html(file_name, html_name) @{void write_html(char *file_name, char *html_name)
char *file_name;
char *html_name;
{ {
FILE *html_file = fopen(html_name, "w"); FILE *html_file = fopen(html_name, "w");
FILE *tex_file = html_file; FILE *tex_file = html_file;
@@ -3472,9 +3461,7 @@ end the paragraph.
}@} }@}
@o html.c @o html.c
@{static void display_scrap_ref(html_file, num) @{static void display_scrap_ref(FILE *html_file, int num)
FILE *html_file;
int num;
{ {
fputs("<a href=\"#nuweb", html_file); fputs("<a href=\"#nuweb", html_file);
write_single_scrap_ref(html_file, num); write_single_scrap_ref(html_file, num);
@@ -3485,9 +3472,7 @@ end the paragraph.
@| display_scrap_ref @} @| display_scrap_ref @}
@o html.c @o html.c
@{static void display_scrap_numbers(html_file, scraps) @{static void display_scrap_numbers(FILE *html_file, Scrap_Node *scraps)
FILE *html_file;
Scrap_Node *scraps;
{ {
display_scrap_ref(html_file, scraps->scrap); display_scrap_ref(html_file, scraps->scrap);
scraps = scraps->next; scraps = scraps->next;
@@ -3500,9 +3485,7 @@ end the paragraph.
@| display_scrap_numbers @} @| display_scrap_numbers @}
@o html.c @o html.c
@{static void print_scrap_numbers(html_file, scraps) @{static void print_scrap_numbers(FILE *html_file, Scrap_Node *scraps)
FILE *html_file;
Scrap_Node *scraps;
{ {
display_scrap_numbers(html_file, scraps); display_scrap_numbers(html_file, scraps);
fputs(".\n", html_file); fputs(".\n", html_file);
@@ -3515,9 +3498,7 @@ end the paragraph.
We must translate HTML special keywords into entities in scraps. We must translate HTML special keywords into entities in scraps.
@o html.c @o html.c
@{static void copy_scrap(file, prefix) @{static void copy_scrap(FILE *file, int prefix)
FILE *file;
int prefix;
{ {
int indent = 0; int indent = 0;
int c = source_get(); int c = source_get();
@@ -3660,10 +3641,7 @@ pointed out any during the first pass.
}@} }@}
@o html.c @o html.c
@{static void format_entry(name, html_file, file_flag) @{static void format_entry(Name *name, FILE *html_file, int file_flag)
Name *name;
FILE *html_file;
int file_flag;
{ {
while (name) { while (name) {
format_entry(name->llink, html_file, file_flag); format_entry(name->llink, html_file, file_flag);
@@ -3732,10 +3710,7 @@ pointed out any during the first pass.
@o html.c @o html.c
@{static void format_user_entry(name, html_file, sector) @{static void format_user_entry(Name *name, FILE *html_file, int sector)
Name *name;
FILE *html_file;
int sector;
{ {
while (name) { while (name) {
format_user_entry(name->llink, html_file, sector); format_user_entry(name->llink, html_file, sector);
@@ -3786,12 +3761,11 @@ pointed out any during the first pass.
\section{Writing the Output Files} \label{output-files} \section{Writing the Output Files} \label{output-files}
@d Function pro... @d Function pro...
@{extern void write_files(); @{extern void write_files(Name *files);
@} @}
@o output.c -cc -d @o output.c -cc -d
@{void write_files(files) @{void write_files(Name *files)
Name *files;
{ {
while (files) { while (files) {
write_files(files->llink); write_files(files->llink);
@@ -3912,8 +3886,10 @@ if (0 != rename(temp_name, real_name)) {
We need two routines to handle reading the source files. We need two routines to handle reading the source files.
@d Function pro... @d Function pro...
@{extern void source_open(); /* pass in the name of the source file */ @{extern void source_open(char *name);
extern int source_get(); /* no args; returns the next char or EOF */ /* pass in the name of the source file */
extern int source_get(void);
/* no args; returns the next char or EOF */
extern int source_last; /* what last source_get() returned. */ extern int source_last; /* what last source_get() returned. */
extern int source_peek; /* The next character to get */ extern int source_peek; /* The next character to get */
@} @}
@@ -3962,7 +3938,7 @@ are defining.
@{ @{
int source_peek; int source_peek;
int source_last; int source_last;
int source_get() int source_get(void)
{ {
int c; int c;
source_last = c = source_peek; source_last = c = source_peek;
@@ -4128,8 +4104,7 @@ The routine \verb|source_open| takes a file name and tries to open the
file. If unsuccessful, it complains and halts. Otherwise, it sets file. If unsuccessful, it complains and halts. Otherwise, it sets
\verb|source_name|, \verb|source_line|, and \verb|double_at|. \verb|source_name|, \verb|source_line|, and \verb|double_at|.
@o input.c -cc -d @o input.c -cc -d
@{void source_open(name) @{void source_open(char *name)
char *name;
{ {
source_file = fopen(name, "r"); source_file = fopen(name, "r");
if (!source_file) { if (!source_file) {
@@ -4186,7 +4161,7 @@ static ScrapEntry *SCRAP[SCRAP_SIZE];
#define scrap_array(i) SCRAP[(i) >> SCRAP_SHIFT][(i) & SCRAP_MASK] #define scrap_array(i) SCRAP[(i) >> SCRAP_SHIFT][(i) & SCRAP_MASK]
static int scraps; static int scraps;
int num_scraps() int num_scraps(void)
{ {
return scraps; return scraps;
}; };
@@ -4195,17 +4170,22 @@ int num_scraps()
@d Function pro... @d Function pro...
@{extern void init_scraps(); @{extern void init_scraps(void);
extern int collect_scrap(); extern int collect_scrap(void);
extern int write_scraps(); extern int write_scraps(FILE *file, char *spelling, Scrap_Node *defs,
extern void write_scrap_ref(); int global_indent, char *indent_chars,
extern void write_single_scrap_ref(); char debug_flag, char tab_flag, char indent_flag,
extern int num_scraps(); unsigned char comment_flag, Arglist *inArgs,
char *inParams[9], Parameters parameters,
char *title);
extern void write_scrap_ref(FILE *file, int num, int first, int *page);
extern void write_single_scrap_ref(FILE *file, int num);
extern int num_scraps(void);
@} @}
@o scraps.c -cc -d @o scraps.c -cc -d
@{void init_scraps() @{void init_scraps(void)
{ {
scraps = 1; scraps = 1;
SCRAP[0] = (ScrapEntry *) arena_getmem(SCRAP_SIZE * sizeof(ScrapEntry)); SCRAP[0] = (ScrapEntry *) arena_getmem(SCRAP_SIZE * sizeof(ScrapEntry));
@@ -4213,11 +4193,7 @@ extern int num_scraps();
@| init_scraps @} @| init_scraps @}
@o scraps.c -cc -d @o scraps.c -cc -d
@{void write_scrap_ref(file, num, first, page) @{void write_scrap_ref(FILE *file, int num, int first, int *page)
FILE *file;
int num;
int first;
int *page;
{ {
if (scrap_array(num).page >= 0) { if (scrap_array(num).page >= 0) {
if (first!=0) if (first!=0)
@@ -4240,9 +4216,7 @@ extern int num_scraps();
@| write_scrap_ref @} @| write_scrap_ref @}
@o scraps.c -cc -d @o scraps.c -cc -d
@{void write_single_scrap_ref(file, num) @{void write_single_scrap_ref(FILE *file, int num)
FILE *file;
int num;
{ {
int page; int page;
write_scrap_ref(file, num, TRUE, &page); write_scrap_ref(file, num, TRUE, &page);
@@ -4278,9 +4252,7 @@ extern int num_scraps();
@o scraps.c -cc -d @o scraps.c -cc -d
@{static void push(c, manager) @{static void push(char c, Manager *manager)
char c;
Manager *manager;
{ {
Slab *scrap = manager->scrap; Slab *scrap = manager->scrap;
int index = manager->index; int index = manager->index;
@@ -4296,9 +4268,7 @@ extern int num_scraps();
@| push @} @| push @}
@o scraps.c -cc -d @o scraps.c -cc -d
@{static void pushs(s, manager) @{static void pushs(char *s, Manager *manager)
char *s;
Manager *manager;
{ {
while (*s) while (*s)
push(*s++, manager); push(*s++, manager);
@@ -4306,7 +4276,7 @@ extern int num_scraps();
@| pushs @} @| pushs @}
@o scraps.c -cc -d @o scraps.c -cc -d
@{int collect_scrap() @{int collect_scrap(void)
{ {
int current_scrap, lblseq = 0; int current_scrap, lblseq = 0;
int depth = 1; int depth = 1;
@@ -4531,8 +4501,7 @@ add_to_use(Name * name, int current_scrap)
@{extern void add_to_use(Name * name, int current_scrap); @{extern void add_to_use(Name * name, int current_scrap);
@} @}
@o scraps.c -cc -d @o scraps.c -cc -d
@{static char pop(manager) @{static char pop(Manager *manager)
Manager *manager;
{ {
Slab *scrap = manager->scrap; Slab *scrap = manager->scrap;
int index = manager->index; int index = manager->index;
@@ -4548,9 +4517,7 @@ add_to_use(Name * name, int current_scrap)
@| pop @} @| pop @}
@o scraps.c -cc -d @o scraps.c -cc -d
@{static void backup(n, manager) @{static void backup(int n, Manager *manager)
int n;
Manager *manager;
{ {
int index = manager->index; int index = manager->index;
if (n > index if (n > index
@@ -4605,7 +4572,7 @@ lookup(int n, Arglist * par, char * arg[9], Name **name, Arglist ** args)
@| instance @} @| instance @}
@d Function prototypes @d Function prototypes
@{Arglist * instance(); @{extern Arglist *instance(Arglist *a, Arglist *par, char *arg[9], int *ch);
@} @}
@d Set up name, args and next @d Set up name, args and next
@@ -4637,9 +4604,7 @@ a->args = args;
a->next = next;@} a->next = next;@}
@o scraps.c -cc -d @o scraps.c -cc -d
@{static Arglist *pop_scrap_name(manager, parameters) @{static Arglist *pop_scrap_name(Manager *manager, Parameters *parameters)
Manager *manager;
Parameters *parameters;
{ {
char name[MAX_NAME_LEN]; char name[MAX_NAME_LEN];
char *p = name; char *p = name;
@@ -4672,22 +4637,11 @@ a->next = next;@}
}@} }@}
@o scraps.c -cc -d @o scraps.c -cc -d
@{int write_scraps(file, spelling, defs, global_indent, indent_chars, @{int write_scraps(FILE *file, char *spelling, Scrap_Node *defs,
debug_flag, tab_flag, indent_flag, int global_indent, char *indent_chars, char debug_flag,
comment_flag, inArgs, inParams, parameters, title) char tab_flag, char indent_flag,
FILE *file; unsigned char comment_flag, Arglist *inArgs,
char * spelling; char *inParams[9], Parameters parameters, char *title)
Scrap_Node *defs;
int global_indent;
char *indent_chars;
char debug_flag;
char tab_flag;
char indent_flag;
unsigned char comment_flag;
Arglist * inArgs;
char * inParams[9];
Parameters parameters;
char * title;
{ {
/* This is in file @f */ /* This is in file @f */
int indent = 0; int indent = 0;
@@ -5000,7 +4954,8 @@ comment_ArglistElement(FILE * file, Arglist * args, int quote)
@d Include an embedded scrap in comment @d Include an embedded scrap in comment
@{Embed_Node * e = (Embed_Node *)q; @{Embed_Node * e = (Embed_Node *)q;
fputc('{', file); fputc('{', file);
write_scraps(file, "", e->defs, -1, "", 0, 0, 0, 0, e->args, 0, 1, ""); write_scraps(file, "", e->defs, -1, "", 0, 0, 0, 0, e->args, 0,
(Parameters)1, "");
fputc('}', file);@} fputc('}', file);@}
@d Include a fragment use in comment @d Include a fragment use in comment
@@ -5026,12 +4981,11 @@ fputc('>', file);@}
\subsection{Collecting Page Numbers} \subsection{Collecting Page Numbers}
@d Function... @d Function...
@{extern void collect_numbers(); @{extern void collect_numbers(char *aux_name);
@} @}
@o scraps.c -cc -d @o scraps.c -cc -d
@{void collect_numbers(aux_name) @{void collect_numbers(char *aux_name)
char *aux_name;
{ {
if (number_flag) { if (number_flag) {
int i; int i;
@@ -5159,21 +5113,19 @@ int scrap_ended_with;
@} @}
@d Function pro... @d Function pro...
@{extern Name *collect_file_name(); @{extern Name *collect_file_name(void);
extern Name *collect_macro_name(); extern Name *collect_macro_name(void);
extern Arglist *collect_scrap_name(); extern Arglist *collect_scrap_name(int current_scrap);
extern Name *name_add(); extern Name *name_add(Name **rt, char *spelling, unsigned char sector);
extern Name *prefix_add(); extern Name *prefix_add(Name **rt, char *spelling, unsigned char sector);
extern char *save_string(); extern char *save_string(char *);
extern void reverse_lists(); extern void reverse_lists(Name *names);
@} @}
@o names.c -cc -d @o names.c -cc -d
@{enum { LESS, GREATER, EQUAL, PREFIX, EXTENSION }; @{enum { LESS, GREATER, EQUAL, PREFIX, EXTENSION };
static int compare(x, y) static int compare(char *x, char *y)
char *x;
char *y;
{ {
int len, result; int len, result;
int xl = strlen(x); int xl = strlen(x);
@@ -5200,8 +5152,7 @@ static int compare(x, y)
@o names.c -cc -d @o names.c -cc -d
@{char *save_string(s) @{char *save_string(char *s)
char *s;
{ {
char *new = (char *) arena_getmem((strlen(s) + 1) * sizeof(char)); char *new = (char *) arena_getmem((strlen(s) + 1) * sizeof(char));
strcpy(new, s); strcpy(new, s);
@@ -5210,14 +5161,12 @@ static int compare(x, y)
@| save_string @} @| save_string @}
@o names.c -cc -d @o names.c -cc -d
@{static int ambiguous_prefix(); @{static int ambiguous_prefix(Name *node, char *spelling,
unsigned char sector);
static char * found_name = NULL; static char * found_name = NULL;
Name *prefix_add(rt, spelling, sector) Name *prefix_add(Name **rt, char *spelling, unsigned char sector)
Name **rt;
char *spelling;
unsigned char sector;
{ {
Name *node = *rt; Name *node = *rt;
int cmp; int cmp;
@@ -5264,10 +5213,7 @@ continue the search down {\em both\/} branches of the tree.
}@} }@}
@o names.c -cc -d @o names.c -cc -d
@{static int ambiguous_prefix(node, spelling, sector) @{static int ambiguous_prefix(Name *node, char *spelling, unsigned char sector)
Name *node;
char *spelling;
unsigned char sector;
{ {
while (node) { while (node) {
switch (compare(node->spelling, spelling)) { switch (compare(node->spelling, spelling)) {
@@ -5354,10 +5300,7 @@ them to be considered for the alphabetical ordering.
@} @}
@o names.c -cc -d @o names.c -cc -d
@{Name *name_add(rt, spelling, sector) @{Name *name_add(Name **rt, char *spelling, unsigned char sector)
Name **rt;
char *spelling;
unsigned char sector;
{ {
Name *node = *rt; Name *node = *rt;
while (node) { while (node) {
@@ -5417,7 +5360,7 @@ them to be considered for the alphabetical ordering.
Name terminated by whitespace. Also check for ``per-file'' flags. Keep Name terminated by whitespace. Also check for ``per-file'' flags. Keep
skipping white space until we reach scrap. skipping white space until we reach scrap.
@o names.c -cc -d @o names.c -cc -d
@{Name *collect_file_name() @{Name *collect_file_name(void)
{ {
Name *new_name; Name *new_name;
char name[MAX_NAME_LEN]; char name[MAX_NAME_LEN];
@@ -5500,7 +5443,7 @@ char * comment_end[4] = { "", " */", "", ""};
Name terminated by \verb+\n+ or \verb+@@{+; but keep skipping until \verb+@@{+ Name terminated by \verb+\n+ or \verb+@@{+; but keep skipping until \verb+@@{+
@o names.c -cc -d @o names.c -cc -d
@{Name *collect_macro_name() @{Name *collect_macro_name(void)
{ {
char name[MAX_NAME_LEN]; char name[MAX_NAME_LEN];
char args[1000]; char args[1000];
@@ -5633,7 +5576,7 @@ while ((c = source_get()) != EOF) {
}@} }@}
@d Function prototypes @d Function prototypes
@{extern Name *install_args(); @{extern Name *install_args(Name * name, int argc, char *arg[0]);
@} @}
@o names.c -cc -d @o names.c -cc -d
@@ -5833,10 +5776,9 @@ tail = &(*tail)->next;
@} @}
@o names.c -cc -d @o names.c -cc -d
@{static Scrap_Node *reverse(); /* a forward declaration */ @{static Scrap_Node *reverse(Scrap_Node *a); /* a forward declaration */
void reverse_lists(names) void reverse_lists(Name *names)
Name *names;
{ {
while (names) { while (names) {
reverse_lists(names->llink); reverse_lists(names->llink);
@@ -5851,8 +5793,7 @@ Just for fun, here's a non-recursive version of the traditional list
reversal code. Note that it reverses the list in place; that is, it reversal code. Note that it reverses the list in place; that is, it
does no new allocations. does no new allocations.
@o names.c -cc -d @o names.c -cc -d
@{static Scrap_Node *reverse(a) @{static Scrap_Node *reverse(Scrap_Node *a)
Scrap_Node *a;
{ {
if (a) { if (a) {
Scrap_Node *b = a->next; Scrap_Node *b = a->next;
@@ -5910,9 +5851,7 @@ static Goto_Node **depths;
@o scraps.c -cc -d @o scraps.c -cc -d
@{static Goto_Node *goto_lookup(c, g) @{static Goto_Node *goto_lookup(char c, Goto_Node *g)
char c;
Goto_Node *g;
{ {
Move_Node *m = g->moves; Move_Node *m = g->moves;
while (m && m->c != c) while (m && m->c != c)
@@ -6058,14 +5997,14 @@ else if (m->prev)
\subsection{Building the Automata} \subsection{Building the Automata}
@d Function pro... @d Function pro...
@{extern void search(); @{extern void search(void);
@} @}
@o scraps.c -cc -d @o scraps.c -cc -d
@{static void build_gotos(); @{static void build_gotos(Name *tree);
static int reject_match(); static int reject_match(Name *name, char post, ArgManager *reader);
void search() void search(void)
{ {
int i; int i;
for (i=0; i<128; i++) for (i=0; i<128; i++)
@@ -6083,8 +6022,7 @@ void search()
@o scraps.c -cc -d @o scraps.c -cc -d
@{static void build_gotos(tree) @{static void build_gotos(Name *tree)
Name *tree;
{ {
while (tree) { while (tree) {
@<Extend goto graph with \verb|tree->spelling|@> @<Extend goto graph with \verb|tree->spelling|@>
@@ -6261,8 +6199,8 @@ void search()
@d Forward declarations for scraps.c @d Forward declarations for scraps.c
@{ @{
static void add_uses(); static void add_uses(Uses **root, Name *name);
static int scrap_is_in(); static int scrap_is_in(Scrap_Node * list, int i);
@} @}
@o scraps.c -cc -d @o scraps.c -cc -d
@@ -6422,8 +6360,7 @@ For the present, we'll consider the mechanism an experiment.
@o scraps.c -cc -d @o scraps.c -cc -d
@{#define sym_char(c) (isalnum(c) || (c) == '_') @{#define sym_char(c) (isalnum(c) || (c) == '_')
static int op_char(c) static int op_char(char c)
char c;
{ {
switch (c) { switch (c) {
case '!': case '#': case '%': case '$': case '^': case '!': case '#': case '%': case '$': case '^':
@@ -6437,10 +6374,7 @@ static int op_char(c)
@| sym_char op_char @} @| sym_char op_char @}
@o scraps.c -cc -d @o scraps.c -cc -d
@{static int reject_match(name, post, reader) @{static int reject_match(Name *name, char post, ArgManager *reader)
Name *name;
char post;
ArgManager *reader;
{ {
int len = strlen(name->spelling); int len = strlen(name->spelling);
char first = name->spelling[0]; char first = name->spelling[0];
@@ -6569,8 +6503,8 @@ be allocated. When the storage is no longer required, the entire arena
is freed with a single call to \verb|arena_free()|. Both operations is freed with a single call to \verb|arena_free()|. Both operations
are quite fast. are quite fast.
@d Function p... @d Function p...
@{extern void *arena_getmem(); @{extern void *arena_getmem(size_t n);
extern void arena_free(); extern void arena_free(void);
@} @}
@@ -6603,8 +6537,7 @@ that returned pointers are always aligned. We align to the nearest
4-byte alignment restrictions too. 4-byte alignment restrictions too.
@o arena.c -cc -d @o arena.c -cc -d
@{void *arena_getmem(n) @{void *arena_getmem(size_t n)
size_t n;
{ {
char *q; char *q;
char *p = arena->avail; char *p = arena->avail;
@@ -6662,7 +6595,7 @@ need to allocate a new one.
To free all the memory in the arena, we need only point \verb|arena| To free all the memory in the arena, we need only point \verb|arena|
back to the first empty chunk. back to the first empty chunk.
@o arena.c -cc -d @o arena.c -cc -d
@{void arena_free() @{void arena_free(void)
{ {
arena = &first; arena = &first;
} }

View File

@@ -1,10 +1,15 @@
#line 908 "nuweb.w"
#include "global.h" #include "global.h"
void write_files(files)
Name *files; #line 3768 "nuweb.w"
void write_files(Name *files)
{ {
while (files) { while (files) {
write_files(files->llink); write_files(files->llink);
/* Write out \verb|files->spelling| */ /* Write out \verb|files->spelling| */
#line 3789 "nuweb.w"
{ {
static char temp_name[FILENAME_MAX]; static char temp_name[FILENAME_MAX];
static char real_name[FILENAME_MAX]; static char real_name[FILENAME_MAX];
@@ -14,6 +19,8 @@ void write_files(files)
/* Find a free temporary file */ /* Find a free temporary file */
#line 3809 "nuweb.w"
for( temp_name_count = 0; temp_name_count < 10000; temp_name_count++) { for( temp_name_count = 0; temp_name_count < 10000; temp_name_count++) {
sprintf(temp_name,"%s%snw%06d", dirpath, path_sep, temp_name_count); sprintf(temp_name,"%s%snw%06d", dirpath, path_sep, temp_name_count);
#ifdef O_EXCL #ifdef O_EXCL
@@ -38,6 +45,8 @@ void write_files(files)
exit(-1); exit(-1);
} }
#line 3796 "nuweb.w"
sprintf(real_name, "%s%s%s", dirpath, path_sep, files->spelling); sprintf(real_name, "%s%s%s", dirpath, path_sep, files->spelling);
if (verbose_flag) if (verbose_flag)
@@ -49,8 +58,12 @@ void write_files(files)
/* Move the temporary file to the target, if required */ /* Move the temporary file to the target, if required */
#line 3839 "nuweb.w"
if (compare_flag) if (compare_flag)
/* Compare the temp file and the old file */ /* Compare the temp file and the old file */
#line 3850 "nuweb.w"
{ {
FILE *old_file = fopen(real_name, "r"); FILE *old_file = fopen(real_name, "r");
if (old_file) { if (old_file) {
@@ -68,34 +81,52 @@ void write_files(files)
remove(real_name); remove(real_name);
/* Rename the temporary file to the target */ /* Rename the temporary file to the target */
#line 3872 "nuweb.w"
if (0 != rename(temp_name, real_name)) { if (0 != rename(temp_name, real_name)) {
fprintf(stderr, "%s: can't rename output file to %s\n", fprintf(stderr, "%s: can't rename output file to %s\n",
command_name, real_name); command_name, real_name);
} }
#line 3865 "nuweb.w"
} }
} }
else else
/* Rename the temporary file to the target */ /* Rename the temporary file to the target */
#line 3872 "nuweb.w"
if (0 != rename(temp_name, real_name)) { if (0 != rename(temp_name, real_name)) {
fprintf(stderr, "%s: can't rename output file to %s\n", fprintf(stderr, "%s: can't rename output file to %s\n",
command_name, real_name); command_name, real_name);
} }
#line 3869 "nuweb.w"
} }
#line 3841 "nuweb.w"
else { else {
remove(real_name); remove(real_name);
/* Rename the temporary file to the target */ /* Rename the temporary file to the target */
#line 3872 "nuweb.w"
if (0 != rename(temp_name, real_name)) { if (0 != rename(temp_name, real_name)) {
fprintf(stderr, "%s: can't rename output file to %s\n", fprintf(stderr, "%s: can't rename output file to %s\n",
command_name, real_name); command_name, real_name);
} }
} #line 3844 "nuweb.w"
} }
#line 3806 "nuweb.w"
}
#line 3772 "nuweb.w"
files = files->rlink; files = files->rlink;
} }
} }

85
pass1.c
View File

@@ -1,6 +1,9 @@
#line 885 "nuweb.w"
#include "global.h" #include "global.h"
void pass1(file_name)
char *file_name; #line 1414 "nuweb.w"
void pass1(char *file_name)
{ {
if (verbose_flag) if (verbose_flag)
fprintf(stderr, "reading %s\n", file_name); fprintf(stderr, "reading %s\n", file_name);
@@ -10,11 +13,15 @@ void pass1(file_name)
file_names = NULL; file_names = NULL;
user_names = NULL; user_names = NULL;
/* Scan the source file, looking for at-sequences */ /* Scan the source file, looking for at-sequences */
#line 1433 "nuweb.w"
{ {
int c = source_get(); int c = source_get();
while (c != EOF) { while (c != EOF) {
if (c == nw_char) if (c == nw_char)
/* Scan at-sequence */ /* Scan at-sequence */
#line 1446 "nuweb.w"
{ {
char quoted = 0; char quoted = 0;
@@ -26,10 +33,14 @@ void pass1(file_name)
update_delimit_scrap(); update_delimit_scrap();
break; break;
case 'O': case 'O':
case 'o': { case 'o':
#line 1524 "nuweb.w"
{
Name *name = collect_file_name(); /* returns a pointer to the name entry */ Name *name = collect_file_name(); /* returns a pointer to the name entry */
int scrap = collect_scrap(); /* returns an index to the scrap */ int scrap = collect_scrap(); /* returns an index to the scrap */
/* Add \verb|scrap| to \verb|name|'s definition list */ /* Add \verb|scrap| to \verb|name|'s definition list */
#line 1543 "nuweb.w"
{ {
Scrap_Node *def = (Scrap_Node *) arena_getmem(sizeof(Scrap_Node)); Scrap_Node *def = (Scrap_Node *) arena_getmem(sizeof(Scrap_Node));
def->scrap = scrap; def->scrap = scrap;
@@ -37,15 +48,23 @@ void pass1(file_name)
def->next = name->defs; def->next = name->defs;
name->defs = def; name->defs = def;
} }
#line 1527 "nuweb.w"
} }
#line 1457 "nuweb.w"
break; break;
case 'Q': case 'Q':
case 'q': quoted = 1; case 'q': quoted = 1;
case 'D': case 'D':
case 'd': { case 'd':
#line 1532 "nuweb.w"
{
Name *name = collect_macro_name(); Name *name = collect_macro_name();
int scrap = collect_scrap(); int scrap = collect_scrap();
/* Add \verb|scrap| to \verb|name|'s definition list */ /* Add \verb|scrap| to \verb|name|'s definition list */
#line 1543 "nuweb.w"
{ {
Scrap_Node *def = (Scrap_Node *) arena_getmem(sizeof(Scrap_Node)); Scrap_Node *def = (Scrap_Node *) arena_getmem(sizeof(Scrap_Node));
def->scrap = scrap; def->scrap = scrap;
@@ -53,26 +72,40 @@ void pass1(file_name)
def->next = name->defs; def->next = name->defs;
name->defs = def; name->defs = def;
} }
#line 1535 "nuweb.w"
} }
#line 1462 "nuweb.w"
break; break;
case 's': case 's':
/* Step to next sector */ /* Step to next sector */
#line 1493 "nuweb.w"
prev_sector += 1; prev_sector += 1;
current_sector = prev_sector; current_sector = prev_sector;
c = source_get(); c = source_get();
#line 1465 "nuweb.w"
break; break;
case 'S': case 'S':
/* Close the current sector */ /* Close the current sector */
#line 1500 "nuweb.w"
current_sector = 1; current_sector = 1;
c = source_get(); c = source_get();
#line 1468 "nuweb.w"
break; break;
case '<': case '<':
case '(': case '(':
case '[': case '[':
case '{': case '{':
#line 1552 "nuweb.w"
{ {
int c; int c;
int depth = 1; int depth = 1;
@@ -80,6 +113,8 @@ void pass1(file_name)
if (c == nw_char) if (c == nw_char)
/* Skip over at-sign or go to skipped */ /* Skip over at-sign or go to skipped */
#line 1569 "nuweb.w"
{ {
c = source_get(); c = source_get();
switch (c) { switch (c) {
@@ -107,6 +142,8 @@ void pass1(file_name)
} }
} }
#line 1558 "nuweb.w"
} }
fprintf(stderr, "%s: unexpected EOF in text at (%s, %d)\n", fprintf(stderr, "%s: unexpected EOF in text at (%s, %d)\n",
command_name, source_name, source_line); command_name, source_name, source_line);
@@ -115,25 +152,37 @@ void pass1(file_name)
skipped: ; skipped: ;
} }
#line 1473 "nuweb.w"
break; break;
case 'c': { case 'c':
#line 1600 "nuweb.w"
{
char * p = blockBuff; char * p = blockBuff;
char * e = blockBuff + (sizeof(blockBuff)/sizeof(blockBuff[0])) - 1; char * e = blockBuff + (sizeof(blockBuff)/sizeof(blockBuff[0])) - 1;
/* Skip whitespace */ /* Skip whitespace */
#line 1618 "nuweb.w"
while (source_peek == ' ' while (source_peek == ' '
|| source_peek == '\t' || source_peek == '\t'
|| source_peek == '\n') || source_peek == '\n')
(void)source_get(); (void)source_get();
#line 1604 "nuweb.w"
while (p < e) while (p < e)
{ {
/* Add one char to the block buffer */ /* Add one char to the block buffer */
#line 1625 "nuweb.w"
int c = source_get(); int c = source_get();
if (c == nw_char) if (c == nw_char)
{ {
/* Add an at character to the block or break */ /* Add an at character to the block or break */
#line 1643 "nuweb.w"
int cc = source_peek; int cc = source_peek;
if (cc == 'c') if (cc == 'c')
@@ -161,6 +210,8 @@ void pass1(file_name)
*p++ = source_get(); *p++ = source_get();
} }
#line 1629 "nuweb.w"
} }
else if (c == EOF) else if (c == EOF)
{ {
@@ -171,7 +222,11 @@ void pass1(file_name)
{ {
/* Add any other character to the block */ /* Add any other character to the block */
#line 1672 "nuweb.w"
/* Perhaps skip white-space */ /* Perhaps skip white-space */
#line 1678 "nuweb.w"
if (c == ' ') if (c == ' ')
{ {
while (source_peek == ' ') while (source_peek == ' ')
@@ -189,22 +244,34 @@ void pass1(file_name)
c = ' '; c = ' ';
} }
#line 1673 "nuweb.w"
*p++ = c; *p++ = c;
#line 1638 "nuweb.w"
} }
#line 1607 "nuweb.w"
} }
if (p == e) if (p == e)
{ {
/* Skip to the next nw-char */ /* Skip to the next nw-char */
#line 1697 "nuweb.w"
int c; int c;
while ((c = source_get()), c != nw_char && c != EOF)/* Skip */ while ((c = source_get()), c != nw_char && c != EOF)/* Skip */
source_ungetc(&c); source_ungetc(&c);
#line 1611 "nuweb.w"
} }
*p = '\000'; *p = '\000';
} }
#line 1475 "nuweb.w"
break; break;
case 'x': case 'x':
case 'v': case 'v':
@@ -220,15 +287,23 @@ void pass1(file_name)
break; break;
} }
} }
#line 1437 "nuweb.w"
c = source_get(); c = source_get();
} }
} }
#line 1423 "nuweb.w"
if (tex_flag) if (tex_flag)
search(); search();
/* Reverse cross-reference lists */ /* Reverse cross-reference lists */
#line 1802 "nuweb.w"
{ {
reverse_lists(file_names); reverse_lists(file_names);
reverse_lists(macro_names); reverse_lists(macro_names);
reverse_lists(user_names); reverse_lists(user_names);
} }
#line 1426 "nuweb.w"
} }

605
scraps.c

File diff suppressed because it is too large Load Diff