def read_netlist_from_javascript(dir,remove_dups=True,remove_shorts=True):
  p = netlist()

  read_nodenames(dir+'/nodenames.js')

  transdefs = read_transdefs(dir+'/transdefs.js',remove_shorts)
  pullups = read_segdefs(dir+'/segdefs.js')
  pins = read_pins(dir+'/pins.txt')

  if remove_dups:
    transdefs = remove_duplicates(transdefs)

  for (name,g,s,d) in transdefs:
    ng = p.add_node(g,'node_analog')
    ns = p.add_node(s,'node_analog')
    nd = p.add_node(d,'node_analog')
    nt = p.add_node(name,'t')
    port = new_name('in')
    link(nt,port,ng,None)
    link(nt,'s',ns,None)
    link(nt,'d',nd,None)
    nt.data['function'] = port

  for name in pullups:
    np = p.add_node(new_name('pullup'),'pullup')
    link(np,'s',p[name],None)

  for (i,name,pin_type) in pins:
    np = p.add_node(new_name('pin'),'pin_'+pin_type)
    link(np,'pin',p[name],None)
    np.data['index'] = i
    np.data['name'] = name

  return p
def read_netlist_from_javascript(dir, remove_dups=True, remove_shorts=True):
    p = netlist()

    read_nodenames(dir + '/nodenames.js')

    transdefs = read_transdefs(dir + '/transdefs.js', remove_shorts)
    pullups = read_segdefs(dir + '/segdefs.js')
    pins = read_pins(dir + '/pins.txt')

    if remove_dups:
        transdefs = remove_duplicates(transdefs)

    for (name, g, s, d) in transdefs:
        ng = p.add_node(g, 'node_analog')
        ns = p.add_node(s, 'node_analog')
        nd = p.add_node(d, 'node_analog')
        nt = p.add_node(name, 't')
        port = new_name('in')
        link(nt, port, ng, None)
        link(nt, 's', ns, None)
        link(nt, 'd', nd, None)
        nt.data['function'] = port

    for name in pullups:
        np = p.add_node(new_name('pullup'), 'pullup')
        link(np, 's', p[name], None)

    for (i, name, pin_type) in pins:
        np = p.add_node(new_name('pin'), 'pin_' + pin_type)
        link(np, 'pin', p[name], None)
        np.data['index'] = i
        np.data['name'] = name

    return p
def read_netlist_from_spice(filename):
  p = netlist()

  pins = read_pins('pins.txt')

  for t in read_spice_lines(filename):
    v = string.split(t)
    name = v[0]
    if name[0]=='M':
      g,s,d = sanitize(v[2]),sanitize(v[1]),sanitize(v[3])
#      print g,s,d
      if g=='vcc' and s=='vcc' and d=='vcc':
        continue
      if s=='vcc':
        s,d = d,s
      if g=='vcc' and d=='vcc':
        pullup = p.add_node(s,'node_analog')
        np = p.add_node(new_name('pullup'),'pullup')
        link(np,'s',pullup,None)
      else:
        ng = p.add_node(g,'node_analog')
        ns = p.add_node(s,'node_analog')
        nd = p.add_node(d,'node_analog')
        nt = p.add_node('t'+name,'t')
        port = new_name('in')
        link(nt,port,ng,None)
        link(nt,'s',ns,None)
        link(nt,'d',nd,None)
        nt.data['function'] = port
    elif name[0]=='C':
      continue
    else:
      print 'unrecognized spice line: %s' % t

  for (i,name,pin_type) in pins:
    np = p.add_node(new_name('pin'),'pin_'+pin_type)
    link(np,'pin',p[name],None)
    np.data['index'] = i
    np.data['name'] = name

  return p
def read_netlist_from_spice(filename):
    p = netlist()

    pins = read_pins('pins.txt')

    for t in read_spice_lines(filename):
        v = string.split(t)
        name = v[0]
        if name[0] == 'M':
            g, s, d = sanitize(v[2]), sanitize(v[1]), sanitize(v[3])
            #      print g,s,d
            if g == 'vcc' and s == 'vcc' and d == 'vcc':
                continue
            if s == 'vcc':
                s, d = d, s
            if g == 'vcc' and d == 'vcc':
                pullup = p.add_node(s, 'node_analog')
                np = p.add_node(new_name('pullup'), 'pullup')
                link(np, 's', pullup, None)
            else:
                ng = p.add_node(g, 'node_analog')
                ns = p.add_node(s, 'node_analog')
                nd = p.add_node(d, 'node_analog')
                nt = p.add_node('t' + name, 't')
                port = new_name('in')
                link(nt, port, ng, None)
                link(nt, 's', ns, None)
                link(nt, 'd', nd, None)
                nt.data['function'] = port
        elif name[0] == 'C':
            continue
        else:
            print 'unrecognized spice line: %s' % t

    for (i, name, pin_type) in pins:
        np = p.add_node(new_name('pin'), 'pin_' + pin_type)
        link(np, 'pin', p[name], None)
        np.data['index'] = i
        np.data['name'] = name

    return p