14int nodecmd(ClientData clientData, Tcl_Interp * interp,
16 int argc,
char *argv[]
18 int argc, Tcl_Obj * CONST objv[]
31 Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
" option ?arg arg ...?\"",
NULL);
36 Tcl_AppendResult(interp,
"node \"", argv[0],
"\" not found",
NULL);
41 if (strcmp(
"addedge", argv[1]) == 0) {
42 if ((argc < 3) || (!(argc % 2))) {
43 Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
" addedge head ?attributename attributevalue? ?...?\"",
NULL);
49 Tcl_AppendResult(interp,
"head node \"", argv[2],
"\" not found.",
NULL);
54 Tcl_AppendResult(interp,
"nodes ", argv[0],
" and ", argv[2],
" are not in the same graph.",
NULL);
62 }
else if (strcmp(
"delete", argv[1]) == 0) {
66 }
else if (strcmp(
"findedge", argv[1]) == 0) {
68 Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
" findedge headnodename\"",
NULL);
72 Tcl_AppendResult(interp,
"head node \"", argv[2],
"\" not found.",
NULL);
76 Tcl_AppendResult(interp,
"edge \"", argv[0],
" - ",
obj2cmd(
head),
"\" not found.",
NULL);
82 }
else if (strcmp(
"listattributes", argv[1]) == 0) {
86 }
else if (strcmp(
"listedges", argv[1]) == 0) {
88 Tcl_AppendElement(interp,
obj2cmd(e));
92 }
else if (strcmp(
"listinedges", argv[1]) == 0) {
94 Tcl_AppendElement(interp,
obj2cmd(e));
98 }
else if (strcmp(
"listoutedges", argv[1]) == 0) {
100 Tcl_AppendElement(interp,
obj2cmd(e));
104 }
else if (strcmp(
"queryattributes", argv[1]) == 0) {
105 for (i = 2; i < argc; i++) {
107 (interp, argv[i], &argc2,
108 (
CONST84 char ***) &argv2) != TCL_OK)
110 for (j = 0; j < argc2; j++) {
112 Tcl_AppendElement(interp,
agxget(n, a));
114 Tcl_AppendResult(interp,
"no attribute named \"", argv2[j],
"\"",
NULL);
118 Tcl_Free((
char *) argv2);
122 }
else if (strcmp(
"queryattributevalues", argv[1]) == 0) {
123 for (i = 2; i < argc; i++) {
125 (interp, argv[i], &argc2,
126 (
CONST84 char ***) &argv2) != TCL_OK)
128 for (j = 0; j < argc2; j++) {
130 Tcl_AppendElement(interp, argv2[j]);
131 Tcl_AppendElement(interp,
agxget(n, a));
133 Tcl_AppendResult(interp,
"no attribute named \"", argv2[j],
"\"",
NULL);
137 Tcl_Free((
char *) argv2);
141 }
else if (strcmp(
"setattributes", argv[1]) == 0) {
145 (interp, argv[2], &argc2,
146 (
CONST84 char ***) &argv2) != TCL_OK)
148 if ((argc2 == 0) || (argc2 % 2)) {
149 Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
150 "\" setattributes attributename attributevalue ?attributename attributevalue? ?...?",
152 Tcl_Free((
char *) argv2);
156 Tcl_Free((
char *) argv2);
158 if ((argc < 4) || (argc % 2)) {
159 Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
160 "\" setattributes attributename attributevalue ?attributename attributevalue? ?...?",
168 }
else if (strcmp(
"showname", argv[1]) == 0) {
169 Tcl_SetResult(interp,
agnameof(n), TCL_STATIC);
173 Tcl_AppendResult(interp,
"bad option \"", argv[1],
174 "\": must be one of:",
175 "\n\taddedge, listattributes, listedges, listinedges,",
176 "\n\tlistoutedges, queryattributes, queryattributevalues,",
177 "\n\tsetattributes, showname.",
NULL);
char * agxget(void *obj, Agsym_t *sym)
Agedge_t * agedge(Agraph_t *g, Agnode_t *t, Agnode_t *h, char *name, int createflag)
Agedge_t * agnxtin(Agraph_t *g, Agedge_t *e)
Agedge_t * agfstout(Agraph_t *g, Agnode_t *n)
#define agfindedge(g, t, h)
Agedge_t * agnxtedge(Agraph_t *g, Agedge_t *e, Agnode_t *n)
Agedge_t * agnxtout(Agraph_t *g, Agedge_t *e)
Agedge_t * agfstedge(Agraph_t *g, Agnode_t *n)
Agedge_t * agfstin(Agraph_t *g, Agnode_t *n)
#define agfindnodeattr(g, a)
Agraph_t * agraphof(void *obj)
char * agnameof(void *)
returns a string descriptor for the object.
Agraph_t * agroot(void *obj)
int nodecmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
void listNodeAttrs(Tcl_Interp *interp, Agraph_t *g)
void deleteNode(gctx_t *gctx, Agraph_t *g, Agnode_t *n)
char * obj2cmd(void *obj)
Agnode_t * cmd2n(char *cmd)
void setnodeattributes(Agraph_t *g, Agnode_t *n, char *argv[], int argc)
void setedgeattributes(Agraph_t *g, Agedge_t *e, char *argv[], int argc)