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

📄 domacro.c

📁 一个FTP工具C源码.zip. 可以完成大部分功能.
💻 C
字号:
/* * Copyright (c) 1985, 1993, 1994 *	The Regents of the University of California.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#ifndef lintstatic char sccsid[] = "@(#)domacro.c	8.3 (Berkeley) 4/2/94";#endif /* not lint */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <ctype.h>#include <signal.h>#include <stdio.h>#include <string.h>#include "ftp_var.h"voiddomacro(argc, argv)	int argc;	char *argv[];{	int i, j, count = 2, loopflg = 0;	char *cp1, *cp2, line2[200];	struct cmd *c;	if (argc < 2 && !another(&argc, &argv, "macro name")) {		printf("Usage: %s macro_name.\n", argv[0]);		code = -1;		return;	}	for (i = 0; i < macnum; ++i) {		if (!strncmp(argv[1], macros[i].mac_name, 9)) {			break;		}	}	if (i == macnum) {		printf("'%s' macro not found.\n", argv[1]);		code = -1;		return;	}	(void) strcpy(line2, line);TOP:	cp1 = macros[i].mac_start;	while (cp1 != macros[i].mac_end) {		while (isspace(*cp1)) {			cp1++;		}		cp2 = line;		while (*cp1 != '\0') {		      switch(*cp1) {		   	    case '\\':				 *cp2++ = *++cp1;				 break;			    case '$':				 if (isdigit(*(cp1+1))) {				    j = 0;				    while (isdigit(*++cp1)) {					  j = 10*j +  *cp1 - '0';				    }				    cp1--;				    if (argc - 2 >= j) {					(void) strcpy(cp2, argv[j+1]);					cp2 += strlen(argv[j+1]);				    }				    break;				 }				 if (*(cp1+1) == 'i') {					loopflg = 1;					cp1++;					if (count < argc) {					   (void) strcpy(cp2, argv[count]);					   cp2 += strlen(argv[count]);					}					break;				}				/* intentional drop through */			    default:				*cp2++ = *cp1;				break;		      }		      if (*cp1 != '\0') {			 cp1++;		      }		}		*cp2 = '\0';		makeargv();		if (margv[0] == NULL)			return;		c = getcmd(margv[0]);				if (c == (struct cmd *)-1) {			printf("?Ambiguous command\n");			code = -1;		}		else if (c == 0) {			printf("?Invalid command\n");			code = -1;		}		else if (c->c_conn && !connected) {			printf("Not connected.\n");			code = -1;		}		else {			if (verbose) {				printf("%s\n",line);			}			(*c->c_handler)(margc, margv);			if (bell && c->c_bell) {				(void) putchar('\007');			}			(void) strcpy(line, line2);			makeargv();			argc = margc;			argv = margv;		}		if (cp1 != macros[i].mac_end) {			cp1++;		}	}	if (loopflg && ++count < argc) {		goto TOP;	}}

⌨️ 快捷键说明

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