summaryrefslogtreecommitdiffstats
path: root/usr.bin/f2c/defs.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/f2c/defs.h')
-rw-r--r--usr.bin/f2c/defs.h784
1 files changed, 0 insertions, 784 deletions
diff --git a/usr.bin/f2c/defs.h b/usr.bin/f2c/defs.h
deleted file mode 100644
index 6bb2ca2..0000000
--- a/usr.bin/f2c/defs.h
+++ /dev/null
@@ -1,784 +0,0 @@
-/****************************************************************
-Copyright 1990, 1991, 1992, 1993 by AT&T Bell Laboratories, Bellcore.
-
-Permission to use, copy, modify, and distribute this software
-and its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the names of AT&T Bell Laboratories or
-Bellcore or any of their entities not be used in advertising or
-publicity pertaining to distribution of the software without
-specific, written prior permission.
-
-AT&T and Bellcore disclaim all warranties with regard to this
-software, including all implied warranties of merchantability
-and fitness. In no event shall AT&T or Bellcore be liable for
-any special, indirect or consequential damages or any damages
-whatsoever resulting from loss of use, data or profits, whether
-in an action of contract, negligence or other tortious action,
-arising out of or in connection with the use or performance of
-this software.
-****************************************************************/
-
-#include "sysdep.h"
-
-#include "ftypes.h"
-#include "defines.h"
-#include "machdefs.h"
-
-#define MAXDIM 20
-#define MAXINCLUDES 10
-#define MAXLITERALS 200 /* Max number of constants in the literal
- pool */
-#define MAXTOKENLEN 502 /* length of longest token */
-#define MAXCTL 20
-#define MAXHASH 401
-#define MAXSTNO 801
-#define MAXEXT 200
-#define MAXEQUIV 150
-#define MAXLABLIST 258 /* Max number of labels in an alternate
- return CALL or computed GOTO */
-#define MAXCONTIN 99 /* Max continuation lines */
-
-/* These are the primary pointer types used in the compiler */
-
-typedef union Expression *expptr, *tagptr;
-typedef struct Chain *chainp;
-typedef struct Addrblock *Addrp;
-typedef struct Constblock *Constp;
-typedef struct Exprblock *Exprp;
-typedef struct Nameblock *Namep;
-
-extern FILEP opf();
-extern FILEP infile;
-extern FILEP diagfile;
-extern FILEP textfile;
-extern FILEP asmfile;
-extern FILEP c_file; /* output file for all functions; extern
- declarations will have to be prepended */
-extern FILEP pass1_file; /* Temp file to hold the function bodies
- read on pass 1 */
-extern FILEP expr_file; /* Debugging file */
-extern FILEP initfile; /* Intermediate data file pointer */
-extern FILEP blkdfile; /* BLOCK DATA file */
-
-extern int current_ftn_file;
-extern int maxcontin;
-
-extern char *blkdfname, *initfname, *sortfname;
-extern long int headoffset; /* Since the header block requires data we
- don't know about until AFTER each
- function has been processed, we keep a
- pointer to the current (dummy) header
- block (at the top of the assembly file)
- here */
-
-extern char main_alias[]; /* name given to PROGRAM psuedo-op */
-extern char token [ ];
-extern int toklen;
-extern long lineno;
-extern char *infname;
-extern int needkwd;
-extern struct Labelblock *thislabel;
-
-/* Used to allow runtime expansion of internal tables. In particular,
- these values can exceed their associated constants */
-
-extern int maxctl;
-extern int maxequiv;
-extern int maxstno;
-extern int maxhash;
-extern int maxext;
-
-extern flag nowarnflag;
-extern flag ftn66flag; /* Generate warnings when weird f77
- features are used (undeclared dummy
- procedure, non-char initialized with
- string, 1-dim subscript in EQUIV) */
-extern flag no66flag; /* Generate an error when a generic
- function (f77 feature) is used */
-extern flag noextflag; /* Generate an error when an extension to
- Fortran 77 is used (hex/oct/bin
- constants, automatic, static, double
- complex types) */
-extern flag zflag; /* enable double complex intrinsics */
-extern flag shiftcase;
-extern flag undeftype;
-extern flag shortsubs; /* Use short subscripts on arrays? */
-extern flag onetripflag; /* if true, always execute DO loop body */
-extern flag checksubs;
-extern flag debugflag;
-extern int nerr;
-extern int nwarn;
-
-extern int parstate;
-extern flag headerdone; /* True iff the current procedure's header
- data has been written */
-extern int blklevel;
-extern flag saveall;
-extern flag substars; /* True iff some formal parameter is an
- asterisk */
-extern int impltype[ ];
-extern ftnint implleng[ ];
-extern int implstg[ ];
-
-extern int tycomplex, tyint, tyioint, tyreal;
-extern int tylog, tylogical; /* TY____ of the implementation of logical.
- This will be LONG unless '-2' is given
- on the command line */
-extern int type_choice[];
-extern char *typename[];
-
-extern int typesize[]; /* size (in bytes) of an object of each
- type. Indexed by TY___ macros */
-extern int typealign[];
-extern int proctype; /* Type of return value in this procedure */
-extern char * procname; /* External name of the procedure, or last ENTRY name */
-extern int rtvlabel[ ]; /* Return value labels, indexed by TY___ macros */
-extern Addrp retslot;
-extern Addrp xretslot[];
-extern int cxslot; /* Complex return argument slot (frame pointer offset)*/
-extern int chslot; /* Character return argument slot (fp offset) */
-extern int chlgslot; /* Argument slot for length of character buffer */
-extern int procclass; /* Class of the current procedure: either CLPROC,
- CLMAIN, CLBLOCK or CLUNKNOWN */
-extern ftnint procleng; /* Length of function return value (e.g. char
- string length). If this is -1, then the length is
- not known at compile time */
-extern int nentry; /* Number of entry points (other than the original
- function call) into this procedure */
-extern flag multitype; /* YES iff there is more than one return value
- possible */
-extern int blklevel;
-extern long lastiolabno;
-extern int lastlabno;
-extern int lastvarno;
-extern int lastargslot; /* integer offset pointing to the next free
- location for an argument to the current routine */
-extern int argloc;
-extern int autonum[]; /* for numbering
- automatic variables, e.g. temporaries */
-extern int retlabel;
-extern int ret0label;
-extern int dorange; /* Number of the label which terminates
- the innermost DO loop */
-extern int regnum[ ]; /* Numbers of DO indicies named in
- regnamep (below) */
-extern Namep regnamep[ ]; /* List of DO indicies in registers */
-extern int maxregvar; /* number of elts in regnamep */
-extern int highregvar; /* keeps track of the highest register
- number used by DO index allocator */
-extern int nregvar; /* count of DO indicies in registers */
-
-extern chainp templist[];
-extern int maxdim;
-extern chainp earlylabs;
-extern chainp holdtemps;
-extern struct Entrypoint *entries;
-extern struct Rplblock *rpllist;
-extern struct Chain *curdtp;
-extern ftnint curdtelt;
-extern chainp allargs; /* union of args in entries */
-extern int nallargs; /* total number of args */
-extern int nallchargs; /* total number of character args */
-extern flag toomanyinit; /* True iff too many initializers in a
- DATA statement */
-
-extern flag inioctl;
-extern int iostmt;
-extern Addrp ioblkp;
-extern int nioctl;
-extern int nequiv;
-extern int eqvstart; /* offset to eqv number to guarantee uniqueness
- and prevent <something> from going negative */
-extern int nintnames;
-
-/* Chain of tagged blocks */
-
-struct Chain
- {
- chainp nextp;
- char * datap; /* Tagged block */
- };
-
-extern chainp chains;
-
-/* Recall that field is intended to hold four-bit characters */
-
-/* This structure exists only to defeat the type checking */
-
-struct Headblock
- {
- field tag;
- field vtype;
- field vclass;
- field vstg;
- expptr vleng; /* Expression for length of char string -
- this may be a constant, or an argument
- generated by mkarg() */
- } ;
-
-/* Control construct info (for do loops, else, etc) */
-
-struct Ctlframe
- {
- unsigned ctltype:8;
- unsigned dostepsign:8; /* 0 - variable, 1 - pos, 2 - neg */
- unsigned dowhile:1;
- int ctlabels[4]; /* Control labels, defined below */
- int dolabel; /* label marking end of this DO loop */
- Namep donamep; /* DO index variable */
- expptr domax; /* constant or temp variable holding MAX
- loop value; or expr of while(expr) */
- expptr dostep; /* expression */
- Namep loopname;
- };
-#define endlabel ctlabels[0]
-#define elselabel ctlabels[1]
-#define dobodylabel ctlabels[1]
-#define doposlabel ctlabels[2]
-#define doneglabel ctlabels[3]
-extern struct Ctlframe *ctls; /* Keeps info on DO and BLOCK IF
- structures - this is the stack
- bottom */
-extern struct Ctlframe *ctlstack; /* Pointer to current nesting
- level */
-extern struct Ctlframe *lastctl; /* Point to end of
- dynamically-allocated array */
-
-typedef struct {
- int type;
- chainp cp;
- } Atype;
-
-typedef struct {
- int defined, dnargs, nargs, changes;
- Atype atypes[1];
- } Argtypes;
-
-/* External Symbols */
-
-struct Extsym
- {
- char *fextname; /* Fortran version of external name */
- char *cextname; /* C version of external name */
- field extstg; /* STG -- should be COMMON, UNKNOWN or EXT
- */
- unsigned extype:4; /* for transmitting type to output routines */
- unsigned used_here:1; /* Boolean - true on the second pass
- through a function if the block has
- been referenced */
- unsigned exused:1; /* Has been used (for help with error msgs
- about externals typed differently in
- different modules) */
- unsigned exproto:1; /* type specified in a .P file */
- unsigned extinit:1; /* Procedure has been defined,
- or COMMON has DATA */
- unsigned extseen:1; /* True if previously referenced */
- chainp extp; /* List of identifiers in the common
- block for this function, stored as
- Namep (hash table pointers) */
- chainp allextp; /* List of lists of identifiers; we keep one
- list for each layout of this common block */
- int curno; /* current number for this common block,
- used for constructing appending _nnn
- to the common block name */
- int maxno; /* highest curno value for this common block */
- ftnint extleng;
- ftnint maxleng;
- Argtypes *arginfo;
- };
-typedef struct Extsym Extsym;
-
-extern Extsym *extsymtab; /* External symbol table */
-extern Extsym *nextext;
-extern Extsym *lastext;
-extern int complex_seen, dcomplex_seen;
-
-/* Statement labels */
-
-struct Labelblock
- {
- int labelno; /* Internal label */
- unsigned blklevel:8; /* level of nesting , for branch-in-loop
- checking */
- unsigned labused:1;
- unsigned fmtlabused:1;
- unsigned labinacc:1; /* inaccessible? (i.e. has its scope
- vanished) */
- unsigned labdefined:1; /* YES or NO */
- unsigned labtype:2; /* LAB{FORMAT,EXEC,etc} */
- ftnint stateno; /* Original label */
- char *fmtstring; /* format string */
- };
-
-extern struct Labelblock *labeltab; /* Label table - keeps track of
- all labels, including undefined */
-extern struct Labelblock *labtabend;
-extern struct Labelblock *highlabtab;
-
-/* Entry point list */
-
-struct Entrypoint
- {
- struct Entrypoint *entnextp;
- Extsym *entryname; /* Name of this ENTRY */
- chainp arglist;
- int typelabel; /* Label for function exit; this
- will return the proper type of
- object */
- Namep enamep; /* External name */
- };
-
-/* Primitive block, or Primary block. This is a general template returned
- by the parser, which will be interpreted in context. It is a template
- for an identifier (variable name, function name), parenthesized
- arguments (array subscripts, function parameters) and substring
- specifications. */
-
-struct Primblock
- {
- field tag;
- field vtype;
- unsigned parenused:1; /* distinguish (a) from a */
- Namep namep; /* Pointer to structure Nameblock */
- struct Listblock *argsp;
- expptr fcharp; /* first-char-index-pointer (in
- substring) */
- expptr lcharp; /* last-char-index-pointer (in
- substring) */
- };
-
-
-struct Hashentry
- {
- int hashval;
- Namep varp;
- };
-extern struct Hashentry *hashtab; /* Hash table */
-extern struct Hashentry *lasthash;
-
-struct Intrpacked /* bits for intrinsic function description */
- {
- unsigned f1:3;
- unsigned f2:4;
- unsigned f3:7;
- unsigned f4:1;
- };
-
-struct Nameblock
- {
- field tag;
- field vtype;
- field vclass;
- field vstg;
- expptr vleng; /* length of character string, if applicable */
- char *fvarname; /* name in the Fortran source */
- char *cvarname; /* name in the resulting C */
- chainp vlastdim; /* datap points to new_vars entry for the */
- /* system variable, if any, storing the final */
- /* dimension; we zero the datap if this */
- /* variable is needed */
- unsigned vprocclass:3; /* P____ macros - selects the varxptr
- field below */
- unsigned vdovar:1; /* "is it a DO variable?" for register
- and multi-level loop checking */
- unsigned vdcldone:1; /* "do I think I'm done?" - set when the
- context is sufficient to determine its
- status */
- unsigned vadjdim:1; /* "adjustable dimension?" - needed for
- information about copies */
- unsigned vsave:1;
- unsigned vimpldovar:1; /* used to prevent erroneous error messages
- for variables used only in DATA stmt
- implicit DOs */
- unsigned vis_assigned:1;/* True if this variable has had some
- label ASSIGNED to it; hence
- varxptr.assigned_values is valid */
- unsigned vimplstg:1; /* True if storage type is assigned implicitly;
- this allows a COMMON variable to participate
- in a DIMENSION before the COMMON declaration.
- */
- unsigned vcommequiv:1; /* True if EQUIVALENCEd onto STGCOMMON */
- unsigned vfmt_asg:1; /* True if char *var_fmt needed */
- unsigned vpassed:1; /* True if passed as a character-variable arg */
- unsigned vknownarg:1; /* True if seen in a previous entry point */
- unsigned visused:1; /* True if variable is referenced -- so we */
- /* can omit variables that only appear in DATA */
- unsigned vnamelist:1; /* Appears in a NAMELIST */
- unsigned vimpltype:1; /* True if implicitly typed and not
- invoked as a function or subroutine
- (so we can consistently type procedures
- declared external and passed as args
- but never invoked).
- */
- unsigned vtypewarned:1; /* so we complain just once about
- changed types of external procedures */
- unsigned vinftype:1; /* so we can restore implicit type to a
- procedure if it is invoked as a function
- after being given a different type by -it */
- unsigned vinfproc:1; /* True if -it infers this to be a procedure */
- unsigned vcalled:1; /* has been invoked */
- unsigned vdimfinish:1; /* need to invoke dim_finish() */
- unsigned vrefused:1; /* Need to #define name_ref (for -s) */
- unsigned vsubscrused:1; /* Need to #define name_subscr (for -2) */
- unsigned veqvadjust:1; /* voffset has been adjusted for equivalence */
-
-/* The vardesc union below is used to store the number of an intrinsic
- function (when vstg == STGINTR and vprocclass == PINTRINSIC), or to
- store the index of this external symbol in extsymtab (when vstg ==
- STGEXT and vprocclass == PEXTERNAL) */
-
- union {
- int varno; /* Return variable for a function.
- This is used when a function is
- assigned a return value. Also
- used to point to the COMMON
- block, when this is a field of
- that block. Also points to
- EQUIV block when STGEQUIV */
- struct Intrpacked intrdesc; /* bits for intrinsic function*/
- } vardesc;
- struct Dimblock *vdim; /* points to the dimensions if they exist */
- ftnint voffset; /* offset in a storage block (the variable
- name will be "v.%d", voffset in a
- common blck on the vax). Also holds
- pointers for automatic variables. When
- STGEQUIV, this is -(offset from array
- base) */
- union {
- chainp namelist; /* points to names in the NAMELIST,
- if this is a NAMELIST name */
- chainp vstfdesc; /* points to (formals, expr) pair */
- chainp assigned_values; /* list of integers, each being a
- statement label assigned to
- this variable in the current function */
- } varxptr;
- int argno; /* for multiple entries */
- Argtypes *arginfo;
- };
-
-
-/* PARAMETER statements */
-
-struct Paramblock
- {
- field tag;
- field vtype;
- field vclass;
- field vstg;
- expptr vleng;
- char *fvarname;
- char *cvarname;
- expptr paramval;
- } ;
-
-
-/* Expression block */
-
-struct Exprblock
- {
- field tag;
- field vtype;
- field vclass;
- field vstg;
- expptr vleng; /* in the case of a character expression, this
- value is inherited from the children */
- unsigned opcode;
- expptr leftp;
- expptr rightp;
- };
-
-
-union Constant
- {
- struct {
- char *ccp0;
- ftnint blanks;
- } ccp1;
- ftnint ci; /* Constant long integer */
- double cd[2];
- char *cds[2];
- };
-#define ccp ccp1.ccp0
-
-struct Constblock
- {
- field tag;
- field vtype;
- field vclass;
- field vstg; /* vstg = 1 when using Const.cds */
- expptr vleng;
- union Constant Const;
- };
-
-
-struct Listblock
- {
- field tag;
- field vtype;
- chainp listp;
- };
-
-
-
-/* Address block - this is the FINAL form of identifiers before being
- sent to pass 2. We'll want to add the original identifier here so that it can
- be preserved in the translation.
-
- An example identifier is q.7. The "q" refers to the storage class
- (field vstg), the 7 to the variable number (int memno). */
-
-struct Addrblock
- {
- field tag;
- field vtype;
- field vclass;
- field vstg;
- expptr vleng;
- /* put union...user here so the beginning of an Addrblock
- * is the same as a Constblock.
- */
- union {
- Namep name; /* contains a pointer into the hash table */
- char ident[IDENT_LEN + 1]; /* C string form of identifier */
- char *Charp;
- union Constant Const; /* Constant value */
- struct {
- double dfill[2];
- field vstg1;
- } kludge; /* so we can distinguish string vs binary
- * floating-point constants */
- } user;
- long memno; /* when vstg == STGCONST, this is the
- numeric part of the assembler label
- where the constant value is stored */
- expptr memoffset; /* used in subscript computations, usually */
- unsigned istemp:1; /* used in stack management of temporary
- variables */
- unsigned isarray:1; /* used to show that memoffset is
- meaningful, even if zero */
- unsigned ntempelt:10; /* for representing temporary arrays, as
- in concatenation */
- unsigned dbl_builtin:1; /* builtin to be declared double */
- unsigned charleng:1; /* so saveargtypes can get i/o calls right */
- unsigned cmplx_sub:1; /* used in complex arithmetic under -s */
- unsigned skip_offset:1; /* used in complex arithmetic under -s */
- unsigned parenused:1; /* distinguish (a) from a */
- ftnint varleng; /* holds a copy of a constant length which
- is stored in the vleng field (e.g.
- a double is 8 bytes) */
- int uname_tag; /* Tag describing which of the unions()
- below to use */
- char *Field; /* field name when dereferencing a struct */
-}; /* struct Addrblock */
-
-
-/* Errorbock - placeholder for errors, to allow the compilation to
- continue */
-
-struct Errorblock
- {
- field tag;
- field vtype;
- };
-
-
-/* Implicit DO block, especially related to DATA statements. This block
- keeps track of the compiler's location in the implicit DO while it's
- running. In particular, the isactive and isbusy flags tell where
- it is */
-
-struct Impldoblock
- {
- field tag;
- unsigned isactive:1;
- unsigned isbusy:1;
- Namep varnp;
- Constp varvp;
- chainp impdospec;
- expptr implb;
- expptr impub;
- expptr impstep;
- ftnint impdiff;
- ftnint implim;
- struct Chain *datalist;
- };
-
-
-/* Each of these components has a first field called tag. This union
- exists just for allocation simplicity */
-
-union Expression
- {
- field tag;
- struct Addrblock addrblock;
- struct Constblock constblock;
- struct Errorblock errorblock;
- struct Exprblock exprblock;
- struct Headblock headblock;
- struct Impldoblock impldoblock;
- struct Listblock listblock;
- struct Nameblock nameblock;
- struct Paramblock paramblock;
- struct Primblock primblock;
- } ;
-
-
-
-struct Dimblock
- {
- int ndim;
- expptr nelt; /* This is NULL if the array is unbounded */
- expptr baseoffset; /* a constant or local variable holding
- the offset in this procedure */
- expptr basexpr; /* expression for comuting the offset, if
- it's not constant. If this is
- non-null, the register named in
- baseoffset will get initialized to this
- value in the procedure's prolog */
- struct
- {
- expptr dimsize; /* constant or register holding the size
- of this dimension */
- expptr dimexpr; /* as above in basexpr, this is an
- expression for computing a variable
- dimension */
- } dims[1]; /* Dimblocks are allocated with enough
- space for this to become dims[ndim] */
- };
-
-
-/* Statement function identifier stack - this holds the name and value of
- the parameters in a statement function invocation. For example,
-
- f(x,y,z)=x+y+z
- .
- .
- y = f(1,2,3)
-
- generates a stack of depth 3, with <x 1>, <y 2>, <z 3> AT THE INVOCATION, NOT
- at the definition */
-
-struct Rplblock /* name replacement block */
- {
- struct Rplblock *rplnextp;
- Namep rplnp; /* Name of the formal parameter */
- expptr rplvp; /* Value of the actual parameter */
- expptr rplxp; /* Initialization of temporary variable,
- if required; else null */
- int rpltag; /* Tag on the value of the actual param */
- };
-
-
-
-/* Equivalence block */
-
-struct Equivblock
- {
- struct Eqvchain *equivs; /* List (Eqvchain) of primblocks
- holding variable identifiers */
- flag eqvinit;
- long int eqvtop;
- long int eqvbottom;
- int eqvtype;
- } ;
-#define eqvleng eqvtop
-
-extern struct Equivblock *eqvclass;
-
-
-struct Eqvchain
- {
- struct Eqvchain *eqvnextp;
- union
- {
- struct Primblock *eqvlhs;
- Namep eqvname;
- } eqvitem;
- long int eqvoffset;
- } ;
-
-
-
-/* For allocation purposes only, and to keep lint quiet. In particular,
- don't count on the tag being able to tell you which structure is used */
-
-
-/* There is a tradition in Fortran that the compiler not generate the same
- bit pattern more than is necessary. This structure is used to do just
- that; if two integer constants have the same bit pattern, just generate
- it once. This could be expanded to optimize without regard to type, by
- removing the type check in putconst() */
-
-struct Literal
- {
- short littype;
- short litnum; /* numeric part of the assembler
- label for this constant value */
- int lituse; /* usage count */
- union {
- ftnint litival;
- double litdval[2];
- ftnint litival2[2]; /* length, nblanks for strings */
- } litval;
- char *cds[2];
- };
-
-extern struct Literal *litpool;
-extern int maxliterals, nliterals;
-extern char Letters[];
-#define letter(x) Letters[x]
-
-struct Dims { expptr lb, ub; };
-
-
-/* popular functions with non integer return values */
-
-
-int *ckalloc();
-char *varstr(), *nounder(), *addunder();
-char *copyn(), *copys();
-chainp hookup(), mkchain(), revchain();
-ftnint convci();
-char *convic();
-char *setdoto();
-double convcd();
-Namep mkname();
-struct Labelblock *mklabel(), *execlab();
-Extsym *mkext(), *newentry();
-expptr addrof(), call1(), call2(), call3(), call4();
-Addrp builtin(), mktmp(), mktmp0(), mktmpn(), autovar();
-Addrp mkplace(), mkaddr(), putconst(), memversion();
-expptr mkprim(), mklhs(), mkexpr(), mkconv(), mkfunct(), fixexpr(), fixtype();
-expptr errnode(), mkaddcon(), mkintcon(), putcxop();
-tagptr cpexpr();
-ftnint lmin(), lmax(), iarrlen();
-char *dbconst(), *flconst();
-
-void puteq (), putex1 ();
-expptr putx (), putsteq (), putassign ();
-
-extern int forcedouble; /* force real functions to double */
-extern int doin_setbound; /* special handling for array bounds */
-extern int Ansi;
-extern char *cds(), *cpstring(), *dtos(), *string_num();
-extern char *c_type_decl();
-extern char hextoi_tab[];
-#define hextoi(x) hextoi_tab[(x) & 0xff]
-extern char *casttypes[], *ftn_types[], *protorettypes[], *usedcasts[];
-extern int Castargs, infertypes;
-extern FILE *protofile;
-extern void exit(), inferdcl(), protowrite(), save_argtypes();
-extern char binread[], binwrite[], textread[], textwrite[];
-extern char *ei_first, *ei_last, *ei_next;
-extern char *wh_first, *wh_last, *wh_next;
-extern void putwhile();
-extern char *halign;
-extern flag keepsubs;
-#ifdef TYQUAD
-extern flag use_tyquad;
-#endif
-extern int n_keywords, n_st_fields;
-extern char *c_keywords[], *st_fields[];
OpenPOWER on IntegriCloud