First, imperfect version of the resource-conversion: scheme48<->XtResource. Some
additional work has to be done, e.g. the callback-converter code.
This commit is contained in:
		
							parent
							
								
									963be1ec84
								
							
						
					
					
						commit
						44d7ea81e6
					
				| 
						 | 
				
			
			@ -0,0 +1,373 @@
 | 
			
		|||
#include "xt.h"
 | 
			
		||||
 | 
			
		||||
/* needed in elk, also in s48? */
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* some additional macros */
 | 
			
		||||
#define   XtRChar              "Char"
 | 
			
		||||
#define   XtRGC                "GC"
 | 
			
		||||
#define   XtRBackingStore      "BackingStore"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* enumerated definition of the different res-types */
 | 
			
		||||
 | 
			
		||||
#define SCXT_Unknown            -1
 | 
			
		||||
#define SCXT_String             -2
 | 
			
		||||
#define SCXT_Callbacklist       -3
 | 
			
		||||
#define SCXT_Float              -4
 | 
			
		||||
#define SCXT_Backing_Store      -5
 | 
			
		||||
#define SCXT_Dimension          -6
 | 
			
		||||
#define SCXT_Translations       -7
 | 
			
		||||
#define SCXT_Position           -8
 | 
			
		||||
#define SCXT_Bitmap             -9
 | 
			
		||||
#define SCXT_Cardinal           -10
 | 
			
		||||
#define SCXT_Accelerators       -11
 | 
			
		||||
#define SCXT_Boolean            -12
 | 
			
		||||
#define SCXT_Colormap           -13
 | 
			
		||||
#define SCXT_Cursor             -14
 | 
			
		||||
#define SCXT_Display            -15
 | 
			
		||||
#define SCXT_Font               -16
 | 
			
		||||
#define SCXT_Gc                 -17
 | 
			
		||||
#define SCXT_Fixnum             -18
 | 
			
		||||
#define SCXT_Pixel              -19
 | 
			
		||||
#define SCXT_Pixmap             -20
 | 
			
		||||
#define SCXT_Character          -21
 | 
			
		||||
#define SCXT_Widget             -22
 | 
			
		||||
#define SCXT_Window             -23
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* scxt_I_Resource_To_Scheme_Type: */
 | 
			
		||||
 | 
			
		||||
static scxt_intern_Resource_To_Scheme_Type (char* t) {
 | 
			
		||||
  if (streq (XtRAcceleratorTable, t))
 | 
			
		||||
    return SCXT_Accelerators;
 | 
			
		||||
  else if (streq (XtRBackingStore, t))
 | 
			
		||||
    return SCXT_Backing_Store;
 | 
			
		||||
  else if (streq (XtRBitmap, t))
 | 
			
		||||
    return SCXT_Bitmap;
 | 
			
		||||
  else if (streq (XtRBoolean, t))
 | 
			
		||||
    return SCXT_Boolean;
 | 
			
		||||
  else if (streq (XtRCallback, t))
 | 
			
		||||
    return SCXT_Callbacklist;
 | 
			
		||||
  else if (streq (XtRCardinal, t))
 | 
			
		||||
    return SCXT_Cardinal;
 | 
			
		||||
  else if (streq (XtRColormap, t))
 | 
			
		||||
    return SCXT_Colormap;
 | 
			
		||||
  else if (streq (XtRCursor, t))
 | 
			
		||||
    return SCXT_Cursor;
 | 
			
		||||
  else if (streq (XtRDimension, t))
 | 
			
		||||
    return SCXT_Dimension;
 | 
			
		||||
  else if (streq (XtRDisplay, t))
 | 
			
		||||
    return SCXT_Display;
 | 
			
		||||
  else if (streq (XtRFloat, t))
 | 
			
		||||
    return SCXT_Float;
 | 
			
		||||
  else if (streq (XtRFont, t))
 | 
			
		||||
    return SCXT_Font;
 | 
			
		||||
  else if (streq (XtRFontStruct, t))
 | 
			
		||||
    return SCXT_Font;
 | 
			
		||||
  else if (streq (XtRGC, t))
 | 
			
		||||
    return SCXT_Gc;
 | 
			
		||||
  else if (streq (XtRInt, t))
 | 
			
		||||
    return SCXT_Fixnum;
 | 
			
		||||
  else if (streq (XtRPixel, t))
 | 
			
		||||
    return SCXT_Pixel;
 | 
			
		||||
  else if (streq (XtRPixmap, t))
 | 
			
		||||
    return SCXT_Pixmap;
 | 
			
		||||
  else if (streq (XtRPosition, t))
 | 
			
		||||
    return SCXT_Position;
 | 
			
		||||
  else if (streq (XtRShort, t))
 | 
			
		||||
    return SCXT_Fixnum;
 | 
			
		||||
  else if (streq (XtRString, t))
 | 
			
		||||
    return SCXT_String;
 | 
			
		||||
  else if (streq (XtRTranslationTable, t))
 | 
			
		||||
    return SCXT_Translations;
 | 
			
		||||
  else if (streq (XtRUnsignedChar, t))
 | 
			
		||||
    return SCXT_Character;
 | 
			
		||||
  else if (streq (XtRChar, t))
 | 
			
		||||
    return SCXT_Character;
 | 
			
		||||
  else if (streq (XtRWidget, t))
 | 
			
		||||
    return SCXT_Widget;
 | 
			
		||||
  else if (streq (XtRWindow, t))
 | 
			
		||||
    return SCXT_Window;
 | 
			
		||||
  return SCXT_Unknown;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
void scxt_intern_Get_All_Resources(int sub, Widget widget,
 | 
			
		||||
				   WidgetClass widgetc, XtResource** rp,
 | 
			
		||||
				   int* np, int* cp){
 | 
			
		||||
  XtResource *r, *sr, *cr;
 | 
			
		||||
  int nr, snr = 0, cnr = 0;
 | 
			
		||||
  XtGetResourceList(widgetc, &r, (Cardinal*)&nr);
 | 
			
		||||
  if (sub)
 | 
			
		||||
    scxt_intern_Get_Sub_Resource_List(widgetc, &sr, (Cardinal*)&snr);
 | 
			
		||||
  if (XtParent(widget))
 | 
			
		||||
    XtGetConstraintResourceList(XtClass(XtParent(widget)), &cr,
 | 
			
		||||
				(Cardinal*)&cnr);
 | 
			
		||||
  *np = nr + snr + cnr;
 | 
			
		||||
  *cp = cnr;
 | 
			
		||||
  XfFree((char*)r);
 | 
			
		||||
  if (snr)
 | 
			
		||||
    bcopy((char*)sr, (char*)(*rp + nr), snr * sizeof (XtResource));
 | 
			
		||||
  if (cnr) {
 | 
			
		||||
    bcopy ((char*)cr, (char*)(*rp+nr+snr), cnr * sizeof (XtResource));
 | 
			
		||||
    XtFree((char*)cr);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
/* scxt_intern_Convert_Args converts scheme-values (arg_list) in their */
 | 
			
		||||
/* corresponding XResource-values (dest_list) */
 | 
			
		||||
 | 
			
		||||
void scxt_intern_Convert_Args (s48_value arg_list, Widget widget, int alist_len,
 | 
			
		||||
		   WidgetClass class, ArgList dest_list) {
 | 
			
		||||
  char* name, stmp;
 | 
			
		||||
  int i, j, k;
 | 
			
		||||
  s48_value val;
 | 
			
		||||
  XtResource* all_res;
 | 
			
		||||
  int n_res, n_con;
 | 
			
		||||
  int res_type;
 | 
			
		||||
  char key[128];
 | 
			
		||||
  XrmValue src, dst;
 | 
			
		||||
  /* Getting the resource data-base for the given widget: */
 | 
			
		||||
  S48_DECLARE_GC_PROTECT(2); 
 | 
			
		||||
  S48_GC_PROTECT_2(arg_list, val);
 | 
			
		||||
  scxt_intern_Get_All_Resources(1, widget, class, &all_res, &n_res, &n_con);
 | 
			
		||||
  for (i = k = 0; k < alist_len; i++, k++){
 | 
			
		||||
    /* take the next scheme-argument to convert: */
 | 
			
		||||
    name = s48_extract_string(S48_CAR(arg_list));
 | 
			
		||||
    arg_list = S48_CDR(arg_list);
 | 
			
		||||
    for( j = 0; j < n_res && !sreq(name, all_res[j].resource_name); j++)
 | 
			
		||||
      ;
 | 
			
		||||
    if(j == n_res){
 | 
			
		||||
      /* XtFree((char*)all_res); ?*/
 | 
			
		||||
      s48_raise_scheme_exception(S48_EXCEPTION_BAD_PROCEDURE, 0);
 | 
			
		||||
    }
 | 
			
		||||
    if(streq(all_res[j].resource_class, XtCReadOnly)){
 | 
			
		||||
      /*XtFree((char*)all_res); ?*/
 | 
			
		||||
      s48_raise_scheme_exception(S48_EXCEPTION_BAD_PROCEDURE, 0);
 | 
			
		||||
    }
 | 
			
		||||
    val = S48_CAR(arg_list);
 | 
			
		||||
    arg_list = S48_CDR(arg_list);
 | 
			
		||||
    res_type = scxt_intern_Resource_To_Scheme_Type(all_res[j].resource_type);
 | 
			
		||||
    if (j >= n_res - n_con)
 | 
			
		||||
      class = XtClass (XtParent(widget));
 | 
			
		||||
    /* todo: widget class specific converters... */
 | 
			
		||||
    
 | 
			
		||||
    if(res_type == SCXT_String){
 | 
			
		||||
      XtSetArg(dest_list[i], name, XtNewString(s48_extract_string(val)));
 | 
			
		||||
    }else if (res_type == SCXT_Callbacklist){
 | 
			
		||||
      /* todo: callback converter */
 | 
			
		||||
      ;
 | 
			
		||||
    }else if (res_type == SCXT_Float){
 | 
			
		||||
      XtSetArg(dest_list[i], name, (s48_extract_double(val)));
 | 
			
		||||
    }else if (res_type == SCXT_Dimension || res_type == SCXT_Position 
 | 
			
		||||
	      || res_type == SCXT_Cardinal || SCXT_Fixnum) {
 | 
			
		||||
      XtSetArg(dest_list[i], name, (int)s48_extract_integer(val));
 | 
			
		||||
    }else if (res_type == SCXT_Backing_Store) {
 | 
			
		||||
      XtSetArg(dest_list[i], name, s48_extract_integer(val));
 | 
			
		||||
    }else if (res_type == SCXT_Translations){
 | 
			
		||||
      XtSetArg(dest_list[i], name, scxt_intern_Get_Translations(val));
 | 
			
		||||
    }else if (res_type == SCXT_Accelerators){
 | 
			
		||||
      XtSetArg(dest_list[i], name, scxt_intern_Get_Accelerators(val));
 | 
			
		||||
    }else if (res_type == SCXT_Bitmap || res_type == SCXT_Pixmap){
 | 
			
		||||
      /* could also be a pointer, needs a better implementation*/
 | 
			
		||||
      stmp = s48_extract_string(S48_SYMBOL_TO_STRING(val));
 | 
			
		||||
      if (streq (None, stmp))
 | 
			
		||||
	XtSetArg(dest_list[i], name, None);
 | 
			
		||||
    } else if (res_type == SCXT_Bitmap){
 | 
			
		||||
      XtSetArg(dest_list[i], name, SCX_EXTRACT_PIXMAP(val));
 | 
			
		||||
    } else if (res_type == SCXT_Boolean){
 | 
			
		||||
      XtSetArg(dest_list[i], name, S48_EXTRACT_BOOLEAN(val));
 | 
			
		||||
    } else if (res_type == SCXT_Colormap){
 | 
			
		||||
      XtSetArg(dest_list[i], name, SCX_EXTRACT_COLORMAP(val));
 | 
			
		||||
    } else if (res_type == SCXT_Cursor){
 | 
			
		||||
      XtSetArg(dest_list[i], name, SCX_EXTRACT_CURSOR(val));
 | 
			
		||||
    } else if (res_type == SCXT_Display){
 | 
			
		||||
      XtSetArg(dest_list[i], name, SCX_EXTRACT_DISPLAY(val));
 | 
			
		||||
    } else if (res_type == SCXT_Font){
 | 
			
		||||
      XtSetArg(dest_list[i], name, SCX_EXTRACT_FONT(val));
 | 
			
		||||
    } else if (res_type == SCXT_Pixel) {
 | 
			
		||||
      XtSetArg(dest_list[i], name, SCX_EXTRACT_PIXEL(val));
 | 
			
		||||
    } else if (res_type == SCXT_Pixmap) {
 | 
			
		||||
      XtSetArg(dest_list[i], name, SCX_EXTRACT_PIXMAP(val));
 | 
			
		||||
    } else if (res_type == SCXT_Gc) {
 | 
			
		||||
      XtSetArg(dest_list[i], name, SCX_EXTRACT_GCONTEXT(val));
 | 
			
		||||
    } else if (res_type == SCXT_Character) {
 | 
			
		||||
      XtSetArg(dest_list[i], name, s48_extract_char(val));
 | 
			
		||||
    } else if (res_type == SCXT_Widget) {
 | 
			
		||||
      XtSetArg(dest_list[i], name, SCXT_EXTRACT_WIDGET(val));
 | 
			
		||||
    } else if (res_type == SCXT_Window) {
 | 
			
		||||
      XtSetArg(dest_list[i], name, SCXT_EXTACT_WINDOW(val));
 | 
			
		||||
      /* Try XtConvert if no matching type is found: */
 | 
			
		||||
    } else if (S48_STRING_P(val) || S48_SYMBOL_P(val)) {
 | 
			
		||||
      if (S48_SYMBOL_P(val)) {
 | 
			
		||||
	stmp = s48_extract_string(S48_SYMBOL_TO_STRING(val));
 | 
			
		||||
      } else {
 | 
			
		||||
	stmp = s48_extract_string(val);
 | 
			
		||||
      }
 | 
			
		||||
      /* addr: XPointer */
 | 
			
		||||
      /* size: unsigned int */
 | 
			
		||||
      src.size = strlen(stmp);
 | 
			
		||||
      src.addr = &stmp;
 | 
			
		||||
      XtConvert (widget, (String)XtRString, &src, all_res[j].resource_type, 
 | 
			
		||||
		 &dst);
 | 
			
		||||
      if(dst.addr) {
 | 
			
		||||
	if (dst.size == (sizeof (unsigned char))) {
 | 
			
		||||
	  XtSetArg (dest_list[i], name, *(unsigned char*)dst.addr);
 | 
			
		||||
	} else if (dst.size == sizeof (int)) {
 | 
			
		||||
	  XtSetArg (dest_list[i], name, *(int*)dst.addr);
 | 
			
		||||
	} else if (dst.size == sizeof (XtArgVal)) {
 | 
			
		||||
	  XtSetArg (dest_list[i], name, *(XtArgVal*)dst.addr);
 | 
			
		||||
	}
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      s48_raise_scheme_exception(S48_EXCEPTION_BAD_PROCEDURE, 0); 
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  /* now it's save to free all_res: */
 | 
			
		||||
  XtFree((char*)all_res);
 | 
			
		||||
  S48_GC_UNPROTECT();
 | 
			
		||||
  S48_GC_UNPROTECT();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* scxt_intern_Get_Values: */
 | 
			
		||||
/* converts the requested values to a list consisting of the scheme-representation */
 | 
			
		||||
/* and a type-flag, e.g. '(-2 "hello world" -12 #f)  */
 | 
			
		||||
 | 
			
		||||
s48_value scxt_intern_Get_Values(Widget widget, s48_value arg_list, int n_args){
 | 
			
		||||
  char* name;
 | 
			
		||||
  int i, j, n_res, n_con, type;
 | 
			
		||||
  XtResource* res;
 | 
			
		||||
  ArgList alist; 
 | 
			
		||||
  XtArgVal val;
 | 
			
		||||
  s48_value res_list, s_res;
 | 
			
		||||
  Display* dpy;
 | 
			
		||||
  S48_DECLARE_GC_PROTECT(2);
 | 
			
		||||
  S48_GC_PROTECT_2(res_list, s_res);
 | 
			
		||||
  res_list = S48_NULL;
 | 
			
		||||
  s_res = S48_NULL;
 | 
			
		||||
 | 
			
		||||
  Get_All_Resources(0, widget, XtClass(widget), &res, &n_res, &n_con);
 | 
			
		||||
  
 | 
			
		||||
  for(i=0; i < n_args; i++) {
 | 
			
		||||
    XtArgVal argval;
 | 
			
		||||
    name = s48_extract_string(S48_CAR(arg_list));
 | 
			
		||||
    arg_list = S48_CDR(arg_list);
 | 
			
		||||
 | 
			
		||||
    for (j = 0; j < n_res && !streq (name, res[j].resource_name); j++)
 | 
			
		||||
      ;
 | 
			
		||||
    if (j == n_res)
 | 
			
		||||
      s48_raise_scheme_exception(S48_EXCEPTION_BAD_PROCEDURE, 0);
 | 
			
		||||
    alist[i].name = name;
 | 
			
		||||
    alist[i].value = argval;
 | 
			
		||||
  }
 | 
			
		||||
  XtGetValues(widget, alist, (Cardinal)n_args);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
  /*  Display is needed for resources like cursor and pixmap. */
 | 
			
		||||
  /*  XtDisplayOfObject(w) is not necessarily the right one! */
 | 
			
		||||
  dpy = XtDisplayOfObject(widget);
 | 
			
		||||
  for(i=0; i < n_args; i++) {
 | 
			
		||||
    val = alist[i].value;
 | 
			
		||||
    for (j=0; j < n_res && !streq (alist[i].name, res[j].resource_name); j++)
 | 
			
		||||
      ;
 | 
			
		||||
    type = scxt_intern_Resource_To_Scheme_Type (res[j].resource_type);
 | 
			
		||||
    /* todo: converters */
 | 
			
		||||
    if (type == SCXT_String) {
 | 
			
		||||
      s_res = s48_enter_string(*(char**)val);
 | 
			
		||||
    } else if (type == SCXT_Callbacklist) {
 | 
			
		||||
      ; /* todo: callbacklist-converters */
 | 
			
		||||
    } else if (type == SCXT_Float) {
 | 
			
		||||
      s_res = s48_enter_double((double)*(float *)val);
 | 
			
		||||
    } else if (type == SCXT_Backing_Store) {
 | 
			
		||||
      s_res = s48_enter_integer((unsigned long)*(int*)val);
 | 
			
		||||
    } else if (type == SCXT_Boolean) {
 | 
			
		||||
      s_res = S48_ENTER_BOOLEAN(*(int*)val);
 | 
			
		||||
    } else if (type == SCXT_Colormap) {
 | 
			
		||||
      s_res = s48_cons(SCX_ENTER_COLORMAP(*(Colormap*)val),
 | 
			
		||||
		       SCX_ENTER_DISPLAY(dpy));
 | 
			
		||||
    } else if (type == SCXT_Cursor) {
 | 
			
		||||
      s_res = s48_cons(SCX_ENTER_CURSOR(*(Cursor*)val),
 | 
			
		||||
		       SCX_ENTER_DISPLAY(dpy));
 | 
			
		||||
    } else if (type == SCXT_Gc) {
 | 
			
		||||
      s_res = s48_cons(SCX_ENTER_GCONTEXT(*(GC*)val),
 | 
			
		||||
		       SCX_ENTER_DISPLAY(dpy));
 | 
			
		||||
    } else if (type == SCXT_Dimension) {
 | 
			
		||||
      s_res = s48_enter_integer(*(Dimension*)val);
 | 
			
		||||
    } else if (type == SCXT_Position) {
 | 
			
		||||
      s_res = s48_enter_integer(*(Position*)val);
 | 
			
		||||
    } else if (type == SCXT_Cardinal) {
 | 
			
		||||
      s_res = s48_enter_integer(*(Cardinal*)val);
 | 
			
		||||
    } else if (type == SCXT_Fixnum) {
 | 
			
		||||
      if (streq (res[j].resource_type, XtRInt))
 | 
			
		||||
	s_res = s48_enter_integer(*(int*)val);
 | 
			
		||||
      else
 | 
			
		||||
	s_res = e48_enter_integer(*(short*)val);
 | 
			
		||||
    } else if (type == SCXT_Display) {
 | 
			
		||||
      s_res = SCX_ENTER_DISPLAY(dpy);
 | 
			
		||||
    } else if (type == SCXT_Font) {
 | 
			
		||||
      if (streq(res[j].resource_type, XtRFontStruct)) {
 | 
			
		||||
	s_res = s48_cons(SCX_ENTER_FONTSTRUCT(*(XFontStruct*)val),
 | 
			
		||||
			 s48_cons(S48_TRUE,
 | 
			
		||||
				  S48_ENTER_DISPLAY(dpy)));
 | 
			
		||||
      } else {
 | 
			
		||||
	s_res = s48_cons(SCX_ENTER_FONT(*(Font*)val),
 | 
			
		||||
			 s48_cons(S48_FALSE,
 | 
			
		||||
				  S48_ENTER_DISPLAY(dpy)));
 | 
			
		||||
      }
 | 
			
		||||
    } else if (type == SCXT_Pixel) {
 | 
			
		||||
      s_res = SCX_ENTER_PIXEL(*(unsigned long*)val);
 | 
			
		||||
    } else if (type == SCXT_Pixmap || type == SCXT_Bitmap) {
 | 
			
		||||
      s_res = s48_cons(SCX_ENTER_PIXMAP(*(Pixmap*)val),
 | 
			
		||||
		       SCX_ENTER_DISPLAY(dpy));
 | 
			
		||||
    } else if (type == SCXT_Character){
 | 
			
		||||
      s_res = s48_enter_char(*(unsigned char*)val);
 | 
			
		||||
    } else if (type == SCXT_Widget) {
 | 
			
		||||
      s_res = SCXT_ENTER_WIDGET(*(Widget *)val);
 | 
			
		||||
    } else if (type == SCXT_Window) {
 | 
			
		||||
      s_res = s48_cons(SCX_ENTER_WINDOW(*(Window*)val),
 | 
			
		||||
		       SCX_ENTER_DISPLAY(dpy));
 | 
			
		||||
    } else {
 | 
			
		||||
      s48_raise_scheme_exception(S48_EXCEPTION_BAD_PROCEDURE, 0);
 | 
			
		||||
    }
 | 
			
		||||
    res_list = s48_cons(s_res, res_list);
 | 
			
		||||
    res_list = s48_cons(s48_enter_integer((long)type), res_list);
 | 
			
		||||
  }
 | 
			
		||||
  XtFree((char*)res);
 | 
			
		||||
  S48_GC_UNPROTECT();
 | 
			
		||||
  S48_GC_UNPROTECT();
 | 
			
		||||
  return res_list;
 | 
			
		||||
}
 | 
			
		||||
    
 | 
			
		||||
/* scxt_intern_Get_Resources */  
 | 
			
		||||
/* fun is one of the follow: XtGetResourceList(), XtGetConstrainedR..*/
 | 
			
		||||
/* and scxt_intern_Get_Sub_Resource_List() */
 | 
			
		||||
 | 
			
		||||
s48_value scxt_intern_Get_Resources (WidgetClass c, void (*fun)(),
 | 
			
		||||
				     char flag) {
 | 
			
		||||
  XtResource * xres, p;
 | 
			
		||||
  int n_res, i;
 | 
			
		||||
  s48_value res_list, strg_list;
 | 
			
		||||
  S48_DECLARE_GC_PROTECT(2);
 | 
			
		||||
  S48_GC_PROTECT_2(res_list, strg_list);
 | 
			
		||||
  strg_list = S48_NULL;
 | 
			
		||||
  res_list = S48_NULL;  
 | 
			
		||||
  
 | 
			
		||||
  fun(c, &xres, &n_res);
 | 
			
		||||
  for (i=0; i<n_res; i++) {
 | 
			
		||||
    strg_list = s48_cons(s48_enter_string(xres[i].resource_type), strg_list);
 | 
			
		||||
    strg_list = s48_cons(s48_enter_string(xres[i].resource_class), strg_list);
 | 
			
		||||
    strg_list = s48_cons(s48_enter_string(xres[i].resource_name), strg_list);
 | 
			
		||||
    res_list = s48_cons(strg_list, res_list);
 | 
			
		||||
  }
 | 
			
		||||
  if (flag) XtFree((char*)xres);
 | 
			
		||||
  S48_GC_UNPROTECT();
 | 
			
		||||
  S48_GC_UNPROTECT();
 | 
			
		||||
  return res_list; 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue