add command xschem tab_list, returns window pathname and associated filename loaded

This commit is contained in:
stefan schippers 2023-06-03 00:21:55 +02:00
parent 1ea1e835ae
commit 0244dc5e69
6 changed files with 164 additions and 89 deletions

View File

@ -484,6 +484,8 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
<li><kbd> abort_operation</kbd></li><pre> <li><kbd> abort_operation</kbd></li><pre>
Resets UI state, unselect all and abort any pending operation </pre> Resets UI state, unselect all and abort any pending operation </pre>
<li><kbd> add_symbol_pin</kbd></li><pre> <li><kbd> add_symbol_pin</kbd></li><pre>
@ -1103,6 +1105,8 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
<li><kbd> symbols [n]</kbd></li><pre> <li><kbd> symbols [n]</kbd></li><pre>
if 'n' given list symbol with name or number 'n', else if 'n' given list symbol with name or number 'n', else
list all used symbols </pre> list all used symbols </pre>
<li><kbd> tab_list</kbd></li><pre>
list all windows / tabs with window pathname and associated filename </pre>
<li><kbd> table_read [table_file]</kbd></li><pre> <li><kbd> table_read [table_file]</kbd></li><pre>
If a simulation raw file is lodaded unload from memory. If a simulation raw file is lodaded unload from memory.
else read a tabular file 'table_file' else read a tabular file 'table_file'

View File

@ -33,7 +33,7 @@
#define CAD_SPICE_NETLIST 1 #define CAD_SPICE_NETLIST 1
static int dbg_var = 0; static int parselabel_debug = 0;
#include "xschem.h" #include "xschem.h"
/* /*
@ -97,7 +97,7 @@ const char *expandlabel(const char *s, int *m)
YY_BUFFER_STATE buf; YY_BUFFER_STATE buf;
my_free(_ALLOC_ID_, &dest_string.str); /* 30102004 delete 'memory' of previous execution */ my_free(_ALLOC_ID_, &dest_string.str); /* 30102004 delete 'memory' of previous execution */
if(dbg_var >= 3) fprintf(errfp, "expandlabel(): entering\n"); if(parselabel_debug >= 3) fprintf(errfp, "expandlabel(): entering\n");
buf=yy_scan_string(s); buf=yy_scan_string(s);
yyparse(); yyparse();
yy_delete_buffer(buf); yy_delete_buffer(buf);
@ -115,7 +115,7 @@ const char *expandlabel(const char *s, int *m)
my_free(_ALLOC_ID_, &cmd); my_free(_ALLOC_ID_, &cmd);
} }
if(dbg_var >= 3) if(parselabel_debug >= 3)
fprintf(errfp, "expandlabel(): returning %s from %s mult=%d\n",dest_string.str, s, dest_string.m); fprintf(errfp, "expandlabel(): returning %s from %s mult=%d\n",dest_string.str, s, dest_string.m);
if(dest_string.str) if(dest_string.str)
*m = dest_string.m; *m = dest_string.m;
@ -170,7 +170,7 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
/* this action resets initial condition at start of line. This is extremely useful if previously lexer /* this action resets initial condition at start of line. This is extremely useful if previously lexer
* bailed out in the middle of some non INITIAL start condition due to yyparse() syntax errors */ * bailed out in the middle of some non INITIAL start condition due to yyparse() syntax errors */
<mult,index>^. { <mult,index>^. {
if(dbg_var >= 3) fprintf(errfp, "yylex(): matched: ^[^*] |%s|, push back\n",yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): matched: ^[^*] |%s|, push back\n",yytext);
yyless(0); /* push entire token back to input */ yyless(0); /* push entire token back to input */
BEGIN(INITIAL); /* reset parser */ BEGIN(INITIAL); /* reset parser */
} }
@ -179,7 +179,7 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
/* postfix multiplier */ /* postfix multiplier */
{INT} { {INT} {
sscanf(yytext, "%d",&yylval.val); sscanf(yytext, "%d",&yylval.val);
if(dbg_var >= 3) fprintf(errfp, "yylex(): postmult B_NUM: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): postmult B_NUM: |%s|\n", yytext);
BEGIN(INITIAL); BEGIN(INITIAL);
return B_NUM; return B_NUM;
} }
@ -189,35 +189,35 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
<index>{ <index>{
{INT} { {INT} {
sscanf(yytext, "%d",&yylval.val); sscanf(yytext, "%d",&yylval.val);
if(dbg_var >= 3) fprintf(errfp, "yylex(): B_IDXNUM: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): B_IDXNUM: |%s|\n", yytext);
return B_IDXNUM; return B_IDXNUM;
} }
{DDOT} { {DDOT} {
if(dbg_var >= 3) fprintf(errfp, "yylex(): B_DOUBLEDOT: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): B_DOUBLEDOT: |%s|\n", yytext);
return B_DOUBLEDOT; return B_DOUBLEDOT;
} }
/* end vector node index "...]" */ /* end vector node index "...]" */
\] { \] {
if(dbg_var >= 3) fprintf(errfp, "yylex(): close bracket: %s\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): close bracket: %s\n", yytext);
BEGIN(INITIAL); BEGIN(INITIAL);
return yytext[0]; return yytext[0];
} }
{NOTSP} { {NOTSP} {
if(dbg_var >= 3) fprintf(errfp, "yylex(): idx character: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): idx character: |%s|\n", yytext);
return yytext[0]; return yytext[0];
} }
/* recognize AA[aa:bb:33] or AA[33:cc:dd] or AA[aa..bb..11] .... */ /* recognize AA[aa:bb:33] or AA[33:cc:dd] or AA[aa..bb..11] .... */
({IDX_ID}{DDOT}{IDX_ID_N}{DDOT}{IDX_ID_N})|({IDX_ID_N}{DDOT}{IDX_ID}{DDOT}{IDX_ID_N})|({IDX_ID_N}{DDOT}{IDX_ID_N}{DDOT}{IDX_ID}) { ({IDX_ID}{DDOT}{IDX_ID_N}{DDOT}{IDX_ID_N})|({IDX_ID_N}{DDOT}{IDX_ID}{DDOT}{IDX_ID_N})|({IDX_ID_N}{DDOT}{IDX_ID_N}{DDOT}{IDX_ID}) {
yylval.ptr.str=NULL; yylval.ptr.str=NULL;
my_strdup(_ALLOC_ID_, &yylval.ptr.str, yytext); my_strdup(_ALLOC_ID_, &yylval.ptr.str, yytext);
if(dbg_var >= 3) fprintf(errfp, "yylex(): B_NAME3: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): B_NAME3: |%s|\n", yytext);
return B_NAME; return B_NAME;
} }
({IDX_ID}{CLN}{IDX_ID_N}{CLN}{IDX_ID_N})|({IDX_ID_N}{CLN}{IDX_ID}{CLN}{IDX_ID_N})|({IDX_ID_N}{CLN}{IDX_ID_N}{CLN}{IDX_ID}) { ({IDX_ID}{CLN}{IDX_ID_N}{CLN}{IDX_ID_N})|({IDX_ID_N}{CLN}{IDX_ID}{CLN}{IDX_ID_N})|({IDX_ID_N}{CLN}{IDX_ID_N}{CLN}{IDX_ID}) {
yylval.ptr.str=NULL; yylval.ptr.str=NULL;
my_strdup(_ALLOC_ID_, &yylval.ptr.str, yytext); my_strdup(_ALLOC_ID_, &yylval.ptr.str, yytext);
if(dbg_var >= 3) fprintf(errfp, "yylex(): B_NAME2: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): B_NAME2: |%s|\n", yytext);
return B_NAME; return B_NAME;
} }
@ -225,7 +225,7 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
({IDX_ID}{CLN}{IDX_ID_N})|({IDX_ID_N}{CLN}{IDX_ID})|({IDX_ID}{DDOT}{IDX_ID_N})|({IDX_ID_N}{DDOT}{IDX_ID}) { ({IDX_ID}{CLN}{IDX_ID_N})|({IDX_ID_N}{CLN}{IDX_ID})|({IDX_ID}{DDOT}{IDX_ID_N})|({IDX_ID_N}{DDOT}{IDX_ID}) {
yylval.ptr.str=NULL; yylval.ptr.str=NULL;
my_strdup(_ALLOC_ID_, &yylval.ptr.str, yytext); my_strdup(_ALLOC_ID_, &yylval.ptr.str, yytext);
if(dbg_var >= 3) fprintf(errfp, "yylex(): B_NAME1: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): B_NAME1: |%s|\n", yytext);
return B_NAME; return B_NAME;
} }
} /* end <index> */ } /* end <index> */
@ -233,7 +233,7 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
/* a comment, return as LINE token */ /* a comment, return as LINE token */
^\*.* { ^\*.* {
yylval.ptr.str=NULL; /*19102004 */ yylval.ptr.str=NULL; /*19102004 */
if(dbg_var >= 3) fprintf(errfp, "yylex(): B_LINE: |%s|\n",yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): B_LINE: |%s|\n",yytext);
my_strdup(_ALLOC_ID_, &yylval.ptr.str, yytext); /* freed after use in expandlabel.y */ my_strdup(_ALLOC_ID_, &yylval.ptr.str, yytext); /* freed after use in expandlabel.y */
BEGIN(INITIAL); BEGIN(INITIAL);
return B_LINE; return B_LINE;
@ -241,7 +241,7 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
/* prefix multiplier */ /* prefix multiplier */
{INT}/{MULTIP} { {INT}/{MULTIP} {
sscanf(yytext, "%d",&yylval.val); sscanf(yytext, "%d",&yylval.val);
if(dbg_var >= 3) fprintf(errfp, "yylex(): premult B_NUM: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): premult B_NUM: |%s|\n", yytext);
BEGIN(INITIAL); BEGIN(INITIAL);
return B_NUM; return B_NUM;
} }
@ -249,17 +249,17 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
{INT} { {INT} {
yylval.ptr.str=NULL; yylval.ptr.str=NULL;
my_strdup(_ALLOC_ID_, &yylval.ptr.str, yytext); my_strdup(_ALLOC_ID_, &yylval.ptr.str, yytext);
if(dbg_var >= 3) fprintf(errfp, "yylex(): B_NAME4: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): B_NAME4: |%s|\n", yytext);
BEGIN(INITIAL); BEGIN(INITIAL);
return B_NAME; return B_NAME;
} }
{SP} { {SP} {
if(dbg_var >= 3) fprintf(errfp, "yylex(): skipping: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): skipping: |%s|\n", yytext);
} }
/* comma separator between nodes: chop spaces "a,b , c" */ /* comma separator between nodes: chop spaces "a,b , c" */
{SP},{SP} { {SP},{SP} {
yylval.val=','; yylval.val=',';
if(dbg_var >= 3) fprintf(errfp, "yylex(): comma: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): comma: |%s|\n", yytext);
BEGIN(INITIAL); BEGIN(INITIAL);
return ','; return ',';
} }
@ -268,30 +268,30 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
{ID_NUM}|{ID_EXT_PARENTHESIS} { {ID_NUM}|{ID_EXT_PARENTHESIS} {
yylval.ptr.str=NULL;/*19102004 */ yylval.ptr.str=NULL;/*19102004 */
my_strdup(_ALLOC_ID_, &yylval.ptr.str, yytext); /* freed after use in expandlabel.y */ my_strdup(_ALLOC_ID_, &yylval.ptr.str, yytext); /* freed after use in expandlabel.y */
if(dbg_var >= 3) fprintf(errfp, "yylex(): B_NAME0: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): B_NAME0: |%s|\n", yytext);
BEGIN(INITIAL); BEGIN(INITIAL);
return B_NAME; return B_NAME;
} }
/* start vector node index: "aa[" */ /* start vector node index: "aa[" */
\[ { \[ {
if(dbg_var >= 3) fprintf(errfp, "yylex(): open bracket: %s\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): open bracket: %s\n", yytext);
BEGIN(index); BEGIN(index);
return yytext[0]; return yytext[0];
} }
/* "*(aa,bb,cc)" or "*aaa" prefix multiplication*/ /* "*(aa,bb,cc)" or "*aaa" prefix multiplication*/
{SP}\*{SP}/({ID}|[(]) { {SP}\*{SP}/({ID}|[(]) {
if(dbg_var >= 3) fprintf(errfp, "yylex(): pre *: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): pre *: |%s|\n", yytext);
BEGIN(INITIAL); BEGIN(INITIAL);
return '*'; return '*';
} }
/* "*16" postfix multiplication */ /* "*16" postfix multiplication */
{MULTIP}/{INT} { {MULTIP}/{INT} {
if(dbg_var >= 3) fprintf(errfp, "yylex(): post *: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): post *: |%s|\n", yytext);
BEGIN(mult); BEGIN(mult);
return '*'; return '*';
} }
{NOTSP} { {NOTSP} {
if(dbg_var >= 3) fprintf(errfp, "yylex(): character: |%s|\n", yytext); if(parselabel_debug >= 3) fprintf(errfp, "yylex(): character: |%s|\n", yytext);
BEGIN(INITIAL); BEGIN(INITIAL);
return yytext[0]; return yytext[0];
} }

View File

@ -3678,6 +3678,30 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
else { cmd_found = 0;} else { cmd_found = 0;}
break; break;
case 't': /*----------------------------------------------*/ case 't': /*----------------------------------------------*/
/* tab_list
* list all windows / tabs with window pathname and associated filename */
if(!strcmp(argv[1], "tab_list"))
{
int i;
Xschem_ctx *ctx, **save_xctx = get_save_xctx();
int found = 0;
for(i = 0; i < MAX_NEW_WINDOWS; ++i) {
ctx = save_xctx[i];
/* if only one schematic it is not yet saved in save_xctx */
if(get_window_count() == 0 && i == 0) {
ctx = xctx;
}
if(i == 0 ) {
if(ctx) Tcl_AppendResult(interp, ".drw", " {", ctx->sch[ctx->currsch], "}\n", NULL);
}
else if(ctx) {
Tcl_AppendResult(interp, get_window_path(i), " {", ctx->sch[ctx->currsch], "}\n", NULL);
}
}
dbg(1, "check_loaded: return %d\n", found);
return found;
}
/* table_read [table_file] /* table_read [table_file]
* If a simulation raw file is lodaded unload from memory. * If a simulation raw file is lodaded unload from memory.
* else read a tabular file 'table_file' * else read a tabular file 'table_file'
@ -3702,7 +3726,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
* 0.1 0.0 1.5 0.6 * 0.1 0.0 1.5 0.6
* ... ... ... ... * ... ... ... ...
*/ */
if(!strcmp(argv[1], "table_read")) else if(!strcmp(argv[1], "table_read"))
{ {
char f[PATH_MAX + 100]; char f[PATH_MAX + 100];
if(sch_waves_loaded() >= 0) { if(sch_waves_loaded() >= 0) {
@ -3722,6 +3746,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
} }
Tcl_ResetResult(interp); Tcl_ResetResult(interp);
} }
/* test /* test
* testmode */ * testmode */
else if(!strcmp(argv[1], "test")) else if(!strcmp(argv[1], "test"))

View File

@ -77,6 +77,20 @@ static int client_msg(Display *disp, Window win, char *msg, /* {{{ */
} }
}/*}}}*/ }/*}}}*/
Xschem_ctx **get_save_xctx(void)
{
return save_xctx;
}
char *get_window_path(int i)
{
return window_path[i];
}
int get_window_count(void)
{
return window_count;
}
static int window_state (Display *disp, Window win, char *arg) {/*{{{*/ static int window_state (Display *disp, Window win, char *arg) {/*{{{*/
char arg_copy[256]; /* overflow safe */ char arg_copy[256]; /* overflow safe */
@ -1176,7 +1190,10 @@ int check_loaded(const char *f, char *win_path)
ctx = save_xctx[i]; ctx = save_xctx[i];
dbg(1, "window_count=%d i=%d\n", window_count, i); dbg(1, "window_count=%d i=%d\n", window_count, i);
/* if only one schematic it is not yet saved in save_xctx */ /* if only one schematic it is not yet saved in save_xctx */
if(window_count == 0 && i == 0) ctx = xctx; if(window_count == 0 && i == 0) {
ctx = xctx;
my_snprintf(window_path[0], S(window_path[0]), ".drw" );
}
if(ctx) { if(ctx) {
dbg(1, "%s <--> %s\n", ctx->sch[ctx->currsch], f); dbg(1, "%s <--> %s\n", ctx->sch[ctx->currsch], f);
if(!strcmp(ctx->sch[ctx->currsch], f)) { if(!strcmp(ctx->sch[ctx->currsch], f)) {

View File

@ -1333,6 +1333,9 @@ extern void mem_clear_undo(void);
extern void load_schematic(int load_symbol, const char *fname, int reset_undo, int alert); extern void load_schematic(int load_symbol, const char *fname, int reset_undo, int alert);
/* check if filename already in an open window/tab */ /* check if filename already in an open window/tab */
extern int check_loaded(const char *f, char *win_path); extern int check_loaded(const char *f, char *win_path);
extern char *get_window_path(int i);
extern int get_window_count(void);
extern Xschem_ctx **get_save_xctx(void);
extern void link_symbols_to_instances(int from); extern void link_symbols_to_instances(int from);
extern void load_ascii_string(char **ptr, FILE *fd); extern void load_ascii_string(char **ptr, FILE *fd);
extern char *read_line(FILE *fp, int dbg_level); extern char *read_line(FILE *fp, int dbg_level);

View File

@ -1,33 +1,55 @@
v {xschem version=3.0.0 file_version=1.2 } v {xschem version=3.4.0 file_version=1.2
}
G {} G {}
K {} K {}
V {} V {}
S {} S {}
E {} E {}
N 600 -450 650 -450 {lab=B} B 2 770 -500 1570 -100 {flags=graph
N 690 -690 690 -670 {lab=D} y1=-50
N 510 -690 690 -690 {lab=D} y2=40
N 190 -690 310 -690 {lab=VCC} ypos1=0
N 190 -690 190 -670 {lab=VCC} ypos2=2
N 690 -500 690 -480 {lab=C} divy=5
N 690 -500 750 -500 {lab=C} subdivy=1
N 810 -500 840 -500 {lab=OUT} unity=1
N 840 -500 840 -440 {lab=OUT} x1=2
N 690 -410 690 -400 {lab=E} x2=10.0002
N 780 -410 780 -400 {lab=E} divx=5
N 690 -410 780 -410 {lab=E} subdivx=8
N 510 -450 510 -400 {lab=#net1} xlabmag=1.0
N 510 -570 510 -530 {lab=#net2} ylabmag=1.0
N 420 -450 510 -450 {lab=#net1} node="\\"out db20()\\""
N 370 -690 510 -690 {lab=D} color=4
N 690 -420 690 -410 {lab=E} dataset=-1
N 510 -470 510 -450 {lab=#net1} unitx=1
N 190 -450 360 -450 {lab=IN} logx=1
N 190 -450 190 -420 {lab=IN} logy=0
N 840 -500 930 -500 {lab=OUT} }
N 510 -450 540 -450 {lab=#net1} N 450 -510 500 -510 {lab=B}
N 510 -690 510 -630 {lab=D} N 540 -750 540 -730 {lab=D}
N 690 -550 690 -500 {lab=C} N 360 -750 540 -750 {lab=D}
N 40 -750 160 -750 {lab=VCC}
N 40 -750 40 -730 {lab=VCC}
N 540 -560 540 -540 {lab=C}
N 540 -560 600 -560 {lab=C}
N 660 -560 690 -560 {lab=OUT}
N 690 -560 690 -500 {lab=OUT}
N 540 -470 540 -460 {lab=E}
N 630 -470 630 -460 {lab=E}
N 540 -470 630 -470 {lab=E}
N 360 -510 360 -460 {lab=#net1}
N 360 -630 360 -590 {lab=#net2}
N 270 -510 360 -510 {lab=#net1}
N 220 -750 360 -750 {lab=D}
N 540 -480 540 -470 {lab=E}
N 360 -530 360 -510 {lab=#net1}
N 40 -510 210 -510 {lab=IN}
N 40 -510 40 -480 {lab=IN}
N 690 -560 740 -560 {lab=OUT}
N 360 -510 390 -510 {lab=#net1}
N 360 -750 360 -690 {lab=D}
N 540 -610 540 -560 {lab=C}
C {title.sym} 160 -30 0 0 {name=l7 author="Stefan Schippers"} C {title.sym} 160 -30 0 0 {name=l7 author="Stefan Schippers"}
C {code_shown.sym} 30 -310 0 0 {name=CONTROL place=end value=".ac oct 1000 100 10G C {code_shown.sym} 30 -310 0 0 {name=CONTROL place=end value=".ac oct 1000 100 10G
.control .control
@ -43,43 +65,47 @@ C {code_shown.sym} 30 -310 0 0 {name=CONTROL place=end value=".ac oct 1000 100 1
.endc .endc
"} "}
C {code.sym} 840 -250 0 0 {name=MODELS value=".model Q2N2219A NPN(Is=14.34f Xti=3 Eg=1.11 Vaf=74.03 Bf=255.9 Ne=1.307 Ise=14.34f Ikf=.2847 Xtb=1.5 Br=6.092 Nc=2 Isc=0 Ikr=0 Rc=1 Cjc=7.306p C {code.sym} 590 -240 0 0 {name=MODELS value=".model Q2N2219A NPN(Is=14.34f Xti=3 Eg=1.11 Vaf=74.03 Bf=255.9 Ne=1.307 Ise=14.34f Ikf=.2847 Xtb=1.5 Br=6.092 Nc=2 Isc=0 Ikr=0 Rc=1 Cjc=7.306p
+ Mjc=.3416 Vjc=.75 Fc=.5 Cje=22.01p Mje=.377 Vje=.75 Tr=46.91n Tf=411.1p Itf=.6 Vtf=1.7 Xtf=3 Rb=10 Vceo=40 Icrating=800m mfg=Philips) + Mjc=.3416 Vjc=.75 Fc=.5 Cje=22.01p Mje=.377 Vje=.75 Tr=46.91n Tf=411.1p Itf=.6 Vtf=1.7 Xtf=3 Rb=10 Vceo=40 Icrating=800m )
"} "}
C {ind.sym} 340 -690 1 0 {name=l1 value=10uH} C {ind.sym} 190 -750 1 0 {name=l1 value=10uH}
C {vsource.sym} 190 -640 0 0 {name=v1 value=12} C {vsource.sym} 40 -700 0 0 {name=v1 value=12}
C {gnd.sym} 190 -610 0 0 {name=l11 lab=0} C {gnd.sym} 40 -670 0 0 {name=l11 lab=0}
C {capa.sym} 430 -660 0 1 {name=C4 m=1 value=100nF footprint=1206 device="ceramic capacitor"} C {capa.sym} 280 -720 0 1 {name=C4 m=1 value=100nF footprint=1206 device="ceramic capacitor"}
C {res.sym} 510 -500 0 0 {name=R1 value=6.8k footprint=1206 device=resistor m=1} C {res.sym} 360 -560 0 0 {name=R1 value=6.8k footprint=1206 device=resistor m=1}
C {npn.sym} 670 -450 0 0 {name=Q2 model=Q2N2219A device=Q2N5179 footprint=SOT23 area=1} C {npn.sym} 520 -510 0 0 {name=Q2 model=Q2N2219A device=Q2N5179 footprint=SOT23 area=1}
C {res.sym} 510 -370 0 0 {name=R2 value=1.8k footprint=1206 device=resistor m=1} C {res.sym} 360 -430 0 0 {name=R2 value=1.8k footprint=1206 device=resistor m=1}
C {capa.sym} 780 -500 1 1 {name=C5 m=1 value=1nF footprint=1206 device="ceramic capacitor"} C {capa.sym} 630 -560 1 1 {name=C5 m=1 value=1nF footprint=1206 device="ceramic capacitor"}
C {res.sym} 840 -410 0 0 {name=R3 value=120k footprint=1206 device=resistor m=1} C {res.sym} 690 -470 0 0 {name=R3 value=120k footprint=1206 device=resistor m=1}
C {gnd.sym} 840 -380 0 0 {name=l12 lab=0} C {gnd.sym} 690 -440 0 0 {name=l12 lab=0}
C {res.sym} 690 -370 0 0 {name=R4 value=100 footprint=1206 device=resistor m=1} C {res.sym} 540 -430 0 0 {name=R4 value=100 footprint=1206 device=resistor m=1}
C {gnd.sym} 690 -340 0 0 {name=l13 lab=0} C {gnd.sym} 540 -400 0 0 {name=l13 lab=0}
C {capa.sym} 390 -450 1 1 {name=C6 m=1 value=1nF footprint=1206 device="ceramic capacitor"} C {capa.sym} 240 -510 1 1 {name=C6 m=1 value=1nF footprint=1206 device="ceramic capacitor"}
C {vsource.sym} 190 -390 0 0 {name=v2 value="dc 0 ac 1"} C {vsource.sym} 40 -450 0 0 {name=v2 value="dc 0 ac 1"}
C {gnd.sym} 190 -360 0 0 {name=l14 lab=0} C {gnd.sym} 40 -420 0 0 {name=l14 lab=0}
C {res.sym} 690 -640 0 0 {name=R5 value=330 footprint=1206 device=resistor m=1} C {res.sym} 540 -700 0 0 {name=R5 value=330 footprint=1206 device=resistor m=1}
C {capa.sym} 780 -370 0 1 {name=C7 m=1 value=100nF footprint=1206 device="ceramic capacitor"} C {capa.sym} 630 -430 0 1 {name=C7 m=1 value=100nF footprint=1206 device="ceramic capacitor"}
C {gnd.sym} 780 -340 0 0 {name=l15 lab=0} C {gnd.sym} 630 -400 0 0 {name=l15 lab=0}
C {gnd.sym} 510 -340 0 0 {name=l16 lab=0} C {gnd.sym} 360 -400 0 0 {name=l16 lab=0}
C {gnd.sym} 430 -630 0 0 {name=l17 lab=0} C {gnd.sym} 280 -690 0 0 {name=l17 lab=0}
C {lab_wire.sym} 270 -690 0 0 {name=l18 sig_type=std_logic lab=VCC} C {lab_wire.sym} 120 -750 0 0 {name=l18 sig_type=std_logic lab=VCC}
C {lab_wire.sym} 590 -690 0 0 {name=l19 sig_type=std_logic lab=D} C {lab_wire.sym} 440 -750 0 0 {name=l19 sig_type=std_logic lab=D}
C {lab_wire.sym} 630 -450 0 0 {name=l20 sig_type=std_logic lab=B} C {lab_wire.sym} 480 -510 0 0 {name=l20 sig_type=std_logic lab=B}
C {lab_wire.sym} 730 -410 0 0 {name=l21 sig_type=std_logic lab=E} C {lab_wire.sym} 580 -470 0 0 {name=l21 sig_type=std_logic lab=E}
C {opin.sym} 930 -500 0 0 {name=p2 lab=OUT} C {opin.sym} 740 -560 0 0 {name=p2 lab=OUT}
C {lab_wire.sym} 690 -510 0 0 {name=l22 sig_type=std_logic lab=C} C {lab_wire.sym} 540 -570 0 0 {name=l22 sig_type=std_logic lab=C}
C {lab_pin.sym} 190 -450 0 0 {name=l23 sig_type=std_logic lab=IN} C {lab_pin.sym} 40 -510 0 0 {name=l23 sig_type=std_logic lab=IN}
C {ammeter.sym} 570 -450 3 0 {name=v3 current=8.9002e-05} C {ammeter.sym} 420 -510 3 0 {name=v3 current=8.9002e-05}
C {ammeter.sym} 510 -600 0 0 {name=v4 current=0.001414} C {ammeter.sym} 360 -660 0 0 {name=v4 current=0.001414}
C {ammeter.sym} 690 -580 0 0 {name=v5 current=0.01657} C {ammeter.sym} 540 -640 0 0 {name=v5 current=0.01657}
C {spice_probe.sym} 860 -500 0 0 {name=p1 analysis=tran voltage=0.0000e+00} C {spice_probe.sym} 710 -560 0 0 {name=p1 analysis=tran voltage=0.0000e+00}
C {spice_probe.sym} 710 -500 0 0 {name=p3 analysis=tran voltage=6.533} C {spice_probe.sym} 560 -560 0 0 {name=p3 analysis=tran voltage=6.533}
C {spice_probe.sym} 190 -690 0 0 {name=p4 analysis=tran voltage=12} C {spice_probe.sym} 40 -750 0 0 {name=p4 analysis=tran voltage=12}
C {spice_probe.sym} 210 -450 0 0 {name=p5 analysis=tran voltage=0.0000e+00} C {spice_probe.sym} 60 -510 0 0 {name=p5 analysis=tran voltage=0.0000e+00}
C {spice_probe.sym} 630 -450 0 0 {name=p6 analysis=tran voltage=2.385} C {spice_probe.sym} 480 -510 0 0 {name=p6 analysis=tran voltage=2.385}
C {spice_probe.sym} 750 -410 0 0 {name=p7 analysis=tran voltage=1.666} C {spice_probe.sym} 600 -470 0 0 {name=p7 analysis=tran voltage=1.666}
C {spice_probe.sym} 470 -690 0 0 {name=p8 analysis=tran voltage=12} C {spice_probe.sym} 320 -750 0 0 {name=p8 analysis=tran voltage=12}
C {launcher.sym} 1010 -80 0 0 {name=h5
descr="load waves"
tclcommand="xschem raw_read $netlist_dir/amp_xschem.raw ac"
}