Index: gui.c
===================================================================
--- gui.c	(revision 413)
+++ gui.c	(revision 414)
@@ -1396,6 +1396,22 @@
 return 0;
 }
 
+int raydium_gui_button_write(int window, int widget, char *str)
+{
+raydium_gui_Button *w;
+
+if(!raydium_gui_widget_isvalid(widget,window))
+    {
+    raydium_log("gui: error: cannot write widget value: invalid name or index");
+    return 0;
+    }
+
+w=raydium_gui_windows[window].widgets[widget].widget;
+strcpy(w->caption,str);
+return 1;
+}
+
+
 int raydium_gui_label_read(int window, int widget, char *str)
 {
 if(!raydium_gui_widget_isvalid(widget,window))
@@ -1408,6 +1424,22 @@
 return 0;
 }
 
+int raydium_gui_label_write(int window, int widget, char *str)
+{
+raydium_gui_Label *w;
+
+if(!raydium_gui_widget_isvalid(widget,window))
+    {
+    raydium_log("gui: error: cannot write widget value: invalid name or index");
+    return 0;
+    }
+
+w=raydium_gui_windows[window].widgets[widget].widget;
+strcpy(w->caption,str);
+return 1;
+}
+
+
 int raydium_gui_track_read(int window, int widget, char *str)
 {
 raydium_gui_Track *t;
@@ -1426,6 +1458,25 @@
 return t->current;
 }
 
+int raydium_gui_track_write(int window, int widget, int value)
+{
+raydium_gui_Track *w;
+
+if(!raydium_gui_widget_isvalid(widget,window))
+    {
+    raydium_log("gui: error: cannot write widget value: invalid name or index");
+    return 0;
+    }
+
+w=raydium_gui_windows[window].widgets[widget].widget;
+
+if(value<w->min || value>w->max)
+    return 0;
+
+w->current=value;
+return 1;
+}
+
 int raydium_gui_edit_read(int window, int widget, char *str)
 {
 raydium_gui_Edit *e;
@@ -1440,6 +1491,22 @@
 return strlen(e->text);
 }
 
+int raydium_gui_edit_write(int window, int widget, char *str)
+{
+raydium_gui_Edit *w;
+
+if(!raydium_gui_widget_isvalid(widget,window))
+    {
+    raydium_log("gui: error: cannot write widget value: invalid name or index");
+    return 0;
+    }
+
+w=raydium_gui_windows[window].widgets[widget].widget;
+strcpy(w->text,str);
+return 1;
+}
+
+
 int raydium_gui_check_read(int window, int widget, char *str)
 {
 raydium_gui_Check *c;
@@ -1454,6 +1521,22 @@
 return c->checked;
 }
 
+int raydium_gui_check_write(int window, int widget, int value)
+{
+raydium_gui_Check *w;
+
+if(!raydium_gui_widget_isvalid(widget,window))
+    {
+    raydium_log("gui: error: cannot write widget value: invalid name or index");
+    return 0;
+    }
+
+w=raydium_gui_windows[window].widgets[widget].widget;
+
+w->checked=(value?1:0);
+return 1;
+}
+
 int raydium_gui_combo_read(int window, int widget, char *str)
 {
 raydium_gui_Combo *c;
@@ -1468,6 +1551,21 @@
 return c->current;
 }
 
+int raydium_gui_combo_write(int window, int widget, int value)
+{
+raydium_gui_Combo *w;
+
+if(!raydium_gui_widget_isvalid(widget,window))
+    {
+    raydium_log("gui: error: cannot write widget value: invalid name or index");
+    return 0;
+    }
+
+w=raydium_gui_windows[window].widgets[widget].widget;
+w->current=value;
+return 1;
+}
+
 int raydium_gui_zone_read(int window, int widget, char *str)
 {
 raydium_gui_Zone *z;
@@ -2281,7 +2379,7 @@
     else 
 	raydium_log("gui: error: cannot read widget value: invalid name or index");
 
-return 0;    
+return 0;
 }
 
 int raydium_gui_read_name(char *window, char *widget, char *str)
@@ -2301,6 +2399,44 @@
 return raydium_gui_read(w->window,w->id,str);
 }
 
+
+signed char raydium_gui_write(int window, int widget, char *str, int value)
+{
+if(!raydium_gui_widget_isvalid(widget,window))
+    {
+    raydium_log("gui: error: cannot write widget value: invalid name or index");
+    return 0;
+    }
+
+switch(raydium_gui_windows[window].widgets[widget].type)
+{
+case RAYDIUM_GUI_BUTTON:
+    return raydium_gui_button_write(window,widget,str);
+case RAYDIUM_GUI_LABEL:
+    return raydium_gui_label_write(window,widget,str);
+case RAYDIUM_GUI_TRACK:
+    return raydium_gui_track_write(window,widget,value);
+case RAYDIUM_GUI_EDIT:
+    return raydium_gui_edit_write(window,widget,str);
+case RAYDIUM_GUI_CHECK:
+    return raydium_gui_check_write(window,widget,value);
+case RAYDIUM_GUI_COMBO:
+    return raydium_gui_combo_write(window,widget,value);
+//case RAYDIUM_GUI_ZONE:
+    // ...
+}
+
+return -1; // nothing was done
+}
+
+int raydium_gui_write_name(char *window, char *widget, char *str, int value)
+{
+int w;
+w=raydium_gui_window_find(window);
+return raydium_gui_write(w,raydium_gui_widget_find(widget,w),str,value);
+}
+
+
 int raydium_gui_button_clicked(void)
 {
 int ret;