]> Pileus Git - ~andy/fetchmail/blob - trio/example.c
Remove comment that confuses splint.
[~andy/fetchmail] / trio / example.c
1 /*************************************************************************
2  * For testing purposes
3  */
4
5 #include <stdarg.h>
6 #include <limits.h>
7 #include <math.h>
8 #include <unistd.h>
9 /*  #include <nan.h> */
10 #include <wchar.h>
11 #include "strio.h"
12 #include "trio.h"
13 #undef printf
14
15 #if !defined(USE_LONGLONG)
16 # if defined(__GNUC__) && !defined(__STRICT_ANSI__)
17 #  define USE_LONGLONG
18 # elif defined(__SUNPRO_C)
19 #  define USE_LONGLONG
20 # endif
21 #endif
22
23 #if defined(USE_LONGLONG)
24 # define LONGLONG long long
25 #else
26 # define LONGLONG long
27 #endif
28
29 #if defined(TRIO_C99)
30 # define LONGEST intmax_t
31 #else
32 # define LONGEST LONGLONG
33 #endif
34
35 static const char rcsid[] = "@(#)$Id: example.c,v 1.9 2001/11/25 13:47:38 breese Exp $";
36
37 /*************************************************************************
38  *
39  */
40 void Dump(char *buffer, int rc)
41 {
42   if (rc < 0)
43     {
44       printf("Err = %d (%s), Pos = %d\n",
45              TRIO_ERROR_CODE(rc),
46              TRIO_ERROR_NAME(rc),
47              TRIO_ERROR_POSITION(rc));
48     }
49   else
50     printf("buffer[% 3d] = \"%s\"\n", rc, buffer);
51 }
52
53 /*************************************************************************
54  *
55  */
56 int main(void)
57 {
58   char buffer[512];
59   int rc;
60   LONGLONG int dummy;
61   char *fool;
62   int num;
63   int num2;
64   int count;
65   double dnum;
66   char *end;
67   char text[256];
68   char ch;
69   int nerrors = 0;
70   void *p1;
71   char *p2;
72
73   printf("%s\n", rcsid);
74
75 /*    printf("%d %u %d %u\n", */
76 /*       INT_MAX, INT_MAX, UINT_MAX, UINT_MAX); */
77 /*    trio_printf("%d %u %d %u\n", */
78 /*            INT_MAX, INT_MAX, UINT_MAX, UINT_MAX); */
79 /*    printf("%d %u\n", INT_MIN, INT_MIN); */
80 /*    trio_printf("%d %u\n", INT_MIN, INT_MIN); */
81   
82 /*    printf("%ld %lu %ld %lu\n", */
83 /*       INT_MAX, INT_MAX, UINT_MAX, UINT_MAX); */
84 /*    trio_printf("%ld %lu %ld %lu\n", */
85 /*            INT_MAX, INT_MAX, UINT_MAX, UINT_MAX); */
86 /*    printf("%ld %lu\n", INT_MIN, INT_MIN); */
87 /*    trio_printf("%ld %lu\n", INT_MIN, INT_MIN); */
88
89 /*    printf("%lld %llu %lld %llu\n", */
90 /*       INT_MAX, INT_MAX, UINT_MAX, UINT_MAX); */
91 /*    trio_printf("%lld %llu %lld %llu\n", */
92 /*            INT_MAX, INT_MAX, UINT_MAX, UINT_MAX); */
93 /*    printf("%lld %llu\n", INT_MIN, INT_MIN); */
94 /*    trio_printf("%lld %llu\n", INT_MIN, INT_MIN); */
95
96 /*    return 0; */
97
98   
99 /*    dnum = StrToDouble("3.14e+44", (const char **)&end); */
100 /*    printf("double = %e (%s)\n", dnum, end); */
101 /*    dnum = StrToDouble("0xA3.14p44", (const char **)&end); */
102 /*    printf("double = %e (%s)\n", dnum, end); */
103
104   /*    trio_printf("%.*stext\n", 0, "-----"); */ /* fails */
105   
106 /*    trio_printf("%Zd\n", (size_t)sizeof(char)); */
107   
108 /*   rc = StrFormat(buffer, "%a", 3.14e+44); */
109 /*   Dump(buffer, rc); */
110   
111   /*  rc = StrFormat(buffer, "Filled string: %-16<fill=_>s", "test"); */
112
113 /*   errno = EINTR; */
114 /*   rc = StrFormat(buffer, "Error: %m"); */
115
116 /*   rc = StrFormat(buffer, "Count %lln", &dummy); */
117 /*   printf("dummy = %lld\n", dummy); */
118
119 /*   rc = StrFormat(buffer, "Char %<quote='>c", 'X'); */
120
121 /*   rc = StrFormatMax(buffer, 20, "Here goes %-20<adjust=_>s", "test"); */
122
123 /*    rc = StrFormat(buffer, "Hex-float %a", 3.1415); */
124 /*    Dump(buffer, rc); */
125 /*    rc = StrFormat(buffer, "Hex-float %A", 3.1415e20); */
126 /*    Dump(buffer, rc); */
127 /*    rc = StrFormat(buffer, "Double %#g", 3.1415e20); */
128 /*    Dump(buffer, rc); */
129 /*    rc = StrFormat(buffer, "Double %.3f", 3.1415); */
130 /*    Dump(buffer, rc); */
131 /*    rc = StrFormat(buffer, "Double %+e", 3.1415); */
132 /*    Dump(buffer, rc); */
133
134 /*    printf("'%.2f'\n", 99.99999); */
135 /*    trio_printf("'%.2f'\n", 99.99999); */
136 /*    printf("'%f'\n", 0.0); */
137 /*    trio_printf("'%f'\n", 0.0); */
138 /*    printf("'%f'\n", 3141.0); */
139 /*    trio_printf("'%f'\n", 3141.0); */
140 /*    printf("'%#f'\n", 3141.0); */
141 /*    trio_printf("'%#f'\n", 3141.0); */
142 /*    printf("'%'f'\n", 31415.2); */
143 /*    trio_printf("'%'f'\n", 31415.2); */
144 /*    printf("'%-16e'\n", 3141.5); */
145 /*    trio_printf("'%-16e'\n", 3141.5); */
146 /*    printf("'%#f'\n", 3141.0); */
147 /*    trio_printf("'%#f'\n", 3141.0); */
148 /*    printf("'%f'\n", 3141.5); */
149 /*    trio_printf("'%f'\n", 3141.5); */
150 /*    printf("'%#.6g'\n", 3141.5); */
151 /*    trio_printf("'%#.6g'\n", 3141.5); */
152   
153 /*    printf("'%20e'\n", 314.5); */
154 /*    trio_printf("'%20e'\n", 314.5); */
155   
156 /*    printf("'%-16e'\n", 3141.5); */
157 /*    trio_printf("'%-16e'\n", 3141.5); */
158   
159 /*    printf("'%#.4g'\n", 314151.5); */
160 /*    trio_printf("'%#.4g'\n", 314151.5); */
161   
162 /*    printf("'%#.4g'\n", 0.0); */
163 /*    trio_printf("'%#.4g'\n", 0.0); */
164   
165 /*    printf("'%#.4g'\n", 11.0); */
166 /*    trio_printf("'%#.4g'\n", 11.0); */
167
168 /*    printf("%f\n", HUGE_VAL); */
169 /*    trio_printf("%f\n", HUGE_VAL); */
170 /*    printf("%f\n", -HUGE_VAL); */
171 /*    trio_printf("%f\n", -HUGE_VAL); */
172 /*  #define NAN (cos(HUGE_VAL)) */
173 /*    printf("%f\n", NAN); */
174 /*    trio_printf("%f\n", NAN); */
175   
176 /*    printf("'%+06d'\n", 1234); */
177 /*    trio_printf("'%+06d'\n", 1234); */
178 /*    printf("'%-#6.3x'\n", 12); */
179 /*    trio_printf("'%-#06.3x'\n", 12); */
180 /*    printf("'%+6d'\n", 1234); */
181 /*    trio_printf("'%+6d'\n", 1234); */
182 /*    printf("'%-08d'\n", 12); */
183 /*    trio_printf("'%-08d'\n", 12); */
184 /*    printf("'%08.6d'\n", 12); */
185 /*    trio_printf("'%08.6d'\n", 12); */
186 /*    printf("'%4d'\n", 123456); */
187 /*    trio_printf("'%4d'\n", 123456); */
188 /*    printf("'%.4d'\n", 12); */
189 /*    trio_printf("'%.4d'\n", 12); */
190
191 /*    trio_printf("%!#08x %04x %..10x\n", 42, 42, 42); */
192 /*    trio_printf("%*.*.*i\n", 8, 4, 2, 23); */
193 /*    trio_printf("%8.4.2i %<base=2>08i %.8.2i %..2i\n", 23, 23, 23, 23); */
194
195 /*    trio_printf("%8i\n", 42); */
196 /*    trio_printf("%.7i\n", 42); */
197 /*    trio_printf("%..2i\n", 42); */
198 /*    trio_printf("%8.7i\n", 42); */
199 /*    trio_printf("%8..2i\n", 42); */
200 /*    trio_printf("%8.7.2i\n", 42); */
201 /*    trio_printf("%*.*.*i\n", 8, 7, 2, 42); */
202
203 /*    { */
204 /*      LONGLONG ll = 1234567890; */
205 /*      rc = trio_printf("%&i %d\n", sizeof(ll), ll, 42); */
206 /*      Dump(buffer, rc); */
207 /*    } */
208 /*    { */
209 /*      char ch = 12; */
210 /*      rc = trio_printf("%&i %d\n", sizeof(ch), ch, 42); */
211 /*      Dump(buffer, rc); */
212 /*    } */
213 /*    { */
214 /*      pid_t pid = 99; */
215 /*      rc = trio_printf("%&i %d\n", sizeof(pid), pid, 42); */
216 /*      Dump(buffer, rc); */
217 /*    } */
218   
219 /*    rc = trio_printf("%*.*.*i\n", 6, 4, 10, 12); */
220 /*    Dump(buffer, rc); */
221 /*    rc = trio_printf("%1$0*3$.*2$d\n", 3141, 6, 10); */
222 /*    Dump(buffer, rc); */
223
224 /*    rc = trio_asprintf(&end, "%s%n", "0123456789", &num); */
225 /*    printf("%d %d '%s'\n", rc, num, end); */
226 /*    if (end) */
227 /*      free(end); */
228   
229 /*    trio_printf("%016e\n", 3141.5); */
230 /*    trio_printf("%'f\n", 424242.42); */
231 /*    trio_printf("%#.4f\n", 0.0); */
232 /*    trio_printf("%'d\n", 424242); */
233
234 /*    rc = trio_sprintf(buffer, "%4$d %3$*8$d %2$.*7$d %1$*6$.*5$d\n", */
235 /*                  123, */
236 /*                  1234, */
237 /*                  12345, */
238 /*                  123456, */
239 /*                  5, 6, 7, 8 */
240 /*                  ); */
241 /*    Dump(buffer, rc); */
242 /*    rc = trio_sprintf(buffer, "%2$s %1$#s", "111", "222"); */
243 /*    Dump(buffer, rc); */
244   
245 /*    trio_printf("  %x %!#x %g %09x %x\n", 123456, 123456, 123456.0, 123456, 123456); */
246 /*    trio_printf("%!'i %f %i\n", 12345, 12345.0, 12345); */
247 /*    trio_printf("%!<base=2>i %i\n", 23, 23); */
248
249 /*    rc = trio_sprintf(buffer, "%I32d", 12345); */
250 /*    Dump(buffer, rc); */
251 /*    rc = trio_sprintf(buffer, "%I32I8d", 12345); */
252 /*    Dump(buffer, rc); */
253
254 /*    rc = trio_sprintf(buffer, "*%5f*", 3.3); */
255 /*    Dump(buffer, rc); */
256   
257 /*    { */
258 /*      wchar_t *wstring = L"some data"; */
259 /*      wchar_t wbuffer[512]; */
260     
261 /*      rc = trio_sprintf(buffer, "%ls", wstring); */
262 /*      Dump(buffer, rc); */
263
264 /*      rc = trio_sscanf(buffer, "%ls", wbuffer); */
265 /*      Dump(buffer, rc); */
266 /*      rc = trio_sprintf(buffer, "%ls", wbuffer); */
267 /*      Dump(buffer, rc); */
268 /*    } */
269   
270   /* rc = StrFormat(buffer, "\040-\040\040-\n"); */
271
272 /*   rc = StrFormat(buffer, "%.*s@%s", 3, "Daniel", "Fool"); */
273 /*   rc = StrFormatAppendMax(buffer, 512, " %s is a doh", "Simpson"); */
274
275 /*   rc = StrFormat(buffer, "hello %1$d %1$d", 31, 32); */
276 /*   Dump(buffer, rc); */
277 /*   rc = StrFormat(buffer, "%2$d %3$d", 31, 32, 33); */
278 /*   Dump(buffer, rc); */
279   
280 /*    rc = trio_sprintf(buffer, "%d say %g hey %s", 42, 3.14, "text"); */
281 /*    Dump(buffer, rc); */
282 /*    trio_sscanf(buffer, "%d %*s %e hey %s", &num, &dnum, text); */
283 /*    printf("num = %d, dnum = %e, text = \"%s\"\n", num, dnum, text); */
284
285 /*    rc = trio_sprintf(buffer, "%g", HUGE_VAL); */
286 /*    Dump(buffer, rc); */
287 /*    trio_sscanf(buffer, "%f", &dnum); */
288 /*    printf("dnum = %e\n", dnum); */
289
290 /*    rc = trio_sprintf(buffer, "%g", -HUGE_VAL); */
291 /*    Dump(buffer, rc); */
292 /*    trio_sscanf(buffer, "%f", &dnum); */
293 /*    printf("dnum = %e\n", dnum); */
294
295 /*  #if defined(NAN) */
296 /*    rc = trio_sprintf(buffer, "%g", NAN); */
297 /*    Dump(buffer, rc); */
298 /*    if ((rc = trio_sscanf(buffer, "%f", &dnum)) < 0) */
299 /*      Dump(buffer, rc); */
300 /*    else */
301 /*      printf("dnum = %e\n", dnum); */
302 /*  #endif */
303
304 /*    rc = trio_sprintf(buffer, "%*d", 6, 1234); */
305 /*    Dump(buffer, rc); */
306
307 /*    rc = trio_sprintf(buffer, "'%!08.6d' '%!d' '%d'", 4, 6, 8); */
308 /*    Dump(buffer, rc); */
309
310 /*    rc = trio_sprintf(buffer, "%0g", 0.123); */
311 /*    Dump(buffer, rc); */
312   
313 /*    { */
314 /*      void *argarray[4]; */
315 /*      int value = 42; */
316 /*      double number = 123.456; */
317 /*      float small_number = 123.456; */
318     
319 /*      argarray[0] = &value; */
320 /*      argarray[1] = "my string"; */
321 /*      rc = trio_sprintfv(buffer, "%d %s", argarray); */
322 /*      Dump(buffer, rc); */
323 /*      rc = trio_snprintfv(buffer, 8, "%d %s", argarray); */
324 /*      Dump(buffer, rc); */
325
326 /*      argarray[0] = &num; */
327 /*      argarray[1] = text; */
328 /*      rc = trio_sscanfv(buffer, "%d %s", argarray); */
329 /*      Dump(buffer, rc); */
330 /*      printf("num = %d  text = \"%s\"\n", num, text); */
331     
332 /*      argarray[0] = &number; */
333 /*      argarray[1] = &small_number; */
334 /*      rc = trio_sprintfv(buffer, "%f %hf", argarray); */
335 /*      Dump(buffer, rc); */
336 /*      printf("number = %f  small_number = \"%f\"\n", number, small_number); */
337 /*    } */
338   
339   rc = trio_sprintf(buffer, "abcba");
340   Dump(buffer, rc);
341   trio_sscanf(buffer, "%[ab]", text);
342   printf("text = \"%s\"\n", text);
343   trio_sscanf(buffer, "%*[ab]c%[^\n]", text);
344   printf("text = \"%s\"\n", text);
345
346   trio_sprintf(buffer, "aabcdba aaa");
347   rc = trio_sscanf(buffer, "%s", text);
348   Dump(buffer, rc);
349   printf("text = \"%s\"\n", text);
350   rc = trio_sscanf(buffer, "%*1[aA]%[a-c]", text);
351   Dump(buffer, rc);
352   printf("text = \"%s\"\n", text);
353
354   rc = trio_sprintf(buffer, "10021");
355   rc = trio_sscanf(buffer, "%b%n%d", &num, &count, &num2);
356   Dump(buffer, rc);
357   printf("num = %d %d %d\n", num, num2, count);
358
359 /*    rc = trio_sprintf(buffer, "%'d", 10000); */
360 /*    rc = trio_sscanf(buffer, "%'d", &num); */
361 /*    Dump(buffer, rc); */
362 /*    printf("num = %d\n", num); */
363
364 /*    rc = trio_dprintf(STDOUT_FILENO, "%s\n", "hello there"); */
365 /*    Dump(buffer, rc); */
366 /*    rc = trio_dscanf(STDIN_FILENO, "%s", buffer); */
367 /*    Dump(buffer, rc); */
368
369 /*    rc = trio_scanf("%s", buffer); */
370 /*    Dump(buffer, rc); */
371   
372 /*    rc = trio_sprintf(buffer, "Ttext"); */
373 /*    Dump(buffer, rc); */
374 /*    trio_sscanf(buffer, "%*[Tt]e%c", &ch); */
375 /*    printf("ch = %c\n", ch); */
376
377 /*    printf("%p\n", &main); */
378 /*    rc = trio_sprintf(buffer, "%p %p", &main, NULL); */
379 /*    Dump(buffer, rc); */
380 /*    trio_sscanf(buffer, "%p %p", &p1, &p2); */
381 /*    printf("pointer = %p %p\n", p1, p2); */
382
383 /*    rc = trio_sprintf(buffer, "%@.@.@i", 8, 7, 2, 42); */
384 /*    Dump(buffer, rc); */
385 /*    trio_sprintf(buffer, "abcdefghijklmnopqrstuvwxyz"); */
386 /*    rc = trio_sscanf(buffer, "%100s", text); */
387 /*    Dump(text, rc); */
388 /*    rc = trio_sscanf(buffer, "%@s", 100, text); */
389 /*    Dump(text, rc); */
390   
391 /*    rc = trio_sprintf(buffer, "%..2i", 42); */
392 /*    Dump(buffer, rc); */
393 /*    rc = trio_sscanf(buffer, "%..2i", &num); */
394 /*    printf("%d\n", num); */
395 /*    rc = trio_sscanf(buffer, "%..@i", 2, &num); */
396 /*    printf("%d\n", num); */
397
398 /*    { */
399 /*      int num1, num2, num3, num4; */
400     
401 /*      rc = trio_sprintf(buffer, "123_456 [12%%-34%%]"); */
402 /*      Dump(buffer, rc); */
403 /*      rc = trio_sscanf(buffer, "%5i%*1s%5i%*1s%5i%*2s%5i", */
404 /*                   &num1, &num2, &num3, &num4); */
405 /*      Dump(buffer, rc); */
406 /*      printf("%d %d %d %d %d\n", rc, num1, num2, num3, num4); */
407 /*      rc = trio_sscanf(buffer, "%d_%d [%d%%-%d%%]", */
408 /*                   &num1, &num2, &num3, &num4); */
409 /*      Dump(buffer, rc); */
410 /*      printf("%d %d %d %d %d\n", rc, num1, num2, num3, num4); */
411 /*    } */
412
413 /*    rc = trio_sprintf(buffer, "01 3456789"); */
414 /*    Dump(buffer, rc); */
415 /*    memset(&text, 0, sizeof(text)); */
416 /*    rc = trio_sscanf(buffer, "%4c", &text); */
417 /*    Dump(text, rc); */
418 /*    memset(&text, 0, sizeof(text)); */
419 /*    rc = sscanf(buffer, "%4c", &text); */
420 /*    Dump(text, rc); */
421   
422 /*    rc = trio_sprintf(buffer, "12345 6"); */
423 /*    Dump(buffer, rc); */
424 /*    rc = trio_sscanf(buffer, "%2d", &num); */
425 /*    Dump(buffer, rc); */
426 /*    printf("%d\n", num); */
427 /*    rc = sscanf(buffer, "%2d", &num); */
428 /*    Dump(buffer, rc); */
429 /*    printf("%d\n", num); */
430   
431 /*    rc = trio_sprintf(buffer, "aa\\x0abb"); */
432 /*    Dump(buffer, rc); */
433 /*    rc = trio_sscanf(buffer, "aa%#sbb", &text); */
434 /*    Dump(text, rc); */
435
436 /*    rc = trio_sscanf("0 ", "%f", &dnum, text); */
437 /*    printf("%d %f\n", rc, dnum); */
438 /*    rc = sscanf("0 ", "%f %s", &dnum, text); */
439 /*    printf("%d %f\n", rc, dnum); */
440   
441 /*    rc = trio_sscanf("lære", "%[:alpha:]", text); */
442 /*    Dump(text, rc); */
443   
444 /*    rc = trio_sscanf("-0.123e3", "%8e", &dnum); */
445 /*    printf("%d %f\n", rc, dnum); */
446
447 /*    rc = trio_sscanf("123,456.78", "%'f", &dnum); */
448 /*    printf("%d %f\n", rc, dnum); */
449
450   return 0;
451 }