Send commitlog mailing list submissions to
commitlog@lists.openmoko.org
To subscribe or unsubscribe via the World Wide Web, visit
http://lists.openmoko.org/mailman/listinfo/commitlog
or, via email, send a message with subject or body 'help' to
commitlog-requ...@lists.openmoko.org
You can reach the person managing the list at
commitlog-ow...@lists.openmoko.org
When replying, please edit your Subject line so it is more specific
than "Re: Contents of commitlog digest..."
Today's Topics:
1. r5946 - in trunk/eda/fped: . test (wer...@docs.openmoko.org)
2. r5947 - in trunk/eda/fped: . test (wer...@docs.openmoko.org)
3. r5948 - trunk/eda/fped (wer...@docs.openmoko.org)
--- Begin Message ---
Author: werner
Date: 2010-04-27 12:57:09 +0200 (Tue, 27 Apr 2010)
New Revision: 5946
Modified:
trunk/eda/fped/gui_inst.c
trunk/eda/fped/test/frame_ref
Log:
In the GUI, pad names were always centered on the pad. In the case of
through-hole pads, this could easily make them disappear into the hole. We now
draw them outside the hole.
- gui_inst.c: when showing through-hole pads, gui_draw_pad_text now places the
pad name into the largest area of the pad outside the hole
- test/frame_ref: removed redundant "with" in all titles
Modified: trunk/eda/fped/gui_inst.c
===================================================================
--- trunk/eda/fped/gui_inst.c 2010-04-27 01:02:24 UTC (rev 5945)
+++ trunk/eda/fped/gui_inst.c 2010-04-27 10:57:09 UTC (rev 5946)
@@ -234,20 +234,18 @@
}
-static void gui_draw_pad_text(struct inst *self)
+static void pad_text_in_rect(struct inst *self,
+ struct coord min, struct coord max)
{
- struct coord min = translate(self->base);
- struct coord max = translate(self->u.pad.other);
GdkGC *gc;
struct coord c;
unit_type h, w;
int rot;
- w = self->bbox.max.x-self->bbox.min.x;
- h = self->bbox.max.y-self->bbox.min.y;
+ w = max.x-min.x;
+ h = max.y-min.y;
rot = w/1.1 < h;
gc = gc_ptext[get_mode(self)];
- sort_coord(&min, &max);
c = add_vec(min, max);
h = max.y-min.y;
w = max.x-min.x;
@@ -257,6 +255,62 @@
}
+static void maximize_box(struct coord *min_box, struct coord *max_box,
+ unit_type x_min, unit_type y_min, unit_type x_max, unit_type y_max)
+{
+ unit_type d_box, d_new, d;
+
+ d_box = max_box->x-min_box->x;
+ d = max_box->y-min_box->y;
+ if (d < d_box)
+ d_box = d;
+
+ d_new = x_max-x_min;
+ d = y_max-y_min;
+ if (d < d_new)
+ d_new = d;
+
+ if (d_new < d_box)
+ return;
+
+ min_box->x = x_min;
+ min_box->y = y_min;
+ max_box->x = x_max;
+ max_box->y = y_max;
+}
+
+
+static void gui_draw_pad_text(struct inst *self)
+{
+ struct coord pad_min = translate(self->base);
+ struct coord pad_max = translate(self->u.pad.other);
+ struct coord hole_min, hole_max;
+ struct coord box_min, box_max;
+
+ sort_coord(&pad_min, &pad_max);
+ if (!self->u.pad.hole) {
+ pad_text_in_rect(self, pad_min, pad_max);
+ return;
+ }
+
+ hole_min = translate(self->u.pad.hole->base);
+ hole_max = translate(self->u.pad.hole->u.hole.other);
+ sort_coord(&hole_min, &hole_max);
+
+ box_min.x = box_min.y = box_max.x = box_max.y;
+ maximize_box(&box_min, &box_max,
+ pad_min.x, pad_min.y, pad_max.x, hole_min.y); /* top */
+ maximize_box(&box_min, &box_max,
+ pad_min.x, hole_max.y, pad_max.x, pad_max.y); /* bottom */
+ maximize_box(&box_min, &box_max,
+ pad_min.x, pad_min.y, hole_min.x, pad_max.y); /* left */
+ maximize_box(&box_min, &box_max,
+ hole_max.x, pad_min.y, pad_max.x, pad_max.y); /* right */
+
+ pad_text_in_rect(self, box_min, box_max);
+}
+
+
static GdkGC *pad_gc(const struct inst *inst, int *fill)
{
*fill = TRUE;
Modified: trunk/eda/fped/test/frame_ref
===================================================================
--- trunk/eda/fped/test/frame_ref 2010-04-27 01:02:24 UTC (rev 5945)
+++ trunk/eda/fped/test/frame_ref 2010-04-27 10:57:09 UTC (rev 5946)
@@ -3,7 +3,7 @@
###############################################################################
-fped_dump "frame reference: with \"frame\" (origin)" <<EOF
+fped_dump "frame reference: \"frame\" (origin)" <<EOF
frame f {}
frame f @
EOF
@@ -20,7 +20,7 @@
#------------------------------------------------------------------------------
-fped_dump "frame reference: with \"%frame\" (current frame origin)" <<EOF
+fped_dump "frame reference: \"%frame\" (current frame origin)" <<EOF
frame f {}
%frame f @
EOF
@@ -37,7 +37,7 @@
#------------------------------------------------------------------------------
-fped_dump "frame reference: with \"%frame\" (current frame vector)" <<EOF
+fped_dump "frame reference: \"%frame\" (current frame vector)" <<EOF
frame f {}
v: vec @(0mm, 0mm)
%frame f v
@@ -56,7 +56,7 @@
#------------------------------------------------------------------------------
-fped_dump "frame reference: with \"%frame\" (other frame origin)" <<EOF
+fped_dump "frame reference: \"%frame\" (other frame origin)" <<EOF
frame f {}
frame g {}
%frame f g.@
@@ -77,7 +77,7 @@
#------------------------------------------------------------------------------
-fped_dump "frame reference: with \"%frame\" (other frame base)" <<EOF
+fped_dump "frame reference: \"%frame\" (other frame base)" <<EOF
frame f {}
frame g {
v: vec @(0mm, 0mm)
@@ -101,7 +101,7 @@
#------------------------------------------------------------------------------
-fped_fail "frame reference: with \"%frame\" (cycle)" <<EOF
+fped_fail "frame reference: \"%frame\" (cycle)" <<EOF
frame f {
}
@@ -117,7 +117,7 @@
#------------------------------------------------------------------------------
-fped_dump "frame reference: with \"%frame\" (out-of-order)" <<EOF
+fped_dump "frame reference: \"%frame\" (out-of-order)" <<EOF
frame f {
}
--- End Message ---
--- Begin Message ---
Author: werner
Date: 2010-04-28 00:36:46 +0200 (Wed, 28 Apr 2010)
New Revision: 5947
Added:
trunk/eda/fped/test/del_frame
trunk/eda/fped/test/del_vec
Modified:
trunk/eda/fped/README
trunk/eda/fped/delete.c
trunk/eda/fped/fpd.y
Log:
Deleting things often left measurements behind. Fixed these bugs, enhanced %del
to also delete frames and items in other frames than the current one, and added
the corresponding regression tests.
- fpd.y, README: %del can now also delete frames
- test/del_frame: regression test for frame deletion
- fpd.y: moved all debug items into debug_item, so that they can be invoked
after defining measurements
- README: clarified that object labels aren't entirely hidden in the GUI
- delete.c (delete_references): also delete measurements referencing the frame
(test/del_frame)
- fpd.y (dbg_link_frame): described why we need base_frame in addition to
base_vec
- fpd.y, README: %del can now also reach into frames other than the current one
- delete.c (do_delete_vec): also delete references in the root frame, i.e.,
measurements (tests/del_vec)
Modified: trunk/eda/fped/README
===================================================================
--- trunk/eda/fped/README 2010-04-27 10:57:09 UTC (rev 5946)
+++ trunk/eda/fped/README 2010-04-27 22:36:46 UTC (rev 5947)
@@ -588,7 +588,7 @@
For debugging and regression tests, fped supports the following commands,
most of which mimick the effect of GUI operations:
-%del <identifier>
+%del <qualified-identifier>
%move <identifier> [<number>] <identifier>
%frame <identifier> <qualified-base>
%print <expression>
@@ -596,14 +596,17 @@
%exit
%tsort { -<id> | +<id> | <id-before> <id-after> [<number>] ... }
-%del and %move take as their first argument the name of the vector or
-object to manipulate. For this purpose, also objects can be labeled.
+%del removes the specified item. This can be a vector, an object, or
+a frame. If the vector or object is in a different frame than the
+current, its name is qualified with the frame name, e.g., "foo.obj".
-Object labels behave like vector labels and share the same name space.
-They are not shown anywhere in the GUI.
+For this purpose, also objects can be labeled. Object labels behave like
+vector labels and share the same name space. They are not normally
+accessible in the GUI. (You can see them in the code view.)
-%move sets an anchor point to the vector named as its last argument.
-The anchor point is identified by index as follows:
+%move take as its first argument the name of the vector or object to
+manipulate. %move sets an anchor point to the vector named as its last
+argument. The anchor point is identified by index as follows:
anchor index vec/frame line/rect/pad arc measurement
-------------- --------- ------------- ------------ -----------
Modified: trunk/eda/fped/delete.c
===================================================================
--- trunk/eda/fped/delete.c 2010-04-27 10:57:09 UTC (rev 5946)
+++ trunk/eda/fped/delete.c 2010-04-27 22:36:46 UTC (rev 5947)
@@ -177,6 +177,7 @@
delete_vecs_by_ref(vec->frame->vecs, vec);
delete_objs_by_ref(&vec->frame->objs, vec);
+ delete_objs_by_ref(&root_frame->objs, vec); /* catch measurements */
}
@@ -522,9 +523,19 @@
for (frame = frames; frame; frame = frame->next)
for (obj = frame->objs; obj; obj = obj->next)
- if (obj->type == ot_frame)
+ switch (obj->type) {
+ case ot_frame:
if (obj->u.frame.ref == ref)
do_delete_obj(obj);
+ break;
+ case ot_meas:
+ if (obj->base->frame == ref ||
+ obj->u.meas.high->frame == ref)
+ do_delete_obj(obj);
+ break;
+ default:
+ break;
+ }
for (obj = ref->objs; obj; obj = obj->next)
if (obj->type == ot_frame)
if (obj->u.frame.ref->active_ref == obj)
Modified: trunk/eda/fped/fpd.y
===================================================================
--- trunk/eda/fped/fpd.y 2010-04-27 10:57:09 UTC (rev 5946)
+++ trunk/eda/fped/fpd.y 2010-04-27 22:36:46 UTC (rev 5947)
@@ -178,22 +178,48 @@
}
-static int dbg_delete(const char *name)
+static int dbg_delete(const char *frame_name, const char *name)
{
struct vec *vec;
struct obj *obj;
+ struct frame *frame;
- vec = find_vec(curr_frame, name);
+ if (!frame_name)
+ frame = curr_frame;
+ else {
+ frame = find_frame(frame_name);
+ if (!frame) {
+ yyerrorf("unknown frame \"%s\"", frame_name);
+ return 0;
+ }
+ }
+ vec = find_vec(frame, name);
if (vec) {
delete_vec(vec);
return 1;
}
- obj = find_obj(curr_frame, name);
+ obj = find_obj(frame, name);
if (obj) {
delete_obj(obj);
return 1;
}
- yyerrorf("unknown item \"%s\"", name);
+ if (!frame_name) {
+ frame = find_frame(name);
+ if (frame) {
+ if (curr_frame == frame) {
+ yyerrorf("a frame can't delete itself");
+ return 0;
+ }
+ if (last_frame == frame)
+ last_frame = frame->prev;
+ delete_frame(frame);
+ return 1;
+ }
+ }
+ if (frame_name)
+ yyerrorf("unknown item \"%s.%s\"", frame_name, name);
+ else
+ yyerrorf("unknown item \"%s\"", name);
return 0;
}
@@ -238,12 +264,19 @@
* @@@ This is very similar to what we do in rule "obj". Consider merging.
*/
+/*
+ * We need to pass base_frame and base_vec, not just the vector (with the
+ * frame implied) since we can also reference the frame's origin, whose
+ * "vector" is NULL.
+ */
+
static int dbg_link_frame(const char *frame_name,
struct frame *base_frame, struct vec *base_vec)
{
struct frame *frame;
struct obj *obj;
+ assert(!base_vec || base_vec->frame == base_frame);
frame = find_frame(frame_name);
if (!frame) {
yyerrorf("unknown frame \"%s\"", frame_name);
@@ -496,11 +529,22 @@
}
$2->name = $1;
}
- | TOK_DBG_DEL ID
+ | debug_item
+ ;
+
+debug_item:
+ TOK_DBG_DEL ID
{
- if (!dbg_delete($2))
+ append_root_frame();
+ if (!dbg_delete(NULL, $2))
YYABORT;
}
+ | TOK_DBG_DEL ID '.' ID
+ {
+ append_root_frame();
+ if (!dbg_delete($2, $4))
+ YYABORT;
+ }
| TOK_DBG_MOVE ID opt_num ID
{
if (!dbg_move($2, $3.n, $4))
@@ -516,11 +560,7 @@
if (!dbg_print($2))
YYABORT;
}
- | debug_item
- ;
-
-debug_item:
- TOK_DBG_DUMP
+ | TOK_DBG_DUMP
{
/*
* It's okay to do append the root frame multiple
Added: trunk/eda/fped/test/del_frame
===================================================================
--- trunk/eda/fped/test/del_frame (rev 0)
+++ trunk/eda/fped/test/del_frame 2010-04-27 22:36:46 UTC (rev 5947)
@@ -0,0 +1,67 @@
+#!/bin/sh
+. ./Common
+
+###############################################################################
+
+fped_fail "delete frame: can't self-destruct" <<EOF
+frame f {
+ %del f
+}
+EOF
+expect <<EOF
+3: a frame can't delete itself near "}"
+EOF
+
+#------------------------------------------------------------------------------
+
+fped_dump "delete frame: content disappears" <<EOF
+frame f {
+ vec @(0mm, 0mm)
+}
+
+%del f
+EOF
+expect <<EOF
+/* MACHINE-GENERATED ! */
+
+package "_"
+unit mm
+EOF
+
+#------------------------------------------------------------------------------
+
+fped_dump "delete frame: references disappear" <<EOF
+frame f {
+ vec @(0mm, 0mm)
+}
+
+frame f @
+
+%del f
+EOF
+expect <<EOF
+/* MACHINE-GENERATED ! */
+
+package "_"
+unit mm
+EOF
+
+#------------------------------------------------------------------------------
+
+fped_dump "delete frame: measurements disappear" <<EOF
+frame f {
+ v: vec @(0mm, 0mm)
+}
+
+meas f.v -> f.v
+
+%del f
+EOF
+expect <<EOF
+/* MACHINE-GENERATED ! */
+
+package "_"
+unit mm
+EOF
+
+###############################################################################
Property changes on: trunk/eda/fped/test/del_frame
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/eda/fped/test/del_vec
===================================================================
--- trunk/eda/fped/test/del_vec (rev 0)
+++ trunk/eda/fped/test/del_vec 2010-04-27 22:36:46 UTC (rev 5947)
@@ -0,0 +1,64 @@
+#!/bin/sh
+. ./Common
+
+###############################################################################
+
+fped_dump "delete vector: it disappears" <<EOF
+v: vec @(0mm, 0mm)
+%del v
+EOF
+expect <<EOF
+/* MACHINE-GENERATED ! */
+
+package "_"
+unit mm
+EOF
+
+#------------------------------------------------------------------------------
+
+fped_dump "delete vector: references disappear" <<EOF
+v: vec @(0mm, 0mm)
+line v v
+%del v
+EOF
+expect <<EOF
+/* MACHINE-GENERATED ! */
+
+package "_"
+unit mm
+EOF
+
+#------------------------------------------------------------------------------
+
+fped_dump "delete vector: measurements disappear (same frame)" <<EOF
+v: vec @(0mm, 0mm)
+meas v -> v
+%del v
+EOF
+expect <<EOF
+/* MACHINE-GENERATED ! */
+
+package "_"
+unit mm
+EOF
+
+#------------------------------------------------------------------------------
+
+fped_dump "delete vector: measurements disappear (other frame)" <<EOF
+frame f {
+ v: vec @(0mm, 0mm)
+}
+meas f.v -> f.v
+%del f.v
+EOF
+expect <<EOF
+/* MACHINE-GENERATED ! */
+
+frame f {
+}
+
+package "_"
+unit mm
+EOF
+
+###############################################################################
Property changes on: trunk/eda/fped/test/del_vec
___________________________________________________________________
Name: svn:executable
+ *
--- End Message ---
--- Begin Message ---
Author: werner
Date: 2010-04-28 02:34:32 +0200 (Wed, 28 Apr 2010)
New Revision: 5948
Modified:
trunk/eda/fped/delete.c
trunk/eda/fped/dump.c
trunk/eda/fped/fpd.y
trunk/eda/fped/gui.c
trunk/eda/fped/gui_frame.c
trunk/eda/fped/gui_inst.c
trunk/eda/fped/gui_meas.c
trunk/eda/fped/inst.c
trunk/eda/fped/meas.c
trunk/eda/fped/obj.c
trunk/eda/fped/obj.h
Log:
Cleaned up the disgusting mess that was the list of frames. The changes:
- removed root_frame. "frames" now takes its place.
- removed frame->prev. In those few cases where we need the previous frame (for
deletion and dumping), we walk the list or recurse.
- the list of frames is now in GUI order, not file order.
- when reading the .fpd file, put the root frame first and leave it there.
- instead of walking the frames list and excluding the root frame by testing
frame->name, just start at frames->next
- likewise, instead of testing !frame->name just use frame == frames
Modified: trunk/eda/fped/delete.c
===================================================================
--- trunk/eda/fped/delete.c 2010-04-27 22:36:46 UTC (rev 5947)
+++ trunk/eda/fped/delete.c 2010-04-28 00:34:32 UTC (rev 5948)
@@ -177,7 +177,12 @@
delete_vecs_by_ref(vec->frame->vecs, vec);
delete_objs_by_ref(&vec->frame->objs, vec);
- delete_objs_by_ref(&root_frame->objs, vec); /* catch measurements */
+ /*
+ * Catch measurements. During final cleanup, we may operate on an empty
+ * list of frames, hence the test.
+ */
+ if (frames)
+ delete_objs_by_ref(&frames->objs, vec);
}
@@ -546,19 +551,18 @@
void delete_frame(struct frame *frame)
{
struct deletion *del;
-
+ struct frame *walk;
groups++;
del = new_deletion(dt_frame);
del->u.frame.ref = frame;
- del->u.frame.prev = frame->prev;
-
- if (frame->next)
- frame->next->prev = frame->prev;
- if (frame->prev)
- frame->prev->next = frame->next;
+ del->u.frame.prev = NULL;
+ for (walk = frames; walk != frame; walk = walk->next)
+ del->u.frame.prev = walk;
+ if (del->u.frame.prev)
+ del->u.frame.prev->next = frame->next;
else
- frames = frame->next;
+ frames = frame->next; /* hmm, deleting the root frame ? */
delete_references(frame);
}
@@ -573,7 +577,6 @@
assert(frame->next == frames);
frames = frame;
}
- frame->next->prev = frame;
}
Modified: trunk/eda/fped/dump.c
===================================================================
--- trunk/eda/fped/dump.c 2010-04-27 22:36:46 UTC (rev 5947)
+++ trunk/eda/fped/dump.c 2010-04-28 00:34:32 UTC (rev 5948)
@@ -394,7 +394,7 @@
const char *name;
name = base_name(base, NULL);
- if (base->frame == root_frame)
+ if (base->frame == frames)
return stralloc(name);
return stralloc_printf("%s.%s", base->frame->name, name);
}
@@ -546,6 +546,15 @@
}
+static void reverse_frames(FILE *file, struct frame *last)
+{
+ if (last) {
+ reverse_frames(file, last->next);
+ dump_frame(file, last, "\t");
+ }
+}
+
+
int dump(FILE *file)
{
struct frame *frame;
@@ -553,15 +562,12 @@
fprintf(file, "%s\n", MACHINE_GENERATED);
for (frame = frames; frame; frame = frame->next)
frame->dumped = 0;
- for (frame = frames; frame; frame = frame->next) {
- if (!frame->name) {
- fprintf(file, "package \"%s\"\n", pkg_name);
- dump_unit(file);
- dump_frame(file, frame, "");
- } else {
- dump_frame(file, frame, "\t");
- }
- }
+
+ reverse_frames(file, frames->next);
+ fprintf(file, "package \"%s\"\n", pkg_name);
+ dump_unit(file);
+ dump_frame(file, frames, "");
+
fflush(file);
return !ferror(file);
}
Modified: trunk/eda/fped/fpd.y
===================================================================
--- trunk/eda/fped/fpd.y 2010-04-27 22:36:46 UTC (rev 5947)
+++ trunk/eda/fped/fpd.y 2010-04-28 00:34:32 UTC (rev 5948)
@@ -35,7 +35,6 @@
static struct table *curr_table;
static struct row *curr_row;
-static struct frame *last_frame = NULL;
static struct vec *last_vec = NULL;
static struct table **next_table;
@@ -54,7 +53,7 @@
{
struct frame *f;
- for (f = frames; f; f = f->next)
+ for (f = frames->next; f; f = f->next)
if (f->name == name)
return f;
return NULL;
@@ -210,8 +209,6 @@
yyerrorf("a frame can't delete itself");
return 0;
}
- if (last_frame == frame)
- last_frame = frame->prev;
delete_frame(frame);
return 1;
}
@@ -317,16 +314,6 @@
}
-static void append_root_frame(void)
-{
- root_frame->prev = last_frame;
- if (last_frame)
- last_frame->next = root_frame;
- else
- frames = root_frame;
-}
-
-
%}
@@ -387,16 +374,13 @@
all:
START_FPD
{
- root_frame = zalloc_type(struct frame);
- set_frame(root_frame);
+ frames = zalloc_type(struct frame);
+ set_frame(frames);
id_sin = unique("sin");
id_cos = unique("cos");
id_sqrt = unique("sqrt");
}
fpd
- {
- append_root_frame();
- }
| START_EXPR expr
{
expr_result = $2;
@@ -471,16 +455,12 @@
curr_frame = zalloc_type(struct frame);
curr_frame->name = $2;
set_frame(curr_frame);
- curr_frame->prev = last_frame;
- if (last_frame)
- last_frame->next = curr_frame;
- else
- frames = curr_frame;
- last_frame = curr_frame;
+ curr_frame->next = frames->next;
+ frames->next = curr_frame;
}
opt_frame_items '}'
{
- set_frame(root_frame);
+ set_frame(frames);
}
;
@@ -535,13 +515,11 @@
debug_item:
TOK_DBG_DEL ID
{
- append_root_frame();
if (!dbg_delete(NULL, $2))
YYABORT;
}
| TOK_DBG_DEL ID '.' ID
{
- append_root_frame();
if (!dbg_delete($2, $4))
YYABORT;
}
@@ -562,13 +540,6 @@
}
| TOK_DBG_DUMP
{
- /*
- * It's okay to do append the root frame multiple
- * times. If more frames are added afterwards, they
- * just replace the root frame until it gets appended a
- * final time when parsing ends.
- */
- append_root_frame();
if (!dump(stdout)) {
perror("stdout");
exit(1);
@@ -929,7 +900,7 @@
qbase:
ID
{
- $$ = find_vec(root_frame, $1);
+ $$ = find_vec(frames, $1);
if (!$$) {
yyerrorf("unknown vector \"%s\"", $1);
YYABORT;
Modified: trunk/eda/fped/gui.c
===================================================================
--- trunk/eda/fped/gui.c 2010-04-27 22:36:46 UTC (rev 5947)
+++ trunk/eda/fped/gui.c 2010-04-28 00:34:32 UTC (rev 5948)
@@ -393,7 +393,7 @@
gui_setup_style(root->window);
init_canvas();
edit_nothing();
- select_frame(root_frame);
+ select_frame(frames);
make_popups();
gtk_main();
Modified: trunk/eda/fped/gui_frame.c
===================================================================
--- trunk/eda/fped/gui_frame.c 2010-04-27 22:36:46 UTC (rev 5947)
+++ trunk/eda/fped/gui_frame.c 2010-04-28 00:34:32 UTC (rev 5948)
@@ -114,13 +114,8 @@
new = zalloc_type(struct frame);
new->name = unique("_");
- new->next = parent;
- new->prev = parent->prev;
- if (parent->prev)
- parent->prev->next = new;
- else
- frames = new;
- parent->prev = new;
+ new->next = parent->next;
+ parent->next = new;
change_world();
}
@@ -129,10 +124,10 @@
{
struct frame *frame = popup_data;
- assert(frame != root_frame);
+ assert(frame != frames);
delete_frame(frame);
if (active_frame == frame)
- select_frame(root_frame);
+ select_frame(frames);
change_world();
}
@@ -166,8 +161,8 @@
{
const struct frame *frame;
- for (frame = frames; frame; frame = frame->next)
- if (frame->name && !strcmp(frame->name, "_"))
+ for (frame = frames->next; frame; frame = frame->next)
+ if (!strcmp(frame->name, "_"))
return FALSE;
return TRUE;
}
@@ -206,7 +201,7 @@
{
gtk_widget_set_sensitive(
gtk_item_factory_get_item(factory_frame, "/Delete frame"),
- frame != root_frame);
+ frame != frames);
gtk_widget_set_sensitive(
gtk_item_factory_get_item(factory_frame, "/Add frame"),
@@ -1638,8 +1633,8 @@
if (!is_id(s))
return 0;
- for (f = frames; f; f = f->next)
- if (f->name && !strcmp(f->name, s))
+ for (f = frames->next; f; f = f->next)
+ if (!strcmp(f->name, s))
return 0;
return 1;
}
@@ -1818,7 +1813,7 @@
gtk_table_attach_defaults(GTK_TABLE(tab), packages, 1, 2, 0, 1);
n = 0;
- for (frame = root_frame; frame; frame = frame->prev) {
+ for (frame = frames; frame; frame = frame->next) {
label = build_frame_label(frame);
gtk_table_attach_defaults(GTK_TABLE(tab), label,
0, 1, n*2+1, n*2+2);
@@ -1830,7 +1825,7 @@
wrap_width -= max_name_width+FRAME_AREA_MISC_WIDTH;
n = 0;
- for (frame = root_frame; frame; frame = frame->prev) {
+ for (frame = frames; frame; frame = frame->next) {
refs = build_frame_refs(frame);
gtk_table_attach_defaults(GTK_TABLE(tab), refs,
1, 2, n*2+1, n*2+2);
@@ -1850,7 +1845,7 @@
}
if (!show_vars) {
- meas = build_meas(root_frame);
+ meas = build_meas(frames);
gtk_table_attach_defaults(GTK_TABLE(tab), meas,
1, 2, n*2+2, n*2+3);
}
Modified: trunk/eda/fped/gui_inst.c
===================================================================
--- trunk/eda/fped/gui_inst.c 2010-04-27 22:36:46 UTC (rev 5947)
+++ trunk/eda/fped/gui_inst.c 2010-04-28 00:34:32 UTC (rev 5948)
@@ -650,7 +650,7 @@
gc = self->u.frame.active ? gc_active_frame : gc_frame[get_mode(self)];
draw_eye(gc, center, FRAME_EYE_R1, FRAME_EYE_R2);
- if (!self->u.frame.ref->name)
+ if (self->u.frame.ref == frames)
return;
corner = translate(corner);
corner.x -= FRAME_CLEARANCE;
Modified: trunk/eda/fped/gui_meas.c
===================================================================
--- trunk/eda/fped/gui_meas.c 2010-04-27 22:36:46 UTC (rev 5947)
+++ trunk/eda/fped/gui_meas.c 2010-04-28 00:34:32 UTC (rev 5948)
@@ -277,7 +277,7 @@
return 0;
/* it's safe to pass "from" here, but we may change it later */
obj = new_obj_unconnected(ot_meas, from);
- connect_obj(root_frame, obj);
+ connect_obj(frames, obj);
meas = &obj->u.meas;
meas->label = NULL;
switch (mode) {
Modified: trunk/eda/fped/inst.c
===================================================================
--- trunk/eda/fped/inst.c 2010-04-27 22:36:46 UTC (rev 5947)
+++ trunk/eda/fped/inst.c 2010-04-28 00:34:32 UTC (rev 5948)
@@ -82,7 +82,7 @@
if (inst->ops == &frame_ops && inst->u.frame.ref == active_frame)
return 1;
if (!inst->outer)
- return active_frame == root_frame;
+ return active_frame == frames;
return inst->outer->u.frame.ref == active_frame;
}
Modified: trunk/eda/fped/meas.c
===================================================================
--- trunk/eda/fped/meas.c 2010-04-27 22:36:46 UTC (rev 5947)
+++ trunk/eda/fped/meas.c 2010-04-28 00:34:32 UTC (rev 5948)
@@ -232,7 +232,7 @@
struct coord a0, b0;
lt_op_type lt;
- for (obj = root_frame->objs; obj; obj = obj->next) {
+ for (obj = frames->objs; obj; obj = obj->next) {
if (obj->type != ot_meas)
continue;
meas = &obj->u.meas;
Modified: trunk/eda/fped/obj.c
===================================================================
--- trunk/eda/fped/obj.c 2010-04-27 22:36:46 UTC (rev 5947)
+++ trunk/eda/fped/obj.c 2010-04-28 00:34:32 UTC (rev 5948)
@@ -34,7 +34,6 @@
char *pkg_name = NULL;
struct frame *frames = NULL;
-struct frame *root_frame = NULL;
struct frame *active_frame = NULL;
void *instantiation_error = NULL;
@@ -255,7 +254,7 @@
goto error;
break;
case ot_meas:
- assert(frame == root_frame);
+ assert(frame == frames);
offset = eval_unit_default(obj->u.meas.offset, frame,
DEFAULT_OFFSET);
if (is_undef(offset))
@@ -278,7 +277,7 @@
char *s;
int ok;
- if (!frame->name) {
+ if (frame == frames) {
s = expand(pkg_name, frame);
inst_select_pkg(s);
free(s);
@@ -471,7 +470,7 @@
reset_found();
found = 0;
search_suspended = 0;
- ok = generate_frame(root_frame, zero, NULL, NULL, 1);
+ ok = generate_frame(frames, zero, NULL, NULL, 1);
if (ok && (find_vec || find_obj) && found)
activate_found();
find_vec = NULL;
Modified: trunk/eda/fped/obj.h
===================================================================
--- trunk/eda/fped/obj.h 2010-04-27 22:36:46 UTC (rev 5947)
+++ trunk/eda/fped/obj.h 2010-04-28 00:34:32 UTC (rev 5948)
@@ -156,7 +156,6 @@
struct vec *vecs;
struct obj *objs;
struct frame *next;
- struct frame *prev; /* for the list of frames in the GUI */
/* used during generation */
const struct frame *curr_parent;
@@ -236,9 +235,8 @@
};
-extern char *pkg_name;
-extern struct frame *frames;
-extern struct frame *root_frame;
+extern char *pkg_name; /* anonymous common package first */
+extern struct frame *frames; /* root frame first */
extern struct frame *active_frame;
extern void *instantiation_error;
--- End Message ---
_______________________________________________
commitlog mailing list
commitlog@lists.openmoko.org
http://lists.openmoko.org/mailman/listinfo/commitlog