⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewfile.c

📁 这是一个在unix/linux下显示文本文件的程序
💻 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 + -