⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mk.h

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 H
字号:
#include	<u.h>#include	<libc.h>#include	<bio.h>#include	<regexp.h>extern Biobuf bout;typedef struct Bufblock{	struct Bufblock *next;	char 		*start;	char 		*end;	char 		*current;} Bufblock;typedef struct Word{	char 		*s;	struct Word 	*next;} Word;typedef struct Envy{	char 		*name;	Word 		*values;} Envy;extern Envy *envy;typedef struct Rule{	char 		*target;	/* one target */	Word 		*tail;		/* constituents of targets */	char 		*recipe;	/* do it ! */	short 		attr;		/* attributes */	short 		line;		/* source line */	char 		*file;		/* source file */	Word 		*alltargets;	/* all the targets */	int 		rule;		/* rule number */	Reprog		*pat;		/* reg exp goo */	char		*prog;		/* to use in out of date */	struct Rule	*chain;		/* hashed per target */	struct Rule	*next;} Rule;extern Rule *rules, *metarules, *patrule;/*	Rule.attr	*/#define		META		0x0001#define		UNUSED		0x0002#define		UPD		0x0004#define		QUIET		0x0008#define		VIR		0x0010#define		REGEXP		0x0020#define		NOREC		0x0040#define		DEL		0x0080#define		NOVIRT		0x0100#define		NREGEXP		10typedef struct Arc{	short		flag;	struct Node	*n;	Rule		*r;	char		*stem;	char		*prog;	char		*match[NREGEXP];	struct Arc	*next;} Arc;	/* Arc.flag */#define		TOGO		1typedef struct Node{	char		*name;	long		time;	unsigned short	flags;	Arc		*prereqs;	struct Node	*next;		/* list for a rule */} Node;	/* Node.flags */#define		VIRTUAL		0x0001#define		CYCLE		0x0002#define		READY		0x0004#define		CANPRETEND	0x0008#define		PRETENDING	0x0010#define		NOTMADE		0x0020#define		BEINGMADE	0x0040#define		MADE		0x0080#define		MADESET(n,m)	n->flags = (n->flags&~(NOTMADE|BEINGMADE|MADE))|(m)#define		PROBABLE	0x0100#define		VACUOUS		0x0200#define		NORECIPE	0x0400#define		DELETE		0x0800#define		NOMINUSE	0x1000typedef struct Job{	Rule		*r;	/* master rule for job */	Node		*n;	/* list of node targets */	char		*stem;	char		**match;	Word		*p;	/* prerequistes */	Word		*np;	/* new prerequistes */	Word		*t;	/* targets */	Word		*at;	/* all targets */	int		nproc;	/* slot number */	struct Job	*next;} Job;extern Job *jobs;typedef struct Symtab{	short		space;	char		*name;	union{		void		*ptr;		uintptr	value;	} u;	struct Symtab	*next;} Symtab;enum {	S_VAR,		/* variable -> value */	S_TARGET,	/* target -> rule */	S_TIME,		/* file -> time */	S_PID,		/* pid -> products */	S_NODE,		/* target name -> node */	S_AGG,		/* aggregate -> time */	S_BITCH,	/* bitched about aggregate not there */	S_NOEXPORT,	/* var -> noexport */	S_OVERRIDE,	/* can't override */	S_OUTOFDATE,	/* n1\377n2 -> 2(outofdate) or 1(not outofdate) */	S_MAKEFILE,	/* target -> node */	S_MAKEVAR,	/* dumpable mk variable */	S_EXPORTED,	/* var -> current exported value */	S_BULKED,	/* we have bulked this dir */	S_WESET,	/* variable; we set in the mkfile */	S_INTERNAL,	/* an internal mk variable (e.g., stem, target) */};extern	int	debug;extern	int	nflag, tflag, iflag, kflag, aflag, mflag;extern	int	mkinline;extern	char	*infile;extern	int	nreps;extern	char	*explain;extern	char	*termchars;extern	char 	*shell;extern	char 	*shellname;extern	char 	*shflags;extern	int	IWS;#define	SYNERR(l)	(fprint(2, "mk: %s:%d: syntax error; ", infile, ((l)>=0)?(l):mkinline))#define	RERR(r)		(fprint(2, "mk: %s:%d: rule error; ", (r)->file, (r)->line))#define	NAMEBLOCK	1000#define	BIGBLOCK	20000#define	SEP(c)		(((c)==' ')||((c)=='\t')||((c)=='\n'))#define WORDCHR(r)	((r) > ' ' && !utfrune("!\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~", (r)))#define	DEBUG(x)	(debug&(x))#define		D_PARSE		0x01#define		D_GRAPH		0x02#define		D_EXEC		0x04#define	LSEEK(f,o,p)	seek(f,o,p)#define	PERCENT(ch)	(((ch) == '%') || ((ch) == '&'))#include	"fns.h"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -