Hi,

I know it was discussed several times already here, but I would like
someone to clear things a little bit for me here:

I tried to write a function, which looks for some file, on a path given.
I use recursion, but Rebol is not able to scan my root directory,
something has to overflow somewhere in memory, and I anticipate I am
doing something wrong.

The calling convention is as follows:

->> find-on-path %/D/ %Netscape.exe    ; will look for the file on the
path given ....
->> find-on-path/subdirs %/D/ %Netscape.exe ; will scan all
subdirectories too


find-on-path: func [{Find file on given path ... (end dir entries with
"/")}
                     path
                     file
                     /subdirs
                       "Scan also subdirectories ...."
                     /local dir-list reduced-dir-list
                  ][

print ["Scanning: " path]

     dir-list: copy []
     dir-list: load path

     either found? find dir-list file [
             print [file "nalezen na ceste: " path]
             return path
     ][

       either not subdirs [return none][

           reduced-dir-list: copy []  ; let's reduce dir-list to contain
directories only ...

           foreach dir-or-file dir-list [if dir? join path dir-or-file
[insert reduced-dir-list dir-or-file]]
            dir-list: copy reduced-dir-list
            reduced-dir-list: copy []

           foreach dir dir-list [
             result: find-on-path/subdirs join path dir file
               if not none? result [return result]
           ] return none         ; I tried also unset 'dir-list in front
of return none here ....

     ]

    ]

]


I tried mereyl everything - I am clearing block, initialising them with
copy [], setting them as local variables, unsetting blocks, etc. I don't
know, where it is overflowing, as dir structure is not so much nested. I
remember some discussion on 'foreach making copy of series given? Uh,
could anyone help, please?

Also, is there any chance to have only directories in the resulted block
after loading a path?

What does happen in the memory during the recursive call? Is body of
function in memory just once, reserving just separate space for each
local var, or?

Thanks,

-pekr-


Reply via email to