summaryrefslogtreecommitdiff
path: root/web/spiderweb/patches
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /web/spiderweb/patches
Initial commit
Diffstat (limited to 'web/spiderweb/patches')
-rw-r--r--web/spiderweb/patches/00132
-rw-r--r--web/spiderweb/patches/00295
-rw-r--r--web/spiderweb/patches/003179
-rw-r--r--web/spiderweb/patches/00470
-rw-r--r--web/spiderweb/patches/00574
-rw-r--r--web/spiderweb/patches/00692
-rw-r--r--web/spiderweb/patches/007188
-rw-r--r--web/spiderweb/patches/00829
-rw-r--r--web/spiderweb/patches/00944
-rw-r--r--web/spiderweb/patches/01036
10 files changed, 839 insertions, 0 deletions
diff --git a/web/spiderweb/patches/001 b/web/spiderweb/patches/001
new file mode 100644
index 0000000000..02a21aedd8
--- /dev/null
+++ b/web/spiderweb/patches/001
@@ -0,0 +1,32 @@
+*** WebMakefile~ Thu Apr 6 19:53:39 1989
+--- WebMakefile Sat Apr 8 12:32:06 1989
+***************
+*** 134,139 ****
+--- 134,140 ----
+ boot:
+ cd ../master; rm -f *.o; for i in $(COMMONC); do \
+ cc $(CFLAGS) -c $$i; \
++ mv *.o $(OBDIR) ; \
+ done; cd ../c
+ cc $(CFLAGS) -c $(TANGLESRC).c; \
+ cc $(CFLAGS) -o $(DEST)/$(THETANGLE) $(COMMONOBJS) $(TANGLESRC).o
+*** spider.web~ Thu Apr 6 13:57:13 1989
+--- spider.web Sat Apr 8 12:49:58 1989
+***************
+*** 1133,1139 ****
+ if (tempfile==ttokfile) { ## output to \.{TANGLE}
+ #<If |t| is |"string"|, |"constant"|, or |"identifier"|,
+ just |continue|#> ## already defined in \.{TANGLE}
+! temp = temp + #'37 - highesttoken ## hackety hack!
+ }
+ printf "@d %s = %s\n", tokenname[t], temp > tempfile
+ }
+--- 1133,1140 ----
+ if (tempfile==ttokfile) { ## output to \.{TANGLE}
+ #<If |t| is |"string"|, |"constant"|, or |"identifier"|,
+ just |continue|#> ## already defined in \.{TANGLE}
+! temp = temp + #'37 + 3 - highesttoken ## hackety hack!
+! ## +3 because three highest are already defined!
+ }
+ printf "@d %s = %s\n", tokenname[t], temp > tempfile
+ }
diff --git a/web/spiderweb/patches/002 b/web/spiderweb/patches/002
new file mode 100644
index 0000000000..c120280709
--- /dev/null
+++ b/web/spiderweb/patches/002
@@ -0,0 +1,95 @@
+*** README.old Sat Apr 8 12:55:24 1989
+--- README Mon Apr 10 12:16:25 1989
+***************
+*** 33,38 ****
+--- 33,44 ----
+
+ 6) Go into WEBROOT and type `make boot'
+
++ Once this is successful you will have executable versions of tangle for
++ C and Awk, which is the minumum needed to make other things. After you've
++ done this, you can afford to `make clean', which will remove the .c and
++ .awk source you used to bootstrap yourself. You can always make them over
++ again using the executable versions (`make source').
++
+ 7) Move webkernel.tex into a place where TeX can find it
+
+
+*** Makefile.old Mon Apr 10 12:10:11 1989
+--- Makefile Mon Apr 10 12:14:16 1989
+***************
+*** 2,11 ****
+ # Not to be sold, but may be used freely for any purpose
+ # For more information, see file COPYRIGHT in the parent directory
+
+! # This is a SUN OS 4 Makefile. Sorry.
+
+ MAKE=make $(MFLAGS)
+ DIRECTORIES=ada awk c dijkstra larch penelope ssl doc master
+ clean:
+ @for i in $(DIRECTORIES); do \
+ cd $$i; \
+--- 2,16 ----
+ # Not to be sold, but may be used freely for any purpose
+ # For more information, see file COPYRIGHT in the parent directory
+
+! # This is a SUN OS 4 Makefile. Sorry. Makefiles in subdirectories
+! # should work under any reasonable Make.
+
+ MAKE=make $(MFLAGS)
+ DIRECTORIES=ada awk c dijkstra larch penelope ssl doc master
++
++ # Removes excess junk from the world, except it doesn't remove
++ # common object files from ./master
++ # This destroys the sources, so don't make clean until you've made boot.
+ clean:
+ @for i in $(DIRECTORIES); do \
+ cd $$i; \
+***************
+*** 16,34 ****
+ rm -f *~
+ @echo "All done."
+
+ source:
+ cd c ; $(MAKE) source ; cd ..
+ cd awk ; $(MAKE) source ; cd ..
+
+ distribution:
+ # $(MAKE) clean
+ # $(MAKE) source
+! tar cvhf spiderweb.tar README COPYRIGHT BUGS webkernel.tex Makefile $(DIRECTORIES)
+
+ boot:
+ cd c; $(MAKE) boot; cd ..
+ cd awk; $(MAKE) boot; cd ..
+
+ all:
+ @for i in $(DIRECTORIES); do \
+ cd $$i; \
+--- 21,46 ----
+ rm -f *~
+ @echo "All done."
+
++ # This creates the minimum sources in preparation for `make distribution'
+ source:
+ cd c ; $(MAKE) source ; cd ..
+ cd awk ; $(MAKE) source ; cd ..
+
++ # Put everything into a tar file. Must `make source' first, and should clean
+ distribution:
+ # $(MAKE) clean
++ cd master ; make superclean ; cd .. # remove common .o from master
+ # $(MAKE) source
+! tar cvhf spiderweb.tar README COPYRIGHT BUGS webkernel.tex \
+! Makefile $(DIRECTORIES)
+
++ # Used to bring up the system when first installing it. Requires sources,
++ # either from the distribution tarfile or from `make source'
+ boot:
+ cd c; $(MAKE) boot; cd ..
+ cd awk; $(MAKE) boot; cd ..
+
++ # Make all known webs. For lunatics only.
+ all:
+ @for i in $(DIRECTORIES); do \
+ cd $$i; \
diff --git a/web/spiderweb/patches/003 b/web/spiderweb/patches/003
new file mode 100644
index 0000000000..e5d5931076
--- /dev/null
+++ b/web/spiderweb/patches/003
@@ -0,0 +1,179 @@
+*** doc/cacm.tex.old Thu Apr 6 14:01:25 1989
+--- doc/cacm.tex Mon Apr 10 14:47:13 1989
+***************
+*** 182,188 ****
+ \put(125,30){\line(-1,-1){10}}
+ \put(115,20){\vector(-1,0){25}}
+
+! \put(104,21.5){\makebox(0,0)[b]{\scriptsize\sl CWEAVE}}
+
+ \put(60,15){\framebox(30,10){xtangle.c}}
+ \put(60,-25){\framebox(30,10){xweave.c}}
+--- 182,188 ----
+ \put(125,30){\line(-1,-1){10}}
+ \put(115,20){\vector(-1,0){25}}
+
+! \put(104,21.5){\makebox(0,0)[b]{\scriptsize\sl CTANGLE}}
+
+ \put(60,15){\framebox(30,10){xtangle.c}}
+ \put(60,-25){\framebox(30,10){xweave.c}}
+*** Makefile.old Mon Apr 10 11:14:16 1989
+--- Makefile Tue Apr 11 11:51:42 1989
+***************
+*** 29,35 ****
+ # Put everything into a tar file. Must `make source' first, and should clean
+ distribution:
+ # $(MAKE) clean
+- cd master ; make superclean ; cd .. # remove common .o from master
+ # $(MAKE) source
+ tar cvhf spiderweb.tar README COPYRIGHT BUGS webkernel.tex \
+ Makefile $(DIRECTORIES)
+--- 29,34 ----
+*** master/Makefile.old Thu Apr 6 19:37:11 1989
+--- master/Makefile Tue Apr 11 11:55:29 1989
+***************
+*** 2,12 ****
+ # Not to be sold, but may be used freely for any purpose
+ # For more information, see file COPYRIGHT in the parent directory
+
+ clean:
+ -rm -f *.tex *.dvi *.log *.wlog *~ *.toc
+
+ superclean:
+! -rm -f *.c *.o
+ -rm -f *.tex *.dvi *.log *~ *.toc
+- -rm -f sun3/*.o vax/*.o
+
+--- 2,18 ----
+ # Not to be sold, but may be used freely for any purpose
+ # For more information, see file COPYRIGHT in the parent directory
+
++ OBJECTDIRS=sun3 vax
++
+ clean:
+ -rm -f *.tex *.dvi *.log *.wlog *~ *.toc
++ @-for i in $(OBJECTDIRS); do \
++ rm -f $$i/*.o; \
++ done
++ -rm -f *.o
+
+ superclean:
+! -rm -f sun3/*.o vax/*.o *.o
+! -rm -f *.c
+ -rm -f *.tex *.dvi *.log *~ *.toc
+
+*** master/spider.web.old Tue Apr 11 13:19:58 1989
+--- master/spider.web Tue Apr 11 14:02:06 1989
+***************
+*** 1939,1945 ****
+ if (n%5==0)
+ print "@ @<Test for all of the productions@>=" \
+ > grammarfile ## avoids overflowing \.{WEAVE} of \.{WEAVE}
+! #<Remove \vert\ from |inputline[n]| and put results in |this_string|#>
+ #<Make |this_string| no more than 60 characters wide#>
+ printf "if (%s) {\n\t/* %d: {\\tt %s} */\n%s",\
+ prodtest[n],n,this_string,prodtrans[n] > grammarfile
+--- 1939,1945 ----
+ if (n%5==0)
+ print "@ @<Test for all of the productions@>=" \
+ > grammarfile ## avoids overflowing \.{WEAVE} of \.{WEAVE}
+! #<Change \vert,\_, and {\tt \##} in |inputline[n]|; put results in |this_string|#>
+ #<Make |this_string| no more than 60 characters wide#>
+ printf "if (%s) {\n\t/* %d: {\\tt %s} */\n%s",\
+ prodtest[n],n,this_string,prodtrans[n] > grammarfile
+***************
+*** 1991,2005 ****
+ # It's desirable to put the production in a comment, but we have to
+ get rid of the confusing \vert, or \.{WEAVE} will think it introduces
+ code.
+! #<Remove \vert\ from |inputline[n]| and put results in |this_string|#>=
+! this_string = inputline[n]
+ tempi = index(this_string,"|")
+! while (tempi != 0) {
+! tempa = substr(this_string,1,tempi-1)
+! tempb = substr(this_string,tempi+1)
+! this_string = tempa "\\vert " tempb
+! tempi = index(this_string,"|")
+! }
+
+
+ # We have to keep these productions from making an input line too long.
+--- 1991,2025 ----
+ # It's desirable to put the production in a comment, but we have to
+ get rid of the confusing \vert, or \.{WEAVE} will think it introduces
+ code.
+! We also have to escape underscores and sharp signs, otherwise \TeX\ will
+! think we want math mode.
+! #<Change \vert,\_, and {\tt \##} in |inputline[n]|; put results in |this_string|#>=
+! this_string = inputline[n]
+! tempi = index(this_string,"|")
+! while (tempi != 0) {
+! tempa = substr(this_string,1,tempi-1)
+! tempb = substr(this_string,tempi+1)
+! this_string = tempa "\\vert " tempb
+ tempi = index(this_string,"|")
+! }
+! templ = ""; tempr = this_string
+! tempi = index(tempr,"_")
+! while (tempi != 0) {
+! tempa = substr(tempr,1,tempi-1)
+! tempr = substr(tempr,tempi+1)
+! templ = templ tempa "\\_"
+! tempi = index(tempr,"_")
+! }
+! this_string = templ tempr
+! templ = ""; tempr = this_string
+! tempi = index(tempr,"##")
+! while (tempi != 0) {
+! tempa = substr(tempr,1,tempi-1)
+! tempr = substr(tempr,tempi+1)
+! templ = templ tempa "\\##"
+! tempi = index(tempr,"##")
+! }
+! this_string = templ tempr
+
+
+ # We have to keep these productions from making an input line too long.
+*** doc/spiderwebman.tex.old Thu Apr 6 14:01:32 1989
+--- doc/spiderwebman.tex Tue Apr 11 14:24:39 1989
+***************
+*** 579,599 ****
+ can define two kinds of macros to make the programs shorter and more
+ readable.
+
+! \yskip\hang`\.{@d} \\{identifier} \PASCAL\ text' defines a {\sl
+ simple\/} macro, where the identifier will be replaced by the \PASCAL\ text
+ when \.{TANGLE} produces its output.
+
+! \yskip\hang`\.{@d} \\{identifier}\.{(\\{ actual identifiers})} \PASCAL\ text' defines a
+ {\sl parametric\/} macro, where the identifier will be replaced by the \PASCAL\
+ text and where occurrences of the \\{identifiers} in that \PASCAL\ text will be
+ replaced by arguments.
+
+! C programmers will recognize the C macro processor.
+! The implementation relies on the C preprocessor to expand the macros.
+! The author of \.{Spider} \.{WEB} intends to correct this unfortunate
+! historical accident at the earliest opportunity, by restoring
+! \.{WEB}'s built-in macro processor.
+!
+
+
+
+--- 579,595 ----
+ can define two kinds of macros to make the programs shorter and more
+ readable.
+
+! \yskip\hang`\.{@d} \\{identifier} = \PASCAL\ text' defines a {\sl
+ simple\/} macro, where the identifier will be replaced by the \PASCAL\ text
+ when \.{TANGLE} produces its output.
+
+! \yskip\hang`\.{@d} \\{identifier}\.{(\\{ actual identifiers})} = \PASCAL\ text' defines a
+ {\sl parametric\/} macro, where the identifier will be replaced by the \PASCAL\
+ text and where occurrences of the \\{identifiers} in that \PASCAL\ text will be
+ replaced by arguments.
+
+! For C programmers, this is similar to the C macro processor.
+! \endnewstuff
+
+
+
diff --git a/web/spiderweb/patches/004 b/web/spiderweb/patches/004
new file mode 100644
index 0000000000..72dee88b34
--- /dev/null
+++ b/web/spiderweb/patches/004
@@ -0,0 +1,70 @@
+*** master/weave.web.old Fri Apr 14 12:31:34 1989
+--- master/weave.web Fri Apr 14 12:33:28 1989
+***************
+*** 353,359 ****
+
+ @d ignore = 0 /* control code of no interest to \.{CWEAVE} */
+ @d verbatim = @'2 /* extended ASCII alpha will not appear */
+! @d tangle_force_line = @'3 /* extended ASCII beta will not appear */
+ @d begin_comment = @'10 /* ASCII tab mark will not appear */
+ @d octal = @'14 /* ASCII carriage return will not appear */
+ @d hex = @'15 /* ASCII form feed will not appear */
+--- 353,359 ----
+
+ @d ignore = 0 /* control code of no interest to \.{CWEAVE} */
+ @d verbatim = @'2 /* extended ASCII alpha will not appear */
+! /* extended ASCII beta will not appear */
+ @d begin_comment = @'10 /* ASCII tab mark will not appear */
+ @d octal = @'14 /* ASCII carriage return will not appear */
+ @d hex = @'15 /* ASCII form feed will not appear */
+***************
+*** 395,401 ****
+ ccode['-']=line_break;
+ ccode['#']=big_line_break;
+ ccode['=']=verbatim;
+- ccode['\\']=tangle_force_line;
+ ccode['d']=ccode['D']=definition;
+ ccode['f']=ccode['F']=format;
+ ccode['c']=ccode['C']=begin_unnamed;
+--- 395,400 ----
+***************
+*** 2026,2032 ****
+ break;
+ case xref_roman: case xref_wildcard: case xref_typewriter:
+ break;
+- case tangle_force_line: app_str("\\]"); app_scrap(SP_ignore_scrap,yes_math); break;
+ case thin_space: app_str("\\,"); app_scrap(SP_ignore_scrap,yes_math); break;
+ case math_break:
+ small_app(opt); app_str("0"); app_scrap(SP_ignore_scrap,yes_math); break;
+--- 2025,2030 ----
+*** doc/spiderwebman.tex.old Fri Apr 14 12:32:11 1989
+--- doc/spiderwebman.tex Fri Apr 14 12:39:57 1989
+***************
+*** 952,958 ****
+ \@= [\PAS] The ``control text'' that follows, up to the next `\.{@>}', will
+ be passed verbatim to the \PASCAL\ program.
+
+! \@\\ [\PAS] Force end-of-line here in the \PASCAL\ program file.
+
+ \@! [\PAS,T] The module number in an index entry will be underlined if `\.{@!}'
+ immediately precedes the identifier or control text being indexed.
+--- 952,958 ----
+ \@= [\PAS] The ``control text'' that follows, up to the next `\.{@>}', will
+ be passed verbatim to the \PASCAL\ program.
+
+! %%% \@\\ [\PAS] Force end-of-line here in the \PASCAL\ program file.
+
+ \@! [\PAS,T] The module number in an index entry will be underlined if `\.{@!}'
+ immediately precedes the identifier or control text being indexed.
+***************
+*** 982,987 ****
+--- 982,990 ----
+ \@?
+ [\PAS,T] This cancels an implicit (or explicit) `\.{@!}', so that the next
+ index entry will not be underlined.
++
++ \newstuff This is not implemented in the current version of Spidery \.{WEB}.
++ \endnewstuff
+
+ \@, [\PAS] This control code inserts a thin space in \.{WEAVE}'s output; it is
+ ignored by \.{TANGLE}.
diff --git a/web/spiderweb/patches/005 b/web/spiderweb/patches/005
new file mode 100644
index 0000000000..52f9a47999
--- /dev/null
+++ b/web/spiderweb/patches/005
@@ -0,0 +1,74 @@
+*** master/spider.web~ Tue Apr 11 14:02:06 1989
+--- master/spider.web Mon Jul 3 12:46:05 1989
+***************
+*** 772,778 ****
+ } else if (length($2)>1) {
+ #<Handle multicharacter tokens#>
+ } else {
+! temp = sprintf "'%s'", $2
+ tokenname[$2] = temp
+ tokenlength[$2]=1
+ }
+--- 772,778 ----
+ } else if (length($2)>1) {
+ #<Handle multicharacter tokens#>
+ } else {
+! temp = sprintf("'%s'", $2)
+ tokenname[$2] = temp
+ tokenlength[$2]=1
+ }
+***************
+*** 791,797 ****
+ tokennumbers[$2]=tokennumber
+ tokennumber--
+ ## figure out how to recognize the token
+! temp = sprintf "strncmp(\"%s\",loc-1,%d)==0", $2, length($2)
+ tokentest[$2]=temp
+ tokenlength[$2]=length($2)
+
+--- 791,797 ----
+ tokennumbers[$2]=tokennumber
+ tokennumber--
+ ## figure out how to recognize the token
+! temp = sprintf( "strncmp(\"%s\",loc-1,%d)==0", $2, length($2))
+ tokentest[$2]=temp
+ tokenlength[$2]=length($2)
+
+***************
+*** 1738,1744 ****
+ $i = substr($i,2) ## peel off the \##
+ #<Make sure |1 <= $i < arrowpos|#>
+ targetcategory[prodnum]="Unnamed category"
+! temp = sprintf "(pp+%d)->cat", $i-1
+ unnamed_cat[prodnum]=temp
+ } else if ($i ~ #=/[a-z][a-z_]*/#>) { ## a category
+ targetcategory[prodnum]=$i
+--- 1738,1744 ----
+ $i = substr($i,2) ## peel off the \##
+ #<Make sure |1 <= $i < arrowpos|#>
+ targetcategory[prodnum]="Unnamed category"
+! temp = sprintf("(pp+%d)->cat", $i-1)
+ unnamed_cat[prodnum]=temp
+ } else if ($i ~ #=/[a-z][a-z_]*/#>) { ## a category
+ targetcategory[prodnum]=$i
+*** webkernel.tex.old Mon Jun 26 12:32:33 1989
+--- webkernel.tex Mon Jun 26 12:35:38 1989
+***************
+*** 218,224 ****
+ \global\output{\normaloutput\page\lheader\rheader\lfooter\rfooter}}
+ \setpage
+ \vbox to \vsize{} % the first \topmark won't be null
+! \eject
+ \write\cont{\string\catcode`\string\@=11}% a hack to make contents
+ % take stuff in \.{---}
+
+--- 218,226 ----
+ \global\output{\normaloutput\page\lheader\rheader\lfooter\rfooter}}
+ \setpage
+ \vbox to \vsize{} % the first \topmark won't be null
+! % Delete as per bug report from kademan@stat.wisc.edu
+! % Causes headings on first page to be missing
+! % \eject
+ \write\cont{\string\catcode`\string\@=11}% a hack to make contents
+ % take stuff in \.{---}
+
diff --git a/web/spiderweb/patches/006 b/web/spiderweb/patches/006
new file mode 100644
index 0000000000..361103571a
--- /dev/null
+++ b/web/spiderweb/patches/006
@@ -0,0 +1,92 @@
+*** master/spider.web.old Mon Jul 3 12:46:05 1989
+--- master/spider.web Thu Jul 20 19:00:04 1989
+***************
+*** 1532,1537 ****
+--- 1532,1541 ----
+ each scrap is true, the whole production will fire.
+ If we're called upon to make a scrap underlined or reserved, we'll add
+ to |trans[pos]|.
++
++ If a category is negated we add an extra clause to make
++ sure nothing matches the zero category, since {\tt WEAVE} assumes
++ no production ever matches a scrap with category zero.
+ #<Process a single category#>=
+ field[pos]=$i ## save this field to compare RHS
+ #<Set |negation|, and remove leading |"!"| from |$i| if necessary#>
+***************
+*** 1540,1548 ****
+ cat = $i
+ categories[cat]=1 ## remember |cat| is a category
+ if (negation==0) {
+! test[pos]=sprintf("(pp+%d)->cat==SP_%s",pos-1,cat)
+ } else {
+! test[pos]=sprintf("(pp+%d)->cat!=SP_%s",pos-1,cat)
+ }
+ #<Update the record of the rightmost occurrence of category |cat|#>
+ #<Advance |pos|, making the new |trans[pos]| empty#>
+--- 1544,1553 ----
+ cat = $i
+ categories[cat]=1 ## remember |cat| is a category
+ if (negation==0) {
+! test[pos]=sprintf("(pp+%d)->cat==SP_%s",pos-1,cat)
+ } else {
+! test[pos]=sprintf("((pp+%d)->cat!=SP_%s && (pp+%d)->cat != 0)",\
+! pos-1,cat,pos-1)
+ }
+ #<Update the record of the rightmost occurrence of category |cat|#>
+ #<Advance |pos|, making the new |trans[pos]| empty#>
+***************
+*** 1551,1556 ****
+--- 1556,1565 ----
+ categories are separated by vertical bars.
+ We have to make the test for these things a disjunction, but
+ processing is more or less like the processing for a single category.
++
++ If a list of alternatives is negated we add an extra clause to make
++ sure nothing matches the zero category, since {\tt WEAVE} assumes
++ no production ever matches a scrap with category zero.
+ #<Process a list of alternative categories#>=
+ field[pos]=$i ## save this field to compare RHS
+ #<Set |negation|, and remove leading |"!"| from |$i| if necessary#>
+***************
+*** 1557,1563 ****
+ if (negation==0) {
+ test[pos]="(" ## open for a list of good alternatives
+ } else {
+! test[pos]="!(" ## open for a list of bad alternatives
+ }
+ #<Strip stars from |$i| (if any) and add appropriate
+ translations to |trans[pos]|#>
+--- 1566,1573 ----
+ if (negation==0) {
+ test[pos]="(" ## open for a list of good alternatives
+ } else {
+! temp=sprintf("(pp+%d)->cat==0",pos-1)
+! test[pos]="!(" temp "||" ## open for a list of bad alternatives
+ }
+ #<Strip stars from |$i| (if any) and add appropriate
+ translations to |trans[pos]|#>
+***************
+*** 1635,1644 ****
+ #<Forget this production#>
+ }
+
+! # Wild cards are easy to process
+ #<Process a category wild card#>=
+ field[pos]=$i ## save this field to compare RHS
+! test[pos]="(1)" ## anything matches
+ highwildcard=pos ## we don't really need this?
+ #<Advance |pos|, making the new |trans[pos]| empty#>
+
+--- 1645,1655 ----
+ #<Forget this production#>
+ }
+
+! # Wild cards are easy to process, but we do have to remember that
+! not even a wild card matches a scrap of category zero.
+ #<Process a category wild card#>=
+ field[pos]=$i ## save this field to compare RHS
+! test[pos]=sprintf("(pp+%d)->cat!=0",pos-1) ## anything nonzero matches
+ highwildcard=pos ## we don't really need this?
+ #<Advance |pos|, making the new |trans[pos]| empty#>
+
diff --git a/web/spiderweb/patches/007 b/web/spiderweb/patches/007
new file mode 100644
index 0000000000..0dc52bbdad
--- /dev/null
+++ b/web/spiderweb/patches/007
@@ -0,0 +1,188 @@
+*** master/spider.web.old Wed Aug 23 14:08:45 1989
+--- master/spider.web Wed Aug 23 14:03:12 1989
+***************
+*** 314,322 ****
+
+ # If the macro facility worked right,
+ we would use the following patterns to recognize items as they occur:
+! #d cat_pattern = #=/[a-z][a-z_]*/#>
+! #d trans_pattern = #=/<(([0-9]|[a-z][a-z_]*|"([^"]*\\")*[^"]*"|\*)-)*#>#&
+! #=([0-9]|[a-z][a-z_]*|"([^"]*\\")*[^"]*"|\*)>/#>
+
+ # Here's where we swallow a translation and spit out the \.{WEAVE} code
+ to handle that translation.
+--- 314,322 ----
+
+ # If the macro facility worked right,
+ we would use the following patterns to recognize items as they occur:
+! #d cat_pattern = #=/[a-zA-Z][a-zA-Z_]*/#>
+! #d trans_pattern = #=/<(([0-9]|[a-zA-Z][a-zA-Z_]*|"([^"]*\\")*[^"]*"|\*)-)*#>#&
+! #=([0-9]|[a-zA-Z][a-zA-Z_]*|"([^"]*\\")*[^"]*"|\*)>/#>
+
+ # Here's where we swallow a translation and spit out the \.{WEAVE} code
+ to handle that translation.
+***************
+*** 341,347 ****
+ if (alternate ~ #=/^[0-9]$/#>) { ## digit
+ temp = sprintf("\tapp_str(\"%s\");\n",alternate)
+ outstring=outstring temp
+! } else if (alternate ~ #=/^[a-z_]+$/#>) { ## key word
+ translation_keywords[alternate]=1 ## remember
+ temp = sprintf("\t%s(%s);\n",append_keyword,alternate)
+ ##Call |app| or |small_app| depending whether we're reducing or creating scraps
+--- 341,347 ----
+ if (alternate ~ #=/^[0-9]$/#>) { ## digit
+ temp = sprintf("\tapp_str(\"%s\");\n",alternate)
+ outstring=outstring temp
+! } else if (alternate ~ #=/^[a-zA-Z_]+$/#>) { ## key word
+ translation_keywords[alternate]=1 ## remember
+ temp = sprintf("\t%s(%s);\n",append_keyword,alternate)
+ ##Call |app| or |small_app| depending whether we're reducing or creating scraps
+***************
+*** 394,400 ****
+ if (alternate ~ #=/^[0-9]$/#>) { ## digit
+ print "Digit not allowed in restricted translation", wherestring
+ exitcode = -1
+! } else if (alternate ~ #=/^[a-z_]+$/#>) { ## key word
+ print "Key word not allowed in restricted translation", wherestring
+ exitcode = -1
+ } else if (alternate ~ #=/^\"([^"]*\\\")*[^"]*\"$/#>) { ## string
+--- 394,400 ----
+ if (alternate ~ #=/^[0-9]$/#>) { ## digit
+ print "Digit not allowed in restricted translation", wherestring
+ exitcode = -1
+! } else if (alternate ~ #=/^[a-zA-Z_]+$/#>) { ## key word
+ print "Key word not allowed in restricted translation", wherestring
+ exitcode = -1
+ } else if (alternate ~ #=/^\"([^"]*\\\")*[^"]*\"$/#>) { ## string
+***************
+*** 576,582 ****
+ #<Process newline token description#>
+ } else if ($2=="pseudo_semi") {
+ #<Process |pseudo_semi| token description#>
+! } else if ($2 ~ #=/[a-zA-Z0-9]+/#>) {
+ ## we recognize no other names
+ print "Error: unknown token species:", $2
+ #<Punt this command#>
+--- 576,582 ----
+ #<Process newline token description#>
+ } else if ($2=="pseudo_semi") {
+ #<Process |pseudo_semi| token description#>
+! } else if ($2 ~ #=/[a-zA-ZA-Z0-9]+/#>) {
+ ## we recognize no other names
+ print "Error: unknown token species:", $2
+ #<Punt this command#>
+***************
+*** 1200,1206 ****
+ that an item of ilk |fish_like| will get category |fish|.
+
+ #<If no category is specified, invent a default if you can#>=
+! if ($2 ~ #=/^[a-z_]+_like$/#> && $0 !~ #=/ category /#>) {
+ ## give default category
+ this_category = substr($2,1,length($2)-5)
+ categories[this_category]=1
+--- 1200,1206 ----
+ that an item of ilk |fish_like| will get category |fish|.
+
+ #<If no category is specified, invent a default if you can#>=
+! if ($2 ~ #=/^[a-zA-Z_]+_like$/#> && $0 !~ #=/ category /#>) {
+ ## give default category
+ this_category = substr($2,1,length($2)-5)
+ categories[this_category]=1
+***************
+*** 1490,1498 ****
+ for (i=1; i<=NF; i++) {
+ if ($i ~ #=/<.*>/#>) { ## should be |trans_pattern|
+ #<Process a translation in |$i|#>
+! } else if ($i ~ #=/^!?[a-z_]+(\*\*?)?$/#>) { ## |cat_pattern|
+ #<Process a single category#>
+! } else if ($i ~ #=/^!?\(([a-z_]+\|)*[a-z_]+\)(\*\*?)?$/#>){
+ #<Process a list of alternative categories#>
+ } else if ($i == "?") {
+ #<Process a category wild card#>
+--- 1490,1498 ----
+ for (i=1; i<=NF; i++) {
+ if ($i ~ #=/<.*>/#>) { ## should be |trans_pattern|
+ #<Process a translation in |$i|#>
+! } else if ($i ~ #=/^!?[a-zA-Z_]+(\*\*?)?$/#>) { ## |cat_pattern|
+ #<Process a single category#>
+! } else if ($i ~ #=/^!?\(([a-zA-Z_]+\|)*[a-zA-Z_]+\)(\*\*?)?$/#>){
+ #<Process a list of alternative categories#>
+ } else if ($i == "?") {
+ #<Process a category wild card#>
+***************
+*** 1632,1642 ****
+
+ #<Strip stars from |$i| (if any) and add appropriate
+ translations to |trans[pos]|#>=
+! if ($i ~ #=/^([a-z_]+|\(([a-z_]+\|)*[a-z_]+\))\*\*$/#>) { ## it's double-starred
+ temp = sprintf("\tmake_underlined(pp+%d);\n",pos-1)
+ trans[pos] = trans[pos] temp
+ $i = substr($i,1,length($i)-2)
+! } else if ($i ~ #=/^([a-z_]+|\(([a-z_]+\|)*[a-z_]+\))\*$/#>) { ## it's starred
+ temp = sprintf("\tmake_underlined(pp+%d);\n",pos-1)
+ trans[pos] = trans[pos] temp
+ $i = substr($i,1,length($i)-1)
+--- 1632,1642 ----
+
+ #<Strip stars from |$i| (if any) and add appropriate
+ translations to |trans[pos]|#>=
+! if ($i ~ #=/^([a-zA-Z_]+|\(([a-zA-Z_]+\|)*[a-zA-Z_]+\))\*\*$/#>) { ## it's double-starred
+ temp = sprintf("\tmake_underlined(pp+%d);\n",pos-1)
+ trans[pos] = trans[pos] temp
+ $i = substr($i,1,length($i)-2)
+! } else if ($i ~ #=/^([a-zA-Z_]+|\(([a-zA-Z_]+\|)*[a-zA-Z_]+\))\*$/#>) { ## it's starred
+ temp = sprintf("\tmake_underlined(pp+%d);\n",pos-1)
+ trans[pos] = trans[pos] temp
+ $i = substr($i,1,length($i)-1)
+***************
+*** 1751,1757 ****
+ targetcategory[prodnum]="Unnamed category"
+ temp = sprintf("(pp+%d)->cat", $i-1)
+ unnamed_cat[prodnum]=temp
+! } else if ($i ~ #=/[a-z][a-z_]*/#>) { ## a category
+ targetcategory[prodnum]=$i
+ categories[$i]=1 ## remember this is a category
+ } else {
+--- 1751,1757 ----
+ targetcategory[prodnum]="Unnamed category"
+ temp = sprintf("(pp+%d)->cat", $i-1)
+ unnamed_cat[prodnum]=temp
+! } else if ($i ~ #=/[a-zA-Z][a-zA-Z_]*/#>) { ## a category
+ targetcategory[prodnum]=$i
+ categories[$i]=1 ## remember this is a category
+ } else {
+***************
+*** 1827,1833 ****
+ temp = field[pos]
+ tempa = substr(temp,1,1)
+ if (tempa != "!") {
+! if (temp ~ #=/^\(([a-z_]+\|)*[a-z_]+\)(\*\*?)?$/#>) {
+ ## list of alternatives
+ #<Remove trailing stars from |temp|#>
+ temp = substr(temp,2,length(temp)-2)
+--- 1827,1833 ----
+ temp = field[pos]
+ tempa = substr(temp,1,1)
+ if (tempa != "!") {
+! if (temp ~ #=/^\(([a-zA-Z_]+\|)*[a-zA-Z_]+\)(\*\*?)?$/#>) {
+ ## list of alternatives
+ #<Remove trailing stars from |temp|#>
+ temp = substr(temp,2,length(temp)-2)
+***************
+*** 1836,1842 ****
+ alternate = tok[j]
+ reduced[alternate]=1
+ }
+! } else if (temp ~ #=/^[a-z_]+(\*\*?)?$/#>) {
+ #<Remove trailing stars from |temp|#>
+ reduced[temp]=1
+ } else if (temp != "?") {
+--- 1836,1842 ----
+ alternate = tok[j]
+ reduced[alternate]=1
+ }
+! } else if (temp ~ #=/^[a-zA-Z_]+(\*\*?)?$/#>) {
+ #<Remove trailing stars from |temp|#>
+ reduced[temp]=1
+ } else if (temp != "?") {
diff --git a/web/spiderweb/patches/008 b/web/spiderweb/patches/008
new file mode 100644
index 0000000000..d0e0615e3a
--- /dev/null
+++ b/web/spiderweb/patches/008
@@ -0,0 +1,29 @@
+*** c/c.spider.old Wed Nov 29 22:48:59 1989
+--- c/c.spider Wed Nov 29 21:55:48 1989
+***************
+*** 18,28 ****
+
+ token + category unorbinop
+ token - category unorbinop
+! token * category unorbinop translation <"{*}">
+ token / category dot
+ token < category less translation <>
+ token > category greater translation <>
+ token = category equals translation <"\\leftarrow"> tangleto <"="-space>
+ token . category dot
+ token ~ category unop translation <"\\TI">
+ token & category unorbinop translation <"\\amp">
+--- 18,30 ----
+
+ token + category unorbinop
+ token - category unorbinop
+! token * category unorbinop translation <"{*}"> tangleto <space-"*">
+! # avoid inadvertant /*
+ token / category dot
+ token < category less translation <>
+ token > category greater translation <>
+ token = category equals translation <"\\leftarrow"> tangleto <"="-space>
++ # avoid inadvertant =-
+ token . category dot
+ token ~ category unop translation <"\\TI">
+ token & category unorbinop translation <"\\amp">
diff --git a/web/spiderweb/patches/009 b/web/spiderweb/patches/009
new file mode 100644
index 0000000000..ce36467111
--- /dev/null
+++ b/web/spiderweb/patches/009
@@ -0,0 +1,44 @@
+*** master/WebMakefile.old Mon Jan 22 13:26:49 1990
+--- master/WebMakefile Mon Jan 22 13:32:40 1990
+***************
+*** 70,76 ****
+ $(MASTER)/common.c: $(MASTER)/common.web # no change file
+ $(CTANGLE) $(MASTER)/common
+
+! $(OBDIR)/common.o: $(MASTER)/common.c
+ $(CC) $(CFLAGS) -c $(MASTER)/common.c
+ mv common.o $(OBDIR)
+
+--- 70,76 ----
+ $(MASTER)/common.c: $(MASTER)/common.web # no change file
+ $(CTANGLE) $(MASTER)/common
+
+! $(OBDIR)/common.o: $(MASTER)/common.c $(OBDIR)
+ $(CC) $(CFLAGS) -c $(MASTER)/common.c
+ mv common.o $(OBDIR)
+
+***************
+*** 79,88 ****
+ $(CTANGLE) $(MASTER)/pathopen
+ mv pathopen.h $(MASTER)
+
+! $(OBDIR)/pathopen.o: $(MASTER)/pathopen.c
+ $(CC) $(CFLAGS) -c $(MASTER)/pathopen.c
+ mv pathopen.o $(OBDIR)
+
+
+ ## Now we make the tangle and weave source locally
+
+--- 79,90 ----
+ $(CTANGLE) $(MASTER)/pathopen
+ mv pathopen.h $(MASTER)
+
+! $(OBDIR)/pathopen.o: $(MASTER)/pathopen.c $(OBDIR)
+ $(CC) $(CFLAGS) -c $(MASTER)/pathopen.c
+ mv pathopen.o $(OBDIR)
+
++ $(OBDIR):
++ if /bin/test ! -d $(OBDIR) ; then mkdir $(OBDIR) ; fi
+
+ ## Now we make the tangle and weave source locally
+
diff --git a/web/spiderweb/patches/010 b/web/spiderweb/patches/010
new file mode 100644
index 0000000000..fca8083e4c
--- /dev/null
+++ b/web/spiderweb/patches/010
@@ -0,0 +1,36 @@
+*** master/weave.web.old Thu Feb 8 12:55:12 1990
+--- master/weave.web Thu Feb 8 12:55:50 1990
+***************
+*** 254,260 ****
+ (mod_xref_switch==file_flag && q->num < file_flag)) {
+ printf("\n! You can't use <"); print_id(p);
+ printf("> both as a file and as a named module"); mark_harmless;
+! @.{You can't use <section name> both as a file...@>
+
+ }
+ }
+--- 254,260 ----
+ (mod_xref_switch==file_flag && q->num < file_flag)) {
+ printf("\n! You can't use <"); print_id(p);
+ printf("> both as a file and as a named module"); mark_harmless;
+! @.You can't use <section name> both as a file...@>
+
+ }
+ }
+***************
+*** 968,974 ****
+ if ((cur_xref->num)/def_flag != level) {
+ printf("\n! You can't use <"); print_id(p);
+ printf("> both as a file and as a named module"); mark_harmless;
+! @.{You can't use <section name> both as a file...@>
+ }
+ cur_xref=cur_xref->xlink;
+ }
+--- 968,974 ----
+ if ((cur_xref->num)/def_flag != level) {
+ printf("\n! You can't use <"); print_id(p);
+ printf("> both as a file and as a named module"); mark_harmless;
+! @.You can't use <section name> both as a file...@>
+ }
+ cur_xref=cur_xref->xlink;
+ }