Panda3D

Loading...
Searching...
No Matches
pfstreamBuf.h
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file pfstreamBuf.h
10 * @author cary
11 * @date 2000-12-12
12 */
13
14#ifndef __PFSTREAMBUF_H__
15#define __PFSTREAMBUF_H__
16
17#include "dtoolbase.h"
18#include <string>
19#include <stdio.h>
20
21// By default, we'll use the Windows flavor of pipe functions if we're
22// compiling under Windows. Turn this off to use popen(), even on Windows.
23// (popen() doesn't seem to work on Win9x, although it does work on NT-based
24// variants.)
25#ifdef WIN32_VC
26#define WIN_PIPE_CALLS 1
27#endif
28
29#ifdef WIN_PIPE_CALLS
30#ifndef WIN32_LEAN_AND_MEAN
31#define WIN32_LEAN_AND_MEAN 1
32#endif
33#include <windows.h>
34
35#else // WIN_PIPE_CALLS
36
37#ifdef WIN32_VC
38#define popen _popen
39#define pclose _pclose
40#endif
41
42#endif // WIN_PIPE_CALLS
43
44 class EXPCL_DTOOL_DTOOLUTIL PipeStreamBuf : public std::streambuf {
45 public:
46 enum Direction { Input, Output };
47
48 PipeStreamBuf(Direction);
49 virtual ~PipeStreamBuf(void);
50
51 void flush();
52 void command(const std::string);
53
54 protected:
55 virtual int overflow(int c);
56 virtual int sync(void);
57 virtual int underflow(void);
58 private:
59 void init_pipe();
60 bool is_open() const;
61 bool eof_pipe() const;
62 bool open_pipe(const std::string &cmd);
63 void close_pipe();
64 size_t write_pipe(const char *data, size_t len);
65 size_t read_pipe(char *data, size_t len);
66
67 Direction _dir;
68 std::string _line_buffer;
69
70#ifndef WIN_PIPE_CALLS
71 FILE *_pipe;
72
73#else // WIN_PIPE_CALLS
74 HANDLE _child_out;
75#endif // WIN_PIPE_CALLS
76
77 void write_chars(const char*, int, bool);
78};
79
80#endif /* __PFSTREAMBUF_H__ */
dtoolbase.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.