home *** CD-ROM | disk | FTP | other *** search
- #include "../xt/xt.h"
- #include <X11/Xaw/StripChart.h>
-
- static void Get_Value (w, client_data, value) Widget w;
- XtPointer client_data; XtPointer value; {
- Object ret;
-
- ret = Funcall (Get_Function ((int)client_data), Null, 0);
- switch (TYPE(ret)) {
- case T_Fixnum: *(double *)value = (double)FIXNUM(ret); break;
- case T_Flonum: *(double *)value = FLONUM(ret)->val; break;
- case T_Bignum: *(double *)value = Bignum_To_Double (ret); break;
- default: Primitive_Error ("stripchart sampler must return number");
- }
- }
-
- static Object P_Stripchart_Set_Sampler (w, p) Object w, p; {
- int i;
- Arg a[1];
- XtCallbackList c;
-
- Check_Widget_Class (w, stripChartWidgetClass);
- Check_Procedure (p);
- XtSetArg (a[0], XtNgetValue, &c);
- XtGetValues (WIDGET(w)->widget, a, 1);
- if (c[0].callback)
- Primitive_Error ("stripchart already has a sampler");
- i = Register_Function (p);
- XtAddCallback (WIDGET(w)->widget, XtNgetValue, Get_Value, (XtPointer)i);
- return Make_Id ('s', (XtPointer)WIDGET(w)->widget, i);
- }
-
- static Object P_Stripchart_Remove_Sampler (i) Object i; {
- Widget w;
-
- w = (Widget)Use_Id (i, 's');
- XtRemoveCallback (w, XtNgetValue, Get_Value,
- (XtPointer)IDENTIFIER(i)->num);
- Deregister_Function (IDENTIFIER(i)->num);
- return Void;
- }
-
- init_stripchart () {
- XtResourceList r = 0;
- Define_Class ("stripchart", stripChartWidgetClass, r, 0);
- Define_Primitive (P_Stripchart_Remove_Sampler, "stripchart-remove-sampler", 1, 1, EVAL);
- Define_Primitive (P_Stripchart_Set_Sampler, "stripchart-set-sampler", 2, 2, EVAL);
- }
-