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>
Resets UI state, unselect all and abort any pending operation </pre>
<li><kbd> add_symbol_pin</kbd></li><pre>
@ -972,7 +974,7 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
<li><kbd> resolved_net [net]</kbd></li><pre>
if 'net' is given return its topmost full hierarchy name
else returns the topmost full hierarchy name of selected net/pin/label.
Nets connected to I/O ports are mapped to upper level recursively</pre>
Nets connected to I/O ports are mapped to upper level recursively </pre>
<li><kbd> rotate</kbd></li><pre>
Rotate selected objects around their centers </pre>
<li><kbd> save</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>
if 'n' given list symbol with name or number 'n', else
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>
If a simulation raw file is lodaded unload from memory.
else read a tabular file 'table_file'

View File

@ -33,7 +33,7 @@
#define CAD_SPICE_NETLIST 1
static int dbg_var = 0;
static int parselabel_debug = 0;
#include "xschem.h"
/*
@ -97,7 +97,7 @@ const char *expandlabel(const char *s, int *m)
YY_BUFFER_STATE buf;
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);
yyparse();
yy_delete_buffer(buf);
@ -115,7 +115,7 @@ const char *expandlabel(const char *s, int *m)
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);
if(dest_string.str)
*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
* bailed out in the middle of some non INITIAL start condition due to yyparse() syntax errors */
<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 */
BEGIN(INITIAL); /* reset parser */
}
@ -179,7 +179,7 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
/* postfix multiplier */
{INT} {
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);
return B_NUM;
}
@ -189,35 +189,35 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
<index>{
{INT} {
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;
}
{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;
}
/* 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);
return yytext[0];
}
{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];
}
/* 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}) {
yylval.ptr.str=NULL;
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;
}
({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;
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;
}
@ -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}) {
yylval.ptr.str=NULL;
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;
}
} /* end <index> */
@ -233,7 +233,7 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
/* a comment, return as LINE token */
^\*.* {
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 */
BEGIN(INITIAL);
return B_LINE;
@ -241,7 +241,7 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
/* prefix multiplier */
{INT}/{MULTIP} {
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);
return B_NUM;
}
@ -249,17 +249,17 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
{INT} {
yylval.ptr.str=NULL;
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);
return B_NAME;
}
{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" */
{SP},{SP} {
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);
return ',';
}
@ -268,30 +268,30 @@ ID_EXT_PARENTHESIS ([-~"#+/=_a-zA-Z][-#!@\\/:.=_+a-zA-Z0-9]*\([-~"#!@\\/:.=_+a-z
{ID_NUM}|{ID_EXT_PARENTHESIS} {
yylval.ptr.str=NULL;/*19102004 */
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);
return B_NAME;
}
/* 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);
return yytext[0];
}
/* "*(aa,bb,cc)" or "*aaa" prefix multiplication*/
{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);
return '*';
}
/* "*16" postfix multiplication */
{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);
return '*';
}
{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);
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;}
break;
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]
* If a simulation raw file is lodaded unload from memory.
* 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
* ... ... ... ...
*/
if(!strcmp(argv[1], "table_read"))
else if(!strcmp(argv[1], "table_read"))
{
char f[PATH_MAX + 100];
if(sch_waves_loaded() >= 0) {
@ -3722,6 +3746,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
}
Tcl_ResetResult(interp);
}
/* test
* testmode */
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) {/*{{{*/
char arg_copy[256]; /* overflow safe */
@ -1176,7 +1190,10 @@ int check_loaded(const char *f, char *win_path)
ctx = save_xctx[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(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) {
dbg(1, "%s <--> %s\n", 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);
/* check if filename already in an open window/tab */
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 load_ascii_string(char **ptr, FILE *fd);
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 {}
K {}
V {}
S {}
E {}
N 600 -450 650 -450 {lab=B}
N 690 -690 690 -670 {lab=D}
N 510 -690 690 -690 {lab=D}
N 190 -690 310 -690 {lab=VCC}
N 190 -690 190 -670 {lab=VCC}
N 690 -500 690 -480 {lab=C}
N 690 -500 750 -500 {lab=C}
N 810 -500 840 -500 {lab=OUT}
N 840 -500 840 -440 {lab=OUT}
N 690 -410 690 -400 {lab=E}
N 780 -410 780 -400 {lab=E}
N 690 -410 780 -410 {lab=E}
N 510 -450 510 -400 {lab=#net1}
N 510 -570 510 -530 {lab=#net2}
N 420 -450 510 -450 {lab=#net1}
N 370 -690 510 -690 {lab=D}
N 690 -420 690 -410 {lab=E}
N 510 -470 510 -450 {lab=#net1}
N 190 -450 360 -450 {lab=IN}
N 190 -450 190 -420 {lab=IN}
N 840 -500 930 -500 {lab=OUT}
N 510 -450 540 -450 {lab=#net1}
N 510 -690 510 -630 {lab=D}
N 690 -550 690 -500 {lab=C}
B 2 770 -500 1570 -100 {flags=graph
y1=-50
y2=40
ypos1=0
ypos2=2
divy=5
subdivy=1
unity=1
x1=2
x2=10.0002
divx=5
subdivx=8
xlabmag=1.0
ylabmag=1.0
node="\\"out db20()\\""
color=4
dataset=-1
unitx=1
logx=1
logy=0
}
N 450 -510 500 -510 {lab=B}
N 540 -750 540 -730 {lab=D}
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 {code_shown.sym} 30 -310 0 0 {name=CONTROL place=end value=".ac oct 1000 100 10G
.control
@ -43,43 +65,47 @@ C {code_shown.sym} 30 -310 0 0 {name=CONTROL place=end value=".ac oct 1000 100 1
.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
+ 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)
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 )
"}
C {ind.sym} 340 -690 1 0 {name=l1 value=10uH}
C {vsource.sym} 190 -640 0 0 {name=v1 value=12}
C {gnd.sym} 190 -610 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 {res.sym} 510 -500 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 {res.sym} 510 -370 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 {res.sym} 840 -410 0 0 {name=R3 value=120k footprint=1206 device=resistor m=1}
C {gnd.sym} 840 -380 0 0 {name=l12 lab=0}
C {res.sym} 690 -370 0 0 {name=R4 value=100 footprint=1206 device=resistor m=1}
C {gnd.sym} 690 -340 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 {vsource.sym} 190 -390 0 0 {name=v2 value="dc 0 ac 1"}
C {gnd.sym} 190 -360 0 0 {name=l14 lab=0}
C {res.sym} 690 -640 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 {gnd.sym} 780 -340 0 0 {name=l15 lab=0}
C {gnd.sym} 510 -340 0 0 {name=l16 lab=0}
C {gnd.sym} 430 -630 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} 590 -690 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} 730 -410 0 0 {name=l21 sig_type=std_logic lab=E}
C {opin.sym} 930 -500 0 0 {name=p2 lab=OUT}
C {lab_wire.sym} 690 -510 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 {ammeter.sym} 570 -450 3 0 {name=v3 current=8.9002e-05}
C {ammeter.sym} 510 -600 0 0 {name=v4 current=0.001414}
C {ammeter.sym} 690 -580 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 -500 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} 210 -450 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} 750 -410 0 0 {name=p7 analysis=tran voltage=1.666}
C {spice_probe.sym} 470 -690 0 0 {name=p8 analysis=tran voltage=12}
C {ind.sym} 190 -750 1 0 {name=l1 value=10uH}
C {vsource.sym} 40 -700 0 0 {name=v1 value=12}
C {gnd.sym} 40 -670 0 0 {name=l11 lab=0}
C {capa.sym} 280 -720 0 1 {name=C4 m=1 value=100nF footprint=1206 device="ceramic capacitor"}
C {res.sym} 360 -560 0 0 {name=R1 value=6.8k footprint=1206 device=resistor m=1}
C {npn.sym} 520 -510 0 0 {name=Q2 model=Q2N2219A device=Q2N5179 footprint=SOT23 area=1}
C {res.sym} 360 -430 0 0 {name=R2 value=1.8k footprint=1206 device=resistor m=1}
C {capa.sym} 630 -560 1 1 {name=C5 m=1 value=1nF footprint=1206 device="ceramic capacitor"}
C {res.sym} 690 -470 0 0 {name=R3 value=120k footprint=1206 device=resistor m=1}
C {gnd.sym} 690 -440 0 0 {name=l12 lab=0}
C {res.sym} 540 -430 0 0 {name=R4 value=100 footprint=1206 device=resistor m=1}
C {gnd.sym} 540 -400 0 0 {name=l13 lab=0}
C {capa.sym} 240 -510 1 1 {name=C6 m=1 value=1nF footprint=1206 device="ceramic capacitor"}
C {vsource.sym} 40 -450 0 0 {name=v2 value="dc 0 ac 1"}
C {gnd.sym} 40 -420 0 0 {name=l14 lab=0}
C {res.sym} 540 -700 0 0 {name=R5 value=330 footprint=1206 device=resistor m=1}
C {capa.sym} 630 -430 0 1 {name=C7 m=1 value=100nF footprint=1206 device="ceramic capacitor"}
C {gnd.sym} 630 -400 0 0 {name=l15 lab=0}
C {gnd.sym} 360 -400 0 0 {name=l16 lab=0}
C {gnd.sym} 280 -690 0 0 {name=l17 lab=0}
C {lab_wire.sym} 120 -750 0 0 {name=l18 sig_type=std_logic lab=VCC}
C {lab_wire.sym} 440 -750 0 0 {name=l19 sig_type=std_logic lab=D}
C {lab_wire.sym} 480 -510 0 0 {name=l20 sig_type=std_logic lab=B}
C {lab_wire.sym} 580 -470 0 0 {name=l21 sig_type=std_logic lab=E}
C {opin.sym} 740 -560 0 0 {name=p2 lab=OUT}
C {lab_wire.sym} 540 -570 0 0 {name=l22 sig_type=std_logic lab=C}
C {lab_pin.sym} 40 -510 0 0 {name=l23 sig_type=std_logic lab=IN}
C {ammeter.sym} 420 -510 3 0 {name=v3 current=8.9002e-05}
C {ammeter.sym} 360 -660 0 0 {name=v4 current=0.001414}
C {ammeter.sym} 540 -640 0 0 {name=v5 current=0.01657}
C {spice_probe.sym} 710 -560 0 0 {name=p1 analysis=tran voltage=0.0000e+00}
C {spice_probe.sym} 560 -560 0 0 {name=p3 analysis=tran voltage=6.533}
C {spice_probe.sym} 40 -750 0 0 {name=p4 analysis=tran voltage=12}
C {spice_probe.sym} 60 -510 0 0 {name=p5 analysis=tran voltage=0.0000e+00}
C {spice_probe.sym} 480 -510 0 0 {name=p6 analysis=tran voltage=2.385}
C {spice_probe.sym} 600 -470 0 0 {name=p7 analysis=tran voltage=1.666}
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"
}