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

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

?? monitor.c

?? MMURTL(tm) Computer Operating System Ver x0.8, source code.
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/*
  MMURTL Operating System Source Code
  Copyright 1991,1992,1993, Richard A. Burgess
  ALL RIGHTS RESERVED
  Version x0.8
*/


/* This is the MMURTL Monitor program.  It is the OS monitor providing
   the user with statistics and control of the environment, and a few
   basic functions such as starting a CLI.

   The monitor has three main functions:
   1) Sets up internal device drivers and services.
   2) Checks config files and loads any system services specified
      in the config file,
   3) Loads the first CLI and assigns the video and keyboard to it.

   Because the Monitor is part of the OS we do not declare a main
   function.  The entry point to the monitor is called Monitor and
   it has no parameters.  After the OS gets done with its low level
   initialization, the monitor procedure is "Jumped" to.

*/

#define U32 unsigned long
#define S32 long
#define U16 unsigned int
#define S16 int
#define U8 unsigned char
#define S8 char

#include "MKernel.h"
#include "MMemory.h"
#include "MData.h"
#include "MTimer.h"
#include "MVid.h"
#include "MKbd.h"
#include "MJob.h"
#include "MFiles.h"
#include "MDevDrv.h"


#define ok 0
#define ErcNoDevice 504


char rgStatLine[] =
"mm/dd/yy  00:00:00              MMURTL Monitor                   Tick:0         ";

char rgMonMenu1[] = "LdCLI\xb3Jobs  \xb3Stats \xb3      ";
char rgMonMenu2[] = "     \xb3      \xb3      \xb3Reboot";
char rgMonMenu3[] = "     \xb3Debug \xb3      \xb3     ";

char rgCPR1[] ="MMURTL (tm) - Message based, MUltitasking, Real-Time kerneL";
char rgCPR2[] ="Copyright (c) R.A. Burgess, 1990-1993, All Rights Reserved";

char *CRLF = "\r\n\r\n";

unsigned long Color = WHITE|BGBLACK;		/* Color test for xprintf */

long time, date, tick;

unsigned long KillExch;		/* Messaging for stat task KILL proc */
unsigned long KillMsg[2];	/* First DWORD = TSSExch, second is ERROR */
unsigned long KillError;
unsigned long KillJob;
unsigned char fKilled;

unsigned long MngrExch;		/* Messaging for stat task */
unsigned long MngrMsg[2];
unsigned long MngrHndl;
unsigned long gcode;

unsigned long GPExch;		/* Messaging for main */
unsigned long GPMsg[2];
unsigned long GPHndl;

unsigned long GP1Exch;		/* Extra Messaging for main */
unsigned long GP1Msg[2];
unsigned long GP1Hndl;

/* Structure for disk device driver status and setup */

struct {
  U32 erc;
  U32 blocks_done;
  U32 BlocksMax;
  U8 fNewMedia;
  U8 type_now;		/* current disk type for drive selected */
  U8 resvd1[2];		/* padding for DWord align  */
  U32 nCyl;			/* total physical cylinders */
  U32 nHead;		/* total heads on device    */
  U32 nSectors;		/* Sectors per track        */
  U32 nBPS;			/* Number of bytes per sect */

  U32 LastRecalErc0;
  U32 LastSeekErc0;
  U8  LastStatByte0;
  U8  LastErcByte0;
  U8  fIntOnReset;	/* Interrupt was received on HDC_RESET */
  U8  filler0;
  U32 LastRecalErc1;
  U32 LastSeekErc1;
  U8  LastStatByte1;
  U8  LastErcByte1;
  U8  ResetStatByte;	/* Status Byte immediately after RESET */
  U8  filler1;
  U32 resvd1[2];	/* out to 64 bytes */
  } DiskStatus;

struct JCBRec *pKillJCB;

long StatStack[256];	/* 1024 byte stack for stat task */

long MngrStack[256];	/* 1024 byte stack for Mngr task */

unsigned char Buffer[512];
unsigned long nMemPages;

extern unsigned long oMemMax;
extern unsigned long nSwitches;

extern unsigned long nRQBLeft;
extern unsigned long nJCBLeft;
extern unsigned long nTSSLeft;
extern unsigned long nLBLeft;
extern unsigned long nEXCHLeft;



/*============ protos (NOT FAR MMURTL) =======================*/

extern long InitKBDService(void);	/* From KbdCode.inc */
extern long fdisk_setup(void);		/* From FDD.c */
extern long hdisk_setup(void);		/* From FDD.c */
extern long coms_setup(void);		/* From COMMDRV.c */
extern long InitFS(void);			/* From Fsys.c */


/*============ protos (NEAR MMURTL support calls) =======================*/

extern long GetExchOwner(long Exch, char *pJCBRet);
extern long DeAllocJCB(long *pdJobNumRet, char *ppJCBRet);

/*======================================================*/
/*=================== START OF CODE ====================*/
/*======================================================*/


/**************************************************************
 Temporary formatted output routines for montitor program until
 CM32 library is ported. printf, sprintf.
***************************************************************/

#include <stdarg.h>

#define	S_SIZE	100

/*********************************************
* Determine if a character is a numeric digit
**********************************************/

long isdigit(long chr)
{
;
#asm
	MOV EAX,[EBP+8]
	CMP AL,'0'		;
	JL isdigit0		;No
	CMP AL,'9'		;
	JLE isdigit1	;Yes
isdigit0:
	XOR EAX,EAX		;No
	JMP SHORT isdigit2
isdigit1:
	MOV EAX, -1
isdigit2:

#endasm
}

long strlen(char *cs)
{
;
#asm
	XOR EAX, EAX
	MOV ESI,[EBP+8]
_strlen0:
	CMP BYTE PTR [ESI],0
	JE _strlen1
	INC ESI
	INC EAX
	JMP SHORT _strlen0
_strlen1:
#endasm
}

/*************************************************************
 This does the actual parsing of the format and also moves to
 the next arg(s) in the list from the passed in arg pointer.
 The number of chars written is returned (not incl \0).
**************************************************************/
long _ffmt(char *outptr, char *fmt, long *argptr)
{
char numstk[33], *ptr, justify, zero, minus, chr;
unsigned long width, value, i, total;

	total = 0;
	while(chr = *fmt++) {
		if(chr == '%') {					/* format code */
			chr = *fmt++;
            ptr = &numstk[32];
			*ptr = justify = minus = 0;
			width = value = i = 0;
			zero = ' ';
			if(chr == '-') {				/* left justify */
				--justify;
				chr = *fmt++;
				}
			if(chr == '0')					/* leading zeros */
				zero = '0';
			while(isdigit(chr)) {			/* field width specifier */
				width = (width * 10) + (chr - '0');
				chr = *fmt++;
				}

			value = *--argptr;				/* get parameter value */

			switch(chr) {
				case 'd' :					/* decimal number */
					if(value & 0x80000000) {
						value = -value;
						++minus; }
				case 'u' :					/* unsigned number */
					i = 10;
					break;
				case 'x' :					/* hexidecimal number */
				case 'X' :
					i = 16;
					break;
				case 'o' :					/* octal number */
					i = 8;
					break;
				case 'b' :					/* binary number */
					i = 2;
					break;
				case 'c' :					/* character data */
					*--ptr = value;
					break;
				case 's' :					/* string */
					ptr = value;			/* value is ptr to string */
					break;
				default:					/* all others */
					*--ptr = chr;
					++argptr;				/* backup to last arg */
				}

			if(i)		/* for all numbers, generate the ASCII string */
				do {
					if((chr = (value % i) + '0') > '9')
						chr += 7;
					*--ptr = chr; }
				while(value /= i);

			/* output sign if any */

			if(minus) {
				*outptr++ = '-';
				++total;
				if(width)
					--width;
				}

			/* pad with 'zero' value if right justify enabled  */

			if(width && !justify) {
				for(i = strlen(ptr); i < width; ++i)
					*outptr++ = zero;
					++total;
				}

			/* move in data */

			i = 0;
			value = width - 1;

			while((*ptr) && (i <= value)) {
				*outptr++ = *ptr++;
				++total;
				++i; }

			/* pad with 'zero' value if left justify enabled */

			if(width && justify) {
				while(i < width) {
					*outptr++ = zero;
					++total;
					++i;
					}
				}
			}
		else {
			/* not format char, just move into string  */
			*outptr++ = chr;
			++total;
			}
		}

	*outptr = 0;
	return total;
}

/************************************
    Formatted print to screen
*************************************/

long xprintf(char *fmt, ...)
{
	va_list ap;
	long total;
	char buffer[S_SIZE];

	va_start(ap, fmt);		/* set up ap pointer */
	total = _ffmt(buffer, fmt, ap);
	TTYOut(buffer, strlen(buffer), Color);
	va_end(ap, fmt);
	return total;
}

/************************************
    Formatted print to string s
*************************************/

long xsprintf(char *s, char *fmt, ...)
{
	va_list ap;
	long total;

	va_start(ap, fmt);			/* set up ap pointer */
	total = _ffmt(s, fmt, ap);
	va_end(ap, fmt);
	return total;
}

/*********************************************************
    This is called to initialize the sacreen.
*********************************************************/

void InitScreen(void)
{
	ClrScr();
    xsprintf(&rgStatLine[70], "%d", tick);
    PutVidChars(0,0, rgStatLine, 80, WHITE|BGBLUE);
	PutVidChars(0,  24, rgMonMenu1, 26, BLUE|BGWHITE);
	PutVidChars(27, 24, rgMonMenu2, 26, BLUE|BGWHITE);
	PutVidChars(54, 24, rgMonMenu3, 25, BLUE|BGWHITE);
	SetXY(0,1);
	return;
}


/******************* END OF TEMPORARY CODE ********************/


/*********************************************************
    This is the status task for the Monitor.
*********************************************************/

void StatTask(void)
{
unsigned long erc, i, Exch, Msg[2];
U8 *pPD, *pVid;

for(;;) {
	GetCMOSTime(&time);
	rgStatLine[10] = '0' + ((time >> 20) & 0x0f);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九九精品视频在线看| 中文字幕精品在线不卡| 午夜久久久久久电影| 欧美制服丝袜第一页| 亚洲主播在线播放| 欧美日韩三级在线| 日韩电影免费一区| 精品欧美一区二区在线观看| 韩国欧美一区二区| 国产精品久久久久久久久免费樱桃 | 久久久久久久久久美女| 国产suv精品一区二区883| 国产欧美1区2区3区| 色婷婷综合五月| 天堂资源在线中文精品| 精品91自产拍在线观看一区| 懂色av一区二区在线播放| 亚洲图片欧美激情| 5566中文字幕一区二区电影| 国模套图日韩精品一区二区| 中文字幕亚洲电影| 欧美日韩一区在线| 国精产品一区一区三区mba桃花 | 偷窥少妇高潮呻吟av久久免费| 日韩欧美美女一区二区三区| 国产成人精品亚洲777人妖| 亚洲欧美综合在线精品| 欧美日韩精品福利| 精品一区二区三区视频| 亚洲欧洲日韩一区二区三区| 欧美一区二区大片| 国产电影精品久久禁18| 亚洲精品视频一区| 精品国产伦一区二区三区观看体验 | 亚洲欧美日韩国产手机在线| 777奇米成人网| 成人国产精品免费观看| 日韩电影免费在线看| |精品福利一区二区三区| 日韩欧美123| 欧美在线看片a免费观看| 国产 日韩 欧美大片| 日本免费新一区视频| 一区二区三区日韩精品视频| 久久久精品国产免大香伊| 欧美日韩激情一区二区三区| 波波电影院一区二区三区| 久久99精品久久久久久国产越南| 亚洲综合色区另类av| 中文字幕一区二| 久久久99久久精品欧美| 555夜色666亚洲国产免| 色综合婷婷久久| 成人久久久精品乱码一区二区三区| 男女男精品视频网| 亚洲第一狼人社区| 亚洲色图.com| 一区在线观看免费| 国产偷国产偷精品高清尤物| 欧美va亚洲va| 91精品久久久久久久99蜜桃| 日本乱人伦aⅴ精品| 成人av电影在线播放| 国产乱子轮精品视频| 麻豆久久一区二区| 午夜欧美视频在线观看| 亚洲妇熟xx妇色黄| 亚洲午夜在线电影| 亚洲精品美腿丝袜| 樱桃国产成人精品视频| 亚洲黄一区二区三区| 国产精品一二二区| 久久精品国产99国产| 蜜臀av一区二区| 六月丁香婷婷久久| 久久狠狠亚洲综合| 老司机一区二区| 九色porny丨国产精品| 麻豆国产欧美一区二区三区| 久久99精品一区二区三区三区| 奇米综合一区二区三区精品视频| 日韩国产精品大片| 免费看欧美女人艹b| 久久国产精品露脸对白| 国产一区二区主播在线| 国产一区二区日韩精品| 懂色av中文字幕一区二区三区| 成人av资源下载| 91在线看国产| 在线观看91视频| 日韩一区二区免费在线电影| 欧美tickling挠脚心丨vk| 久久你懂得1024| 日韩理论电影院| 亚洲午夜精品在线| 久久99热狠狠色一区二区| 国产**成人网毛片九色 | 精品系列免费在线观看| 国产麻豆视频一区| av中文字幕亚洲| 欧美亚洲国产一区二区三区va| 欧美一区二区在线不卡| 久久精品一区蜜桃臀影院| 亚洲色图欧洲色图婷婷| 日韩av一区二区三区四区| 国产美女娇喘av呻吟久久| 99久久婷婷国产精品综合| 欧美酷刑日本凌虐凌虐| 欧美mv日韩mv亚洲| 国产**成人网毛片九色 | 亚洲欧美一区二区久久| 午夜精品福利一区二区蜜股av | 不卡的av中国片| 555www色欧美视频| 国产欧美一区二区精品婷婷 | 成人av午夜影院| 91久久精品网| 精品1区2区在线观看| 中文字幕在线不卡| 麻豆国产91在线播放| 不卡视频在线观看| 日韩欧美一区二区视频| 亚洲情趣在线观看| 久久99精品久久久久婷婷| 色婷婷综合久久久中文一区二区| 日韩一区二区麻豆国产| 亚洲免费成人av| 国产乱码精品一区二区三区忘忧草| 91影院在线观看| 精品国产一区二区三区不卡| 亚洲欧美视频在线观看视频| 激情都市一区二区| 欧美日韩精品久久久| 国产精品久久久久久一区二区三区 | 亚洲国产精品一区二区尤物区| 久久91精品国产91久久小草| 91福利视频久久久久| 国产精品国产自产拍高清av王其| 久久国产人妖系列| 91精品国产色综合久久ai换脸 | 男男视频亚洲欧美| 在线免费视频一区二区| 中文字幕精品一区| 韩国午夜理伦三级不卡影院| 51精品国自产在线| 有码一区二区三区| 91丝袜国产在线播放| 国产欧美日产一区| 国产在线播放一区| 91精品国产一区二区三区 | 精品欧美黑人一区二区三区| 性欧美大战久久久久久久久| av中文字幕亚洲| 中文字幕第一区二区| 国产一区二区三区免费| 精品99久久久久久| 韩国三级电影一区二区| 日韩精品一区二区三区在线观看| 亚洲一区二区三区四区中文字幕| 91美女片黄在线观看91美女| 国产精品久久久久久久午夜片| 成人爽a毛片一区二区免费| 久久这里只有精品视频网| 九九视频精品免费| 久久久影视传媒| 国产裸体歌舞团一区二区| 精品国产欧美一区二区| 精品影院一区二区久久久| 在线综合视频播放| 奇米影视在线99精品| 欧美成人官网二区| 麻豆国产欧美日韩综合精品二区 | 国内精品久久久久影院色| 日韩视频免费直播| 精品在线一区二区| 久久午夜国产精品| 国产成人日日夜夜| 国产精品久久久久久久蜜臀| 91小视频免费观看| 午夜精品国产更新| 欧美不卡在线视频| 国产福利视频一区二区三区| 中文字幕一区二区三区在线不卡 | 91精品在线一区二区| 亚洲一区二区三区四区五区黄| 91视视频在线直接观看在线看网页在线看| 中文字幕av一区二区三区| 91日韩在线专区| 久久久精品日韩欧美| 成人午夜精品在线| 亚洲激情男女视频| 成人免费观看av| 麻豆91免费观看| 亚洲伊人色欲综合网| 国产日韩欧美电影| 欧美一二三区在线观看| 色综合亚洲欧洲| 国产1区2区3区精品美女| 美女尤物国产一区| 亚洲最新在线观看|