diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2010-07-16 12:30:13 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2010-07-16 12:30:13 +0300 |
commit | 66b0bdd602e952f20fa98f6ce5430cea68d4f598 (patch) | |
tree | 0b5f379a44720da132f3bd6a66cd900ca821a9aa /awk.h | |
parent | 61bb57af53ebe916d2db6e3585d4fc7ac1d99b92 (diff) | |
download | egawk-66b0bdd602e952f20fa98f6ce5430cea68d4f598.tar.gz egawk-66b0bdd602e952f20fa98f6ce5430cea68d4f598.tar.bz2 egawk-66b0bdd602e952f20fa98f6ce5430cea68d4f598.zip |
Move to gawk-2.15.4.
Diffstat (limited to 'awk.h')
-rw-r--r-- | awk.h | 45 |
1 files changed, 32 insertions, 13 deletions
@@ -3,7 +3,7 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991, 1992 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Progamming Language. @@ -172,7 +172,7 @@ extern int getpgrp P((void)); typedef struct Regexp { struct re_pattern_buffer pat; struct re_registers regs; - struct regexp dfareg; + struct dfa dfareg; int dfa; } Regexp; #define RESTART(rp,s) (rp)->regs.start[0] @@ -196,6 +196,22 @@ extern int _text_read (int, char *, int); #define ENVSEP ':' #endif +#define DEFAULT_G_PRECISION 6 + +/* semi-temporary hack, mostly to gracefully handle VMS */ +#ifdef GFMT_WORKAROUND +extern void sgfmt P((char *, const char *, int, int, int, double)); /* builtin.c */ + +/* Partial fix, to handle the most common case. */ +#define NUMTOSTR(str, format, num) \ + if (strcmp((format), "%.6g") == 0 || strcmp((format), "%g") == 0) \ + sgfmt(str, "%*.*g", 0, 1, DEFAULT_G_PRECISION, num); \ + else \ + (void) sprintf(str, format, num) /* NOTE: no semi-colon! */ +#else +#define NUMTOSTR(str, format, num) (void) sprintf(str, format, num) +#endif /* GFMT_WORKAROUND */ + /* ------------------ Constants, Structures, Typedefs ------------------ */ #define AWKNUM double @@ -333,6 +349,7 @@ typedef struct exp_node { union { struct exp_node *lptr; char *param_name; + long ll; } l; union { struct exp_node *rptr; @@ -345,6 +362,7 @@ typedef struct exp_node { union { char *name; struct exp_node *extra; + long xl; } x; short number; unsigned char reflags; @@ -390,8 +408,8 @@ typedef struct exp_node { # define NUM 32 /* numeric value is current */ # define NUMBER 64 /* assigned as number */ # define MAYBE_NUM 128 /* user input: if NUMERIC then - * a NUMBER - */ + * a NUMBER */ +# define ARRAYMAXED 256 /* array is at max size */ char *vname; /* variable's name */ } NODE; @@ -424,6 +442,8 @@ typedef struct exp_node { #define var_value lnode #define var_array sub.nodep.r.av +#define array_size sub.nodep.l.ll +#define table_size sub.nodep.x.xl #define condpair lnode #define triggered sub.nodep.r.r_ent @@ -431,8 +451,6 @@ typedef struct exp_node { #ifdef DONTDEF int primes[] = {31, 61, 127, 257, 509, 1021, 2053, 4099, 8191, 16381}; #endif -/* a quick profile suggests that the following is a good value */ -#define HASHSIZE 1021 typedef struct for_loop_header { NODE *init; @@ -626,7 +644,7 @@ extern double _msc51bug; /* array.c */ extern NODE *concat_exp P((NODE *tree)); extern void assoc_clear P((NODE *symbol)); -extern unsigned int hash P((char *s, size_t len)); +extern unsigned int hash P((const char *s, size_t len, unsigned long hsize)); extern int in_array P((NODE *symbol, NODE *subs)); extern NODE **assoc_lookup P((NODE *symbol, NODE *subs)); extern void do_delete P((NODE *symbol, NODE *tree)); @@ -637,7 +655,7 @@ extern char *tokexpand P((void)); extern char nextc P((void)); extern NODE *node P((NODE *left, NODETYPE op, NODE *right)); extern NODE *install P((char *name, NODE *value)); -extern NODE *lookup P((char *name)); +extern NODE *lookup P((const char *name)); extern NODE *variable P((char *name, int can_free)); extern int yyparse P((void)); /* builtin.c */ @@ -693,8 +711,8 @@ extern struct redirect *redirect P((NODE *tree, int *errflg)); extern NODE *do_close P((NODE *tree)); extern int flush_io P((void)); extern int close_io P((void)); -extern int devopen P((char *name, char *mode)); -extern int pathopen P((char *file)); +extern int devopen P((const char *name, const char *mode)); +extern int pathopen P((const char *file)); extern NODE *do_getline P((NODE *tree)); extern void do_nextfile P((void)); /* iop.c */ @@ -708,7 +726,7 @@ extern void load_environ P((void)); extern char *arg_assign P((char *arg)); extern SIGTYPE catchsig P((int sig, int code)); /* msg.c */ -extern void err P((char *s, char *emsg, va_list argp)); +extern void err P((const char *s, const char *emsg, va_list argp)); #if _MSC_VER == 510 extern void msg P((va_list va_alist, ...)); extern void warning P((va_list va_alist, ...)); @@ -732,8 +750,9 @@ extern void freenode P((NODE *it)); extern void unref P((NODE *tmp)); extern int parse_escape P((char **string_ptr)); /* re.c */ -extern Regexp *make_regexp P((char *s, int len, int ignorecase, int dfa)); -extern int research P((Regexp *rp, char *str, int start, int len, int need_start)); +extern Regexp *make_regexp P((char *s, size_t len, int ignorecase, int dfa)); +extern int research P((Regexp *rp, char *str, int start, + size_t len, int need_start)); extern void refree P((Regexp *rp)); extern void reg_error P((const char *s)); extern Regexp *re_update P((NODE *t)); |