bool isIsomorphic(string s, string t)
 {
     vector<int> a,b;
     str2vec(s,a);
     str2vec(t,b);
     for(int i=0;i<s.length();i++)
     {
         if(a[i]!=b[i])
         {
             return false;
         }
     }
     return true;
 }
Exemplo n.º 2
0
/*****************************************************************************
 函 数 名  : cmd_resolve_quest
 功能描述  : 适配?字符,联想命令
 输入参数  : struct cmd_vty *vty
 输出参数  : 无
 返 回 值  : void
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2013年11月17日
    作    者   : weizengke
    修改内容   : 新生成函数

	1: 完全匹配输入时,只返回该命令的联想  2013-10-27 (未实现)

	2:bug:
		 display loopback
		 disable loopback-detect
	   >dis loop   =======> show what

*****************************************************************************/
void cmd_resolve_quest(struct cmd_vty *vty)
{
	cmd_vector_t *v;
	struct para_desc *match[CMD_MAX_MATCH_SIZE];	// matched string
	int match_size = 0;
	int i = 0;
	int nomath_pos = -1;

	/*
	1: 取pos 之前的buf
	2: 需要覆盖当前光标后的buf
	*/
	/* BEGIN: Added by weizengke, 2013/11/17 bug for left and tab*/
	memset(&(vty->buffer[vty->cur_pos]), 0 ,strlen(vty->buffer) - vty->cur_pos);
	vty->used_len = strlen(vty->buffer);
	/* END:   Added by weizengke, 2013/11/17 */

	v = str2vec(vty->buffer);
	if (v == NULL)
	{
		v = cmd_vector_init(1);
		cmd_vector_insert_cr(v);
	}
	else if (isspace((int)vty->buffer[vty->used_len - 1]))
	{
		cmd_vector_insert_cr(v);
	}


	cmd_complete_command(v, vty, match, &match_size, &nomath_pos);

	cmd_outstring("%s", CMD_ENTER);

	if (match_size) {
		for (i = 0; i < match_size; i++) {
			cmd_outstring(" %-25s%s\r\n", match[i]->para,match[i]->desc);
		}
		cmd_outprompt(vty->prompt);
		cmd_outstring("%s", vty->buffer);
	} else {

		cmd_output_missmatch(vty, nomath_pos);

		cmd_outprompt(vty->prompt);
		cmd_outstring("%s", vty->buffer);
	}

	cmd_vector_deinit(v, 0);
}
Exemplo n.º 3
0
int 
f_put (char **vec)
{
	int     append;
#ifdef	BRIDGE
	int     result;
	char  *dst;
#else
	int	    sglobbed;
	char  *bp,
			 *dst,
			 **gp,
			 **src;
	char   *freedst = NULL,
			buffer[BUFSIZ];
#endif

	append = strcmp (*vec, "append") == 0;

	if (*++vec == NULL) {
#ifdef	BRIDGE
		return NOTOK;
#else
		if (getftamline ("source: ", buffer) == NOTOK || str2vec (buffer, vec) < 1)
			return OK;
		dst = NULL;
#endif
	} else {
#ifdef	BRIDGE
		dst = *vec;
#else
		char **ap;

		for (ap = vec; *ap; ap++)
			continue;
		if (--ap != vec)
			dst = *ap, *ap = NULL;
		else
			dst = NULL;
#endif
	}
#ifndef	BRIDGE
	if (!(src = xglob (vec, 0)))
		return OK;
	sglobbed = xglobbed;

	if (dst == NULL) {
		if (getftamline ("destination: ", buffer) == NOTOK) {
			blkfree (src);
			return OK;
		}
		switch (str2vec (buffer, vec)) {
		case 0:
			break;

		case 1:
			dst = *vec;
			break;

		default:
			advise (NULLCP, "too many destinations");
			goto out;
		}
	}
	if (dst && !(dst = freedst = xglob1val (dst, 0)))
		goto out;

	if (src[1] == NULL) {
		if (interrupted)
			goto out;

		if (dst == NULL) {
			switch (realstore) {
			case RFS_UNIX:
				if (dst = rindex (*src, '/'))
					dst++;
				if (dst == NULL || *dst == NULL)
					dst = *src;
				break;

			default:
				dst = *src;
				break;
			}
			dst = str2file (dst);

ask_it:
			;
			if (query)
				switch (ask ("%s %s %s", append ? "append" : "put", *src,
							 dst)) {
				case NOTOK:
					goto out;

				case OK:
				default:
					break;

				case DONE:
					goto out;
				}
		} else
			switch (realstore) {
			case RFS_UNIX:
				if (isdir (dst, NULLCP, 1) == NOTOK)
					break;
#ifdef apollo
				if (*dst == '/')
					 sprintf (bp = buffer, "%s", dst);
				else
#endif
					 sprintf (bp = buffer, "%s/", dst);
				bp += strlen (bp);
				if (dst = rindex (*src, '/'))
					dst++;
				if (dst == NULL || *dst == NULL)
					dst = *src;
				 strcpy (bp, dst);
				dst = buffer;
				goto ask_it;

			default:
				break;
			}

		dst = str2file (dst);
		 put (*src, dst, append);
		goto out;
	}

	switch (realstore) {
	case RFS_UNKNOWN:
		advise (NULLCP, "%s", rs_unknown);
		goto out;

	case RFS_UNIX:
		if (dst)
#ifdef apollo
			if (*(bp = str2file (dst)) == '/') {
				 strcpy (buffer, bp);
				bp = buffer;
			} else
#endif
				 sprintf (bp = buffer, "%s/", str2file (dst));
		else if (rcwd)
			 sprintf (bp = buffer, "%s", str2file (""));
		else
			 strcpy (bp = buffer, "./");
		bp += strlen (bp);
		break;

	default:
		advise (NULLCP, "%s", rs_support);
		goto out;
	}

	if (isdir (str2file (buffer), NULLCP, 0) == NOTOK)
		goto out;

	for (gp = src; *gp && !interrupted; gp++) {
		switch (realstore) {
		case RFS_UNIX:
			if (dst = rindex (*gp, '/'))
				dst++;
			if (dst == NULL || *dst == NULL)
				dst = *gp;
			break;

		default:
			dst = *gp;
			break;
		}
		 strcpy (bp, dst);
		dst = str2file (buffer);

		if (sglobbed) {
			if (query)
				switch (ask ("%s %s %s", append ? "append" : "put", *gp, dst)) {
				case NOTOK:
					continue;

				case OK:
				default:
					break;

				case DONE:
					goto out;
				}
			else
				advise (NULLCP, "%s %s %s", append ? "append" : "put", *gp,
						dst);
		}

		 put (*gp, dst, append);

		if (ftamfd == NOTOK)
			break;
	}

out:
	;
	blkfree (src);
	if (freedst)
		free (freedst);

	return OK;
#else
	result = put (dst, append);
	return result;
#endif
}
Exemplo n.º 4
0
/*****************************************************************************
 函 数 名  : cmd_resolve_enter
 功能描述  : 适配回车执行命令行
 输入参数  : struct cmd_vty *vty
 输出参数  : 无
 返 回 值  : void
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2013年11月17日
    作    者   : weizengke
    修改内容   : 新生成函数

bugs:
	1:	display loopback-detect brief
		display loopback brief

		<Jungle-config>dis loop brief
		Command 'dis loop brief ' anbigous follow:
		 brief                     brief
		<Jungle-config>

	2:
		display loopback-detect brief
		display loopback brief
		disable loopback-detect

		<Jungle-config>dis loopback
		Command 'dis loopback' anbigous follow:
		 loopback                  loopback-detect
		<Jungle-config>

*****************************************************************************/
void cmd_resolve_enter(struct cmd_vty *vty)
{
	struct para_desc *match[CMD_MAX_MATCH_SIZE];	// matched string
	int match_size = 0;

	int match_type = CMD_NO_MATCH;
	cmd_vector_t *v;

	int i = 0;
	int nomath_pos = -1;

	//printf("enter(%d %d %s)\r\n", vty->used_len, vty->buf_len, vty->buffer);

	v = str2vec(vty->buffer);
	if (v == NULL) {
		cmd_outstring("%s", CMD_ENTER);
		cmd_outprompt(vty->prompt);
		return;
	}

	/* BEGIN: Added by weizengke, 2013/10/5   PN:for cmd end with <CR> */
	cmd_vector_insert_cr(v);
	/* END:   Added by weizengke, 2013/10/5   PN:None */

	cmd_outstring("%s", CMD_ENTER);

	// do command
	match_type = cmd_execute_command(v, vty, match, &match_size, &nomath_pos);
	// add executed command into history
	cmd_vty_add_history(vty);

	if (match_type == CMD_NO_MATCH)
	{
		cmd_output_missmatch(vty, nomath_pos);
	}
	else if (match_type == CMD_ERR_ARGU)
	{
		cmd_outstring("Too Many Arguments");
		cmd_outstring("%s", CMD_ENTER);
	}

	if (match_type == CMD_ERR_AMBIGOUS)
	{
		if (match_size)
		{
			cmd_outstring("Command '%s' anbigous follow:", vty->buffer);
			cmd_outstring("%s", CMD_ENTER);
			for (i = 0; i < match_size; i++)
			{
				if (ANOTHER_LINE(i))
					cmd_outstring("%s", CMD_ENTER);
				cmd_outstring(" %-25s", match[i]->para);
			}
			cmd_outstring("%s", CMD_ENTER);
			/* del 10-29
			cmd_outprompt(vty->prompt);
			cmd_outstring("%s", vty->buffer);
			*/
			vty->cur_pos = vty->used_len = 0;
			memset(vty->buffer, 0, vty->buf_len);
			cmd_outprompt(vty->prompt);
		}
	}
	else
	{
		// ready for another command
		vty->cur_pos = vty->used_len = 0;
		memset(vty->buffer, 0, vty->buf_len);
		cmd_outprompt(vty->prompt);
	}
}
Exemplo n.º 5
0
/*****************************************************************************
 函 数 名  : cmd_resolve_tab
 功能描述  : 适配TAB键,命令补全
 输入参数  : struct cmd_vty *vty
 输出参数  : 无
 返 回 值  : void
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2013年11月17日
    作    者   : weizengke
    修改内容   : 新生成函数

*****************************************************************************/
void cmd_resolve_tab(struct cmd_vty *vty)
{
	int i;
	cmd_vector_t *v;
	struct para_desc *match[CMD_MAX_MATCH_SIZE] = {0};	// matched string
	int match_size = 0;
	int match_type = CMD_NO_MATCH;
	int isNeedMatch = 1;   /* 非TAB场景(无空格),不需要匹配 */
	char lcd_str[1024] = {0};	// if part match, then use this
	char *last_word = NULL;


	/*
	1: 取pos 之前的buf
	2: 需要覆盖当前光标后的buf
	*/
	/* BEGIN: Added by weizengke, 2013/11/17 bug for left and tab*/
	memset(&(vty->buffer[vty->cur_pos]), 0 ,strlen(vty->buffer) - vty->cur_pos);
	vty->used_len = strlen(vty->buffer);
	/* END:   Added by weizengke, 2013/11/17 */

	if (g_InputMachine_prev == CMD_KEY_CODE_TAB)
	{
		cmd_delete_word(vty);
		cmd_insert_word(vty, g_tabbingString);
	}
	else
	{
		memset(g_tabString,0,sizeof(g_tabString));
		g_tabStringLenth = 0;
	}

	v = str2vec(vty->buffer);
	if (v == NULL)
	{
		/*
		v = cmd_vector_init(1);
		cmd_vector_insert(v, '\0');
		*/
		isNeedMatch = 0;
	}

	if (isspace((int)vty->buffer[vty->used_len - 1]))
	{
		isNeedMatch = 0;
	}

	if (1 == isNeedMatch && NULL != v)
	{
		match_type = cmd_match_command(v, vty, match, &match_size, lcd_str);

		last_word = (char*)cmd_vector_slot(v, cmd_vector_max(v) - 1);

		if (g_InputMachine_prev != CMD_KEY_CODE_TAB)
		{
			strcpy(g_tabbingString, last_word);
		}

		cmd_vector_deinit(v, 1);
	}

	cmd_outstring("%s", CMD_ENTER);
	switch (match_type) {
		case CMD_NO_MATCH:
			cmd_outprompt(vty->prompt);
			cmd_outstring("%s", vty->buffer);
			break;
		case CMD_FULL_MATCH:
			cmd_delete_word(vty);
			if (NULL != match[0])
			{
				cmd_insert_word(vty, match[0]->para);
			}
			/* BEGIN: Added by weizengke, 2013/10/14 for full match then next input*/
			cmd_insert_word(vty, " ");
			/* END:   Added by weizengke, 2013/10/14 */
			cmd_outprompt(vty->prompt);
			cmd_outstring("%s", vty->buffer);

			/* BEGIN: Added by weizengke, 2013/10/27 PN: fix the bug of CMD_FULL_MATCH and then continue TAB*/
			memset(g_tabString,0,sizeof(g_tabString));
			memset(g_tabbingString,0,sizeof(g_tabbingString));
			g_tabStringLenth = 0;
			/* END:   Added by weizengke, 2013/10/27 */

			break;
		case CMD_PART_MATCH:
			/*  delete at 2013-10-05, CMD_PART_MATCH will never reach, CMD_LIST_MATCH instead.

				case like this:
					disable , display
					>di  TAB
					>dis  ==> CMD_PART_MATCH
			*/
			cmd_delete_word(vty);
			cmd_insert_word(vty, lcd_str);
			cmd_outprompt(vty->prompt);
			cmd_outstring("%s", vty->buffer);
			break;
		case CMD_LIST_MATCH:

			if (g_InputMachine_prev != CMD_KEY_CODE_TAB)
			{
				memset(g_tabString,0,sizeof(g_tabString));
				strcpy(g_tabString, match[0]->para);
				g_tabStringLenth = strlen(g_tabString);

				/* cmd_outstring("%s", CMD_ENTER); */
			}
			else
			{
				for (i = 0; i < match_size; i++)
				{
					if (0 == strcmp(g_tabString, match[i]->para))
					{
						break;
					}
				}

				if (i == match_size)
				{
					debug_print_ex(CMD_DEBUG_TYPE_ERROR, "TAB for completing command. bug of tab continue. (g_tabString=%s)", g_tabString);
				}

				i++;

				if (i == match_size)
				{
					i = 0;
				}

				memset(g_tabString,0,sizeof(g_tabString));
				strcpy(g_tabString, match[i]->para);
				g_tabStringLenth = strlen(g_tabString);

			}

			/*for (i = 0; i < match_size; i++) {
				if (ANOTHER_LINE(i))
					cmd_outstring("%s", CMD_ENTER);
				cmd_outstring("%-25s", match[i]->para);
			}
			*/

			cmd_delete_word(vty);
			cmd_insert_word(vty, g_tabString);

			cmd_outprompt(vty->prompt);
			cmd_outstring("%s", vty->buffer);
			break;
		default:
			break;
	}
}