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

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

?? chario.c

?? Free 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一区二区三区免费野_久草精品视频
99久久久免费精品国产一区二区| 欧美不卡激情三级在线观看| 欧美日韩国产一二三| 久久久久久久久久久99999| 亚洲欧美在线视频| 精品一二三四区| 欧美色网一区二区| 国产精品对白交换视频 | 91精品国产综合久久福利| 欧美国产一区二区| 麻豆国产一区二区| 欧美亚洲尤物久久| 一区在线播放视频| 国产精品一二三在| 欧美xxx久久| 免费成人小视频| 51精品视频一区二区三区| 亚洲永久精品国产| 在线亚洲高清视频| 一个色在线综合| 91精彩视频在线| 亚洲素人一区二区| 99国产精品国产精品毛片| 欧美激情在线一区二区| 国产一区二区三区美女| 日韩精品专区在线影院重磅| 日产国产高清一区二区三区| 欧美日韩国产a| 午夜国产精品一区| 欧美电影一区二区三区| 亚洲国产另类精品专区| 欧美三片在线视频观看| 亚洲国产另类av| 欧美浪妇xxxx高跟鞋交| 日韩国产高清影视| 欧美一区二区免费观在线| 日韩成人av影视| 日韩视频免费观看高清完整版在线观看| 亚洲成av人片一区二区三区| 欧美日韩三级一区二区| 日韩av中文字幕一区二区 | 色综合天天综合给合国产| 国产精品久久久久一区二区三区| 国产精品亚洲视频| 亚洲四区在线观看| 欧美视频在线观看一区二区| 日本成人在线看| 国产清纯白嫩初高生在线观看91| 成人一区二区视频| 亚洲午夜日本在线观看| 91麻豆精品国产| 国产乱码精品1区2区3区| 亚洲欧洲成人自拍| 欧美三级电影一区| 久久aⅴ国产欧美74aaa| 中文字幕一区av| 欧美日本一区二区三区四区| 久久se这里有精品| 中文字幕日韩一区| 欧美日韩久久久一区| 精品一区二区三区在线播放| 国产欧美日韩在线观看| 色婷婷av一区二区三区之一色屋| 日本中文在线一区| 中文字幕av一区二区三区高| 欧美视频在线播放| 国产a久久麻豆| 一区二区三区免费| 精品国产一区二区三区不卡| 99久久久精品免费观看国产蜜| 亚洲成人综合在线| 中文一区二区在线观看| 欧美精品久久久久久久多人混战 | 亚洲6080在线| 国产日韩v精品一区二区| 欧美午夜影院一区| 成人免费的视频| 免费视频最近日韩| 亚洲国产另类av| 亚洲欧洲av一区二区三区久久| 欧美一区国产二区| 一本在线高清不卡dvd| 国产剧情在线观看一区二区| 亚洲高清免费视频| 亚洲欧美区自拍先锋| 26uuu久久天堂性欧美| 欧美日韩中文字幕一区| fc2成人免费人成在线观看播放| 男人的天堂亚洲一区| 亚洲午夜视频在线| 亚洲女厕所小便bbb| 国产日韩欧美不卡| 久久综合精品国产一区二区三区| 欧美日韩精品二区第二页| 99riav久久精品riav| 国产成人综合亚洲网站| 久久成人免费日本黄色| 日韩av一级片| 亚洲国产精品一区二区www在线| 国产精品你懂的在线| 久久久精品免费网站| 日韩欧美国产综合| 91精品国模一区二区三区| 欧美日韩1234| 欧美日韩国产精选| 欧美精品精品一区| 日韩欧美你懂的| 欧美电视剧在线看免费| 欧美日韩国产精品成人| 91精品综合久久久久久| 欧美高清视频一二三区| 制服丝袜日韩国产| 日韩视频免费观看高清完整版在线观看| 欧美人狂配大交3d怪物一区| 欧美精品免费视频| 欧美成人一级视频| 久久久蜜桃精品| 中文一区二区完整视频在线观看| 欧美国产一区二区在线观看 | 懂色av一区二区夜夜嗨| 国产高清久久久久| 成人做爰69片免费看网站| 北岛玲一区二区三区四区| eeuss鲁片一区二区三区在线观看| 99久久精品国产网站| av在线不卡免费看| 在线观看一区不卡| 欧美日韩午夜影院| 日韩欧美国产一区二区三区 | 91麻豆精品国产91久久久久久| 欧美精品久久天天躁| 欧美成人艳星乳罩| 国产精品美女久久久久高潮| 亚洲精品久久久蜜桃| 日日夜夜免费精品视频| 久久99热99| 波多野结衣亚洲一区| 欧美图区在线视频| 欧美一区二区三区免费大片 | 精品国产免费人成电影在线观看四季| 久久影院视频免费| 国产精品激情偷乱一区二区∴| 亚洲男同1069视频| 视频一区二区中文字幕| 国产精品99久| 欧美最猛性xxxxx直播| 日韩色在线观看| 国产精品污网站| 午夜精品一区二区三区免费视频| 久久国产精品色婷婷| 色狠狠色噜噜噜综合网| 欧美电影免费观看高清完整版| ...av二区三区久久精品| 日韩av电影一区| 成人福利在线看| 日韩午夜激情视频| 中文字幕中文字幕一区| 美女免费视频一区二区| 色屁屁一区二区| 欧美精品一区二区精品网| 亚洲精品五月天| 国产精品综合一区二区| 欧美三级乱人伦电影| 国产精品情趣视频| 蜜臀av一区二区在线观看 | 国产91精品一区二区麻豆网站| 欧美日韩国产天堂| 最新高清无码专区| 激情综合亚洲精品| 91精品国产高清一区二区三区| 中文字幕高清不卡| 精品夜夜嗨av一区二区三区| 欧美视频在线观看一区二区| 国产精品萝li| 国产大片一区二区| 日韩免费看的电影| 日韩在线一区二区三区| 91婷婷韩国欧美一区二区| 国产欧美一区二区在线| 久色婷婷小香蕉久久| 在线成人午夜影院| 亚洲一本大道在线| 色婷婷久久综合| 亚洲狠狠丁香婷婷综合久久久| 成人免费观看av| 国产精品欧美精品| 国产成人综合自拍| 久久婷婷久久一区二区三区| 日韩 欧美一区二区三区| 欧美精品1区2区| 亚洲成av人综合在线观看| 欧美三级三级三级| 亚洲国产精品一区二区www在线| 色中色一区二区| 亚洲一区免费视频| 欧美日韩国产另类一区| 视频一区视频二区在线观看| 色综合久久综合中文综合网| 久久精品免费在线观看| 国产一区二区视频在线|