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

📄 uux.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#include "uucp.h"#include "uucpdefs.h"#define NOSYSPART 0#define HASSYSPART 1#define APPCMD(d) {\char *p;\for (p = d; *p != '\0';) *cmdp++ = *p++;\*cmdp++ = ' ';\*cmdp = '\0';}#define GENSEND(f, a, b, c, d) {\fprintf(f, "S %s %s %s - %s 0666\n", a, b, c, d);\}#define GENRCV(f, a, b, c) {\fprintf(f, "R %s %s %s - \n", a, b, c);\}/* *	 */main(argc, argv)char *argv[];{	char cfile[NAMESIZE];	/* send commands for files from here */	char dfile[NAMESIZE];	/* used for all data files from here */	char rxfile[NAMESIZE];	/* to be sent to xqt file (X. ...) */	char tfile[NAMESIZE];	/* temporary file name */	char tcfile[NAMESIZE];	/* temporary file name */	char t2file[NAMESIZE];	/* temporary file name */	int cflag = 0;		/*  commands in C. file flag  */	int rflag = 0;		/*  C. files for receiving flag  */	char buf[BUFSIZ];	char inargs[BUFSIZ];	int pipein = 0;	int startjob = 1;	char path[MAXFULLNAME];	char cmd[BUFSIZ];	char *ap, *cmdp;	char prm[BUFSIZ];	char syspart[8], rest[MAXFULLNAME];	char xsys[8], local[8];	FILE *fprx, *fpc, *fpd, *fp;	FILE *xqtstr();	extern char *getprm(), *index(), *lastpart();	int uid, ret;	char redir = '\0';	Debug = 0;	Ofn = 1;	Ifn = 0;	while (argc>1 && argv[1][0] == '-') {		switch(argv[1][1]){		case 'p':		case '\0':			pipein = 1;			break;		case 'r':			startjob = 0;			break;		case 'x':			Debug = atoi(&argv[1][2]);			if (Debug <= 0)				Debug = 1;			break;		default:			sprintf(stderr, "unknown flag %s\n", argv[1]);				break;		}		--argc;  argv++;	}	DEBUG(4, "\n\n** %s **\n", "START");	inargs[0] = '\0';	for (argv++; argc > 1; argc--) {		DEBUG(4, "arg - %s:", *argv);		strcat(inargs, " ");		strcat(inargs, *argv++);	}	DEBUG(4, "arg - %s\n", inargs);	ret = gwd(Wrkdir);	ASSERT(ret == 0, "GWD FAILED %d", ret);	chdir(Spool);	uid = getuid();	guinfo(uid, User, path);	sprintf(local, "%.7s", Myname);	cmdp = cmd;	*cmdp = '\0';	gename(DATAPRE, local, 'X', rxfile);	fprx = fopen(rxfile, "w");	ASSERT(fprx != NULL, "CAN'T OPEN %s", rxfile);	chmod(rxfile, 0666);	gename(DATAPRE, local, 'T', tcfile);	fpc = fopen(tcfile, "w");	ASSERT(fpc != NULL, "CAN'T OPEN %s", tcfile);	chmod(tcfile, 0666);	fprintf(fprx, "%c %s %s\n", X_USER, User, local);	/* find remote system name */	ap = inargs;	while ((ap = getprm(ap, prm)) != NULL) {		if (prm[0] == '>' || prm[0] == '<') {			ap = getprm(ap, prm);			continue;		}		if (prm[0] == ';') {			APPCMD(prm);			continue;		}		split(prm, xsys, rest);		if (xsys[0] == '\0')			strcpy(xsys, local);		break;	}	DEBUG(4, "xsys %s\n", xsys);	if (versys(xsys) != 0) {		/*  bad system name  */		fprintf(stderr, "bad system name: %s\n", xsys);		fclose(fprx);		fclose(fpc);		unlink(rxfile);		unlink(tcfile);		cleanup(101);	}	if (pipein) {		gename(DATAPRE, xsys, 'B', dfile);		fpd = fopen(dfile, "w");		ASSERT(fpd != NULL, "CAN'T OPEN %s", dfile);		chmod(dfile, 0666);		while (fgets(buf, BUFSIZ, stdin) != NULL)			fputs(buf, fpd);		fclose(fpd);		if (strcmp(local, xsys) != SAME) {			GENSEND(fpc, dfile, dfile, User, dfile);			cflag++;		}		fprintf(fprx, "%c %s\n", X_RQDFILE, dfile);		fprintf(fprx, "%c %s\n", X_STDIN, dfile);	}	/* parse command */	ap = inargs;	while ((ap = getprm(ap, prm)) != NULL) {		DEBUG(4, "prm - %s\n", prm);		if (prm[0] == '>' || prm[0] == '<') {			redir = prm[0];			continue;		}		if (prm[0] == '|' || prm[0] == '^') {			if (cmdp != cmd)				APPCMD(prm);			continue;		}		/* process command or file or option */		ret = split(prm, syspart, rest);		DEBUG(4, "s - %s, ", syspart);		DEBUG(4, "r - %s, ", rest);		DEBUG(4, "ret - %d\n", ret);		if (syspart[0] == '\0')			strcpy(syspart, local);		if (cmdp == cmd && redir == '\0') {			/* command */			APPCMD(rest);			continue;		}		/* process file or option */		DEBUG(4, "file s- %s, ", syspart);		DEBUG(4, "local - %s\n", local);		/* process file */		if (redir == '>') {			if (rest[0] != '~')				expfile(rest);			fprintf(fprx, "%c %s %s\n", X_STDOUT, rest,			 syspart);			redir = '\0';			continue;		}		if (ret == NOSYSPART) {			/* option */			APPCMD(rest);			continue;		}		if (strcmp(xsys, local) == SAME		 && strcmp(xsys, syspart) == SAME) {			expfile(rest);			if (redir == '<')				fprintf(fprx, "%c %s\n", X_STDIN, rest);			else				APPCMD(rest);			redir = '\0';			continue;		}		if (strcmp(syspart, local) == SAME) {			/*  generate send file */			expfile(rest);			gename(DATAPRE, xsys, 'A', dfile);			if (redir == '<') {				fprintf(fprx, "%c %s\n", X_STDIN, dfile);			}			DEBUG(4, "rest %s\n", rest);			if (chkpth(User, "", rest) != 0) {				fprintf(stderr, "permission denied %s\n", rest);				cleanup(1);			}			if (xcp(rest, dfile) != 0)				cleanup(1);			GENSEND(fpc, rest, dfile, User, dfile);			cflag++;			fprintf(fprx, "%c %s %s\n", X_RQDFILE,			 dfile, lastpart(rest));			if (redir != '<')				APPCMD(lastpart(rest));			redir = '\0';			continue;		}		if (strcmp(local, xsys) == SAME) {			/*  generate local receive  */			gename(CMDPRE, syspart, 'R', tfile);			strcpy(dfile, tfile);			dfile[0] = DATAPRE;			fp = fopen(tfile, "w");			ASSERT(fp != NULL, "CAN'T OPEN %s", tfile);			chmod(tfile, 0666);			expfile(rest);			GENRCV(fp, rest, dfile, User);			fclose(fp);			rflag++;			fprintf(fprx, "%c %s %s\n", X_RQDFILE, dfile,			  lastpart(rest));			if (rest[0] != '~')				expfile(rest);			if (redir == '<')				fprintf(fprx, "%c %s\n", X_STDIN, dfile);			else				APPCMD(lastpart(rest));			redir = '\0';			continue;		}		if (strcmp(syspart, xsys) != SAME) {			/* generate remote receives */			gename(DATAPRE, syspart, 'R', dfile);			strcpy(tfile, dfile);			tfile[0] = CMDPRE;			fpd = fopen(dfile, "w");			ASSERT(fpd != NULL, "CAN'T OPEN %s", dfile);			chmod(dfile, 0666);			gename(DATAPRE, xsys, 'T', t2file);			GENRCV(fpd, rest, t2file, User);			fclose(fpd);			GENSEND(fpc, dfile, tfile, User, dfile);			cflag++;			fprintf(fprx, "%c %s %s\n", X_RQDFILE, t2file,			  lastpart(rest));			if (redir == '<')				fprintf(fprx, "%c %s\n", X_STDIN, t2file);			else				APPCMD(lastpart(rest));			redir = '\0';			continue;		}		/* file on remote system */		if (rest[0] != '~')			expfile(rest);		if (redir == '<')			fprintf(fprx, "%c %s\n", X_STDIN, rest);		else			APPCMD(rest);		redir = '\0';		continue;	}	fprintf(fprx, "%c %s\n", X_CMD, cmd);	fclose(fprx);	strcpy(tfile, rxfile);	tfile[0] = XQTPRE;	if (strcmp(xsys, local) == SAME) {		link(rxfile, tfile);		unlink(rxfile);		if (startjob)			if (rflag)				xuucico("");			else				xuuxqt();	}	else {		GENSEND(fpc, rxfile, tfile, User, rxfile);		cflag++;	}	fclose(fpc);	if (cflag) {		gename(CMDPRE, xsys, 'A', cfile);		link(tcfile, cfile);		unlink(tcfile);		if (startjob)			xuucico(xsys);		cleanup(0);	}	else		unlink(tcfile);}cleanup(code)int code;{	rmlock(NULL);	DEBUG(1, "exit code %d\n", code);	exit(code);}

⌨️ 快捷键说明

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