
#define	ERR		(-1)
#define	FALSE		0
#define	TRUE		1

#define	STRLEN		1024

#define	HASH_SIZE	8			/* 4,8,16,32... */
#define	HASH_MASK	(HASH_SIZE - 1)

#define	NOTIME		0
#define	NOFILE		1

#define	NEST_MAX	50
#define	ARG_MAX		32

#define	TAG_NOCHECK	000
#define	TAG_UPDATE	001
#define	TAG_DEFEXEC	002

#define	STRDUP(s)	strdup(s)
#define	MALLOC(n)	malloc(n)
#define	FREE(p)		free(p)

#ifdef	UNIX
#define	SYSTEM(f,s)	system(s)
#else
#define	SYSTEM(f,s)	execute(f,s)
#endif

typedef	struct	_EV {
	struct	_EV	*ev_next;
	char		*ev_para;
	char		ev_name[1];
} ENVPTR;

typedef	struct	_CD {
	struct	_CD	*cd_next;
	char		cd_exec[1];
} CMDPTR;

typedef	struct	_MK {
	struct	_MK	*mk_next;
	char		*mk_file;
} MAKPTR;

typedef	struct	_TG {
	struct	_TG	*tg_next;
	struct	_TG	*tg_list;
	MAKPTR		*tg_link;
	CMDPTR		*tg_cmds;
	int		tg_status;
	time_t		tg_time;
	char		tg_file[1];
} TAGPTR;

typedef	struct	_RS {
	struct	_RS	*sb_next;
	CMDPTR		*sb_cmds;
	char		*sb_dep;
} SUBPTR;

typedef	struct	_RL {
	struct	_RL	*rl_next;
	SUBPTR		*rl_link;
	int		rl_flag;
	char		rl_tag[1];
} RULPTR;

char	*get_env(char *name);
int	strlcmp(char *s, char *p);
char	*strlcpy(char *s, char *p);
char	*progname(char *prog);
int	getopt(int ac, char *av[], char *opt);
char	*wild_file(char *file);
int	execute(int ch, char *cmd);

#ifdef	LSIC
struct	find_t {
	char		reserved[21];
	char		attrib;
	unsigned	wr_time;
	unsigned	wr_date;
	long		size;
	char		name[13];
};

char	*strdup(char *str);
int	_dos_findfirst(char *file, int mod, struct find_t *dma);
int	_dos_findnext(struct find_t *dma);
#endif
