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

📄 minicom.c

📁 小型通讯程序的C语言源程序的C语言源程序库
💻 C
📖 第 1 页 / 共 2 页
字号:
 	while(*bufp) { 		for(s = bufp; !isspace(*bufp) && *bufp; bufp++) 			; 		args[argk++] = s; 		while(isspace(*bufp)) *bufp++ = 0; 	}  }  env_args = argk;  /* Add command - line options */  for(c = 1; c < argc; c++) args[argk++] = argv[c];  args[argk] = CNULL;  do {	/* Process options with getopt */	while((c = getopt(argk, args, "hlsomc:a:t:")) != EOF) switch(c) {  		case 's': /* setup */  			if (real_uid != 0) {		fprintf(stderr, "minicom: -s switch needs root privilige\n");				exit(1);			}  			dosetup = 1;  			break;		case 'h':			helpthem();			exit(1);			break;  		case 'm': /* metakey */  			alt_override++;  			break;		case 'l': /* Literal ANSI chars */			literal++;			break;		case 't': /* Terminal type */			strcpy(termtype, optarg);			break;  		case 'o': /* DON'T initialize */ 	 		doinit = 0;  			break;  		case 'c': /* Color on/off */  			if (strcmp("on", optarg) == 0) {  				usecolor = 1;  				stdattr = A_BOLD;  				break;  			}  			if (strcmp("off", optarg) == 0) {  				usecolor = 0;  				stdattr = A_NORMAL;  				break;  			}  			usage(env_args, optind - 1, mc);  			break;  		case 'a': /* Attributes on/off */  			if (strcmp("on", optarg) == 0) {  				useattr = 1;  				break;  			}  			if (strcmp("off", optarg) == 0) {  				useattr = 0;  				break;  			}  			usage(env_args, optind - 1, mc);  			break;  		default:  			usage(env_args, optind, mc);  			break;  	}  	/* Now, get portname if mentioned. Stop at end or '-'. */ 	while(optind < argk && args[optind][0] != '-')  		use_port = args[optind++];    /* Loop again if more options */  } while(optind < argk);  if (real_uid == 0 && dosetup == 0) {	fprintf(stderr, "%s%s%s",  "minicom: WARNING: please don't run minicom as root when not maintaining\n",  "                  it (with the -s switch) since all changes to the\n",  "                  configuration will be GLOBAL !.\n");	sleep(5);  }  /* Avoid fraude ! */	  for(s = use_port; *s; s++) if (*s == '/') *s = '_';  sprintf(parfile, "%s/minirc.%s", LIBDIR, use_port);  /* Get password file information of this user. */  if ((pwd = getpwuid(real_uid)) == (struct passwd *)0) {  	fprintf(stderr, "You don't exist. Go away.\n");  	exit(1);  }  /* Remember home directory and username. */  if ((s = getenv("HOME")) == CNULL)	strcpy(homedir, pwd->pw_dir);  else	strcpy(homedir, s);  strcpy(username, pwd->pw_name);  /* Get personal parameter file */  sprintf(pparfile, "%s/.minirc.%s", homedir, use_port);  /* Check this user in the USERFILE */  if (real_uid != 0) {  	sprintf(userfile, "%s/minicom.users", LIBDIR);	if ((fp = fopen(userfile, "r")) != (FILE *)0) {		while(fgets(buf, 70, fp) != CNULL && !userok) {			/* Read first word */			bufp = buf;			s = getword(&bufp);			/* See if the "use_port" matches */			if (s && !strcmp(pwd->pw_name, s)) {				if ((s = getword(&bufp)) == CNULL)					userok = 1;				else do {					if (!strcmp(s, use_port)) {						userok = 1;						break;					}				} while((s = getword(&bufp)) != CNULL);			}		}		fclose(fp);		if (!userok) {			fprintf(stderr,   "Sorry %s. You are not allowed to use configuration %s.\n",				pwd->pw_name, use_port);			exit(1);		}	}  }  buf[0] = 0;  read_parms();  stdwin = NIL_WIN; /* It better be! */  if (!dosetup && open_term(doinit) < 0) exit(1);#ifdef _SECURE  /* After open /dev/tty..., we can run setgid uucp instead of setuid root.   * We have to run setgid uucp to be able to create lockfiles, and   * to execute the callin and callout programs.   * To do this, minicom should be installed setuid root/setgid uucp.   */  if (real_uid != 0 && geteuid() == 0 && getegid() != real_gid)  	setuid(real_uid);#endif  mc_setenv("TERM", termtype);  if (win_init(SFG, SBG, A_NORMAL) < 0) leave("");  if (COLS < 40 || LINES < 10) {  	leave("Sorry. Your screen is too small.\n");  }  if (dosetup) {  	if (config(1)) {  		wclose(stdwin, 1);  		exit(0);  	}  	if (open_term(doinit) < 0) exit(1);  }  /* Signal handling */  for(c = 1; c <= _NSIG; c++) {#ifdef SIGCLD /* Better not mess with those */	if (c == SIGCLD) continue;#endif#ifdef SIGCHLD	if (c == SIGCHLD) continue;#endif	signal(c, hangsig);  }  signal(SIGHUP, SIG_IGN);  signal(SIGINT, SIG_IGN);  signal(SIGQUIT, SIG_IGN);  signal(SIGPIPE, SIG_IGN);#ifdef SIGTSTP  signal(SIGTSTP, SIG_IGN);  signal(SIGTTIN, SIG_IGN);  signal(SIGTTOU, SIG_IGN);#endif#ifdef SIGTINT	signal(SIGTINT, SIG_IGN);#endif#ifdef SIGWINCH  signal(SIGWINCH, change_size);#endif#if DEBUG  for(c = 1; c < _NSIG; c++) {	if (c == SIGTERM) continue; /* Saviour when hung */	signal(c, signore);  }#endif  keyboard(KINSTALL, 0);  if (strcmp(P_BACKSPACE, "BS") != 0) 	keyboard(KSETBS, P_BACKSPACE[0] == 'B' ? 8 : 127);  if (alt_override)	keyboard(KSETESC, 128);  else if (strcmp(P_ESCAPE, "^A") != 0)	keyboard(KSETESC, P_ESCAPE[0] == '^' ? P_ESCAPE[1] & 31 : 128);  st = NIL_WIN;  us = NIL_WIN;  init_emul(VT100);   if (doinit) modeminit();   wputs(us, "\nMinicom 1.5 Beta Copyright (c) 1993 Miquel van Smoorenburg\r\n");  wprintf(us, "\nPress %sZ for help on special keys\r\n\n", esc_key());  readdialdir();  /* The main loop calls do_terminal and gets a function key back. */  do {	c = do_terminal();dirty_goto:		switch(c + 32 *(c >= 'A' && c <= 'Z')) {		case 'a': /* Add line feed */			addlf = !addlf;			vt_set(addlf, -1, NULL, -1, -1, -1, -1);			s = addlf ? "Add linefeed ON" : "Add linefeed OFF";			werror(s);			break;#if _SELECT		case 'e': /* Local echo on/off. */			local_echo = !local_echo;			vt_set(-1, -1, NULL, -1, -1, local_echo, -1);			s = local_echo ? "Local echo ON" : "Local echo OFF";			werror(s);			break;#endif		case 'z': /* Help */			c = help();			if (c != 'z') goto dirty_goto;			break;		case 'c': /* Clear screen */			winclr(us);			break;			case 'f': /* Send break */			sendbreak();			break;#if HISTORY		case 'b': /* Scroll back */			scrollback();			break;#endif		case 'm': /* Initialize modem */			modeminit();			break;			case 'q': /* Exit without resetting */			c = ask("Leave without reset?", c1);			if (c == 0) quit = NORESET;			break;		case 'x': /* Exit Minicom */			c = ask("Leave Minicom?", c1);			if (c == 0) {				quit = RESET;				if(online >= 0)					do_hang(0);				modemreset();	 			}			break;		case 'l': /* Capture file */			if (capfp == (FILE *)0 && !docap) {				s = input("Capture to which file? ", capname);				if (s == CNULL || *s == 0) break;				if ((c = waccess(s)) < 0 ||				    (capfp = fopen(s, "a")) == (FILE *)NULL) {					werror("Cannot open capture file");					break;				} else if (c == A_OK_NOTEXIST)#ifndef DEBUG#ifndef HAS_FCHOWN						/* FIXME: should use fchown */						chown(s, real_uid, real_gid);#else						fchown(fileno(capfp), real_uid,								real_gid);#endif#endif				docap = 1;			} else if (capfp != (FILE *)0 && !docap) {				c = ask("Capture file", c3);				if (c == 0) {					fclose(capfp);					capfp = (FILE *)NULL;					docap = 0;				}				if (c == 1) docap = 1;			} else if (capfp != (FILE *)0 && docap) {				c = ask("Capture file", c2);				if (c == 0) {					fclose(capfp);					capfp = (FILE *)NULL;					docap = 0;				}				if (c == 1) docap = 0;			}			vt_set(addlf, linewrap, capfp, docap, -1, -1, -1);			break;		case 'p': /* Set parameters */			get_bbp(P_BAUDRATE, P_BITS, P_PARITY);			m_setparms(portfd, P_BAUDRATE, P_PARITY, P_BITS);			if (st != NIL_WIN) mode_status();			quit = 0;			break;		case 'k': /* Run kermit */			kermit();			break;		case 'h': /* Hang up */			do_hang(1);			break;		case 'd': /* Dial */			dialdir();			break;				case 't': /* Terminal emulation */			c = wselect(13, 3, c8, NIL_FUNLIST,				"Emulation", stdattr, MFG, MBG);			if (c > 0) init_emul(c);			break;		case 'w': /* Line wrap on-off */				if (linewrap < 0) linewrap = 0;			linewrap = !linewrap;			vt_set(addlf, linewrap, capfp, docap, -1, -1, -1);			s = linewrap ? "Linewrap ON" : "Linewrap OFF";			werror(s);			break;		case 'o': /* Configure Minicom */			(void) config(0);			break;		case 's': /* Upload */			updown('U');			break;		case 'r': /* Download */			updown('D');			break;			case 'j': /* Jump to a shell */			shjump();			break;		case 'g': /* Run script */				runscript(1, "", "", "");			break;		case 'i': /* Re-init, re-open portfd. */			cursormode = (cursormode == NORMAL) ? APPL : NORMAL;			keyboard(cursormode == NORMAL ? KCURST : KCURAPP, 0);			if (st) curs_status();			break;		default:			break;	}  } while(!quit);  /* Reset parameters */  if (quit != NORESET)	m_restorestate(portfd);  else	m_hupcl(portfd, 0);  if (capfp != (FILE *)0) fclose(capfp);  wclose(us, 0);  wclose(st, 0);  wclose(stdwin, 1);  keyboard(KUNINSTALL, 0);  if (lockfile[0]) unlink(lockfile);  close(portfd);  chown(P_PORT, portuid, portgid);  if (quit != NORESET && P_CALLIN[0])	(void) fastsystem(P_CALLIN, CNULL, CNULL, CNULL);  return(0);}

⌨️ 快捷键说明

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