From mboxrd@z Thu Jan 1 00:00:00 1970 From: erik quanstrom Date: Sun, 2 Mar 2014 21:33:23 -0500 To: 9fans@9fans.net Message-ID: <6d9a0a987ca4a34d918e75e0462e32a7@mikro.quanstro.net> In-Reply-To: <5313cf8f.ELeQxkmDw4gWqdyW%trebol55555@aol.com> References: <5313cf8f.ELeQxkmDw4gWqdyW%trebol55555@aol.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: Re: [9fans] print(2)'s format Topicbox-Message-UUID: c14432dc-ead8-11e9-9d60-3106f5b1d025 > Hello, this is the little story: > I usually write scripts needing numbers padded on the left with zeros, like in '%03.0f'. In UNIX I use printf(1), but now I'm using more and more rc scripts with P9P, and I like to use Plan9 programs to make the scripts more portable to Plan9... so I tried with seq, like '9 seq -f%03.0f $i $i' or -f%03g, getting the desired output in P9P, but discovering that in Plan9, the floating point verbs doesn't include the flag '0'. > I'm really curious about this. Anyone knows the reason of letting out this flag (and including it in P9P)? > i am not sure if there is any knock-on to this, but i think this is all that's required. unfortunately %06s might do some wierd things. shouldn't be a big issue, since that's not specified anyway, and g '%0[0-9]*(\.[0-9]*)?[sq]' /sys/src turns up nothing. i'm considering the patch. - erik diff -c /n/dump/2014/0302/sys/src/libc/fmt/dofmt.c ./dofmt.c /n/dump/2014/0302/sys/src/libc/fmt/dofmt.c:87,99 - ./dofmt.c:87,100 int _fmtpad(Fmt *f, int n) { - char *t, *s; + char *t, *s, c; int i; t = f->to; s = f->stop; + c = f->flags&FmtZero? '0': ' '; for(i = 0; i < n; i++) - FMTCHAR(f, t, s, ' '); + FMTCHAR(f, t, s, c); f->nfmt += t - (char *)f->to; f->to = t; return 0; /n/dump/2014/0302/sys/src/libc/fmt/dofmt.c:102,114 - ./dofmt.c:103,116 int _rfmtpad(Fmt *f, int n) { - Rune *t, *s; + Rune *t, *s, r; int i; t = f->to; s = f->stop; + r = f->flags&FmtZero? '0': ' '; for(i = 0; i < n; i++) - FMTRCHAR(f, t, s, ' '); + FMTRCHAR(f, t, s, r); f->nfmt += t - (Rune *)f->to; f->to = t; return 0; diff -c /n/dump/2014/0302/sys/src/libc/fmt/fltfmt.c ./fltfmt.c /n/dump/2014/0302/sys/src/libc/fmt/fltfmt.c:303,309 - ./fltfmt.c:303,309 * which is 341 currently. */ xdtoa(fmt, s, f); - fmt->flags &= FmtWidth|FmtLeft; + fmt->flags &= FmtZero|FmtWidth|FmtLeft; _fmtcpy(fmt, s, strlen(s), strlen(s)); return 0; }