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

📄 graph.h

📁 该模块包括作业调度的三个系统进程。P1、P2、P3进程功能的实现。 P1负责对用户作业预输入处理
💻 H
📖 第 1 页 / 共 4 页
字号:
M_G_SAVE_FILLSETTINGS_OR_LINESETTING()
{
    getlinesettings(&lineinfo);
    getfillsettings(&fillinfo);
}


/****************************************************************************
模块名称:  辅助模块
函 数 名:  M_G_RESTORE_FILLSETTING_OR_LINESETTING
功    能:  恢复当前的线条的填充设置
入口参数:  无
出口参数:  无
调用关系:  被G_INIT_FACE函数调用
编    者:  蔡晓跃(AP0106338)
编写日期:  2003-10-17
*****************************************************************************/
M_G_RESTORE_FILLSETTING_OR_LINESETTING()
{
    setlinestyle(lineinfo.linestyle,lineinfo.upattern,lineinfo.thickness);
    setfillstyle(fillinfo.pattern,fillinfo.color);
}

/****************************************************************************
模块名称:  辅助模块
函 数 名:  M_G_INPUT_FROM_KEYBOARD_TO_SYSTEM_MEMORY
功    能:  显示从键盘中键入数据到系统存储区
入口参数:  无
出口参数:  无
调用关系:  被P1函数调用
编    者:  蔡晓跃(AP0106338)
编写日期:  2003-10-17
*****************************************************************************/
M_G_INPUT_FROM_KEYBOARD_TO_SYSTEM_MEMORY()
{
    G_POINT s,e;
    int i;
    for(i=0;i<2;i++)
    {
        /* 采用闪烁的方式来显示键盘正在输入数据 */
        M_G_DISPLAY_OR_CLEAN_KEYBOARD(FALSE);
        delay(DELAY_TIME*5);
        M_G_DISPLAY_OR_CLEAN_KEYBOARD(TRUE);
        delay(DELAY_TIME*5);
    }
    /* 画线条,从键盘画到系统存储区 */
    s.x = keyboard_left+keyboard_width*1/2;
    s.y = keyboard_top-1;
    e.x = s.x;
    e.y = sysbuf_top+sysbuf_height+1;
    setlinestyle(0,0,3);
    G_DRAW_LINE_BY_INCREASE(s,e,COLOR1);
    /* 显示数据已到达存储区 */
    M_G_DISPLAY_OR_CLEAN_SYSTEM_MEMORY(3,yellow_color);
}

/****************************************************************************
模块名称:  辅助模块
函 数 名:  M_G_DISPLAY_OR_CLEAN_KEYBOARD
功    能:  显示或清除用户键盘
入口参数:  int display 表示是否要显示,真时显示,假时不显示
出口参数:  无
调用关系:  被P1函数调用
编    者:  蔡晓跃(AP0106338)
编写日期:  2003-10-17
*****************************************************************************/
M_G_DISPLAY_OR_CLEAN_KEYBOARD(int display)
{
    if(display == FALSE)
    {
        /* 如果display == FALSE ,表示不显示*/
        setfillstyle(1,0);
    }
    else
    {
        /* 如果display == TRUE , 表示显示 */
        setfillstyle(11,yellow_color);
    }
    bar(keyboard_left+1,keyboard_top+1,keyboard_left+keyboard_width-1,keyboard_top+keyboard_height-1);
    M_G_DRAW_KEYBOARD();
}

/****************************************************************************
模块名称:  辅助模块
函 数 名:  M_G_DISPLAY_OR_CLEAN_SYSTEM_MEMORY
功    能:  显示或清除系统存储区
入口参数:  int index 要显示的是系统存储区中的哪一部分(共分为四个部分)
            int c 显示时采用的颜色值
出口参数:  无
调用关系:  被P1,P3函数调用
编    者:  蔡晓跃(AP0106338)
编写日期:  2003-10-17
*****************************************************************************/
M_G_DISPLAY_OR_CLEAN_SYSTEM_MEMORY(int index,int c)
{
    /* index 表示系统内存的哪一个分区 ,下标从 0 开始*/
    setfillstyle(1,c);
    bar(sysbuf_left+1,sysbuf_top+index*(sysbuf_height/4)+1,sysbuf_left+sysbuf_width-1,sysbuf_top+(index+1)*(sysbuf_height/4)-1);
}

/****************************************************************************
模块名称:  辅助模块
函 数 名:  M_G_KEYBOARD_INPUT_FINISH
功    能:  清除从键盘到系统存储区的连线
入口参数:  
出口参数:  无
调用关系:  被P1函数调用
编    者:  蔡晓跃(AP0106338)
编写日期:  2003-10-17
*****************************************************************************/
M_G_KEYBOARD_INPUT_FINISH()
{
    G_POINT s,e;
    /* 先计算出要画线条的始终两坐标点 */
    s.x = keyboard_left+keyboard_width*1/2;
    s.y = keyboard_top-1;
    e.x = s.x;
    e.y = sysbuf_top+sysbuf_height+1;
    setlinestyle(0,0,3);
    /* 关闭显示键盘正在输入数据 */
    M_G_DISPLAY_OR_CLEAN_KEYBOARD(FALSE);
    /* 调用自定义的画线函数 */
    G_DRAW_LINE_BY_INCREASE(s,e,0);
}

/****************************************************************************
模块名称:  辅助模块
函 数 名:  M_G_DISPLAY_OR_CLEAN_INPUT_BUF
功    能:  显示或清除输入井
入口参数:  int index  要显示的输入井道号(硬盘按道管理)
            int c 采用的颜色值
出口参数:  无
调用关系:  被P1函数调用
编    者:  蔡晓跃(AP0106338)
编写日期:  2003-10-17
*****************************************************************************/
M_G_DISPLAY_OR_CLEAN_INPUT_BUF(int index,int c)
{
    setfillstyle(1,c);
    bar(in_left+1+index*(in_width/100),in_top+1,in_left+(index+1)*(in_width/100),in_top+in_height-1);
}

/****************************************************************************
模块名称:  辅助模块
函 数 名:  M_G_DISPLAY_DATA_FROM_SYSTEM_BUF_TO_INPUT_BUF
功    能:  显示数据从系统输入井的存储区传送到输入井中
入口参数:  int index  要显示的输入井道号(硬盘按道管理)
            int c 采用的颜色值
出口参数:  无
调用关系:  被P1函数调用
编    者:  蔡晓跃(AP0106338)
编写日期:  2003-10-17
*****************************************************************************/
M_G_DISPLAY_DATA_FROM_SYSTEM_BUF_TO_INPUT_BUF(int index,int c)
{
    G_POINT s,m1,m2,m3,e;
    /* 先计算画线条时各个关键点的坐标*/
    s.x = sysbuf_left+sysbuf_width+1;
    s.y = sysbuf_top+(3+0.5)*(sysbuf_height/4);
    m1.x = (s.x + userbuf_left)/2;
    m1.y = s.y;
    m2.x = m1.x;
    m2.y = (userbuf_top+userbuf_height+in_top)/2;
    m3.x = in_left+(index)*(in_width/100)+1;
    m3.y = m2.y;
    e.x  = m3.x;
    e.y = in_top-1;
    /* 再调用自定义的画线函数显示数据的流动过程 */
    G_DRAW_LINE_BY_INCREASE(s,m1,c);
    G_DRAW_LINE_BY_INCREASE(m1,m2,c);
    G_DRAW_LINE_BY_INCREASE(m2,m3,c);
    setlinestyle(0,0,1);
    G_DRAW_LINE_BY_INCREASE(m3,e,c);
    setlinestyle(0,0,3);
}

/****************************************************************************
模块名称:  辅助模块
函 数 名:  M_G_DISPLAY_DATA_FROM_INPUT_BUF_TO_USER_MEMORY
功    能:  显示数据从输入井到用户存储区
入口参数:  int hdindex 数据从输入井的哪一道流出(硬盘按道管理)
            int mmindex 数据最终流入用户存储区的哪一页面(内存按页管理)
            int c 要显示的颜色值
出口参数:  无
调用关系:  被P2函数调用
编    者:  蔡晓跃(AP0106338)
编写日期:  2003-10-17
*****************************************************************************/
M_G_DISPLAY_DATA_FROM_INPUT_BUF_TO_USER_MEMORY(int hdindex,int mmindex,int c)
{
    G_POINT s,m1,m2,m3,e;
    /* 先计算画线时的各关键点的坐标*/
    s.x = in_left+hdindex*(in_width/100)+1;
    s.y = in_top-1;
    m1.x = s.x;
    m1.y = (userbuf_top+userbuf_height+in_top)/2;
    m2.x = (sysbuf_left+sysbuf_width+userbuf_left)/2;
    m2.y = m1.y;
    m3.x = m2.x;
    m3.y = userbuf_top+(userbuf_height/30)*mmindex+1;
    e.x = userbuf_left-1;
    e.y = m3.y;
    setlinestyle(0,0,1);
    /* 画出数据的流动过程 */
    G_DRAW_LINE_BY_INCREASE(s,m1,c);
    setlinestyle(0,0,3);
    G_DRAW_LINE_BY_INCREASE(m1,m2,c);
    G_DRAW_LINE_BY_INCREASE(m2,m3,c);
    setlinestyle(0,0,1);
    G_DRAW_LINE_BY_INCREASE(m3,e,c);
    setlinestyle(0,0,3);
}

/****************************************************************************
模块名称:  辅助模块
函 数 名:  M_G_DISPLAY_OR_CLEAN_DATA_TAKEN_USERBUF
功    能:  显示数据占用用户内存区
入口参数:  int index 数据占用输入井的哪一道(硬盘按道管理)
            int color 要显示的颜色值
出口参数:  无
调用关系:  被P2函数调用
编    者:  蔡晓跃(AP0106338)
编写日期:  2003-10-17
*****************************************************************************/
M_G_DISPLAY_OR_CLEAN_DATA_TAKEN_USERBUF(int index,int color)
{
    G_POINT s,e;
    /* 先计算矩形的左上角坐标和右下角坐标*/
    s.x = userbuf_left+1;
    s.y = userbuf_top + (userbuf_height/30)*index+1;
    e.x = userbuf_left+userbuf_width-1;
    e.y = userbuf_top + (userbuf_height/30)*(index+1);
    setfillstyle(1,color);
    /* 画出要显示的区域 */
    bar(s.x,s.y,e.x,e.y);
}

/****************************************************************************
模块名称:  辅助模块
函 数 名:  M_G_BUILD_PCB_AND_JOIN_IN_READY_QUEUE
功    能:  为作业创建进程控制块并将其插入就绪队列中
入口参数:  int mmindex 在创建进程控制块的作业位于用户存储区的哪一页面(内存按页管理)
            int c 要显示的颜色值
出口参数:  无
调用关系:  被P2函数调用
编    者:  蔡晓跃(AP0106338)
编写日期:  2003-10-17
*****************************************************************************/
M_G_BUILD_PCB_AND_JOIN_IN_READY_QUEUE(int mmindex,int color)
{
    char *buf;
    int size,i;
    G_POINT ps,pe,s,m1,m2,e,ms,mm1,me;
    ps.x = userbuf_left+userbuf_width+20;
    ps.y = ready_top+ready_height+1;
    pe.x = ps.x + ready_width/15;
    pe.y = ps.y + ready_height-1;
    
    s.x = userbuf_left+userbuf_width + 1;
    s.y = userbuf_top+(userbuf_height/30)*mmindex+1;
    m1.x = s.x + 10;
    m1.y = s.y;
    m2.x = m1.x;
    m2.y = (ps.y+pe.y)/2;
    e.x = ps.x-1;
    e.y = m2.y;

    ms.x = ps.x + (pe.x - ps.x)/2;
    ms.y = e.y;
    mm1.x = ready_left+(READY_QUEUE->p_tick+0.5)*ready_width/15;
    mm1.y = ms.y;
    me.x = mm1.x;
    me.y = ready_top+ready_height/2;

    G_DRAW_LINE_BY_INCREASE(s,m1,white_color);
    G_DRAW_LINE_BY_INCREASE(m1,m2,white_color);
    G_DRAW_LINE_BY_INCREASE(m2,e,white_color);

    setfillstyle(1,color);
    bar(ps.x,ps.y,pe.x,pe.y);   
    delay(DELAY_TIME*5);
    setfillstyle(1,0);
    bar(ps.x,ps.y,pe.x,pe.y);   
    delay(DELAY_TIME*5);
    setfillstyle(1,color);
    bar(ps.x,ps.y,pe.x,pe.y);   
    delay(DELAY_TIME*5);

    /* 计算保存图形的缓冲区的大小 */
    size = imagesize(ps.x,ps.y,pe.x,pe.y);
    /* 申请缓冲区 */
    buf = malloc(size);
    /* 保存屏幕内容 */
    getimage(ps.x,ps.y,pe.x,pe.y,buf);
    setfillstyle(1,0);
    bar(ps.x,ps.y,pe.x,pe.y);   

    G_DRAW_LINE_BY_INCREASE(s,m1,0);
    G_DRAW_LINE_BY_INCREASE(m1,m2,0);
    G_DRAW_LINE_BY_INCREASE(m2,e,0);
    /* 重新显示"用户存储区"这五个字*/
    for(i=0;i<5;i++)
        DRAWMAT(_user_buf_+i*24,12,userbuf_left+userbuf_width+4,userbuf_top+userbuf_height+12*(i-5),yellow_color);

    G_MOVE_RECTANGLE_BASE_MIDDLE_POINT(ps,pe,ms,mm1,buf);
    G_MOVE_RECTANGLE_BASE_MIDDLE_POINT(ps,pe,mm1,me,buf);

    free(buf);
}

/****************************************************************************
模块名称:  辅助模块
函 数 名:  M_G_DISPLAY_READY_QUEUE
功    能:  刷新显示就绪队列
入口参数:  无
出口参数:  无
调用关系:  
编    者:  蔡晓跃(AP0106338)
编写日期:  2003-10-17
*****************************************************************************/

⌨️ 快捷键说明

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