1 /* 2 * << Haru Free PDF Library >> -- hpdf_streams.h 3 * 4 * URL: http://libharu.org 5 * 6 * Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp> 7 * Copyright (c) 2007-2009 Antony Dovgal <tony@daylessday.org> 8 * 9 * Permission to use, copy, modify, distribute and sell this software 10 * and its documentation for any purpose is hereby granted without fee, 11 * provided that the above copyright notice appear in all copies and 12 * that both that copyright notice and this permission notice appear 13 * in supporting documentation. 14 * It is provided "as is" without express or implied warranty. 15 * 16 * 2005.12.20 Created. 17 * 18 */ 19 20 #ifndef _HPDF_STREAMS_H 21 #define _HPDF_STREAMS_H 22 23 #include "hpdf_list.h" 24 #include "hpdf_encrypt.h" 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 30 31 #define HPDF_STREAM_SIG_BYTES 0x5354524DL 32 33 typedef enum _HPDF_StreamType { 34 HPDF_STREAM_UNKNOWN = 0, 35 HPDF_STREAM_CALLBACK, 36 HPDF_STREAM_FILE, 37 HPDF_STREAM_MEMORY 38 } HPDF_StreamType; 39 40 #define HPDF_STREAM_FILTER_NONE 0x0000 41 #define HPDF_STREAM_FILTER_ASCIIHEX 0x0100 42 #define HPDF_STREAM_FILTER_ASCII85 0x0200 43 #define HPDF_STREAM_FILTER_FLATE_DECODE 0x0400 44 #define HPDF_STREAM_FILTER_DCT_DECODE 0x0800 45 #define HPDF_STREAM_FILTER_CCITT_DECODE 0x1000 46 47 typedef enum _HPDF_WhenceMode { 48 HPDF_SEEK_SET = 0, 49 HPDF_SEEK_CUR, 50 HPDF_SEEK_END 51 } HPDF_WhenceMode; 52 53 typedef struct _HPDF_Stream_Rec *HPDF_Stream; 54 55 typedef HPDF_STATUS 56 (*HPDF_Stream_Write_Func) (HPDF_Stream stream, 57 const HPDF_BYTE *ptr, 58 HPDF_UINT siz); 59 60 61 typedef HPDF_STATUS 62 (*HPDF_Stream_Read_Func) (HPDF_Stream stream, 63 HPDF_BYTE *ptr, 64 HPDF_UINT *siz); 65 66 67 typedef HPDF_STATUS 68 (*HPDF_Stream_Seek_Func) (HPDF_Stream stream, 69 HPDF_INT pos, 70 HPDF_WhenceMode mode); 71 72 73 typedef HPDF_INT32 74 (*HPDF_Stream_Tell_Func) (HPDF_Stream stream); 75 76 77 typedef void 78 (*HPDF_Stream_Free_Func) (HPDF_Stream stream); 79 80 81 typedef HPDF_UINT32 82 (*HPDF_Stream_Size_Func) (HPDF_Stream stream); 83 84 85 typedef struct _HPDF_MemStreamAttr_Rec *HPDF_MemStreamAttr; 86 87 88 typedef struct _HPDF_MemStreamAttr_Rec { 89 HPDF_List buf; 90 HPDF_UINT buf_siz; 91 HPDF_UINT w_pos; 92 HPDF_BYTE *w_ptr; 93 HPDF_UINT r_ptr_idx; 94 HPDF_UINT r_pos; 95 HPDF_BYTE *r_ptr; 96 } HPDF_MemStreamAttr_Rec; 97 98 99 typedef struct _HPDF_Stream_Rec { 100 HPDF_UINT32 sig_bytes; 101 HPDF_StreamType type; 102 HPDF_MMgr mmgr; 103 HPDF_Error error; 104 HPDF_UINT size; 105 HPDF_Stream_Write_Func write_fn; 106 HPDF_Stream_Read_Func read_fn; 107 HPDF_Stream_Seek_Func seek_fn; 108 HPDF_Stream_Free_Func free_fn; 109 HPDF_Stream_Tell_Func tell_fn; 110 HPDF_Stream_Size_Func size_fn; 111 void* attr; 112 } HPDF_Stream_Rec; 113 114 115 116 HPDF_Stream 117 HPDF_MemStream_New (HPDF_MMgr mmgr, 118 HPDF_UINT buf_siz); 119 120 121 HPDF_BYTE* 122 HPDF_MemStream_GetBufPtr (HPDF_Stream stream, 123 HPDF_UINT index, 124 HPDF_UINT *length); 125 126 127 HPDF_UINT 128 HPDF_MemStream_GetBufSize (HPDF_Stream stream); 129 130 131 HPDF_UINT 132 HPDF_MemStream_GetBufCount (HPDF_Stream stream); 133 134 135 HPDF_STATUS 136 HPDF_MemStream_Rewrite (HPDF_Stream stream, 137 HPDF_BYTE *buf, 138 HPDF_UINT size); 139 140 141 void 142 HPDF_MemStream_FreeData (HPDF_Stream stream); 143 144 145 HPDF_STATUS 146 HPDF_Stream_WriteToStream (HPDF_Stream src, 147 HPDF_Stream dst, 148 HPDF_UINT filter, 149 HPDF_Encrypt e); 150 151 152 HPDF_Stream 153 HPDF_FileReader_New (HPDF_MMgr mmgr, 154 const char *fname); 155 156 157 HPDF_Stream 158 HPDF_FileWriter_New (HPDF_MMgr mmgr, 159 const char *fname); 160 161 162 HPDF_Stream 163 HPDF_CallbackReader_New (HPDF_MMgr mmgr, 164 HPDF_Stream_Read_Func read_fn, 165 HPDF_Stream_Seek_Func seek_fn, 166 HPDF_Stream_Tell_Func tell_fn, 167 HPDF_Stream_Size_Func size_fn, 168 void* data); 169 170 171 HPDF_Stream 172 HPDF_CallbackWriter_New (HPDF_MMgr mmgr, 173 HPDF_Stream_Write_Func write_fn, 174 void* data); 175 176 177 void 178 HPDF_Stream_Free (HPDF_Stream stream); 179 180 181 HPDF_STATUS 182 HPDF_Stream_WriteChar (HPDF_Stream stream, 183 char value); 184 185 186 HPDF_STATUS 187 HPDF_Stream_WriteStr (HPDF_Stream stream, 188 const char *value); 189 190 191 HPDF_STATUS 192 HPDF_Stream_WriteUChar (HPDF_Stream stream, 193 HPDF_BYTE value); 194 195 196 HPDF_STATUS 197 HPDF_Stream_WriteInt (HPDF_Stream stream, 198 HPDF_INT value); 199 200 201 HPDF_STATUS 202 HPDF_Stream_WriteUInt (HPDF_Stream stream, 203 HPDF_UINT value); 204 205 206 HPDF_STATUS 207 HPDF_Stream_WriteReal (HPDF_Stream stream, 208 HPDF_REAL value); 209 210 211 HPDF_STATUS 212 HPDF_Stream_Write (HPDF_Stream stream, 213 const HPDF_BYTE *ptr, 214 HPDF_UINT size); 215 216 217 HPDF_STATUS 218 HPDF_Stream_Read (HPDF_Stream stream, 219 HPDF_BYTE *ptr, 220 HPDF_UINT *size); 221 222 HPDF_STATUS 223 HPDF_Stream_ReadLn (HPDF_Stream stream, 224 char *s, 225 HPDF_UINT *size); 226 227 228 HPDF_INT32 229 HPDF_Stream_Tell (HPDF_Stream stream); 230 231 232 HPDF_STATUS 233 HPDF_Stream_Seek (HPDF_Stream stream, 234 HPDF_INT pos, 235 HPDF_WhenceMode mode); 236 237 238 HPDF_BOOL 239 HPDF_Stream_EOF (HPDF_Stream stream); 240 241 242 HPDF_UINT32 243 HPDF_Stream_Size (HPDF_Stream stream); 244 245 HPDF_STATUS 246 HPDF_Stream_Flush (HPDF_Stream stream); 247 248 249 HPDF_STATUS 250 HPDF_Stream_WriteEscapeName (HPDF_Stream stream, 251 const char *value); 252 253 254 HPDF_STATUS 255 HPDF_Stream_WriteEscapeText2 (HPDF_Stream stream, 256 const char *text, 257 HPDF_UINT len); 258 259 260 HPDF_STATUS 261 HPDF_Stream_WriteEscapeText (HPDF_Stream stream, 262 const char *text); 263 264 265 HPDF_STATUS 266 HPDF_Stream_WriteBinary (HPDF_Stream stream, 267 const HPDF_BYTE *data, 268 HPDF_UINT len, 269 HPDF_Encrypt e); 270 271 272 HPDF_STATUS 273 HPDF_Stream_Validate (HPDF_Stream stream); 274 275 276 #ifdef __cplusplus 277 } 278 #endif /* __cplusplus */ 279 280 #endif /* _HPDF_STREAMS_H */ 281