📄 main.c
字号:
free(searchstring); searchstring=input2(parent_window,wtop+2,wleft+2,29,s,255,0,0); free(s); } } if (m==1) return KEY_F(5); if (m==2) return KEY_F(6); if (m==3) writesearch=1-writesearch; if (m==4) { doit=1; while ((strcmp(readsearchfilename,writesearchfilename)==0 && strlen(readsearchfilename)>0) || (doit==1)) { doit=0; s=malloc(strlen(writesearchfilename)+1); strncpy(s,writesearchfilename,strlen(writesearchfilename)+1); free(writesearchfilename); writesearchfilename=input2(parent_window,wtop+7,wleft+3,28,s,255,0,0); free(s); wattrset(parent_window,attrs[COLOR_TEXT]); mvwprintw(parent_window,wtop+10,wleft+2,"Please choose a different name"); } } if (m==5) readsearch=1-readsearch; if (m==6) { doit=1; while ((strcmp(readsearchfilename,writesearchfilename)==0 && strlen(readsearchfilename)>0) || (doit==1)) { doit=0; s=input2(parent_window,wtop+9,wleft+3,28,readsearchfilename,255,0,0); free(readsearchfilename); readsearchfilename=malloc(strlen(s)); strncpy(readsearchfilename,s,strlen(s)+1); free(s); wattrset(parent_window,attrs[COLOR_TEXT]); mvwprintw(parent_window,wtop+10,wleft+2,"Please choose a different name"); } } if (m==4 || m==6) { wattrset(parent_window,attrs[COLOR_FRAME]); mvwprintw(parent_window,wtop+10,wleft+2," "); } } } return 0;}int gotowhere( WINDOW* parent_window, file_position_t ap, file_position_t ap2, file_position_t filesize){ int wtop; int wbot; int wleft; int wright; char* s; file_position_t value; int m; unsigned int i; int plus=0; int minus=0; wtop=LINES/2-3; wbot=wtop+5; wleft=COLS/2-16; wright=wleft+33; new_menu(0); menu_item(1,wtop+4,wleft+1,"%To:",'t','T',0); menu_item(2,wtop+4,wleft+21,"%%Goto",'g','G',0); menu_item(0,wtop+4,wright-6,"%%Cancel",'c','C',0); if (LINES>9 && COLS>32) { draw_frame(parent_window,wtop,wleft,wbot,wright,' '); headline(parent_window,wtop,wleft,"GOTO"); wattrset(parent_window,attrs[COLOR_TEXT]); mvwprintw(parent_window,wtop+1,wleft+1,"Goto where? (Enter +x or -x to"); mvwprintw(parent_window,wtop+2,wleft+1,"jump relative to your position)"); m=1; while (m==1) { wattrset(parent_window,attrs[COLOR_BRACKETS]); mvwprintw(parent_window,wtop+4,wleft+5,"[ ]"); wattrset(parent_window,attrs[COLOR_TEXT]); mvwprintw(parent_window,wtop+4,wleft+6,"%11X",ap); m=menu_show(parent_window); if (m==1) {// s=input2(parent_window,wtop+4,wleft+6,11,tohex2(ap2,10),11,0,0);// TODO: er zeigt mir hier mist an. warum?? s=input2(parent_window,wtop+4,wleft+6,11,"\0",11,0,0);// TODO: er zeigt mir hier mist an. warum?? plus=0; minus=0; value=(int)stohex(s); for (i=0;i<strlen(s);i++) { if (s[i]=='-' || s[i]=='m') {value=ap2-value;i=20;} if (s[i]=='+' || s[i]=='p') {value=ap2+value;i=20;} } if (value<=filesize) ap=value; free(s); } else if (m==0) ap=ap2; } erase_frame(parent_window,wtop,wleft,wbot,wright,' '); } return ap; }//#ifndef fpos_t//#define fpos_t file_position_t//#endifint main(int argc,char *argv[]){ int hexnotasc=1; int ch; int ch2=0; file_position_t p=0; file_position_t cp=p; file_position_t filesize; file_position_t rfilesize; file_position_t filesize2 = 0; file_position_t rfilesize2; file_position_t ap2; fpos_t help; unsigned char c1,c2; file_position_t tmpp; unsigned int i; int j; searchstring=malloc(1); writesearchfilename=malloc(1); readsearchfilename=malloc(1); searchstring[0]=0; writesearchfilename[0]=0; readsearchfilename[0]=0; if (argc<2) { fprintf(stderr,"Please run with %s [inputfile] or %s [inputfile] [diffile]\n",argv[0],argv[0]); exit(1); } if ((strcmp(argv[1],"-gpl")==0)||(strcmp(argv[1],"-GPL")==0)) { print_gpl(); exit(0); } inputfile=fopen(argv[1],"r"); if (inputfile==NULL) { fprintf(stderr,"Error opening inputfile [%s]\n",argv[1]); exit(1); } fseek(inputfile,0,SEEK_END); fgetpos(inputfile, &help);#ifdef LINUX filesize = *((file_position_t*) &help);#else filesize=(file_position_t)help;#endif// filesize=100; rfilesize=filesize; fseek(inputfile,0,SEEK_SET); if (argc>=3) { inputfile2=fopen(argv[2],"r"); if (inputfile2==NULL) { fprintf(stderr,"Error opening diffile [%s]\n",argv[2]); exit(1); } fseek(inputfile2,0,SEEK_END); fgetpos(inputfile2,&help);#ifdef LINUX filesize2= *((file_position_t*) &help);#else filesize2= (file_position_t) help;#endif rfilesize2=filesize2; fseek(inputfile2,0,SEEK_SET); diffnotedit=1; }// while (!feof(inputfile)) fgets(NULL,1000,inputfile); uimain(); //init(); wclear(stdscr); wrefresh(stdscr); init_colors(); wattrset(stdscr,attrs[COLOR_HEXFIELD]); for (i=1; (int) i < LINES-1;i++) { for (j=0; j < COLS;j++) { mvwprintw(stdscr,i,j," "); } } for (;;) { draw_mainheadline(stdscr,0,argv[1]); wattrset(stdscr,attrs[COLOR_HEXFIELD]); if (diffnotedit==0) { print_hex(stdscr,p,cp,filesize,rfilesize,hexnotasc,ch2); } else { print_hex_diff(stdscr,p,p,filesize,filesize2,argv[2]); } draw_menu(stdscr); ch=getch2(); if (hexnotasc==1) { if (ch=='!') ch=KEY_F(1); if (ch=='@') ch=KEY_F(2); if (ch=='#') ch=KEY_F(3); if (ch=='%') ch=KEY_F(5); if (ch=='^') ch=KEY_F(6); if (ch=='(') ch=KEY_F(9); if (ch==')') ch=KEY_F(10); if (ch=='h') ch=KEY_LEFT; if (ch=='j') ch=KEY_DOWN; if (ch=='k') ch=KEY_UP; if (ch=='l') ch=KEY_RIGHT; if (ch==' ') ch=KEY_NPAGE; } if (diffnotedit==1 && ch!=KEY_RETURN && ch!=9 && ch!=KEY_BTAB && ch!=KEY_LEFT && ch!=KEY_RIGHT && ch!=KEY_UP && ch!=KEY_DOWN && ch!=KEY_NPAGE && ch!=KEY_PPAGE && ch!=KEY_F(2) && ch!=KEY_F(3) && ch!=KEY_F(10)) ch=0; if ((hexnotasc==1) && (((ch>='0') && (ch<='9')) || ((ch>='a') && (ch<='f')) || ((ch>='A') && (ch<='F')))) { mvwprintw(stdscr,1,1,"h"); if (ch2==0) { ch2=ch; } else { if (ch2<='9') change[chnum]=(ch2-48)<<4; else if (ch2<='F') change[chnum]=(ch2-55)<<4; else if (ch2<='f') change[chnum]=(ch2-87)<<4; if (ch<='9') change[chnum]=change[chnum]+(ch-48); else if (ch<='F') change[chnum]=change[chnum]+(ch-55); else if (ch<='f') change[chnum]=change[chnum]+(ch-87); chpos[chnum]=cp; chnum++; ch2=0; ch=KEY_RIGHT; if (cp==filesize) filesize++; } } else ch2=0; if ((hexnotasc==0) && (ch>=32) && (ch<=127)) { chpos[chnum]=cp; change[chnum]=ch; chnum++; ch=KEY_RIGHT; } if (diffnotedit==0 && (ch==KEY_BTAB || ch==9)) hexnotasc=1-hexnotasc; if (ch==12 || ch==KEY_F(11) || ch==KEY_REFRESH) { wattrset(stdscr,attrs[COLOR_HEXFIELD]); wclear(stdscr); wrefresh(stdscr); wattrset(stdscr,attrs[COLOR_HEXFIELD]); for (i=1; (int) i < LINES-1;i++) { for (j=0;j<COLS;j++) { mvwprintw(stdscr,i,j," "); } } } if (diffnotedit==0) { // if (ch==KEY_LEFT && cp!=0) {cp--;if (cp<p) p--;} if (ch==KEY_DOWN && cp+cols<filesize) {cp=cp+cols;if (cp>=p+rows*cols) p=p+cols;} if (ch==KEY_UP && cp>=cols) { cp=cp-cols; if (cp<p) { if (p>cols) { p=p-cols; } else { p=0; } } } if (ch==KEY_PPAGE && cp>=cols*rows) { cp=cp-cols*rows; if (p>cols*rows) { p=p-cols*rows; } else { p = 0; if (p) { cp = 0; } } } if (ch==KEY_NPAGE && p+cols*rows<=filesize && cp+cols*rows<=filesize+1) {p=p+cols*rows;cp=cp+cols*rows;} } else { if (ch==KEY_LEFT && p!=0) {p--;} if (ch==KEY_DOWN && ((p+cols<filesize) || (p+cols<filesize2))) {p=p+cols;} if (ch==KEY_UP && p>=cols) {p=p-cols;} if (ch==KEY_PPAGE && p>=cols*rows/2) {p=p-cols*rows/2;} if (ch==KEY_NPAGE && ((p+cols*rows/2<=filesize) || (p+cols*rows/2<=filesize2))) {p=p+cols*rows/2;} if (ch==KEY_RIGHT && ((p<filesize) || (p<filesize2))) p++; if (ch==KEY_BTAB || ch==9 || ch==KEY_RETURN) { tmpp=p+1; fseek(inputfile,tmpp,SEEK_SET); fseek(inputfile2,tmpp,SEEK_SET); c1=0; c2=0; while (!feof(inputfile)&&!feof(inputfile2) && (c1==c2)) { fread(&c1,sizeof(char),1,inputfile); fread(&c2,sizeof(char),1,inputfile2); if (!feof(inputfile)&&!feof(inputfile2)) if (c1==c2) tmpp++; } if (c1!=c2) p=tmpp; } } if (ch==KEY_F(1)) { ch=searchfor(stdscr,hexnotasc); } if (ch==KEY_F(2)) { ap2=gotowhere(stdscr,cp,cp,filesize); if (ap2<=filesize) { p=ap2; cp=ap2; }// wclear(stdscr); wrefresh(stdscr); } if (ch==KEY_F(3)) { hexcalc(stdscr);// wclear(stdscr);// wrefresh(stdscr); } if (ch==KEY_F(5)) { if (hexnotasc==0) { searchstring2len=strlen(searchstring); for (i=0;i<strlen(searchstring);i++) { searchstring2[i]=(int)searchstring[i]; } } else { searchstring2len=searchstring3len; for (i=0;i<searchstring3len;i++) { searchstring2[i]=searchstring3[i]; } } if (readsearch==0) { cp=searchforwardhex(cp,filesize); } else { cp=searchforwardhex2(cp); } p=cp; if (writesearch==1) { p=0; cp=0; } ch=KEY_RIGHT; } if (ch==KEY_F(6)) { if (hexnotasc==0) { searchstring2len=strlen(searchstring); for (i=0;i<strlen(searchstring);i++) searchstring2[i]=(int)searchstring[i]; } else { searchstring2len=searchstring3len; for (i=0;i<searchstring3len;i++) searchstring2[i]=searchstring3[i]; } if (readsearch==0) cp=searchbackwardhex(cp,filesize,hexnotasc); else cp=searchbackwardhex2(cp,filesize); p=cp; if (writesearch==1) { p=0; cp=0; } ch=KEY_LEFT; } if (diffnotedit==0 && ch==KEY_RIGHT && cp<filesize) {cp++; if (cp>=p+rows*cols) p++; } if (diffnotedit==0 && ch==KEY_LEFT && cp!=0) {cp--;if (cp<p) p--;} if (ch==KEY_F(9)) { if (chnum!=0) { if (chpos[chnum-1]>rfilesize) { filesize=rfilesize; for (i=0; (int) i < chnum-1; i++) { if (filesize<chpos[i]) { filesize=chpos[i]; } } } if (p>chpos[chnum-1] || p+cols*rows<chpos[chnum-1]) p=chpos[chnum-1]; if (cp>chpos[chnum-1] || cp+cols*rows<chpos[chnum-1]) cp=chpos[chnum-1]; if (p>filesize) p=filesize; if (cp>filesize) cp=filesize; chnum--; } } if (ch==KEY_F(10)) { if (chnum!=0) exit_yesno(stdscr,argv[1]); else finish(0);// wclear(stdscr); wrefresh(stdscr); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -