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
00049 typedef struct GWEN_BUFFEREDIOSTRUCT GWEN_BUFFEREDIO;
00050
00051 GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_BUFFEREDIO, GWENHYWFAR_API)
00052
00053 #ifdef __cplusplus
00054 }
00055 #endif
00056
00057 #include <gwenhywfar/error.h>
00058
00059
00060 #include <gwenhywfar/bio_file.h>
00061 #include <gwenhywfar/bio_socket.h>
00062 #include <gwenhywfar/bio_buffer.h>
00063 #include <gwenhywfar/buffer.h>
00064
00065
00066
00067 #ifdef __cplusplus
00068 extern "C" {
00069 #endif
00070
00071 #define GWEN_BUFFEREDIO_ERROR_TYPE "BufferedIO"
00072 #define GWEN_BUFFEREDIO_ERROR_READ 1
00073 #define GWEN_BUFFEREDIO_ERROR_WRITE 2
00074 #define GWEN_BUFFEREDIO_ERROR_CLOSE 3
00075 #define GWEN_BUFFEREDIO_ERROR_TIMEOUT 4
00076 #define GWEN_BUFFEREDIO_ERROR_PARTIAL 5
00077 #define GWEN_BUFFEREDIO_ERROR_EOF 6
00078 #define GWEN_BUFFEREDIO_ERROR_NO_DATA 7
00079
00080
00081 #define GWEN_BUFFEREDIO_CHAR_ERROR (-1)
00082 #define GWEN_BUFFEREDIO_CHAR_EOF (-2)
00083 #define GWEN_BUFFEREDIO_CHAR_NO_DATA (-3)
00084
00085
00087 #define GWEN_BUFFEREDIO_FLAGS_CLOSE 0x00000001
00088
00089 #define GWEN_BUFFEREDIO_FLAGS_DEFAULT \
00090 (\
00091 GWEN_BUFFEREDIO_FLAGS_CLOSE\
00092 )
00093
00094
00095
00096 typedef enum {
00097 GWEN_LineModeUnix=0,
00098 GWEN_LineModeDOS
00099 } GWEN_BUFFEREDIOLINEMODE;
00100
00101 typedef GWEN_ERRORCODE (*GWEN_BUFFEREDIOREADFN)(GWEN_BUFFEREDIO *dm,
00102 char *buffer,
00103 int *size,
00104 int timeout);
00105 typedef GWEN_ERRORCODE (*GWEN_BUFFEREDIOWRITEFN)(GWEN_BUFFEREDIO *dm,
00106 const char *buffer,
00107 int *size,
00108 int timeout);
00109 typedef GWEN_ERRORCODE (*GWEN_BUFFEREDIOCLOSEFN)(GWEN_BUFFEREDIO *dm);
00110
00111
00112
00118 GWENHYWFAR_API GWEN_BUFFEREDIO *GWEN_BufferedIO_new();
00119
00124 GWENHYWFAR_API void GWEN_BufferedIO_free(GWEN_BUFFEREDIO *dm);
00125
00147 GWENHYWFAR_API void GWEN_BufferedIO_SetReadBuffer(GWEN_BUFFEREDIO *bt,
00148 char *buffer,
00149 int len);
00150
00172 GWENHYWFAR_API void GWEN_BufferedIO_SetWriteBuffer(GWEN_BUFFEREDIO *bt,
00173 char *buffer,
00174 int len);
00175
00181 GWENHYWFAR_API int GWEN_BufferedIO_CheckEOF(GWEN_BUFFEREDIO *dm);
00182
00190 GWENHYWFAR_API int GWEN_BufferedIO_PeekChar(GWEN_BUFFEREDIO *dm);
00191
00203 GWENHYWFAR_API int GWEN_BufferedIO_ReadChar(GWEN_BUFFEREDIO *bio);
00204
00210 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_Flush(GWEN_BUFFEREDIO *bt);
00211
00222 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_ShortFlush(GWEN_BUFFEREDIO *bt);
00223
00227 GWENHYWFAR_API int GWEN_BufferedIO_ReadBufferEmpty(GWEN_BUFFEREDIO *bt);
00228
00229
00233 GWENHYWFAR_API int GWEN_BufferedIO_WriteBufferEmpty(GWEN_BUFFEREDIO *bt);
00234
00241 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_ReadLine(GWEN_BUFFEREDIO *bt,
00242 char *buffer,
00243 unsigned int s);
00244
00251 GWENHYWFAR_API
00252 GWEN_ERRORCODE GWEN_BufferedIO_ReadLine2Buffer(GWEN_BUFFEREDIO *bt,
00253 GWEN_BUFFER *buffer);
00254
00259 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_WriteChar(GWEN_BUFFEREDIO *dm,
00260 char c);
00261
00267 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_Write(GWEN_BUFFEREDIO *bt,
00268 const char *buffer);
00269
00276 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_WriteLine(GWEN_BUFFEREDIO *bt,
00277 const char *buffer);
00278
00283 GWENHYWFAR_API GWEN_ERRORCODE GWEN_BufferedIO_Close(GWEN_BUFFEREDIO *dm);
00284
00285
00294 GWENHYWFAR_API
00295 void GWEN_BufferedIO_SetLineMode(GWEN_BUFFEREDIO *dm,
00296 GWEN_BUFFEREDIOLINEMODE lm);
00297
00302 GWENHYWFAR_API
00303 GWEN_TYPE_UINT32 GWEN_BufferedIO_GetFlags(const GWEN_BUFFEREDIO *bt);
00304
00309 GWENHYWFAR_API
00310 void GWEN_BufferedIO_SetFlags(GWEN_BUFFEREDIO *bt, GWEN_TYPE_UINT32 f);
00311
00316 GWENHYWFAR_API
00317 void GWEN_BufferedIO_AddFlags(GWEN_BUFFEREDIO *bt, GWEN_TYPE_UINT32 f);
00318
00323 GWENHYWFAR_API
00324 void GWEN_BufferedIO_SubFlags(GWEN_BUFFEREDIO *bt, GWEN_TYPE_UINT32 f);
00325
00326
00331 GWENHYWFAR_API
00332 GWEN_BUFFEREDIOLINEMODE GWEN_BufferedIO_GetLineMode(const GWEN_BUFFEREDIO *dm);
00333
00334
00344 GWENHYWFAR_API
00345 void GWEN_BufferedIO_SetTimeout(GWEN_BUFFEREDIO *dm, int timeout);
00346
00347
00351 GWENHYWFAR_API
00352 int GWEN_BufferedIO_GetTimeout(const GWEN_BUFFEREDIO *dm);
00353
00356 GWENHYWFAR_API
00357 int GWEN_BufferedIO_GetLines(const GWEN_BUFFEREDIO *dm);
00358
00361 GWENHYWFAR_API
00362 int GWEN_BufferedIO_GetLinePos(const GWEN_BUFFEREDIO *dm);
00363
00365 GWENHYWFAR_API
00366 int GWEN_BufferedIO_GetBytesRead(const GWEN_BUFFEREDIO *dm);
00367
00369 GWENHYWFAR_API
00370 int GWEN_BufferedIO_GetBytesWritten(const GWEN_BUFFEREDIO *dm);
00371
00372
00373 GWENHYWFAR_API
00374 void GWEN_BufferedIO_SetReadFn(GWEN_BUFFEREDIO *dm,
00375 GWEN_BUFFEREDIOREADFN fn);
00376 GWENHYWFAR_API
00377 void GWEN_BufferedIO_SetWriteFn(GWEN_BUFFEREDIO *dm,
00378 GWEN_BUFFEREDIOWRITEFN fn);
00379 GWENHYWFAR_API
00380 void GWEN_BufferedIO_SetCloseFn(GWEN_BUFFEREDIO *dm,
00381 GWEN_BUFFEREDIOCLOSEFN fn);
00382
00383
00388 GWENHYWFAR_API
00389 GWEN_ERRORCODE GWEN_BufferedIO_Abandon(GWEN_BUFFEREDIO *dm);
00390
00391
00407 GWENHYWFAR_API
00408 GWEN_ERRORCODE GWEN_BufferedIO_WriteRaw(GWEN_BUFFEREDIO *bt,
00409 const char *buffer,
00410 unsigned int *bsize);
00411
00412
00424 GWENHYWFAR_API
00425 GWEN_ERRORCODE GWEN_BufferedIO_ReadRaw(GWEN_BUFFEREDIO *bt,
00426 char *buffer,
00427 unsigned int *bsize);
00428
00437 GWENHYWFAR_API
00438 GWEN_ERRORCODE GWEN_BufferedIO_ReadRawForced(GWEN_BUFFEREDIO *bt,
00439 char *buffer,
00440 unsigned int *bsize);
00441
00450 GWENHYWFAR_API
00451 GWEN_ERRORCODE GWEN_BufferedIO_WriteRawForced(GWEN_BUFFEREDIO *bt,
00452 const char *buffer,
00453 unsigned int *bsize);
00454
00455
00456
00457 #ifdef __cplusplus
00458 }
00459 #endif
00460
00461
00462 #endif
00463
00464
00465
00466
00467