home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / podstawy / dos / 4dos / 4uzytki / 4dhs10.exe / HS.BTM < prev   
Text File  |  1993-12-20  |  6KB  |  220 lines

  1.               :::: hindsite  version 1.0 ::::
  2.                   :: Copyright Bob Larson ::
  3.                     :: blarson@uiuc.edu ::
  4.                     :: 20 December 1993 ::
  5.  
  6.                         ::::: Main ::::
  7. *on break *goto clean_up
  8. @setdos /v0
  9. setlocal
  10. unalias *
  11.  
  12. :::  The following line is all the configuration required.
  13. :::  Modify to point to the location of your grep program.
  14. :::  The -i flag makes grep searches case insensitive.
  15. set grep_prog=grep -i
  16.  
  17. gosub check_0
  18. iff "%@substr[%&,0,1]" == "!" then 
  19.             :::: history recall
  20.     gosub check_hist
  21.     gosub get_hist
  22. else 
  23.             :::: command completion
  24.     gosub check_cc
  25.     gosub parse_cc
  26.     gosub wildcards
  27.     gosub search_commands
  28. endiff
  29. gosub clean_up
  30. quit
  31.                     :::: end main ::::
  32.  
  33.  
  34.  
  35.                 :::: subroutine check_0 ::::
  36. :::: Checks for 4dos ver.5, kstack.com loaded, 1 or more command
  37. :::: line arguments.
  38. :check_0
  39.  
  40. iff %_4ver LT 5 .or.  %_kstack == 0 then
  41.     echo hindsite requires 4dos version 5.0 or greater and
  42.     echo requires that kstack.com is loaded.
  43.     echo 4dos version detected: %_4ver
  44.     echo kstack status: %_kstack
  45.     echo (1=loaded, 0=not loaded)
  46.     goto clean_up
  47. elseiff %# == 0 then 
  48.     echo No arguments detected 
  49.     goto clean_up
  50. endiff
  51. return
  52.                     :::: end check_0 ::::
  53.  
  54.                 :::: Subroutine check_hist ::::
  55. :::: Called by main.  Gets input source for history recall.
  56. :check_hist
  57.  
  58. iff "%_hlogfile" == "" then 
  59.     set hist_in=%@unique[%temp]
  60.     history >! %hist_in
  61.     set del_me=%hist_in
  62. else
  63.     set hist_in=%_hlogfile
  64. endiff
  65. return
  66.                 :::: end check_hist ::::
  67.  
  68.  
  69.                 :::: subroutine check_cc ::::
  70. :::: Called by main for command completion.
  71. :::: checks for %cmd_list and file it points to ::::
  72. :check_cc
  73.  
  74. iff "%cmd_list" == "" then
  75.     echo Environment variable %%cmd_list not set
  76.     echo Please run cache-c.btm  [cmd_file] first    
  77.     goto clean_up
  78. elseiff not exist %cmd_list then
  79.     echo File %cmd_list not found
  80.     echo Please run cache-c.btm [cmd_file] first    
  81.     goto_clean_up
  82. endiff
  83. return
  84.                 :::: end check_cc ::::
  85.  
  86.             :::: subroutine parse_cc ::::
  87. :::: Called by main for command completion.
  88. :::: Splits command line into parts.  %_2complete holds the
  89. :::: original command without path or extention, %_tail holds the 
  90. :::: rest of the command line, if present.  If path is specified,
  91. :::: use file comp. window instead of cache
  92. :parse_cc
  93.  
  94. set _2complete=%[1]
  95. set _tail=%2& >& nul
  96.  
  97. :::: if a path is specified, use the file completion pop-up
  98. iff "%@path[%1]" != "" then
  99.     set result=%@path[%1]
  100.     set key_tail=home f7
  101.     gosub clean_up
  102. endiff
  103. return
  104.             :::: end parse_cc ::::
  105.  
  106.             :::: subroutine wildcards ::::
  107. :::: Called by main for cc.  Checks for wildcards and extensions.
  108. :::: Translates wildcards and to equivilent grep characters.
  109. :::: Escapes "."
  110. :wildcards
  111.  
  112. iff "%@index[%_2complete,*]" == "-1" .and. "%@index[%_2complete,?]" == "-1" then
  113.     if "%@index[%_2complete,.]" == "-1" set _2grep=%_2complete
  114. else
  115. :::: %_2grep must be modified for grepping if %2_complete
  116. :::: contains any "*", "?" , or "." chars:
  117. ::::  *  -> .*
  118. ::::  ?  -> .
  119. ::::  . ->  \.
  120.     set pos=%@eval[0-1]
  121.     do until "%pos" == "%@len[%_2complete]" 
  122.         set pos=%@inc[%pos]
  123.         set letter=%@substr[%_2complete,%pos,1]
  124.  
  125.         iff  "%letter" == "?" then
  126.             set _2grep=%[_2grep].
  127.         elseiff "%letter" == "*" then
  128.             set _2grep=%[_2grep].*
  129.         elseiff "%letter" == "." then
  130.             set _2grep=%[_2grep]\.
  131.         else
  132.             set _2grep=%[_2grep]%[letter]
  133.         endiff
  134.     enddo 
  135. endiff
  136. return
  137.                 :::: end wildcards ::::
  138.  
  139.  
  140.             :::: subroutine search_commands ::::
  141. :::: Greps the %cmd_list file for lines matching 
  142. :::: %_2grep at the beginning of the line (%=^) only.  
  143. :::: Output writes to  file %short_list
  144. :search_commands
  145.  
  146. set short_list=%@unique[%temp]
  147. %[grep_prog] %[=]^%[_2grep] %cmd_list >>!  %short_list >&> nul
  148.  
  149. :::: Display %@select window of file %short_list if # lines
  150. :::: in %short_list >= 1.
  151. :::: if # lines = 0, only 1 command matched, return it.
  152. :::: if # lines = -1, no commands matched, set %key_tail to
  153. :::: pop up file window on exit
  154. :::: Selected command stored in %result
  155.  
  156. set lines=%@lines[%short_list]
  157. iff "%lines" == "-1" then 
  158.     set result=%_2complete 
  159.     beep
  160.     echo Hindsite: No match
  161.     set key_tail=home f7
  162. elseiff %lines == 0 then
  163.     set result=%@word[0,%@line[%short_list,0]]
  164. else    
  165.             :::: pop up the cache window
  166.     set lines=%@eval[4+%lines]
  167.     if %lines GT %_rows set lines=%_rows
  168.     set result=%@select[%short_list,1,40,%lines,80,Commands]
  169.     iff "%result" == "" then 
  170.             :::: user escaped, pop up file window on exit
  171.         set result=%_2complete
  172.         set key_tail=home f7
  173.     endiff
  174. endiff
  175. return
  176. :::: end search_commands ::::
  177.  
  178.  
  179.                 :::: subroutine get_hist :::
  180. :::: Called by main for history recall
  181. :get_hist
  182. set _tail=%2& >& nul
  183. iff "%@word[0,%&]" == "!" then
  184.     pause
  185.     beep %+ beep
  186.     echo Hindsite: Improper Usage
  187. elseiff "%@substr[%&,0,2]" == "!!" then 
  188.     set recall=%@line[%hist_in,%@dec[%@lines[%hist_in]]]
  189. else
  190.     set short_list=%@unique[%temp]
  191.     set _2grep=%@substr[%1,1]
  192.     %[grep_prog] %[=]^%[_2grep] %hist_in >>!  %short_list >&> nul
  193.     set lines=%@lines[%short_list]
  194.     iff "%lines" == "-1" then 
  195.         beep
  196.         echo Hindsite: Event not found
  197.     else
  198.         set recall=%@line[%short_list,%lines]
  199.     endiff
  200. endiff
  201. set result=%recall
  202. return
  203.  
  204. :::: end get_hist ::::
  205. :::: subroutine clean_up ::::
  206. :::: Gives the selected command and the original commmand line tail
  207. :::: to keystack.  %key_tail is either blank or contains
  208. :::: "home f7" to pop up file window
  209.  
  210. :clean_up
  211.     del /q %short_list del_me >& nul
  212.     iff "%@substr[%result,1,-2]" == "**" then 
  213.         set result=%@substr[%result,0,%@eval[%@len[%result]-2]]
  214.     elseiff "%@substr[%result,0,-1]" == "*" then 
  215.         set result=%@substr[%result,0,%@eval[%@len[%result]-1]]
  216.     endiff
  217.     keystack "%result %_tail"  %key_tail
  218.     endlocal
  219.     *quit
  220.