中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » ems存存储一个600*400的二维数组
作者:
标题: ems存存储一个600*400的二维数组 上一主题 | 下一主题
jiaxu520
新手上路





积分 12
发帖 2
注册 2005-12-23
状态 离线
『楼 主』:  ems存存储一个600*400的二维数组

因为我需要一个600*400的二维数组存放浮点型数据,所以在一般DOS下不能申请这么大的二维数组,便想到用EMS申请的内存页面作为二维数组的行,一行中的数据都放在一页中,那么申请的总页数就是400页. 不知哪位高手指点,该如何做?

给出我的程序
unsigned hzhandle;//main函数中要用到释放内存页面时用到全局变量ZHANDLE
    double far *fardouble;
    double far *tmp,buffer[600];//4k==512*8
    unsigned nowpagenum,pageaddr;//当前EMS页面数和得到的页地址

char Load_EMS(void)
{

  int e,hzk,page,i,j;
  double flag;
  unsigned max_block,total;
  unsigned totalpage;
// hzk=open(....);///////////
  if(test_ems()){
  if(!get_EMS_status()){
  flag=get_number_of_pages(&nowpagenum,&totalpage);
  page=500;
  if(nowpagenum>page){
    flag=get_page_frame_segment(&pageaddr);  }

  if((!flag)&&(!allocate_memory(&hzhandle,page))){

    fardouble=(double far *)MK_FP(pageaddr,0);
    tmp=fardouble;nowpagenum=0;
   
/*        for(e=400;e!=0;e--){
      if(tmp==fardouble+16384){
        map_memory(0,nowpagenum,hzhandle);
        nowpagenum++;tmp=fardouble;

       }
     }
*/

    return 0; }}
    }
    return 1;
}



我在具体存储数据时发现总是存不进去

2006-7-11 12:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
firstsail
高级用户





积分 668
发帖 295
注册 2005-7-26
来自 广东深圳
状态 离线
『第 2 楼』:  

可以使用WinSail V2.0的CXmsMemory扩展内存类,
其中可以用到:
BOOL CXmsMemory:MallocXms(DWORD dwSize);//分配内存(以字节为单位)
BOOL CXmsMemory::FreeXms(DWORD dwSize);//释放内存
BOOL  CXmsMemory::SetFloatData(DWORD dwIndex, float fData);//将浮点数写入以字节为单位的索引地址中。
float  CXmsMemory::GetFloatData(DWORD dwIndex););//从以字节为单位的索引地址中读出浮点数。

http://www.firstsail.com.cn中可以下载Winsail V2.0编程库,从Sail.lib中可以析出Xms.Obj模块,共14K。

2006-7-11 18:59
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: