/* -------------------------------------------------------------------------------------------
- 版权声明:
- 本代码为开源代码,作者拥有代码版权,但你可以在任何非商业用途程序中引用,但请标注出处,你
- 也可以对代码进行更改。作者对代码中所包括的错误以及所造成的一切后果将不负任何责任。如果你发
- 现代码中有任何问题或错误,请与我联系。
- 联系方法:QQ 945318116,Email:945318116@qq.com
- ——作者:徐李 2011年1月5日
- ------------------------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------------------------
- 程序名称:写硬盘映像工具
- 程序功能:
- 将引导扇区数据写入到硬盘映像文件
- 格式化硬盘映像文件为自己的格式
- 将文件按Xl-os系统格式写入到硬盘映像文件(IMG)中
* - 作者:徐李
- 时间:2011年1月5日
* - 概述:这是一个命令行工具软件,硬盘映像文件进行格式化、写入操作,可以写MBR与引导扇区。
* - 关于Xl-os文件系统描述:
- *
- 运行流程:
- 1、判断所有的参数是否合法有效;
- 检查文件长度是否体符合硬盘参数的规定, 与第一扇区中的分区表数据进行核对, 如果第一扇区
的相关数据有误, 则显示警告信息并退出, 除非有强制参数. 强制参数分为 忽略/修改. 忽略则
不将映像文件的参数进行比较, 修改则是将第一扇区相关数据进行修改.
- 2、根据输入参数进行操作;
- 1)格式化映像文件:
- 2)写MBR扇区数据:
- 3)写引导扇区数据:
- 4)写文件数据:
* - 修订历史:
* - ------------------------------------------------------------------------------------------- */
包含 "习语言系统.接口"
【 ============== 全局常量定义 ================ 】
定义 类型标记_MBR 1 //00000001b
定义 类型标记_引导 2 //00000010b
定义 类型标记_文件 3 //00000011b
定义 类型标记 3 //00000011b
定义 输出文件名标记 4 //00000100b
定义 输入文件名标记 8 //00001000b
定义 输出路径标记 0x10 //00010000b
定义 格式化标记 0x20 //00100000b
定义 帮助标记 0x40 //01000000b
【 ============== 全局变量定义 ================ 】
整数类型 参数标志=0; /* 每个标志位代表不同的含意。
位0-位1:类型取值0-3,1:类型为MBR,2:类型为系统引导扇区,3:类型为文件. 默认为文件.
位2 :有输出参数;
位3 :有输入参数;
位4 :有路径参数;
位5 :有格式化参数;
位6 :有帮助参数;
*/
字符类型 *输入文件名;
字符类型 *输出文件名;
字符类型 *输出路径;
字节类型 数据缓冲[512];
字符类型 *错误提示信息[]={
【 1】"写硬盘映像IMG工具 V0.01 版,版权所有:徐李 2011年4月15日\n"
"参数格式:\n"
"写硬盘映像工具 [-类型 <MBR/引导/文件>] -输出 <硬盘映像文件名> -输入 <待写入文件"
" 名> [-路径 <目标文件完整路径>] [-格式化]\n"
"参数说明:\n"
" -类型 <MBR/引导/文件> 待写入的文件类型, 如果是 MBR类型, 则写入到第一扇区,"
" 如果是引导类型, 则写入到第1柱面第1扇区, 如果是文件类"
" 型, 则按XL-OS文件格式, 将输入文件写到指定的路径中去,"
" 默认路径为根目录。默认为文件类型。\n"
" -输出 <硬盘映像文件名> 这是写出目标的硬盘IMG映像文件名。\n"
" -输入 <文件名> 如果是写入MBR或引导文件,则该文件长度必须是512个字节"
" ,并且最后两个字节是0x55 0xAA。\n"
" -路径 <目标文件完整路径> 如果是写入其他文件,则必须要指定文件在软盘映像中的绝"
" 对路径( 以'\'开头),默认写入到根目录中。路径中的子目"
" 录不存在时,会自动创建。\n"
" -格式化 如有该选项,则在写入前先对硬盘映像文件进行格式化, 格"
" 式化为 XL-OS 文件类型,再进行写入 MBR 操作,其他类型"
" 无效。\n",
【 2】 "'帮助'参数重复!",
【 3】 "'格式化'参数重复!",
【 4】 "'类型'参数重复!",
【 5】 "'类型'参数未指定具体类型! ",
【 6】 "'类型'参数指定的类型非法! "
};
【 ================ 结构定义 ================== 】
结构类型 硬盘分区信息结构类型
{
字节类型 激活标志;
字节类型 开始磁头;
短整数类型 开始扇区柱面; // 低字节的低6位为扇区号,高2位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
字节类型 分区类型;
字节类型 结束磁头;
字类型 结束扇区柱面; // 低字节的低6位为扇区号,高2位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
整数类型 开始扇区号;
整数类型 扇区数;
}硬盘分区表[4],*硬盘分区表lp;
【 =============== 子函数定义 ================= 】
布尔类型 比较字符串(字符类型 字符串1,字符类型 字符串2);
整数类型 检查参数(整数类型 参数个数,字符类型 *参数表[]);
【 ================= 主程序 =================== 】
整数类型 主函数(整数类型 参数个数,字符类型 *参数表[] )
{
整数类型 错误代码=0;
错误代码 = 检查参数(参数个数,参数表);
如果(错误代码){输出字符串(错误提示信息[错误代码-1]); 返回 -1;}
返回 0;
}
【 =============== 子函数实现 ================= 】
布尔类型 比较字符串(字符类型 字符串1,字符类型 字符串2)
{
当(*字符串1== *字符串2 并且 *字符串1!=0 并且 *字符串2!=0)重复
{
字符串1++;
字符串2++;
}
如果(*字符串1==0 并且 *字符串2==0)
返回 真;
返回 假;
}
整数类型 检查参数(整数类型 参数个数,字符类型 *参数表[])
{
整数类型 计数器=1; // 从参数开始,第一个是程序名。
// 如果没有参数则显示帮助,即显示所有参数说明。
如果(参数个数<=1) 返回 1;
当(计数器 < 参数个数)重复
{
如果(比较字符串(参数表[计数器], "-帮助"))
{
如果( 参数标志&帮助标记 ) 返回 2;
参数标志=参数标志|帮助标记;
}
否则 如果(比较字符串(参数表[计数器], "-格式化" ))
{
如果( 参数标志&格式化标记 ) 返回 3;
参数标志=参数标志|格式化标记;
}
否则 如果(比较字符串(参数表[计数器], "-类型"))
{
如果( 参数标志&类型标记) 返回 4;
计数器++;
如果( 计数器>=参数个数) 返回 5;
如果(比较字符串(参数表[计数器], "MBR"))
参数标志=参数标志|类型标记_MBR;
否则 如果(比较字符串(参数表[计数器], "引导"))
参数标志=参数标志|类型标记_引导;
否则 如果(比较字符串(参数表[计数器], "文件"))
参数标志=参数标志|类型标记_文件;
否则 返回 6;
}
计数器++;
}
返回 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。