! Copyright (C) 2008 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
-USING: io.files kernel sequences accessors
-dlists deques arrays ;
+USING: accessors arrays deques dlists io.files io.paths.private
+kernel sequences system vocabs.loader fry continuations ;
IN: io.paths
TUPLE: directory-iterator path bfs queue ;
+<PRIVATE
+
: qualified-directory ( path -- seq )
dup directory-files [ append-path ] with map ;
[ over push-directory next-file ] [ nip ] if
] if ;
-: iterate-directory ( iter quot -- obj )
+: iterate-directory ( iter quot: ( obj -- ? ) -- obj )
over next-file [
over call
- [ 2drop ] [ iterate-directory ] if
+ [ 2nip ] [ iterate-directory ] if*
] [
2drop f
] if* ; inline recursive
-: find-file ( path bfs? quot -- path/f )
+PRIVATE>
+
+: find-file ( path bfs? quot: ( obj -- ? ) -- path/f )
[ <directory-iterator> ] dip
[ keep and ] curry iterate-directory ; inline
-: each-file ( path bfs? quot -- )
+: each-file ( path bfs? quot: ( obj -- ? ) -- )
[ <directory-iterator> ] dip
[ f ] compose iterate-directory drop ; inline
-: find-all-files ( path bfs? quot -- paths )
+: find-all-files ( path bfs? quot: ( obj -- ? ) -- paths )
[ <directory-iterator> ] dip
pusher [ [ f ] compose iterate-directory drop ] dip ; inline
: recursive-directory ( path bfs? -- paths )
[ ] accumulator [ each-file ] dip ;
+
+: find-in-directories ( directories bfs? quot -- path' )
+ '[ _ _ find-file ] attempt-all ; inline
+
+os windows? [ "io.paths.windows" require ] when
--- /dev/null
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: arrays continuations fry io.files io.paths
+kernel windows.shell32 sequences ;
+IN: io.paths.windows
+
+: program-files-directories ( -- array )
+ program-files program-files-x86 2array ; inline
+
+: find-in-program-files ( base-directory bfs? quot -- path )
+ [
+ [ program-files-directories ] dip '[ _ append-path ] map
+ ] 2dip find-in-directories ; inline