mttLocateDirectory.m 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. function directory = mttLocateDirectory(working_directory,local_directory)
  2. if isempty(local_directory)
  3. directory = working_directory ;
  4. else
  5. backslash = findstr(working_directory,'\') ;
  6. working_directory(backslash) = '/' ;
  7. [working_drive,working_path] = mttCutText(working_directory,':') ;
  8. if isempty(working_path)
  9. working_path = working_directory ;
  10. working_drive = [] ;
  11. end
  12. [local_drive,local_path] = mttCutText(local_directory,':') ;
  13. if isempty(local_path)
  14. local_path = local_directory ;
  15. local_drive = [] ;
  16. end
  17. if isempty(local_drive)
  18. if local_path(1)=='/'
  19. if isempty(working_drive)
  20. directory = local_path ;
  21. else
  22. directory = [working_drive,':',local_path] ;
  23. end
  24. else
  25. directory = [working_directory,'/',local_directory] ;
  26. end
  27. else
  28. mttAssert(all(isletter(local_drive)),...
  29. ['"',local_drive,'" is an invalid drive specifier']) ;
  30. directory = local_directory ;
  31. end
  32. mttAssert(exist(directory,'dir')==7,...
  33. ['Directory "',directory,'" not found']) ;
  34. locating = 1 ;
  35. while locating
  36. [left,right] = mttCutText(directory,'//') ;
  37. if isempty(right)
  38. locating = 0 ;
  39. else
  40. directory = [left,'/',right] ;
  41. end
  42. end
  43. locating = 1 ;
  44. while locating
  45. backtrack = findstr(directory,'/..') ;
  46. if isempty(backtrack)
  47. locating = 0 ;
  48. else
  49. [left,right] = mttCutText(directory,'/..') ;
  50. if isempty(right)
  51. [cancelled,left] = mttDetachText(left,'/') ;
  52. directory = left ;
  53. else
  54. [cancelled,left] = mttDetachText(left,'/') ;
  55. directory = [left,right] ;
  56. end
  57. end
  58. end
  59. end