Exemple #1
0
    def menu_save(self):
        if not self.path:
            self.menu_save_as()
            return  # Will call us recursively
        #
        # First save data
        #
        dhandle = self.ted.WEGetText()
        data = dhandle.data
        fp = open(self.path,
                  'wb')  # NOTE: wb, because data has CR for end-of-line
        fp.write(data)
        if data[-1] <> '\r': fp.write('\r')
        fp.close()
        #
        # Now save style and soup
        #
        oldresfile = Res.CurResFile()
        try:
            rf = Res.FSpOpenResFile(self.path, 3)
        except Res.Error:
            Res.FSpCreateResFile(self.path, '????', 'TEXT', macfs.smAllScripts)
            rf = Res.FSpOpenResFile(self.path, 3)
        styles = Res.Resource('')
        soup = Res.Resource('')
        self.ted.WECopyRange(0, 0x3fffffff, None, styles, soup)
        styles.AddResource('styl', 128, '')
        soup.AddResource('SOUP', 128, '')
        Res.CloseResFile(rf)
        Res.UseResFile(oldresfile)

        self.ted.WEResetModCount()
Exemple #2
0
def copyres(input, output, *args, **kwargs):
    openedin = openedout = 0
    if type(input) == types.StringType:
        input = Res.FSpOpenResFile(input, 1)
        openedin = 1
    if type(output) == types.StringType:
        output = Res.FSpOpenResFile(output, 3)
        openedout = 1
    try:
        apply(buildtools.copyres, (input, output) + args, kwargs)
    finally:
        if openedin:
            Res.CloseResFile(input)
        if openedout:
            Res.CloseResFile(output)
Exemple #3
0
    def __init__(self, path, ttFont, res_id=None):
        self.file = cStringIO.StringIO()
        self.name = path
        self.closed = 0
        fullname = ttFont['name'].getName(
            4, 1, 0)  # Full name, mac, default encoding
        familyname = ttFont['name'].getName(
            1, 1, 0)  # Fam. name, mac, default encoding
        psname = ttFont['name'].getName(6, 1, 0)  # PostScript name, etc.
        if fullname is None or fullname is None or psname is None:
            from fontTools import ttLib
            raise ttLib.TTLibError, "can't make 'sfnt' resource, no Macintosh 'name' table found"
        self.fullname = fullname.string
        self.familyname = familyname.string
        self.psname = psname.string
        if self.familyname <> self.psname[:len(self.familyname)]:
            # ugh. force fam name to be the same as first part of ps name,
            # fondLib otherwise barfs.
            for i in range(min(len(self.psname), len(self.familyname))):
                if self.familyname[i] <> self.psname[i]:
                    break
            self.familyname = self.psname[:i]

        self.ttFont = ttFont
        self.res_id = res_id
        if os.path.exists(self.name):
            os.remove(self.name)
        # XXX datafork support
        Res.FSpCreateResFile(self.name, 'DMOV', 'FFIL', 0)
        self.resref = Res.FSpOpenResFile(self.name,
                                         3)  # exclusive read/write permission
Exemple #4
0
def mergecfmfiles(srclist, dst, architecture='fat'):
    srclist = list(srclist)
    for i in range(len(srclist)):
        srclist[i] = Carbon.File.pathname(srclist[i])

    dst = Carbon.File.pathname(dst)
    dstfile = open(dst, 'wb')
    rf = Res.FSpOpenResFile(dst, 3)
    try:
        dstcfrg = CfrgResource()
        for src in srclist:
            srccfrg = CfrgResource(src)
            for frag in srccfrg.fragments:
                if frag.architecture == 'pwpc' and architecture == 'm68k':
                    continue
                if frag.architecture == 'm68k' and architecture == 'pwpc':
                    continue
                dstcfrg.append(frag)
                frag.copydata(dstfile)

        cfrgres = Res.Resource(dstcfrg.build())
        Res.UseResFile(rf)
        cfrgres.AddResource('cfrg', 0, '')
    finally:
        dstfile.close()
        rf = Res.CloseResFile(rf)
Exemple #5
0
def mergecfmfiles(srclist, dst, architecture='fat'):
    """Merge all files in srclist into a new file dst.

    If architecture is given, only code fragments of that type will be used:
    "pwpc" for PPC, "m68k" for cfm68k. This does not work for "classic"
    68k code, since it does not use code fragments to begin with.
    If architecture is None, all fragments will be used, enabling FAT binaries.
    """

    srclist = list(srclist)
    for i in range(len(srclist)):
        srclist[i] = Carbon.File.pathname(srclist[i])
    dst = Carbon.File.pathname(dst)

    dstfile = open(dst, "wb")
    rf = Res.FSpOpenResFile(dst, 3)
    try:
        dstcfrg = CfrgResource()
        for src in srclist:
            srccfrg = CfrgResource(src)
            for frag in srccfrg.fragments:
                if frag.architecture == 'pwpc' and architecture == 'm68k':
                    continue
                if frag.architecture == 'm68k' and architecture == 'pwpc':
                    continue
                dstcfrg.append(frag)

                frag.copydata(dstfile)

        cfrgres = Res.Resource(dstcfrg.build())
        Res.UseResFile(rf)
        cfrgres.AddResource('cfrg', 0, "")
    finally:
        dstfile.close()
        rf = Res.CloseResFile(rf)
Exemple #6
0
def readLWFN(path, onlyHeader=0):
	"""reads an LWFN font file, returns raw data"""
	resRef = Res.FSpOpenResFile(path, 1)  # read-only
	try:
		Res.UseResFile(resRef)
		n = Res.Count1Resources('POST')
		data = []
		for i in range(501, 501 + n):
			res = Res.Get1Resource('POST', i)
			code = ord(res.data[0])
			if ord(res.data[1]) <> 0:
				raise T1Error, 'corrupt LWFN file'
			if code in [1, 2]:
				if onlyHeader and code == 2:
					break
				data.append(res.data[2:])
			elif code in [3, 5]:
				break
			elif code == 4:
				f = open(path, "rb")
				data.append(f.read())
				f.close()
			elif code == 0:
				pass # comment, ignore
			else:
				raise T1Error, 'bad chunk code: ' + `code`
	finally:
		Res.CloseResFile(resRef)
	data = string.join(data, '')
	assertType1(data)
	return data
Exemple #7
0
def MyOpenResFile(path):
    mode = 1  # read only
    try:
        resref = Res.FSpOpenResFile(path, mode)
    except Res.Error:
        # try data fork
        resref = Res.FSOpenResourceFile(path, u'', mode)
    return resref
Exemple #8
0
 def writewindowsettings(self):
     try:
         resref = Res.FSpOpenResFile(self.path, 3)
     except Res.Error:
         Res.FSpCreateResFile(self.path, self._creator, 'TEXT', smAllScripts)
         resref = Res.FSpOpenResFile(self.path, 3)
     try:
         data = Res.Resource(marshal.dumps(self.settings))
         Res.UseResFile(resref)
         try:
             temp = Res.Get1Resource('PyWS', 128)
             temp.RemoveResource()
         except Res.Error:
             pass
         data.AddResource('PyWS', 128, "window settings")
     finally:
         Res.UpdateResFile(resref)
         Res.CloseResFile(resref)
Exemple #9
0
def writeestr(dst, edict):
    """Create Estr resource file given a dictionary of errors."""

    os.unlink(dst.as_pathname())
    Res.FSpCreateResFile(dst, 'RSED', 'rsrc', smAllScripts)
    output = Res.FSpOpenResFile(dst, WRITE)
    Res.UseResFile(output)
    for num in edict.keys():
        res = Res.Resource(Pstring(edict[num][0]))
        res.AddResource('Estr', num, '')
        res.WriteResource()
    Res.CloseResFile(output)
Exemple #10
0
 def readwindowsettings(self):
     try:
         resref = Res.FSpOpenResFile(self.path, 1)
     except Res.Error:
         return
     try:
         Res.UseResFile(resref)
         data = Res.Get1Resource('PyWS', 128)
         self.settings = marshal.loads(data.data)
     except:
         pass
     Res.CloseResFile(resref)
Exemple #11
0
    def __init__(self, path, mode='r'):
        import macfs

        if mode == 'r':
            permission = 1  # read only
        elif mode == 'w':
            permission = 3  # exclusive r/w
        else:
            raise error, 'mode should be either "r" or "w"'
        self.mode = mode
        fss = macfs.FSSpec(path)
        self.resref = Res.FSpOpenResFile(fss, permission)
        Res.UseResFile(self.resref)
        self.path = path
        self.fonds = []
        self.getFONDs()
Exemple #12
0
 def __init__(self, path=None):
     self.version = 1
     self.fragments = []
     self.path = path
     if path is not None and os.path.exists(path):
         currentresref = Res.CurResFile()
         resref = Res.FSpOpenResFile(path, 1)
         Res.UseResFile(resref)
         try:
             try:
                 data = Res.Get1Resource('cfrg', 0).data
             except Res.Error:
                 raise Res.Error, "no 'cfrg' resource found", sys.exc_traceback
         finally:
             Res.CloseResFile(resref)
             Res.UseResFile(currentresref)
         self.parse(data)
         if self.version != 1:
             raise error, "unknown 'cfrg' resource format"
Exemple #13
0
def writeLWFN(path, data):
	Res.FSpCreateResFile(path, "just", "LWFN", 0)
	resRef = Res.FSpOpenResFile(path, 2)  # write-only
	try:
		Res.UseResFile(resRef)
		resID = 501
		chunks = findEncryptedChunks(data)
		for isEncrypted, chunk in chunks:
			if isEncrypted:
				code = 2
			else:
				code = 1
			while chunk:
				res = Res.Resource(chr(code) + '\0' + chunk[:LWFNCHUNKSIZE - 2])
				res.AddResource('POST', resID, '')
				chunk = chunk[LWFNCHUNKSIZE - 2:]
				resID = resID + 1
		res = Res.Resource(chr(5) + '\0')
		res.AddResource('POST', resID, '')
	finally:
		Res.CloseResFile(resRef)
Exemple #14
0
def open_pathname(pathname, verbose=0):
    """Open a resource file given by pathname, possibly decoding an
    AppleSingle file"""
    try:
        refno = Res.FSpOpenResFile(pathname, 1)
    except Res.Error, arg:
        if arg[0] in (-37, -39):
            # No resource fork. We may be on OSX, and this may be either
            # a data-fork based resource file or a AppleSingle file
            # from the CVS repository.
            try:
                refno = Res.FSOpenResourceFile(pathname, u'', 1)
            except Res.Error, arg:
                if arg[0] != -199:
                    # -199 is "bad resource map"
                    raise
            else:
                return refno
            # Finally try decoding an AppleSingle file
            pathname = _decode(pathname, verbose=verbose)
            refno = Res.FSOpenResourceFile(pathname, u'', 1)
Exemple #15
0
 def getstylesoup(self, pathname):
     if not pathname:
         return None, None
     oldrf = Res.CurResFile()
     try:
         rf = Res.FSpOpenResFile(self.path, 1)
     except Res.Error:
         return None, None
     try:
         hstyle = Res.Get1Resource('styl', 128)
         hstyle.DetachResource()
     except Res.Error:
         hstyle = None
     try:
         hsoup = Res.Get1Resource('SOUP', 128)
         hsoup.DetachResource()
     except Res.Error:
         hsoup = None
     Res.CloseResFile(rf)
     Res.UseResFile(oldrf)
     return hstyle, hsoup
Exemple #16
0
def resource_pathname(pathname, verbose=0):
    """Return the pathname for a resource file (either DF or RF based).
    If the pathname given already refers to such a file simply return it,
    otherwise first decode it."""
    try:
        refno = Res.FSpOpenResFile(pathname, 1)
        Res.CloseResFile(refno)
    except Res.Error, arg:
        if arg[0] in (-37, -39):
            # No resource fork. We may be on OSX, and this may be either
            # a data-fork based resource file or a AppleSingle file
            # from the CVS repository.
            try:
                refno = Res.FSOpenResourceFile(pathname, u'', 1)
            except Res.Error, arg:
                if arg[0] != -199:
                    # -199 is "bad resource map"
                    raise
            else:
                return refno
            # Finally try decoding an AppleSingle file
            pathname = _decode(pathname, verbose=verbose)
Exemple #17
0
def dataFromFile(pathOrFSSpec, nameOrID="", resType='NFNT'):
    from Carbon import Res
    import macfs
    if type(pathOrFSSpec) == types.StringType:
        fss = macfs.FSSpec(pathOrFSSpec)
    else:
        fss = pathOrFSSpec
    resref = Res.FSpOpenResFile(fss, 1)  # readonly
    try:
        Res.UseResFile(resref)
        if not nameOrID:
            # just take the first in the file
            res = Res.Get1IndResource(resType, 1)
        elif type(nameOrID) == types.IntType:
            res = Res.Get1Resource(resType, nameOrID)
        else:
            res = Res.Get1NamedResource(resType, nameOrID)
        theID, theType, name = res.GetResInfo()
        data = res.data
    finally:
        Res.CloseResFile(resref)
    return data
Exemple #18
0
import sys
import macfs
from Carbon import Res
from Carbon import Ctl
from Carbon import Dlg

# Find macfreeze directory
FREEZEDIR=os.path.join(sys.prefix, ":Mac:Tools:macfreeze")
sys.path.append(FREEZEDIR)
import macfreeze

#
# Resources for the dialog
#
RESFILE="macbuild.rsrc"
h = Res.FSpOpenResFile(RESFILE, 0)
DIALOG_ID=512
I_OK=1
I_CANCEL=2

I_G2PRO_FREEZE=4
I_G2PRO_BUILD=5

I_G2LITE_FREEZE=7
I_G2LITE_BUILD=8

I_PLAYER_FREEZE=10
I_PLAYER_BUILD=11

I_SMILPRO_FREEZE=13
I_SMILPRO_BUILD=14
Exemple #19
0
# A minimal text editor.
Exemple #20
0
"""BuildCGIApplet.py -- Create a CGI applet from a Python script.
Exemple #21
0
    del sys.path[0]
    print 'sys.path', sys.path
    print 'sys.argv[0]', sys.argv[0]

# Workaround for a strange KeyboardInterrupt bug under Carbon
import MacOS
if MacOS.runtimemodel == 'carbon':
    MacOS.SchedParams(0)

ID_SPLASH_DIALOG=513
# XXXX Debugging code: assure the resource file is available
from Carbon import Res
try:
    Res.GetResource('DLOG', ID_SPLASH_DIALOG)
except:
    Res.FSpOpenResFile(':player.rsrc', 0)
    Res.FSpOpenResFile(':playercontrols.rsrc', 0)
    Res.FSpOpenResFile(':common.rsrc', 0)
    Res.FSpOpenResFile(':playerballoons.rsrc', 0)
Res.GetResource('DLOG', ID_SPLASH_DIALOG)

# Now time for real work.
import os
import string
import macfs

#
# Set variable for standalone cmif:
#
try:
    import SR
Exemple #22
0
"""Import a module while pretending its name is __main__. This
Exemple #23
0
"""Parse sys/errno.h and Errors.h and create Estr resource"""
Exemple #24
0
"""macgen_bin - Generate application from shared libraries"""
Exemple #25
0
#
Exemple #26
0
import buildtools
from Carbon import Res
import py_resource

buildtools.DEBUG = 1

template = buildtools.findtemplate()

ide_home = os.path.join(sys.exec_prefix, ":Mac:Tools:IDE")

mainfilename = os.path.join(ide_home, "PythonIDE.py")
dstfilename = os.path.join(sys.exec_prefix, "Python IDE")

buildtools.process(template, mainfilename, dstfilename, 1)

targetref = Res.FSpOpenResFile(dstfilename, 3)
Res.UseResFile(targetref)

files = os.listdir(ide_home)

# skip this script and the main program
files = filter(
    lambda x: x[-3:] == '.py' and x not in ("BuildIDE.py", "PythonIDE.py"),
    files)

# add the modules as PYC resources
for name in files:
    print "adding", name
    fullpath = os.path.join(ide_home, name)
    id, name = py_resource.frompyfile(fullpath,
                                      name[:-3],
Exemple #27
0
def generate(input, output, module_dict=None, architecture='fat', debug=0):
    # try to remove old file
    try:
        os.remove(output)
    except:
        pass

    if module_dict is None:
        import macmodulefinder
        print "Searching for modules..."
        module_dict, missing = macmodulefinder.process(input, [], [], 1)
        if missing:
            import EasyDialogs
            missing.sort()
            answer = EasyDialogs.AskYesNoCancel(
                "Some modules could not be found; continue anyway?\n(%s)" %
                string.join(missing, ", "))
            if answer <> 1:
                sys.exit(0)

    applettemplatepath = buildtools.findtemplate()
    corepath = findpythoncore()

    dynamicmodules, dynamicfiles, extraresfiles = findfragments(
        module_dict, architecture)

    print 'Adding "__main__"'
    buildtools.process(applettemplatepath, input, output, 0)

    outputref = Res.FSpOpenResFile(output, 3)
    try:
        Res.UseResFile(outputref)

        print "Adding Python modules"
        addpythonmodules(module_dict)

        print "Adding PythonCore resources"
        copyres(corepath, outputref, ['cfrg', 'Popt', 'GU\267I'], 1)

        print "Adding resources from shared libraries"
        for ppcpath, cfm68kpath in extraresfiles:
            if os.path.exists(ppcpath):
                copyres(ppcpath, outputref, ['cfrg'], 1)
            elif os.path.exists(cfm68kpath):
                copyres(cfm68kpath, outputref, ['cfrg'], 1)

        print "Fixing sys.path prefs"
        Res.UseResFile(outputref)
        try:
            res = Res.Get1Resource('STR#', 228)  # from PythonCore
        except Res.Error:
            pass
        else:
            res.RemoveResource()
        # setting pref file name to empty string
        res = Res.Get1NamedResource('STR ', "PythonPreferenceFileName")
        res.data = Pstring("")
        res.ChangedResource()
        syspathpref = "$(APPLICATION)"
        res = Res.Resource("\000\001" + Pstring(syspathpref))
        res.AddResource("STR#", 229, "sys.path preference")

        print "Creating 'PYD ' resources"
        for modname, (ppcfrag, cfm68kfrag) in dynamicmodules.items():
            res = Res.Resource(Pstring(ppcfrag) + Pstring(cfm68kfrag))
            id = 0
            while id < 128:
                id = Res.Unique1ID('PYD ')
            res.AddResource('PYD ', id, modname)
    finally:
        Res.CloseResFile(outputref)
    print "Merging code fragments"
    cfmfile.mergecfmfiles([applettemplatepath, corepath] + dynamicfiles.keys(),
                          output, architecture)

    print "done!"
Exemple #28
0
"""macresource - Locate and open the resources needed for a script."""
Exemple #29
0
else:
    import quietconsole
    quietconsole.install()

# XXXX Temp: enable Navigation
import macfsn

macfsn._install()

ID_SPLASH_DIALOG = 513
# XXXX Debugging code: assure the resource file is available
from Carbon import Res
try:
    Res.GetResource('DLOG', ID_SPLASH_DIALOG)
except:
    Res.FSpOpenResFile(':macsmil2pro.rsrc', 0)
    Res.FSpOpenResFile(':editor.rsrc', 0)
    Res.FSpOpenResFile(':playercontrols.rsrc', 0)
    Res.FSpOpenResFile(':common.rsrc', 0)
    Res.FSpOpenResFile(':editorballoons.rsrc', 0)
Res.GetResource('DLOG', ID_SPLASH_DIALOG)

# Now time for real work.
import os
import string
import macfs

#
# Set variable for standalone cmif:
#
try:
Exemple #30
0
    quietconsole=None
else:
    import quietconsole
    quietconsole.install()

# XXXX Temp: enable Navigation
import macfsn
macfsn._install()

ID_SPLASH_DIALOG=513
# XXXX Debugging code: assure the resource file is available
from Carbon import Res
try:
    Res.GetResource('DLOG', ID_SPLASH_DIALOG)
except:
    Res.FSpOpenResFile(':macg2lite.rsrc', 0)
    Res.FSpOpenResFile(':editor.rsrc', 0)
    Res.FSpOpenResFile(':playercontrols.rsrc', 0)
    Res.FSpOpenResFile(':common.rsrc', 0)
    Res.FSpOpenResFile(':editorballoons.rsrc', 0)
Res.GetResource('DLOG', ID_SPLASH_DIALOG)

# Now time for real work.
import os
import string
import macfs

#
# Set variable for standalone cmif:
#
try: