home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Between Heaven & Hell 2
/
BetweenHeavenHell.cdr
/
500
/
471
/
rccl130
< prev
next >
Wrap
Text File
|
1987-03-02
|
5KB
|
442 lines
/*
* Author : Vincent Hayward
* School of Electrical Engineering
* Purdue University
* Dir : uti
* File : bcv.c
* Remarks : interactive number represention convertions
* Usage : cc bcv.c -o mybin/bcv
*/
main()
{
char line[80], *c, *f, *o, *n;
static int i;
for (; ; ) {
c = line;
f = o = n = "";
if (0 == gets(line)) {
exit(0);
}
while (*c == ' ') ++c;
if (*c != '\0') {
f = c++;
while(*c == ' ') ++c;
if (*c != '\0') {
o = c++;
while(*c == ' ') ++c;
if (*c != '\0') {
n = c++;
}
}
}
switch (*f) {
case 'b' :
if (*n != '\0') {
i = btoi(n);
}
if (*o == '\0') {
printb(i, 1);
break;
}
switch (*o) {
case 'b' :
printb(i, 1);
break;
case 'o' :
printo(i);
break;
case 'x' :
printx(i);
break;
case 'd' :
printd(i);
break;
case 'u' :
printu(i);
break;
case 'c' :
printc(i);
break;
default :
err();
break;
}
break;
case 'o' :
if (*n != '\0') {
i = otoi(n);
}
if (*o == '\0') {
printo(i);
break;
}
switch (*o) {
case 'b' :
printb(i, 3);
break;
case 'o' :
printo(i);
break;
case 'x' :
printx(i);
break;
case 'd' :
printd(i);
break;
case 'u' :
printu(i);
break;
case 'c' :
printc(i);
break;
default :
err();
break;
}
break;
case 'x' :
if (*n != '\0') {
i = xtoi(n);
}
if (*o == '\0') {
printx(i);
break;
}
switch (*o) {
case 'b' :
printb(i, 4);
break;
case 'o' :
printo(i);
break;
case 'x' :
printx(i);
break;
case 'd' :
printd(i);
break;
case 'u' :
printu(i);
break;
case 'c' :
printc(i);
break;
default :
err();
break;
}
break;
case 'd' :
if (*n != '\0') {
i = dtoi(n);
}
if (*o == '\0') {
printd(i);
break;
}
switch (*o) {
case 'b' :
printb(i, 1);
break;
case 'o' :
printo(i);
break;
case 'x' :
printx(i);
break;
case 'd' :
printd(i);
break;
case 'u' :
printu(i);
break;
case 'c' :
printc(i);
break;
default :
err();
break;
}
break;
case 'u' :
if (*n != '\0') {
i = utoi(n);
}
if (*o == '\0') {
printu(i);
break;
}
switch (*o) {
case 'b' :
printb(i, 1);
break;
case 'o' :
printo(i);
break;
case 'x' :
printx(i);
break;
case 'd' :
printd(i);
break;
case 'u' :
printu(i);
break;
case 'c' :
printc(i);
break;
default :
err();
break;
}
break;
case 'c' :
if (*n != '\0') {
i = ctoi(n);
}
if (*o == '\0') {
printc(i);
break;
}
switch (*o) {
case 'b' :
printb(i, 1);
break;
case 'o' :
printo(i);
break;
case 'x' :
printx(i);
break;
case 'd' :
printd(i);
break;
case 'u' :
printu(i);
break;
case 'c' :
printc(i);
break;
default :
err();
break;
}
break;
case '<' :
if (*o != '\0') {
int l = dtoi(o);
i <<= l;
}
else {
err();
}
break;
case '>' :
if (*o != '\0') {
int l = dtoi(o);
i >>= l;
}
else {
err();
}
break;
case '?' :
help();
break;
default :
err();
break;
}
}
}
btoi(b)
char *b;
{
int i = 0;
while (*b == '0' || *b == '1') {
if (*b == '1') {
i |= 01;
}
++b;
i <<= 1;
}
return(i >> 1);
}
otoi(o)
char *o;
{
int k;
sscanf(o, "%o", &k);
return(k);
}
xtoi(x)
char *x;
{
int k;
sscanf(x, "%x", &k);
return(k);
}
dtoi(d)
char *d;
{
int k;
sscanf(d, "%d", &k);
return(k);
}
utoi(d)
char *d;
{
int k;
sscanf(d, "%u", &k);
return(k);
}
ctoi(d)
char *d;
{
int k;
sscanf(d, "%c", &k);
return(k & 0xff);
}
printb(i, g)
int i, g;
{
short n = 32;
for (; n--; i <<= 1) {
if (n != 31 && n % g == g - 1)
putchar(' ');
if (i < 0) {
putchar('1');
}
else {
putchar('0');
}
}
putchar('\n');
}
printo(i)
int i;
{
printf("%o\n", i);
}
printx(i)
int i;
{
printf("%x\n", i);
}
printd(i)
int i;
{
printf("%d\n", i);
}
printu(i)
int i;
{
printf("%u\n", i);
}
printc(i)
int i;
{
printf("%c\n", i);
}
err()
{
printf("?\n");
}
static char msg[] =
"\
b/o/x/d/u/c b/o/x/d/u/c number\n\
b/o/x/d/u/c b/o/x/d/u/c\n\
b/o/x/d/u/c\n\
< n\n\
> n\n\
";
help()
{
printf("%s", msg);
}