亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cmdedit.c

?? 手機嵌入式Linux下可用的busybox源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* vi: set sw=4 ts=4: *//* * Termios command line History and Editting. * * Copyright (c) 1986-2001 may safely be consumed by a BSD or GPL license. * Written by:   Vladimir Oleynik <dzo@simtreas.ru> * * Used ideas: *      Adam Rogoyski    <rogoyski@cs.utexas.edu> *      Dave Cinege      <dcinege@psychosis.com> *      Jakub Jelinek (c) 1995 *      Erik Andersen    <andersee@debian.org> (Majorly adjusted for busybox) * * This code is 'as is' with no warranty. * * *//*   Usage and Known bugs:   Terminal key codes are not extensive, and more will probably   need to be added. This version was created on Debian GNU/Linux 2.x.   Delete, Backspace, Home, End, and the arrow keys were tested   to work in an Xterm and console. Ctrl-A also works as Home.   Ctrl-E also works as End.   Small bugs (simple effect):   - not true viewing if terminal size (x*y symbols) less     size (prompt + editor`s line + 2 symbols)   - not true viewing if length prompt less terminal width */#include <stdio.h>#include <errno.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <sys/ioctl.h>#include <ctype.h>#include <signal.h>#include <limits.h>#include "busybox.h"#ifdef BB_LOCALE_SUPPORT#define Isprint(c) isprint((c))#else#define Isprint(c) ( (c) >= ' ' && (c) != ((unsigned char)'\233') )#endif#ifndef TEST#define D(x)#else#define BB_FEATURE_COMMAND_EDITING#define BB_FEATURE_COMMAND_TAB_COMPLETION#define BB_FEATURE_COMMAND_USERNAME_COMPLETION#define BB_FEATURE_NONPRINTABLE_INVERSE_PUT#define BB_FEATURE_CLEAN_UP#define D(x)  x#endif							/* TEST */#ifdef BB_FEATURE_COMMAND_TAB_COMPLETION#include <dirent.h>#include <sys/stat.h>#endif#ifdef BB_FEATURE_COMMAND_EDITING#ifndef BB_FEATURE_COMMAND_TAB_COMPLETION#undef  BB_FEATURE_COMMAND_USERNAME_COMPLETION#endif#if defined(BB_FEATURE_COMMAND_USERNAME_COMPLETION) || defined(BB_FEATURE_SH_FANCY_PROMPT)#define BB_FEATURE_GETUSERNAME_AND_HOMEDIR#endif#ifdef BB_FEATURE_GETUSERNAME_AND_HOMEDIR#       ifndef TEST#               include "pwd_grp/pwd.h"#       else#               include <pwd.h>#       endif  /* TEST */#endif							/* advanced FEATURES */struct history {	char *s;	struct history *p;	struct history *n;};/* Maximum length of the linked list for the command line history */static const int MAX_HISTORY = 15;/* First element in command line list */static struct history *his_front = NULL;/* Last element in command line list */static struct history *his_end = NULL;#include <termios.h>#define setTermSettings(fd,argp) tcsetattr(fd,TCSANOW,argp)#define getTermSettings(fd,argp) tcgetattr(fd, argp);/* Current termio and the previous termio before starting sh */static struct termios initial_settings, new_settings;staticvolatile int cmdedit_termw = 80;	/* actual terminal width */static int history_counter = 0;	/* Number of commands in history list */staticvolatile int handlers_sets = 0;	/* Set next bites: */enum {	SET_ATEXIT = 1,		/* when atexit() has been called 				   and get euid,uid,gid to fast compare */	SET_WCHG_HANDLERS = 2,  /* winchg signal handler */	SET_RESET_TERM = 4,     /* if the terminal needs to be reset upon exit */};static int cmdedit_x;		/* real x terminal position */static int cmdedit_y;		/* pseudoreal y terminal position */static int cmdedit_prmt_len;	/* lenght prompt without colores string */static int cursor;		/* required global for signal handler */static int len;			/* --- "" - - "" - -"- --""-- --""--- */static char *command_ps;	/* --- "" - - "" - -"- --""-- --""--- */static#ifndef BB_FEATURE_SH_FANCY_PROMPT	const#endifchar *cmdedit_prompt;		/* --- "" - - "" - -"- --""-- --""--- */#ifdef BB_FEATURE_GETUSERNAME_AND_HOMEDIRstatic char *user_buf = "";static char *home_pwd_buf = "";static int my_euid;#endif#ifdef BB_FEATURE_SH_FANCY_PROMPTstatic char *hostname_buf = "";static int num_ok_lines = 1;#endif#ifdef  BB_FEATURE_COMMAND_TAB_COMPLETION#ifndef BB_FEATURE_GETUSERNAME_AND_HOMEDIRstatic int my_euid;#endifstatic int my_uid;static int my_gid;#endif	/* BB_FEATURE_COMMAND_TAB_COMPLETION *//* It seems that libc5 doesn't know what a sighandler_t is... */#if (__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 1)typedef void (*sighandler_t) (int);#endifstatic void cmdedit_setwidth(int w, int redraw_flg);static void win_changed(int nsig){	struct winsize win = { 0, 0, 0, 0 };	static sighandler_t previous_SIGWINCH_handler;	/* for reset */	/*   emulate      || signal call */	if (nsig == -SIGWINCH || nsig == SIGWINCH) {		ioctl(0, TIOCGWINSZ, &win);		if (win.ws_col > 0) {			cmdedit_setwidth(win.ws_col, nsig == SIGWINCH);		} 	}	/* Unix not all standart in recall signal */	if (nsig == -SIGWINCH)		/* save previous handler   */		previous_SIGWINCH_handler = signal(SIGWINCH, win_changed);	else if (nsig == SIGWINCH)	/* signaled called handler */		signal(SIGWINCH, win_changed);	/* set for next call       */	else						/* nsig == 0 */		/* set previous handler    */		signal(SIGWINCH, previous_SIGWINCH_handler);	/* reset    */}static void cmdedit_reset_term(void){	if ((handlers_sets & SET_RESET_TERM) != 0) {/* sparc and other have broken termios support: use old termio handling. */		setTermSettings(fileno(stdin), (void *) &initial_settings);		handlers_sets &= ~SET_RESET_TERM;	}	if ((handlers_sets & SET_WCHG_HANDLERS) != 0) {		/* reset SIGWINCH handler to previous (default) */		win_changed(0);		handlers_sets &= ~SET_WCHG_HANDLERS;	}	fflush(stdout);#if 0//#ifdef BB_FEATURE_CLEAN_UP	if (his_front) {		struct history *n;		while (his_front != his_end) {			n = his_front->n;			free(his_front->s);			free(his_front);			his_front = n;		}	}#endif}/* special for recount position for scroll and remove terminal margin effect */static void cmdedit_set_out_char(int next_char){	int c = (int)((unsigned char) command_ps[cursor]);	if (c == 0)		c = ' ';	/* destroy end char? */#ifdef BB_FEATURE_NONPRINTABLE_INVERSE_PUT	if (!Isprint(c)) {	/* Inverse put non-printable characters */		if (c >= 128)			c -= 128;		if (c < ' ')			c += '@';		if (c == 127)			c = '?';		printf("\033[7m%c\033[0m", c);	} else#endif		putchar(c);	if (++cmdedit_x >= cmdedit_termw) {		/* terminal is scrolled down */		cmdedit_y++;		cmdedit_x = 0;		if (!next_char)			next_char = ' ';		/* destroy "(auto)margin" */		putchar(next_char);		putchar('\b');	}	cursor++;}/* Move to end line. Bonus: rewrite line from cursor */static void input_end(void){	while (cursor < len)		cmdedit_set_out_char(0);}/* Go to the next line */static void goto_new_line(void){	input_end();	if (cmdedit_x)		putchar('\n');}static inline void out1str(const char *s){	fputs(s, stdout);}static inline void beep(void){	putchar('\007');}/* Move back one charactor *//* special for slow terminal */static void input_backward(int num){	if (num > cursor)		num = cursor;	cursor -= num;		/* new cursor (in command, not terminal) */	if (cmdedit_x >= num) {		/* no to up line */		cmdedit_x -= num;		if (num < 4)			while (num-- > 0)				putchar('\b');		else			printf("\033[%dD", num);	} else {		int count_y;		if (cmdedit_x) {			putchar('\r');		/* back to first terminal pos.  */			num -= cmdedit_x;	/* set previous backward        */		}		count_y = 1 + num / cmdedit_termw;		printf("\033[%dA", count_y);		cmdedit_y -= count_y;		/*  require  forward  after  uping   */		cmdedit_x = cmdedit_termw * count_y - num;		printf("\033[%dC", cmdedit_x);	/* set term cursor   */	}}static void put_prompt(void){	out1str(cmdedit_prompt);	cmdedit_x = cmdedit_prmt_len;	/* count real x terminal position */	cursor = 0;	cmdedit_y = 0;                  /* new quasireal y */}#ifndef BB_FEATURE_SH_FANCY_PROMPTstatic void parse_prompt(const char *prmt_ptr){	cmdedit_prompt = prmt_ptr;	cmdedit_prmt_len = strlen(prmt_ptr);	put_prompt();}#elsestatic void parse_prompt(const char *prmt_ptr){	int prmt_len = 0;	int sub_len = 0;	char  flg_not_length = '[';	char *prmt_mem_ptr = xcalloc(1, 1);	char *pwd_buf = xgetcwd(0);	char  buf2[PATH_MAX + 1];	char  buf[2];	char  c;	char *pbuf;	if (!pwd_buf) {		pwd_buf=(char *)unknown;	}	while (*prmt_ptr) {		pbuf    = buf;		pbuf[1] = 0;		c = *prmt_ptr++;		if (c == '\\') {			const char *cp = prmt_ptr;			int l;						c = process_escape_sequence(&prmt_ptr);			if(prmt_ptr==cp) {			  if (*cp == 0)				break;			  c = *prmt_ptr++;			  switch (c) {#ifdef BB_FEATURE_GETUSERNAME_AND_HOMEDIR			  case 'u':				pbuf = user_buf;				break;#endif				  case 'h':				pbuf = hostname_buf;				if (*pbuf == 0) {					pbuf = xcalloc(256, 1);					if (gethostname(pbuf, 255) < 0) {						strcpy(pbuf, "?");					} else {						char *s = strchr(pbuf, '.');						if (s)							*s = 0;					}					hostname_buf = pbuf;				}				break;			  case '$':				c = my_euid == 0 ? '#' : '$';				break;#ifdef BB_FEATURE_GETUSERNAME_AND_HOMEDIR			  case 'w':				pbuf = pwd_buf;				l = strlen(home_pwd_buf);				if (home_pwd_buf[0] != 0 &&				    strncmp(home_pwd_buf, pbuf, l) == 0 &&				    (pbuf[l]=='/' || pbuf[l]=='\0') &&				    strlen(pwd_buf+l)<PATH_MAX) {					pbuf = buf2;					*pbuf = '~';					strcpy(pbuf+1, pwd_buf+l);					}				break;#endif				  case 'W':				pbuf = pwd_buf;				cp = strrchr(pbuf,'/');				if ( (cp != NULL) && (cp != pbuf) )					pbuf += (cp-pbuf)+1;				break;			  case '!':				snprintf(pbuf = buf2, sizeof(buf2), "%d", num_ok_lines);				break;			  case 'e': case 'E':     /* \e \E = \033 */				c = '\033';				break;			  case 'x': case 'X': 				for (l = 0; l < 3;) {					int h;					buf2[l++] = *prmt_ptr;					buf2[l] = 0;					h = strtol(buf2, &pbuf, 16);					if (h > UCHAR_MAX || (pbuf - buf2) < l) {						l--;						break;					}					prmt_ptr++;				}				buf2[l] = 0;				c = (char)strtol(buf2, 0, 16);				if(c==0)					c = '?';				pbuf = buf;				break;			  case '[': case ']':				if (c == flg_not_length) {					flg_not_length = flg_not_length == '[' ? ']' : '[';					continue;				}				break;			  }			} 		}		if(pbuf == buf)			*pbuf = c;		prmt_len += strlen(pbuf);		prmt_mem_ptr = strcat(xrealloc(prmt_mem_ptr, prmt_len+1), pbuf);		if (flg_not_length == ']')			sub_len++;	}	if(pwd_buf!=(char *)unknown)		free(pwd_buf);	cmdedit_prompt = prmt_mem_ptr;	cmdedit_prmt_len = prmt_len - sub_len;	put_prompt();}#endif/* draw promt, editor line, and clear tail */static void redraw(int y, int back_cursor){	if (y > 0)				/* up to start y */		printf("\033[%dA", y);	putchar('\r');	put_prompt();	input_end();				/* rewrite */	printf("\033[J");			/* destroy tail after cursor */	input_backward(back_cursor);}/* Delete the char in front of the cursor */static void input_delete(void){	int j = cursor;	if (j == len)		return;	strcpy(command_ps + j, command_ps + j + 1);	len--;	input_end();			/* rewtite new line */	cmdedit_set_out_char(0);	/* destroy end char */	input_backward(cursor - j);	/* back to old pos cursor */}/* Delete the char in back of the cursor */static void input_backspace(void){	if (cursor > 0) {		input_backward(1);		input_delete();	}}/* Move forward one charactor */static void input_forward(void){	if (cursor < len)		cmdedit_set_out_char(command_ps[cursor + 1]);}static void cmdedit_setwidth(int w, int redraw_flg){	cmdedit_termw = cmdedit_prmt_len + 2;	if (w <= cmdedit_termw) {		cmdedit_termw = cmdedit_termw % w;	}	if (w > cmdedit_termw) {		cmdedit_termw = w;		if (redraw_flg) {			/* new y for current cursor */			int new_y = (cursor + cmdedit_prmt_len) / w;			/* redraw */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合区在线| 成人激情电影免费在线观看| 久久国产视频网| 91网站最新地址| 欧美大胆人体bbbb| 一区二区三区免费| 成人一级片在线观看| 宅男在线国产精品| 中文字幕日本乱码精品影院| 久久精品国产精品亚洲精品| 欧美亚洲精品一区| 国产精品白丝在线| 国产成人综合在线| 日韩无一区二区| 水野朝阳av一区二区三区| 99久久伊人精品| 久久久99精品久久| 国产一区999| 欧美videos中文字幕| 无码av中文一区二区三区桃花岛| youjizz国产精品| 国产亚洲精久久久久久| 久久狠狠亚洲综合| 日韩一区二区在线观看视频播放| 日本欧美一区二区三区| 在线观看日韩毛片| 日韩一区欧美一区| 99国产精品国产精品毛片| 国产午夜精品一区二区三区视频| 精品无人码麻豆乱码1区2区 | 亚洲精品成人悠悠色影视| 国产精品影音先锋| 久久九九久久九九| 大陆成人av片| 亚洲欧洲精品天堂一级| 成人动漫在线一区| 自拍偷拍国产亚洲| 91福利小视频| 亚洲1区2区3区4区| 欧美日韩国产高清一区二区三区| 亚洲第一av色| 日韩一区二区三区三四区视频在线观看| 亚洲成人av资源| 日韩欧美亚洲一区二区| 韩国三级在线一区| 国产精品女同一区二区三区| 粉嫩aⅴ一区二区三区四区| 国产精品乱码久久久久久| 99国产一区二区三精品乱码| 一区二区三区中文字幕电影| 欧美日韩欧美一区二区| 久久精品国产免费| 亚洲国产精华液网站w| 色中色一区二区| 蜜桃视频在线观看一区二区| 欧美va亚洲va香蕉在线| 成人av手机在线观看| 亚洲精品视频观看| 欧美v亚洲v综合ⅴ国产v| 成人黄色网址在线观看| 亚洲超碰精品一区二区| 精品捆绑美女sm三区| www.久久精品| 亚洲国产精品影院| 亚洲精品v日韩精品| 欧美精品123区| 国产精品资源网| 亚洲国产美国国产综合一区二区| 精品国产一二三| 一本到不卡精品视频在线观看| 日本大胆欧美人术艺术动态 | 欧美影视一区二区三区| 麻豆视频一区二区| 国产精品久久久久一区| 777a∨成人精品桃花网| 成人中文字幕在线| 日本一道高清亚洲日美韩| 中文字幕巨乱亚洲| 在线播放日韩导航| 9色porny自拍视频一区二区| 日韩电影在线观看电影| 国产精品久久网站| 日韩欧美另类在线| 欧美性大战久久久久久久蜜臀| 麻豆免费精品视频| 亚洲综合免费观看高清在线观看| 精品sm在线观看| 欧美精品久久99| 91免费看片在线观看| 国产河南妇女毛片精品久久久 | 亚洲福利视频导航| 欧美国产一区视频在线观看| 日韩精品一区二区三区视频 | 国产成人亚洲综合色影视| 午夜精品aaa| 亚洲综合在线观看视频| 中文字幕一区二区三区四区| 精品成人免费观看| 精品理论电影在线观看| 91精品国产欧美一区二区| 欧美在线一二三四区| 91在线一区二区三区| 国产激情一区二区三区四区| 久久国产精品区| 美腿丝袜亚洲综合| 日本成人中文字幕| 亚洲成人在线观看视频| 亚洲一区免费在线观看| 亚洲欧美日韩中文字幕一区二区三区 | 欧美日韩一区二区在线观看视频| 成人激情黄色小说| 成人动漫av在线| 国产成人精品免费在线| 国产在线观看一区二区| 久久国产精品99精品国产 | 亚洲一区在线观看视频| 亚洲色图另类专区| 亚洲男人都懂的| 亚洲国产日韩精品| 亚洲国产日韩综合久久精品| 天天做天天摸天天爽国产一区| 亚洲线精品一区二区三区八戒| 亚洲综合免费观看高清完整版在线| 亚洲精品日韩综合观看成人91| 亚洲综合免费观看高清完整版在线| 夜夜夜精品看看| 日韩精彩视频在线观看| 奇米色一区二区| 国产在线精品一区二区不卡了| 国产一区二区三区在线观看精品| 国产精品影视在线观看| 99久久777色| 欧美性感一区二区三区| 3atv在线一区二区三区| 久久久青草青青国产亚洲免观| 国产精品色婷婷| 一区二区激情小说| 久久精品国产免费| www.色综合.com| 欧美日韩国产一级二级| 欧美成人一区二区三区| 国产三级欧美三级日产三级99| 最新欧美精品一区二区三区| 亚洲男人的天堂在线aⅴ视频| 日韩高清在线一区| 丰满放荡岳乱妇91ww| 在线免费观看不卡av| 欧美大度的电影原声| 中文字幕一区二区三区在线不卡| 五月天亚洲婷婷| 成人午夜视频在线观看| 欧洲人成人精品| 久久久久国产精品厨房| 亚洲激情网站免费观看| 精品亚洲国内自在自线福利| av激情成人网| 日韩欧美成人一区| 综合av第一页| 黄网站免费久久| 色哟哟一区二区在线观看| 精品国精品国产| 亚洲福利视频三区| 96av麻豆蜜桃一区二区| 精品国产免费久久| 亚洲成人激情综合网| 成人国产视频在线观看| 欧美精品九九99久久| 亚洲欧美成人一区二区三区| 久久精工是国产品牌吗| 欧美三日本三级三级在线播放| 久久久久综合网| 日本不卡不码高清免费观看| 99久久99久久精品国产片果冻| 精品久久久久一区二区国产| 亚洲国产精品视频| 成人短视频下载| 日本一区二区三区四区在线视频 | 欧美一区二区三区在线观看视频| 国产精品久久久一本精品| 精品在线亚洲视频| 欧美疯狂做受xxxx富婆| 亚洲精品你懂的| 99精品国产99久久久久久白柏| 久久久精品免费观看| 国产最新精品免费| 3d成人动漫网站| 成人黄色国产精品网站大全在线免费观看 | 欧美一区二区三级| 亚洲国产综合在线| 色综合久久综合网欧美综合网 | 日韩精品影音先锋| 日日摸夜夜添夜夜添国产精品| 在线免费视频一区二区| 亚洲欧美日韩久久| 91网站在线播放| 一区二区三区四区在线| 99国产精品久久久久久久久久久 | 99精品1区2区| 亚洲色图.com| 色综合久久综合网欧美综合网 |