/* -------------------------------------------------------------------------------------------

  • 版权声明:
  • 本代码为开源代码,作者拥有代码版权,但你可以在任何非商业用途程序中引用,但请标注出处,你
  • 也可以对代码进行更改。作者对代码中所包括的错误以及所造成的一切后果将不负任何责任。如果你发
  • 现代码中有任何问题或错误,请与我联系。
  • 联系方法: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;

}


费先生
1 声望0 粉丝