home *** CD-ROM | disk | FTP | other *** search
- /*
- * 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);
- }
-