This introduces a RESIZE-FILE-LIMIT
[pforth] / csrc / pf_io.h
CommitLineData
8e9db35f
PB
1/* @(#) pf_io.h 98/01/26 1.2 */
2#ifndef _pf_io_h
3#define _pf_io_h
4
5/***************************************************************
6** Include file for PForth IO
7**
8** Author: Phil Burk
9** Copyright 1994 3DO, Phil Burk, Larry Polansky, David Rosenboom
10**
11** The pForth software code is dedicated to the public domain,
12** and any third party may reproduce, distribute and modify
13** the pForth software code or any derivative works thereof
14** without any compensation or license. The pForth software
15** code is provided on an "as is" basis without any warranty
16** of any kind, including, without limitation, the implied
17** warranties of merchantability and fitness for a particular
18** purpose and their equivalents under the laws of any jurisdiction.
19**
20***************************************************************/
21
22#define PF_CHAR_XON (0x11)
23#define PF_CHAR_XOFF (0x13)
24
25int sdTerminalOut( char c );
26int sdTerminalEcho( char c );
27int sdTerminalFlush( void );
28int sdTerminalIn( void );
29int sdQueryTerminal( void );
30void sdTerminalInit( void );
31void sdTerminalTerm( void );
32
33void ioInit( void );
34void ioTerm( void );
35
36
37#ifdef PF_NO_CHARIO
38 void sdEnableInput( void );
39 void sdDisableInput( void );
40
41#else /* PF_NO_CHARIO */
42 #ifdef PF_USER_CHARIO
43/* Get user prototypes or macros from include file.
44** API must match that defined above for the stubs.
45*/
46/* If your sdTerminalIn echos, define PF_KEY_ECHOS. */
47 #include PF_USER_CHARIO
48 #else
49 #define sdEnableInput() /* sdTerminalOut( PF_CHAR_XON ) */
50 #define sdDisableInput() /* sdTerminalOut( PF_CHAR_XOFF ) */
51
52 #endif
53#endif /* PF_NO_CHARIO */
54
55/* Define file access modes. */
56/* User can #undef and re#define using PF_USER_FILEIO if needed. */
57#define PF_FAM_READ_ONLY (0)
58#define PF_FAM_READ_WRITE (1)
59#define PF_FAM_WRITE_ONLY (2)
60#define PF_FAM_BINARY_FLAG (8)
61
62#define PF_FAM_CREATE_WO ("w")
63#define PF_FAM_CREATE_RW ("w+")
64#define PF_FAM_OPEN_RO ("r")
65#define PF_FAM_OPEN_RW ("r+")
66#define PF_FAM_BIN_CREATE_WO ("wb")
67#define PF_FAM_BIN_CREATE_RW ("wb+")
68#define PF_FAM_BIN_OPEN_RO ("rb")
69#define PF_FAM_BIN_OPEN_RW ("rb+")
70
71#ifdef PF_NO_FILEIO
72
73 typedef void FileStream;
74
75 extern FileStream *PF_STDIN;
76 extern FileStream *PF_STDOUT;
77
78 #ifdef __cplusplus
79 extern "C" {
80 #endif
81
82 /* Prototypes for stubs. */
83 FileStream *sdOpenFile( const char *FileName, const char *Mode );
84 cell_t sdFlushFile( FileStream * Stream );
85 cell_t sdReadFile( void *ptr, cell_t Size, int32_t nItems, FileStream * Stream );
86 cell_t sdWriteFile( void *ptr, cell_t Size, int32_t nItems, FileStream * Stream );
87 cell_t sdSeekFile( FileStream * Stream, off_t Position, int32_t Mode );
6f3de396 88 cell_t sdRenameFile( const char *OldName, const char *NewName );
e0701bfb 89 cell_t sdDeleteFile( const char *FileName );
0b1e2489 90 ThrowCode sdResizeFile( FileStream *, uint64_t Size);
8e9db35f
PB
91 off_t sdTellFile( FileStream * Stream );
92 cell_t sdCloseFile( FileStream * Stream );
93 cell_t sdInputChar( FileStream *stream );
94
95 #ifdef __cplusplus
96 }
97 #endif
98
99 #define PF_SEEK_SET (0)
100 #define PF_SEEK_CUR (1)
101 #define PF_SEEK_END (2)
102 /*
103 ** printf() is only used for debugging purposes.
104 ** It is not required for normal operation.
105 */
106 #define PRT(x) /* No printf(). */
107
108#else
109
110 #ifdef PF_USER_FILEIO
111/* Get user prototypes or macros from include file.
112** API must match that defined above for the stubs.
113*/
114 #include PF_USER_FILEIO
115
116 #else
117 typedef FILE FileStream;
118
119 #define sdOpenFile fopen
e0701bfb 120 #define sdDeleteFile remove
8e9db35f
PB
121 #define sdFlushFile fflush
122 #define sdReadFile fread
123 #define sdWriteFile fwrite
3c17aa8d 124 #if defined(WIN32) || defined(__NT__) || defined(AMIGA)
8e9db35f
PB
125 /* TODO To support 64-bit file offset we probably need fseeki64(). */
126 #define sdSeekFile fseek
127 #define sdTellFile ftell
128 #else
129 #define sdSeekFile fseeko
130 #define sdTellFile ftello
131 #endif
132 #define sdCloseFile fclose
6f3de396 133 #define sdRenameFile rename
8e9db35f
PB
134 #define sdInputChar fgetc
135
136 #define PF_STDIN ((FileStream *) stdin)
137 #define PF_STDOUT ((FileStream *) stdout)
138
1d7147ff
HE
139 #define PF_SEEK_SET (SEEK_SET)
140 #define PF_SEEK_CUR (SEEK_CUR)
141 #define PF_SEEK_END (SEEK_END)
8e9db35f 142
0b1e2489 143 ThrowCode sdResizeFile( FileStream *, uint64_t Size);
e0701bfb 144
8e9db35f
PB
145 /*
146 ** printf() is only used for debugging purposes.
147 ** It is not required for normal operation.
148 */
149 #define PRT(x) { printf x; sdFlushFile(PF_STDOUT); }
150 #endif
151
152#endif /* PF_NO_FILEIO */
153
154
155#ifdef __cplusplus
156extern "C" {
157#endif
158
159cell_t ioAccept( char *Target, cell_t n1 );
160cell_t ioKey( void);
161void ioEmit( char c );
162void ioType( const char *s, cell_t n);
163
164#ifdef __cplusplus
165}
166#endif
167
168#endif /* _pf_io_h */