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

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

?? x_batch.c

?? 通訊程序源碼
?? C
字號:
/* * Routines to support the batch protocols. */#include <stdio.h>#include <ctype.h>#include <curses.h>#include "config.h"#include "misc.h"#include "xmodem.h"static char *fix_name();static void change_name(), unfix_name(), change_name();/* * Send the file name for the modem7 batch.  Only uses 11 characters * of the filename.  Returns zero on success or the standard error codes. */intsend_modem7(win, name)WINDOW *win;char *name;{	char *new_name;	unsigned char sum, calc_sum();					/* convert to 11 character name */	new_name = fix_name(name);	sum = calc_sum((unsigned char *) new_name, 12);	putc_line(ACK);					/* for each character in the name */	while (*new_name != CTRLZ) {		putc_line((unsigned char) *new_name);		switch (getc_line(3)) {			case -1:	/* timed out */				clear_line(win, 12, 24, TRUE);				waddstr(win, "NO RESPONSE");				wrefresh(win);				return(ERROR);			case ACK:	/* got it! */				break;			case CAN:	/* cancel transmission */				if (getc_line(2) == CAN) {					beep();					clear_line(win, 12, 24, TRUE);					wattrstr(win, A_BOLD, "REMOTE ABORTED");					wrefresh(win);					return(CANCEL);				}				/* FALLTHRU */			default:				clear_line(win, 12, 24, TRUE);				waddstr(win, "NAME FAILED");				wrefresh(win);				return(ERROR);		}		new_name++;	}	putc_line(CTRLZ);					/* verify the checksum */	if (getc_line(10) != sum) {		putc_line('u');		clear_line(win, 12, 24, TRUE);		waddstr(win, "CHECKSUM FAILED");		wrefresh(win);		return(ERROR);	}	putc_line(ACK);	return(0);}/* * Receive a modem7 file name.  Returns zero on success, the standard error * codes, or a -1 on the end-of-batch.  (Oddly enough, the end-of-batch code * is the same as the code for a user abort) */intrcv_modem7(win, default_err)WINDOW *win;int default_err;{	extern char file_name[15];	int i, j, err_method, err_count, got_it;	unsigned char sum, calc_sum();	char temp_name[13];	err_method = default_err;	if (default_err == CRC_CHECKSUM)		err_method = CRC;	err_count = 0;	got_it = 0;	while (err_count < MAX_ERRORS) {					/* switch to checksum? */		if (default_err == CRC_CHECKSUM && err_count > MAX_ERRORS/2)			err_method = CHECKSUM;		if (err_method == CRC)			putc_line('C');		else			putc_line(NAK);					/* what'd we get? */		switch (getc_line(10)) {			case -1:	/* timed out */				clear_line(win, 12, 24, TRUE);				wattrstr(win, A_BOLD, "NO RESPONSE");				wrefresh(win);				err_count++;				break;			case ACK:	/* ready to go... */				got_it++;				break;			default:	/* huh? */				clear_line(win, 12, 24, TRUE);				wattrstr(win, A_BOLD, "BAD HEADER");				wrefresh(win);				err_count++;		}		if (got_it)			break;	}	if (!got_it)		return(ERROR);					/* get the name */	for (i=0; i<12; i++) {		j = getc_line(3);		switch (j) {			case -1:	/* timed out */				clear_line(win, 12, 24, TRUE);				wattrstr(win, A_BOLD, "NO RESPONSE");				wrefresh(win);				return(ERROR);			case EOT:	/* end of batch? */				return(-1);			case CAN:	/* cancel transmission */				if (getc_line(2) == CAN) {					beep();					clear_line(win, 12, 24, TRUE);					wattrstr(win, A_BOLD, "REMOTE ABORTED");					wrefresh(win);					return(CANCEL);				}				/* FALLTHRU */			case 'u':	/* bad name character */				beep();				clear_line(win, 12, 24, TRUE);				wattrstr(win, A_BOLD, "BAD NAME");				wrefresh(win);				return(ERROR);			default:	/* the name... */				temp_name[i] = j & 0xff;				if (j != CTRLZ)					putc_line(ACK);				break;		}	}	temp_name[12] = '\0';					/* send our checksum */	sum = calc_sum((unsigned char *) temp_name, 12);	putc_line(sum);					/* do they agree? */	if (getc_line(10) != ACK) {		beep();		clear_line(win, 12, 24, TRUE);		wattrstr(win, A_BOLD, "BAD NAME");		wrefresh(win);		return(ERROR);	}					/* load the file_name array */	unfix_name(temp_name);					/* any name collisions? */	change_name(win, file_name);	return(0);}/* * Send the block 0 information for a ymodem batch transfer.  Uses only * the name component of the path and the file size. */intsend_ymodem(win, file, size)WINDOW *win;char *file;long size;{	unsigned short crc, calc_crc();	char *strcpy(), *memset();	unsigned char buf[133];					/* start with a clean block */	memset((char *) buf, '\0', 133);					/* the header */	buf[0] = SOH;	buf[1] = 0;	buf[2] = 255;	/*	 * The block zero consists of the file name (no path component),	 * a NULL, and the file length (as a string).  The end of batch	 * marker is an empty block.	 */	if (*file != '\0') {		strcpy((char *) &buf[3], file);		sprintf((char *) &buf[strlen(file)+4], "%ld", size);	}					/* the crc */	crc = calc_crc(&buf[3], 128);	buf[131] = crc >> 8;	buf[132] = crc & 0xff;					/* the block count */	mvwaddstr(win, 7, 24, "0   ");	return(send_block(win, buf, 133));}/* * Receive the block 0 information for a ymodem batch transfer.  We * only use the file name and the size (if present).  Currently doesn't * support full path names. */intrcv_ymodem(win)WINDOW *win;{	extern unsigned char buf[1029];	extern long file_length;	extern char file_name[15];	int code, length_is_at;	long atol();	file_length = 0L;	file_name[0] = '\0';					/* read the zero block */	if (code = rcv_block(win, 1, 1024, 0))		return(code);					/* at end of batch */	if (buf[3] == '\0')		return(0);					/* get the file name */	change_name(win, (char *) &buf[3]);					/* any trouble? */	if (file_name[0] == '\0') {		putc_line(CAN);		return(0);	}	/*	 * The file length is placed after the NULL of the file name	 * and is terminated by another NULL.  If the length is missing,	 * atol() will see a NULL and return 0.	 */	length_is_at = strlen((char *) &buf[3]) + 4;	file_length = atol((char *) &buf[length_is_at]);	return(0);}/* * Handle file name collisions.  Prepend an "X" to the name until you find * a name that doesn't already exist.  Creates a NULL name on error. * Loads the global character array "file_name". */static voidchange_name(win, str)WINDOW *win;char *str;{	extern char file_name[15];	register int i;	int modified;	char temp[15], ans[15], *s, *strrchr(), *strcpy(), *strncat();	char *strncpy();	unsigned int sleep();					/* dissect the name component */	if ((s = strrchr(str, '/')))		strncpy(temp, ++s, 15);	else		strncpy(temp, str, 15);	temp[14] = '\0';	strcpy(ans, temp);	file_name[0] = '\0';					/* write permission on directory? */	if (access(".", 2)) {		beep();		clear_line(win, 12, 24, TRUE);		wattrstr(win, A_BOLD, "NO WRITE ON DIRECTORY");		wrefresh(win);		return;	}					/* prepend up to 13 "X"s */	modified = 0;	for (i=1; i<14; i++) {		if (access(ans, 0)) {			if (modified) {				beep();				clear_line(win, 12, 24, TRUE);				waddstr(win, "NAME COLLISION");				wrefresh(win);				sleep(1);			}			strcpy(file_name, ans);			return;		}		modified++;		strcpy(temp, "X");		strncat(temp, ans, 13);		temp[14] = '\0';		strcpy(ans, temp);	}	beep();	clear_line(win, 12, 24, TRUE);	waddstr(win, "BAD NAME");	wrefresh(win);	return;}/* * Convert a perfectly good Unix file name to fit the CP/M file name * rules.  Used for the modem7 batch file transfer.  Returns a pointer * to a static area containing the new name. */static char *fix_name(path)char *path;{	int i, dot;	char *s, *name, temp[15], *ext, *strncpy(), *strrchr();	static char ans[13];					/* ignore the path component */	if (s = strrchr(path, '/'))		strncpy(temp, ++s, 15);	else		strncpy(temp, path, 15);	temp[14] = '\0';	name = temp;	ext = "";	dot = 0;	for (i=strlen(temp)-1; i>=0; i--) {		if (temp[i] == '.' && !dot) {			dot = 1;			temp[i] = '\0';			ext = &temp[i+1];		}		if (islower(temp[i]))			temp[i] = toupper(temp[i]);	}					/* if null name component */	if (*name == '\0')		name = "X";					/* if name too long */	if (strlen(name) > 8)		*(name+8) = '\0';					/* if extension too long */	if (strlen(ext) > 3)		*(ext+3) = '\0';	sprintf(ans, "%-8.8s%-3.3s%c", temp, ext, CTRLZ);	return(ans);}/* * Convert a CP/M style filename into a legal Unix file name.  Loads the * global character array "file_name". */static voidunfix_name(cpm_name)char *cpm_name;{	extern char file_name[15];	register int i, n;	int dot;	char temp[15], *strcpy();	file_name[0] = '\0';	if (*cpm_name == '\0')		return;	strcpy(temp, cpm_name);					/* 8 character of the name */	n = 0;	for (i=0; i<8; i++) {		if (temp[i] != ' ') {			if (isupper(temp[i]))				file_name[n++] = tolower(temp[i]);			else				file_name[n++] = temp[i];		}	}					/* 3 character extension */	dot = 0;	for (i=8; i<11; i++) {		if (temp[i] != ' ') {			if (!dot) {				dot++;				file_name[n++] = '.';			}			if (isupper(temp[i]))				file_name[n++] = tolower(temp[i]);			else				file_name[n++] = temp[i];		}	}	file_name[n] = '\0';	return;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩精品一区| 欧日韩精品视频| 一区二区高清视频在线观看| 欧美乱熟臀69xxxxxx| 成人免费不卡视频| 喷白浆一区二区| 一区二区三区精品在线| 久久午夜色播影院免费高清 | 91国偷自产一区二区使用方法| 美国三级日本三级久久99| 亚洲欧美视频在线观看视频| 精品对白一区国产伦| 欧美女孩性生活视频| 91啪在线观看| 91福利精品视频| 欧美日韩国产片| 国产盗摄视频一区二区三区| 日韩不卡一二三区| 亚洲午夜久久久久久久久久久| 日韩午夜av一区| 欧美日韩一区在线观看| 91同城在线观看| 成人午夜av在线| 国产精品资源网站| 国精产品一区一区三区mba视频 | 国内精品伊人久久久久影院对白| 亚洲综合一区二区精品导航| 中文字幕成人在线观看| 国产日产欧美一区二区三区| 精品国产露脸精彩对白| 精品国产3级a| 日韩精品一区二| 日韩女优毛片在线| 欧美大片国产精品| 欧美精品777| caoporn国产精品| 国产精品香蕉一区二区三区| 久久超碰97中文字幕| 热久久国产精品| 午夜久久久久久久久久一区二区| 亚洲线精品一区二区三区| 一区二区三区免费| 亚洲夂夂婷婷色拍ww47| 亚洲一区免费观看| 亚洲成人免费电影| 日本免费在线视频不卡一不卡二| 日韩精品成人一区二区三区| 日日噜噜夜夜狠狠视频欧美人 | 国产不卡视频在线播放| 国产成人精品在线看| 成人性视频免费网站| 91亚洲午夜精品久久久久久| 欧美色窝79yyyycom| 欧美日韩中文字幕精品| 亚洲精品欧美二区三区中文字幕| 亚洲欧美电影院| 亚洲成人动漫一区| 日本最新不卡在线| 国产福利精品一区二区| av毛片久久久久**hd| 在线视频你懂得一区二区三区| 欧美伊人久久大香线蕉综合69| 欧美伦理视频网站| 久久久久久免费网| 亚洲欧洲综合另类在线| 丝袜亚洲精品中文字幕一区| 国产一区视频网站| 91麻豆国产在线观看| 91精品国产综合久久久久久久久久| 欧美一级一级性生活免费录像| 久久久久国产精品厨房| 亚洲视频小说图片| 日本伊人色综合网| 国产盗摄女厕一区二区三区| 在线观看国产一区二区| 日韩欧美国产系列| 中文字幕亚洲视频| 亚洲国产精品一区二区www| 蜜桃视频一区二区三区在线观看| 国产精品一区二区在线观看不卡 | 国产三级一区二区三区| 中文字幕不卡一区| 亚洲成va人在线观看| 国产在线视频一区二区| 色先锋aa成人| 精品成人一区二区| 一区二区激情小说| 国产精品一区二区无线| 在线观看免费视频综合| 久久久精品国产99久久精品芒果| 亚洲综合男人的天堂| 国产在线精品免费| 色婷婷精品久久二区二区蜜臀av | 欧美午夜影院一区| 久久综合国产精品| 亚洲电影欧美电影有声小说| 国产精品综合久久| 51精品国自产在线| 亚洲人成影院在线观看| 国产尤物一区二区| 91精品国产91久久综合桃花| 亚洲视频资源在线| 国产盗摄精品一区二区三区在线| 欧美区在线观看| 亚洲精品视频在线观看免费| 福利一区二区在线观看| 日韩欧美一二三区| 亚洲午夜久久久久久久久电影院| 成人丝袜高跟foot| 欧美mv日韩mv国产网站| 亚洲a一区二区| 日本国产一区二区| 国产精品久久久久久久久久久免费看 | 亚洲综合丝袜美腿| a亚洲天堂av| 久久午夜电影网| 久久99深爱久久99精品| 欧美久久久久久久久| 亚洲黄色录像片| 一本一道波多野结衣一区二区| 国产精品污污网站在线观看| 国产一区视频导航| 日韩一区二区三区电影在线观看| 亚洲午夜免费福利视频| 欧美综合亚洲图片综合区| 中文av一区二区| 国产精品123| 国产婷婷精品av在线| 国产夫妻精品视频| 久久久久成人黄色影片| 国产一区啦啦啦在线观看| 2023国产精品| 国产自产v一区二区三区c| 亚洲精品在线电影| 国产精品一区二区在线播放| 久久久国产精品午夜一区ai换脸| 国产乱子伦一区二区三区国色天香| 欧美一区二区三区免费视频| 免费黄网站欧美| 久久伊99综合婷婷久久伊| 国产激情偷乱视频一区二区三区| 久久精品人人爽人人爽| 成人免费视频一区| 中文字幕视频一区二区三区久| 成人黄色大片在线观看| 中文字幕日韩一区二区| 91理论电影在线观看| 亚洲激情图片一区| 69精品人人人人| 久久机这里只有精品| 久久久精品免费观看| www.亚洲激情.com| 亚洲无线码一区二区三区| 91精品国产色综合久久ai换脸 | 男人操女人的视频在线观看欧美| 日韩午夜激情视频| 国产精品综合网| 亚洲男女一区二区三区| 欧美色偷偷大香| 久久激情五月婷婷| 成人欧美一区二区三区黑人麻豆| 色激情天天射综合网| 蜜臀av性久久久久av蜜臀妖精| 国产视频一区在线观看| 91美女福利视频| 午夜精品一区二区三区免费视频 | 国产精品久久久久婷婷| 在线观看欧美日本| 久久成人麻豆午夜电影| 国产精品色在线观看| 欧美日韩国产另类一区| 国产毛片精品视频| 亚洲综合偷拍欧美一区色| 精品国产精品网麻豆系列| 91在线观看污| 麻豆91精品视频| 亚洲精品自拍动漫在线| 日韩一级欧美一级| 91在线丨porny丨国产| 美女视频网站黄色亚洲| 国产精品久久精品日日| 91精品国产入口| 91亚洲精品久久久蜜桃网站 | 日日嗨av一区二区三区四区| 亚洲国产高清不卡| 日韩一级片在线观看| 91偷拍与自偷拍精品| 激情深爱一区二区| 亚洲欧美另类久久久精品2019| 欧美成人免费网站| 欧美唯美清纯偷拍| 成人亚洲精品久久久久软件| 免费av成人在线| 亚洲综合丁香婷婷六月香| 国产人成亚洲第一网站在线播放| 欧美男女性生活在线直播观看 | 欧美电影免费提供在线观看| 色噜噜狠狠成人中文综合| 国产+成+人+亚洲欧洲自线| 日本不卡视频一二三区|