Implement RENAME-FILE
[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 );
8e9db35f
PB
89 off_t sdTellFile( FileStream * Stream );
90 cell_t sdCloseFile( FileStream * Stream );
91 cell_t sdInputChar( FileStream *stream );
92
93 #ifdef __cplusplus
94 }
95 #endif
96
97 #define PF_SEEK_SET (0)
98 #define PF_SEEK_CUR (1)
99 #define PF_SEEK_END (2)
100 /*
101 ** printf() is only used for debugging purposes.
102 ** It is not required for normal operation.
103 */
104 #define PRT(x) /* No printf(). */
105
106#else
107
108 #ifdef PF_USER_FILEIO
109/* Get user prototypes or macros from include file.
110** API must match that defined above for the stubs.
111*/
112 #include PF_USER_FILEIO
113
114 #else
115 typedef FILE FileStream;
116
117 #define sdOpenFile fopen
118 #define sdDeleteFile remove
119 #define sdFlushFile fflush
120 #define sdReadFile fread
121 #define sdWriteFile fwrite
3c17aa8d 122 #if defined(WIN32) || defined(__NT__) || defined(AMIGA)
8e9db35f
PB
123 /* TODO To support 64-bit file offset we probably need fseeki64(). */
124 #define sdSeekFile fseek
125 #define sdTellFile ftell
126 #else
127 #define sdSeekFile fseeko
128 #define sdTellFile ftello
129 #endif
130 #define sdCloseFile fclose
6f3de396 131 #define sdRenameFile rename
8e9db35f
PB
132 #define sdInputChar fgetc
133
134 #define PF_STDIN ((FileStream *) stdin)
135 #define PF_STDOUT ((FileStream *) stdout)
136
1d7147ff
HE
137 #define PF_SEEK_SET (SEEK_SET)
138 #define PF_SEEK_CUR (SEEK_CUR)
139 #define PF_SEEK_END (SEEK_END)
8e9db35f
PB
140
141 /*
142 ** printf() is only used for debugging purposes.
143 ** It is not required for normal operation.
144 */
145 #define PRT(x) { printf x; sdFlushFile(PF_STDOUT); }
146 #endif
147
148#endif /* PF_NO_FILEIO */
149
150
151#ifdef __cplusplus
152extern "C" {
153#endif
154
155cell_t ioAccept( char *Target, cell_t n1 );
156cell_t ioKey( void);
157void ioEmit( char c );
158void ioType( const char *s, cell_t n);
159
160#ifdef __cplusplus
161}
162#endif
163
164#endif /* _pf_io_h */