/* * bdfv -- simple BDF viewer * version: 0.2 * date: Jun 16 2001 */ #include #include /* EXIT_SUCCESS */ #include /* isxdigit(), tolower() */ #include /* memset() */ #define MAXCHAR 1024 typedef enum { false, true } bool; int main(int argc, char *argv[]){ char s[MAXCHAR]; /* string */ int getline(char *line, int max, FILE* inputP); char *hex2bin(char c); if(argc > 1){ fprintf(stderr, "bdfv -- simple BDF viewer\n"); fprintf(stderr, "Usage: bdfv output.txt\n"); return EXIT_FAILURE; } memset(s, 0x00, MAXCHAR); /* read from stdin */ while(getline(s, MAXCHAR, stdin) != 0){ char *p; bool bitdata; /* check BITMAP or not */ bitdata = true; for(p=s; *p!='\0'; p++) if(isxdigit((int)(*p)) == 0) bitdata = false; /* not [0-9A-Fa-f] */ /* print */ if(bitdata == false){ /* print all */ printf("%s\n", s); }else{ /* print chenged-BITMAP */ printf("%s\t", s); for(p=s; *p!='\0'; p++) printf("%s", hex2bin(*p)); printf("\n"); } memset(s, 0x00, MAXCHAR); } return EXIT_SUCCESS; } /* * get strings(not including '\n') from file * parameter: pointer of strings, max number of character, * file-descriptor * return value: length of this strings */ int getline(char *line, int max, FILE* inputP){ char *p; if(fgets(line, max, inputP) == NULL) return 0; /* change CR(\r) and LF(\n) to NULL(\0) */ for(p=line ; *p!='\0'; p++){ if(*p=='\r' || *p=='\n'){ *p = '\0'; return p-line; } } return p-line; } /* * get a character and put strings representing binary * parameter: ASCII character code * return value: pointer of strings */ char *hex2bin(char c){ static char *bin[]= { "----","---#","--#-","--##", "-#--","-#-#","-##-","-###", "#---","#--#","#-#-","#-##", "##--","##-#","###-","####", }; int n; if(isdigit((int)c) == 0) n = tolower((int)c) - 'a' + 10; /* [A-Fa-f] */ else n = c - '0'; /* [0-9] */ return bin[n]; }