83 |
|
|
84 |
|
|
85 |
static void |
static void |
86 |
print_nr (long long nr, int base) |
print_nr (unsigned long long nr, int base) |
87 |
{ |
{ |
88 |
static char *digits = "0123456789abcdef"; |
static char *digits = "0123456789abcdef"; |
89 |
char str[30]; |
char str[30]; |
90 |
int i = 0; |
int i = 0; |
91 |
|
|
|
if (nr < 0) |
|
|
{ |
|
|
putchar ('-'); |
|
|
nr = -nr; |
|
|
} |
|
|
|
|
92 |
do |
do |
93 |
{ |
{ |
94 |
str[i++] = digits[nr % base]; |
str[i++] = digits[nr % base]; |
102 |
} |
} |
103 |
|
|
104 |
|
|
105 |
|
static void |
106 |
|
print_signed_nr (long long nr, int base) |
107 |
|
{ |
108 |
|
unsigned long long unr; |
109 |
|
|
110 |
|
if (nr < 0) |
111 |
|
{ |
112 |
|
putchar ('-'); |
113 |
|
unr = -nr; |
114 |
|
} |
115 |
|
else |
116 |
|
unr = nr; |
117 |
|
|
118 |
|
print_nr (unr, base); |
119 |
|
} |
120 |
|
|
121 |
|
|
122 |
void |
void |
123 |
printf (const char *fmt, ...) |
printf (const char *fmt, ...) |
124 |
{ |
{ |
143 |
p++; |
p++; |
144 |
break; |
break; |
145 |
|
|
146 |
|
case 'l': |
147 |
|
p++; |
148 |
|
if (*p != 'l') |
149 |
|
{ |
150 |
|
putchar ('%'); |
151 |
|
putchar ('l'); |
152 |
|
putchar (*(p++)); |
153 |
|
continue; |
154 |
|
} |
155 |
|
p++; |
156 |
|
switch (*p) |
157 |
|
{ |
158 |
|
case 'o': |
159 |
|
print_nr (va_arg (ap, unsigned long long), 8); |
160 |
|
p++; |
161 |
|
break; |
162 |
|
|
163 |
|
case 'd': |
164 |
|
case 'i': |
165 |
|
print_signed_nr (va_arg (ap, long long), 10); |
166 |
|
p++; |
167 |
|
break; |
168 |
|
|
169 |
|
case 'x': |
170 |
|
case 'X': |
171 |
|
print_nr (va_arg (ap, unsigned long long), 16); |
172 |
|
p++; |
173 |
|
break; |
174 |
|
|
175 |
|
case 'u': |
176 |
|
print_nr (va_arg (ap, unsigned long long), 10); |
177 |
|
p++; |
178 |
|
break; |
179 |
|
|
180 |
|
default: |
181 |
|
putchar ('%'); |
182 |
|
putchar ('l'); |
183 |
|
putchar ('l'); |
184 |
|
putchar (*(p++)); |
185 |
|
break; |
186 |
|
} |
187 |
|
break; |
188 |
|
|
189 |
case 'o': |
case 'o': |
190 |
print_nr (va_arg (ap, unsigned int), 8); |
print_nr (va_arg (ap, unsigned int), 8); |
191 |
p++; |
p++; |
193 |
|
|
194 |
case 'd': |
case 'd': |
195 |
case 'i': |
case 'i': |
196 |
print_nr (va_arg (ap, int), 10); |
print_signed_nr (va_arg (ap, int), 10); |
197 |
p++; |
p++; |
198 |
break; |
break; |
199 |
|
|