#include #include #define CPL 16 //characters per line #define LPS 25 //lines per screen int main(int argc,char *argv[]) { FILE *fp; int done=0; int in; int in2; int pos=0; int bottom; int top; int len=0; int i; int j; int mod=1;//1=hex 2=normal char cont[1024*1024];//lol. buffer overflow. use for *small* files. ;) memset(cont,0,1024*1024-1); if(!argv[1]) { printf("error.\n"); return 0; } if(!(fp=fopen(argv[1],"rb"))) { } else { for(i=0;!feof(fp);i++) { fread(&cont[i],1,1,fp); len++; } done=0; fclose(fp); } initscr(); cbreak(); for( ; !done ; in=getch()) { if(in=='\x1b') { in=getch(); if(in=='[') { in=getch(); if(in=='A') {//up pos-=CPL; } if(in=='B') {//down pos+=CPL; } if(in=='C') {//right pos++; } if(in=='D') {//left pos--; } if(in=='G') {//page down pos+=CPL*LPS; } if(in=='I') {//page up pos-=CPL*LPS; } if(pos<0) {pos=0;}// :P if(pos>len) {pos=len;} } else if(in=='\x1b') {//double escape to exit and save. break; } //continue; } else { if(in=='\t') { mod=(mod)?0:1; } else if(in=='\b') { for(j=pos-1;j=len) { printw("--"); } else { printw("%.2hhx",cont[i]); } if(pos==i) { attroff(mod?A_REVERSE:A_BOLD); } printw(" "); if(i%CPL==(CPL-1)) { printw(" |"); for(j=i-(CPL-1);j<=i;j++) { if(pos==j) { attron(mod?A_BOLD:A_REVERSE); } printw("%c",isprint(cont[j])?cont[j]:'.'); if(pos==j) { attroff(mod?A_BOLD:A_REVERSE); } } printw("|%s",((j)==(CPL*LPS))?"":"\n"); } } } nocbreak(); endwin(); if(!(fopen(argv[1],"wb"))) { fprintf(stderr,"couldn't create file!!! oh shit!\n"); return 0; } for(i=0;i