Mercurial > hg > toybox
annotate toys/pending/printf.c @ 1391:6a06541c090c draft
Use libc daemon() instead of pending daemonize.
author | Rob Landley <rob@landley.net> |
---|---|
date | Thu, 17 Jul 2014 22:50:49 -0500 |
parents | 2fe64bc16a61 |
children | 54c092c3ee38 |
rev | line source |
---|---|
1256
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
1 /* printf.c - Format and Print the data. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
2 * |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
3 * Copyright 2014 Sandeep Sharma <sandeep.jack2756@gmail.com> |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
4 * Copyright 2014 Kyungwan Han <asura321@gmail.com> |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
5 * |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
6 * See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
7 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
8 USE_PRINTF(NEWTOY(printf, "<1", TOYFLAG_USR|TOYFLAG_BIN)) |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
9 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
10 config PRINTF |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
11 bool "printf" |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
12 default n |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
13 help |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
14 usage: printf Format [Arguments..] |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
15 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
16 Format and print ARGUMENT(s) according to FORMAT. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
17 Format is 'C' control output as 'C' printf. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
18 */ |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
19 #define FOR_printf |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
20 #include "toys.h" |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
21 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
22 GLOBALS( |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
23 char *hv_w; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
24 char *hv_p; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
25 int encountered; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
26 ) |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
27 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
28 // Calculate width and precision from format string |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
29 static int get_w_p() |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
30 { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
31 char *ptr, *str = *toys.optargs; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
32 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
33 errno = 0; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
34 if (*str == '-') str++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
35 long value = strtol(str, &ptr, 10); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
36 if (errno || (ptr && (*ptr != '\0' || ptr == str))) |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
37 perror_msg("Invalid num %s", *toys.optargs); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
38 if (*--str == '-') return (int)(-1 * value); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
39 return value; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
40 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
41 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
42 // Add ll and L to Interger and floating point formats respectively. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
43 static char *get_format(char *f) |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
44 { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
45 int len = strlen(f); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
46 char last = f[--len], *post = ""; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
47 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
48 f[len] = '\0'; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
49 if (strchr("diouxX", last)) post = "ll"; // add ll to integer modifier. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
50 else if (strchr("feEgG", last)) post = "L"; // add L to float modifier. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
51 return xmprintf("%s%s%c", f, post, last); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
52 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
53 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
54 // Print arguments with corresponding conversion and width and precision. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
55 static void print(char *fmt, int w, int p, int l) |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
56 { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
57 char *ptr = (fmt+l-1), *ep = NULL, *format = NULL; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
58 long long val; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
59 long double dval; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
60 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
61 errno = 0; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
62 switch (*ptr) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
63 case 'd': /*FALL_THROUGH*/ |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
64 case 'i': /*FALL_THROUGH*/ |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
65 case 'o': /*FALL_THROUGH*/ |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
66 case 'u': /*FALL_THROUGH*/ |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
67 case 'x': /*FALL_THROUGH*/ |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
68 case 'X': |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
69 if (!*toys.optargs) val = 0; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
70 else { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
71 if (**toys.optargs == '\'' || **toys.optargs == '"') |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
72 val = *((*toys.optargs) + 1); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
73 else { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
74 val = strtoll(*toys.optargs, &ep, 0); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
75 if (errno || (ep && (*ep != '\0' || ep == *toys.optargs))) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
76 perror_msg("Invalid num %s", *toys.optargs); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
77 val = 0; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
78 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
79 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
80 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
81 format = get_format(fmt); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
82 TT.hv_w ? (TT.hv_p ? printf(format, w, p, val) : printf(format, w, val)) |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
83 : (TT.hv_p ? printf(format, p, val) : printf(format, val)); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
84 break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
85 case 'g': /*FALL_THROUGH*/ |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
86 case 'e': /*FALL_THROUGH*/ |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
87 case 'E': /*FALL_THROUGH*/ |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
88 case 'G': /*FALL_THROUGH*/ |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
89 case 'f': |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
90 if (*toys.optargs) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
91 dval = strtold(*toys.optargs, &ep); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
92 if (errno || (ep && (*ep != '\0' || ep == *toys.optargs))) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
93 perror_msg("Invalid num %s", *toys.optargs); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
94 dval = 0; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
95 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
96 } else dval = 0; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
97 format = get_format(fmt); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
98 TT.hv_w ? (TT.hv_p ? printf(format, w, p, dval):printf(format, w, dval)) |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
99 : (TT.hv_p ? printf(format, p, dval) : printf(format, dval)); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
100 break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
101 case 's': |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
102 { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
103 char *str = (*toys.optargs ? *toys.optargs : ""); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
104 TT.hv_w ? (TT.hv_p ? printf(fmt,w,p,str): printf(fmt, w, str)) |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
105 : (TT.hv_p ? printf(fmt, p, str) : printf(fmt, str)); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
106 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
107 break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
108 case 'c': |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
109 printf(fmt, (*toys.optargs ? **toys.optargs : '\0')); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
110 break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
111 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
112 if (format) free(format); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
113 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
114 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
115 // Handle the escape sequences. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
116 static int handle_slash(char **esc_val) |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
117 { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
118 char *ptr = *esc_val; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
119 int esc_length = 0; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
120 unsigned base = 0, num = 0, result = 0, count = 0; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
121 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
122 /* |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
123 * Hex escape sequence have only 1 or 2 digits, xHH. Oct escape sequence |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
124 * have 1,2 or 3 digits, xHHH. Leading "0" (\0HHH) we are ignoring. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
125 */ |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
126 if (*ptr == 'x') { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
127 ptr++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
128 esc_length++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
129 base = 16; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
130 } else if (isdigit(*ptr)) base = 8; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
131 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
132 while (esc_length < 3 && base) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
133 num = tolower(*ptr) - '0'; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
134 if (num > 10) num += ('0' - 'a' + 10); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
135 if (num >= base) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
136 if (base == 16) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
137 esc_length--; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
138 if (!esc_length) {// Invalid hex value eg. /xvd, print as it is /xvd |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
139 result = '\\'; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
140 ptr--; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
141 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
142 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
143 break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
144 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
145 esc_length++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
146 count = result = (count * base) + num; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
147 ptr++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
148 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
149 if (base) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
150 ptr--; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
151 *esc_val = ptr; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
152 return (char)result; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
153 } else { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
154 switch (*ptr) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
155 case 'n': result = '\n'; break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
156 case 't': result = '\t'; break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
157 case 'e': result = (char)27; break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
158 case 'b': result = '\b'; break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
159 case 'a': result = '\a'; break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
160 case 'f': result = '\f'; break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
161 case 'v': result = '\v'; break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
162 case 'r': result = '\r'; break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
163 case '\\': result = '\\'; break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
164 default : |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
165 result = '\\'; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
166 ptr--; // Let pointer pointing to / we will increment after returning. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
167 break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
168 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
169 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
170 *esc_val = ptr; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
171 return (char)result; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
172 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
173 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
174 // Handle "%b" option with '\' interpreted. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
175 static void print_esc_str(char *str) |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
176 { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
177 for (; *str; str++) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
178 if (*str == '\\') { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
179 str++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
180 xputc(handle_slash(&str)); //print corresponding char |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
181 } else xputc(*str); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
182 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
183 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
184 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
185 // Prase the format string and print. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
186 static void parse_print(char *f) |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
187 { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
188 char *start, *p, format_specifiers[] = "diouxXfeEgGcs"; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
189 int len = 0, width = 0, prec = 0; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
190 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
191 while (*f) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
192 switch (*f) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
193 case '%': |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
194 start = f++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
195 len++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
196 if (*f == '%') { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
197 xputc('%'); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
198 break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
199 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
200 if (*f == 'b') { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
201 if (*toys.optargs) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
202 print_esc_str(*toys.optargs++); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
203 TT.encountered = 1; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
204 } else print_esc_str(""); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
205 break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
206 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
207 if (strchr("-+# ", *f)) f++, len++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
208 if (*f == '*') { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
209 f++, len++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
210 if (*toys.optargs) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
211 width = get_w_p(); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
212 toys.optargs++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
213 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
214 } else { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
215 while (isdigit(*f)) f++, len++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
216 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
217 if (*f == '.') { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
218 f++, len++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
219 if (*f == '*') { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
220 f++, len++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
221 if (*toys.optargs) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
222 prec = get_w_p(); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
223 toys.optargs++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
224 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
225 } else { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
226 while (isdigit(*f)) f++, len++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
227 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
228 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
229 if (!(p = strchr(format_specifiers, *f))) |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
230 perror_exit("Missing OR Invalid format specifier"); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
231 else { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
232 len++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
233 TT.hv_p = strstr(start, ".*"); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
234 TT.hv_w = strchr(start, '*'); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
235 //pitfall: handle diff b/w * and .* |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
236 if ((TT.hv_w-1) == TT.hv_p) TT.hv_w = NULL; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
237 memcpy((p = xzalloc(len+1)), start, len); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
238 print(p, width, prec, len); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
239 if (*toys.optargs) toys.optargs++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
240 free(p); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
241 p = NULL; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
242 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
243 TT.encountered = 1; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
244 break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
245 case '\\': |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
246 if (f[1]) { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
247 if (*++f == 'c') exit(0); //Got '\c', so no further output |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
248 xputc(handle_slash(&f)); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
249 } else xputc(*f); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
250 break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
251 default: |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
252 xputc(*f); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
253 break; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
254 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
255 f++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
256 len = 0; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
257 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
258 } |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
259 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
260 void printf_main(void) |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
261 { |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
262 char *format = *toys.optargs++; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
263 |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
264 TT.encountered = 0; |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
265 parse_print(format); //printf acc. to format. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
266 //Re-use FORMAT arg as necessary to convert all given ARGS. |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
267 while (*toys.optargs && TT.encountered) parse_print(format); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
268 xflush(); |
2fe64bc16a61
An implementation of __printf__ is attached.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
269 } |