Kaydet (Commit) ac4d8694 authored tarafından Jack Jansen's avatar Jack Jansen

Completely redone. mkestrres now parses errno.h and Errors.h files

(which have the descriptions of the errors in comments) and
generates errors.txt, macerrors.py and errors.rsrc
üst 6c3d35ae
This diff is collapsed.
# """Parse sys/errno.h and Errors.h and create Estr resource"""
# Create 'Estr' resource from error dictionary
from Res import * import regex
import Res import macfs
from Resources import *
import MacOS
import string import string
import Res
import os
READ = 1 READ = 1
WRITE = 2 WRITE = 2
smAllScripts = -3 smAllScripts = -3
ERRNO_PROG="#define[ \t]+" \
"\([A-Z0-9a-z_]+\)" \
"[ \t]+" \
"\([0-9]+\)" \
"[ \t]*/\*[ \t]*" \
"\(.*\)" \
"[ \t]*\*/"
ERRORS_PROG="[ \t]*" \
"\([A-Z0-9a-z_]+\)" \
"[ \t]*=[ \t]*" \
"\([-0-9]+\)" \
"[, \t]*/\*[ \t]*" \
"\(.*\)" \
"[ \t]*\*/"
def Pstring(str): def Pstring(str):
if len(str) > 255: if len(str) > 255:
raise ValueError, 'String too large' raise ValueError, 'String too large'
...@@ -18,45 +34,93 @@ def Pstring(str): ...@@ -18,45 +34,93 @@ def Pstring(str):
def writeestr(dst, edict): def writeestr(dst, edict):
"""Create Estr resource file given a dictionary of errors.""" """Create Estr resource file given a dictionary of errors."""
os.unlink(dst.as_pathname())
FSpCreateResFile(dst, 'RSED', 'rsrc', smAllScripts) Res.FSpCreateResFile(dst, 'RSED', 'rsrc', smAllScripts)
output = FSpOpenResFile(dst, WRITE) output = Res.FSpOpenResFile(dst, WRITE)
UseResFile(output) Res.UseResFile(output)
for num in edict.keys(): for num in edict.keys():
res = Resource(Pstring(edict[num])) res = Res.Resource(Pstring(edict[num][0]))
res.AddResource('Estr', num, '') res.AddResource('Estr', num, '')
res.WriteResource() res.WriteResource()
CloseResFile(output) Res.CloseResFile(output)
def parsefile(src): def writepython(fp, dict):
fp = open(src) k = dict.keys()
lines = [] k.sort()
while 1: for i in k:
x = fp.readline() fp.write("%s\t=\t%d\t#%s\n"%(dict[i][1], i, dict[i][0]))
if not x:
break
x = x[:-1] def parse_errno_h(fp, dict):
words = string.split(x) errno_prog = regex.compile(ERRNO_PROG)
if x[0] in (' ', '\t'): for line in fp.readlines():
# continuation line if errno_prog.match(line) > 0:
x = string.join(words) number = string.atoi(errno_prog.group(2))
lines[-1] = lines[-1] + ' ' + x name = errno_prog.group(1)
else: desc = string.strip(errno_prog.group(3))
x = string.join(words)
lines.append(x)
dict = {}
for line in lines:
words = string.split(line)
index = eval(words[0])
if dict.has_key(index):
print '** Duplicate key:', index
x = string.join(words[2:])
if not x:
x = words[1]
dict[index] = x
return dict
if not dict.has_key(number):
dict[number] = desc, name
else:
print 'DUPLICATE', number
print '\t', dict[number]
print '\t', (desc, name)
def parse_errors_h(fp, dict):
errno_prog = regex.compile(ERRORS_PROG)
for line in fp.readlines():
if errno_prog.match(line) > 0:
number = string.atoi(errno_prog.group(2))
name = errno_prog.group(1)
desc = string.strip(errno_prog.group(3))
if number > 0: continue
if not dict.has_key(number):
dict[number] = desc, name
else:
print 'DUPLICATE', number
print '\t', dict[number]
print '\t', (desc, name)
def main():
dict = {}
fss, ok = macfs.PromptGetFile("Where is errno.h?")
if not ok: return
fp = open(fss.as_pathname())
parse_errno_h(fp, dict)
fp.close()
fss, ok = macfs.PromptGetFile("Where is Errors.h?")
if not ok: return
fp = open(fss.as_pathname())
parse_errors_h(fp, dict)
fp.close()
if not dict:
return
fss, ok = macfs.StandardPutFile("Resource output file?", "errors.rsrc")
if ok:
writeestr(fss, dict)
fss, ok = macfs.StandardPutFile("Python output file?", "macerrors.py")
if ok:
fp = open(fss.as_pathname(), "w")
writepython(fp, dict)
fp.close()
fss.SetCreatorType('Pyth', 'TEXT')
fss, ok = macfs.StandardPutFile("Text output file?", "errors.txt")
if ok:
fp = open(fss.as_pathname(), "w")
k = dict.keys()
k.sort()
for i in k:
fp.write("%d\t%s\t%s\n"%(i, dict[i][1], dict[i][0]))
fp.close()
if __name__ == '__main__': if __name__ == '__main__':
dict = parsefile('errors.txt') main()
writeestr('errors.rsrc', dict)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment