home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 5 / ctrom5b.zip / ctrom5b / DOS / TEKST / AURORA2 / WHERE.AML < prev    next >
Text File  |  1995-04-28  |  6KB  |  183 lines

  1.  
  2. /* ------------------------------------------------------------------ */
  3. /* Macro:        WHERE.AML                                            */
  4. /* Written by:   nuText Systems                                       */
  5. /*                                                                    */
  6. /* Description:  This macro searches all directories on one or more   */
  7. /*               disk drives for a filename or filespec. When the     */
  8. /*               search is completed, the located files are           */
  9. /*               displayed in a popup menu.                           */
  10. /*                                                                    */
  11. /* Usage:        Select this macro from the Macro List (on the Macro  */
  12. /*               menu), or run it from the macro picklist <shift f12> */
  13. /*                                                                    */
  14. /*               You will be prompted for the filespec and drives.    */
  15. /*               The filespec and drives must be entered in           */
  16. /*               multi-string format, e.g. 'filespec/drives'. If no   */
  17. /*               drives are specified, then all drives on your        */
  18. /*               computer will be searched (excluding A: and B:).     */
  19. /*                                                                    */
  20. /*               Select a file from the popup menu to display it in   */
  21. /*               an edit window.                                      */
  22. /*                                                                    */
  23. /*               Select the first line of the popup menu to edit the  */
  24. /*               contents of the menu (you can then use the           */
  25. /*               'openword' <ctrl ]> command to open each file).      */
  26. /* ------------------------------------------------------------------ */
  27.  
  28.   // compile time macros and function definitions
  29.   include  bootpath "define.aml"
  30.  
  31.  
  32.   // function to show progress while scanning directories
  33.   function  onscanning (directory found filespec)
  34.  
  35.     // create the progress window
  36.     if not window? 'scan' then
  37.  
  38.       createwindow 'scan'
  39.       setwinobj
  40.       setframe ">b"
  41.       setcolor  border_color   color white on gray
  42.       setcolor  text_color     color black on gray
  43.       settitle "Where is '" + filespec + "'" 'c'
  44.       setborder "1i"
  45.       setshadow 2 1
  46.  
  47.       // center the window
  48.       width  = 60
  49.       height = 16
  50.       ox = (getvidcols - width) / 2
  51.       oy = (getvidrows - height) / 2
  52.       sizewindow ox oy ox + width oy + height "ad"
  53.       writestr directory
  54.  
  55.     elseif found then
  56.       writestr " FOUND" (color brightgreen on gray) (getcoord 'x1') - 7
  57.  
  58.     elseif directory then
  59.       writeline
  60.       writestr directory
  61.  
  62.     else
  63.       destroywindow
  64.     end
  65.  
  66.     display
  67.   end
  68.  
  69.  
  70.   // scan directories recursively for a filespec
  71.   function  scandir (filespec directory resultbuf)
  72.  
  73.     onscanning directory
  74.  
  75.     // is filespec found in the directory?
  76.     if locatefile filespec (getpath directory) then
  77.  
  78.       // wildcard filespec specified?
  79.       if poschar '*?' filespec then
  80.         filebuf = loadbuf (qualify filespec directory)
  81.         if filebuf then
  82.           repeat
  83.             addline (qualify (sendobject "fmgr" "getffile") directory)
  84.                     '' '' resultbuf
  85.           until not down
  86.           destroybuf filebuf
  87.         end
  88.  
  89.       // complete filename was specified
  90.       else
  91.         addline (qualify filespec directory) '' '' resultbuf
  92.       end
  93.  
  94.       // notify progress window that filespec is found
  95.       onscanning directory 1
  96.     end
  97.  
  98.     // get a directory listing
  99.     if loadbuf directory '' '' "dh1" then
  100.       ss = '^' + (char 0)
  101.       if find ss 'x*' then
  102.         // do recursively for all subdirectories
  103.         repeat
  104.           name = qualify (sendobject "fmgr" "getffile") directory
  105.           // don't go back to parent directory
  106.           if (sizeof name) > (sizeof directory) then
  107.             scandir filespec name resultbuf
  108.           end
  109.         until not (find ss 'x')
  110.       end
  111.       destroybuf
  112.     end
  113.   end
  114.  
  115.  
  116.   var filespec
  117.   var drives
  118.   var i
  119.  
  120.   // get filespec to search for and drives to search through
  121.   file_and_drives = ask "[filespec/drives] Where is"
  122.   splitstr '' file_and_drives  ref filespec  ref drives
  123.   if not filespec then
  124.     return
  125.   end
  126.  
  127.   // search all available drives (except floppies), if none specified
  128.   if not drives then
  129.     drives = sub 'A' '' (getdisk 'm')
  130.     drives = sub 'B' '' drives
  131.   end
  132.  
  133.   // convert to upper case
  134.   filespec = upcase filespec
  135.   drives   = upcase drives
  136.  
  137.   // create buffer to hold located files
  138.   resultbuf = createbuf
  139.   if resultbuf then
  140.  
  141.     // set first line in resultbuf
  142.     ovltext "≡≡≡≡≡≡ Select this line to edit file list ≡≡≡≡≡≡"
  143.  
  144.     // setup progress window
  145.     onscanning '' '' filespec
  146.  
  147.     // scan each drive
  148.     repeat
  149.       i = i + 1
  150.       directory = drives [i] + ":\\*.*"
  151.       scandir filespec directory resultbuf
  152.     until i >= (sizeof drives)
  153.  
  154.     // destroy progress window
  155.     onscanning
  156.  
  157.     currbuf resultbuf
  158.     if getlines > 1 then
  159.  
  160.       // sort and display the located file list in a popup menu
  161.       sendobject "fmgr" "fsort" 'n'
  162.       file = popup resultbuf "Where is '" + filespec + "'" 60
  163.  
  164.       if file then
  165.         if file [1] == '≡' then
  166.           // edit the file list
  167.           delline 1 1 resultbuf
  168.           setbufname (qualify "TEMP.TXT" (getbufname (getwinbuf))) resultbuf
  169.           openbuf resultbuf
  170.           return
  171.         else
  172.           // open the selected file
  173.           open file
  174.         end
  175.       end
  176.     else
  177.       display
  178.       say filespec + " not found" 'b'
  179.     end
  180.     destroybuf resultbuf
  181.   end
  182.  
  183.