mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
2002-02-27 Stefan Jahn <stefan@lkcc.org>
* Makefile.am (SUBDIRS): Added the `am' directory. 2002-02-27 Stefan Jahn <stefan@lkcc.org> * gh.texi (scm transition summary): Documented some more gh equivalents and removed appropriate FIXME's. 2002-02-27 Stefan Jahn <stefan@lkcc.org> * Makefile.am (EXTRA_DIST): Added the `LIBGUILEREADLINE-VERSION' file. 2002-02-27 Stefan Jahn <stefan@lkcc.org> * convert.i.c, convert.c: Better range checking. * inet_aton.c, fports.c: Commented the inclusion of <winsock2.h>. * deprecation.c (vsnprintf): Define to `_vsnprintf' for Windows (MinGW).
This commit is contained in:
parent
d51b42e28b
commit
edb810bb84
12 changed files with 223 additions and 163 deletions
|
@ -1,3 +1,7 @@
|
|||
2002-02-27 Stefan Jahn <stefan@lkcc.org>
|
||||
|
||||
* Makefile.am (SUBDIRS): Added the `am' directory.
|
||||
|
||||
2002-02-26 Thien-Thi Nguyen <ttn@giblet.glug.org>
|
||||
|
||||
* pre-inst-guile.in: New file.
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
|
||||
SUBDIRS = oop qt libltdl libguile ice-9 guile-config guile-readline \
|
||||
scripts srfi doc examples test-suite lang
|
||||
scripts srfi doc examples test-suite lang am
|
||||
|
||||
bin_SCRIPTS = guile-tools
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2002-02-27 Stefan Jahn <stefan@lkcc.org>
|
||||
|
||||
* gh.texi (scm transition summary): Documented some more
|
||||
gh equivalents and removed appropriate FIXME's.
|
||||
|
||||
2002-02-26 Thien-Thi Nguyen <ttn@giblet.glug.org>
|
||||
|
||||
* Makefile.am: Update path to pre-inst-guile automake frag.
|
||||
|
|
|
@ -929,16 +929,16 @@ Use @code{scm_str2symbol} instead. [FIXME: inconsistent naming,
|
|||
should be @code{scm_str02symbol}.]
|
||||
|
||||
@item @code{gh_ints2scm} and @code{gh_doubles2scm}
|
||||
No direct scm equivalent. [FIXME]
|
||||
Use @code{scm_c_ints2scm} and @code{scm_c_doubles2scm} instead.
|
||||
|
||||
@item @code{gh_chars2byvect} and @code{gh_shorts2svect}
|
||||
No direct scm equivalent. [FIXME]
|
||||
Use @code{scm_c_chars2byvect} and @code{scm_c_shorts2svect} instead.
|
||||
|
||||
@item @code{gh_longs2ivect} and @code{gh_ulongs2uvect}
|
||||
No direct scm equivalent. [FIXME]
|
||||
Use @code{scm_c_longs2ivect} and @code{scm_c_ulongs2uvect} instead.
|
||||
|
||||
@item @code{gh_floats2fvect} and @code{gh_doubles2dvect}
|
||||
No direct scm equivalent. [FIXME]
|
||||
Use @code{scm_c_floats2fvect} and @code{scm_c_doubles2dvect} instead.
|
||||
|
||||
@item @code{gh_scm2bool}
|
||||
Use @code{SCM_NFALSEP} instead.
|
||||
|
@ -993,13 +993,13 @@ instead. With the additional @var{str} argument the user can pass a
|
|||
pre-allocated memory chunk or leave it passing NULL.
|
||||
|
||||
@item @code{gh_scm2chars}
|
||||
No direct scm equivalent. [FIXME]
|
||||
Use @code{scm_c_scm2chars} instead.
|
||||
|
||||
@item @code{gh_scm2shorts} and @code{gh_scm2longs}
|
||||
No direct scm equivalent. [FIXME]
|
||||
Use @code{scm_c_shorts2scm} and @code{scm_c_longs2scm} instead.
|
||||
|
||||
@item @code{gh_scm2floats} and @code{gh_scm2doubles}
|
||||
No direct scm equivalent. [FIXME]
|
||||
Use @code{scm_c_floats2scm} and @code{scm_c_doubles2scm} instead.
|
||||
|
||||
@item @code{gh_boolean_p}
|
||||
Use the @code{SCM_BOOLP} macro instead, or replace @code{gh_boolean_p
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2002-02-27 Stefan Jahn <stefan@lkcc.org>
|
||||
|
||||
* Makefile.am (EXTRA_DIST): Added the `LIBGUILEREADLINE-VERSION'
|
||||
file.
|
||||
|
||||
2002-02-25 Thien-Thi Nguyen <ttn@giblet.glug.org>
|
||||
|
||||
* configure.in (LIBGUILEREADLINE-VERSION):
|
||||
|
|
|
@ -50,7 +50,7 @@ SUFFIXES = .x
|
|||
$(GUILE_SNARF) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $< > $@ \
|
||||
|| { rm $@; false; }
|
||||
|
||||
EXTRA_DIST = $(ice9_DATA)
|
||||
EXTRA_DIST = $(ice9_DATA) LIBGUILEREADLINE-VERSION
|
||||
ETAGS_ARGS = $(ice9_DATA)
|
||||
|
||||
MKDEP = gcc -M -MG $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
2002-02-27 Stefan Jahn <stefan@lkcc.org>
|
||||
|
||||
* convert.i.c, convert.c: Better range checking.
|
||||
|
||||
* inet_aton.c, fports.c: Commented the inclusion of <winsock2.h>.
|
||||
|
||||
* deprecation.c (vsnprintf): Define to `_vsnprintf' for
|
||||
Windows (MinGW).
|
||||
|
||||
2002-02-26 Thien-Thi Nguyen <ttn@giblet.glug.org>
|
||||
|
||||
* Makefile.am: Update path to pre-inst-guile automake frag.
|
||||
|
|
|
@ -56,91 +56,90 @@
|
|||
#include <string.h>
|
||||
#endif
|
||||
|
||||
#define CTYPE char
|
||||
#define SCM2CTYPES_FN "scm_c_scm2chars"
|
||||
#define SCM2CTYPES scm_c_scm2chars
|
||||
#define CTYPES2SCM_FN "scm_c_chars2scm"
|
||||
#define CTYPES2SCM scm_c_chars2scm
|
||||
#define CTYPEFIXABLE
|
||||
#define CTYPE char
|
||||
#define SIZEOF_CTYPE 1
|
||||
#define SCM2CTYPES_FN "scm_c_scm2chars"
|
||||
#define SCM2CTYPES scm_c_scm2chars
|
||||
#define CTYPES2SCM_FN "scm_c_chars2scm"
|
||||
#define CTYPES2SCM scm_c_chars2scm
|
||||
#define CTYPES2UVECT_FN "scm_c_chars2byvect"
|
||||
#define CTYPES2UVECT scm_c_chars2byvect
|
||||
#define UVECTTYPE scm_tc7_byvect
|
||||
#define CTYPEMIN -128
|
||||
#define CTYPEMAX +255
|
||||
#define ARRAYTYPE1 scm_tc7_byvect
|
||||
#define STRINGTYPE
|
||||
#define CTYPES2UVECT scm_c_chars2byvect
|
||||
#define UVECTTYPE scm_tc7_byvect
|
||||
#define ARRAYTYPE scm_tc7_byvect
|
||||
#include "convert.i.c"
|
||||
|
||||
#define CTYPE short
|
||||
#define SCM2CTYPES_FN "scm_c_scm2shorts"
|
||||
#define SCM2CTYPES scm_c_scm2shorts
|
||||
#define CTYPES2SCM_FN "scm_c_shorts2scm"
|
||||
#define CTYPES2SCM scm_c_shorts2scm
|
||||
#define CTYPEFIXABLE
|
||||
#define CTYPE short
|
||||
#define SIZEOF_CTYPE SIZEOF_SHORT
|
||||
#define SCM2CTYPES_FN "scm_c_scm2shorts"
|
||||
#define SCM2CTYPES scm_c_scm2shorts
|
||||
#define CTYPES2SCM_FN "scm_c_shorts2scm"
|
||||
#define CTYPES2SCM scm_c_shorts2scm
|
||||
#define CTYPES2UVECT_FN "scm_c_shorts2svect"
|
||||
#define CTYPES2UVECT scm_c_shorts2svect
|
||||
#define UVECTTYPE scm_tc7_svect
|
||||
#define CTYPEMIN -32768
|
||||
#define CTYPEMAX +65535
|
||||
#define ARRAYTYPE1 scm_tc7_svect
|
||||
#define CTYPES2UVECT scm_c_shorts2svect
|
||||
#define UVECTTYPE scm_tc7_svect
|
||||
#define ARRAYTYPE scm_tc7_svect
|
||||
#include "convert.i.c"
|
||||
|
||||
#define CTYPE int
|
||||
#define SCM2CTYPES_FN "scm_c_scm2ints"
|
||||
#define SCM2CTYPES scm_c_scm2ints
|
||||
#define CTYPES2SCM_FN "scm_c_ints2scm"
|
||||
#define CTYPES2SCM scm_c_ints2scm
|
||||
#define CTYPES2UVECT_FN "scm_c_ints2ivect"
|
||||
#define CTYPES2UVECT scm_c_ints2ivect
|
||||
#define UVECTTYPE scm_tc7_ivect
|
||||
#define CTYPES2UVECT_FN2 "scm_c_uints2uvect"
|
||||
#define CTYPES2UVECT2 scm_c_uints2uvect
|
||||
#define UVECTTYPE2 scm_tc7_uvect
|
||||
#define ARRAYTYPE1 scm_tc7_ivect
|
||||
#define ARRAYTYPE2 scm_tc7_uvect
|
||||
#define CTYPE int
|
||||
#define SIZEOF_CTYPE SIZEOF_INT
|
||||
#define SCM2CTYPES_FN "scm_c_scm2ints"
|
||||
#define SCM2CTYPES scm_c_scm2ints
|
||||
#define CTYPES2SCM_FN "scm_c_ints2scm"
|
||||
#define CTYPES2SCM scm_c_ints2scm
|
||||
#define CTYPES2UVECT_FN "scm_c_ints2ivect"
|
||||
#define CTYPES2UVECT scm_c_ints2ivect
|
||||
#define UVECTTYPE scm_tc7_ivect
|
||||
#define CTYPES2UVECT_FN_OPTIONAL "scm_c_uints2uvect"
|
||||
#define CTYPES2UVECT_OPTIONAL scm_c_uints2uvect
|
||||
#define UVECTTYPE_OPTIONAL scm_tc7_uvect
|
||||
#define ARRAYTYPE scm_tc7_ivect
|
||||
#define ARRAYTYPE_OPTIONAL scm_tc7_uvect
|
||||
#include "convert.i.c"
|
||||
|
||||
#define CTYPE long
|
||||
#define SCM2CTYPES_FN "scm_c_scm2longs"
|
||||
#define SCM2CTYPES scm_c_scm2longs
|
||||
#define CTYPES2SCM_FN "scm_c_longs2scm"
|
||||
#define CTYPES2SCM scm_c_longs2scm
|
||||
#define CTYPES2UVECT_FN "scm_c_longs2ivect"
|
||||
#define CTYPES2UVECT scm_c_longs2ivect
|
||||
#define UVECTTYPE scm_tc7_ivect
|
||||
#define CTYPES2UVECT_FN2 "scm_c_ulongs2uvect"
|
||||
#define CTYPES2UVECT2 scm_c_ulongs2uvect
|
||||
#define UVECTTYPE2 scm_tc7_uvect
|
||||
#define ARRAYTYPE1 scm_tc7_ivect
|
||||
#define ARRAYTYPE2 scm_tc7_uvect
|
||||
#define CTYPE long
|
||||
#define SIZEOF_CTYPE SIZEOF_LONG
|
||||
#define SCM2CTYPES_FN "scm_c_scm2longs"
|
||||
#define SCM2CTYPES scm_c_scm2longs
|
||||
#define CTYPES2SCM_FN "scm_c_longs2scm"
|
||||
#define CTYPES2SCM scm_c_longs2scm
|
||||
#define CTYPES2UVECT_FN "scm_c_longs2ivect"
|
||||
#define CTYPES2UVECT scm_c_longs2ivect
|
||||
#define UVECTTYPE scm_tc7_ivect
|
||||
#define CTYPES2UVECT_FN_OPTIONAL "scm_c_ulongs2uvect"
|
||||
#define CTYPES2UVECT_OPTIONAL scm_c_ulongs2uvect
|
||||
#define UVECTTYPE_OPTIONAL scm_tc7_uvect
|
||||
#define ARRAYTYPE scm_tc7_ivect
|
||||
#define ARRAYTYPE_OPTIONAL scm_tc7_uvect
|
||||
#include "convert.i.c"
|
||||
|
||||
#define CTYPE float
|
||||
#define SCM2CTYPES_FN "scm_c_scm2floats"
|
||||
#define SCM2CTYPES scm_c_scm2floats
|
||||
#define CTYPES2SCM_FN "scm_c_floats2scm"
|
||||
#define CTYPES2SCM scm_c_floats2scm
|
||||
#define CTYPES2UVECT_FN "scm_c_floats2fvect"
|
||||
#define CTYPES2UVECT scm_c_floats2fvect
|
||||
#define UVECTTYPE scm_tc7_fvect
|
||||
#define ARRAYTYPE1 scm_tc7_fvect
|
||||
#define ARRAYTYPE2 scm_tc7_dvect
|
||||
#define FLOATTYPE1 float
|
||||
#define FLOATTYPE2 double
|
||||
#define CTYPE float
|
||||
#define SIZEOF_CTYPE 0
|
||||
#define SCM2CTYPES_FN "scm_c_scm2floats"
|
||||
#define SCM2CTYPES scm_c_scm2floats
|
||||
#define CTYPES2SCM_FN "scm_c_floats2scm"
|
||||
#define CTYPES2SCM scm_c_floats2scm
|
||||
#define CTYPES2UVECT_FN "scm_c_floats2fvect"
|
||||
#define CTYPES2UVECT scm_c_floats2fvect
|
||||
#define UVECTTYPE scm_tc7_fvect
|
||||
#define ARRAYTYPE scm_tc7_fvect
|
||||
#define ARRAYTYPE_OPTIONAL scm_tc7_dvect
|
||||
#define FLOATTYPE float
|
||||
#define FLOATTYPE_OPTIONAL double
|
||||
#include "convert.i.c"
|
||||
|
||||
#define CTYPE double
|
||||
#define SCM2CTYPES_FN "scm_c_scm2doubles"
|
||||
#define SCM2CTYPES scm_c_scm2doubles
|
||||
#define CTYPES2SCM_FN "scm_c_doubles2scm"
|
||||
#define CTYPES2SCM scm_c_doubles2scm
|
||||
#define CTYPES2UVECT_FN "scm_c_doubles2dvect"
|
||||
#define CTYPES2UVECT scm_c_doubles2dvect
|
||||
#define UVECTTYPE scm_tc7_dvect
|
||||
#define ARRAYTYPE1 scm_tc7_dvect
|
||||
#define ARRAYTYPE2 scm_tc7_fvect
|
||||
#define FLOATTYPE1 double
|
||||
#define FLOATTYPE2 float
|
||||
#define CTYPE double
|
||||
#define SIZEOF_CTYPE 0
|
||||
#define SCM2CTYPES_FN "scm_c_scm2doubles"
|
||||
#define SCM2CTYPES scm_c_scm2doubles
|
||||
#define CTYPES2SCM_FN "scm_c_doubles2scm"
|
||||
#define CTYPES2SCM scm_c_doubles2scm
|
||||
#define CTYPES2UVECT_FN "scm_c_doubles2dvect"
|
||||
#define CTYPES2UVECT scm_c_doubles2dvect
|
||||
#define UVECTTYPE scm_tc7_dvect
|
||||
#define ARRAYTYPE scm_tc7_dvect
|
||||
#define ARRAYTYPE_OPTIONAL scm_tc7_fvect
|
||||
#define FLOATTYPE double
|
||||
#define FLOATTYPE_OPTIONAL float
|
||||
#include "convert.i.c"
|
||||
|
||||
/*
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
|
||||
|
||||
/* Convert a vector, weak vector, (if possible string, substring), list
|
||||
or uniform vector into an C array. If result array in argument 2 is
|
||||
NULL, malloc() a new one. If out of memory, return NULL. */
|
||||
or uniform vector into an C array. If the result array in argument 2
|
||||
is NULL, malloc() a new one. If out of memory, return NULL. */
|
||||
#define FUNC_NAME SCM2CTYPES_FN
|
||||
CTYPE *
|
||||
SCM2CTYPES (SCM obj, CTYPE *data)
|
||||
|
@ -17,40 +17,58 @@ SCM2CTYPES (SCM obj, CTYPE *data)
|
|||
SCM_ASSERT (SCM_NIMP (obj) || SCM_NFALSEP (scm_list_p (obj)),
|
||||
obj, SCM_ARG1, FUNC_NAME);
|
||||
|
||||
/* list conversion */
|
||||
if (SCM_NFALSEP (scm_list_p (obj)))
|
||||
{
|
||||
/* traverse the given list and validate the range of each member */
|
||||
SCM list = obj;
|
||||
for (n = 0; SCM_NFALSEP (scm_pair_p (list)); list = SCM_CDR (list), n++)
|
||||
{
|
||||
val = SCM_CAR (list);
|
||||
#if defined (CTYPEMIN) && defined (CTYPEMAX)
|
||||
#if SIZEOF_CTYPE && SIZEOF_CTYPE < SIZEOF_SCM_T_BITS
|
||||
/* check integer ranges */
|
||||
if (SCM_INUMP (val))
|
||||
{
|
||||
long v = SCM_INUM (val);
|
||||
SCM_ASSERT_RANGE (SCM_ARG1, obj, v >= CTYPEMIN && v <= CTYPEMAX);
|
||||
scm_t_signed_bits v = SCM_INUM (val);
|
||||
CTYPE c = (CTYPE) v;
|
||||
SCM_ASSERT_RANGE (SCM_ARG1, val, v != (scm_t_signed_bits) c);
|
||||
}
|
||||
else
|
||||
#elif defined (FLOATTYPE1)
|
||||
if (!SCM_INUMP (val) && !(SCM_BIGP (val) || SCM_REALP (val)))
|
||||
/* check big number ranges */
|
||||
else if (SCM_BIGP (val))
|
||||
{
|
||||
scm_t_signed_bits v = scm_num2long (val, SCM_ARG1, FUNC_NAME);
|
||||
CTYPE c = (CTYPE) v;
|
||||
SCM_ASSERT_RANGE (SCM_ARG1, val, v != (scm_t_signed_bits) c);
|
||||
}
|
||||
else
|
||||
/* check float types */
|
||||
#elif defined (FLOATTYPE)
|
||||
/* real values, big numbers and immediate values are valid
|
||||
for float conversions */
|
||||
if (!SCM_REALP (val) && !SCM_BIGP (val) && !SCM_INUMP (val))
|
||||
#else
|
||||
if (!SCM_INUMP (val) && !SCM_BIGP (val))
|
||||
#endif
|
||||
SCM_WRONG_TYPE_ARG (SCM_ARG1, obj);
|
||||
if (!SCM_BIGP (val) && !SCM_INUMP (val))
|
||||
#endif /* FLOATTYPE */
|
||||
SCM_WRONG_TYPE_ARG (SCM_ARG1, val);
|
||||
}
|
||||
if (data == NULL)
|
||||
data = (CTYPE *) malloc (n * sizeof (CTYPE));
|
||||
if (data == NULL)
|
||||
return NULL;
|
||||
|
||||
/* allocate new memory if necessary */
|
||||
if (data == NULL)
|
||||
{
|
||||
if ((data = (CTYPE *) malloc (n * sizeof (CTYPE))) == NULL)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* traverse the list once more and convert each member */
|
||||
list = obj;
|
||||
for (i = 0; SCM_NFALSEP (scm_pair_p (list)); list = SCM_CDR (list), i++)
|
||||
{
|
||||
val = SCM_CAR (list);
|
||||
if (SCM_INUMP (val))
|
||||
data[i] = SCM_INUM (val);
|
||||
data[i] = (CTYPE) SCM_INUM (val);
|
||||
else if (SCM_BIGP (val))
|
||||
data[i] = (CTYPE) scm_num2long (val, SCM_ARG1, FUNC_NAME);
|
||||
#ifdef FLOATTYPE1
|
||||
#if defined (FLOATTYPE)
|
||||
else
|
||||
data[i] = (CTYPE) SCM_REAL_VALUE (val);
|
||||
#endif
|
||||
|
@ -58,33 +76,52 @@ SCM2CTYPES (SCM obj, CTYPE *data)
|
|||
return data;
|
||||
}
|
||||
|
||||
/* other conversions */
|
||||
switch (SCM_TYP7 (obj))
|
||||
{
|
||||
/* vectors and weak vectors */
|
||||
case scm_tc7_vector:
|
||||
case scm_tc7_wvect:
|
||||
n = SCM_VECTOR_LENGTH (obj);
|
||||
/* traverse the given vector and validate each member */
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
val = SCM_VELTS (obj)[i];
|
||||
|
||||
#if defined (CTYPEMIN) && defined (CTYPEMAX)
|
||||
#if SIZEOF_CTYPE && SIZEOF_CTYPE < SIZEOF_SCM_T_BITS
|
||||
/* check integer ranges */
|
||||
if (SCM_INUMP (val))
|
||||
{
|
||||
long v = SCM_INUM (val);
|
||||
SCM_ASSERT_RANGE (SCM_ARG1, obj, v >= CTYPEMIN && v <= CTYPEMAX);
|
||||
scm_t_signed_bits v = SCM_INUM (val);
|
||||
CTYPE c = (CTYPE) v;
|
||||
SCM_ASSERT_RANGE (SCM_ARG1, val, v != (scm_t_signed_bits) c);
|
||||
}
|
||||
/* check big number ranges */
|
||||
else if (SCM_BIGP (val))
|
||||
{
|
||||
scm_t_signed_bits v = scm_num2long (val, SCM_ARG1, FUNC_NAME);
|
||||
CTYPE c = (CTYPE) v;
|
||||
SCM_ASSERT_RANGE (SCM_ARG1, val, v != (scm_t_signed_bits) c);
|
||||
}
|
||||
else
|
||||
#elif defined (FLOATTYPE1)
|
||||
if (!SCM_INUMP (val) && !(SCM_BIGP (val) || SCM_REALP (val)))
|
||||
/* check float types */
|
||||
#elif defined (FLOATTYPE)
|
||||
/* real values, big numbers and immediate values are valid
|
||||
for float conversions */
|
||||
if (!SCM_REALP (val) && !SCM_BIGP (val) && !SCM_INUMP (val))
|
||||
#else
|
||||
if (!SCM_INUMP (val) && !SCM_BIGP (val))
|
||||
#endif
|
||||
SCM_WRONG_TYPE_ARG (SCM_ARG1, obj);
|
||||
if (!SCM_BIGP (val) && !SCM_INUMP (val))
|
||||
#endif /* FLOATTYPE */
|
||||
SCM_WRONG_TYPE_ARG (SCM_ARG1, val);
|
||||
}
|
||||
|
||||
/* allocate new memory if necessary */
|
||||
if (data == NULL)
|
||||
data = (CTYPE *) malloc (n * sizeof (CTYPE));
|
||||
if (data == NULL)
|
||||
return NULL;
|
||||
{
|
||||
if ((data = (CTYPE *) malloc (n * sizeof (CTYPE))) == NULL)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* traverse the vector once more and convert each member */
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
val = SCM_VELTS (obj)[i];
|
||||
|
@ -92,7 +129,7 @@ SCM2CTYPES (SCM obj, CTYPE *data)
|
|||
data[i] = (CTYPE) SCM_INUM (val);
|
||||
else if (SCM_BIGP (val))
|
||||
data[i] = (CTYPE) scm_num2long (val, SCM_ARG1, FUNC_NAME);
|
||||
#ifdef FLOATTYPE1
|
||||
#if defined (FLOATTYPE)
|
||||
else
|
||||
data[i] = (CTYPE) SCM_REAL_VALUE (val);
|
||||
#endif
|
||||
|
@ -100,37 +137,43 @@ SCM2CTYPES (SCM obj, CTYPE *data)
|
|||
break;
|
||||
|
||||
#ifdef HAVE_ARRAYS
|
||||
case ARRAYTYPE1:
|
||||
#ifdef ARRAYTYPE2
|
||||
case ARRAYTYPE2:
|
||||
/* array conversions (uniform vectors) */
|
||||
case ARRAYTYPE:
|
||||
#ifdef ARRAYTYPE_OPTIONAL
|
||||
case ARRAYTYPE_OPTIONAL:
|
||||
#endif
|
||||
n = SCM_UVECTOR_LENGTH (obj);
|
||||
|
||||
/* allocate new memory if necessary */
|
||||
if (data == NULL)
|
||||
data = (CTYPE *) malloc (n * sizeof (CTYPE));
|
||||
if (data == NULL)
|
||||
return NULL;
|
||||
#ifdef FLOATTYPE2
|
||||
if (SCM_TYP7 (obj) == ARRAYTYPE2)
|
||||
{
|
||||
if ((data = (CTYPE *) malloc (n * sizeof (CTYPE))) == NULL)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef FLOATTYPE_OPTIONAL
|
||||
/* float <-> double conversions */
|
||||
if (SCM_TYP7 (obj) == ARRAYTYPE_OPTIONAL)
|
||||
{
|
||||
for (i = 0; i < n; i++)
|
||||
data[i] = ((FLOATTYPE2 *) SCM_UVECTOR_BASE (obj))[i];
|
||||
data[i] = ((FLOATTYPE_OPTIONAL *) SCM_UVECTOR_BASE (obj))[i];
|
||||
}
|
||||
else
|
||||
#endif
|
||||
/* copy whole array */
|
||||
memcpy (data, (CTYPE *) SCM_UVECTOR_BASE (obj), n * sizeof (CTYPE));
|
||||
break;
|
||||
#endif /* HAVE_ARRAYS */
|
||||
|
||||
#ifdef STRINGTYPE
|
||||
#if SIZEOF_CTYPE == 1
|
||||
case scm_tc7_string:
|
||||
n = SCM_STRING_LENGTH (obj);
|
||||
if (data == NULL)
|
||||
data = (CTYPE *) malloc (n * sizeof (CTYPE));
|
||||
if (data == NULL)
|
||||
return NULL;
|
||||
if ((data = (CTYPE *) malloc (n * sizeof (CTYPE))) == NULL)
|
||||
return NULL;
|
||||
memcpy (data, SCM_STRING_CHARS (obj), n * sizeof (CTYPE));
|
||||
break;
|
||||
#endif /* STRINGTYPE */
|
||||
#endif
|
||||
|
||||
default:
|
||||
SCM_WRONG_TYPE_ARG (SCM_ARG1, obj);
|
||||
|
@ -150,32 +193,34 @@ CTYPES2UVECT (const CTYPE *data, long n)
|
|||
{
|
||||
char *v;
|
||||
|
||||
SCM_ASSERT_RANGE (SCM_ARG2, scm_long2num (n),
|
||||
SCM_ASSERT_RANGE (SCM_ARG2, scm_long2num (n),
|
||||
n > 0 && n <= SCM_UVECTOR_MAX_LENGTH);
|
||||
v = scm_gc_malloc (sizeof (CTYPE) * n, "vector");
|
||||
v = scm_gc_malloc (n * sizeof (CTYPE), "uvect");
|
||||
memcpy (v, data, n * sizeof (CTYPE));
|
||||
return scm_alloc_cell (SCM_MAKE_UVECTOR_TAG (n, UVECTTYPE), (scm_t_bits) v);
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
#ifdef UVECTTYPE2
|
||||
#define FUNC_NAME CTYPES2UVECT_FN2
|
||||
#ifdef UVECTTYPE_OPTIONAL
|
||||
#define FUNC_NAME CTYPES2UVECT_FN_OPTIONAL
|
||||
SCM
|
||||
CTYPES2UVECT2 (const unsigned CTYPE *data, long n)
|
||||
CTYPES2UVECT_OPTIONAL (const unsigned CTYPE *data, long n)
|
||||
{
|
||||
char *v;
|
||||
|
||||
SCM_ASSERT_RANGE (SCM_ARG2, scm_long2num (n),
|
||||
n > 0 && n <= SCM_UVECTOR_MAX_LENGTH);
|
||||
v = scm_gc_malloc (sizeof (unsigned CTYPE) * n, "vector");
|
||||
v = scm_gc_malloc (n * sizeof (unsigned CTYPE) * n, "uvect");
|
||||
memcpy (v, data, n * sizeof (unsigned CTYPE));
|
||||
return scm_alloc_cell (SCM_MAKE_UVECTOR_TAG (n, UVECTTYPE2), (scm_t_bits) v);
|
||||
return scm_alloc_cell (SCM_MAKE_UVECTOR_TAG (n, UVECTTYPE_OPTIONAL),
|
||||
(scm_t_bits) v);
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
#endif /* UVECTTYPE2 */
|
||||
#endif /* UVECTTYPE_OPTIONAL */
|
||||
|
||||
#endif /* HAVE_ARRAYS */
|
||||
|
||||
|
||||
/* Converts a C array into a vector. */
|
||||
#define FUNC_NAME CTYPES2SCM_FN
|
||||
SCM
|
||||
|
@ -189,13 +234,10 @@ CTYPES2SCM (const CTYPE *data, long n)
|
|||
v = scm_c_make_vector (n, SCM_UNSPECIFIED);
|
||||
velts = SCM_VELTS (v);
|
||||
for (i = 0; i < n; i++)
|
||||
#ifdef FLOATTYPE1
|
||||
#ifdef FLOATTYPE
|
||||
velts[i] = scm_make_real ((double) data[i]);
|
||||
#elif defined (CTYPEFIXABLE)
|
||||
velts[i] = SCM_MAKINUM (data[i]);
|
||||
#else
|
||||
velts[i] = (SCM_FIXABLE (data[i]) ? SCM_MAKINUM (data[i]) :
|
||||
scm_i_long2big (data[i]));
|
||||
velts[i] = SCM_MAKINUM (data[i]);
|
||||
#endif
|
||||
return v;
|
||||
}
|
||||
|
@ -209,33 +251,22 @@ CTYPES2SCM (const CTYPE *data, long n)
|
|||
#undef CTYPE
|
||||
#undef CTYPES2UVECT
|
||||
#undef CTYPES2UVECT_FN
|
||||
#ifdef CTYPEFIXABLE
|
||||
#undef CTYPEFIXABLE
|
||||
#endif
|
||||
#undef UVECTTYPE
|
||||
#ifdef UVECTTYPE2
|
||||
#undef CTYPES2UVECT2
|
||||
#undef CTYPES2UVECT_FN2
|
||||
#undef UVECTTYPE2
|
||||
#ifdef UVECTTYPE_OPTIONAL
|
||||
#undef CTYPES2UVECT_OPTIONAL
|
||||
#undef CTYPES2UVECT_FN_OPTIONAL
|
||||
#undef UVECTTYPE_OPTIONAL
|
||||
#endif
|
||||
#ifdef CTYPEMIN
|
||||
#undef CTYPEMIN
|
||||
#undef SIZEOF_CTYPE
|
||||
#undef ARRAYTYPE
|
||||
#ifdef ARRAYTYPE_OPTIONAL
|
||||
#undef ARRAYTYPE_OPTIONAL
|
||||
#endif
|
||||
#ifdef CTYPEMAX
|
||||
#undef CTYPEMAX
|
||||
#ifdef FLOATTYPE
|
||||
#undef FLOATTYPE
|
||||
#endif
|
||||
#undef ARRAYTYPE1
|
||||
#ifdef ARRAYTYPE2
|
||||
#undef ARRAYTYPE2
|
||||
#endif
|
||||
#ifdef FLOATTYPE1
|
||||
#undef FLOATTYPE1
|
||||
#endif
|
||||
#ifdef FLOATTYPE2
|
||||
#undef FLOATTYPE2
|
||||
#endif
|
||||
#ifdef STRINGTYPE
|
||||
#undef STRINGTYPE
|
||||
#ifdef FLOATTYPE_OPTIONAL
|
||||
#undef FLOATTYPE_OPTIONAL
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -51,6 +51,11 @@
|
|||
#include "libguile/strings.h"
|
||||
#include "libguile/ports.h"
|
||||
|
||||
/* Windows defines. */
|
||||
#ifdef __MINGW32__
|
||||
#define vsnprintf _vsnprintf
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if (SCM_ENABLE_DEPRECATED == 1)
|
||||
|
|
|
@ -69,7 +69,8 @@ size_t fwrite ();
|
|||
#include <errno.h>
|
||||
|
||||
#include "libguile/iselect.h"
|
||||
/* Some defines for Windows. */
|
||||
|
||||
/* Some defines for Windows (native port, not Cygwin). */
|
||||
#ifdef __MINGW32__
|
||||
# include <sys/stat.h>
|
||||
# include <winsock2.h>
|
||||
|
|
|
@ -39,6 +39,7 @@ static char sccsid[] = "@(#)inet_addr.c 8.1 (Berkeley) 6/17/93";
|
|||
#include <ctype.h>
|
||||
|
||||
#ifdef __MINGW32__
|
||||
/* Include for MinGW only. Cygwin will have the latter. */
|
||||
#include <winsock2.h>
|
||||
#else
|
||||
#include <sys/param.h>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue