Board logo

标题: giCell 真正的GUI窗口系统(已共享源码) [打印本页]

作者: taowentao     时间: 2006-12-6 08:48    标题: giCell 真正的GUI窗口系统(已共享源码)

源代码下载:http://www.cn-dos.net/forum/atta ... 1076&download=1
注意:C_code.rar文件纠正了回调函数无法使用浮点数操作的问题...
演示下载:http://zhenlove.com.cn/cndos/fileup/files/gui_demo.rar


完整功能如下所述:

                        rtCell 实时微内核-具有下列功能:

1. 完全抢占的实时微内核结构,独立的内核栈,中断和系统调用均切换到内核栈执行;

2. 256(64、32)个优先级,0为最高优先级(系统保留),256(64、32)为空闲优先级;

3. 不同优先级任务完全抢占,同优先级之间可按先进先出或时间片轮转方式执行;

4. 在一系统(定时器服务)任务中实现内核定时器,用于超时等待内核对象、周期性定时器、任务延迟、一次定时(此时需定义一超时后执行的过程);此服务任务的优先级由其客户任务的最高优先级驱动,随之动态改变,以消除隐式优先级反转现象;

5. 提供任务(Task)、互斥锁(Mutex)、信号量(Semaphore)、位域标志(Flag定时器(Timer)、优先级消息(Message)和环形队列(Ring buffer)内核对象;

6. 任何内核对象用一整数ID标识,而非指针,从而可避免用户任务野指针的副作用,内核对象总数不超过61440(即60K);

7. 互斥锁支持优先级继承和优先级置顶协议,在创建时设置该协议,且总按优先级等待,优先级继承协议时仅支持同一互斥锁的嵌套调用,优先级置顶协议还可支持不同互斥锁的多次嵌套调用;

8. 其它对象的等待方式有:优先级等待和先进先出(节省内存)等待,在创建时设置;

9. 内核数据的同步,除在任务切换,及任务和内核之间切换堆栈时暂时关中断外,其它地方均以延迟过程调用(DPC)方式执行;

10. 任务对象支持异步过程调用(Window用语APC,相当于UNIX中的信号机制),从而可引导任务异步的执行一个过程(前提是任务栈不小于1024字节),此过程将在该任务下次被调度时执行;

11. 删除避免机制,拥有互斥锁的任务及处于占有状态的互斥锁均具有防止被删除的机制,要删除拥有互斥锁的任务必须自行终止或调用任务终止函数,而要删除任一个互斥锁则必须先使其处于空闲状态,即没有任何任务占有此互斥锁,否则禁止删除;

12. 对象命名机制,同类内核对象可用唯一的名称标识来获取其ID,达到引用目的。

13. 在内核中实现了中断的进出接口,因此用户中断处理只需写标准的C函数,而不必关心中断底层处理的细节;

14. 系统调用以陷阱指令(x86中int指令)实现,易于扩展到“内存保护”的进程模式;

15. 在内核库之外提供了一个简单的堆内存分配机制,用于内核对象动态内存分配时调用;

16. 支持毫秒级定时器,内核定时器周期为一毫秒;

17. 支持 X387/287 硬件浮点协处理器的任务状态保护,被动方式的任务浮点状态切换(开中断执行,由于使用了特权指令实现,因此只能在纯DOS实模式下或虚拟机X386/X387及后续机型上执行,而无法在Windows的DOS窗口中运行)。



                    giCell 视口裁减及消隐处理引擎-功能如下:

1. 完善而精巧的多视口裁剪和消隐处理引擎,与微内核rtCell紧密结合;

2. 真正的事件(或消息)驱动的多窗口(视口)技术,支持顶层窗口和透明窗口的显示和裁剪处理;

3. 当前支持Label、Edit、Botton、Slider、Listbox、TreeView和Checkbox控件,其中的Edit控件支持剪切、复制和粘贴(ctrl+x,ctrl+c,ctrl+v);

4. 支持窗口的平移、缩放,光标切换和窗口系统按钮,及窗口和控件的过程回调;

5. 基于透明视口(或窗口)的裁剪和消隐处理,可生成任何非矩形(多态)窗口,本示例中的三角形窗口就是基于透明视口来实现的;

7. 支持图形内存设备(GDC),有效避免窗口重绘时闪烁,易于实现视频及动画处理;

6. 内存需求小,窗口和控件的缺省状态均不使用GDC(而是采用直接屏技术),所耗内存小,因此实用性强,包括rtCell调度器、鼠标、键盘及图形驱动的库文件在DOS下仅77K。



                   关于可文件Engine.lib和mcOutLib.obj:

1. 考虑到DOS内存的限制,库文件Engine.lib中的rtCell内核仅支持32个任务优先级(因为优先级队列太占用内存),这样即使在640K内存下,也可创建上数百个内核及GUI对象,可满足一定规模的应用程序要求;

2. 库文件mcOutLib.obj是目录giCell\mcOSLib下文件的编译结果,用于处理任务的浮点协处理器(硬件)状态切换,任务浮点数状态初始化,内存分配,信息显示等操作(主要用于内核),用户也可自己编译giCell\mcOSLib目录下的文件,注意:Borland C/C++ 3.1可能无法识别其中的某些浮点数操作指令;

3. 文件MAIN.C是对Engine.lib使用的具体实例,在Borland C/C++ 3.1中编译时必须打开X387/287选项和C函数参数传递约定,此文件还对任何使用透明窗口来生成非矩形窗口,以及如何使用GDC生成动画进行了演示;

4. 注意其中的一些执行顺序:浮点数操作不得放到回调函数中执行,而只能在其它任务中执行(可从回调函数中向其它任务发送消息来实现),否则程序将进行无限循环;

5. 因为浮点协处理器的任务状态切换机制使用了特权指令,所生成的可执行文件只能在纯DOS实模式下或虚拟机X386/X387及后续机型上执行,而无法在Windows的DOS窗口中运行;

6. 由MAIN.C所生成的可执行文件在AMD机器DOS实模式、X86虚拟机qemu-0.9.0-windows以及Bochs-2.1.1下均执行良好,注意:生成的可执行文件依然是16位实模式。


    压缩文件C_lib.rar中包含窗口及其子控件的源代码,演示文件MAIN.C和DateTime.c,以及一个专用于Borland C/C++ 3.1的工程文件。

   注意:使用浮点数操作时最好把相关任务的栈设置到2K以上。


联系邮件:taowentao_twt@163.com, taowentao_twt@sohu.com

源代码下载:


汉字字库为Windows XP 标准9号宋体(http://www.cn-dos.net/forum/atta ... 12e&download=1)

注意DOS不可重入,在GUI任务之外调用DOS功能之前应加GUI锁,调用之后应解锁,而且调用DOS功能的任务优先级应低于16:
void _cdecl_ GUILock(void);      /* 锁定GUI,保护共享数据安全 */
void _cdecl_ GUIUnLock(void);    /* 解锁GUI,加解锁应成对出现 */


此外,在此演示中还需矢量字库文件:KTDOT.PS,请到“矢量汉字显示实例[源码]——happybasic”(http://www.cn-dos.net/forum/viewthread.php?tid=27441&fpage=3) 中下载此文件

[ Last edited by taowentao on 2007-8-23 at 10:06 PM ]
附件 1: C_code.rar (2007-5-29 21:32, 105.64 K,下载次数: 1121)
附件 2: C_lib_hz.rar (2007-8-23 21:09, 243.62 K,下载次数: 519)

作者: 雨露     时间: 2006-12-6 09:29
下载地址怎么有两个,试用了一下,都是一样的!
作者: seekfor     时间: 2006-12-6 21:20    标题: 看你目录下有个sdl.dll,就知道是SDL库做出来的,没有移植性

不过看起来差不多
作者: longhai     时间: 2007-1-2 12:53
基本上比较客观,也比较全面
作者: taowentao     时间: 2007-1-3 03:15
主要是怕上传文件无法解压缩,因此准备了两份不同的压缩格式.请各位网友原谅.

另外请各位网友指点软件中的不妥之处,谢谢!

[ Last edited by taowentao on 2007-1-3 at 03:17 AM ]
作者: 雨露     时间: 2007-1-3 07:29
不会吧,能在这混的,应该都有压缩软件的,要不搞成自解压的也行
作者: taowentao     时间: 2007-4-4 10:32
最新演示:https://gro.clinux.org/frs/download.php/2000/giCell.rar

自带鼠标、键盘驱动。

演示方法:解压缩 giCell.rar,在windows下(双击)执行my_gui.bat,或在纯dos下直接执行my_gui.exe(在windows的dos窗口中无鼠标)。

rtCell 内核的新增功能:

1. 256(64、32)个优先级,0为最高优先级(系统保留),256(64、32)为空闲优先级;

2. 一次定时(此时需定义一超时后执行的过程);

3. 互斥锁支持优先级继承和优先级置顶协议,在创建时设置该协议,且总按优先级等待,优先级继承协议时仅支持同一互斥锁的嵌套调用,优先级置顶协议还可支持不同互斥锁的多次嵌套调用;

4. 任务对象支持异步过程调用(Window用语APC,相当于UNIX中的信号机制),从而可引导任务异步的执行一个过程(前提是任务栈不小于1024字节),此过程将在该任务下次被调度时执行;

5. 删除避免机制,拥有互斥锁的任务及处于占有状态的互斥锁均具有防止被删除的机制,要删除拥有互斥锁的任务必须自行终止或调用任务终止函数,而要删除任一个互斥锁则必须先使其处于空闲状态,即没有任何任务占有此互斥锁,否则禁止删除;

6. 对象命名机制,同类内核对象可用唯一的名称标识来获取其ID,达到引用目的。


giCell 图形多窗口的新增功能:

1. 鼠标功能改进,与window的鼠标事件更接近;

2. 基于透明视口(或窗口)裁剪和消隐处理,可生成任何非矩形窗口,本示例中的三角窗口 就是通过透明视口的功能来实现的。

[ Last edited by taowentao on 2007-5-2 at 04:53 PM ]
作者: newmem     时间: 2007-5-25 02:58
能共享代码么?
作者: taowentao     时间: 2007-5-27 22:16    标题: 源代码已经共享

源代码下载:http://zhenlove.com.cn/cndos/fileup/files/C_lib.rar
                  http://www.cn-dos.net/forum/atta ... 1076&download=1
演示下载:http://zhenlove.com.cn/cndos/fileup/files/gui_demo.rar
最新虚拟机(qemu-0.9.0-windows)演示:http://zhenlove.com.cn/cndos/fileup/files/qemu-0.9.0-windows.rar


完整功能如下所述:

                        rtCell 实时微内核-具有下列功能:

1. 完全抢占的实时微内核结构,独立的内核栈,中断和系统调用均切换到内核栈执行;

2. 256(64、32)个优先级,0为最高优先级(系统保留),256(64、32)为空闲优先级;

3. 不同优先级任务完全抢占,同优先级之间可按先进先出或时间片轮转方式执行;

4. 在一系统(定时器服务)任务中实现内核定时器,用于超时等待内核对象、周期性定时器、任务延迟、一次定时(此时需定义一超时后执行的过程);此服务任务的优先级由其客户任务的最高优先级驱动,随之动态改变,以消除隐式优先级反转现象;

5. 提供任务(Task)、互斥锁(Mutex)、信号量(Semaphore)、位域标志(Flag定时器(Timer)、优先级消息(Message)和环形队列(Ring buffer)内核对象;

6. 任何内核对象用一整数ID标识,而非指针,从而可避免用户任务野指针的副作用,内核对象总数不超过61440(即60K);

7. 互斥锁支持优先级继承和优先级置顶协议,在创建时设置该协议,且总按优先级等待,优先级继承协议时仅支持同一互斥锁的嵌套调用,优先级置顶协议还可支持不同互斥锁的多次嵌套调用;

8. 其它对象的等待方式有:优先级等待和先进先出(节省内存)等待,在创建时设置;

9. 内核数据的同步,除在任务切换,及任务和内核之间切换堆栈时暂时关中断外,其它地方均以延迟过程调用(DPC)方式执行;

10. 任务对象支持异步过程调用(Window用语APC,相当于UNIX中的信号机制),从而可引导任务异步的执行一个过程(前提是任务栈不小于1024字节),此过程将在该任务下次被调度时执行;

11. 删除避免机制,拥有互斥锁的任务及处于占有状态的互斥锁均具有防止被删除的机制,要删除拥有互斥锁的任务必须自行终止或调用任务终止函数,而要删除任一个互斥锁则必须先使其处于空闲状态,即没有任何任务占有此互斥锁,否则禁止删除;

12. 对象命名机制,同类内核对象可用唯一的名称标识来获取其ID,达到引用目的。

13. 在内核中实现了中断的进出接口,因此用户中断处理只需写标准的C函数,而不必关心中断底层处理的细节;

14. 系统调用以陷阱指令(x86中int指令)实现,易于扩展到“内存保护”的进程模式;

15. 在内核库之外提供了一个简单的堆内存分配机制,用于内核对象动态内存分配时调用;

16. 支持毫秒级定时器,内核定时器周期为一毫秒;

17. 支持 X387/287 硬件浮点协处理器的任务状态保护,被动方式的任务浮点状态切换(开中断执行,由于使用了特权指令实现,因此只能在纯DOS实模式下或虚拟机X386/X387及后续机型上执行,而无法在Windows的DOS窗口中运行)。



                    giCell 视口裁减及消隐处理引擎-功能如下:

1. 完善而精巧的多视口裁剪和消隐处理引擎,与微内核rtCell紧密结合;

2. 真正的事件(或消息)驱动的多窗口(视口)技术,支持顶层窗口和透明窗口的显示和裁剪处理;

3. 当前支持Label、Edit、Botton、Slider、Listbox、TreeView和Checkbox控件,其中的Edit控件支持剪切、复制和粘贴(ctrl+x,ctrl+c,ctrl+v);

4. 支持窗口的平移、缩放,光标切换和窗口系统按钮,及窗口和控件的过程回调;

5. 基于透明视口(或窗口)的裁剪和消隐处理,可生成任何非矩形(多态)窗口,本示例中的三角形窗口就是基于透明视口来实现的;

7. 支持图形内存设备(GDC),有效避免窗口重绘时闪烁,易于实现视频及动画处理;

6. 内存需求小,窗口和控件的缺省状态均不使用GDC(而是采用直接屏技术),所耗内存小,因此实用性强,包括rtCell调度器、鼠标、键盘及图形驱动的库文件在DOS下仅77K。



                   关于可文件Engine.lib和mcOutLib.obj:

1. 考虑到DOS内存的限制,库文件Engine.lib中的rtCell内核仅支持32个任务优先级(因为优先级队列太占用内存),这样即使在640K内存下,也可创建上数百个内核及GUI对象,可满足一定规模的应用程序要求;

2. 库文件mcOutLib.obj是目录giCell\mcOSLib下文件的编译结果,用于处理任务的浮点协处理器(硬件)状态切换,任务浮点数状态初始化,内存分配,信息显示等操作(主要用于内核),用户也可自己编译giCell\mcOSLib目录下的文件,注意:Borland C/C++ 3.1可能无法识别其中的某些浮点数操作指令;

3. 文件MAIN.C是对Engine.lib使用的具体实例,在Borland C/C++ 3.1中编译时必须打开X387/287选项和C函数参数传递约定,此文件还对任何使用透明窗口来生成非矩形窗口,以及如何使用GDC生成动画进行了演示;

4. 注意其中的一些执行顺序:浮点数操作不得放到回调函数中执行,而只能在其它任务中执行(可从回调函数中向其它任务发送消息来实现),否则程序将进行无限循环;

5. 因为浮点协处理器的任务状态切换机制使用了特权指令,所生成的可执行文件只能在纯DOS实模式下或虚拟机X386/X387及后续机型上执行,而无法在Windows的DOS窗口中运行;

6. 由MAIN.C所生成的可执行文件在AMD机器DOS实模式、X86虚拟机qemu-0.9.0-windows以及Bochs-2.1.1下均执行良好,注意:生成的可执行文件依然是16位实模式。


    压缩文件C_lib.rar中包含窗口及其子控件的源代码,演示文件MAIN.C和DateTime.c,以及一个专用于Borland C/C++ 3.1的工程文件。

   注意:使用浮点数操作时最好把相关任务的栈设置到2K以上。




联系邮件:taowentao_twt@163.com, taowentao_twt@sohu.com

[ Last edited by taowentao on 2007-6-21 at 10:03 PM ]
附件 1: 演示截图.JPG (2007-6-21 22:02, 64.14 K,下载次数: 9)



作者: zx5290     时间: 2007-6-12 03:50    标题: 怎么得到积分

怎么得到积分?
作者: taowentao     时间: 2007-6-12 21:06    标题: 不需积分

原来没注意积分问题,现已改成不需积分。
作者: qaz1223     时间: 2007-6-14 14:28
厉害了!支持高手
作者: rockplayer     时间: 2007-6-20 12:23
我顶
作者: taowentao     时间: 2007-6-30 03:44    标题: 最新演示:TreeView 及ListView 演示

TreeView 及ListView 演示:
http://zhenlove.com.cn/cndos/fileup/files/giCell_demo.rar

虚拟机运行截图:


[ Last edited by taowentao on 2007-7-1 at 01:19 PM ]
作者: AlexZhang     时间: 2007-6-30 12:45
先顶後看

放出SDK看看

[ Last edited by AlexZhang on 2007-6-30 at 12:56 PM ]
作者: taowentao     时间: 2007-7-14 02:49    标题: 最新源代码,支持TreeView、ListView

最新源代码(附件1)包含TreeView、ListView; ListView支持标题栏平移和缩放,Scrollbar支持鼠标滚轮驱动。 可在Windows的DOS窗口中全屏方式下运行。

请下载后,用Borland C/C++ 3.1编译其中的工程文件:GUI.DSK, GUI.PRJ。

[ Last edited by taowentao on 2007-7-14 at 03:43 AM ]
附件 1: gui截图.JPG (2007-7-14 03:29, 72.67 K,下载次数: 5)



作者: cicnx     时间: 2007-8-3 00:35
我还以为有全部代码呢..... 关键的代码没有相当于没有用..
作者: defrag     时间: 2007-8-3 13:31    标题: 实际上现在用实模式也可以做多窗口,多任务

1024*768*256做多窗口4MB的显示内存已经足够,屏幕只用前768K
用交换内存(INT15H)可以实现多任务。
作者: taowentao     时间: 2007-8-14 22:32    标题: 支持12点阵汉字,可调用DOS文件功能

支持12点阵汉字(需要文件 hz12.bin ),可调用DOS文件功能(但是影响实时性能),按下键“SHIFT + ESC”退出rtCell,并返回到DOS系统。


虚拟机演示(下载: http://zhenlove.com.cn/cndos/fileup/files/hz_demo.rar)。

纯DOS演示(下载:http://zhenlove.com.cn/cndos/fileup/files/GUI_DOS.rar)。

C_lib.rar 为最新源代码(http://www.cn-dos.net/forum/atta ... 567&download=1)

[ Last edited by taowentao on 2007-8-19 at 09:55 AM ]
附件 1: demo_zhp.JPG (2007-8-14 22:33, 64.78 K,下载次数: 2)


附件 2: C_lib.rar (2007-8-19 09:47, 258.4 K,下载次数: 198)

作者: taowentao     时间: 2007-8-23 20:57    标题: Windows XP 标准9号宋体

汉字字库改为Windows XP 标准9号宋体。
注意DOS不可重入,在GUI任务之外调用DOS功能之前应加GUI锁,调用之后应解锁,且调用DOS功能的任务优先级应低于16(因为已在一个优先级高于16的任务中接管了所有的DOS硬件中断),而DOS功能调用仍基于忙等待机制:
void _cdecl_ GUILock(void);      /* 锁定GUI,保护共享数据安全 */
void _cdecl_ GUIUnLock(void);    /* 解锁GUI,加解锁应成对出现 */

此外,在此演示中还需矢量字库文件:KTDOT.PS,请到“矢量汉字显示实例[源码]——happybasic”(http://www.cn-dos.net/forum/viewthread.php?tid=27441&fpage=3) 中下载此文件。

[ Last edited by taowentao on 2007-8-24 at 09:09 PM ]
附件 1: C_lib.rar (2007-8-23 20:58, 243.62 K,下载次数: 346)
附件 2: demo_font12.JPG (2007-8-23 20:59, 67.85 K,下载次数: 17)



作者: haohaook0099     时间: 2007-9-1 11:47
源代码????内核呢?????
作者: taowentao     时间: 2007-9-22 13:30    标题: 支持1024x768分辨率64k 颜色,虚拟机演示

支持1024x768分辨率,64k 颜色,DOS文件读写由中断驱动,PC机运行需要显卡支持VBE。


虚拟机演示(下载:https://gro.clinux.org/frs/download.php/2083/giCell_1024x768.rar)。

[ Last edited by taowentao on 2007-9-22 at 01:55 PM ]
附件 1: gui1024x768.JPG (2007-9-22 13:51, 148.62 K,下载次数: 10)



作者: ldljlzw     时间: 2007-9-27 11:53
源代码????内核呢?????
作者: ldljlzw     时间: 2007-9-28 11:07
什么开放源代码,只不过是几个LIB文件!!!
作者: jxfengzi     时间: 2007-10-17 16:49
是lz写的么?
写了多久?

确实很不错,比我写的强多了。
作者: turui     时间: 2007-12-14 16:43
汗。。。。
看了演示觉得好漂亮哦
赶紧下源码来学习
结果。。。。
是个LIB,跟没有一样
楼主把代码放出来
否则没大意义哦,这帖就仅成了观赏帖了
作者: taowentao     时间: 2007-12-14 19:53


  Quote:
Originally posted by turui at 2007-12-14 04:43 PM:
汗。。。。
看了演示觉得好漂亮哦
赶紧下源码来学习
结果。。。。
是个LIB,跟没有一样
楼主把代码放出来
否则没大意义哦,这帖就仅成了观赏帖了

源代码在WIN目录下面,自己找吧...
作者: turui     时间: 2007-12-16 17:21


  Quote:
Originally posted by taowentao at 2007-12-14 19:53:


源代码在WIN目录下面,自己找吧...

主要是想学习一下Engine部分的代码可这一部分是Lib看不到哦
如果没这部分代码没办法理解您的思想哦
作者: turui     时间: 2007-12-17 10:48
楼主的代码编码风格不错哦,代码好清晰,Engine部分代码放出来就更好拉
作者: shiyouc     时间: 2008-6-27 12:04    标题:

不错呀,向你学习
作者: wbmrz     时间: 2008-10-5 10:14
不错啊.
作者: wbmrz     时间: 2008-10-5 10:30
DOS下搞图形界面,这是很有趣的事情,我要是会编程就多一项乐事了.
作者: jawbin     时间: 2008-10-12 23:06
好像下载不了了?
作者: jawbin     时间: 2008-10-12 23:06
好像下载不了了?
作者: gxp110     时间: 2010-5-27 22:28
好資料~
謝謝…
作者: sgzhou6688     时间: 2010-6-3 11:20
顶一下,谢谢分享》》》》》》》》》》》》