00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef GWENHYWFAR_BUFFEREDIO_H
00030 #define GWENHYWFAR_BUFFEREDIO_H
00031
00032 #include <gwenhywfar/gwenhywfarapi.h>
00033 #include <gwenhywfar/inherit.h>
00034
00035 #ifdef __cplusplus
00036 extern "C" {
00037 #endif
00038 typedef struct GWEN_BUFFEREDIOSTRUCT GWEN_BUFFEREDIO;
00039 GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_BUFFEREDIO, GWENHYWFAR_API)
00040
00041 #ifdef __cplusplus
00042 }
00043 #endif
00044
00045 #include <gwenhywfar/error.h>
00046
00047
00048 #include <gwenhywfar/bio_file.h>
00049 #include <gwenhywfar/bio_socket.h>
00050 #include <gwenhywfar/bio_buffer.h>
00051 #include <gwenhywfar/buffer.h>
00052
00053
00054
00055 #ifdef __cplusplus
00056 extern "C" {
00057 #endif
00058
00059 #define GWEN_BUFFEREDIO_ERROR_TYPE "BufferedIO"
00060 #define GWEN_BUFFEREDIO_ERROR_READ 1
00061 #define GWEN_BUFFEREDIO_ERROR_WRITE 2
00062 #define GWEN_BUFFEREDIO_ERROR_CLOSE 3
00063 #define GWEN_BUFFEREDIO_ERROR_TIMEOUT 4
00064 #define GWEN_BUFFEREDIO_ERROR_PARTIAL 5
00065 #define GWEN_BUFFEREDIO_ERROR_EOF 6
00066 #define GWEN_BUFFEREDIO_ERROR_NO_DATA 7
00067
00068
00069 #define GWEN_BUFFEREDIO_CHAR_ERROR (-1)
00070 #define GWEN_BUFFEREDIO_CHAR_EOF (-2)
00071 #define GWEN_BUFFEREDIO_CHAR_NO_DATA (-3)
00072
00073
00075 #define GWEN_BUFFEREDIO_FLAGS_CLOSE 0x00000001
00076
00077 #define GWEN_BUFFEREDIO_FLAGS_DEFAULT \
00078 (\
00079 GWEN_BUFFEREDIO_FLAGS_CLOSE\
00080 )
00081
00082
00083
00084 typedef enum {
00085 GWEN_LineModeUnix=0,
00086 GWEN_LineModeDOS
00087 } GWEN_BUFFEREDIOLINEMODE;
00088
00089 typedef GWEN_ERRORCODE (*GWEN_BUFFEREDIOREADFN)(GWEN_BUFFEREDIO *dm,
00090 char *buffer,
00091 int *size,
00092 int timeout);
00093 typedef GWEN_ERRORCODE (*GWEN_BUFFEREDIOWRITEFN)(GWEN_BUFFEREDIO *dm,
00094 const char *buffer,
00095 int *size,
00096 int timeout);
00097 typedef GWEN_ERRORCODE (*GWEN_BUFFEREDIOCLOSEFN)(GWEN_BUFFEREDIO *dm);
00098
00099
00100
00106 GWENHYWFAR_API GWEN_BUFFEREDIO *GWEN_BufferedIO_new();
00107
00112 GWENHYWFAR_API void GWEN_BufferedIO_free(GWEN_BUFFEREDIO *dm);
00113
00124 GWENHYWFAR_API void GWEN_BufferedIO_SetReadBuffer(GWEN_BUFFEREDIO *bt,
00125 char *buffer,
00126 int len);
00127
00137 GWENHYWFAR_API void GWEN_BufferedIO_SetWriteBuffer(GWEN_BUFFEREDIO *bt,
00138 char *buffer,
00139 int len);
00140
00146 GWENHYWFAR_API int GWEN_BufferedIO_CheckEOF(GWEN_BUFFEREDIO *dm);
00147
00155 GWENHYWFAR_API int GWEN_BufferedIO_PeekChar(GWEN_BUFFEREDIO *dm);
00156
00168 GWENHYWFAR_API int GWEN_BufferedIO_ReadChar(GWEN_BUFFEREDIO *bio);
00169
00175 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_Flush(GWEN_BUFFEREDIO *bt);
00176
00187 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_ShortFlush(GWEN_BUFFEREDIO *bt);
00188
00189
00190
00191
00192 GWENHYWFAR_API int GWEN_BufferedIO_ReadBufferEmpty(GWEN_BUFFEREDIO *bt);
00193
00194
00195
00196
00197
00198 GWENHYWFAR_API int GWEN_BufferedIO_WriteBufferEmpty(GWEN_BUFFEREDIO *bt);
00199
00206 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_ReadLine(GWEN_BUFFEREDIO *bt,
00207 char *buffer,
00208 unsigned int s);
00209
00216 GWENHYWFAR_API
00217 GWEN_ERRORCODE GWEN_BufferedIO_ReadLine2Buffer(GWEN_BUFFEREDIO *bt,
00218 GWEN_BUFFER *buffer);
00219
00224 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_WriteChar(GWEN_BUFFEREDIO *dm,
00225 char c);
00226
00232 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_Write(GWEN_BUFFEREDIO *bt,
00233 const char *buffer);
00234
00241 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_WriteLine(GWEN_BUFFEREDIO *bt,
00242 const char *buffer);
00243
00248 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_Close(GWEN_BUFFEREDIO *dm);
00249
00250
00259 GWENHYWFAR_API
00260 void GWEN_BufferedIO_SetLineMode(GWEN_BUFFEREDIO *dm,
00261 GWEN_BUFFEREDIOLINEMODE lm);
00262
00267 GWENHYWFAR_API
00268 GWEN_TYPE_UINT32 GWEN_BufferedIO_GetFlags(const GWEN_BUFFEREDIO *bt);
00269
00274 GWENHYWFAR_API
00275 void GWEN_BufferedIO_SetFlags(GWEN_BUFFEREDIO *bt, GWEN_TYPE_UINT32 f);
00276
00281 GWENHYWFAR_API
00282 void GWEN_BufferedIO_AddFlags(GWEN_BUFFEREDIO *bt, GWEN_TYPE_UINT32 f);
00283
00288 GWENHYWFAR_API
00289 void GWEN_BufferedIO_SubFlags(GWEN_BUFFEREDIO *bt, GWEN_TYPE_UINT32 f);
00290
00291
00296 GWENHYWFAR_API
00297 GWEN_BUFFEREDIOLINEMODE GWEN_BufferedIO_GetLineMode(GWEN_BUFFEREDIO *dm);
00298
00299
00309 GWENHYWFAR_API
00310 void GWEN_BufferedIO_SetTimeout(GWEN_BUFFEREDIO *dm, int timeout);
00311
00312
00316 GWENHYWFAR_API
00317 int GWEN_BufferedIO_GetTimeout(GWEN_BUFFEREDIO *dm);
00318
00319
00320 GWENHYWFAR_API
00321 int GWEN_BufferedIO_GetLines(const GWEN_BUFFEREDIO *dm);
00322
00323
00324 GWENHYWFAR_API
00325 int GWEN_BufferedIO_GetLinePos(const GWEN_BUFFEREDIO *dm);
00326
00327
00328 GWENHYWFAR_API
00329 int GWEN_BufferedIO_GetBytesRead(const GWEN_BUFFEREDIO *dm);
00330
00331 GWENHYWFAR_API
00332 int GWEN_BufferedIO_GetBytesWritten(const GWEN_BUFFEREDIO *dm);
00333
00334
00335 GWENHYWFAR_API
00336 void GWEN_BufferedIO_SetReadFn(GWEN_BUFFEREDIO *dm,
00337 GWEN_BUFFEREDIOREADFN fn);
00338 GWENHYWFAR_API
00339 void GWEN_BufferedIO_SetWriteFn(GWEN_BUFFEREDIO *dm,
00340 GWEN_BUFFEREDIOWRITEFN fn);
00341 GWENHYWFAR_API
00342 void GWEN_BufferedIO_SetCloseFn(GWEN_BUFFEREDIO *dm,
00343 GWEN_BUFFEREDIOCLOSEFN fn);
00344
00345
00350 GWENHYWFAR_API
00351 GWEN_ERRORCODE GWEN_BufferedIO_Abandon(GWEN_BUFFEREDIO *dm);
00352
00353
00366 GWENHYWFAR_API
00367 GWEN_ERRORCODE GWEN_BufferedIO_WriteRaw(GWEN_BUFFEREDIO *bt,
00368 const char *buffer,
00369 unsigned int *bsize);
00370
00371
00380 GWENHYWFAR_API
00381 GWEN_ERRORCODE GWEN_BufferedIO_ReadRaw(GWEN_BUFFEREDIO *bt,
00382 char *buffer,
00383 unsigned int *bsize);
00384
00393 GWENHYWFAR_API
00394 GWEN_ERRORCODE GWEN_BufferedIO_ReadRawForced(GWEN_BUFFEREDIO *bt,
00395 char *buffer,
00396 unsigned int *bsize);
00397
00406 GWENHYWFAR_API
00407 GWEN_ERRORCODE GWEN_BufferedIO_WriteRawForced(GWEN_BUFFEREDIO *bt,
00408 char *buffer,
00409 unsigned int *bsize);
00410
00411
00412
00413 #ifdef __cplusplus
00414 }
00415 #endif
00416
00417
00418 #endif
00419
00420
00421
00422
00423