]>
cvs.zerfleddert.de Git - micropolis/blob - src/tk/main.c
4 * A simple program to test the toolkit facilities.
6 * Copyright 1990-1992 Regents of the University of California.
7 * Permission to use, copy, modify, and distribute this
8 * software and its documentation for any purpose and without
9 * fee is hereby granted, provided that the above copyright
10 * notice appear in all copies. The University of California
11 * makes no representations about the suitability of this
12 * software for any purpose. It is provided "as is" without
13 * express or implied warranty.
17 static char rcsid
[] = "$Header: /user6/ouster/wish/RCS/main.c,v 1.68 92/05/07 08:52:02 ouster Exp $ SPRITE (Berkeley)";
24 * Declarations for library procedures:
27 extern int isatty(int);
30 * Command used to initialize wish:
33 char initCmd
[] = "source $tk_library/wish.tcl";
35 Tk_Window w
; /* NULL means window has been deleted. */
36 Tk_TimerToken timeToken
= 0;
42 extern int Tk_SquareCmd
_ANSI_ARGS_((ClientData clientData
,
43 Tcl_Interp
*interp
, int argc
, char **argv
));
46 * Information for testing out command-line options:
50 char *fileName
= NULL
;
53 char *geometry
= NULL
;
55 Tk_ArgvInfo argTable
[] = {
56 {"-file", TK_ARGV_STRING
, (char *) NULL
, (char *) &fileName
,
57 "File from which to read commands"},
58 {"-geometry", TK_ARGV_STRING
, (char *) NULL
, (char *) &geometry
,
59 "Initial geometry for window"},
60 {"-display", TK_ARGV_STRING
, (char *) NULL
, (char *) &display
,
62 {"-name", TK_ARGV_STRING
, (char *) NULL
, (char *) &name
,
63 "Name to use for application"},
64 {"-sync", TK_ARGV_CONSTANT
, (char *) 1, (char *) &synchronize
,
65 "Use synchronous mode for display server"},
66 {(char *) NULL
, TK_ARGV_END
, (char *) NULL
, (char *) NULL
,
73 ClientData clientData
, /* Not used. */
78 static int gotPartial
= 0;
82 if (mask
& TK_READABLE
) {
83 if (fgets(line
, 200, stdin
) == NULL
) {
86 Tcl_Eval(interp
, "destroy .", 0, (char **) NULL
);
89 Tk_DeleteFileHandler(0);
96 cmd
= Tcl_AssembleCmd(buffer
, line
);
102 result
= Tcl_RecordAndEval(interp
, cmd
, 0);
103 if (*interp
->result
!= 0) {
104 if ((result
!= TCL_OK
) || (tty
)) {
105 printf("%s\n", interp
->result
);
118 ClientData clientData
, /* Information about window. */
119 XEvent
*eventPtr
/* Information about event. */
122 if (eventPtr
->type
== DestroyNotify
) {
128 * Procedure to map initial window. This is invoked as a do-when-idle
129 * handler. Wait for all other when-idle handlers to be processed
130 * before mapping the window, so that the window's correct geometry
131 * has been determined.
137 ClientData clientData
/* Not used. */
141 while (Tk_DoOneEvent(TK_IDLE_EVENTS
) != 0) {
142 /* Empty loop body. */
153 ClientData dummy
, /* Not used. */
154 Tcl_Interp
*interp
, /* Current interpreter. */
155 int argc
, /* Number of arguments. */
156 char **argv
/* Argument strings. */
162 Tcl_AppendResult(interp
, "wrong # args: should be \"", argv
[0],
163 " x y\"", (char *) NULL
);
166 x
= strtol(argv
[1], (char **) NULL
, 0);
167 y
= strtol(argv
[2], (char **) NULL
, 0);
168 Tk_MakeWindowExist(w
);
169 XDrawPoint(Tk_Display(w
), Tk_WindowId(w
),
170 DefaultGCOfScreen(Tk_Screen(w
)), x
, y
);
177 ClientData dummy
, /* Not used. */
178 Tcl_Interp
*interp
, /* Current interpreter. */
179 int argc
, /* Number of arguments. */
180 char **argv
/* Argument strings. */
184 Tcl_AppendResult(interp
, "wrong # args: should be \"", argv
[0],
185 " x y\"", (char *) NULL
);
188 x
= strtol(argv
[1], (char **) NULL
, 0);
189 y
= strtol(argv
[2], (char **) NULL
, 0);
195 ClientData dummy
, /* Not used. */
196 Tcl_Interp
*interp
, /* Current interpreter. */
197 int argc
, /* Number of arguments. */
198 char **argv
/* Argument strings. */
204 Tcl_AppendResult(interp
, "wrong # args: should be \"", argv
[0],
205 " x y\"", (char *) NULL
);
208 newX
= strtol(argv
[1], (char **) NULL
, 0);
209 newY
= strtol(argv
[2], (char **) NULL
, 0);
210 Tk_MakeWindowExist(w
);
211 XDrawLine(Tk_Display(w
), Tk_WindowId(w
),
212 DefaultGCOfScreen(Tk_Screen(w
)), x
, y
, newX
, newY
);
219 main (int argc
, char **argv
)
221 char *args
, *p
, *msg
;
226 { extern char *TCL_Library
, *TK_Library
;
227 extern int TK_CreateColormap
;
228 char *tcllib
= getenv("TCL_LIBRARY");
229 char *tklib
= getenv("TK_LIBRARY");
230 char *create
= getenv("CREATE_COLORMAP");
234 TCL_Library
= tcllib
;
236 TK_CreateColormap
= 1;
239 interp
= Tcl_CreateInterp();
241 Tcl_InitMemory(interp
);
243 if (Tk_ParseArgv(interp
, (Tk_Window
) NULL
, &argc
, argv
, argTable
, 0)
245 fprintf(stderr
, "%s\n", interp
->result
);
249 if (fileName
!= NULL
) {
254 name
= strrchr(p
, '/');
261 w
= Tk_CreateMainWindow(interp
, display
, name
);
263 fprintf(stderr
, "%s\n", interp
->result
);
266 Tk_SetClass(w
, "Tk");
267 Tk_CreateEventHandler(w
, StructureNotifyMask
, StructureProc
,
269 Tk_DoWhenIdle(DelayedMap
, (ClientData
) NULL
);
272 args
= Tcl_Merge(argc
-1, argv
+1);
273 Tcl_SetVar(interp
, "argv", args
, TCL_GLOBAL_ONLY
);
275 sprintf(buf
, "%d", argc
-1);
276 Tcl_SetVar(interp
, "argc", buf
, TCL_GLOBAL_ONLY
);
279 XSynchronize(Tk_Display(w
), True
);
281 Tk_GeometryRequest(w
, 200, 200);
282 border
= Tk_Get3DBorder(interp
, w
, None
, "#4eee94");
283 if (border
== NULL
) {
284 Tcl_SetResult(interp
, (char *) NULL
, TCL_STATIC
);
285 Tk_SetWindowBackground(w
, WhitePixelOfScreen(Tk_Screen(w
)));
287 Tk_SetBackgroundFromBorder(w
, border
);
289 XSetForeground(Tk_Display(w
), DefaultGCOfScreen(Tk_Screen(w
)),
290 BlackPixelOfScreen(Tk_Screen(w
)));
291 Tcl_CreateCommand(interp
, "dot", DotCmd
, (ClientData
) w
,
292 (void (*)(int *)) NULL
);
293 Tcl_CreateCommand(interp
, "lineto", LinetoCmd
, (ClientData
) w
,
294 (void (*)(int *)) NULL
);
295 Tcl_CreateCommand(interp
, "moveto", MovetoCmd
, (ClientData
) w
,
296 (void (*)(int *)) NULL
);
298 Tcl_CreateCommand(interp
, "square", Tk_SquareCmd
, (ClientData
) w
,
299 (void (*)(int *)) NULL
);
301 if (geometry
!= NULL
) {
302 Tcl_SetVar(interp
, "geometry", geometry
, TCL_GLOBAL_ONLY
);
304 result
= Tcl_Eval(interp
, initCmd
, 0, (char **) NULL
);
305 if (result
!= TCL_OK
) {
308 if (fileName
!= NULL
) {
309 result
= Tcl_VarEval(interp
, "source ", fileName
, (char *) NULL
);
310 if (result
!= TCL_OK
) {
316 Tk_CreateFileHandler(0, TK_READABLE
, StdinProc
, (ClientData
) 0);
322 buffer
= Tcl_CreateCmdBuf();
323 (void) Tcl_Eval(interp
, "update", 0, (char **) NULL
);
326 Tcl_DeleteInterp(interp
);
327 Tcl_DeleteCmdBuf(buffer
);
331 msg
= Tcl_GetVar(interp
, "errorInfo", TCL_GLOBAL_ONLY
);
333 msg
= interp
->result
;
335 fprintf(stderr
, "%s\n", msg
);
336 Tcl_Eval(interp
, "destroy .", 0, (char **) NULL
);