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

📄 main.c

📁 早期freebsd实现
💻 C
字号:
/* * Entry point, initialization, miscellaneous routines. */#include "less.h"#include "position.h"public int	ispipe;public char *	every_first_cmd = NULL;public int	new_file;public int	is_tty;public IFILE	curr_ifile = NULL_IFILE;public IFILE	old_ifile = NULL_IFILE;public struct scrpos initial_scrpos;public int	any_display = 0;public int	scroll;public char *	progname;public int	quitting;extern int	file;extern int	quit_at_eof;extern int	cbufs;extern int	errmsgs;extern int	screen_trashed;extern int	force_open;#if LOGFILEpublic int	logfile = -1;public int	force_logfile = 0;public char *	namelogfile = NULL;#endif#if EDITORpublic char *	editor;public char *	editproto;#endif#if TAGSextern char *	tagfile;extern char *	tagpattern;extern int	tagoption;#endif/* * Entry point. */main(argc, argv)	int argc;	char *argv[];{	IFILE h;	int nofiles;	extern char *getenv();	progname = *argv++;	/*	 * Process command line arguments and LESS environment arguments.	 * Command line arguments override environment arguments.	 */	init_prompt();	init_charset();	init_option();	scan_option(getenv("LESS"));#define	isoptstring(s)	(((s)[0] == '-' || (s)[0] == '+') && (s)[1] != '\0')	while (--argc > 0 && (isoptstring(argv[0]) || isoptpending()))		scan_option(*argv++);#undef isoptstring	if (isoptpending())	{		/*		 * Last command line option was a flag requiring a		 * following string, but there was no following string.		 */		nopendopt();		quit(0);	}#if USERFILE	/*	 * Try to use the lesskey file "$HOME/.less".	 */	add_hometable();#endif#if EDITOR	editor = getenv("EDITOR");	if (editor == NULL || *editor == '\0')		editor = EDIT_PGM;	editproto = getenv("LESSEDIT");	if (editproto == NULL || *editproto == '\0')		editproto = "%E ?lm+%lm. %f";#endif	/*	 * Set up terminal, etc.	 */	is_tty = isatty(1);	if (!is_tty)	{		/*		 * Output is not a tty.		 * Just copy the input file(s) to output.		 */		if (argc <= 0)		{			if (edit("-", 0) == 0)				cat_file();		} else		{			while (--argc >= 0)			{				if (edit(*argv++, 0) == 0)					cat_file();			}		}		quit(0);	}	/*	 * Call get_ifile with all the command line filenames	 * to "register" them with the ifile system.	 */	h = NULL_IFILE;	while (--argc >= 0)		h = get_ifile(*argv++, h);	init_mark();	raw_mode(1);	get_term();	open_getchr();	init_signals(1);	/*	 * Select the first file to examine.	 */#if TAGS	if (tagoption)	{		/*		 * A -t option was given.		 * Verify that no filenames were also given.		 * Edit the file selected by the "tags" search,		 * and search for the proper line in the file.		 */		if (nifile() > 0)		{			error("No filenames allowed with -t option", NULL_PARG);			quit(1);		}		if (tagfile == NULL)			quit(1);		if (edit(tagfile, 0) || tagsearch())			quit(1);		nofiles = 0;	} else#endif	if (nifile() == 0)		nofiles = edit("-", 0);	/* Standard input */	else 		nofiles = edit_first();	if (nofiles)	{		quit(1);		/*NOTREACHED*/	}	init();	commands();	quit(0);	/*NOTREACHED*/}/* * Copy a string, truncating to the specified length if necessary. * Unlike strncpy(), the resulting string is guaranteed to be null-terminated. */	public voidstrtcpy(to, from, len)	char *to;	char *from;	unsigned int len;{	strncpy(to, from, len);	to[len-1] = '\0';}/* * Copy a string to a "safe" place * (that is, to a buffer allocated by calloc). */	public char *save(s)	char *s;{	register char *p;	p = (char *) ecalloc(strlen(s)+1, sizeof(char));	strcpy(p, s);	return (p);}	public VOID_POINTERecalloc(count, size)	int count;	unsigned int size;{	register VOID_POINTER p;	p = calloc(count, size);	if (p != NULL)		return (p);	error("Cannot allocate memory", NULL_PARG);	quit(1);	/*NOTREACHED*/}/* * Skip leading spaces in a string. */	public char *skipsp(s)	register char *s;{	while (*s == ' ' || *s == '\t')			s++;	return (s);}/* * Exit the program. */	public voidquit(status)	int status;{	static int save_status;	/*	 * Put cursor at bottom left corner, clear the line,	 * reset the terminal modes, and exit.	 */	if (status < 0)		status = save_status;	else		save_status = status;	quitting = 1;#if LOGFILE	end_logfile();#endif	if (any_display)	{		lower_left();		clear_eol();	}	deinit();	flush();	raw_mode(0);#if __MSDOS__	restore_screen();	/* 	 * If we don't close 2, we get some garbage from	 * 2's buffer when it flushes automatically.	 * I cannot track this one down  RB	 * The same bug shows up if we use ^C^C to abort.	 */	close(2);#endif	exit(status);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -