summaryrefslogtreecommitdiffstats
path: root/Mac/Python/gusiconfig.cpp
blob: df292fa5544b534068a9c552e9e4d1280926d651 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 * Generated with the GUSIConfig application and then hand-modified by jack.
 */

#define GUSI_SOURCE
#include <GUSIConfig.h>
#include <sys/cdefs.h>
#include <Resources.h>

#include "Python.h"
#include "macglue.h"
#include "pythonresources.h"

static void
PyMac_GUSISpin(bool wait)
{
	static Boolean	inForeground = true;
	int		maxsleep = 6;	/* 6 ticks is "normal" sleeptime */

	if (PyMac_ConsoleIsDead) return;

	if ( !wait )
		maxsleep = 0;

	PyMac_DoYield(maxsleep, 0); /* XXXX or is it safe to call python here? */
}


/* Declarations of Socket Factories */

__BEGIN_DECLS
void GUSIwithInetSockets();
void GUSIwithLocalSockets();
void GUSIwithMTInetSockets();
void GUSIwithMTTcpSockets();
void GUSIwithMTUdpSockets();
void GUSIwithOTInetSockets();
void GUSIwithOTTcpSockets();
void GUSIwithOTUdpSockets();
void GUSIwithPPCSockets();
void GUSISetupFactories();
__END_DECLS

/* Configure Socket Factories */

void GUSISetupFactories()
{
#ifdef GUSISetupFactories_BeginHook
	GUSISetupFactories_BeginHook
#endif
#if 1 || TARGET_API_MAC_CARBON
	GUSIwithInetSockets();
#else
	GUSIwithMTInetSockets();
#endif
#ifdef GUSISetupFactories_EndHook
	GUSISetupFactories_EndHook
#endif
}

/* Declarations of File Devices */

__BEGIN_DECLS
void GUSIwithDConSockets();
void GUSIwithNullSockets();
void GUSISetupDevices();
__END_DECLS

/* Configure File Devices */

void GUSISetupDevices()
{
#ifdef GUSISetupDevices_BeginHook
	GUSISetupDevices_BeginHook
#endif
#ifdef GUSISetupDevices_EndHook
	GUSISetupDevices_EndHook
#endif
}

#ifndef __cplusplus
#error GUSISetupConfig() needs to be written in C++
#endif

GUSIConfiguration::FileSuffix	sSuffices[] = {
	"", '????', '????'
};
extern "C" void GUSISetupConfig()
{
	Handle h;
	short oldrh, prefrh = -1;
	short resource_id = GUSIConfiguration::kNoResource;
	
	oldrh = CurResFile();
	
	/* Try override from the application resource fork */
	UseResFile(PyMac_AppRefNum);
	h = Get1Resource('GU\267I', GUSIOPTIONSOVERRIDE_ID);
	if ( h ) {
		resource_id = GUSIOPTIONSOVERRIDE_ID;
	} else {
		/* Next try normal resource from preference file */
		prefrh = PyMac_OpenPrefFile();
		h = Get1Resource('GU\267I', GUSIOPTIONS_ID);
		if ( h ) {
			resource_id = GUSIOPTIONS_ID;
		} else {
			/* Finally try normal resource from application */
			if ( prefrh != -1 ) {
				CloseResFile(prefrh);
				prefrh = -1;
			}
			resource_id = GUSIOPTIONS_ID;
		}
	}

	/* Now we have the right resource file topmost and the id. Init GUSI. */
	GUSIConfiguration * config =
		GUSIConfiguration::CreateInstance(resource_id);

	/* Finally restore the old resource file */
   	if ( prefrh != -1) CloseResFile(prefrh);
	UseResFile(oldrh);

	config->ConfigureDefaultTypeCreator('TEXT', 'R*ch');
#if 0
	config->ConfigureSuffices(
		sizeof(sSuffices)/sizeof(GUSIConfiguration::FileSuffix)-1, sSuffices);
#endif
	config->ConfigureAutoInitGraf(false);
	config->ConfigureAutoSpin(false);
	config->ConfigureHandleAppleEvents(false);
	config->ConfigureSigInt(false);
	config->ConfigureSigPipe(true);
	
	GUSISetHook(GUSI_SpinHook, (GUSIHook)PyMac_GUSISpin);

}

/**************** END GUSI CONFIGURATION *************************/