diff --git a/doc/xschem_man/developer_info.html b/doc/xschem_man/developer_info.html index 2c0cfea8..1b392f95 100644 --- a/doc/xschem_man/developer_info.html +++ b/doc/xschem_man/developer_info.html @@ -484,6 +484,8 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns" + +
  • abort_operation
  •     Resets UI state, unselect all and abort any pending operation 
  • add_symbol_pin
  • @@ -972,7 +974,7 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
        
  • resolved_net [net]
  •     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
    + Nets connected to I/O ports are mapped to upper level recursively
  • rotate
  •     Rotate selected objects around their centers 
  • save
  • @@ -1103,6 +1105,8 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
        
  • symbols [n]
  •     if 'n' given list symbol with name or number 'n', else 
        list all used symbols 
    +
  • tab_list
  • +   list all windows / tabs with window pathname and associated filename 
  • table_read [table_file]
  •     If a simulation raw file is lodaded unload from memory.
        else read a tabular file 'table_file'
    diff --git a/src/parselabel.l b/src/parselabel.l
    index d9a13eff..db582e04 100644
    --- a/src/parselabel.l
    +++ b/src/parselabel.l
    @@ -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 */
     ^.           {
    -                          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
     {
     {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  */
    @@ -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];
                             }
    diff --git a/src/scheduler.c b/src/scheduler.c
    index ec068652..d91c7efc 100644
    --- a/src/scheduler.c
    +++ b/src/scheduler.c
    @@ -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"))
    diff --git a/src/xinit.c b/src/xinit.c
    index 3ebda545..67d797e7 100644
    --- a/src/xinit.c
    +++ b/src/xinit.c
    @@ -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)) {
    diff --git a/src/xschem.h b/src/xschem.h
    index 866a5ed2..7b8ad4f7 100644
    --- a/src/xschem.h
    +++ b/src/xschem.h
    @@ -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);
    diff --git a/xschem_library/ngspice/amp_xschem.sch b/xschem_library/ngspice/amp_xschem.sch
    index 81c9f5f7..b0eb5529 100644
    --- a/xschem_library/ngspice/amp_xschem.sch
    +++ b/xschem_library/ngspice/amp_xschem.sch
    @@ -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"
    +}