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

📄 printer.h

📁 该模块包括作业调度的三个系统进程。P1、P2、P3进程功能的实现。 P1负责对用户作业预输入处理
💻 H
📖 第 1 页 / 共 2 页
字号:
编写日期:
****************************************************************************/
/* display the error,lines,job's name */
G_ERROR_INFORMATION(PCB *job,int dis)
{
    int i,j,c,oldc;
    char buf[10];
    if(DISPLAY_MODE == TEXT)
        return(0);
    oldc = getcolor();
    if(dis == TRUE)
    {
        /* p_error != -1 if job occur an error */
        c = yellow_color;
    }
    else 
        c = 0;

    for(i=0;i<4;i++)
    {
        /* 显示出错的中文信息 */
        for(j=0;j<2;j++)
            DRAWMAT(error_info+(i*2+j)*24,12,error_left+j*12+1,error_top+2+(i+1)*error_height,c);
        setcolor(c);
        /* 下面的部分显示出错的作业名称,行号,出错的指令代码 */
        outtextxy(error_left+12*2+1,error_top+4+(i+1)*error_height,":");
        if(i==1)
            outtextxy(error_left+12*2+1+10,error_top+4+(i+1)*error_height,job->p_name);
        else if(i==2)
        {
            if(job->p_error == 100)
                itoa(1,buf,10);
            else
                itoa(job->p_error+3,buf,10);
            outtextxy(error_left+12*2+1+10,error_top+4+(i+1)*error_height,buf);
        }
        else if(i==3)
        {
            if(job->p_error == 100)
            {
                strcpy(buf,"$BEGIN");
            }
            else
            {
                strcpy(buf,CURRENT_INSTRUCTION);
            }
            outtextxy(error_left+12*2+1+10,error_top+4+(i+1)*error_height,buf);
        }
    }

    setcolor(oldc);
}

/****************************************************************************
所属模块:  界面输出(图形方式)
函 数 名:  G_FLASH_INFORMATION
功    能:  显示出错的中文信息
入口参数:  (char *p,int size,int len,int color)中文的首地址和大小,长度,颜色
出口参数:  无
调用关系:  
编    者:  蔡晓跃(AP0106338)
编写日期:
****************************************************************************/
G_FLASH_INFORMATION(char *p,int size,int len,int color)
{
    int i;
    if(DISPLAY_MODE == TEXT)
        return(0);
    /* 显示中文信息 */
    for(i=0;i<len;i++) 
        DRAWMAT(p+i*size*2,size,error_left+12*2+8+1+i*size+2,error_top+error_height+2,color);
}

/****************************************************************************
所属模块:  界面输出(图形方式)
函 数 名:  G_DISPLAY_CPU
功    能:  显示CPU各参数的值
入口参数:  无
出口参数:  无
调用关系:
编    者:  蔡晓跃(AP0106338)
编写日期:  
****************************************************************************/
G_DISPLAY_CPU()
{
    char buf[10];
    int i,c;
    struct fillsettingstype fillinfo;
    if(DISPLAY_MODE == TEXT)
        return(0);
    /* 保存当前线条设置和填充设置 */
    getfillsettings(&fillinfo);
    setfillstyle(1,blue_color);
    for(i=1;i<7;i++)
    {
        bar(cpui_left+56,cpui_top+i*cpui_height+1,cpui_left+cpui_width*2/3-1,cpui_top+(i+1)*cpui_height-1); 
        bar(cpui_left+cpui_width*2/3+36,cpui_top+i*cpui_height+1,cpui_left+cpui_width-1,cpui_top+(i+1)*cpui_height-1); 
    }
    /* 恢复线条设置和填充设置 */
    setfillstyle(fillinfo.pattern,fillinfo.color);
    /* display RTIME */
    c = getcolor();
    setcolor(yellow_color);
    i=1;
    /* 将RTIME的将转换成字符串的形式存放在buf中,然后再显示buf的内容 */
    ltoa(RTIME,buf,10);
    outtextxy(cpui_left+65,cpui_top+i++*cpui_height+4,buf);
    /* 将TIME的将转换成字符串的形式存放在buf中,然后再显示buf的内容 */
    itoa(TIME,buf,10);
    outtextxy(cpui_left+65,cpui_top+i++*cpui_height+4,buf);
    /* 将PC的将转换成字符串的形式存放在buf中,然后再显示buf的内容 */
    itoa(PC,buf,10);
    outtextxy(cpui_left+65,cpui_top+i++*cpui_height+4,buf);
    /* 将R的将转换成字符串的形式存放在buf中,然后再显示buf的内容 */
    itoa(R,buf,10);
    outtextxy(cpui_left+65,cpui_top+i++*cpui_height+4,buf);
    /* 将C的将转换成字符串的形式存放在buf中,然后再显示buf的内容 */
    buf[0]=C;
    buf[1]='\0';
    outtextxy(cpui_left+65,cpui_top+i++*cpui_height+4,buf);
    /* 显示当前指令内容*/
    outtextxy(cpui_left+65,cpui_top+i++*cpui_height+4,CURRENT_INSTRUCTION);
    setcolor(c);
    /* 显示中断参数 */
    G_DISPLAY_INTERRUPT();
    if(RUNNING_QUEUE->p_next->p_id>=0)
        G_DISPLAY_ONE_PC_R_C(RUNNING_QUEUE->p_next,RUNNING_QUEUE->p_next->p_color,0);
}

/****************************************************************************
所属模块:  界面输出(图形方式)
函 数 名:  G_DISPLAY_INTERRUPT
功    能:  显示中断参数
入口参数:  无
出口参数:  无
调用关系:  
编    者:  蔡晓跃(AP0106338)
编写日期:
****************************************************************************/
G_DISPLAY_INTERRUPT()
{
    char buf[10];
    int i,c;
    struct fillsettingstype fillinfo;
    if(DISPLAY_MODE == TEXT)
        return(0);
    /* 保存当前线条设置和填充设置 */
    getfillsettings(&fillinfo);
    setfillstyle(1,blue_color);
    /* 清除上次显示的结果 */
    for(i=1;i<7;i++)
        bar(cpui_left+cpui_width*2/3+36,cpui_top+i*cpui_height+1,cpui_left+cpui_width-1,cpui_top+(i+1)*cpui_height-1); 
    setfillstyle(fillinfo.pattern,fillinfo.color);
    c = getcolor();
    setcolor(yellow_color);
    i=1;
    /* 将__PI的将转换成字符串的形式存放在buf中,然后再显示buf的内容 */
    itoa(__PI,buf,10);
    outtextxy(cpui_left+cpui_width*2/3+44,cpui_top+i++*cpui_height+4,buf);
    /* 将__SI的将转换成字符串的形式存放在buf中,然后再显示buf的内容 */
    itoa(__SI,buf,10);
    outtextxy(cpui_left+cpui_width*2/3+44,cpui_top+i++*cpui_height+4,buf);
    /* 将__TI的将转换成字符串的形式存放在buf中,然后再显示buf的内容 */
    itoa(__TI,buf,10);
    outtextxy(cpui_left+cpui_width*2/3+44,cpui_top+i++*cpui_height+4,buf);
    /* 将__IOI的将转换成字符串的形式存放在buf中,然后再显示buf的内容 */
    itoa(__IOI,buf,10);
    outtextxy(cpui_left+cpui_width*2/3+44,cpui_top+i++*cpui_height+4,buf);
    /* 如果当前运行的不是系统进程,则显示用户进程已占用CPU的时间和已输出的行数 */
    if(RUNNING_QUEUE->p_next!=NULL && RUNNING_QUEUE->p_next->p_id >=0)
    {
        /* 将用户进程已占用的CPU时间转换成字符串的形式存放在buf中,然后再显示buf的内容 */
        itoa(RUNNING_QUEUE->p_next->p_running_time,buf,10);
        if(strlen(buf)>2)
            /* 如果已占用CPU的时间是三位数的,则调整其显示的位置*/
            outtextxy(cpui_left+cpui_width*2/3+44-8,cpui_top+i++*cpui_height+4,buf);
        else
            outtextxy(cpui_left+cpui_width*2/3+44,cpui_top+i++*cpui_height+4,buf);
        /* 将用户进程已输出的行数转换成字符串的形式存放在buf中,然后再显示buf的内容 */
        itoa(RUNNING_QUEUE->p_next->p_output_lines,buf,10);
        outtextxy(cpui_left+cpui_width*2/3+44,cpui_top+i++*cpui_height+4,buf);
    }
    setcolor(c);
}

/****************************************************************************
所属模块:  界面输出(图形方式)
函 数 名:  G_TITLE 
功    能:  显示操作系统标题
入口参数:  无
出口参数:  无
调用关系:  被初始化界面程序调用 
编    者:  蔡晓跃(AP0106338)
编写日期:
****************************************************************************/
G_TITLE()
{
    int mx,my,i,left,top;
    if(DISPLAY_MODE == TEXT)
        return(0);
    /* 获得当前模式的最大坐标 x,y */
    mx = getmaxx();
    my = getmaxy();
    /* 计算显示的起始位置 */
    left = (mx - 7*48)/2;
    top = my/2-100;
    /* 显示“多进程操作系统”字样 */
    for(i=0;i<7;i++)
        DRAWMAT(op+i*288,48,left+i*48,top,yellow_color);
    /* 显示 multi-operating-system 字样 */
    for(i=0;i<22;i++)
        DRAWMAT(mos+i*72,24,(mx-22*24)/2+i*24,top+100,white_color);
    /* 等待按键 */
}

/****************************************************************************
所属模块:  界面输出(图形方式)
函 数 名:  GABOUT
功    能:  显示指导老师和程序编写者姓名
入口参数:  无
出口参数:  无
调用关系:  主模块调用
编    者:  蔡晓跃(AP0106338)
编写日期:
****************************************************************************/
G_ABOUT()
{
    int i,j,left1,left2,left3,top,height;
    if(DISPLAY_MODE == TEXT)
        return(0);
    cleardevice();
    DISPLAY_PICTURE_OK=G_DISPLAY_BMP_PICTURE_256(800,600,"RE256.OP",0);
    if(DISPLAY_PICTURE_OK==TRUE)
    {
        if(DISPLAY_FLASH == TRUE)
            G_DISPLAY_LOAD_SYSTEM_LINE(1);
        else
            getch();
        cleardevice();
    }
    /* 显示位置坐标 */
    left1=100+x_left;
    left2=200+x_left;
    left3=350+x_left;
    top = 100+y_top;
    height = 50;
    /* 设置ASCII码的显示格式 */
    settextstyle(0,HORIZ_DIR,2);
    /* 显示“指导老师” */
    for(i=0;i<2;i++)
        DRAWMAT(teacher+i*72,24,left1+i*24,top,white_color);
    /* 显示老师姓名 */
    for(i=0;i<5;i++)
        DRAWMAT(lyx+i*72,24,left2+i*24,top,white_color);
    /* 显示“组员” */
    for(i=0;i<2;i++)
        DRAWMAT(zhuyuan+i*72,24,left1+i*24,top+height,white_color);
    /* 显示名字“蔡晓跃” */
    for(i=0;i<3;i++)
        DRAWMAT(caixiaoyue+i*72,24,left2+i*24,top+height,line_color);
    setcolor(line_color);
    /* 显示 “AP0106338” */
    outtextxy(left3,top+height+4,"AP0106338");
    /* 显示名字“陈俭” */
    DRAWMAT(chen,24,left2,top+height*2,yellow_color);
    DRAWMAT(chen+72,24,left2+2*24,top+height*2,yellow_color);
    setcolor(yellow_color);
    /* 显示“AP0006301” */
    outtextxy(left3,top+height*2+4,"AP0006301");
    /* 显示名字“黄瑞玉” */
    for(i=0;i<3;i++)
        DRAWMAT(huang+i*72,24,left2+i*24,top+height*3,yellow_color);
    /* 显示“AP0006605” */
    outtextxy(left3,top+height*3+4,"AP0006305");
    /* 显示名字 “赖惠芳” */
    for(i=0;i<3;i++)
        DRAWMAT(lai+i*72,24,left2+i*24,top+height*4,yellow_color);
    /* 显示“AP0006606” */
    outtextxy(left3,top+height*4+4,"AP0006306");
    /* 显示“编译工具:TURBO C 2.0” */
    for(i=0;i<16;i++)
        DRAWMAT(turbo_c+i*24,12,getmaxx()-210+i*12,top+height*6,white_color);

    /* 按任意键退出 */
    if(DISPLAY_PICTURE_OK==FALSE)
    {    /* 如果要显示动画,则显示进度条 */
        if(DISPLAY_FLASH == TRUE)
            G_DISPLAY_LOAD_SYSTEM_LINE(1);
        else
            getch();
    }
    else
        getch();
}

/****************************************************************************
所属模块:  界面输出(图形方式)
函 数 名:
功    能:
入口参数:
出口参数:
调用关系:
编    者:  蔡晓跃(AP0106338)
编写日期:
****************************************************************************/
G_PRINT_MECHINE()
{
    return(G_DISPLAY_BMP_PICTURE_256(box_left-30+2,box_top-25,"dn256.OP",1));
}


G_DISPLAY_MECHINE_CAN_CLOSE()
{
    return(G_DISPLAY_BMP_PICTURE_256(box_left-30+2+90,box_top-25+55,"shut256.OP",1));
}

G_DISPLAY_CHECK_LOAD_SYSTEM()
{
    if(G_DISPLAY_BMP_PICTURE_256(box_left-30+2+90,box_top-25+35,"check.OP",1)==TRUE)
        sleep(2);
    if(G_DISPLAY_BMP_PICTURE_256(box_left-30+2+90,box_top-25+75,"load.OP",1)==TRUE)
        sleep(2);
    setfillstyle(1,black_color);
    bar(cpui_left,cpui_top-5,cpui_left+cpui_width,cpui_top+cpui_height*6+15);
}

G_DISPLAY_VERSION()
{
    
}

⌨️ 快捷键说明

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