home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v92.tgz
/
v92.tar
/
v92
/
src
/
runtime
/
def.r
< prev
next >
Wrap
Text File
|
1996-03-22
|
4KB
|
169 lines
/*
* def.r -- defaulting conversion routines.
*/
/*
* DefConvert - macro for general form of defaulting conversion.
*/
#begdef DefConvert(default, dftype, destype, converter, body)
int default(s,df,d)
dptr s;
dftype df;
destype d;
{
if (is:null(*s)) {
body
return 1;
}
else
return converter(s,d); /* I really mean cnv:type */
}
#enddef
/*
* def_c_dbl - def:C_double(*s, df, *d), convert to C double with a
* default value. Default is of type C double; if used, just copy to
* destination.
*/
#begdef C_DblAsgn
*d = df;
#enddef
DefConvert(def_c_dbl, double, double *, cnv_c_dbl, C_DblAsgn)
/*
* def_c_int - def:C_integer(*s, df, *d), convert to C_integer with a
* default value. Default type C_integer; if used, just copy to
* destination.
*/
#begdef C_IntAsgn
*d = df;
#enddef
DefConvert(def_c_int, C_integer, C_integer *, cnv_c_int, C_IntAsgn)
/*
* def_c_str - def:C_string(*s, df, *d), convert to (tended) C string with
* a default value. Default is of type "char *"; if used, point destination
* descriptor to it.
*/
#begdef C_StrAsgn
StrLen(*d) = strlen(df);
StrLoc(*d) = (char *)df;
#enddef
DefConvert(def_c_str, char *, dptr, cnv_c_str, C_StrAsgn)
/*
* def_cset - def:cset(*s, *df, *d), convert to cset with a default value.
* Default is of type "struct b_cset *"; if used, point destination descriptor
* to it.
*/
#begdef CsetAsgn
d->dword = D_Cset;
BlkLoc(*d) = (union block *)df;
#enddef
DefConvert(def_cset, struct b_cset *, dptr, cnv_cset, CsetAsgn)
/*
* def_ec_int - def:(exact)C_integer(*s, df, *d), convert to C Integer
* with a default value, but disallow conversions from reals. Default
* is of type C_Integer; if used, just copy to destination.
*/
#begdef EC_IntAsgn
*d = df;
#enddef
DefConvert(def_ec_int, C_integer, C_integer *, cnv_ec_int, EC_IntAsgn)
/*
* def_eint - def:(exact)integer(*s, df, *d), convert to C_integer
* with a default value, but disallow conversions from reals. Default
* is of type C_Integer; if used, assign it to the destination descriptor.
*/
#begdef EintAsgn
d->dword = D_Integer;
IntVal(*d) = df;
#enddef
DefConvert(def_eint, C_integer, dptr, cnv_eint, EintAsgn)
/*
* def_int - def:integer(*s, df, *d), convert to integer with a default
* value. Default is of type C_integer; if used, assign it to the
* destination descriptor.
*/
#begdef IntAsgn
d->dword = D_Integer;
IntVal(*d) = df;
#enddef
DefConvert(def_int, C_integer, dptr, cnv_int, IntAsgn)
/*
* def_real - def:real(*s, df, *d), convert to real with a default value.
* Default is of type double; if used, allocate real block and point
* destination descriptor to it.
*/
#begdef RealAsgn
Protect(BlkLoc(*d) = (union block *)alcreal(df), fatalerr(0,NULL));
d->dword = D_Real;
#enddef
DefConvert(def_real, double, dptr, cnv_real, RealAsgn)
/*
* def_str - def:string(*s, *df, *d), convert to string with a default
* value. Default is of type "struct descrip *"; if used, copy the
* decriptor value to the destination.
*/
#begdef StrAsgn
*d = *df;
#enddef
DefConvert(def_str, dptr, dptr, cnv_str, StrAsgn)
/*
* def_tcset - def:tmp_cset(*s, *df, *d), conversion to temporary cset with
* a default value. Default is of type "struct b_cset *"; if used,
* point destination descriptor to it. Note that this routine needs
* a cset buffer (cset block) to perform an actual conversion.
*/
int def_tcset(cbuf, s, df, d)
struct b_cset *cbuf, *df;
dptr s, d;
{
if (is:null(*s)) {
d->dword = D_Cset;
BlkLoc(*d) = (union block *)df;
return 1;
}
return cnv_tcset(cbuf, s, d);
}
/*
* def_tstr - def:tmp_string(*s, *df, *d), conversion to temporary string
* with a default value. Default is of type "struct descrip *"; if used,
* copy it to destination descriptor. Note that this routine needs
* a string buffer to perform an actual conversion.
*/
int def_tstr(sbuf, s, df, d)
char *sbuf;
dptr s, df, d;
{
if (is:null(*s)) {
*d = *df;
return 1;
}
return cnv_tstr(sbuf, s, d);
}