wvconstream.cc

00001 /*
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  * 
00005  * Declarations for wvcon, wvin, wvout, and wverr global streams.
00006  */
00007 #include "wvfdstream.h"
00008 #include "wvmoniker.h"
00009 #include "wvlinkerhack.h"
00010 
00011 WV_LINK(WvConStream);
00012 
00013 // just like WvFDStream, but doesn't close the fd
00014 class _WvConStream : public WvFDStream
00015 {
00016 public:
00017     bool isopen;
00018     
00019     _WvConStream(int _rfd, int _wfd, WvStringParm name = WvString::null);
00020     virtual ~_WvConStream();
00021     virtual void close();
00022     virtual bool isok() const;
00023 };
00024 
00025 
00026 static IWvStream *create_stdin(WvStringParm s)
00027 {
00028     return new _WvConStream(0, -1);
00029 }
00030 static IWvStream *create_stdout(WvStringParm s)
00031 {
00032     return new _WvConStream(-1, 1);
00033 }
00034 static IWvStream *create_stderr(WvStringParm s)
00035 {
00036     return new _WvConStream(-1, 2);
00037 }
00038 static IWvStream *create_stdio(WvStringParm s)
00039 {
00040     return new _WvConStream(0, 1);
00041 }
00042 
00043 static WvMoniker<IWvStream> reg0("stdin",  create_stdin);
00044 static WvMoniker<IWvStream> reg1("stdout", create_stdout);
00045 static WvMoniker<IWvStream> reg2("stderr", create_stderr);
00046 static WvMoniker<IWvStream> reg3("stdio",  create_stdio);
00047 
00048 
00049 
00050 _WvConStream::_WvConStream(int _rfd, int _wfd,
00051         WvStringParm name)
00052     : WvFDStream(_rfd, _wfd)
00053 {
00054     isopen = true;
00055     if (!name.isnull())
00056         set_wsname(name);
00057 }
00058 
00059 
00060 _WvConStream::~_WvConStream()
00061 {
00062     close();
00063 }
00064 
00065 
00066 void _WvConStream::close()
00067 {
00068     isopen = false;
00069     setfd(-1); // prevent WvFdStream from closing our fds
00070     WvFDStream::close();
00071 }
00072 
00073 
00074 bool _WvConStream::isok() const
00075 {
00076     return isopen;
00077 }
00078 
00079 
00080 // console streams
00081 #ifdef _WIN32
00082 
00083 #include "streams.h"
00084 SocketFromFDMaker _zero(_dup(0), fd2socket_fwd, false);
00085 SocketFromFDMaker _one(1, socket2fd_fwd, true);
00086 SocketFromFDMaker _two(2, socket2fd_fwd, true);
00087 
00088 static _WvConStream _wvcon(_zero.GetSocket(), _one.GetSocket(), "wvcon");
00089 static _WvConStream _wvin(_zero.GetSocket(), -1, "wvin");
00090 static _WvConStream _wvout(-1, _one.GetSocket(), "wvout");
00091 static _WvConStream _wverr(-1, _two.GetSocket(), "wverr");
00092 
00093 #else // _WIN32
00094 
00095 static _WvConStream _wvcon(0, 1, "wvcon");
00096 static _WvConStream _wvin(0, -1, "wvin");
00097 static _WvConStream _wvout(-1, 1, "wvout");
00098 static _WvConStream _wverr(-1, 2, "wverr");
00099 
00100 #endif // !_WIN32
00101 
00102 WvStream *wvcon = &_wvcon;
00103 WvStream *wvin = &_wvin;
00104 WvStream *wvout = &_wvout;
00105 WvStream *wverr = &_wverr;
00106 

Generated on Thu Jan 24 16:50:56 2008 for WvStreams by  doxygen 1.5.4