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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? x_rcv.c

?? 通訊程序源碼
?? C
字號:
/* * Receive a list of files using a version of Ward Christensen's file * transfer protocol.  A non-zero return code means the user must acknowledge * an error condition (a user generated abort returns a 0).  Write errors * are considered fatal. */#include <stdio.h>#include <curses.h>#include "config.h"#include "dial_dir.h"#include "misc.h"#include "xmodem.h"unsigned char buf[1029];char file_name[15];long file_length;static int err_method, tot_err, block_size;static int send_first();intrcv_xmodem(win, list, type)WINDOW *win;char *list;int type;{	extern char *protocol[];	FILE *fp, *uid_fopen();	int i, default_err, is_batch, max_block, code, file_count, got_hdr;	int hours, mins, secs, len;	long block, recv, partial;	float percent, performance;	unsigned char blk;	unsigned int sleep();	char *file, *name, *strcpy(), *strrchr(), *strtok();	void cancel_xfer();					/* which protocol? */	switch (type) {		case XMODEM:			default_err = CRC_CHECKSUM;			is_batch = 0;			max_block = 128;			break;		case XMODEM_1k:			default_err = CRC_CHECKSUM;			is_batch = 0;			max_block = 1024;			break;		case MODEM7:			default_err = CHECKSUM;			is_batch = 1;			max_block = 128;			break;		case YMODEM:			default_err = CRC;			is_batch = 1;			max_block = 1024;			performance = 1.09;			break;		case YMODEM_G:			default_err = NONE;			is_batch = 1;			max_block = 1024;			performance = 1.02;			break;		default:			return(1);	}	tot_err = 0;	file_count = 0;	mvwaddstr(win, 2, 24, protocol[type -1]);	mvwaddstr(win, 11, 24, "0  ");	/* CONSTCOND */	while (1) {		file_count++;		file_length = 0L;					/* user supplied name */		if (!is_batch) {			if (file_count > 1)				break;			file = strtok(list, " \t");					/* dissect the file name */			if ((name = strrchr(file, '/')))				strcpy(file_name, ++name);			else				strcpy(file_name, file);		}					/* get the modem7 file name */		if (type == MODEM7) {			if (code = rcv_modem7(win, default_err))				return(code +1);			file = file_name;		}					/* get the block 0 */		if (type == YMODEM || type == YMODEM_G) {			if (code = send_first(win, max_block, default_err))				return(code +1);			if (code = rcv_ymodem(win))				return(code +1);					/* at the end? */			if (buf[3] == '\0') {				beep();				wrefresh(win);				putc_line(ACK);				sleep(1);				return(0);			}			file = file_name;		}					/* any trouble? */		if (file_name[0] == '\0')			continue;		clear_line(win, 3, 24, TRUE);		waddstr(win, file_name);					/* if file length is known */		if (file_length != 0L) {			mvwprintw(win, 4, 24, "%-10ld", file_length);			secs = (file_length * 10.0 / dir->baud[0]) * performance;			hours = secs / 3600;			mins = (secs % 3600) / 60;			secs = (secs % 3600) % 60;			mvwprintw(win, 6, 24, "%d:%02d:%02d", hours, mins, secs);		}					/* some starting numbers */		mvwaddstr(win, 7, 24, "0    ");		if (file_length != 0L)			mvwaddstr(win, 8, 24, "0%  ");		mvwaddstr(win, 9, 24, "0          ");		mvwaddstr(win, 10, 24, "0 ");		clear_line(win, 12, 24, TRUE);		waddstr(win, "NONE");		wrefresh(win);		/*		 * If the user supplied the name, write permission is checked		 * by the get_names() routine in xfer_menu().  If modem7		 * or ymodem supplied name, the name is unique and the write		 * permission on the directory is checked by the change_name()		 * routines.  However, this is required for systems with		 * SETUID_BROKE set.		 */					/* open the file */		if (!(fp = uid_fopen(file, "w"))) {			beep();			clear_line(win, 12, 24, TRUE);			wattrstr(win, A_BOLD, "CAN'T OPEN FILE");			wrefresh(win);			cancel_xfer(DOWN_LOAD);			return(1);		}					/* ACK the block 0 */		if (type == YMODEM || type == YMODEM_G)			putc_line(ACK);		if (code = send_first(win, max_block, default_err)) {			fclose(fp);			return(code +1);		}					/* here we go... */		clear_line(win, 12, 24, TRUE);		waddstr(win, "NONE");		wrefresh(win);		blk = 1;		block = 1L;		recv = 0L;		got_hdr = 1;		/* CONSTCOND */		while (1) {			code = rcv_block(win, got_hdr, max_block, blk);			if (code < 0) {				fclose(fp);				return(code +1);			}			got_hdr = 0;					/* are we done? */			if (buf[0] == EOT) {				if (!is_batch) {					beep();					wrefresh(win);					sleep(1);				}				break;			}					/* if not a duplicate block */			if (!code) {				if (file_length != 0L) {					partial = file_length - recv;					if (partial > (long) block_size)						len = block_size;					else						len = (int) partial;				}				else					len = block_size;				if (fwrite((char *) &buf[3], sizeof(char), len, fp) != len) {					beep();					clear_line(win, 12, 24, TRUE);					wattrstr(win, A_BOLD, "WRITE ERROR");					wrefresh(win);					cancel_xfer(DOWN_LOAD);					fclose(fp);					/* fatal */					return(1);				}				mvwprintw(win, 7, 24, "%-5ld", block);				recv = recv + (unsigned int) len;				mvwprintw(win, 9, 24, "%-10ld", recv);				blk++;				block++;			}			/*			 * If the length is known, give the same status			 * report as uploading			 */			if (file_length != 0L) {				percent = recv * 100.0 / file_length;				if (percent > 100.0)					percent = 100.0;				mvwprintw(win, 8, 24, "%0.1f%%", percent);			}			wrefresh(win);			putc_line(ACK);		}		if (file_length != 0L) {			mvwaddstr(win, 8, 24, "100%  ");			wrefresh(win);		}		/*		 * If the file length is not known, search backwards from		 * the end of the file until you find a character that is		 * not the ^Z padding character.		 */		if (file_length == 0L) {			for (i=block_size+2; i>2; i--) {				if (buf[i] != CTRLZ)					break;			}			file_length = recv - (unsigned int) block_size + (unsigned int) i -2L;			fclose(fp);			if (fix_length(file, file_length)) {				beep();				clear_line(win, 12, 24, TRUE);				wattrstr(win, A_BOLD, "TRUNCATE ERROR");				wrefresh(win);				sleep(1);			}		}		else			fclose(fp);					/* ACK the EOT */		putc_line(ACK);	}	return(0);}/* * Send the first character to start the transmission and set the error * checking method.  Returns the standard error codes or 0 on success. * The variables err_method and block_size are global. */static intsend_first(win, max_block, default_err)WINDOW *win;int max_block, default_err;{	int i, err_count;	unsigned int sleep();	void cancel_xfer();					/* default error method */	err_method = default_err;	if (default_err == CRC_CHECKSUM)		err_method = CRC;					/* send the first char */	err_count = 0;	while (err_count < MAX_ERRORS*2) {		mvwprintw(win, 10, 24, "%-2d", err_count);					/* scan the keyboard for abort */		if (wgetch(win) == ESC) {			beep();			clear_line(win, 12, 24, TRUE);			waddstr(win, "ABORTED");			wrefresh(win);			cancel_xfer(DOWN_LOAD);			sleep(3);			return(ABORT);		}					/* switch to checksum? */		if (default_err == CRC_CHECKSUM && err_count > MAX_ERRORS/2)			err_method = CHECKSUM;					/* send error method code */		clear_line(win, 5, 24, TRUE);		switch (err_method) {			case CHECKSUM:				waddstr(win, "CHECKSUM");				putc_line(NAK);				break;			case CRC:				waddstr(win, "CRC");				putc_line('C');				break;			case NONE:				waddstr(win, "NONE");				putc_line('G');				break;		}		/*		 * We've cut the delay time in half, so we double		 * the allowable errors		 */		if ((i = getc_line(5)) == -1) {			err_count++;			clear_line(win, 12, 24, TRUE);			waddstr(win, "NO RESPONSE");			wrefresh(win);			continue;		}		buf[0] = (char) i;#ifdef DEBUG		fprintf(stderr, "send_first: got header %02x, %03o, %d\n", buf[0], buf[0], buf[0]);#endif /* DEBUG */		switch (buf[0]) {			case SOH:	/* small block follows */				block_size = 128;				return(0);			case STX:	/* large block follows */				if (max_block == 1024) {					block_size = 1024;					return(0);				}				/* FALLTHRU */			default:				err_count++;				clear_line(win, 12, 24, TRUE);				waddstr(win, "BAD HEADER");				wrefresh(win);					/* read some garbage... */				while(fread_line(buf, 1028, 1) != -1)					;				putc_line(NAK);				break;		}	}	beep();	clear_line(win, 12, 24, TRUE);	wattrstr(win, A_BOLD, "TIMED OUT");	wrefresh(win);	return(ERROR);}/* * Receive a block of info from the host.  Returns a 0 on success, a 1 on * a duplicate block or the standard error codes.  The variables * err_method and block_size are global. */intrcv_block(win, got_hdr, max_block, blk)WINDOW *win;int got_hdr, max_block;unsigned char blk;{	int i, err_count, bad_block, out_of_sync;	unsigned short crc, calc_crc();	unsigned int packet, sleep();	unsigned char blk_compliment, calc_sum(), crc_1, crc_2;	void cancel_xfer();	err_count = 0;	while (err_count < MAX_ERRORS) {		mvwprintw(win, 10, 24, "%-2d", err_count);		mvwprintw(win, 11, 24, "%-3d", tot_err);					/* scan the keyboard for abort */		if (wgetch(win) == ESC) {			beep();			clear_line(win, 12, 24, TRUE);			waddstr(win, "ABORTED");			wrefresh(win);			cancel_xfer(DOWN_LOAD);			sleep(3);			return(ABORT);		}					/* have we already got a hdr? */		if (!got_hdr) {			if ((i = getc_line(10)) == -1) {				err_count++;				tot_err++;				clear_line(win, 12, 24, TRUE);				waddstr(win, "NO RESPONSE");				wrefresh(win);				continue;			}			buf[0] = (char) i;#ifdef DEBUG			fprintf(stderr, "rcv_block: got header %02x, %03o, %d\n", buf[0], buf[0], buf[0]);#endif /* DEBUG */					/* what'd we get? */			switch (buf[0]) {				case EOT:	/* we're done! */					clear_line(win, 12, 24, TRUE);					waddstr(win, "TRANSFER COMPLETE");					wrefresh(win);					sleep(1);					return(0);				case SOH:	/* small block follows */					block_size = 128;					break;				case STX:	/* large block follows */					if (max_block == 1024) {						block_size = 1024;						break;					}					/* FALLTHRU */				default:					err_count++;					tot_err++;					clear_line(win, 12, 24, TRUE);					waddstr(win, "BAD HEADER");					wrefresh(win);					/* read some garbage... */					while(fread_line(buf, 1028, 1) != -1)						;					putc_line(NAK);					continue;			}		}					/* read the rest of the packet */		packet = block_size + 2 + (err_method == CHECKSUM ? 1 : 2);		if (fread_line(&buf[1], packet, 10) == -1) {			clear_line(win, 12, 24, TRUE);			waddstr(win, "TIMED OUT");			wrefresh(win);			putc_line(NAK);			err_count++;			tot_err++;			continue;		}		/*		 * Validation of the packet includes checking the		 * block number, its complement, and the crc/checksum.		 */		out_of_sync = 0;		blk_compliment = ~blk;		if (buf[1] != blk || buf[2] != blk_compliment)			out_of_sync++;		bad_block = 0;		switch (err_method) {			case CHECKSUM:#ifdef DEBUG				fprintf(stderr, "blk=%d, checksum=%d\n", blk, calc_sum(&buf[3], block_size));#endif /* DEBUG */				if (buf[block_size +3] != calc_sum(&buf[3], block_size))					bad_block++;				break;			case CRC:				crc = calc_crc(&buf[3], block_size);				crc_1 = crc >> 8;				crc_2 = crc & 0xff;#ifdef DEBUG				fprintf(stderr, "blk=%d, crc1=%d, crc2=%d\n", blk, crc_1, crc_2);#endif /* DEBUG */				if (buf[block_size +3] != crc_1 || buf[block_size +4] != crc_2)					bad_block++;				break;			case NONE:				return(0);		}					/* handle errors */		if (bad_block) {			clear_line(win, 12, 24, TRUE);			if (err_method == CRC)				waddstr(win, "CRC FAILED");			else				waddstr(win, "CHECKSUM FAILED");			wrefresh(win);			putc_line(NAK);			err_count++;			tot_err++;			continue;		}					/* not really an error */		if (out_of_sync) {			/*			 * If a perfect packet is off by 1 block number,			 * (a lost ACK could cause this) then treat it as			 * a good block but don't write it to disk.			 */			if (buf[1] == (unsigned char) blk-1)				return(1);			clear_line(win, 12, 24, TRUE);			waddstr(win, "OUT OF SYNC");			wrefresh(win);			putc_line(NAK);			err_count++;			tot_err++;			continue;		}		return(0);	}	beep();	clear_line(win, 12, 24, TRUE);	waddstr(win, "TOO MANY ERRORS");	wrefresh(win);	cancel_xfer(DOWN_LOAD);	return(ERROR);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲在线观看免费| 久久久国产精品不卡| 亚洲小少妇裸体bbw| 精品视频在线视频| 图片区小说区区亚洲影院| 91精品国产91久久久久久最新毛片| 日韩激情在线观看| 精品91自产拍在线观看一区| 激情久久久久久久久久久久久久久久| 久久综合丝袜日本网| 国产盗摄女厕一区二区三区| 国产精品高潮久久久久无| 色一情一乱一乱一91av| 日韩激情一区二区| 久久精品人人做人人爽97| 色综合天天综合网天天看片| 亚洲1区2区3区4区| 欧美精品一区二区三区很污很色的 | 国产女人18水真多18精品一级做| 国产成人av一区二区| 一区二区欧美视频| 日韩精品一区二| 91麻豆视频网站| 久久www免费人成看片高清| 国产精品高潮久久久久无| 欧美亚洲国产一区二区三区| 久久99久久久久| 亚洲三级视频在线观看| 日韩一区二区在线播放| www.爱久久.com| 日韩成人av影视| 中文字幕巨乱亚洲| 777午夜精品视频在线播放| 粗大黑人巨茎大战欧美成人| 亚洲成人免费影院| 日本一区二区三区四区| 欧美美女直播网站| 风间由美一区二区av101 | 日韩精品中文字幕一区| 成人精品免费看| 久久国产精品72免费观看| 综合婷婷亚洲小说| 久久综合狠狠综合久久综合88 | 91精品国产乱| 在线视频你懂得一区| 国产激情一区二区三区| 奇米一区二区三区| 一级日本不卡的影视| 国产亚洲欧美日韩日本| 日韩一区二区精品在线观看| av在线一区二区三区| 欧美午夜一区二区三区免费大片| 国产精品亚洲专一区二区三区| 亚洲一区二区三区在线| 一区免费观看视频| 久久精品一区二区三区不卡牛牛| 欧美一级xxx| 欧美精品久久天天躁| 97久久精品人人做人人爽| 国产69精品久久99不卡| 久久精品国产精品亚洲红杏| 性做久久久久久免费观看| 亚洲日本电影在线| ...中文天堂在线一区| 久久久久久电影| 久久久久久久精| 久久久精品免费免费| 精品国产乱码久久久久久免费 | 精品免费视频一区二区| 91精品国产一区二区三区香蕉| 91激情五月电影| 91玉足脚交白嫩脚丫在线播放| 国产**成人网毛片九色 | 国产在线精品不卡| 蜜桃精品视频在线| 久久国产欧美日韩精品| 日韩高清在线电影| 日本在线播放一区二区三区| 亚洲成人激情综合网| 亚洲电影你懂得| 五月天一区二区三区| 三级在线观看一区二区| 日韩精品电影一区亚洲| 免费精品视频在线| 激情文学综合网| 国产91精品入口| 99久久国产综合精品色伊| 91丨porny丨户外露出| 欧美中文字幕亚洲一区二区va在线 | 久久久一区二区三区捆绑**| 亚洲精品一区二区三区影院 | 欧美三级欧美一级| 欧美日韩国产一级二级| 欧美一区二区二区| 精品成人一区二区三区四区| 国产精品久久影院| 亚洲一级片在线观看| 青青草91视频| 国产mv日韩mv欧美| 91久久精品一区二区二区| 91精品国产综合久久婷婷香蕉| 精品国产91乱码一区二区三区 | 中文字幕一区二区三区四区| 亚洲美女屁股眼交| 日韩av高清在线观看| 久久99精品网久久| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲男同性恋视频| 日韩精品欧美成人高清一区二区| 韩国av一区二区| av不卡免费在线观看| 51久久夜色精品国产麻豆| 久久久久久**毛片大全| 亚洲欧美另类图片小说| 日韩中文字幕不卡| 成人看片黄a免费看在线| 欧美日韩视频第一区| 久久婷婷成人综合色| 亚洲精品国产一区二区精华液| 麻豆精品国产91久久久久久| 成人午夜在线视频| 正在播放亚洲一区| 一色屋精品亚洲香蕉网站| 日韩高清一区二区| 91一区二区三区在线播放| 日韩欧美电影在线| 有码一区二区三区| 国产黄色成人av| 91精品国产综合久久婷婷香蕉| 中文字幕一区日韩精品欧美| 久久精品国产精品青草| 欧美日韩亚洲高清一区二区| 欧美韩国日本综合| 免费一级片91| 欧美色偷偷大香| 中文字幕制服丝袜一区二区三区| 奇米影视7777精品一区二区| 色婷婷综合久久久久中文一区二区 | 色天天综合色天天久久| 久久综合中文字幕| 日韩精品乱码av一区二区| 91成人免费在线视频| 欧美国产激情二区三区| 极品少妇xxxx精品少妇| 91精品国产品国语在线不卡| 一区二区三区在线免费观看| 成人久久18免费网站麻豆| 精品国产一区久久| 日韩电影免费在线| 欧美日韩一卡二卡| 亚洲男帅同性gay1069| 高清av一区二区| 国产女人aaa级久久久级| 国产在线看一区| 日韩精品最新网址| 久久精品国产网站| 日韩欧美一级在线播放| 日本不卡不码高清免费观看| 欧美日本国产一区| 日日摸夜夜添夜夜添国产精品| 欧美午夜一区二区| 亚洲第一福利视频在线| 欧美日韩亚洲国产综合| 亚洲午夜免费电影| 欧美另类z0zxhd电影| 午夜久久福利影院| 欧美精选一区二区| 日韩国产欧美在线播放| 欧美一卡2卡3卡4卡| 美女久久久精品| 欧美变态tickling挠脚心| 久久国产夜色精品鲁鲁99| 精品国产乱码久久| 国产福利一区二区三区视频 | 欧美男男青年gay1069videost| 91麻豆国产自产在线观看| 1024成人网| 一本色道久久综合狠狠躁的推荐| 亚洲男人电影天堂| 欧美三级在线播放| 免费人成在线不卡| 久久综合九色综合97婷婷| 成人美女视频在线观看| 亚洲另类在线制服丝袜| 欧美日韩精品一二三区| 日韩黄色在线观看| 国产亚洲视频系列| 91蜜桃传媒精品久久久一区二区| 亚洲国产精品一区二区www| 欧美精品日韩一本| 韩国三级在线一区| 国产精品国产成人国产三级| 欧美在线免费播放| 理论电影国产精品| 国产精品网站一区| 欧美系列一区二区| 黄色成人免费在线| 亚洲女爱视频在线| 日韩欧美久久一区| 粉嫩蜜臀av国产精品网站|