1 /*************************************************************************
15 #if !defined(USE_LONGLONG)
16 # if defined(__GNUC__) && !defined(__STRICT_ANSI__)
18 # elif defined(__SUNPRO_C)
23 #if defined(USE_LONGLONG)
24 # define LONGLONG long long
26 # define LONGLONG long
30 # define LONGEST intmax_t
32 # define LONGEST LONGLONG
35 static const char rcsid[] = "@(#)$Id: example.c,v 1.9 2001/11/25 13:47:38 breese Exp $";
37 /*************************************************************************
40 void Dump(char *buffer, int rc)
44 printf("Err = %d (%s), Pos = %d\n",
47 TRIO_ERROR_POSITION(rc));
50 printf("buffer[% 3d] = \"%s\"\n", rc, buffer);
53 /*************************************************************************
73 printf("%s\n", rcsid);
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); */
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); */
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); */
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); */
104 /* trio_printf("%.*stext\n", 0, "-----"); */ /* fails */
106 /* trio_printf("%Zd\n", (size_t)sizeof(char)); */
108 /* rc = StrFormat(buffer, "%a", 3.14e+44); */
109 /* Dump(buffer, rc); */
111 /* rc = StrFormat(buffer, "Filled string: %-16<fill=_>s", "test"); */
114 /* rc = StrFormat(buffer, "Error: %m"); */
116 /* rc = StrFormat(buffer, "Count %lln", &dummy); */
117 /* printf("dummy = %lld\n", dummy); */
119 /* rc = StrFormat(buffer, "Char %<quote='>c", 'X'); */
121 /* rc = StrFormatMax(buffer, 20, "Here goes %-20<adjust=_>s", "test"); */
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); */
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); */
153 /* printf("'%20e'\n", 314.5); */
154 /* trio_printf("'%20e'\n", 314.5); */
156 /* printf("'%-16e'\n", 3141.5); */
157 /* trio_printf("'%-16e'\n", 3141.5); */
159 /* printf("'%#.4g'\n", 314151.5); */
160 /* trio_printf("'%#.4g'\n", 314151.5); */
162 /* printf("'%#.4g'\n", 0.0); */
163 /* trio_printf("'%#.4g'\n", 0.0); */
165 /* printf("'%#.4g'\n", 11.0); */
166 /* trio_printf("'%#.4g'\n", 11.0); */
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); */
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); */
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); */
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); */
204 /* LONGLONG ll = 1234567890; */
205 /* rc = trio_printf("%&i %d\n", sizeof(ll), ll, 42); */
206 /* Dump(buffer, rc); */
210 /* rc = trio_printf("%&i %d\n", sizeof(ch), ch, 42); */
211 /* Dump(buffer, rc); */
214 /* pid_t pid = 99; */
215 /* rc = trio_printf("%&i %d\n", sizeof(pid), pid, 42); */
216 /* Dump(buffer, rc); */
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); */
224 /* rc = trio_asprintf(&end, "%s%n", "0123456789", &num); */
225 /* printf("%d %d '%s'\n", rc, num, end); */
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); */
234 /* rc = trio_sprintf(buffer, "%4$d %3$*8$d %2$.*7$d %1$*6$.*5$d\n", */
241 /* Dump(buffer, rc); */
242 /* rc = trio_sprintf(buffer, "%2$s %1$#s", "111", "222"); */
243 /* Dump(buffer, rc); */
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); */
249 /* rc = trio_sprintf(buffer, "%I32d", 12345); */
250 /* Dump(buffer, rc); */
251 /* rc = trio_sprintf(buffer, "%I32I8d", 12345); */
252 /* Dump(buffer, rc); */
254 /* rc = trio_sprintf(buffer, "*%5f*", 3.3); */
255 /* Dump(buffer, rc); */
258 /* wchar_t *wstring = L"some data"; */
259 /* wchar_t wbuffer[512]; */
261 /* rc = trio_sprintf(buffer, "%ls", wstring); */
262 /* Dump(buffer, rc); */
264 /* rc = trio_sscanf(buffer, "%ls", wbuffer); */
265 /* Dump(buffer, rc); */
266 /* rc = trio_sprintf(buffer, "%ls", wbuffer); */
267 /* Dump(buffer, rc); */
270 /* rc = StrFormat(buffer, "\040-\040\040-\n"); */
272 /* rc = StrFormat(buffer, "%.*s@%s", 3, "Daniel", "Fool"); */
273 /* rc = StrFormatAppendMax(buffer, 512, " %s is a doh", "Simpson"); */
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); */
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); */
285 /* rc = trio_sprintf(buffer, "%g", HUGE_VAL); */
286 /* Dump(buffer, rc); */
287 /* trio_sscanf(buffer, "%f", &dnum); */
288 /* printf("dnum = %e\n", dnum); */
290 /* rc = trio_sprintf(buffer, "%g", -HUGE_VAL); */
291 /* Dump(buffer, rc); */
292 /* trio_sscanf(buffer, "%f", &dnum); */
293 /* printf("dnum = %e\n", dnum); */
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); */
301 /* printf("dnum = %e\n", dnum); */
304 /* rc = trio_sprintf(buffer, "%*d", 6, 1234); */
305 /* Dump(buffer, rc); */
307 /* rc = trio_sprintf(buffer, "'%!08.6d' '%!d' '%d'", 4, 6, 8); */
308 /* Dump(buffer, rc); */
310 /* rc = trio_sprintf(buffer, "%0g", 0.123); */
311 /* Dump(buffer, rc); */
314 /* void *argarray[4]; */
315 /* int value = 42; */
316 /* double number = 123.456; */
317 /* float small_number = 123.456; */
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); */
326 /* argarray[0] = # */
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); */
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); */
339 rc = trio_sprintf(buffer, "abcba");
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);
346 trio_sprintf(buffer, "aabcdba aaa");
347 rc = trio_sscanf(buffer, "%s", text);
349 printf("text = \"%s\"\n", text);
350 rc = trio_sscanf(buffer, "%*1[aA]%[a-c]", text);
352 printf("text = \"%s\"\n", text);
354 rc = trio_sprintf(buffer, "10021");
355 rc = trio_sscanf(buffer, "%b%n%d", &num, &count, &num2);
357 printf("num = %d %d %d\n", num, num2, count);
359 /* rc = trio_sprintf(buffer, "%'d", 10000); */
360 /* rc = trio_sscanf(buffer, "%'d", &num); */
361 /* Dump(buffer, rc); */
362 /* printf("num = %d\n", num); */
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); */
369 /* rc = trio_scanf("%s", buffer); */
370 /* Dump(buffer, rc); */
372 /* rc = trio_sprintf(buffer, "Ttext"); */
373 /* Dump(buffer, rc); */
374 /* trio_sscanf(buffer, "%*[Tt]e%c", &ch); */
375 /* printf("ch = %c\n", ch); */
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); */
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); */
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); */
399 /* int num1, num2, num3, num4; */
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); */
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); */
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); */
431 /* rc = trio_sprintf(buffer, "aa\\x0abb"); */
432 /* Dump(buffer, rc); */
433 /* rc = trio_sscanf(buffer, "aa%#sbb", &text); */
434 /* Dump(text, rc); */
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); */
441 /* rc = trio_sscanf("lære", "%[:alpha:]", text); */
442 /* Dump(text, rc); */
444 /* rc = trio_sscanf("-0.123e3", "%8e", &dnum); */
445 /* printf("%d %f\n", rc, dnum); */
447 /* rc = trio_sscanf("123,456.78", "%'f", &dnum); */
448 /* printf("%d %f\n", rc, dnum); */