gwenhywfar
4.3.3
|
00001 /*************************************************************************** 00002 $RCSfile$ 00003 ------------------- 00004 cvs : $Id$ 00005 begin : Fri Sep 12 2003 00006 copyright : (C) 2003 by Martin Preuss 00007 email : martin@libchipcard.de 00008 00009 *************************************************************************** 00010 * * 00011 * This library is free software; you can redistribute it and/or * 00012 * modify it under the terms of the GNU Lesser General Public * 00013 * License as published by the Free Software Foundation; either * 00014 * version 2.1 of the License, or (at your option) any later version. * 00015 * * 00016 * This library is distributed in the hope that it will be useful, * 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 00019 * Lesser General Public License for more details. * 00020 * * 00021 * You should have received a copy of the GNU Lesser General Public * 00022 * License along with this library; if not, write to the Free Software * 00023 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * 00024 * MA 02111-1307 USA * 00025 * * 00026 ***************************************************************************/ 00027 00028 00029 #ifndef GWENHYWFAR_BUFFER_H 00030 #define GWENHYWFAR_BUFFER_H 00031 00032 #include <gwenhywfar/gwenhywfarapi.h> 00033 #ifdef __cplusplus 00034 extern "C" { 00035 #endif 00036 00041 typedef struct GWEN_BUFFER GWEN_BUFFER; 00042 #ifdef __cplusplus 00043 } 00044 #endif 00045 00046 #include <gwenhywfar/types.h> 00047 #include <gwenhywfar/syncio.h> 00048 00049 00050 #include <stdio.h> 00051 /* This is needed for PalmOS, because it define some functions needed */ 00052 #include <string.h> 00053 00054 #ifdef __cplusplus 00055 extern "C" { 00056 #endif 00057 00066 00067 #define GWEN_BUFFER_MAX_BOOKMARKS 64 00068 00069 #define GWEN_BUFFER_MODE_DYNAMIC 0x0001 00070 #define GWEN_BUFFER_MODE_ABORT_ON_MEMFULL 0x0002 00071 #define GWEN_BUFFER_MODE_USE_SYNCIO 0x0010 00072 #define GWEN_BUFFER_MODE_READONLY 0x0020 00073 00074 #define GWEN_BUFFER_MODE_DEFAULT \ 00075 (\ 00076 GWEN_BUFFER_MODE_DYNAMIC | \ 00077 GWEN_BUFFER_MODE_ABORT_ON_MEMFULL\ 00078 ) 00079 00080 00104 GWENHYWFAR_API 00105 GWEN_BUFFER *GWEN_Buffer_new(char *buffer, 00106 uint32_t size, 00107 uint32_t used, 00108 int take_ownership); 00109 00116 GWENHYWFAR_API 00117 void GWEN_Buffer_free(GWEN_BUFFER *bf); 00118 00119 00121 GWENHYWFAR_API 00122 GWEN_BUFFER *GWEN_Buffer_dup(GWEN_BUFFER *bf); 00123 00124 00133 GWENHYWFAR_API 00134 int GWEN_Buffer_Relinquish(GWEN_BUFFER *bf); 00135 00140 GWENHYWFAR_API 00141 uint32_t GWEN_Buffer_GetMode(GWEN_BUFFER *bf); 00142 00147 GWENHYWFAR_API 00148 void GWEN_Buffer_SetMode(GWEN_BUFFER *bf, uint32_t mode); 00149 00154 GWENHYWFAR_API 00155 void GWEN_Buffer_AddMode(GWEN_BUFFER *bf, uint32_t mode); 00156 00161 GWENHYWFAR_API 00162 void GWEN_Buffer_SubMode(GWEN_BUFFER *bf, uint32_t mode); 00163 00168 GWENHYWFAR_API 00169 uint32_t GWEN_Buffer_GetHardLimit(GWEN_BUFFER *bf); 00170 00175 GWENHYWFAR_API 00176 void GWEN_Buffer_SetHardLimit(GWEN_BUFFER *bf, uint32_t l); 00177 00178 00184 GWENHYWFAR_API 00185 uint32_t GWEN_Buffer_GetStep(GWEN_BUFFER *bf); 00186 00194 GWENHYWFAR_API 00195 void GWEN_Buffer_SetStep(GWEN_BUFFER *bf, uint32_t step); 00196 00197 00206 GWENHYWFAR_API 00207 int GWEN_Buffer_ReserveBytes(GWEN_BUFFER *bf, uint32_t res); 00208 00209 00214 GWENHYWFAR_API 00215 char *GWEN_Buffer_GetStart(const GWEN_BUFFER *bf); 00216 00217 00221 GWENHYWFAR_API 00222 uint32_t GWEN_Buffer_GetSize(const GWEN_BUFFER *bf); 00223 00224 00229 GWENHYWFAR_API 00230 uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf); 00231 00235 GWENHYWFAR_API 00236 int GWEN_Buffer_SetPos(GWEN_BUFFER *bf, uint32_t i); 00237 00240 GWENHYWFAR_API 00241 uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf); 00242 00243 00247 GWENHYWFAR_API 00248 uint32_t GWEN_Buffer_GetBookmark(const GWEN_BUFFER *bf, unsigned int idx); 00249 00250 00255 GWENHYWFAR_API 00256 void GWEN_Buffer_SetBookmark(GWEN_BUFFER *bf, unsigned int idx, 00257 uint32_t v); 00258 00259 00266 GWENHYWFAR_API 00267 int GWEN_Buffer_AppendBytes(GWEN_BUFFER *bf, 00268 const char *buffer, 00269 uint32_t size); 00270 00271 GWENHYWFAR_API 00272 int GWEN_Buffer_FillWithBytes(GWEN_BUFFER *bf, 00273 unsigned char c, 00274 uint32_t size); 00275 00276 GWENHYWFAR_API 00277 int GWEN_Buffer_FillLeftWithBytes(GWEN_BUFFER *bf, 00278 unsigned char c, 00279 uint32_t size); 00280 00281 00287 GWENHYWFAR_API 00288 int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, 00289 const char *buffer); 00290 00291 00298 GWENHYWFAR_API 00299 int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c); 00300 00310 GWENHYWFAR_API 00311 int GWEN_Buffer_InsertBytes(GWEN_BUFFER *bf, 00312 const char *buffer, 00313 uint32_t size); 00314 00325 GWENHYWFAR_API 00326 int GWEN_Buffer_InsertRoom(GWEN_BUFFER *bf, 00327 uint32_t size); 00328 00339 GWENHYWFAR_API 00340 int GWEN_Buffer_RemoveRoom(GWEN_BUFFER *bf, uint32_t size); 00341 00352 GWENHYWFAR_API 00353 int GWEN_Buffer_ReplaceBytes(GWEN_BUFFER *bf, 00354 uint32_t rsize, 00355 const char *buffer, 00356 uint32_t size); 00357 00358 00368 GWENHYWFAR_API 00369 int GWEN_Buffer_InsertString(GWEN_BUFFER *bf, 00370 const char *buffer); 00371 00384 GWENHYWFAR_API 00385 int GWEN_Buffer_InsertByte(GWEN_BUFFER *bf, char c); 00386 00392 GWENHYWFAR_API 00393 int GWEN_Buffer_ReadByte(GWEN_BUFFER *bf); 00394 00395 00401 GWENHYWFAR_API 00402 int GWEN_Buffer_ReadBytes(GWEN_BUFFER *bf, 00403 char *buffer, 00404 uint32_t *size); 00405 00406 00413 GWENHYWFAR_API 00414 int GWEN_Buffer_PeekByte(GWEN_BUFFER *bf); 00415 00416 00418 GWENHYWFAR_API 00419 int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, uint32_t i); 00420 00422 GWENHYWFAR_API 00423 int GWEN_Buffer_DecrementPos(GWEN_BUFFER *bf, uint32_t i); 00424 00447 GWENHYWFAR_API 00448 int GWEN_Buffer_AdjustUsedBytes(GWEN_BUFFER *bf); 00449 00450 00456 GWENHYWFAR_API 00457 int GWEN_Buffer_InsertBuffer(GWEN_BUFFER *bf, 00458 GWEN_BUFFER *sf); 00459 00464 GWENHYWFAR_API 00465 int GWEN_Buffer_AppendBuffer(GWEN_BUFFER *bf, 00466 GWEN_BUFFER *sf); 00467 00468 00473 GWENHYWFAR_API 00474 uint32_t GWEN_Buffer_GetMaxUnsegmentedWrite(GWEN_BUFFER *bf); 00475 00476 00480 GWENHYWFAR_API 00481 uint32_t GWEN_Buffer_GetBytesLeft(GWEN_BUFFER *bf); 00482 00483 00487 GWENHYWFAR_API 00488 char *GWEN_Buffer_GetPosPointer(const GWEN_BUFFER *bf); 00489 00490 00494 GWENHYWFAR_API 00495 void GWEN_Buffer_Reset(GWEN_BUFFER *bf); 00496 00500 GWENHYWFAR_API 00501 void GWEN_Buffer_Rewind(GWEN_BUFFER *bf); 00502 00503 00507 GWENHYWFAR_API 00508 int GWEN_Buffer_AllocRoom(GWEN_BUFFER *bf, uint32_t size); 00509 00510 00511 /* crops the buffer to the specified bytes */ 00512 GWENHYWFAR_API 00513 int GWEN_Buffer_Crop(GWEN_BUFFER *bf, 00514 uint32_t pos, 00515 uint32_t l); 00516 00517 00525 GWENHYWFAR_API 00526 void GWEN_Buffer_SetSourceSyncIo(GWEN_BUFFER *bf, 00527 GWEN_SYNCIO *sio, 00528 int take); 00529 00530 00532 GWENHYWFAR_API 00533 void GWEN_Buffer_Dump(GWEN_BUFFER *bf, unsigned int insert); 00534 00535 00538 #ifdef __cplusplus 00539 } 00540 #endif 00541 00542 #endif 00543 00544 00545 00546 00547 00548