|
楼主 |
发表于 2007-1-13 21:03:21
|
显示全部楼层
gathx语言1.0环境的代码
# using gathx,windows
! function w3xMaster
C++#{
CString loadFilePath;
CFileDialog Filedlg(TRUE,
NULL,
NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT |
OFN_ALLOWMULTISELECT|OFN_EXPLORER,
"War3Map Files (*.w3m;*.w3x;*.w3n)|*.w3m;*.w3x;*.w3n|All files(*.*)|*.*||",
NULL);
if(Filedlg.DoModal() == IDOK)
loadFilePath = Filedlg.GetPathName();
else
return;
}
# define file = code::openfile(loadFilePath )
# if (local integer headerOffset := file::findText 'MPQ\\x1A')
define w3xFile = file
else MessageBox("不是有效的地图文件")
end w3xMaster
C++#{
struct TMPQHeader
{
DWORD dwMpqFlag;
DWORD dwHeaderSize;
DWORD dwArchiveSize;
USHORT wFormatVersion;
USHORT wBlockSize;
DWORD dwHashTablePos;
DWORD dwBlockTablePos;
DWORD dwHashTableSize;
DWORD dwBlockTableSize;
};
}
! w3xFile [hashTableSize] = TMPQHeader[w3xFile.start+headerOffset].dwHashTableSize
! w3xFile [blockTableSize] = TMPQHeader[w3xFile.start+headerOffset].dwBlockTableSize
! if(blockTableSize > hashTableSize)
MessageBox("地图已经被加密过了")
end w3xMaster
! blockTableSize := hashTableSize + 1
! w3xFile::SaveFile()
! end w3xMaster
看不懂就算了,gathx是一种真正的中级(终极)语言。
目前还在设计之中
==============概念部分=============
数据:一个位序列。
变量:存放数据的内存空间。
变量的页面:变量可以使用四种页面,一是代码页面,二是栈页面,三是堆页面,四是专用页面(如显存等等可以寻址到的其他专用存储器)。页面可以是其他页面的一部分。
单元:最小的寻址间隔。X86中是字节。
语句:必须以#或!开头的一行或多行。
需求:一个语法的描述对象类型。如变量需求,地址需求,数据需求等等。在本文中用中括号括住中文说明来表示需求。
满足需求:
变量能满足的需求:单元长度,变量类型ID,变量地址,变量存放的数据。
数据能满足的需求:单元长度,数据的存放地址(如果是立即量存放地址为0)。
变量类型能满足的需求:单元长度,变量类型ID。
变量类型ID能满足的需求:整数,实数。
整数能满足的需求:实数。
指针能满足的需求:地址。
...
标识符:由字母数字下划线组成,但不能由数字打头。也可以使用中括号括住中文来表示一个标识符,但一方式被本文用来描述需求。
需求表:需求表是一种广义的结构体。把不同的需求关联到一起就成了需求表。函数的参数表和返回值就是一种可以自定义的需求表。而一些语法的需求表是固定的一种或是几种。当然是允许使用函数来实现重载旧的语法和自定义新的语法的。
在Gathx中通常一个需求不需要括号。
两个需求使用尖括号,三个或三个以上的需求使用圆括号来表示一个需求表。当需求表也是由需求表组成的时候使用花括号。
满足需求表:
==============语法部分=============
赋值语句:[变量] := [数据] //把变量用数据来赋值。
需求设定:[需求表1] :: [需求表2]{[需求函数]} //设置需求表2中的需求都可以满足需求表1中的需求。
变量定义:[页面] [变量类型] [变量] //在指定页面为新变量申请内存空间。还支持在指定地址申请变量
寻址变量:[变量类型][[地址]].[变量类的成员] //寻址到变量或变量的成员,寻址变量满足变量需求。
超级寻址变量:<[整数1],[整数2]>[[地址]] //寻址从地址+整数1到地址+整数2的内存作为寻址变量。
变量类型:[[变量类型标识符]]
数组变量:[变量类型][[整数]] [数组标识符] //数组变量是一个变量,是变量集合成的大变量。
条件循环:if或exif [条件] [条件真运行表达式] else [条件假运行表达式] endif或reif。
循环:loop[[循环次数整数]] [循环语句]
超级循环:for([循环前];[循环判断];[循环语句]) [循环语句] //for循环
触发:<[事件1];[事件2]>[语句] //当特定事件执行语句。特定事件终止触发。
事件:[事件类][[事件ID]] //满足事件需求 |
|