アットウィキロゴ

win > Tcl_AppInit

概要

アプリケーションに特化した初期化を行う。

ソースwin/winMain.c

引数

  • Tcl_Interp *interp TCLインタープリターへのポインター

戻り値




処理

 Tcl_Initを呼び出してTCL_ERRORが返ってくればerror:へジャンプして終了
 if (Tcl_Init(interp) == TCL_ERROR) {
  goto error;
 }
 Tk_Initを呼び出してTCL_ERRORが返ってくればerror:へジャンプして終了
 if (Tk_Init(interp) == TCL_ERROR) {
  goto error;
 }



 Tcl_StaticPackage(interp, "Tk", Tk_Init, Tk_SafeInit);


     /*
      * Initialize the console only if we are running as an interactive
      * application.
      */
 
     if (consoleRequired) {
 	if (Tk_CreateConsoleWindow(interp) == TCL_ERROR) {
 	    goto error;
 	}
     }
 #if defined(STATIC_BUILD) && TCL_USE_STATIC_PACKAGES
     if (Registry_Init(interp) == TCL_ERROR) {
 	goto error;
     }
     Tcl_StaticPackage(interp, "registry", Registry_Init, NULL);
 
     if (Dde_Init(interp) == TCL_ERROR) {
 	goto error;
     }
     Tcl_StaticPackage(interp, "dde", Dde_Init, NULL);
 #endif
 
 #ifdef TK_TEST
     if (Tktest_Init(interp) == TCL_ERROR) {
 	goto error;
     }
     Tcl_StaticPackage(interp, "Tktest", Tktest_Init, NULL);
 #endif /* TK_TEST */
 
     /*
      * Call the init procedures for included packages. Each call should look
      * like this:
      *
      * if (Mod_Init(interp) == TCL_ERROR) {
      *     return TCL_ERROR;
      * }
      *
      * where "Mod" is the name of the module. (Dynamically-loadable packages
      * should have the same entry-point name.)
      */
 
     /*
      * Call Tcl_CreateCommand for application-specific commands, if they
      * weren't already created by the init procedures called above.
      */
 
     /*
      * Specify a user-specific startup file to invoke if the application is
      * run interactively. Typically the startup file is "~/.apprc" where "app"
      * is the name of the application. If this line is deleted then no user-
      * specific startup file will be run under any conditions.
      */
 
     Tcl_SetVar(interp, "tcl_rcFileName", "~/wishrc.tcl", TCL_GLOBAL_ONLY);
     return TCL_OK;
 
 error:
     MultiByteToWideChar(CP_UTF8, 0, Tcl_GetStringResult(interp), -1,
 	    msgString, TK_MAX_WARN_LEN);
     /*
      * Truncate MessageBox string if it is too long to not overflow the screen
      * and cause possible oversized window error.
      */
 	memcpy(msgString + TK_MAX_WARN_LEN, L" ...", 5 * sizeof(WCHAR));
     MessageBeep(MB_ICONEXCLAMATION);
     MessageBoxW(NULL, msgString, L"Error in Wish",
 	    MB_ICONSTOP | MB_OK | MB_TASKMODAL | MB_SETFOREGROUND);
     ExitProcess(1);
 
     /*
      * We won't reach this, but we need the return.
      */
 
     return TCL_ERROR;
 }




ソース

 /*
  *----------------------------------------------------------------------
  *
  * Tcl_AppInit --
  *
  *	This procedure performs application-specific initialization. Most
  *	applications, especially those that incorporate additional packages,
  *	will have their own version of this procedure.
  *
  * Results:
  *	Returns a standard Tcl completion code, and leaves an error message in
  *	the interp's result if an error occurs.
  *
  * Side effects:
  *	Depends on the startup script.
  *
  *----------------------------------------------------------------------
  */
 int
 Tcl_AppInit(
     [[Tcl_Interp]] *interp)		/* Interpreter for application. */
 {
 #define TK_MAX_WARN_LEN 1024
     WCHAR msgString[TK_MAX_WARN_LEN + 5];
 
     if (Tcl_Init(interp) == TCL_ERROR) {
 	goto error;
     }
     if (Tk_Init(interp) == TCL_ERROR) {
 	goto error;
     }
     Tcl_StaticPackage(interp, "Tk", Tk_Init, Tk_SafeInit);
 
     /*
      * Initialize the console only if we are running as an interactive
      * application.
      */
 
     if (consoleRequired) {
 	if (Tk_CreateConsoleWindow(interp) == TCL_ERROR) {
 	    goto error;
 	}
     }
 #if defined(STATIC_BUILD) && TCL_USE_STATIC_PACKAGES
     if (Registry_Init(interp) == TCL_ERROR) {
 	goto error;
     }
     Tcl_StaticPackage(interp, "registry", Registry_Init, NULL);
 
     if (Dde_Init(interp) == TCL_ERROR) {
 	goto error;
     }
     Tcl_StaticPackage(interp, "dde", Dde_Init, NULL);
 #endif
 
 #ifdef TK_TEST
     if (Tktest_Init(interp) == TCL_ERROR) {
 	goto error;
     }
     Tcl_StaticPackage(interp, "Tktest", Tktest_Init, NULL);
 #endif /* TK_TEST */
 
     /*
      * Call the init procedures for included packages. Each call should look
      * like this:
      *
      * if (Mod_Init(interp) == TCL_ERROR) {
      *     return TCL_ERROR;
      * }
      *
      * where "Mod" is the name of the module. (Dynamically-loadable packages
      * should have the same entry-point name.)
      */
 
     /*
      * Call Tcl_CreateCommand for application-specific commands, if they
      * weren't already created by the init procedures called above.
      */
 
     /*
      * Specify a user-specific startup file to invoke if the application is
      * run interactively. Typically the startup file is "~/.apprc" where "app"
      * is the name of the application. If this line is deleted then no user-
      * specific startup file will be run under any conditions.
      */
 
     Tcl_SetVar(interp, "tcl_rcFileName", "~/wishrc.tcl", TCL_GLOBAL_ONLY);
     return TCL_OK;
 
 error:
     MultiByteToWideChar(CP_UTF8, 0, Tcl_GetStringResult(interp), -1,
 	    msgString, TK_MAX_WARN_LEN);
     /*
      * Truncate MessageBox string if it is too long to not overflow the screen
      * and cause possible oversized window error.
      */
 	memcpy(msgString + TK_MAX_WARN_LEN, L" ...", 5 * sizeof(WCHAR));
     MessageBeep(MB_ICONEXCLAMATION);
     MessageBoxW(NULL, msgString, L"Error in Wish",
 	    MB_ICONSTOP | MB_OK | MB_TASKMODAL | MB_SETFOREGROUND);
     ExitProcess(1);
 
     /*
      * We won't reach this, but we need the return.
      */
 
     return TCL_ERROR;
 }
最終更新:2011年10月31日 16:46