Keepconsole is now a 4-way option: never/errorexit/unseen output/always. Default is "unseen output". Upped the Popt version number.
This commit is contained in:
parent
e126233cd9
commit
4a5eb967b8
|
@ -1 +1 @@
|
||||||
#define BUILD 55
|
#define BUILD 66
|
||||||
|
|
|
@ -68,9 +68,11 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#define OPT_OPTIMIZE 5
|
#define OPT_OPTIMIZE 5
|
||||||
#define OPT_UNBUFFERED 6
|
#define OPT_UNBUFFERED 6
|
||||||
#define OPT_DEBUGGING 7
|
#define OPT_DEBUGGING 7
|
||||||
#define OPT_KEEPNORMAL 8
|
#define OPT_KEEPALWAYS 8
|
||||||
#define OPT_KEEPERROR 9
|
#define OPT_KEEPOUTPUT 9
|
||||||
#define OPT_CMDLINE 10
|
#define OPT_KEEPERROR 10
|
||||||
|
#define OPT_KEEPNEVER 11
|
||||||
|
#define OPT_CMDLINE 12
|
||||||
#define OPT_TABWARN 13
|
#define OPT_TABWARN 13
|
||||||
#define OPT_NOSITE 14
|
#define OPT_NOSITE 14
|
||||||
#define OPT_HELP 15
|
#define OPT_HELP 15
|
||||||
|
@ -134,17 +136,12 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
/* The Python options resource and offset of its members */
|
/* The Python options resource and offset of its members */
|
||||||
#define PYTHONOPTIONS_ID 228
|
#define PYTHONOPTIONS_ID 228
|
||||||
#define PYTHONOPTIONSOVERRIDE_ID 229
|
#define PYTHONOPTIONSOVERRIDE_ID 229
|
||||||
#if 0
|
|
||||||
#define POPT_INSPECT 0
|
|
||||||
#define POPT_VERBOSE 1
|
|
||||||
#define POPT_OPTIMIZE 2
|
|
||||||
#define POPT_UNBUFFERED 3
|
|
||||||
#define POPT_DEBUGGING 4
|
|
||||||
#define POPT_KEEPNORM 5
|
|
||||||
#define POPT_KEEPERR 6
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define POPT_VERSION_CURRENT 5 /* Current version number */
|
#define POPT_VERSION_CURRENT 6 /* Current version number */
|
||||||
|
#define POPT_KEEPCONSOLE_NEVER 0
|
||||||
|
#define POPT_KEEPCONSOLE_OUTPUT 1
|
||||||
|
#define POPT_KEEPCONSOLE_ERROR 2
|
||||||
|
#define POPT_KEEPCONSOLE_ALWAYS 3
|
||||||
|
|
||||||
#ifndef rez
|
#ifndef rez
|
||||||
typedef struct PyMac_PrefRecord {
|
typedef struct PyMac_PrefRecord {
|
||||||
|
@ -154,8 +151,8 @@ typedef struct PyMac_PrefRecord {
|
||||||
unsigned char optimize;
|
unsigned char optimize;
|
||||||
unsigned char unbuffered;
|
unsigned char unbuffered;
|
||||||
unsigned char debugging;
|
unsigned char debugging;
|
||||||
unsigned char keep_normal;
|
unsigned char unused;
|
||||||
unsigned char keep_error;
|
unsigned char keep_console;
|
||||||
unsigned char nointopt;
|
unsigned char nointopt;
|
||||||
unsigned char noargs;
|
unsigned char noargs;
|
||||||
unsigned char tabwarn;
|
unsigned char tabwarn;
|
||||||
|
|
|
@ -16,7 +16,7 @@ OVERRIDE_POPT_ID = 229
|
||||||
OVERRIDE_GUSI_ID = 10241
|
OVERRIDE_GUSI_ID = 10241
|
||||||
|
|
||||||
# version
|
# version
|
||||||
CUR_VERSION=5
|
CUR_VERSION=6
|
||||||
|
|
||||||
preffilename = PstringLoader(AnyResLoader('STR ', resname=PREFNAME_NAME)).load()
|
preffilename = PstringLoader(AnyResLoader('STR ', resname=PREFNAME_NAME)).load()
|
||||||
pref_fss = preferencefile(preffilename, 'Pyth', 'pref')
|
pref_fss = preferencefile(preffilename, 'Pyth', 'pref')
|
||||||
|
@ -88,7 +88,7 @@ class PythonOptions:
|
||||||
dict['creator'], dict['type'], dict['delayconsole'] = self.gusi.load()
|
dict['creator'], dict['type'], dict['delayconsole'] = self.gusi.load()
|
||||||
flags = self.popt.load()
|
flags = self.popt.load()
|
||||||
dict['version'], dict['inspect'], dict['verbose'], dict['optimize'], \
|
dict['version'], dict['inspect'], dict['verbose'], dict['optimize'], \
|
||||||
dict['unbuffered'], dict['debugging'], dict['keepopen'], dict['keeperror'], \
|
dict['unbuffered'], dict['debugging'], dummy, dict['keep_console'], \
|
||||||
dict['nointopt'], dict['noargs'], dict['tabwarn'], \
|
dict['nointopt'], dict['noargs'], dict['tabwarn'], \
|
||||||
dict['nosite'], dict['nonavservice'] = flags
|
dict['nosite'], dict['nonavservice'] = flags
|
||||||
return dict
|
return dict
|
||||||
|
@ -99,7 +99,7 @@ class PythonOptions:
|
||||||
self.dir.save(diralias)
|
self.dir.save(diralias)
|
||||||
self.gusi.save((dict['creator'], dict['type'], dict['delayconsole']))
|
self.gusi.save((dict['creator'], dict['type'], dict['delayconsole']))
|
||||||
flags = dict['version'], dict['inspect'], dict['verbose'], dict['optimize'], \
|
flags = dict['version'], dict['inspect'], dict['verbose'], dict['optimize'], \
|
||||||
dict['unbuffered'], dict['debugging'], dict['keepopen'], dict['keeperror'], \
|
dict['unbuffered'], dict['debugging'], 0, dict['keep_console'], \
|
||||||
dict['nointopt'], dict['noargs'], dict['tabwarn'], \
|
dict['nointopt'], dict['noargs'], dict['tabwarn'], \
|
||||||
dict['nosite'], dict['nonavservice']
|
dict['nosite'], dict['nonavservice']
|
||||||
self.popt.save(flags)
|
self.popt.save(flags)
|
||||||
|
|
|
@ -53,6 +53,9 @@ extern int ccommand(char ***);
|
||||||
#ifdef USE_MAC_SHARED_LIBRARY
|
#ifdef USE_MAC_SHARED_LIBRARY
|
||||||
extern PyMac_AddLibResources(void);
|
extern PyMac_AddLibResources(void);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USE_GUSI
|
||||||
|
#include "GUSISIOUX.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define STARTUP "PythonStartup"
|
#define STARTUP "PythonStartup"
|
||||||
|
|
||||||
|
@ -151,8 +154,15 @@ PyMac_InteractiveOptions(PyMac_PrefRecord *p, int *argcp, char ***argvp)
|
||||||
SET_OPT_ITEM(OPT_OPTIMIZE, optimize);
|
SET_OPT_ITEM(OPT_OPTIMIZE, optimize);
|
||||||
SET_OPT_ITEM(OPT_UNBUFFERED, unbuffered);
|
SET_OPT_ITEM(OPT_UNBUFFERED, unbuffered);
|
||||||
SET_OPT_ITEM(OPT_DEBUGGING, debugging);
|
SET_OPT_ITEM(OPT_DEBUGGING, debugging);
|
||||||
SET_OPT_ITEM(OPT_KEEPNORMAL, keep_normal);
|
GetDialogItem(dialog, OPT_KEEPALWAYS, &type, (Handle *)&handle, &rect);
|
||||||
SET_OPT_ITEM(OPT_KEEPERROR, keep_error);
|
SetControlValue(handle, (short)(p->keep_console == POPT_KEEPCONSOLE_ALWAYS));
|
||||||
|
GetDialogItem(dialog, OPT_KEEPOUTPUT, &type, (Handle *)&handle, &rect);
|
||||||
|
SetControlValue(handle, (short)(p->keep_console == POPT_KEEPCONSOLE_OUTPUT));
|
||||||
|
GetDialogItem(dialog, OPT_KEEPERROR, &type, (Handle *)&handle, &rect);
|
||||||
|
SetControlValue(handle, (short)(p->keep_console == POPT_KEEPCONSOLE_ERROR));
|
||||||
|
GetDialogItem(dialog, OPT_KEEPNEVER, &type, (Handle *)&handle, &rect);
|
||||||
|
SetControlValue(handle, (short)(p->keep_console == POPT_KEEPCONSOLE_NEVER));
|
||||||
|
/* SET_OPT_ITEM(OPT_KEEPCONSOLE, keep_console); */
|
||||||
SET_OPT_ITEM(OPT_TABWARN, tabwarn);
|
SET_OPT_ITEM(OPT_TABWARN, tabwarn);
|
||||||
SET_OPT_ITEM(OPT_NOSITE, nosite);
|
SET_OPT_ITEM(OPT_NOSITE, nosite);
|
||||||
SET_OPT_ITEM(OPT_NONAVSERV, nonavservice);
|
SET_OPT_ITEM(OPT_NONAVSERV, nonavservice);
|
||||||
|
@ -204,8 +214,18 @@ PyMac_InteractiveOptions(PyMac_PrefRecord *p, int *argcp, char ***argvp)
|
||||||
OPT_ITEM(OPT_OPTIMIZE, optimize);
|
OPT_ITEM(OPT_OPTIMIZE, optimize);
|
||||||
OPT_ITEM(OPT_UNBUFFERED, unbuffered);
|
OPT_ITEM(OPT_UNBUFFERED, unbuffered);
|
||||||
OPT_ITEM(OPT_DEBUGGING, debugging);
|
OPT_ITEM(OPT_DEBUGGING, debugging);
|
||||||
OPT_ITEM(OPT_KEEPNORMAL, keep_normal);
|
if ( item == OPT_KEEPALWAYS ) p->keep_console = POPT_KEEPCONSOLE_ALWAYS;
|
||||||
OPT_ITEM(OPT_KEEPERROR, keep_error);
|
if ( item == OPT_KEEPOUTPUT ) p->keep_console = POPT_KEEPCONSOLE_OUTPUT;
|
||||||
|
if ( item == OPT_KEEPERROR ) p->keep_console = POPT_KEEPCONSOLE_ERROR;
|
||||||
|
if ( item == OPT_KEEPNEVER ) p->keep_console = POPT_KEEPCONSOLE_NEVER;
|
||||||
|
GetDialogItem(dialog, OPT_KEEPALWAYS, &type, (Handle *)&handle, &rect);
|
||||||
|
SetControlValue(handle, (short)(p->keep_console == POPT_KEEPCONSOLE_ALWAYS));
|
||||||
|
GetDialogItem(dialog, OPT_KEEPOUTPUT, &type, (Handle *)&handle, &rect);
|
||||||
|
SetControlValue(handle, (short)(p->keep_console == POPT_KEEPCONSOLE_OUTPUT));
|
||||||
|
GetDialogItem(dialog, OPT_KEEPERROR, &type, (Handle *)&handle, &rect);
|
||||||
|
SetControlValue(handle, (short)(p->keep_console == POPT_KEEPCONSOLE_ERROR));
|
||||||
|
GetDialogItem(dialog, OPT_KEEPNEVER, &type, (Handle *)&handle, &rect);
|
||||||
|
SetControlValue(handle, (short)(p->keep_console == POPT_KEEPCONSOLE_NEVER));
|
||||||
OPT_ITEM(OPT_TABWARN, tabwarn);
|
OPT_ITEM(OPT_TABWARN, tabwarn);
|
||||||
OPT_ITEM(OPT_NOSITE, nosite);
|
OPT_ITEM(OPT_NOSITE, nosite);
|
||||||
OPT_ITEM(OPT_NONAVSERV, nonavservice);
|
OPT_ITEM(OPT_NONAVSERV, nonavservice);
|
||||||
|
@ -252,7 +272,7 @@ init_common(int *argcp, char ***argvp, int embedded)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Get options from preference file (or from applet resource fork) */
|
/* Get options from preference file (or from applet resource fork) */
|
||||||
options.keep_error = 1; /* default-default */
|
options.keep_console = POPT_KEEPCONSOLE_OUTPUT; /* default-default */
|
||||||
PyMac_PreferenceOptions(&options);
|
PyMac_PreferenceOptions(&options);
|
||||||
|
|
||||||
if ( embedded ) {
|
if ( embedded ) {
|
||||||
|
@ -281,7 +301,7 @@ init_common(int *argcp, char ***argvp, int embedded)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy selected options to where the machine-independent stuff wants it */
|
/* Copy selected options to where the machine-independent stuff wants it */
|
||||||
Py_VerboseFlag = options.verbose *2;
|
Py_VerboseFlag = options.verbose;
|
||||||
/* Py_SuppressPrintingFlag = options.suppress_print; */
|
/* Py_SuppressPrintingFlag = options.suppress_print; */
|
||||||
Py_OptimizeFlag = options.optimize;
|
Py_OptimizeFlag = options.optimize;
|
||||||
Py_DebugFlag = options.debugging;
|
Py_DebugFlag = options.debugging;
|
||||||
|
@ -525,18 +545,31 @@ void
|
||||||
PyMac_Exit(status)
|
PyMac_Exit(status)
|
||||||
int status;
|
int status;
|
||||||
{
|
{
|
||||||
int keep;
|
int keep = 0;
|
||||||
|
|
||||||
#if __profile__ == 1
|
#if __profile__ == 1
|
||||||
ProfilerDump("\pPython Profiler Results");
|
ProfilerDump("\pPython Profiler Results");
|
||||||
ProfilerTerm();
|
ProfilerTerm();
|
||||||
#endif
|
#endif
|
||||||
if ( status )
|
|
||||||
keep = options.keep_error;
|
|
||||||
else
|
|
||||||
keep = options.keep_normal;
|
|
||||||
|
|
||||||
#ifdef USE_SIOUX
|
#ifdef USE_SIOUX
|
||||||
|
switch (options.keep_console) {
|
||||||
|
case POPT_KEEPCONSOLE_NEVER:
|
||||||
|
keep = 0;
|
||||||
|
break;
|
||||||
|
case POPT_KEEPCONSOLE_OUTPUT:
|
||||||
|
if (gusisioux_state == GUSISIOUX_STATE_LASTWRITE ||
|
||||||
|
gusisioux_state == GUSISIOUX_STATE_UNKNOWN )
|
||||||
|
keep = 1;
|
||||||
|
else
|
||||||
|
keep = 0;
|
||||||
|
break;
|
||||||
|
case POPT_KEEPCONSOLE_ERROR:
|
||||||
|
keep = (status != 0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
keep = 1;
|
||||||
|
}
|
||||||
if (keep) {
|
if (keep) {
|
||||||
SIOUXSettings.standalone = 1;
|
SIOUXSettings.standalone = 1;
|
||||||
SIOUXSettings.autocloseonquit = 0;
|
SIOUXSettings.autocloseonquit = 0;
|
||||||
|
|
Binary file not shown.
|
@ -15,8 +15,11 @@ type 'Popt' {
|
||||||
byte noOptimize = 0, optimize = 1;
|
byte noOptimize = 0, optimize = 1;
|
||||||
byte noUnbuffered = 0, unbuffered = 1;
|
byte noUnbuffered = 0, unbuffered = 1;
|
||||||
byte noDebugParser = 0, debugParser = 1;
|
byte noDebugParser = 0, debugParser = 1;
|
||||||
byte closeOnNormalExit = 0, noCloseOnNormalExit = 1;
|
byte unused_0 = 0, unused_1 = 1;
|
||||||
byte closeOnErrorExit = 0, noCloseOnErrorExit = 1;
|
byte closeAlways = POPT_KEEPCONSOLE_NEVER,
|
||||||
|
noCloseOutput = POPT_KEEPCONSOLE_OUTPUT,
|
||||||
|
noCloseError = POPT_KEEPCONSOLE_ERROR,
|
||||||
|
closeNever = POPT_KEEPCONSOLE_ALWAYS;
|
||||||
byte interactiveOptions = 0, noInteractiveOptions = 1;
|
byte interactiveOptions = 0, noInteractiveOptions = 1;
|
||||||
byte argcArgv = 0, noArgcArgv = 1;
|
byte argcArgv = 0, noArgcArgv = 1;
|
||||||
byte newStandardExceptions = 0, oldStandardExceptions = 1;
|
byte newStandardExceptions = 0, oldStandardExceptions = 1;
|
||||||
|
@ -62,8 +65,8 @@ resource 'Popt' (PYTHONOPTIONS_ID, "Options") {
|
||||||
noOptimize,
|
noOptimize,
|
||||||
noUnbuffered,
|
noUnbuffered,
|
||||||
noDebugParser,
|
noDebugParser,
|
||||||
closeOnNormalExit,
|
unused_0,
|
||||||
noCloseOnErrorExit,
|
noCloseOutput,
|
||||||
interactiveOptions,
|
interactiveOptions,
|
||||||
argcArgv,
|
argcArgv,
|
||||||
newStandardExceptions,
|
newStandardExceptions,
|
||||||
|
|
|
@ -36,32 +36,35 @@ OPT_DIALOG_ID = 510
|
||||||
|
|
||||||
# Map dialog item numbers to option names (and the reverse)
|
# Map dialog item numbers to option names (and the reverse)
|
||||||
opt_dialog_map = [
|
opt_dialog_map = [
|
||||||
|
None,
|
||||||
None,
|
None,
|
||||||
"inspect",
|
"inspect",
|
||||||
"verbose",
|
"verbose",
|
||||||
"optimize",
|
"optimize",
|
||||||
"unbuffered",
|
"unbuffered",
|
||||||
"debugging",
|
"debugging",
|
||||||
"keepopen",
|
"tabwarn",
|
||||||
"keeperror",
|
"nosite",
|
||||||
|
"nonavservice",
|
||||||
"nointopt",
|
"nointopt",
|
||||||
"noargs",
|
"noargs",
|
||||||
"delayconsole",
|
"delayconsole",
|
||||||
None, None, None, None, None, None, None, None, # 11-18 are different
|
]
|
||||||
"tabwarn",
|
|
||||||
"nosite",
|
|
||||||
"nonavservice"]
|
|
||||||
opt_dialog_dict = {}
|
opt_dialog_dict = {}
|
||||||
for i in range(len(opt_dialog_map)):
|
for i in range(len(opt_dialog_map)):
|
||||||
if opt_dialog_map[i]:
|
if opt_dialog_map[i]:
|
||||||
opt_dialog_dict[opt_dialog_map[i]] = i
|
opt_dialog_dict[opt_dialog_map[i]] = i
|
||||||
# 1 thru 10 are the options
|
# 1 thru 10 are the options
|
||||||
# The GUSI creator/type and delay-console
|
# The GUSI creator/type and delay-console
|
||||||
OD_CREATOR_ITEM = 11
|
OD_CREATOR_ITEM = 18
|
||||||
OD_TYPE_ITEM = 12
|
OD_TYPE_ITEM = 19
|
||||||
OD_OK_ITEM = 13
|
OD_OK_ITEM = 1
|
||||||
OD_CANCEL_ITEM = 14
|
OD_CANCEL_ITEM = 2
|
||||||
OD_HELP_ITEM = 22
|
OD_HELP_ITEM = 20
|
||||||
|
OD_KEEPALWAYS_ITEM = 14
|
||||||
|
OD_KEEPOUTPUT_ITEM = 15
|
||||||
|
OD_KEEPERROR_ITEM = 16
|
||||||
|
OD_KEEPNEVER_ITEM = 17
|
||||||
|
|
||||||
def optinteract(options):
|
def optinteract(options):
|
||||||
"""Let the user interact with the options dialog"""
|
"""Let the user interact with the options dialog"""
|
||||||
|
@ -72,12 +75,19 @@ def optinteract(options):
|
||||||
SetDialogItemText(htext, options['type'])
|
SetDialogItemText(htext, options['type'])
|
||||||
d.SetDialogDefaultItem(OD_OK_ITEM)
|
d.SetDialogDefaultItem(OD_OK_ITEM)
|
||||||
d.SetDialogCancelItem(OD_CANCEL_ITEM)
|
d.SetDialogCancelItem(OD_CANCEL_ITEM)
|
||||||
|
|
||||||
while 1:
|
while 1:
|
||||||
for name in opt_dialog_dict.keys():
|
for name in opt_dialog_dict.keys():
|
||||||
num = opt_dialog_dict[name]
|
num = opt_dialog_dict[name]
|
||||||
ctl = d.GetDialogItemAsControl(num)
|
ctl = d.GetDialogItemAsControl(num)
|
||||||
ctl.SetControlValue(options[name])
|
ctl.SetControlValue(options[name])
|
||||||
|
ctl = d.GetDialogItemAsControl(OD_KEEPALWAYS_ITEM)
|
||||||
|
ctl.SetControlValue(options['keep_console'] == 3)
|
||||||
|
ctl = d.GetDialogItemAsControl(OD_KEEPOUTPUT_ITEM)
|
||||||
|
ctl.SetControlValue(options['keep_console'] == 1)
|
||||||
|
ctl = d.GetDialogItemAsControl(OD_KEEPERROR_ITEM)
|
||||||
|
ctl.SetControlValue(options['keep_console'] == 2)
|
||||||
|
ctl = d.GetDialogItemAsControl(OD_KEEPNEVER_ITEM)
|
||||||
|
ctl.SetControlValue(options['keep_console'] == 0)
|
||||||
n = ModalDialog(None)
|
n = ModalDialog(None)
|
||||||
if n == OD_OK_ITEM:
|
if n == OD_OK_ITEM:
|
||||||
htext = d.GetDialogItemAsControl(OD_CREATOR_ITEM)
|
htext = d.GetDialogItemAsControl(OD_CREATOR_ITEM)
|
||||||
|
@ -94,6 +104,14 @@ def optinteract(options):
|
||||||
return
|
return
|
||||||
elif n in (OD_CREATOR_ITEM, OD_TYPE_ITEM):
|
elif n in (OD_CREATOR_ITEM, OD_TYPE_ITEM):
|
||||||
pass
|
pass
|
||||||
|
elif n == OD_KEEPALWAYS_ITEM:
|
||||||
|
options['keep_console'] = 3;
|
||||||
|
elif n == OD_KEEPOUTPUT_ITEM:
|
||||||
|
options['keep_console'] = 1;
|
||||||
|
elif n == OD_KEEPERROR_ITEM:
|
||||||
|
options['keep_console'] = 2;
|
||||||
|
elif n == OD_KEEPNEVER_ITEM:
|
||||||
|
options['keep_console'] = 0;
|
||||||
elif n == OD_HELP_ITEM:
|
elif n == OD_HELP_ITEM:
|
||||||
onoff = Help.HMGetBalloons()
|
onoff = Help.HMGetBalloons()
|
||||||
Help.HMSetBalloons(not onoff)
|
Help.HMSetBalloons(not onoff)
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue