Beispiel #1
0
def constructApertureTable(fileList):
    # First we construct a dictionary where each key is the
    # string representation of the aperture. Then we go back and assign
    # numbers. For aperture macros, we construct their final version
    # (i.e., 'M1', 'M2', etc.) right away, as they are parsed. Thus,
    # we translate from 'THX10N' or whatever to 'M2' right away.
    GAT = config.GAT  # Global Aperture Table
    GAT.clear()
    GAMT = config.GAMT  # Global Aperture Macro Table
    GAMT.clear()
    RevGAMT = {
    }  # Dictionary keyed by aperture macro hash and returning macro name

    AT = {}  # Aperture Table for this file
    for fname in fileList:
        print 'Reading apertures from %s ...' % fname

        knownMacroNames = {}

        fid = file(fname, 'rt')
        for line in fid:
            # Get rid of CR
            line = line.replace('\x0D', '')

            if tool_pat.match(line):
                break  # When tools start, no more apertures are being defined

            # If this is an aperture macro definition, add its string
            # representation to the dictionary. It might already exist.
            # Ignore %AMOC8* from Eagle for now as it uses a macro parameter.
            if line[:7] == '%AMOC8*':
                continue

            # parseApertureMacro() sucks up all macro lines up to terminating '%'
            AM = amacro.parseApertureMacro(line, fid)
            if AM:
                # Has this macro definition already been defined (perhaps by another name
                # in another layer)?
                try:
                    # If this macro has already been encountered anywhere in any job,
                    # RevGAMT will map the macro hash to the global macro name. Then,
                    # make the local association knownMacroNames[localMacroName] = globalMacroName.
                    knownMacroNames[AM.name] = RevGAMT[AM.hash()]
                except KeyError:
                    # No, so define the global macro and do the translation. Note that
                    # addToApertureMacroTable() MODIFIES AM.name to the new M-name.
                    localMacroName = AM.name
                    AM = amacro.addToApertureMacroTable(AM)
                    knownMacroNames[localMacroName] = AM.name
                    RevGAMT[AM.hash()] = AM.name
            else:
                A = parseAperture(line, knownMacroNames)

                # If this is an aperture definition, add the string representation
                # to the dictionary. It might already exist.
                if A:
                    AT[A.hash()] = A

        fid.close()

    # Now, go through and assign sequential codes to all apertures
    code = 10
    for val in AT.values():
        key = 'D%d' % code
        GAT[key] = val
        val.code = key
        code += 1

    if 0:
        keylist = config.GAT.keys()
        keylist.sort()
        print 'Apertures'
        print '========='
        for key in keylist:
            print '%s' % config.GAT[key]
        sys.exit(0)
Beispiel #2
0
def constructApertureTable(fileList):
  # First we construct a dictionary where each key is the
  # string representation of the aperture. Then we go back and assign
  # numbers. For aperture macros, we construct their final version
  # (i.e., 'M1', 'M2', etc.) right away, as they are parsed. Thus,
  # we translate from 'THX10N' or whatever to 'M2' right away.
  GAT = config.GAT      # Global Aperture Table
  GAT.clear()
  GAMT = config.GAMT    # Global Aperture Macro Table
  GAMT.clear()
  RevGAMT = {}          # Dictionary keyed by aperture macro hash and returning macro name

  AT = {}               # Aperture Table for this file
  for fname in fileList:
    #print 'Reading apertures from %s ...' % fname

    knownMacroNames = {}

    fid = file(fname,'rt')
    for line in fid:
      # Get rid of CR
      line = line.replace('\x0D', '')

      if tool_pat.match(line):
        break # When tools start, no more apertures are being defined

      # If this is an aperture macro definition, add its string
      # representation to the dictionary. It might already exist.
      # Ignore %AMOC8* from Eagle for now as it uses a macro parameter.
      if line[:7]=='%AMOC8*':
        continue

      # parseApertureMacro() sucks up all macro lines up to terminating '%'
      AM = amacro.parseApertureMacro(line, fid)
      if AM:
        # Has this macro definition already been defined (perhaps by another name
        # in another layer)?
        try:
          # If this macro has already been encountered anywhere in any job,
          # RevGAMT will map the macro hash to the global macro name. Then,
          # make the local association knownMacroNames[localMacroName] = globalMacroName.
          knownMacroNames[AM.name] = RevGAMT[AM.hash()]
        except KeyError:
          # No, so define the global macro and do the translation. Note that
          # addToApertureMacroTable() MODIFIES AM.name to the new M-name.
          localMacroName = AM.name
          AM = amacro.addToApertureMacroTable(AM)
          knownMacroNames[localMacroName] = AM.name
          RevGAMT[AM.hash()] = AM.name
      else:
        A = parseAperture(line, knownMacroNames)

        # If this is an aperture definition, add the string representation
        # to the dictionary. It might already exist.
        if A:
          AT[A.hash()] = A

    fid.close()

  # Now, go through and assign sequential codes to all apertures
  code = 10
  for val in AT.values():
    key = 'D%d' % code
    GAT[key] = val
    val.code = key
    code += 1

  if 0:
    keylist = config.GAT.keys()
    keylist.sort()
    print 'Apertures'
    print '========='
    for key in keylist:
      print '%s' % config.GAT[key]
    sys.exit(0)