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

  1.  
  2. /* ------------------------------------------------------------------ */
  3. /* Macro:        SCAN2.AML                                            */
  4. /* Written by:   nuText Systems                                       */
  5. /*                                                                    */
  6. /* Description:  This macro can be used as an alternative to the File */
  7. /*               Scan command. Unlike like the File Scan command,     */
  8. /*               this macro lists all occurrences of the search       */
  9. /*               string in each file scanned.                         */
  10. /*                                                                    */
  11. /*               Each occurrence of the scan search string is         */
  12. /*               displayed in a popup menu similar to the menu used   */
  13. /*               in the Find Occurrences command. Selecting a line    */
  14. /*               from the menu opens the file containing the          */
  15. /*               occurrence of the string and positions the cursor    */
  16. /*               appropriately. Selecting the first line in the       */
  17. /*               menu allows you to edit all scanned occurrences in   */
  18. /*               a separate file.                                     */
  19. /*                                                                    */
  20. /* Usage:        Select this macro from the Macro List (on the Macro  */
  21. /*               menu), or run it from the macro picklist <shift f12> */
  22. /* ------------------------------------------------------------------ */
  23.  
  24.   include bootpath "define.aml"
  25.  
  26.   // disable 'onloading' in EXT.AML while this macro is running
  27.   function onloading
  28.   end
  29.  
  30.   // get scan multi-string from the user
  31.   scanstring = if _PromptStyle == 'd' then
  32.                  scandlg
  33.                else
  34.                  ask "[string/files/iwx] Scan" "_scan"
  35.                end
  36.   if not scanstring then
  37.     return
  38.   end
  39.  
  40.   // add the scan string to _scan history buffer
  41.   addhistory "_scan" scanstring
  42.  
  43.   var search_string
  44.   var filespec
  45.   var options
  46.  
  47.   // parse the scan multi-string
  48.   n = splitstr '' scanstring
  49.           ref search_string  ref filespec  ref options
  50.   if n < 3 then
  51.     options = _SearchOpt
  52.     if n < 2 then
  53.       filespec = '.'
  54.     end
  55.   end
  56.   if not search_string then
  57.     return
  58.   end
  59.   options = options + '*'
  60.  
  61.   // fully qualify the filespec
  62.   dirname = qualify filespec (getbufname)
  63.   if not dir? dirname then
  64.     display
  65.     say dirname + " is not a directory" 'b'
  66.     return
  67.   end
  68.  
  69.   // create the buffer to hold occurrences
  70.   buffer = createbuf
  71.   ovltext "≡≡≡≡≡≡ Select this line to edit occurrences ≡≡≡≡≡≡"
  72.  
  73.   // load the directory into dirbuffer
  74.   dirbuffer = loadbuf dirname
  75.   if not dirbuffer then
  76.     return
  77.   end
  78.  
  79.   // sort the directory buffer
  80.   sendobject "fmgr" "fsort" 'n'
  81.  
  82.   // do for all files in the directory buffer
  83.   notify = "onscanning"
  84.   repeat
  85.     file = sendobject "fmgr" "getffile"
  86.  
  87.     // load each file in the directory
  88.     if loadbuf file then
  89.       lines = getlines buffer
  90.       name = getname file
  91.  
  92.       // use 'onscanning' to display the scan progress window
  93.       send notify name
  94.  
  95.       // find all occurrences of the search string in the file
  96.       while find  search_string options  do
  97.         addline  name + ' (' + getrow + "): " + gettext  '' '' buffer
  98.         col MAX_COL
  99.       end
  100.  
  101.       // remove the file from memory
  102.       destroybuf
  103.  
  104.       // notify 'onscanning' if any occurrences were found
  105.       if lines < (getlines buffer) then
  106.         send notify name 1
  107.       end
  108.     end
  109.   until not down
  110.  
  111.   // remove the scan progress window
  112.   send notify
  113.  
  114.   // destroy the directory buffer
  115.   destroybuf
  116.  
  117.   // display occurrences
  118.   if (getlines buffer) > 1 then
  119.     bname = getbufname
  120.     line = popup buffer
  121.              "Occurrences of '" + search_string + "' in "
  122.              + dirname + " - " + ((getlines buffer) - 1) +
  123.              " lines"   getvidcols - 11 getvidrows - 8
  124.     if line then
  125.  
  126.       // edit the occurrences
  127.       if line [1] == '≡' then
  128.         delline 1 1 buffer
  129.         setbufname (qualify "TEMP.TXT" bname) buffer
  130.         openbuf buffer
  131.  
  132.       // position the cursor to the selected occurrence in the file
  133.       else
  134.         destroybuf buffer
  135.         p = pos ' ' line
  136.         name = line [1 : p - 1]
  137.         line = line [p + 2 : TO_END]
  138.         linenumber = line [1 : (pos ')' line 'r') - 1]
  139.         open (qualify name dirname)
  140.         bufferflag '-m'
  141.         gotopos 1 linenumber
  142.         onfound (find search_string  options + '*')
  143.       end
  144.     end
  145.   else
  146.     destroybuf buffer
  147.     display
  148.     say  "'" + scanstring + "' not found"  'b'
  149.   end
  150.  
  151.