tclAppInit.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:5k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /* 
  2.  * tclAppInit.c --
  3.  *
  4.  * Provides a default version of the main program and Tcl_AppInit
  5.  * procedure for Tcl applications (without Tk).
  6.  *
  7.  * Copyright (c) 1993 The Regents of the University of California.
  8.  * Copyright (c) 1994-1997 Sun Microsystems, Inc.
  9.  * Copyright (c) 1998-1999 by Scriptics Corporation.
  10.  *
  11.  * See the file "license.terms" for information on usage and redistribution
  12.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  13.  *
  14.  * RCS: @(#) $Id: tclAppInit.c,v 1.11 2002/05/31 22:20:22 dgp Exp $
  15.  */
  16. #include "tcl.h"
  17. #ifdef TCL_TEST
  18. #include "tclInt.h"
  19. extern int Procbodytest_Init _ANSI_ARGS_((Tcl_Interp *interp));
  20. extern int Procbodytest_SafeInit _ANSI_ARGS_((Tcl_Interp *interp));
  21. extern int TclObjTest_Init _ANSI_ARGS_((Tcl_Interp *interp));
  22. extern int Tcltest_Init _ANSI_ARGS_((Tcl_Interp *interp));
  23. #ifdef TCL_THREADS
  24. extern int TclThread_Init _ANSI_ARGS_((Tcl_Interp *interp));
  25. #endif
  26. #endif /* TCL_TEST */
  27. #ifdef TCL_XT_TEST
  28. extern void XtToolkitInitialize _ANSI_ARGS_((void));
  29. extern int Tclxttest_Init _ANSI_ARGS_((Tcl_Interp *interp));
  30. #endif
  31. /*
  32.  *----------------------------------------------------------------------
  33.  *
  34.  * main --
  35.  *
  36.  * This is the main program for the application.
  37.  *
  38.  * Results:
  39.  * None: Tcl_Main never returns here, so this procedure never
  40.  * returns either.
  41.  *
  42.  * Side effects:
  43.  * Whatever the application does.
  44.  *
  45.  *----------------------------------------------------------------------
  46.  */
  47. int
  48. main(argc, argv)
  49.     int argc; /* Number of command-line arguments. */
  50.     char **argv; /* Values of command-line arguments. */
  51. {
  52.     /*
  53.      * The following #if block allows you to change the AppInit
  54.      * function by using a #define of TCL_LOCAL_APPINIT instead
  55.      * of rewriting this entire file.  The #if checks for that
  56.      * #define and uses Tcl_AppInit if it doesn't exist.
  57.      */
  58. #ifndef TCL_LOCAL_APPINIT
  59. #define TCL_LOCAL_APPINIT Tcl_AppInit    
  60. #endif
  61.     extern int TCL_LOCAL_APPINIT _ANSI_ARGS_((Tcl_Interp *interp));
  62.     /*
  63.      * The following #if block allows you to change how Tcl finds the startup
  64.      * script, prime the library or encoding paths, fiddle with the argv,
  65.      * etc., without needing to rewrite Tcl_Main()
  66.      */
  67. #ifdef TCL_LOCAL_MAIN_HOOK
  68.     extern int TCL_LOCAL_MAIN_HOOK _ANSI_ARGS_((int *argc, char ***argv));
  69. #endif
  70. #ifdef TCL_XT_TEST
  71.     XtToolkitInitialize();
  72. #endif
  73. #ifdef TCL_LOCAL_MAIN_HOOK
  74.     TCL_LOCAL_MAIN_HOOK(&argc, &argv);
  75. #endif
  76.     Tcl_Main(argc, argv, TCL_LOCAL_APPINIT);
  77.     return 0; /* Needed only to prevent compiler warning. */
  78. }
  79. /*
  80.  *----------------------------------------------------------------------
  81.  *
  82.  * Tcl_AppInit --
  83.  *
  84.  * This procedure performs application-specific initialization.
  85.  * Most applications, especially those that incorporate additional
  86.  * packages, will have their own version of this procedure.
  87.  *
  88.  * Results:
  89.  * Returns a standard Tcl completion code, and leaves an error
  90.  * message in the interp's result if an error occurs.
  91.  *
  92.  * Side effects:
  93.  * Depends on the startup script.
  94.  *
  95.  *----------------------------------------------------------------------
  96.  */
  97. int
  98. Tcl_AppInit(interp)
  99.     Tcl_Interp *interp; /* Interpreter for application. */
  100. {
  101.     if (Tcl_Init(interp) == TCL_ERROR) {
  102. return TCL_ERROR;
  103.     }
  104. #ifdef TCL_TEST
  105. #ifdef TCL_XT_TEST
  106.      if (Tclxttest_Init(interp) == TCL_ERROR) {
  107.  return TCL_ERROR;
  108.      }
  109. #endif
  110.     if (Tcltest_Init(interp) == TCL_ERROR) {
  111. return TCL_ERROR;
  112.     }
  113.     Tcl_StaticPackage(interp, "Tcltest", Tcltest_Init,
  114.             (Tcl_PackageInitProc *) NULL);
  115.     if (TclObjTest_Init(interp) == TCL_ERROR) {
  116. return TCL_ERROR;
  117.     }
  118. #ifdef TCL_THREADS
  119.     if (TclThread_Init(interp) == TCL_ERROR) {
  120. return TCL_ERROR;
  121.     }
  122. #endif
  123.     if (Procbodytest_Init(interp) == TCL_ERROR) {
  124. return TCL_ERROR;
  125.     }
  126.     Tcl_StaticPackage(interp, "procbodytest", Procbodytest_Init,
  127.             Procbodytest_SafeInit);
  128. #endif /* TCL_TEST */
  129.     /*
  130.      * Call the init procedures for included packages.  Each call should
  131.      * look like this:
  132.      *
  133.      * if (Mod_Init(interp) == TCL_ERROR) {
  134.      *     return TCL_ERROR;
  135.      * }
  136.      *
  137.      * where "Mod" is the name of the module.
  138.      */
  139.     /*
  140.      * Call Tcl_CreateCommand for application-specific commands, if
  141.      * they weren't already created by the init procedures called above.
  142.      */
  143.     /*
  144.      * Specify a user-specific startup file to invoke if the application
  145.      * is run interactively.  Typically the startup file is "~/.apprc"
  146.      * where "app" is the name of the application.  If this line is deleted
  147.      * then no user-specific startup file will be run under any conditions.
  148.      */
  149. #ifdef DJGPP
  150.     Tcl_SetVar(interp, "tcl_rcFileName", "~/tclsh.rc", TCL_GLOBAL_ONLY);
  151. #else
  152.     Tcl_SetVar(interp, "tcl_rcFileName", "~/.tclshrc", TCL_GLOBAL_ONLY);
  153. #endif
  154.     return TCL_OK;
  155. }