special cases and other things in wxPython, and since I plan on making several more, I've decided to put the SWIG sources in wxPython's CVS instead of relying on maintaining patches. This effectivly becomes a fork of an obsolete version of SWIG, :-( but since SWIG 1.3 still doesn't have some things I rely on in 1.1, not to mention that my custom patches would all have to be redone, I felt that this is the easier road to take. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15307 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			230 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			230 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* This is a support file needed to build a new version of Wish
 | |
|    Normally, this capability is found in TkAppInit.c, but this creates
 | |
|    tons of namespace problems for many applications. */
 | |
|    
 | |
| #include <Gestalt.h>
 | |
| #include <ToolUtils.h>
 | |
| #include <Fonts.h>
 | |
| #include <Dialogs.h>
 | |
| #include <SegLoad.h>
 | |
| #include <Traps.h>
 | |
| 
 | |
| #include "tk.h"
 | |
| #include "tkInt.h"
 | |
| #include "tkMacInt.h"
 | |
| 
 | |
| typedef int (*TclMacConvertEventPtr) _ANSI_ARGS_((EventRecord *eventPtr));
 | |
| Tcl_Interp *gStdoutInterp = NULL;
 | |
| 
 | |
| void 	TclMacSetEventProc _ANSI_ARGS_((TclMacConvertEventPtr procPtr));
 | |
| int 	TkMacConvertEvent _ANSI_ARGS_((EventRecord *eventPtr));
 | |
| 
 | |
| /*
 | |
|  * Prototypes for functions the ANSI library needs to link against.
 | |
|  */
 | |
| short			InstallConsole _ANSI_ARGS_((short fd));
 | |
| void			RemoveConsole _ANSI_ARGS_((void));
 | |
| long			WriteCharsToConsole _ANSI_ARGS_((char *buff, long n));
 | |
| long			ReadCharsFromConsole _ANSI_ARGS_((char *buff, long n));
 | |
| extern char *		__ttyname _ANSI_ARGS_((long fildes));
 | |
| short			SIOUXHandleOneEvent _ANSI_ARGS_((EventRecord *event));
 | |
| 
 | |
| /*
 | |
|  * Forward declarations for procedures defined later in this file:
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  *----------------------------------------------------------------------
 | |
|  *
 | |
|  * MacintoshInit --
 | |
|  *
 | |
|  *	This procedure calls Mac specific initilization calls.  Most of
 | |
|  *	these calls must be made as soon as possible in the startup
 | |
|  *	process.
 | |
|  *
 | |
|  * Results:
 | |
|  *	Returns TCL_OK if everything went fine.  If it didn't the 
 | |
|  *	application should probably fail.
 | |
|  *
 | |
|  * Side effects:
 | |
|  *	Inits the application.
 | |
|  *
 | |
|  *----------------------------------------------------------------------
 | |
|  */
 | |
| 
 | |
| int
 | |
| MacintoshInit()
 | |
| {
 | |
|     int i;
 | |
|     long result, mask = 0x0700; 		/* mask = system 7.x */
 | |
| 
 | |
|     /*
 | |
|      * Tk needs us to set the qd pointer it uses.  This is needed
 | |
|      * so Tk doesn't have to assume the availablity of the qd global
 | |
|      * variable.  Which in turn allows Tk to be used in code resources.
 | |
|      */
 | |
|     tcl_macQdPtr = &qd;
 | |
| 
 | |
|     InitGraf(&tcl_macQdPtr->thePort);
 | |
|     InitFonts();
 | |
|     InitWindows();
 | |
|     InitMenus();
 | |
|     InitDialogs((long) NULL);		
 | |
|     InitCursor();
 | |
| 
 | |
|     /*
 | |
|      * Make sure we are running on system 7 or higher
 | |
|      */
 | |
|      
 | |
|     if ((NGetTrapAddress(_Gestalt, ToolTrap) == 
 | |
|     	    NGetTrapAddress(_Unimplemented, ToolTrap))
 | |
|     	    || (((Gestalt(gestaltSystemVersion, &result) != noErr)
 | |
| 	    || (mask != (result & mask))))) {
 | |
| 	panic("Tcl/Tk requires System 7 or higher.");
 | |
|     }
 | |
| 
 | |
|     /*
 | |
|      * Make sure we have color quick draw 
 | |
|      * (this means we can't run on 68000 macs)
 | |
|      */
 | |
|      
 | |
|     if (((Gestalt(gestaltQuickdrawVersion, &result) != noErr)
 | |
| 	    || (result < gestalt32BitQD13))) {
 | |
| 	panic("Tk requires Color QuickDraw.");
 | |
|     }
 | |
| 
 | |
|     
 | |
|     FlushEvents(everyEvent, 0);
 | |
|     SetEventMask(everyEvent);
 | |
| 
 | |
|     /*
 | |
|      * Set up stack & heap sizes
 | |
|      */
 | |
|     /* TODO: stack size
 | |
|        size = StackSpace();
 | |
|        SetAppLimit(GetAppLimit() - 8192);
 | |
|      */
 | |
|     MaxApplZone();
 | |
|     for (i = 0; i < 4; i++) {
 | |
| 	(void) MoreMasters();
 | |
|     }
 | |
| 
 | |
|     TclMacSetEventProc(TkMacConvertEvent);
 | |
|     TkConsoleCreate();
 | |
| 
 | |
|     return TCL_OK;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  *----------------------------------------------------------------------
 | |
|  *
 | |
|  * SetupMainInterp --
 | |
|  *
 | |
|  *	This procedure calls initalization routines require a Tcl 
 | |
|  *	interp as an argument.  This call effectively makes the passed
 | |
|  *	iterpreter the "main" interpreter for the application.
 | |
|  *
 | |
|  * Results:
 | |
|  *	Returns TCL_OK if everything went fine.  If it didn't the 
 | |
|  *	application should probably fail.
 | |
|  *
 | |
|  * Side effects:
 | |
|  *	More initilization.
 | |
|  *
 | |
|  *----------------------------------------------------------------------
 | |
|  */
 | |
| 
 | |
| int
 | |
| SetupMainInterp(
 | |
|     Tcl_Interp *interp)
 | |
| {
 | |
|     /*
 | |
|      * Initialize the console only if we are running as an interactive
 | |
|      * application.
 | |
|      */
 | |
| 
 | |
|     TkMacInitAppleEvents(interp);
 | |
|     TkMacInitMenus(interp);
 | |
| 
 | |
|     if (strcmp(Tcl_GetVar(interp, "tcl_interactive", TCL_GLOBAL_ONLY), "1")
 | |
| 	    == 0) {
 | |
| 	if (TkConsoleInit(interp) == TCL_ERROR) {
 | |
| 	    goto error;
 | |
| 	}
 | |
|     }
 | |
| 
 | |
|     /*
 | |
|      * Attach the global interpreter to tk's expected global console
 | |
|      */
 | |
| 
 | |
|     gStdoutInterp = interp;
 | |
| 
 | |
|     return TCL_OK;
 | |
| 
 | |
| error:
 | |
|     panic(interp->result);
 | |
|     return TCL_ERROR;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  *----------------------------------------------------------------------
 | |
|  *
 | |
|  * InstallConsole, RemoveConsole, etc. --
 | |
|  *
 | |
|  *	The following functions provide the UI for the console package.
 | |
|  *	Users wishing to replace SIOUX with their own console package 
 | |
|  *	need only provide the four functions below in a library.
 | |
|  *
 | |
|  * Results:
 | |
|  *	See SIOUX documentation for details.
 | |
|  *
 | |
|  * Side effects:
 | |
|  *	See SIOUX documentation for details.
 | |
|  *
 | |
|  *----------------------------------------------------------------------
 | |
|  */
 | |
| 
 | |
| short 
 | |
| InstallConsole(short fd)
 | |
| {
 | |
| #pragma unused (fd)
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| void 
 | |
| RemoveConsole(void)
 | |
| {
 | |
| }
 | |
| 
 | |
| long 
 | |
| WriteCharsToConsole(char *buffer, long n)
 | |
| {
 | |
|     TkConsolePrint(gStdoutInterp, TCL_STDOUT, buffer, n);
 | |
|     return n;
 | |
| }
 | |
| 
 | |
| long 
 | |
| ReadCharsFromConsole(char *buffer, long n)
 | |
| {
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| extern char *
 | |
| __ttyname(long fildes)
 | |
| {
 | |
|     static char *__devicename = "null device";
 | |
| 
 | |
|     if (fildes >= 0 && fildes <= 2) {
 | |
| 	return (__devicename);
 | |
|     }
 | |
|     
 | |
|     return (0L);
 | |
| }
 | |
| 
 | |
| short
 | |
| SIOUXHandleOneEvent(EventRecord *event)
 | |
| {
 | |
|     return 0;
 | |
| }
 |