中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » giCell 真正的GUI窗口系统(已共享源码)
« [1] [2] [3] »
作者:
标题: giCell 真正的GUI窗口系统(已共享源码) 上一主题 | 下一主题
taowentao
高级用户





积分 739
发帖 111
注册 2004-11-30
来自 辽宁沈阳
状态 离线
『楼 主』:  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 ]

   此帖被 +6 点积分          点击查看详情   
评分人:【 henrya2 分数: +4  时间:2007-6-16 10:14
评分人:【 AlexZhang 分数: +2  时间:2007-6-30 12:47


附件 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,下载次数: 521)


来自山东,现居沈阳
2006-12-6 08:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
雨露
管理员

DOS非常爱好者


积分 6209
发帖 2598
注册 2006-1-20
状态 离线
『第 2 楼』:  

下载地址怎么有两个,试用了一下,都是一样的!



2006-12-6 09:29
查看资料  发短消息 网志  OICQ (156647374)  编辑帖子  回复  引用回复
seekfor
荣誉版主





积分 57
发帖 23
注册 2006-10-28
状态 离线
『第 3 楼』:  看你目录下有个sdl.dll,就知道是SDL库做出来的,没有移植性

不过看起来差不多

2006-12-6 21:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
longhai
初级用户





积分 28
发帖 14
注册 2006-10-18
状态 离线
『第 4 楼』:  

基本上比较客观,也比较全面

2007-1-2 12:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
taowentao
高级用户





积分 739
发帖 111
注册 2004-11-30
来自 辽宁沈阳
状态 离线
『第 5 楼』:  

主要是怕上传文件无法解压缩,因此准备了两份不同的压缩格式.请各位网友原谅.

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

[ Last edited by taowentao on 2007-1-3 at 03:17 AM ]



来自山东,现居沈阳
2007-1-3 03:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
雨露
管理员

DOS非常爱好者


积分 6209
发帖 2598
注册 2006-1-20
状态 离线
『第 6 楼』:  

不会吧,能在这混的,应该都有压缩软件的,要不搞成自解压的也行



2007-1-3 07:29
查看资料  发短消息 网志  OICQ (156647374)  编辑帖子  回复  引用回复
taowentao
高级用户





积分 739
发帖 111
注册 2004-11-30
来自 辽宁沈阳
状态 离线
『第 7 楼』:  

最新演示: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 ]



来自山东,现居沈阳
2007-4-4 10:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
newmem
新手上路





积分 8
发帖 4
注册 2007-5-24
状态 离线
『第 8 楼』:  

能共享代码么?

2007-5-25 02:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
taowentao
高级用户





积分 739
发帖 111
注册 2004-11-30
来自 辽宁沈阳
状态 离线
『第 9 楼』:  源代码已经共享

源代码下载: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)




来自山东,现居沈阳
2007-5-27 22:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zx5290
新手上路





积分 6
发帖 3
注册 2006-2-19
来自 wuhan
状态 离线
『第 10 楼』:  怎么得到积分

怎么得到积分?

2007-6-12 03:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
taowentao
高级用户





积分 739
发帖 111
注册 2004-11-30
来自 辽宁沈阳
状态 离线
『第 11 楼』:  不需积分

原来没注意积分问题,现已改成不需积分。



来自山东,现居沈阳
2007-6-12 21:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qaz1223
新手上路





积分 13
发帖 12
注册 2007-6-14
状态 离线
『第 12 楼』:  

厉害了!支持高手

2007-6-14 14:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
rockplayer
新手上路





积分 4
发帖 2
注册 2007-3-16
状态 离线
『第 13 楼』:  

我顶

2007-6-20 12:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
taowentao
高级用户





积分 739
发帖 111
注册 2004-11-30
来自 辽宁沈阳
状态 离线
『第 14 楼』:  最新演示: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 ]



来自山东,现居沈阳
2007-6-30 03:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
AlexZhang
系统支持





积分 952
发帖 410
注册 2007-2-8
状态 离线
『第 15 楼』:  

先顶後看

放出SDK看看

[ Last edited by AlexZhang on 2007-6-30 at 12:56 PM ]

2007-6-30 12:45
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: