13#include "../tcl-compat.h"
29 Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
30 "\" option ?arg arg ...?",
NULL);
35 Tcl_AppendResult(interp,
"edge \"", argv[0],
"\" not found",
NULL);
40 if (
streq(
"delete", argv[1])) {
44 }
else if (
streq(
"listattributes", argv[1])) {
48 }
else if (
streq(
"listnodes", argv[1])) {
53 }
else if (
streq(
"queryattributes", argv[1])) {
54 for (i = 2; i < argc; i++) {
56 if (Tcl_SplitList(interp, argv[i], &argc2, &argv2) != TCL_OK)
58 for (
Tcl_Size j = 0; j < argc2; j++) {
59 char *arg = strdup(argv2[j]);
61 Tcl_Free((
char *)argv2);
65 Tcl_AppendElement(interp,
agxget(e, a));
67 Tcl_AppendResult(interp,
"no attribute named \"", arg,
"\"",
NULL);
69 Tcl_Free((
char *)argv2);
74 Tcl_Free((
char *)argv2);
78 }
else if (
streq(
"queryattributevalues", argv[1])) {
79 for (i = 2; i < argc; i++) {
81 if (Tcl_SplitList(interp, argv[i], &argc2, &argv2) != TCL_OK)
83 for (
Tcl_Size j = 0; j < argc2; j++) {
84 char *arg = strdup(argv2[j]);
86 Tcl_Free((
char *)argv2);
90 Tcl_AppendElement(interp, arg);
91 Tcl_AppendElement(interp,
agxget(e, a));
93 Tcl_AppendResult(interp,
"no attribute named \"", arg,
"\"",
NULL);
95 Tcl_Free((
char *)argv2);
100 Tcl_Free((
char *)argv2);
104 }
else if (
streq(
"setattributes", argv[1])) {
107 if (Tcl_SplitList(interp, argv[2], &argc2, &argv2) != TCL_OK)
109 if (argc2 == 0 || argc2 % 2 != 0) {
110 Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
111 "\" setattributes attributename attributevalue "
112 "?attributename attributevalue? ?...?",
114 Tcl_Free((
char *)argv2);
120 Tcl_Free((
char *)argv2);
122 if (argc < 4 || argc % 2 != 0) {
123 Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
124 "\" setattributes attributename attributevalue "
125 "?attributename attributevalue? ?...?",
133 }
else if (
streq(
"showname", argv[1])) {
139 Tcl_AppendResult(interp,
"bad option \"", argv[1],
"\": must be one of:",
140 "\n\tdelete, listattributes, listnodes,",
141 "\n\tueryattributes, queryattributevalues,",
142 "\n\tsetattributes, showname",
NULL);
147int edgecmd(ClientData clientData, Tcl_Interp *interp,
int argc,
148 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 tcldot_argv_free(Tcl_Size argc, char *argv[])
free the strings pointed to by 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)
char ** tcldot_argv_dup(Tcl_Size argc, const char *argv[])
duplicate the strings pointed to by argv as non-const strings
void setedgeattributes(Agraph_t *g, Agedge_t *e, char *argv[], Tcl_Size argc)