* mslib, spiceprm: Michael Widlok released new version of his

programs.
This commit is contained in:
arno 2000-10-10 12:11:56 +00:00
parent a6d0a5cdca
commit 06fa9efbc2
8 changed files with 206 additions and 10 deletions

View File

@ -1,10 +1,16 @@
2000-03-22 Paolo Nenzi <p.nenzi@ieee.org>
2000-10-10 Arno W. Peters <A.W.Peters@ieee.org>
* mslib, spiceprm: Michael Widlok released new version of his
programs.
2000-03-22 Paolo Nenzi <p.nenzi@ieee.org>
* mslib: Major update. M. Widlok sent the new version of it's programs.
* mslib: Major update. M. Widlok sent the new version of it's
programs.
* spiceprm: Major update. See above line.
1999-09-14 Arno <A.W.Peters@ieee.org>
1999-09-14 Arno W. Peters <A.W.Peters@ieee.org>
* mslib: Added.

View File

@ -92,10 +92,11 @@ readlib(struct LSData *lib, FILE * tlib, \
{
char name[BSIZE];
int numi, wflag;
int numi, wflag, nextsub;
numi = 0;
wflag = NOWRITE;
nextsub = 0;
while (fgets(buf, bsizer, lib->filedes))
{
@ -128,7 +129,16 @@ readlib(struct LSData *lib, FILE * tlib, \
case (SUBLLINE):
if (sub)
{
if (checkname(sub, name))
if (wflag==WRITESUB)
{
/* subckt inside subckt
not so funny */
nextsub++;
fputs(buf, tlib);
break;
}
if (checkname(sub, name))
{
wflag = WRITESUB;
numi++;
@ -150,12 +160,20 @@ readlib(struct LSData *lib, FILE * tlib, \
break;
case (ENDSLLINE):
if (wflag == WRITESUB)
if (nextsub)
{
nextsub--;
fputs(buf, tlib);
break;
} else {
if (wflag == WRITESUB)
{
fprintf(tlib, "%s\n* End Subckt\n\n", buf);
}
wflag = NOWRITE;
break;
}
case (CONTLLINE):
if (wflag != NOWRITE)

77
contrib/mslib/liblook Executable file
View File

@ -0,0 +1,77 @@
#!/bin/sh
#set -x -v
# MW. Lib search / show program
# usage liblook libname [text_to_find] [l_before] [l_after]
LIBPATH=/usr/local/lib
function trapper()
{
echo User break!
echo Exiting . . .
unset LIBPATH
exit 1
}
trap trapper SIGINT SIGQUIT
function operror()
{
echo Incorrect parameters: $*, $#
echo Usage: liblook libname [text_to_find] [l_before] [l_after]
unset LIBPATH
exit 2
}
function showlib()
{
if test -f $LIBPATH/$1; then
less $LIBPATH/$1; exit 0; fi
if test -f [C./$1; then
less ./$1; exit 0; fi
echo Searching $1 in ~/ . . .
less $(find ~/ -name $1)
}
function searchlib()
{
if test -f $LIBPATH/$1; then
echo File: $1; echo;
grep -B"$3" -A"$4" --ignore-case -e "$2" $LIBPATH/$1;
echo; exit 0; fi
if test -f ./$1; then
echo File: $1; echo;
grep -B"$3" -A"$4" --ignore-case -e "$2" ./$1;
echo; exit 0; fi
#if *.lib or sth like this
echo Searching $1 in ~/ . . .;echo;
if (grep -B"$3" -A"$4" --ignore-case -e "$2" $(find ~/ -name $1)); then
echo; exit 0; fi
echo Searching $1 in $LIBPATH;echo;
if (grep -B"$3" -A"$4" --ignore-case -e "$2" $(find $LIBPATH -name $1)); then
echo; exit 0; fi
}
# Main body
if test $# -lt 1 -o $# -gt 4; then operror $*; fi
case $# in
1) showlib $*;;
2) searchlib $1 $2 2 2;;
3) searchlib $1 $2 $3 2;;
4) searchlib $1 $2 $3 $4;;
esac
unset LIBPATH
exit 0

70
contrib/mslib/libprm Executable file
View File

@ -0,0 +1,70 @@
#!/bin/sh
#set -x -v
# MW. Lip / Param parsing program for spice
# -n normal, -f full (keep everything), -r replace original file
# -e new addition start with editor, then like normal
export TMPLP=/tmp/LibPrm.$$-
function trapper()
{
echo User break!
echo Exiting . . .
rm -f -v ${TMPLP}*
unset TMPLP
exit 1
}
trap trapper SIGINT SIGQUIT
function operror()
{
echo Incorrect parameters: $*, $#
unset TMPLP
exit 2
}
function repnormpl()
{
mslib $1 ${TMPLP}1
sed -n -e 'p' -e "1r ${TMPLP}1" $1 >${TMPLP}2
spiceprm ${TMPLP}2 $2
}
function keepall()
{
mslib $1
sed -n -e 'p' -e "1r $1.lib" $1 >${TMPLP}2
spiceprm ${TMPLP}2 $2
}
function withedit()
{
joe $1
mslib $1 ${TMPLP}1
sed -n -e 'p' -e "1r ${TMPLP}1" $1 >${TMPLP}2
spiceprm ${TMPLP}2 $2
}
# Main body
if test $# -lt 2 -o $# -gt 3; then operror $*; fi
if !(test -f $2); then operror $*; fi
case $1$# in
-r3) operror $*;;
-n2) repnormpl $2 ${2%.cir}.ckt;;
-n3) repnormpl $2 $3;;
-r2) repnormpl $2 $2;;
-f2) keepall $2 ${2%.cir}.ckt;;
-f3) keepall $2 $3;;
-e2) withedit $2 ${2%.cir}.ckt;;
-e3) withedit $2 $3;;
esac
rm -f ${TMPLP}*
unset TMPLP
exit 0

View File

@ -0,0 +1,14 @@
So, this is my idea of using parametrized subckts with spice3f4.
First I create an input file like foo.cir and I include commands for
mslib (*MOD, *SUB, *LIB) in it. Then I run "libprm -n foo.cir". Libprm then
runs mslib first to get all models and subckts form given libraries and then
runs spiceprm to evaluate all used parameters.
This works quite right for me, and I hope that You will find my idea
useful. Spiceprm is not my program (I get it from Internet), but I think
that it will better to enclose all used programs in this packet. Spiceprm
has it's own directory with very good readme and examples. If You want to
find out more about libprm or mslib look for the source code. These are rather
short and easy programs - they are all that I could write in quite short
time.

View File

@ -7,6 +7,9 @@ HDRS= datadef.h
SRCC= inc_main.c inc_inp.c inc_LSD.c
mslib: $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS)
$(OBJS): $(HDRS)
clean:
$(RM) $(OBJS) mslib
$(OBJS): $(HDRS)

View File

@ -1,3 +1,10 @@
-------------------------------
MW. 01-10-2000
Bugs Fixes -
-----------
.subckt inside another parametrized .subckt works right now.
----------------------------------------------------------------------
Version 0.11 January 2, 1996
----------------------------------------------------------------------

View File

@ -163,8 +163,9 @@ sub prm_scan {
}
$hasprm = 0;
undef @list; $sublist = '';
last PRM_TST;
}
last PRM_TST;
# MW. 'last PRM_TST' should be inside 'if' loop to allow nestle subckts.
}
if ($depth) {
push(@list, $_);
@ -248,7 +249,7 @@ sub prm_wr {
last PRMWR_SCAN;
}
if (/^\.ends/) {
if (--$depth == 0) { $sublist = ''; }
if (--$depth == 0) { $sublist = ''; }
else { $sublist =~ s/(\#\w+)$//; }
}
prm_wrline($_);