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. r5356 - developers/werner/fped (wer...@docs.openmoko.org)
   2. r5357 - developers/werner/fped (wer...@docs.openmoko.org)
--- Begin Message ---
Author: werner
Date: 2009-08-01 01:24:00 +0200 (Sat, 01 Aug 2009)
New Revision: 5356

Modified:
   developers/werner/fped/TODO
   developers/werner/fped/error.c
   developers/werner/fped/error.h
   developers/werner/fped/expr.h
   developers/werner/fped/gui.c
   developers/werner/fped/gui_status.c
   developers/werner/fped/gui_status.h
   developers/werner/fped/gui_style.c
   developers/werner/fped/gui_style.h
   developers/werner/fped/util.c
   developers/werner/fped/util.h
Log:
- frame color wasn't set back to "selected" when selecting an item while 
  editing the frame name
- added "extern" to all variable declarations in headers
- new functions stralloc_printf and stralloc_vprintf to printf into a malloc'ed
  buffer
- errors during instantiation are now reported to the GUI



Modified: developers/werner/fped/TODO
===================================================================
--- developers/werner/fped/TODO 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/TODO 2009-07-31 23:24:00 UTC (rev 5356)
@@ -40,6 +40,7 @@
 
 Future directions:
 - future: consider using cairo instead of gdk
+- live update of value when entering strings and expressions ?
 - advanced: non-standard solder mask
 - advanced: solder paste exceptions (subtractive, additive)
 - advanced: silk line width

Modified: developers/werner/fped/error.c
===================================================================
--- developers/werner/fped/error.c      2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/error.c      2009-07-31 23:24:00 UTC (rev 5356)
@@ -15,14 +15,16 @@
 #include <stdlib.h>
 #include <stdio.h>
 
+#include "util.h"
 #include "error.h"
 
 
+extern char *yytext;
+
 int lineno = 1;
+void (*reporter)(const char *s) = report_to_stderr;
 
-extern char *yytext;
 
-
 void __attribute__((noreturn)) yyerrorf(const char *fmt, ...)
 {
        va_list ap;
@@ -42,13 +44,20 @@
 }
 
 
+void report_to_stderr(const char *s)
+{
+       fprintf(stderr, "%s\n", s);
+}
+
+
 void fail(const char *fmt, ...)
 {
        va_list ap;
+       char *s;
 
        va_start(ap, fmt);
-       vfprintf(stderr, fmt, ap);
+       s = stralloc_vprintf(fmt, ap);
        va_end(ap);
-       fprintf(stderr, "\n");
+       reporter(s);
+       free(s);
 }
-

Modified: developers/werner/fped/error.h
===================================================================
--- developers/werner/fped/error.h      2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/error.h      2009-07-31 23:24:00 UTC (rev 5356)
@@ -15,12 +15,15 @@
 #define ERROR_H
 
 
-int lineno;
+extern int lineno;
 
+extern void (*reporter)(const char *s);
 
+
 void __attribute__((noreturn)) yyerrorf(const char *fmt, ...);
 void __attribute__((noreturn)) yyerror(const char *s);
 
+void report_to_stderr(const char *s);
 void fail(const char *fmt, ...);
 
 #endif /* !ERROR_H */

Modified: developers/werner/fped/expr.h
===================================================================
--- developers/werner/fped/expr.h       2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/expr.h       2009-07-31 23:24:00 UTC (rev 5356)
@@ -52,7 +52,7 @@
 };
 
 
-struct num undef;
+extern struct num undef;
 
 
 #define        is_undef(num)           ((num).type == nt_none)

Modified: developers/werner/fped/gui.c
===================================================================
--- developers/werner/fped/gui.c        2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/gui.c        2009-07-31 23:24:00 UTC (rev 5356)
@@ -371,9 +371,24 @@
 }
 
 
+static void unselect_frame(void *data)
+{
+       struct frame *frame= data;
+
+       /*
+        * "unselect" means in this context that the selection has moved
+        * elsewhere. However, this does not necessarily change the frame.
+        * (And, in fact, since we rebuild the frame list anyway, the color
+        * change here doesn't matter if selecting a different frame.)
+        * So we revert from "editing" to "selected".
+        */
+        label_in_box_bg(frame->label, COLOR_FRAME_SELECTED);
+}
+
+
 static void edit_frame(struct frame *frame)
 {
-       inst_select_outside(frame, NULL);
+       inst_select_outside(frame, unselect_frame);
        label_in_box_bg(frame->label, COLOR_FRAME_EDITING);
        status_set_name(frame->name);
        edit_unique(&frame->name, validate_frame_name, frame);
@@ -480,6 +495,7 @@
 
 void change_world(void)
 {
+       status_begin_reporting();
        instantiate();
        label_in_box_bg(active_frame->label, COLOR_FRAME_SELECTED);
        build_frames(frames_box);

Modified: developers/werner/fped/gui_status.c
===================================================================
--- developers/werner/fped/gui_status.c 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/gui_status.c 2009-07-31 23:24:00 UTC (rev 5356)
@@ -19,6 +19,7 @@
 
 #include "util.h"
 #include "coord.h"
+#include "error.h"
 #include "unparse.h"
 #include "gui_util.h"
 #include "gui_style.h"
@@ -48,10 +49,11 @@
 
 static void set_label(GtkWidget *label, const char *fmt, va_list ap)
 {
-       char buf[100]; /* @@@ enough :-) */
+       char *s;
 
-       vsprintf(buf, fmt, ap);
-       gtk_label_set_text(GTK_LABEL(label), buf);
+       s = stralloc_vprintf(fmt, ap);
+       gtk_label_set_text(GTK_LABEL(label), s);
+       free(s);
 }
 
 
@@ -91,7 +93,8 @@
        GdkColor col;
 
        col = get_color(color);
-       gtk_widget_modify_base(GTK_WIDGET(status_entry), GTK_STATE_NORMAL, 
&col);
+       gtk_widget_modify_base(GTK_WIDGET(status_entry),
+           GTK_STATE_NORMAL, &col);
 }
 
 
@@ -299,6 +302,37 @@
 }
 
 
+/* ----- status reports ---------------------------------------------------- */
+
+
+static gint context_id;
+static int have_msg = 0;
+
+
+static void clear_status_msg(void)
+{
+       if (have_msg) {
+               gtk_statusbar_pop(GTK_STATUSBAR(status_msg), context_id);
+               have_msg = 0;
+       }
+}
+
+
+static void report_to_gui(const char *s)
+{
+       if (!have_msg)
+               gtk_statusbar_push(GTK_STATUSBAR(status_msg), context_id, s);
+       have_msg = 1;
+}
+
+
+void status_begin_reporting(void)
+{
+       clear_status_msg();
+       reporter = report_to_gui;
+}
+
+
 /* ----- setup ------------------------------------------------------------- */
 
 
@@ -368,4 +402,7 @@
 
        status_msg = gtk_statusbar_new();
        gtk_box_pack_start(GTK_BOX(vbox), status_msg, FALSE, FALSE, 0);
+
+       context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(status_msg),
+           "messages");
 }

Modified: developers/werner/fped/gui_status.h
===================================================================
--- developers/werner/fped/gui_status.h 2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/gui_status.h 2009-07-31 23:24:00 UTC (rev 5356)
@@ -38,6 +38,8 @@
 
 void status_set_xy(struct coord coord);
 
+void status_begin_reporting(void);
+
 void make_status_area(GtkWidget *vbox) ;
 
 #endif /* !GUI_STATUS_H */

Modified: developers/werner/fped/gui_style.c
===================================================================
--- developers/werner/fped/gui_style.c  2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/gui_style.c  2009-07-31 23:24:00 UTC (rev 5356)
@@ -22,6 +22,13 @@
 #define        INVALID "#00ffff"
 
 
+GdkGC *gc_bg;
+GdkGC *gc_vec[mode_n];
+GdkGC *gc_obj[mode_n];
+GdkGC *gc_pad[mode_n];
+GdkGC *gc_frame[mode_n];
+
+
 static GdkGC *gc(const char *spec, int width)
 {
        GdkGCValues gc_values = {

Modified: developers/werner/fped/gui_style.h
===================================================================
--- developers/werner/fped/gui_style.h  2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/gui_style.h  2009-07-31 23:24:00 UTC (rev 5356)
@@ -61,11 +61,11 @@
 /* ----- canvas drawing styles --------------------------------------------- */
 
 
-GdkGC *gc_bg;
-GdkGC *gc_vec[mode_n];
-GdkGC *gc_obj[mode_n];
-GdkGC *gc_pad[mode_n];
-GdkGC *gc_frame[mode_n];
+extern GdkGC *gc_bg;
+extern GdkGC *gc_vec[mode_n];
+extern GdkGC *gc_obj[mode_n];
+extern GdkGC *gc_pad[mode_n];
+extern GdkGC *gc_frame[mode_n];
 
 
 void gui_setup_style(GdkDrawable *drawable);

Modified: developers/werner/fped/util.c
===================================================================
--- developers/werner/fped/util.c       2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/util.c       2009-07-31 23:24:00 UTC (rev 5356)
@@ -11,12 +11,44 @@
  */
 
 
+#include <stdarg.h>
+#include <stdio.h>
 #include <string.h>
 
 #include "util.h"
 
 
 
+/* ----- printf buffer allocation ------------------------------------------ */
+
+
+char *stralloc_vprintf(const char *fmt, va_list ap)
+{
+       char *buf;
+       int n;
+
+       n = snprintf(NULL, 0, fmt, ap);
+       buf = alloc_size(n+1);
+       vsnprintf(buf, n+1, fmt, ap);
+       return buf;
+}
+
+
+char *stralloc_printf(const char *fmt, ...)
+{
+       va_list ap;
+       char *s;
+
+       va_start(ap, fmt);
+       s = stralloc_vprintf(fmt, ap);
+       va_end(ap);
+       return s;
+}
+
+
+/* ----- identifier syntax check ------------------------------------------- */
+
+
 int is_id(char c, int first) 
 {
        if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_')

Modified: developers/werner/fped/util.h
===================================================================
--- developers/werner/fped/util.h       2009-07-31 22:16:10 UTC (rev 5355)
+++ developers/werner/fped/util.h       2009-07-31 23:24:00 UTC (rev 5356)
@@ -14,6 +14,7 @@
 #ifndef UTIL_H
 #define UTIL_H
 
+#include <stdarg.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -46,6 +47,9 @@
        strnalloc_tmp; })
 
 
+char *stralloc_vprintf(const char *fmt, va_list ap);
+char *stralloc_printf(const char *fmt, ...);
+
 int is_id(char c, int first);
 
 const char *unique(const char *s);




--- End Message ---
--- Begin Message ---
Author: werner
Date: 2009-08-01 02:56:58 +0200 (Sat, 01 Aug 2009)
New Revision: 5357

Modified:
   developers/werner/fped/TODO
   developers/werner/fped/error.c
   developers/werner/fped/error.h
   developers/werner/fped/expr.c
   developers/werner/fped/fpd.l
   developers/werner/fped/fpd.y
   developers/werner/fped/fped.c
   developers/werner/fped/gui.c
   developers/werner/fped/gui_status.c
   developers/werner/fped/gui_status.h
   developers/werner/fped/obj.c
   developers/werner/fped/obj.h
   developers/werner/fped/util.c
Log:
- stralloc_vprintf didn't reset the argument pointer before the second pass
- changed "from" and "to" of loop from expression to value for better code 
  reuse
- completed parse_expr
- values in variables, tables, and loops can now be edited



Modified: developers/werner/fped/TODO
===================================================================
--- developers/werner/fped/TODO 2009-07-31 23:24:00 UTC (rev 5356)
+++ developers/werner/fped/TODO 2009-08-01 00:56:58 UTC (rev 5357)
@@ -3,7 +3,7 @@
 - populate input area (still needed: mm/mil, rezoom)
 - add vec editor
 - add obj editor
-- add table/var/loop editor
+- add table/var/loop editor (missing: add col/row, add/del var/table/loop)
 - add incremental expression parser (for editor)
 - add default unit (combine with grid unit selection ?)
 - consider adding auto/mm/mil selection for each dimension

Modified: developers/werner/fped/error.c
===================================================================
--- developers/werner/fped/error.c      2009-07-31 23:24:00 UTC (rev 5356)
+++ developers/werner/fped/error.c      2009-08-01 00:56:58 UTC (rev 5357)
@@ -25,28 +25,41 @@
 void (*reporter)(const char *s) = report_to_stderr;
 
 
-void __attribute__((noreturn)) yyerrorf(const char *fmt, ...)
+void yyerrorf(const char *fmt, ...)
 {
        va_list ap;
+       char *buf;
+       int n;
 
-       fprintf(stderr, "%d: ", lineno);
        va_start(ap, fmt);
-       vfprintf(stderr, fmt, ap);
+       n = vsnprintf(NULL, 0, fmt, ap);
        va_end(ap);
-       fprintf(stderr, " near \"%s\"\n", yytext);
-       exit(1);
+       buf = alloc_size(n+1);
+       va_start(ap, fmt);
+       vsnprintf(buf, n+1, fmt, ap);
+       va_end(ap);
+       fail(buf);
+       free(buf);
 }
 
 
-void __attribute__((noreturn)) yyerror(const char *s)
+void yyerror(const char *s)
 {
        yyerrorf("%s", s);
 }
 
 
+void report_parse_error(const char *s)
+{
+       fprintf(stderr, "%d: %s near \"%s\" ", lineno, s, yytext);
+       exit(1);
+}
+
+
 void report_to_stderr(const char *s)
 {
        fprintf(stderr, "%s\n", s);
+       exit(1);
 }
 
 

Modified: developers/werner/fped/error.h
===================================================================
--- developers/werner/fped/error.h      2009-07-31 23:24:00 UTC (rev 5356)
+++ developers/werner/fped/error.h      2009-08-01 00:56:58 UTC (rev 5357)
@@ -20,10 +20,11 @@
 extern void (*reporter)(const char *s);
 
 
-void __attribute__((noreturn)) yyerrorf(const char *fmt, ...);
-void __attribute__((noreturn)) yyerror(const char *s);
+void yyerrorf(const char *fmt, ...);
+void yyerror(const char *s);
 
 void report_to_stderr(const char *s);
+void report_parse_error(const char *s);
 void fail(const char *fmt, ...);
 
 #endif /* !ERROR_H */

Modified: developers/werner/fped/expr.c
===================================================================
--- developers/werner/fped/expr.c       2009-07-31 23:24:00 UTC (rev 5356)
+++ developers/werner/fped/expr.c       2009-08-01 00:56:58 UTC (rev 5357)
@@ -369,9 +369,16 @@
 /* ----- expression-only parser -------------------------------------------- */
 
 
+void scan_expr(const char *s);
+int yyparse(void);
+
+struct expr *expr_result;
+
+
 struct expr *parse_expr(const char *s)
 {
-       return NULL;
+       scan_expr(s);
+       return yyparse() ? NULL : expr_result;
 }
 
 

Modified: developers/werner/fped/fpd.l
===================================================================
--- developers/werner/fped/fpd.l        2009-07-31 23:24:00 UTC (rev 5356)
+++ developers/werner/fped/fpd.l        2009-08-01 00:56:58 UTC (rev 5357)
@@ -22,9 +22,18 @@
 #include "y.tab.h"
 
 
+int start_token = START_FPD;
+
 static int disable_keywords = 0;
 static int is_table = 0;
 
+
+void scan_expr(const char *s)
+{
+       start_token = START_EXPR;
+       yy_scan_string(s);
+}
+
 %}
 
 
@@ -37,7 +46,22 @@
 
 %%
 
+%{
+       /*
+        * Nice hack:
+        *
+        * http://www.gnu.org/software/bison/manual/bison.html#
+        *   Multiple-start_002dsymbols
+        */
 
+       if (start_token) {
+               int tmp = start_token;
+               start_token = 0;
+               return tmp;
+       }
+%}
+
+
 <INITIAL>"set"                 { BEGIN(NOKEYWORD);
                                  return TOK_SET; }
 <INITIAL>"loop"                        { BEGIN(NOKEYWORD);

Modified: developers/werner/fped/fpd.y
===================================================================
--- developers/werner/fped/fpd.y        2009-07-31 23:24:00 UTC (rev 5356)
+++ developers/werner/fped/fpd.y        2009-08-01 00:56:58 UTC (rev 5357)
@@ -20,6 +20,8 @@
 #include "obj.h"
 
 
+extern struct expr *expr_result;
+
 static struct frame *curr_frame;
 static struct table *curr_table;
 static struct row *curr_row;
@@ -93,8 +95,12 @@
        loop->var.name = id;
        loop->var.next = NULL;
        loop->var.frame = curr_frame;
-       loop->from = from;
-       loop->to = to;
+       loop->from.expr = from;
+       loop->from.row = NULL;
+       loop->from.next = NULL;
+       loop->to.expr = to;
+       loop->to.row = NULL;
+       loop->to.next = NULL;
        loop->next = NULL;
        loop->active = 0;
        *next_loop = loop;
@@ -131,6 +137,7 @@
 };
 
 
+%token         START_FPD START_EXPR
 %token         TOK_SET TOK_LOOP TOK_FRAME TOK_TABLE TOK_VEC
 %token         TOK_PAD TOK_RECT TOK_LINE TOK_CIRC TOK_ARC
 
@@ -149,7 +156,15 @@
 %%
 
 all:
+       START_FPD fpd
+       | START_EXPR expr
                {
+                       expr_result = $2;
+               }
+       ;
+
+fpd:
+               {
                        root_frame = zalloc_type(struct frame);
                        set_frame(root_frame);
                }
@@ -170,8 +185,10 @@
 frame_def:
        TOK_FRAME ID '{'
                {
-                       if (find_frame($2))
+                       if (find_frame($2)) {
                                yyerrorf("duplicate frame \"%s\"", $2);
+                               YYABORT;
+                       }
                        curr_frame = zalloc_type(struct frame);
                        curr_frame->name = $2;
                        set_frame(curr_frame);
@@ -205,8 +222,10 @@
        | vec
        | LABEL vec
                {
-                       if (find_vec($1))
+                       if (find_vec($1)) {
                                yyerrorf("duplicate vector \"%s\"", $1);
+                               YYABORT;
+                       }
                        $2->name = $1;
                }
        | obj
@@ -274,9 +293,11 @@
                }
            row '}'
                {
-                       if (n_vars != n_values)
+                       if (n_vars != n_values) {
                                yyerrorf("table has %d variables but row has "
                                    "%d values", n_vars, n_values);
+                               YYABORT;
+                       }
                        $<row>2->values = $3;
                }
            rows
@@ -338,14 +359,18 @@
        | '.'
                {
                        $$ = last_vec;
-                       if (!$$)
+                       if (!$$) {
                                yyerrorf(". without predecessor");
+                               YYABORT;
+                       }
                }
        | ID
                {
                        $$ = find_vec($1);
-                       if (!$$)
+                       if (!$$) {
                                yyerrorf("unknown vector \"%s\"", $1);
+                               YYABORT;
+                       }
                }
        ;
 
@@ -388,8 +413,10 @@
                        $$ = new_obj(ot_frame);
                        $$->base = $3;
                        $$->u.frame = find_frame($2);
-                       if (!$$->u.frame)
+                       if (!$$->u.frame) {
                                yyerrorf("unknown frame \"%s\"", $2);
+                               YYABORT;
+                       }
                }
        ;
 

Modified: developers/werner/fped/fped.c
===================================================================
--- developers/werner/fped/fped.c       2009-07-31 23:24:00 UTC (rev 5356)
+++ developers/werner/fped/fped.c       2009-08-01 00:56:58 UTC (rev 5357)
@@ -13,6 +13,7 @@
 
 
 #include "cpp.h"
+#include "error.h"
 #include "obj.h"
 #include "inst.h"
 #include "gui.h"
@@ -24,6 +25,7 @@
 static void load_file(const char *name)
 {
        run_cpp_on_file(name);
+       reporter = report_parse_error;
        (void) yyparse();
 }
 
@@ -40,6 +42,7 @@
                argc--;
                argv++;
        }
+       reporter = report_to_stderr;
        if (!instantiate())
                return 1;
 //     inst_debug();

Modified: developers/werner/fped/gui.c
===================================================================
--- developers/werner/fped/gui.c        2009-07-31 23:24:00 UTC (rev 5356)
+++ developers/werner/fped/gui.c        2009-08-01 00:56:58 UTC (rev 5357)
@@ -132,6 +132,28 @@
 }
 
 
+/* ----- value editor ------------------------------------------------------ */
+
+
+static void unselect_value(void *data)
+{
+       struct value *value = data;
+
+        label_in_box_bg(value->widget,
+           value->row && value->row->table && value->row->table->curr_row ==
+            value->row ? COLOR_CHOICE_SELECTED : COLOR_EXPR_PASSIVE);
+}
+
+
+static void edit_value(struct value *value)
+{
+       inst_select_outside(value, unselect_value);
+        label_in_box_bg(value->widget, COLOR_EXPR_EDITING);
+       edit_expr(&value->expr);
+}
+
+
+
 /* ----- assignments ------------------------------------------------------- */
 
 
@@ -146,6 +168,7 @@
 static gboolean assignment_value_select_event(GtkWidget *widget,
      GdkEventButton *event, gpointer data)
 {
+       edit_value(data);
        return TRUE;
 }
 
@@ -201,6 +224,7 @@
 static gboolean table_value_select_event(GtkWidget *widget,
      GdkEventButton *event, gpointer data)
 {
+       edit_value(data);
        return TRUE;
 }
 
@@ -271,7 +295,9 @@
 static gboolean loop_var_select_event(GtkWidget *widget,
      GdkEventButton *event, gpointer data)
 {
-       edit_var(data);
+       struct loop *loop = data;
+
+       edit_var(&loop->var);
        return TRUE;
 }
 
@@ -279,6 +305,9 @@
 static gboolean loop_from_select_event(GtkWidget *widget,
      GdkEventButton *event, gpointer data)
 {
+       struct loop *loop = data;
+
+       edit_value(&loop->from);
        return TRUE;
 }
 
@@ -286,6 +315,9 @@
 static gboolean loop_to_select_event(GtkWidget *widget,
      GdkEventButton *event, gpointer data)
 {
+       struct loop *loop = data;
+
+       edit_value(&loop->to);
        return TRUE;
 }
 
@@ -310,7 +342,7 @@
        gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(" = "),
            FALSE, FALSE, 0);
 
-       expr = unparse(loop->from);
+       expr = unparse(loop->from.expr);
        field = label_in_box_new(expr);
        free(expr);
        gtk_box_pack_start(GTK_BOX(hbox), box_of_label(field), FALSE, FALSE, 0);
@@ -318,11 +350,12 @@
        g_signal_connect(G_OBJECT(box_of_label(field)),
            "button_press_event",
            G_CALLBACK(loop_from_select_event), loop);
+       loop->from.widget = field;
 
        gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(" ... "),
            FALSE, FALSE, 0);
 
-       expr = unparse(loop->to);
+       expr = unparse(loop->to.expr);
        field = label_in_box_new(expr);
        free(expr);
        gtk_box_pack_start(GTK_BOX(hbox), box_of_label(field), FALSE, FALSE, 0);
@@ -330,6 +363,7 @@
        g_signal_connect(G_OBJECT(box_of_label(field)),
            "button_press_event",
            G_CALLBACK(loop_to_select_event), loop);
+       loop->to.widget = field;
 }
 
 

Modified: developers/werner/fped/gui_status.c
===================================================================
--- developers/werner/fped/gui_status.c 2009-07-31 23:24:00 UTC (rev 5356)
+++ developers/werner/fped/gui_status.c 2009-08-01 00:56:58 UTC (rev 5357)
@@ -219,16 +219,23 @@
 /* ----- expression fields ------------------------------------------------- */
 
 
+static struct expr *try_parse_expr(const char *s)
+{
+       status_begin_reporting();
+       return parse_expr(s);
+}
+
+
 static int expr_changed(GtkWidget *widget, const char *s, void *ctx)
 {
        struct expr *expr;
 
-       expr = parse_expr(s);
+       expr = try_parse_expr(s);
        if (!expr) {
                entry_color(COLOR_EDIT_BAD);
                return 0;
        }
-       entry_color(COLOR_EDIT_BAD);
+       entry_color(COLOR_EDIT_GOOD);
        free_expr(expr);
        return 1;
 }
@@ -239,7 +246,7 @@
        struct expr **anchor = ctx;
        struct expr *expr;
 
-       expr = parse_expr(s);
+       expr = try_parse_expr(s);
        if (!expr)
                return 0;
        free_expr(*anchor);
@@ -255,7 +262,7 @@
 };
 
 
-void edit_expression(struct expr **expr)
+void edit_expr(struct expr **expr)
 {
        char *s;
 

Modified: developers/werner/fped/gui_status.h
===================================================================
--- developers/werner/fped/gui_status.h 2009-07-31 23:24:00 UTC (rev 5356)
+++ developers/werner/fped/gui_status.h 2009-08-01 00:56:58 UTC (rev 5357)
@@ -23,7 +23,7 @@
 void edit_unique(const char **s, int (*validate)(const char *s, void *ctx),
     void *ctx);
 void edit_name(char **s, int (*validate)(const char *s, void *ctx), void *ctx);
-void edit_expression(struct expr **expr);
+void edit_expr(struct expr **expr);
 void edit_nothing(void);
 
 void status_set_name(const char *fmt, ...);

Modified: developers/werner/fped/obj.c
===================================================================
--- developers/werner/fped/obj.c        2009-07-31 23:24:00 UTC (rev 5356)
+++ developers/werner/fped/obj.c        2009-08-01 00:56:58 UTC (rev 5357)
@@ -127,24 +127,24 @@
 
        if (!loop)
                return generate_items(frame, base, active);
-       from = eval_num(loop->from, frame);
+       from = eval_num(loop->from.expr, frame);
        if (is_undef(from)) {
-               fail_expr(loop->from);
+               fail_expr(loop->from.expr);
                return 0;
        }
        if (!is_dimensionless(from)) {
                fail("incompatible type for start value");
-               fail_expr(loop->from);
+               fail_expr(loop->from.expr);
                return 0;
        }
-       to = eval_num(loop->to, frame);
+       to = eval_num(loop->to.expr, frame);
        if (is_undef(to)) {
-               fail_expr(loop->to);
+               fail_expr(loop->to.expr);
                return 0;
        }
        if (!is_dimensionless(to)) {
                fail("incompatible type for end value");
-               fail_expr(loop->to);
+               fail_expr(loop->to.expr);
                return 0;
        }
        n = 0;

Modified: developers/werner/fped/obj.h
===================================================================
--- developers/werner/fped/obj.h        2009-07-31 23:24:00 UTC (rev 5356)
+++ developers/werner/fped/obj.h        2009-08-01 00:56:58 UTC (rev 5357)
@@ -64,8 +64,8 @@
 
 struct loop {
        struct var var;
-       struct expr *from;
-       struct expr *to;
+       struct value from;
+       struct value to;
        struct loop *next;
 
        /* used during generation */

Modified: developers/werner/fped/util.c
===================================================================
--- developers/werner/fped/util.c       2009-07-31 23:24:00 UTC (rev 5356)
+++ developers/werner/fped/util.c       2009-08-01 00:56:58 UTC (rev 5357)
@@ -24,10 +24,13 @@
 
 char *stralloc_vprintf(const char *fmt, va_list ap)
 {
+       va_list aq;
        char *buf;
        int n;
 
-       n = snprintf(NULL, 0, fmt, ap);
+       va_copy(aq, ap);
+       n = snprintf(NULL, 0, fmt, aq);
+       va_end(aq);
        buf = alloc_size(n+1);
        vsnprintf(buf, n+1, fmt, ap);
        return buf;




--- End Message ---
_______________________________________________
commitlog mailing list
commitlog@lists.openmoko.org
http://lists.openmoko.org/mailman/listinfo/commitlog

Reply via email to