diff --git a/src/callback.c b/src/callback.c index f7c59eb6..3b2f10f9 100644 --- a/src/callback.c +++ b/src/callback.c @@ -614,6 +614,7 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int /* Numerically set cursor position *** DO NOT PUT AN `else if` BELOW *** */ if(xctx->graph_flags & 4) { double logcursor, cursor; + int floaters = there_are_floaters(); if(r->flags & 4) { /* private_cursor */ const char *s = get_tok_value(r->prop_ptr, "cursor2_x", 0); if(s[0]) { @@ -638,7 +639,13 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int } event = 0; button = 0; /* avoid further processing ButtonPress that might set GRAPHPAN */ } - need_fullredraw = 1; + if(tclgetboolvar("live_cursor2_backannotate")) { + backannotate_at_cursor_b_pos(r, gr); + if(floaters) set_modify(-2); /* update floater caches to reflect actual backannotation */ + need_fullredraw = 1; + } else { + need_all_redraw = 1; + } } /* Numerically set hcursor position *** DO NOT PUT AN `else if` BELOW *** */ if(xctx->graph_flags & 128) { diff --git a/src/save.c b/src/save.c index 0b0bd551..83a6edcf 100644 --- a/src/save.c +++ b/src/save.c @@ -3991,6 +3991,7 @@ static void add_pinlayer_boxes(int *lastr, xRect **bb, bb[PINLAYER][i].dash = 0; bb[PINLAYER][i].ellipse_a = bb[PINLAYER][i].ellipse_b = -1; bb[PINLAYER][i].sel = 0; + bb[PINLAYER][i].fill = 1; /* add to symbol pins remaining attributes from schematic pins, except name= and lab= */ my_strdup(_ALLOC_ID_, &pin_label, get_sym_template(prop_ptr, "lab")); /* remove name=... and lab=... */ my_strcat(_ALLOC_ID_, &bb[PINLAYER][i].prop_ptr, pin_label); @@ -4243,615 +4244,616 @@ int load_sym_def(const char *name, FILE *embed_fd) /* read symbol from file */ while(1) { - if(endfile && embed_fd && level == 0) break; /* ']' line encountered --> exit */ - if(fscanf(lcc[level].fd," %c",tag)==EOF) { - if (level) { - dbg(1, "l_s_d(): fclose1, level=%d, fd=%p\n", level, lcc[level].fd); - if(generator) pclose(lcc[level].fd); - else fclose(lcc[level].fd); - my_free(_ALLOC_ID_, &lcc[level].prop_ptr); - my_free(_ALLOC_ID_, &lcc[level].symname); - --level; - continue; - } else break; - } - if(endfile) { /* endfile due to max hierarchy: throw away rest of file and do the above '--level' cleanups */ - read_record(tag[0], lcc[level].fd, 0); - continue; - } - incremented_level = 0; - switch(tag[0]) /* first character of line defines type of object */ - { - case 'v': - load_ascii_string(&aux_ptr, lcc[level].fd); - break; - case '#': - read_line(lcc[level].fd, 1); - break; - case 'F': /* extension for future symbol floater labels */ - read_line(lcc[level].fd, 1); - break; - case 'E': - load_ascii_string(&aux_ptr, lcc[level].fd); - break; - case 'V': - load_ascii_string(&aux_ptr, lcc[level].fd); - break; - case 'S': - load_ascii_string(&aux_ptr, lcc[level].fd); - break; - case 'K': /* 1.2 file format: symbol attributes for schematics placed as symbols */ - if (level==0) { - load_ascii_string(&symbol[symbols].prop_ptr, lcc[level].fd); - dbg(1, "load_sym_def: K prop=\n%s\n", symbol[symbols].prop_ptr); - if(!symbol[symbols].prop_ptr) break; - set_sym_flags(& symbol[symbols]); - } - else { - load_ascii_string(&aux_ptr, lcc[level].fd); - } - break; - case 'G': /* .sym files or pre-1.2 symbol attributes for schematics placed as symbols */ - if (level==0 && !symbol[symbols].prop_ptr) { - load_ascii_string(&symbol[symbols].prop_ptr, lcc[level].fd); - if(!symbol[symbols].prop_ptr) break; - set_sym_flags(& symbol[symbols]); - } - else { - load_ascii_string(&aux_ptr, lcc[level].fd); - } - break; - case 'L': - fscan_ret = fscanf(lcc[level].fd, "%d",&c); - if(fscan_ret != 1 || c < 0 || c>=cadlayers) { - fprintf(errfp,"l_s_d(): WARNING: wrong or missing line layer\n"); - read_line(lcc[level].fd, 0); - continue; - } - - if(fscanf(lcc[level].fd, "%lf %lf %lf %lf ",&tmpline.x1, &tmpline.y1, - &tmpline.x2, &tmpline.y2) < 4 ) { - fprintf(errfp,"l_s_d(): WARNING: missing fields for LINE object, ignoring\n"); - read_line(lcc[level].fd, 0); - continue; - } - tmpline.prop_ptr = NULL; - load_ascii_string(&tmpline.prop_ptr, lcc[level].fd); - - if( !strboolcmp(get_tok_value(tmpline.prop_ptr, "symbol_ignore", 0), "true")) { - my_free(_ALLOC_ID_, &tmpline.prop_ptr); - continue; - } - - i=lastl[c]; - my_realloc(_ALLOC_ID_, &ll[c],(i+1)*sizeof(xLine)); - - ll[c][i].x1 = tmpline.x1; - ll[c][i].y1 = tmpline.y1; - ll[c][i].x2 = tmpline.x2; - ll[c][i].y2 = tmpline.y2; - ll[c][i].prop_ptr = tmpline.prop_ptr; - - if (level>0) { - rot = lcc[level].rot; flip = lcc[level].flip; - ROTATION(rot, flip, 0.0, 0.0, ll[c][i].x1, ll[c][i].y1, rx1, ry1); - ROTATION(rot, flip, 0.0, 0.0, ll[c][i].x2, ll[c][i].y2, rx2, ry2); - ll[c][i].x1 = lcc[level].x0 + rx1; ll[c][i].y1 = lcc[level].y0 + ry1; - ll[c][i].x2 = lcc[level].x0 + rx2; ll[c][i].y2 = lcc[level].y0 + ry2; - } - ORDER(ll[c][i].x1, ll[c][i].y1, ll[c][i].x2, ll[c][i].y2); - dbg(2, "l_s_d(): loaded line: ptr=%lx\n", (unsigned long)ll[c]); - if(!strboolcmp(get_tok_value(ll[c][i].prop_ptr,"bus", 0), "true") ) - ll[c][i].bus = 1; - else - ll[c][i].bus = 0; - attr = get_tok_value(ll[c][i].prop_ptr,"dash", 0); - if( strcmp(attr, "") ) { - int d = atoi(attr); - ll[c][i].dash = (short)(d >= 0 ? d : 0); - } else - ll[c][i].dash = 0; - ll[c][i].sel = 0; - lastl[c]++; - break; - case 'P': - if(fscanf(lcc[level].fd, "%d %d",&c, &poly_points) < 2 ) { - fprintf(errfp,"l_s_d(): WARNING: missing fields for POLYGON object, ignoring\n"); - read_line(lcc[level].fd, 0); - continue; - } - if(c < 0 || c>=cadlayers) { - fprintf(errfp,"l_s_d(): WARNING: wrong polygon layer\n"); - read_line(lcc[level].fd, 0); - continue; - } - - tmppoly.x = my_calloc(_ALLOC_ID_, poly_points, sizeof(double)); - tmppoly.y = my_calloc(_ALLOC_ID_, poly_points, sizeof(double)); - tmppoly.selected_point = my_calloc(_ALLOC_ID_, poly_points, sizeof(unsigned short)); - tmppoly.points = poly_points; - for(k=0;k0) { - rot = lcc[level].rot; flip = lcc[level].flip; - ROTATION(rot, flip, 0.0, 0.0, tmppoly.x[k], tmppoly.y[k], rx1, ry1); - tmppoly.x[k] = lcc[level].x0 + rx1; tmppoly.y[k] = lcc[level].y0 + ry1; - } - } - - tmppoly.prop_ptr=NULL; - load_ascii_string( &tmppoly.prop_ptr, lcc[level].fd); - - if( !strboolcmp(get_tok_value(tmppoly.prop_ptr, "symbol_ignore", 0), "true")) { - my_free(_ALLOC_ID_, &tmppoly.prop_ptr); - my_free(_ALLOC_ID_, &tmppoly.x); - my_free(_ALLOC_ID_, &tmppoly.y); - my_free(_ALLOC_ID_, &tmppoly.selected_point); - continue; - } - - i=lastp[c]; - my_realloc(_ALLOC_ID_, &pp[c],(i+1)*sizeof(xPoly)); - - pp[c][i].x = tmppoly.x; - pp[c][i].y = tmppoly.y; - pp[c][i].selected_point = tmppoly.selected_point; - pp[c][i].prop_ptr = tmppoly.prop_ptr; - pp[c][i].points = poly_points; - - fill_ptr = get_tok_value(pp[c][i].prop_ptr,"fill",0); - if( !strcmp(fill_ptr, "full") ) - pp[c][i].fill =3; /* bit 1: solid fill (not stippled) */ - else if( !strboolcmp(fill_ptr, "true") ) - pp[c][i].fill =1; - else - pp[c][i].fill =0; - - attr = get_tok_value(pp[c][i].prop_ptr,"dash", 0); - if( strcmp(attr, "") ) { - int d = atoi(attr); - pp[c][i].dash = (short)(d >= 0 ? d : 0); - } else - pp[c][i].dash = 0; - - pp[c][i].sel = 0; - - dbg(2, "l_s_d(): loaded polygon: ptr=%lx\n", (unsigned long)pp[c]); - lastp[c]++; - break; - case 'A': - fscan_ret = fscanf(lcc[level].fd, "%d",&c); - if(fscan_ret != 1 || c < 0 || c>=cadlayers) { - fprintf(errfp,"l_s_d(): Wrong or missing arc layer\n"); - read_line(lcc[level].fd, 0); - continue; - } - - if( fscanf(lcc[level].fd, "%lf %lf %lf %lf %lf ",&tmparc.x, &tmparc.y, - &tmparc.r, &tmparc.a, &tmparc.b) < 5 ) { - fprintf(errfp,"l_s_d(): WARNING: missing fields for ARC object, ignoring\n"); - read_line(lcc[level].fd, 0); - continue; - } - tmparc.prop_ptr = NULL; - load_ascii_string( &tmparc.prop_ptr, lcc[level].fd); - - if( !strboolcmp(get_tok_value(tmparc.prop_ptr, "symbol_ignore", 0), "true")) { - my_free(_ALLOC_ID_, &tmparc.prop_ptr); - continue; - } - - i=lasta[c]; - my_realloc(_ALLOC_ID_, &aa[c],(i+1)*sizeof(xArc)); - - aa[c][i].x = tmparc.x; - aa[c][i].y = tmparc.y; - aa[c][i].r = tmparc.r; - aa[c][i].a = tmparc.a; - aa[c][i].b = tmparc.b; - aa[c][i].prop_ptr = tmparc.prop_ptr; - - if (level>0) { - rot = lcc[level].rot; flip = lcc[level].flip; - if (flip) { - angle = 270. * rot + 180. - aa[c][i].b - aa[c][i].a; - } - else { - angle = aa[c][i].a + rot * 270.; - } - angle = fmod(angle, 360.); - if (angle < 0.) angle += 360.; - ROTATION(rot, flip, 0.0, 0.0, aa[c][i].x, aa[c][i].y, rx1, ry1); - aa[c][i].x = lcc[level].x0 + rx1; aa[c][i].y = lcc[level].y0 + ry1; - aa[c][i].a = angle; - } - fill_ptr = get_tok_value(aa[c][i].prop_ptr,"fill",0); - if( !strcmp(fill_ptr, "full") ) - aa[c][i].fill =3; /* bit 1: solid fill (not stiaaled) */ - else if( !strboolcmp(fill_ptr, "true") ) - aa[c][i].fill =1; - else - aa[c][i].fill =0; - attr = get_tok_value(aa[c][i].prop_ptr,"dash", 0); - if( strcmp(attr, "") ) { - int d = atoi(attr); - aa[c][i].dash = (short)(d >= 0 ? d : 0); - } else - aa[c][i].dash = 0; - aa[c][i].sel = 0; - dbg(2, "l_s_d(): loaded arc: ptr=%lx\n", (unsigned long)aa[c]); - lasta[c]++; - break; - case 'B': - fscan_ret = fscanf(lcc[level].fd, "%d",&c); - if(fscan_ret != 1 || c < 0 || c>=cadlayers) { - fprintf(errfp,"l_s_d(): WARNING: wrong or missing box layer\n"); - read_line(lcc[level].fd, 0); - continue; - } - - if(fscanf(lcc[level].fd, "%lf %lf %lf %lf ",&tmprect.x1, &tmprect.y1, - &tmprect.x2, &tmprect.y2) < 4 ) { - fprintf(errfp,"l_s_d(): WARNING: missing fields for LINE object, ignoring\n"); - read_line(lcc[level].fd, 0); - continue; - } - tmprect.prop_ptr = NULL; - load_ascii_string(&tmprect.prop_ptr, lcc[level].fd); - - if( !strboolcmp(get_tok_value(tmprect.prop_ptr, "symbol_ignore", 0), "true")) { - my_free(_ALLOC_ID_, &tmprect.prop_ptr); - continue; - } - - if (level>0 && c == PINLAYER) c = 7; /* Don't care about pins inside SYM: set on different layer */ - i=lastr[c]; - my_realloc(_ALLOC_ID_, &bb[c],(i+1)*sizeof(xRect)); - - bb[c][i].x1 = tmprect.x1; - bb[c][i].y1 = tmprect.y1; - bb[c][i].x2 = tmprect.x2; - bb[c][i].y2 = tmprect.y2; - bb[c][i].prop_ptr = tmprect.prop_ptr; - - if (level>0) { - rot = lcc[level].rot; flip = lcc[level].flip; - ROTATION(rot, flip, 0.0, 0.0, bb[c][i].x1, bb[c][i].y1, rx1, ry1); - ROTATION(rot, flip, 0.0, 0.0, bb[c][i].x2, bb[c][i].y2, rx2, ry2); - bb[c][i].x1 = lcc[level].x0 + rx1; bb[c][i].y1 = lcc[level].y0 + ry1; - bb[c][i].x2 = lcc[level].x0 + rx2; bb[c][i].y2 = lcc[level].y0 + ry2; - } - RECTORDER(bb[c][i].x1, bb[c][i].y1, bb[c][i].x2, bb[c][i].y2); - /* don't load graphs of LCC schematic instances */ - if(strstr(get_tok_value(bb[c][i].prop_ptr, "flags", 0), "graph")) { - my_free(_ALLOC_ID_, &bb[c][i].prop_ptr); - continue; - } - dbg(2, "l_s_d(): loaded rect: ptr=%lx\n", (unsigned long)bb[c]); - fill_ptr = get_tok_value(bb[c][i].prop_ptr,"fill",0); - if( !strcmp(fill_ptr, "full") ) - bb[c][i].fill =3; - else if( !strboolcmp(fill_ptr, "false") ) - bb[c][i].fill =0; - else - bb[c][i].fill =1; - attr = get_tok_value(bb[c][i].prop_ptr,"dash", 0); - if( strcmp(attr, "") ) { - int d = atoi(attr); - bb[c][i].dash = (short)(d >= 0 ? d : 0); - } else bb[c][i].dash = 0; - - attr = get_tok_value(bb[c][i].prop_ptr,"ellipse", 0); - if( strcmp(attr, "") ) { - int a; - int b; - if(sscanf(attr, "%d%*[ ,]%d", &a, &b) != 2) { - a = 0; - b = 360; - } - bb[c][i].ellipse_a = a; - bb[c][i].ellipse_b = b; - } else { - bb[c][i].ellipse_a = -1; - bb[c][i].ellipse_b = -1; - } - - bb[c][i].sel = 0; - bb[c][i].extraptr = NULL; - set_rect_flags(&bb[c][i]); - lastr[c]++; - break; - case 'T': - tmptext.floater_instname = tmptext.prop_ptr = tmptext.txt_ptr = tmptext.font = tmptext.floater_ptr = NULL; - load_ascii_string(&tmptext.txt_ptr, lcc[level].fd); - if(fscanf(lcc[level].fd, "%lf %lf %hd %hd %lf %lf ",&tmptext.x0, &tmptext.y0, &tmptext.rot, - &tmptext.flip, &tmptext.xscale, &tmptext.yscale) < 6 ) { - fprintf(errfp,"l_s_d(): WARNING: missing fields for Text object, ignoring\n"); - read_line(lcc[level].fd, 0); - continue; - } - load_ascii_string(&tmptext.prop_ptr, lcc[level].fd); - - is_floater = 0; - get_tok_value(tmptext.prop_ptr, "name", 2); - if(xctx->tok_size) is_floater = 1; /* get rid of floater texts in LCC symbols */ - else { - get_tok_value(tmptext.prop_ptr, "floater", 2); - if(xctx->tok_size) is_floater = 1; /* get rid of floater texts in LCC symbols */ - } - if( !strboolcmp(get_tok_value(tmptext.prop_ptr, "symbol_ignore", 0), "true") || is_floater) { - my_free(_ALLOC_ID_, &tmptext.prop_ptr); - my_free(_ALLOC_ID_, &tmptext.txt_ptr); - continue; - } - i=lastt; - my_realloc(_ALLOC_ID_, &tt,(i+1)*sizeof(xText)); - tt[i].font=NULL; - tt[i].txt_ptr = tmptext.txt_ptr; - tt[i].x0 = tmptext.x0; - tt[i].y0 = tmptext.y0; - tt[i].rot = tmptext.rot; - tt[i].flip = tmptext.flip; - tt[i].xscale = tmptext.xscale; - tt[i].yscale = tmptext.yscale; - tt[i].prop_ptr = tmptext.prop_ptr; - tt[i].floater_ptr = tmptext.floater_ptr; - tt[i].floater_instname = tmptext.floater_instname; - dbg(1, "l_s_d(): txt1: level=%d tt[i].txt_ptr=%s, i=%d\n", level, tt[i].txt_ptr, i); - if (level>0) { - const char* tmp = translate2(lcc, level, tt[i].txt_ptr); - dbg(1, "l_s_d(): txt2: tt[i].txt_ptr=%s, i=%d\n", tt[i].txt_ptr, i); - rot = lcc[level].rot; flip = lcc[level].flip; - my_strdup2(_ALLOC_ID_, &tt[i].txt_ptr, tmp); - dbg(1, "l_s_d(): txt3: tt[i].txt_ptr=%s, i=%d\n", tt[i].txt_ptr, i); - /* allow annotation inside LCC instances. */ - if(!strcmp(tt[i].txt_ptr, "@spice_get_voltage")) { - /* prop_ptr is the attribute string of last loaded LCC component */ - const char *lab; - size_t new_size = 0; - char *path = NULL; - if(level > 1) { /* add parent LCC instance names (X1, Xinv etc) */ - int i; - for(i = 1; i exit */ + if(fscanf(lcc[level].fd," %c",tag)==EOF) { + if (level) { + dbg(1, "l_s_d(): fclose1, level=%d, fd=%p\n", level, lcc[level].fd); + if(generator) pclose(lcc[level].fd); + else fclose(lcc[level].fd); + my_free(_ALLOC_ID_, &lcc[level].prop_ptr); + my_free(_ALLOC_ID_, &lcc[level].symname); + --level; + continue; + } else break; + } + if(endfile) { /* endfile due to max hierarchy: throw away rest of file and do the above '--level' cleanups */ + read_record(tag[0], lcc[level].fd, 0); + continue; + } + incremented_level = 0; + switch(tag[0]) /* first character of line defines type of object */ + { + case 'v': + load_ascii_string(&aux_ptr, lcc[level].fd); + break; + case '#': + read_line(lcc[level].fd, 1); + break; + case 'F': /* extension for future symbol floater labels */ + read_line(lcc[level].fd, 1); + break; + case 'E': + load_ascii_string(&aux_ptr, lcc[level].fd); + break; + case 'V': + load_ascii_string(&aux_ptr, lcc[level].fd); + break; + case 'S': + load_ascii_string(&aux_ptr, lcc[level].fd); + break; + case 'K': /* 1.2 file format: symbol attributes for schematics placed as symbols */ + if (level==0) { + load_ascii_string(&symbol[symbols].prop_ptr, lcc[level].fd); + dbg(1, "load_sym_def: K prop=\n%s\n", symbol[symbols].prop_ptr); + if(!symbol[symbols].prop_ptr) break; + set_sym_flags(& symbol[symbols]); + } + else { + load_ascii_string(&aux_ptr, lcc[level].fd); + } + break; + case 'G': /* .sym files or pre-1.2 symbol attributes for schematics placed as symbols */ + if (level==0 && !symbol[symbols].prop_ptr) { + load_ascii_string(&symbol[symbols].prop_ptr, lcc[level].fd); + if(!symbol[symbols].prop_ptr) break; + set_sym_flags(& symbol[symbols]); + } + else { + load_ascii_string(&aux_ptr, lcc[level].fd); + } + break; + case 'L': + fscan_ret = fscanf(lcc[level].fd, "%d",&c); + if(fscan_ret != 1 || c < 0 || c>=cadlayers) { + fprintf(errfp,"l_s_d(): WARNING: wrong or missing line layer\n"); + read_line(lcc[level].fd, 0); + continue; + } + + if(fscanf(lcc[level].fd, "%lf %lf %lf %lf ",&tmpline.x1, &tmpline.y1, + &tmpline.x2, &tmpline.y2) < 4 ) { + fprintf(errfp,"l_s_d(): WARNING: missing fields for LINE object, ignoring\n"); + read_line(lcc[level].fd, 0); + continue; + } + tmpline.prop_ptr = NULL; + load_ascii_string(&tmpline.prop_ptr, lcc[level].fd); + + if( !strboolcmp(get_tok_value(tmpline.prop_ptr, "symbol_ignore", 0), "true")) { + my_free(_ALLOC_ID_, &tmpline.prop_ptr); + continue; + } + + i=lastl[c]; + my_realloc(_ALLOC_ID_, &ll[c],(i+1)*sizeof(xLine)); + + ll[c][i].x1 = tmpline.x1; + ll[c][i].y1 = tmpline.y1; + ll[c][i].x2 = tmpline.x2; + ll[c][i].y2 = tmpline.y2; + ll[c][i].prop_ptr = tmpline.prop_ptr; + + if (level>0) { + rot = lcc[level].rot; flip = lcc[level].flip; + ROTATION(rot, flip, 0.0, 0.0, ll[c][i].x1, ll[c][i].y1, rx1, ry1); + ROTATION(rot, flip, 0.0, 0.0, ll[c][i].x2, ll[c][i].y2, rx2, ry2); + ll[c][i].x1 = lcc[level].x0 + rx1; ll[c][i].y1 = lcc[level].y0 + ry1; + ll[c][i].x2 = lcc[level].x0 + rx2; ll[c][i].y2 = lcc[level].y0 + ry2; + } + ORDER(ll[c][i].x1, ll[c][i].y1, ll[c][i].x2, ll[c][i].y2); + dbg(2, "l_s_d(): loaded line: ptr=%lx\n", (unsigned long)ll[c]); + if(!strboolcmp(get_tok_value(ll[c][i].prop_ptr,"bus", 0), "true") ) + ll[c][i].bus = 1; + else + ll[c][i].bus = 0; + attr = get_tok_value(ll[c][i].prop_ptr,"dash", 0); + if( strcmp(attr, "") ) { + int d = atoi(attr); + ll[c][i].dash = (short)(d >= 0 ? d : 0); + } else + ll[c][i].dash = 0; + ll[c][i].sel = 0; + lastl[c]++; + break; + case 'P': + if(fscanf(lcc[level].fd, "%d %d",&c, &poly_points) < 2 ) { + fprintf(errfp,"l_s_d(): WARNING: missing fields for POLYGON object, ignoring\n"); + read_line(lcc[level].fd, 0); + continue; + } + if(c < 0 || c>=cadlayers) { + fprintf(errfp,"l_s_d(): WARNING: wrong polygon layer\n"); + read_line(lcc[level].fd, 0); + continue; + } + + tmppoly.x = my_calloc(_ALLOC_ID_, poly_points, sizeof(double)); + tmppoly.y = my_calloc(_ALLOC_ID_, poly_points, sizeof(double)); + tmppoly.selected_point = my_calloc(_ALLOC_ID_, poly_points, sizeof(unsigned short)); + tmppoly.points = poly_points; + for(k=0;k0) { + rot = lcc[level].rot; flip = lcc[level].flip; + ROTATION(rot, flip, 0.0, 0.0, tmppoly.x[k], tmppoly.y[k], rx1, ry1); + tmppoly.x[k] = lcc[level].x0 + rx1; tmppoly.y[k] = lcc[level].y0 + ry1; + } + } + + tmppoly.prop_ptr=NULL; + load_ascii_string( &tmppoly.prop_ptr, lcc[level].fd); + + if( !strboolcmp(get_tok_value(tmppoly.prop_ptr, "symbol_ignore", 0), "true")) { + my_free(_ALLOC_ID_, &tmppoly.prop_ptr); + my_free(_ALLOC_ID_, &tmppoly.x); + my_free(_ALLOC_ID_, &tmppoly.y); + my_free(_ALLOC_ID_, &tmppoly.selected_point); + continue; + } + + i=lastp[c]; + my_realloc(_ALLOC_ID_, &pp[c],(i+1)*sizeof(xPoly)); + + pp[c][i].x = tmppoly.x; + pp[c][i].y = tmppoly.y; + pp[c][i].selected_point = tmppoly.selected_point; + pp[c][i].prop_ptr = tmppoly.prop_ptr; + pp[c][i].points = poly_points; + + fill_ptr = get_tok_value(pp[c][i].prop_ptr,"fill",0); + if( !strcmp(fill_ptr, "full") ) + pp[c][i].fill =3; /* bit 1: solid fill (not stippled) */ + else if( !strboolcmp(fill_ptr, "true") ) + pp[c][i].fill =1; + else + pp[c][i].fill =0; + + attr = get_tok_value(pp[c][i].prop_ptr,"dash", 0); + if( strcmp(attr, "") ) { + int d = atoi(attr); + pp[c][i].dash = (short)(d >= 0 ? d : 0); + } else + pp[c][i].dash = 0; + + pp[c][i].sel = 0; + + dbg(2, "l_s_d(): loaded polygon: ptr=%lx\n", (unsigned long)pp[c]); + lastp[c]++; + break; + case 'A': + fscan_ret = fscanf(lcc[level].fd, "%d",&c); + if(fscan_ret != 1 || c < 0 || c>=cadlayers) { + fprintf(errfp,"l_s_d(): Wrong or missing arc layer\n"); + read_line(lcc[level].fd, 0); + continue; + } + + if( fscanf(lcc[level].fd, "%lf %lf %lf %lf %lf ",&tmparc.x, &tmparc.y, + &tmparc.r, &tmparc.a, &tmparc.b) < 5 ) { + fprintf(errfp,"l_s_d(): WARNING: missing fields for ARC object, ignoring\n"); + read_line(lcc[level].fd, 0); + continue; + } + tmparc.prop_ptr = NULL; + load_ascii_string( &tmparc.prop_ptr, lcc[level].fd); + + if( !strboolcmp(get_tok_value(tmparc.prop_ptr, "symbol_ignore", 0), "true")) { + my_free(_ALLOC_ID_, &tmparc.prop_ptr); + continue; + } + + i=lasta[c]; + my_realloc(_ALLOC_ID_, &aa[c],(i+1)*sizeof(xArc)); + + aa[c][i].x = tmparc.x; + aa[c][i].y = tmparc.y; + aa[c][i].r = tmparc.r; + aa[c][i].a = tmparc.a; + aa[c][i].b = tmparc.b; + aa[c][i].prop_ptr = tmparc.prop_ptr; + + if (level>0) { + rot = lcc[level].rot; flip = lcc[level].flip; + if (flip) { + angle = 270. * rot + 180. - aa[c][i].b - aa[c][i].a; + } + else { + angle = aa[c][i].a + rot * 270.; + } + angle = fmod(angle, 360.); + if (angle < 0.) angle += 360.; + ROTATION(rot, flip, 0.0, 0.0, aa[c][i].x, aa[c][i].y, rx1, ry1); + aa[c][i].x = lcc[level].x0 + rx1; aa[c][i].y = lcc[level].y0 + ry1; + aa[c][i].a = angle; + } + fill_ptr = get_tok_value(aa[c][i].prop_ptr,"fill",0); + if( !strcmp(fill_ptr, "full") ) + aa[c][i].fill =3; /* bit 1: solid fill (not stiaaled) */ + else if( !strboolcmp(fill_ptr, "true") ) + aa[c][i].fill =1; + else + aa[c][i].fill =0; + attr = get_tok_value(aa[c][i].prop_ptr,"dash", 0); + if( strcmp(attr, "") ) { + int d = atoi(attr); + aa[c][i].dash = (short)(d >= 0 ? d : 0); + } else + aa[c][i].dash = 0; + aa[c][i].sel = 0; + dbg(2, "l_s_d(): loaded arc: ptr=%lx\n", (unsigned long)aa[c]); + lasta[c]++; + break; + case 'B': + fscan_ret = fscanf(lcc[level].fd, "%d",&c); + if(fscan_ret != 1 || c < 0 || c>=cadlayers) { + fprintf(errfp,"l_s_d(): WARNING: wrong or missing box layer\n"); + read_line(lcc[level].fd, 0); + continue; + } + + if(fscanf(lcc[level].fd, "%lf %lf %lf %lf ",&tmprect.x1, &tmprect.y1, + &tmprect.x2, &tmprect.y2) < 4 ) { + fprintf(errfp,"l_s_d(): WARNING: missing fields for LINE object, ignoring\n"); + read_line(lcc[level].fd, 0); + continue; + } + tmprect.prop_ptr = NULL; + load_ascii_string(&tmprect.prop_ptr, lcc[level].fd); + + if( !strboolcmp(get_tok_value(tmprect.prop_ptr, "symbol_ignore", 0), "true")) { + my_free(_ALLOC_ID_, &tmprect.prop_ptr); + continue; + } + + if (level>0 && c == PINLAYER) c = 7; /* Don't care about pins inside SYM: set on different layer */ + i=lastr[c]; + my_realloc(_ALLOC_ID_, &bb[c],(i+1)*sizeof(xRect)); + + bb[c][i].x1 = tmprect.x1; + bb[c][i].y1 = tmprect.y1; + bb[c][i].x2 = tmprect.x2; + bb[c][i].y2 = tmprect.y2; + bb[c][i].prop_ptr = tmprect.prop_ptr; + + if (level>0) { + rot = lcc[level].rot; flip = lcc[level].flip; + ROTATION(rot, flip, 0.0, 0.0, bb[c][i].x1, bb[c][i].y1, rx1, ry1); + ROTATION(rot, flip, 0.0, 0.0, bb[c][i].x2, bb[c][i].y2, rx2, ry2); + bb[c][i].x1 = lcc[level].x0 + rx1; bb[c][i].y1 = lcc[level].y0 + ry1; + bb[c][i].x2 = lcc[level].x0 + rx2; bb[c][i].y2 = lcc[level].y0 + ry2; + } + RECTORDER(bb[c][i].x1, bb[c][i].y1, bb[c][i].x2, bb[c][i].y2); + /* don't load graphs of LCC schematic instances */ + if(strstr(get_tok_value(bb[c][i].prop_ptr, "flags", 0), "graph")) { + my_free(_ALLOC_ID_, &bb[c][i].prop_ptr); + continue; + } + dbg(2, "l_s_d(): loaded rect: ptr=%lx\n", (unsigned long)bb[c]); + fill_ptr = get_tok_value(bb[c][i].prop_ptr,"fill",0); + if( !strcmp(fill_ptr, "full") ) + bb[c][i].fill =3; + else if( !strboolcmp(fill_ptr, "false") ) + bb[c][i].fill =0; + else + bb[c][i].fill =1; + attr = get_tok_value(bb[c][i].prop_ptr,"dash", 0); + if( strcmp(attr, "") ) { + int d = atoi(attr); + bb[c][i].dash = (short)(d >= 0 ? d : 0); + } else bb[c][i].dash = 0; + + attr = get_tok_value(bb[c][i].prop_ptr,"ellipse", 0); + if( strcmp(attr, "") ) { + int a; + int b; + if(sscanf(attr, "%d%*[ ,]%d", &a, &b) != 2) { + a = 0; + b = 360; + } + bb[c][i].ellipse_a = a; + bb[c][i].ellipse_b = b; + } else { + bb[c][i].ellipse_a = -1; + bb[c][i].ellipse_b = -1; + } + + bb[c][i].sel = 0; + bb[c][i].extraptr = NULL; + set_rect_flags(&bb[c][i]); + lastr[c]++; + break; + case 'T': + tmptext.floater_instname = tmptext.prop_ptr = tmptext.txt_ptr = tmptext.font = tmptext.floater_ptr = NULL; + load_ascii_string(&tmptext.txt_ptr, lcc[level].fd); + if(fscanf(lcc[level].fd, "%lf %lf %hd %hd %lf %lf ",&tmptext.x0, &tmptext.y0, &tmptext.rot, + &tmptext.flip, &tmptext.xscale, &tmptext.yscale) < 6 ) { + fprintf(errfp,"l_s_d(): WARNING: missing fields for Text object, ignoring\n"); + read_line(lcc[level].fd, 0); + continue; + } + load_ascii_string(&tmptext.prop_ptr, lcc[level].fd); + + is_floater = 0; + get_tok_value(tmptext.prop_ptr, "name", 2); + if(xctx->tok_size) is_floater = 1; /* get rid of floater texts in LCC symbols */ + else { + get_tok_value(tmptext.prop_ptr, "floater", 2); + if(xctx->tok_size) is_floater = 1; /* get rid of floater texts in LCC symbols */ + } + if( !strboolcmp(get_tok_value(tmptext.prop_ptr, "symbol_ignore", 0), "true") || is_floater) { + my_free(_ALLOC_ID_, &tmptext.prop_ptr); + my_free(_ALLOC_ID_, &tmptext.txt_ptr); + continue; + } + i=lastt; + my_realloc(_ALLOC_ID_, &tt,(i+1)*sizeof(xText)); + tt[i].font=NULL; + tt[i].txt_ptr = tmptext.txt_ptr; + tt[i].x0 = tmptext.x0; + tt[i].y0 = tmptext.y0; + tt[i].rot = tmptext.rot; + tt[i].flip = tmptext.flip; + tt[i].xscale = tmptext.xscale; + tt[i].yscale = tmptext.yscale; + tt[i].prop_ptr = tmptext.prop_ptr; + tt[i].floater_ptr = tmptext.floater_ptr; + tt[i].floater_instname = tmptext.floater_instname; + dbg(1, "l_s_d(): txt1: level=%d tt[i].txt_ptr=%s, i=%d\n", level, tt[i].txt_ptr, i); + if (level>0) { + const char* tmp = translate2(lcc, level, tt[i].txt_ptr); + dbg(1, "l_s_d(): txt2: tt[i].txt_ptr=%s, i=%d\n", tt[i].txt_ptr, i); + rot = lcc[level].rot; flip = lcc[level].flip; + my_strdup2(_ALLOC_ID_, &tt[i].txt_ptr, tmp); + dbg(1, "l_s_d(): txt3: tt[i].txt_ptr=%s, i=%d\n", tt[i].txt_ptr, i); + /* allow annotation inside LCC instances. */ + if(!strcmp(tt[i].txt_ptr, "@spice_get_voltage")) { + /* prop_ptr is the attribute string of last loaded LCC component */ + const char *lab; + size_t new_size = 0; + char *path = NULL; + if(level > 1) { /* add parent LCC instance names (X1, Xinv etc) */ + int i; + for(i = 1; i ) */ + my_realloc(_ALLOC_ID_, &tt[i].txt_ptr, new_size); + my_snprintf(tt[i].txt_ptr, new_size, "@spice_get_voltage(%s%s)", path ? path : "", lab); + my_free(_ALLOC_ID_, &path); + dbg(1, " --> tt[i].txt_ptr=%s\n", tt[i].txt_ptr); + } + if(!strcmp(tt[i].txt_ptr, "@spice_get_current")) { + /* prop_ptr is the attribute string of last loaded LCC component */ + const char *dev; + size_t new_size = 0; + char *path = NULL; + if(level > 1) { /* add parent LCC instance names (X1, Xinv etc) */ + int i; + for(i = 1; i ) */ + my_realloc(_ALLOC_ID_, &tt[i].txt_ptr, new_size); + my_snprintf(tt[i].txt_ptr, new_size, "@spice_get_current(%s%s)", path ? path : "", dev); + my_free(_ALLOC_ID_, &path); + dbg(1, " --> tt[i].txt_ptr=%s\n", tt[i].txt_ptr); + } + ROTATION(rot, flip, 0.0, 0.0, tt[i].x0, tt[i].y0, rx1, ry1); + tt[i].x0 = lcc[level].x0 + rx1; tt[i].y0 = lcc[level].y0 + ry1; + tt[i].rot = (tt[i].rot + ((lcc[level].flip && (tt[i].rot & 1)) ? + lcc[level].rot + 2 : lcc[level].rot)) & 0x3; + tt[i].flip = lcc[level].flip ^ tt[i].flip; + } + if(level > 0 && symtype && !strcmp(symtype, "label")) { + char lay[30]; + my_snprintf(lay, S(lay), " layer=%d", WIRELAYER); + my_strcat(_ALLOC_ID_, &tt[i].prop_ptr, lay); + } + dbg(1, "l_s_d(): loaded text : t=%s p=%s\n", tt[i].txt_ptr, tt[i].prop_ptr ? tt[i].prop_ptr : ""); + set_text_flags(&tt[i]); + ++lastt; + break; + case 'N': /* store wires as lines on layer WIRELAYER. */ + + tmpline.prop_ptr = NULL; + if(fscanf(lcc[level].fd, "%lf %lf %lf %lf ",&tmpline.x1, &tmpline.y1, + &tmpline.x2, &tmpline.y2) < 4 ) { + fprintf(errfp,"l_s_d(): WARNING: missing fields for LINE object, ignoring\n"); + read_line(lcc[level].fd, 0); + continue; + } + load_ascii_string(&tmpline.prop_ptr, lcc[level].fd); + + if( !strboolcmp(get_tok_value(tmpline.prop_ptr, "symbol_ignore", 0), "true")) { + my_free(_ALLOC_ID_, &tmpline.prop_ptr); + continue; + } + + i = lastl[WIRELAYER]; + my_realloc(_ALLOC_ID_, &ll[WIRELAYER],(i+1)*sizeof(xLine)); + ll[WIRELAYER][i].x1 = tmpline.x1; + ll[WIRELAYER][i].y1 = tmpline.y1; + ll[WIRELAYER][i].x2 = tmpline.x2; + ll[WIRELAYER][i].y2 = tmpline.y2; + ll[WIRELAYER][i].prop_ptr = tmpline.prop_ptr; + + if (level>0) { + rot = lcc[level].rot; flip = lcc[level].flip; + ROTATION(rot, flip, 0.0, 0.0, ll[WIRELAYER][i].x1, ll[WIRELAYER][i].y1, rx1, ry1); + ROTATION(rot, flip, 0.0, 0.0, ll[WIRELAYER][i].x2, ll[WIRELAYER][i].y2, rx2, ry2); + ll[WIRELAYER][i].x1 = lcc[level].x0 + rx1; ll[WIRELAYER][i].y1 = lcc[level].y0 + ry1; + ll[WIRELAYER][i].x2 = lcc[level].x0 + rx2; ll[WIRELAYER][i].y2 = lcc[level].y0 + ry2; + } + ORDER(ll[WIRELAYER][i].x1, ll[WIRELAYER][i].y1, ll[WIRELAYER][i].x2, ll[WIRELAYER][i].y2); + dbg(2, "l_s_d(): loaded line: ptr=%lx\n", (unsigned long)ll[WIRELAYER]); + ll[WIRELAYER][i].dash = 0; + if(!strboolcmp(get_tok_value(ll[WIRELAYER][i].prop_ptr, "bus", 0), "true")) + ll[WIRELAYER][i].bus = 1; + else + ll[WIRELAYER][i].bus = 0; + ll[WIRELAYER][i].sel = 0; + lastl[WIRELAYER]++; + break; + case 'C': /* symbol is LCC: contains components */ + load_ascii_string(&symname, lcc[level].fd); + if (fscanf(lcc[level].fd, "%lf %lf %hd %hd", &inst_x0, &inst_y0, &inst_rot, &inst_flip) < 4) { + fprintf(errfp, "l_s_d(): WARNING: missing fields for COMPONENT object, ignoring\n"); + read_line(lcc[level].fd, 0); + continue; + } + load_ascii_string(&prop_ptr, lcc[level].fd); + dbg(1, "l_s_d() component: level=%d, sym=%s, prop_ptr = %s\n", level, symname, prop_ptr); + if(level + 1 >=CADMAXHIER) { + fprintf(errfp, "l_s_d(): Symbol recursively instantiating symbol: max depth reached, skipping\n"); + if(has_x) tcleval("alert_ {Symbol recursively instantiating symbol: max depth reached, skipping} {} 1"); + endfile = 1; + continue; + } + + if(generator) { + /* for generators (data from a pipe) can not inspect next line (fseek/ftell) looking for + * embedded symbols. Assume no embedded symbol follows */ + fd_tmp = NULL; + get_sym_type(symname, &symtype, NULL, fd_tmp, &sym_n_pins); + } else { + filepos = xftell(lcc[level].fd); /* store file pointer position to inspect next line */ + fd_tmp = NULL; + read_line(lcc[level].fd, 1); + fscan_ret = fscanf(lcc[level].fd, " "); /* eat whitespaces including newline */ + if(fscanf(lcc[level].fd," %c",&ch)!=EOF) { + if( ch == '[') { + fd_tmp = lcc[level].fd; + } + } + /* get symbol type by looking into list of loaded symbols or (if not found) by + * opening/closing the symbol file and getting the 'type' attribute from global symbol attributes + * if fd_tmp set read symbol from embedded tags '[...]' */ + get_sym_type(symname, &symtype, NULL, fd_tmp, &sym_n_pins); + xfseek(lcc[level].fd, filepos, SEEK_SET); /* rewind file pointer */ + } + dbg(1, "l_s_d(): level=%d, symname=%s symtype=%s\n", level, symname, symtype); + + if( /* add here symbol types not to consider when loading schematic-as-symbol instances */ + !strcmp(symtype, "logo") || + !strcmp(symtype, "netlist_commands") || + !strcmp(symtype, "netlist_options") || + !strcmp(symtype, "arch_declarations") || + !strcmp(symtype, "architecture") || + !strcmp(symtype, "attributes") || + !strcmp(symtype, "package") || + !strcmp(symtype, "port_attributes") || + !strcmp(symtype, "use") || + !strcmp(symtype, "launcher") || + !strcmp(symtype, "verilog_preprocessor") || + !strcmp(symtype, "timescale") + ) break; + if(!strboolcmp(get_tok_value(prop_ptr, "symbol_ignore", 0), "true")) break; + /* add PINLAYER boxes (symbol pins) at schematic i/o/iopin coordinates. */ + if( level==0 && IS_PIN(symtype) ) { + add_pinlayer_boxes(lastr, bb, symtype, prop_ptr, inst_x0, inst_y0); + } + /* build symbol filename to be loaded */ + if (!strcmp(xctx->file_version, "1.0")) { + my_strncpy(sympath, abs_sym_path(symname, ".sym"), S(sympath)); + } + else { + my_strncpy(sympath, abs_sym_path(symname, ""), S(sympath)); + } + /* replace i/o/iopin.sym filename with better looking (for LCC symbol) pins */ + use_lcc_pins(level, symtype, &sympath); + + dbg(1, "l_s_d(): fopen2(%s), level=%d\n",sympath, level); + /* find out if symbol is in an external file or embedded, set fd_tmp accordingly */ + if ((fd_tmp = fopen(sympath, fopen_read_mode)) == NULL) { + char c; + fprintf(errfp, "l_s_d(): unable to open file to read schematic: %s\n", sympath); + if(!generator) { + filepos = xftell(lcc[level].fd); /* store file pointer position to inspect next char */ + read_line(lcc[level].fd, 1); + fscan_ret = fscanf(lcc[level].fd, " "); + if(fscanf(lcc[level].fd," %c",&c)!=EOF) { + if( c == '[') { + fd_tmp = lcc[level].fd; + } else { + xfseek(lcc[level].fd, filepos, SEEK_SET); /* rewind file pointer */ + } + } } } - if(path) new_size += strlen(path); - lab = get_tok_value(prop_ptr, "lab", 0); - new_size += strlen(lab) + 21; /* @spice_get_voltage() */ - my_realloc(_ALLOC_ID_, &tt[i].txt_ptr, new_size); - my_snprintf(tt[i].txt_ptr, new_size, "@spice_get_voltage(%s%s)", path ? path : "", lab); - my_free(_ALLOC_ID_, &path); - dbg(1, " --> tt[i].txt_ptr=%s\n", tt[i].txt_ptr); - } - if(!strcmp(tt[i].txt_ptr, "@spice_get_current")) { - /* prop_ptr is the attribute string of last loaded LCC component */ - const char *dev; - size_t new_size = 0; - char *path = NULL; - if(level > 1) { /* add parent LCC instance names (X1, Xinv etc) */ - int i; - for(i = 1; i = max_level) { + my_realloc(_ALLOC_ID_, &lcc, (max_level + 1) * sizeof(Lcc)); + max_level++; } - } - if(path) new_size += strlen(path); - dev = get_tok_value(prop_ptr, "name", 0); - new_size += strlen(dev) + 21; /* @spice_get_current() */ - my_realloc(_ALLOC_ID_, &tt[i].txt_ptr, new_size); - my_snprintf(tt[i].txt_ptr, new_size, "@spice_get_current(%s%s)", path ? path : "", dev); - my_free(_ALLOC_ID_, &path); - dbg(1, " --> tt[i].txt_ptr=%s\n", tt[i].txt_ptr); - } - ROTATION(rot, flip, 0.0, 0.0, tt[i].x0, tt[i].y0, rx1, ry1); - tt[i].x0 = lcc[level].x0 + rx1; tt[i].y0 = lcc[level].y0 + ry1; - tt[i].rot = (tt[i].rot + ((lcc[level].flip && (tt[i].rot & 1)) ? - lcc[level].rot + 2 : lcc[level].rot)) & 0x3; - tt[i].flip = lcc[level].flip ^ tt[i].flip; - } - if(level > 0 && symtype && !strcmp(symtype, "label")) { - char lay[30]; - my_snprintf(lay, S(lay), " layer=%d", WIRELAYER); - my_strcat(_ALLOC_ID_, &tt[i].prop_ptr, lay); - } - dbg(1, "l_s_d(): loaded text : t=%s p=%s\n", tt[i].txt_ptr, tt[i].prop_ptr ? tt[i].prop_ptr : ""); - set_text_flags(&tt[i]); - ++lastt; - break; - case 'N': /* store wires as lines on layer WIRELAYER. */ - - tmpline.prop_ptr = NULL; - if(fscanf(lcc[level].fd, "%lf %lf %lf %lf ",&tmpline.x1, &tmpline.y1, - &tmpline.x2, &tmpline.y2) < 4 ) { - fprintf(errfp,"l_s_d(): WARNING: missing fields for LINE object, ignoring\n"); - read_line(lcc[level].fd, 0); - continue; - } - load_ascii_string(&tmpline.prop_ptr, lcc[level].fd); - - if( !strboolcmp(get_tok_value(tmpline.prop_ptr, "symbol_ignore", 0), "true")) { - my_free(_ALLOC_ID_, &tmpline.prop_ptr); - continue; - } - - i = lastl[WIRELAYER]; - my_realloc(_ALLOC_ID_, &ll[WIRELAYER],(i+1)*sizeof(xLine)); - ll[WIRELAYER][i].x1 = tmpline.x1; - ll[WIRELAYER][i].y1 = tmpline.y1; - ll[WIRELAYER][i].x2 = tmpline.x2; - ll[WIRELAYER][i].y2 = tmpline.y2; - ll[WIRELAYER][i].prop_ptr = tmpline.prop_ptr; - - if (level>0) { - rot = lcc[level].rot; flip = lcc[level].flip; - ROTATION(rot, flip, 0.0, 0.0, ll[WIRELAYER][i].x1, ll[WIRELAYER][i].y1, rx1, ry1); - ROTATION(rot, flip, 0.0, 0.0, ll[WIRELAYER][i].x2, ll[WIRELAYER][i].y2, rx2, ry2); - ll[WIRELAYER][i].x1 = lcc[level].x0 + rx1; ll[WIRELAYER][i].y1 = lcc[level].y0 + ry1; - ll[WIRELAYER][i].x2 = lcc[level].x0 + rx2; ll[WIRELAYER][i].y2 = lcc[level].y0 + ry2; - } - ORDER(ll[WIRELAYER][i].x1, ll[WIRELAYER][i].y1, ll[WIRELAYER][i].x2, ll[WIRELAYER][i].y2); - dbg(2, "l_s_d(): loaded line: ptr=%lx\n", (unsigned long)ll[WIRELAYER]); - ll[WIRELAYER][i].dash = 0; - if(!strboolcmp(get_tok_value(ll[WIRELAYER][i].prop_ptr, "bus", 0), "true")) - ll[WIRELAYER][i].bus = 1; - else - ll[WIRELAYER][i].bus = 0; - ll[WIRELAYER][i].sel = 0; - lastl[WIRELAYER]++; - break; - case 'C': /* symbol is LCC: contains components */ - load_ascii_string(&symname, lcc[level].fd); - if (fscanf(lcc[level].fd, "%lf %lf %hd %hd", &inst_x0, &inst_y0, &inst_rot, &inst_flip) < 4) { - fprintf(errfp, "l_s_d(): WARNING: missing fields for COMPONENT object, ignoring\n"); - read_line(lcc[level].fd, 0); - continue; - } - load_ascii_string(&prop_ptr, lcc[level].fd); - dbg(1, "l_s_d() component: level=%d, sym=%s, prop_ptr = %s\n", level, symname, prop_ptr); - if(level + 1 >=CADMAXHIER) { - fprintf(errfp, "l_s_d(): Symbol recursively instantiating symbol: max depth reached, skipping\n"); - if(has_x) tcleval("alert_ {Symbol recursively instantiating symbol: max depth reached, skipping} {} 1"); - endfile = 1; - continue; - } - - if(generator) { - /* for generators (data from a pipe) can not inspect next line (fseek/ftell) looking for - * embedded symbols. Assume no embedded symbol follows */ - fd_tmp = NULL; - get_sym_type(symname, &symtype, NULL, fd_tmp, &sym_n_pins); - } else { - filepos = xftell(lcc[level].fd); /* store file pointer position to inspect next line */ - fd_tmp = NULL; - read_line(lcc[level].fd, 1); - fscan_ret = fscanf(lcc[level].fd, " "); - if(fscanf(lcc[level].fd," %c",&ch)!=EOF) { - if( ch == '[') { - fd_tmp = lcc[level].fd; - } - } - /* get symbol type by looking into list of loaded symbols or (if not found) by - * opening/closing the symbol file and getting the 'type' attribute from global symbol attributes - * if fd_tmp set read symbol from embedded tags '[...]' */ - get_sym_type(symname, &symtype, NULL, fd_tmp, &sym_n_pins); - xfseek(lcc[level].fd, filepos, SEEK_SET); /* rewind file pointer */ - } - dbg(1, "l_s_d(): level=%d, symname=%s symtype=%s\n", level, symname, symtype); - - if( /* add here symbol types not to consider when loading schematic-as-symbol instances */ - !strcmp(symtype, "logo") || - !strcmp(symtype, "netlist_commands") || - !strcmp(symtype, "netlist_options") || - !strcmp(symtype, "arch_declarations") || - !strcmp(symtype, "architecture") || - !strcmp(symtype, "attributes") || - !strcmp(symtype, "package") || - !strcmp(symtype, "port_attributes") || - !strcmp(symtype, "use") || - !strcmp(symtype, "launcher") || - !strcmp(symtype, "verilog_preprocessor") || - !strcmp(symtype, "timescale") - ) break; - if(!strboolcmp(get_tok_value(prop_ptr, "symbol_ignore", 0), "true")) break; - /* add PINLAYER boxes (symbol pins) at schematic i/o/iopin coordinates. */ - if( level==0 && IS_PIN(symtype) ) { - add_pinlayer_boxes(lastr, bb, symtype, prop_ptr, inst_x0, inst_y0); - } - /* build symbol filename to be loaded */ - if (!strcmp(xctx->file_version, "1.0")) { - my_strncpy(sympath, abs_sym_path(symname, ".sym"), S(sympath)); - } - else { - my_strncpy(sympath, abs_sym_path(symname, ""), S(sympath)); - } - /* replace i/o/iopin.sym filename with better looking (for LCC symbol) pins */ - use_lcc_pins(level, symtype, &sympath); - - /* find out if symbol is in an external file or embedded, set fd_tmp accordingly */ - if ((fd_tmp = fopen(sympath, fopen_read_mode)) == NULL) { - char c; - fprintf(errfp, "l_s_d(): unable to open file to read schematic: %s\n", sympath); - if(!generator) { - filepos = xftell(lcc[level].fd); /* store file pointer position to inspect next char */ - read_line(lcc[level].fd, 1); + ++level; + incremented_level = 1; + lcc[level].fd = fd_tmp; + lcc[level].prop_ptr = NULL; + lcc[level].symname = NULL; + lcc[level].x0 = inst_x0; + lcc[level].y0 = inst_y0; + lcc[level].rot = inst_rot; + lcc[level].flip = inst_flip; + /* calculate LCC sub-schematic x0, y0, rotation and flip */ + if (level > 1) { + short rot, flip; + static const int map[4]={0,3,2,1}; + + flip = lcc[level-1].flip; + rot = lcc[level-1].rot; + ROTATION(rot, flip, 0.0, 0.0, lcc[level].x0, lcc[level].y0,lcc[level].x0, lcc[level].y0); + lcc[level].rot = (short)((lcc[(level-1)].flip ? map[lcc[level].rot] : + lcc[level].rot) + lcc[(level-1)].rot); + lcc[level].rot &= 0x3; + lcc[level].flip = lcc[level].flip ^ lcc[level-1].flip; + lcc[level].x0 += lcc[(level-1)].x0; + lcc[level].y0 += lcc[(level-1)].y0; + } + my_strdup(_ALLOC_ID_, &lcc[level].prop_ptr, prop_ptr); + my_strdup(_ALLOC_ID_, &lcc[level].symname, symname); + dbg(1, "level incremented: level=%d, symname=%s, prop_ptr=%s sympath=%s\n", + level, symname, prop_ptr, sympath); + } + break; + case '[': + while(1) { /* skip embedded [ ... ] */ + skip_line = read_line(lcc[level].fd, 1); + if(!skip_line || !strncmp(skip_line, "]", 1)) break; fscan_ret = fscanf(lcc[level].fd, " "); - if(fscanf(lcc[level].fd," %c",&c)!=EOF) { - if( c == '[') { - fd_tmp = lcc[level].fd; - } else { - xfseek(lcc[level].fd, filepos, SEEK_SET); /* rewind file pointer */ - } - } } - } - if(fd_tmp) { - if (level+1 >= max_level) { - my_realloc(_ALLOC_ID_, &lcc, (max_level + 1) * sizeof(Lcc)); - max_level++; + break; + case ']': + if(level) { + my_free(_ALLOC_ID_, &lcc[level].prop_ptr); + my_free(_ALLOC_ID_, &lcc[level].symname); + --level; + } else { + endfile=1; } - ++level; - incremented_level = 1; - lcc[level].fd = fd_tmp; - lcc[level].prop_ptr = NULL; - lcc[level].symname = NULL; - lcc[level].x0 = inst_x0; - lcc[level].y0 = inst_y0; - lcc[level].rot = inst_rot; - lcc[level].flip = inst_flip; - /* calculate LCC sub-schematic x0, y0, rotation and flip */ - if (level > 1) { - short rot, flip; - static const int map[4]={0,3,2,1}; - - flip = lcc[level-1].flip; - rot = lcc[level-1].rot; - ROTATION(rot, flip, 0.0, 0.0, lcc[level].x0, lcc[level].y0,lcc[level].x0, lcc[level].y0); - lcc[level].rot = (short)((lcc[(level-1)].flip ? map[lcc[level].rot] : - lcc[level].rot) + lcc[(level-1)].rot); - lcc[level].rot &= 0x3; - lcc[level].flip = lcc[level].flip ^ lcc[level-1].flip; - lcc[level].x0 += lcc[(level-1)].x0; - lcc[level].y0 += lcc[(level-1)].y0; - } - my_strdup(_ALLOC_ID_, &lcc[level].prop_ptr, prop_ptr); - my_strdup(_ALLOC_ID_, &lcc[level].symname, symname); - dbg(1, "level incremented: level=%d, symname=%s, prop_ptr=%s sympath=%s\n", - level, symname, prop_ptr, sympath); - } - break; - case '[': - while(1) { /* skip embedded [ ... ] */ - skip_line = read_line(lcc[level].fd, 1); - if(!skip_line || !strncmp(skip_line, "]", 1)) break; - fscan_ret = fscanf(lcc[level].fd, " "); - } - break; - case ']': - if(level) { - my_free(_ALLOC_ID_, &lcc[level].prop_ptr); - my_free(_ALLOC_ID_, &lcc[level].symname); - --level; - } else { - endfile=1; - } - break; - default: - if( tag[0] == '{' ) ungetc(tag[0], lcc[level].fd); - read_record(tag[0], lcc[level].fd, 0); - break; - } /* switch(tag[0]) */ - /* if a 'C' line was encountered and level was incremented, rest of line must be read - with lcc[level-1].fd file pointer */ - if(incremented_level) - read_line(lcc[level-1].fd, 0); /* discard any remaining characters till (but not including) newline */ - else - read_line(lcc[level].fd, 0); /* discard any remaining characters till (but not including) newline */ + break; + default: + if( tag[0] == '{' ) ungetc(tag[0], lcc[level].fd); + read_record(tag[0], lcc[level].fd, 0); + break; + } /* switch(tag[0]) */ + /* if a 'C' line was encountered and level was incremented, rest of line must be read + with lcc[level-1].fd file pointer */ + if(incremented_level) + read_line(lcc[level-1].fd, 0); /* discard any remaining characters till (but not including) newline */ + else + read_line(lcc[level].fd, 0); /* discard any remaining characters till (but not including) newline */ } /* while(1) */ if(!embed_fd) { dbg(1, "l_s_d(): fclose2, level=%d, fd=%p\n", level, lcc[0].fd); diff --git a/src/systemlib/iopin_lcc_top.sym b/src/systemlib/iopin_lcc_top.sym index a22a52fb..675e6038 100644 --- a/src/systemlib/iopin_lcc_top.sym +++ b/src/systemlib/iopin_lcc_top.sym @@ -1,5 +1,6 @@ -v {xschem version=2.9.7 file_version=1.2} -G {type=lcc_iopin +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=lcc_iopin format="*.iopin @lab" template="name=p1 lab=xxx" } diff --git a/src/systemlib/ipin_lcc_top.sym b/src/systemlib/ipin_lcc_top.sym index 5fb41bc0..3318cd1d 100644 --- a/src/systemlib/ipin_lcc_top.sym +++ b/src/systemlib/ipin_lcc_top.sym @@ -1,5 +1,6 @@ -v {xschem version=2.9.7 file_version=1.2} -G {type=lcc_ipin +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=lcc_ipin format="*.ipin @lab" template="name=p1 lab=xxx" } diff --git a/src/systemlib/opin_lcc_top.sym b/src/systemlib/opin_lcc_top.sym index f08a2f29..5d4d3985 100644 --- a/src/systemlib/opin_lcc_top.sym +++ b/src/systemlib/opin_lcc_top.sym @@ -1,5 +1,6 @@ -v {xschem version=2.9.7 file_version=1.2} -G {type=lcc_opin +v {xschem version=3.4.6 file_version=1.2} +G {} +K {type=lcc_opin format="*.opin @lab" template="name=p1 lab=xxx" } diff --git a/xschem_library/examples/poweramp.sch b/xschem_library/examples/poweramp.sch index 3fee8b56..070a7355 100644 --- a/xschem_library/examples/poweramp.sch +++ b/xschem_library/examples/poweramp.sch @@ -49,8 +49,8 @@ color="11 13 12 7" unitx=m linewidth_mult=2.3 -autoload=0 -} +autoload=1 +sim_type=tran} B 2 1200 -830 1880 -520 {flags=graph y1 = -50 y2 = 61 @@ -69,8 +69,8 @@ unitx=m hilight_wave=-1 linewidth_mult=2.3 -autoload=0 -} +autoload=1 +sim_type=tran} B 2 1200 -1020 1880 -830 {flags=graph y1 = 0 y2 = 1100 @@ -86,8 +86,8 @@ node="supply power;i(vcurrvnn) vnn * i(vcurrvpp) vpp * + running average supply power;i(vcurrvnn) vnn * i(vcurrvpp) vpp * + 200u ravg()" linewidth_mult=2.3 -autoload=0 -} +autoload=1 +sim_type=tran} B 2 1200 -310 1880 -120 {flags=graph y1 = 0 y2 = 960 @@ -103,8 +103,8 @@ node="\\"Load power;outm outp - i(v.x1.v8) *\\" \\"Running Average Load power;outm outp - i(v.x1.v8) * 200u ravg()\\"" linewidth_mult=2.3 -autoload=0 -} +autoload=1 +sim_type=tran} B 2 1740 -1110 1877 -1050 {flags=image alpha=0.6 image_data=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 diff --git a/xschem_library/examples/poweramp_lcc.sch b/xschem_library/examples/poweramp_lcc.sch index 8f76c589..c0ceff68 100644 --- a/xschem_library/examples/poweramp_lcc.sch +++ b/xschem_library/examples/poweramp_lcc.sch @@ -1,4 +1,4 @@ -v {xschem version=3.4.6RC file_version=1.2 +v {xschem version=3.4.6 file_version=1.2 * * This file is part of XSCHEM, * a schematic capture and Spice/Vhdl/Verilog netlisting tool for circuit @@ -46,7 +46,9 @@ i(v.x0.vu) i(v.x1.vd) i(v.x0.vd)" color="11 13 12 7" -unitx=1} +unitx=1 +autoload=1 +sim_type=tran} B 2 2520 -540 3200 -230 {flags=graph y1 = -49 y2 = 59 @@ -62,7 +64,9 @@ x1.vboost x0.vboost" color="4 15 6 12 7 4" unitx=1 -hilight_wave=-1} +hilight_wave=-1 +autoload=1 +sim_type=tran} B 2 2520 -730 3200 -540 {flags=graph y1 = 0 y2 = 840 @@ -76,7 +80,9 @@ unitx=1 color="4 7" node="\\"supply power;i(vcurrvnn) vnn * i(vcurrvpp) vpp * +\\" \\"running average supply power;i(vcurrvnn) vnn * i(vcurrvpp) vpp * + 200u ravg()\\"" -hilight_wave=1} +hilight_wave=1 +autoload=1 +sim_type=tran} B 2 2520 -20 3200 170 {flags=graph y1 = 0 y2 = 850 @@ -89,7 +95,9 @@ divx=10 unitx=1 color="4 7" node="\\"Load power;outm outp - i(v.x1.v8) *\\" -\\"Running Average Load power;outm outp - i(v.x1.v8) * 200u ravg()\\""} +\\"Running Average Load power;outm outp - i(v.x1.v8) * 200u ravg()\\"" +autoload=1 +sim_type=tran} B 2 1980 360 2117 420 {flags=image alpha=0.6 image_data=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} @@ -194,6 +202,12 @@ lab=INX} N 190 640 270 640 { lab=INX} N 190 570 190 640 { lab=INX} +N 230 1300 310 1300 {lab=VNN} +N 230 1260 310 1260 {lab=VSS} +N 230 -260 310 -260 {lab=VNN} +N 230 -300 310 -300 {lab=VSS} +N 230 170 310 170 {lab=VPP} +N 230 -1390 310 -1390 {lab=VPP} C {vsource.sym} 1880 -1360 0 0 {name=V1 value="dc 50 pwl 0 0 1m 50"} C {vsource.sym} 1880 -1300 0 0 {name=V0 value="dc 50 pwl 0 0 1m 50"} C {lab_pin.sym} 2120 -1410 0 1 {name=p5 lab=VPP} @@ -213,8 +227,8 @@ C {res.sym} 90 -570 0 0 {name=R19 m=1 value='100k' C {res.sym} 90 -510 0 0 {name=R0 m=1 value="'100k/gain'"} C {lab_pin.sym} 90 -400 0 1 {name=p108 lab=IN} C {lab_pin.sym} 2190 -210 0 1 {name=p9 lab=OUTM} -C {lab_pin.sym} 310 170 0 0 {name=p12 lab=VPP} -C {lab_pin.sym} 310 1300 0 0 {name=p13 lab=VNN} +C {lab_pin.sym} 230 170 0 0 {name=p12 lab=VPP} +C {lab_pin.sym} 230 1300 0 0 {name=p13 lab=VNN} C {res.sym} 190 540 0 1 {name=R6 m=1 value=100k} C {lab_pin.sym} 190 490 0 0 {name=p7 lab=VPP} C {res.sym} 210 730 0 1 {name=R7 m=1 value=100k} @@ -229,7 +243,7 @@ C {lab_pin.sym} 2280 -1100 0 1 {name=p127 lab=IN} C {capa.sym} 90 -450 0 1 {name=C5 m=1 value="100n ; ic=0"} C {lab_pin.sym} 80 1190 0 1 {name=p11 lab=VSS} C {capa.sym} 80 1140 0 1 {name=C6 m=1 value="100n ; ic=0"} -C {lab_pin.sym} 310 1260 0 0 {name=p28 lab=VSS} +C {lab_pin.sym} 230 1260 0 0 {name=p28 lab=VSS} C {res.sym} 80 1020 0 0 {name=R2 m=1 value='100k'} C {res.sym} 80 1080 0 0 {name=R3 m=1 value="'100k/(gain-2)'"} C {vsource.sym} 2200 -1040 0 0 {name=V3 @@ -394,6 +408,6 @@ C {lab_wire.sym} 1760 760 0 1 {name=p29 lab=OUTP} C {lab_wire.sym} 1760 -800 0 1 {name=p30 lab=OUTM} C {lab_pin.sym} 80 940 0 0 {name=p33 lab=OUTP} C {lab_pin.sym} 90 -650 0 1 {name=p34 lab=OUTM} -C {lab_pin.sym} 310 -1390 0 0 {name=p1 lab=VPP} -C {lab_pin.sym} 310 -260 0 0 {name=p2 lab=VNN} -C {lab_pin.sym} 310 -300 0 0 {name=p4 lab=VSS} +C {lab_pin.sym} 230 -1390 0 0 {name=p1 lab=VPP} +C {lab_pin.sym} 230 -260 0 0 {name=p2 lab=VNN} +C {lab_pin.sym} 230 -300 0 0 {name=p4 lab=VSS}