지난 번에 수정을 했던 Ubuntu system의 HDD가 고장이 나서, 다른 HDD에 새로 시스템을 꾸미다 보니 결국은 같은 문제에 봉착하게 되었습니다.
그래서 이번에는 다른 방식으로 문제를 해결해 보고자 하는 생각에...
우선은 문제가 되는 그 화면
문제가 되는 화면, Path가 이상하고 Directory도 이상합니다. |
이 문제는 DOS Interrupt 21h, AH=60h일 때의 오작동으로 인한 문제였음은 이미 앞선 포스팅에서 밝힌 바 입니다.
해당 부분을 처리하는 루틴은 dos.cpp의 DOS_21Handler()에 있습니다.
DOS_21Handler() |
AH=60h (Canonicalize)가 해당하는 루틴입니다. |
디버거를 이용해 trace를 해 본 결과 DOS_canonicalize()라는 함수를 수정하면 될 것으로 보였습니다.
DOS_files.cpp의 DOS_Canonicalize() |
마지막에 Backslash만 붙여주면 되는 문제였기에, 문자열의 마지막에 Backslash가 있는지 없는지 검사해서 없을 때에만 붙여 주면 된다 생각했습니다.
그러나 이 루틴에 입력되는 문자열이 디렉토가 아닌 파일인 경우도 있기에, 무조건 Backslash를 넣어 주어서는 안됩니다.
몇번의 디버깅과 고민 끝에 입력 문자열의 마지막에 Backslash가 있다면 디렉토리이므로 이 경우에만 마지막에 Backslash를 검사하고 붙여주도록 수정하였습니다.
다음이 수정한 결과입니다.
위와 같이 수정하였습니다. |
수정하고 빌드하여 확인한 결과 화면입니다.