📄 jobs.h
字号:
{
setcolor(yellow_color);
if(no == 1)
{
/* 打印开机时间 */
for(i=0;i<2;i++)
DRAWMAT(_login_+i*24,12,print_left+1+i*12,print_top+print_height-13,yellow_color);
itoa(LOGIN_TIME.ti_hour,tempbuf,10);
outtextxy(print_left+1+24+4,print_top+print_height-13+2,tempbuf);
outtextxy(print_left+1+40+4,print_top+print_height-13+2,":");
itoa(LOGIN_TIME.ti_min,tempbuf,10);
outtextxy(print_left+1+48+4,print_top+print_height-13+2,tempbuf);
outtextxy(print_left+1+64+4,print_top+print_height-13+2,":");
itoa(LOGIN_TIME.ti_sec,tempbuf,10);
outtextxy(print_left+1+72+4,print_top+print_height-13+2,tempbuf);
}
if(no == 2)
{
/* 打印关机时间 */
for(i=0;i<2;i++)
DRAWMAT(_logout_+i*24,12,print_left+1+i*12,print_top+print_height-13,yellow_color);
itoa(LOGOUT_TIME.ti_hour,tempbuf,10);
outtextxy(print_left+1+24+4,print_top+print_height-13+2,tempbuf);
outtextxy(print_left+1+40+4,print_top+print_height-13+2,":");
itoa(LOGOUT_TIME.ti_min,tempbuf,10);
outtextxy(print_left+1+48+4,print_top+print_height-13+2,tempbuf);
outtextxy(print_left+1+64+4,print_top+print_height-13+2,":");
itoa(LOGOUT_TIME.ti_sec,tempbuf,10);
outtextxy(print_left+1+72+4,print_top+print_height-13+2,tempbuf);
}
if(no == 10)
{
/* 打印核心态时间 */
for(i=0;i<3;i++)
DRAWMAT(_kernel_+i*24,12,print_left+1+i*12,print_top+print_height-13,yellow_color);
itoa(KERNEL_TIME,tempbuf,10);
outtextxy(print_left+1+36+8,print_top+print_height-13+2,tempbuf);
}
else if(no == 20)
{
/* 打印用户态时间 */
for(i=0;i<3;i++)
DRAWMAT(_user_+i*24,12,print_left+1+i*12,print_top+print_height-13,yellow_color);
itoa(USER_TIME,tempbuf,10);
outtextxy(print_left+1+36+8,print_top+print_height-13+2,tempbuf);
}
else if(no == 30)
{
/* 打印闲逛态时间 */
for(i=0;i<3;i++)
DRAWMAT(_wait_+i*24,12,print_left+1+i*12,print_top+print_height-13,yellow_color);
itoa(SUPERWAIT_TIME,tempbuf,10);
outtextxy(print_left+1+36+8,print_top+print_height-13+2,tempbuf);
}
else if(no == 40)
{
/* 打印CHST[0] 次数 */
outtextxy(print_left+1,print_top+print_height-13+2,"CHST[0]: ");
itoa(KEYBOARD_TIMES,tempbuf,10);
outtextxy(print_left+1+8*9,print_top+print_height-13+2,tempbuf);
}
else if(no == 50)
{
/* 打印CHST[1] 次数 */
outtextxy(print_left+1,print_top+print_height-13+2,"CHST[1]: ");
itoa(PRINTER_TIMES,tempbuf,10);
outtextxy(print_left+1+8*9,print_top+print_height-13+2,tempbuf);
}
else if(no == 60)
{
/* 打印CHST[2] 次数 */
outtextxy(print_left+1,print_top+print_height-13+2,"CHST[2]: ");
itoa(HARDDISK_TIMES,tempbuf,10);
outtextxy(print_left+1+8*9,print_top+print_height-13+2,tempbuf);
}
}
delay(DELAY_TIME*10);
}
/****************************************************************************
模块名称: 预输入模块
函 数 名: M_PRINT_SYSTEM_ENVIRONMENT
功 能: 打印系统数据
入口参数:
出口参数:
调用关系:
编 者: 陈俭(AP0006301)
编写日期: 2003-10-7
完成日期: 2003-10-7
*****************************************************************************/
M_PRINT_SYSTEM_ENVIRONMENT()
{
gettime(&LOGOUT_TIME);
M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,1);
M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,2);
M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,10);
M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,20);
M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,30);
M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,40);
M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,50);
M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,60);
}
/****************************************************************************
模块名称: 预输入模块
函 数 名: M_JION_JOB_TO_J_INPUT_JOB
功 能: 将作业挂入作业后备队列中
入口参数:
出口参数:
调用关系:
编 者: 陈俭(AP0006301)
编写日期: 2003-10-7
完成日期: 2003-10-7
*****************************************************************************/
M_JION_JOB_TO_J_INPUT_JOB()
{
J_INPUT_JOB_TAIL->j_next = J_TEMP_JOB;
J_INPUT_JOB_TAIL = J_INPUT_JOB_TAIL->j_next;
}
/****************************************************************************
模块名称: 预输入模块
函 数 名: M_NECESSARY_MALLOC_NEW_HARDDISK_SPACE
功 能: 是否需要申请输入井空间
入口参数:
出口参数: 如果要则返回真,,否则返回假
调用关系:
编 者: 陈俭(AP0006301)
编写日期: 2003-10-7
完成日期: 2003-10-7
*****************************************************************************/
M_NECESSARY_MALLOC_NEW_HARDDISK_SPACE(JCB *j)
{
int i;
for(i=0;i<10;i++)
{
if(j->j_hd_table[i] == -1)
break;
}
if(j->j_loaded_length > i*10)
return(TRUE);
else
return(FALSE);
}
/****************************************************************************
模块名称: 预输入模块
函 数 名: M_SAVE_RESULT_FROM_PCB_TO_JCB
功 能: 如果作业执行H指令或运行过程中出错,则调用该函数保存用户作业运行的结果
入口参数:
出口参数:
调用关系:
编 者: 陈俭(AP0006301)
编写日期: 2003-10-7
完成日期: 2003-10-7
*****************************************************************************/
M_SAVE_RESULT_FROM_PCB_TO_JCB()
{
int i,j;
JCB *p,*savejcb;
p = J_DEALING_JOB_HEAD;
while(p != J_DEALING_JOB_TAIL && p->j_next->j_id != RUNNING_QUEUE->p_next->p_id)
p = p->j_next;
if(p->j_next->j_id == RUNNING_QUEUE->p_next->p_id)
{
savejcb = p->j_next;
/* 保存JCB的参数 */
/* 保存运行时间 */
savejcb->j_running_time = RUNNING_QUEUE->p_next->p_running_time;
/* 保存输出行数 */
savejcb->j_output_lines = RUNNING_QUEUE->p_next->p_output_lines;
savejcb->j_length = savejcb->j_output_lines;
/* 因为 tick 在处理PI中断时将出错类型暂时存入 tick 中,所以此处应将tick 的内容存入 j_error 中 */
savejcb->j_error = RUNNING_QUEUE->p_next->p_tick;
/* 保存出错的行号 */
savejcb->j_error_row = RUNNING_QUEUE->p_next->p_error;
/* 保存输出数据缓冲区 */
for(i=0;i<10 && i<savejcb->j_output_lines;i++)
for(j=0;j<5;j++)
savejcb->j_print[i][j] = RUNNING_QUEUE->p_next->p_print[i][j];
/* 初始化已打印的行数为 0 行 */
savejcb->j_loaded_length = 0;
M_MOVE_JCB_FROM_DEALING_JOB_TO_OUTPUT_JOB(p);
}
}
/****************************************************************************
模块名称: 预输入模块
函 数 名: M_MOVE_JCB_FROM_DEALING_JOB_TO_OUTPUT_JOB
功 能: 将作业从正在处理作业队列移动到输出队列中
入口参数: JCB *j 要移动的作业
出口参数:
调用关系:
编 者: 陈俭(AP0006301)
编写日期: 2003-10-7
完成日期: 2003-10-7
*****************************************************************************/
M_MOVE_JCB_FROM_DEALING_JOB_TO_OUTPUT_JOB(JCB *j)
{
/* j为目的JCB的前一个结点 */
J_OUTPUT_JOB_TAIL->j_next = j->j_next;
if(J_DEALING_JOB_HEAD->j_next == J_DEALING_JOB_TAIL)
{
J_DEALING_JOB_HEAD->j_next = J_DEALING_JOB_HEAD->j_next->j_next;
J_DEALING_JOB_TAIL = J_DEALING_JOB_HEAD;
}
else
{
j->j_next = j->j_next->j_next;
}
J_OUTPUT_JOB_TAIL = J_OUTPUT_JOB_TAIL->j_next;
J_OUTPUT_JOB_TAIL->j_next = NULL;
J_OUTPUT_JOB_HEAD->j_length++;
}
/****************************************************************************
模块名称: 预输入模块
函 数 名: M_DELETE_DEALING_JOB
功 能: 保存进程控制中的信息到作业控制中
入口参数: JCB *j 要移动的作业
出口参数:
调用关系:
编 者: 陈俭(AP0006301)
编写日期: 2003-10-7
完成日期: 2003-10-7
*****************************************************************************/
M_DELETE_DEALING_JOB()
{
JCB *p,*deletejcb;
p = J_DEALING_JOB_HEAD;
while(p != J_DEALING_JOB_TAIL && p->j_next->j_id != RUNNING_QUEUE->p_next->p_id)
p = p->j_next;
if(p->j_next->j_id == RUNNING_QUEUE->p_next->p_id)
{
/* 找到该作业的JCB块 */
deletejcb = p->j_next;
if(J_DEALING_JOB_HEAD->j_next == J_DEALING_JOB_TAIL)
{
J_DEALING_JOB_TAIL = J_DEALING_JOB_HEAD;
J_DEALING_JOB_HEAD->j_next = NULL;
}
else
{
p->j_next = deletejcb->j_next;
}
free(deletejcb);
}
}
/****************************************************************************
模块名称: 预输入模块
函 数 名: M_SAVE_ERROR_INFORMATION_IN_JOB_TO_PRINT
功 能: 将出错信息写入输出结果数组中
入口参数: JCB *j 要移动的作业
出口参数:
调用关系:
编 者: 陈俭(AP0006301)
编写日期: 2003-10-7
完成日期: 2003-10-7
*****************************************************************************/
M_SAVE_ERROR_INFORMATION_IN_JOB_TO_PRINT()
{
RUNNING_QUEUE->p_next->p_output_lines++;
if(RUNNING_QUEUE->p_next->p_output_lines > 10 )
RUNNING_QUEUE->p_next->p_output_lines = 10;
/* !号表示该作业出错 */
RUNNING_QUEUE->p_next->p_print[RUNNING_QUEUE->p_next->p_output_lines -1][0] = '!';
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -