Subversion Repositories pentevo

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1186 savelij 1
#ifndef _STRUTIL_H
2
#define _STRUTIL_H
3
/* strutil.h */
4
/*****************************************************************************/
5
/* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only                     */
6
/*                                                                           */
7
/* AS-Portierung                                                             */
8
/*                                                                           */
9
/* haeufig benoetigte String-Funktionen                                      */
10
/*                                                                           */
11
/*****************************************************************************/
12
 
13
#include <stdio.h>
14
#include <stddef.h>
15
#include <stdarg.h>
16
 
17
#include "datatypes.h"
18
 
19
struct as_dynstr;
20
 
21
extern char HexStartCharacter;
22
extern char SplitByteCharacter;
23
 
24
extern const char *Blanks(int cnt);
25
 
26
#define HexString(pDest, DestSize, i, Stellen) SysString(pDest, DestSize, i, 16, Stellen, False, HexStartCharacter, SplitByteCharacter)
27
#define DecString(pDest, DestSize, i, Digits) SysString(pDest, DestSize, i, 10, Digits, False, HexStartCharacter, '\0')
28
 
29
extern int SysString(char *pDest, size_t DestSize, LargeWord i, int System, int Stellen, Boolean ForceLeadZero, char StartCharacter, char SplitCharacter);
30
 
31
extern char *as_strdup(const char *s);
32
 
33
typedef enum { e_not_set, e_set, e_finished } as_format_arg_state_t;
34
 
35
typedef struct
36
{
37
  as_format_arg_state_t arg_state[3];
38
  Boolean in_format, lead_zero, is_signed, left_align, add_plus, force_lead_zero, force_upper;
39
  int arg[3], curr_arg, int_size;
40
} as_format_ctx_t;
41
 
42
extern void as_format_context_reset(as_format_ctx_t *p_context);
43
extern Boolean as_format_context_consume(as_format_ctx_t *p_context, char ch);
44
 
45
extern int as_vsnprcatf(char *pDest, size_t DestSize, const char *pFormat, va_list ap);
46
extern int as_snprcatf(char *pDest, size_t DestSize, const char *pFormat, ...);
47
extern int as_vsnprintf(char *pDest, size_t DestSize, const char *pFormat, va_list ap);
48
extern int as_snprintf(char *pDest, size_t DestSize, const char *pFormat, ...);
49
 
50
extern int as_vsdprcatf(struct as_dynstr *p_dest, const char *pFormat, va_list ap);
51
extern int as_sdprcatf(struct as_dynstr *p_dest, const char *pFormat, ...);
52
extern int as_vsdprintf(struct as_dynstr *p_dest, const char *pFormat, va_list ap);
53
extern int as_sdprintf(struct as_dynstr *p_dest, const char *pFormat, ...);
54
 
55
extern int as_strcasecmp(const char *src1, const char *src2);
56
extern int as_strncasecmp(const char *src1, const char *src2, size_t maxlen);
57
 
58
#ifdef NEEDS_STRSTR
59
extern char *strstr(const char *haystack, const char *needle);
60
#endif
61
 
62
extern char *strrmultchr(const char *haystack, const char *needles);
63
 
64
extern size_t strmaxcpy(char *dest, const char *src, size_t Max);
65
extern size_t strmaxcat(char *Dest, const char *Src, size_t MaxLen);
66
extern void strprep(char *Dest, const char *Src);
67
extern void strmaxprep(char *p_dest, const char *p_src, size_t max_len);
68
extern void strmaxprep2(char *p_dest, const char *p_src, size_t max_len);
69
extern void strins(char *Dest, const char *Src, int Pos);
70
extern void strmaxins(char *Dest, const char *Src, int Pos, size_t MaxLen);
71
 
72
extern size_t as_strnlen(const char *pStr, size_t MaxLen);
73
 
74
extern int strreplace(char *pHaystack, const char *pFrom, const char *pTo, size_t ToMaxLen, size_t HaystackSize);
75
 
76
extern int strlencmp(const char *pStr1, unsigned Str1Len,
77
                     const char *pStr2, unsigned Str2Len);
78
 
79
extern unsigned fstrlenprint(FILE *pFile, const char *pStr, unsigned StrLen);
80
 
81
extern void ReadLn(FILE *Datei, char *Zeile);
82
 
83
extern size_t ReadLnCont(FILE *Datei, struct as_dynstr *p_line);
84
 
85
extern int DigitVal(char ch, int Base);
86
 
87
extern LargeInt ConstLongInt(const char *inp, Boolean *pErr, LongInt Base);
88
 
89
extern char *ParenthPos(char *pHaystack, char Needle);
90
 
91
extern int KillPrefBlanks(char *s);
92
 
93
extern int KillPostBlanks(char *s);
94
 
95
extern char TabCompressed(char in);
96
 
97
extern int strqcmp(const char *s1, const char *s2);
98
 
99
extern char *strmov(char *pDest, const char *pSrc);
100
 
101
extern int strmemcpy(char *pDest, size_t DestSize, const char *pSrc, size_t SrcLen);
102
 
103
extern void strutil_init(void);
104
 
105
/* avoid nasty "subscript has type char..." messages on some platforms */
106
 
107
#include <ctype.h>
108
 
109
#define __chartouint(c) (((unsigned int)(c)) & 0xff)
110
#define as_toupper(c) (toupper(__chartouint(c)))
111
#define as_tolower(c) (tolower(__chartouint(c)))
112
#define as_isspace(c) (!!isspace(__chartouint(c)))
113
#define as_isdigit(c) (!!isdigit(__chartouint(c)))
114
#define as_isxdigit(c) (!!isxdigit(__chartouint(c)))
115
#define as_isprint(c) (!!isprint(__chartouint(c)))
116
#define as_isalpha(c) (!!isalpha(__chartouint(c)))
117
#define as_isupper(c) (!!isupper(__chartouint(c)))
118
#define as_islower(c) (!!islower(__chartouint(c)))
119
#define as_isalnum(c) (!!isalnum(__chartouint(c)))
120
 
121
#endif /* _STRUTIL_H */