Rev 3717 | Rev 5476 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
10 | reyssat | 1 | /* Copyright (C) 1998-2003 XIAO, Gang of Universite de Nice - Sophia Antipolis |
2 | * |
||
3 | * This program is free software; you can redistribute it and/or modify |
||
4 | * it under the terms of the GNU General Public License as published by |
||
5 | * the Free Software Foundation; either version 2 of the License, or |
||
6 | * (at your option) any later version. |
||
7 | * |
||
8 | * This program is distributed in the hope that it will be useful, |
||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
11 | * GNU General Public License for more details. |
||
12 | * |
||
13 | * You should have received a copy of the GNU General Public License |
||
14 | * along with this program; if not, write to the Free Software |
||
15 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
||
16 | */ |
||
17 | |||
18 | /* WWW multipurpose server, dynamic library definitions */ |
||
19 | |||
20 | #include "../config.h" |
||
21 | #include "../includes.h" |
||
22 | #include "../wimsdef.h" |
||
23 | |||
24 | /* for mt19937ar.c */ |
||
25 | #ifdef RAND_MAX |
||
26 | # undef RAND_MAX |
||
27 | #endif |
||
28 | #define RAND_MAX 2147483647 |
||
29 | #define random genrand_int31 |
||
30 | #define srandom init_genrand |
||
31 | long int genrand_int31(void); |
||
32 | |||
33 | /* errors.c */ |
||
34 | void (*error1) (char *msg); |
||
35 | void (*error2) (char *msg); |
||
36 | void (*error3) (char *msg); |
||
37 | |||
38 | /* lines.c */ |
||
39 | char *int2str(int i); |
||
40 | void *xmalloc(size_t n); |
||
41 | int msleep(int ms); /* millisecond sleeper */ |
||
42 | void _tolinux(char *p); /* dos/mac to unix/linux translation */ |
||
3717 | reyssat | 43 | void ovlstrcpy(char *dest, char *src); /* strcpy of possibly overlapping strings (64 bits problem)*/ |
5456 | bpr | 44 | void mystrncpy(char *dest, const char *src, size_t lim); /* optimized and secured strncpy */ |
10 | reyssat | 45 | /* find matching parenthesis. |
46 | * The entrance point should be after the opening parenthesis. |
||
47 | * Returns NULL if unmatched. */ |
||
48 | char *find_matching(char *p, char c); |
||
49 | char *find_word_start(char *p); /* Strips leading spaces */ |
||
50 | char *find_word_end(char *p); /* Points to the end of the word */ |
||
51 | char *strparchr(char *p, char c); /* search for char, skipping parentheses */ |
||
52 | char *strparstr(char *p, char *fnd); /* search for string, skipping parentheses */ |
||
53 | char *find_item_end(char *p); /* Points to the end of an item */ |
||
54 | char *find_line_end(char *p); /* Points to the end of a line */ |
||
55 | char *charchr(char *p,char *w); |
||
56 | char *wordchr(char *p, char *w); /* Find first occurrence of word */ |
||
57 | char *itemchr(char *p, char *w); /* Find first occurrence of item */ |
||
58 | char *linechr(char *p, char *w); /* Find first occurrence of line */ |
||
59 | char *varchr(char *p, char *v); /* Find first occurrence of math variable */ |
||
60 | int cutitems(char *p, char *list[], int max); /* Cut items of a string */ |
||
61 | int cutwords(char *p, char *list[], int max); /* Cut words of a string */ |
||
62 | int cutlines(char *p, char *list[], int max); /* Cut lines of a string */ |
||
63 | int cutchars(char *p, char *list[], int max); /* Cut chars of a string */ |
||
64 | char *strip_trailing_spaces(char *p); /* strip trailing spaces; return string end. */ |
||
65 | /* Verify whether a list is well-ordered. For debugging uses. |
||
66 | * Returns 0 if order is OK, -1 otherwise. */ |
||
67 | int verify_order(void *list, int items, size_t item_size); |
||
68 | /* searches a list. Returns index if found, -1 if nomatch. |
||
69 | * Uses binary search, list must be sorted. */ |
||
70 | int search_list(void *list, int items, size_t item_size, const char *str); |
||
71 | unsigned int linenum(char *p); /* Returns number of lines in string p */ |
||
72 | unsigned int itemnum(char *p); /* Returns number of items in the list p, comma separated */ |
||
73 | unsigned int wordnum(char *p); /* Returns number of words in string p */ |
||
74 | unsigned int charnum(char *p); /* This is just to suppress an annoying compiler warning message. */ |
||
75 | char *fnd_line(char *p, int n, char bf[]); /* find n-th line in string p */ |
||
76 | char *fnd_item(char *p, int n, char bf[]); /* find n-th item in list p, comma separated */ |
||
77 | char *fnd_word(char *p, int n, char bf[]); /* find n-th word in string p */ |
||
78 | char *fnd_char(char *p, int n, char bf[]); /* find n-th char in string p */ |
||
79 | char *fnd_row(char *p, int n, char bf[]); /* find n-th row in a matrix p */ |
||
80 | /* Separate items in the string p, end each item with 0, |
||
81 | * and store item pointers in parm[]. Does not parse past max. |
||
82 | * Returns the number of fields. */ |
||
83 | int separate_item(char *p, char *parm[], int max); |
||
84 | int separate_line(char *p, char *parm[], int max); |
||
85 | int separate_word(char *p, char *parm[], int max); |
||
86 | int _separator(char *p,char *parm[], int max, char fs); |
||
87 | int rows2lines(char *p); /* Returns 1 if semicolons changed to new lines */ |
||
88 | void lines2rows(char *p); |
||
89 | unsigned int rownum(char *p); |
||
90 | void words2items(char *p); /* change words to items */ |
||
91 | void words2lines(char *p); /* change words to lines */ |
||
92 | void lines2items(char *p); /* change lines to items */ |
||
93 | void lines2words(char *p); /* change lines to words */ |
||
94 | void items2words(char *p); /* change items to words */ |
||
95 | void items2lines(char *p); /* change items to lines */ |
||
96 | void strip_enclosing_par(char *p); /* Strip enclosing pairs of parentheses */ |
||
5456 | bpr | 97 | /* strstr but may have embedded zeros. |
10 | reyssat | 98 | * Returns memory end if not found. |
99 | * Supposes memory ends with 0. */ |
||
100 | char *memstr(char *s1, char *s2, int len); |
||
101 | /* Check whether parentheses are balanced in a given string. |
||
102 | * Returns 0 if OK. */ |
||
103 | /* style=0: simple check. style<>0: strong check. */ |
||
104 | int check_parentheses(char *p, int style); |
||
105 | void nospace(char *p); /* collapses all space characters in string. */ |
||
106 | void singlespace(char *p); /* change all spaces into ' ', and collapse multiple occurences */ |
||
107 | void deaccent(char *p); /* fold accented letters to unaccented */ |
||
108 | void reaccent(char *p); /* compose accented letters using symbols */ |
||
5456 | bpr | 109 | /* modify a string. Bufferlen must be at least MAX_LINELEN */ |
10 | reyssat | 110 | void string_modify(char *start, char *bad_beg, char *bad_end, char *good,...); |
111 | long int filelength(char *fn,...); |
||
112 | int catfile(FILE *outf, char *fn,...); |
||
113 | #ifdef libwims |
||
114 | char *fnd_position; |
||
115 | char *fnd_nextpos; |
||
116 | #else |
||
117 | extern char *fnd_position; |
||
118 | extern char *fnd_nextpos; |
||
119 | #endif |
||
120 | |||
121 | /* evalue.c */ |
||
122 | #define EV_S "EVLS" |
||
123 | #define EV_T "EVLT" |
||
124 | #define EV_X "EVLX" |
||
125 | #define EV_Y "EVLY" |
||
126 | typedef struct ev_variable{ |
||
127 | char *name; double value; |
||
128 | } ev_variable; |
||
129 | #ifdef LIBWIMS |
||
130 | int *ev_varcnt=NULL; |
||
131 | ev_variable *ev_var=NULL; |
||
132 | #else |
||
133 | extern int *ev_varcnt; |
||
134 | extern ev_variable *ev_var; |
||
135 | #endif |
||
136 | char *moneyprint(char *p, double s); |
||
137 | double factorial(double d); |
||
138 | void init_random(void); |
||
139 | double drand(double m); |
||
140 | double irand(double n); |
||
141 | double sign(double d); |
||
142 | double factorial(double d); |
||
143 | double binomial(double d1,double d2); |
||
144 | double max(double d1, double d2); |
||
145 | double min(double d1, double d2); |
||
146 | double gcd(double n1, double n2); |
||
147 | double lcm(double n1, double n2); |
||
148 | int eval_getpos(char *name); /* get position of name in nametable */ |
||
149 | void eval_setval(int pos, double v); /* set value to name */ |
||
150 | void set_evalue_pointer(char *p); /* prepare pointer for evaluation */ |
||
151 | char *get_evalue_pointer(void); /* get string pointer (after evaluation) */ |
||
152 | double _evalue(int ord); |
||
153 | double strevalue(char *p); /* evalue a string to double */ |
||
154 | char *(*substitute) (char *p); |
||
155 | int get_evalue_error(void); |
||
156 | void set_evalue_error(int e); |
||
157 | int get_evalcnt(void); |
||
158 | char *get_evalname(int i); |
||
159 | int get_evaltype(int i); |
||
160 | int evaltab_verify(void); |
||
161 | int search_evaltab(char *p); |
||
162 | /* compile an expression for faster evaluation |
||
163 | * returns -1 if cannot be compiled. |
||
164 | * else returns the number of compilations. */ |
||
165 | int evalue_compile(char *p); |
||
166 | |||
167 | /* math.c */ |
||
168 | char *find_mathvar_start(char *p); /* Points to the start of a mathematics variable (or number) */ |
||
169 | char *find_mathvar_end(char *p); /* Points to the end of a mathematics variable (or number) */ |
||
170 | void mathvarlist(char *p); /* list variable (function) names in an expression. buffer is modified to contain the list. */ |
||
171 | |||
172 | /* dir.c */ |
||
173 | int remove_tree(char *dirname); /* remove a directory tree */ |
||
174 | void mkdirs(char *s); /* recursively generate a directory structure */ |
||
175 | |||
176 | /* text.c */ |
||
177 | void text(char *p); /* main entry point for text routines */ |
||
178 | int textab_verify(void); |
||
179 | |||
180 | /* levelcurve.c */ |
||
181 | #define LEVEL_LIM 256 |
||
182 | #define LEVELPOINT_LIM 16384 |
||
183 | #define LEVELSIZE_LIM 2048 |
||
184 | #define LEVELGRAIN_LIM 16 |
||
185 | typedef struct { |
||
186 | char *fn, *xname, *yname; |
||
187 | double levels[LEVEL_LIM]; |
||
188 | int xsize,ysize,grain,levelcnt,datacnt,xevpos,yevpos; |
||
189 | double xrange[2],yrange[2],xspan,yspan; |
||
190 | short unsigned int xdata[LEVELPOINT_LIM],ydata[LEVELPOINT_LIM]; |
||
191 | } leveldata; |
||
192 | int levelcurve(leveldata *ld); /* produces level curve data. Returns non-zero if error. */ |
||
193 | |||
194 | /* My accelerated definitions. */ |
||
195 | #define myisdigit(x) (x>='0' && x<='9') |
||
196 | #define myisalpha(x) ((x&~32)>='A' && (x&~32)<='Z') |
||
197 | #define myisalnum(x) (myisalpha(x) || myisdigit(x)) |
||
198 | #define myisupper(x) (x>='A' && x<='Z') |
||
199 | #define myislower(x) (x>='a' && x<='z') |
||
200 | #define myislspace(x) (x==' ' || x=='\t') |
||
201 | #define myisspace(x) (x==' ' || x=='\t' || x=='\n' || x=='\r') |
||
5456 | bpr | 202 | |
203 | /* should put parenthesis around x |
||
204 | #define myisdigit(x) ((x)>='0' && x<='9') |
||
205 | #define myisalpha(x) (((x)&~32)>='A' && ((x)&~32)<='Z') |
||
206 | #define myisalnum(x) (myisalpha(x) || myisdigit(x)) |
||
207 | #define myisupper(x) ((x)>='A' && (x)<='Z') |
||
208 | #define myislower(x) ((x)>='a' && (x)<='z') |
||
209 | #define myislspace(x) ((x)==' ' || (x)=='\t') |
||
210 | #define myisspace(x) ((x)==' ' || (x)=='\t' || (x)=='\n' || (x)=='\r') |
||
211 | */ |
||
212 | /*ou |
||
213 | inline int myisdigit(char x) { return x>='0' && x<='9'; } |
||
214 | */ |