2008年3月28日 星期五

可执行图形程序

建立一个不需要驱动程序就能独立运行的可执行图形程序,Turbo C中规定用下述步骤(这里     以EGA、VGA显示器为例):
1. 在C:\TC子目录下输入命令:BGIOBJ EGAVGA
此命令将驱动程序EGAVGA.BGI转换成EGAVGA.OBJ的目标文件。
2. 在C:\TC子目录下输入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA
此命令的意思是将EGAVGA.OBJ的目标模块装到GRAPHICS.LIB库文件中。
3. 在程序中initgraph()函数调用之前加上一句:
registerbgidriver(EGAVGA_driver);

该函数告诉连接程序在连接时把EGAVGA的驱动程序装入到用户的执行程序中。

经过上面处理,编译链接后的执行程序可在任何目录或其它兼容机上运行。

假设已作了前两个步骤,若再向例6中加 registerbgidriver()函数则变成:

例7:

#include

#include

int main()

{

int gdriver=DETECT,gmode;

registerbgidriver(EGAVGA_driver): / *建立独立图形运行程序 */

initgraph( gdriver, gmode,"c:\\tc");

bar3d(50,50,250,150,20,1);

getch();

closegraph();

return 0;

}

上例编译链接后产生的执行程序可独立运行。

如不初始化成EGA或CGA分辨率, 而想初始化为CGA分辨率, 则只需要将上述

步骤中有EGAVGA的地方用CGA代替即可。

2008年3月27日 星期四

Linux,学习中……

最 近在把玩Linux,感觉有把什么都Linux话的冲动,就连写这篇日志都想用在win下安的AndLinux里的FoxFire写,打开校内页面才想起 来,这个Linux环境是为了在其下学C语言搭建,没安汉字相关的东西,就是说不能显示汉字,所以刚才的页面当然是乱码,这样也能逼我学习下英语,by the way ,六级在前方……

刚才解决了在Linux下编写像TruboC下图形编程的问题,这些是我学计算机图形学遇到的一些东西。好了,下面就做下记录,省的早上时我就把我是怎么解决的给忘了……

参考链接

http://www.linuxdiyf.com/viewarticle.php?id=81907

还是拷过来吧,怕哪天失效了,还有诸位太麻烦,俩面跑……


Linux终端图形库curses简介和实例分析

作者: lktlks 发布日期: 2008-3-14 查看数: 132 出自: http://www.linuxdiyf.com
随着电脑知识的普及, 越来越多的电脑爱好者开始了解和使用Linux.。Linux的轻松自由之风给了我们不同的感受。但是我们不能满足于基本的命令和KDE, Gnome等用户界面的操作. 我们要干什么? 编程, 对, 编程! 对于编程爱好者, Linux有着很好的编程环境: gcc(GNU Compiler Collection)能够编译C, C++, Java等很多种语言, 而且Linux环境下有很多函数库可以调用.了解一些这些函数库的使用, 会给你的编程工具箱里增加许多有用的工具. 今天, 就让我们来认识一下curses --- 它不是什么中世纪巫婆的咒语,而是一个在Linux/Unix下广泛应用的图形函数库.

以前学过TC2.0的朋友肯定还记得TC里边有一个图形库BGI(Borland Graphics Interface, 还记得那个头 文件吗:). 用它我们可以绘制在DOS下的用户界面和漂亮的图形. 而Linux/Unix编程给人的感觉就比较"cool"一点, 好像Linux编程都是在黑黑的终端下进行的.确实是这样,许多Linux高手都喜欢在终端方式下工作, 熟悉了一些命令以后,这样的工作方式效率还是很高的. 但是长久地看着黑黑的屏幕难免让人感到厌倦, 特别是像我这样接触Linux不久的菜鸟:) 有没有一种工具能让我们在Linux下编出好看的图形呢? 答案是肯定的, 它就是curses!

curses的名字起源于"cursor optimization",即光标优化. 它最早由有美国伯克利大学的Bill Joy和Ken Arnold编写的, 用来处理一个游戏rogue的屏幕显示. 后来贝尔实验室的Mark Horton在System III Unix中重新编写了curses. 现在几乎所有的Unix, Linux操作系统都带了curses函数库, curses也加入了对鼠标的支持, 一些菜单和面板的处理. 可以说, curses是Linux终端图形编程的不二选择(比如著名的文字编辑器 vi 就是基于curses编的)

OK, 闲话少说,现在我们开始进入正题:

首先我们应该了解, 在终端使用使用的屏幕模式是基于文本的. 所以在开始使用curses前, 需要用initscr()函数初始化屏幕. 对应的, 程序结束需要调用endwin();函数来关闭curses状态.

有了这个概念, 我们就可以来写著名的"Hello, world!"之curses版了:
QUOTE:
/*-----------------------------------------------------------------
A very simple example of curses programming
coder: jellen
date: 3-26-2004
----------------------------------------------------------------*/

#include

int main()
{
initscr();

box(stdscr, ACS_VLINE, ACS_HLINE); /*draw a box*/
move(LINES/2, COLS/2); /*move the cursor to the center*/
waddstr(stdscr, "Hello, world!");
refresh();
getch();

endwin();
return 0;
}

呵呵, 刚才忘了说了. 我们调用curses库一般是用C语言的(没什么奇怪, C可以说是Linux的官方语言, 不过你也可以用C++或Python等语言调用curses的, 这无关紧要). 假设我们把这个程序保存为 hello.c
不过不要急着用gcc -o hello hello.c去编译运行(我知道你会用gcc:) 那样是不能通过编译的. 因为curses库不在标准路径上, 所以我们要加上 -lcurses连接选项, 像这样:

gcc -o hello hello.c -lcurses

现在你用 ./hello 运行一下程序看看,是不是出现了你所期望的窗口.

现在我们来一行行分析一下代码.
QUOTE:
#include /*这是每个 curses 程序都必须包含的头文件,表明使用了curses库*/

然后主函数中第一句initscr();初始化了屏幕, 使之开始进入curses图形化工作方式.

其实我们现在没有自己建立窗口, 用的是标准屏幕 stdscr(就象C里面标准输入stdin, 标准输出stdout一个概念), 它就是我们面前的电脑屏幕(不过现在还是黑黑的)

下面一句: box(stdscr, ACS_VLINE, ACS_HLINE); 画了一个框. 有了这个框我们才有"窗体"的感觉. stdscr就是标准屏幕, ACS_VLINE和ACS_HLINE代表构成方框两边的基本元素, 你也可以用 ''''|''''和''''-''''代替, 不过可能没有ACS_VLINE, ACS_HLINE好看了.
QUOTE:
move(LINES/2, COLS/2);
waddstr(stdscr, "Hello, world!");

这两句是把光标移到屏幕中间, 然后输出我们的"Hello, world!"

LINES 和 COLS是curses定义的宏, 代表当前屏幕的最大行数和列数. waddstr()函数的作用是在stdscr上打印字符串"hello, world!"

屏幕分物理屏幕(我们所看到的)和逻辑屏幕(在内存中的), 我们调用函数时修改的是逻辑屏幕,它不会在当前物理屏幕上显示出来.所以现在屏幕上还是什么也没有, 需要调用refresh()把我们对逻辑屏幕的改动在物理屏幕(显示器)上显示出来. 然后用getch()让屏幕暂停一下.

最后调用endwin()结束curses, 恢复原来的屏幕.

好了, 我们完成了第一个例子的分析. 是不是挺简单的?

不过不尽如人意的是屏幕还是那个样子, 没有什么色彩. 要加色彩? 那也是挺容易的: 首先用start_color()函数开启颜色模式, 然后设置我们要的颜色就行了.

curses里的颜色是配对的, 要一个背景色对一个前景色. 使用之前用init_pair()初始化.

比如init_pair(1, COLOR_BLUE, COLOR_GREEN);就定义了一组颜色, COLOR_BLUE为前景色, COLOR_GREEN为背景色. 1是它们的标记号码(供其他函数调用时使用) 我们来看一个简单的例子:
QUOTE:
/*--------------------------------------------------------------
A simple curses color demo program
Coder: jellen
Date: 3-26-2004
-------------------------------------------------------------*/

#include

int main()
{
initscr(); /*初始化屏幕*/
if(start_color() == OK) /*开启颜色*/
{
init_pair(1, COLOR_RED, COLOR_GREEN); /*建立一个颜色对*/
attron(COLOR_PAIR(1)); /*开启字符输出颜色*/
move(LINES/2, COLS/2);
waddstr(stdscr, "Yet another Hello, world!");
attroff(COLOR_PAIR(1)); /*关闭颜色显示*/
refresh();
}
else
{
waddstr(stdscr, "Can not init color");
refresh();
}
endwin(); /*关闭curses状态*/
return 0;
}

这个程序假如保存为color.c

那么你可以这样编译了: gcc -o color color.c -lcurses

用./color一运行个彩色的字? 呵呵, 虽然不好看, 但是说不定你自己以后可以用curses写出精美的程序.

大部分看上面的链接就好了,只是#include 后面是curses.h,然后第二个例子中在

waddstr(stdscr, "Yet another Hello, world!");

后加上getch();要不一闪而过,还以为错了呢!

就先写这些吧,有了新心得在修改就好了……

2008年3月14日 星期五

安全的鱼

我是安全的,我现在学的信息安全……

2008年3月12日 星期三

…………

我现在好像落下了点东西,机器人足球的代码没怎么看,飞思卡尔的单片机也没看,我都不知道我这几天忙什么了,我还是正常点上课学习吧,正常些也许会好些……

2008年3月9日 星期日

英文系统显示汉字或打汉字英文版的xp下乱码问题

以下操作基于: 进入control panel(控制面板),切换到经典模式,启动Regional and Language Options(区域与语言选项)

方法一:

   首先要安装东亚语言支持。转到Languages选项卡,把Install files for East Asian languages这项选上,按Apply按钮。这时系统可能会要求你插入Windows XP操作系统的安装光盘以复制一些文件。完成了这步,你的电脑就能正确显示所有符合Unicode标准的中文了,但是对GB、GBK码的简体中文和 Big5码的繁体中文还是显示乱码。

选择“Regional Options”,在“Standards and formats”的下拉菜单中选择chinese(PRC)

然 后转到Advanced选项卡,如果你使用中国大陆的简体中文,就在Language for non-Unicode programs的下拉选择框中选择Chinese(PRC),然后按底下的Apply按钮。完成了这步,你的电脑里应该就能正确显示GB、GBK码的中 文了。而如果你使用***或香港的Big5繁体中文,就要在Language for non-Unicode programs的下拉选择框中选择Chinese(Taiwan)或Chinese(Hong Kong)。

2、使Windows XP能输入中文

到Languages选项卡上点击Details按钮:
点 Add按钮,把Add input Language设成Chinese(PRC),在Keyboard layout/IME的下拉选择框里选择一种你想使用的输入法,比如我们这里选择了中文简体全拼。点OK按钮,在Text Services and input Languages窗口就可见到输入法已经加入了.
  如果你使用五笔,在作了第一步后,安装五笔输入法就行,输入法中就会出现你安装的输入法。同理可到http://www.crsky.com/soft/1629.html下载智能ABC安装后,系统也有智能ABC输入法了(默认的xp 英文版是没有智能ABC的)。

方法二:


因为在纯英文版的xp下,是不存在中文字符集的,要想正确显示中文,一定要安装中文语言包方法如下:
首先到
http://www.oamo.com/Software/Catalog27/1654.html下载英文版的语言包(下载的语言包为ISO格式,可用虚拟光驱打开),用此ISO文件安装完中文语言后,进入control panel,切换到经典模式,启动Regional and Language Options,
1,选择“Advanced”,在“Language for non-Unicode programs”的下拉菜单中选择chinese(PRC),再在下面"Default user account settings"选中,
2,选择“Regional Options”,在“Standards and formats”的下拉菜单中选择chinese(PRC)
确定退出,这样你的英文系统怎么用中文都不会乱码了:)

而且这个方法有一个好处,就是装了中文包以后,系统可以在中文与英文之间来回的换着用。

方法:在Languages选项中最下面选择你想用的语言,注销重新登陆就行。

问题详述:在国外用得是英文操作系统,看汉语网页竟是乱码,也上不了QQ,最简单的处理方法是 \\\什么?
最 佳答案: 在“控制面版”的“区域和语言选项”的“语言”中的”文字服务和输入语言“按“详细信息(D)...”按钮打开“文字服务和输入语言”对话框,按“添加 (D)...”在"输入语言(I)"选择“中文(中国)”在下面的“键盘布局/输入法(K)”选择你喜欢的中文输入法如MSPY,另外在在“控制面版”的 “区域和语言选项”的“高级”选项卡中的下面的方框内勾选中文代码如:10008\20936\50227\52936\54936\936等。网页中右 击,在编码中选中文。QQ装E文版的。
以上方法我在繁体版的WinXP中试过...
更简单的方法就是下载MS官方的apploc.msi对应用程序的编码支持
还可以装双系统,中文+E文
或下载免费的VMwareServerConsole虚拟机,E文的,在VMwareServerConsole虚拟机中安装中文的系统,比直接装双系统方便,而且可以同时使用E文/中文或已安装的任意系统!