File: libgraph.h

package info (click to toggle)
graphviz 1.7.16-2
  • links: PTS
  • area: non-free
  • in suites: woody
  • size: 11,124 kB
  • ctags: 12,650
  • sloc: ansic: 131,002; sh: 7,483; makefile: 1,954; tcl: 1,760; yacc: 1,758; perl: 253; awk: 150; lex: 96
file content (151 lines) | stat: -rw-r--r-- 3,929 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*
    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:
    <http://www.research.att.com/sw/tools/graphviz/license/source.html>
    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 _LIBGRAPH_H
#define _LIBGRAPH_H 1
#ifndef _BLD_graph
#define _BLD_graph 1
#endif

#if _PACKAGE_ast
#include    <ast.h>
#else
#include <string.h>
#include <stdlib.h>
#ifndef MSWIN32
#include <unistd.h>
#endif
#endif
#include <ctype.h>


#ifndef EXTERN
#define EXTERN extern
#endif
#ifndef uchar
#define uchar	unsigned char
#endif

#ifndef NIL
#define NIL(t)	((t)0)
#endif

typedef struct Agraphinfo_t {char notused;} Agraphinfo_t;
typedef struct Agnodeinfo_t {char notused;} Agnodeinfo_t;
typedef struct Agedgeinfo_t {char notused;} Agedgeinfo_t;

#include "graph.h"

#ifdef offsetof
#undef offsetof
#endif
#define offsetof(typ,fld)  ((int)(&(((typ*)0)->fld)))

#ifndef NOT
#define NOT(v)		(!(v))
#endif
#ifndef FALSE
#define	FALSE		0
#endif
#ifndef TRUE
#define TRUE		NOT(FALSE)
#endif
#define NEW(t)		 (t*)calloc(1,sizeof(t))
#define N_NEW(n,t)	 (t*)calloc((n),sizeof(t))
#define ALLOC(size,ptr,type) (ptr? (type*)realloc(ptr,(size)*sizeof(type)):(type*)malloc((size)*sizeof(type)))
#define MIN(a,b)	((a)<(b)?(a):(b))
#define MAX(a,b)	((a)>(b)?(a):(b))
#define SMALLBUF	128

#define	NOPRINT		0
#define MULTIPLE    1
#define MUSTPRINT	2

#define ISEMPTYSTR(s) 	(((s) == NULL) || (*(s) == '\0'))
#define NULL_FN(t) 		(t(*)())0
#define ZFREE(p)		if (p) free(p);

#define	TAG_NODE			1
#define	TAG_EDGE			2
#define	TAG_GRAPH			3
#define TAG_OF(p)			(((Agraph_t*)(p))->tag)

#define AGFLAG_STRICT		(1<<1)
#define AGFLAG_METAGRAPH	(1<<2)
#define METAGRAPH			(AGFLAG_DIRECTED | AGFLAG_STRICT | AGFLAG_METAGRAPH)

#define	KEYX				0
#define KEY_ID				"key"
#define	TAILX				1
#define TAIL_ID				"tailport"
#define HEADX				2
#define HEAD_ID				"headport"

EXTERN struct AG_s {
	int			graph_nbytes,node_nbytes,edge_nbytes;
	Agraph_t	*proto_g,*parsed_g;
	char		*edge_op;
	char		*linebuf;
	short		syntax_errors;
	uchar		accepting_state,init_called;
} AG;

/* follow structs used in graph parser */
typedef struct objport_t {
	void			*obj;
	char			*port;
} objport_t;

typedef struct objlist_t {
	objport_t			data;
	struct objlist_t	*link;
} objlist_t;

typedef struct objstack_t {
	Agraph_t			*subg;
	objlist_t        	*list,*last;
	int			in_edge_stmt;
	struct objstack_t	*link;
} objstack_t;

Agdict_t	*agdictof(void*);
Agnode_t	*agidnode(Agraph_t	*,	int);
Agdict_t	*agNEWdict(char	*);
Agedge_t	*agNEWedge(Agraph_t	*,	Agnode_t	*,	Agnode_t	*,	Agedge_t	*);
Agnode_t	*agNEWnode(Agraph_t	*,	char	*,	Agnode_t	*);
Agsym_t		*agNEWsym(Agdict_t	*,	char	*,	char	*);
int			agcmpid(Dt_t	*,	int	*,	int	*,	Dtdisc_t	*);
int			agcmpin(Dt_t	*,	Agedge_t	*,	Agedge_t	*,	Dtdisc_t	*);
int			agcmpout(Dt_t	*,	Agedge_t	*,	Agedge_t	*,	Dtdisc_t	*);
void		agcopydict(Agdict_t	*,	Agdict_t	*);
void		agDELedge(Agraph_t	*,	Agedge_t	*);
void		agDELnode(Agraph_t	*,	Agnode_t	*);
void		agerror(char	*,	... );
void		agFREEdict(Agraph_t	*,	Agdict_t	*);
void		agFREEedge(Agedge_t	*);
void		agFREEnode(Agnode_t	*);
void		aginitlib(int,	int,	int);
void		agINSedge(Agraph_t	*,	Agedge_t	*);
void		agINSgraph(Agraph_t	*,	Agraph_t	*);
void		agINSnode(Agraph_t	*,	Agnode_t	*);
int			aglex(void);
void		aglexinit(FILE	*, gets_f mygets);
int 		agparse(void);
void		agpopproto(Agraph_t	*);
void		agpushproto(Agraph_t	*);
char 		*agstrdup(char  *);
void		agstrfree(char	*);
int			agtoken(char	*);
void		agwredge(Agraph_t	*,	FILE	*,	Agedge_t	*,	int);
void		agwrnode(Agraph_t	*,	FILE	*,	Agnode_t	*,	int,	int);
extern Dtdisc_t agNamedisc,agNodedisc,agOutdisc,agIndisc,agEdgedisc;

#endif