98
98
# include <std_args.h>
102
# define HAVE_STDARGS /* let's hope that works everywhere (mj) */
103
# define VA_LOCAL_DECL va_list ap
104
# define VA_START(f) va_start(ap, f)
105
# define VA_SHIFT(v,t) ; /* no-op for ANSI */
106
# define VA_END va_end(ap)
101
# define HAVE_STDARGS /* let's hope that works everywhere (mj) */
102
# define VA_LOCAL_DECL va_list ap
103
# define VA_START(f) va_start(ap, f)
104
# define VA_SHIFT(v,t) ; /* no-op for ANSI */
105
# define VA_END va_end(ap)
108
107
# include <varargs.h>
109
108
# undef HAVE_STDARGS
110
# define VA_LOCAL_DECL va_list ap
111
# define VA_START(f) va_start(ap) /* f is ignored! */
112
# define VA_SHIFT(v,t) v = va_arg(ap,t)
113
# define VA_END va_end(ap)
109
# define VA_LOCAL_DECL va_list ap
110
# define VA_START(f) va_start(ap) /* f is ignored! */
111
# define VA_SHIFT(v,t) v = va_arg(ap,t)
112
# define VA_END va_end(ap)
116
115
#ifdef HAVE_LONG_DOUBLE
117
#define LDOUBLE long double
116
#define LDOUBLE long double
119
#define LDOUBLE double
118
#define LDOUBLE double
122
static void dopr(char *buffer, size_t maxlen, const char *format,
124
static void fmtstr(char *buffer, size_t * currlen, size_t maxlen,
125
char *value, int flags, int min, int max);
126
static void fmtint(char *buffer, size_t * currlen, size_t maxlen,
127
long value, int base, int min, int max, int flags);
128
static void fmtfp(char *buffer, size_t * currlen, size_t maxlen,
129
LDOUBLE fvalue, int min, int max, int flags);
130
static void dopr_outch(char *buffer, size_t * currlen, size_t maxlen,
121
static void dopr(char *buffer, size_t maxlen, const char *format, va_list args);
122
static void fmtstr(char *buffer, size_t *currlen, size_t maxlen, char *value,
123
int flags, int min, int max);
124
static void fmtint(char *buffer, size_t *currlen, size_t maxlen, long value,
125
int base, int min, int max, int flags);
126
static void fmtfp(char *buffer, size_t *currlen, size_t maxlen, LDOUBLE fvalue,
127
int min, int max, int flags);
128
static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c);
134
131
* dopr(): poor man's version of doprintf
277
if (cflags == DP_C_SHORT)
278
value = va_arg(args, short int);
279
else if (cflags == DP_C_LONG)
280
value = va_arg(args, long int);
282
value = va_arg(args, int);
283
fmtint(buffer, &currlen, maxlen, value, 10, min, max, flags);
279
if (cflags == DP_C_SHORT)
280
value = va_arg(args, short int);
282
else if (cflags == DP_C_LONG)
283
value = va_arg(args, long int);
286
value = va_arg(args, int);
288
fmtint(buffer, &currlen, maxlen, value, 10, min, max, flags);
286
flags |= DP_F_UNSIGNED;
287
if (cflags == DP_C_SHORT)
288
value = va_arg(args, unsigned short int);
289
else if (cflags == DP_C_LONG)
290
value = va_arg(args, unsigned long int);
292
value = va_arg(args, unsigned int);
293
fmtint(buffer, &currlen, maxlen, value, 8, min, max, flags);
291
flags |= DP_F_UNSIGNED;
292
if (cflags == DP_C_SHORT)
293
value = va_arg(args, unsigned short int);
295
else if (cflags == DP_C_LONG)
296
value = va_arg(args, unsigned long int);
299
value = va_arg(args, unsigned int);
301
fmtint(buffer, &currlen, maxlen, value, 8, min, max, flags);
296
flags |= DP_F_UNSIGNED;
297
if (cflags == DP_C_SHORT)
298
value = va_arg(args, unsigned short int);
299
else if (cflags == DP_C_LONG)
300
value = va_arg(args, unsigned long int);
302
value = va_arg(args, unsigned int);
303
fmtint(buffer, &currlen, maxlen, value, 10, min, max, flags);
304
flags |= DP_F_UNSIGNED;
305
if (cflags == DP_C_SHORT)
306
value = va_arg(args, unsigned short int);
308
else if (cflags == DP_C_LONG)
309
value = va_arg(args, unsigned long int);
312
value = va_arg(args, unsigned int);
314
fmtint(buffer, &currlen, maxlen, value, 10, min, max, flags);
308
flags |= DP_F_UNSIGNED;
309
if (cflags == DP_C_SHORT)
310
value = va_arg(args, unsigned short int);
311
else if (cflags == DP_C_LONG)
312
value = va_arg(args, unsigned long int);
314
value = va_arg(args, unsigned int);
315
fmtint(buffer, &currlen, maxlen, value, 16, min, max, flags);
319
flags |= DP_F_UNSIGNED;
320
if (cflags == DP_C_SHORT)
321
value = va_arg(args, unsigned short int);
323
else if (cflags == DP_C_LONG)
324
value = va_arg(args, unsigned long int);
327
value = va_arg(args, unsigned int);
329
fmtint(buffer, &currlen, maxlen, value, 16, min, max, flags);
318
if (cflags == DP_C_LDOUBLE)
319
fvalue = va_arg(args, LDOUBLE);
321
fvalue = va_arg(args, double);
322
/* um, floating point? */
323
fmtfp(buffer, &currlen, maxlen, fvalue, min, max, flags);
332
if (cflags == DP_C_LDOUBLE)
333
fvalue = va_arg(args, LDOUBLE);
335
fvalue = va_arg(args, double);
337
/* um, floating point? */
338
fmtfp(buffer, &currlen, maxlen, fvalue, min, max, flags);
328
if (cflags == DP_C_LDOUBLE)
329
fvalue = va_arg(args, LDOUBLE);
331
fvalue = va_arg(args, double);
343
if (cflags == DP_C_LDOUBLE)
344
fvalue = va_arg(args, LDOUBLE);
346
fvalue = va_arg(args, double);
336
if (cflags == DP_C_LDOUBLE)
337
fvalue = va_arg(args, LDOUBLE);
339
fvalue = va_arg(args, double);
352
if (cflags == DP_C_LDOUBLE)
353
fvalue = va_arg(args, LDOUBLE);
355
fvalue = va_arg(args, double);
342
dopr_outch(buffer, &currlen, maxlen, va_arg(args, int));
359
dopr_outch(buffer, &currlen, maxlen, va_arg(args, int));
345
strvalue = va_arg(args, char *);
347
max = maxlen; /* ie, no max */
348
fmtstr(buffer, &currlen, maxlen, strvalue, flags, min, max);
363
strvalue = va_arg(args, char *);
366
max = maxlen; /* ie, no max */
367
fmtstr(buffer, &currlen, maxlen, strvalue, flags, min, max);
351
strvalue = va_arg(args, void *);
352
fmtint(buffer, &currlen, maxlen, (long) strvalue, 16, min, max,
370
strvalue = va_arg(args, void *);
372
fmtint(buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags);
356
if (cflags == DP_C_SHORT) {
358
num = va_arg(args, short int *);
360
} else if (cflags == DP_C_LONG) {
362
num = va_arg(args, long int *);
366
num = va_arg(args, int *);
375
if (cflags == DP_C_SHORT) {
377
num = va_arg(args, short int *);
380
} else if (cflags == DP_C_LONG) {
382
num = va_arg(args, long int *);
387
num = va_arg(args, int *);
371
dopr_outch(buffer, &currlen, maxlen, ch);
393
dopr_outch(buffer, &currlen, maxlen, ch);
374
/* not supported yet, treat as next char */
396
/* not supported yet, treat as next char */
382
404
state = DP_S_DEFAULT;