www.pudn.com > pccp047.zip > MASTERM.C


#include 
#include 
#include"port.h" 
 
main(argc, argv) 
	int argc; 
	char **argv; 
	{ 
	int run, basereg; 
	char stopbstr[2], fpname[256], cmdstr[256], c, oldstat; 
	if(!strcmp(getenv("REMOTE"), "YES")) 
		{ 
		printf("You appear to be logged in remotely, judging by the environment\n"); 
		printf("variable REMOTE, so this is probably a very bad idea.\n"); 
		printf("Are you sure you want to run MASTERM? (y or n) --> "); 
		if(getchar()!='y') /* Note getchar() and not getch()! */ 
			{ 
			printf("n\nI didn't think so!\n"); 
			exit(99); 
			} 
		else 
			printf("y\nOK, you're the boss!\n"); 
		} 
	if((argc!=4)&&(argc!=5)) 
		{ 
		printf("USAGE: masterm    []\n"); 
		exit(1); 
		} 
	switch(argv[1][0]) 
		{ 
		case '1': 
			basereg=0x3f8; 
			break; 
		case '2': 
			basereg=0x2f8; 
			break; 
		case '3': 
		case '5': 
		case '7': 
			basereg=0x3e8; 
			break; 
		case '4': 
		case '6': 
		case '8': 
			basereg=0x2e8; 
			break; 
		default: 
			printf("Bad port number.\n"); 
			exit(2); 
		} 
	oldstat=inp(basereg+MCTLREG); 
	outp(basereg+MCTLREG, 0x03); 
	spawnlp(P_WAIT, "term", "term", argv[1], argv[2], argv[3], argv[4], NULL); 
	stopbstr[0]=argv[3][2]; 
	stopbstr[1]='\0'; 
	run=1; 
	while(run) 
		{ 
		printf("\n     Copyright (C) 1992 Peter Edward Cann, all rights reserved.\n\n"); 
		printf("     UPLOAD:  (1) Xmodem   (2) Xmodem CRC   (3) Xmodem CRC 1K   (a) ASCII\n\n"); 
		printf("     DOWNLOAD:  (4) Xmodem   (5) Xmodem CRC 1K Optional\n\n"); 
		printf("      (t, SPACE or ENTER) Terminal   (d) Terminal with Dribble\n\n"); 
		printf("                             (q) Quit\n\n             ---> "); 
		c=getch(); 
		printf("%c\n", c); 
		switch(c) 
			{ 
			case 'q': 
			case 'Q': 
				run=0; 
				break; 
			case 't': 
			case 'T': 
			case ' ': 
			case '\r': 
				if(getenv("PCCPPATH")==NULL) 
					sprintf(cmdstr, "term"); 
				else 
					sprintf(cmdstr, "%s/term", getenv("PCCPPATH")); 
				if(argc==5) 
					spawnlp(P_WAIT, cmdstr, "term", argv[1], argv[2], argv[3], argv[4], NULL); 
				else 
					spawnlp(P_WAIT, cmdstr, "term", argv[1], argv[2], argv[3], NULL); 
				break; 
			case 'd': 
			case 'D': 
				if(getenv("PCCPPATH")==NULL) 
					sprintf(cmdstr, "term"); 
				else 
					sprintf(cmdstr, "%s/term", getenv("PCCPPATH")); 
				printf("Dribble file pathname? (Blank to cancel)\n --> "); 
				gets(fpname); 
				if(!strlen(fpname)) 
					break; 
				if(argc==5) 
					spawnlp(P_WAIT, cmdstr, "term", argv[1], argv[2], argv[3], argv[4], fpname, NULL); 
				else 
					spawnlp(P_WAIT, cmdstr, "term", argv[1], argv[2], argv[3], "-", fpname, NULL); 
				break; 
			case '1': 
				if(getenv("PCCPPATH")==NULL) 
					sprintf(cmdstr, "xmodems"); 
				else 
					sprintf(cmdstr, "%s/xmodems", getenv("PCCPPATH")); 
				printf("Source file pathname? (Blank to cancel)\n --> "); 
				gets(fpname); 
				if(!strlen(fpname)) 
					break; 
				spawnlp(P_WAIT, cmdstr, "xmodems", argv[1], argv[2], stopbstr, fpname, NULL); 
				putch('\007'); 
				break; 
			case 'a': 
			case 'A': 
				if(getenv("PCCPPATH")==NULL) 
					sprintf(cmdstr, "asciis"); 
				else 
					sprintf(cmdstr, "%s/asciis", getenv("PCCPPATH")); 
				printf("Source file pathname? (Blank to cancel)\n --> "); 
				gets(fpname); 
				if(!strlen(fpname)) 
					break; 
				spawnlp(P_WAIT, cmdstr, "asciis", argv[1], argv[2], argv[3], fpname, NULL); 
				putch('\007'); 
				break; 
			case '2': 
				if(getenv("PCCPPATH")==NULL) 
					sprintf(cmdstr, "xmcrcs"); 
				else 
					sprintf(cmdstr, "%s/xmcrcs", getenv("PCCPPATH")); 
				printf("Source file pathname? (Blank to cancel)\n --> "); 
				gets(fpname); 
				if(!strlen(fpname)) 
					break; 
				spawnlp(P_WAIT, cmdstr, "xmcrcs", argv[1], argv[2], stopbstr, fpname, NULL); 
				putch('\007'); 
				break; 
			case '3': 
				if(getenv("PCCPPATH")==NULL) 
					sprintf(cmdstr, "xmcrc1ks"); 
				else 
					sprintf(cmdstr, "%s/xmcrc1ks", getenv("PCCPPATH")); 
				printf("Source file pathname? (Blank to cancel)\n --> "); 
				gets(fpname); 
				if(!strlen(fpname)) 
					break; 
				spawnlp(P_WAIT, cmdstr, "xmcrc1ks", argv[1], argv[2], stopbstr, fpname, NULL); 
				putch('\007'); 
				break; 
			case '4': 
				if(getenv("PCCPPATH")==NULL) 
					sprintf(cmdstr, "xmodemr"); 
				else 
					sprintf(cmdstr, "%s/xmodemr", getenv("PCCPPATH")); 
				printf("Target file pathname? (Blank to cancel)\n --> "); 
				gets(fpname); 
				if(!strlen(fpname)) 
					break; 
				spawnlp(P_WAIT, cmdstr, "xmodemr", argv[1], argv[2], stopbstr, fpname, NULL); 
				putch('\007'); 
				break; 
			case '5': 
				if(getenv("PCCPPATH")==NULL) 
					sprintf(cmdstr, "xmcrc1kr"); 
				else 
					sprintf(cmdstr, "%s/xmcrc1kr", getenv("PCCPPATH")); 
				printf("Target file pathname? (Blank to cancel)\n --> "); 
				gets(fpname); 
				if(!strlen(fpname)) 
					break; 
				spawnlp(P_WAIT, cmdstr, "xmcrc1kr", argv[1], argv[2], stopbstr, fpname, NULL); 
				putch('\007'); 
				break; 
			} 
		} 
	outp(basereg+MCTLREG, oldstat); 
	exit(0); 
	}