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

📄 more.c

📁 mips架构的bootloader,99左右的版本 但源代码现在没人更新了
💻 C
字号:
/************************************************************* * File: mon/more.c * Purpose: Part of core Monitor. This module implements the 'more' *	    function used by many of the commands. * Author: Phil Bunce (pjb@carmel.com) * Revision History: *	970304	Start of revision history *	970822	Permit ESC to be used to exit more *	980331	changed getchar to GETCHAR for imon95 *	980405	Allow \r in place of \n */#include <stdio.h>#include <termio.h>#include <mon.h>#ifdef PMCC#define GETCHAR getchar#endif#define BEL 007#define TIKRATE  20000char more_pat[LINESZ];int tik_cnt;char more_tiks[] = "|/-\\";char *more_tik;char *more_msg = "more... ";Optdesc more_opts[] = {	{"","paginator"},	{"/str","search for str"},	{"n","repeat last search"},	{"SPACE","next page"},	{"CR","next line"},	{"q|ESC","quit"},	{0}};/**************************************************************  test more function*	compile as: pmcc -DTEST more.c*/#ifdef TESTmain(argc,argv)int argc;char *argv[];{int i,cnt,siz;char tmp[100];siz = 8;cnt = siz;if (argc == 1) {	printf("usage: more [cnt] [siz]\n");	exit(1);	}if (argc > 2) sscanf(argv[2],"%d",&siz);if (argc > 1) sscanf(argv[1],"%d",&cnt);ioctl_cbreak(0L);for (i=0;i<60;i++) {	mkln(tmp);	if (more(tmp,&cnt,siz)) break;	}}mkln(p)char *p;{int i;for (i='a';i<='z';i++) *p++ = i;*p = 0;}#endif/**************************************************************  more(p,cnt,size)*	The 'more' paginator 	*/more(p,cnt,size)char *p;int *cnt,size;{int r;if (*cnt == 0) {	if (size == 0) return(1); /* if *cnt=0 and size=0 we're done */	while ((r = getinp(cnt,size)) == -1) ;	if (r) /* quit */ {		*p = 0;		return(1);		}	}if (*cnt == -1) { /* search in progress */	if (!strposn(p,more_pat)) {		dotik(256,0);		return(0); /* not found yet */		}	else { /* found */		*cnt = size;		printf("\b \n");		}	}printf("%s\n",p);*p = 0;(*cnt)--;return(0);}/**************************************************************  getinp(cnt,size)*/getinp(cnt,size)int *cnt,size;{int i,c;printf("%s",more_msg);for (;;) {	c = GETCHAR();	if (c == '\r') c = '\n';	if (strchr("nq/ \n\033",c)) break;	putchar(BEL);	}era_line(more_msg);if (c == 'q' || c == 033) return(1);switch (c) {	case ' ' : *cnt = size; 	break;	case '\n': *cnt = 1;		break;	case '/' : 		/* get pattern */		putchar('/');		for (i=0;;) {			c = GETCHAR();			if (c == '\r') c = '\n';			if (c == '\n') break;			if (c == '\b') {				if (i > 0) {					putchar(c);					i--;					}				else {					putchar('\b');					return(-1);					}				}			else {				putchar(c);				more_pat[i++] = c;				}			}		more_pat[i] = 0;		printf("  ");		*cnt = -1; /* enter search mode */		break;	case 'n' : 		printf("/%s  ",more_pat);		*cnt = -1; /* enter search mode */		break;	}return(0);}/**************************************************************  void dotik(rate,use_ret)*	rate -- controls how fast the display rotates. The larger*		the value, the faster the rotation.*	use_ret*		specifies that " %c\r" should be used rather than*		"\b%c".*/void dotik(rate,use_ret)int rate,use_ret;{tik_cnt -= rate;if (tik_cnt > 0) return;tik_cnt = TIKRATE;if (more_tik == 0) more_tik = more_tiks;if (*more_tik == 0) more_tik = more_tiks;if (use_ret) printf(" %c\r",*more_tik);else printf("\b%c",*more_tik);more_tik++;}

⌨️ 快捷键说明

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