blob: b94473c999cb8e6e649f4f2f091c7a44bd7291a8 [file] [log] [blame]
#!/usr/bin/env python3
import os
import common
spice = [
'.all',
'.cor',
'.hed',
'.mod',
'.pm3',
'.scs',
'.sp',
'.spi',
'.spice',
'.txt',
]
txt_ignore = [
'README.txt',
]
o = open('.files.spice', 'w')
for pname in common.files(spice):
pname = pname.strip()
fname = os.path.split(pname)[-1]
_, ext = os.path.splitext(pname)
if ext not in spice:
continue
contents = open(pname).read()
found = []
if not contents.strip():
found.append('empty')
# Forms of subckt
# ------------------------
# Normal `.subckt` form
if '.subckt' in contents:
found.append('.subckt')
elif '.SUBCKT' in contents:
found.append('.SUBCKT')
# `inline subckt` form found in SPECTRE/*/*.pm3 files
elif 'inline subckt' in contents:
assert ext in (".pm3", '.mod'), pname
found.append('inline subckt')
# Bare `subckt` form found in XXX/spectre/spice.sp files
elif 'subckt ' in contents:
assert fname == "spice.sp", pname
found.append('bare subckt')
# Special file indicators
# ------------------------
if "SPICE3 file" in contents:
assert ext == ".spice", pname
found.append('SPICE3')
if "SPICE3 file" in contents:
assert ext == ".spice", pname
found.append('SPICE3')
if "NGSPICE file" in contents:
assert ext.startswith(".sp"), pname
found.append('NGSPICE')
# Includes
# ------------------------
if ".inc " in contents:
found.append(".inc(lude)")
if ".include " in contents:
found.append(".include")
elif "include " in contents:
found.append("(.)include")
# Other . objects
# ------------------------
if ".param" in contents:
found.append('.param')
if '.model' in contents:
found.append('.model')
if "simulator lang=spectre" in contents:
found.append('lang=spectre')
if "simulator lang=spice" in contents:
found.append('lang=spectre')
if "* model.hed" in contents:
found.append("hed")
if "save " in contents:
found.append("save")
if not found:
if fname == 'icm_pmlog.txt':
continue
if 'Calibre' in pname:
assert ext == '.mod', pname
continue
print("--", pname, 'not spice model?')
else:
print(pname, found)
o.write(pname)
o.write('\n')
o.close()