home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / podstawy / dos / 4dos / 4uzytki / 4dhs10.exe / CACHE-C.BTM next >
Text File  |  1993-12-20  |  6KB  |  284 lines

  1.                       :::::  cache-c.btm :::: 
  2.    :::: Caches commands for use by hindsite version 1.0::::
  3.                 :::: Copyright Bob Larson ::::
  4.          ::: blarson@uiuc.edu   20 December 1993 ::::
  5.                         
  6.                         :::: main ::::
  7. *on break *goto finish
  8. *gosub save_alias
  9. gosub initialize
  10. setlocal
  11. gosub config
  12. gosub get_internals
  13. gosub do_aliases
  14. gosub do_search
  15. gosub sort
  16. gosub finish
  17. quit
  18.                     :::: end main ::::
  19.  
  20.                 ::::: Configuration options ::::::
  21. ::::: Cache-c will run much faster if it can use two programs,
  22. ::::: sed and a unix-type sort (with the ability to remove 
  23. ::::: duplicate lines, which the ms-dos sort does not do).
  24. ::::: If you have either, set these variables to the path 
  25. ::::: and name of the program. Do not point these to aliases,
  26. ::::: as aliases are disabled within this btm.  
  27.  
  28. :config
  29.  
  30. ::Optional:  Modify this to point to your sed program, and remove "rem"
  31. rem set _sed_prog=sed
  32.  
  33. ::Required:  Make this point to your sort program, with required flags,
  34. ::           if any. 
  35.  
  36. set _sort_prog=sort 
  37.  
  38. ::Optional If the following is set to "y", an internal subroutine 
  39. ::           will remove duplicate lines.  Set to "n" if your sorting
  40. ::         will have already taken care of this.
  41.  
  42. set _sort_unique=y
  43.  
  44. ::Optional: If you want to add executable extensions to the command cache, add
  45. :::: them to the following line:
  46.  
  47. set exes=*.com;*.exe;*.bat;*.btm;*.doc
  48.  
  49. ::: You may alos want to edit the list of internal commands found at
  50. ::: the end of this file.
  51.  
  52.  
  53.  
  54. return
  55.                 :::: end config :::::
  56.  
  57.  
  58.             :::: Subroutine save_alias :::::
  59. :::: Saves aliases then disables them.
  60. :::: Aliases will be resored upon termination.
  61. :save_alias
  62.  
  63. set alias_file=%@unique[%temp]
  64. alias >! %alias_file
  65. unalias *
  66. return
  67.                    :::: end save_alias ::::
  68.  
  69.                 :::: Subroutine initialize ::::
  70. ::::  Set value of %cmd_list to the file holding the list of commands.
  71. ::::  Precedence: Command line arg., preset %cmd_line, %@unique[].
  72. ::::  Value must be saved, so occurs before setlocal.
  73. ::::  Checks that file is writable, exits if not.
  74. ::::  Deletes the file if it exists, and sets local var. %_search path
  75. :initialize
  76.  
  77. iff %# != 0 then 
  78.     set cmd_list=%1
  79. elseiff "%cmd_list" == "" then
  80.     set cmd_list=%@unique[%temp]
  81. endiff
  82.  
  83. set fhandle=%@fileopen[%cmd_list,write]
  84. iff "%fhandle" == "-1" then
  85.     echo Unable to create cache in file %cmd_list
  86.     goto finish
  87. else
  88.     echo Saving commands in %cmd_list
  89.     set fhandle=%@fileclose[%fhandle]
  90.     unset fhandle
  91. endiff
  92.  
  93. set _search_path=%path
  94. if "%@substr[%_search_path,0,-1]" != ";" set _search_path=%_search_path;
  95. return
  96.                     :::: end initialize ::::
  97.  
  98.  
  99.             :::::  Subroutine do_aliases :::::
  100. :::::   Caches aliases.  Uses sed to:
  101. :::::    save alias name only
  102. :::::    strip "*" from alias name
  103. :::::   skip past keystroke aliases
  104. :do_aliases
  105.  
  106. echos      Caching aliases
  107. iff "%_sed_prog" != "" then
  108. (%_sed_prog  -e "s/=.*//" -e "/%[=]^@/d" -e "s/\*//" >>! %cmd_list) <%alias_file
  109. else
  110.     for %%entry in (@%alias_file) gosub get_aliases
  111. endiff
  112. echo.
  113. return
  114.                     :::: end do_aliases ::::
  115.  
  116.                     :::: Subroutine get_aliases ::::
  117. :::: Same as do_aliases, but does not use ext. program "sed".
  118.  
  119. :get_aliases
  120. set pos=0
  121. echos .
  122. unset alias_name >& nul
  123. do forever
  124.     set pos=%@inc[%pos]
  125.     set _1char=%@substr["%entry",%pos,1]
  126.     iff "%_1char" == "@" then
  127.         leave
  128.     elseiff "%_1char" == "=" then
  129.         leave
  130.     elseiff "%_1char" != "*" then
  131.         set alias_name=%[alias_name]%_1char
  132.     endiff
  133. enddo 
  134. if "%alias_name" != ""  echo %alias_name >>! %cmd_list
  135. return
  136.                     :::: end get_aliases ::::
  137.  
  138.                     :::: Subroutine do_search ::::
  139. :::: With each iteration calls get_path and 
  140. :::: searches dir %one_dir for executables defined in %exes
  141. :::: Appends file %cmd_list
  142. :do_search
  143.  
  144. do while "%_search_path" != ""
  145.     gosub get_path
  146.     if "%@substr[%one_dir,0,-1]" != "\"  set one_dir=%one_dir\
  147.     echo      Searching for executables in %one_dir
  148.     dir /bkm  %one_dir%%exes >>! %cmd_list >&> nul
  149. enddo
  150. return
  151.                     :::: end do_search ::::
  152.  
  153.                 :::: Subroutine get_path ::::
  154. :::: Called by do_search
  155. :::: Extracts on dir at a time from the %_search_path var.
  156. :::: Saves value in %one_dir
  157. :get_path
  158.  
  159. set end=%@index[%_search_path,;]
  160. iff %end == -1 then
  161.     set one_dir=%_search_path
  162.     set _search_path=
  163. else
  164.     set one_dir=%@substr[%_search_path,0,%end]
  165.     set _search_path=%@substr[%_search_path,%@eval[%end+1]]
  166. endiff
  167. return
  168.                 :::: end get_path ::::
  169.  
  170. :::: Sorts command cache.  Executes external sorting program
  171. :::: If sort program cannot remove duplicates, gosubs to 
  172. :::: subroutine unique and crawls along. 
  173. :sort
  174.  
  175. echo Sorting
  176. set foo=%@unique[%temp]
  177. type %cmd_list | %_sort_prog   >! %foo
  178. iff "%@lower[%_sort_unique]" != "y" then
  179.     move %foo %cmd_list >& nul
  180. else
  181.     del /q %cmd_list
  182.     set prev=%@line[%foo,0]
  183.     echos Removing duplicates
  184.     for %%curr_line in (@%foo) gosub unique
  185.     echo.
  186.     echo %prev >>! %cmd_list
  187.     del /q %foo >& nul
  188. endiff
  189. return
  190.                     :::: end sort ::::
  191.  
  192.                 :::: Subroutine unique ::::
  193. :::: Called by subroutine sort if %sort_unique == y
  194. :unique
  195. iff "%@trim[%prev]" != "%@trim[%curr_line]" then
  196.     echos .
  197.     echo %prev >>! %cmd_list
  198. endiff
  199. set prev=%curr_line
  200. return
  201.                     :::: end unique ::::
  202.  
  203.                 :::: Subroutine finish ::::
  204. :::: restores aliases, deletes files, and unsets some var's 
  205. :::: Always end up here.
  206.  
  207. :finish
  208. endlocal
  209. *alias /r %alias_file
  210. *del /q  %alias_file >& nul
  211. *unset /q alias_file _search_path arg skip_next  _update
  212. *echo Done!
  213. *return
  214. *quit
  215. :::: end finish ::::
  216.  
  217.  
  218. :::: Subroutine get_internals ::::
  219. :::: Subset of 4dos v.5.0 internal commands
  220. :::: edit as desired!
  221.  
  222. :get_internals
  223. echo      Caching internal commands
  224. text >! %cmd_list
  225. ALIAS
  226. ATTRIB
  227. BEEP
  228. BREAK
  229. CALL
  230. CANCEL
  231. CDD
  232. CHCP
  233. CHDIR
  234. CLS
  235. COLOR
  236. COPY
  237. CTTY
  238. DATE
  239. DEL
  240. DELAY
  241. DESCRIBE
  242. DIR
  243. DIRS
  244. DRAWBOX
  245. DRAWHLINE
  246. DRAWVLINE
  247. ECHO
  248. ECHOS
  249. ERASE
  250. ESET
  251. EXCEPT
  252. FOR
  253. FREE
  254. GLOBAL
  255. HELP
  256. HISTORY
  257. INKEY
  258. INPUT
  259. KEYSTACK
  260. LIST
  261. LOADBTM
  262. LOADHIGH
  263. LOG
  264. MEMORY
  265. MKDIR
  266. MOVE
  267. PAUSE
  268. PROMPT
  269. REBOOT
  270. RENAME
  271. RMDIR
  272. SCREEN
  273. SCRPUT
  274. SELECT
  275. TIMER
  276. TRUENAME
  277. TYPE
  278. UNALIAS
  279. UNSET
  280. VERIFY
  281. VSCRPUT
  282. endtext
  283. return
  284.