中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 一叶松启动盘分析 上一主题 | 下一主题
nre
银牌会员

nre


积分 1210
发帖 361
注册 2002-12-28
状态 离线
『楼 主』:  一叶松启动盘分析

这是我对该启动盘的分析,个人水平有限,如有不妥之处请大家指点。


************
CONFIG.SYS
************

4个菜单由CONFIG.SYS指定。指定默认为图形模式GP,20秒选择时间,颜色代码7。背景颜色代码0
COMMON项
加载了HIMEM.SYS /testmemff (高版本HIMEM.SYS的TESTMEM默认也是OFF) XMS驱动,不测试内存
//*UMBPCI.SYS我不知道是什么(根据文件名估计是加载UMB的驱动,我用的是EMM386.EXE),斑竹的盘里也有*//
指定DOS,加载到HMA或UMB
指定,FILES=30,BUFFES=30
STACKS=9,256 我以前碰到过设定堆栈段为这个值,可能使部分DOS软件无法使用。
LASTDRIVE=N,设定最后一个盘符为N

剩下的SUB都是空

*************
AUTOEXEC.BAT
*************

@ECHO OFF                           关闭显示
set EXPAND=YES          //*不知道设置这个变量干吗用,后面的程序好象没有用到过*//
SET DIRCMD=/O:N                       //*不知道这个环境变量(请斑竹解释一下)*//
XMSDSK 8192 N: /y                     指定8M XMS为RAMDRIVER,盘符为N
set temp=c:\                          设定临时文件夹 为C:\
set tmp=c:\                           同上
set ramd=n              RAM DRIVER的标志变量,为后面的程序确定RAMD的盘符服务
path=N:\;A:\;C:\                      设置查找路径
cls                                   清屏
unzip /d /o CAB1.zip n:\ > nul        解压缩CAB1.ZIP至内存虚拟盘
EXTRACT /Y /e /L n: CAB2.CAB > nul    ......CAB2.CAB............
copy command.com n:\ /y > nul         复制command.com...........
copy vide-cdd.sys n:\ /y > nul        ....vide-cdd.sys..........
set comspec=N:\command.com            指定COMMAND.COM路径.......
LH CTMOUSE.EXE > NUL                  鼠标驱动
LH N:\SMARTDRV.EXE                    高速缓存
LH N:\DOSKEY.COM > NUL                DOSKEY
GOTO %CONFIG%                         根据CONFIG.SYS的SUB执行

OS
tw /np > nul                          运行汉字系统
n:
cd \
GOTO END

:CDROM
CALL FINDCD.BAT                       CALL FINDCD.BAT 加载光驱且查找光盘盘符
tw /np > nul                          运行汉字系统
N:
cd \
GOTO END

:GP
CALL FINDCD.BAT                       CALL FINDCD.BAT 加载光驱且查找光盘盘符
menua.bat                             启动图形界面的批处理文件

:NOGP
menua.bat                             启动图形界面的批处理文件   

:END

***********
FINDCD.BAT
***********

@echo off                             关闭显示
set cdrom=                            标志变量,用于存放CDROM盘符

:LOOP
findcd -e                             查找CDROM盘符,返回ERROR代码
if errorlevel 255 goto NOCD           根据返回不同的ERROR代码确定CDROM盘符
if errorlevel 0 set cdrom=A
if errorlevel 1 set cdrom=B
if errorlevel 2 set cdrom=C
if errorlevel 3 set cdrom=D
if errorlevel 4 set cdrom=E
if errorlevel 5 set cdrom=F
if errorlevel 6 set cdrom=G
if errorlevel 7 set cdrom=H
if errorlevel 8 set cdrom=I
if errorlevel 9 set cdrom=J
if errorlevel 10 set cdrom=K
if errorlevel 11 set cdrom=L
if errorlevel 12 set cdrom=M
if errorlevel 13 set cdrom=N
if errorlevel 14 set cdrom=O
if errorlevel 15 set cdrom=P
if errorlevel 16 set cdrom=Q
if errorlevel 17 set cdrom=R
if errorlevel 18 set cdrom=S
if errorlevel 19 set cdrom=T
if errorlevel 20 set cdrom=U
if errorlevel 21 set cdrom=V
if errorlevel 22 set cdrom=W
if errorlevel 23 set cdrom=X
if errorlevel 24 set cdrom=Y
if errorlevel 25 set cdrom=Z
goto END

:NOCD                              为什么不先运行这个SUB,再运行LOOP呢?
ctload VIDE-CDD.SYS /D:mscd001     加载光驱驱动( 我用的是OAKCDROM.SYS)
                                   /D:MSCD001 指定设备名为MSCD001。可以改,但必须和MSCDEX.EXE的设备名相同
                                   CTLOAD可能是,当系统启动后仍能用这个程序加载设备驱动程序,省去在CONFIG.SYS中加载,
LH MSCDEX.EXE /D:mscd001           DOS下文件存取格式转换,使DOS能处理ISO9660文件格式
GOTO LOOP

:END

******
总结:
******

这个启动盘用到的一些技巧的实现方法
1.  > NUL 来实现无输出 (对于高手称不上技巧) >nul的作用是将默认的显示输出重定向到NUL这个空设备
    还有其他有用的技巧,比如一个文件的HELP太多,你可以把他的HELP重定向至一个文件如mode/? > mode.txt
    (有兴趣的朋友可以去找DOS的重定向技术,及管道|技术)
2.  使用了错误返回代码 ERRORLEVEL 这个功能很有用,能增加程序的检测机制,根据不同的错误或状态运行不同的程序
3.  GET他利用GET.EXE这个文件来检测键盘输入 如GET N 再在下面检测GET是否等于N的值.
4.  批处理使用参数比如yiyesong.bat后面加参数,在yiyesong.bat检测参数
    if "%1"=="/cd" goto cd
    if "%1"=="/a"  goto a
    if "%1"=="/?"  goto help
    if "%1"=="" goto null
    goto end
5.  使用LOCATE.COM来检测文件存在否。如locate.com %cdrom%:\yiyesong.bat /np /nr
    如果将%cdrom%:\变为%cdrom%: 就是全盘搜索.(他所说的任意目录查找就是这么实现的)
    对应的查找方法
    98SE                       locate %cdrom%: w98setup.bin /S:162939! /np /g:y  
    2000                       locate %cdrom%: winnt.exe /s:81757! /c:"set dirname=&d" /np /G:Y
      ME                       locate %cdrom%: w9xsetup.bin /S:181875! /np /g:y
    是否"一叶松软件屋启动光盘" locate.com %cdrom%:\yiyesong.bat /np /nr (这个是绝对路径的)
    其实就是检测是否存在这4个文件,只是没指定绝对路径进行全盘搜索而已,如果只保留这4个文件就能轻易的
    通过他的检测机制.
    LOCATE.COM的用法,/?看吧

6.  98,ME,2000的自动安装,从98光盘附带的工具里附带一个软件,就是制作自动安装脚本的。
    具体的我忘了,大家自己找找,在安装过程中所有需要输入的信息,包括序列号,都可以制作成脚本,实现完全
    的自动安装.
    具体到这张盘上对应的脚本文件分别是. 98SE Msbatch.inf   实现方法 SETUP.EXE n:\MSBATCH.INF /IS
                                        2000 Win2kpro.txt           SETUP.EXE n:\MEBATCH.INF /IS
                                          ME Mebatch.inf            WINNT.EXE /u:n:\win2kpro.txt /s:%dirname%

    98安装时取消磁盘检测是加/IS参数,具体的解释可以SETUP/?来看

*******************************
一些不合理和潜在的BUG(个人看法)
*******************************

**************
程序的检测机制
**************
所有需要用到光盘的批处理程序,都有2个检测机制,一个是检测是否加载光驱驱动了,一个是检测
是否为"一叶松软件屋启动光盘"
检测机制很简单.
例CD-YE.BAT
findcd -e
if not errorlevel 255 goto check
ctload n:\VIDE-CDD.SYS /D:MSCD001
call findcd.bat
用于检测是否加载光驱了。如果没加载就运行加载批处理FINDCD.BAT,不过这段程序效率不高,在最初设置光驱的时候
用CDROM这个变量来存放光驱盘符.只要检测一下CDROM这个变量的值是否为空就可以判断是否加载光驱了。没必要再重新
找CDROM,检测错误返回码,并且这段程序检测完是否加载光驱之后,如果没加载的话,运行了一次加载VIDE-CDD.SYS,
而这个驱动会在之后FINDCD.BAT里再次调用。重复加载驱动,效率不高.

*******************
FINDCD.BAT有个大BUG
*******************
如果这个机器根本就没有光驱,但却选用了启动CDROM的话,在FINCD.BAT这会出现死循环
:LOOP
findcd -e
if errorlevel 255 goto NOCD
...
GOTO END

:NOCD
ctload VIDE-CDD.SYS /D:mscd001
LH MSCDEX.EXE /D:mscd001
GOTO LOOP

因为没有光驱FINDCD的错误返回码永远是255,可如果是返回码是255就再次加载光驱驱动,加载完驱动返回码还是255...
即使更改了上面BUG
这个问题还可能会引起,在后面众多.BAT里多次用%CDROM%这个变量,如果没光驱的话,这个变量就失效了,所有用到这个变量的
.BAT都可能出现以外执行结果。

还有一个习惯问题,FINDCD.BAT和FINDCD.COM文件名相同,MSDOS系统FINDCD.COM优先于FINDCD.EXE优先于FINDCD.BAT
你的系统同时存在FINDCD.BAT和FINGCD.COM如果要运行.BAT的话,必须要键入扩展名.虽然你在用FINDCD.BAT的时候都
加扩展名了,但如果你是一个庞大系统,且多次调用,一个疏忽就能是你的程序出现很多意外结果.建议以后不要重名

******************
CDROM.BAT有潜在BUG
******************
CALL FINDCD.BAT
IF EXIST n:\*.* GOTO END
xmsdsk 4096 N: /y 如果用这个盘启动的计算机没有光驱,程序就会运行这行,而在最初的AUTOEXEC.BAT里就指定加载了8M
                  RAMDRIVER,这里又重新加载4M并且指定盘符都是N,这样的重复加载不知道会出什么结果.
:END
%CDROM%:
CD \

****************
多次更改TEMP变量
****************
部分应用程序的批处理多次更改TEMP环境变量。一会儿是%RAMD%:\,一会儿是C:\,如果这个机器没分区或者因为什么意外
C盘无法识别。而碰巧这个应用软件需要TMP/TEMP临时存放空间。这时就会访问C盘,但C盘无法识别,必然出错,虽然这个错误
不是大问题,但也对使用者来说也是一个麻烦


在MENUA.BAT里调用了GOMENU.BAT,但这个文件不存在,所以无法看到这个启动盘的图形界面.打开附件




Teamwork !
2002-12-29 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
MYS
元老会员




积分 5170
发帖 1637
注册 2002-10-16
来自 广东佛山
状态 离线
『第 2 楼』:  

分析得不错。
STACKS=9,256   这一句对WIN3X是必须的,对WIN9X就不需要了。
EXTRACT 和 UNZIP一起用太浪费空间,实际上只用一个得了,也可用AIN/RAR来代替。甚至把压缩包做成自解压文件,更省空间。



我的网志
http://hzmys.blog.163.com/
我的网盘
firststep.qjwm.com
fsmys.ys168.com
ssmys.ys168.com
www.brsbox.com/fsmys
www.brsbox.com/ssmys
www.brsbox.com/ccdos
2002-12-29 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (2664429)  编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 3 楼』:  

PKZIP/PKUNZIP用起来最方便了。另外其实找光驱也没有那么麻烦,一两条命令就可以了。

nre:VIDE-CDD.SYS是最好的光驱驱动程序,比OAKCDROM.SYS不知要好多少倍。



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2002-12-29 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
nre
银牌会员

nre


积分 1210
发帖 361
注册 2002-12-28
状态 离线
『第 4 楼』:  

根据虚拟机的测试,更正上面分析的一些错误。
最初menustar不能运行,我以为没有GOMENU.BAT,后来测试发现MENUSTAR不能在WIN下运行
而已,GOMENU.BAT是由MENUSTAR生成的。MENUSTAR其实并没有真正运行所选项所
对应的.BAT.而是生成GOMENU.BAT,内容是CALL *所选项的.BAT*

*********
menua.bat
*********
menustar.exe                           图形界面程序,菜单在menustar.cfg,Menustar.dat里根据
                               需要可以自己改(是文本文件)
call gomenu.bat                        运行MENUSTAR里所选项所对应的.BAT
IF %setif%==0 GOTO quit         测试是否选了菜单里的光盘经典版 SETIF=0就是没选
IF %setif%==Y GOTO Y             当选了光盘经典版时,会运行Cd-ye.bat
                                               里面会把SETIF设成Y
GOTO loop

:Y
%CDROM%:\YIYESONG.BAT     运行光盘里的YIYESONG.BAT

:quit
n:
cd \

:END

**********
关于XMSDSK
**********
经过测试,XMSDSK可以在建立RAMDISK之后重新建立新容量的RAMDISK,但内容会被清空
如果在CDROM.BAT里运行了xmsdsk 4096 N: /y这行的话,RAMDISK会被清空,所有用到
RAMDISK里程序的.BAT都会失效.
不过下面这段程序,不可能运行到XMSDSK那行呀。N:\一定会有文件的。所以我????
IF EXIST n:\*.* GOTO END
xmsdsk 4096 N: /y
:END
%CDROM%:






Teamwork !
2002-12-29 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yiyesong
元老会员




积分 1987
发帖 632
注册 2002-10-27
状态 离线
『第 5 楼』:  

nre分析的很细致,也很精确,正好让我偷了懒,不用我为大家来写剖析我的启动盘的贴子了,这个盘子已经是几个月前做的东东,放上来就是让大家共享,也希望大家多提意见和看法,共同学习和进步,我自己在使用当中还没发现什么问题(指使用上的),我确实没有考虑到没有光驱的情况,不过我想也没人没有光驱还去点加载光驱吧,如果有下载的朋友在使用过程中有什么问题可以在此跟贴或者到我原贴中提出。最近比较忙,过些时候我会根据网友们的意见和nre提出的看法作一个具体的回答。
     nre是高手,希望能做朋友,有时间时多联系,大家探讨一下。同时我也向WENGIER建议能让nre做版主,以壮大我们DOS的实力。


[此贴子已经被作者于2002-12-30 4:41:22编辑过]






[flash=550,93]http://dos.e-stone.cn/dosbbs
uploadImages/200311161145850422.swf[/flash]
2002-12-30 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
nre
银牌会员

nre


积分 1210
发帖 361
注册 2002-12-28
状态 离线
『第 6 楼』:  

我也改用VIDE-CDD。SYS了,是不错,又小,又快
对了问一下WENGIER,怎么用1,2条命令查找光驱
FINDCD -C可以返回第一个光驱盘符,可我无法把返回的值附给变量,你有什么好点子吗~




Teamwork !
2002-12-30 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
nre
银牌会员

nre


积分 1210
发帖 361
注册 2002-12-28
状态 离线
『第 7 楼』:  

YIYESONG你有UMBPCI.SYS的详细说明吗,我想找个替代EMM386.EXE的UMB/EMS驱动,因为觉得EMM386.EXE的兼容性不是很好,至少和VPC虚拟机有冲突.




Teamwork !
2002-12-30 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yiyesong
元老会员




积分 1987
发帖 632
注册 2002-10-27
状态 离线
『第 8 楼』:  

这里是UMBPCI的最新版下载,里面有详细的使用说明和支持主板情况。
打开附件



[flash=550,93]http://dos.e-stone.cn/dosbbs
uploadImages/200311161145850422.swf[/flash]
2002-12-30 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 9 楼』:  

nre: 我在网站的“脚本工具”中关于FINDCD的介绍中有以下一句话:

例如:FINDCD -a|NSET CDROM=$1就可以将第一个光盘的盘符存入变量CDROM中。

其中,NSET是批处理工具,可将屏幕上的指定输出存入指定变量中,可在“脚本工具”中下载。



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2002-12-30 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
nre
银牌会员

nre


积分 1210
发帖 361
注册 2002-12-28
状态 离线
『第 10 楼』:  

不错不错,太好了~




Teamwork !
2002-12-31 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
nre
银牌会员

nre


积分 1210
发帖 361
注册 2002-12-28
状态 离线
『第 11 楼』:  

wengier: 你网站的网址是什么呀~




Teamwork !
2002-12-31 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 12 楼』:  

我的网站的网址原来是wendos.mycool.net,不过已经被删了,现在只剩newdos.yginfo.net上的网页镜像。



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2002-12-31 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复

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


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



论坛跳转: