69 # ifndef HAVE_ITCLDECLS_H
70 # define RESOURCE_INCLUDED
89 Tcl_Namespace * nsPtr,
char *
pattern,
90 int allowOverwrite ) );
93 #ifndef Tcl_GetGlobalNamespace_TCL_DECLARE
94 EXTERN Tcl_Namespace * Tcl_GetGlobalNamespace
_ANSI_ARGS_( (
109 #if !defined ( __WIN32__ )
110 extern char * strrchr
_ANSI_ARGS_( ( CONST
char *
string,
int c ) );
113 #define isatty( a ) 0
135 static const char *
name = NULL;
140 {
"-file", TK_ARGV_STRING, (
char *) NULL, (
char *) &
fileName,
141 "File from which to read commands" },
142 {
"-e", TK_ARGV_STRING, (
char *) NULL, (
char *) &
script,
143 "Script to execute on startup" },
144 {
"-geometry", TK_ARGV_STRING, (
char *) NULL, (
char *) &
geometry,
145 "Initial geometry for window" },
146 {
"-display", TK_ARGV_STRING, (
char *) NULL, (
char *) &
display,
148 {
"-name", TK_ARGV_STRING, (
char *) NULL, (
char *) &
name,
149 "Name to use for application" },
150 {
"-sync", TK_ARGV_CONSTANT, (
char *) 1, (
char *) &
synchronize,
151 "Use synchronous mode for display server" },
152 { (
char *) NULL, TK_ARGV_END, (
char *) NULL, (
char *) NULL,
185 int ( *
AppInit )( Tcl_Interp *interp ) )
192 #ifdef PL_HAVE_PTHREAD
196 Tcl_FindExecutable( argv[0] );
197 interp = Tcl_CreateInterp();
199 Tcl_InitMemory( interp );
207 if ( Tk_ParseArgv( interp, (Tk_Window) NULL, &argc, argv, argTable, 0 )
210 fprintf( stderr,
"%s\n", Tcl_GetStringResult( interp ) );
216 if ( fileName != NULL )
224 name = strrchr( p,
'/' );
241 if ( display != NULL )
243 Tcl_SetVar2( interp,
"env",
"DISPLAY", display, TCL_GLOBAL_ONLY );
255 Tcl_SetVar( interp,
"argv0", name, TCL_GLOBAL_ONLY );
257 if ( Tcl_Init( interp ) == TCL_ERROR )
259 fprintf( stderr,
"Tcl initialisation failed: %s\n", Tcl_GetStringResult( interp ) );
262 if ( Tk_Init( interp ) == TCL_ERROR )
264 fprintf( stderr,
"Tk initialisation failed: %s\n", Tcl_GetStringResult( interp ) );
268 if ( Itcl_Init( interp ) == TCL_ERROR )
270 fprintf( stderr,
"Itcl initialisation failed: %s\n", Tcl_GetStringResult( interp ) );
275 if ( Itk_Init( interp ) == TCL_ERROR )
277 fprintf( stderr,
"Itk initialisation failed: %s\n", Tcl_GetStringResult( interp ) );
290 if ( Tcl_Import( interp, Tcl_GetGlobalNamespace( interp ),
291 "::itk::*", 1 ) != TCL_OK )
293 fprintf( stderr,
"Itk initialisation failed: %s\n", Tcl_GetStringResult( interp ) );
297 if ( Tcl_Import( interp, Tcl_GetGlobalNamespace( interp ),
298 "::itcl::*", 1 ) != TCL_OK )
300 fprintf( stderr,
"Itk initialisation failed: %s\n", Tcl_GetStringResult( interp ) );
304 if ( Tcl_Eval( interp,
"auto_mkindex_parser::slavehook { _%@namespace import -force ::itcl::* ::itk::* }" ) != TCL_OK )
306 fprintf( stderr,
"Itk initialisation failed: %s\n", Tcl_GetStringResult( interp ) );
318 args = Tcl_Merge( argc - 1, ( CONST
char * CONST * )argv + 1 );
319 Tcl_SetVar( interp,
"argv", args, TCL_GLOBAL_ONLY );
321 sprintf( buf,
"%d", argc - 1 );
322 Tcl_SetVar( interp,
"argc", buf, TCL_GLOBAL_ONLY );
325 if ( geometry != NULL )
327 Tcl_SetVar( interp,
"geometry", geometry, TCL_GLOBAL_ONLY );
335 Tcl_SetVar( interp,
"tcl_interactive",
336 ( ( fileName == NULL ) && tty ) ?
"1" :
"0", TCL_GLOBAL_ONLY );
348 if ( ( *
AppInit )( interp ) != TCL_OK )
350 fprintf( stderr,
"(*AppInit) failed: %s\n", Tcl_GetStringResult( interp ) );
358 if ( geometry != NULL )
360 code = Tcl_VarEval( interp,
"wm geometry . ", geometry, (
char *) NULL );
361 if ( code != TCL_OK )
363 fprintf( stderr,
"%s\n", Tcl_GetStringResult( interp ) );
372 if ( script != NULL )
374 code = Tcl_VarEval( interp, script, (
char *) NULL );
375 if ( code != TCL_OK )
387 if ( fileName != NULL )
389 code = Tcl_VarEval( interp,
"source \"", fileName,
"\"", (
char *) NULL );
390 if ( code != TCL_OK )
406 if ( RcFileName != NULL )
412 fullName = Tcl_TildeSubst( interp, RcFileName, &buffer );
413 if ( fullName == NULL )
415 fprintf( stderr,
"%s\n", Tcl_GetStringResult( interp ) );
419 f = fopen( fullName,
"r" );
422 code = Tcl_EvalFile( interp, fullName );
423 if ( code != TCL_OK )
425 fprintf( stderr,
"%s\n", Tcl_GetStringResult( interp ) );
430 Tcl_DStringFree( &buffer );
433 #if !defined ( MAC_TCL ) && !defined ( __WIN32__ )
434 Tk_CreateFileHandler( 0, TK_READABLE,
StdinProc, (ClientData) 0 );
442 Tcl_DStringInit( &command );
458 Tcl_Eval( interp,
"exit" );
462 msg = Tcl_GetVar( interp,
"errorInfo", TCL_GLOBAL_ONLY );
465 msg = Tcl_GetStringResult( interp );
467 fprintf( stderr,
"%s\n", msg );
468 Tcl_Eval( interp, errorExitCmd );
496 #define BUFFER_SIZE 4000
498 static int gotPartial = 0;
503 #if !defined ( __WIN32__ )
504 count = (int) read( fileno( stdin ), input,
BUFFER_SIZE );
506 count = fread( input,
BUFFER_SIZE,
sizeof (
char ), stdin );
514 Tcl_Eval( interp,
"exit" );
519 #if !defined ( MAC_TCL ) && !defined ( __WIN32__ )
520 Tk_DeleteFileHandler( 0 );
530 cmd = Tcl_DStringAppend( &command, input, count );
533 if ( ( input[count - 1] !=
'\n' ) && ( input[count - 1] !=
';' ) )
538 if ( !Tcl_CommandComplete( cmd ) )
553 #if !defined ( MAC_TCL ) && !defined ( __WIN32__ )
554 Tk_CreateFileHandler( 0, 0,
StdinProc, (ClientData) 0 );
556 code = Tcl_RecordAndEval( interp, cmd, 0 );
557 #if !defined ( MAC_TCL ) && !defined ( __WIN32__ )
558 Tk_CreateFileHandler( 0, TK_READABLE,
StdinProc, (ClientData) 0 );
560 Tcl_DStringFree( &command );
561 res = Tcl_GetStringResult( interp );
564 if ( ( code != TCL_OK ) || ( tty ) )
566 printf(
"%s\n", res );
577 Prompt( interp, gotPartial );
601 Tcl_Interp * interploc;
606 const char *promptCmd;
609 promptCmd = Tcl_GetVar( interploc,
610 partial ?
"tcl_prompt2" :
"tcl_prompt1", TCL_GLOBAL_ONLY );
611 if ( promptCmd == NULL )
616 fputs(
"% ", stdout );
621 code = Tcl_Eval( interploc, promptCmd );
622 if ( code != TCL_OK )
624 Tcl_AddErrorInfo( interploc,
625 "\n (script that generates prompt)" );
626 fprintf( stderr,
"%s\n", Tcl_GetStringResult( interploc ) );
int pltkMain(int argc, const char **argv, char *RcFileName, int(*AppInit)(Tcl_Interp *interp))
static char errorExitCmd[]
static const char * geometry
static const char * script
EXTERN int Itk_Init _ANSI_ARGS_((Tcl_Interp *interp))
static const char * fileName
static int AppInit(Tcl_Interp *interp)
static Tcl_DString command
static Tk_ArgvInfo argTable[]
static void Prompt(Tcl_Interp *interploc, int partial)
static const char * display
static void StdinProc(ClientData PL_UNUSED(clientData), int PL_UNUSED(mask))
static Tcl_Interp * interp