PLplot 5.15.0
tkshell.c
Go to the documentation of this file.
1// Maurice LeBrun
2// 6-May-93
3//
4// A miscellaneous assortment of Tcl support functions.
5//
6//
7// Copyright (C) 2004 Joao Cardoso
8//
9// This file is part of PLplot.
10//
11// PLplot is free software; you can redistribute it and/or modify
12// it under the terms of the GNU Library General Public License as published
13// by the Free Software Foundation; either version 2 of the License, or
14// (at your option) any later version.
15//
16// PLplot is distributed in the hope that it will be useful,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19// GNU Library General Public License for more details.
20//
21// You should have received a copy of the GNU Library General Public License
22// along with PLplot; if not, write to the Free Software
23// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24//
25
26#include "plserver.h"
27
28//--------------------------------------------------------------------------
29// Pltk_Init
30//
31// Initialization routine for extended wish'es.
32// Creates the plframe, matrix, wait_until, and host_id (w/Tcl-DP only)
33// commands. Also sets the auto_path variable.
34//--------------------------------------------------------------------------
35
36int
37Pltk_Init( Tcl_Interp *interp )
38{
39 Tk_Window main;
40
41 main = Tk_MainWindow( interp );
42
43// plframe -- PLplot graphing widget
44
45 Tcl_CreateCommand( interp, "plframe", (Tcl_CmdProc *) plFrameCmd,
46 (ClientData) main, (Tcl_CmdDeleteProc *) NULL );
47
48// matrix -- matrix support command
49
50 Tcl_CreateCommand( interp, "matrix", (Tcl_CmdProc *) Tcl_MatrixCmd,
51 (ClientData) main, (Tcl_CmdDeleteProc *) NULL );
52
53// wait_until -- waits for a specific condition to arise
54// Can be used with either Tcl-DP or TK
55
56 Tcl_CreateCommand( interp, "wait_until", (Tcl_CmdProc *) plWait_Until,
57 (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL );
58
59// host_id -- returns host IP number. Only for use with Tcl-DP
60
61#ifdef PLD_dp
62 Tcl_CreateCommand( interp, "host_id", (Tcl_CmdProc *) plHost_ID,
63 (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL );
64#endif
65
66// Set up auto_path
67
68 if ( pls_auto_path( interp ) == TCL_ERROR )
69 return TCL_ERROR;
70
71// Save initial RGB colormap components
72// Disabled for now
73
74#if 0
75 {
76 Display *display;
77 Colormap map;
78
79 display = Tk_Display( main );
80 map = DefaultColormap( display, DefaultScreen( display ) );
81
82// Convert this to use esc function if it's going to be used
83// SaveColormap(display, map);
84 }
85#endif
86 return TCL_OK;
87}
88
89//--------------------------------------------------------------------------
90// plWait_Until
91//
92// Tcl command -- wait until the specified condition is satisfied.
93// Processes all events while waiting.
94//
95// This command is more capable than tkwait, and has the added benefit
96// of working with Tcl-DP as well. Example usage:
97//
98// wait_until {[info exists foobar]}
99//
100// Note the [info ...] command must be protected by braces so that it
101// isn't actually evaluated until passed into this routine.
102//--------------------------------------------------------------------------
103
104int
105plWait_Until( ClientData clientData, Tcl_Interp *interp, int argc, char **argv )
106{
107 int result = 0;
108
109 dbug_enter( "plWait_Until" );
110
111 for (;; )
112 {
113 if ( Tcl_ExprBoolean( interp, argv[1], &result ) )
114 {
115 fprintf( stderr, "wait_until command \"%s\" failed:\n\t %s\n",
116 argv[1], Tcl_GetStringResult( interp ) );
117 break;
118 }
119 if ( result )
120 break;
121
122 Tk_DoOneEvent( 0 );
123 }
124 return TCL_OK;
125}
int main()
Definition: cdexpert.c:35
int plFrameCmd(ClientData, Tcl_Interp *, int, const char **)
int plHost_ID(ClientData clientData, Tcl_Interp *interp, int argc, const char **argv)
PLDLLIMPEXP_TCLTK int pls_auto_path(Tcl_Interp *interp)
Definition: tclAPI.c:716
static int argc
Definition: qt.cpp:48
static char ** argv
Definition: qt.cpp:49
int Tcl_MatrixCmd(ClientData PL_UNUSED(clientData), Tcl_Interp *interp, int argc, const char **argv)
Definition: tclMatrix.c:122
#define dbug_enter(a)
Definition: tclMatrix.c:59
static Tcl_Interp * interp
Definition: tkMain.c:120
static const char * display
Definition: tkMain.c:136
int plWait_Until(ClientData clientData, Tcl_Interp *interp, int argc, char **argv)
Definition: tkshell.c:105
int Pltk_Init(Tcl_Interp *interp)
Definition: tkshell.c:37