亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? updown.c

?? minicom2.0源代碼
?? C
字號:
/* * updown.c	Routines to do up and downloading by calling external *		programs (sz, rz, kermit). * *		This file is part of the minicom communications package, *		Copyright 1991-1995 Miquel van Smoorenburg. * *		This program is free software; you can redistribute it and/or *		modify it under the terms of the GNU General Public License *		as published by the Free Software Foundation; either version *		2 of the License, or (at your option) any later version. * * jl 13.09.97	pass actual terminal lines (LINES - statusline) *		to runscript in environment variable TERMLIN * jl 16.09.97	logging of sz/rz file transfers * jl 29.09.97	fix on the transfer logging * hgk&jl 2.98	filename selection window * acme 25.02.98 i18n * js&jl 04.98	the better filename selection window */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include "rcsid.h"RCSID("$Id: updown.c,v 1.5 2001/07/04 14:43:25 kloczek Exp $")#include "port.h"#include "minicom.h"#include "intl.h"/*#define LOG_XFER	  debugging option to log all output of rz/sz */static int udpid;/* * Change to a directory. */static int mcd(dir)char *dir;{  char buf[256];  char err[50];  static char odir[256];  static int init = 0;  if (!init) {  	if (*dir == 0) return(0);  	init = 1;#if defined (_COH3) || defined(NeXT)	getwd(odir);#else  	getcwd(odir, 255);#endif  }  if (*dir == 0) {  	chdir(odir);  	return(0);  }    if(*dir != '/') {  	snprintf(buf, sizeof(buf), "%s/%s", homedir, dir);  	dir = buf;  }  if (chdir(dir) < 0) {  	/* This may look safe but you might I8N change the string! so  	   snprintf it */  	snprintf(err, sizeof(err),  _("Cannot chdir to %.30s"), dir);  	werror("%s", err);  	return(-1);  }  return(0);}/* * Catch the CTRL-C signal. *//*ARGSUSED*/static void udcatch(dummy)int dummy;{  (void)dummy;  signal(SIGINT, udcatch);  if (udpid) kill((pid_t)udpid, SIGKILL);}/* * Translate %b to the current bps rate, and *           %l to the current tty port. *           %f to the serial port file descriptor */static char *translate(s)char *s;{  static char buf[128];  char str_portfd[8];     /* kino */  int i;  for(i = 0; *s && i < 127; i++, s++) {  	if (*s != '%') {  		buf[i] = *s;  		continue;  	}  	switch(*++s) {  		case 'l':  			strncpy(buf + i, dial_tty, sizeof(buf)-i);  			i += strlen(dial_tty) - 1;  			break;  		case 'b':  			strncpy(buf + i, P_BAUDRATE, sizeof(buf)-i);  			i += strlen(P_BAUDRATE) - 1;  			break; 		case 'f':		  	sprintf(str_portfd, "%d", portfd);                        strncpy(buf + i, str_portfd, sizeof(buf)-i);                        i += strlen(str_portfd) - 1;                        break;  		default:  			buf[i++] = '%';  			buf[i] = *s;  			break;  	}  }  buf[i] = 0;  return(buf);}/* * Trim the leading & trailing whitespaces from the string * jl 15.09.97 */char *trim(char *outstring, char *instring, int n){  char *p;  char *ip;  char *op;  char *np;  ip = instring;  np = ip + n;  while ((*ip <= ' ') && (ip < np)) ip++;  op = outstring;  np = op + n;  while ((*ip >= ' ') && (op <= np)) {    *op = *ip;    ip++;    op++;  }  if (op<np)    *op = 0;  while ((op > outstring) && (*op <= ' ')) {    *op = 0;    op--;  }  p = outstring;  return(p);}  /* * Choose from numerous up and download protocols! */void updown(what, nr)int what;int nr;{#ifdef LOG_XFER  #warning LOG_XFER defined!  FILE *xfl;#endif  char *name[13];  int idx[13];  int r, f, g = 0;  char *t = what == 'U' ? _("Upload") : _("Download");  char buf[160];  char buffirst[20];  char xfrstr[160] = "";  char trimbuf[160] = "";  char title[64];  char *s ="";  int pipefd[2];  int n, status;  char cmdline[128];  WIN *win = (WIN *)NULL;#if VC_MUSIC  _PROTO(void music, (void));#endif  if (mcd(what == 'U' ? P_UPDIR : P_DOWNDIR) < 0)  	return;  /* Automatic? */  if (nr == 0) {	for(f = 0; f < 12; f++) {  		if (P_PNAME(f)[0] && P_PUD(f) == what) {  			name[g] = P_PNAME(f);  			idx[g++] = f;  		}	}	name[g] = CNULL;	if (g == 0) return;	r = wselect(30, 7, name, NIL_FUNLIST, t, stdattr, mfcolor, mbcolor) - 1;	if (r < 0) return;	g = idx[r];  } else g = nr;  buf[0] = 0;/* jseymour file selector with choice of dir on zmodem, etc. download */#if 1  {	int multiple; /* 0:only directory, 1:one file, -1:any number */		if(P_MUL(g)=='Y') {	    /* need file(s), or just a directory? */	    multiple = what == 'U'? -1 : 0;	}	else {	    multiple = 1;	/* only one allowed */	}	if (P_FSELW[0] == 'Y' && (what == 'U' || P_ASKDNDIR[0] == 'Y')) {	  s = filedir(multiple, what == 'U'? 0 : 1);	  if (s == NULL)	    return;	}	else if (P_PNN(g) == 'Y') {	  s = input(_("Please enter file names"), buf);	  if (s == NULL)	    return;	}	/* discard directory if "multiple" == 0 */	snprintf(cmdline, sizeof(cmdline), "%s %s", P_PPROG(g), multiple == 0? "" : s);  }#endif  if (P_LOGXFER[0] == 'Y')    do_log("%s", cmdline);   /* jl 22.06.97 */  if (P_PFULL(g) == 'N') {    win = wopen(10, 7, 70, 13, BSINGLE, stdattr, mfcolor, mbcolor, 1, 0, 1);    snprintf(title, sizeof(title), _("%.30s %s - Press CTRL-C to quit"), P_PNAME(g),	    what == 'U' ? _("upload") : _("download"));    wtitle(win, TMID, title);    pipe(pipefd);  } else    wleave();  switch(udpid = fork()) {  	case -1:  		werror(_("Out of memory: could not fork()"));		if (win) {  			close(pipefd[0]);  			close(pipefd[1]);	  		wclose(win, 1);		} else			wreturn();  		(void) mcd("");  		return;  	case 0: /* Child */		if (P_PIORED(g) == 'Y') {  			dup2(portfd, 0);  			dup2(portfd, 1);		}		if (win) {  			dup2(pipefd[1], 2);  			close(pipefd[0]);  			if (pipefd[1] != 2) close(pipefd[1]);  		}  		for(n = 1; n < _NSIG; n++) signal(n, SIG_DFL);  				set_privs();		setgid((gid_t)real_gid);  		setuid((uid_t)real_uid);  		(void) fastexec(translate(cmdline));  		exit(1);  	default: /* Parent */  		break;  }  if (win) {	(void) setcbreak(1); /* Cbreak, no echo. */	enab_sig(1, 0);	       /* But enable SIGINT */  }  signal(SIGINT, udcatch);  if (P_PIORED(g) == 'Y') {	close(pipefd[1]);#ifdef LOG_XFER	xfl=fopen("xfer.log","wb");#endif	while((n = read(pipefd[0], buf, sizeof(buf))) > 0) {	  	buf[n] = '\0';  		wputs(win, buf);		timer_update();		/* Log the filenames & sizes 	jl 14.09.97 */		if (P_LOGXFER[0] == 'Y') {#ifdef LOG_XFER		  if (xfl)		    fprintf(xfl,">%s<\n",buf);#endif		  if (sscanf(buf, "%19s", buffirst)) { /* if / jl 29.09.97 */		    if (!strncmp (buffirst, "Receiving", 9) ||			!strncmp (buffirst, "Sending", 7)) {		      if (xfrstr[0]) {			trim (trimbuf, xfrstr, sizeof(trimbuf));			do_log ("%s", trimbuf);			xfrstr[0] = 0;		      }		      trim (trimbuf, buf, sizeof(trimbuf));		      do_log("%s", trimbuf);		    } else if (!strncmp (buffirst, "Bytes", 5)) {		      strncpy (xfrstr, buf, sizeof(xfrstr));		    }		    buffirst[0]=0;		    trimbuf[0]=0;		  }		}	}#ifdef LOG_XFER	if (xfl)	  fclose(xfl);#endif  }  /* Log the last file size	jl 14.09.97 */  if (P_LOGXFER[0] == 'Y' && xfrstr[0]) {    trim (trimbuf, xfrstr, sizeof(trimbuf));    do_log ("%s", trimbuf);    xfrstr[0] = 0;  }  while( udpid != m_wait(&status) );  if (win) {	enab_sig(0, 0);	signal(SIGINT, SIG_IGN);  }  if (win == (WIN *)0) wreturn();  /* MARK updated 02/17/94 - Flush modem port before displaying READY msg */  /* because a BBS often displays menu text right after a download, and we */  /* don't want the modem buffer to be lost while waiting for key to be hit */  m_flush(portfd);  port_init();  (void) setcbreak(2); /* Raw, no echo. */  if (win) close(pipefd[0]);  (void) mcd("");  timer_update();  /* If we got interrupted, status != 0 */  if (win && (status & 0xFF00) == 0) {#if VC_MUSIC	if (P_SOUND[0] == 'Y') {		wprintf(win, _("\n READY: press any key to continue..."));		music();	} else		sleep(1);#else	/* MARK updated 02/17/94 - If there was no VC_MUSIC capability, */	/* then at least make some beeps! */	if (P_SOUND[0] == 'Y') wprintf(win, "\007\007\007");	sleep(1);#endif  }  if (win) wclose(win, 1);}/* * Run kermit. Used to do this in the main window, but newer * versions of kermit are too intelligent and just want a tty * for themselves or they won't function ok. Shame. */void kermit(){  int status;  int pid, n;  char buf[81];  int fd;  /* Clear screen, set keyboard modes etc. */  wleave();  switch(pid = fork()) {  	case -1:		wreturn();  		werror(_("Out of memory: could not fork()"));  		return;  	case 0: /* Child */  		/* Remove lockfile */		set_privs();  		if (lockfile[0]) unlink(lockfile);		setgid((gid_t)real_gid);		setuid((uid_t)real_uid);  		for(n = 0; n < _NSIG; n++) signal(n, SIG_DFL);  		(void) fastexec(translate(P_KERMIT));  		exit(1);  	default: /* Parent */  		break;  }  (void) m_wait(&status);  /* Restore screen and keyboard modes */  wreturn();  /* Re-create lockfile */  if (lockfile[0]) {	set_privs();	n = umask(022);  	/* Create lockfile compatible with UUCP-1.2 */  	if ((fd = open(lockfile, O_WRONLY | O_CREAT | O_EXCL, 0666)) < 0) {  		werror(_("Cannot re-create lockfile!"));  	} else {		(void) chown(lockfile, (uid_t)real_uid, (gid_t)real_gid);  		snprintf(buf, sizeof(buf),  "%05d minicom %.20s\n", (int)getpid(), username);  		write(fd, buf, strlen(buf));  		close(fd);  	}	(void) umask(n);	drop_privs();  }  m_flush(portfd);  port_init();}/* ============ Here begins the setenv function ============= *//* * Compare two strings up to '=' */static int varcmp(s1, s2)char *s1, *s2;{  while(*s1 && *s2) {  	if (*s1 == '=' && *s2 == '=') return(1);  	if (*s1++ != *s2++) return(0);  }  return(1);}/* * Generate a name=value string. */static char *makenv(name, value)char *name, *value;{  char *p;    if ((p = (char *)malloc(strlen(name) + strlen(value) + 3)) == CNULL)	return(p);  sprintf(p, "%s=%s", name, value);  return(p);}/* * Set a environment variable.  */int mc_setenv(name, value)char *name, *value;{  static int init = 0;  extern char **environ;  char *p, **e, **newe;  int count = 0;  if ((p = makenv(name, value)) == CNULL) return(-1);  for(e = environ; *e; e++) {  	count++;  	if(varcmp(name, *e)) {  		*e = p;  		return(0);  	}  }  count += 2;  if ((newe = (char **)malloc(sizeof(char *) * count)) == (char **)0) {  	free(p);  	return(-1);  }  memcpy((char *)newe, (char *)environ , (int) (count * sizeof(char *)));  if (init) free((char *)environ);  init = 1;  environ = newe;  for(e = environ; *e; e++)  	;  *e++ = p;  *e = CNULL;  return(0);}/* ============ This is the end of the setenv function ============= *//* * Run an external script. * ask = 1 if first ask for confirmation. * s = scriptname, l=loginname, p=password. */void runscript(ask, s, l, p)int ask;char *s, *l, *p;{  int status;  int n;  int pipefd[2];  char buf[81];  char scr_lines[5];  char cmdline[128];  char *ptr;  WIN *w;  int done = 0;  char *msg = _("Same as last");  char* username = _(" A -   Username        :"),      * password = _(" B -   Password        :"),      * name_of_script = _(" C -   Name of script  :"),      * question = _("Change which setting?     (Return to run, ESC to stop)");  if (ask) {	w = wopen(10, 5, 70, 10, BDOUBLE, stdattr, mfcolor, mbcolor, 0, 0, 1);	wtitle(w, TMID, _("Run a script"));	wputs(w, "\n");	wprintf(w, "%s %s\n", username, scr_user[0] ? msg : "");	wprintf(w, "%s %s\n", password, scr_passwd[0] ? msg : "");	wprintf(w, "%s %s\n", name_of_script, scr_name);	wlocate(w, 4, 5);	wputs(w, question);	wredraw(w, 1);	while(!done) {	    wlocate(w, strlen (question) + 5, 5);	    n = wxgetch();	    if (islower(n)) n = toupper(n);	    switch(n) {		case '\r':		case '\n':			if (scr_name[0] == '\0') {				wbell();				break;			}			wclose(w, 1);			done = 1;			break;		case 27: /* ESC */			wclose(w, 1);			return;		case 'A':			wlocate(w, strlen (username) + 1, 1);			wclreol(w);			scr_user[0] = 0;			wgets(w, scr_user, 32, 32);			break;		case 'B':			wlocate(w, strlen (password) + 1, 2);			wclreol(w);			scr_passwd[0] = 0;			wgets(w, scr_passwd, 32, 32);			break;		case 'C':			wlocate(w, strlen (name_of_script) + 1, 3);			wgets(w, scr_name, 32, 32);			break;		default:			break;	    }	}  } else {  	strncpy(scr_user, l, sizeof(scr_user));  	strncpy(scr_name, s, sizeof(scr_name));  	strncpy(scr_passwd, p, sizeof(scr_passwd));  }  sprintf(scr_lines, "%d", (int) lines);  /* jl 13.09.97 */  /* Throw away status line if temporary */  if (tempst) {  	wclose(st, 1);  	tempst = 0;  	st = NIL_WIN;  }  scriptname(scr_name);    pipe(pipefd);  if (mcd(P_SCRIPTDIR) < 0) return;  snprintf(cmdline, sizeof(cmdline), "%s %s %s %s",	   P_SCRIPTPROG, scr_name, logfname, logfname[0]==0? "": homedir);  switch(udpid = fork()) {  	case -1:  		werror(_("Out of memory: could not fork()"));  		close(pipefd[0]);  		close(pipefd[1]);  		(void) mcd("");  		return;  	case 0: /* Child */  		dup2(portfd, 0);  		dup2(portfd, 1);  		dup2(pipefd[1], 2);  		close(pipefd[0]);  		close(pipefd[1]);  		  		for(n = 1; n < _NSIG; n++) signal(n, SIG_DFL);  				set_privs();		setgid((gid_t)real_gid);  		setuid((uid_t)real_uid);  		mc_setenv("LOGIN", scr_user);  		mc_setenv("PASS", scr_passwd);		mc_setenv("TERMLIN", scr_lines);	/* jl 13.09.97 */  		(void) fastexec(translate(cmdline));  		exit(1);  	default: /* Parent */  		break;  }  (void) setcbreak(1); /* Cbreak, no echo */  enab_sig(1, 0);	       /* But enable SIGINT */  signal(SIGINT, udcatch);  close(pipefd[1]);    /* pipe output from "runscript" program to terminal emulator */  while((n = read(pipefd[0], buf, 80)) > 0) {  	ptr = buf;  	while(n--)  		vt_out(*ptr++);	timer_update();  	wflush();  }    /* Collect status, and clean up. */  (void) m_wait(&status);  enab_sig(0, 0);  signal(SIGINT, SIG_IGN);  (void) setcbreak(2); /* Raw, no echo */  close(pipefd[0]);  scriptname("");  (void) mcd("");}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区观看| 国产欧美日韩精品一区| 日韩欧美亚洲国产精品字幕久久久| 日韩女优制服丝袜电影| 亚洲丝袜制服诱惑| 国产成人免费av在线| 国产精品夫妻自拍| 亚洲日本丝袜连裤袜办公室| 精品国产免费久久| 91蜜桃婷婷狠狠久久综合9色| 中文字幕成人网| 日本美女一区二区三区视频| 国产日韩欧美精品在线| 北岛玲一区二区三区四区| 国产精品人成在线观看免费| 久久97超碰国产精品超碰| 久久成人免费网| 在线精品视频小说1| 日韩欧美一区二区三区在线| 激情综合一区二区三区| 日韩视频永久免费| 精品亚洲porn| 日韩美女视频在线| 制服.丝袜.亚洲.中文.综合| 日韩激情一区二区| 久久免费午夜影院| 欧美在线免费观看视频| 亚洲欧洲综合另类| 欧美日韩在线不卡| 丝袜亚洲另类欧美| 日韩欧美国产电影| 国内久久婷婷综合| 精品福利一区二区三区免费视频| 日日摸夜夜添夜夜添亚洲女人| 国产亚洲1区2区3区| 国产一区二区精品久久99| 久久蜜臀精品av| 国产在线精品不卡| 国产精品视频麻豆| 欧美日韩美少妇| 日韩高清国产一区在线| 欧美人动与zoxxxx乱| 午夜婷婷国产麻豆精品| 欧美日本国产视频| 丁香婷婷综合色啪| 久久久久久久久久久久久久久99| www.一区二区| 免费一级片91| 国产精品乱码久久久久久| 欧美日产国产精品| 88在线观看91蜜桃国自产| 成人性生交大片免费看在线播放| 成人一区在线观看| 懂色av一区二区在线播放| 国产精品一卡二卡| 成人丝袜视频网| 99国产精品国产精品久久| 91蜜桃在线观看| 欧美日韩综合不卡| 91精品国产aⅴ一区二区| 欧美一二区视频| 久久久综合精品| 亚洲女同一区二区| 日韩精品欧美精品| 国产精品资源站在线| 99久久国产综合精品女不卡| 欧美日韩精品一区二区三区 | 欧美日韩国产高清一区二区三区| 欧美艳星brazzers| 欧美猛男gaygay网站| 欧美一级艳片视频免费观看| 精品国产精品网麻豆系列| 亚洲国产精品成人综合色在线婷婷| 中文字幕在线不卡国产视频| 亚洲一区二区三区精品在线| 免费黄网站欧美| www.激情成人| 欧美一区二区视频在线观看2022| 久久久精品tv| 亚洲色图都市小说| 久久se精品一区二区| 成人黄页在线观看| 欧美一二三区精品| 国产精品国模大尺度视频| 天使萌一区二区三区免费观看| 国产一区二区久久| 欧美精品乱人伦久久久久久| 久久精品视频在线看| 五月天激情综合网| 波多野结衣中文字幕一区二区三区| 欧美亚一区二区| 中文字幕高清不卡| 久久成人18免费观看| 一本久道中文字幕精品亚洲嫩| 精品久久久久久无| 亚洲在线成人精品| 国产剧情一区二区| 4hu四虎永久在线影院成人| 国产精品剧情在线亚洲| 捆绑调教一区二区三区| 欧美午夜视频网站| 国产精品大尺度| 紧缚捆绑精品一区二区| 欧美日韩亚洲综合一区| 最新久久zyz资源站| 精品中文字幕一区二区| 欧美精品三级在线观看| 亚洲精品国产一区二区精华液| 国产夫妻精品视频| 国产亚洲精品aa| 日韩精品国产欧美| 欧美系列亚洲系列| 亚洲日本在线a| jlzzjlzz欧美大全| 日韩精品午夜视频| 91九色最新地址| 亚洲色欲色欲www| 色综合久久88色综合天天| 中文字幕亚洲一区二区av在线| 久久99国产精品免费网站| 欧美高清激情brazzers| 亚洲大片在线观看| 欧美精品乱码久久久久久按摩| 午夜久久久久久久久| 91精品国产欧美一区二区成人 | 欧美色图12p| 综合久久给合久久狠狠狠97色| 美女www一区二区| 欧美一卡二卡三卡| 丝袜美腿亚洲一区二区图片| 欧美综合一区二区三区| 亚洲激情欧美激情| 在线观看亚洲成人| 亚洲国产精品自拍| 欧美日韩国产美女| 丝袜诱惑亚洲看片| 欧美一级欧美三级在线观看| 天天综合色天天| 欧美一区二区网站| 久久99热这里只有精品| 欧美r级电影在线观看| 美日韩一区二区三区| 精品99999| 国产69精品久久99不卡| 国产精品家庭影院| 在线看日本不卡| 天堂av在线一区| 精品免费国产一区二区三区四区| 精品一区二区三区av| 国产亚洲欧洲997久久综合| 国产91精品一区二区麻豆网站| 国产精品入口麻豆原神| 色狠狠桃花综合| 日韩精品电影一区亚洲| 日韩美女在线视频| 国产91在线观看| 一区二区三区精品久久久| 欧美日韩成人一区| 精品一区二区综合| 91在线无精精品入口| 久草在线在线精品观看| 日韩美女精品在线| 欧美激情艳妇裸体舞| 日韩一级二级三级| 欧美日韩久久一区二区| 精品国产一区二区三区四区四| 国产欧美一区二区在线| 亚洲人成网站在线| 中文字幕+乱码+中文字幕一区| 日韩欧美第一区| 91精品久久久久久久91蜜桃| 欧美性色黄大片| 精品视频在线免费看| 91久久一区二区| 欧美男男青年gay1069videost| 亚洲第四色夜色| 日韩一区二区在线观看| 亚洲成人精品影院| 欧洲视频一区二区| 人人狠狠综合久久亚洲| 中文av一区二区| 欧美精品精品一区| 成人动漫一区二区在线| 日韩精品一级中文字幕精品视频免费观看 | 欧美日韩精品一区二区在线播放| 一本色道**综合亚洲精品蜜桃冫 | 日本一区二区电影| 国产精品天干天干在线综合| 中文字幕在线观看不卡视频| 亚洲欧洲av在线| 亚洲成人精品影院| 国产精品自拍一区| 欧美在线一区二区| 欧美一区二区三区的| 国产欧美久久久精品影院| 亚洲女女做受ⅹxx高潮| 日韩国产高清在线| 国产伦理精品不卡| 精品视频在线免费看| 国产欧美日韩视频在线观看|