/[avr-libc]/avr-libc/xml/patch-headers.py
ViewVC logotype

Diff of /avr-libc/xml/patch-headers.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by joerg_wunsch, Fri Oct 21 20:55:19 2005 UTC revision 1.2 by joerg_wunsch, Fri Oct 21 21:52:05 2005 UTC
# Line 176  for header in table.keys(): Line 176  for header in table.keys():
176    
177      print "done."      print "done."
178    
179  r = re.compile(r'#\s*define\s+(SIG_[A-Z0-9_]+)\s+_VECTOR[(](\d+)[)]')  r = re.compile(r'#\s*define\s+((SIG_)?[A-Z0-9_]+(_vect)?)\s+_VECTOR[(](\d+)[)]')
180    
181  print "Patching headers:"  print "Patching headers:"
182  docs = {}  docs = {}
183  nlist = table.keys()  nlist = table.keys()
# Line 197  for header in nlist: Line 198  for header in nlist:
198      #parser = Xml2Obj()      #parser = Xml2Obj()
199      parser.parse (open (xmlfile))      parser.parse (open (xmlfile))
200    
     lastline = ''  
201      h = open(hfile)      h = open(hfile)
202      newh = open(header, "w")      lines = h.readlines()
203      for line in h:      h.close()
204    
205        firstidx = 0
206        lastidx = -1
207        parseddev = parser.getContentHandler().dev
208    
209        # first, clean out any existing interrupt vectors
210        for idx, line in enumerate(lines):
211          m = r.match(line)          m = r.match(line)
212          if m != None:          if m != None:
213              key = m.group(2)              if firstidx == 0:
214              ele = parser.getContentHandler().dev.interrupts[key]                  firstidx = idx
215  #            if lastline.find(ele.description.data) >= 0:              key = m.group(4)            # this is the vector number
216              if 1:              ele = parseddev.interrupts[key]
217                  if len(ele.description.data) > 0:  
218                      newh.write("/* " + ele.description.data + " */\n")              lastidx = idx
219                  newh.write("#define " + ele.sig_name.data +  
220                             create_tabs(ele.sig_name.data) +              if idx > 0 and lines[idx - 1].find(ele.description.data) >= 0:
221                             "_VECTOR(" + key + ")\n")                  # there is a /* description */ comment in the previous line,
222                  for x in ele.alt_name.data:                  # drop it
223                      newh.write("#define " + x +                  if idx - 1 < firstidx:
224                                 create_tabs(x) + "_VECTOR(" + key + ")\n\n")                      firstidx = idx - 1
225                  try:  
226                      if type(devname) is TupleType:              if re.match('^$', lines[idx + 1]):
227                          for d in devname:                  # there is a blank line after the current one, drop it
228                              docs[ele.sig_name.data][2].append(d)                  lastidx = idx + 1
229                      else:  
230                          docs[ele.sig_name.data][2].append(devname)      del lines[firstidx:lastidx]
231                  except KeyError:  
232                      if type(devname) is TupleType:      # now, build a new vector table
233                          docs[ele.sig_name.data] = (ele.alt_name.data,      keys = parseddev.interrupts.keys()
234                                                     ele.description.data,      keys.sort(lambda x,y: cmp(int(x), int(y)))
235                                                     [])  
236                          for d in devname:      vecttext = []
237                              docs[ele.sig_name.data][2].append(d)      for key in keys:
238                      else:          ele = parseddev.interrupts[key]
239                          docs[ele.sig_name.data] = (ele.alt_name.data,          if ele.name == 'NOT_USED':
240                                                     ele.description.data,              # ATmega3250/6450 plug a `hole' that way
241                                                     [devname])              continue
242    
243            if len(ele.description.data) > 0:
244                vecttext.append("/* " + ele.description.data + " */\n")
245            vecttext.append("#define " + ele.sig_name.data +
246                            create_tabs(ele.sig_name.data) +
247                            "_VECTOR(" + key + ")\n")
248            try:
249                for x in ele.alt_name.data:
250                    vecttext.append("#define " + x +
251                                    create_tabs(x) + "_VECTOR(" + key + ")\n")
252            except AttributeError:
253                # no alt_name present
254                pass
255            vecttext.append('\n')
256    
257            # collect documentation for this vector
258            try:
259                if type(devname) is TupleType:
260                    for d in devname:
261                        docs[ele.sig_name.data][2].append(d)
262              else:              else:
263                  newh.write(line)                  docs[ele.sig_name.data][2].append(devname)
264          else:          except KeyError:
265              newh.write(line)              if type(devname) is TupleType:
266          lastline = line                  docs[ele.sig_name.data] = (ele.alt_name.data,
267                                               ele.description.data,
268                                               [])
269                    for d in devname:
270                        docs[ele.sig_name.data][2].append(d)
271                else:
272                    docs[ele.sig_name.data] = (ele.alt_name.data,
273                                               ele.description.data,
274                                               [devname])
275    
276        # insert new vector table
277        lines.insert(firstidx, vecttext)
278    
279        newh = open(header, "w")
280        for line in lines:
281            newh.writelines(line)
282      newh.close()      newh.close()
283      print "done."      print "done."
284    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26