source: trunk/dll/commafmt.c@ 98

Last change on this file since 98 was 98, checked in by root, 21 years ago

Drop hundfmt, clean commafmt

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.0 KB
Line 
1
2/***********************************************************************
3
4 $Id: commafmt.c 98 2004-05-21 15:22:09Z root $
5
6 Command formatting tools
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2004 Steven H.Levine
10
11 Revisions 06 Jan 04 SHL - Drop hundfmt, clean commafmt
12
13***********************************************************************/
14
15/*
16** COMMAFMT.C
17** Public domain by Bob Stout
18**
19** Notes: 1. Use static buffer to eliminate error checks on buffer overflow
20** and reduce code size.
21** 2. By making the numeric argument a long and prototyping it before
22** use, passed numeric arguments will be implicitly cast to longs
23** thereby avoiding int overflow.
24** 3. Use the thousands grouping and thousands separator from the
25** ANSI locale to make this more robust.
26*/
27
28#pragma alloc_text(MISC8,commafmt,hundfmt)
29
30#include <stdlib.h>
31#include <stdio.h>
32#include <string.h>
33
34size_t commafmt(char *buf, /* Buffer for formatted string */
35 int bufsize, /* Size of buffer */
36 long N) /* Number to convert */
37{
38 int len = 1;
39 int posn = 1;
40 int sign = 1;
41
42 char *ptr = buf + bufsize - 1;
43
44 if (bufsize < 2)
45 {
46ABORT: *buf = 0;
47 return 0;
48 }
49
50 *ptr-- = 0;
51 --bufsize;
52 if (N < 0)
53 {
54 sign = -1;
55 N = -N;
56 }
57
58 for ( ; len <= bufsize; ++len, ++posn)
59 {
60 *ptr-- = (char)((N % 10L) + '0');
61 N /= 10;
62 if (!N)
63 break;
64 if (posn % 3 == 0)
65 {
66 *ptr-- = ',';
67 ++len;
68 }
69 if (len >= bufsize)
70 goto ABORT;
71 }
72
73 if (sign < 0)
74 {
75 if (bufsize == 0)
76 goto ABORT;
77 *ptr-- = '-';
78 ++len;
79 }
80
81 strcpy(buf, ++ptr); // Left align
82 return len;
83}
84
85
86#if 0 // fixme
87
88size_t hundfmt (char *buf,int bufsize,unsigned long N) {
89
90 char tbuf[34];
91 register char *pt,*p;
92 register int len;
93
94 sprintf(tbuf,"%02lu",N);
95 len = strlen(tbuf);
96 pt = tbuf;
97 p = buf;
98 bufsize--;
99 while(*pt && (p - buf) < bufsize) {
100 if(len == 2) {
101 *p = '.';
102 p++;
103 }
104 *p = *pt;
105 p++;
106 pt++;
107 len--;
108 }
109 *p = 0;
110 return p - buf;
111}
112
113#endif 0 // fixme
Note: See TracBrowser for help on using the repository browser.