Add 'labs/' from commit '58cd0413b229aea4bad859401adb7f4cb8f4474d'
git-subtree-dir: labs git-subtree-mainline:4d409d3106git-subtree-split:58cd0413b2
This commit is contained in:
75
labs/01_datalab/ishow.c
Normal file
75
labs/01_datalab/ishow.c
Normal file
@@ -0,0 +1,75 @@
|
||||
/* Display value of fixed point numbers */
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/* Extract hex/decimal/or float value from string */
|
||||
static int get_num_val(char *sval, unsigned *valp) {
|
||||
char *endp;
|
||||
/* See if it's an integer or floating point */
|
||||
int ishex = 0;
|
||||
int isfloat = 0;
|
||||
int i;
|
||||
for (i = 0; sval[i]; i++) {
|
||||
switch (sval[i]) {
|
||||
case 'x':
|
||||
case 'X':
|
||||
ishex = 1;
|
||||
break;
|
||||
case 'e':
|
||||
case 'E':
|
||||
if (!ishex)
|
||||
isfloat = 1;
|
||||
break;
|
||||
case '.':
|
||||
isfloat = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isfloat) {
|
||||
return 0; /* Not supposed to have a float here */
|
||||
} else {
|
||||
long long int llval = strtoll(sval, &endp, 0);
|
||||
long long int upperbits = llval >> 31;
|
||||
/* will give -1 for negative, 0 or 1 for positive */
|
||||
if (valp && (upperbits == 0 || upperbits == -1 || upperbits == 1)) {
|
||||
*valp = (unsigned) llval;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void show_int(unsigned uf)
|
||||
{
|
||||
printf("Hex = 0x%.8x,\tSigned = %d,\tUnsigned = %u\n",
|
||||
uf, (int) uf, uf);
|
||||
}
|
||||
|
||||
|
||||
void usage(char *fname) {
|
||||
printf("Usage: %s val1 val2 ...\n", fname);
|
||||
printf("Values may be given in hex or decimal\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int i;
|
||||
unsigned uf;
|
||||
if (argc < 2)
|
||||
usage(argv[0]);
|
||||
for (i = 1; i < argc; i++) {
|
||||
char *sval = argv[i];
|
||||
if (get_num_val(sval, &uf)) {
|
||||
show_int(uf);
|
||||
} else {
|
||||
printf("Cannot convert '%s' to 32-bit number\n", sval);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user