Esempio n. 1
0
static LObject *
lisp_string_append (LObject *args)
{
  LObject *obj = lipa_new_string ();

  L_STRING(obj) = _append (args, L_STRING(obj));
  return obj;
}
Esempio n. 2
0
LObject *
lisp_string_equalp (LObject *args)
{
  if (!lipa_list_length (args, 2))
    {
      fputs ("string=? wants 2 arguments\n", stderr);
      return NULL;
    }
  if (!(STRINGP (lipa_car (args)) && STRINGP (lipa_car (lipa_cdr (args)))))
    {
      fputs ("string=? want string arguments\n", stderr);
      return NULL;
    }

  return (strcmp (L_STRING (lipa_car (args))->str, 
		  L_STRING (lipa_car (lipa_cdr (args)))->str) ? 
	  lisp_false : lisp_true);
}
Esempio n. 3
0
LObject *
lisp_string_smaller_thanp (LObject *args)
{
  if (!lipa_list_length (args, 2))
    {
      fputs ("string<? wants 2 arguments\n", stderr);
      return NULL;
    }
  if (!STRINGP (lipa_car (args)) || !STRINGP (lipa_car (lipa_cdr (args))))
    {
      fputs ("string<? wants string arguments\n", stderr);
      return NULL;
    }

  return ((strcmp (L_STRING (lipa_car (args))->str, 
		   L_STRING (lipa_car (lipa_cdr (args)))->str) < 0) ? 
	  lisp_true : lisp_false);
}
Esempio n. 4
0
LObject *
lisp_string_greater_than_or_equalp_ci (LObject *args)
{
  if (!lipa_list_length (args, 2))
    {
      fputs ("string-ci>=? wants 2 arguments\n", stderr);
      return NULL;
    }
  if (!STRINGP (lipa_car (args)) || !STRINGP (lipa_car (lipa_cdr (args))))
    {
      fputs ("string-ci>=? wants string arguments\n", stderr);
      return NULL;
    }

  return ((strcasecmp (L_STRING (lipa_car (args))->str, 
		   L_STRING (lipa_car (lipa_cdr (args)))->str) >= 0) ? 
	  lisp_true : lisp_false);
}
Esempio n. 5
0
LObject *
lipa_new_symbolname ()
{
  LObject *obj = g_new0 (LObject, 1);
  
  obj->type = L_OBJ_SYMBOLNAME;
  L_STRING(obj) = g_string_new ("");

  return obj;
}
Esempio n. 6
0
LObject *
lipa_new_string ()
{
  LObject *obj = g_new0 (LObject, 1);

  obj->type = L_OBJ_STRING;
  L_STRING (obj) = g_string_new ("");

  return obj;
}
Esempio n. 7
0
/* _from_state:
 */
static LObject *_from_state ( LObjectClass *cls,
                              LObject *state )
{
  LObject *nspec;
  ASSERT(L_IS_TUPLE(state));
  ASSERT(L_TUPLE_SIZE(state) == 1);
  nspec = l_object_new(cls, NULL);
  LPT_NSPEC(nspec)->name = g_strdup(L_STRING(L_TUPLE_ITEM(state, 0))->str);
  return nspec;
}
Esempio n. 8
0
static LObject *
lisp_display (LObject *args)
{
  while (!lipa_null(args))
    {
      fputs (L_STRING(lipa_car (args))->str, stdout);
      args = lipa_cdr (args);
    }

  return NULL;
}
Esempio n. 9
0
LObject *
lisp_substring (LObject *args)
{
  char *str;

  LObject *obj = lipa_new_string ("");
  gint x, y, i;
  
  if (!lipa_list_length (args, 3))
    {
      fputs ("substring wants 3 arguments\n", stderr);
      return NULL;
    }
  if (!STRINGP (lipa_car (args)) || !INTP (lipa_car (lipa_cdr (args))) ||
      !INTP (lipa_car (lipa_cdr (lipa_cdr (args)))))
    {
      fputs ("substring wants 1 string and 2 ints as arguments\n", stderr);
      return NULL;
    }
  
  x = L_INT (lipa_car (lipa_cdr (args)));
  y = L_INT (lipa_car (lipa_cdr (lipa_cdr (args))));
  
  if ((x < 0) || (y > strlen (L_STRING (lipa_car (args))->str)) || (x >= y))
    {
      fputs ("substring: int arguments out of range\n", stderr);
      return NULL;
    }

  str = strdup (L_STRING (lipa_car (args))->str);
  
  for (i = x; i < y; i++)
    {
      g_string_append_c (L_STRING (obj), str[i]);
    }
  
  return obj;
}
Esempio n. 10
0
/* _set_property:
 */
static void _set_property ( LObject *object,
                            LParamSpec *pspec,
                            LObject *value )
{
  switch (pspec->param_id)
    {
    case PROP_NAME:
      ASSERT(L_IS_STRING(value)); /* [removeme] */
      altk_widget_set_name(ALTK_WIDGET(object),
                           L_STRING(value)->str);
      break;
    default:
      ASSERT(0);
    }
}
Esempio n. 11
0
File: eval.c Progetto: skagedal/lipa
static LObject *
special_form_define (LObject *args)
{
  if (!lipa_list_length (args, 2))
    {
      fputs ("error!! wrong number of arguments to define. ", stderr);
      return NULL;
    }
  else
    {
      LObject *todefine = lipa_car (args);
      LObject *defineto = lipa_car (lipa_cdr (args));

      if (todefine->type == L_OBJ_SYMBOLNAME)
	{
	  return lipa_define (L_STRING (todefine)->str,
			      lipa_eval (defineto));
	}
      else if (todefine->type == L_OBJ_LIST)
	{
	  LObject *symname = lipa_car (todefine);
	  LObject *args = lipa_cdr (todefine);

	  LObject *fun = lipa_new_function_lambda (args, defineto);

	  return lipa_define (L_STRING (symname)->str,
			 fun);
	}
      else
	{
	  fputs ("first argument to define should be a symbolname\n",
		 stderr);
	  return NULL;
	}
    }
}
Esempio n. 12
0
static LObject *
lisp_string_length (LObject *args)
{
  LObject *obj = lipa_new_int (0);

  if (!lipa_list_length (args, 1))
    {
      fputs ("string-length wants 1 argument\n", stderr);
      return NULL;
    }
  if (!STRINGP (lipa_car (args)))
    {
      fputs ("string-length wants a string argument\n", stderr);
      return NULL;
    }

  L_INT (obj) = strlen (L_STRING (lipa_car (args))->str);

  return obj;
}
Esempio n. 13
0
static GString *
_append (LObject *args, GString *str)
{
  if (!lipa_null (args))
    {
      LObject *obj = lipa_car (args);
      if (obj->type == L_OBJ_STRING)
	{
	  return g_string_prepend (_append (lipa_cdr (args), str),
				   L_STRING(obj)->str);
	}
      else
	{
	  fprintf (stderr, "append can only take string arguments");
	}
    }
  else
    return str;

  return NULL;
}
Esempio n. 14
0
File: eval.c Progetto: skagedal/lipa
static LObject *
eval_special_form (LObject *obj, LObject *args, gboolean *found)
{
  *found = TRUE;
  if (obj->type == L_OBJ_SYMBOLNAME)
    {
      gchar *name = L_STRING(obj)->str;
      if (!strcmp (name, "define"))
	{
	  return special_form_define (args);
	}
      else if (!strcmp (name, "if"))
	{
	  return special_form_if (args);
	}
      else if (!strcmp (name, "lambda"))
	{
	  return special_form_lambda (args);
	}
      else if (!strcmp (name, "quote"))
	{
	  return special_form_quote (args);
	}
      else if (!strcmp (name, "and"))
	{
	  return special_form_and (args);
	}
      else if (!strcmp (name, "or"))
	{
	  return special_form_or (args);
	}
      else if (!strcmp (name, "begin"))
	{
	  return special_form_begin (args);
	}
    }

  *found = FALSE;
  return NULL;
}
Esempio n. 15
0
File: eval.c Progetto: skagedal/lipa
LObject *
lipa_apply_func (LObject *function, LObject *args)
{
#if 0
  LObject *args2 = args;
#endif

  /* this is no good - you gotta be able to do (null? '())...  but
   * there sure are problems with the nil handling.  currently, nil
   * and void are the same thing, NULL...  which is bad.  maybe nil
   * should be a special type just like L_TRUE and L_FALSE...  I
   * dunno..  - Simon */
  
#if 0  
  while (args2)
    {
      if (!(lipa_car (args2)))
	{
	  fprintf (stderr, "Nailed your ass!!!  No coredump here.\n");
	  return NULL;
	}
      else if (!lipa_cdr (args2))
	break;
      else
	args2 = lipa_cdr (args2);
    }
#endif

  if (L_FUNCTION (function).functype == L_FUNC_SUBR && 
      L_FUNCTION (function).subr)
    return ((L_FUNCTION (function).subr) (args));
  else if (L_FUNCTION (function).functype == L_FUNC_LAMBDA)
    {
      LObject *fargs = L_FUNCTION (function).arguments;
      LObject *pushed_symbols = NULL;
      LObject *body_ret = NULL;
      
      /* push arguments on symbols list */
      while (!lipa_null (fargs))
	{
	  gchar *name;
	  LObject *sym;

	  if (lipa_null (args))
	    {
	      fputs ("too few arguments! lamer!\n", stderr);
	      return NULL;
	    }

	  name = L_STRING (lipa_car (fargs))->str;
	  sym = lipa_new_symbol (name, lipa_car (args));
	  
	  pushed_symbols = lipa_cons (sym, pushed_symbols);
	  lipa_register_symbol (sym);

	  args = lipa_cdr (args);
	  fargs = lipa_cdr (fargs);
	}

      /* evaluate body */

      body_ret = lipa_eval (L_FUNCTION (function).body);

      /* remove arguments from symbols list */

      while (!lipa_null (pushed_symbols))
	{
	  lipa_unregister_symbol (lipa_car (pushed_symbols));
	  pushed_symbols = lipa_cdr (pushed_symbols);
	}

      return body_ret;
    }
  else
    {
      fputs ("This is a function from outer space.\n", stderr);
      return NULL;
    }

  return NULL;
}