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

Reply via email to