wsstream.h
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:3k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  *
  3.  * wsstream.h
  4.  *
  5.  * Author: Markku Rossi <mtr@iki.fi>
  6.  *
  7.  * Copyright (c) 1999-2000 WAPIT OY LTD.
  8.  *  All rights reserved.
  9.  *
  10.  * Generic input / output stream.
  11.  *
  12.  */
  13. #ifndef WSSTREAM_H
  14. #define WSSTREAM_H
  15. /********************* Types and definitions ****************************/
  16. /* The generic input / output stream that is capable of handling
  17.    ISO/IEC-10646 characters. */
  18. #define WS_STREAM_BUFFER_SIZE 1024
  19. /* Do IO to the stream instance `context'.  When reading, the function
  20.    must read at most `buflen' characters to the buffer `buf' and it
  21.    must return the number of characters read.  When writing, the
  22.    buffer `buf' has `buflen' characters and the function must return
  23.    the number of characters written.  In both operations, if the
  24.    function reads or writes less that `buflen' characters, the EOF is
  25.    assumed to been seen in the stream. */
  26. typedef size_t (*WsStreamIOProc)(void *context, WsUInt32 *buf, size_t buflen);
  27. /* Flush all buffered data of the stream instance `context'.  The
  28.    function returns WS_TRUE if the flushing was successful or WS_FALSE
  29.    otherwise. */
  30. typedef WsBool (*WsStreamFlushProc)(void *context);
  31. /* Close the stream instance `context'. */
  32. typedef void (*WsStreamCloseProc)(void *context);
  33. /* A stream handle. */
  34. struct WsStreamRec
  35. {
  36.     /* The method functions of this stream. */
  37.     WsStreamIOProc io;
  38.     WsStreamFlushProc flush;
  39.     WsStreamCloseProc close;
  40.     /* The stream instance context. */
  41.     void *context;
  42.     /* The current buffered contents of the stream. */
  43.     WsUInt32 buffer[WS_STREAM_BUFFER_SIZE];
  44.     size_t buffer_pos;
  45.     size_t data_in_buffer;
  46.     /* The possible put-back character. */
  47.     WsBool ungetch_valid;
  48.     WsUInt32 ungetch;
  49. };
  50. typedef struct WsStreamRec WsStream;
  51. /********************* Stream access functions **************************/
  52. /* Get a character from the stream `stream'.  The character is
  53.    returned in `ch_return'.  The function returns WS_FALSE if the end
  54.    of stream has been encountered. */
  55. WsBool ws_stream_getc(WsStream *stream, WsUInt32 *ch_return);
  56. /* Put the character `ch' back to the stream `stream'. */
  57. void ws_stream_ungetc(WsStream *stream, WsUInt32 ch);
  58. /* Flush all buffered data to the stream back-end. */
  59. WsBool ws_stream_flush(WsStream *stream);
  60. /* Close the stream `stream'. */
  61. void ws_stream_close(WsStream *stream);
  62. /********************* Constructors for different streams ***************/
  63. /* A generic constructor to create the actual WsStream from the
  64.    context and from the method functions.  The function returns NULL
  65.    if the stream creation failed. */
  66. WsStream *ws_stream_new(void *context, WsStreamIOProc io,
  67.                         WsStreamFlushProc flush, WsStreamCloseProc close);
  68. /* Create a new file stream to the file handle `fp'.  The argument
  69.    `output' specifies whether the stream is an output or an input
  70.    stream, respectively.  The argument `close' specifies whether the
  71.    file handle `fp' is closed when the stream is closed.  It is
  72.    basicly a good idea to set this argument to WS_FALSE when wrapping
  73.    the system streams (stdin, stdout, stderr) in a WsStream.  The
  74.    function returns NULL if the stream could not be created. */
  75. WsStream *ws_stream_new_file(FILE *fp, WsBool output, WsBool close);
  76. /* Create a new data input stream for `data_len' bytes of ISO-8859/1
  77.    data in `data'.  The function returns NULL if the stream could not
  78.    be created. */
  79. WsStream *ws_stream_new_data_input(const unsigned char *data, size_t data_len);
  80. #endif /* not WSSTREAM_H */