dialogs are now stored in Mac/Lib, and loaded on demand through macresource.
Not only does this simplify a MacPython based on Apple's Python, but
it also makes Mac error codes come out symbolically when running command
line python (if you have Mac/Lib in your path).
The resource files are copied from Mac/Resources. The old ones will disappear
after the OS9 build procedure has been adjusted.
import string
from Carbon.ControlAccessor import * # Also import Controls constants
import macfs
+import macresource
+
+_initialized = 0
+
+def _initialize():
+ global _initialized
+ if _initialized: return
+ macresource.need("DLOG", 260, "dialogs.rsrc", __name__)
+
def cr2lf(text):
if '\r' in text:
The MESSAGE string can be at most 255 characters long.
"""
-
+ _initialize()
d = GetNewDialog(id, -1)
if not d:
print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
can be at most 255 characters long.
"""
+ _initialize()
d = GetNewDialog(id, -1)
if not d:
print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
The PROMPT and DEFAULT strings, as well as the return value,
can be at most 255 characters long.
"""
+ _initialize()
d = GetNewDialog(id, -1)
if not d:
print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
The QUESTION string can be at most 255 characters.
"""
+ _initialize()
d = GetNewDialog(id, -1)
if not d:
print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
def __init__(self, title="Working...", maxval=0, label="", id=263):
self.w = None
self.d = None
+ _initialize()
self.d = GetNewDialog(id, -1)
self.w = self.d.GetDialogWindow()
self.label(label)
def GetArgv(optionlist=None, commandlist=None, addoldfile=1, addnewfile=1, addfolder=1, id=ARGV_ID):
+ _initialize()
d = GetNewDialog(id, -1)
if not d:
print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
ofp.close()
- if progress:
- progress.label("Copy resources...")
- progress.set(20)
- resfilename = 'python.rsrc' # XXXX later: '%s.rsrc' % shortname
- try:
- output = Res.FSOpenResourceFile(
- os.path.join(destname, 'Contents', 'Resources', resfilename),
- u'', WRITE)
- except MacOS.Error:
- fsr, dummy = Res.FSCreateResourceFile(
- os.path.join(destname, 'Contents', 'Resources'),
- unicode(resfilename), '')
- output = Res.FSOpenResourceFile(fsr, u'', WRITE)
-
# Copy the resources from the target specific resource template, if any
typesfound, ownertype = [], None
try:
input = macresource.open_pathname(rsrcname)
except (MacOS.Error, ValueError):
- pass
if progress:
progress.inc(50)
else:
+ if progress:
+ progress.label("Copy resources...")
+ progress.set(20)
+ resfilename = 'python.rsrc' # XXXX later: '%s.rsrc' % shortname
+ try:
+ output = Res.FSOpenResourceFile(
+ os.path.join(destname, 'Contents', 'Resources', resfilename),
+ u'', WRITE)
+ except MacOS.Error:
+ fsr, dummy = Res.FSCreateResourceFile(
+ os.path.join(destname, 'Contents', 'Resources'),
+ unicode(resfilename), '')
+ output = Res.FSOpenResourceFile(fsr, u'', WRITE)
+
typesfound, ownertype = copyres(input, output, [], 0, progress)
Res.CloseResFile(input)
-
- # Check which resource-types we should not copy from the template
- skiptypes = []
-## if 'vers' in typesfound: skiptypes.append('vers')
-## if 'SIZE' in typesfound: skiptypes.append('SIZE')
-## if 'BNDL' in typesfound: skiptypes = skiptypes + ['BNDL', 'FREF', 'icl4',
-## 'icl8', 'ics4', 'ics8', 'ICN#', 'ics#']
-## if not copy_codefragment:
-## skiptypes.append('cfrg')
-## skipowner = (ownertype <> None)
-
- # Copy the resources from the template
-
- input = Res.FSOpenResourceFile(
- os.path.join(template, 'Contents', 'Resources', 'python.rsrc'), u'', READ)
- if progress:
- progress.label("Copy standard resources...")
- progress.inc(0)
-## dummy, tmplowner = copyres(input, output, skiptypes, 1, progress)
- dummy, tmplowner = copyres(input, output, skiptypes, 1, None)
-
- Res.CloseResFile(input)
-## if ownertype == None:
-## raise BuildError, "No owner resource found in either resource file or template"
- # Make sure we're manipulating the output resource file now
-
- Res.CloseResFile(output)
+ Res.CloseResFile(output)
if code:
if raw:
raise
return refno
+def open_error_resource():
+ """Open the resource file containing the error code to error message
+ mapping."""
+ need('Estr', 1, filename="errors.rsrc", modname=__name__)
+
def _decode(pathname, verbose=0):
# Decode an AppleSingle resource file, return the new pathname.
newpathname = pathname + '.df.rsrc'
-framework Foundation
CC=cc
LD=cc
-REZ=/Developer/Tools/Rez
-DEREZ=/Developer/Tools/DeRez
CPMAC=/Developer/Tools/CpMac
PYTHON=$(builddir)/python.exe
APPTEMPLATE=$(srcdir)/Mac/OSXResources/app
APPSUBDIRS=MacOS Resources Resources/English.lproj
-RESOURCEDIR=$(srcdir)/Mac/Resources
-RESOURCEFILE=python.rsrc
-RFCONVERTER=$(srcdir)/Mac/Lib/applesingle.py
CACHERSRC=$(srcdir)/Mac/scripts/cachersrc.py
installapps: install_PythonLauncher install_Python install_BuildApplet install_IDE install_IDLE
done; \
done
$(INSTALL_PROGRAM) $(STRIPFLAG) $(PYTHON) $(APPINSTALLDIR)/Contents/MacOS/python
-# Create a temporary version of the resources here
-# Note that the resource files can either be real 2-fork resource files
-# or AppleSingle encoded files.
- @if test -s $(RESOURCEDIR)/dialogs.rsrc; then \
- echo $(PYTHON) $(RFCONVERTER) -r $(RESOURCEDIR)/dialogs.rsrc dialogs.rsrc ;\
- $(PYTHON) $(RFCONVERTER) -r $(RESOURCEDIR)/dialogs.rsrc dialogs.rsrc ; \
- echo $(DEREZ) -useDF -skip ckid dialogs.rsrc > dialogs.r ; \
- $(DEREZ) -useDF -skip ckid dialogs.rsrc > dialogs.r ; \
- else \
- echo $(DEREZ) -skip ckid $(RESOURCEDIR)/dialogs.rsrc > dialogs.r ; \
- $(DEREZ) -skip ckid $(RESOURCEDIR)/dialogs.rsrc > dialogs.r ; \
- fi
- @if test -s $(RESOURCEDIR)/errors.rsrc; then \
- echo $(PYTHON) $(RFCONVERTER) -r $(RESOURCEDIR)/errors.rsrc errors.rsrc ;\
- $(PYTHON) $(RFCONVERTER) -r $(RESOURCEDIR)/errors.rsrc errors.rsrc ; \
- echo $(DEREZ) -useDF -skip ckid errors.rsrc > errors.r ; \
- $(DEREZ) -useDF -skip ckid errors.rsrc > errors.r ; \
- else \
- echo $(DEREZ) -skip ckid $(RESOURCEDIR)/errors.rsrc > errors.r ; \
- $(DEREZ) -skip ckid $(RESOURCEDIR)/errors.rsrc > errors.r ; \
- fi
- $(REZ) -useDF -o $(RESOURCEFILE) dialogs.r errors.r
- $(INSTALL_DATA) $(RESOURCEFILE) $(APPINSTALLDIR)/Contents/Resources/$(RESOURCEFILE)
# Finally create the documentation symlink
$(LN) -fsn ../../../../English.lproj/Documentation $(APPINSTALLDIR)/Contents/Resources/English.lproj/Documentation
echo $(INSTALL_DATA) $$i $(MACLIBDEST); \
fi; \
done
-## @for i in $(MACLIBSRC)/*.rsrc; \
-## do \
-## echo $(CPMAC) $$i $$b ; \
-## $(CPMAC) $$i $$b ; \
-## done
+ @for i in $(MACLIBSRC)/*.rsrc; \
+ do \
+ echo $(CPMAC) $$i $(MACLIBDEST) ; \
+ $(CPMAC) $$i $(MACLIBDEST) ; \
+ done
@for d in $(MACLIBSUBDIRS); \
do \
a=$(MACLIBSRC)/$$d; \
static char buf[256];
Handle h;
char *str;
+ static int errors_loaded;
h = GetResource('Estr', err);
+ if (!h && !errors_loaded) {
+ /*
+ ** Attempt to open the resource file containing the
+ ** Estr resources. We ignore all errors. We also try
+ ** this only once.
+ */
+ errors_loaded = 1;
+ PyObject *m, *rv;
+
+ m = PyImport_ImportModule("macresource");
+ if (!m) {
+ if (Py_VerboseFlag)
+ PyErr_Print();
+ PyErr_Clear();
+ } else {
+ rv = PyObject_CallMethod(m, "open_error_resource", "");
+ if (!rv) {
+ if (Py_VerboseFlag)
+ PyErr_Print();
+ PyErr_Clear();
+ } else {
+ Py_DECREF(rv);
+ /* And try again... */
+ h = GetResource('Estr', err);
+ }
+ }
+ }
+ /*
+ ** Whether the code above succeeded or not, we won't try
+ ** again.
+ */
+ errors_loaded = 1;
+
if ( h ) {
HLock(h);
str = (char *)*h;