|
4#
楼主 |
发表于 2012-5-6 21:30:25
|
只看该作者
run
- !BAT by sratlf 0408
- clear
- if not exist debug set debug=off
- debug %debug%
- terminal console
- checkrange 20110128:-1 read 0x8278 || clear && pause Need grub4dos-0.4.5b-2011-01-28 or above. && exit 1
- delmod -l %~nx0 || insmod %~0
- if not exist runs set runs=%~nx0
- if not exist usrpath && set usrpath=(bd)/BOOT/IMGS/
- calc *0x8280&0xff-0x21 || pxe keep
- calc *0x8280&0xff-0x23 || set bd=(ud) && goto :fbinst
- calc *0x8280&0xff-0x80 || set bd=(hd) && goto :hddzip
- if not exist bd && set /A bd=*0x8280&0xff
- if not %bd:~,1%==( && set bd=(%bd%)
- :start
- if "%~1"=="" goto :input
- set m=%~1 && set /a lenm=*0x4cb00
- if %m:~,2%==-- && goto :c%lenm% || goto :other
- if "%~x1"=="" goto :chain || goto :%~x1 || goto :err
- :fbinst
- calc *0x82b9&0xff-0x80 || set hdd=1 && goto :hdd
- calc *0x82b9&0xff || goto :zip
- :hddzip
- calc *0x82a0&0xff-0x80 || set hdd=1 && goto :hdd
- calc *0x82a0&0xff || goto :zip
- :hdd
- set /A hd1=*0x8280&0xff
- set /A hd2=*0x8208>>16&0xffff
- set bd=(%hd1%,%hd2%)
- set hd1= && set hd2=
- goto :start
- :zip
- map (0) (hd)
- map --hook
- goto :start
- :c4
- if /i %~1==--pe goto :pe
- if /i %~1==--nt goto :nt
- goto :err
- :c5
- if /i %~1==--mem goto :mem
- if /i %~1==--top goto :top
- if /i %~1==--lst goto :lstfile
- goto :err
- :c6
- if /i %~1==--swap goto :swap
- if /i %~1==--fira goto :firadisk
- if /i %~1==--wvbk goto :winvblock
- if /i %~1==--help goto :help
- goto :err
- :c7
- if /i %~1==--nomem goto :nomem
- if /i %~1==--ramos goto :ramos
- goto :err
- :c8
- if /i %~1==--noswap goto :noswap
- goto :err
- :c10
- if /i %~1==--automenu goto :automenu
- goto :err
- :c13
- if /i %~1==--fira-nodisk goto :firadisk
- if /i %~1==--wvbk-nodisk goto :winvblock
- goto :err
- :other
- if /i %m:~,6%==--fira goto :firadisk
- if /i %m:~,6%==--wvbk goto :winvblock
- :err
- echo -e \n Command error, command using: $[0004]%~1
- :help
- echo -e \n RUN Usage:
- echo -e \n RUN file.iso$[0003]|$[0007].img$[0003]|$[0007].ima$[0003]|$[0007].gz$[0003]|$[0007].bin$[0003]|$[0007].lst$[0003]|$[0007].0pe$[0003]|$[0007].usr
- echo -e \n RUN $[0005]--automenu $[0007][/path/]
- echo -e \n RUN $[0005]--pe$[0003]|$[0005]--nt$[0003]|$[0005]--lst $[0007]/file.*
- echo -e \n RUN $[0005]--swap$[0003]|$[0005]--mem$[0003]|$[0005]--nomem $[0007]etc.
- echo -e \n RUN $[0005]--ramos $[0007]/hdd.* [/ldrfile]
- echo -e \n RUN $[0005]--fira$[0003]|$[0005]--wvbk$[0007][$[0002]-nodisk$[0007]][:/img.*] [$[0002]fd1$[0007][:/img.*]] [$[0002]iso=$[0007]/file.iso$[0003]|$[0002]disk=$[0007]/hdd.*]
- echo -e \n Press any key to back
- pause
- exit
- :find
- if "%~1"=="%~nx1" && set path=%usrpath% ! set path=%~p1
- if %path:~,1%==( && call :_find %path%%%~nx1 ! call :_find %bd%%%path%%%~nx1
- set ker= && cat --locate=\xEB --length=4 --number=1 %loadfile% | set ker=
- if not exist ker && kernel %loadfile% && boot && exit ! set ker=
- goto :eof
- :_find
- set loadpath=%~pnx1
- call :chdis
- echo -e \n $[0004]Loading $[0101]%root%$[0003]%~p1$[0002]%~nx1$[0007]...
- if exist %~pnx1 set loadfile=%root%%%~pnx1 && goto :eof
- rootnoverify %~d1 && if exist %~pnx1 && goto :find
- if exist bd && rootnoverify %bd%
- if not exist %~pnx1 && find --set-root --ignore-floppies %~pnx1 || find --set-root --devices=f %~pnx1
- goto :find
- :chdis
- debug 1
- find --set-root | set root=
- debug %debug%
- goto :eof
- :.img
- :.ima
- :.gz
- :imgfile
- set mem=--mem
- if %memset%==1 && set mem=--mem ! if %memset%==0 && set mem=
- call :find %~1
- map %mem% %loadfile% (fd0)
- map --hook
- if "%~2"=="" && goto :_img
- shift
- if /i "%~1"=="--dts-ext" && call :dtsext %*
- if /i "%~1"=="--max-ext" && call :maxext %*
- :_img
- rootnoverify (fd0)
- if not exist (0)/menu.lst chainloader (0)+1 || configfile (0)/menu.lst
- boot || echo -n
- exit
- :dtsext
- shift
- write --offset=120 (fd0)/config.sys %~1,0
- write --offset=370 (fd0)/config.sys %~2,0
- write --offset=232 (fd0)/autoexec.bat %~3 %~4 %~5 %~6 %~7 %~8 %~9
- goto :eof
- :maxext
- shift
- if not exist (0)/CONFIG.SYS exit
- if not exist (0)/AUTOEXEC.BAT exit
- cat --locate="default=" --replace="default=1,0" --number=1 (0)/CONFIG.SYS
- cat --locate="call" --replace="Call" (0)/AUTOEXEC.BAT
- cat --locate="CALL" --replace="Call" (0)/AUTOEXEC.BAT
- cat --locate="m.bat" --replace="M.BAT" (0)/AUTOEXEC.BAT
- cat --locate="M.bat" --replace="M.BAT" (0)/AUTOEXEC.BAT
- cat --locate="m.BAT" --replace="M.BAT" (0)/AUTOEXEC.BAT
- debug 1
- cat --locate="Call M.BAT" --number=1 (0)/AUTOEXEC.BAT | set offset=
- debug %debug%
- write --offset=0x%offset% (0)/AUTOEXEC.BAT %* \r M.BAT \r
- goto :eof
- :.iso
- :isofile
- set mem1=--mem
- if %memset%==1 && set mem=--mem ! if %memset%==0 && set mem1=
- call :find %~1
- map %mem% %loadfile% (0xff) || map %mem1% %loadfile% (0xff)
- map --hook
- chainloader (0xff)
- boot
- exit
- :.0
- :.bin
- :.sys
- :chain
- calc *0x8280&0xff-0x21 || chainloader --force --raw (pd)%~pnx2 && boot && exit 1
- if not %swap%==1 if %hdd%==1 set con=1 && call :swap
- call :find %~1
- chainloader %loadfile% || chainloader --force %loadfile%
- boot
- exit
- :pe
- shift
- call :find %~1
- map --in-place ()+1 (hd0)
- map --hook
- chainloader --force %loadfile%
- boot
- exit
- :nt
- shift
- call :find %~1
- checkrange 0x21 read 0x8280 && chainloader --force --raw (pd)%loadpath% && boot && exit
- if not %hdd%==1 && goto :_nt
- map () (hd0)
- map (hd0) ()
- map --rehook
- call :find %loadfile%
- :_nt
- chainloader %loadfile% || chainloader --force %loadfile%
- dd if=()+1 of=(md)0x3E+1
- boot
- exit
- :lstfile
- shift
- :.lst
- :.0pe
- :.usr
- :.diy
- call :find %~1
- if /i %~nx1==menu.0pe && call :0pe %2 %3
- configfile %loadfile%
- exit
- :0pe
- if #%1==# exit || calc %~1 && write 0x60300 0x60300 && write 0x60100 %~1
- if /i not "%~x2"==".iso" exit
- if "%~2"=="%~nx2" set /u tmp=%usrpath%%%~nx2 || set /u tmp=%~pnx2
- write (md)0x301+1 %tmp%
- set tmp=%tmp%
- set /a tmp=*0x4CB00
- write 0x60360 %tmp%
- set tmp=
- exit
- :ramos
- shift
- call :find %~1
- set mem=--mem
- if %memset%==1 && set mem=--mem ! if %memset%==0 && set mem=
- if %topset%==1 && set top=--top ! set top=
- map %mem% %top% %loadfile% (hd)
- map --hook
- map (hd-1) (hd0)
- map (hd0) (hd-1)
- map --rehook
- if not "%~2"=="" && goto :_ramos
- rootnoverify (hd0)
- chainloader +1
- boot
- exit
- :_ramos
- rootnoverify (hd0,0)
- chainloader %~2
- boot
- exit
- :mem
- set memset=1
- goto :next
- :nomem
- set memset=0
- goto :next
- :top
- set topset=1
- goto :next
- :noswap
- set swap=1
- goto :next
- :next
- shift
- goto :start
- :swap
- if not %hdd%==1 && echo -e \n You are not booting from HDD, no need for swapping the HDD.
- if /i %~1==--swap && goto :movebegin
- if %swap%==1 && echo -e \n You have already swapped the HDD. && goto :next
- echo -e \n Press $[0004]"S" $[0007]in $[0004]10 $[0007]seconds to swap HDD (if only you are booting from USB-HDD)
- echo -e \n OR press any other key to $[0004]continue, nothing to do.\n
- checkrange 0x73,0x53 pause --wait=10 || goto :moveend
- :movebegin
- set /a hd=*0x475&0xff+0x7f
- checkrange 0x7f calc %hd% && goto :next
- set /a hdm=%hd%+1
- map (hd0) (%hdm%)
- map --hook
- :move
- set /a hd1=%hd%+1
- map (%hd1%) (%hd%)
- set /a hd=%hd%-1
- checkrange 0x7f calc %hd% || goto :move
- map --unmap=%hdm%
- map --rehook
- ::rootnoverify (hd0,0)
- echo -e \n Success for swapping the HDD
- :moveend
- set swap=1
- if %con%==1 && set con= && goto :eof
- set con=
- goto :next
- :input
- clear
- echo -e \n Please input the command, use $[0005]--help $[0007]or "$[0104]H$[0007]" for RUN usage.
- echo -e \n OR press Enter to use $[0005]--fira $[0002]iso=/WIN$.ISO$[0007] as default.
- echo -e \n You can also $[0007]Press "$[0104]M$[0007]" to $[0003]Main Menu $[0007]or "$[0104]C$[0007]" To $[0003]Commandline.
- set path=
- set /p path=>Input Command:
- if not exist menu && set menu=(md)4+8
- if /i %path%==m && configfile %menu%
- if /i %path%==c && commandline
- if /i %path%==h && goto :help
- if not exist path && echo -e \n Use $[0005]--fira $[0002]iso=/WIN$.ISO$[0007] as default. && set path=--fira iso=/WIN$.ISO
- call :start %path%
- exit
- :firadisk
- set dflag=fira
- map --heads=2 --sectors-per-track=18 --mem (md)0x800+4 (99)
- goto :check_floppy
- :winvblock
- set dflag=wvbk
- map --rd-size=2048
- map --mem (rd)+4 (0x55)
- goto :check_floppy
- :check_floppy
- map --hook
- if /i %m:~7,6%==nodisk && set nodisk=1
- if %nodisk%==1 && set fd0path=%m:~14% ! set fd0path=%m:~7%
- if not exist fd0path && if %dflag%==fira set fd0path=FIRADISK.IMG || if %dflag%==wvbk set fd0path=WINVBLOCK.IMG
- if /i %~2==iso && goto :loadfloppy
- if /i %~2==disk set noiso=1 && goto :loaddisk
- shift
- set n=%~1
- if /i not %n:~,3%==fd1 && goto :loadfloppy
- set fd1path=%n:~4%
- if "%fd1path%"=="" && set fd1path=/IASTOR.IMG
- goto :loadfloppy
- :loadfloppy
- set mem1=--mem
- if %memset%==1 && set mem=--mem ! if %memset%==0 && set mem1=
- if exist fd1path && goto :loadfloppy1
- call :find %fd0path%
- if %dflag%==fira && set floppy1=floppy,vmem=find:%loadpath%;
- map %mem% %loadfile% (fd1) || map %mem1% %loadfile% (fd1)
- map --mem (md)+2880 (fd0)
- map --hook
- dd if=(fd1) of=(fd0) count=1
- goto :load_choise
- :loadfloppy1
- call :find %fd1path%
- if %dflag%==fira && set floppy1=floppy,vmem=find:%loadpath%;
- map %mem% %loadfile% (fd1) || map %mem1% %loadfile% (fd1)
- call :find %fd0path%
- if %dflag%==fira && set floppy0=floppy,vmem=find:%loadpath%;
- map %mem% %loadfile% (fd0) || map %mem1% %loadfile% (fd0)
- map --hook
- :load_choise
- if /i %~2==iso && goto :loadiso
- if /i %~2==disk set noiso=1 && goto :loaddisk
- goto :start
- :loadiso
- shift
- call :find %~2
- if %dflag%==fira && set cdrom=cdrom,vmem=find:%loadpath%;
- map %mem% %loadfile% (0xff) || map %mem1% %loadfile% (0xff)
- map --hook
- shift
- if /i %~2==disk && goto :loaddisk
- if %nodisk%==1 && goto :iso_step1
- call :cd_or_hdd
- checkrange 0x69,0x49 pause --wait=10 && goto :iso_step1
- goto :iso_step2
- :iso_step1
- if %dflag%==fira && write (99) [FiraDisk]\nStartOptions=%cdrom%%%floppy1%%%floppy0%\n\0
- if not %nodisk%==1 if not %swap%==1 if %hdd%==1 set con=1 && call :swap
- chainloader (0xff)
- boot
- exit
- :iso_step2
- if %dflag%==fira && write (99) [FiraDisk]\nStartOptions=%cdrom%\n\0
- find --set-root --devices=h /WIN_NT$.~BT/SETUPLDR.BIN && chainloader ()/WIN_NT$.~BT/SETUPLDR.BIN && boot && exit
- find --set-root --devices=h /NTLDR && if exist /NTDETECT.COM
- if not exist /NTLDR && echo -e \x20System installation failed, press any key to back && pause && exit
- chainloader /NTLDR
- boot
- exit
- :loaddisk
- shift
- call :find %~2
- if %dflag%==fira && set disk=disk,vmem=find:%loadpath%;
- if %memset%==1 && set mem=--mem ! set mem=
- map --heads=255 --sectors-per-track=63 %mem% %loadfile% (hd)
- map --hook
- map (hd-1) (hd0)
- map (hd0) (hd-1)
- map --rehook
- if %noiso%==1 && goto :disk_step2
- call :cd_or_hdd
- checkrange 0x69,0x49 pause --wait=10 && goto :disk_step1
- goto :disk_step2
- :disk_step1
- if %dflag%==fira && write (99) [FiraDisk]\nStartOptions=%disk%%%cdrom%%%floppy1%%%floppy0%\n\0
- if %dflag%==wvbk && write (0x55) #GRUB4DOS\x00v=1\x00%loadpath:~1%\x00\x80\x00
- chainloader (0xff)
- boot
- exit
- :disk_step2
- if %dflag%==fira && write (99) [FiraDisk]\nStartOptions=%disk%%%cdrom%\n\0
- if %dflag%==wvbk && write (0x55) #GRUB4DOS\x00v=1\x00%loadpath:~1%\x00\x80\x00
- rootnoverify (hd0)
- chainloader +1
- boot
- exit
- :cd_or_hdd
- echo -e \n Press $[0004]"I" $[0007]in $[0004]10 $[0007]seconds to boot from ISO
- echo -e \n OR press any other key to $[0004]continue System Installation$[0007] (boot from harddisk).\n
- goto :eof
- :automenu
- set i=1001
- if "%~2"=="" && set path=/BOOT/IMGS/ ! rootnoverify %~d2 && set path=%~p2
- find --set-root --ignore-floppies ls %path% clear || find --set-root --devices=f ls %path% clear || goto :folder_not_found
- call :chdis
- if not exist font if not exist image && set image=color yellow/black 10
- echo -e %font%\n%image%\ndefault 1\ntimeout 10 > (md)0x3000+0x10
- echo -e \ntitle Automenu for %root%%%path% \\n \nclear\n >> (md)0x3000+0x10
- ls %path% | call :makemenu %0 || echo -n
- if not exist menu set menu=(md)4+8
- echo -e title [%i:~-2%] Back to Main Menu \\n configfile %menu%\nconfigfile %menu%\n >> (md)0x3000+0x10
- set i=
- set tmp=
- configfile (md)0x3000+0x10
- exit
- :folder_not_found
- echo -e \n Folder $[0003]%path% $[0007]not found, Press any key to back
- pause
- exit
- :makemenu
- shift
- if #%1==# exit
- set tmp=%~n1
- if /i not #%~x1==#.TXT if not #%~x1==# if not "%tmp:~-2,1%"=="~" if /i not "%~n1"=="firadisk" if /i not "%~n1"=="winvblock" || goto :makemenu
- if exist %path%%%~n1.TXT && set file=%path%%%~n1.TXT && call :read_txt %file%
- if not exist title set title=%~nx1
- if not %next1:~,2%==-- && set next1= ! if "%next1%"=="%front1%" && set next1=
- if not %front1:~,2%==-- && set front1= ! if "%front1%"=="%title%" && set front1=
- echo -n title [%i:~-2%] RUN %title% \n %~nx1 >> (md)0x3000+0x10
- if not exist front1 if not exist next1 && set front1=%front% && set next1=%next%
- echo -e \n%runs% %front1% %path%%%~1 %next1%\nboot\n >> (md)0x3000+0x10
- set title= && set front1= && set next1=
- set /a i=%i%+1
- goto :makemenu
- exit
- :read_txt
- call :read_line %file% title=1
- call :read_line %file% front1=2
- call :read_line %file% next1=3
- goto :eof
- :read_line
- set _start=0
- set _end=0
- cat --locate=\xA --number=%3 %1 | call :get_last_line
- set /a _end=%_end%-%_start%
- cat --skip=%_start% --length=%_end% %1 | set %2=
- set _start=
- set _end=
- goto :eof
- :get_last_line
- if "%1"=="" exit
- if "%2"=="" && set /a _end=0x%1 ! if "%3"=="" && set /a _start=0x%1+1
- shift
- goto :get_last_line
复制代码 |
|