71 # ifndef HAVE_ITCLDECLS_H
72 # define RESOURCE_INCLUDED
88 #ifndef Tcl_Import_TCL_DECLARED
90 Tcl_Namespace * nsPtr,
char *
pattern,
91 int allowOverwrite ) );
94 #ifndef Tcl_GetGlobalNamespace_TCL_DECLARE
95 EXTERN Tcl_Namespace * Tcl_GetGlobalNamespace
_ANSI_ARGS_( (
110 extern char * strrchr
_ANSI_ARGS_( ( CONST
char *
string,
int c ) );
131 static const char *
name = NULL;
136 {
"-file", TK_ARGV_STRING, (
char *) NULL, (
char *) &
fileName,
137 "File from which to read commands" },
138 {
"-e", TK_ARGV_STRING, (
char *) NULL, (
char *) &
script,
139 "Script to execute on startup" },
140 {
"-geometry", TK_ARGV_STRING, (
char *) NULL, (
char *) &
geometry,
141 "Initial geometry for window" },
142 {
"-display", TK_ARGV_STRING, (
char *) NULL, (
char *) &
display,
144 {
"-name", TK_ARGV_STRING, (
char *) NULL, (
char *) &
name,
145 "Name to use for application" },
146 {
"-sync", TK_ARGV_CONSTANT, (
char *) 1, (
char *) &
synchronize,
147 "Use synchronous mode for display server" },
148 { (
char *) NULL, TK_ARGV_END, (
char *) NULL, (
char *) NULL,
181 int ( *
AppInit )( Tcl_Interp *interp ) )
188 #ifdef PL_HAVE_PTHREAD
192 Tcl_FindExecutable( argv[0] );
193 interp = Tcl_CreateInterp();
195 Tcl_InitMemory( interp );
202 if ( Tk_ParseArgv( interp, (Tk_Window) NULL, &argc, argv, argTable, 0 )
205 fprintf( stderr,
"%s\n", Tcl_GetStringResult( interp ) );
210 if ( fileName != NULL )
218 name = strrchr( p,
'/' );
235 if ( display != NULL )
237 Tcl_SetVar2( interp,
"env",
"DISPLAY", display, TCL_GLOBAL_ONLY );
249 Tcl_SetVar( interp,
"argv0", name, TCL_GLOBAL_ONLY );
251 if ( Tcl_Init( interp ) == TCL_ERROR )
255 if ( Tk_Init( interp ) == TCL_ERROR )
260 if ( Itcl_Init( interp ) == TCL_ERROR )
266 if ( Itk_Init( interp ) == TCL_ERROR )
280 if ( Tcl_Import( interp, Tcl_GetGlobalNamespace( interp ),
281 "::itk::*", 1 ) != TCL_OK )
286 if ( Tcl_Import( interp, Tcl_GetGlobalNamespace( interp ),
287 "::itcl::*", 1 ) != TCL_OK )
292 if ( Tcl_Eval( interp,
"auto_mkindex_parser::slavehook { _%@namespace import -force ::itcl::* ::itk::* }" ) != TCL_OK )
304 args = Tcl_Merge( argc - 1, ( CONST
char * CONST * )argv + 1 );
305 Tcl_SetVar( interp,
"argv", args, TCL_GLOBAL_ONLY );
307 sprintf( buf,
"%d", argc - 1 );
308 Tcl_SetVar( interp,
"argc", buf, TCL_GLOBAL_ONLY );
310 if ( geometry != NULL )
312 Tcl_SetVar( interp,
"geometry", geometry, TCL_GLOBAL_ONLY );
320 Tcl_SetVar( interp,
"tcl_interactive",
321 ( ( fileName == NULL ) && tty ) ?
"1" :
"0", TCL_GLOBAL_ONLY );
332 if ( ( *
AppInit )( interp ) != TCL_OK )
334 fprintf( stderr,
"(*AppInit) failed: %s\n", Tcl_GetStringResult( interp ) );
341 if ( geometry != NULL )
343 code = Tcl_VarEval( interp,
"wm geometry . ", geometry, (
char *) NULL );
344 if ( code != TCL_OK )
346 fprintf( stderr,
"%s\n", Tcl_GetStringResult( interp ) );
354 if ( script != NULL )
356 code = Tcl_VarEval( interp, script, (
char *) NULL );
357 if ( code != TCL_OK )
368 if ( fileName != NULL )
370 code = Tcl_VarEval( interp,
"source ", fileName, (
char *) NULL );
371 if ( code != TCL_OK )
387 if ( RcFileName != NULL )
393 fullName = Tcl_TildeSubst( interp, RcFileName, &buffer );
394 if ( fullName == NULL )
396 fprintf( stderr,
"%s\n", Tcl_GetStringResult( interp ) );
400 f = fopen( fullName,
"r" );
403 code = Tcl_EvalFile( interp, fullName );
404 if ( code != TCL_OK )
406 fprintf( stderr,
"%s\n", Tcl_GetStringResult( interp ) );
411 Tcl_DStringFree( &buffer );
414 #if !defined ( MAC_TCL ) && !defined ( __WIN32__ ) && !defined ( __CYGWIN__ )
415 Tk_CreateFileHandler( 0, TK_READABLE,
StdinProc, (ClientData) 0 );
423 Tcl_DStringInit( &command );
438 Tcl_Eval( interp,
"exit" );
442 msg = Tcl_GetVar( interp,
"errorInfo", TCL_GLOBAL_ONLY );
445 msg = Tcl_GetStringResult( interp );
447 fprintf( stderr,
"%s\n", msg );
448 Tcl_Eval( interp, errorExitCmd );
476 #define BUFFER_SIZE 4000
478 static int gotPartial = 0;
483 count = (int) read( fileno( stdin ), input,
BUFFER_SIZE );
490 Tcl_Eval( interp,
"exit" );
495 #if !defined ( MAC_TCL ) && !defined ( __WIN32__ ) && !defined ( __CYGWIN__ )
496 Tk_DeleteFileHandler( 0 );
506 cmd = Tcl_DStringAppend( &command, input, count );
509 if ( ( input[count - 1] !=
'\n' ) && ( input[count - 1] !=
';' ) )
514 if ( !Tcl_CommandComplete( cmd ) )
529 #if !defined ( MAC_TCL ) && !defined ( __WIN32__ ) && !defined ( __CYGWIN__ )
530 Tk_CreateFileHandler( 0, 0,
StdinProc, (ClientData) 0 );
532 code = Tcl_RecordAndEval( interp, cmd, 0 );
533 #if !defined ( MAC_TCL ) && !defined ( __WIN32__ ) && !defined ( __CYGWIN__ )
534 Tk_CreateFileHandler( 0, TK_READABLE,
StdinProc, (ClientData) 0 );
536 Tcl_DStringFree( &command );
537 res = Tcl_GetStringResult( interp );
540 if ( ( code != TCL_OK ) || ( tty ) )
542 printf(
"%s\n", res );
553 Prompt( interp, gotPartial );
582 const char *promptCmd;
585 promptCmd = Tcl_GetVar( intp,
586 partial ?
"tcl_prompt2" :
"tcl_prompt1", TCL_GLOBAL_ONLY );
587 if ( promptCmd == NULL )
592 fputs(
"% ", stdout );
597 code = Tcl_Eval( intp, promptCmd );
598 if ( code != TCL_OK )
600 Tcl_AddErrorInfo( intp,
601 "\n (script that generates prompt)" );
602 fprintf( stderr,
"%s\n", Tcl_GetStringResult( intp ) );