home *** CD-ROM | disk | FTP | other *** search
- (Original documentation by Ray Tackett)
-
- The key to this batch file are the labels. For example, there is a label
- "chkdsk". There is an alias "chdkdsk" which equals "do chkdsk". The first
- thing DO.BTM does is branch to the label defined in its first argument.
- Thus, typing "chkdsk" on the command line expands to "do chkdsk" which
- causes this batch file to branch to the "chkdsk" label.
-
- Having all the little batch files concentrated like this simplifies
- maintenance, saves disk space (waste part of one cluster instead of many),
- and allows the use of common subroutines.
-
- @ECHO off
- if "%1" == "" goto help
-
- ^^^^^ That's the trick !
- goto %1
- quit
-
- REM ───────────────────────────────────────────────── Help
- :help
- echo.
- echo Usage: DO function [options]
- echo.
- echo where function stands for
- echo.
- echo fullback - Full Backup
- echo incrback - Incremental Backup
- echo rest - Restore
- echo.
- echo chkdsk - Check disk
- echo vircheck - run virus checker (f-prot)
- echo.
- echo normal - Reset to 4DOS environment
- echo.
- echo ho - Set home directory / change to home directory
- echo.
- echo hack - NetHack
- echo info - shows some system information
- echo.
- quit
-
- REM ───────────────────────────────────────────────── Disk oriented routines
-
- "fullback" makes a full backup of the hardisk.
-
- REM ------------------------------------------------- Full Backup
- :fullback
-
- setlocal
- unalias *
- set fg=%_fg
- set bg=%_bg
-
- save foreground and background color.
-
- gosub GetDrive
-
- returns drive letter in %DRIVE%
-
- color bright white on black
- echo Full Backup of Drive %DRIVE% named %@LABEL[%DRIVE%].
- color %fg on %bg
-
- cd \
- gosub CleanUp
-
- deletes *.BAK files and temporary swap files etc.
-
- gosub DoVirCheck /quick
-
- make a virus check before backuping.
-
- :retry
- del /q \backup.log
- C:\DOS\backup %DRIVE% A: /s /l
-
- make the backup
-
- set job=Backup
- gosub ReportSuccess
-
- and report whether it was successful.
-
- if %YesNo% == Y GOTO retry
- endlocal
- quit
-
- REM ------------------------------------------------- Incremental Backup
-
- The same game with an incremental backup...
-
- :incrback
-
- setlocal
- unalias *
- set fg=%_fg
- set bg=%_bg
-
- save foreground and background color.
-
- gosub GetDrive
-
- returns drive letter in %DRIVE%
-
- color bright white on black
- echo Incremental Backup of Drive %DRIVE% named %@LABEL[%DRIVE%].
- color %fg on %bg
-
- gosub CleanUp
-
- deletes *.BAK files and temporary swap files etc.
-
- gosub DoVirCheck /quick
-
- make a virus check before backuping.
-
- C:\TOOLS\newfiles /tot %DRIVE%
-
- list new files and files that have been changed since last backup and
- summarize their size. The idea is to get an impression how many disks
- this backup will fill.
- (You could use "dir %DRIVE%\ /kma:a..." if you don't have newfiles
- or equivalent.)
-
- :retry
- C:\DOS\backup %DRIVE% A: /m /s /a /l
-
- do the job
-
- set job=Backup
- gosub ReportSuccess
-
- and report its success.
-
- if %YesNo% == Y GOTO retry
- endlocal
- quit
-
- REM ------------------------------------------------- Restore
-
- Restores a single file or a directory.
-
- :rest
-
- setlocal
- unalias *
- set fg=%_fg
- set bg=%_bg
-
- gosub GetDrive
-
- set DIRNAME=%@SUBSTR[%@FULL[%2],2,255]
- set DIR=%@UPPER[%@PATH[%DIRNAME%]]
- iff %@INDEX[%2,*] GE 0 .OR. %@INDEX[%2,?] GE 0 THEN
- set ISAMBIG=Y
- else
- set ISAMBIG=N
- endiff
-
- Get Directory name and/or file name(s).
-
- color bright white on black
- echo Restoring %DRIVE%%DIRNAME%...
- color %fg on %bg
- iff %ISAMBIG%==Y then find /I "%DIR%" %DRIVE%\backup.log|more.com
- else find /I "%DIRNAME%" %DRIVE%\backup.log|more.com
- endiff
-
- and show the disk number(s) on which they have been stored.
-
- color bright white on black
- echo Please insert appropriate disk.
- color %fg on %bg
-
-
- iff %ISAMBIG%=Y then C:\DOS\restore A: %DRIVE%%DIRNAME% /s /p
- else C:\DOS\restore A: %DRIVE%%DIRNAME% /p
- endiff
-
- restore the files..
-
- set job=Restore
- gosub ReportSuccess
-
- ..and report the success.
-
- endlocal
- quit
-
- The only use of this shortcut is to avoid typing a "N" when
- lost clusters are detected.
-
-
- REM ------------------------------------------------- CHKDSK
- :chkdsk
-
- gosub DoChkDsk
- quit
-
- Perform a virus check (by using F-PROT)
-
- REM ------------------------------------------------- Virus Check
- :vircheck
- setlocal
- unalias *
- set fg=%_fg
- set bg=%_bg
-
- gosub GetDrive
- gosub DoVirCheck
- endlocal
- quit
-
- REM ─────────────────────────────────────────── Environment oriented routines
-
- Restore the normal configuration
-
- REM ------------------------------------------------- Normal Environment
- :normal
- unset *
- set /r C:\4DOS\environ
- alias /r C:\4DOS\aliases
- echo 4DOS-Configuration read.
- quit
-
- Back to the home directory...
-
- REM ------------------------------------------------- Home
- :ho
- iff "%2" == "" then
- echos Changing to %@upper[%home%]...
- cdd %home%
- else
- setlocal
- *set home=%@upper[%@full[%2]]
- *unset /q tmp temp cmdline comspec
- iff %@index[%@upper[%path],G:\] GE 0 then
- *set path=%@substr[%path,4,255]
- endiff
- echo New Home directory will be: %home%.
- *set > c:\4DOS\environ.
- endlocal
- *set /r C:\4DOS\environ.
- endiff
- quit
-
- REM ─────────────────────────────────────────────────────────── Applications
-
- This "batch" file starts nethack.
-
- REM ------------------------------------------------- NetHack
- :hack
- setlocal
- unalias *
-
- iff "%2"=="" then C:\NETHACK\nhack
- else
- iff "%4" == "c" then set term=ibmpc
- elseiff "%4" == "m" then set term=ibmpc-mono
- else
- inkey /K"CM" /W5 [C]olor or [M]ono ? %%ask
- set ask=%@UPPER[%ask]
- iff "%ask" == "C" then set term=ibmpc
- else set term=ibmpc-mono
- endiff
- endiff
-
- IFF %@READY[G:] == 1 THEN
- ECHO Installing NetHack on RamDisk G:
- cdd g:\
- except (4*.* acd.*) del /sxy G:\*.* >& NUL:
- *md SAVE
- cdd c:\NETHACK
- set size=%@FILESIZE[C:\NETHACK\SAVE\SAVE2\%2.SAV,K]
- iff "%size" GT "300" then
- copy /q normhack.cnf nethack.cnf
- set hackmode=0
- elseiff "%size" GT "200" then
- copy /q halfhack.cnf nethack.cnf
- set hackmode=50
- else
- copy /q fullhack.cnf nethack.cnf
- set hackmode=100
- endiff
- ELSE
- copy /q normhack.cnf nethack.cnf
- set hackmode=0
- ENDIFF
-
- :restore
- iff %hackmode=0 then
- copy /q C:\NETHACK\SAVE\SAVE2\%2.SAV C:\NETHACK\SAVE
- elseiff %hackmode=50 then
- copy /q halfhack.cnf nethack.cnf
- copy /q C:\NETHACK\SAVE\SAVE2\%2.SAV C:\NETHACK\SAVE
- else
- copy /q fullhack.cnf nethack.cnf
- copy /q C:\NETHACK\SAVE\SAVE2\%2.sav G:\SAVE
- endiff
- :goon
- C:\NETHACK\nhack %2-%3
-
- iff %hackmode% GT 50 then move /q G:\SAVE\%2.sav C:\NETHACK\SAVE\SAVE2
- else move /q C:\NETHACK\SAVE\%2.sav C:\NETHACK\SAVE\SAVE2
- endiff
- inkey /K"YN " /W5 Try again (Y/N) ? %%ask
- set ask=%@UPPER[%ask]
- iff "%ask" == "Y" .OR. "%ask" == " " then goto /I restore endiff
- echo.
- endiff
- endlocal
- quit
-
- REM ─────────────────────────────────────────────────────────── Jokes
-
- I have wrote this fragment to get an impression how to use 4DOS's
- built-in functions.
-
- :info
- setlocal
- set alias=%_alias
- unalias *
- set fg=%_fg
- set bg=%_bg
-
- cls
- drawbox 0 0 %@eval[%_ROWS-1] %@eval[%_COLUMNS-1] 0 white on Cyan fill Cyan
- vscrput 10 0 black on white 4DOS INFO
- vscrput 10 %@eval[%_COLUMNS-1] black on white 4DOS INFO
-
- drawbox 2 2 8 46 1 black on white fill white shadow
- color black on white
- screen 2 15 [Environment]
- screen 3 3 You are running
- scrput 3 19 red on white 4DOS %_4VER
- screen 3 28 under
- scrput 3 34 red on white %_DOS %_DOSVER
- screen 3 42 .
- screen 5 3 Free Environment Space : %_ENV Bytes
- screen 6 3 Free Alias Space : %ALIAS Bytes
- iff %_ANSI == 0 then screen 7 3 ANSI.SYS not installed.
- elseiff %_ANSI == 1 then screen 7 3 ANSI.SYS will be supported.
- endiff
-
- drawbox 2 49 8 75 1 bright yellow on green fill green shadow
- color bright yellow on green
- screen 2 59 [Hardware]
- screen 3 50 CPU :
- scrput 3 63 bright white on green %_CPU
- screen 4 50 Coprocessor:
- scrput 4 63 bright white on green %_NDP
- screen 5 50 Video card :
- scrput 5 63 bright white on green %@UPPER[%_VIDEO] (%_COLUMNS%x%_ROWS%)
- screen 7 50 Actual Codepage is %_CODEPAGE%.
-
- drawbox 10 2 15 75 1 bright white on blue fill blue shadow
- color bright white on blue
- screen 10 20 [Memory]
- screen 11 3 Available Conventional memory:
- scrput 11 34 bright yellow on blue %@DOSMEM[b] Bytes.
- screen 12 3 Available XMS memory:
- scrput 12 34 bright yellow on blue %@XMS[b] Bytes.
- screen 12 50 Extended:
- scrput 12 61 bright yellow on blue %@EXTENDED[b] Bytes.
- screen 13 3 Available Expanded memory:
- scrput 13 34 bright yellow on blue %@EMS[b] Bytes.
-
- iff %_win == 0 then scrput 14 3 white on blue Windows is not running.
- elseiff %_win == 1 then scrput 14 3 white on blue Windows is running. (in real!! mode)
- elseiff %_win == 2 then scrput 14 3 white on blue Windows is running. (in standard mode)
- elseiff %_win == 3 then scrput 14 3 white on blue Windows is running. (in enhanced mode)
- endiff
-
- drawbox 17 2 23 37 1 bright white on Magenta fill Magenta shadow
- color bright white on Magenta
- screen 17 15 [Harddisks]
-
- iff %@ready[C:] == 1 then ^ screen 18 4 Free Space on Drive C: %@DISKFREE[C:,m] MB. ^ endiff
- iff %@ready[D:] == 1 then ^ screen 19 4 Free Space on Drive D: %@DISKFREE[D:,m] MB. ^ endiff
- iff %@ready[E:] == 1 then ^ screen 20 4 Free Space on Drive E: %@DISKFREE[E:,m] MB. ^ endiff
- iff %@ready[F:] == 1 then ^ screen 21 4 Free Space on Drive F: %@DISKFREE[F:,m] MB. ^ endiff
- iff %_LASTDISK GE G .and. %@ready[G:] == 1 then ^ screen 22 4 Free Space on Drive G: %@DISKFREE[G:,m] MB. ^ endiff
-
- drawbox 17 40 20 75 1 white on black fill black shadow
- color white on black
- screen 17 50 [Date & Time]
- screen 18 41 %_DOW, the %_DATE at %_TIME.
-
- color black on white
- screen %@eval[%_ROWS-1] 2 Press a key to abort...
- inkey %%dummy
- cls
- endlocal
- quit
-
- REM ══════════════════════════════════════════════════════ common subroutines
-
-
- Return the drive supplied as parameter #2 or the current drive.
-
- REM ------------------------------------------------------ GetDrive
- :GetDrive
- iff "%2" == "" then set DRIVE=%_DISK:
- else set DRIVE=%@SUBSTR[%@FULL[%2],0,2]
- endiff
- set DRIVE=%@UPPER[%DRIVE%]
- return
-
-
- Delete temporary files...
-
- REM ------------------------------------------------------ CleanUp
- :CleanUp
- echos Deleting *.BAK,*.TMP and .$$$ files...
- del /s \*.bak \*.tmp \*.$$$ >& NUL:
- echo Done.
-
- iff %DRIVE% == C: then
- echos Deleting contents of C:\TEMP...
- del /yz C:\TEMP\*.* >& NUL:
- echo Done.
- elseiff %DRIVE% == E: then
- echos Deleting contents of E:\WINDOWS\TEMP...
- del /yz E:\WINDOWS\TEMP\*.* >& NUL:
- echo Done.
- endiff
- echo.
- gosub DoChkDsk
- echo.
-
- return
-
- REM ------------------------------------------------------ ReportSuccess
-
- This piece of code reports the sucess of the action performed before
- calling this subroutine (stored in %job)
- This is possible, because of MS-DOS standardized the errorlevel
- return codes. (cf MSDOS 5.0 example for backup/restore.)
-
- :ReportSuccess
- if errorlevel == 4 goto error
- if errorlevel == 3 goto abort
- if errorlevel == 2 goto conflict
- if errorlevel == 1 goto no_files
- if errorlevel == 0 goto success
- :error
- color bright white on black
- echo %job stopped due to an error.
- color %fg on %bg
- inkey /K"YN" Retry (Y/N) ? %%YesNo
- set YesNo=%@UPPER[%YesNo%]
-
- goto exit
- :abort
- echo You just pressed Control-C to stop the %job.
- goto exit
- :conflict
- color bright blink yellow on red
- iff %job == Backup then
- echo One or more files were not backed up due to a file sharing conflict.
- else
- echo One or more files were not restored due to a file sharing conflict.
- endiff
- color %fg on %bg
- echo This error message should not have appeared, share is not loaded!
- goto exit
- :no_files
- echo Sorry, but there were no files to %job.
- goto exit
- :success
- echo This %job was successful.
- if %job == Backup echo %@DISKFREE[A:,K] KBytes free on last Backup disk.
- c:\dos\mirror %DRIVE%
- :exit
- return
-
- REM ------------------------------------------------------ DoChkDsk
-
- Nothing special.
-
- :DoChkDsk
- keystack N 13
- C:\DOS\chkdsk.exe /f %2&
- keystack !
- return
-
- REM ------------------------------------------------------ DoVirCheck
-
- Do a virus check and report it (in the file \f-prot.log). Give an alert
- when a virus has been detected.
-
- :DoVirCheck
-
- iff exist %drive\f-prot.log .and. %@filedate[%drive\f-prot.log] == %_date then
- echo You have already made a vircheck today.
- else
- C:\ANTIVIR\f-prot %drive /report=%drive\f-prot.log
-
- iff errorlevel gt 0 then
- drawbox 5 10 15 72 2 bright white on red fill red
- scrput 7 12 bright yellow on red f-prot 2.03a reports, that
- scrput 7 39 bright blink yellow on red YOU MAY HAVE CAUGHT A VIRUS!!!!!!
- scrput 9 12 white on red 1) keep cool,
- scrput 10 12 white on red 2) disinfect your harddisk, before making any Backups.
- scrput 11 12 white on red 3) remember: your backups may also be infected,
- scrput 12 24 white on red so re-run f-prot.
- scrput 14 12 bright white on red press ESC to acknoledge.
- inkey /k"[esc]" %%dummy
- cls
- endiff
- endiff
- return
-