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

通讯编程

开发平台:

Visual C++

  1. /* 
  2.  * tclMacAppInit.c --
  3.  *
  4.  * Provides a version of the Tcl_AppInit procedure for the example shell.
  5.  *
  6.  * Copyright (c) 1993-1994 Lockheed Missle & Space Company, AI Center
  7.  * Copyright (c) 1995-1997 Sun Microsystems, Inc.
  8.  *
  9.  * See the file "license.terms" for information on usage and redistribution
  10.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  11.  *
  12.  * RCS: @(#) $Id: tclMacAppInit.c,v 1.9 2001/11/23 01:27:13 das Exp $
  13.  */
  14. #include "tcl.h"
  15. #include "tclInt.h"
  16. #include "tclPort.h"
  17. #include "tclMac.h"
  18. #include "tclMacInt.h"
  19. #if defined(THINK_C)
  20. #   include <console.h>
  21. #elif defined(__MWERKS__)
  22. #   include <SIOUX.h>
  23. EXTERN short InstallConsole _ANSI_ARGS_((short fd));
  24. #endif
  25. #ifdef TCL_TEST
  26. extern int Procbodytest_Init _ANSI_ARGS_((Tcl_Interp *interp));
  27. extern int Procbodytest_SafeInit _ANSI_ARGS_((Tcl_Interp *interp));
  28. extern int TclObjTest_Init _ANSI_ARGS_((Tcl_Interp *interp));
  29. extern int Tcltest_Init _ANSI_ARGS_((Tcl_Interp *interp));
  30. #endif /* TCL_TEST */
  31. /*
  32.  * Forward declarations for procedures defined later in this file:
  33.  */
  34. static int MacintoshInit _ANSI_ARGS_((void));
  35. /*
  36.  *----------------------------------------------------------------------
  37.  *
  38.  * main --
  39.  *
  40.  * Main program for tclsh.  This file can be used as a prototype
  41.  * for other applications using the Tcl library.
  42.  *
  43.  * Results:
  44.  * None. This procedure never returns (it exits the process when
  45.  * it's done.
  46.  *
  47.  * Side effects:
  48.  * This procedure initializes the Macintosh world and then 
  49.  * calls Tcl_Main.  Tcl_Main will never return except to exit.
  50.  *
  51.  *----------------------------------------------------------------------
  52.  */
  53. void
  54. main(
  55.     int argc, /* Number of arguments. */
  56.     char **argv) /* Array of argument strings. */
  57. {
  58.     char *newArgv[2];
  59.     
  60.     if (MacintoshInit()  != TCL_OK) {
  61. Tcl_Exit(1);
  62.     }
  63.     argc = 1;
  64.     newArgv[0] = "tclsh";
  65.     newArgv[1] = NULL;
  66.     Tcl_Main(argc, newArgv, Tcl_AppInit);
  67. }
  68. /*
  69.  *----------------------------------------------------------------------
  70.  *
  71.  * Tcl_AppInit --
  72.  *
  73.  * This procedure performs application-specific initialization.
  74.  * Most applications, especially those that incorporate additional
  75.  * packages, will have their own version of this procedure.
  76.  *
  77.  * Results:
  78.  * Returns a standard Tcl completion code, and leaves an error
  79.  * message in the interp's result if an error occurs.
  80.  *
  81.  * Side effects:
  82.  * Depends on the startup script.
  83.  *
  84.  *----------------------------------------------------------------------
  85.  */
  86. int
  87. Tcl_AppInit(
  88.     Tcl_Interp *interp) /* Interpreter for application. */
  89. {
  90.     if (Tcl_Init(interp) == TCL_ERROR) {
  91. return TCL_ERROR;
  92.     }
  93. #ifdef TCL_TEST
  94.     if (Tcltest_Init(interp) == TCL_ERROR) {
  95. return TCL_ERROR;
  96.     }
  97.     Tcl_StaticPackage(interp, "Tcltest", Tcltest_Init,
  98.             (Tcl_PackageInitProc *) NULL);
  99.     if (TclObjTest_Init(interp) == TCL_ERROR) {
  100. return TCL_ERROR;
  101.     }
  102.     if (Procbodytest_Init(interp) == TCL_ERROR) {
  103. return TCL_ERROR;
  104.     }
  105.     Tcl_StaticPackage(interp, "procbodytest", Procbodytest_Init,
  106.             Procbodytest_SafeInit);
  107. #endif /* TCL_TEST */
  108.     /*
  109.      * Call the init procedures for included packages.  Each call should
  110.      * look like this:
  111.      *
  112.      * if (Mod_Init(interp) == TCL_ERROR) {
  113.      *     return TCL_ERROR;
  114.      * }
  115.      *
  116.      * where "Mod" is the name of the module.
  117.      */
  118.     /*
  119.      * Call Tcl_CreateCommand for application-specific commands, if
  120.      * they weren't already created by the init procedures called above.
  121.      * Each call would loo like this:
  122.      *
  123.      * Tcl_CreateCommand(interp, "tclName", CFuncCmd, NULL, NULL);
  124.      */
  125.     /*
  126.      * Specify a user-specific startup script to invoke if the application
  127.      * is run interactively.  On the Mac we can specifiy either a TEXT resource
  128.      * which contains the script or the more UNIX like file location
  129.      * may also used.  (I highly recommend using the resource method.)
  130.      */
  131.     Tcl_SetVar(interp, "tcl_rcRsrcName", "tclshrc", TCL_GLOBAL_ONLY);
  132.     /* Tcl_SetVar(interp, "tcl_rcFileName", "~/.tclshrc", TCL_GLOBAL_ONLY); */
  133.     return TCL_OK;
  134. }
  135. /*
  136.  *----------------------------------------------------------------------
  137.  *
  138.  * MacintoshInit --
  139.  *
  140.  * This procedure calls initalization routines to set up a simple
  141.  * console on a Macintosh.  This is necessary as the Mac doesn't
  142.  * have a stdout & stderr by default.
  143.  *
  144.  * Results:
  145.  * Returns TCL_OK if everything went fine.  If it didn't the 
  146.  * application should probably fail.
  147.  *
  148.  * Side effects:
  149.  * Inits the appropiate console package.
  150.  *
  151.  *----------------------------------------------------------------------
  152.  */
  153. static int
  154. MacintoshInit()
  155. {
  156. #if GENERATING68K && !GENERATINGCFM
  157.     SetApplLimit(GetApplLimit() - (TCL_MAC_68K_STACK_GROWTH));
  158. #endif
  159.     MaxApplZone();
  160. #if defined(THINK_C)
  161.     /* Set options for Think C console package */
  162.     /* The console package calls the Mac init calls */
  163.     console_options.pause_atexit = 0;
  164.     console_options.title = "pTcl Interpreter";
  165. #elif defined(__MWERKS__)
  166.     /* Set options for CodeWarrior SIOUX package */
  167.     SIOUXSettings.autocloseonquit = true;
  168.     SIOUXSettings.showstatusline = true;
  169.     SIOUXSettings.asktosaveonclose = false;
  170.     SIOUXSettings.wasteusetempmemory = true;    
  171.     InstallConsole(0);
  172.     SIOUXSetTitle("pTcl Interpreter");
  173. #elif defined(applec)
  174.     /* Init packages used by MPW SIOW package */
  175.     InitGraf((Ptr)&qd.thePort);
  176.     InitFonts();
  177.     InitWindows();
  178.     InitMenus();
  179.     TEInit();
  180.     InitDialogs(nil);
  181.     InitCursor();
  182. #endif
  183.     Tcl_MacSetEventProc((Tcl_MacConvertEventPtr) SIOUXHandleOneEvent);
  184.     
  185.     /* No problems with initialization */
  186.     return TCL_OK;
  187. }