home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / podstawy / dos / 4dos / 4uzytki / ez-btm11.exe / CH.BTM < prev    next >
Text File  |  1993-12-06  |  3KB  |  103 lines

  1. : CH.BTM
  2. : Written by Robert Chung <chung@QAL.BERKELEY.EDU>.
  3. : **New version**, November 30, 1993
  4. :
  5. :begin
  6. cdd %_disk:
  7. if %@index[%&,/?] != -1 goto HELP
  8. set fn=%@path[%@search[%0]]dirlist
  9. if not exist %fn .or. %@index[%&,/s] != -1 gosub SCANDIR
  10. *cdd %1 >&>nul ^if %_? lt 1 (unset fn^quit)
  11.  
  12. :popup dirlist if no argument
  13. iff %#==0 then
  14.   %@word[-0, %@select[%fn%,1,40,23,70,Directory Tree]]
  15. else
  16.   :check arg for *
  17.   iff %@index[%1,*] lt 0 then
  18.     :no asterisk
  19.     find /i "\%1" < %fn% | input %%cmdline
  20.     set cmdline=%@word[-0, %cmdline]
  21.     %cmdline
  22.     iff .%cmdline==. then
  23.       %@word[-0, %@select[%fn%,1,40,23,70,\%1 not found]]
  24.     endiff
  25.   else
  26.     :asterisk found, so trim it off the end
  27.     set argc=%@substr[%1,0,%@eval[%@len[%1]-1]]
  28.     find/i "\%argc" < %fn% | tee %fn%2 | input %%cmdline
  29.     set cmdline=%@word[-0, %cmdline]
  30.     iff %@lines[%fn%2] gt 0 then
  31.       (for %i in (@%fn%2) (echo %@word[-0, %i])) >%fn%3
  32.       %@select[%fn%3,1,40,23,70,%1]
  33.     else
  34.       %cmdline
  35.       iff .%cmdline==. then
  36.         %@word[-0, %@select[%fn%,1,40,23,70,\%argc not found]]
  37.       endiff
  38.     endiff
  39.     del /q %fn%2 %fn%3 >&> nul
  40.     unset argc
  41.   endiff
  42. endiff
  43.  
  44. unset fn
  45. quit
  46.  
  47. :help
  48. text
  49.  
  50.   CH [subdir[*]] [/scan] [/?]
  51.  
  52.      Quickly changes subdirectory if given a partial name. If no
  53.      argument is given CH displays a selectable popup of directories.
  54.  
  55.        /scan  forces a rescanning of subdirectory structure.
  56.        /?     displays this message.
  57.        *      appended to the argument shows a popup if there is
  58.               more than one match. Otherwise, it changes to first
  59.               matching subdirectory.
  60.  
  61.      Examples: ch here  changes directory to d:\more\stuff\here
  62.                         from c:\there.
  63.  
  64.                ch st*   changes to d:\more\stuff if it's the
  65.                         only match, otherwise shows a popup
  66.                         of d:\more\stuff, its subdirectories
  67.                         if any, and other matches.
  68. endtext
  69. quit
  70.  
  71. :scandir
  72.   pushd
  73.   if %@index[%1,/s] = 0 shift
  74.   :The next two lines get the drives to be scanned...
  75.   set drives=C D E F G H I J K L M N O P Q R S T U V W X Y Z
  76.   set drives=%@substr[%drives,0,%@eval[1+%@index[%drives,%_lastdisk]]]
  77.   echo Saving directory list for drives (%drives%) in %fn
  78.   (for %drv in (%drives%) do (%drv:\^global /iq echo %_cwds)) > %fn%2
  79.   :relevant tree output is uppercase; use find /v to filter out lowercase
  80.   (for %drv in (%drives%) do (tree %drv:\)) | find /v "e" > %fn%3
  81.   set sp=%@char[255]%%@char[255]%%@char[255]%%@char[255]%%@char[255]%
  82.   set sp=%sp%%sp%%sp%%sp%%sp%%sp%%sp%%sp%
  83.   set j=-1
  84.   (for %i in (@%fn%3) (set j=%@eval[1+%j]^scrput %_row 0 %_fg on %_bg %@line[%fn%2,%j] %sp%^echo %i %@substr[%sp,%@len[%i]] %@line[%fn%2,%j]))>%fn
  85.   scrput %_row 0 %_fg on %_bg %sp%
  86.   del /q %fn%2 %fn%3 
  87.   unset j, sp, drives
  88.   popd
  89. return
  90.  
  91. text
  92.  
  93.                                   Notes
  94.  
  95.  HistWinColor in 4dos.ini sets color of popup.
  96.  The filename "dirlist" can be changed, but I create temporary files based
  97.    on this name (which I subsequently delete) by appending a 1 char suffix.
  98.  Gosh, I hope no one uses the environmental variable "fn" for anything
  99. endtext
  100.  
  101.  
  102.  
  103.