home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_02_07
/
2n07047a
< prev
next >
Wrap
Text File
|
1991-04-10
|
2KB
|
95 lines
/*
* File: pnumbers.c
* Creator: Gregg Jennings
* Version: 1.0 February 1991
* Purpose: display formatted numbers to the console
*/
#include <stdio.h>
void lpn(unsigned int n, int length, int base);
void pn(unsigned int n, int base);
int getlen(unsigned int n, int base);
/* some MACRO examples */
#define paddr(n) lpn(n,4,16),putch(':')
#define phex(n) lpn(n,2,16)
#define newline putch('\n'),putch('\r')
void main()
{
int i;
lpn(123,16,2); /* display 123 dec in binary
as if printf("%016b",123) would work */
newline;
pn(123,2); /* display 123 dec in binary */
newline;
pn(123,8); /* octal */
newline;
pn('\173',10); /* 173 oct in decimal */
newline;
paddr(123); /* display an address */
newline;
phex('A'); /* display a hex value */
newline;
/* display the first 26 octal numbers */
for (i=0;i<26;i++) {
pn(i,8);
putch(' ');
}
newline;
/* display the first 21 base 3 numbers */
for (i=0;i<21;i++) {
pn(i,3);
putch(' ');
}
newline;
}
/*
* display a number to the console in any base from
* 2 to 36, ASCII character set only
*/
void pn(unsigned int n, int base)
{
if (n/base)
pn(n/base,base);
putch((n%base>9) ? n%base+'A'-10 : n%base+'0');
}
/*
* display a number to the console with leading zeros
* and a certain length, and any base from 2 to 36
*/
void lpn(unsigned int n, int length, int base)
{
register int t;
for (t=length-getlen(n,base);t>0;t--)
putch('0');
pn(n,base);
}
/*
* get the display length (number of digits) of a
* number, i.e. 100 dec returns 3, 64 hex (100 dec)
* returns 2
*
* used by lpn()
*/
int getlen(unsigned int n, int base)
{
int j;
for (j=1;n>=base;n/=base,++j)
;
return(j);
}