Lines Matching refs:str

1 /* $RCSfile: str.c,v $$Revision: 4.1 $$Date: 92/08/07 18:29:26 $
9 * $Log: str.c,v $
17 str_numset(register STR *str, double num)
19 str->str_nval = num;
20 str->str_pok = 0; /* invalidate pointer */
21 str->str_nok = 1; /* validate number */
25 str_2ptr(register STR *str)
29 if (!str)
31 GROWSTR(&(str->str_ptr), &(str->str_len), 24);
32 s = str->str_ptr;
33 if (str->str_nok) {
34 sprintf(s,"%.20g",str->str_nval);
38 str->str_cur = s - str->str_ptr;
39 str->str_pok = 1;
42 fprintf(stderr,"0x%lx ptr(%s)\n",(unsigned long)str,str->str_ptr);
44 return str->str_ptr;
48 str_2num(register STR *str)
50 if (!str)
52 if (str->str_len && str->str_pok)
53 str->str_nval = atof(str->str_ptr);
55 str->str_nval = 0.0;
56 str->str_nok = 1;
59 fprintf(stderr,"0x%lx num(%g)\n",(unsigned long)str,str->str_nval);
61 return str->str_nval;
78 str_nset(register STR *str, register char *ptr, register int len)
80 GROWSTR(&(str->str_ptr), &(str->str_len), len + 1);
81 memcpy(str->str_ptr,ptr,len);
82 str->str_cur = len;
83 *(str->str_ptr+str->str_cur) = '\0';
84 str->str_nok = 0; /* invalidate number */
85 str->str_pok = 1; /* validate pointer */
89 str_set(register STR *str, register char *ptr)
96 GROWSTR(&(str->str_ptr), &(str->str_len), len + 1);
97 memcpy(str->str_ptr,ptr,len+1);
98 str->str_cur = len;
99 str->str_nok = 0; /* invalidate number */
100 str->str_pok = 1; /* validate pointer */
104 str_chop(register STR *str, register char *ptr) /* like set but assuming ptr is in str */
108 if (!(str->str_pok))
109 str_2ptr(str);
110 str->str_cur -= (ptr - str->str_ptr);
111 memcpy(str->str_ptr, ptr, str->str_cur + 1);
112 str->str_nok = 0; /* invalidate number */
113 str->str_pok = 1; /* validate pointer */
117 str_ncat(register STR *str, register char *ptr, register int len)
119 if (!(str->str_pok))
120 str_2ptr(str);
121 GROWSTR(&(str->str_ptr), &(str->str_len), str->str_cur + len + 1);
122 memcpy(str->str_ptr+str->str_cur, ptr, len);
123 str->str_cur += len;
124 *(str->str_ptr+str->str_cur) = '\0';
125 str->str_nok = 0; /* invalidate number */
126 str->str_pok = 1; /* validate pointer */
139 str_cat(register STR *str, register char *ptr)
145 if (!(str->str_pok))
146 str_2ptr(str);
148 GROWSTR(&(str->str_ptr), &(str->str_len), str->str_cur + len + 1);
149 memcpy(str->str_ptr+str->str_cur, ptr, len+1);
150 str->str_cur += len;
151 str->str_nok = 0; /* invalidate number */
152 str->str_pok = 1; /* validate pointer */
156 str_append_till(register STR *str, register char *from, register int delim, char *keeplist)
164 GROWSTR(&(str->str_ptr), &(str->str_len), str->str_cur + len + 1);
165 str->str_nok = 0; /* invalidate number */
166 str->str_pok = 1; /* validate pointer */
167 to = str->str_ptr+str->str_cur;
186 str->str_cur = to - str->str_ptr;
193 register STR *str;
196 str = freestrroot;
197 freestrroot = str->str_link.str_next;
200 str = (STR *) safemalloc(sizeof(STR));
201 memset((char*)str,0,sizeof(STR));
204 GROWSTR(&(str->str_ptr), &(str->str_len), len + 1);
205 return str;
209 str_grow(register STR *str, int len)
211 if (len && str)
212 GROWSTR(&(str->str_ptr), &(str->str_len), len + 1);
215 /* make str point to what nstr did */
218 str_replace(register STR *str, register STR *nstr)
220 safefree(str->str_ptr);
221 str->str_ptr = nstr->str_ptr;
222 str->str_len = nstr->str_len;
223 str->str_cur = nstr->str_cur;
224 str->str_pok = nstr->str_pok;
225 if ((str->str_nok = nstr->str_nok))
226 str->str_nval = nstr->str_nval;
231 str_free(register STR *str)
233 if (!str)
235 if (str->str_len)
236 str->str_ptr[0] = '\0';
237 str->str_cur = 0;
238 str->str_nok = 0;
239 str->str_pok = 0;
240 str->str_link.str_next = freestrroot;
241 freestrroot = str;
245 str_len(register STR *str)
247 if (!str)
249 if (!(str->str_pok))
250 str_2ptr(str);
251 if (str->str_len)
252 return str->str_cur;
258 str_gets(register STR *str, register FILE *fp)
281 str->str_nok = 0; /* invalidate number */
282 str->str_pok = 1; /* validate pointer */
283 if (str->str_len <= cnt) /* make sure we have the room */
284 GROWSTR(&(str->str_ptr), &(str->str_len), cnt+1);
285 bp = str->str_ptr; /* move these two too to registers */
290 if (bp <= str->str_ptr || bp[-2] != '\\')
305 bpx = bp - str->str_ptr; /* prepare for possible relocation */
306 GROWSTR(&(str->str_ptr), &(str->str_len), str->str_cur + cnt + 1);
307 bp = str->str_ptr + bpx; /* reconstitute our pointer */
322 str->str_cur = bp - str->str_ptr; /* set length */
330 str_set(str, buf);
332 str_set(str, No);
336 return str->str_cur ? str->str_ptr : Nullch;
340 str_inc(register STR *str)
344 if (!str)
346 if (str->str_nok) {
347 str->str_nval += 1.0;
348 str->str_pok = 0;
351 if (!str->str_pok) {
352 str->str_nval = 1.0;
353 str->str_nok = 1;
356 for (d = str->str_ptr; *d && *d != '.'; d++) ;
358 if (!isDIGIT(*str->str_ptr) || !isDIGIT(*d) ) {
359 str_numset(str,atof(str->str_ptr) + 1.0); /* punt */
362 while (d >= str->str_ptr) {
368 GROWSTR(&(str->str_ptr), &(str->str_len), str->str_cur + 2);
369 str->str_cur++;
370 for (d = str->str_ptr + str->str_cur; d > str->str_ptr; d--)
376 str_dec(register STR *str)
380 if (!str)
382 if (str->str_nok) {
383 str->str_nval -= 1.0;
384 str->str_pok = 0;
387 if (!str->str_pok) {
388 str->str_nval = -1.0;
389 str->str_nok = 1;
392 for (d = str->str_ptr; *d && *d != '.'; d++) ;
394 if (!isDIGIT(*str->str_ptr) || !isDIGIT(*d) || (*d == '0' && d == str->str_ptr)) {
395 str_numset(str,atof(str->str_ptr) - 1.0); /* punt */
398 while (d >= str->str_ptr) {
410 register STR *str = str_new(0);
413 str_sset(str,oldstr);
424 tmps_list[tmps_max] = str;
425 return str;
431 register STR *str = str_new(0);
433 str_set(str,s);
434 return str;
440 register STR *str = str_new(0);
442 str_numset(str,n);
443 return str;