/* * R : A Computer Language for Statistical Data Analysis * Copyright (C) 1997 Robert Gentleman and Ross Ihaka * Copyright (C) 2005 R Core Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, a copy is available at * https://www.R-project.org/Licenses/ */ /* Internal header, not installed */ #ifndef R_IOSTUFF_H #define R_IOSTUFF_H /* * I/O Support for Consoles and Character Vectors * * This code provides analogues for the stdio routines "fgetc" and * (formerly) "ungetc" for "consoles" and character vectors. These routines * are used for parsing input from the console window and character * vectors. */ #include #include #define IOBSIZE 4096 typedef struct BufferListItem { unsigned char buf[IOBSIZE]; struct BufferListItem *next; } BufferListItem; typedef struct IoBuffer { BufferListItem *start_buf; /* First buffer item */ BufferListItem *write_buf; /* Write pointer location */ unsigned char *write_ptr; /* Write pointer location */ int write_offset; /* Write pointer location */ BufferListItem *read_buf; /* Read pointer location */ unsigned char *read_ptr; /* Read pointer location */ int read_offset; /* Read pointer location */ } IoBuffer; typedef struct TextBuffer { void *vmax; /* Memory stack top */ unsigned char *buf; /* Line buffer */ unsigned char *bufp; /* Line buffer location */ SEXP text; /* String Vector */ int ntext; /* Vector length */ int offset; /* Offset within vector */ } TextBuffer; #ifndef __MAIN__ extern #else attribute_hidden #endif IoBuffer R_ConsoleIob; /* Console IO Buffer */ /*- some of these really could be void */ int R_IoBufferInit(IoBuffer*); int R_IoBufferFree(IoBuffer*); int R_IoBufferReadReset(IoBuffer*); int R_IoBufferWriteReset(IoBuffer*); int R_IoBufferGetc(IoBuffer*); int R_IoBufferPutc(int, IoBuffer*); int R_IoBufferPuts(char*, IoBuffer*); int R_IoBufferReadOffset(IoBuffer*); int R_TextBufferInit(TextBuffer*, SEXP); int R_TextBufferFree(TextBuffer*); int R_TextBufferGetc(TextBuffer*); #endif /* not R_IOSTUFF_H */