📄 graph.h
字号:
M_G_DISPLAY_READY_QUEUE()
{
int i,color;
PCB *h;
h = READY_QUEUE->p_next;
/* 就绪队列原则上可以无限多,但在显示上最多只能显示15个进程*/
for(i=0;i<15;i++)
{
/* 如果该位置有进程存在*/
if(h!=NULL)
{
/* 则显示进程的颜色*/
color = h->p_color;
h=h->p_next;
}
else
/* 如果该位置无进程存在,则显示为背景颜色*/
color = 0;
/* 调用显示一个进程的函数来显示进程*/
M_G_DISPLAY_OR_CLEAN_ONE_PCB_IN_READY_QUEUE(i,color);
}
}
/****************************************************************************
模块名称: 辅助模块
函 数 名: M_G_DISPLAY_OR_CLEAN_ONE_PCB_IN_READY_QUEUE
功 能: 单独显示一个就绪队列中的进程
入口参数: int index 要显示的进程在进程队列中的序号
int color 要显示的颜色值
出口参数: 无
调用关系: 进程管理函数调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-17
*****************************************************************************/
M_G_DISPLAY_OR_CLEAN_ONE_PCB_IN_READY_QUEUE(int index,int color)
{
setfillstyle(1,color);
bar(ready_left+index*(ready_width/15)+1,ready_top+1,ready_left+(index+1)*(ready_width/15),ready_top+ready_height-1);
}
/****************************************************************************
模块名称: 辅助模块
函 数 名: M_G_MOVE_JOB_FROM_READY_QUEUE_TO_CPU
功 能: 显示进程从就绪队列移动到CPU上
入口参数: 无(默认以当前运行的进程)
出口参数: 无
调用关系: 进程管理调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-17
*****************************************************************************/
M_G_MOVE_JOB_FROM_READY_QUEUE_TO_CPU()
{
char *buf;
int size;
G_POINT ps,pe,s,m,e;
ps.x = ready_left+1;
ps.y = ready_top+1;
pe.x = ps.x + ready_width/15-1;
pe.y = ready_top+ready_height-1;
s.x = ready_left+ready_width/15/2;
s.y = ready_top+ready_height/2;
m.x = s.x;
m.y = cpu_top+cpu_height-ready_height/2;
e.x = cpu_left+cpu_width/2;
e.y = m.y;
/* 计算保存图形的缓冲区的大小 */
size = imagesize(ps.x,ps.y,pe.x,pe.y);
/* 申请缓冲区 */
buf = malloc(size);
/* 保存屏幕内容 */
getimage(ps.x,ps.y,pe.x,pe.y,buf);
M_G_DISPLAY_READY_QUEUE();
/* 调用移动方块自定义函数*/
G_MOVE_RECTANGLE_BASE_MIDDLE_POINT(ps,pe,s,m,buf);
G_MOVE_RECTANGLE_BASE_MIDDLE_POINT(ps,pe,m,e,buf);
/* 显示进程已到达CPU */
M_G_DISPLAY_OR_CLEAN_JOB_IN_CPU(RUNNING_QUEUE->p_next->p_color);
free(buf);
}
/****************************************************************************
模块名称: 辅助模块
函 数 名: M_G_MOVE_JOB_FROM_CPU_TO_READY_QUEUE
功 能: 显示进程从CPU上移动到就绪队列
入口参数: 无(默认以当前运行的进程)
出口参数: 无
调用关系: 进程管理调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-17
*****************************************************************************/
M_G_MOVE_JOB_FROM_CPU_TO_READY_QUEUE()
{
char *buf;
int size;
G_POINT ps,pe,s,m1,m2,m3,e;
ps.x = cpu_left+(cpu_width-ready_width/15)/2;
ps.y = cpu_top+(cpu_height-ready_height);
pe.x = ps.x + ready_width/15-1;
pe.y = ps.y+ready_height-1;
s.x = cpu_left+cpu_width/2;
s.y = cpu_top+cpu_height-ready_height/2;
m1.x = (cpu_left+cpu_width+system_left)/2;
m1.y = s.y;
m2.x = m1.x;
m2.y = ready_top+ready_height+ready_height/2+1;
m3.x = ready_left+(ready_width/15)*(READY_QUEUE->p_tick-1 + 0.5);
m3.y = m2.y;
e.x = m2.x;
e.y = ready_top+ready_height/2;
/* 计算保存图形的缓冲区的大小 */
size = imagesize(ps.x,ps.y,pe.x,pe.y);
/* 申请缓冲区 */
buf = malloc(size);
/* 保存屏幕内容 */
getimage(ps.x,ps.y,pe.x,pe.y,buf);
/* 显示进程没有占用CPU */
M_G_DISPLAY_OR_CLEAN_JOB_IN_CPU(0);
/*显示移动的过程 */
G_MOVE_RECTANGLE_BASE_MIDDLE_POINT(ps,pe,s,m1,buf);
G_MOVE_RECTANGLE_BASE_MIDDLE_POINT(ps,pe,m1,m2,buf);
G_MOVE_RECTANGLE_BASE_MIDDLE_POINT(ps,pe,m2,m3,buf);
G_MOVE_RECTANGLE_BASE_MIDDLE_POINT(ps,pe,m3,e,buf);
free(buf);
}
/****************************************************************************
模块名称: 辅助模块
函 数 名: M_G_DISPLAY_OR_CLEAN_JOB_IN_CPU
功 能: 显示或清除进程占用CPU的情况
入口参数: int color 占用CPU进程的进程颜色
出口参数: 无
调用关系: 进程管理调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-17
*****************************************************************************/
M_G_DISPLAY_OR_CLEAN_JOB_IN_CPU(int color)
{
setfillstyle(1,color);
bar(cpu_left+1,cpu_top+21,cpu_left+cpu_width-1,cpu_top+cpu_height-1);
}
/****************************************************************************
模块名称: 辅助模块
函 数 名: M_G_DISPLAY_OR_CLEAN_DATA_FROM_MEMORY_TO_OUTPUT_BUF
功 能: 显示数据从用户存储区流向输出井
入口参数: int mmindex 数据从哪个内存页表流出(内存按页管理)
int outindex 数据流向输出井的哪个道
int color 要显示的颜色值
出口参数: 无
调用关系: 进程管理调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-17
*****************************************************************************/
M_G_DISPLAY_OR_CLEAN_DATA_FROM_MEMORY_TO_OUTPUT_BUF(int mmindex,int outindex,int color)
{
G_POINT s,m1,m2,m3,e;
/* 先计算画线过程的各个关键坐标*/
s.x = userbuf_left-1;
s.y = userbuf_top + mmindex*(userbuf_height/30) + 1;
m1.x = (sysbuf_left+sysbuf_width+userbuf_left)/2;
m1.y = s.y;
m2.x = m1.x;
m2.y = (out_top+out_height+sysbuf_top)/2;
m3.x = out_left+(out_width/10)/2+outindex*out_width/10;
m3.y = m2.y;
e.x = m3.x;
e.y = out_top+out_height+1;
/* 调用自定义函数画线*/
G_DRAW_LINE_BY_INCREASE(s,m1,color);
G_DRAW_LINE_BY_INCREASE(m1,m2,color);
G_DRAW_LINE_BY_INCREASE(m2,m3,color);
G_DRAW_LINE_BY_INCREASE(m3,e,color);
}
/****************************************************************************
模块名称: 辅助模块
函 数 名: M_G_DISPLAY_OUTPUT_QUEUE
功 能: 刷新显示输出井作业的情况
入口参数: 无
出口参数: 无
调用关系: 被P3调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-17
*****************************************************************************/
M_G_DISPLAY_OUTPUT_QUEUE()
{
int i,c;
JCB *h;
h = J_OUTPUT_JOB_HEAD->j_next;
for(i=0;i<10;i++)
{
if(h!=NULL)
{
c = h->j_color;
h = h->j_next;
}
else
c = 0;
M_G_DISPLAY_OR_CLEAN_ONE_JOB_IN_OUTPUT_QUEUE(i,c);
}
}
/****************************************************************************
模块名称: 辅助模块
函 数 名: M_G_DISPLAY_OR_CLEAN_ONE_JOB_IN_OUTPUT_QUEUE
功 能: 显示或清除一个输出井作业
入口参数: int index 指该作业位于输出井的哪个位置
int color 要显示或清除的颜色值
出口参数: 无
调用关系: 被P3调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-17
*****************************************************************************/
M_G_DISPLAY_OR_CLEAN_ONE_JOB_IN_OUTPUT_QUEUE(int index,int color)
{
setfillstyle(1,color);
bar(out_left+index*(out_width/10)+1,out_top+1,out_left+(index+1)*(out_width/10),out_top+out_height-1);
}
/****************************************************************************
模块名称: 辅助模块
函 数 名: M_G_DISPLAY_OR_CLEAN_DATA_FROM_OUTPUT_BUF_TO_SYSTEM_BUF
功 能: 显示或清除数据从输出井流向系统存储区
入口参数: int color 要显示或清除的颜色值
出口参数: 无
调用关系: 被P3调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-17
*****************************************************************************/
M_G_DISPLAY_OR_CLEAN_DATA_FROM_OUTPUT_BUF_TO_SYSTEM_BUF(int color)
{
G_POINT s,e;
s.x = out_left+out_width/10/2;
s.y = out_top+out_height+1;
e.x = s.x;
e.y = sysbuf_top-1;
G_DRAW_LINE_BY_INCREASE(s,e,color);
}
/****************************************************************************
模块名称: 辅助模块
函 数 名: M_G_DISPLAY_OR_CLEAN_DATA_FROM_SYSTEM_BUF_TO_PRINTER
功 能: 显示或清除数据从系统存储区输出到打印机上
入口参数: int color 要显示或清除的颜色值
出口参数: 无
调用关系: 被P3调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-17
*****************************************************************************/
M_G_DISPLAY_OR_CLEAN_DATA_FROM_SYSTEM_BUF_TO_PRINTER(int color)
{
G_POINT s,m1,m2,e;
s.x = sysbuf_left- 1;
s.y = sysbuf_top+sysbuf_height/4/2;
m1.x = (printer_left+printer_width + sysbuf_left)/2;
m1.y = s.y;
m2.x = m1.x;
m2.y = printer_mid_top;
e.x = printer_left+printer_width+2;
e.y = m2.y;
G_DRAW_LINE_BY_INCREASE(s,m1,color);
G_DRAW_LINE_BY_INCREASE(m1,m2,color);
G_DRAW_LINE_BY_INCREASE(m2,e,color);
}
/****************************************************************************
模块名称: 辅助模块
函 数 名: M_G_DISPLAY_SYSTEM_PROCESS
功 能: 刷新显示系统进程的状态
入口参数: 无
出口参数: 无
调用关系: 进程管理函数调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-17
*****************************************************************************/
M_G_DISPLAY_SYSTEM_PROCESS()
{
/* 独个刷新系统进程状态 */
M_G_DISPLAY_ONE_SYSTEM_PROCESS_STATUS(0,"P1",0,P_INPUT_PROCESS->p_status);
M_G_DISPLAY_ONE_SYSTEM_PROCESS_STATUS(1,"P2",0,P_JOB_SCHEDUL->p_status);
M_G_DISPLAY_ONE_SYSTEM_PROCESS_STATUS(2,"P3",0,P_OUTPUT_PROCESS->p_status);
M_G_DISPLAY_ONE_SYSTEM_PROCESS_STATUS(3,&_superwait_[0],2,P_PROCESS_SUPERWAIT->p_status);
}
/****************************************************************************
模块名称: 辅助模块
函 数 名: M_G_DISPLAY_ONE_SYSTEM_PROCESS_STATUS
功 能: 显示一个系统进程的状态
入口参数: int index 要显示的是哪个系统进程
char *n 进程的名称
int len 显示的进程名称的长度(为0时表示是P1P2P3,不为0时表示是"悬挂"进程)
PState s 要显示的进程的状态
出口参数: 无
调用关系: 进程管理函数调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-17
*****************************************************************************/
M_G_DISPLAY_ONE_SYSTEM_PROCESS_STATUS(int index,char *n,int len,PState s)
{
int bcolor,tcolor,i;
char *st;
bcolor = 0;
if(s == Running)
{
/* 如果进程状态是运行状的,则表蓝色底色和黄色前景来显示*/
bcolor = blue_color;
tcolor = yellow_color;
st = &_running_[0];
}
else if(s == Ready)
{
/* 如果进程状态是就绪的,则表黑色底色和黄色前景来显示*/
st = &_ready_[0];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -