mirror of
https://github.com/open-simh/simtools.git
synced 2026-04-29 21:16:44 +00:00
Move macro11 aside for incoming new version.
This commit is contained in:
110
crossassemblers/macro11.old/stream2.h
Normal file
110
crossassemblers/macro11.old/stream2.h
Normal file
@@ -0,0 +1,110 @@
|
||||
#ifndef STREAM2_H
|
||||
#define STREAM2_H
|
||||
|
||||
/*
|
||||
|
||||
Copyright (c) 2001, Richard Krehbiel
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
o Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
o Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
o Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGE.
|
||||
|
||||
*/
|
||||
|
||||
struct stream;
|
||||
|
||||
typedef struct stream_vtbl
|
||||
{
|
||||
void (*delete)(struct stream *stream); // Destructor
|
||||
char *(*gets)(struct stream *stream); // "gets" function
|
||||
void (*rewind)(struct stream *stream); // "rewind" function
|
||||
} STREAM_VTBL;
|
||||
|
||||
typedef struct stream
|
||||
{
|
||||
STREAM_VTBL *vtbl; // Pointer to dispatch table
|
||||
char *name; // Stream name
|
||||
int line; // Current line number in stream
|
||||
struct stream *next; // Next stream in stack
|
||||
} STREAM;
|
||||
|
||||
typedef struct file_stream
|
||||
{
|
||||
STREAM stream; // Base class
|
||||
FILE *fp; // File pointer
|
||||
char *buffer; // Line buffer
|
||||
} FILE_STREAM;
|
||||
|
||||
typedef struct buffer
|
||||
{
|
||||
char *buffer; // Pointer to text
|
||||
int size; // Size of buffer
|
||||
int length; // Occupied size of buffer
|
||||
int use; // Number of users of buffer
|
||||
} BUFFER;
|
||||
|
||||
#define GROWBUF_INCR 1024 // Buffers grow by leaps and bounds
|
||||
|
||||
typedef struct buffer_stream
|
||||
{
|
||||
STREAM stream; // Base class
|
||||
BUFFER *buffer; // text buffer
|
||||
int offset; // Current read offset
|
||||
} BUFFER_STREAM;
|
||||
|
||||
typedef struct stack
|
||||
{
|
||||
STREAM *top; // Top of stacked stream pieces
|
||||
} STACK;
|
||||
|
||||
#define STREAM_BUFFER_SIZE 1024 // This limits the max size of an input line.
|
||||
BUFFER *new_buffer(void);
|
||||
BUFFER *buffer_clone(BUFFER *from);
|
||||
void buffer_resize(BUFFER *buff, int size);
|
||||
void buffer_free(BUFFER *buf);
|
||||
void buffer_appendn(BUFFER *buf, char *str, int len);
|
||||
void buffer_append_line(BUFFER *buf, char *str);
|
||||
|
||||
STREAM *new_buffer_stream(BUFFER *buf, char *name);
|
||||
void buffer_stream_set_buffer(BUFFER_STREAM *bstr, BUFFER *buf);
|
||||
|
||||
/* Provide these so that macro11 can derive from a BUFFER_STREAM */
|
||||
extern STREAM_VTBL buffer_stream_vtbl;
|
||||
void buffer_stream_construct(BUFFER_STREAM *bstr, BUFFER *buf, char *name);
|
||||
char *buffer_stream_gets(STREAM *str);
|
||||
void buffer_stream_delete(STREAM *str);
|
||||
void buffer_stream_rewind(STREAM *str);
|
||||
|
||||
STREAM *new_file_stream(char *filename);
|
||||
|
||||
void stack_init(STACK *stack);
|
||||
void stack_push(STACK *stack, STREAM *str);
|
||||
void stack_pop(STACK *stack);
|
||||
char *stack_gets(STACK *stack);
|
||||
|
||||
#endif /* STREAM2_H */
|
||||
Reference in New Issue
Block a user