From 4a5eb967b8b50bfc301d83d5d3234501db8f0a17 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Fri, 22 Sep 2000 21:50:11 +0000 Subject: Keepconsole is now a 4-way option: never/errorexit/unseen output/always. Default is "unseen output". Upped the Popt version number. --- Mac/Include/macbuildno.h | 2 +- Mac/Include/pythonresources.h | 27 +++++++++---------- Mac/Lib/pythonprefs.py | 6 ++--- Mac/Python/macmain.c | 55 +++++++++++++++++++++++++++++++-------- Mac/Resources/dialogs.rsrc | Bin 17829 -> 17903 bytes Mac/Resources/pythonpath.r | 11 +++++--- Mac/scripts/EditPythonPrefs.py | 42 +++++++++++++++++++++--------- Mac/scripts/EditPythonPrefs.rsrc | Bin 8994 -> 9068 bytes 8 files changed, 97 insertions(+), 46 deletions(-) diff --git a/Mac/Include/macbuildno.h b/Mac/Include/macbuildno.h index 7cced77..f1bf41a 100644 --- a/Mac/Include/macbuildno.h +++ b/Mac/Include/macbuildno.h @@ -1 +1 @@ -#define BUILD 55 +#define BUILD 66 diff --git a/Mac/Include/pythonresources.h b/Mac/Include/pythonresources.h index 1782608..0b74328 100644 --- a/Mac/Include/pythonresources.h +++ b/Mac/Include/pythonresources.h @@ -68,9 +68,11 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #define OPT_OPTIMIZE 5 #define OPT_UNBUFFERED 6 #define OPT_DEBUGGING 7 -#define OPT_KEEPNORMAL 8 -#define OPT_KEEPERROR 9 -#define OPT_CMDLINE 10 +#define OPT_KEEPALWAYS 8 +#define OPT_KEEPOUTPUT 9 +#define OPT_KEEPERROR 10 +#define OPT_KEEPNEVER 11 +#define OPT_CMDLINE 12 #define OPT_TABWARN 13 #define OPT_NOSITE 14 #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 */ #define PYTHONOPTIONS_ID 228 #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 typedef struct PyMac_PrefRecord { @@ -154,8 +151,8 @@ typedef struct PyMac_PrefRecord { unsigned char optimize; unsigned char unbuffered; unsigned char debugging; - unsigned char keep_normal; - unsigned char keep_error; + unsigned char unused; + unsigned char keep_console; unsigned char nointopt; unsigned char noargs; unsigned char tabwarn; diff --git a/Mac/Lib/pythonprefs.py b/Mac/Lib/pythonprefs.py index 916ec9f..81d095f 100644 --- a/Mac/Lib/pythonprefs.py +++ b/Mac/Lib/pythonprefs.py @@ -16,7 +16,7 @@ OVERRIDE_POPT_ID = 229 OVERRIDE_GUSI_ID = 10241 # version -CUR_VERSION=5 +CUR_VERSION=6 preffilename = PstringLoader(AnyResLoader('STR ', resname=PREFNAME_NAME)).load() pref_fss = preferencefile(preffilename, 'Pyth', 'pref') @@ -88,7 +88,7 @@ class PythonOptions: dict['creator'], dict['type'], dict['delayconsole'] = self.gusi.load() flags = self.popt.load() 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['nosite'], dict['nonavservice'] = flags return dict @@ -99,7 +99,7 @@ class PythonOptions: self.dir.save(diralias) self.gusi.save((dict['creator'], dict['type'], dict['delayconsole'])) 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['nosite'], dict['nonavservice'] self.popt.save(flags) diff --git a/Mac/Python/macmain.c b/Mac/Python/macmain.c index c46fd2f..3531f4c 100644 --- a/Mac/Python/macmain.c +++ b/Mac/Python/macmain.c @@ -53,6 +53,9 @@ extern int ccommand(char ***); #ifdef USE_MAC_SHARED_LIBRARY extern PyMac_AddLibResources(void); #endif +#ifdef USE_GUSI +#include "GUSISIOUX.h" +#endif #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_UNBUFFERED, unbuffered); SET_OPT_ITEM(OPT_DEBUGGING, debugging); - SET_OPT_ITEM(OPT_KEEPNORMAL, keep_normal); - SET_OPT_ITEM(OPT_KEEPERROR, keep_error); + 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)); +/* SET_OPT_ITEM(OPT_KEEPCONSOLE, keep_console); */ SET_OPT_ITEM(OPT_TABWARN, tabwarn); SET_OPT_ITEM(OPT_NOSITE, nosite); 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_UNBUFFERED, unbuffered); OPT_ITEM(OPT_DEBUGGING, debugging); - OPT_ITEM(OPT_KEEPNORMAL, keep_normal); - OPT_ITEM(OPT_KEEPERROR, keep_error); + if ( item == OPT_KEEPALWAYS ) p->keep_console = POPT_KEEPCONSOLE_ALWAYS; + 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_NOSITE, nosite); OPT_ITEM(OPT_NONAVSERV, nonavservice); @@ -252,7 +272,7 @@ init_common(int *argcp, char ***argvp, int embedded) #endif /* 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); 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 */ - Py_VerboseFlag = options.verbose *2; + Py_VerboseFlag = options.verbose; /* Py_SuppressPrintingFlag = options.suppress_print; */ Py_OptimizeFlag = options.optimize; Py_DebugFlag = options.debugging; @@ -525,18 +545,31 @@ void PyMac_Exit(status) int status; { - int keep; + int keep = 0; #if __profile__ == 1 ProfilerDump("\pPython Profiler Results"); ProfilerTerm(); #endif - if ( status ) - keep = options.keep_error; - else - keep = options.keep_normal; #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) { SIOUXSettings.standalone = 1; SIOUXSettings.autocloseonquit = 0; diff --git a/Mac/Resources/dialogs.rsrc b/Mac/Resources/dialogs.rsrc index 907b9d0..4a84dd6 100644 Binary files a/Mac/Resources/dialogs.rsrc and b/Mac/Resources/dialogs.rsrc differ diff --git a/Mac/Resources/pythonpath.r b/Mac/Resources/pythonpath.r index 7f23c15..25b59cd 100644 --- a/Mac/Resources/pythonpath.r +++ b/Mac/Resources/pythonpath.r @@ -15,8 +15,11 @@ type 'Popt' { byte noOptimize = 0, optimize = 1; byte noUnbuffered = 0, unbuffered = 1; byte noDebugParser = 0, debugParser = 1; - byte closeOnNormalExit = 0, noCloseOnNormalExit = 1; - byte closeOnErrorExit = 0, noCloseOnErrorExit = 1; + byte unused_0 = 0, unused_1 = 1; + byte closeAlways = POPT_KEEPCONSOLE_NEVER, + noCloseOutput = POPT_KEEPCONSOLE_OUTPUT, + noCloseError = POPT_KEEPCONSOLE_ERROR, + closeNever = POPT_KEEPCONSOLE_ALWAYS; byte interactiveOptions = 0, noInteractiveOptions = 1; byte argcArgv = 0, noArgcArgv = 1; byte newStandardExceptions = 0, oldStandardExceptions = 1; @@ -62,8 +65,8 @@ resource 'Popt' (PYTHONOPTIONS_ID, "Options") { noOptimize, noUnbuffered, noDebugParser, - closeOnNormalExit, - noCloseOnErrorExit, + unused_0, + noCloseOutput, interactiveOptions, argcArgv, newStandardExceptions, diff --git a/Mac/scripts/EditPythonPrefs.py b/Mac/scripts/EditPythonPrefs.py index d9f30f1..f49f398 100644 --- a/Mac/scripts/EditPythonPrefs.py +++ b/Mac/scripts/EditPythonPrefs.py @@ -37,31 +37,34 @@ OPT_DIALOG_ID = 510 # Map dialog item numbers to option names (and the reverse) opt_dialog_map = [ None, + None, "inspect", "verbose", "optimize", "unbuffered", "debugging", - "keepopen", - "keeperror", + "tabwarn", + "nosite", + "nonavservice", "nointopt", "noargs", "delayconsole", - None, None, None, None, None, None, None, None, # 11-18 are different - "tabwarn", - "nosite", - "nonavservice"] + ] opt_dialog_dict = {} for i in range(len(opt_dialog_map)): if opt_dialog_map[i]: opt_dialog_dict[opt_dialog_map[i]] = i # 1 thru 10 are the options # The GUSI creator/type and delay-console -OD_CREATOR_ITEM = 11 -OD_TYPE_ITEM = 12 -OD_OK_ITEM = 13 -OD_CANCEL_ITEM = 14 -OD_HELP_ITEM = 22 +OD_CREATOR_ITEM = 18 +OD_TYPE_ITEM = 19 +OD_OK_ITEM = 1 +OD_CANCEL_ITEM = 2 +OD_HELP_ITEM = 20 +OD_KEEPALWAYS_ITEM = 14 +OD_KEEPOUTPUT_ITEM = 15 +OD_KEEPERROR_ITEM = 16 +OD_KEEPNEVER_ITEM = 17 def optinteract(options): """Let the user interact with the options dialog""" @@ -72,12 +75,19 @@ def optinteract(options): SetDialogItemText(htext, options['type']) d.SetDialogDefaultItem(OD_OK_ITEM) d.SetDialogCancelItem(OD_CANCEL_ITEM) - while 1: for name in opt_dialog_dict.keys(): num = opt_dialog_dict[name] ctl = d.GetDialogItemAsControl(num) 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) if n == OD_OK_ITEM: htext = d.GetDialogItemAsControl(OD_CREATOR_ITEM) @@ -94,6 +104,14 @@ def optinteract(options): return elif n in (OD_CREATOR_ITEM, OD_TYPE_ITEM): 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: onoff = Help.HMGetBalloons() Help.HMSetBalloons(not onoff) diff --git a/Mac/scripts/EditPythonPrefs.rsrc b/Mac/scripts/EditPythonPrefs.rsrc index f4b893f..cc35df2 100644 Binary files a/Mac/scripts/EditPythonPrefs.rsrc and b/Mac/scripts/EditPythonPrefs.rsrc differ -- cgit v0.12