diff --git a/src/spicelib/devices/mos6/Makefile.am b/src/spicelib/devices/mos6/Makefile.am index 5161dbac3..324030804 100644 --- a/src/spicelib/devices/mos6/Makefile.am +++ b/src/spicelib/devices/mos6/Makefile.am @@ -7,6 +7,7 @@ libmos6_la_SOURCES = \ mos6ask.c \ mos6conv.c \ mos6defs.h \ + mos6del.c \ mos6dest.c \ mos6ext.h \ mos6ic.c \ @@ -15,6 +16,7 @@ libmos6_la_SOURCES = \ mos6itf.h \ mos6load.c \ mos6mask.c \ + mos6mdel.c \ mos6mpar.c \ mos6par.c \ mos6set.c \ diff --git a/src/spicelib/devices/mos6/mos6del.c b/src/spicelib/devices/mos6/mos6del.c new file mode 100644 index 000000000..7185a22e0 --- /dev/null +++ b/src/spicelib/devices/mos6/mos6del.c @@ -0,0 +1,29 @@ +/********** +Copyright 1990 Regents of the University of California. All rights reserved. +Author: 1985 Thomas L. Quarles +**********/ + +#include "ngspice/ngspice.h" +#include "mos6defs.h" +#include "ngspice/sperror.h" +#include "ngspice/suffix.h" + + +int +MOS6delete(GENmodel *model, IFuid name, GENinstance **kill) +{ + for (; model; model = model->GENnextModel) { + GENinstance **prev = &(model->GENinstances); + GENinstance *here = *prev; + for (; here; here = *prev) { + if (here->GENname == name || (kill && here == *kill)) { + *prev = here->GENnextInstance; + GENinstanceFree(here); + return OK; + } + prev = &(here->GENnextInstance); + } + } + + return E_NODEV; +} diff --git a/src/spicelib/devices/mos6/mos6init.c b/src/spicelib/devices/mos6/mos6init.c index 65df0328c..c87370016 100644 --- a/src/spicelib/devices/mos6/mos6init.c +++ b/src/spicelib/devices/mos6/mos6init.c @@ -52,8 +52,8 @@ SPICEdev MOS6info = { /* DEVacLoad */ NULL, /* MOS6acLoad, XXX */ /* DEVaccept */ NULL, /* DEVdestroy */ MOS6destroy, - /* DEVmodDelete */ NULL, - /* DEVdelete */ NULL, + /* DEVmodDelete */ MOS6mDelete, + /* DEVdelete */ MOS6delete, /* DEVsetic */ MOS6getic, /* DEVask */ MOS6ask, /* DEVmodAsk */ MOS6mAsk, diff --git a/src/spicelib/devices/mos6/mos6mdel.c b/src/spicelib/devices/mos6/mos6mdel.c new file mode 100644 index 000000000..da9fd6799 --- /dev/null +++ b/src/spicelib/devices/mos6/mos6mdel.c @@ -0,0 +1,36 @@ +/********** +Copyright 1990 Regents of the University of California. All rights reserved. +Author: 1985 Thomas L. Quarles +**********/ + +#include "ngspice/ngspice.h" +#include "mos6defs.h" +#include "ngspice/sperror.h" +#include "ngspice/suffix.h" + + +int +MOS6mDelete(GENmodel **models, IFuid modname, GENmodel *kill) +{ + GENinstance *here; + GENmodel **prev = models; + GENmodel *model = *prev; + + for (; model; model = model->GENnextModel) { + if (model->GENmodName == modname || (kill && model == kill)) + break; + prev = &(model->GENnextModel); + } + + if (!model) + return E_NOMOD; + + *prev = model->GENnextModel; + for (here = model->GENinstances; here;) { + GENinstance *next_instance = here->GENnextInstance; + GENinstanceFree(here); + here = next_instance; + } + GENmodelFree(model); + return OK; +}