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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? support_tool.c

?? mobile ip 在linux下的一種實(shí)現(xiàn)
?? C
字號(hào):
/* $Id: support_tool.c,v 1.22 2001/09/08 16:20:06 jm Exp $ * Dynamics core support tool implementation * * Dynamic hierarchial IP tunnel * Copyright (C) 1998-2001, Dynamics group * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. See README and COPYING for * more details. */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <stdio.h>#ifndef __USE_BSD#define __USE_BSD /* Add strncasecmp() */#endif#include <string.h>#include <stdlib.h>#include <signal.h>#include <assert.h>#include <getopt.h>#include <unistd.h>#ifdef USE_LIBREADLINE#include <readline/readline.h>#include <readline/history.h>#endif#include "support_tool.h"#include "util.h"#define ASSERT assert#define DEBUG#define MAX(x,y) ( ( (x) > (y) ) ? (x) : (y) )#define MIN(x,y) ( ( (x) < (y) ) ? (x) : (y) )#define BUFSIZE 1024#define MAXARGS 8#define CMDLEN  32#define HELPTEXT_QUIT "Usage\n\tquit\n\texit\nDescription\n\tQuits program.\n"#define HELPTEXT_HELP "Usage\n\thelp [<command>]\nDescription\n"\"\tDisplay help screen for the command.\n"\"\tIf no command is specified, all commands will be listed.\n"/* command item stores information about a particular command. It's * used to match command string to processing function */struct command_item {	char cmd[CMDLEN+1];  /* name of command */	int unique; /* unique length of command name */	void (*func)(int argc, char *argv[]); /* processing function */	char *help; /* help text (may be NULL) */	struct tool_cmd_completion *completions;	struct command_item *next; /* next command in list */};static int quit; /* Stop flag: if non-zero, the program should stop */static int monitor_delay;    /* If non-zero, pecifies the monitoring interval			      * in seconds */static char monitor_command[BUFSIZE+1]; /* buffer for monitor command */static int executing; /* is a command being executed?  */static struct command_item *commands = NULL; /* command info list */int interactive = 0;/* *  Functions */void cleanup(void);void signal_handler(int sig);void init(void);void clear_commands(void);void set_default_commands(void);void process_string(char *);void process_command(int argc, char *argv[]);/* * Handler for interrupt signal. * If monitoring is on, break it and return to normal * command state. Else interrupt the program. */void signal_handler(int sig){	printf("Interrupted\n");	if (monitor_delay)		monitor_delay = 0;	else if (executing){		/* set executing to false to allow user to		 * interrupt the program, if command handler won't return.		 */		executing = 0;	} else {		cleanup();		exit(0);	}}#if USE_LIBREADLINEstatic char *dynamics_rl_completion(char *text, int state){	static struct command_item *start = NULL;	int len;	struct command_item *item;	if (text == NULL)		return NULL;	len = strlen(text);	if (state == 0)		start = commands;	item = start;	while (item != NULL) {		if (strncmp(text, item->cmd, len) == 0) {			start = item->next;			return strdup(item->cmd);		}		item = item->next;	}	return NULL;}static struct tool_cmd_completion *dynamics_rl_tmp_completions = NULL;static char *dynamics_rl_get_completions(char *text, int state){	int len;	static int pos = 0;	if (dynamics_rl_tmp_completions == NULL)		return NULL;	if (text == NULL)		return NULL;	if (state == 0)		pos = 0;	len = strlen(text);	while (dynamics_rl_tmp_completions[pos].cmd != NULL) {		if (strncmp(text, dynamics_rl_tmp_completions[pos].cmd,			    strlen(text)) == 0) {			char *ret = dynamics_rl_tmp_completions[pos].cmd;			pos++;			return strdup(ret);		}		pos++;	}	return NULL;}#ifdef HAVE_RL_COMPLETION_MATCHES#define completion_matches(t, m) \	rl_completion_matches((t), (rl_compentry_func_t *) (m))#endifstatic char **dynamics_rl_subcompletion(struct command_item *cmd, char *text,					int start){	int i, words = 0;	struct tool_cmd_completion *pos;	if (cmd->completions == NULL)		return NULL;	/* FIX: iterate through command arguments for later items */	for (i = 0; i < start; i++) {		if (i > 0 && isspace(rl_line_buffer[i]) &&		    !isspace(rl_line_buffer[i - 1]))			words++;	}	pos = cmd->completions;	while (words > 1 && pos != NULL) {		pos = pos->sub;		words--;	}	dynamics_rl_tmp_completions = pos;	return completion_matches(text, dynamics_rl_get_completions);}static char **dynamics_rl_attempted(char *text, int start, int end){	struct command_item *item;	if (start == 0)		return completion_matches(text, dynamics_rl_completion);	item = commands;	while (item != NULL) {		int len = strlen(item->cmd);		if (strncmp(rl_line_buffer, item->cmd, len) == 0 &&		    rl_line_buffer[len] == ' ')			return dynamics_rl_subcompletion(item, text, start);		item = item->next;	}	return NULL;}#endif /* USE_LIBREADLINE *//* * Perform initialization */void init(void){	quit = 0;	monitor_delay = 0;	executing = 0;	signal(SIGINT, signal_handler);#if USE_LIBREADLINE	rl_readline_name = "Dynamics";	rl_attempted_completion_function = (CPPFunction *)		dynamics_rl_attempted;#endif /* USE_LIBREADLINE */}/* * Clean up */void cleanup(void){	clear_commands();}/* * Input from stdin until '\n' is received. */void input_command(char *buf, int sz){#if USE_LIBREADLINE	char *tmp;	tmp = readline("> ");	if (tmp != NULL) {		add_history(tmp);		dynamics_strlcpy(buf, tmp, sz);		free(tmp);	} else		quit = 1;#else	int i = 0, n = 0;	buf[0] = 0;	write(1, "> ", 2);	fflush(NULL);	while (i < sz - 1) {		n = read(0, &buf[i], 1);		if (n == 1) {			i++;			if (buf[i-1] == '\n') break;		} else break;	}	buf[i] = 0; /* zero terminate */	if (n <= 0) quit = 1;	if (*buf == '\n') input_command(buf, sz);#endif}/* * Select handling function from command list and * call handling function. */void process_command(int argc, char *argv[]){	int n;	struct command_item *p;	if (argc < 1)		return;	p = commands;	while (p != NULL) {		n = MAX(strlen(argv[0]), p->unique);		n = MIN(strlen(p->cmd) + 1, n);		if (strncasecmp(p->cmd, argv[0], n) == 0) {			executing = 1;			if (p->func != NULL)				(*p->func)(argc, argv);			executing = 0;			return;		}		p = p->next;	}	printf("Illegal command: %s\n", argv[0]);}/* * Split command string to separate arguments and * call processing function. */void process_string(char *str){	char *p = str;	int argc = 0;	char *argv[MAXARGS];	ASSERT(str);	/* split to args */	while (*p != 0 && argc < MAXARGS) {		while (*p == ' ' || *p == '\t') p++;		if (*p == 0 || *p == '\n') break;		argv[argc] = p;		p += strcspn(p, " \t\n");		if (*p != 0) {			*p = 0;			p++;		}		argc++;	}	if (argc) process_command(argc, argv);}/* * Tool main */int tool_main(int argc, char *argv[]){	char cmdbuf[BUFSIZE+1];	*cmdbuf = 0;	init();	set_default_commands();	if (!interactive) {		process_command(argc, argv);		quit = 1;	}#if USE_LIBREADLINE	using_history();#endif	while (!quit) {		if (monitor_delay == 0 ||		    (sleep(monitor_delay) != 0))			input_command(cmdbuf, BUFSIZE);		else			dynamics_strlcpy(cmdbuf, monitor_command, BUFSIZE);		if (!quit)			process_string(cmdbuf);	}	cleanup();	return 0;}/* * Set quit flag */void tool_quit(void){	quit = 1;}/* * Add a command to the beginning of the command list */int tool_add_command(char *cmd, int unique,		     void (*func)(int argc, char *argv[]),		     char *help,		     struct tool_cmd_completion *completions){	struct command_item *item;	ASSERT(cmd != NULL);	ASSERT(unique > 0);	ASSERT(func != NULL);	item = (struct command_item *) malloc(sizeof(struct command_item));	if (item == NULL)		return -1;	dynamics_strlcpy(item->cmd, cmd, CMDLEN);	item->unique = unique;	item->func = func;	item->next = commands;	item->completions = completions;	item->help = help;	commands = item;	return 0;}/* * Clear command list */void clear_commands(void){	struct command_item *p;	while (commands != NULL) {		p = commands;		commands = commands->next;		free(p);	}}/* * Set monitor timeout to start monitoring mode. */void tool_monitor(char *cmd, int timeout){	ASSERT(timeout > 0);	monitor_delay = timeout;	dynamics_strlcpy(monitor_command, cmd, BUFSIZE);	monitor_command[BUFSIZE-1] = '\0';	printf("Starting monitoring, interval %d seconds. "	       "Press Ctrl-C to stop.\n",	       timeout);}void print_help(char *optarg){	struct command_item *item;	if (optarg) {		for (item = commands; item != NULL; item = item->next)			if (strcasecmp(optarg, item->cmd) == 0)				break;		if (item != NULL && item->help != NULL) {			printf("Help on %s:\n", item->cmd);			printf("%s\n", item->help);		} else printf("No help available on %s.\n", optarg);	} else {		printf("tool [OPTIONS] [COMMAND]\n"		       "options:\n[--version] [--help] "		       "[-i --interactive] [-p <path> --path=<path>]\n\n");		printf("Available commands:\n");		for (item = commands; item != NULL; item = item->next) {			printf("%s", item->cmd);			if (item->next) printf(", ");		}		printf("\n\nFor more help type '--help <command>'.\n");	}	exit(0);}/* * DEFAULT COMMANDS */static struct option#ifndef DYN_TARGET_WINDOWSconst#endiflong_options[] ={	{"help", 2, 0, 'h'},	{"version", no_argument, 0, 'v'},	{"interactive", no_argument, 0, 'i'},	{"path", required_argument, 0, 'p'},	{0, 0, 0, 0}};intparse_long_options_tools(int argc, char *argv[],			 const char *command_name,			 char *agent_path, int pathsize,			 const char *package,			 const char *version){	int c;	while ((c = getopt_long(argc, argv, "ih::p:",				long_options, (int *) 0)) != EOF) {		switch (c) {		case 'h':			if (argc >= optind)				print_help(argv[optind]);			else				print_help(NULL);		case 'v':			printf("%s (%s) %s\n", command_name, package, version);			printf("Copyright (C) 1998-2001, Dynamics group\n"			       "This program comes with NO WARRANTY,\n"			       "to the extent permitted by law.\n"			       "You may redistribute copies of this program\n"			       "under the terms of the GNU General Public "			       "License.\n"			       "For more information about these matters,\n"			       "see the files named COPYING.\n");			exit (0);		case 'i':			interactive = 1;			break;		case 'p':			dynamics_strlcpy(agent_path, optarg, pathsize);			break;		default:			/* Don't process any other long-named options.  */			break;		}	}	if (argc == optind)		interactive = 1;	return optind;}/* * Quit command */void cmd_quit(int argc, char *argv[]){	tool_quit();}/* * Show help */void cmd_help(int argc, char *argv[]){	struct command_item *item;	if (argc <= 1) {		printf("Available commands:\n");		for (item = commands; item != NULL; item = item->next) {			printf("%s", item->cmd);			if (item->next) printf(", ");		}		printf("\nFor more help type 'help <command>'.\n");	} else {		for (item = commands; item != NULL; item = item->next)			if (strcasecmp(argv[1], item->cmd) == 0)				break;		if (item != NULL && item->help != NULL) {			printf("Help on %s:\n", item->cmd);			printf("%s\n", item->help);		} else printf("No help available on %s.\n", argv[1]);	}}/* * Append default commands to end of the command list */void set_default_commands(void){	struct command_item *item, *p;	if ((item = malloc(sizeof(struct command_item))) != NULL) {		dynamics_strlcpy(item->cmd, "quit", CMDLEN);		item->unique = 4;		item->func = cmd_quit;		item->help = HELPTEXT_QUIT;		item->next = NULL;	} else return;	/* add to end of the list */	if (commands != NULL) {		for (p = commands;p->next != NULL; p = p->next);		p->next = item;	} else commands = item;	if ((item->next = malloc(sizeof(struct command_item))) != NULL) {		item = item->next;		dynamics_strlcpy(item->cmd, "exit", CMDLEN);		item->unique = 4;		item->func = cmd_quit;		item->help = HELPTEXT_QUIT;		item->next = NULL;	} else return;	if ((item->next = malloc(sizeof(struct command_item))) != NULL) {		item = item->next;		dynamics_strlcpy(item->cmd, "help", CMDLEN);		item->unique = 1;		item->func = cmd_help;		item->help = HELPTEXT_HELP;		item->next = NULL;	} else return;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产大陆亚洲精品国产| 91亚洲国产成人精品一区二区三| 日本一区二区综合亚洲| 91成人在线免费观看| 狠狠狠色丁香婷婷综合久久五月| 亚洲欧洲色图综合| 日韩欧美成人一区| 欧美亚洲综合久久| 国产91丝袜在线播放0| 午夜精彩视频在线观看不卡| 国产精品久久久久久福利一牛影视 | 国产在线不卡一卡二卡三卡四卡| 亚洲色图色小说| 久久久久久久久久久久电影| 欧美日韩另类国产亚洲欧美一级| 高清不卡在线观看| 久久精品国产久精国产| 亚洲成人第一页| 亚洲人成亚洲人成在线观看图片| www国产精品av| 911精品国产一区二区在线| 色综合欧美在线| 播五月开心婷婷综合| 国产一区二区导航在线播放| 五月天精品一区二区三区| 一区二区在线观看视频在线观看| 欧美极品xxx| 国产无遮挡一区二区三区毛片日本| 欧美一级艳片视频免费观看| 欧美午夜精品一区二区三区 | 国产一区在线不卡| 蜜桃av噜噜一区| 天天综合天天做天天综合| 亚洲综合色网站| 夜夜嗨av一区二区三区四季av| 亚洲柠檬福利资源导航| 中文字幕一区日韩精品欧美| 日本一区二区在线不卡| 欧美激情综合五月色丁香| 精品国产乱码久久久久久蜜臀| 日韩亚洲欧美在线观看| 欧美大片日本大片免费观看| 日韩午夜在线影院| 精品国产1区2区3区| 欧美videossexotv100| 精品国一区二区三区| 久久新电视剧免费观看| 国产视频在线观看一区二区三区| 久久久777精品电影网影网| 国产亚洲欧美色| 国产精品美女久久久久av爽李琼 | 亚洲成人免费av| 天天av天天翘天天综合网色鬼国产 | 日韩av一二三| 久久国产视频网| 国产成人在线视频网址| 懂色av中文字幕一区二区三区| 国产福利一区在线观看| 99久久国产综合精品色伊| 91激情五月电影| 91精品久久久久久久久99蜜臂| 日韩免费在线观看| 国产精品久久久久久久久动漫| 亚洲精品免费视频| 视频一区二区中文字幕| 国产一区二区导航在线播放| 成人免费毛片app| 欧美视频自拍偷拍| 欧美岛国在线观看| 国产精品嫩草影院com| 亚洲午夜激情网站| 国内精品伊人久久久久影院对白| www.日韩大片| 9191成人精品久久| 欧美国产精品一区二区| 怡红院av一区二区三区| 久久疯狂做爰流白浆xx| 成人福利视频在线| 69精品人人人人| 国产精品欧美一区二区三区| 一区二区国产盗摄色噜噜| 久久99国产精品免费网站| 波多野结衣中文字幕一区二区三区| 欧美午夜免费电影| 国产午夜精品一区二区三区嫩草 | 国产精品久久久久婷婷二区次| 一区二区三区欧美亚洲| 久久99精品久久久| 在线观看视频91| 久久久精品日韩欧美| 夜夜嗨av一区二区三区中文字幕| 国产专区欧美精品| 欧美最猛性xxxxx直播| 久久网站最新地址| 亚洲一区在线免费观看| 国产成人av电影在线播放| 欧美丝袜丝交足nylons| 国产精品国产三级国产专播品爱网 | 亚洲精品一区二区三区香蕉| 亚洲激情五月婷婷| 国产69精品久久99不卡| 欧美一级免费观看| 亚洲蜜桃精久久久久久久| 国产美女娇喘av呻吟久久| 欧美日韩一区成人| 国产精品每日更新在线播放网址| 麻豆国产精品官网| 欧美日韩一区视频| 亚洲少妇最新在线视频| 国产成人aaa| 精品成人私密视频| 日韩专区欧美专区| 在线免费一区三区| 国产精品福利电影一区二区三区四区| 日韩国产精品久久久久久亚洲| 色婷婷综合中文久久一本| 日本一区二区三区电影| 精品无人码麻豆乱码1区2区 | 久久久三级国产网站| 日韩av网站在线观看| 91极品美女在线| 亚洲欧美日韩在线播放| av午夜精品一区二区三区| 国产日韩欧美综合一区| 激情五月婷婷综合网| 欧美一级一区二区| 日本在线播放一区二区三区| 在线一区二区观看| 日韩伦理av电影| av成人免费在线| 一区视频在线播放| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品网友自拍| 99久久精品久久久久久清纯| 国产精品久久免费看| 成人av先锋影音| 中文字幕欧美一区| 色综合久久久久| 一区二区三区免费| 欧美无人高清视频在线观看| 依依成人精品视频| 欧美日韩一本到| 亚洲成人综合网站| 欧美一区二区三区思思人| 喷水一区二区三区| 精品日产卡一卡二卡麻豆| 狠狠色丁香久久婷婷综合丁香| 久久久久久久综合狠狠综合| 国产91精品欧美| 尤物av一区二区| 91精品免费观看| 国产一区二区三区四| 中文字幕 久热精品 视频在线| av一本久道久久综合久久鬼色| 亚洲欧洲精品成人久久奇米网| 日本大香伊一区二区三区| 午夜精品福利一区二区三区av | 精品国产免费人成电影在线观看四季 | 久久久久久99精品| jiyouzz国产精品久久| 亚洲免费看黄网站| 欧美精品电影在线播放| 久久国产生活片100| 国产精品三级视频| 欧美性大战久久| 精品一区二区三区在线观看国产| 国产日本一区二区| 在线观看视频欧美| 精品一区二区三区影院在线午夜| 欧美激情综合网| 欧美日韩视频在线第一区| 蜜臀av性久久久久蜜臀aⅴ| 国产色综合一区| 在线观看亚洲成人| 黑人精品欧美一区二区蜜桃| 亚洲三级在线看| 欧美成人vr18sexvr| 91美女片黄在线观看91美女| 日韩激情视频网站| 国产精品欧美极品| 欧美一区二区精美| 91女厕偷拍女厕偷拍高清| 美女网站在线免费欧美精品| 欧美极品xxx| 日韩欧美高清一区| 在线视频综合导航| 激情综合色综合久久| 一区二区三区免费| 久久精品人人做| 欧美日本精品一区二区三区| 国产999精品久久| 日韩精品国产精品| 亚洲日本一区二区三区| 精品国产一二三| 欧美三级电影在线看| 国产成人免费视频网站| 青青草97国产精品免费观看 | 久久综合五月天婷婷伊人| 91激情五月电影| 成人va在线观看|