📄 prttext.h
字号:
/****************************************************************************
*****************************************************************************
文件名称: PRTTEXT.H
模块名称: 用户界面输出模块
模块作用:
编写者一:
编写者二:
编写日期:
完成日期:
程序行数: 600
*****************************************************************************
*****************************************************************************/
/****************************************************************************
所属模块: 界面输出(文本方式)
函 数 名: INIT_PARAMETER_WINDOW
功 能: 初始化文本方式下的窗口参数及调用图形方式下的初始化程序
入口参数: 无
出口参数: 无
调用关系: 被主模块调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-10
****************************************************************************/
INIT_PARAMETER_WINDOW()
{
if(DISPLAY_MODE == TEXT)
{
/* 如果是运行在文本方式下,则初始化各窗口属性参数 */
/* 窗口的左坐标 */
WIN[0].left = 1;
/* 窗口的顶坐标 */
WIN[0].top = 1;
/* 窗口的右标 */
WIN[0].right = 50;
/* 窗口的底坐标 */
WIN[0].bottom = 20;
/* 窗口的正文文本颜色 */
WIN[0].wt = 14;
/* 窗口的背景颜色 */
WIN[0].wb = 1;
/* 窗口的标题文本颜色 */
WIN[0].tt = 5;
/* 窗口的标题背景颜色 */
WIN[0].tb = 7;
/* 窗口的标题指针 */
WIN[0].p = INF[0];
WIN[1].left = 51;
WIN[1].top = 1;
WIN[1].right = 80;
WIN[1].bottom = 20;
WIN[1].wt = 9;
WIN[1].wb = 3;
WIN[1].tt = 5;
WIN[1].tb = 7;
WIN[1].p = INF[1];
WIN[2].left = 1;
WIN[2].top = 21;
WIN[2].right = 50;
WIN[2].bottom = 25;
WIN[2].wt = 15;
WIN[2].wb = 0;
WIN[2].tt = 5;
WIN[2].tb = 7;
WIN[2].p = INF[2];
WIN[3].left = 51;
WIN[3].top = 21;
WIN[3].right = 80;
WIN[3].bottom = 25;
WIN[3].wt = 1;
WIN[3].wb = 7;
WIN[3].tt = 5;
WIN[3].tb = 1;
WIN[3].p = INF[3];
}
}
/****************************************************************************
所属模块:界面输出(文本方式)
函 数 名:SET_WINDOW
功 能:通过窗口序号开辟一个新窗口
入口参数:i(int) 窗口序号
出口参数:无
调用关系:
编 者: 蔡晓跃(AP0106338)
编写日期:2003-10-10
****************************************************************************/
SET_WINDOW(int i)
{
/* 文本界面方式下*/
if(DISPLAY_MODE == TEXT)
{
if(i < 1 || i> 4)
/* 输入的窗口下标越界,不进行操作直接返回 */
return(FALSE);
else
{
/* 窗口参数数组的坐标从零开始 */
i--;
/* 按照指定的参数开辟并显示一个新窗口 */
NEW_WINDOW(WIN[i].left,WIN[i].top,WIN[i].right,WIN[i].bottom,WIN[i].wt,WIN[i].wb,WIN[i].tt,WIN[i].tb,WIN[i].p);
}
}
}
/**************************************************************************************
模块名称: 界面输出(文本方式)
函 数 名: NEW_WINDOW
功 能: 通过窗口属性参数表创建一个新窗口
入口参数: (x1,y1,x2,y2)窗口坐标 (tcolor,bcolor)窗口颜色值
(t,b,*p)窗口标题颜色及标题指针
出口参数: 无
调用关系: 被函数 SET_WINDOW 调用,实现窗口属性与其标题参数的分离
编 者:
编写日期: 2003-10-10
**************************************************************************************/
NEW_WINDOW(int x1,int y1,int x2,int y2,int tcolor,int bcolor,int t,int b,char *p)
{
/* 显示窗口标题 */
PER_WINDOW(x1,y1,x2,y1+1,t,b,1,p);
/* 显示窗口实体 */
PER_WINDOW(x1,y1+1,x2,y2,tcolor,bcolor,0,p);
}
/***************************************************************************************
模块名称: 界面输出(文本方式)
函 数 名: PER_WINDOW
功 能: 通过窗口属性画一窗口或窗口标题(最终实现)
入口参数: (x1,y1,x2,y2)窗口坐标 (t,b,*p)窗口标题属性 display 是否为标题
出口参数: 无
调用关系: 被函数 NEW_WINDOW 调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-10
***************************************************************************************/
PER_WINDOW(int x1,int y1,int x2,int y2,int t,int b,int display,char *p)
{
int len,px;
/* 创建窗口实体 */
window(x1,y1,x2,y2);
/* 设置窗口文本颜色 */
textcolor(t);
/* 设置窗口背景颜色 */
textbackground(b);
/* 清除新创建的窗口屏幕内容,使颜色值生效 */
clrscr();
/* 如果(display == 1)则表示为窗口标题,显示指针p的内容 */
if(display == 1)
{
/* 获得窗口标题的长度*/
len = strlen(p);
/* 以居中显示方式计算标题的左端位置 */
px=(x2-x1-len)/2;
/* 定位到要显示标题的起始位置 */
gotoxy(px,1);
/* 显示窗口标题的内容 */
cprintf("%s",p);
}
}
/***************************************************************************************
模块名称: 界面输出(文本方式)
函 数 名: ACTIVE_WINDOW
功 能: 激活窗口为当前输出窗口
入口参数: (int i) i为要激活的窗口下标 (窗口下标从 1 开始)
出口参数: 无
调用关系:
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-10
****************************************************************************************/
ACTIVE_WINDOW(int i)
{
/* 如果为图形方式下,则该函数无效,不执行任何操作 */
if(DISPLAY_MODE == TEXT)
{
/* 如果要激活的窗口下标越界,出错,直接返回 */
if(i < 1 || i > 4)
return(FALSE);
else
{
/* 窗口下标减1,与窗口属性数组下标对应 */
i--;
/* 指定当前窗口的坐标范围 */
window(WIN[i].left,WIN[i].top+1,WIN[i].right,WIN[i].bottom);
/* 设置当前窗口前景文本颜色 */
textcolor(WIN[i].wt);
/* 设置当前窗口背景颜色 */
textbackground(WIN[i].wb);
/* 将当前窗口的属性保存到全局变量(CURRENT_WINDOW)中
该变量保存当前激活窗口属性 */
CURRENT_WINDOW_X1 = WIN[i].left;
CURRENT_WINDOW_X2 = WIN[i].right;
CURRENT_WINDOW_Y1 = WIN[i].top;
CURRENT_WINDOW_Y2 = WIN[i].bottom;
}
if(CURRENT_WINDOW == i)
{
/* 如果上次窗口与当前被激活窗口是同一窗口*/
/* 则光标没有跨越两个窗口,窗口改变属性为FALSE */
HAD_CHANGED_WINDOW = FALSE;
}
else
{
/* 如果上次窗口与当前激活窗口不是同一窗口
则窗口焦点发生变化,置当前窗口为新的激活窗口*/
CURRENT_WINDOW = i;
/* 窗口改变标志置于为TRUE */
HAD_CHANGED_WINDOW = TRUE;
}
/* 调用设置光标位置子程序,重新设置光标位置 */
SET_PRINTER_POSITION();
}
}
/***************************************************************************************
模块名称: 界面输出(文本方式)
函 数 名: SET_PRINTER_POSITION
功 能: 设置光标在窗口中的位置,即打印输出位置
入口参数: 无(以全局变量 HAD_CHANGED_WINDOW)作为默认参数
出口参数: 无
调用关系: 被ACTIVE_WINDOW调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-10
****************************************************************************************/
SET_PRINTER_POSITION()
{
int x,y; /* 光标坐标变量*/
if(HAD_CHANGED_WINDOW == FALSE)
/* 如果窗口没有改变,不用重置光标坐,直接返回 */
;
else
{
x = 1;
y = CURRENT_WINDOW_Y2 - CURRENT_WINDOW_Y1;
/* 定位到当前窗口的最后一行 */
gotoxy(x,y);
/* 重置窗口改变为FALSE */
HAD_CHANGED_WINDOW = FALSE;
}
}
/************************************************************************************
模块名称: 界面输出(文本方式)
函 数 名: INIT_CPU_MEMORY_INTERRUPT
功 能: 初始化并显示CPU,内存,中断参数标题
入口参数: 无
出口参数: 无
调用关系: 其它模块调用
编 者: 蔡晓跃(AP0106338)
编写日期: 2003-10-10
*************************************************************************************/
INIT_CPU_MEMORY_INTERRUPT()
{
if(DISPLAY_MODE == TEXT)
{
ACTIVE_WINDOW(2);
/* 输出系统时间标题 */
PRINT_INFORMATION(1,1,"RTIME:",WIN[1].wt,WIN[1].wb);
/* 输出相对时间标题 */
PRINT_INFORMATION(1,2," TIME:",WIN[1].wt,WIN[1].wb);
/* 输出PC计数器标题 */
PRINT_INFORMATION(1,3," PC :",WIN[1].wt,WIN[1].wb);
/* 输出通用寄存器标题 */
PRINT_INFORMATION(1,4," R :",WIN[1].wt,WIN[1].wb);
/* 输出状态寄存器标题 */
PRINT_INFORMATION(1,5," C :",WIN[1].wt,WIN[1].wb);
/* 输出当前指令标题 */
PRINT_INFORMATION(1,6,"INSTRUCTION:",WIN[1].wt,WIN[1].wb);
/* 输出程序性中断标题 */
PRINT_INFORMATION(16,1," PI : ",WIN[1].wt,WIN[1].wb);
/* 输出系统中断标题 */
PRINT_INFORMATION(16,2," SI : ",WIN[1].wt,WIN[1].wb);
/* 输出时间中断标题 */
PRINT_INFORMATION(16,3," TI : ",WIN[1].wt,WIN[1].wb);
/* 输出访问外设中断标题 */
PRINT_INFORMATION(16,4," IOI: ",WIN[1].wt,WIN[1].wb);
/* 输出硬盘标题 */
PRINT_INFORMATION(4,8,"HARDDISK",WIN[1].wt,WIN[1].wb);
/* 输出内存标题 */
PRINT_INFORMATION(20,8,"MEMORY",WIN[1].wt,WIN[1].wb);
}
}
/************************************************************************************
模块名称: 界面输出(文本方式)
函 数 名: DISPLAY_CPU
功 能: 显示关于系统核心的参数值
入口参数: 无
出口参数: 无
调用关系: 被CPU调用
编 者: 蔡晓跃(AP0106338)
编写日期:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -