Updated
[bpt/guile.git] / libguile / unif.c
index a44e2c0..fb83cee 100644 (file)
@@ -12,7 +12,8 @@
  * 
  * You should have received a copy of the GNU General Public License
  * along with this software; see the file COPYING.  If not, write to
- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307 USA
  *
  * As a special exception, the Free Software Foundation gives permission
  * for additional uses of the text contained in its release of GUILE.
@@ -36,8 +37,7 @@
  *
  * If you write modifications of your own for GUILE, it is your choice
  * whether to permit this exception to apply to your modifications.
- * If you do not wish that, delete this exception notice.  
- */
+ * If you do not wish that, delete this exception notice.  */
 \f
 
 #include <stdio.h>
@@ -46,7 +46,6 @@
 #include "eval.h"
 #include "genio.h"
 #include "smob.h"
-#include "sequences.h"
 #include "strop.h"
 #include "feature.h"
 
@@ -100,12 +99,12 @@ scm_vector_set_length_x (vect, len)
     default:
     badarg1: scm_wta (vect, (char *) SCM_ARG1, s_vector_set_length_x);
     case scm_tc7_string:
-    case scm_tc7_mb_string:
       SCM_ASRTGO (vect != scm_nullstr, badarg1);
       sz = sizeof (char);
       l++;
       break;
     case scm_tc7_vector:
+    case scm_tc7_wvect:
       SCM_ASRTGO (vect != scm_nullvect, badarg1);
       sz = sizeof (SCM);
       break;
@@ -306,6 +305,7 @@ scm_uniform_vector_length (v)
     case scm_tc7_dvect:
     case scm_tc7_cvect:
     case scm_tc7_vector:
+    case scm_tc7_wvect:
     case scm_tc7_svect:
 #ifdef LONGLONGS
     case scm_tc7_llvect:
@@ -374,6 +374,7 @@ loop:
       return nprot || (SCM_NIMP(prot) && SCM_CPLXP(prot)) ? SCM_BOOL_T : SCM_BOOL_F;
 # endif
     case scm_tc7_vector:
+    case scm_tc7_wvect:
       return nprot || SCM_NULLP(prot) ? SCM_BOOL_T : SCM_BOOL_F;
     default:;
     }
@@ -395,6 +396,7 @@ scm_array_rank (ra)
       return SCM_INUM0;
     case scm_tc7_string:
     case scm_tc7_vector:
+    case scm_tc7_wvect:
     case scm_tc7_byvect:
     case scm_tc7_uvect:
     case scm_tc7_ivect:
@@ -431,6 +433,7 @@ scm_array_dimensions (ra)
       return SCM_BOOL_F;
     case scm_tc7_string:
     case scm_tc7_vector:
+    case scm_tc7_wvect:
     case scm_tc7_bvect:
     case scm_tc7_byvect:
     case scm_tc7_uvect:
@@ -531,18 +534,21 @@ scm_shap2ra (args, what)
       if (SCM_IMP (spec))
 
        {
-         SCM_ASSERT (SCM_INUMP (spec) && SCM_INUM (spec) >= 0, spec, s_bad_spec, what);
+         SCM_ASSERT (SCM_INUMP (spec) && SCM_INUM (spec) >= 0, spec,
+                     s_bad_spec, what);
          s->lbnd = 0;
          s->ubnd = SCM_INUM (spec) - 1;
          s->inc = 1;
        }
       else
        {
-         SCM_ASSERT (SCM_CONSP (spec) && SCM_INUMP (SCM_CAR (spec)), spec, s_bad_spec, what);
+         SCM_ASSERT (SCM_CONSP (spec) && SCM_INUMP (SCM_CAR (spec)), spec,
+                     s_bad_spec, what);
          s->lbnd = SCM_INUM (SCM_CAR (spec));
          sp = SCM_CDR (spec);
-         SCM_ASSERT (SCM_INUMP (SCM_CAR (sp)) && SCM_NULLP (SCM_CDR (sp)),
-                 spec, s_bad_spec, what);
+         SCM_ASSERT (SCM_NIMP (sp) && SCM_CONSP (sp)
+                     && SCM_INUMP (SCM_CAR (sp)) && SCM_NULLP (SCM_CDR (sp)),
+                     spec, s_bad_spec, what);
          s->ubnd = SCM_INUM (SCM_CAR (sp));
          s->inc = 1;
        }
@@ -563,6 +569,7 @@ scm_dimensions_to_uniform_array (dims, prot, fill)
   scm_array_dim *s;
   SCM ra;
   if (SCM_INUMP (dims))
+    {
       if (SCM_INUM (dims) < SCM_LENGTH_MAX)
        {
          SCM answer;
@@ -582,6 +589,7 @@ scm_dimensions_to_uniform_array (dims, prot, fill)
        }
     else
       dims = scm_cons (dims, SCM_EOL);
+    }
   SCM_ASSERT (SCM_NULLP (dims) || (SCM_NIMP (dims) && SCM_CONSP (dims)),
          dims, SCM_ARG1, s_dimensions_to_uniform_array);
   ra = scm_shap2ra (dims, s_dimensions_to_uniform_array);
@@ -717,7 +725,7 @@ scm_make_shared_array (oldra, mapfunc, dims)
          return ra;
        }
     }
-  imap = scm_apply (mapfunc, scm_list_reverse (inds), SCM_EOL);
+  imap = scm_apply (mapfunc, scm_reverse (inds), SCM_EOL);
   if (SCM_ARRAYP (oldra))
       i = (scm_sizet) scm_aind (oldra, imap, s_make_shared_array);
   else
@@ -797,7 +805,7 @@ scm_transpose_array (args)
   switch (SCM_TYP7 (ra))
     {
     default:
-    badarg:scm_wta (ra, (char *) SCM_ARGn, s_transpose_array);
+    badarg:scm_wta (ra, (char *) SCM_ARG1, s_transpose_array);
     case scm_tc7_bvect:
     case scm_tc7_string:
     case scm_tc7_byvect:
@@ -826,9 +834,11 @@ scm_transpose_array (args)
       ndim = 0;
       for (k = 0; k < SCM_ARRAY_NDIM (ra); k++)
        {
+         SCM_ASSERT (SCM_INUMP (ve[k]), ve[k], (SCM_ARG2 + k),
+                     s_transpose_array);
          i = SCM_INUM (ve[k]);
-         SCM_ASSERT (SCM_INUMP (ve[k]) && i >= 0 && i < SCM_ARRAY_NDIM (ra),
-                 ve[k], SCM_ARG2, s_transpose_array);
+         SCM_ASSERT (i >= 0 && i < SCM_ARRAY_NDIM (ra), ve[k],
+                     SCM_OUTOFRANGE, s_transpose_array);
          if (ndim < i)
            ndim = i;
        }
@@ -865,7 +875,7 @@ scm_transpose_array (args)
              r->inc += s->inc;
            }
        }
-      SCM_ASSERT (ndim <= 0, args, "bad argument scm_list", s_transpose_array);
+      SCM_ASSERT (ndim <= 0, args, "bad argument list", s_transpose_array);
       scm_ra_set_contp (res);
       return res;
     }
@@ -905,6 +915,7 @@ scm_enclose_array (axes)
     case scm_tc7_dvect:
     case scm_tc7_cvect:
     case scm_tc7_vector:
+    case scm_tc7_wvect:
     case scm_tc7_svect:
 #ifdef LONGLONGS
     case scm_tc7_llvect:
@@ -1028,6 +1039,7 @@ tail:
     case scm_tc7_llvect:
 #endif
     case scm_tc7_vector:
+    case scm_tc7_wvect:
       SCM_ASRTGO (SCM_NULLP (args) && SCM_INUMP (ind), wna);
       return pos >= 0 && pos < SCM_LENGTH (v) ? SCM_BOOL_T : SCM_BOOL_F;
     }
@@ -1101,7 +1113,7 @@ scm_uniform_vector_ref (v, args)
       else
        return SCM_BOOL_F;
     case scm_tc7_string:
-      return SCM_MAKICHR (SCM_CHARS (v)[pos]);
+      return SCM_MAKICHR (SCM_UCHARS (v)[pos]);
     case scm_tc7_byvect:
       return SCM_MAKINUM (((char *)SCM_CHARS (v))[pos]);
 # ifdef SCM_INUMS_ONLY
@@ -1134,6 +1146,7 @@ scm_uniform_vector_ref (v, args)
                         ((double *) SCM_CDR (v))[2 * pos + 1]);
 #endif
     case scm_tc7_vector:
+    case scm_tc7_wvect:
       return SCM_VELTS (v)[pos];
     }
 }
@@ -1158,7 +1171,7 @@ scm_cvref (v, pos, last)
       else
        return SCM_BOOL_F;
     case scm_tc7_string:
-      return SCM_MAKICHR (SCM_CHARS (v)[pos]);
+      return SCM_MAKICHR (SCM_UCHARS (v)[pos]);
     case scm_tc7_byvect:
       return SCM_MAKINUM (((char *)SCM_CHARS (v))[pos]);
 # ifdef SCM_INUMS_ONLY
@@ -1209,6 +1222,7 @@ scm_cvref (v, pos, last)
                         ((double *) SCM_CDR (v))[2 * pos + 1]);
 #endif
     case scm_tc7_vector:
+    case scm_tc7_wvect:
       return SCM_VELTS (v)[pos];
     case scm_tc7_smob:
       {                                /* enclosed scm_array */
@@ -1230,6 +1244,8 @@ scm_cvref (v, pos, last)
 SCM_PROC(s_uniform_array_set1_x, "uniform-array-set1!", 3, 0, 0, scm_array_set_x);
 SCM_PROC(s_array_set_x, "array-set!", 2, 0, 1, scm_array_set_x);
 
+/* Note that args may be a list or an immediate object, depending which
+   PROC is used (and it's called from C too).  */
 SCM 
 scm_array_set_x (v, obj, args)
      SCM v;
@@ -1247,13 +1263,14 @@ scm_array_set_x (v, obj, args)
     {
       if (SCM_NIMP (args))
        {
-         SCM_ASSERT (SCM_CONSP (args) && SCM_INUMP (SCM_CAR (args)), args, SCM_ARG2, s_array_set_x);
-         pos = SCM_INUM (SCM_CAR (args));
+         SCM_ASSERT (SCM_CONSP(args) && SCM_INUMP (SCM_CAR (args)), args,
+                SCM_ARG3, s_array_set_x);
          SCM_ASRTGO (SCM_NULLP (SCM_CDR (args)), wna);
+         pos = SCM_INUM (SCM_CAR (args));
        }
       else
        {
-         SCM_ASSERT (SCM_INUMP (args), args, SCM_ARG2, s_array_set_x);
+         SCM_ASSERT (SCM_INUMP (args), args, SCM_ARG3, s_array_set_x);
          pos = SCM_INUM (args);
        }
       SCM_ASRTGO (pos >= 0 && pos < SCM_LENGTH (v), outrng);
@@ -1273,38 +1290,38 @@ scm_array_set_x (v, obj, args)
       else if (SCM_BOOL_T == obj)
        SCM_VELTS (v)[pos / SCM_LONG_BIT] |= (1L << (pos % SCM_LONG_BIT));
       else
-      badarg3:scm_wta (obj, (char *) SCM_ARG3, s_array_set_x);
+      badobj:scm_wta (obj, (char *) SCM_ARG2, s_array_set_x);
       break;
     case scm_tc7_string:
-      SCM_ASRTGO (SCM_ICHRP (obj), badarg3);
-      SCM_CHARS (v)[pos] = SCM_ICHR (obj);
+      SCM_ASRTGO (SCM_ICHRP (obj), badobj);
+      SCM_UCHARS (v)[pos] = SCM_ICHR (obj);
       break;
     case scm_tc7_byvect:
       if (SCM_ICHRP (obj))
-       obj = SCM_MAKINUM (SCM_ICHR (obj));
-      SCM_ASRTGO (SCM_INUMP (obj), badarg3);
+       obj = SCM_MAKINUM ((char) SCM_ICHR (obj));
+      SCM_ASRTGO (SCM_INUMP (obj), badobj);
       ((char *)SCM_CHARS (v))[pos] = SCM_INUM (obj);
       break;
 # ifdef SCM_INUMS_ONLY
     case scm_tc7_uvect:
-      SCM_ASRTGO (SCM_INUM (obj) >= 0, badarg3);
+      SCM_ASRTGO (SCM_INUM (obj) >= 0, badobj);
     case scm_tc7_ivect:
-    SCM_ASRTGO(SCM_INUMP(obj), badarg3); SCM_VELTS(v)[pos] = SCM_INUM(obj); break;
+    SCM_ASRTGO(SCM_INUMP(obj), badobj); SCM_VELTS(v)[pos] = SCM_INUM(obj); break;
 # else
   case scm_tc7_uvect:
-    SCM_VELTS(v)[pos] = scm_num2ulong(obj, (char *)SCM_ARG3, s_array_set_x); break;
+    SCM_VELTS(v)[pos] = scm_num2ulong(obj, (char *)SCM_ARG2, s_array_set_x); break;
   case scm_tc7_ivect:
-    SCM_VELTS(v)[pos] = num2long(obj, (char *)SCM_ARG3, s_array_set_x); break;
+    SCM_VELTS(v)[pos] = num2long(obj, (char *)SCM_ARG2, s_array_set_x); break;
 # endif
       break;
 
     case scm_tc7_svect:
-      SCM_ASRTGO (SCM_INUMP (obj), badarg3);
+      SCM_ASRTGO (SCM_INUMP (obj), badobj);
       ((short *) SCM_CDR (v))[pos] = SCM_INUM (obj);
       break;
 #ifdef LONGLONGS
     case scm_tc7_llvect:
-      ((long_long *) SCM_CDR (v))[pos] = scm_num2long_long (obj, (char *)SCM_ARG3, s_array_set_x);
+      ((long_long *) SCM_CDR (v))[pos] = scm_num2long_long (obj, (char *)SCM_ARG2, s_array_set_x);
       break;
 #endif
 
@@ -1312,21 +1329,22 @@ scm_array_set_x (v, obj, args)
 #ifdef SCM_FLOATS
 #ifdef SCM_SINGLES
     case scm_tc7_fvect:
-      SCM_ASRTGO (SCM_NIMP (obj) && SCM_REALP (obj), badarg3);
+      SCM_ASRTGO (SCM_NIMP (obj) && SCM_REALP (obj), badobj);
       ((float *) SCM_CDR (v))[pos] = SCM_REALPART (obj);
       break;
 #endif
     case scm_tc7_dvect:
-      SCM_ASRTGO (SCM_NIMP (obj) && SCM_REALP (obj), badarg3);
+      SCM_ASRTGO (SCM_NIMP (obj) && SCM_REALP (obj), badobj);
       ((double *) SCM_CDR (v))[pos] = SCM_REALPART (obj);
       break;
     case scm_tc7_cvect:
-      SCM_ASRTGO (SCM_NIMP (obj) && SCM_INEXP (obj), badarg3);
+      SCM_ASRTGO (SCM_NIMP (obj) && SCM_INEXP (obj), badobj);
       ((double *) SCM_CDR (v))[2 * pos] = SCM_REALPART (obj);
       ((double *) SCM_CDR (v))[2 * pos + 1] = SCM_CPLXP (obj) ? SCM_IMAG (obj) : 0.0;
       break;
 #endif
     case scm_tc7_vector:
+    case scm_tc7_wvect:
       SCM_VELTS (v)[pos] = obj;
       break;
     }
@@ -1349,6 +1367,7 @@ scm_array_contents (ra, strict)
     default:
       return SCM_BOOL_F;
     case scm_tc7_vector:
+    case scm_tc7_wvect:
     case scm_tc7_string:
     case scm_tc7_bvect:
     case scm_tc7_byvect:
@@ -1571,6 +1590,8 @@ scm_uniform_array_write (v, port_or_fd, start, end)
   long cstart = 0;
   long cend;
 
+  port_or_fd = SCM_COERCE_OUTPORT (port_or_fd);
+
   SCM_ASRTGO (SCM_NIMP (v), badarg1);
   if (SCM_UNBNDP (port_or_fd))
     port_or_fd = scm_cur_outp;
@@ -2010,6 +2031,7 @@ scm_array_to_list (v)
       SCM_ASRTGO (SCM_ARRAYP (v), badarg1);
       return ra2l (v, SCM_ARRAY_BASE (v), 0);
     case scm_tc7_vector:
+    case scm_tc7_wvect:
       return scm_vector_to_list (v);
     case scm_tc7_string:
       return scm_string_to_list (v);
@@ -2018,7 +2040,7 @@ scm_array_to_list (v)
        long *data = (long *) SCM_VELTS (v);
        register unsigned long mask;
        for (k = (SCM_LENGTH (v) - 1) / SCM_LONG_BIT; k > 0; k--)
-         for (mask = 1L << (SCM_LONG_BIT - 1); mask; mask >>= 1)
+         for (mask = 1UL << (SCM_LONG_BIT - 1); mask; mask >>= 1)
            res = scm_cons (((long *) data)[k] & mask ? SCM_BOOL_T : SCM_BOOL_F, res);
        for (mask = 1L << ((SCM_LENGTH (v) % SCM_LONG_BIT) - 1); mask; mask >>= 1)
          res = scm_cons (((long *) data)[k] & mask ? SCM_BOOL_T : SCM_BOOL_F, res);
@@ -2094,7 +2116,7 @@ scm_array_to_list (v)
 }
 
 
-static char s_bad_ralst[] = "Bad scm_array contents scm_list";
+static char s_bad_ralst[] = "Bad scm_array contents list";
 
 static int l2ra SCM_P ((SCM lst, SCM ra, scm_sizet base, scm_sizet k));
 
@@ -2116,7 +2138,7 @@ scm_list_to_uniform_array (ndim, prot, lst)
   while (k--)
     {
       n = scm_ilength (row);
-      SCM_ASSERT (n >= 0, lst, SCM_ARG2, s_list_to_uniform_array);
+      SCM_ASSERT (n >= 0, lst, SCM_ARG3, s_list_to_uniform_array);
       shp = scm_cons (SCM_MAKINUM (n), shp);
       if (SCM_NIMP (row))
        row = SCM_CAR (row);
@@ -2209,7 +2231,7 @@ tail:
            scm_iprin1 (ra, port, pstate);
          for (j += inc; n-- > 0; j += inc)
            {
-             scm_gen_putc (' ', port);
+             scm_putc (' ', port);
              SCM_ARRAY_BASE (ra) = j;
              scm_iprin1 (ra, port, pstate);
            }
@@ -2221,16 +2243,16 @@ tail:
          inc = SCM_ARRAY_DIMS (ra)[k].inc;
          for (i = SCM_ARRAY_DIMS (ra)[k].lbnd; i < SCM_ARRAY_DIMS (ra)[k].ubnd; i++)
            {
-             scm_gen_putc ('(', port);
+             scm_putc ('(', port);
              rapr1 (ra, j, k + 1, port, pstate);
-             scm_gen_puts (scm_regular_string, ") ", port);
+             scm_puts (") ", port);
              j += inc;
            }
          if (i == SCM_ARRAY_DIMS (ra)[k].ubnd)
            {                   /* could be zero size. */
-             scm_gen_putc ('(', port);
+             scm_putc ('(', port);
              rapr1 (ra, j, k + 1, port, pstate);
-             scm_gen_putc (')', port);
+             scm_putc (')', port);
            }
          break;
        }
@@ -2249,29 +2271,29 @@ tail:
        scm_iprin1 (scm_uniform_vector_ref (ra, SCM_MAKINUM (j)), port, pstate);
       for (j += inc; n-- > 0; j += inc)
        {
-         scm_gen_putc (' ', port);
+         scm_putc (' ', port);
          scm_iprin1 (scm_cvref (ra, j, SCM_UNDEFINED), port, pstate);
        }
       break;
     case scm_tc7_string:
       if (n-- > 0)
-       scm_iprin1 (SCM_MAKICHR (SCM_CHARS (ra)[j]), port, pstate);
+       scm_iprin1 (SCM_MAKICHR (SCM_UCHARS (ra)[j]), port, pstate);
       if (SCM_WRITINGP (pstate))
        for (j += inc; n-- > 0; j += inc)
          {
-           scm_gen_putc (' ', port);
-           scm_iprin1 (SCM_MAKICHR (SCM_CHARS (ra)[j]), port, pstate);
+           scm_putc (' ', port);
+           scm_iprin1 (SCM_MAKICHR (SCM_UCHARS (ra)[j]), port, pstate);
          }
       else
        for (j += inc; n-- > 0; j += inc)
-         scm_gen_putc (SCM_CHARS (ra)[j], port);
+         scm_putc (SCM_CHARS (ra)[j], port);
       break;
     case scm_tc7_byvect:
       if (n-- > 0)
        scm_intprint (((char *)SCM_CDR (ra))[j], 10, port);
       for (j += inc; n-- > 0; j += inc)
        {
-         scm_gen_putc (' ', port);
+         scm_putc (' ', port);
          scm_intprint (((char *)SCM_CDR (ra))[j], 10, port);
        }
       break;
@@ -2282,7 +2304,7 @@ tail:
        scm_intprint (SCM_VELTS (ra)[j], 10, port);
       for (j += inc; n-- > 0; j += inc)
        {
-         scm_gen_putc (' ', port);
+         scm_putc (' ', port);
          scm_intprint (SCM_VELTS (ra)[j], 10, port);
        }
       break;
@@ -2292,7 +2314,7 @@ tail:
        scm_intprint (((short *)SCM_CDR (ra))[j], 10, port);
       for (j += inc; n-- > 0; j += inc)
        {
-         scm_gen_putc (' ', port);
+         scm_putc (' ', port);
          scm_intprint (((short *)SCM_CDR (ra))[j], 10, port);
        }
       break;
@@ -2307,7 +2329,7 @@ tail:
          scm_floprint (z, port, pstate);
          for (j += inc; n-- > 0; j += inc)
            {
-             scm_gen_putc (' ', port);
+             scm_putc (' ', port);
              SCM_FLO (z) = ((float *) SCM_VELTS (ra))[j];
              scm_floprint (z, port, pstate);
            }
@@ -2322,7 +2344,7 @@ tail:
          scm_floprint (z, port, pstate);
          for (j += inc; n-- > 0; j += inc)
            {
-             scm_gen_putc (' ', port);
+             scm_putc (' ', port);
              SCM_REAL (z) = ((double *) SCM_VELTS (ra))[j];
              scm_floprint (z, port, pstate);
            }
@@ -2337,7 +2359,7 @@ tail:
          scm_floprint ((0.0 == SCM_IMAG (cz) ? z : cz), port, pstate);
          for (j += inc; n-- > 0; j += inc)
            {
-             scm_gen_putc (' ', port);
+             scm_putc (' ', port);
              SCM_REAL (z) = SCM_REAL (cz) = ((double *) SCM_VELTS (ra))[2 * j];
              SCM_IMAG (cz) = ((double *) SCM_VELTS (ra))[2 * j + 1];
              scm_floprint ((0.0 == SCM_IMAG (cz) ? z : cz), port, pstate);
@@ -2358,7 +2380,7 @@ scm_raprin1 (exp, port, pstate)
 {
   SCM v = exp;
   scm_sizet base = 0;
-  scm_gen_putc ('#', port);
+  scm_putc ('#', port);
 tail:
   switch SCM_TYP7
     (v)
@@ -2371,9 +2393,9 @@ tail:
        if (SCM_ARRAYP (v))
 
          {
-           scm_gen_puts (scm_regular_string, "<enclosed-array ", port);
+           scm_puts ("<enclosed-array ", port);
            rapr1 (exp, base, 0, port, pstate);
-           scm_gen_putc ('>', port);
+           scm_putc ('>', port);
            return 1;
          }
        else
@@ -2386,13 +2408,13 @@ tail:
       if (exp == v)
        {                       /* a uve, not an scm_array */
          register long i, j, w;
-         scm_gen_putc ('*', port);
+         scm_putc ('*', port);
          for (i = 0; i < (SCM_LENGTH (exp)) / SCM_LONG_BIT; i++)
            {
              w = SCM_VELTS (exp)[i];
              for (j = SCM_LONG_BIT; j; j--)
                {
-                 scm_gen_putc (w & 1 ? '1' : '0', port);
+                 scm_putc (w & 1 ? '1' : '0', port);
                  w >>= 1;
                }
            }
@@ -2402,52 +2424,52 @@ tail:
              w = SCM_VELTS (exp)[SCM_LENGTH (exp) / SCM_LONG_BIT];
              for (; j; j--)
                {
-                 scm_gen_putc (w & 1 ? '1' : '0', port);
+                 scm_putc (w & 1 ? '1' : '0', port);
                  w >>= 1;
                }
            }
          return 1;
        }
       else
-       scm_gen_putc ('b', port);
+       scm_putc ('b', port);
       break;
     case scm_tc7_string:
-      scm_gen_putc ('a', port);
+      scm_putc ('a', port);
       break;
     case scm_tc7_byvect:
-      scm_gen_puts (scm_regular_string, "bytes", port);
+      scm_puts ("bytes", port);
       break;
     case scm_tc7_uvect:
-      scm_gen_putc ('u', port);
+      scm_putc ('u', port);
       break;
     case scm_tc7_ivect:
-      scm_gen_putc ('e', port);
+      scm_putc ('e', port);
       break;
     case scm_tc7_svect:
-      scm_gen_puts (scm_regular_string, "short", port);
+      scm_puts ("short", port);
       break;
 #ifdef LONGLONGS
     case scm_tc7_llvect:
-      scm_gen_puts (scm_regular_string, "long_long", port);
+      scm_puts ("long_long", port);
       break;
 #endif
 #ifdef SCM_FLOATS
 #ifdef SCM_SINGLES
     case scm_tc7_fvect:
-      scm_gen_putc ('s', port);
+      scm_putc ('s', port);
       break;
 #endif /*SCM_SINGLES*/
     case scm_tc7_dvect:
-      scm_gen_putc ('i', port);
+      scm_putc ('i', port);
       break;
     case scm_tc7_cvect:
-      scm_gen_putc ('c', port);
+      scm_putc ('c', port);
       break;
 #endif /*SCM_FLOATS*/
     }
-  scm_gen_putc ('(', port);
+  scm_putc ('(', port);
   rapr1 (exp, base, 0, port, pstate);
-  scm_gen_putc (')', port);
+  scm_putc (')', port);
   return 1;
 }
 
@@ -2472,6 +2494,7 @@ loop:
       ra = SCM_ARRAY_V (ra);
       goto loop;
     case scm_tc7_vector:
+    case scm_tc7_wvect:
       return SCM_EOL;
     case scm_tc7_bvect:
       return SCM_BOOL_T;
@@ -2564,6 +2587,7 @@ scm_istr2bve (str, len)
 void 
 scm_init_unif ()
 {
+#include "unif.x"
   scm_make_subr (s_resizuve, scm_tc7_subr_2, scm_vector_set_length_x);
 }