Last change
on this file since 2 was 2, checked in by root, 23 years ago |
Initial revision
|
-
Property svn:eol-style
set to
native
-
Property svn:keywords
set to
Author Date Id Revision
|
File size:
2.1 KB
|
Line | |
---|
1 | /*
|
---|
2 | ** COMMAFMT.C
|
---|
3 | **
|
---|
4 | ** Public domain by Bob Stout
|
---|
5 | **
|
---|
6 | ** Notes: 1. Use static buffer to eliminate error checks on buffer overflow
|
---|
7 | ** and reduce code size.
|
---|
8 | ** 2. By making the numeric argument a long and prototyping it before
|
---|
9 | ** use, passed numeric arguments will be implicitly cast to longs
|
---|
10 | ** thereby avoiding int overflow.
|
---|
11 | ** 3. Use the thousands grouping and thousands separator from the
|
---|
12 | ** ANSI locale to make this more robust.
|
---|
13 | */
|
---|
14 |
|
---|
15 | #pragma alloc_text(MISC8,commafmt,hundfmt)
|
---|
16 |
|
---|
17 | #include <stdlib.h>
|
---|
18 | #include <stdio.h>
|
---|
19 | #include <string.h>
|
---|
20 |
|
---|
21 | size_t commafmt(char *buf, /* Buffer for formatted string */
|
---|
22 | int bufsize, /* Size of buffer */
|
---|
23 | long N) /* Number to convert */
|
---|
24 | {
|
---|
25 | int len = 1, posn = 1, sign = 1;
|
---|
26 | char *ptr = buf + bufsize - 1;
|
---|
27 |
|
---|
28 | if (2 > bufsize)
|
---|
29 | {
|
---|
30 | ABORT: *buf = 0;
|
---|
31 | return 0;
|
---|
32 | }
|
---|
33 |
|
---|
34 | *ptr-- = 0;
|
---|
35 | --bufsize;
|
---|
36 | if (0L > N)
|
---|
37 | {
|
---|
38 | sign = -1;
|
---|
39 | N = -N;
|
---|
40 | }
|
---|
41 |
|
---|
42 | for ( ; len <= bufsize; ++len, ++posn)
|
---|
43 | {
|
---|
44 | *ptr-- = (char)((N % 10L) + '0');
|
---|
45 | if (0L == (N /= 10L))
|
---|
46 | break;
|
---|
47 | if (0 == (posn % 3))
|
---|
48 | {
|
---|
49 | *ptr-- = ',';
|
---|
50 | ++len;
|
---|
51 | }
|
---|
52 | if (len >= bufsize)
|
---|
53 | goto ABORT;
|
---|
54 | }
|
---|
55 |
|
---|
56 | if (0 > sign)
|
---|
57 | {
|
---|
58 | if (0 == bufsize)
|
---|
59 | goto ABORT;
|
---|
60 | *ptr-- = '-';
|
---|
61 | ++len;
|
---|
62 | }
|
---|
63 |
|
---|
64 | strcpy(buf, ++ptr);
|
---|
65 | return (size_t)len;
|
---|
66 | }
|
---|
67 |
|
---|
68 |
|
---|
69 | size_t hundfmt (char *buf,int bufsize,unsigned long N) {
|
---|
70 |
|
---|
71 | char tbuf[34];
|
---|
72 | register char *pt,*p;
|
---|
73 | register int len;
|
---|
74 |
|
---|
75 | sprintf(tbuf,"%02lu",N);
|
---|
76 | len = strlen(tbuf);
|
---|
77 | pt = tbuf;
|
---|
78 | p = buf;
|
---|
79 | bufsize--;
|
---|
80 | while(*pt && (p - buf) < bufsize) {
|
---|
81 | if(len == 2) {
|
---|
82 | *p = '.';
|
---|
83 | p++;
|
---|
84 | }
|
---|
85 | *p = *pt;
|
---|
86 | p++;
|
---|
87 | pt++;
|
---|
88 | len--;
|
---|
89 | }
|
---|
90 | *p = 0;
|
---|
91 | return p - buf;
|
---|
92 | }
|
---|
Note:
See
TracBrowser
for help on using the repository browser.