12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091open!Core_kernelopen!Importopen!Ecaml_filenamemoduleQ=structincludeQletno_message="no-message"|>Symbol.internendletexists=Funcall.("file-exists-p"<:Filename.t@->returnbool)letis_directory=Funcall.("file-directory-p"<:Filename.t@->returnbool)letis_executable=Funcall.("file-executable-p"<:Filename.t@->returnbool)letis_readable=Funcall.("file-readable-p"<:Filename.t@->returnbool)letis_regular=Funcall.("file-regular-p"<:Filename.t@->returnbool)letis_symlink=Funcall.("file-symlink-p"<:Filename.t@->returnbool)letis_writable=Funcall.("file-writable-p"<:Filename.t@->returnbool)letfile_in_directory_p=Funcall.("file-in-directory-p"<:Filename.t@->Filename.t@->returnbool);;letis_belowfile~dir=file_in_directory_pfiledirlettruename=Funcall.("file-truename"<:Filename.t@->returnFilename.t)letdelete=Funcall.("delete-file"<:Filename.t@->returnnil)letcopy_file=Funcall.("copy-file"<:Filename.t@->Filename.t@->returnnil)letcopy~src~dst=copy_filesrcdstletrename_file=Funcall.("rename-file"<:Filename.t@->Filename.t@->bool@->returnnil);;letrename~src~dst~replace_dst_if_exists=rename_filesrcdstreplace_dst_if_existsletlocate_file=Funcall.("locate-file"<:string@->liststring@->nil_or(liststring)@->nil_orvalue@->return(nil_orstring));;letlocate?suffixes?predicate~filename~path()=locate_filefilenamepathsuffixespredicate;;letlocate_dominating_file=Funcall.("locate-dominating-file"<:Filename.t@->Filename.t@->return(nil_orFilename.t));;letlocate_dominating_file~above~basename=locate_dominating_fileabovebasenameletlocate_dominating_file_exn~above~basename=matchlocate_dominating_file~above~basenamewith|Somex->x|None->raise_string["Unable to find [";basename;"] in directory above [";above;"]."];;letwrite_region=Funcall.("write-region"<:string@->unit@->Filename.t@->bool@->Symbol.t@->returnnil);;letwrite?(append=false)filenamedata=write_regiondata()filenameappendQ.no_message;;letensure_existsfilename=writefilename""~append:true(* squelch the [Wrote file] message *)letmake_temp_file=Funcall.("make-temp-file"<:string@->bool@->string@->returnFilename.t);;letmake_temp_file~prefix~suffix=make_temp_fileprefixfalsesuffixletwith_temp_filesync_or_async~f~prefix~suffix=letfilename=make_temp_file~prefix~suffixinSync_or_async.protect[%here]sync_or_async~f:(fun()->ffilename)~finally:(fun()->deletefilename);;letfind_executable=Funcall.("executable-find"<:string@->return(nil_orstring))