Graphviz 12.0.1~dev.20240716.0800
Loading...
Searching...
No Matches
tcldot.h
Go to the documentation of this file.
1/*************************************************************************
2 * Copyright (c) 2011 AT&T Intellectual Property
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * https://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors: Details at https://graphviz.org
9 *************************************************************************/
10
11
12/* avoid compiler warnings with template changes in Tcl8.4 */
13/* specifically just the change to Tcl_CmdProc */
14#define USE_NON_CONST
15#include <tcl.h>
16#include <common/render.h>
17#include <gvc/gvc.h>
18#include <gvc/gvio.h>
19#include "tclhandle.h"
20#include "../../plugin/core/tcl_context.h"
21
22#ifndef CONST84
23#define CONST84
24#endif
25
26/*
27 * ictx - one per tcl interpreter, may support multiple graph namespaces
28 */
29typedef struct {
30 Agdisc_t mydisc; /* must be first to allow casting mydisc to ictx */
32 uint64_t ctr; /* odd number counter for anon objects over all g's in interp */
33 Tcl_Interp *interp;
35} ictx_t;
36
37/*
38 * gctx - one for each graph in a tcl interp
39 */
40typedef struct {
41 Agraph_t *g; /* the graph */
43 uint64_t idx;
44} gctx_t;
45
46#ifdef HAVE_LIBGD
47extern void *GDHandleTable;
48extern int Gdtclft_Init(Tcl_Interp *);
49#endif
50
51extern int graphcmd(ClientData clientData, Tcl_Interp * interp,
52#ifndef TCLOBJ
53 int argc, char *argv[]
54#else
55 int argc, Tcl_Obj * CONST objv[]
56#endif
57 );
58extern int nodecmd(ClientData clientData, Tcl_Interp * interp,
59#ifndef TCLOBJ
60 int argc, char *argv[]
61#else
62 int argc, Tcl_Obj * CONST objv[]
63#endif
64 );
65extern int edgecmd(ClientData clientData, Tcl_Interp * interp,
66#ifndef TCLOBJ
67 int argc, char *argv[]
68#else
69 int argc, Tcl_Obj * CONST objv[]
70#endif
71 );
72
73extern int myiodisc_afread(void* channel, char *ubuf, int n);
74extern int myiodisc_memiofread(void *chan, char *buf, int bufsize);
75extern Agiddisc_t myiddisc;
76extern Agraph_t *agread_usergets (ictx_t *ictx, FILE * fp, int (*usergets)(void *chan, char *buf, int bufsize));
77extern Agraph_t *cmd2g(char *cmd);
78extern Agnode_t *cmd2n(char *cmd);
79extern Agedge_t *cmd2e(char *cmd);
80extern char *obj2cmd(void *obj);
81extern void deleteEdge(gctx_t *gctx, Agraph_t * g, Agedge_t * e);
82extern void deleteNode(gctx_t *gctx, Agraph_t * g, Agnode_t * n);
83extern void deleteGraph(gctx_t *gctx, Agraph_t * g);
84extern void listGraphAttrs (Tcl_Interp * interp, Agraph_t* g);
85extern void listNodeAttrs (Tcl_Interp * interp, Agraph_t* g);
86extern void listEdgeAttrs (Tcl_Interp * interp, Agraph_t* g);
87
88extern void setgraphattributes(Agraph_t * g, char *argv[], int argc);
89extern void setedgeattributes(Agraph_t * g, Agedge_t * e, char *argv[], int argc);
90extern void setnodeattributes(Agraph_t * g, Agnode_t * n, char *argv[], int argc);
91
92extern size_t Tcldot_string_writer(GVJ_t *job, const char *s, size_t len);
93extern size_t Tcldot_channel_writer(GVJ_t *job, const char *s, size_t len);
94
95extern void tcldot_layout(GVC_t *gvc, Agraph_t * g, char *engine);
static char * cmd
Definition acyclic.c:40
Tcl_AppInitProc Gdtclft_Init
Definition gdtclft.c:36
static double len(glCompPoint p)
Definition glutils.c:150
Graphviz context library.
static gvloadimage_engine_t engine
GVC_t * gvc
Definition htmlparse.c:99
user's discipline
Definition cgraph.h:337
object ID allocator discipline
Definition cgraph.h:316
IO services.
Definition cgraph.h:327
graph or subgraph
Definition cgraph.h:425
Definition gvcint.h:80
Agraph_t * g
Definition tcldot.h:41
ictx_t * ictx
Definition tcldot.h:42
uint64_t idx
Definition tcldot.h:43
Tcl_Interp * interp
Definition tcldot.h:33
uint64_t ctr
Definition tcldot.h:32
Agdisc_t mydisc
Definition tcldot.h:30
Agiodisc_t myioDisc
Definition tcldot.h:31
GVC_t * gvc
Definition tcldot.h:34
void setgraphattributes(Agraph_t *g, char *argv[], int argc)
void listNodeAttrs(Tcl_Interp *interp, Agraph_t *g)
Agraph_t * cmd2g(char *cmd)
Definition tcldot-util.c:40
void listGraphAttrs(Tcl_Interp *interp, Agraph_t *g)
void deleteEdge(gctx_t *gctx, Agraph_t *g, Agedge_t *e)
Definition tcldot-util.c:79
Agedge_t * cmd2e(char *cmd)
Definition tcldot-util.c:54
int nodecmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
void deleteNode(gctx_t *gctx, Agraph_t *g, Agnode_t *n)
size_t Tcldot_channel_writer(GVJ_t *job, const char *s, size_t len)
Definition tcldot-util.c:26
char * obj2cmd(void *obj)
Definition tcldot-util.c:65
void deleteGraph(gctx_t *gctx, Agraph_t *g)
size_t Tcldot_string_writer(GVJ_t *job, const char *s, size_t len)
Definition tcldot-util.c:19
void listEdgeAttrs(Tcl_Interp *interp, Agraph_t *g)
Agnode_t * cmd2n(char *cmd)
Definition tcldot-util.c:47
void setnodeattributes(Agraph_t *g, Agnode_t *n, char *argv[], int argc)
int myiodisc_memiofread(void *chan, char *buf, int bufsize)
Definition tcldot-io.c:88
void setedgeattributes(Agraph_t *g, Agedge_t *e, char *argv[], int argc)
int myiodisc_afread(void *channel, char *ubuf, int n)
Definition tcldot-io.c:31
int edgecmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
void tcldot_layout(GVC_t *gvc, Agraph_t *g, char *engine)
Agiddisc_t myiddisc
Definition tcldot-id.c:100
Agraph_t * agread_usergets(ictx_t *ictx, FILE *fp, int(*usergets)(void *chan, char *buf, int bufsize))
int graphcmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
Definition grammar.c:93