/* This software may only be used by you under license from AT&T Corp. ("AT&T"). A copy of AT&T's Source Code Agreement is available at AT&T's Internet website having the URL: If you received this software without first entering into a license with AT&T, you have an infringing copy of this software and cannot use it without violating AT&T's intellectual property rights. */ #pragma prototyped #ifndef _GRAPH_H #define _GRAPH_H 1 #if _PACKAGE_ast #include #else #include #include #endif #include #include typedef struct Agraph_t Agraph_t; typedef struct Agnode_t Agnode_t; typedef struct Agedge_t Agedge_t; typedef struct Agdict_t Agdict_t; typedef struct Agsym_t Agsym_t; typedef struct Agdata_t Agdata_t; typedef struct Agproto_t Agproto_t; typedef char * (*gets_f)(char *ubuf, int n, FILE *fp); #define AGFLAG_DIRECTED (1<<0) #define AGFLAG_STRICT (1<<1) #define AGFLAG_METAGRAPH (1<<2) #define AGRAPH 0 #define AGRAPHSTRICT (AGRAPH | AGFLAG_STRICT) #define AGDIGRAPH AGFLAG_DIRECTED #define AGDIGRAPHSTRICT (AGDIGRAPH | AGFLAG_STRICT) #define AGMETAGRAPH (AGFLAG_DIRECTED | AGFLAG_STRICT | AGFLAG_METAGRAPH) #define AG_IS_DIRECTED(g) ((g)->kind & AGFLAG_DIRECTED) #define AG_IS_STRICT(g) ((g)->kind & AGFLAG_STRICT) #define AG_IS_METAGRAPH(g) ((g)->kind & AGFLAG_METAGRAPH) #define aginit() aginitlib(sizeof(Agraph_t),sizeof(Agnode_t),sizeof(Agedge_t)) struct Agraph_t { int tag : 4; int kind : 4; int handle: 24; char **attr; char *name; Agdata_t *univ; Dict_t *nodes,*inedges,*outedges; Agraph_t *root; Agnode_t *meta_node; Agproto_t *proto; Agraphinfo_t u; }; struct Agnode_t { int tag : 4; int pad : 4; int handle: 24; char **attr; char *name; int id; Agraph_t *graph; Agnodeinfo_t u; }; struct Agedge_t { int tag : 4; int printkey : 4; int handle: 24; char **attr; Agnode_t *head,*tail; int id; Agedgeinfo_t u; }; struct Agdata_t { /* for main graph */ Dict_t *node_dict; Agdict_t *nodeattr; Agdict_t *edgeattr; Agdict_t *globattr; int max_node_id, max_edge_id; }; struct Agsym_t { char *name,*value; int index; unsigned char printed; }; struct Agdict_t { char *name; Dict_t *dict; Agsym_t **list; }; struct Agproto_t { Agnode_t *n; Agedge_t *e; Agproto_t *prev; }; #if _PACKAGE_ast _BEGIN_EXTERNS_ /* public data */ #if _BLD_graph && defined(__EXPORT__) #define extern __EXPORT__ #endif #if !_BLD_graph && defined(__IMPORT__) #define extern __IMPORT__ #endif #endif extern char *agstrcanon(char *, char *); extern char *agget(void*, char *); extern char *agxget(void*, int); extern int agset(void*, char *, char *); extern int agxset(void*, int, char *); extern int agindex(void*, char *); extern void aginitlib(int, int, int); extern Agraph_t *agopen(char *, int); extern Agraph_t *agsubg(Agraph_t *, char *); extern Agraph_t *agfindsubg(Agraph_t *, char *); extern void agclose(Agraph_t *); extern void agoverride(int); extern Agraph_t *agread(FILE *); extern Agraph_t *agread_usergets(FILE *, gets_f); extern void agreadline(int); extern void agsetfile(char*); extern Agraph_t *agmemread(char *); extern int agwrite(Agraph_t *, FILE *); extern int agerrors(void); extern Agraph_t *agprotograph(); extern Agraph_t *agusergraph(Agnode_t *); extern int agnnodes(Agraph_t *); extern int agnedges(Agraph_t *); extern void aginsert(Agraph_t *, void*); extern void agdelete(Agraph_t *, void*); extern int agcontains(Agraph_t *, void*); extern Agnode_t *agnode(Agraph_t *, char *); extern Agsym_t *agnodeattr(Agraph_t *, char *, char *); extern Agnode_t *agfindnode(Agraph_t *, char *); extern Agnode_t *agfstnode(Agraph_t *); extern Agnode_t *agnxtnode(Agraph_t *, Agnode_t *); extern Agedge_t *agedge(Agraph_t *, Agnode_t *, Agnode_t *); extern Agsym_t *agedgeattr(Agraph_t *, char *, char *); extern Agedge_t *agfindedge(Agraph_t *, Agnode_t *, Agnode_t *); extern Agedge_t *agfstedge(Agraph_t *, Agnode_t *); extern Agedge_t *agnxtedge(Agraph_t *, Agedge_t *, Agnode_t *); extern Agedge_t *agfstin(Agraph_t *, Agnode_t *); extern Agedge_t *agnxtin(Agraph_t *, Agedge_t *); extern Agedge_t *agfstout(Agraph_t *, Agnode_t *); extern Agedge_t *agnxtout(Agraph_t *, Agedge_t *); extern Agsym_t *agraphattr(Agraph_t *, char *, char *); extern Agsym_t *agnodeattr(Agraph_t *, char *, char *); extern Agsym_t *agedgeattr(Agraph_t *, char *, char *); extern Agsym_t *agfindattr(void*, char *); typedef enum {AGWARN, AGERR, AGMAX, AGPREV} agerrlevel_t; extern agerrlevel_t agerrno; extern void agseterr (agerrlevel_t); extern char* aglasterr (); extern int agerr (agerrlevel_t level, char* fmt, ...); #undef extern #if _PACKAGE_ast _END_EXTERNS_ #endif #endif /* _GRAPH_H */