summaryrefslogtreecommitdiffstats
path: root/Mac/scripts/mkestrres.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/scripts/mkestrres.py')
-rw-r--r--Mac/scripts/mkestrres.py148
1 files changed, 106 insertions, 42 deletions
diff --git a/Mac/scripts/mkestrres.py b/Mac/scripts/mkestrres.py
index ae9114b..56fec98 100644
--- a/Mac/scripts/mkestrres.py
+++ b/Mac/scripts/mkestrres.py
@@ -1,15 +1,31 @@
-#
-# Create 'Estr' resource from error dictionary
-from Res import *
-import Res
-from Resources import *
-import MacOS
+"""Parse sys/errno.h and Errors.h and create Estr resource"""
+
+import regex
+import macfs
import string
+import Res
+import os
READ = 1
WRITE = 2
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):
if len(str) > 255:
raise ValueError, 'String too large'
@@ -18,45 +34,93 @@ def Pstring(str):
def writeestr(dst, edict):
"""Create Estr resource file given a dictionary of errors."""
-
- FSpCreateResFile(dst, 'RSED', 'rsrc', smAllScripts)
- output = FSpOpenResFile(dst, WRITE)
- UseResFile(output)
+ 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 = Resource(Pstring(edict[num]))
+ res = Res.Resource(Pstring(edict[num][0]))
res.AddResource('Estr', num, '')
res.WriteResource()
- CloseResFile(output)
-
-def parsefile(src):
- fp = open(src)
- lines = []
- while 1:
- x = fp.readline()
- if not x:
- break
- x = x[:-1]
- words = string.split(x)
- if x[0] in (' ', '\t'):
- # continuation line
- x = string.join(words)
- lines[-1] = lines[-1] + ' ' + x
- else:
- 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
+ Res.CloseResFile(output)
+
+def writepython(fp, dict):
+ k = dict.keys()
+ k.sort()
+ for i in k:
+ fp.write("%s\t=\t%d\t#%s\n"%(dict[i][1], i, dict[i][0]))
+
+
+def parse_errno_h(fp, dict):
+ errno_prog = regex.compile(ERRNO_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 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__':
- dict = parsefile('errors.txt')
- writeestr('errors.rsrc', dict)
+ main()
+