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

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

?? chario.c

?? 分享:Dos操作系統的源程序
?? C
字號:

/****************************************************************/
/*                                                              */
/*                          chario.c                            */
/*                           DOS-C                              */
/*                                                              */
/*    Character device functions and device driver interface    */
/*                                                              */
/*                      Copyright (c) 1994                      */
/*                      Pasquale J. Villani                     */
/*                      All Rights Reserved                     */
/*                                                              */
/* This file is part of DOS-C.                                  */
/*                                                              */
/* DOS-C 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, or (at your option) any later version.                    */
/*                                                              */
/* DOS-C is distributed in the hope that it will be useful, but */
/* WITHOUT ANY WARRANTY; without even the implied warranty of   */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See    */
/* the GNU General Public License for more details.             */
/*                                                              */
/* You should have received a copy of the GNU General Public    */
/* License along with DOS-C; see the file COPYING.  If not,     */
/* write to the Free Software Foundation, 675 Mass Ave,         */
/* Cambridge, MA 02139, USA.                                    */
/*                                                              */
/****************************************************************/

#include "../../hdr/portab.h"

/* $Logfile:   C:/dos-c/src/fs/chario.c_v  $ */
#ifdef VERSION_STRINGS
static BYTE *charioRcsId = "$Header:   C:/dos-c/src/fs/chario.c_v   1.8   11 Jan 1998  2:06:08   patv  $";
#endif

/* $Log:   C:/dos-c/src/fs/chario.c_v  $
 * 
 *    Rev 1.8   11 Jan 1998  2:06:08   patv
 * Added functionality to ioctl.
 * 
 *    Rev 1.7   08 Jan 1998 21:36:40   patv
 * Changed automatic requestic packets to static to save stack space.
 * 
 *    Rev 1.6   04 Jan 1998 23:14:38   patv
 * Changed Log for strip utility
 * 
 *    Rev 1.5   30 Dec 1997  4:00:20   patv
 * Modified to support SDA
 * 
 *    Rev 1.4   16 Jan 1997 12:46:36   patv
 * pre-Release 0.92 feature additions
 * 
 *    Rev 1.3   29 May 1996 21:15:12   patv
 * bug fixes for v0.91a
 * 
 *    Rev 1.2   01 Sep 1995 17:48:42   patv
 * First GPL release.
 * 
 *    Rev 1.1   30 Jul 1995 20:50:26   patv
 * Eliminated version strings in ipl
 * 
 *    Rev 1.0   02 Jul 1995  8:05:44   patv
 * Initial revision.
 *
 */ 
/* $EndLog$ */

#include "globals.h"

static BYTE *con_name = "CON";

#if !defined(KERNEL) && !defined(IPL)
VOID INRPT FAR 
handle_break (void)
{
}
#endif

#ifdef PROTO
BOOL _sto(COUNT);
VOID kbfill(keyboard FAR *, UCOUNT, BOOL);
struct dhdr FAR *finddev(UWORD attr_mask);

#else
BOOL _sto();
VOID kbfill();
struct dhdr FAR *finddev();
#endif

/*      Return a pointer to the first driver in the chain that 
 *      matches the attributes. 
 */

struct dhdr FAR *finddev(UWORD attr_mask)
{
	struct dhdr far *dh;
	
	for (dh = nul_dev.dh_next; FP_OFF(dh) != 0xFFFF; dh = dh -> dh_next)
	{
	     if (dh -> dh_attr & attr_mask)
		 return dh;
	}

	/* return dev/null if no matching driver found */
	return &nul_dev;
}


BYTE *CharName(struct dhdr far *lpDhdr)
{
	struct dhdr far *dh;
	static BYTE szName[9];
	COUNT nIdx;

	/* Scan through the device list */
	for (dh = nul_dev.dh_next; FP_OFF(dh) != 0xFFFF; dh = dh -> dh_next)
	{
		if (dh == lpDhdr)
			break;
	}

	/* return name of /dev/null if no matching driver found */
	if(FP_OFF(dh) == 0xFFFF)
		dh = (struct dhdr far *)&nul_dev;

	/* Now convert it to a C string */
	for(nIdx = 0; nIdx < 8 && dh -> dh_name[nIdx] != ' '; nIdx++)
		szName[nIdx] = dh -> dh_name[nIdx];
	szName[nIdx] = '\0';
	return szName;
}

static BOOL 
_sto (COUNT c)
{
	BYTE buf = c;

	if(con_break())
	{
		handle_break();
		return FALSE;
	}
	CharReqHdr.r_length = sizeof(request);
	CharReqHdr.r_command = C_OUTPUT;
	CharReqHdr.r_count = 1;
	CharReqHdr.r_trans = (BYTE FAR *)(&buf);
	CharReqHdr.r_status = 0;
	execrh((request FAR *)&CharReqHdr, (struct dhdr FAR *)finddev(ATTR_STDOUT));
	if(CharReqHdr.r_status & S_ERROR)
		return char_error(&CharReqHdr, con_name);
	return TRUE;
}


VOID 
sto (COUNT c)
{
	/* Test for hold char                                   */
	con_hold();
	
	/* Display a printable character                        */
	if(c != HT)
		_sto(c);
	if(c == CR)
		scr_pos = 0;
	else if(c == BS)
	{
		if(scr_pos > 0)
			--scr_pos;
	}
	else if(c == HT)
	{
		do
			_sto(' ');
		while(++scr_pos & 7);
	}
	else if(c != LF && c != BS)
		++scr_pos;
}


VOID 
mod_sto (REG UCOUNT c)
{
	if(c < ' ' && c != HT)
	{
		sto('^');
		sto(c + '@');
	}
	else
		sto(c);
}


VOID 
destr_bs (void)
{
	sto(BS);
	sto(' ');
	sto(BS);
}


UCOUNT 
_sti (void)
{
	UBYTE cb;

	CharReqHdr.r_length = sizeof(request);
	CharReqHdr.r_command = C_INPUT;
	CharReqHdr.r_count = 1;
	CharReqHdr.r_trans = (BYTE FAR *)&cb;
	CharReqHdr.r_status = 0;
	execrh((request FAR *)&CharReqHdr, (struct dhdr FAR *)finddev(ATTR_STDIN));
	if(CharReqHdr.r_status & S_ERROR)
		return char_error(&CharReqHdr, con_name);
	if(cb == CTL_C)
	{
		handle_break();
		return CTL_C;
	}
	else
		return cb;
}

VOID 
con_hold (void)
{
	CharReqHdr.r_unit = 0;
	CharReqHdr.r_status = 0;
	CharReqHdr.r_command = C_NDREAD;
	CharReqHdr.r_length = sizeof(request);
	execrh((request FAR *)&CharReqHdr, (struct dhdr FAR *)finddev(ATTR_STDIN));
	if(CharReqHdr.r_status & S_BUSY)
		return;
	if(CharReqHdr.r_ndbyte == CTL_S)
	{
		_sti();
		while(_sti() != CTL_Q)
			/* just wait */;
	}
}


BOOL 
con_break (void)
{
	CharReqHdr.r_unit = 0;
	CharReqHdr.r_status = 0;
	CharReqHdr.r_command = C_NDREAD;
	CharReqHdr.r_length = sizeof(request);
	execrh((request FAR *)&CharReqHdr, (struct dhdr FAR *)finddev(ATTR_STDIN));
	if(CharReqHdr.r_status & S_BUSY)
		return FALSE;
	if(CharReqHdr.r_ndbyte == CTL_C)
	{
		_sti();
		return TRUE;
	}
	else
		return FALSE;
}


BOOL 
KbdBusy (void)
{
	CharReqHdr.r_unit = 0;
	CharReqHdr.r_status = 0;
	CharReqHdr.r_command = C_ISTAT;
	CharReqHdr.r_length = sizeof(request);
	execrh((request FAR *)&CharReqHdr, (struct dhdr FAR *)finddev(ATTR_STDIN));
	if(CharReqHdr.r_status & S_BUSY)
		return TRUE;
	else
		return FALSE;
}

VOID 
KbdFlush (void)
{
	CharReqHdr.r_unit = 0;
	CharReqHdr.r_status = 0;
	CharReqHdr.r_command = C_IFLUSH;
	CharReqHdr.r_length = sizeof(request);
	execrh((request FAR *)&CharReqHdr, (struct dhdr FAR *)finddev(ATTR_STDIN));
}


static VOID kbfill(kp, c, ctlf)
keyboard FAR *kp;
UCOUNT c;
BOOL ctlf;
{
	if(kp -> kb_count > kp -> kb_size)
	{
		sto(BELL);
		return;
	}
	kp -> kb_buf[kp -> kb_count++] = c;
	if(!ctlf)
		mod_sto(c);
	else
		sto(c);
}


VOID sti(kp)
keyboard FAR *kp;
{
	REG UWORD c, cu_pos = scr_pos;
	WORD init_count = kp -> kb_count;
#ifndef NOSPCL
	static BYTE local_buffer[LINESIZE];
#endif

	if(kp -> kb_size == 0)
		return;
	if(kp -> kb_size <= kp -> kb_count || kp -> kb_buf[kp -> kb_count] != CR)
		kp -> kb_count = 0;
	FOREVER
	{
		switch(c = _sti())
		{
		case CTL_F:
			continue;

#ifndef NOSPCL
		case SPCL:
			switch(c = _sti())
			{
			case LEFT:
				goto backspace;

			case F3:
			{
				REG COUNT i;

				for(i = kp -> kb_count; local_buffer[i] != '\0'; i++)
				{
					c = local_buffer[kp -> kb_count];
					if(c == '\r' || c == '\n')
						break;
					kbfill(kp, c, FALSE);
				}
				break;
			}

			case RIGHT:
				c = local_buffer[kp -> kb_count];
				if(c == '\r' || c == '\n')
					break;
				kbfill(kp, c, FALSE);
				break;
			}
			break;
#endif

		case CTL_BS:
		case BS:
		backspace:
			if(kp -> kb_count > 0)
			{
				if(kp -> kb_buf[kp -> kb_count - 1] >= ' ')
				{
					destr_bs();
				}
				else if((kp -> kb_buf[kp -> kb_count - 1] < ' ')
				 && (kp -> kb_buf[kp -> kb_count - 1] != HT))
				{
					destr_bs();
					destr_bs();
				}
				else if(kp -> kb_buf[kp -> kb_count - 1] == HT)
				{
					do
					{
						destr_bs();
					}
					while((scr_pos > cu_pos) && (scr_pos & 7));
				}
				--kp -> kb_count;
			}
			break;

		case CR:
			kbfill(kp, CR, TRUE);
			kbfill(kp, LF, TRUE);
#ifndef NOSPCL
			fbcopy((BYTE FAR *)kp -> kb_buf,
			 (BYTE FAR *)local_buffer, (COUNT)kp -> kb_count);
			local_buffer[kp -> kb_count] = '\0';
#endif
			return;

		case LF:
			sto(CR);
			sto(LF);
			break;

		case ESC:
			sto('\\');
			sto(CR);
			sto(LF);
			for(c = 0; c < cu_pos; c++)
				sto(' ');
			kp -> kb_count = init_count;
			break;

		default:
			kbfill(kp, c, FALSE);
			break;
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品美女久久久久aⅴ | 国产精品夜夜嗨| 国产成人综合网站| 欧美久久久久免费| 国产精品福利一区二区| 久久精品72免费观看| 欧美三级电影一区| 亚洲欧美在线观看| 午夜伦理一区二区| 色综合视频在线观看| 国产三级精品在线| 精品一区二区日韩| 欧美一级日韩一级| 五月激情丁香一区二区三区| 色欧美日韩亚洲| 国产精品天干天干在线综合| 国产精品亚洲专一区二区三区| 91精品国产麻豆| 亚洲成人免费视| 欧美日韩成人综合天天影院 | 天天色图综合网| 在线视频综合导航| 亚洲精品ww久久久久久p站| 丁香网亚洲国际| 国产日产欧美一区二区视频| 国产伦精品一区二区三区视频青涩 | 51午夜精品国产| 亚洲gay无套男同| 欧美专区亚洲专区| 亚洲一区二区免费视频| 在线观看成人小视频| 一区二区三区毛片| 精品视频999| 丝袜诱惑亚洲看片| 欧美大片在线观看一区二区| 捆绑调教一区二区三区| 精品国产一二三| 国产91丝袜在线18| 日韩码欧中文字| 欧美午夜寂寞影院| 日韩电影免费一区| 久久综合999| 成人禁用看黄a在线| 亚洲嫩草精品久久| 欧美日韩一区二区三区四区五区| 日韩高清在线观看| 精品久久久久99| 国产成人av一区二区| 欧美极品另类videosde| 色呦呦日韩精品| 天堂av在线一区| 久久久久久久久久电影| eeuss鲁片一区二区三区在线观看| 亚洲视频在线一区观看| 欧美精品日日鲁夜夜添| 精品一区二区三区在线观看国产| 国产午夜精品一区二区| 91丨porny丨中文| 日韩影院在线观看| 国产亚洲一区字幕| 91成人网在线| 国产精品香蕉一区二区三区| 中文字幕一区二区三区视频| 欧美久久一二三四区| 国产精品99精品久久免费| 亚洲精品中文在线影院| 精品国精品国产| 91福利社在线观看| 国产高清不卡二三区| 亚洲成年人影院| 久久精品一区二区三区不卡牛牛| 欧美午夜精品久久久久久超碰 | 久久er99精品| 亚洲精品久久久蜜桃| 久久网这里都是精品| 欧美主播一区二区三区美女| 国产很黄免费观看久久| 五月天激情小说综合| 国产精品蜜臀av| 欧美r级在线观看| 欧美日韩一区二区三区视频| 成人一区二区三区在线观看| 看电影不卡的网站| 午夜伦理一区二区| 亚洲欧美日韩久久| 中文成人av在线| 精品国产伦一区二区三区观看体验| 色妞www精品视频| 波多野结衣在线一区| 日本不卡免费在线视频| 亚洲在线一区二区三区| 日本一区二区视频在线观看| 欧美一区二区三区免费大片 | 欧美精品第1页| 91片在线免费观看| 成人在线一区二区三区| 国产成人午夜精品5599| 久久99国产精品久久99果冻传媒| 亚欧色一区w666天堂| 国产精品卡一卡二| 中文字幕成人av| 久久综合九色综合97_久久久| 欧美一级高清大全免费观看| 欧美精品日日鲁夜夜添| 欧美日本乱大交xxxxx| 欧美日韩精品欧美日韩精品 | 韩国中文字幕2020精品| 日韩av一区二| 美女一区二区在线观看| 久久精品国产免费| 欧美激情综合在线| 91美女在线观看| 成人黄色小视频| 成人永久aaa| 成人动漫av在线| 99久久精品免费看| 92精品国产成人观看免费| 成人免费av资源| 91亚洲精品乱码久久久久久蜜桃| 成人晚上爱看视频| a级精品国产片在线观看| 成人av网址在线观看| 91蜜桃在线观看| 在线视频综合导航| 91精品免费观看| 精品国产一区二区国模嫣然| 国产欧美一区二区精品性色 | 久久国产免费看| 国产曰批免费观看久久久| 国产成人在线视频网站| 成人动漫精品一区二区| 欧美影视一区二区三区| 欧美一二三区在线| 亚洲国产精品成人久久综合一区| 中文字幕亚洲成人| 亚洲成av人片www| 黄页网站大全一区二区| av亚洲精华国产精华精华| 欧美色老头old∨ideo| 日韩精品一区二区三区视频在线观看| 国产欧美日韩精品在线| 一区二区在线观看不卡| 青青青伊人色综合久久| 国产电影一区二区三区| 99精品偷自拍| 日韩欧美123| 亚洲欧美激情视频在线观看一区二区三区| 性做久久久久久| 国产成人a级片| 欧美日韩一区中文字幕| 国产三级欧美三级| 亚洲一区二区精品久久av| 国产精品一区在线观看乱码 | 午夜伦理一区二区| 国产高清精品网站| 在线不卡一区二区| 国产精品成人免费| 麻豆国产欧美日韩综合精品二区| 国产精品一区二区果冻传媒| 欧美人动与zoxxxx乱| 国产精品国产三级国产三级人妇| 婷婷一区二区三区| 99国产精品久久久久久久久久| 欧美日韩电影一区| 亚洲视频在线观看一区| 精品一区二区在线播放| 欧美色综合久久| 国产精品国产三级国产普通话99 | 亚洲最色的网站| 国产精品一区二区黑丝| 欧美一区二视频| 亚洲色欲色欲www| 国产麻豆精品视频| 91精品国产综合久久福利软件 | 欧美精品一卡两卡| 国产精品久久久久久久久免费桃花| 奇米888四色在线精品| 99re6这里只有精品视频在线观看| 日韩视频一区二区三区在线播放| 亚洲在线一区二区三区| 99精品视频在线观看| 国产欧美精品国产国产专区 | 777午夜精品视频在线播放| 欧美一区二区三区视频在线观看| 国产精品福利一区二区三区| 国产在线国偷精品免费看| 在线不卡免费av| 亚洲国产欧美在线人成| 91香蕉国产在线观看软件| 中文在线资源观看网站视频免费不卡| 日韩黄色小视频| 欧美高清精品3d| 日韩国产在线观看| 欧美一区二区在线不卡| 亚洲国产一区二区视频| 欧美日韩美女一区二区| 亚洲一区在线播放| 欧美亚洲综合久久| 美日韩一区二区| 国产99久久久精品|