Lines Matching +full:- +full:state

2  * Copyright (c) 1995-1999 Kungliga Tekniska H�gskolan
54 * Common state
57 struct state { struct
63 int (*append_char)(struct state *, unsigned char); argument
64 int (*reserve)(struct state *, size_t); argument
65 /* XXX - methods */
70 as_reserve (struct state *state, size_t n)
72 if (state->s + n > state->theend) {
73 int off = state->s - state->str;
76 if (state->max_sz && state->sz >= state->max_sz)
79 state->sz = max(state->sz * 2, state->sz + n);
80 if (state->max_sz)
81 state->sz = min(state->sz, state->max_sz);
82 tmp = realloc (state->str, state->sz);
85 state->str = tmp;
86 state->s = state->str + off;
87 state->theend = state->str + state->sz - 1;
93 as_append_char (struct state *state, unsigned char c)
95 if(as_reserve (state, 1))
98 *state->s++ = c;
105 append_number(struct state *state, in append_number() argument
113 if(prec != -1) in append_number()
117 /* zero value with zero precision -> "" */ in append_number()
121 if((*state->append_char)(state, rep[num % base])) in append_number()
126 prec -= len; in append_number()
128 while(prec-- > 0){ in append_number()
129 if((*state->append_char)(state, '0')) in append_number()
138 width -= len; in append_number()
140 width--; in append_number()
141 while(width-- > 0){ in append_number()
142 if((*state->append_char)(state, '0')) in append_number()
150 if((*state->append_char)(state, rep[10] + 23)) /* XXX */ in append_number()
152 if((*state->append_char)(state, '0')) in append_number()
157 if((*state->append_char)(state, '-')) in append_number()
161 if((*state->append_char)(state, '+')) in append_number()
165 if((*state->append_char)(state, ' ')) in append_number()
172 char c = state->s[-i-1]; in append_number()
173 state->s[-i-1] = state->s[-len+i]; in append_number()
174 state->s[-len+i] = c; in append_number()
176 width -= len; in append_number()
177 while(width-- > 0){ in append_number()
178 if((*state->append_char)(state, ' ')) in append_number()
185 char c = state->s[-i-1]; in append_number()
186 state->s[-i-1] = state->s[-len+i]; in append_number()
187 state->s[-len+i] = c; in append_number()
194 append_string (struct state *state, in append_string() argument
200 if(prec != -1) in append_string()
201 width -= prec; in append_string()
203 width -= strlen((char *)arg); in append_string()
205 while(width-- > 0) in append_string()
206 if((*state->append_char) (state, ' ')) in append_string()
208 if (prec != -1) { in append_string()
209 while (*arg && prec--) in append_string()
210 if ((*state->append_char) (state, *arg++)) in append_string()
214 if ((*state->append_char) (state, *arg++)) in append_string()
218 while(width-- > 0) in append_string()
219 if((*state->append_char) (state, ' ')) in append_string()
225 append_char(struct state *state, in append_char() argument
230 while(!(flags & minus_flag) && --width > 0) in append_char()
231 if((*state->append_char) (state, ' ')) in append_char()
234 if((*state->append_char) (state, arg)) in append_char()
236 while((flags & minus_flag) && --width > 0) in append_char()
237 if((*state->append_char) (state, ' ')) in append_char()
256 * zyxprintf - return 0 or -1
260 xyzprintf (struct state *state, const char *char_format, va_list ap) in xyzprintf() argument
269 int prec = -1; in xyzprintf()
275 if(c == '-') in xyzprintf()
298 width = width * 10 + c - '0'; in xyzprintf()
312 prec = prec * 10 + c - '0'; in xyzprintf()
333 if(append_char(state, va_arg(ap, int), width, flags)) in xyzprintf()
334 return -1; in xyzprintf()
337 if (append_string(state, in xyzprintf()
342 return -1; in xyzprintf()
354 num = -arg; in xyzprintf()
358 if (append_number (state, num, 10, "0123456789", in xyzprintf()
360 return -1; in xyzprintf()
368 if (append_number (state, arg, 10, "0123456789", in xyzprintf()
370 return -1; in xyzprintf()
378 if (append_number (state, arg, 010, "01234567", in xyzprintf()
380 return -1; in xyzprintf()
388 if (append_number (state, arg, 0x10, "0123456789abcdef", in xyzprintf()
390 return -1; in xyzprintf()
398 if (append_number (state, arg, 0x10, "0123456789ABCDEF", in xyzprintf()
400 return -1; in xyzprintf()
406 if (append_number (state, arg, 0x10, "0123456789ABCDEF", in xyzprintf()
408 return -1; in xyzprintf()
413 *arg = state->s - state->str; in xyzprintf()
417 --format; in xyzprintf()
420 if ((*state->append_char)(state, c)) in xyzprintf()
421 return -1; in xyzprintf()
424 if ( (*state->append_char)(state, '%') in xyzprintf()
425 || (*state->append_char)(state, c)) in xyzprintf()
426 return -1; in xyzprintf()
430 if ((*state->append_char) (state, c)) in xyzprintf()
431 return -1; in xyzprintf()
473 struct state state;
475 state.max_sz = max_sz;
476 state.sz = 1;
477 state.str = malloc(state.sz);
478 if (state.str == NULL) {
480 return -1;
482 state.s = state.str;
483 state.theend = state.s + state.sz - 1;
484 state.append_char = as_append_char;
485 state.reserve = as_reserve;
487 st = xyzprintf (&state, format, args);
489 free (state.str);
491 return -1;
495 *state.s = '\0';
496 len = state.s - state.str;
497 tmp = realloc (state.str, len+1);
499 free (state.str);
501 return -1;