11#include "../tcl-compat.h"
27 Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
28 "\" option ?arg arg ...?",
NULL);
33 Tcl_AppendResult(interp,
"edge \"", argv[0],
"\" not found",
NULL);
38 if (
streq(
"delete", argv[1])) {
42 }
else if (
streq(
"listattributes", argv[1])) {
46 }
else if (
streq(
"listnodes", argv[1])) {
51 }
else if (
streq(
"queryattributes", argv[1])) {
52 for (i = 2; i < argc; i++) {
54 if (Tcl_SplitList(interp, argv[i], &argc2, &argv2) != TCL_OK)
56 for (
Tcl_Size j = 0; j < argc2; j++) {
57 char *arg = strdup(argv2[j]);
59 Tcl_Free((
char *)argv2);
63 Tcl_AppendElement(interp,
agxget(e, a));
65 Tcl_AppendResult(interp,
"no attribute named \"", arg,
"\"",
NULL);
67 Tcl_Free((
char *)argv2);
72 Tcl_Free((
char *)argv2);
76 }
else if (
streq(
"queryattributevalues", argv[1])) {
77 for (i = 2; i < argc; i++) {
79 if (Tcl_SplitList(interp, argv[i], &argc2, &argv2) != TCL_OK)
81 for (
Tcl_Size j = 0; j < argc2; j++) {
82 char *arg = strdup(argv2[j]);
84 Tcl_Free((
char *)argv2);
88 Tcl_AppendElement(interp, arg);
89 Tcl_AppendElement(interp,
agxget(e, a));
91 Tcl_AppendResult(interp,
"no attribute named \"", arg,
"\"",
NULL);
93 Tcl_Free((
char *)argv2);
98 Tcl_Free((
char *)argv2);
102 }
else if (
streq(
"setattributes", argv[1])) {
105 if (Tcl_SplitList(interp, argv[2], &argc2, &argv2) != TCL_OK)
107 if ((argc2 == 0) || (argc2 % 2)) {
108 Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
109 "\" setattributes attributename attributevalue "
110 "?attributename attributevalue? ?...?",
112 Tcl_Free((
char *)argv2);
118 Tcl_Free((
char *)argv2);
120 if ((argc < 4) || (argc % 2)) {
121 Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
122 "\" setattributes attributename attributevalue "
123 "?attributename attributevalue? ?...?",
131 }
else if (
streq(
"showname", argv[1])) {
137 Tcl_AppendResult(interp,
"bad option \"", argv[1],
"\": must be one of:",
138 "\n\tdelete, listattributes, listnodes,",
139 "\n\tueryattributes, queryattributevalues,",
140 "\n\tsetattributes, showname",
NULL);
145int edgecmd(ClientData clientData, Tcl_Interp *interp,
int argc,
146 const char *argv[]) {
char * agxget(void *obj, Agsym_t *sym)
#define agfindedgeattr(g, a)
int agisdirected(Agraph_t *g)
Agraph_t * agraphof(void *obj)
char * agnameof(void *)
returns a string descriptor for the object.
Agraph_t * agroot(void *obj)
static bool streq(const char *a, const char *b)
are a and b equal?
static int edgecmd_internal(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
int edgecmd(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
void deleteEdge(gctx_t *gctx, Agraph_t *g, Agedge_t *e)
char * obj2cmd(void *obj)
void listEdgeAttrs(Tcl_Interp *interp, Agraph_t *g)
Agedge_t * cmd2e(const char *cmd)
void setedgeattributes(Agraph_t *g, Agedge_t *e, char *argv[], Tcl_Size argc)
void tcldot_argv_free(int argc, char *argv[])
free the strings pointed to by argv
char ** tcldot_argv_dup(int argc, const char *argv[])
duplicate the strings pointed to by argv as non-const strings