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 #define GWEN_BUFFEREDIO_FLAGS_UNTIL_EMPTY_LINE 0x00000002
00089
00090 #define GWEN_BUFFEREDIO_FLAGS_DEFAULT \
00091 (\
00092 GWEN_BUFFEREDIO_FLAGS_CLOSE\
00093 )
00094
00095
00096
00097 typedef enum {
00098 GWEN_LineModeUnix=0,
00099 GWEN_LineModeDOS
00100 } GWEN_BUFFEREDIOLINEMODE;
00101
00102 typedef int (*GWEN_BUFFEREDIOREADFN)(GWEN_BUFFEREDIO *dm,
00103 char *buffer,
00104 int *size,
00105 int timeout);
00106 typedef int (*GWEN_BUFFEREDIOWRITEFN)(GWEN_BUFFEREDIO *dm,
00107 const char *buffer,
00108 int *size,
00109 int timeout);
00110 typedef int (*GWEN_BUFFEREDIOCLOSEFN)(GWEN_BUFFEREDIO *dm);
00111
00112
00113
00119 GWENHYWFAR_API GWEN_BUFFEREDIO *GWEN_BufferedIO_new();
00120
00125 GWENHYWFAR_API void GWEN_BufferedIO_free(GWEN_BUFFEREDIO *dm);
00126
00148 GWENHYWFAR_API void GWEN_BufferedIO_SetReadBuffer(GWEN_BUFFEREDIO *bt,
00149 char *buffer,
00150 int len);
00151
00173 GWENHYWFAR_API void GWEN_BufferedIO_SetWriteBuffer(GWEN_BUFFEREDIO *bt,
00174 char *buffer,
00175 int len);
00176
00182 GWENHYWFAR_API int GWEN_BufferedIO_CheckEOF(GWEN_BUFFEREDIO *dm);
00183
00191 GWENHYWFAR_API int GWEN_BufferedIO_PeekChar(GWEN_BUFFEREDIO *dm);
00192
00204 GWENHYWFAR_API int GWEN_BufferedIO_ReadChar(GWEN_BUFFEREDIO *bio);
00205
00211 GWENHYWFAR_API int GWEN_BufferedIO_Flush(GWEN_BUFFEREDIO *bt);
00212
00223 GWENHYWFAR_API int GWEN_BufferedIO_ShortFlush(GWEN_BUFFEREDIO *bt);
00224
00228 GWENHYWFAR_API int GWEN_BufferedIO_ReadBufferEmpty(GWEN_BUFFEREDIO *bt);
00229
00230
00234 GWENHYWFAR_API int GWEN_BufferedIO_WriteBufferEmpty(GWEN_BUFFEREDIO *bt);
00235
00242 GWENHYWFAR_API int GWEN_BufferedIO_ReadLine(GWEN_BUFFEREDIO *bt,
00243 char *buffer,
00244 unsigned int s);
00245
00252 GWENHYWFAR_API
00253 int GWEN_BufferedIO_ReadLine2Buffer(GWEN_BUFFEREDIO *bt,
00254 GWEN_BUFFER *buffer);
00255
00260 GWENHYWFAR_API int GWEN_BufferedIO_WriteChar(GWEN_BUFFEREDIO *dm,
00261 char c);
00262
00268 GWENHYWFAR_API int GWEN_BufferedIO_Write(GWEN_BUFFEREDIO *bt,
00269 const char *buffer);
00270
00277 GWENHYWFAR_API int GWEN_BufferedIO_WriteLine(GWEN_BUFFEREDIO *bt,
00278 const char *buffer);
00279
00284 GWENHYWFAR_API int GWEN_BufferedIO_Close(GWEN_BUFFEREDIO *dm);
00285
00286
00295 GWENHYWFAR_API
00296 void GWEN_BufferedIO_SetLineMode(GWEN_BUFFEREDIO *dm,
00297 GWEN_BUFFEREDIOLINEMODE lm);
00298
00303 GWENHYWFAR_API
00304 uint32_t GWEN_BufferedIO_GetFlags(const GWEN_BUFFEREDIO *bt);
00305
00310 GWENHYWFAR_API
00311 void GWEN_BufferedIO_SetFlags(GWEN_BUFFEREDIO *bt, uint32_t f);
00312
00317 GWENHYWFAR_API
00318 void GWEN_BufferedIO_AddFlags(GWEN_BUFFEREDIO *bt, uint32_t f);
00319
00324 GWENHYWFAR_API
00325 void GWEN_BufferedIO_SubFlags(GWEN_BUFFEREDIO *bt, uint32_t f);
00326
00327
00332 GWENHYWFAR_API
00333 GWEN_BUFFEREDIOLINEMODE GWEN_BufferedIO_GetLineMode(const GWEN_BUFFEREDIO *dm);
00334
00335
00345 GWENHYWFAR_API
00346 void GWEN_BufferedIO_SetTimeout(GWEN_BUFFEREDIO *dm, int timeout);
00347
00348
00352 GWENHYWFAR_API
00353 int GWEN_BufferedIO_GetTimeout(const GWEN_BUFFEREDIO *dm);
00354
00357 GWENHYWFAR_API
00358 int GWEN_BufferedIO_GetLines(const GWEN_BUFFEREDIO *dm);
00359
00362 GWENHYWFAR_API
00363 int GWEN_BufferedIO_GetLinePos(const GWEN_BUFFEREDIO *dm);
00364
00366 GWENHYWFAR_API
00367 int GWEN_BufferedIO_GetBytesRead(const GWEN_BUFFEREDIO *dm);
00368
00370 GWENHYWFAR_API
00371 int GWEN_BufferedIO_GetBytesWritten(const GWEN_BUFFEREDIO *dm);
00372
00373
00374 GWENHYWFAR_API
00375 void GWEN_BufferedIO_SetReadFn(GWEN_BUFFEREDIO *dm,
00376 GWEN_BUFFEREDIOREADFN fn);
00377 GWENHYWFAR_API
00378 void GWEN_BufferedIO_SetWriteFn(GWEN_BUFFEREDIO *dm,
00379 GWEN_BUFFEREDIOWRITEFN fn);
00380 GWENHYWFAR_API
00381 void GWEN_BufferedIO_SetCloseFn(GWEN_BUFFEREDIO *dm,
00382 GWEN_BUFFEREDIOCLOSEFN fn);
00383
00384
00389 GWENHYWFAR_API
00390 int GWEN_BufferedIO_Abandon(GWEN_BUFFEREDIO *dm);
00391
00392
00408 GWENHYWFAR_API
00409 int GWEN_BufferedIO_WriteRaw(GWEN_BUFFEREDIO *bt,
00410 const char *buffer,
00411 unsigned int *bsize);
00412
00413
00425 GWENHYWFAR_API
00426 int GWEN_BufferedIO_ReadRaw(GWEN_BUFFEREDIO *bt,
00427 char *buffer,
00428 unsigned int *bsize);
00429
00438 GWENHYWFAR_API
00439 int GWEN_BufferedIO_ReadRawForced(GWEN_BUFFEREDIO *bt,
00440 char *buffer,
00441 unsigned int *bsize);
00442
00451 GWENHYWFAR_API
00452 int GWEN_BufferedIO_WriteRawForced(GWEN_BUFFEREDIO *bt,
00453 const char *buffer,
00454 unsigned int *bsize);
00455
00456
00457
00458 #ifdef __cplusplus
00459 }
00460 #endif
00461
00462
00463 #endif
00464
00465
00466
00467
00468