gwenhywfar 5.12.0
buffer.h
Go to the documentation of this file.
1/***************************************************************************
2 begin : Fri Sep 12 2003
3 copyright : (C) 2020 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * *
8 * This library is free software; you can redistribute it and/or *
9 * modify it under the terms of the GNU Lesser General Public *
10 * License as published by the Free Software Foundation; either *
11 * version 2.1 of the License, or (at your option) any later version. *
12 * *
13 * This library is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
16 * Lesser General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU Lesser General Public *
19 * License along with this library; if not, write to the Free Software *
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
21 * MA 02111-1307 USA *
22 * *
23 ***************************************************************************/
24
25
26#ifndef GWENHYWFAR_BUFFER_H
27#define GWENHYWFAR_BUFFER_H
28
29#include <gwenhywfar/gwenhywfarapi.h>
30#ifdef __cplusplus
31extern "C" {
32#endif
38typedef struct GWEN_BUFFER GWEN_BUFFER;
39#ifdef __cplusplus
40}
41#endif
42
43#include <gwenhywfar/types.h>
44//#include <gwenhywfar/syncio.h>
45
46
47#include <stdio.h>
48/* This is needed for PalmOS, because it define some functions needed */
49#include <string.h>
50
51#ifdef __cplusplus
52extern "C" {
53#endif
54
63
64#define GWEN_BUFFER_MAX_BOOKMARKS 64
65
66#define GWEN_BUFFER_MODE_DYNAMIC 0x0001
67#define GWEN_BUFFER_MODE_ABORT_ON_MEMFULL 0x0002
68#define GWEN_BUFFER_MODE_READONLY 0x0020
69
70#define GWEN_BUFFER_MODE_DEFAULT \
71 (\
72 GWEN_BUFFER_MODE_DYNAMIC | \
73 GWEN_BUFFER_MODE_ABORT_ON_MEMFULL\
74 )
75
76
101GWEN_BUFFER *GWEN_Buffer_new(char *buffer,
102 uint32_t size,
103 uint32_t used,
104 int take_ownership);
105
112
113
122
123
127
128
139
145uint32_t GWEN_Buffer_GetMode(GWEN_BUFFER *bf);
146
152void GWEN_Buffer_SetMode(GWEN_BUFFER *bf, uint32_t mode);
153
159void GWEN_Buffer_AddMode(GWEN_BUFFER *bf, uint32_t mode);
160
166void GWEN_Buffer_SubMode(GWEN_BUFFER *bf, uint32_t mode);
167
174
180void GWEN_Buffer_SetHardLimit(GWEN_BUFFER *bf, uint32_t l);
181
182
189uint32_t GWEN_Buffer_GetStep(GWEN_BUFFER *bf);
190
199void GWEN_Buffer_SetStep(GWEN_BUFFER *bf, uint32_t step);
200
201
211int GWEN_Buffer_ReserveBytes(GWEN_BUFFER *bf, uint32_t res);
212
213
219char *GWEN_Buffer_GetStart(const GWEN_BUFFER *bf);
220
221
226uint32_t GWEN_Buffer_GetSize(const GWEN_BUFFER *bf);
227
228
234uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf);
235
240int GWEN_Buffer_SetPos(GWEN_BUFFER *bf, uint32_t i);
241
245uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf);
246
247
252uint32_t GWEN_Buffer_GetBookmark(const GWEN_BUFFER *bf, unsigned int idx);
253
254
260void GWEN_Buffer_SetBookmark(GWEN_BUFFER *bf, unsigned int idx,
261 uint32_t v);
262
263
272 const char *buffer,
273 uint32_t size);
274
283int GWEN_Buffer_AppendArgs(GWEN_BUFFER *bf, const char *fmt, ...);
284
285
288 unsigned char c,
289 uint32_t size);
290
293 unsigned char c,
294 uint32_t size);
295
296
304 const char *buffer);
305
306
314int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c);
315
327 const char *buffer,
328 uint32_t size);
329
342 uint32_t size);
343
355int GWEN_Buffer_RemoveRoom(GWEN_BUFFER *bf, uint32_t size);
356
369 uint32_t rsize,
370 const char *buffer,
371 uint32_t size);
372
373
385 const char *buffer);
386
400int GWEN_Buffer_InsertByte(GWEN_BUFFER *bf, char c);
401
409
410
418 char *buffer,
419 uint32_t *size);
420
421
430
431
434int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, uint32_t i);
435
438int GWEN_Buffer_DecrementPos(GWEN_BUFFER *bf, uint32_t i);
439
464
465
473 GWEN_BUFFER *sf);
474
481 GWEN_BUFFER *sf);
482
483
490
491
497
498
504
505
511
517
518
523int GWEN_Buffer_AllocRoom(GWEN_BUFFER *bf, uint32_t size);
524
525
526/* crops the buffer to the specified bytes */
529 uint32_t pos,
530 uint32_t l);
531
532/* Overwrite complete buffer with a given value.
533 * This does not only overwrite the used bytes but all the memory held
534 * by this object.
535 */
538
539
552 const char *openingString,
553 const char *closingString,
554 int onlyBetween);
555
556
559void GWEN_Buffer_Dump(GWEN_BUFFER *bf, unsigned int insert);
560
561
567
573
574
576
577#ifdef __cplusplus
578}
579#endif
580
581#endif
582
583
584
585
586
587
int GWEN_Buffer_InsertByte(GWEN_BUFFER *bf, char c)
Definition buffer.c:914
int GWEN_Buffer_DecrementPos(GWEN_BUFFER *bf, uint32_t i)
Definition buffer.c:490
int GWEN_Buffer_FillWithBytes(GWEN_BUFFER *bf, unsigned char c, uint32_t size)
Definition buffer.c:1012
int GWEN_Buffer_AppendArgs(GWEN_BUFFER *bf, const char *fmt,...)
Definition buffer.c:1087
int GWEN_Buffer_InsertBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size)
Definition buffer.c:886
int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, uint32_t i)
Definition buffer.c:451
int GWEN_Buffer_RemoveRoom(GWEN_BUFFER *bf, uint32_t size)
Definition buffer.c:801
int GWEN_Buffer_ReplaceBytes(GWEN_BUFFER *bf, uint32_t rsize, const char *buffer, uint32_t size)
Definition buffer.c:844
uint32_t GWEN_Buffer_GetMaxUnsegmentedWrite(GWEN_BUFFER *bf)
Definition buffer.c:527
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition buffer.c:653
int GWEN_Buffer_AdjustUsedBytes(GWEN_BUFFER *bf)
Definition buffer.c:468
uint32_t GWEN_Buffer_GetBytesLeft(GWEN_BUFFER *bf)
Definition buffer.c:536
void GWEN_Buffer_Dump(GWEN_BUFFER *bf, unsigned int insert)
Definition buffer.c:585
int GWEN_Buffer_PeekByte(GWEN_BUFFER *bf)
Definition buffer.c:425
void GWEN_Buffer_Rewind(GWEN_BUFFER *bf)
Definition buffer.c:663
char * GWEN_Buffer_GetPosPointer(const GWEN_BUFFER *bf)
Definition buffer.c:548
int GWEN_Buffer_InsertRoom(GWEN_BUFFER *bf, uint32_t size)
Definition buffer.c:739
void GWEN_Buffer_OverwriteContent(GWEN_BUFFER *bf, int c)
Definition buffer.c:556
int GWEN_Buffer_InsertString(GWEN_BUFFER *bf, const char *buffer)
Definition buffer.c:1002
int GWEN_Buffer_AppendBuffer(GWEN_BUFFER *bf, GWEN_BUFFER *sf)
Definition buffer.c:506
int GWEN_Buffer_ReadByte(GWEN_BUFFER *bf)
Definition buffer.c:438
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition buffer.c:992
int GWEN_Buffer_ReadBytes(GWEN_BUFFER *bf, char *buffer, uint32_t *size)
Definition buffer.c:671
int GWEN_Buffer_FillLeftWithBytes(GWEN_BUFFER *bf, unsigned char c, uint32_t size)
Definition buffer.c:1044
int GWEN_Buffer_KeepTextBetweenStrings(GWEN_BUFFER *bf, const char *openingString, const char *closingString, int onlyBetween)
Definition buffer.c:1130
int GWEN_Buffer_AllocRoom(GWEN_BUFFER *bf, uint32_t size)
Definition buffer.c:285
int GWENHYWFAR_CB GWEN_Buffer_CacheFn_Attach(void *ptr)
Definition buffer.c:1071
int GWENHYWFAR_CB GWEN_Buffer_CacheFn_Free(void *ptr)
Definition buffer.c:1079
int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l)
Definition buffer.c:950
int GWEN_Buffer_InsertBuffer(GWEN_BUFFER *bf, GWEN_BUFFER *sf)
Definition buffer.c:939
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
Definition buffer.c:393
GWENHYWFAR_API GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take_ownership)
Definition buffer.c:42
GWENHYWFAR_API int GWEN_Buffer_SetPos(GWEN_BUFFER *bf, uint32_t i)
Definition buffer.c:261
GWENHYWFAR_API int GWEN_Buffer_Relinquish(GWEN_BUFFER *bf)
Definition buffer.c:143
GWENHYWFAR_API uint32_t GWEN_Buffer_GetStep(GWEN_BUFFER *bf)
Definition buffer.c:708
GWENHYWFAR_API void GWEN_Buffer_SetHardLimit(GWEN_BUFFER *bf, uint32_t l)
Definition buffer.c:226
GWENHYWFAR_API uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf)
Definition buffer.c:253
GWENHYWFAR_API void GWEN_Buffer_SetMode(GWEN_BUFFER *bf, uint32_t mode)
Definition buffer.c:196
GWENHYWFAR_API GWEN_BUFFER * GWEN_Buffer_dup(GWEN_BUFFER *bf)
Definition buffer.c:105
GWENHYWFAR_API void GWEN_Buffer_SetBookmark(GWEN_BUFFER *bf, unsigned int idx, uint32_t v)
Definition buffer.c:575
GWENHYWFAR_API uint32_t GWEN_Buffer_GetMode(GWEN_BUFFER *bf)
Definition buffer.c:188
GWENHYWFAR_API uint32_t GWEN_Buffer_GetSize(const GWEN_BUFFER *bf)
Definition buffer.c:243
GWENHYWFAR_API void GWEN_Buffer_Attach(GWEN_BUFFER *bf)
Definition buffer.c:81
GWENHYWFAR_API void GWEN_Buffer_AddMode(GWEN_BUFFER *bf, uint32_t mode)
Definition buffer.c:203
GWENHYWFAR_API int GWEN_Buffer_AppendBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size)
Definition buffer.c:360
GWENHYWFAR_API void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition buffer.c:89
GWENHYWFAR_API int GWEN_Buffer_ReserveBytes(GWEN_BUFFER *bf, uint32_t res)
Definition buffer.c:157
GWENHYWFAR_API uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
Definition buffer.c:277
GWENHYWFAR_API char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition buffer.c:235
GWENHYWFAR_API void GWEN_Buffer_SetStep(GWEN_BUFFER *bf, uint32_t step)
Definition buffer.c:716
GWENHYWFAR_API uint32_t GWEN_Buffer_GetBookmark(const GWEN_BUFFER *bf, unsigned int idx)
Definition buffer.c:566
GWENHYWFAR_API uint32_t GWEN_Buffer_GetHardLimit(GWEN_BUFFER *bf)
Definition buffer.c:218
GWENHYWFAR_API void GWEN_Buffer_SubMode(GWEN_BUFFER *bf, uint32_t mode)
Definition buffer.c:210
GWENHYWFAR_API const char * fmt
Definition buffer.h:283
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition buffer.h:38
#define GWEN_FORMAT(fmt, pos, argstart)
#define GWENHYWFAR_API
#define GWENHYWFAR_CB