00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef DEF_FORMAT_H
00030 #define DEF_FORMAT_H
00031
00032
00039 #include <stdio.h>
00040 #include <string.h>
00041 #include "plabla.h"
00042
00043 #include "array.h"
00044 #include "hlrmisc.h"
00045
00046
00047
00048
00049
00053 typedef struct wordIterStruct {
00054 char *cp ;
00055 char *seps ;
00056 int manySepsAreOne ;
00057 int atEnd ;
00058 } *WordIter ;
00059 extern WordIter wordIterCreate(char *s, char *seps, int manySepsAreOne) ;
00060
00061
00062 extern void wordIterDestroy_func(WordIter thisOne) ;
00063 extern void textDestroyFunc(Array a) ;
00064
00065
00066
00067
00068
00069
00070
00071
00072
00076 #define Stringa Array
00077
00083 #define stringCreateClear(s,n) {if(s) stringClear(s); else s=stringCreate(n);}
00084
00089 #define stringCreateOnce(s,n) {if(!s) s=stringCreate(n);}
00090
00095 #define stringDestroy arrayDestroy
00096
00100 #define string(stringa) arrp(stringa,0,char)
00101 #define stringCp(stringa,index) arrp(stringa,index,char)
00102 #define stringC(stringa,index) arru(stringa,index,char)
00103
00107 #define stringLen(stringa) (arrayMax(stringa)-1)
00108
00109 extern Stringa stringCreate(int initialSize) ;
00110 extern void stringTerminate(Array s ) ;
00111 extern void stringTerminateP(Array s , char *cp) ;
00112 extern void stringTerminateI(Array s , int i) ;
00113
00114 extern void stringCat(Stringa s1, char *s2) ;
00115 extern void stringCatInt(Stringa s, int i) ;
00116 extern void stringCatChar (Stringa s,char c);
00117 extern void stringNCat(Stringa s1, char *s2, int n) ;
00118 extern void stringCpy(Stringa s1, char *s2) ;
00119 extern void stringNCpy(Stringa s1, char *s2, int n) ;
00120 extern void stringClear(Array s1) ;
00121 extern void stringAdjust(Array s1) ;
00122 extern void stringChop(Stringa s, int n) ;
00123 extern void stringInsert(Stringa s, int p, char *i) ;
00124 extern char *stringCut(Stringa s, int pos, int len) ;
00125 extern int stringTrim(Stringa s , char *left, char *right) ;
00126 extern int stringTranslate(Stringa s, char *fromChars, char *toChars) ;
00127 extern int stringPrintf(Stringa str, char *format, ...) ;
00128 extern int stringAppendf(Stringa str, char *format, ...) ;
00129 extern char *stringPrintBuf(char *format, ...) ;
00130 extern int isEmptyString(Stringa s) ;
00131
00132
00133
00134 extern void strReplace(char **s1, char *s2) ;
00135 extern void toupperStr(char *s) ;
00136 extern void tolowerStr(char *s) ;
00137 extern char *strCaseStr (char *s, char *t) ;
00138 extern char *strCopySubstr(char *pszString, char cBegin, char cEnd, Array acSubstr ) ;
00139 extern int strTranslate(char *s, char *fromChars, char *toChars) ;
00140 extern int strTrim(char *s, char *left, char *right) ;
00141 extern void strScramble(char *s) ;
00142 extern void strUnscramble(char *s) ;
00143 extern int isBlankStr(char *s) ;
00144
00148 #define strDiffer(s1,s2) (strcmp((s1),(s2)) != 0)
00149
00153 #define strEqual(s1,s2) (strcmp((s1),(s2)) == 0)
00154
00158 #define strNDiffer(s1,s2,n) (strncmp((s1),(s2),n) != 0)
00159
00163 #define strNEqual(s1,s2,n) (strncmp((s1),(s2),n) == 0)
00164
00165
00166 #if BIOS_PLATFORM == BIOS_PLATFORM_IRIX || BIOS_PLATFORM == BIOS_PLATFORM_SOLARIS || BIOS_PLATFORM == BIOS_PLATFORM_LINUX
00167 #define strCaseDiffer(s1,s2) (strcasecmp((s1),(s2)) != 0)
00168 #define strCaseEqual(s1,s2) (strcasecmp((s1),(s2)) == 0)
00169 #define strNCaseDiffer(s1,s2,n) (strncasecmp((s1),(s2),n) != 0)
00170 #define strNCaseEqual(s1,s2,n) (strncasecmp((s1),(s2),n) == 0)
00171 #endif
00172
00173 #if BIOS_PLATFORM == BIOS_PLATFORM_WINNT
00174 #define strCaseDiffer(s1,s2) (stricmp((s1),(s2)) != 0)
00175 #define strCaseEqual(s1,s2) (stricmp((s1),(s2)) == 0)
00176 #define strNCaseDiffer(s1,s2,n) (strnicmp((s1),(s2),n) != 0)
00177 #define strNCaseEqual(s1,s2,n) (strnicmp((s1),(s2),n) == 0)
00178 #endif
00179
00180
00181 extern int strEndsWith(char *s, char *suffix) ;
00182
00188 #define strStartsWith(s1,s2) (strncmp((s1),(s2),strlen(s2)) == 0)
00189
00194 #define strStartsWithC(s1,s2) (strncmp((s1),(s2),sizeof(s2)-1) == 0)
00195
00196
00197
00198
00199
00200
00201
00205 #define Texta Array
00206 extern Texta textClone(Texta a) ;
00207 extern void textClear(Texta a) ;
00208
00213 #define textCreate(initialSize) arrayCreate(initialSize,char*)
00214
00215
00221 #define textCreateClear(t,n) {if(t) textClear(t); else t=textCreate(n);}
00222
00227 #define textDestroy(x) ((x) ? textDestroyFunc(x), x=NULL, 1 : 0)
00228 extern Texta textStrtok(char *s,char *sep);
00229 extern Texta textStrtokP(char *s, char *sep) ;
00230 extern Texta textFieldtok(char *s, char *sep);
00231 extern Texta textFieldtokP(char *s, char *sep);
00232 extern void textUniqKeepOrder(Texta t) ;
00233
00237 #define textAdd(t,s) (array((t),arrayMax(t),char*)=hlr_strdup(s))
00238
00242 #define textItem(text,index) arru((text),(index),char*)
00243 extern void textJoin(Stringa s, char *sep, Array a ) ;
00244
00245
00246
00247
00248
00253 #define wordTokIterCreate(s,seps) wordIterCreate(s,seps,1)
00254
00259 #define wordFldIterCreate(s,seps) wordIterCreate(s,seps,0)
00260
00265 #define wordNext(this1) (wordNextG((this1),NULL))
00266 char *wordNextG(WordIter this1, int *lenP) ;
00267
00272 #define wordIterDestroy(this) (wordIterDestroy_func(this), this=0)
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298 extern int getLine(FILE *stream, char **buffer, int *buflen) ;
00299 extern int stripNlGetLength(char *line) ;
00300
00301
00302 #endif