added everything
This commit is contained in:
92
lib/maxsdk70/include/maxscrpt/pipe.h
Executable file
92
lib/maxsdk70/include/maxscrpt/pipe.h
Executable file
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Pipe.h - NT TCHAR Pipe wrapper for MAXScript
|
||||
*
|
||||
* Copyright <20> John Wainwright 1996
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _H_PIPE
|
||||
#define _H_PIPE
|
||||
|
||||
#include "Strings.h"
|
||||
class FileStream;
|
||||
|
||||
#define PIPE_BUF_SIZE 512
|
||||
|
||||
// The undelivered data in the pipe is held in a linked list of
|
||||
// buffers, pointed into by read and write cursors.
|
||||
// A side list is kept if writers supply info about sourcing files.
|
||||
// This is provided to readers like the compiler to add source
|
||||
// tags to generated code.
|
||||
|
||||
typedef struct src_info src_info;
|
||||
struct src_info
|
||||
{
|
||||
src_info* next; // next marker
|
||||
TCHAR* start; // source start character in buffer chain
|
||||
Value* file; // sourcing file name if any
|
||||
int offset; // starting offset into source
|
||||
};
|
||||
|
||||
class Pipe : public CharStream
|
||||
{
|
||||
public:
|
||||
TCHAR* write_buffer; // pipe buffers & cursors
|
||||
TCHAR* write_cursor;
|
||||
TCHAR* read_buffer;
|
||||
TCHAR* read_cursor;
|
||||
int ungetch_count;
|
||||
|
||||
CRITICAL_SECTION pipe_update; // for syncing pipe updates
|
||||
HANDLE pipe_event; // for signalling data ready
|
||||
HANDLE restart_event; // used to restart a stopped pipe
|
||||
BOOL waiting; // reader is waiting for data
|
||||
BOOL stopped; // pipe reading is blocked
|
||||
|
||||
FileStream* log; // log stream if non-NULL
|
||||
|
||||
Value* read_source_file; // sourcing file for reading if supplied by writer
|
||||
int read_source_offset; // running reader offset in source
|
||||
src_info* markers; // marker list...
|
||||
src_info* marker_tail;
|
||||
TCHAR* next_source_start; // upcoming marker starting character
|
||||
Value* write_source_file; // current write source file, used to determine source change
|
||||
int write_source_offset;// running writer offset
|
||||
|
||||
Pipe();
|
||||
~Pipe();
|
||||
|
||||
# define is_pipe(o) ((o)->tag == INTERNAL_PIPE_TAG)
|
||||
void collect() { delete this; }
|
||||
void gc_trace();
|
||||
|
||||
TCHAR get_char();
|
||||
void unget_char(TCHAR c);
|
||||
TCHAR peek_char();
|
||||
int at_eos();
|
||||
int pos() { return read_source_offset; }
|
||||
void rewind();
|
||||
void flush_to_eol();
|
||||
void flush_to_eobuf();
|
||||
|
||||
void put_char(TCHAR c, Value* source_file = NULL, int offset = 0);
|
||||
void put_str(TCHAR* str, Value* source_file = NULL, int offset = 0);
|
||||
void put_buf(TCHAR* str, size_t count, Value* source_file = NULL, int offset = 0);
|
||||
void new_write_buffer();
|
||||
void check_write_source_change(Value* file, int offset, int new_len);
|
||||
void read_source_change();
|
||||
void clear_source();
|
||||
void stop();
|
||||
void go();
|
||||
|
||||
TCHAR* puts(TCHAR* str);
|
||||
int printf(const TCHAR *format, ...);
|
||||
|
||||
void log_to(FileStream* log);
|
||||
void close_log();
|
||||
CharStream* get_log() { return log; }
|
||||
|
||||
Value* get_file_name();
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user