|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T g
Length: 36080 (0x8cf0)
Types: TextFile
Names: »gawk-2.11.0-2.11.1-diff«
└─⟦a05ed705a⟧ Bits:30007078 DKUUG GNU 2/12/89
└─⟦this⟧ »./gawk-2.11.0-2.11.1-diff«
This is an official patch to gawk 2.11, please apply it. Changes to
dvi, postscript, and *-info files are omitted.
FIRST: remove pc.d/makefile.pc and pc.d/names.lnk. This patch creates
a new file pc.d/Makefile.pc. In turn, the new makefile automatically
builds names.lnk.
Apply with patch -p to make sure files in subdirectories are correctly
patched.
With this patch, gawk moves from "beta" to production status.
-------------------------------------------------
diff -cr patch.0/CHANGES ./CHANGES
*** patch.0/CHANGES Wed Oct 18 11:02:23 1989
--- ./CHANGES Fri Nov 10 11:46:20 1989
***************
*** 1,3 ****
--- 1,23 ----
+ Changes from 2.11beta to 2.11.1 (production)
+ --------------------------------------------
+
+ Went from "beta" to production status!!!
+
+ Now flushes stdout before closing pipes or redirected files to
+ synchonize output.
+
+ MS-DOS changes added in.
+
+ Signal handler return type parameterized in Makefile and awk.h and
+ some lint removed. debug.c cleaned up.
+
+ Fixed FS splitting to never match null strings, per book.
+
+ Correction to the manual's description of FS.
+
+ Some compilers break on char *foo = "string" + 4 so fixed version.sh and
+ main.c.
+
Changes from 2.10beta to 2.11beta
---------------------------------
diff -cr patch.0/Makefile ./Makefile
*** patch.0/Makefile Tue Oct 24 16:37:47 1989
--- ./Makefile Tue Nov 7 10:18:27 1989
***************
*** 55,60 ****
--- 55,61 ----
# -DSTRTOD_MISSING - lacks strtod() routine
# -DTMPNAM_MISSING - lacks or deficient tmpnam() routine
# -DVPRINTF_MISSING - lacks vprintf and associated routines
+ # -DSIGTYPE=int - signal routines return int (default void)
# Sun running SunOS 4.x
MISSING = -DSTRERROR_MISSING -DSTRCASE_MISSING
***************
*** 71,77 ****
# MISSING = -DBSDSTDIO -DMEMCMP_MISSING -DMEMCPY_MISSING -DMEMSET_MISSING \
# -DSTRERROR_MISSING -DSTRTOD_MISSING -DVPRINTF_MISSING \
# -DSTRCASE_MISSING -DTMPNAM_MISSING \
! # -DGETOPT_MISSING -DSTRCHR_MISSING
# On Amdahl UTS, a SysVr2-derived system
# MISSING = -DBCOPY_MISSING -DSPRINTF_INT -DRANDOM_MISSING -DSTRERROR_MISSING \
--- 72,78 ----
# MISSING = -DBSDSTDIO -DMEMCMP_MISSING -DMEMCPY_MISSING -DMEMSET_MISSING \
# -DSTRERROR_MISSING -DSTRTOD_MISSING -DVPRINTF_MISSING \
# -DSTRCASE_MISSING -DTMPNAM_MISSING \
! # -DGETOPT_MISSING -DSTRCHR_MISSING -DSIGTYPE=int
# On Amdahl UTS, a SysVr2-derived system
# MISSING = -DBCOPY_MISSING -DSPRINTF_INT -DRANDOM_MISSING -DSTRERROR_MISSING \
***************
*** 81,87 ****
# Also choose just one of -g and -O.
CC= gcc
! OPTIMIZE= -O
PROFILE= #-pg
DEBUG= #-DDEBUG #-DMEMDEBUG #-DFUNC_TRACE #-DMPROF
DEBUGGER= #-g -Bstatic
--- 82,88 ----
# Also choose just one of -g and -O.
CC= gcc
! OPTIMIZE= -O -g
PROFILE= #-pg
DEBUG= #-DDEBUG #-DMEMDEBUG #-DFUNC_TRACE #-DMPROF
DEBUGGER= #-g -Bstatic
***************
*** 142,148 ****
MISC = CHANGES COPYING FUTURES Makefile PROBLEMS README
! PCSTUFF= pc.d/makefile.pc pc.d/names.lnk pc.d/popen.c pc.d/popen.h
ALLDOC= gawk.dvi $(INFOFILES)
--- 143,149 ----
MISC = CHANGES COPYING FUTURES Makefile PROBLEMS README
! PCSTUFF= pc.d/Makefile.pc pc.d/popen.c pc.d/popen.h
ALLDOC= gawk.dvi $(INFOFILES)
diff -cr patch.0/README ./README
*** patch.0/README Thu Oct 12 16:59:53 1989
--- ./README Fri Nov 10 11:47:27 1989
***************
*** 1,6 ****
README:
! This is GNU Awk 2.11 Beta. It should be upwardly compatible with the
System V Release 4 awk.
This release is essentially a bug fix release. The files have been
--- 1,6 ----
README:
! This is GNU Awk 2.11. It should be upwardly compatible with the
System V Release 4 awk.
This release is essentially a bug fix release. The files have been
***************
*** 19,25 ****
User visible changes:
Compatibility mode is now obtained via new -c option.
! The new ANSI \a and \x escapes are now a standard part of gawk
as Unix nawk has picked them up.
The new tolower() and toupper() functions are also standard.
A new undocumented option, -nostalgia, has been added.
--- 19,25 ----
User visible changes:
Compatibility mode is now obtained via new -c option.
! The new ANSI C \a and \x escapes are now a standard part of gawk
as Unix nawk has picked them up.
The new tolower() and toupper() functions are also standard.
A new undocumented option, -nostalgia, has been added.
***************
*** 37,48 ****
Still more memory leaks plugged.
Lots of changes to improve performance and portability.
! PC users take note! PC support is not provided in this release as we
! could not get anyone to do it; the person who did it for 2.10 lost
! his network connectivity. It may be provided later either by
! us or by him. The stuff in pc.d is from 2.10; anyone who cares
! to make it work for 2.11 under MS-DOS is welcome to do so and
! to feed the changes back to us.
INSTALLATION:
--- 37,46 ----
Still more memory leaks plugged.
Lots of changes to improve performance and portability.
! PC users, you've been saved!
! As of patchlevel 1, we are now supplying MS-DOS "support." Said
! support was generously provided by Kent Williams, who is now
! the contact person for it. See below for his address.
INSTALLATION:
***************
*** 65,71 ****
want to get a copy of bison from the FSF too.)
If you have an MS-DOS system, use the stuff in pc.d.
- (But see the note above.)
PRINTING THE MANUAL
--- 63,68 ----
***************
*** 92,103 ****
INTERNET david@cs.dal.ca
Arnold Robbins
! Emory University Computing Center
! Emory University, Atlanta, GA, 30322, USA
! INTERNET: arnold@emoryu1.cc.emory.edu
! UUCP: { gatech, mtxinu }!emoryu1!arnold
! BITNET: arnold@emoryu1
If you can't contact either of us, try Jay Fenlason, hack@prep.ai.mit.edu
AKA mit-eddie!prep!hack. During odd hours he can sometimes be reached at
--- 89,99 ----
INTERNET david@cs.dal.ca
Arnold Robbins
! 1315 Kittredge Court, N.E.
! Atlanta, GA, 30329-3539, USA
! INTERNET: arnold@skeeve.atl.ga.us
! UUCP: { gatech, emory, emoryu1 }!skeeve!arnold
If you can't contact either of us, try Jay Fenlason, hack@prep.ai.mit.edu
AKA mit-eddie!prep!hack. During odd hours he can sometimes be reached at
***************
*** 107,116 ****
MS-DOS SUPPORT
! (This section is now outdated, see above.)
!
! Support for MSC 5.1 was supplied by Conrad Kwok and Scott Garfinkle.
! Scott is the contact person if you have problems with the MS-DOS version,
! uunet!cos!stubby!seg. (NOTE! This is a new address.) Of course, if it's
a generic bug, we want to hear about it too, but if it isn't reproducible
under Unix, we won't be as interested.
--- 103,111 ----
MS-DOS SUPPORT
! Support for MSC 5.1 was supplied for 2.11 by Kent Williams, who can be
! reached at williams@umaxc.weeg.uiowa.edu. It relies heavily on the
! earlier work done for 2.10 by Conrad Kwok and Scott Garfinkle. Bug
! reports on the MS-DOS version should go to Kent. Of course, if it's
a generic bug, we want to hear about it too, but if it isn't reproducible
under Unix, we won't be as interested.
diff -cr patch.0/array.c ./array.c
*** patch.0/array.c Thu Aug 31 11:46:15 1989
--- ./array.c Mon Nov 6 13:55:53 1989
***************
*** 55,61 ****
subsep = SUBSEP_node->lnode->stptr;
len = r->stlen + subseplen + 1;
emalloc(str, char *, len, "concat_exp");
- s = str;
memcpy(str, r->stptr, r->stlen+1);
s = str + r->stlen;
free_temp(r);
--- 55,60 ----
***************
*** 176,182 ****
assoc_lookup(symbol, subs)
NODE *symbol, *subs;
{
! register int hash1 = 0, i;
register NODE *bucket;
hash1 = hash_calc(subs);
--- 175,181 ----
assoc_lookup(symbol, subs)
NODE *symbol, *subs;
{
! register int hash1, i;
register NODE *bucket;
hash1 = hash_calc(subs);
***************
*** 207,213 ****
do_delete(symbol, tree)
NODE *symbol, *tree;
{
! register int hash1 = 0;
register NODE *bucket, *last;
NODE *subs;
--- 206,212 ----
do_delete(symbol, tree)
NODE *symbol, *tree;
{
! register int hash1;
register NODE *bucket, *last;
NODE *subs;
diff -cr patch.0/awk.h ./awk.h
*** patch.0/awk.h Mon Oct 23 19:18:23 1989
--- ./awk.h Mon Nov 6 14:00:55 1989
***************
*** 80,90 ****
--- 80,94 ----
/* extern int fprintf(FILE *, char *, ...); */
extern int fprintf();
extern int vfprintf();
+ #ifndef MSDOS
extern int fwrite(char *, int, int, FILE *);
+ #endif
extern int fflush(FILE *);
extern int fclose(FILE *);
extern int pclose(FILE *);
+ #ifndef MSDOS
extern int fputs(char *, FILE *);
+ #endif
extern void abort();
extern int isatty(int);
extern void exit(int);
***************
*** 99,105 ****
--- 103,111 ----
extern int open();
extern int pipe(int *);
extern int dup2(int, int);
+ #ifndef MSDOS
extern int unlink(char *);
+ #endif
extern int fork();
extern int execl(/* char *, char *, ... */);
extern int read(int, char *, int);
***************
*** 149,155 ****
--- 155,163 ----
extern double atof();
#endif
+ #ifndef MSDOS
extern int errno;
+ #endif /* MSDOS */
/* ------------------ Constants, Structures, Typedefs ------------------ */
#define AWKNUM double
***************
*** 593,598 ****
--- 601,610 ----
# else
# define BELL '\057'
# endif
+ #endif
+
+ #ifndef SIGTYPE
+ #define SIGTYPE void
#endif
extern char casetable[]; /* for case-independent regexp matching */
diff -cr patch.0/awk.y ./awk.y
*** patch.0/awk.y Wed Oct 18 11:02:07 1989
--- ./awk.y Mon Nov 6 13:55:54 1989
***************
*** 755,763 ****
char *scan;
errcount++;
- va_start(args);
- mesg = va_arg(args, char *);
- va_end(args);
/* Find the current line in the input file */
if (! lexptr) {
beg = "(END OF FILE)";
--- 755,760 ----
***************
*** 782,788 ****
--- 779,788 ----
putc(' ', stderr);
putc('^', stderr);
putc(' ', stderr);
+ va_start(args);
+ mesg = va_arg(args, char *);
vfprintf(stderr, mesg, args);
+ va_end(args);
putc('\n', stderr);
exit(1);
}
***************
*** 808,814 ****
{
register int c = *(*string_ptr)++;
register int i;
! register int count = 0;
switch (c) {
case 'a':
--- 808,814 ----
{
register int c = *(*string_ptr)++;
register int i;
! register int count;
switch (c) {
case 'a':
diff -cr patch.0/builtin.c ./builtin.c
*** patch.0/builtin.c Wed Oct 18 11:02:08 1989
--- ./builtin.c Mon Nov 6 13:55:54 1989
***************
*** 477,483 ****
(void) strcpy(cp, "*f");
(void) sprintf(obuf + olen, cpbuf, (int) fw, (double) tmpval);
}
- cp = obuf + olen;
ofre -= strlen(obuf + olen);
olen += strlen(obuf + olen); /* There may be nulls */
s0 = s1;
--- 477,482 ----
***************
*** 500,506 ****
(void) strcpy(cp, "*e");
(void) sprintf(obuf + olen, cpbuf, (int) fw, (double) tmpval);
}
- cp = obuf + olen;
ofre -= strlen(obuf + olen);
olen += strlen(obuf + olen); /* There may be nulls */
s0 = s1;
--- 499,504 ----
diff -cr patch.0/debug.c ./debug.c
*** patch.0/debug.c Wed Aug 9 23:06:00 1989
--- ./debug.c Mon Nov 6 13:57:30 1989
***************
*** 37,69 ****
* wants to.
*/
char *nnames[] = {
! "Illegal Node",
! "Times", "Divide", "Mod", "Plus", "Minus",
! "Cond-pair", "Subscript", "Concat",
! "++Pre", "--Pre", "Post++",
! "Post--", "Uminus", "Field",
! "Assign", "*=", "/=", "%=",
! "+=", "-=",
! "And", "Or",
! "Equal", "!=", "Less", "Greater", "<=", ">=",
! "Not",
! "Match", "Nomatch",
! "String", "TmpString", "Number",
! "Rule_list", "Rule_node", "State_list", "If_branches", "Exp_list",
! "Param_list",
! "BEGIN", "END", "IF", "WHILE",
! "FOR",
! "arrayfor", "BREAK", "CONTINUE", "PRINT", "PRINTF",
!
! "next", "exit", "DO", "RETURN", "DELETE",
! "redirect", "Append", "pipe", "Pipe in",
! "redirect input", "variable", "Varray",
! "builtin", "Line-range",
! "In_Array", "FUNCTION", "function def", "function call",
! "local variable",
! "getline", "sub", "gsub", "match", "?:",
! "^", "^=", "/regexp/", "Str_num",
! "~~", "!~~",
};
ptree(n)
--- 37,67 ----
* wants to.
*/
char *nnames[] = {
! "illegal", "times", "quotient", "mod", "plus",
! "minus", "cond_pair", "subscript", "concat", "exp",
! /* 10 */
! "preincrement", "predecrement", "postincrement", "postdecrement",
! "unary_minus",
! "field_spec", "assign", "assign_times", "assign_quotient", "assign_mod",
! /* 20 */
! "assign_plus", "assign_minus", "assign_exp", "and", "or",
! "equal", "notequal", "less", "greater", "leq",
! /* 30 */
! "geq", "match", "nomatch", "not", "rule_list",
! "rule_node", "statement_list", "if_branches", "expression_list",
! "param_list",
! /* 40 */
! "K_if", "K_while", "K_for", "K_arrayfor", "K_break",
! "K_continue", "K_print", "K_printf", "K_next", "K_exit",
! /* 50 */
! "K_do", "K_return", "K_delete", "K_getline", "K_function",
! "redirect_output", "redirect_append", "redirect_pipe",
! "redirect_pipein", "redirect_input",
! /* 60 */
! "var", "var_array", "val", "builtin", "line_range",
! "in_array", "func", "func_call", "cond_exp", "regex",
! /* 70 */
! "hashnode", "ahash"
};
ptree(n)
***************
*** 123,128 ****
--- 121,129 ----
printf("(0x%x Local variable %s)\n", ptr, ptr->param);
if (ptr->rnode)
print_parse_tree(ptr->rnode);
+ return;
+ case Node_regex:
+ printf("(0x%x Regular expression %s\n", ptr, ptr->re_text);
return;
}
if (ptr->lnode)
diff -cr patch.0/eval.c ./eval.c
*** patch.0/eval.c Wed Oct 18 11:02:09 1989
--- ./eval.c Mon Nov 6 14:07:40 1989
***************
*** 585,590 ****
--- 585,592 ----
if ((lx = t2->numbr) == t2->numbr) { /* integer exponent */
if (lx == 0)
x = 1;
+ else if (lx == 1)
+ x = t1->numbr;
else {
/* doing it this way should be more precise */
for (x = x2 = t1->numbr; --lx; )
***************
*** 820,825 ****
--- 822,829 ----
if ((ltemp = rval) == rval) { /* integer exponent */
if (ltemp == 0)
assign_number(lhs, (AWKNUM) 1);
+ else if (ltemp == 1)
+ assign_number(lhs, lval);
else {
/* doing it this way should be more precise */
for (t1 = t2 = lval; --ltemp; )
diff -cr patch.0/field.c ./field.c
*** patch.0/field.c Fri Sep 8 16:25:46 1989
--- ./field.c Mon Nov 6 13:58:26 1989
***************
*** 266,275 ****
&& scan < end)
scan++;
}
! while (re_split(scan, (int)(end - scan), fs, &reregs) != -1 &&
! NF < up_to) {
! (*set)(++NF, scan, reregs.start[0], n);
scan += reregs.end[0];
}
if (NF != up_to && scan <= end) {
if (!(rs == 0 && scan == end)) {
--- 266,287 ----
&& scan < end)
scan++;
}
! s = scan;
! while (scan < end
! && re_split(scan, (int)(end - scan), fs, &reregs) != -1
! && NF < up_to) {
! if (reregs.end[0] == 0) { /* null match */
! scan++;
! if (scan == end) {
! (*set)(++NF, s, scan - s, n);
! up_to = NF;
! break;
! }
! continue;
! }
! (*set)(++NF, s, scan - s + reregs.start[0], n);
scan += reregs.end[0];
+ s = scan;
}
if (NF != up_to && scan <= end) {
if (!(rs == 0 && scan == end)) {
diff -cr patch.0/gawk.texinfo ./gawk.texinfo
*** patch.0/gawk.texinfo Tue Oct 24 12:30:44 1989
--- ./gawk.texinfo Thu Nov 9 20:53:52 1989
***************
*** 67,73 ****
@sp 2
This is Edition 0.11 Beta of @cite{The GAWK Manual}, @*
! for the 2.11 Beta version of the GNU implementation @*
of AWK.
@sp 2
--- 67,73 ----
@sp 2
This is Edition 0.11 Beta of @cite{The GAWK Manual}, @*
! for the 2.11.1 version of the GNU implementation @*
of AWK.
@sp 2
***************
*** 1614,1624 ****
@cindex @samp{-F} option
The way @code{awk} splits an input record into fields is controlled by
! the @dfn{field separator}, which is a regular expression. @code{awk}
! scans the input record for matches for this regular expression; these
! matches separate fields. The fields themselves are the text between the
! matches. For example, if the field separator is @samp{oo}, then the
! following line:
@example
moo goo gai pan
--- 1614,1623 ----
@cindex @samp{-F} option
The way @code{awk} splits an input record into fields is controlled by
! the @dfn{field separator}, which is a single character or a regular
! expression. @code{awk} scans the input record for matches for the
! separator; the fields themselves are the text between the matches. For
! example, if the field separator is @samp{oo}, then the following line:
@example
moo goo gai pan
***************
*** 1682,1693 ****
@code{FS} is a special case: it is taken to specify the default manner
of delimiting fields.
! If @code{FS} is any other single character, such as @code{","}, then two
! successive occurrences of that character do delimit an empty field. The
! space character is the only special case.
! You can set @code{FS} to be a string containing several characters. For
! example, the assignment:@refill
@example
FS = ", \t"
--- 1681,1696 ----
@code{FS} is a special case: it is taken to specify the default manner
of delimiting fields.
! If @code{FS} is any other single character, such as @code{","}, then
! each occurrence of that character separates two fields. Two consecutive
! occurrences delimit an empty field. If the character occurs at the
! beginning or the end of the line, that too delimits an empty field. The
! space character is the only single character which does not follow these
! rules.
! More generally, the value of @code{FS} may be a string containing any
! regular expression. Then each match in the record for the regular
! expression separates fields. For example, the assignment:@refill
@example
FS = ", \t"
***************
*** 1698,1709 ****
space and a tab, into a field separator. (@samp{\t} stands for a
tab.)@refill
! More generally, the value of @code{FS} may be a string containing any
! regular expression. Then each match in the record for the regular
! expression separates fields. For example, if you want single spaces to
! separate fields the way single commas were used above, you can set
! @code{FS} to @w{@code{"[@ ]"}}. This regular expression matches a single
! space and nothing else.
@cindex field separator, setting on command line
@cindex command line, setting @code{FS} on
--- 1701,1710 ----
space and a tab, into a field separator. (@samp{\t} stands for a
tab.)@refill
! For a less trivial example of a regular expression, suppose you want
! single spaces to separate fields the way single commas were used above.
! You can set @code{FS} to @w{@code{"[@ ]"}}. This regular expression
! matches a single space and nothing else.
@cindex field separator, setting on command line
@cindex command line, setting @code{FS} on
***************
*** 6496,6503 ****
@c @vindex FS
@item FS
@code{FS} is the input field separator (@pxref{Field Separators}).
! The value is a regular expression that matches the separations
! between fields in an input record.
The default value is @w{@code{" "}}, a string consisting of a single
space. As a special exception, this value actually means that any
--- 6497,6505 ----
@c @vindex FS
@item FS
@code{FS} is the input field separator (@pxref{Field Separators}).
! The value is a single-character string or a multi-character regular
! expression that matches the separations between fields in an input
! record.
The default value is @w{@code{" "}}, a string consisting of a single
space. As a special exception, this value actually means that any
diff -cr patch.0/io.c ./io.c
*** patch.0/io.c Mon Oct 23 19:18:23 1989
--- ./io.c Mon Nov 6 14:23:24 1989
***************
*** 27,35 ****
#ifndef O_RDONLY
#include <fcntl.h>
#endif
- #if defined(MSDOS)
- #include "popen.h"
- #endif
#include <signal.h>
extern FILE *popen();
--- 27,32 ----
***************
*** 396,401 ****
--- 393,399 ----
free_temp(tmp);
if (rp == NULL) /* no match */
return tmp_number((AWKNUM) 0.0);
+ fflush(stdout); /* synchronize regular output */
return tmp_number((AWKNUM)close_redir(rp));
}
***************
*** 529,534 ****
--- 527,533 ----
#endif
}
+ #ifndef MSDOS
static IOBUF *
gawk_popen(cmd, rp)
char *cmd;
***************
*** 541,547 ****
rp->iop = NULL;
if (pipe(p) < 0)
return NULL;
! if((pid = fork()) == 0) {
close(p[0]);
dup2(p[1], 1);
close(p[1]);
--- 540,546 ----
rp->iop = NULL;
if (pipe(p) < 0)
return NULL;
! if ((pid = fork()) == 0) {
close(p[0]);
dup2(p[1], 1);
close(p[1]);
***************
*** 548,554 ****
execl("/bin/sh", "sh", "-c", cmd, 0);
_exit(127);
}
! if(pid == -1)
return NULL;
rp->pid = pid;
close(p[1]);
--- 547,553 ----
execl("/bin/sh", "sh", "-c", cmd, 0);
_exit(127);
}
! if (pid == -1)
return NULL;
rp->pid = pid;
close(p[1]);
***************
*** 559,569 ****
gawk_pclose(rp)
struct redirect *rp;
{
! void (*hstat)(), (*istat)(), (*qstat)();
int pid;
int status;
struct redirect *redp;
- extern int errno;
iop_close(rp->iop);
if (rp->pid == -1)
--- 558,567 ----
gawk_pclose(rp)
struct redirect *rp;
{
! SIGTYPE (*hstat)(), (*istat)(), (*qstat)();
int pid;
int status;
struct redirect *redp;
iop_close(rp->iop);
if (rp->pid == -1)
***************
*** 593,598 ****
--- 591,644 ----
signal(SIGQUIT, qstat);
return(rp->status);
}
+ #else
+ static
+ struct {
+ char *command;
+ char *name;
+ } pipes[_NFILE];
+
+ static IOBUF *
+ gawk_popen(cmd, rp)
+ char *cmd;
+ struct redirect *rp;
+ {
+ extern char *strdup(const char *);
+ int current;
+ char *name;
+ static char cmdbuf[256];
+
+ /* get a name to use. */
+ if ((name = tempnam(".", "pip")) == NULL)
+ return NULL;
+ sprintf(cmdbuf,"%s > %s", cmd, name);
+ system(cmdbuf);
+ if ((current = open(name,O_RDONLY)) == -1)
+ return NULL;
+ pipes[current].name = name;
+ pipes[current].command = strdup(cmd);
+ return (rp->iop = iop_alloc(current));
+ }
+
+ static int
+ gawk_pclose(rp)
+ struct redirect *rp;
+ {
+ int cur = rp->iop->fd;
+ int rval;
+
+ rval = iop_close(rp->iop);
+
+ /* check for an open file */
+ if (pipes[cur].name == NULL)
+ return -1;
+ unlink(pipes[cur].name);
+ free(pipes[cur].name);
+ pipes[cur].name = NULL;
+ free(pipes[cur].command);
+ return rval;
+ }
+ #endif
#define DO_END_OF_BUF len = bp - iop->off;\
used = last - start;\
diff -cr patch.0/main.c ./main.c
*** patch.0/main.c Tue Oct 17 13:08:24 1989
--- ./main.c Thu Nov 9 20:53:17 1989
***************
*** 115,121 ****
extern char *optarg;
extern char *strrchr();
extern char *tmpnam();
! extern int catchsig();
int i;
int nostalgia;
#ifdef somtime_in_the_future
--- 115,121 ----
extern char *optarg;
extern char *strrchr();
extern char *tmpnam();
! extern SIGTYPE catchsig();
int i;
int nostalgia;
#ifdef somtime_in_the_future
***************
*** 127,132 ****
--- 127,135 ----
(void) signal(SIGFPE, catchsig);
(void) signal(SIGSEGV, catchsig);
+ if (strncmp(version_string, "@(#)", 4) == 0)
+ version_string += 4;
+
myname = strrchr(argv[0], '/');
if (myname == NULL)
myname = argv[0];
***************
*** 297,302 ****
--- 300,307 ----
if (close_io() != 0 && exit_val == 0)
exit_val = 1;
exit(exit_val);
+ /* NOTREACHED */
+ return exit_val;
}
static void
***************
*** 374,384 ****
c = parse_escape(&src);
if (c < 0)
cant_happen();
! *dest++ = c;
break;
default:
*dest++ = '\\';
! *dest++ = c;
src++;
break;
}
--- 379,389 ----
c = parse_escape(&src);
if (c < 0)
cant_happen();
! *dest++ = (char)c;
break;
default:
*dest++ = '\\';
! *dest++ = (char)c;
src++;
break;
}
***************
*** 529,535 ****
}
}
! int
catchsig(sig, code)
int sig, code;
{
--- 534,540 ----
}
}
! SIGTYPE
catchsig(sig, code)
int sig, code;
{
diff -cr patch.0/missing.c ./missing.c
*** patch.0/missing.c Mon Sep 25 13:11:19 1989
--- ./missing.c Fri Nov 10 11:38:42 1989
***************
*** 1,3 ****
--- 1,11 ----
+ #ifdef MSDOS
+ #define BCOPY_MISSING
+ #define STRCASE_MISSING
+ #define BLKSIZE_MISSING
+ #define SPRINTF_INT
+ #define RANDOM_MISSING
+ #define GETOPT_MISSING
+ #endif
#ifdef DUP2_MISSING
#include "missing.d/dup2.c"
diff -cr patch.0/missing.d/random.c ./missing.d/random.c
*** patch.0/missing.d/random.c Thu Apr 13 08:01:19 1989
--- ./missing.d/random.c Fri Nov 10 10:28:46 1989
***************
*** 236,242 ****
if( n < BREAK_1 ) {
if( n < BREAK_0 ) {
fprintf( stderr, "initstate: not enough state (%d bytes) with which to do jack; ignored.\n", n );
! return;
}
rand_type = TYPE_0;
rand_deg = DEG_0;
--- 236,242 ----
if( n < BREAK_1 ) {
if( n < BREAK_0 ) {
fprintf( stderr, "initstate: not enough state (%d bytes) with which to do jack; ignored.\n", n );
! return 0;
}
rand_type = TYPE_0;
rand_deg = DEG_0;
diff -cr patch.0/node.c ./node.c
*** patch.0/node.c Wed Oct 11 18:57:31 1989
--- ./node.c Mon Nov 6 14:30:32 1989
***************
*** 60,66 ****
} else {
errno = 0;
n->numbr = (AWKNUM) strtod(n->stptr, &ptr);
! if (errno == 0 && ptr == n->stptr + n->stlen)
n->flags |= NUMERIC;
}
n->flags |= NUM;
--- 60,67 ----
} else {
errno = 0;
n->numbr = (AWKNUM) strtod(n->stptr, &ptr);
! /* the following >= should be ==, but for SunOS 3.5 strtod() */
! if (errno == 0 && ptr >= n->stptr + n->stlen)
n->flags |= NUMERIC;
}
n->flags |= NUM;
diff -cr patch.0/patchlevel.h ./patchlevel.h
*** patch.0/patchlevel.h Thu Oct 12 16:27:30 1989
--- ./patchlevel.h Tue Oct 31 16:48:17 1989
***************
*** 1,1 ****
! #define PATCHLEVEL 0
--- 1,1 ----
! #define PATCHLEVEL 1
diff -cr patch.0/pc.d/Makefile.pc ./pc.d/Makefile.pc
*** patch.0/pc.d/Makefile.pc Tue Nov 7 10:18:45 1989
--- ./pc.d/Makefile.pc Fri Nov 10 11:42:19 1989
***************
*** 0 ****
--- 1,282 ----
+ # Makefile for GNU Awk.
+ #
+ # Copyright (C) 1986, 1988, 1989 the Free Software Foundation, Inc.
+ #
+ # This file is part of GAWK, the GNU implementation of the
+ # AWK Progamming Language.
+ #
+ # GAWK is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 1, or (at your option)
+ # any later version.
+ #
+ # GAWK is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with GAWK; see the file COPYING. If not, write to
+ # the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ # User tunable macros
+
+ # CFLAGS: options to the C compiler
+ #
+ # -O optimize
+ # -g include dbx/sdb info
+ # -gg include gdb debugging info; only for GCC (deprecated)
+ # -pg include new (gmon) profiling info
+ # -p include old style profiling info (System V)
+ #
+ # To port GAWK, examine and adjust the following flags carefully.
+ # In addition, you will have to look at alloca below.
+ # The intent (eventual) is to not penalize the most-standard-conforming
+ # systems with a lot of #define's.
+ #
+ # -DBCOPY_MISSING - bcopy() et al. are missing; will replace
+ # with a #define'd memcpy() et al. -- use at
+ # your own risk (should really use a memmove())
+ # -DSPRINTF_INT - sprintf() returns int (most USG systems)
+ # -DBLKSIZE_MISSING - st_blksize missing from stat() structure
+ # (most USG systems)
+ # -DBSDSTDIO - has a BSD internally-compatible stdio
+ # -DDOPRNT_MISSING - lacks doprnt() routine
+ # -DDUP2_MISSING - lacks dup2() system call (S5Rn, n < 4)
+ # -DGCVT_MISSING - lacks gcvt() routine
+ # -DGETOPT_MISSING - lacks getopt() routine
+ # -DMEMCMP_MISSING - lacks memcmp() routine
+ # -DMEMCPY_MISSING - lacks memcpy() routine
+ # -DMEMSET_MISSING - lacks memset() routine
+ # -DRANDOM_MISSING - lacks random() routine
+ # -DSTRCASE_MISSING - lacks strcasecmp() routine
+ # -DSTRCHR_MISSING - lacks strchr() and strrchr() routines
+ # -DSTRERROR_MISSING - lacks (ANSI C) strerror() routine
+ # -DSTRTOD_MISSING - lacks strtod() routine
+ # -DTMPNAM_MISSING - lacks or deficient tmpnam() routine
+ # -DVPRINTF_MISSING - lacks vprintf and associated routines
+ # -DSIGTYPE=int - signal routines return int (default void)
+
+ # Sun running SunOS 4.x
+ # MISSING = -DSTRERROR_MISSING -DSTRCASE_MISSING
+
+ # SGI Personal Iris (Sys V derived)
+ # MISSING = -DSPRINTF_INT -DBLKSIZE_MISSING -DSTRERROR_MISSING -DRANDOM_MISSING
+
+ # VAX running Ultrix 3.x
+ # MISSING = -DSTRERROR_MISSING
+
+ # A generic 4.2 BSD machine
+ # (eliminate GETOPT_MISSING for 4.3 release)
+ # (eliminate STRCASE_MISSING and TMPNAM_MISSING for Tahoe release)
+ # MISSING = -DBSDSTDIO -DMEMCMP_MISSING -DMEMCPY_MISSING -DMEMSET_MISSING \
+ # -DSTRERROR_MISSING -DSTRTOD_MISSING -DVPRINTF_MISSING \
+ # -DSTRCASE_MISSING -DTMPNAM_MISSING \
+ # -DGETOPT_MISSING -DSTRCHR_MISSING -DSIGTYPE=int
+
+ # On Amdahl UTS, a SysVr2-derived system
+ # MISSING = -DBCOPY_MISSING -DSPRINTF_INT -DRANDOM_MISSING -DSTRERROR_MISSING \
+ # -DSTRCASE_MISSING -DDUP2_MISSING # -DBLKSIZE_MISSING ??????
+
+ # Comment out the next line if you don't have gcc.
+ # Also choose just one of -g and -O.
+ # CC= gcc
+ # for DOS
+ CC= cl
+ POPEN = popen.o
+
+ # for DOS, most of the missing symbols are defined in MISSING.C in order to
+ # get around the command line length limitations
+ MISSING = -DSPRINTF_INT -DBLKSIZE_MISSING -DBCOPY_MISSING
+ LINKFLAGS= /MAP /CO /FAR /PACKC /NOE /NOIG /st:0x1800
+
+ # also give suffixes and explicit rule for DOS
+ .SUFFIXES : .o .c
+ .c.o:
+ $(CC) -c $(CFLAGS) -Ipc.d -W2 -AL -Fo$*.o $<
+
+ OPTIMIZE= -Od -Zi
+ PROFILE= #-pg
+ DEBUG= #-DDEBUG #-DMEMDEBUG #-DFUNC_TRACE #-DMPROF
+ DEBUGGER= #-g -Bstatic
+ WARN= #-W -Wunused -Wimplicit -Wreturn-type -Wcomment # for gcc only
+
+ # Parser to use on grammar -- if you don't have bison use the first one
+ #PARSER = yacc
+ PARSER = bison
+
+ # ALLOCA
+ # Set equal to alloca.o if your system is S5 and you don't have
+ # alloca. Uncomment one of the rules below to make alloca.o from
+ # either alloca.s or alloca.c.
+ ALLOCA= #alloca.o
+
+ #
+ # With the exception of the alloca rule referred to above, you shouldn't
+ # need to customize this file below this point.
+ #
+
+ FLAGS= $(MISSING) $(DEBUG)
+ CFLAGS= $(FLAGS) $(DEBUGGER) $(PROFILE) $(OPTIMIZE) $(WARN)
+
+ # object files
+ O1 = main.o eval.o builtin.o msg.o debug.o io.o field.o array.o node.o
+ O2 = version.o missing.o $(POPEN)
+
+ AWKOBJS = $(O1) $(O2)
+
+
+ # for unix
+ # AWKTAB = awk.tab.o
+ # for dos
+ AWKTAB = awk_tab.o
+
+
+
+ ALLOBJS = $(AWKOBJS) $(AWKTAB)
+
+ # GNUOBJS
+ # GNU stuff that gawk uses as library routines.
+ GNUOBJS= regex.o $(ALLOCA)
+
+ # source and documentation files
+ SRC = main.c eval.c builtin.c msg.c \
+ debug.c io.c field.c array.c node.c missing.c
+
+ ALLSRC= $(SRC) awk.tab.c
+
+ AWKSRC= awk.h awk.y $(ALLSRC) version.sh patchlevel.h
+
+ GNUSRC = alloca.c alloca.s regex.c regex.h
+
+ COPIES = missing.d/dup2.c missing.d/gcvt.c missing.d/getopt.c \
+ missing.d/memcmp.c missing.d/memcpy.c missing.d/memset.c \
+ missing.d/random.c missing.d/strcase.c missing.d/strchr.c \
+ missing.d/strerror.c missing.d/strtod.c missing.d/tmpnam.c \
+ missing.d/vprintf.c
+
+ SUPPORT = support/texindex.c support/texinfo.tex
+
+ DOCS= gawk.1 gawk.texinfo
+
+ INFOFILES= gawk-info gawk-info-1 gawk-info-2 gawk-info-3 gawk-info-4 \
+ gawk-info-5 gawk-info-6 gawk.aux gawk.cp gawk.cps gawk.fn \
+ gawk.fns gawk.ky gawk.kys gawk.pg gawk.pgs gawk.toc \
+ gawk.tp gawk.tps gawk.vr gawk.vrs
+
+ MISC = CHANGES COPYING FUTURES Makefile PROBLEMS README
+
+ PCSTUFF= pc.d/Makefile.pc pc.d/popen.c pc.d/popen.h
+
+ ALLDOC= gawk.dvi $(INFOFILES)
+
+ ALLFILES= $(AWKSRC) $(GNUSRC) $(COPIES) $(MISC) $(DOCS) $(ALLDOC) $(PCSTUFF) $(SUPPORT)
+
+ # Release of gawk. There can be no leading or trailing white space here!
+ REL=2.11
+ # for unix
+ # GAWK = gawk
+ # for DOS
+ GAWK = gawk.exe
+ $(GAWK) : $(ALLOBJS) $(GNUOBJS) names.lnk
+ link @names.lnk
+
+ #GNULIB = ..\lib\lgnu.lib
+ GNULIB =
+ names.lnk : makefile
+ echo $(O1) + > $@
+ echo $(O2) + >> $@
+ echo $(AWKTAB) + >> $@
+ echo $(GNUOBJS) >> $@
+ echo $(GAWK) >> $@
+ echo gawk.map >> $@
+ echo $(GNULIB) $(LINKFLAGS) >> $@
+
+ popen.o : pc.d\popen.c
+ $(CC) -c $(CFLAGS) -Ipc.d -W2 -AL -Fo$*.o pc.d\popen.c
+
+ # rules to build gawk
+ #$(GAWK) : $(ALLOBJS) $(GNUOBJS)
+ # $(CC) -o gawk $(CFLAGS) $(ALLOBJS) $(GNUOBJS) -lm
+
+ $(AWKOBJS): awk.h
+
+ main.o: patchlevel.h
+
+ #awk.tab.o: awk.h awk.tab.c
+ #
+ #awk.tab.c: awk.y
+ # $(PARSER) -v awk.y
+ # -mv -f y.tab.c awk.tab.c
+
+ # for dos
+ awk_tab.o : awk.y awk.h
+ bison -y awk.y
+ $(CC) -c $(CFLAGS) -Ipc.d -W2 -AL -Fo$@ y_tab.c
+ @-rm y_tab.c
+
+ version.c: version.sh
+ sh version.sh $(REL) > version.c
+
+ # Alloca: uncomment this if your system (notably System V boxen)
+ # does not have alloca in /lib/libc.a
+ #
+ #alloca.o: alloca.s
+ # /lib/cpp < alloca.s | sed '/^#/d' > t.s
+ # as t.s -o alloca.o
+ # rm t.s
+
+ # If your machine is not supported by the assembly version of alloca.s,
+ # use the C version instead. This uses the default rules to make alloca.o.
+ #
+ #alloca.o: alloca.c
+
+ # auxiliary rules for release maintenance
+ lint: $(ALLSRC)
+ lint -hcbax $(FLAGS) $(ALLSRC)
+
+ xref:
+ cxref -c $(FLAGS) $(ALLSRC) | grep -v ' /' >xref
+
+ clean:
+ rm -f gawk *.o core awk.output awk.tab.c gmon.out make.out version.c
+
+ clobber: clean
+ rm -f $(ALLDOC) gawk.log
+
+ gawk.dvi: gawk.texinfo
+ tex gawk.texinfo ; texindex gawk.??
+ tex gawk.texinfo ; texindex gawk.??
+ tex gawk.texinfo
+
+ $(INFOFILES): gawk.texinfo
+ makeinfo gawk.texinfo
+
+ srcrelease: $(AWKSRC) $(GNUSRC) $(DOCS) $(MISC) $(COPIES) $(PCSTUFF) $(SUPPORT)
+ -mkdir gawk-$(REL)
+ cp -p $(AWKSRC) $(GNUSRC) $(DOCS) $(MISC) gawk-$(REL)
+ -mkdir gawk-$(REL)/missing.d
+ cp -p $(COPIES) gawk-$(REL)/missing.d
+ -mkdir gawk-$(REL)/pc.d
+ cp -p $(PCSTUFF) gawk-$(REL)/pc.d
+ -mkdir gawk-$(REL)/support
+ cp -p $(SUPPORT) gawk-$(REL)/support
+ tar -cf - gawk-$(REL) | compress > gawk-$(REL).tar.Z
+
+ docrelease: $(ALLDOC)
+ -mkdir gawk-$(REL)-doc
+ cp -p $(INFOFILES) gawk.dvi gawk-$(REL)-doc
+ nroff -man gawk.1 > gawk-$(REL)-doc/gawk.1.pr
+ tar -cf - gawk-$(REL)-doc | compress > gawk-doc-$(REL).tar.Z
+
+ psrelease: docrelease
+ -mkdir gawk-postscript
+ dvi2ps gawk.dvi > gawk-postscript/gawk.postscript
+ psroff -t -man gawk.1 > gawk-postscript/gawk.1.ps
+ tar -cf - gawk-postscript | compress > gawk.postscript.tar.Z
+
+ release: srcrelease docrelease psrelease
+ rm -fr gawk-postscript gawk-$(REL) gawk-$(REL)-doc
+
+ diff:
+ for i in RCS/*; do rcsdiff -c -b $$i > `basename $$i ,v`.diff; done
diff -cr patch.0/version.sh ./version.sh
*** patch.0/version.sh Thu Oct 12 16:47:10 1989
--- ./version.sh Thu Nov 9 20:51:34 1989
***************
*** 11,17 ****
RELEASE="$1"
cat << EOF
! char *version_string = "@(#)Gnu Awk (gawk) ${RELEASE}-BETA" + 4;
/* 1.02 fixed /= += *= etc to return the new Left Hand Side instead
of the Right Hand Side */
--- 11,17 ----
RELEASE="$1"
cat << EOF
! char *version_string = "@(#)Gnu Awk (gawk) ${RELEASE}";
/* 1.02 fixed /= += *= etc to return the new Left Hand Side instead
of the Right Hand Side */