#ifndef GDEFS_H
#define GDEFS_H

/* generated by mkdefs; do not edit */

#define Y(i)    (1<<(i))

#define V       0x4      /* NODE         */
#define E       0x5      /* EDGE         */
#define G       0x6      /* GRAPH        */
#define O       0x7      /* OBJECT       */
#define TV      0x8      /* TV_          */
#define YALL    (Y(V)|Y(E)|Y(G))

#define	V_this	    1
#define	V_thisg	    2
#define	V_nextg	    3
#define	V_targt	    4
#define	V_outgraph	    5
#define	V_tgtname	    6
#define	V_infname	    7
#define	V_travroot	    8
#define	V_travnext	    9
#define	V_travedge	   10
#define	V_travtype	   11
#define	V_ARGC	   12
#define	M_degree	   13
#define	M_X	   14
#define	M_Y	   15
#define	M_head	   16
#define	M_tail	   17
#define	M_name	   18
#define	M_indegree	   19
#define	M_outdegree	   20
#define	M_root	   21
#define	M_parent	   22
#define	M_n_edges	   23
#define	M_n_nodes	   24
#define	M_directed	   25
#define	M_strict	   26
#define	T_node	   27
#define	T_edge	   28
#define	T_graph	   29
#define	T_obj	   30
#define	T_tvtyp	   31
#define	A_ARGV	   32
#define	F_graph	   33
#define	F_subg	   34
#define	F_issubg	   35
#define	F_fstsubg	   36
#define	F_nxtsubg	   37
#define	F_node	   38
#define	F_addnode	   39
#define	F_fstnode	   40
#define	F_nxtnode	   41
#define	F_nxtnodesg	   42
#define	F_isnode	   43
#define	F_issubnode	   44
#define	F_indegree	   45
#define	F_outdegree	   46
#define	F_degree	   47
#define	F_isin	   48
#define	F_edge	   49
#define	F_edgesg	   50
#define	F_addedge	   51
#define	F_opp	   52
#define	F_fstout	   53
#define	F_nxtout	   54
#define	F_fstin	   55
#define	F_nxtin	   56
#define	F_fstedge	   57
#define	F_nxtedge	   58
#define	F_fstoutsg	   59
#define	F_nxtoutsg	   60
#define	F_fstinsg	   61
#define	F_nxtinsg	   62
#define	F_fstedgesg	   63
#define	F_nxtedgesg	   64
#define	F_compof	   65
#define	F_kindof	   66
#define	F_index	   67
#define	F_rindex	   68
#define	F_isedge	   69
#define	F_isedgesg	   70
#define	F_issubedge	   71
#define	F_length	   72
#define	F_match	   73
#define	F_write	   74
#define	F_writeg	   75
#define	F_readg	   76
#define	F_fwriteg	   77
#define	F_freadg	   78
#define	F_openf	   79
#define	F_closef	   80
#define	F_readl	   81
#define	F_induce	   82
#define	F_isdirect	   83
#define	F_isstrict	   84
#define	F_delete	   85
#define	F_clone	   86
#define	F_cloneG	   87
#define	F_copy	   88
#define	F_copya	   89
#define	F_lock	   90
#define	F_nnodes	   91
#define	F_nedges	   92
#define	F_sqrt	   93
#define	F_cos	   94
#define	F_sin	   95
#define	F_atan2	   96
#define	F_exp	   97
#define	F_pow	   98
#define	F_log	   99
#define	F_min	  100
#define	F_max	  101
#define	F_sys	  102
#define	F_xof	  103
#define	F_yof	  104
#define	F_llof	  105
#define	F_urof	  106
#define	F_html	  107
#define	F_ishtml	  108
#define	F_canon	  109
#define	F_get	  110
#define	F_set	  111
#define	F_dget	  112
#define	F_dset	  113
#define	F_hasattr	  114
#define	F_isattr	  115
#define	F_fstattr	  116
#define	F_nxtattr	  117
#define	F_tolower	  118
#define	F_toupper	  119
#define	F_strcmp	  120
#define	F_atoi	  121
#define	F_atof	  122
#define	F_colorx	  123
#define	F_call	  124
#define	C_flat	  125
#define	C_ne	  126
#define	C_en	  127
#define	C_bfs	  128
#define	C_dfs	  129
#define	C_fwd	  130
#define	C_rev	  131
#define	C_postdfs	  132
#define	C_postfwd	  133
#define	C_postrev	  134
#define	C_prepostdfs	  135
#define	C_prepostfwd	  136
#define	C_prepostrev	  137
#define	C_null	  138

#define LAST_V 12
#define LAST_M 26
#define MINNAME 1
#define MAXNAME 138

static Exid_t symbols[] = {
	EX_ID ( "$", ID, V_this, T_obj, 0),
	EX_ID ( "$G", ID, V_thisg, T_graph, 0),
	EX_ID ( "$NG", ID, V_nextg, T_graph, 0),
	EX_ID ( "$T", ID, V_targt, T_graph, 0),
	EX_ID ( "$O", ID, V_outgraph, T_graph, 0),
	EX_ID ( "$tgtname", ID, V_tgtname, STRING, 0),
	EX_ID ( "$F", ID, V_infname, STRING, 0),
	EX_ID ( "$tvroot", ID, V_travroot, T_node, 0),
	EX_ID ( "$tvnext", ID, V_travnext, T_node, 0),
	EX_ID ( "$tvedge", ID, V_travedge, T_edge, 0),
	EX_ID ( "$tvtype", ID, V_travtype, T_tvtyp, 0),
	EX_ID ( "ARGC", ID, V_ARGC, INTEGER, 0),
	EX_ID ( "degree", ID, M_degree, INTEGER, 0),
	EX_ID ( "X", ID, M_X, FLOATING, 0),
	EX_ID ( "Y", ID, M_Y, FLOATING, 0),
	EX_ID ( "head", ID, M_head, T_node, 0),
	EX_ID ( "tail", ID, M_tail, T_node, 0),
	EX_ID ( "name", ID, M_name, STRING, 0),
	EX_ID ( "indegree", ID, M_indegree, INTEGER, 0),
	EX_ID ( "outdegree", ID, M_outdegree, INTEGER, 0),
	EX_ID ( "root", ID, M_root, T_graph, 0),
	EX_ID ( "parent", ID, M_parent, T_graph, 0),
	EX_ID ( "n_edges", ID, M_n_edges, INTEGER, 0),
	EX_ID ( "n_nodes", ID, M_n_nodes, INTEGER, 0),
	EX_ID ( "directed", ID, M_directed, INTEGER, 0),
	EX_ID ( "strict", ID, M_strict, INTEGER, 0),
	EX_ID ( "node_t", DECLARE, T_node, T_node, 0),
	EX_ID ( "edge_t", DECLARE, T_edge, T_edge, 0),
	EX_ID ( "graph_t", DECLARE, T_graph, T_graph, 0),
	EX_ID ( "obj_t", DECLARE, T_obj, T_obj, 0),
	EX_ID ( "tvtype_t", DECLARE, T_tvtyp, T_tvtyp, 0),
	EX_ID ( "ARGV", ARRAY, A_ARGV, S|A(1,I), 0),
	EX_ID ( "graph", FUNCTION, F_graph, G|A(1,S)|A(2,S), 0),
	EX_ID ( "subg", FUNCTION, F_subg, G|A(1,G)|A(2,S), 0),
	EX_ID ( "isSubg", FUNCTION, F_issubg, G|A(1,G)|A(2,S), 0),
	EX_ID ( "fstsubg", FUNCTION, F_fstsubg, G|A(1,G), 0),
	EX_ID ( "nxtsubg", FUNCTION, F_nxtsubg, G|A(1,G), 0),
	EX_ID ( "node", FUNCTION, F_node, V|A(1,G)|A(2,S), 0),
	EX_ID ( "subnode", FUNCTION, F_addnode, V|A(1,G)|A(2,V), 0),
	EX_ID ( "fstnode", FUNCTION, F_fstnode, V|A(1,G), 0),
	EX_ID ( "nxtnode", FUNCTION, F_nxtnode, V|A(1,V), 0),
	EX_ID ( "nxtnode_sg", FUNCTION, F_nxtnodesg, V|A(1,G)|A(2,V), 0),
	EX_ID ( "isNode", FUNCTION, F_isnode, V|A(1,G)|A(2,S), 0),
	EX_ID ( "isSubnode", FUNCTION, F_issubnode, I|A(1,G)|A(2,V), 0),
	EX_ID ( "indegreeOf", FUNCTION, F_indegree, I|A(1,G)|A(2,V), 0),
	EX_ID ( "outdegreeOf", FUNCTION, F_outdegree, I|A(1,G)|A(2,V), 0),
	EX_ID ( "degreeOf", FUNCTION, F_degree, I|A(1,G)|A(2,V), 0),
	EX_ID ( "isIn", FUNCTION, F_isin, I|A(1,G)|A(2,O), 0),
	EX_ID ( "edge", FUNCTION, F_edge, E|A(1,V)|A(2,V)|A(3,S), 0),
	EX_ID ( "edge_sg", FUNCTION, F_edgesg, E|A(1,G)|A(2,V)|A(3,V)|A(4,S), 0),
	EX_ID ( "subedge", FUNCTION, F_addedge, E|A(1,G)|A(2,E), 0),
	EX_ID ( "opp", FUNCTION, F_opp, V|A(1,E)|A(2,V), 0),
	EX_ID ( "fstout", FUNCTION, F_fstout, E|A(1,V), 0),
	EX_ID ( "nxtout", FUNCTION, F_nxtout, E|A(1,E), 0),
	EX_ID ( "fstin", FUNCTION, F_fstin, E|A(1,V), 0),
	EX_ID ( "nxtin", FUNCTION, F_nxtin, E|A(1,E), 0),
	EX_ID ( "fstedge", FUNCTION, F_fstedge, E|A(1,V), 0),
	EX_ID ( "nxtedge", FUNCTION, F_nxtedge, E|A(1,E)|A(2,V), 0),
	EX_ID ( "fstout_sg", FUNCTION, F_fstoutsg, E|A(1,G)|A(2,V), 0),
	EX_ID ( "nxtout_sg", FUNCTION, F_nxtoutsg, E|A(1,G)|A(2,E), 0),
	EX_ID ( "fstin_sg", FUNCTION, F_fstinsg, E|A(1,G)|A(2,V), 0),
	EX_ID ( "nxtin_sg", FUNCTION, F_nxtinsg, E|A(1,G)|A(2,E), 0),
	EX_ID ( "fstedge_sg", FUNCTION, F_fstedgesg, E|A(1,G)|A(2,V), 0),
	EX_ID ( "nxtedge_sg", FUNCTION, F_nxtedgesg, E|A(1,G)|A(2,E)|A(3,V), 0),
	EX_ID ( "compOf", FUNCTION, F_compof, G|A(1,G)|A(2,V), 0),
	EX_ID ( "kindOf", FUNCTION, F_kindof, S|A(1,O), 0),
	EX_ID ( "index", FUNCTION, F_index, I|A(1,S)|A(2,S), 0),
	EX_ID ( "rindex", FUNCTION, F_rindex, I|A(1,S)|A(2,S), 0),
	EX_ID ( "isEdge", FUNCTION, F_isedge, E|A(1,V)|A(2,V)|A(3,S), 0),
	EX_ID ( "isEdge_sg", FUNCTION, F_isedgesg, E|A(1,G)|A(2,V)|A(3,V)|A(4,S), 0),
	EX_ID ( "isSubedge", FUNCTION, F_issubedge, I|A(1,G)|A(2,E), 0),
	EX_ID ( "length", FUNCTION, F_length, I|A(1,S), 0),
	EX_ID ( "match", FUNCTION, F_match, I|A(1,S)|A(2,S), 0),
	EX_ID ( "write", FUNCTION, F_write, I|A(1,G), 0),
	EX_ID ( "writeG", FUNCTION, F_writeg, I|A(1,G)|A(2,S), 0),
	EX_ID ( "readG", FUNCTION, F_readg, G|A(1,S), 0),
	EX_ID ( "fwriteG", FUNCTION, F_fwriteg, I|A(1,G)|A(2,I), 0),
	EX_ID ( "freadG", FUNCTION, F_freadg, G|A(1,I), 0),
	EX_ID ( "openF", FUNCTION, F_openf, I|A(1,S)|A(2,S), 0),
	EX_ID ( "closeF", FUNCTION, F_closef, I|A(1,I), 0),
	EX_ID ( "readL", FUNCTION, F_readl, S|A(1,I), 0),
	EX_ID ( "induce", FUNCTION, F_induce, I|A(1,G), 0),
	EX_ID ( "isDirect", FUNCTION, F_isdirect, I|A(1,G), 0),
	EX_ID ( "isStrict", FUNCTION, F_isstrict, I|A(1,G), 0),
	EX_ID ( "delete", FUNCTION, F_delete, I|A(1,G)|A(2,O), 0),
	EX_ID ( "clone", FUNCTION, F_clone, O|A(1,G)|A(2,O), 0),
	EX_ID ( "cloneG", FUNCTION, F_cloneG, G|A(1,G)|A(2,S), 0),
	EX_ID ( "copy", FUNCTION, F_copy, O|A(1,G)|A(2,O), 0),
	EX_ID ( "copyA", FUNCTION, F_copya, I|A(1,O)|A(2,O), 0),
	EX_ID ( "lock", FUNCTION, F_lock, I|A(1,G)|A(2,I), 0),
	EX_ID ( "nNodes", FUNCTION, F_nnodes, I|A(1,G), 0),
	EX_ID ( "nEdges", FUNCTION, F_nedges, I|A(1,G), 0),
	EX_ID ( "sqrt", FUNCTION, F_sqrt, F|A(1,F), 0),
	EX_ID ( "cos", FUNCTION, F_cos, F|A(1,F), 0),
	EX_ID ( "sin", FUNCTION, F_sin, F|A(1,F), 0),
	EX_ID ( "atan2", FUNCTION, F_atan2, F|A(1,F)|A(2,F), 0),
	EX_ID ( "exp", FUNCTION, F_exp, F|A(1,F), 0),
	EX_ID ( "pow", FUNCTION, F_pow, F|A(1,F)|A(2,F), 0),
	EX_ID ( "log", FUNCTION, F_log, F|A(1,F), 0),
	EX_ID ( "MIN", FUNCTION, F_min, F|A(1,F)|A(2,F), 0),
	EX_ID ( "MAX", FUNCTION, F_max, F|A(1,F)|A(2,F), 0),
	EX_ID ( "system", FUNCTION, F_sys, I|A(1,S), 0),
	EX_ID ( "xOf", FUNCTION, F_xof, S|A(1,S), 0),
	EX_ID ( "yOf", FUNCTION, F_yof, S|A(1,S), 0),
	EX_ID ( "llOf", FUNCTION, F_llof, S|A(1,S), 0),
	EX_ID ( "urOf", FUNCTION, F_urof, S|A(1,S), 0),
	EX_ID ( "html", FUNCTION, F_html, S|A(1,G)|A(2,S), 0),
	EX_ID ( "ishtml", FUNCTION, F_ishtml, I|A(1,S), 0),
	EX_ID ( "canon", FUNCTION, F_canon, S|A(1,S), 0),
	EX_ID ( "aget", FUNCTION, F_get, S|A(1,O)|A(2,S), 0),
	EX_ID ( "aset", FUNCTION, F_set, I|A(1,O)|A(2,S)|A(3,S), 0),
	EX_ID ( "getDflt", FUNCTION, F_dget, S|A(1,G)|A(2,S)|A(3,S), 0),
	EX_ID ( "setDflt", FUNCTION, F_dset, I|A(1,G)|A(2,S)|A(3,S)|A(4,S), 0),
	EX_ID ( "hasAttr", FUNCTION, F_hasattr, I|A(1,O)|A(2,S), 0),
	EX_ID ( "isAttr", FUNCTION, F_isattr, I|A(1,G)|A(2,S)|A(3,S), 0),
	EX_ID ( "fstAttr", FUNCTION, F_fstattr, S|A(1,G)|A(2,S), 0),
	EX_ID ( "nxtAttr", FUNCTION, F_nxtattr, S|A(1,G)|A(2,S)|A(3,S), 0),
	EX_ID ( "tolower", FUNCTION, F_tolower, S|A(1,S), 0),
	EX_ID ( "toupper", FUNCTION, F_toupper, S|A(1,S), 0),
	EX_ID ( "strcmp", FUNCTION, F_strcmp, I|A(1,S)|A(2,S), 0),
	EX_ID ( "atoi", FUNCTION, F_atoi, I|A(1,S), 0),
	EX_ID ( "atof", FUNCTION, F_atof, F|A(1,S), 0),
	EX_ID ( "colorx", FUNCTION, F_colorx, S|A(1,S)|A(2,S), 0),
	EX_ID ( "call", FUNCTION, F_call, I|A(1,S)|A(2,S), 0),
	EX_ID ( "TV_flat", CONSTANT, C_flat, T_tvtyp, 0),
	EX_ID ( "TV_ne", CONSTANT, C_ne, T_tvtyp, 0),
	EX_ID ( "TV_en", CONSTANT, C_en, T_tvtyp, 0),
	EX_ID ( "TV_bfs", CONSTANT, C_bfs, T_tvtyp, 0),
	EX_ID ( "TV_dfs", CONSTANT, C_dfs, T_tvtyp, 0),
	EX_ID ( "TV_fwd", CONSTANT, C_fwd, T_tvtyp, 0),
	EX_ID ( "TV_rev", CONSTANT, C_rev, T_tvtyp, 0),
	EX_ID ( "TV_postdfs", CONSTANT, C_postdfs, T_tvtyp, 0),
	EX_ID ( "TV_postfwd", CONSTANT, C_postfwd, T_tvtyp, 0),
	EX_ID ( "TV_postrev", CONSTANT, C_postrev, T_tvtyp, 0),
	EX_ID ( "TV_prepostdfs", CONSTANT, C_prepostdfs, T_tvtyp, 0),
	EX_ID ( "TV_prepostfwd", CONSTANT, C_prepostfwd, T_tvtyp, 0),
	EX_ID ( "TV_prepostrev", CONSTANT, C_prepostrev, T_tvtyp, 0),
	EX_ID ( "NULL", CONSTANT, C_null, T_obj, 0),
	EX_ID ( {0}, 0, 0, 0, 0)
};

static char* typenames[] = {
	"node_t",
	"edge_t",
	"graph_t",
	"obj_t",
	"tvtype_t",
};

#ifdef DEBUG
static char* gprnames[] = {
	"",
	"V_this",
	"V_thisg",
	"V_nextg",
	"V_targt",
	"V_outgraph",
	"V_tgtname",
	"V_infname",
	"V_travroot",
	"V_travnext",
	"V_travedge",
	"V_travtype",
	"V_ARGC",
	"M_degree",
	"M_X",
	"M_Y",
	"M_head",
	"M_tail",
	"M_name",
	"M_indegree",
	"M_outdegree",
	"M_root",
	"M_parent",
	"M_n_edges",
	"M_n_nodes",
	"M_directed",
	"M_strict",
	"T_node",
	"T_edge",
	"T_graph",
	"T_obj",
	"T_tvtyp",
	"A_ARGV",
	"F_graph",
	"F_subg",
	"F_issubg",
	"F_fstsubg",
	"F_nxtsubg",
	"F_node",
	"F_addnode",
	"F_fstnode",
	"F_nxtnode",
	"F_nxtnodesg",
	"F_isnode",
	"F_issubnode",
	"F_indegree",
	"F_outdegree",
	"F_degree",
	"F_isin",
	"F_edge",
	"F_edgesg",
	"F_addedge",
	"F_opp",
	"F_fstout",
	"F_nxtout",
	"F_fstin",
	"F_nxtin",
	"F_fstedge",
	"F_nxtedge",
	"F_fstoutsg",
	"F_nxtoutsg",
	"F_fstinsg",
	"F_nxtinsg",
	"F_fstedgesg",
	"F_nxtedgesg",
	"F_compof",
	"F_kindof",
	"F_index",
	"F_rindex",
	"F_isedge",
	"F_isedgesg",
	"F_issubedge",
	"F_length",
	"F_match",
	"F_write",
	"F_writeg",
	"F_readg",
	"F_fwriteg",
	"F_freadg",
	"F_openf",
	"F_closef",
	"F_readl",
	"F_induce",
	"F_isdirect",
	"F_isstrict",
	"F_delete",
	"F_clone",
	"F_cloneG",
	"F_copy",
	"F_copya",
	"F_lock",
	"F_nnodes",
	"F_nedges",
	"F_sqrt",
	"F_cos",
	"F_sin",
	"F_atan2",
	"F_exp",
	"F_pow",
	"F_log",
	"F_min",
	"F_max",
	"F_sys",
	"F_xof",
	"F_yof",
	"F_llof",
	"F_urof",
	"F_html",
	"F_ishtml",
	"F_canon",
	"F_get",
	"F_set",
	"F_dget",
	"F_dset",
	"F_hasattr",
	"F_isattr",
	"F_fstattr",
	"F_nxtattr",
	"F_tolower",
	"F_toupper",
	"F_strcmp",
	"F_atoi",
	"F_atof",
	"F_colorx",
	"F_call",
	"C_flat",
	"C_ne",
	"C_en",
	"C_bfs",
	"C_dfs",
	"C_fwd",
	"C_rev",
	"C_postdfs",
	"C_postfwd",
	"C_postrev",
	"C_prepostdfs",
	"C_prepostfwd",
	"C_prepostrev",
	"C_null",
};
#endif

typedef unsigned short tctype;

static tctype tchk[][2] = {
	{ 0, 0 },
	{ 0, YALL },
	{ 0, Y(G) },
	{ 0, Y(G) },
	{ 0, Y(G) },
	{ 0, Y(G) },
	{ 0, Y(S) },
	{ 0, Y(S) },
	{ 0, Y(V) },
	{ 0, Y(V) },
	{ 0, Y(E) },
	{ 0, Y(TV) },
	{ 0, Y(I) },
	{ Y(V), Y(I) },
	{ Y(V), Y(F) },
	{ Y(V), Y(F) },
	{ Y(E), Y(V) },
	{ Y(E), Y(V) },
	{ YALL, Y(S) },
	{ Y(V), Y(I) },
	{ Y(V), Y(I) },
	{ YALL, Y(G) },
	{ Y(G), Y(G) },
	{ Y(G), Y(I) },
	{ Y(G), Y(I) },
	{ Y(G), Y(I) },
	{ Y(G), Y(I) },
};

#endif
