在二十世纪七十年代早期,菲利普斯实验室开始在整个电视网络上传输数字信息。 目的是通过电视机提供最新的新闻和天气信息。 这个系统首先由英国广播公司试验,最终被称为“Ceefax”,然后在其他独立的英国地面电台被称为“Oracle”。 BBC微型计算机上实现了一个非常类似的系统,称为模式7(mode 7)。例子如下图所示:
图一:图片来源: http://teletext.mb21.co.uk/gallery/ceefax/main1.shtml
本次C语言的练习受这种图文电视系统的启发,将允许一个40*25(1000)的字符文件(.m7文件)使用类似的控制代码渲染到屏幕上。 但是,一些控制代码并未实现,包括那些用于闪烁或隐藏文本以及透明背景的控制代码。 特别是,强调对双倍高度控制代码的定义与传统控制代码的定义不同。字符文件定义如下图:
图二: 字母数字模式的控制代码和字符。 请注意(因为我们使用白皮书)前景以黑色显示,背景以白色显示。 在图文电视屏幕上,我们在黑色背景上使用白色。
相关结构定义在 .h 文件中:
typedef unsigned char myUint8;
typedef unsigned short myUint16;
enum colour {
black, red, green, yellow, blue, magenta, cyan, white
};
typedef enum colour colour;
enum displayMode { alphanumeric, contiguous, separate };
typedef enum displayMode displayMode;
enum holdMode { release, hold };
typedef enum holdMode holdMode;
enum heightMode { single, doublebottom, doubletop };
typedef enum heightMode heightMode;
struct state {
myUint8 code;
myUint16 ch[FNTH];
colour fgcolour;
colour bgcolour;
displayMode dismode;
heightMode height;
holdMode holdgraphics;
} ;
typedef struct state state;
初始化状态state:图文电视页面上的每个新的自然都会先自动以白色文本,单个高度,字母图形,黑色背景,展现图形 来定义:
void state_init(state *s)
{
s->fgcolour = white;
s->bgcolour = black;
s->dismode = alphanumeric;
s->holdgraphics = release;
s->height = single;
}
程序首先读取.m7文件中的字符文件,再与.fnt文件中所规定的相比较,最后一个一个像素点的渲染到屏幕上。
测试文件test.m7 最后渲染结果: