cPickle release 0.3 from Jim Fulton
diff --git a/Modules/cStringIO.c b/Modules/cStringIO.c
index 104ab51..09b4051 100644
--- a/Modules/cStringIO.c
+++ b/Modules/cStringIO.c
@@ -51,70 +51,12 @@
     If you have questions regarding this software,
     contact:
    
-      Jim Fulton, jim@digicool.com
+      info@digicool.com
       Digital Creations L.C.  
    
       (540) 371-6909
 
 
-  $Log$
-  Revision 2.5  1997/04/11 19:56:06  guido
-  My own patch: support writable 'softspace' attribute.
-
-  Revision 2.4  1997/04/09 17:35:33  guido
-  Unknown changes by Jim Fulton.
-
-  Revision 1.16  1997/02/17 22:17:43  jim
-  *** empty log message ***
-
-  Revision 1.14  1997/01/24 19:56:24  chris
-  undid last change
-
-  Revision 1.13  1997/01/24 19:45:20  chris
-  extra byte in buffer no longer included in buf_size
-
-  Revision 1.12  1997/01/24 19:38:28  chris
-  *** empty log message ***
-
-  Revision 1.11  1997/01/23 20:45:01  jim
-  ANSIfied it.
-  Changed way C API was exported.
-
-  Revision 1.10  1997/01/02 15:19:55  chris
-  checked in to be sure repository is up to date.
-
-  Revision 1.9  1996/12/27 21:40:29  jim
-  Took out some lamosities in interface, like returning self from
-  write.
-
-  Revision 1.8  1996/12/23 15:52:49  jim
-  Added ifdef to check for CObject before using it.
-
-  Revision 1.7  1996/12/23 15:22:35  jim
-  Finished implementation, adding full compatibility with StringIO, and
-  then some.
-
-  We still need to take out some cStringIO oddities.
-
-  Revision 1.6  1996/10/15 18:42:07  jim
-  Added lots of casts to make warnings go away.
-
-  Revision 1.5  1996/10/11 21:03:42  jim
-  *** empty log message ***
-
-  Revision 1.4  1996/10/11 21:02:15  jim
-  *** empty log message ***
-
-  Revision 1.3  1996/10/07 20:51:38  chris
-  *** empty log message ***
-
-  Revision 1.2  1996/07/18 13:08:34  jfulton
-  *** empty log message ***
-
-  Revision 1.1  1996/07/15 17:06:33  jfulton
-  Initial version.
-
-
 */
 static char cStringIO_module_documentation[] = 
 "A simple fast partial StringIO replacement.\n"
@@ -142,6 +84,8 @@
 "  \n"
 "If someone else wants to provide a more complete implementation,\n"
 "go for it. :-)  \n"
+"\n"
+"$Id$\n"
 ;
 
 #include "Python.h"
@@ -150,8 +94,6 @@
 
 #define UNLESS(E) if(!(E))
 
-/* ----------------------------------------------------- */
-
 /* Declarations for objects of type StringO */
 
 typedef struct {
@@ -160,10 +102,6 @@
   int pos, string_size, buf_size, closed, softspace;
 } Oobject;
 
-staticforward PyTypeObject Otype;
-
-/* ---------------------------------------------------------------- */
-
 /* Declarations for objects of type StringI */
 
 typedef struct {
@@ -173,10 +111,6 @@
   PyObject *pbuf;
 } Iobject;
 
-staticforward PyTypeObject Itype;
-
-/* ---------------------------------------------------------------- */
-
 static char O_reset__doc__[] = 
 "reset() -- Reset the file position to the beginning"
 ;
@@ -343,7 +277,14 @@
 
 static PyObject *
 O_getval(Oobject *self, PyObject *args) {
-  return PyString_FromStringAndSize(self->buf, self->pos);
+  PyObject *use_pos;
+  int s;
+
+  use_pos=Py_None;
+  UNLESS(PyArg_ParseTuple(args,"|O",&use_pos)) return NULL;
+  if(PyObject_IsTrue(use_pos)) s=self->pos;
+  else                         s=self->string_size;
+  return PyString_FromStringAndSize(self->buf, s);
 }
 
 static PyObject *
@@ -434,7 +375,12 @@
   {"reset",      (PyCFunction)O_reset,        0,      O_reset__doc__},
   {"seek",       (PyCFunction)O_seek,         1,      O_seek__doc__},
   {"tell",       (PyCFunction)O_tell,         0,      O_tell__doc__},
-  {"getvalue",   (PyCFunction)O_getval,       0,      "getvalue() -- Get the string value"},
+  {"getvalue",   (PyCFunction)O_getval,       1,
+   "getvalue([use_pos]) -- Get the string value."
+   "\n"
+   "If use_pos is specified and is a true value, then the string returned\n"
+   "will include only the text up to the current file position.\n"
+  },
   {"truncate",   (PyCFunction)O_truncate,     0,      O_truncate__doc__},
   {"isatty",     (PyCFunction)O_isatty,       0,      O_isatty__doc__},
   {"close",      (PyCFunction)O_close,        0,      O_close__doc__},
@@ -443,32 +389,6 @@
   {NULL,		NULL}		/* sentinel */
 };
 
-/* ---------- */
-
-
-static PyObject *
-newOobject(int  size) {
-  Oobject *self;
-	
-  self = PyObject_NEW(Oobject, &Otype);
-  if (self == NULL)
-    return NULL;
-  self->pos=0;
-  self->closed = 0;
-  self->string_size = 0;
-  self->softspace = 0;
-
-  UNLESS(self->buf=malloc(size*sizeof(char)))
-    {
-      PyErr_SetString(PyExc_MemoryError,"out of memory");
-      self->buf_size = 0;
-      return NULL;
-    }
-
-  self->buf_size=size;
-  return (PyObject*)self;
-}
-
 
 static void
 O_dealloc(Oobject *self) {
@@ -527,6 +447,29 @@
   Otype__doc__ 		/* Documentation string */
 };
 
+static PyObject *
+newOobject(int  size) {
+  Oobject *self;
+	
+  self = PyObject_NEW(Oobject, &Otype);
+  if (self == NULL)
+    return NULL;
+  self->pos=0;
+  self->closed = 0;
+  self->string_size = 0;
+  self->softspace = 0;
+
+  UNLESS(self->buf=malloc(size*sizeof(char)))
+    {
+      PyErr_SetString(PyExc_MemoryError,"out of memory");
+      self->buf_size = 0;
+      return NULL;
+    }
+
+  self->buf_size=size;
+  return (PyObject*)self;
+}
+
 /* End of code for StringO objects */
 /* -------------------------------------------------------- */
 
@@ -554,29 +497,6 @@
   {NULL,		NULL}		/* sentinel */
 };
 
-/* ---------- */
-
-
-static PyObject *
-newIobject(PyObject *s) {
-  Iobject *self;
-  char *buf;
-  int size;
-	
-  UNLESS(buf=PyString_AsString(s)) return NULL;
-  UNLESS(-1 != (size=PyString_Size(s))) return NULL;
-  UNLESS(self = PyObject_NEW(Iobject, &Itype)) return NULL;
-  Py_INCREF(s);
-  self->buf=buf;
-  self->string_size=size;
-  self->pbuf=s;
-  self->pos=0;
-  self->closed = 0;
-  
-  return (PyObject*)self;
-}
-
-
 static void
 I_dealloc(Iobject *self) {
   Py_DECREF(self->pbuf);
@@ -617,6 +537,25 @@
   Itype__doc__ 		/* Documentation string */
 };
 
+static PyObject *
+newIobject(PyObject *s) {
+  Iobject *self;
+  char *buf;
+  int size;
+	
+  UNLESS(buf=PyString_AsString(s)) return NULL;
+  UNLESS(-1 != (size=PyString_Size(s))) return NULL;
+  UNLESS(self = PyObject_NEW(Iobject, &Itype)) return NULL;
+  Py_INCREF(s);
+  self->buf=buf;
+  self->string_size=size;
+  self->pbuf=s;
+  self->pos=0;
+  self->closed = 0;
+  
+  return (PyObject*)self;
+}
+
 /* End of code for StringI objects */
 /* -------------------------------------------------------- */
 
@@ -676,8 +615,67 @@
   /* Export Types */
   PyDict_SetItemString(d,"InputType",  (PyObject*)&Itype);
   PyDict_SetItemString(d,"OutputType", (PyObject*)&Otype);
+
+  /* Maybe make certain warnings go away */
+  if(0) PycString_IMPORT;
   
   /* Check for errors */
   if (PyErr_Occurred()) Py_FatalError("can't initialize module cStringIO");
 }
 
+
+/******************************************************************************
+
+  $Log$
+  Revision 2.6  1997/08/13 03:14:41  guido
+  cPickle release 0.3 from Jim Fulton
+
+  Revision 1.21  1997/06/19 18:51:42  jim
+  Added ident string.
+
+  Revision 1.20  1997/06/13 20:50:50  jim
+  - Various changes to make gcc -Wall -pedantic happy, including
+    getting rid of staticforward declarations and adding pretend use
+    of two statics defined in .h file.
+
+  Revision 1.19  1997/06/02 18:15:17  jim
+  Merged in guido's changes.
+
+  Revision 1.18  1997/05/07 16:26:47  jim
+  getvalue() can nor be given an argument.  If this argument is true,
+  then getvalue returns the text upto the current position.  Otherwise
+  it returns all of the text.  The default value of the argument is
+  false.
+
+  Revision 1.17  1997/04/17 18:02:46  chris
+  getvalue() now returns entire string, not just the string up to
+  current position
+
+  Revision 2.5  1997/04/11 19:56:06  guido
+  My own patch: support writable 'softspace' attribute.
+
+  > Jim asked: What is softspace for?
+  
+  It's an old feature.  The print statement uses this to remember
+  whether it should insert a space before the next item or not.
+  Implementation is in fileobject.c.
+
+  Revision 1.11  1997/01/23 20:45:01  jim
+  ANSIfied it.
+  Changed way C API was exported.
+
+  Revision 1.10  1997/01/02 15:19:55  chris
+  checked in to be sure repository is up to date.
+
+  Revision 1.9  1996/12/27 21:40:29  jim
+  Took out some lamosities in interface, like returning self from
+  write.
+
+  Revision 1.8  1996/12/23 15:52:49  jim
+  Added ifdef to check for CObject before using it.
+
+  Revision 1.7  1996/12/23 15:22:35  jim
+  Finished implementation, adding full compatibility with StringIO, and
+  then some.
+
+ *****************************************************************************/