CHM帮助文档解析易语言源码
.版本 2
.支持库 spec
.程序集 程序集_解析CHM文档
.程序集变量 程_文件号, 整数型
.程序集变量 程_目录块大小, 整数型
.程序集变量 程_Header1长度, 整数型
.程序集变量 程_Header2长度, 整数型
.程序集变量 程_目录块数, 整数型
.程序集变量 程_PMGL块数, 整数型
.程序集变量 程_QuickrefSection, 整数型, , , '密度
.子程序 打开CHM文件
.参数 参_文件名, 文本型
.局部变量 局_字节集, 字节集
.局部变量 局_读写位置, 整数型
.局部变量 局_Str, 文本型
程_文件号 = 打开文件 (参_文件名, #读入, #禁止写)
局_字节集 = 读入字节集 (程_文件号, 4)
调试输出 (“标识:” + 到文本 (局_字节集)) ' ITSF
' 本源码来自三叶资源网(www.sanye.cx)
局_字节集 = 读入字节集 (程_文件号, 4)
调试输出 (“版本号:” + 到文本 (取字节集数据 (局_字节集, #整数型, ))) ' 版本号 3
局_字节集 = 读入字节集 (程_文件号, 4)
调试输出 (“头文件总长度:” + 到文本 (取字节集数据 (局_字节集, #整数型, )))
局_字节集 = 读入字节集 (程_文件号, 4)
调试输出 (“未知用途:” + 到文本 (取字节集数据 (局_字节集, #整数型, ))) ' 1 未知
局_字节集 = 读入字节集 (程_文件号, 4)
调试输出 (“时间戳:” + 到文本 (取字节集数据 (局_字节集, #整数型, ))) ' 时间戳 ‘132277464
局_字节集 = 读入字节集 (程_文件号, 4)
调试输出 (“语言ID:” + 到文本 (取字节集数据 (局_字节集, #整数型, )) + “ 简体中文”) ' 语言ID 2052
局_字节集 = 读入字节集 (程_文件号, 16)
局_Str = “Guid1:” + 字节集_到十六进制 (局_字节集)
' 10FD017CAA7BD0119E0C00A0C922E6EC 对于GUID不是很懂不知道为啥前半段是倒过来的
局_字节集 = 读入字节集 (程_文件号, 16)
' 11FD017CAA7BD0119E0C00A0C922E6EC 对于GUID不是很懂不知道为啥前半段是倒过来的
调试输出 (局_Str + “,Guid2:” + 字节集_到十六进制 (局_字节集))
局_字节集 = 读入字节集 (程_文件号, 8)
局_Str = “Header1Star:” + 到文本 (取字节集数据 (局_字节集, #整数型, ))
局_字节集 = 读入字节集 (程_文件号, 8) ' Header1Star 96 ' Header1Len 24
程_Header1长度 = 取字节集数据 (局_字节集, #整数型, )
调试输出 (局_Str + “ Header1Len:” + 到文本 (程_Header1长度))
局_字节集 = 读入字节集 (程_文件号, 8)
局_Str = “Header2Star:” + 到文本 (取字节集数据 (局_字节集, #整数型, ))
局_字节集 = 读入字节集 (程_文件号, 8)
程_Header2长度 = 取字节集数据 (局_字节集, #整数型, )
调试输出 (局_Str + “ Header2Len:” + 到文本 (程_Header2长度))
' 本源码来自三叶资源网(www.sanye.cx)
局_字节集 = 读入字节集 (程_文件号, 8)
调试输出 (“内容部分文件偏移:” + 到文本 (取字节集数据 (局_字节集, #整数型, ))) ' 附加头
调试输出 (“头文件分析结束,当前位置:” + 到文本 (取读写位置 (程_文件号)))
读取Header1 ()
.子程序 读取Header1, , , ' 本源码来自三叶资源网(www.sanye.cx)
.局部变量 局_字节集, 字节集
.局部变量 局_读写位置, 整数型
.局部变量 局_位置, 整数型
调试输出 (“======Header1======”)
局_位置 = 1
局_字节集 = 读入字节集 (程_文件号, 程_Header1长度)
调试输出 (“未知用途:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置))) ' 4
调试输出 (“未知用途:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置))) ' 4
调试输出 (“文件大小:” + 到文本 (取字节集数据 (局_字节集, #长整数型, 局_位置))) ' 8
调试输出 (“未知用途:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置))) ' 4
调试输出 (“未知用途:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置))) ' 4
读取Header2 ()
.子程序 读取Header2
.局部变量 局_字节集, 字节集
.局部变量 局_位置, 整数型
.局部变量 局_PMGI层, 整数型
调试输出 (“======Header2======”)
局_字节集 = 读入字节集 (程_文件号, 程_Header2长度)
调试输出 (“标识:” + 到文本 (取字节集左边 (局_字节集, 4)))
局_位置 = 5
调试输出 (“版本号:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置)))
调试输出 (“SectionLen:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置)))
调试输出 (“未知用途:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置)))
程_目录块大小 = 取字节集数据 (局_字节集, #整数型, 局_位置)
调试输出 (“目录块大小:” + 到文本 (程_目录块大小))
程_QuickrefSection = 取字节集数据 (局_字节集, #整数型, 局_位置)
调试输出 (“QuickrefSection:” + 到文本 (程_QuickrefSection))
局_PMGI层 = 取字节集数据 (局_字节集, #整数型, 局_位置)
调试输出 (“索引树的深度:” + 到文本 (局_PMGI层)) ' 1.表示没有索引 2.表示有一层的PMGI数据块
调试输出 (“根索引的块号:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置)))
调试输出 (“第一个PMGL的块号:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置)))
调试输出 (“最后一个PMGL的块号:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置)))
调试输出 (“未知用途:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置)))
程_目录块数 = 取字节集数据 (局_字节集, #整数型, 局_位置)
调试输出 (“目录块数:” + 到文本 (程_目录块数))
.如果真 (局_PMGI层 = 2)
程_目录块数 = 程_目录块数 - 1
.如果真结束
调试输出 (“语言ID:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置)) + “ 英语”)
调试输出 (“Guid:” + 到文本 (字节集_到十六进制 (取字节集中间 (局_字节集, 局_位置, 16))))
局_位置 = 局_位置 + 16
.计次循环首 (4, )
调试输出 (“未知用途:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置)))
.计次循环尾 ()
局_字节集 = 取字节集中间 (局_字节集, 85, 程_Header2长度 - 84)
读取数据块 (局_字节集)
.子程序 读取数据块
.参数 参_Header字节集, 字节集
.局部变量 局_字节集, 字节集
.局部变量 局_位置, 整数型
.局部变量 局_计次, 整数型
.局部变量 局_项目数, 整数型
.局部变量 局_计次n, 整数型
.局部变量 局_QuickRefLen, 整数型
.局部变量 局_int, 字节集
.计次循环首 (程_目录块数, 局_计次)
局_字节集 = 取字节集中间 (参_Header字节集, 程_目录块大小 × (局_计次 - 1) + 1, 程_目录块大小)
调试输出 (“======数据块” + 到文本 (局_计次) + “======”)
调试输出 (“标识:” + 到文本 (取字节集左边 (局_字节集, 4)))
局_位置 = 5
局_QuickRefLen = 取字节集数据 (局_字节集, #整数型, 局_位置)
调试输出 (“QuickRefLen:” + 到文本 (局_QuickRefLen))
调试输出 (“未知用途(恒为0):” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置)))
调试输出 (“前一个列表块的块号:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置))) ' 如果这是第一个块,该值为-1”
调试输出 (“后一个列表块的块号:” + 到文本 (取字节集数据 (局_字节集, #整数型, 局_位置))) ' 如果这是最后一块,该值为-1”
局_项目数 = 取字节集数据 (取字节集右边 (局_字节集, 2), #短整数型, )
调试输出 (“PMGL块项目数:” + 到文本 (局_项目数))
.计次循环尾 ()
CHM解析 易语言
易语言怎么写软件里面的帮助文档
易语言chm
CHM解析
分析易语言源码