xref: /nrf52832-nimble/rt-thread/examples/libc/printf.c (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero #include <stdio.h>
2*10465441SEvalZero #include <stdlib.h>
3*10465441SEvalZero #include <sys/fcntl.h>
4*10465441SEvalZero 
5*10465441SEvalZero #include <finsh.h>
6*10465441SEvalZero 
7*10465441SEvalZero char * format[] = {
8*10465441SEvalZero   "%",
9*10465441SEvalZero   "%0.",
10*10465441SEvalZero   "%.0",
11*10465441SEvalZero   "%+0.",
12*10465441SEvalZero   "%+.0",
13*10465441SEvalZero   "%.5",
14*10465441SEvalZero   "%+.5",
15*10465441SEvalZero   "%2.5",
16*10465441SEvalZero   "%22.5",
17*10465441SEvalZero   "%022.5",
18*10465441SEvalZero   "%#022.5",
19*10465441SEvalZero   "%-#022.5",
20*10465441SEvalZero   "%+#022.5",
21*10465441SEvalZero   "%-22.5",
22*10465441SEvalZero   "%+22.5",
23*10465441SEvalZero   "%--22.5",
24*10465441SEvalZero   "%++22.5",
25*10465441SEvalZero   "%+-22.5",
26*10465441SEvalZero   "%-+22.5",
27*10465441SEvalZero   "%-#022.5",
28*10465441SEvalZero   "%-#22.5",
29*10465441SEvalZero   "%-2.22",
30*10465441SEvalZero   "%+2.22",
31*10465441SEvalZero   "%-#02.22",
32*10465441SEvalZero   "%-#2.22",
33*10465441SEvalZero   "%-1.5",
34*10465441SEvalZero   "%1.5",
35*10465441SEvalZero   "%-#01.5",
36*10465441SEvalZero   "%-#1.5",
37*10465441SEvalZero   "%-#.5",
38*10465441SEvalZero   "%-#1.",
39*10465441SEvalZero   "%-#.",
40*10465441SEvalZero   NULL
41*10465441SEvalZero };
42*10465441SEvalZero 
43*10465441SEvalZero 
44*10465441SEvalZero static void
intchk(const char * fmt)45*10465441SEvalZero intchk (const char *fmt)
46*10465441SEvalZero {
47*10465441SEvalZero   (void) printf("%15s :, \"", fmt);
48*10465441SEvalZero   (void) printf(fmt, 0);
49*10465441SEvalZero   (void) printf("\", \"");
50*10465441SEvalZero   (void) printf(fmt, 123);
51*10465441SEvalZero   (void) printf("\", \"");
52*10465441SEvalZero   (void) printf(fmt, -18);
53*10465441SEvalZero   (void) printf("\"\n");
54*10465441SEvalZero }
55*10465441SEvalZero 
56*10465441SEvalZero static void
fltchk(const char * fmt)57*10465441SEvalZero fltchk (const char *fmt)
58*10465441SEvalZero {
59*10465441SEvalZero   (void) printf("%15s :, \"", fmt);
60*10465441SEvalZero   (void) printf(fmt, 0.0);
61*10465441SEvalZero   (void) printf("\", \"");
62*10465441SEvalZero   (void) printf(fmt, 123.0001);
63*10465441SEvalZero   (void) printf("\", \"");
64*10465441SEvalZero   (void) printf(fmt, -18.0002301);
65*10465441SEvalZero   (void) printf("\"\n");
66*10465441SEvalZero }
67*10465441SEvalZero 
68*10465441SEvalZero 
printf_test()69*10465441SEvalZero int printf_test()
70*10465441SEvalZero {
71*10465441SEvalZero   char buf[256];
72*10465441SEvalZero   int i;
73*10465441SEvalZero 
74*10465441SEvalZero   printf("%s\n\n", "# vim:syntax=off:");
75*10465441SEvalZero 
76*10465441SEvalZero   /* integers */
77*10465441SEvalZero   for(i=0;format[i];i++) {
78*10465441SEvalZero     strcpy(buf, format[i]);
79*10465441SEvalZero     strcat(buf, "d");
80*10465441SEvalZero     intchk(buf);
81*10465441SEvalZero   }
82*10465441SEvalZero 
83*10465441SEvalZero   /* floats */
84*10465441SEvalZero   for(i=0;format[i];i++) {
85*10465441SEvalZero     strcpy(buf, format[i]);
86*10465441SEvalZero     strcat(buf, "f");
87*10465441SEvalZero     fltchk(buf);
88*10465441SEvalZero   }
89*10465441SEvalZero   /* hexa */
90*10465441SEvalZero   for(i=0;format[i];i++) {
91*10465441SEvalZero     strcpy(buf, format[i]);
92*10465441SEvalZero     strcat(buf, "x");
93*10465441SEvalZero     intchk(buf);
94*10465441SEvalZero   }
95*10465441SEvalZero 
96*10465441SEvalZero   printf("#%.4x %4x#\n", 4, 88);
97*10465441SEvalZero   printf("#%4x#\n",4);
98*10465441SEvalZero   printf("#%#22.8x#\n",1234567);
99*10465441SEvalZero 
100*10465441SEvalZero   printf("#%+2i#\n",18);
101*10465441SEvalZero   printf("#%i#\n",18);
102*10465441SEvalZero   printf("#%llu#\n",4294967297ULL);
103*10465441SEvalZero   printf("#%#x#\n",44444);
104*10465441SEvalZero   printf("#%-8i#\n",33);
105*10465441SEvalZero   printf("#%i#\n",18);
106*10465441SEvalZero   printf("#%d#\n",18);
107*10465441SEvalZero   printf("#%u#\n",18);
108*10465441SEvalZero   printf("#%lu#\n",18);
109*10465441SEvalZero   printf("#%li#\n",18);
110*10465441SEvalZero   printf("#%-+#06d#\n", -123);
111*10465441SEvalZero   printf("#%-+#6d#\n", -123);
112*10465441SEvalZero   printf("#%+#06d#\n", -123);
113*10465441SEvalZero   printf("#%06d#\n", -123);
114*10465441SEvalZero   printf("#%+15s#\n","ABCDEF");
115*10465441SEvalZero   /* from ncurses make_keys */
116*10465441SEvalZero   printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 16, 16, "KEY_A1", "key_a1");
117*10465441SEvalZero   printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 16,  2, "KEY_A1", "key_a1");
118*10465441SEvalZero   printf("{ %4d, %-*.*s },\t/* %s */\n", 139,  2, 16, "KEY_A1", "key_a1");
119*10465441SEvalZero   printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 16,  0, "KEY_A1", "key_a1");
120*10465441SEvalZero   printf("{ %4d, %-*.*s },\t/* %s */\n", 139,  0, 16, "KEY_A1", "key_a1");
121*10465441SEvalZero   printf("{ %4d, %-*.*s },\t/* %s */\n", 139,  0,  0, "KEY_A1", "key_a1");
122*10465441SEvalZero   printf("{ %4d, %*.*s },\t/* %s */\n", 139, 16, 16, "KEY_A1", "key_a1");
123*10465441SEvalZero   printf("{ %4d, %*.*s },\t/* %s */\n", 139, 16,  2, "KEY_A1", "key_a1");
124*10465441SEvalZero   printf("{ %4d, %*.*s },\t/* %s */\n", 139,  2, 16, "KEY_A1", "key_a1");
125*10465441SEvalZero   printf("{ %4d, %*.*s },\t/* %s */\n", 139, 16,  0, "KEY_A1", "key_a1");
126*10465441SEvalZero   printf("{ %4d, %*.*s },\t/* %s */\n", 139,  0, 16, "KEY_A1", "key_a1");
127*10465441SEvalZero   printf("{ %4d, %*.*s },\t/* %s */\n", 139,  0,  0, "KEY_A1", "key_a1");
128*10465441SEvalZero   printf("%*.*f\n",  0, 16, 0.0);
129*10465441SEvalZero   printf("%*.*f\n", 16, 16, 0.0);
130*10465441SEvalZero   printf("%*.*f\n",  2, 2,  -0.0);
131*10465441SEvalZero   printf("%*.*f\n", 20, 0,  -123.123);
132*10465441SEvalZero   printf("%*.*f\n", 10, 0,  +123.123);
133*10465441SEvalZero 
134*10465441SEvalZero 
135*10465441SEvalZero   i = printf("\"%s\"\n","A");
136*10465441SEvalZero   printf("%i\n", i);
137*10465441SEvalZero   /* from glibc's tst-printf.c */
138*10465441SEvalZero 
139*10465441SEvalZero   {
140*10465441SEvalZero     char buf[20];
141*10465441SEvalZero     char buf2[512];
142*10465441SEvalZero     int i;
143*10465441SEvalZero 
144*10465441SEvalZero     printf ("snprintf (\"%%30s\", \"foo\") == %d, \"%.*s\"\n",
145*10465441SEvalZero 	    snprintf (buf, sizeof (buf), "%30s", "foo"), (int) sizeof (buf),
146*10465441SEvalZero 	    buf);
147*10465441SEvalZero     memset(buf2,0,sizeof(buf));
148*10465441SEvalZero     i=snprintf(buf2, 256, "%.9999u", 10);
149*10465441SEvalZero     printf("%i %i\n",i,strlen(buf2));
150*10465441SEvalZero 
151*10465441SEvalZero     printf ("snprintf (\"%%.999999u\", 10) == %d\n",
152*10465441SEvalZero     	    snprintf(buf2, sizeof(buf2), "%.999999u", 10));
153*10465441SEvalZero   }
154*10465441SEvalZero   return 0;
155*10465441SEvalZero }
156*10465441SEvalZero 
libc_printf()157*10465441SEvalZero void libc_printf()
158*10465441SEvalZero {
159*10465441SEvalZero 	printf("stdout test!!\n");
160*10465441SEvalZero 	fprintf(stdout, "fprintf test!!\n");
161*10465441SEvalZero 	fprintf(stderr, "fprintf test!!\n");
162*10465441SEvalZero 	puts("puts test!!\n");
163*10465441SEvalZero 
164*10465441SEvalZero 	putc('1', stderr);
165*10465441SEvalZero 	putc('2', stderr);
166*10465441SEvalZero 	putc('\n', stderr);
167*10465441SEvalZero 
168*10465441SEvalZero 	printf_test();
169*10465441SEvalZero }
170*10465441SEvalZero FINSH_FUNCTION_EXPORT(libc_printf, printf test in libc);
171*10465441SEvalZero 
172*10465441SEvalZero 
libc_dprintf()173*10465441SEvalZero void libc_dprintf()
174*10465441SEvalZero {
175*10465441SEvalZero 	int fd;
176*10465441SEvalZero 
177*10465441SEvalZero 	fd = open("/dev/console", O_WRONLY, 0);
178*10465441SEvalZero 	if (fd >0)
179*10465441SEvalZero 	{
180*10465441SEvalZero 		dprintf(fd, "fd:%d printf test!!\n", fd);
181*10465441SEvalZero 		close(fd);
182*10465441SEvalZero 	}
183*10465441SEvalZero }
184*10465441SEvalZero FINSH_FUNCTION_EXPORT(libc_dprintf, dprintf test);
185*10465441SEvalZero 
186*10465441SEvalZero 
libc_fdopen()187*10465441SEvalZero void libc_fdopen()
188*10465441SEvalZero {
189*10465441SEvalZero 	int fd;
190*10465441SEvalZero 	FILE* fp;
191*10465441SEvalZero 
192*10465441SEvalZero 	fd = open("/dev/console", O_WRONLY, 0);
193*10465441SEvalZero 	if (fd >0)
194*10465441SEvalZero 	{
195*10465441SEvalZero 		fp = fdopen(fd, "w");
196*10465441SEvalZero 		fprintf(fp, "fdopen test, fd %d!!\n", fileno(fp));
197*10465441SEvalZero 		fclose(fp);
198*10465441SEvalZero 	}
199*10465441SEvalZero }
200*10465441SEvalZero FINSH_FUNCTION_EXPORT(libc_fdopen, fdopen test);
201