⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prttext.h

📁 该模块包括作业调度的三个系统进程。P1、P2、P3进程功能的实现。 P1负责对用户作业预输入处理
💻 H
📖 第 1 页 / 共 2 页
字号:
************************************************************************************/
DISPLAY_CPU()
{
	char buf[80];
	if(DISPLAY_MODE == TEXT)
	{
		ACTIVE_WINDOW(2);
		/* 将系统时间转为字符串 */
		itoa(RTIME,buf,10);
		/* 改变字符串的长度 */
		CHANGE_LEN(buf,4);
		/* 显示该字符串 */
		PRINT_INFORMATION(8,1,buf,15,WIN[1].wb);

		/* 将相对时间转为字符串 */
		itoa(TIME,buf,10);
		/* 改变字符串的长度 */
		CHANGE_LEN(buf,4);
		/* 显示该字符串 */
		PRINT_INFORMATION(8,2,buf,15,WIN[1].wb);

		/* 将PC计数器的值转为字符串 */
		itoa(PC,buf,10);
		/* 改变字符串的长度 */
		CHANGE_LEN(buf,4);
		/* 显示该字符串 */
		PRINT_INFORMATION(8,3,buf,15,WIN[1].wb);

		/* 将通用寄存器的值转为字符串 */
		itoa(R,buf,10);
		/* 改变字符串的长度 */
		CHANGE_LEN(buf,4);
		/* 显示该字符串 */
		PRINT_INFORMATION(8,4,buf,15,WIN[1].wb);

		buf[0] = C;
		buf[1] = '\0';
		/* 显示该字符串 */
		PRINT_INFORMATION(8,5,buf,15,WIN[1].wb);

		/* 将程序中断寄存器为字符串 */
		itoa(__PI,buf,10);
		/* 改变字符串的长度 */
		CHANGE_LEN(buf,4);
		/* 显示该字符串 */
		PRINT_INFORMATION(22,1,buf,15,WIN[1].wb);

		/* 将系统中断寄存器转为字符串 */
		itoa(__SI,buf,10);
		/* 改变字符串的长度 */
		CHANGE_LEN(buf,4);
		/* 显示该字符串 */
		PRINT_INFORMATION(22,2,buf,15,WIN[1].wb);

		/* 将TI中断寄存器转为字符串 */
		itoa(__TI,buf,10);
		/* 改变字符串的长度 */
		CHANGE_LEN(buf,4);
		/* 显示该字符串 */
		PRINT_INFORMATION(22,3,buf,15,WIN[1].wb);

		/* 将IOI中断寄存器转为字符串 */
		itoa(__IOI,buf,10);
		/* 改变字符串的长度 */
		CHANGE_LEN(buf,4);
		/* 显示该字符串 */
		PRINT_INFORMATION(22,4,buf,15,WIN[1].wb);

		/* 显示当前指令内容 */
		PRINT_INFORMATION(14,6,CURRENT_INSTRUCTION,15,WIN[1].wb);
	}
}

/***********************************************************************************
模块名称:	界面输出(文本方式)
函 数 名:	DISPLAY_MEMORY
功    能:	显示内存页表使用情况
入口参数:	无
出口参数:	无
调用关系:	被其它模块调用
编    者:	蔡晓跃(AP0106338)
编写日期:
************************************************************************************/
DISPLAY_MEMORY()
{
	int i;
	if(DISPLAY_MODE == TEXT)
	{
		/* 激活第二个窗口 */
		ACTIVE_WINDOW(2);
		for(i=0;i<3;i++)
		{
			/* 如果内存当前页为空闲*/
			if(PAGE_OF_MEMORY[i].status == FREE)
			{
				/* 显示黄色的FREE字样 */
				PRINT_INFORMATION(17,9+i,"   FREE   ",yellow_color,0);
			}
			else
			{
				/* 如果被占用则显示红色的TAKEN字样 */
				PRINT_INFORMATION(17,9+i,"   TAKEN  ",LIGHTRED,0);
			}
		}
	}
}

/***************************************************************************************
模块名称:	界面输出(文本方式)
函 数 名:	DISPLAY_HARDDISK
功    能:	显示硬盘使用情况
入口参数:	无
出口参数:	无
调用关系:	
编    者:	蔡晓跃(AP0106338)
编写日期:
***************************************************************************************/
DISPLAY_HARDDISK()
{
	int i,wlen,rlen;
	if(DISPLAY_MODE == TEXT)
	{
		/* 激活第二窗口 */
		ACTIVE_WINDOW(2);
		wlen = HDWpointer - &HD[0][0];
		if(wlen == 0)
			wlen = -1;
		else
		{
			/* 硬盘每100字作为一个显示单位来显示 */
			wlen /= (100*4);
			wlen++;
		}
		rlen = HDRpointer - &HD[0][0];
		if(rlen == 0)
			rlen = -1;
		else
		{
			rlen /= (100*4);
			rlen++;
		}
		for(i=0;i<10;i++)
		{
			if(i<rlen)
			{
				/* 如果该位置的作业已装入内存,显示白色的LOADED字样 */
				PRINT_INFORMATION(3,9+i,"  LOADED  ",WHITE,0);
			}
			else if(i<wlen)
			{
				/* 如果该位置被使用,则显示浅红色的USED字样 */
				PRINT_INFORMATION(3,9+i,"   USED   ",LIGHTRED,0);
			}
			else
			{
				/* 如果该位置未被使用,显示黄色的YELLOW字样 */
				PRINT_INFORMATION(3,9+i,"   FREE   ",yellow_color,0);
			}
		}
	}
}


/***************************************************************************************
模块名称:	界面输出(文本方式)
函 数 名:	PRINT_INFORMATION
功    能:	在指定的位置上打印字符串信息
入口参数:	(int x,int y)位置 (char *p)要打印的字符串首地址 (int t,int b)文本颜色和背景颜色
出口参数:	无
调用关系:	
编    者:	蔡晓跃(AP0106338)
编写日期:
***************************************************************************************/
PRINT_INFORMATION(int x,int y,char *p,int t,int b)
{
	if(DISPLAY_MODE == TEXT)
	{
		/* 跳到指定的位置 */
		gotoxy(x,y);
		/* 设置前景即文本颜色 */
		textcolor(t);
		/* 设置背景颜色 */
		textbackground(b);
		/* 在窗口内打印字符串信息 */
		cprintf("%s",p);
	}
}

/****************************************************************************************
所属模块:	界面输出(文本方式)
函 数 名:	INIT_QUEUE_WINDOW
功    能:	在队列窗口中各队列信息
入口参数:	无
出口参数:	无
调用关系:
编    者:	蔡晓跃(AP0106338)
编写日期:
****************************************************************************************/
INIT_QUEUE_WINDOW()
{
	if(DISPLAY_MODE == TEXT)
	{
		/* 激活窗口3 */
		ACTIVE_WINDOW(3);
		/* 显示运行队列 */
		PRINT_INFORMATION(1,1,"RUNNING:",WIN[2].wt,WIN[2].wb);
		/* 显示就绪队列 */
		PRINT_INFORMATION(1,2,"READY  :",WIN[2].wt,WIN[2].wb);
		/* 显示阻塞队列 */
		PRINT_INFORMATION(1,3,"IOI BLOCK:",WIN[2].wt,WIN[2].wb);
	}
}

/***************************************************************************************
所属模块:	界面输出(文本方式)
函 数 名:	DISPLAY_QUEUE
功    能:	显示队列成员信息
入口参数:	无
出口参数:	无
调用关系:
编    者:	蔡晓跃(AP0106338)
编写日期:
****************************************************************************************/
DISPLAY_QUEUE()
{
	int j;
	char buf[10];
	PCB *h;
	if(DISPLAY_MODE == TEXT)
	{
		/* 激活窗口3 */
		ACTIVE_WINDOW(3);
		/* 如果运行队列中存在成员,则显示成员信息 */
		if(RUNNING_QUEUE->p_tick == 1)
		{
			/* 将正在运行的进程名称复制到buf缓冲区中 */
			strcpy(buf,RUNNING_QUEUE->p_next->p_name);
			/* 改变字符串长度 */
			CHANGE_LEN(buf,5);
		}
		else
		{
			/* 如果运行队列中没有进程 ,则置字符串为空串 */
			buf[0]='\0';
			/* 改变字符串长度 */
			CHANGE_LEN(buf,5);
		}
		/* 显示运行队列成员信息 */
		PRINT_INFORMATION(9,1,buf,yellow_color,WIN[2].wb);

		h = READY_QUEUE->p_next;
		/* 循环显示就绪队列中的成员信息 */
		for(j=0;j<3;j++)
		{
			if(h != NULL)
			{
				/* 将就绪队列中的进程名称复制到buf缓冲区中 */
				strcpy(buf,h->p_name);
				/* 改变字符串长度 */
				CHANGE_LEN(buf,6);
			}
			else
			{
				/* 如果没有进程 ,则置字符串为空串 */
				buf[0]='\0';
				/* 改变字符串长度 */
			CHANGE_LEN(buf,6);
			}
			/* 显示就绪队列成员信息 */
			PRINT_INFORMATION(9+j*6,2,buf,yellow_color,WIN[2].wb);
			if(h != NULL)
				h = h->p_next;
		}

		h = IO_BLOCK_QUEUE[1]->p_next;
		/* 循环显示阻塞队列中的成员信息 */
		for(j=0;j<3;j++)
		{
			if(h != NULL)
			{
				/* 将阻塞队列中的进程名称复制到buf缓冲区中 */
				strcpy(buf,h->p_name);
				/* 改变字符串长度 */
				CHANGE_LEN(buf,6);
			}
			else
			{
				/* 如果没有进程 ,则置字符串为空串 */
				buf[0]='\0';
				/* 改变字符串长度 */
				CHANGE_LEN(buf,6);
			}
			/* 显示就绪队列成员信息 */
			PRINT_INFORMATION(11+j*6,3,buf,yellow_color,WIN[2].wb);
			if(h != NULL)
				h = h->p_next;
		}
		
		ACTIVE_WINDOW(1);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -