summaryrefslogtreecommitdiff
path: root/asc.c
blob: 5436cf3b1803bb47b05faae3ce5f95729f258345 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

static char *binary(unsigned int i, unsigned int w)
{
    static char buff[1024];
    char *p;
    unsigned int c;
    unsigned int b;

    c = w;
    b = 1<<(w-1);

    p = buff;

    for(c = w; c--; b = b>>1)
    {
	if(i&b)
	{
	    *p++='1';
	}
	else
	{
	    *p++='0';
	}
    }

    *p='\0';

    return buff;
}

int main(int argc, char *argv[])
{
    int f;
    int l;
    int r;
    unsigned int c;

    if(argc == 1 || (argc == 2 && strcmp(argv[1],"-c") == 0))
    {
	printf("%s: usage %s string1 [..stringn] | -c num1 [.. num n]\n",
			argv[0],argv[0]);
	exit(EXIT_FAILURE);
    }

    if(strcmp(argv[1],"-c") != 0)
    {
	for(r = 1 ;r < argc; r++)
	{
	    l = strlen(argv[r]);

	    for(f = 0; f < l; f++)
	    {
		c = (unsigned int)*(argv[r]+f);

		printf("%c (%3u - 0x%2.2X %%%s)\n",
		    (*(argv[r]+f) > 31) ? (*(argv[r]+f)) : '?',
		    (unsigned int)(unsigned char)c,
		    (unsigned int)(unsigned char)c,
		    binary(c,8));
	    }
	}
    }
    else
    {
	for(f=2;f<argc;f++)
	{
	    c = (unsigned int)strtol(argv[f], NULL, 0);

	    printf("%c (%3u - 0x%2.2X %%%s)\n",
			c>31 ? (char)c : '?',
			c, c, binary(c,8));
	}
    }

    return EXIT_SUCCESS;
}