1 /*--------------------------------------------------------------*/
3 /* Tcl module generator for xcircuit */
4 /*--------------------------------------------------------------*/
15 Tcl_Interp
*consoleinterp
;
17 /*------------------------------------------------------*/
18 /* Redefine all of the callback functions for Tcl/Tk */
19 /*------------------------------------------------------*/
21 extern int Tk_SimpleObjCmd();
22 extern int xctcl_standardaction();
23 extern int xctcl_action();
24 extern int xctcl_refresh();
25 extern int xctcl_library();
26 extern int xctcl_tech();
27 extern int xctcl_font();
28 extern int xctcl_cursor();
29 extern int xctcl_bind();
30 extern int xctcl_filerecover();
31 extern int xctcl_color();
32 extern int xctcl_dofill();
33 extern int xctcl_doborder();
34 extern int xctcl_promptquit();
35 extern int xctcl_quit();
36 extern int xctcl_promptsavepage();
37 extern int xctcl_eventmode();
38 extern int xctcl_delete();
39 extern int xctcl_undo();
40 extern int xctcl_redo();
41 extern int xctcl_copy();
42 extern int xctcl_move();
43 extern int xctcl_edit();
44 extern int xctcl_param();
45 extern int xctcl_select();
46 extern int xctcl_deselect();
47 extern int xctcl_push();
48 extern int xctcl_pop();
49 extern int xctcl_rotate();
50 extern int xctcl_flip();
51 extern int xctcl_config();
52 extern int xctcl_page();
53 extern int xctcl_spice();
54 extern int xctcl_svg();
55 extern int xctcl_zoom();
56 extern int xctcl_pan();
57 extern int xctcl_element();
58 extern int xctcl_label();
59 extern int xctcl_polygon();
60 extern int xctcl_instance();
61 extern int xctcl_spline();
62 extern int xctcl_path();
63 extern int xctcl_arc();
64 extern int xctcl_graphic();
65 extern int xctcl_object();
66 extern int xctcl_here();
67 extern int xctcl_start();
68 extern int xctcl_netlist();
69 extern int xctcl_symschem();
70 extern int xctcl_tag();
77 static cmdstruct xc_commands
[] =
79 {"action", (void *)xctcl_action
},
80 {"standardaction", (void *)xctcl_standardaction
},
81 {"start", (void *)xctcl_start
},
82 {"tag", (void *)xctcl_tag
},
83 {"refresh", (void *)xctcl_refresh
},
84 {"library", (void *)xctcl_library
},
85 {"technology", (void *)xctcl_tech
},
86 {"loadfont", (void *)xctcl_font
},
87 {"cursor", (void *)xctcl_cursor
},
88 {"bindkey", (void *)xctcl_bind
},
89 {"filerecover", (void *)xctcl_filerecover
},
90 {"color", (void *)xctcl_color
},
91 {"fill", (void *)xctcl_dofill
},
92 {"border", (void *)xctcl_doborder
},
93 {"quit", (void *)xctcl_promptquit
},
94 {"quitnocheck", (void *)xctcl_quit
},
95 {"promptsavepage", (void *)xctcl_promptsavepage
},
96 {"eventmode", (void *)xctcl_eventmode
},
97 {"delete", (void *)xctcl_delete
},
98 {"undo", (void *)xctcl_undo
},
99 {"redo", (void *)xctcl_redo
},
100 {"select", (void *)xctcl_select
},
101 {"deselect", (void *)xctcl_deselect
},
102 {"copy", (void *)xctcl_copy
},
103 {"move", (void *)xctcl_move
},
104 {"edit", (void *)xctcl_edit
},
105 {"parameter", (void *)xctcl_param
},
106 {"push", (void *)xctcl_push
},
107 {"pop", (void *)xctcl_pop
},
108 {"rotate", (void *)xctcl_rotate
},
109 {"flip", (void *)xctcl_flip
},
110 {"config", (void *)xctcl_config
},
111 {"page", (void *)xctcl_page
},
112 {"zoom", (void *)xctcl_zoom
},
113 {"pan", (void *)xctcl_pan
},
114 {"element", (void *)xctcl_element
},
115 {"label", (void *)xctcl_label
},
116 {"polygon", (void *)xctcl_polygon
},
117 {"instance", (void *)xctcl_instance
},
118 {"spline", (void *)xctcl_spline
},
119 {"path", (void *)xctcl_path
},
120 {"arc", (void *)xctcl_arc
},
121 {"graphic", (void *)xctcl_graphic
},
122 {"object", (void *)xctcl_object
},
123 {"here", (void *)xctcl_here
},
124 {"netlist", (void *)xctcl_netlist
},
125 {"symbol", (void *)xctcl_symschem
},
126 {"schematic", (void *)xctcl_symschem
},
127 {"spice", (void *)xctcl_spice
},
128 {"svg", (void *)xctcl_svg
},
129 {"", NULL
} /* sentinel */
132 extern Tcl_HashTable XcTagTable
;
134 /*--------------------------------------------------------------*/
135 /* Initialization procedure for Tcl/Tk */
136 /*--------------------------------------------------------------*/
139 __declspec(dllexport
)
142 Xcircuit_Init(Tcl_Interp
*interp
)
149 char version_string
[20];
151 /* Interpreter sanity checks */
152 if (interp
== NULL
) return TCL_ERROR
;
154 /* Remember the interpreter */
157 if (Tcl_InitStubs(interp
, "8.1", 0) == NULL
) return TCL_ERROR
;
159 tmp_s
= getenv("XCIRCUIT_SRC_DIR");
160 if (tmp_s
== NULL
) tmp_s
= SCRIPTS_DIR
;
162 tmp_l
= getenv("XCIRCUIT_LIB_DIR");
163 if (tmp_l
== NULL
) tmp_l
= BUILTINS_DIR
;
165 strcpy(command
, "xcircuit::");
167 /* Create the start command */
169 tktop
= Tk_MainWindow(interp
);
171 /* Create all of the commands (except "simple") */
173 for (cmdidx
= 0; xc_commands
[cmdidx
].func
!= NULL
; cmdidx
++) {
174 sprintf(command
+ 10, "%s", xc_commands
[cmdidx
].cmdstr
);
175 Tcl_CreateObjCommand(interp
, command
,
176 (Tcl_ObjCmdProc
*)xc_commands
[cmdidx
].func
,
177 (ClientData
)tktop
, (Tcl_CmdDeleteProc
*) NULL
);
180 /* Command which creates a "simple" window (this is a top- */
181 /* level command, not one in the xcircuit namespace which */
182 /* is why I treat it separately from the other commands). */
184 Tcl_CreateObjCommand(interp
, "simple",
185 (Tcl_ObjCmdProc
*)Tk_SimpleObjCmd
,
186 (ClientData
)tktop
, (Tcl_CmdDeleteProc
*) NULL
);
188 sprintf(command
, "lappend auto_path %s", tmp_s
);
189 Tcl_Eval(interp
, command
);
190 if (!strstr(tmp_s
, "tcl")) {
191 sprintf(command
, "lappend auto_path %s/tcl", tmp_s
);
192 Tcl_Eval(interp
, command
);
195 if (strcmp(tmp_s
, SCRIPTS_DIR
))
196 Tcl_Eval(interp
, "lappend auto_path " SCRIPTS_DIR
);
198 /* Set $XCIRCUIT_SRC_DIR and $XCIRCUIT_LIB_DIR as Tcl variables */
200 Tcl_SetVar(interp
, "XCIRCUIT_SRC_DIR", tmp_s
, TCL_GLOBAL_ONLY
);
201 Tcl_SetVar(interp
, "XCIRCUIT_LIB_DIR", tmp_l
, TCL_GLOBAL_ONLY
);
203 /* Set $CAD_ROOT as a Tcl variable */
205 cadhome
= getenv("CAD_ROOT");
206 if (cadhome
== NULL
) cadhome
= CAD_DIR
;
207 Tcl_SetVar(interp
, "CAD_ROOT", cadhome
, TCL_GLOBAL_ONLY
);
209 /* Set $XCIRCUIT_VERSION and $XCIRCUIT_REVISION as Tcl variables */
211 sprintf(version_string
, "%s", PROG_REVISION
);
212 Tcl_SetVar(interp
, "XCIRCUIT_REVISION", version_string
, TCL_GLOBAL_ONLY
);
214 sprintf(version_string
, "%s", PROG_VERSION
);
215 Tcl_SetVar(interp
, "XCIRCUIT_VERSION", version_string
, TCL_GLOBAL_ONLY
);
218 /* Set a variable in Tcl indicating that the ASG module is compiled in */
219 Tcl_SetVar(interp
, "XCIRCUIT_ASG", "1", TCL_GLOBAL_ONLY
);
222 /* Export the namespace commands */
224 Tcl_Eval(interp
, "namespace eval xcircuit namespace export *");
225 Tcl_PkgProvide(interp
, "Xcircuit", version_string
);
227 /* Initialize the console interpreter, if there is one. */
229 if ((consoleinterp
= Tcl_GetMaster(interp
)) == NULL
)
230 consoleinterp
= interp
;
232 /* Initialize the command tag table */
234 Tcl_InitHashTable(&XcTagTable
, TCL_STRING_KEYS
);
239 #endif /* TCL_WRAPPER */