Log in Register Dashboard Temp Share Shortlinks Frames API

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;
}

Comments