This is utils.c in view mode; [Download] [Up]
#include "include.h"
/* The functions IisProp check the property holds, and return the
argument. They may in future allow resetting the argument.
*/
object CEerror();
object
IisSymbol(f)
object f;
{ if (type_of(f) != t_symbol)
{ FEerror("Not a symbol ~s",1,f); }
return f;
}
object
IisFboundp(f)
object f;
{
IisSymbol(f);
if (f->s.s_gfdef ==0)
{ FEerror("Not a fboundp ~s",1,f);}
return f;
}
object
IisArray(f)
object f;
{ if (TS_MEMBER(type_of(f),
TS(t_array)
|TS(t_vector)
|TS(t_bitvector)
|TS(t_string)))
return f;
else
{ FEerror("Not an array ~s",1,f); return f;
}
}
object
Iis_fixnum(f)
object f;
{ if (type_of(f)==t_fixnum)
{ return f;}
else
{ FEerror("Not a fixnum ~s",1,f); return f;
}
}
void Wrong_type_error(str,n,va_alist)
char *str;
int n;
va_dcl
{ FEerror("Wrong type error",0);
}
object
Iapply_ap(f,ap)
/* Apply f to the va_list ap, with an implicit number of args
passed in VFUN_NARGS */
va_list ap;
object (*f)();
{ int n = VFUN_NARGS;
object *new;
COERCE_VA_LIST(new,ap,n);
return c_apply_n(f,n,ap);
}
object
Ifuncall_n(fun,n,va_alist)
/* call fun on the n optional args supplied, and set the fcall.nvalues etc
return the first value */
object fun;
int n;
va_dcl
{va_list ap;
object *new;
va_start(ap);
{COERCE_VA_LIST(new,ap,n);
return IapplyVector(fun,n,new);
va_end(ap);
}
}
/* For applying FUN to args in VA_LIST, where n are supplied directly
and the last one is itself a va_list */
object
Iapply_fun_n(fun,n,m,va_alist)
object fun;
int n,m;
va_dcl
{va_list ap1,ap;
object b[F_ARG_LIMIT];
int i = 0;
va_start(ap1);
while (--n >= 0)
{ b[i++] = va_arg(ap1,object);}
if (m > 0) {
ap = va_arg(ap1,va_list);
while (--m >= 0)
{ b[i++] = va_arg(ap,object);}
}
return IapplyVector(fun,i,b);
}
object
ImakeStructure(n,p)
/* p[0]= structure name , p[1] = 1'st elt,.... p[n-1] = last elt. */
int n;
object *p;
{ object * r = vs_top;
object res;
if (p+n != r) { FEerror("bad make struct",0);}
vs_base= p;
siLmake_structure();
res = vs_base[0];
vs_top=p;
return res;
}
object
Icheck_one_type(x,t)
object x;
enum type t;
{ if (x->d.t != t)
{ return CEerror("Expected a ~a ","Supply right type",1,type_name(t));
}
return x;
}
object
fSincorrect_type(val,type)
object val,type;
{ return CEerror("Got ~a,Expected a ~a","Supply a new one",1,val,type);
}
void
Ineed_in_image(foo)
object (*foo)();
{;}
/* Convert a value stack type return to an fcall multiple vaule return
and return the actual value (or nil if no values); */
object
Ivs_values()
{ int n = fcall.nvalues = vs_top - vs_base;
object *b = vs_base,*p=&fcall.values[0];
object res = (n > 0 ? b[0] : sLnil);
while (--n > 0)
{ *++p= *++b;}
return res;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.