#include <stdio.h>
#include <ctype.h>

#define SHELLCOM "/bin/sh"
typedef long int TIMETYPE;

#ifdef unix
/*  to install metering, add a statement like */
#define METERFILE "/usr/sif/make/Meter"
/* to turn metering on, set external variable meteron to 1 */
#endif

/* define FSTATIC to be static on systems with C compilers
   supporting file-static; otherwise define it to be null
*/
#define FSTATIC static

#define NO 0
#define YES 1

#define unequal strcmp
#define HASHSIZE 509
#define NLEFTS 40
#define NCHARS 500
#define NINTS  250
#define INMAX 1500
#define OUTMAX 2500
#define QBUFMAX 1500

#define ALLDEPS  1
#define SOMEDEPS 2

#define META 01
#define TERMINAL 02
extern char funny[128];


#define ALLOC(x) (struct x *) ckalloc(sizeof(struct x))

extern int sigivalue;
extern int sigqvalue;
extern int waitpid;
extern int dbgflag;
extern int prtrflag;
extern int silflag;
extern int noexflag;
extern int keepgoing;
extern int noruleflag;
extern int touchflag;
extern int questflag;
extern int ndocoms;
extern int ignerr;
extern int okdel;
extern int inarglist;
extern char *prompt;
extern char junkname[ ];



struct nameblock
        {
        struct nameblock *nxtnameblock;
        char *namep;
        struct lineblock *linep;
        int done:3;
        int septype:3;
        TIMETYPE modtime;
        };

extern struct nameblock *mainname ;
extern struct nameblock *firstname;

struct lineblock
        {
        struct lineblock *nxtlineblock;
        struct depblock *depp;
        struct shblock *shp;
        };
extern struct lineblock *sufflist;

struct depblock
        {
        struct depblock *nxtdepblock;
        struct nameblock *depname;
        };

struct shblock
        {
        struct shblock *nxtshblock;
        char *shbp;
        };

struct varblock
        {
        struct varblock *nxtvarblock;
        char *varname;
        char *varval;
        int noreset:1;
        int used:1;
        };
extern struct varblock *firstvar;

struct pattern
        {
        struct pattern *nxtpattern;
        char *patval;
        };
extern struct pattern *firstpat;

struct opendir
        {
        struct opendir *nxtopendir;
        FILE * dirfc;
        char *dirn;
        };
extern struct opendir *firstod;


struct chain
        {
        struct chain *nextp;
        char *datap;
        };

char *copys(), *concat(), *subst(), *sprintf();
int *ckalloc();
struct nameblock *srchname(), *makename();
TIMETYPE exists();
