testing "printf extra args" "$PRINTF 'abc%s!%ddef\n' X 42 ARG 36" \
"abcX!42def\nabcARG!36def\n" "" ""
-testing "printf '%3c'" "printf '%3c' x" " x" "" ""
+testing "printf '%3c'" "$PRINTF '%3c' x" " x" "" ""
+testing "printf '%-3c'" "$PRINTF '%-3c' x" "x " "" ""
+testing "printf '%+d'" "$PRINTF '%+d' 5" "+5" "" ""
+
testing "printf '%5d%4d' 1 21 321 4321 54321" \
"$PRINTF '%5d%4d' 1 21 321 4321 54321" " 1 21 321432154321 0" "" ""
* Copyright 2014 Kyungwan Han <asura321@gmail.com>
*
* See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html
+ *
+ * todo: *m$ ala printf("%1$d:%2$.*3$d:%4$.*3$d\n", hour, min, precision, sec);
USE_PRINTF(NEWTOY(printf, "<1", TOYFLAG_USR|TOYFLAG_BIN))
// Parse width.precision between % and type indicator.
*to++ = '%';
- while (strchr("-+# '0", *f) && (to-toybuf)<10) *to = *f++;
+ while (strchr("-+# '0", *f) && (to-toybuf)<10) *to++ = *f++;
for (i=0; i<2; i++) {
if (eat(&f, '*')) {
if (*arg) wp[i] = atolx(*arg++);
else if (strchr("diouxX", c)) {
long ll;
- sprintf(to, "*.*ll%c", c);
if (*aa == '\'' || *aa == '"') ll = aa[1];
else ll = strtoll(aa, &end, 0);
+ sprintf(to, "*.*ll%c", c);
printf(toybuf, wp[0], wp[1], ll);
} else if (strchr("feEgG", c)) {
long double ld = strtold(aa, &end);