#include"ses_ui.h"
+static int eline_id_cmp(const void* v0, const void* v1)
+{
+ const ScfEline* el0 = *(const ScfEline**)v0;
+ const ScfEline* el1 = *(const ScfEline**)v1;
+
+ assert(el0->id != el1->id);
+
+ if (el0->id < el1->id)
+ return -1;
+ return 1;
+}
+
static void ui_add_line(ses_ui_t* ui, ScfEline* el, ScfLine* l)
{
ScfEcomponent* c;
gtk_render_background(context, cr, 0, 0, width, height);
cairo_set_source_rgba(cr, 1.0, 0.0, 0.0, 1.0);
+ cairo_set_line_width (cr, 2.0);
+
draw_VA(ui->V_wave, cr);
cairo_set_source_rgba(cr, 0.0, 0.0, 1.0, 1.0);
return ret;
}
+ long i;
+ for (i = 0; i < ui->f->n_elines; i++) {
+ if (i < ui->f->elines[i]->id)
+ break;
+ }
+
+ el->id = i;
+
ret = scf_efunction__add_eline(ui->f, el);
if (ret < 0) {
ScfEline_free(el);
return ret;
}
- el->id = ui->f->n_elines - 1;
+ qsort(ui->f->elines, ui->f->n_elines, sizeof(ScfEline*), eline_id_cmp);
*pel = el;
*pl = l;
if (!ui->f || !ui->save_path)
return -EINVAL;
+ ScfEcomponent* c;
+ ScfEline* el;
+ ScfEpin* p;
+
+ long i;
+ long j;
+
+ for (i = 0; i < ui->f->n_elines; i++) {
+ el = ui->f->elines[i];
+
+ el->id = i;
+
+ for (j = 0; j + 1 < el->n_pins; j += 2) {
+
+ c = ui->f->components[el->pins[j]];
+ p = c->pins [el->pins[j + 1]];
+
+ p->lid = el->id;
+ p->c_lid = el->id;
+ }
+ }
+
ScfEboard* b = scf_eboard__alloc();
if (!b)
return -ENOMEM;
case UI_DEL_ELINE:
scf_efunction__add_eline(ui->f, log->el);
+ qsort(ui->f->elines, ui->f->n_elines, sizeof(ScfEline*), eline_id_cmp);
+
ui_add_eline(ui, log->el);
break;
case UI_ADD_ELINE:
scf_efunction__add_eline(ui->f, log->el);
+ qsort(ui->f->elines, ui->f->n_elines, sizeof(ScfEline*), eline_id_cmp);
+
ui_add_eline(ui, log->el);
break;
if (va->size <= 0) {
free(va);
- va = NULL;
+ return 0;
}
int ret = scf_vector_add(vec, va);
free(va);
va = NULL;
}
-#if 0
- int i;
- int j;
-
- for (i = 0; i < vec->size; i++) {
- va = vec->data[i];
- fprintf(stderr, "i: %d, ", i);
-
- for (j = 0; j < va->size; j++) {
- fprintf(stderr, "%lg ", va->data[j]);
- }
- fprintf(stderr, "\n");
- }
-#endif
return 0;
}