home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / podstawy / dos / 4dos / 4uzytki / 4dtip2.exe / DO.DOC < prev    next >
Text File  |  1992-07-06  |  13KB  |  515 lines

  1. (Original documentation by Ray Tackett)
  2.  
  3.    The key to this batch file are the labels.  For example, there is a label
  4.    "chkdsk".  There is an alias "chdkdsk" which equals "do chkdsk".  The first
  5.    thing DO.BTM does is branch to the label defined in its first argument.
  6.    Thus, typing "chkdsk" on the command line expands to "do chkdsk" which
  7.    causes this batch file to branch to the "chkdsk" label.
  8.  
  9.    Having all the little batch files concentrated like this simplifies
  10.    maintenance, saves disk space (waste part of one cluster instead of many),
  11.    and allows the use of common subroutines.
  12.  
  13. @ECHO off
  14. if "%1" == "" goto help
  15.  
  16.               ^^^^^ That's the trick !
  17. goto %1
  18. quit
  19.  
  20. REM ───────────────────────────────────────────────── Help
  21. :help
  22. echo.
  23. echo Usage: DO function [options]
  24. echo.
  25. echo where function stands for
  26. echo.
  27. echo fullback - Full Backup
  28. echo incrback - Incremental Backup
  29. echo rest     - Restore
  30. echo.
  31. echo chkdsk   - Check disk
  32. echo vircheck - run virus checker (f-prot)
  33. echo.
  34. echo normal   - Reset to 4DOS environment
  35. echo.
  36. echo ho       - Set home directory / change to home directory
  37. echo.
  38. echo hack     - NetHack
  39. echo info     - shows some system information
  40. echo.
  41. quit
  42.  
  43. REM ───────────────────────────────────────────────── Disk oriented routines
  44.  
  45.   "fullback" makes a full backup of the hardisk.
  46.  
  47. REM ------------------------------------------------- Full Backup
  48. :fullback
  49.  
  50. setlocal
  51. unalias *
  52. set fg=%_fg
  53. set bg=%_bg
  54.  
  55.   save foreground and background color.
  56.  
  57. gosub GetDrive
  58.  
  59.   returns drive letter in %DRIVE%
  60.  
  61. color bright white on black
  62. echo Full Backup of Drive %DRIVE% named %@LABEL[%DRIVE%].
  63. color %fg on %bg
  64.  
  65. cd \
  66. gosub CleanUp
  67.  
  68.   deletes *.BAK files and temporary swap files etc.
  69.  
  70. gosub DoVirCheck /quick
  71.  
  72.   make a virus check before backuping.
  73.  
  74. :retry
  75. del /q \backup.log
  76. C:\DOS\backup %DRIVE% A: /s /l
  77.  
  78.   make the backup
  79.  
  80. set job=Backup
  81. gosub ReportSuccess
  82.  
  83.   and report whether it was successful.
  84.  
  85. if %YesNo% == Y GOTO retry
  86. endlocal
  87. quit
  88.  
  89. REM ------------------------------------------------- Incremental Backup
  90.  
  91.   The same game with an incremental backup...
  92.  
  93. :incrback
  94.  
  95. setlocal
  96. unalias *
  97. set fg=%_fg
  98. set bg=%_bg
  99.  
  100.   save foreground and background color.
  101.  
  102. gosub GetDrive
  103.  
  104.   returns drive letter in %DRIVE%
  105.  
  106. color bright white on black
  107. echo Incremental Backup of Drive %DRIVE% named %@LABEL[%DRIVE%].
  108. color %fg on %bg
  109.  
  110. gosub CleanUp
  111.  
  112.   deletes *.BAK files and temporary swap files etc.
  113.  
  114. gosub DoVirCheck /quick
  115.  
  116.   make a virus check before backuping.
  117.  
  118. C:\TOOLS\newfiles /tot %DRIVE%
  119.  
  120.   list new files and files that have been changed since last backup and
  121.   summarize their size. The idea is to get an impression how many disks
  122.   this backup will fill.
  123.   (You could use "dir %DRIVE%\ /kma:a..." if you don't have newfiles
  124.    or equivalent.)
  125.  
  126. :retry
  127. C:\DOS\backup %DRIVE% A: /m /s /a /l
  128.  
  129.   do the job
  130.  
  131. set job=Backup
  132. gosub ReportSuccess
  133.  
  134.   and report its success.
  135.  
  136. if %YesNo% == Y GOTO retry
  137. endlocal
  138. quit
  139.  
  140. REM ------------------------------------------------- Restore
  141.  
  142.   Restores a single file or a directory.
  143.  
  144. :rest
  145.  
  146. setlocal
  147. unalias *
  148. set fg=%_fg
  149. set bg=%_bg
  150.  
  151. gosub GetDrive
  152.  
  153. set DIRNAME=%@SUBSTR[%@FULL[%2],2,255]
  154. set DIR=%@UPPER[%@PATH[%DIRNAME%]]
  155. iff %@INDEX[%2,*] GE 0 .OR. %@INDEX[%2,?] GE 0 THEN
  156.  set ISAMBIG=Y
  157. else
  158.  set ISAMBIG=N
  159. endiff
  160.  
  161.   Get Directory name and/or file name(s).
  162.  
  163. color bright white on black
  164. echo Restoring %DRIVE%%DIRNAME%...
  165. color %fg on %bg
  166. iff %ISAMBIG%==Y then find /I "%DIR%" %DRIVE%\backup.log|more.com
  167.                  else find /I "%DIRNAME%" %DRIVE%\backup.log|more.com
  168. endiff
  169.  
  170.   and show the disk number(s) on which they have been stored.
  171.  
  172. color bright white on black
  173. echo Please insert appropriate disk.
  174. color %fg on %bg
  175.  
  176.  
  177. iff %ISAMBIG%=Y then C:\DOS\restore A: %DRIVE%%DIRNAME% /s /p
  178.                 else C:\DOS\restore A: %DRIVE%%DIRNAME% /p
  179. endiff
  180.  
  181.   restore the files..
  182.  
  183. set job=Restore
  184. gosub ReportSuccess
  185.  
  186.   ..and report the success.
  187.  
  188. endlocal
  189. quit
  190.  
  191.   The only use of this shortcut is to avoid typing a "N" when
  192.   lost clusters are detected.
  193.  
  194.  
  195. REM ------------------------------------------------- CHKDSK
  196. :chkdsk
  197.  
  198. gosub DoChkDsk
  199. quit
  200.  
  201.   Perform a virus check (by using F-PROT)
  202.  
  203. REM ------------------------------------------------- Virus Check
  204. :vircheck
  205. setlocal
  206. unalias *
  207. set fg=%_fg
  208. set bg=%_bg
  209.  
  210. gosub GetDrive
  211. gosub DoVirCheck
  212. endlocal
  213. quit
  214.  
  215. REM ─────────────────────────────────────────── Environment oriented routines
  216.  
  217.   Restore the normal configuration
  218.  
  219. REM ------------------------------------------------- Normal Environment
  220. :normal
  221. unset *
  222. set /r C:\4DOS\environ
  223. alias /r C:\4DOS\aliases
  224. echo 4DOS-Configuration read.
  225. quit
  226.  
  227.   Back to the home directory...
  228.  
  229. REM ------------------------------------------------- Home
  230. :ho
  231. iff "%2" == "" then
  232.  echos Changing to %@upper[%home%]...
  233.  cdd %home%
  234. else
  235.  setlocal
  236.  *set home=%@upper[%@full[%2]]
  237.  *unset /q tmp temp cmdline comspec
  238.  iff %@index[%@upper[%path],G:\] GE 0 then
  239.   *set path=%@substr[%path,4,255]
  240.  endiff
  241.  echo New Home directory will be: %home%.
  242.  *set > c:\4DOS\environ.
  243.  endlocal
  244.  *set /r C:\4DOS\environ.
  245. endiff
  246. quit
  247.  
  248. REM ─────────────────────────────────────────────────────────── Applications
  249.  
  250.   This "batch" file starts nethack.
  251.  
  252. REM ------------------------------------------------- NetHack
  253. :hack
  254. setlocal
  255. unalias *
  256.  
  257. iff "%2"=="" then C:\NETHACK\nhack
  258. else
  259.  iff "%4" == "c" then set term=ibmpc
  260.  elseiff "%4" == "m" then set term=ibmpc-mono
  261.  else
  262.   inkey /K"CM" /W5 [C]olor or [M]ono ? %%ask
  263.   set ask=%@UPPER[%ask]
  264.   iff "%ask" == "C" then set term=ibmpc
  265.                     else set term=ibmpc-mono
  266.   endiff
  267.  endiff
  268.  
  269.  IFF %@READY[G:] == 1 THEN
  270.   ECHO Installing NetHack on RamDisk G:
  271.   cdd g:\
  272.   except (4*.* acd.*) del /sxy G:\*.* >& NUL:
  273.   *md SAVE
  274.   cdd c:\NETHACK
  275.   set size=%@FILESIZE[C:\NETHACK\SAVE\SAVE2\%2.SAV,K]
  276.   iff "%size" GT "300" then
  277.    copy /q normhack.cnf nethack.cnf
  278.    set hackmode=0
  279.   elseiff "%size" GT "200" then
  280.    copy /q halfhack.cnf nethack.cnf
  281.    set hackmode=50
  282.   else
  283.    copy /q fullhack.cnf nethack.cnf
  284.    set hackmode=100
  285.   endiff
  286.  ELSE
  287.   copy /q normhack.cnf nethack.cnf
  288.   set hackmode=0
  289.  ENDIFF
  290.  
  291.  :restore
  292.  iff %hackmode=0 then
  293.   copy /q C:\NETHACK\SAVE\SAVE2\%2.SAV C:\NETHACK\SAVE
  294.  elseiff %hackmode=50  then
  295.   copy /q halfhack.cnf nethack.cnf
  296.   copy /q C:\NETHACK\SAVE\SAVE2\%2.SAV C:\NETHACK\SAVE
  297.  else
  298.   copy /q fullhack.cnf nethack.cnf
  299.   copy /q C:\NETHACK\SAVE\SAVE2\%2.sav G:\SAVE
  300.  endiff
  301.  :goon
  302.  C:\NETHACK\nhack %2-%3
  303.  
  304.  iff %hackmode% GT 50  then move /q G:\SAVE\%2.sav C:\NETHACK\SAVE\SAVE2
  305.                        else move /q C:\NETHACK\SAVE\%2.sav C:\NETHACK\SAVE\SAVE2
  306.  endiff
  307.  inkey /K"YN " /W5 Try again (Y/N) ? %%ask
  308.  set ask=%@UPPER[%ask]
  309.  iff "%ask" == "Y" .OR. "%ask" == " " then goto /I restore endiff
  310.  echo.
  311. endiff
  312. endlocal
  313. quit
  314.  
  315. REM ─────────────────────────────────────────────────────────── Jokes
  316.  
  317.   I have wrote this fragment to get an impression how to use 4DOS's
  318.   built-in functions.
  319.  
  320. :info
  321. setlocal
  322. set alias=%_alias
  323. unalias *
  324. set fg=%_fg
  325. set bg=%_bg
  326.  
  327. cls
  328. drawbox 0 0 %@eval[%_ROWS-1] %@eval[%_COLUMNS-1] 0 white on Cyan fill Cyan
  329. vscrput 10 0 black on white 4DOS INFO
  330. vscrput 10 %@eval[%_COLUMNS-1] black on white 4DOS INFO
  331.  
  332. drawbox 2 2 8 46 1 black on white fill white shadow
  333. color black on white
  334. screen 2 15 [Environment]
  335. screen 3  3 You are running
  336. scrput 3 19 red   on white 4DOS %_4VER
  337. screen 3 28 under
  338. scrput 3 34 red   on white %_DOS %_DOSVER
  339. screen 3 42 .
  340. screen 5 3  Free Environment Space : %_ENV Bytes
  341. screen 6 3  Free Alias       Space : %ALIAS Bytes
  342. iff %_ANSI == 0 then screen 7 3  ANSI.SYS not installed.
  343. elseiff %_ANSI == 1 then screen 7 3  ANSI.SYS will be supported.
  344. endiff
  345.  
  346. drawbox 2 49 8 75 1 bright yellow on green fill green shadow
  347. color bright yellow on green
  348. screen  2 59 [Hardware]
  349. screen  3 50 CPU        :
  350. scrput  3 63 bright white on green %_CPU
  351. screen  4 50 Coprocessor:
  352. scrput  4 63 bright white on green %_NDP
  353. screen  5 50 Video card :
  354. scrput  5 63 bright white on green %@UPPER[%_VIDEO] (%_COLUMNS%x%_ROWS%)
  355. screen  7 50 Actual Codepage is %_CODEPAGE%.
  356.  
  357. drawbox 10 2 15 75 1 bright white on blue fill blue shadow
  358. color bright white on blue
  359. screen  10 20 [Memory]
  360. screen  11 3  Available Conventional memory:
  361. scrput  11 34 bright yellow on blue  %@DOSMEM[b] Bytes.
  362. screen  12 3  Available XMS          memory:
  363. scrput  12 34 bright yellow on blue  %@XMS[b] Bytes.
  364. screen  12 50 Extended:
  365. scrput  12 61 bright yellow on blue  %@EXTENDED[b] Bytes.
  366. screen  13 3  Available Expanded     memory:
  367. scrput  13 34 bright yellow on blue  %@EMS[b] Bytes.
  368.  
  369. iff     %_win == 0 then scrput 14 3 white on blue Windows is not running.
  370. elseiff %_win == 1 then scrput 14 3 white on blue Windows is running. (in real!! mode)
  371. elseiff %_win == 2 then scrput 14 3 white on blue Windows is running. (in standard mode)
  372. elseiff %_win == 3 then scrput 14 3 white on blue Windows is running. (in enhanced mode)
  373. endiff
  374.  
  375. drawbox 17 2 23 37 1 bright white on Magenta fill Magenta shadow
  376. color bright white on Magenta
  377. screen  17 15 [Harddisks]
  378.  
  379. iff %@ready[C:] == 1 then ^ screen 18 4 Free Space on Drive C: %@DISKFREE[C:,m] MB. ^ endiff
  380. iff %@ready[D:] == 1 then ^ screen 19 4 Free Space on Drive D: %@DISKFREE[D:,m] MB. ^ endiff
  381. iff %@ready[E:] == 1 then ^ screen 20 4 Free Space on Drive E: %@DISKFREE[E:,m] MB. ^ endiff
  382. iff %@ready[F:] == 1 then ^ screen 21 4 Free Space on Drive F: %@DISKFREE[F:,m] MB. ^ endiff
  383. iff %_LASTDISK GE G .and. %@ready[G:] == 1 then ^ screen 22 4 Free Space on Drive G: %@DISKFREE[G:,m] MB. ^ endiff
  384.  
  385. drawbox 17 40 20 75 1 white on black fill black shadow
  386. color white on black
  387. screen 17 50 [Date & Time]
  388. screen 18 41 %_DOW, the %_DATE at %_TIME.
  389.  
  390. color black on white
  391. screen %@eval[%_ROWS-1] 2 Press a key to abort...
  392. inkey %%dummy
  393. cls
  394. endlocal
  395. quit
  396.  
  397. REM ══════════════════════════════════════════════════════ common subroutines
  398.  
  399.  
  400.   Return the drive supplied as parameter #2 or the current drive.
  401.  
  402. REM ------------------------------------------------------ GetDrive
  403. :GetDrive
  404. iff "%2" == "" then set DRIVE=%_DISK:
  405.                else set DRIVE=%@SUBSTR[%@FULL[%2],0,2]
  406. endiff
  407. set DRIVE=%@UPPER[%DRIVE%]
  408. return
  409.  
  410.  
  411.   Delete temporary files...
  412.  
  413. REM ------------------------------------------------------ CleanUp
  414. :CleanUp
  415. echos Deleting *.BAK,*.TMP and .$$$ files...
  416. del /s \*.bak \*.tmp \*.$$$ >& NUL:
  417. echo Done.
  418.  
  419. iff %DRIVE% == C: then
  420.  echos Deleting contents of C:\TEMP...
  421.  del /yz C:\TEMP\*.* >& NUL:
  422.  echo Done.
  423. elseiff %DRIVE% == E: then
  424.  echos Deleting contents of E:\WINDOWS\TEMP...
  425.  del /yz E:\WINDOWS\TEMP\*.* >& NUL:
  426.  echo Done.
  427. endiff
  428. echo.
  429. gosub DoChkDsk
  430. echo.
  431.  
  432. return
  433.  
  434. REM ------------------------------------------------------ ReportSuccess
  435.  
  436.  This piece of code reports the sucess of the action performed before
  437.  calling this subroutine (stored in %job)
  438.  This is possible, because of MS-DOS standardized the  errorlevel
  439.  return codes. (cf MSDOS 5.0 example for backup/restore.)
  440.  
  441. :ReportSuccess
  442. if errorlevel == 4 goto error
  443. if errorlevel == 3 goto abort
  444. if errorlevel == 2 goto conflict
  445. if errorlevel == 1 goto no_files
  446. if errorlevel == 0 goto success
  447. :error
  448. color bright white on black
  449. echo %job stopped due to an error.
  450. color %fg on %bg
  451. inkey /K"YN" Retry (Y/N) ? %%YesNo
  452. set YesNo=%@UPPER[%YesNo%]
  453.  
  454. goto exit
  455. :abort
  456. echo You just pressed Control-C to stop the %job.
  457. goto exit
  458. :conflict
  459. color bright blink yellow on red
  460. iff %job == Backup then
  461.  echo One or more files were not backed up due to a file sharing conflict.
  462. else
  463.  echo One or more files were not restored due to a file sharing conflict.
  464. endiff
  465. color %fg on %bg
  466. echo This error message should not have appeared, share is not loaded!
  467. goto exit
  468. :no_files
  469. echo Sorry, but there were no files to %job.
  470. goto exit
  471. :success
  472. echo This %job was successful.
  473. if %job == Backup echo %@DISKFREE[A:,K] KBytes free on last Backup disk.
  474. c:\dos\mirror %DRIVE%
  475. :exit
  476. return
  477.  
  478. REM ------------------------------------------------------ DoChkDsk
  479.  
  480.   Nothing special.
  481.  
  482. :DoChkDsk
  483. keystack N 13
  484. C:\DOS\chkdsk.exe /f %2&
  485. keystack !
  486. return
  487.  
  488. REM ------------------------------------------------------ DoVirCheck
  489.  
  490.   Do a virus check and report it (in the file \f-prot.log). Give an alert
  491.   when a virus has been detected.
  492.  
  493. :DoVirCheck
  494.  
  495. iff exist %drive\f-prot.log .and. %@filedate[%drive\f-prot.log] == %_date then
  496.  echo You have already made a vircheck today.
  497. else
  498.  C:\ANTIVIR\f-prot %drive /report=%drive\f-prot.log
  499.  
  500.  iff errorlevel gt 0 then
  501.   drawbox 5 10 15 72 2 bright white on red fill red
  502.   scrput  7 12 bright yellow on red f-prot 2.03a reports, that
  503.   scrput  7 39 bright blink yellow on red YOU MAY HAVE CAUGHT A VIRUS!!!!!!
  504.   scrput  9 12 white on red 1) keep cool,
  505.   scrput 10 12 white on red 2) disinfect your harddisk, before making any Backups.
  506.   scrput 11 12 white on red 3) remember: your backups may also be infected,
  507.   scrput 12 24 white on red so re-run f-prot.
  508.   scrput 14 12 bright white on red press ESC to acknoledge.
  509.   inkey /k"[esc]" %%dummy
  510.   cls
  511.  endiff
  512. endiff
  513. return
  514.  
  515.