2013년 11월 23일 토요일

Appler 디버깅하기 ___ 7

이미 수정까지 완료한 사항이지만, 지난 번과는 달리 이번에는 DOSBox를 수정해서 문제를 해결해 보았습니다.

지난 번에 수정을 했던 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를 검사하고 붙여주도록 수정하였습니다.

다음이 수정한 결과입니다.

위와 같이 수정하였습니다.

수정하고 빌드하여 확인한 결과 화면입니다.

이젠 정상 작동합니다.

댓글 없음: