Rebol Programming/make-dir

= USAGE: = MAKE-DIR path /deep

= DESCRIPTION: = Creates the specified directory. No error if already exists.

MAKE-DIR is a function value. = ARGUMENTS: =
 * path -- (Type: file url)

= REFINEMENTS: =
 * /deep -- Create subdirectories too

= (SPECIAL ATTRIBUTES) =
 * catch

= SOURCE CODE = make-dir: func [ {Creates the specified directory. No error if already exists.} [catch] path [file! url!] /deep "Create subdirectories too" /local dirs end created ][   if empty? path [return path] if slash <> last path [path: dirize path] if exists? path [ if dir? path [return path] return make error! reduce ['access 'cannot-open path] ]    if any [not deep url? path] [ close throw-on-error [open/new path] return path ]    path: copy path dirs: copy [] while [ all [ not empty? path not exists? path remove back tail path ]   ] [        end: any [find/last/tail path slash path] insert dirs copy end clear end ]    created: copy [] foreach dir dirs [ path: either empty? path [dir] [path/:dir] append path slash if error? try [make-dir path] [ foreach dir created [attempt [delete dir]] return make error! reduce ['access 'cannot-open path] ]        insert created path ]    path ]