본문 바로가기
NDS Inside/libWNText

NDS용 한글 출력 라이브러리 libWNText-1.0

by irmus 2007. 9. 14.
오늘 만든 한글 출력 라이브러리이다.

PAlib를 기반으로 만들었으며, PAlib와 비슷한 모양의 API를 가지도록 꾸몄다.현재 버젼에는 PAlib의 PA_OutputSimpleText() 함수에 해당하는 기능만 가지고 있다. 즉 variable argument를 이용해서 printf처럼 다양한 출력은 제공하지 않는다. 다음 버젼에서 해야할 일이다.
사용자 삽입 이미지

WNText 라이브러리를 사용한 예제 프로그램



  • 영문 알파벳, 숫자, 기호는 8*16 픽셀 크기의 고정폭 폰트(FixedSys)
  • 한글은 16*16 픽셀 크기의 고정폭 폰트(MS 윈도의 굴림)
  • KSC-5601 완성형 폰트셋
  • 글자 출력 위치는 픽셀 단위로 지정(x:0~255, y:0~191)
  • 10개의 폰트 색상 지원.
  • screen 0/1 선택 가능.
  • background 0~3 선택 가능.
  • 8bit Bitmap mode 사용.
우선은 폰트 크기가 고정된 구성이다. 폰트의 크기를 자유롭게 바꾸려면 ttf 폰트 파일에서 bitmap이나 binary 등으로 코드셋 데이터를 추출해 내는 유틸리티가 있어야 한다. 현재 보유중인 유틸리티는 16*16 크기의 추출만 제공하기 때문에 관련 유틸리티를 만들거나 구해야만 가능하다.
현재 폰트 크기를 유지하면서 폰트를 변경하는 것은 쉽게 할 수 있다. 위의 첨부 파일 중 source 를 받아 data 폴더 내에 있는 폰트 추출 유틸리티를 활용하면 된다. 이 유틸리티는 롬 한글화 프로젝트 팀의 자료실에서 구한 것이다.

8bit Bitmap mode를 사용하기 때문에 VRAM의 낭비가 심한 편이고 bitmap mode를 사용하는 app을 작성할 때에는 신경써서 작업해야 한다. 처음에는 tile만 가지고 어떻게 해볼까 하고 여기저기 찔러봤지만 도저히 방법이 없어서 일단 생각만 남겨두고 bitmap mode로 구현하게 되었다. 참고로 NDS에는 2D 모드에서 sprite를 128개 밖에 만들지 못한다. 그러니 sprite로 한글 출력을 구현하면 한 화면에 128글자밖에 찍지 못하는 사태가 발생한다.

이 라이브러리를 사용하려면 libWNText-1.0.zip 파일 내의 header file을 적당한 위치로 복사해서 include하고, libWNText.a 파일 역시 적당한 위치로 복사해서 자신의 app에 link 시켜야 한다. Makefile을 직접 손보면 간단하게 처리할 수 있다. 예제로 첨부한 testlibWNText.zip 내의 Makefile을 참고하면 쉽게 자신의 프로젝트에 적용할 수 있을 것이다.

다음 버젼에서 해야할 일 :
  • printf 스타일의 argument 지원
  • 폰트 크기 변경가능한 구조로 작성
  • 폰트 변환 유틸리티 작성
  • 가변폭 폰트 지원에 대한 고려