📄 viewfile.c
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <curses.h>void initial();void echofile();int line=0,titlenum=0;int num=0,linenum=0;int title[1000];char ch;char linebuf[1024];FILE *fp;main( int argc, char *argv[] ){ int j=0; char filename[256]; memset( filename, 0, sizeof(filename) ); memset( linebuf, 0, sizeof(linebuf) ); if( argc == 1 ) { printf("您的参数错误,正确用法: viewfile 文件名\n"); return; } /* sprintf( filename, "%s/lht.txt", getenv("HOME") ); */ sprintf( filename, "%s", argv[1] ); fp = fopen( filename, "r" ); if( fp == NULL ) { printf("打开文件错误\n"); return; } initial(); while( !feof(fp) ) { fgets( linebuf, 1024, fp ); if( memcmp( linebuf, "-----", 5 ) == 0 ) { title[num] = linenum; num++; } linenum ++; } line = 0; system( "clear" ); fseek( fp, 0, SEEK_SET ); echofile();waiter: ch = getch(); switch( ch ) { case 'U': case 'u': if( line == 0 ) goto waiter; else { if( titlenum != 0 ) titlenum--; line = title[titlenum]; } break; case 'D': case 'd': if( titlenum == num-1 ) { goto waiter; } else { titlenum++; line = title[titlenum]; } break; case 'P': case 'p': if( line < 20 ) { line = 0; titlenum = 0; } else { line-=20-1; if( line < title[titlenum] ) { if( titlenum > 0 ) titlenum--; } } break; case 'N': case 'n': if( linenum - line < 20 ) { goto waiter; } else { titlenum=0; if( line == 0 ) line = 20; else line+=20-1; if( line > title[titlenum] ) { if( titlenum != num-1 ) { for( int i=0;i<num;i++ ) { if( line >= title[i] ) titlenum++; } if( line-title[num-1] < 0 ) { titlenum--; } } } } break; case 'Q': case 'q': goto end; default: break; } echofile(); goto waiter;end: endwin(); fclose( fp ); system("clear");}void initial(){ initscr(); cbreak(); nonl(); noecho(); intrflush(stdscr,FALSE); keypad(stdscr,TRUE); refresh();}void echofile(){ int i=0; rewind( fp ); for( i=0;i<20;i++ ) { mvprintw( i+1,0," " ); } i = 0; if( line!=0 || titlenum != 0 ) { while( !feof(fp) ) { fgets( linebuf, 1024, fp ); if( i == line-2 ) { break; } i++; } } if( line == 0 || titlenum == 0 ) { rewind( fp ); } for( i=0;i<20;i++ ) { memset( linebuf, 0, sizeof(linebuf) ); fgets( linebuf, 1024, fp ); mvprintw( i+1,0,"%s",linebuf ); } /* 显示头 */ attron(A_REVERSE); /* 开启反白模式 */ memset( linebuf, 0, sizeof(linebuf) ); mvprintw(0,10," "); sprintf( linebuf, "--- 移植错误信息查询 [错误信息行数:%d] --- " "[当前行数:%d]", linenum, line+1 ); mvprintw(0,0,"%s",linebuf); attroff(A_REVERSE); /* 关闭反白模式 */ mvprintw(1,0,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); /* 显示尾 */ mvprintw(22,0,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); attron(A_REVERSE); /* 开启反白模式 */ mvprintw(23,0," U - 上一错误种类 D - 下一错误种类 P - 上翻一屏 N - 下翻一屏 Q - 退出"); attroff(A_REVERSE); /* 关闭反白模式 */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -