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 */ |