home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / elk-2_0.lha / elk-2.0 / lib / xaw / list.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-22  |  2.1 KB  |  73 lines

  1. #include "../xt/xt.h"
  2. #include <X11/Xaw/List.h>
  3.  
  4.  
  5. static char **Get_List (x) Object x; {
  6.     register i, n;
  7.     register char *s, **l;
  8.     Declare_C_Strings;
  9.  
  10.     Check_List (x);
  11.     n = Fast_Length (x);
  12.     l = (char **)XtMalloc ((n+1) * sizeof (char *));
  13.     for (i = 0; i < n; i++, x = Cdr (x)) {
  14.     Make_C_String (Car (x), s);
  15.     l[i] = XtNewString (s);
  16.     }
  17.     l[i] = 0;
  18.     Dispose_C_Strings;
  19.     return l;
  20. }
  21.  
  22. static Object S_List_Callback (x) XtArgVal x; {
  23.    XawListReturnStruct *p = (XawListReturnStruct *)x;
  24.     return Cons (Make_String (p->string, strlen (p->string)),
  25.     Make_Fixnum (p->list_index));
  26. }
  27.  
  28. static XtArgVal C_List_List (x) Object x; {
  29.    return (XtArgVal)Get_List (x);
  30. }
  31.  
  32. static Object P_List_Change (w, x, resize) Object w, x, resize; {
  33.    Check_Widget_Class (w, listWidgetClass);
  34.     Check_Type (resize, T_Boolean);
  35.     XawListChange (WIDGET(w)->widget, Get_List (x), 0, 0, EQ (resize, True));
  36.     return Void;
  37. }
  38.  
  39. static Object P_List_Highlight (w, i) Object w, i; {
  40.    Check_Widget_Class (w, listWidgetClass);
  41.     XawListHighlight (WIDGET(w)->widget, Get_Integer (i));
  42.     return Void;
  43. }
  44.  
  45. static Object P_List_Unhighlight (w) Object w; {
  46.    Check_Widget_Class (w, listWidgetClass);
  47.     XawListUnhighlight (WIDGET(w)->widget);
  48.     return Void;
  49. }
  50.  
  51. static Object P_List_Current (w) Object w; {
  52.    XawListReturnStruct *p;
  53.  
  54.     Check_Widget_Class (w, listWidgetClass);
  55.     p = XawListShowCurrent (WIDGET(w)->widget);
  56.     if (p->list_index == XAW_LIST_NONE)
  57.     return False;
  58.     return Cons (Make_String (p->string, strlen (p->string)),
  59.     Make_Fixnum (p->list_index));
  60. }
  61.  
  62. init_list () {
  63.     XtResourceList r = 0;
  64.     Define_Class ("list", listWidgetClass, r, 0);
  65.     Define_Callback ("list", "callback", 1);
  66.     Define_Primitive (P_List_Current, "list-current", 1, 1, EVAL);
  67.     Define_Primitive (P_List_Unhighlight, "list-unhighlight", 1, 1, EVAL);
  68.     Define_Primitive (P_List_Highlight, "list-highlight", 2, 2, EVAL);
  69.     Define_Primitive (P_List_Change, "list-change!", 3, 3, EVAL);
  70.     Define_Converter_To_C ("list-list", C_List_List);
  71.     Define_Converter_To_Scheme ("list-callback", S_List_Callback);
  72. }
  73.