HTMLify
xxd
Views: 156 | Author: abh
/* xxd */
#include <stdio.h>
#include <unistd.h>
void change_color(char c){
if (!isatty(fileno(stdout))) return;
switch (c) {
case 'y': printf("\e[1;33m"); break;
case 'g': printf("\e[1;32m"); break;
case 'n': printf("\e[1;37m"); printf("\e[0;97m"); break;
}
}
int main(int argc, char *args[]) {
FILE *file = fopen(args[1], "r");
if (file == NULL) {
printf("Error opening file\n");
printf("Exiting...");
return 1;
}
char byte, textview[17] = " ";
int offset = 0, col = 0, i;
while ((byte = fgetc(file)) != EOF) {
if (31 < byte && byte < 127) {
textview[col] = byte;
} else {
textview[col] = 1;
}
if (col == 0) {
printf("%.8x: ", offset);
}
if (textview[col] == 1)
change_color('y');
else
change_color('g');
if (col % 2) {
printf("%.2x ", byte);
} else {
printf("%.2x", byte);
}
col++;
offset++;
if (col == 16) {
col = 0;
printf(" ");
for (i=0; i<16; i++) {
if (textview[i] == 1) {
change_color('y');
printf(".");
} else {
change_color('g');
printf("%c", textview[i]);
}
}
change_color('n');
printf("\n");
}
}
if (col != 0) {
while (col < 16) {
textview[col] = ' ';
col++;
if (col % 2) {
printf(" ");
} else {
printf(" ");
}
}
printf(" ");
for (i=0; i<16 && textview[i] != '\0'; i++) {
if (textview[i] == 1) {
change_color('y');
printf(".");
} else {
change_color('g');
printf("%c", textview[i]);
}
}
printf("\n");
}
return 0;
}