home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / podstawy / dos / 4dos / 4uzytki / bkup12.exe / BKUP08.ZIP / BKUP08.BTM next >
Text File  |  1994-01-12  |  25KB  |  806 lines

  1. :  BKUP.BTM, version 8, January 1994
  2. :  (See also BKUP.DOC for detailed description, or see :HELP below,
  3. :   or type BKUP h ,or ?, [or i for syntax only].)
  4. :
  5. :  (1) Creates a ZIP archive for [a] all or part of the files saved today or
  6. :      [b] since a specified number of days back, or [c] since a specified
  7. :      date.
  8. :  (2) With the -x switch, extracts the ZIP archive(s). A selection menu
  9. :      will allow file selection, or aborting the operation (by ESC).
  10. :      For marking, use any of the SELECT keys (+, -, *, /, space).
  11. :  
  12. :  The user can specify (1) the drive to be searched (where new files
  13. :  were created), and (2) drive where the archive should be created. If
  14. :  no drives are specified, the default for searched drive is the default
  15. :  drive, and the deafult drive for creating the updates archive is B:.
  16. :  The same will apply for extraction of archives. The drive to be extracted
  17. :  from (where the archive is stored) will be drive B:, and the drive to
  18. :  extract to (that is, the drive to be updated) will be the default drive.
  19. :  If you wish to change any of these drives permanently, look for the
  20. :  '^^^' strings below and change there. If you just need to change the
  21. :  drives temporarily, use the command line options (see below, :help).
  22.  
  23. :  =====How BKUP.BTM proceeds=====
  24. :
  25. :  BKUP.BTM first creates a list of all the relevant files, then allows
  26. :  you to select one of the following options:
  27. :
  28. :  (*) Viewing (and handling) filenames on screen one by one
  29. :  (*) Use editor to edit results (results file)
  30. :  (*) View results before making any decision
  31. :  (*) Go immediately to archiving (no selection)
  32. :  (*) Quit (results file will remain intact)
  33. :
  34. :   If you choose viewing (and handling) files on screen, the following
  35. :   options are then available while working:
  36. :
  37. :  (*) Accept or omit a file
  38. :  (*) View a file before making a decision about it
  39. :  (*) Delete a file from disk (after or before viewing)
  40. :  (*) Stop selecting after a while and begin backing up (archiving)
  41. :  (*) View the list of selections at each item
  42. :  (*) Quit (results file will remain intact)
  43. :  
  44. :  When your decisions are done, this batch then
  45. :
  46. :  (*) Creates a MM-DD-YY.ZIP archive ('mm-dd-yy' stand for actual date)
  47. :      on drive B: (or change below to fit your needs).
  48. :                          OR
  49. :  (*) Updates MM-DD-YY.ZIP file, if it already exists, with the newly
  50. :      created list (this allows you every so often to backup files).
  51. :
  52. :  If the List file (the file with the list of filenames) exists (this
  53. :  batch leaves it intact), you are given the option to re-use it. This
  54. :  is very useful when you haven't created new files since your last backup,
  55. :  only worked on your previously created files.
  56. :
  57. :  Note: ===> If you need backup for a number of days back, run this batch
  58. :  with n, as indicated below.
  59. :
  60. : When extraction takes place (with switch -x),
  61. :
  62. :  (*) A selection menu will allow file selection, or aborting the
  63. :      operation (by ESC). For marking, use any of the SELECT keys
  64. :      (+, -, *, /, space).
  65. :  (*) The extracted file is marked by a 4DOS description. If you have
  66. :      given your computer a "name", BKUP registers this name in the file
  67. :      description upon completion of extraction. It will then stop you if
  68. :      you try to extract it again to the same computer, asking you if you
  69. :      wish to proceed, or go right to extraction if it's a different
  70. :      computer. If the computer has no "name", it will always ask you if you
  71. :      wish to extract even if it's the wrong computer. You can then "force
  72. :      extract" it. If the updated files happen to already exist on the disk,
  73. :      they will not be extracted anyway (even of you "force extract").
  74.  
  75. :      See BKUP.DOC or type BKUP /h for explanations about naming a
  76. :      computer, or just run BKUP and follow the questions.
  77. :
  78. :      Each time the archive is updated, it will then be marked as such,
  79. :      allowing subsequent extractions again.
  80. :
  81. : =====Customizing=====
  82. :      You can change any of the parameters where '^^^' strings appear.
  83. :
  84. : =====PCTODAY.EXE=====
  85. :      Note: This batch needs PCTODAY.EXE (c) by Ethan Winer.
  86. :      (downloadable from SIMTEL20: <msdos.pcmag>VOL10N21.ZIP)
  87. :
  88. :  Initiated by Ron Zweig (ron@ccsg.tau.ac.il).
  89. :  Edited and augmented by Itamar Even-Zohar (itiez@ccsg.tau.ac.il).
  90. :
  91. :  Version 7, November 1993: Fuller filename display and computer "name"
  92. :  added for better information about which computer has been updated.
  93. :  Version 8, January 1994: (1) A safer procedure for defining a temporary
  94. :  drive added; (2) A better file selection menu replace the one-at-time
  95. :  selection menu (thanks due to Sam Wilson; see label ":operate" for
  96. :  details).
  97. :: ------------------------------------------------------------------
  98. :  The actual batch begins here
  99. :: ------------------------------------------------------------------
  100. :pctoday?
  101. rem     Finds out if PCTODAY.EXE is found on your path.
  102. iff "%@search[pctoday.exe]" =="" then
  103. beep
  104. text
  105.  
  106.    This batch needs PCTODAY.EXE (c) by Ethan Winer
  107.    (downloadable from SIMTEL20: <msdos.pcmag>VOL10N21.ZIP)
  108. endtext
  109. quit
  110. endiff
  111.  
  112. iff %@index[%1,h] ge 0 .or. %@index[%1,?] ge 0 then
  113.   goto help
  114. elseiff %@index[%1,i] ge 0 then
  115.   goto help_i
  116. endiff
  117.  
  118. :compu_name
  119. if "%compuname"=="" gosub compuname
  120.  
  121. setlocal
  122.  
  123. :set_temp
  124. if "%temp"=="" gosub setramd
  125. : (temporary drive will be defined %_lastdisk if it is not remote
  126. :  or cd-rom drive.)
  127. if not direxist %temp (set temp=^gosub setramd)
  128. iff "%@substr[%temp,0,-1]" == "\" then
  129. set temp=%temp%
  130.  else
  131. set temp=%temp\
  132. endiff
  133.  
  134. iff %@index[%1,x] ge 0 then
  135.   goto extract_f
  136. endiff
  137.  
  138. gosub check_args
  139.  
  140. iff %@index[%1,/s] ge 0 .or. %@index[%1,-s] ge 0 then
  141.    set zz=%@substr[%1,2]
  142.    goto _date2
  143. elseiff %@index[%1,s] eq 0 then
  144.    set zz=%@substr[%1,1]
  145.    goto _date2
  146. else
  147.    goto _date1
  148. endiff
  149.  
  150. :set_defaults
  151.   :_date1
  152. set xx=%@date[%_date]
  153. :      This is today'y date in full numbers since 1-1-1980
  154. set zz=%@makedate[%@eval[%xx-%1]]
  155. :      This is the actual date desired for the archive file.
  156. :      If no number of days indicated by user, you get today's
  157. :      date again.
  158. if %@index[%zz,0] eq 0 set zz=%@substr[%zz,1]
  159. :      If a zero (0) is contained on the first position (01, etc.),
  160. :      it will be removed.
  161.   :_date2
  162. set rsp=%temp%updates.rsp
  163. set zipfn=%temp%updates.zip
  164. set tmpf=%@unique[%temp]
  165. if exist %zipfn del /q %zipfn
  166. rem  (This is just a precaution; this file is moved anyway, if batch
  167. rem  terminates in a normal way.)
  168.  
  169. :modifiables
  170. rem  ==> Modify any of the following variables to your preference.
  171. set exclude=-x*.tmp -x*.00? -x*.bak -xpctoday.* -x*.zip -xkermit.*
  172. rem         (filepatterns excluded from updating)
  173. set dr=%archive_drive
  174.     iff %@index[%dr,:] eq 1 then
  175.         set dr=%@substr[%dr,1,-1]
  176.     endiff
  177. rem    ('archive_drive' was determined by the 'checking drives' subroutines.
  178. rem    This is the drive for the final ZIP archive; the temporary file will
  179. rem    be created on your 'temp' drive, if it exists, else on deafult
  180. rem    drive.)
  181. set pkz=pkzip -P -ex
  182. rem    (archiving with pathnames; erase '-P' if no pathnames desired)
  183. set colordir=dirs:bright white;zip:black on white;
  184. set edt=ped.exe
  185. rem     ^^^^^^^ (replace ped.exe by your preferred editor)
  186.  
  187. :re-use?
  188. cls
  189. if exist %rsp goto ask
  190. goto accumulate
  191.  
  192. :ask
  193. echo.
  194. gosub legenda
  195. screen 2 0
  196. 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
  197.     iff %rep == Q then cls^screen 2 0^set ech=echo Stopped by user^ goto end
  198. elseiff %rep == Y then goto backup
  199. elseiff %rep == V then *list %rsp^cls^goto ask
  200. elseiff %rep == E then %edt %rsp^goto backup
  201. elseiff %rep == S then echo. >%tmpf^cls^set num=0^goto edit
  202. elseiff %rep == N goto accumulate
  203. endiff
  204.  
  205. :accumulate
  206. cls
  207.   iff %_monitor == mono then
  208. screen 4 5 [ making a list of all new files created since %zz ]
  209. screen 3 5 Working ...
  210.   else
  211. scrput 4 5 gre on whi [ making a list of all new files created since %zz ]
  212. scrput 3 5 blu on whi  Working ...
  213.   endiff
  214.  
  215. :make_list
  216. pctoday %search_drive: /d %zz > %rsp
  217. rem (Pctoday's syntax is: PCTODAY [D:] [/D mm-dd-yyyy] [> filename.ext])
  218.   iff %@lines[%rsp] lt 0 then
  219.   set ech=scrput 3 17 bri whi on bla No files were found for/since %zz!
  220.   del /q %rsp
  221.   goto end
  222.   endiff
  223. scrput 3 17 bri whi on bla List created as %@upper[%rsp]
  224.  
  225. :edit?
  226. screen 6 5 Select an option (press first letter):
  227. screen 7 5
  228. text
  229.  
  230.    Screen  select files on screen (one file after another)
  231.            (this option allows viewing and deleting)
  232.    Edit    edit results file via editor
  233.    View    view results before making any decision
  234.    Go      go to immediate archiving (no selection)
  235.    Quit    stop now (results file will remain intact)
  236. endtext
  237. screen 16 3
  238. inkey /K"SEQGV[ESC][Enter]" Your choice?  %%rep
  239. iff %rep == G then goto backup
  240.   elseiff %rep == S .or. %rep == @28 then
  241.     echo. >%tmpf
  242.     cls
  243.     set num=0
  244.     goto edit
  245.   elseiff %rep == E then
  246.     %edt %rsp
  247.     goto backup
  248.   elseiff %rep == V then
  249.     *list %rsp
  250.     cls^goto edit?
  251.   elseiff %rep == Q .or. %rep == %@char[27] then
  252.     set ech=echo Stopped by user^goto end
  253. endiff
  254.  
  255. :edit
  256. rem   This procedure displays all the files saved today, one by one,
  257. :     allowing you to (a) select only those you wish to back up, or
  258. :     (b) delete, or (c) view a file before making a decision, or
  259. :     (d) view the list of selections, or (e) stop selecting and go
  260. :     to immediate archiving, or (f) quit.
  261. :
  262. iff %@eval[%num] gt %@lines[%rsp] then
  263.   move /q %tmpf %rsp
  264.   goto backup
  265.   endiff
  266. set fn=%@line[%rsp,%num]
  267. if .%fn==. (set num=%@eval[%num+1]^goto edit)
  268. scrput 0 0 black on white  Accept=A/enter Omit=O/Esc D=Delete V=View G=Begin archiving L=View list Q=Quit 
  269. echo.
  270.   iff %_row lt 2 then
  271.   screen 2 0
  272.   endiff
  273. echo ==`>` %fn
  274.   iff %_row ge %@eval[%_rows -1] then
  275.   cls
  276.   goto edit^endiff
  277. inkey /K"YNAODVGLQ[ESC][Enter]" A(ccept)? O(mit)? D(elete)? V(iew)? G(o)? (L)ist Q(uit)?  %%rep
  278. iff %rep == %@char[27] .or. %rep == O .or. %rep == N then
  279.      set num=%@eval[%num +1]
  280.      goto edit
  281.      :REM: see label ':note' below
  282. elseiff %rep == A .or. %rep == @28 .or. %rep == Y then
  283.      echo %fn >>%tmpf
  284.      set num=%@eval[%num +1]
  285.      goto edit
  286. elseiff %rep == D then
  287.      del /q %fn
  288.      echo ==`>` %fn deleted^echo.
  289.      set num=%@eval[%num +1]
  290.      goto edit
  291. elseiff %rep == V then
  292.      *list %fn
  293.      echo.^goto edit
  294. elseiff %rep == G then
  295.      set num=%@eval[%@lines[%rsp]+1]
  296.      goto edit
  297. elseiff %rep == L then
  298.      *list %tmpf
  299.      echo.^goto edit
  300. elseiff %rep == Q then set ech=echo Stopped by user^goto end
  301. endiff
  302.  
  303. :backup
  304. cdd %temp
  305. rem  (Checking if there are any file at all to back up)
  306.   gosub void
  307.   
  308. :update
  309. rem  (If zip archive exists on target diskette, update it)
  310.   gosub check_drive
  311. iff exist %dr:\%zz.zip then
  312. set fn=%dr:\%zz.zip
  313. set state=old
  314. set pkz=pkzip -b%temp -P -u -ex
  315. cls
  316. gosub void
  317. %pkz %exclude %dr:\%zz.zip @%rsp
  318. gosub success
  319. goto end
  320. endiff
  321.  
  322. :create_zip
  323. cls
  324. gosub void
  325. %pkz %exclude %zipfn @%rsp
  326. gosub success
  327.  
  328. :check_room
  329. rem  (Checking if there is room for backup file on target)
  330. iff %@diskfree[%dr:,b] lt %@filesize[%zipfn,b] then
  331. set ech=Echo No room on drive %@upper[%dr:]! %zipfn was left on %temp
  332.   goto end
  333.   else
  334. set ech=echo Backup archive created on drive %@upper[%dr:]
  335. endiff
  336.  
  337. :move_zip
  338. gosub check_drive
  339. move /q %zipfn %dr:\%zz.zip
  340. set brand=upd
  341. set fn=%dr:\%zz.zip
  342. gosub brand
  343.  
  344. :end
  345. if exist %tmpf del /q %tmpf
  346. echo.
  347. %ech
  348. echo.
  349.   iff %@index[%ech,Stopped] ge 0 then goto interrupt
  350.   elseiff %@index[%ech,No new] ge 0 then goto interrupt
  351.   elseiff %@index[%ech,No files we] ge 0 then goto interrupt
  352.   elseiff %@index[%ech,could not be] ge 0 then goto interrupt
  353.   endiff
  354. if exist %dr:\%zz.zip dir /klm %dr:\%zz.zip
  355. echo.
  356. :interrupt
  357. endlocal
  358. quit
  359.  
  360. :===========End of archiving part===================
  361.  
  362. :===========Begin extraction part===================
  363. :extract_f
  364. :: Since version 8, a menu will pop up even if the archive diskette
  365. :: contains only one archive (zip) file. This will allow canceling
  366. :: extraction (by ESC). If you prefer the older procedure, you will
  367. :: have to add one more preliminary step before "select...".
  368.  
  369. :set_extr_drive
  370. gosub check_args_x
  371.  
  372. if not exist %arc_dr:*-?*-??.zip goto failure
  373.  
  374. :extract
  375. cdd %_disk:\
  376. set fnt=%@unique[%temp%]
  377. select /d dir /km >>%fnt (%arc_dr:*-?*-??.zip)
  378. set count=%@lines[%fnt]
  379. :
  380. iff %@lines[%fnt] eq 0 then
  381. goto immediate
  382. else
  383. goto select_file
  384. endiff
  385.  
  386. :immediate
  387. cls
  388. set fn=%arc_dr:%@line[%fnt,0]
  389. set fnn=%@substr[%fn,0,15]
  390. set fn=%fnn
  391. scrput 1 0 bla on whi Extracting now NEW files from %fnn to Drive %targ_dr:
  392. rem        ^^^^^^^^^^ (change colors to suit your preference)
  393. screen 2 0
  394.  
  395. if %@index[%@descript[%fn],Extracted] ge 0 gosub continue?
  396.  
  397. cdd %targ_dr:\
  398. pkunzip -d -n %fnn >&>nul
  399. set fn=%fnn
  400.  gosub success_x
  401. goto end_x
  402.  
  403. :select_file
  404. cls
  405. cdd %targ_dr:\
  406. set num=-1
  407. :operate
  408. :: This procedure written at the suggestion of Sam Wilson
  409. :: (SAM.WILSON@emerald.com), 9 Jan 1994, to whom I am grateful.
  410. :: The procedure replaces a previous one, with @select, which
  411. :: allowed file selection only one by one.
  412. set num=%@eval[%num+1]
  413. set fn=%@line[%fnt,%num]
  414. if .%fn==.**EOF** goto end_x
  415. set fn=%arc_dr:%@substr[%fn,0,15]
  416. cls
  417. scrput 1 0 bla on whi Extracting now NEW files from %fn to Drive %targ_dr:
  418. rem        ^^^^^^^^^^ (change colors to suit your preference)
  419. screen 2 0
  420. if %@index[%@descript[%fn],Extracted] ge 0 gosub continue?
  421. pkunzip -d -n %fn
  422. gosub success_x
  423. goto operate
  424.  
  425. :failure
  426. echo.
  427. echo  No backup files found on drive %arc_dr:
  428. endlocal
  429. quit
  430.  
  431. :end_x
  432. del /q %fnt
  433. endlocal
  434. cls
  435. quit
  436. :===========End of the extraction part==================
  437.  
  438. :==================SUB-ROUTINES=========================
  439. :-------sub-routine for naming your computer------------
  440. :compuname
  441. cls
  442. screen 2 0
  443. inkey /K"YN" Your computer has no "name"; Give it a name now? (Y/N) %%rep
  444.     iff %rep == Y then goto name2
  445. elseiff %rep == N then return
  446. endiff
  447.  
  448. :name2
  449. input Type the name you wish to call your computer: %%compuname
  450.  
  451. inkey /K"YN" Read how to make it permanent? (Y/N) %%rep
  452.     iff %rep == Y then set compu=on^goto name_text^return
  453. elseiff %rep == N then return
  454. endiff
  455. :-------sub-routines for the archiving part-------------
  456. :legenda
  457. screen 17 0
  458. text
  459.     Y == extant list will immediately be used for archiving
  460.     N == a new list of files will be generated
  461.     V == the extant list will be viewed, then you can make decision
  462.     E == the list will be called by an editor
  463.     S == the list will be called to screen, one file after the other
  464.     Q == quit
  465. endtext
  466. drawbox 16 0 23 73 1 whi on bla
  467. return
  468. :-------------------------------------------------------
  469. :check_drive
  470. iff %@ready[%dr:] eq 0 then
  471.    echo Insert diskette to Drive %@upper[%dr:], and
  472.    pause
  473.    endiff
  474. if not .%@search[upname.btm]==. call upname
  475. return
  476. :-------------------------------------------------------
  477. :success
  478. rem     Checking results of archiving (with pkzip)
  479.  iff errorlevel eq 12 then
  480.     set ech=Echo (No new or updated files have been created)
  481.  elseiff errorlevel ge 4 .and. errorlevel le 11 then
  482.     set ech=Echo (Backup archive could not be created / updated)
  483.     goto end
  484.  elseiff errorlevel ge 20 then
  485.     set ech=Echo (Backup archive could not be created / updated)
  486.     goto end
  487.  else
  488.     if .%state==.old (set brand=upd^gosub brand)
  489.     set ech=echo Backup archive updated on drive %@upper[%dr:]
  490.  endiff
  491. return
  492. :-----------------------------------------------------------
  493. :--------sub-sub-routine for marking a file----
  494. : This sub-routine is designed to handle marking files. To save space,
  495. : it handles both "Updated..", and "Extracted" descriptions. This can
  496. : be implemented if the different formulas are first saved on variables.
  497. :brand
  498. iff .%brand==.upd then
  499.   set mark1=Updated
  500.   set mark2=Updated from:
  501.   set mark3=Extracted
  502. elseiff .%brand==.ext then
  503.   set mark1=Extracted
  504.   set mark2=Extracted to:
  505.   set mark3=Updated
  506. endiff
  507.  
  508. set dscr=%@descript[%fn]
  509. if "%dscr"=="" goto 1st_desc
  510. iff %@word[0,%dscr] eq %mark3 .or. "%brand" eq "upd" then
  511.   set %dscr=
  512.   goto 1st_desc
  513. endiff
  514.  
  515. iff %@word[0,%dscr] eq %mark1 then
  516. goto add_compu
  517. endiff
  518.  
  519. :add_compu
  520. if .%compuname==. (describe %fn "%dscr; %mark1; "^return)
  521. describe %fn "%dscr %compuname; "
  522. return
  523.  
  524. :1st_desc
  525. iff .%compuname==. then
  526.     describe %fn "%mark1; "
  527.     return
  528. else
  529.     describe %fn "%mark2 %compuname; "
  530.     return
  531. endiff
  532. ----:canceled subroutine/ left here for prospective editors-----
  533. :void
  534. iff %@lines[%rsp] lt 0 .or. %@lines[%rsp] le 0 .and. %@len[%@line[%rsp,0]] lt 1 then
  535. set ech=scrput %@eval[%_row+1] 2 bri whi on bla No files were found /selected to back up!
  536. echo.
  537. del /q %rsp
  538. goto end
  539.   else
  540.   return
  541. endiff
  542. :---------(a note on canceled sub-routine)-----------
  543. :note
  544. REM  This sub-routine is canceled, because although it provides
  545. REM  a more elegant loop then repeating these commands with each
  546. REM  'elseiff' test, it blocks 4dos internal keystack. Therefore,
  547. REM  rather than augmenting the keystack size (and subsequently
  548. REM  4dos resident portion), I preferred the less elegant solution,
  549. REM  where the same text is repeated at each test. I've left this
  550. REM  subroutine here, however, as a "methodological reminder".
  551. :::repeat
  552. :::set num=%@eval[%num +1]
  553. :::goto edit
  554. :::return
  555. :
  556. :-----------sub-routines for the extraction part-----
  557. :success_x
  558. iff errorlevel gt 10 .and. errorlevel lt 12 then
  559. echo (No NEW files found for extracting in %fn)
  560. if %count ge 0 (echo Press any key to continue...^pause>nul)
  561. else
  562. echo All NEW files from %fn extracted to %targ_dr:
  563. set brand=ext
  564. gosub brand
  565. endiff
  566. return
  567.  
  568. :continue?
  569. iff %@index[%@descript[%fn],%compuname] ge 0 then
  570. goto force?
  571. else
  572. return
  573. endiff
  574.  
  575. :force?
  576. inkey /K"EDQ" File %@upper[%fn] already extracted. E(xtract), D(elete), Q(uit)? %%rsp
  577. if %rsp == E return
  578. if %rsp == Q (echo Forced extraction canceled^goto operate)
  579. if %rsp == D (del /q %fn^echo File %fn deleted^goto operate)
  580.  
  581. :-----------SUBROUTINES FOR DRIVE CHECKING-----------
  582. :check_args
  583. iff %@eval[%#] eq 0 then
  584. gosub defaults
  585. goto start_pro
  586.   elseiff %@eval[%#] eq 1 then
  587.   goto check_1
  588.   elseiff %@eval[%#] eq 2 then
  589.   goto check_2
  590.   elseiff %@eval[%#] eq 3 then
  591.   goto check_3
  592. endiff
  593.  
  594. :ask_drives
  595. inkey Search Drive (letter only)? %%se_dr
  596. inkey Archive Drive (letter only)? %%arc_dr
  597.  set search_drive=%se_dr
  598.  set archive_drive=%arc_dr
  599. return
  600.  
  601. :check_1
  602. iff not %@index[%1,:] ge 0 then
  603.  gosub defaults
  604. goto start_pro
  605.    else
  606.  echo Only one drive specified!
  607.  gosub ask_drives
  608.  shift
  609. goto start_pro
  610. endiff
  611.  
  612. :check_2
  613. iff %@index[%1,:] ge 0 .xor. %@index[%2,:] ge 0 then
  614.  gosub ask_drives
  615. shift 1
  616. goto start_pro
  617.    else
  618.  set search_drive=%1
  619.  set archive_drive=%2
  620.  shift 2
  621.  goto start_pro
  622. endiff
  623.  
  624. :check_3
  625. set search_drive=%1
  626. set archive_drive=%2
  627. shift 2
  628.  
  629. :start_pro
  630. return
  631. rem (go back to the beginning of updating)
  632. :----subroutines for defining temporary drive----
  633. :setramd
  634. :: (finds the first non-remote available drive/disk)
  635. set work=ZYXWVUTSRQPONMLKJIHGFEDC
  636. set dr=%_lastdisk
  637. :ramdloop
  638. set place=%@index[%work,%dr]
  639. if %_4ver lt 5 set n=0
  640. if %_4ver ge 5 set n=1
  641. iff %@removable[%dr] eq %n .and. %@cdrom[%dr] eq 0 .and. %@remote[%dr] eq 0 .and. %@ready[%dr] eq 1 then
  642.   set ramd=%dr
  643.   goto ramdname
  644.  else
  645.   set place=%@eval[%place+1]
  646.   set dr=%@substr[%work,%place,1]
  647. endiff
  648. if %place lt 24 goto ramdloop
  649. :ramdname
  650. set temp=%ramd:
  651. return
  652. :----subroutines for checking drives for extraction---
  653. :check_args_x
  654. shift
  655. iff %@eval[%#] eq 0 then
  656. gosub defaults_x
  657. goto start_ext
  658.   elseiff %@eval[%#] eq 1 then
  659.   goto check_1_x
  660.   elseiff %@eval[%#] eq 2 then
  661.   goto check_2_x
  662. endiff
  663.  
  664. :ask_drives_x
  665. inkey Drive to extract to (letter only)? %%targ_dr
  666. inkey Drive to extract from (letter only)? %%arc_dr
  667. return
  668.  
  669. :check_1_x
  670. iff not %@index[%1,:] ge 0 then
  671.  gosub defaults_x
  672. goto start_ext
  673.    else
  674.  echo Only one drive specified!
  675.  gosub ask_drives_x
  676.  shift
  677. goto start_ext
  678. endiff
  679.  
  680. :check_2_x
  681. iff %@index[%1,:] ge 0 .xor. %@index[%2,:] ge 0 then
  682.  gosub ask_drives_x
  683. shift 1
  684. goto start_ext
  685.    else
  686.  set targ_dr=%@substr[%1,1,-1]
  687.  set arc_dr=%@substr[%2,1,-1]
  688.  shift 2
  689.  goto start_ext
  690. endiff
  691.  
  692. :start_ext
  693. return
  694. rem (go back to the beginning of updating)
  695.  
  696. :----sub-sub-routines to 'checking drives'---
  697. :defaults
  698. set search_drive=%_disk
  699. rem              ^^^ modify as necessary
  700. set archive_drive=B:
  701. rem               ^^^ modify as necessary
  702. return
  703.  
  704. :defaults_x
  705. set targ_dr=%_disk
  706. rem         ^^^ modify as necessary
  707. set arc_dr=B
  708. rem       ^^^ modify as necessary
  709. return
  710. :------------end of all SUB-ROUTINES-----------------
  711.  
  712. :====== HELP =====
  713. :help
  714. cls
  715. screen 3 0
  716. text
  717.  
  718.    BKUP.BTM
  719.    (1) Creates a ZIP archive for [a] all or part of the files saved
  720.        today, or [b] since a specified number of days back, or
  721.        [c] since a specified date.
  722.    (2) With the -x switch, extracts the ZIP archive(s).
  723.  
  724.    The user can specify (1) the drive to be searched (where new files
  725.    were created), and (2) drive where the archive should be created. If
  726.    no drives are specified, the default for searched drive is the default
  727.    drive, and the deafult drive for creating the updates archive is B:.
  728.    The same will apply for extraction of archives. The drive to be extracted
  729.    from (where the archive is stored) will be drive B:, and the drive to
  730.    extract to (that is, the drive to be updated) will be the default drive.
  731.    If you wish to change any of these drives permanently, look for the
  732.    '^^^' strings and change there. If you just need to change the
  733.    drives temporarily, use the command line options (press any key for more).
  734.    You can also devise aliases for your preferred updating and extraction
  735.    drives, and avoid customization of this batch altogether.
  736.  
  737.  
  738. endtext
  739.  
  740. echo (Press any key for USAGE instructions)
  741. pause >nul
  742.  
  743. :help_i
  744. cls
  745. text
  746. USAGE:
  747.  
  748. BKUP [<search_drive:> <archive_drive:>] [options]
  749.  where,
  750. <search_drive:>  is the drive which should be seached for files
  751. <archive_drive:> is the drive where the archive should be created
  752.  
  753. Options are:
  754. n|-sMM-DD-YY|h|?|i|-x [<target_drive> <archive_drive:>]
  755.  where
  756.   [none] will create archive on drive B: for today's files on default drive.
  757.      'n' stands for 'number of days back from today'.  For example, 'BK 3'
  758.          will create a list since three days back from today's date.
  759.     '-s' (or /s or only s) stands for 'since', followed by date, in the
  760.          MM-DD-YY (month-day-year) format. For example: BK s01-29-90 will
  761.          create a list of files created since 29 January 1990.
  762.      'h' (or ?, or i) stands for 'help'. 'i' shows usage screen only.
  763.     '-x' (or /x or only x) extracts archive(s).
  764.          <target_drive> is the drive to extract TO.
  765.          <archive_drive:> is the drive to extract FROM.
  766.  
  767. For full description see BKUP.DOC.
  768.  
  769. endtext
  770. inkey /K"YN[ESC] [Enter]" ==`>` For instructions on "name giving" press SPACEBAR; ESC to quit. %%rep
  771.     iff %rep == %@char[27] then quit
  772. elseiff %rep == @57 then goto name_text
  773. endiff
  774.  
  775. :name_text
  776. cls
  777. screen 10 0
  778. text
  779.      Giving a "name" to your computers will make it easier for you
  780.      to know which of your computers have been updated with BKUP.
  781.  
  782.      You can enter your computer name each time this batch is run,
  783.      or make your computer "name" permanent. To do this, add the
  784.      following line to your AUTOEXEC.BAT file:
  785.  
  786.      set compuname=name
  787.  
  788.      Where "name" stands for the actual name you wish to give it.
  789.  
  790.  
  791. endtext
  792.  
  793. if not %compu=on goto help_p
  794.  
  795. inkey /K"YN[ESC] [Enter]" ==`>` Press Enter to continue; ESC to quit %%rep
  796.     iff %rep == %@char[27] then quit
  797. elseiff %rep == @28 then return >&>nul
  798. endiff
  799.  
  800. :help_p
  801. inkey /K"P[ESC] [Enter]" ==`>` Press Enter or ESC to quit, P for previous HELP screen %%rep
  802.     iff %rep == %@char[27] .or. %rep == @28 then quit
  803. elseiff %rep == p then goto help
  804. endiff
  805. :=====end HELP====
  806.