home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / podstawy / dos / 4dos / 4uzytki / bkup12.exe / BKUP12.BTM < prev    next >
Text File  |  1995-05-20  |  24KB  |  858 lines

  1. :: ------------------------------------------------------------------
  2. :  BKUP.BTM, version 12, May 20, 1995
  3. :  -- Read BKUP.DOC for detailed description, or type BKUP H
  4. :  -- Call BKUP.INI to modify defaults.
  5. :: ------------------------------------------------------------------
  6. :  This is the main BKUP batch. See BKUP.LST for a full list.
  7. :: ------------------------------------------------------------------
  8. :  Itamar Even-Zohar (itamarez@plato.tau.ac.il)
  9. :: ------------------------------------------------------------------
  10.  
  11. :2help
  12. :: (displays HELP if you type H, ?, or /?, or I)
  13. iff %@index[%1,h] eq 0 .or. %@index[%1,?] ge 0 .or. %@index[%1,i] eq 0 then
  14. call bk-hlp.btm %1
  15. endiff
  16.  
  17. iff %_4ver lt 5 then
  18. cls
  19. beep
  20. screen 2 0
  21. text
  22.     This version of BKUP does not support 4DOS version 4.x.
  23.     Please use previous versions.
  24. endtext
  25. cancel
  26. endiff
  27.  
  28. setlocal
  29. set args=%1&
  30.  
  31. gosub bk-prams
  32. :: (checks and sets various parameters)
  33.  
  34. :ex_choice
  35. :: (if x or -x specified, the extraction part will work)
  36. iff %@index[%1,x] ge 0 .and. %@index[%1,x] lt 2 then
  37.   goto extract_f
  38. endiff
  39.  
  40. gosub check_args
  41. :: (defining drives for opeations if not defined elsewhere)
  42.  
  43. :check_compu
  44. :: (checking computer's "name")
  45. if "%compuname"=="" gosub compuname
  46. ::goto set_params
  47.  
  48. :get_date
  49. :: (separates typed date from -s or s ["since"] in date)
  50. iff %@index[%1,/s] ge 0 .or. %@index[%1,-s] ge 0 then
  51.    set date0=%@substr[%1,2]
  52.    goto set_defaults
  53. elseiff %@index[%1,s] eq 0 then
  54.    set date0=%@substr[%1,1]
  55.    goto set_defaults
  56. else
  57.    goto compu_date
  58. endiff
  59.  
  60. :compu_date
  61. set days=%@date[%_date]
  62. :      This is today'y date in full numbers since 1-1-1980
  63. set date0=%@makedate[%@eval[%days-%1]]
  64. :      This is the actual date desired for the archive file.
  65. :      If no number of days indicated by user, you get today's
  66. :      date again.
  67. if %@index[%date0,0] eq 0 set date0=%@substr[%date0,1]
  68. :      If a zero (0) is contained on the first position (01, etc.),
  69. :      it will be removed.
  70.  
  71. :set_defaults
  72. :: (setting: temporary archive name, final archive name;
  73. :: removing: old temporary archive; verifying: colors for message)
  74. ::
  75. set rsp=%temp%upd.rsp
  76. set zipfn=%temp%upd.%zip_ext
  77. set tmpf=%@unique[%temp]
  78. if exist %zipfn del /q %zipfn
  79. :: (This is just a precaution; this file is moved anyway, if batch
  80. :: terminates in a normal way.)
  81. if .%colordir==. set colordir=dirs:bright white;zip uc:black on white;
  82.  
  83. :re-use?
  84. :: (Use again the updates file or create a new one?)
  85. cls
  86. if exist %rsp goto ask
  87. goto accumulate
  88.  
  89. :ask
  90. :: (use extant list of updates or create a new one?)
  91. echo.
  92. gosub legenda
  93. screen 2 0
  94. inkey /K"YNVESQ" Use extant list file? (created %@filedate[%rsp], at %@filetime[%rsp])? [time now: %_time]n (List File is: %@upper[%rsp])nnType Y/N, V(iew), S(creen), E(dit), or Q(uit) %%rep
  95.     iff %rep == Q then cls^screen 2 0^set ech=echo Stopped by user^ goto end
  96. elseiff %rep == Y then goto backup
  97. elseiff %rep == V then *list %rsp^cls^goto ask
  98. elseiff %rep == E then %edt %rsp^goto backup
  99. elseiff %rep == S then echo. >%tmpf^cls^set num=0^goto edit
  100. elseiff %rep == N goto accumulate
  101. endiff
  102.  
  103. :accumulate
  104. cls
  105.   iff %_monitor == mono then
  106. screen 4 5 [ making a list of all new files created since %date0 ]
  107. screen 3 5 Working ...
  108.   else
  109. scrput 4 5 gre on whi [ making a list of all new files created since %date0 ]
  110. scrput 3 5 blu on whi  Working ...
  111.   endiff
  112.  
  113. :make_list
  114. :: (Create the updates file with 4DOS internal dir /d command
  115. :: [valid only from version 5.x])
  116. cdd %search_drive:\
  117. dir /bsa:a /[d%date0] >%rsp
  118.  
  119. :check_list
  120.   iff %@lines[%rsp] lt 0 then
  121.   set ech=scrput 3 17 bri whi on bla No files were found for/since %date0!
  122.   del /q %rsp
  123.   goto end
  124.   endiff
  125. scrput 3 17 bri whi on bla List created as %@upper[%rsp]
  126.  
  127. :edit?
  128. screen 6 5 Select an option (press first letter):
  129. screen 7 5
  130. text
  131.  
  132.    Screen  select files on screen (one file after another)
  133.            (this option allows viewing and deleting)
  134.    Edit    edit results file via editor
  135.    View    view results before making any decision
  136.    Go      go to immediate archiving (no selection)
  137.    Quit    stop now (results file will remain intact)
  138. endtext
  139. screen 16 3
  140. inkey /K"SEQGV[ESC][Enter]" Your choice?  %%rep
  141. iff %rep == G then goto backup
  142.   elseiff %rep == S .or. %rep == @28 then
  143.     echo. >%tmpf
  144.     cls
  145.     set num=0
  146.     goto edit
  147.   elseiff %rep == E then
  148.     %edt %rsp
  149.     goto backup
  150.   elseiff %rep == V then
  151.     *list %rsp
  152.     cls^goto edit?
  153.   elseiff %rep == Q .or. %rep == %@char[27] then
  154.     set ech=echo Stopped by user^goto end
  155. endiff
  156.  
  157. :edit
  158. rem   This procedure displays all the files saved today, one by one,
  159. :     allowing you to (a) select only those you wish to back up, or
  160. :     (b) delete, or (c) view a file before making a decision, or
  161. :     (d) view the list of selections, or (e) stop selecting and go
  162. :     to immediate archiving, or (f) quit.
  163. :
  164. iff %@eval[%num] gt %@lines[%rsp] then
  165.   move /q %tmpf %rsp
  166.   goto backup
  167.   endiff
  168. set fn=%@line[%rsp,%num]
  169. if .%fn==. (set num=%@eval[%num+1]^goto edit)
  170. scrput 0 0 black on white  Accept=A/enter Omit=O/Esc D=Delete V=View G=Begin archiving L=View list Q=Quit 
  171. echo.
  172.   iff %_row lt 2 then
  173.   screen 2 0
  174.   endiff
  175. echo ==`>` %fn
  176.   iff %_row ge %@eval[%_rows -1] then
  177.   cls
  178.   goto edit^endiff
  179. inkey /K"YNAODVGLQ[ESC][Enter]" A(ccept)? O(mit)? D(elete)? V(iew)? G(o)? (L)ist Q(uit)?  %%rep
  180. iff %rep == %@char[27] .or. %rep == O .or. %rep == N then
  181.      set num=%@eval[%num +1]
  182.      goto edit
  183.      :REM: see label ':note' below
  184. elseiff %rep == A .or. %rep == @28 .or. %rep == Y then
  185.      echo %fn >>%tmpf
  186.      set num=%@eval[%num +1]
  187.      goto edit
  188. elseiff %rep == D then
  189.      del /q %fn
  190.      echo ==`>` %fn deleted^echo.
  191.      set num=%@eval[%num +1]
  192.      goto edit
  193. elseiff %rep == V then
  194.      *list %fn
  195.      echo.^goto edit
  196. elseiff %rep == G then
  197.      set num=%@eval[%@lines[%rsp]+1]
  198.      goto edit
  199. elseiff %rep == L then
  200.      *list %tmpf
  201.      echo.^goto edit
  202. elseiff %rep == Q then set ech=echo Stopped by user^goto end
  203. endiff
  204.  
  205. :backup
  206. cdd %temp
  207. rem  (Checking if there are any file at all to back up)
  208.   gosub void
  209.   
  210. :update
  211. rem  (If zip archive exists on target diskette, update it)
  212. cls^echo.^echo.
  213. gosub check_drive
  214. iff exist %dr:\%date0.%zip_ext then
  215. set fn=%dr:\%date0.%zip_ext
  216. set state=old
  217. :: (The following 2 lines are just to remind the reader of parameters
  218. :: set up in BKUP.INI.)
  219. :: if "%zip_pgm"=="zip"   set pkz=zip -uk -b%temp -9
  220. :: if "%zip_pgm"=="pkzip" set pkz=pkzip -b%temp -P -u -ex
  221. cls
  222. screen 2 0
  223. gosub void
  224. if "%zip_pgm"=="zip"   set pkz=%pkz %dr:\%date0.%zip_ext -@ `<`%rsp %exclude `>&>`nul
  225. if "%zip_pgm"=="pkzip" set pkz=%pkz %exclude %dr:\%date0.%zip_ext @%rsp
  226. if "%zip_pgm"=="uc"    set pkz=%pkz %dr:\%date0.%zip_ext @%rsp %exclude
  227.  
  228. :: (execute compression now)
  229.  
  230. %pkz
  231. gosub success
  232. goto end
  233. endiff
  234.  
  235. :create_zip
  236. cls
  237. screen 2 0
  238. gosub void
  239. if "%zip_pgm"=="zip"   set pkz=%pkz %zipfn -@ `<`%rsp %exclude `>&>`nul
  240. if "%zip_pgm"=="pkzip" set pkz=%pkz %exclude %zipfn @%rsp
  241. if "%zip_pgm"=="uc"    set pkz=%pkz %zipfn @%rsp %exclude
  242. ::
  243. :: (execute compression now)
  244. %pkz
  245. gosub success
  246.  
  247. :check_room
  248. rem  (Checking if there is room for backup file on target)
  249. iff %@diskfree[%dr:,b] lt %@filesize[%zipfn,b] then
  250. set ech=Echo No room on drive %@upper[%dr:]! %zipfn was left on %temp
  251.   goto end
  252.   else
  253. set ech=echo Backup archive created on drive %@upper[%dr:]
  254. endiff
  255.  
  256. :move_zip
  257. gosub check_drive
  258. move /q %zipfn %dr:\%date0.%zip_ext
  259. set brand=upd
  260. set fn=%dr:\%date0.%zip_ext
  261. gosub brand
  262.  
  263. :end
  264. if exist %tmpf del /q %tmpf
  265. if exist %excls_file del /q %excls_file
  266. echo.
  267. %ech
  268. echo.
  269.   iff %@index[%ech,Stopped] ge 0 then goto interrupt
  270.   elseiff %@index[%ech,No new] ge 0 then goto interrupt
  271.   elseiff %@index[%ech,No files we] ge 0 then goto interrupt
  272.   elseiff %@index[%ech,could not be] ge 0 then goto interrupt
  273.   endiff
  274. if exist %dr:\%date0.%zip_ext dir /klm %dr:\%date0.%zip_ext
  275. echo.
  276. if .%integrity==.yes gosub integrity
  277. :interrupt
  278. endlocal
  279. quit
  280.  
  281. ::*===========End of archiving part===================*::
  282.  
  283. ::*===========Begin extraction part===================*::
  284. :extract_f
  285. :: Since version 8, a menu will pop up even if the archive diskette
  286. :: contains only one archive (zip) file. This will allow canceling
  287. :: extraction (by ESC). If you prefer the older procedure, you will
  288. :: have to add one more preliminary step before "select...".
  289.  
  290. :set_extr_drive
  291. gosub check_args_x
  292.  
  293. cdd %archive_drive:\
  294. cdd %toupdate_drive:\
  295. if not exist %archive_drive:*-?*-??.%zip_ext goto failure
  296.  
  297. :set_names
  298. set drv=%toupdate_drive
  299. if .%compuname != %@label[%drv:] set compuname=%@lower[%@label[%drv]]
  300.  
  301. :extract
  302. set fnt=%@unique[%temp%]
  303. select /d dir /km >>%fnt (%archive_drive:*-?*-??.%zip_ext)
  304. set count=%@lines[%fnt]
  305. :
  306. :select_file
  307. cls
  308. cdd %toupdate_drive:\
  309. set num=-1
  310.  
  311. :operate
  312. :: This procedure was written with the help of Sam Wilson
  313. :: (SAM.WILSON@emerald.com), 9 Jan 1994, to whom I am deeply
  314. :: grateful. The procedure replaces a previous one, with @select,
  315. :: which allowed file selection only one by one.
  316. ::
  317. set num=%@eval[%num+1]
  318. set fn=%@line[%fnt,%num]
  319. if .%fn==.**EOF** goto end_x
  320. set fn=%archive_drive:%@substr[%fn,0,15]
  321. cls
  322. scrput 1 0 bla on whi Extracting now NEW files from %fn to Drive %toupdate_drive:
  323. rem  (change colors ['bla on whi'] to suit your preference)
  324. screen 2 0
  325. if %@index[%@descript[%fn],Extracted] ge 0 gosub continue?
  326. if "%zip_pgm"=="zip"   set unz=unzip -d -uo %fn %exclude `>&>`nul
  327. if "%zip_pgm"=="pkzip" set unz=pkunzip -d -n %exclude %fn `>&>`nul
  328. if "%zip_pgm"=="uc"    set unz=uc es /f %fn %exclude ##\ `>&>`nul
  329.  
  330. :do_extract
  331. %unz
  332. gosub success_x
  333. goto operate
  334.  
  335. :failure
  336. echo.
  337. echo  No backup files found on drive %archive_drive:
  338. endlocal
  339. quit
  340.  
  341. :end_x
  342. del /q %fnt
  343. if exist %excls_file del /q %excls_file
  344. endlocal
  345. cls
  346. quit
  347. :===========End of the extraction part==================
  348.  
  349. :==================SUB-ROUTINES=========================
  350.  
  351. ::(1)----sub-routines for the archiving part------------
  352. :legenda
  353. screen 17 0
  354. text
  355.     Y == extant list will immediately be used for archiving
  356.     N == a new list of files will be generated
  357.     V == the extant list will be viewed, then you can make decision
  358.     E == the list will be called by an editor
  359.     S == the list will be called to screen, one file after the other
  360.     Q == quit
  361. endtext
  362. drawbox 16 0 23 73 1 whi on bla
  363. return
  364. :-------------------------------------------------------
  365. :check_drive
  366. iff %@ready[%dr:] eq 0 then
  367.    echo Insert diskette to Drive %@upper[%dr:], and
  368.    pause
  369.    endiff
  370. if exist %@search[upname.btm] call upname
  371. :: ("upname.btm" checks if your updates disk has got a "name")
  372. return
  373. :------------------------------------------------------
  374. :success
  375. if .%zip_pgm == .zip .or. .%zip_pgm == .pkzip goto _zip
  376. if .%zip_pgm == .uc goto _uc
  377.  
  378. :_uc
  379. iff errorlevel eq 0 then
  380.     if .%state==.old (set brand=upd^gosub brand)
  381.     set ech=echo Backup archive updated on drive %@upper[%dr:]
  382.     return
  383. elseiff errorlevel eq 160 .or. errorlevel eq 165 then
  384.     set ech=echo No memory for UC2 to work
  385.     goto end
  386. else
  387.     set ech=
  388.     goto end
  389.  endiff
  390.  
  391. :_zip
  392. rem     Checking results of archiving (with pkzip)
  393.  iff errorlevel eq 12 then
  394.     set ech=Echo (No new or updated files have been created)
  395.  elseiff errorlevel eq 4 then
  396.     cls
  397.     set ech=screen 1 2 (No memory for ZIP to create updates archive)
  398.     goto end
  399.  elseiff errorlevel ge 4 .and. errorlevel le 11 then
  400.     set ech=Echo (Backup archive could not be created / updated)
  401.     goto end
  402.  elseiff errorlevel ge 20 then
  403.     set ech=Echo (Backup archive could not be created / updated)
  404.     goto end
  405.  else
  406.     if .%state==.old (set brand=upd^gosub brand)
  407.     set ech=echo Backup archive updated on drive %@upper[%dr:]
  408.  endiff
  409. return
  410.  
  411. :integrity
  412. : (Checking archive's integrity if requested)
  413. echo.
  414. echo ==> Checking archive's integrity. . .
  415. if .%zip_pgm==.zip unzip -t %dr:\%date0.%zip_ext
  416. if .%zip_pgm==.pkzip pkunzip -t %dr:\%date0.%zip_ext
  417. if .%zip_pgm==.uc uc -t %dr:\%date0.%zip_ext
  418. return
  419. :-----------------------------------------------------------
  420. :--------sub-sub-routine for marking a file-----------------
  421. : This sub-routine is designed to handle marking files. To save space,
  422. : it handles both "Updated..", and "Extracted" descriptions. This can
  423. : be implemented if the different formulas are first saved on variables.
  424.  
  425. :brand
  426. iff .%brand==.upd then
  427.   set mark1=Updated
  428.   set mark2=Updated from:
  429.   set mark3=Extracted
  430. elseiff .%brand==.ext then
  431.   set mark1=Extracted
  432.   set mark2=Extracted to:
  433.   set mark3=Updated
  434. endiff
  435.  
  436. set dscr=%@descript[%fn]
  437. if "%dscr"=="" goto 1st_desc
  438. iff %@word[0,%dscr] eq %mark3 .or. "%brand" eq "upd" then
  439.   set %dscr=
  440.   goto 1st_desc
  441. endiff
  442.  
  443. iff %@word[0,%dscr] eq %mark1 then
  444. goto add_compu
  445. endiff
  446.  
  447. :add_compu
  448. if .%compuname==. (describe %fn "%dscr; %mark1; "^return)
  449. describe %fn "%dscr %compuname; "
  450. return
  451.  
  452. :1st_desc
  453. iff .%compuname==. then
  454.     describe %fn "%mark1; "
  455.     return
  456. else
  457.     describe %fn "%mark2 %compuname; "
  458.     return
  459. endiff
  460. :----subroutine for checking if archive be updated----
  461. :void
  462. iff %@lines[%rsp] lt 0 .or. %@lines[%rsp] le 0 .and. %@len[%@line[%rsp,0]] lt 1 then
  463. set ech=scrput %@eval[%_row+1] 2 bri whi on bla No files were found /selected to back up!
  464. echo.
  465. del /q %rsp
  466. goto end
  467.   else
  468.   return
  469. endiff
  470.  
  471. ::(2)-----------SUB-ROUTINES FOR THE EXTRACTION PART-----
  472. :success_x
  473. iff "%zip_pgm"=="zip" then
  474. :: (There is a problem with ZIP errorlevel; it does not work)
  475.   set checkerror=iff errorlevel gt 0 .and. errorlevel lt 9 then
  476. elseiff "%zip_pgm"=="pkzip" then
  477.   set checkerror=iff errorlevel gt 10 .and. errorlevel lt 12 then
  478. elseiff "%zip_pgm"=="uc" then
  479.   set checkerror=iff errorlevel lt 0 then
  480. endiff
  481.  
  482.   %checkerror
  483.     echo (No NEW files found for extracting in %fn)
  484.     ::if %count ge 0 (echo Press any key to continue...^pause>nul)
  485.     delay 2
  486.   else
  487.     :ok_x
  488.   echo All NEW files from %fn extracted to %toupdate_drive:
  489.   set brand=ext
  490.   gosub brand
  491.   endiff
  492. return
  493.  
  494. :continue?
  495. iff %@index[%@descript[%fn],%compuname] ge 0 then
  496. goto force?
  497. else
  498. return
  499. endiff
  500.  
  501. :force?
  502. set rsp=Q
  503. inkey /W4 /K"EDQ" File %@upper[%fn] already extracted. E(xtract), D(elete), Q(uit)? %%rsp
  504. if %rsp == E return
  505. if %rsp == Q (echo Forced extraction canceled^goto operate)
  506. if %rsp == D (del /q %fn^echo File %fn deleted^goto operate)
  507.  
  508. :-----------SUBROUTINES FOR DRIVE CHECKING-----------
  509. ::(1)-------archiving part---------------
  510. :check_args
  511. iff %@eval[%#] eq 0 then
  512. gosub defaults
  513. goto start_program
  514.   elseiff %@eval[%#] eq 1 then
  515.   goto check_1
  516.   elseiff %@eval[%#] eq 2 then
  517.   goto check_2
  518.   elseiff %@eval[%#] ge 3 then
  519.   goto check_3
  520. endiff
  521.  
  522. :ask_drives
  523. inkey Search Drive (letter only)? %%search_drive
  524. inkey Archive Drive (letter only)? %%archive_drive
  525. return
  526.  
  527. :check_1
  528. iff not %@index[%1,:] ge 0 then
  529.  gosub defaults
  530. goto start_program
  531.    else
  532.  echo Only one drive specified!
  533.  gosub ask_drives
  534.  shift
  535. goto start_program
  536. endiff
  537.  
  538. :check_2
  539. iff %@index[%1,:] ge 0 .xor. %@index[%2,:] ge 0 then
  540.  gosub ask_drives
  541. shift 1
  542. goto start_program
  543.    else
  544.  set search_drive=%1
  545.  set archive_drive=%2
  546.  shift 2
  547.  goto start_program
  548. endiff
  549.  
  550. :check_3
  551. set search_drive=%1
  552. set archive_drive=%2
  553. shift 2
  554.  
  555. :start_program
  556. :: (Eliminate "/zip", "/pkz" or "uc" from the arguments passed on)
  557. iff %@index[%1,/pkz] ge 0 .or. %@index[%1,/zip] ge 0 .or. %@index[%1,/uc] ge 0 then
  558. shift 1
  559. endiff
  560.  
  561. :: (Eliminate "/x" from the arguments passed on)
  562. iff %@index[%1,/x] ge 0 then
  563. shift 1000
  564. endiff
  565.  
  566. :: (Eliminate "/int" or "noint" from the arguments passed on)
  567. iff %@index[%1,/int] ge 0 .or. %@index[%1,/noint] ge 0 then
  568. shift 1
  569. endiff
  570.  
  571. :drives  :: (eliminate colon from drive names)
  572. set dr=%archive_drive
  573.     iff %@index[%dr,:] eq 1 then
  574.         set dr=%@substr[%dr,1,-1]
  575.     endiff
  576.     iff %@index[%search_drive,:] eq 1 then
  577.         set search_drive=%@substr[%search_drive,1,-1]
  578.     endiff
  579.  
  580. return
  581. rem (return to the beginning of updating)
  582.  
  583. ::(2)-------extraction part---------------
  584. :check_args_x
  585. shift
  586. iff %@eval[%#] eq 0 then
  587. gosub defaults_x
  588. goto start_ext
  589.   elseiff %@eval[%#] eq 1 then
  590.   goto check_1_x
  591.   elseiff %@eval[%#] ge 2 then
  592.   goto check_2_x
  593. endiff
  594.  
  595. :ask_drives_x
  596. inkey Drive to extract to (letter only)? %%toupdate_drive
  597. inkey Drive to extract from (letter only)? %%archive_drive
  598. return
  599.  
  600. :check_1_x
  601. iff not %@index[%1,:] ge 0 then
  602.  gosub defaults_x
  603. goto start_ext
  604.    else
  605.  echo Only one drive specified!
  606.  gosub ask_drives_x
  607.  shift
  608. goto start_ext
  609. endiff
  610.  
  611. :check_2_x
  612. iff %@index[%1,:] ge 0 .xor. %@index[%2,:] ge 0 then
  613.  gosub ask_drives_x
  614. shift 1
  615. goto start_ext
  616.    else
  617. set toupdate_drive=%@substr[%1,1,-1]
  618. set archive_drive=%@substr[%2,1,-1]
  619.  shift 2
  620.  goto start_ext
  621. endiff
  622.  
  623. :start_ext
  624. :: (Eliminate "/zip" or "/pkz" or "/uc" from the arguments passed on)
  625. iff %@index[%1,/pkz] ge 0 .or. %@index[%1,/zip] ge 0 .or. %@index[%1,/uc] ge 0 then
  626. shift 1
  627. endiff
  628.  
  629. :drives_x
  630. :: (eliminate colon from drive names)
  631.  iff %@index[%archive_drive,:] eq 1 then
  632.   set archive_drive=%@substr[%archive_drive,1,-1]
  633.  elseiff %@index[%toupdate_drive,:] eq 1 then
  634.   set toupdate_drive=%@substr[%toupdate_drive,1,-1]
  635.  endiff
  636.  
  637. return
  638. rem (go back to the beginning of extraction)
  639.  
  640. ::===========================================
  641. :----sub-sub-routines to 'checking drives'---
  642. ::===========================================
  643. :: (setting default drives for compression and extraction.
  644. :: These defaults can be overridden via BKUP.INI, or from
  645. :: the command line.)
  646. :defaults
  647. if .%search_drive ==. set search_drive=%_boot
  648. if .%archive_drive==. set archive_drive=B:
  649. return
  650.  
  651. :defaults_x
  652. if .%toupdate_drive==. set toupdate_drive=%_boot
  653. if .%archive_drive ==. set archive_drive=B
  654. return
  655. :=============END of SUB-ROUTINES============
  656.  
  657. ::-------------------------------------------::
  658. ::   EVALUATION OF PARAMETERS AND OPTIONS    ::
  659. ::-------------------------------------------::
  660. :bk-prams
  661.  
  662. :check_batches
  663. :: (look for batch files used by BKUP)
  664. iff not exist %@search[bk-hlp.btm] then
  665.    beep^echo BK-HLP.BTM not found. It is needed for BKUP to work
  666.    echo (See BKUP.LST for details.)
  667.    cancel
  668. elseiff not exist %@search[settemp.btm] then
  669.    beep^echo SETTEMP.BTM not found. It is needed for BKUP to work
  670.    echo (See BKUP.LST for details.)
  671.    cancel
  672. elseiff not exist %@search[upname.btm] then
  673.    beep^echo UPNAME.BTM not found. It is needed for BKUP to work
  674.    echo (See BKUP.LST for details.)
  675.    cancel
  676. endiff
  677.  
  678. call settemp
  679. :: ("settemp.btm" determines which drive will be defined as "temp",
  680. :: if it is not yet defined by user [preferably in AUTOEXEC.BAT file].)
  681.  
  682. :load_ini
  683. :: (loads configuration file)
  684. if exist %@search[bkup.ini] set /r %@search[bkup.ini]
  685.  
  686. :set_params
  687. ::
  688. :(1)zip_pgm
  689. :: (compressions pgm: Free ZIP/UNZIP, Katz's PKZIP/PKUNZIP, or UC2)
  690. :: (/pkz, /zip, or /uc on the command line will select PKZIP, ZIP, or UC2
  691. ::  respectively. Default [below, :defaultzip] is PKZIP.)
  692.        iff %@index[%args,/pkz] ge 0 then
  693.           set zip_pgm=pkzip
  694.           set zip_ext=zip
  695.        elseiff %@index[%args,/zip] ge 0 then
  696.           set zip_pgm=zip
  697.           set zip_ext=zip
  698.        elseiff %@index[%args,/uc] ge 0 then
  699.           set zip_pgm=uc
  700.           set zip_ext=uc2
  701.        elseiff .%zip_pgm==. then
  702.      :defaultzip   :: (Modify default below if desired)
  703.           set zip_pgm=pkzip
  704.           set zip_ext=zip
  705.       endiff
  706.  
  707. :set_prams
  708.    iff "%zip_pgm"=="zip" then
  709.           iff %@eval[%@dosmem[k]] lt 600 then
  710.           beep
  711.           echo No memory for compression with %@upper[%zip_pgm]
  712.           cancel
  713.           endiff
  714.        set zip_ext=zip
  715.        set pkz=zip -uk -9 -b %temp
  716.    elseiff "%zip_pgm"=="pkzip" then
  717.        set zip_ext=zip
  718.        set pkz=pkzip -b%temp -P -u -ex
  719.    elseiff "%zip_pgm"=="uc" then
  720.        set zip_ext=uc2
  721.        set pkz=uc a -## -f
  722.           iff %@eval[%@dosmem[k]] lt 400 then
  723.           ::us.exe
  724.           ::set pkz=uuc a -## -f
  725.           beep
  726.           echo No memory for compression with %@upper[%zip_pgm]
  727.           cancel
  728.           endiff
  729.    endiff
  730.  
  731. :(2)exclude_list
  732. :: (files not to be included in update archives or not to be extracted
  733. :: from the archive. The filenames are read from BKUP.INI, but this can
  734. :: be overridden by the /x switch on the command line.
  735. ::
  736.   iff %@index[%args,/x] ge 0 then
  737.         set exc=%@eval[%@index[%args,/x]+2]
  738.         set excludes=%@substr[%args,%exc]
  739.         goto an_excludes
  740.   elseiff not "%excludes"=="" then
  741.         goto an_excludes
  742.      endiff
  743.  
  744. :an_excludes
  745.  set lenexc=%@len[%excludes]
  746.    iff "%zip_pgm"=="zip" then
  747.    set exclude=-x
  748.    goto parse_excludes
  749.    elseiff "%zip_pgm"=="pkzip" .or. "%zip_pgm"=="uc" then
  750.    set exclude=
  751.    goto parse_excludes
  752. endiff
  753.  
  754. :parse_excludes
  755. if %_4ver lt 5 goto 4ver_loop
  756. set num=0
  757. do forever
  758.   set wo=%@word[%num,%excludes]
  759.   if "%wo"=="" leave
  760.   set num=%@eval[%num+1]
  761.   gosub cmpr_pgm
  762. enddo
  763. goto check_type
  764.  
  765. :4ver_loop
  766. call bk-4ver.btm parse_exclude4
  767.  
  768. :check_type
  769. if %lenexc ge 54 set excl_file=on
  770. if .%excl_file==.on gosub mark_excl
  771.  
  772. :(3)editor
  773. :: (if not defined in ini file)
  774. if not "%editor"=="" set edt=%editor
  775. if "%edt"=="" INPUT No editor defined. Type your preferred editor's name: %%edt
  776.  
  777. :(4)integrity
  778. :: (Check if integrity checking was requested / overridden on
  779. ::  the command line)
  780. if %@index[%args,/int] ge 0 set integrity=yes
  781. if %@index[%args,/noint] ge 0 set integrity=no
  782. return
  783. :: (return to main program)
  784.  
  785. ::===========SUB-ROUTINES FOR PARAMETERS===========
  786. ::---sub-routine for checking computer "name"------
  787. :compuname
  788. :: (temporarily naming your computer if not named yet)
  789.    if "%@label[%search_drive]"=="" goto give_name
  790.    set compuname=%@label[%search_drive]
  791.    return
  792.    :give_name
  793.    cls
  794.    screen 2 2 Your BKUP.INI file is missing and your search drive
  795.    screen 3 2 (currently %search_drive%:) has no label.
  796.    screen 4 2
  797.    inkey /K"YN" Give it a (temporary) name now? (Y/N) %%rep
  798.         iff %rep == Y then goto name2
  799.     elseiff %rep == N then return
  800.     endiff
  801.  
  802.     :name2
  803.      input Type the name you wish to call your computer: %%compuname
  804.  
  805.      inkey /K"YN" Read how to make it permanent? (Y/N) %%rep
  806.            iff %rep == Y then set compu=on^call bk-hlp name_text^return
  807.        elseiff %rep == N then return
  808.      endiff
  809. ::----------end of "name" sub-routine---------
  810.  
  811. ::----------sub-routine for recomposing-------
  812. :cmpr_pgm
  813. ::-----sub-routine to recompose the components
  814. ::     of the exclusion line according to the syntax
  815. ::     of each compression program supported.
  816.   iff %lenexc ge 54 .and. .%zip_pgm==.pkzip .or. .%zip_pgm==.uc then
  817.   gosub excl_file
  818.   elseiff %lenexc ge 54 .and. .%zip_pgm==.zip then
  819.   echo You must reduce your exclude line by %@eval[%lenexc-53] characters
  820.   echo (It is currently %lenexc)
  821.   cancel
  822.   endiff
  823.  if .%excl_file==.on return
  824. iff .%zip_pgm==.pkzip then
  825.  set exclude=%exclude -x%wo
  826.  return
  827. elseiff .%zip_pgm==.zip then
  828.  set exclude=%exclude \%wo
  829.  return
  830. elseiff .%zip_pgm==.uc then
  831.  set exclude=%exclude !%wo
  832.  return
  833. endiff
  834.  
  835. :: Note (April 29, 1994): exclude list does not work yet
  836. :: for script files in UC2; therefore make sure you do not
  837. :: leave undesired filenames in the edited list of updated files.
  838.  
  839. :excl_file
  840. echo %wo >> %excls_file
  841. set excl_file=on
  842. return
  843.  
  844. ::----sub-routine for excl_file----
  845. :mark_excl
  846. iff .%zip_pgm==.pkzip then
  847.  set exclude=-x@%excls_file
  848.  return
  849. elseiff .%zip_pgm==.zip then
  850.  :: no solution for longer exclude line in ZIP at the moment
  851.  ::echo %exclude > %excls_file
  852.  ::set exclude=-@ %excls_file
  853.  return
  854. elseiff .%zip_pgm==.uc then
  855.  set exclude=!@%excls_file
  856.  return
  857. endiff
  858.