Index: vis_dev/glu-2.3/src/array/array.c
===================================================================
--- vis_dev/glu-2.3/src/array/array.c	(revision 13)
+++ vis_dev/glu-2.3/src/array/array.c	(revision 15)
@@ -65,4 +65,30 @@
     }
     (void) memcpy(newa->space, old->space, old->num * old->obj_size);
+    return newa;
+}
+
+array_t *
+array_partial_dup(array_t *old, int i)
+{
+    array_t *newa;
+
+    newa = ALLOC(array_t, 1);
+    if (newa == NIL(array_t)) {
+	return NIL(array_t);
+    }
+    newa->num = old->num - 1;
+    newa->n_size = old->num - 1;
+    newa->obj_size = old->obj_size;
+    newa->index = -newa->obj_size;
+    newa->space = ALLOC(char, newa->n_size * newa->obj_size);
+    if (newa->space == NIL(char)) {
+	FREE(newa);
+	return NIL(array_t);
+    }
+    if (i > 0)
+      (void) memcpy(newa->space, old->space, i * old->obj_size);
+    if (i < old->num - 1)
+      (void) memcpy(newa->space + ((i) * old->obj_size), 
+		    old->space + ((i+1) * old->obj_size), (old->num - (i + 1)) * old->obj_size);
     return newa;
 }
Index: vis_dev/glu-2.3/src/array/array.h
===================================================================
--- vis_dev/glu-2.3/src/array/array.h	(revision 13)
+++ vis_dev/glu-2.3/src/array/array.h	(revision 15)
@@ -34,4 +34,5 @@
 EXTERN int array_resize ARGS((array_t *, int));
 EXTERN char *array_do_data ARGS((array_t *));
+EXTERN array_t * array_partial_dup(array_t *old, int i);
 
 extern int unsigned array_global_index;
