Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8a38714

Browse files
committed
Bit the bullet and added a private GUSISIOUX for Python. This makes the delayconsole and keepopen code neater. Also tells Sioux to behave better with events, and handles cmd-. during print better. The pythonpreferences have also changed due to this.
1 parent 6a9aec4 commit 8a38714

7 files changed

Lines changed: 274 additions & 27 deletions

File tree

Mac/Include/macglue.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ int PyMac_setfiletype(char *, long, long); /* Set file creator and type */
130130
void PyMac_Exit(int);
131131
void PyMac_InitApplication(void);
132132
void PyMac_OutputSeen(void);
133+
void PyMac_OutputNotSeen(void);
134+
int PyMac_GetDelayConsoleFlag(void);
133135
#ifdef USE_MAC_APPLET_SUPPORT
134136
void PyMac_InitApplet(void);
135137
#endif

Mac/Include/pythonresources.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
137137
#define PYTHONOPTIONS_ID 228
138138
#define PYTHONOPTIONSOVERRIDE_ID 229
139139

140-
#define POPT_VERSION_CURRENT 6 /* Current version number */
140+
#define POPT_VERSION_CURRENT 7 /* Current version number */
141141
#define POPT_KEEPCONSOLE_NEVER 0
142142
#define POPT_KEEPCONSOLE_OUTPUT 1
143143
#define POPT_KEEPCONSOLE_ERROR 2
@@ -158,6 +158,7 @@ typedef struct PyMac_PrefRecord {
158158
unsigned char tabwarn;
159159
unsigned char nosite;
160160
unsigned char nonavservice;
161+
unsigned char delayconsole;
161162
} PyMac_PrefRecord;
162163
#endif
163164

Mac/Lib/pythonprefs.py

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
OVERRIDE_GUSI_ID = 10241
1717

1818
# version
19-
CUR_VERSION=6
19+
CUR_VERSION=7
2020

2121
preffilename = PstringLoader(AnyResLoader('STR ', resname=PREFNAME_NAME)).load()
2222
pref_fss = preferencefile(preffilename, 'Pyth', 'pref')
2323

2424
class PoptLoader(VersionLoader):
2525
def __init__(self, loader):
26-
VersionLoader.__init__(self, "bbbbbbbbbbbbb", loader)
26+
VersionLoader.__init__(self, "bbbbbbbbbbbbbb", loader)
2727

2828
def versioncheck(self, data):
2929
if data[0] == CUR_VERSION:
@@ -44,16 +44,11 @@ def load(self):
4444
tp = self.data[0:4]
4545
cr = self.data[4:8]
4646
flags = ord(self.data[9])
47-
delay = ((flags & 0x20) == 0x20)
48-
return cr, tp, delay
47+
return cr, tp
4948

50-
def save(self, (cr, tp, delay)):
49+
def save(self, (cr, tp)):
5150
flags = ord(self.data[9])
52-
if delay:
53-
flags = flags | 0x20
54-
else:
55-
flags = flags & ~0x20
56-
newdata = tp + cr + self.data[8] + chr(flags) + self.data[10:]
51+
newdata = tp + cr + self.data[8:]
5752
self.loader.save(newdata)
5853

5954
popt_default_default = NullLoader(chr(CUR_VERSION) + 8*'\0')
@@ -85,23 +80,23 @@ def load(self):
8580
diralias = self.dir.load()
8681
dirfss, dummy = macfs.RawAlias(diralias).Resolve()
8782
dict['dir'] = dirfss
88-
dict['creator'], dict['type'], dict['delayconsole'] = self.gusi.load()
83+
dict['creator'], dict['type'] = self.gusi.load()
8984
flags = self.popt.load()
9085
dict['version'], dict['inspect'], dict['verbose'], dict['optimize'], \
9186
dict['unbuffered'], dict['debugging'], dummy, dict['keep_console'], \
9287
dict['nointopt'], dict['noargs'], dict['tabwarn'], \
93-
dict['nosite'], dict['nonavservice'] = flags
88+
dict['nosite'], dict['nonavservice'], dict['delayconsole'] = flags
9489
return dict
9590

9691
def save(self, dict):
9792
self.path.save(dict['path'])
9893
diralias = macfs.FSSpec(dict['dir']).NewAlias().data
9994
self.dir.save(diralias)
100-
self.gusi.save((dict['creator'], dict['type'], dict['delayconsole']))
95+
self.gusi.save((dict['creator'], dict['type']))
10196
flags = dict['version'], dict['inspect'], dict['verbose'], dict['optimize'], \
10297
dict['unbuffered'], dict['debugging'], 0, dict['keep_console'], \
10398
dict['nointopt'], dict['noargs'], dict['tabwarn'], \
104-
dict['nosite'], dict['nonavservice']
99+
dict['nosite'], dict['nonavservice'], dict['delayconsole']
105100
self.popt.save(flags)
106101

107102
def AppletOptions(file):

Mac/Python/macglue.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,25 @@ PyErr_CheckSignals()
539539
return 0;
540540
}
541541

542+
#if 0
543+
/*
544+
** This routine is called if we know that an external library yielded
545+
** to background tasks, so we shouldn't count that time in our computation
546+
** of how much CPU we used.
547+
** This happens with SIOUX, and the routine is called from our modified
548+
** GUSISIOUX.
549+
*/
550+
void
551+
PyMac_LibraryDidYield(int howlong)
552+
{
553+
unsigned long maxnextcheck = (unsigned long)LMGetTicks() + schedparams.check_interval;
554+
555+
schedparams.next_check = schedparams.next_check + howlong;
556+
if (schedparams.next_check > maxnextcheck )
557+
schedparams.next_check = maxnextcheck;
558+
}
559+
#endif
560+
542561
int
543562
PyOS_InterruptOccurred()
544563
{

Mac/Python/macmain.c

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ extern int ccommand(char ***);
5353
#ifdef USE_MAC_SHARED_LIBRARY
5454
extern PyMac_AddLibResources(void);
5555
#endif
56-
#ifdef USE_GUSI
57-
#include "GUSISIOUX.h"
58-
#endif
56+
//#ifdef USE_GUSI
57+
//#include "GUSISIOUX.h"
58+
//#endif
5959

6060
#define STARTUP "PythonStartup"
6161

@@ -71,6 +71,14 @@ short PyMac_AppRefNum; /* RefNum of application resource fork */
7171
static char **orig_argv;
7272
static int orig_argc;
7373

74+
/* A flag which remembers whether the user has acknowledged all the console
75+
** output (by typing something)
76+
*/
77+
#define STATE_UNKNOWN 0
78+
#define STATE_LASTREAD 1
79+
#define STATE_LASTWRITE 2
80+
int console_output_state = STATE_UNKNOWN;
81+
7482
PyMac_PrefRecord PyMac_options;
7583

7684
static void Py_Main(int, char **); /* Forward */
@@ -544,10 +552,18 @@ Py_Main(argc, argv)
544552
void
545553
PyMac_OutputSeen()
546554
{
547-
#ifdef GUSISIOUX_STATE_UNKNOWN
548-
gusisioux_state = GUSISIOUX_STATE_LASTREAD;
549-
#endif
555+
console_output_state = STATE_LASTREAD;
556+
}
557+
558+
/*
559+
** Set the "unseen output" flag
560+
*/
561+
void
562+
PyMac_OutputNotSeen()
563+
{
564+
console_output_state = STATE_LASTWRITE;
550565
}
566+
551567

552568
/*
553569
** Terminate application
@@ -569,15 +585,11 @@ PyMac_Exit(status)
569585
keep = 0;
570586
break;
571587
case POPT_KEEPCONSOLE_OUTPUT:
572-
#ifdef GUSISIOUX_STATE_UNKNOWN
573-
if (gusisioux_state == GUSISIOUX_STATE_LASTWRITE ||
574-
gusisioux_state == GUSISIOUX_STATE_UNKNOWN )
588+
if (console_output_state == STATE_LASTWRITE ||
589+
console_output_state == STATE_UNKNOWN )
575590
keep = 1;
576591
else
577592
keep = 0;
578-
#else
579-
keep = 1;
580-
#endif
581593
break;
582594
case POPT_KEEPCONSOLE_ERROR:
583595
keep = (status != 0);
@@ -636,3 +648,9 @@ Py_GetExecPrefix()
636648
{
637649
return PyMac_GetPythonDir();
638650
}
651+
652+
int
653+
PyMac_GetDelayConsoleFlag()
654+
{
655+
return (int)PyMac_options.delayconsole;
656+
}

0 commit comments

Comments
 (0)