diff src/procstream.cc @ 1380:79f80c6229be

[project @ 1995-09-12 07:03:33 by jwe]
author jwe
date Tue, 12 Sep 1995 07:06:14 +0000
parents 611d403c7f3d
children 067f11a46742
line wrap: on
line diff
--- a/src/procstream.cc	Tue Sep 12 00:41:58 1995 +0000
+++ b/src/procstream.cc	Tue Sep 12 07:06:14 1995 +0000
@@ -29,34 +29,121 @@
 #include <config.h>
 #endif
 
+#include <fstream.h>
+#include <procbuf.h>
+
 #include "procstream.h"
 
-procstreambase::procstreambase (void)
+iprocstream::iprocstream (void)
 {
-  init (new procbuf ());
+  pbuf = new procbuf ();
+
+  init (pbuf);
 }
 
-procstreambase::procstreambase (const char *command, int mode)
+iprocstream::iprocstream (const char *command, int mode)
 {
-  init (new procbuf ());
-  if (! rdbuf()->open (command, mode))
+  pbuf = new procbuf ();
+
+  init (pbuf);
+
+  if (! pbuf->open (command, mode))
     set (ios::badbit);
 }
 
+iprocstream::~iprocstream (void)
+{
+  close ();
+}
+
 void
-procstreambase::open (const char *command, int mode)
+iprocstream::open (const char *command, int mode)
 {
   clear ();
-  if (! rdbuf()->open (command, mode))
+
+  if (! pbuf)
+    pbuf = new procbuf ();
+
+  if (! pbuf->open (command, mode))
     set (ios::badbit);
 }
 
 int
-procstreambase::close (void)
+iprocstream::is_open (void)
+{
+  return pbuf && pbuf->is_open ();
+}
+
+int
+iprocstream::close (void)
+{
+  int status = 0;
+
+  if (is_open ())
+    {
+
+      status = pbuf->sys_close ();
+
+      if (! pbuf->close ())
+	set (ios::failbit);
+    }
+
+  return status;
+}
+
+oprocstream::oprocstream (void)
+{
+  pbuf = new procbuf ();
+
+  init (pbuf);
+}
+
+oprocstream::oprocstream (const char *command, int mode)
 {
-  int status = rdbuf()->sys_close ();
-  if (! rdbuf()->close ())
-    set (ios::failbit);
+  pbuf = new procbuf ();
+
+  init (pbuf);
+
+  if (! pbuf->open (command, mode))
+    set (ios::badbit);
+}
+
+oprocstream::~oprocstream (void)
+{
+  close ();
+}
+
+void
+oprocstream::open (const char *command, int mode)
+{
+  clear ();
+
+  if (! pbuf)
+    pbuf = new procbuf ();
+
+  if (! pbuf->open (command, mode))
+    set (ios::badbit);
+}
+
+int
+oprocstream::is_open (void)
+{
+  return pbuf && pbuf->is_open ();
+}
+
+int
+oprocstream::close (void)
+{
+  int status = 0;
+
+  if (is_open ())
+    {
+      status = pbuf->sys_close ();
+
+      if (! pbuf->close ())
+	set (ios::failbit);
+    }
+
   return status;
 }