symbian-qemu-0.9.1-12/python-2.6.1/Mac/scripts/mkestrres.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 """Parse sys/errno.h and Errors.h and create Estr resource"""
       
     2 
       
     3 import re
       
     4 import string
       
     5 from Carbon import Res
       
     6 import os
       
     7 
       
     8 READ = 1
       
     9 WRITE = 2
       
    10 smAllScripts = -3
       
    11 
       
    12 ERRNO_PROG="#define[ \t]+" \
       
    13                    "([A-Z0-9a-z_]+)" \
       
    14                    "[ \t]+" \
       
    15                    "([0-9]+)" \
       
    16                    "[ \t]*/\*[ \t]*" \
       
    17                    "(.*)" \
       
    18                    "[ \t]*\*/"
       
    19 
       
    20 ERRORS_PROG="[ \t]*" \
       
    21                         "([A-Z0-9a-z_]+)" \
       
    22                         "[ \t]*=[ \t]*" \
       
    23                         "([-0-9]+)" \
       
    24                         "[, \t]*/\*[ \t]*" \
       
    25                         "(.*)" \
       
    26                         "[ \t]*\*/"
       
    27 
       
    28 ERRORS_PROG_2="[ \t]*" \
       
    29                         "([A-Z0-9a-z_]+)" \
       
    30                         "[ \t]*=[ \t]*" \
       
    31                         "([-0-9]+)" \
       
    32                         "[, \t]*"
       
    33 
       
    34 def Pstring(str):
       
    35     if len(str) > 255:
       
    36         raise ValueError, 'String too large'
       
    37     return chr(len(str))+str
       
    38 
       
    39 def writeestr(dst, edict):
       
    40     """Create Estr resource file given a dictionary of errors."""
       
    41 
       
    42     os.unlink(dst.as_pathname())
       
    43     Res.FSpCreateResFile(dst, 'RSED', 'rsrc', smAllScripts)
       
    44     output = Res.FSpOpenResFile(dst, WRITE)
       
    45     Res.UseResFile(output)
       
    46     for num in edict.keys():
       
    47         res = Res.Resource(Pstring(edict[num][0]))
       
    48         res.AddResource('Estr', num, '')
       
    49         res.WriteResource()
       
    50     Res.CloseResFile(output)
       
    51 
       
    52 def writepython(fp, dict):
       
    53     k = dict.keys()
       
    54     k.sort()
       
    55     for i in k:
       
    56         fp.write("%s\t=\t%d\t#%s\n"%(dict[i][1], i, dict[i][0]))
       
    57 
       
    58 
       
    59 def parse_errno_h(fp, dict):
       
    60     errno_prog = re.compile(ERRNO_PROG)
       
    61     for line in fp.readlines():
       
    62         m = errno_prog.match(line)
       
    63         if m:
       
    64             number = string.atoi(m.group(2))
       
    65             name = m.group(1)
       
    66             desc = string.strip(m.group(3))
       
    67 
       
    68             if not dict.has_key(number):
       
    69                 dict[number] = desc, name
       
    70             else:
       
    71                 print 'DUPLICATE', number
       
    72                 print '\t', dict[number]
       
    73                 print '\t', (desc, name)
       
    74 
       
    75 def parse_errors_h(fp, dict):
       
    76     errno_prog = re.compile(ERRORS_PROG)
       
    77     errno_prog_2 = re.compile(ERRORS_PROG_2)
       
    78     for line in fp.readlines():
       
    79         match = 0
       
    80         m = errno_prog.match(line)
       
    81         m2 = errno_prog_2.match(line)
       
    82         if m:
       
    83             number = string.atoi(m.group(2))
       
    84             name = m.group(1)
       
    85             desc = string.strip(m.group(3))
       
    86             match=1
       
    87         elif m2:
       
    88             number = string.atoi(m2.group(2))
       
    89             name = m2.group(1)
       
    90             desc = name
       
    91             match=1
       
    92         if match:
       
    93             if number > 0: continue
       
    94 
       
    95             if not dict.has_key(number):
       
    96                 dict[number] = desc, name
       
    97             else:
       
    98                 print 'DUPLICATE', number
       
    99                 print '\t', dict[number]
       
   100                 print '\t', (desc, name)
       
   101                 if len(desc) > len(dict[number][0]):
       
   102                     print 'Pick second one'
       
   103                     dict[number] = desc, name
       
   104 
       
   105 def main():
       
   106     dict = {}
       
   107     pathname = EasyDialogs.AskFileForOpen(message="Where is GUSI sys/errno.h?")
       
   108     if pathname:
       
   109         fp = open(pathname)
       
   110         parse_errno_h(fp, dict)
       
   111         fp.close()
       
   112 
       
   113     pathname = EasyDialogs.AskFileForOpen(message="Select cerrno (MSL) or cancel")
       
   114     if pathname:
       
   115         fp = open(pathname)
       
   116         parse_errno_h(fp, dict)
       
   117         fp.close()
       
   118 
       
   119     pathname = EasyDialogs.AskFileForOpen(message="Where is MacErrors.h?")
       
   120     if pathname:
       
   121         fp = open(pathname)
       
   122         parse_errors_h(fp, dict)
       
   123         fp.close()
       
   124 
       
   125     pathname = EasyDialogs.AskFileForOpen(message="Where is mkestrres-MacErrors.h?")
       
   126     if pathname:
       
   127         fp = open(pathname)
       
   128         parse_errors_h(fp, dict)
       
   129         fp.close()
       
   130 
       
   131     if not dict:
       
   132         return
       
   133 
       
   134     pathname = EasyDialogs.AskFileForSave(message="Resource output file?", savedFileName="errors.rsrc")
       
   135     if pathname:
       
   136         writeestr(fss, dict)
       
   137 
       
   138     pathname = EasyDialogs.AskFileForSave(message="Python output file?", savedFileName="macerrors.py")
       
   139     if pathname:
       
   140         fp = open(pathname, "w")
       
   141         writepython(fp, dict)
       
   142         fp.close()
       
   143         fss.SetCreatorType('Pyth', 'TEXT')
       
   144 
       
   145     pathname = EasyDialogs.AskFileForSave(message="Text output file?", savedFileName="errors.txt")
       
   146     if pathname:
       
   147         fp = open(pathname, "w")
       
   148 
       
   149         k = dict.keys()
       
   150         k.sort()
       
   151         for i in k:
       
   152             fp.write("%d\t%s\t%s\n"%(i, dict[i][1], dict[i][0]))
       
   153         fp.close()
       
   154 
       
   155 
       
   156 if __name__ == '__main__':
       
   157     main()