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

📄 def.h

📁 早期freebsd实现
💻 H
字号:
/* pathalias -- by steve bellovin, as told to peter honeyman */#ifndef lint#ifdef MAINstatic char	*h_sccsid = "@(#)def.h	9.8 91/06/11";#endif /*MAIN*/#endif /*lint*/#include "config.h"#include STDIO_H#include CTYPE_Htypedef	long Cost;typedef struct node node;typedef struct link link;typedef struct dom dom;#ifdef lint#define vprintf fprintf#else /*!lint -- this gives null effect warning*//* because it's there ... */#define vprintf		!Vflag ? 0 : fprintf#endif /*lint*/#define NTRACE	16	/* can trace up to NTRACE hosts/links *//* flags for n_flag */#define ISPRIVATE  0x0001 /* invisible outside its definition file */#define NALIAS	   0x0002 /* heaped as an alias */#define ATSIGN	   0x0004 /* seen an at sign?  used for magic @/% rules */#define MAPPED	   0x0008 /* extracted from heap */#define	NDEAD	   0x0010 /* out links are dead */#define HASLEFT	   0x0020 /* has a left side net character */#define HASRIGHT   0x0040 /* route has a right side net character */#define	NNET	   0x0080 /* network pseudo-host */#define INDFS	   0x0100 /* used when removing net cycles (for -g) */#define DUMP	   0x0200 /* we have dumped this net's edges (for -g) */#define PRINTED	   0x0400 /* this host has been printed */#define NTERMINAL  0x0800 /* heaped as terminal edge (or alias thereto) */#define NREF	   0x1000 /* node has an "interesting" reference */#define ISADOMAIN(n)	 ((n)->n_name[0] == '.')#define ISANET(n)	 (((n)->n_flag & NNET) || ISADOMAIN(n))#define ALTEREGO(n1, n2) ((n1)->n_name == (n2)->n_name)#define DEADHOST(n)	 (((n)->n_flag & (NDEAD | NTERMINAL)) && !ISANET(n))#define DEADLINK(l)	 ((l)->l_flag & LDEAD)#define DEADNET(n)	 (((n)->n_flag & (NNET | NDEAD)) == (NNET | NDEAD))#define GATEWAYED(n)	 (DEADNET(n) || ISADOMAIN(n))#ifndef DEBUG/* * save some space in nodes -- there are > 10,000 allocated! */#define n_root un1.nu_root#define n_net un1.nu_net#define n_copy un1.nu_copy#define n_private un2.nu_priv#define n_parent  un2.nu_par/* WARNING: if > 2^16 nodes, type of n_tloc must change */struct node {	char	*n_name;	/* host name */	link	*n_link;	/* adjacency list */	Cost	n_cost;		/* cost to this host */	union {		node *nu_net;	/* others in this network (parsing) */		node *nu_root;	/* root of net cycle (graph dumping) */		node *nu_copy;	/* circular copy list (mapping) */	} un1;	union {		node *nu_priv;	/* other privates in this file (parsing) */		node *nu_par;	/* parent in shortest path tree (mapping) */	} un2;	unsigned short n_tloc;	/* back ptr to heap/hash table */	unsigned short n_flag;		/* see manifests above */};#endif /*DEBUG*/#define MILLION (1000L * 1000L)#define	DEFNET	'!'			/* default network operator */#define	DEFDIR	LLEFT			/* host on left is default */#define	DEFCOST	((Cost) 4000)		/* default cost of a link */#define	INF	((Cost) 100 * MILLION)	/* infinitely expensive link */#define DEFPENALTY ((Cost) 200)		/* default avoidance cost *//* data structure for adjacency list representation *//* flags for l_dir */#define NETDIR(l)	((l)->l_flag & LDIR)#define NETCHAR(l)	((l)->l_netop)#define LDIR	  0x0008	/* 0 for left, 1 for right */#define LRIGHT	  0x0000	/* user@host style */#define LLEFT	  0x0008	/* host!user style */#define LDEAD	  0x0010	/* this link is dead */#define LALIAS	  0x0020	/* this link is an alias */#define LTREE	  0x0040	/* member of shortest path tree */#define LGATEWAY  0x0080	/* this link is a gateway */#define LTERMINAL 0x0100	/* this link is terminal */#ifndef DEBUG/* * borrow a field for link/node tracing.  there's a shitload of * edges -- every word counts.  only so much squishing is possible: * alignment dictates that the size be a multiple of four. */#define l_next un.lu_next#define l_from un.lu_fromstruct link {	node	*l_to;		/* adjacent node */	Cost	l_cost;		/* edge cost */	union {		link *lu_next;	/* rest of adjacency list (not tracing) */		node *lu_from;	/* source node (tracing) */	} un;	short	l_flag;		/* right/left syntax, flags */	char	l_netop;	/* network operator */};#endif /*DEBUG*/#ifdef DEBUG/* * flattening out the unions makes it easier * to debug (when pi is unavailable). */struct node {	char	*n_name;	link	*n_link;	Cost	n_cost;	node	*n_net;	node	*n_root;	node	*n_copy;	node	*n_private;	node	*n_parent;	unsigned short n_tloc;	unsigned short n_flag;};struct link {	node	*l_to;	Cost	l_cost;	link	*l_next;	node	*l_from;	short	l_flag;	char	l_netop;};#endif /*DEBUG*//* doubly linked list for known and unknown domains */struct dom {	dom *next;	dom *prev;	char *name;};

⌨️ 快捷键说明

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