PRC-Tools와 PilotMAG을 이용한 Palm프로그래밍

마지막으로 [b]

1. 전제사항
2. PRC-Tools란?
3. PilotMAG란?
4. PRC-Tools 및 PilotMAG의 설치 및 환경설정
5. PilotMAG의 구성
6. 간단한 프로그램 제작
7. 몇가지 팁
8. 맺음말

[edit]1. 전제사항

이 문서에서는 기본적으로 Palm OS 4.x상의 프로그램을 개발하기 위한 환경을 기술하고 있으며, OS 5 이상의 개발환경은 다루지 않고 있음을 미리 밝힌다. 만일 Palm OS 3.x상의 프로그램을 개발하기 위해서는 SDK의 버전을 3.x로 하고, PilotMAG의 환경을 그에 맞게 설정해주면 될 것이다.

[edit]2. PRC-Tools란?

PRC-Tools는 palm용 프로그램을 C나 C++로 개발하기 위한 개발도구로, GNU 프로젝트의 일환으로 진행되고 있으며, 현재(2004년 10월 기준) 버젼은 2.3이다. PRC-Tools는 GCC, assembler, linker 그리고 symbolic debugger로 구성되어 있다.

[edit]3. PilotMAG란?

Palm 프로그램을 제작하는데 있어 사용되는 프로그래밍 툴에는 여러가지가 있는데(자세한 내용은 http://www.palmos.com/dev/tools/새 창으로 열기 를 참조), 그 중 C언어를 사용하는 개발자라면 통상 CodeWarrior나 PRC-Tools 등을 사용할 것이다. 그러나 CodeWarrior는 막강한 통합개발환경을 제공하는 장점이 있는 반면, 덩치가 크고 가격이 비싼 점이 단점이라 할 수 있다. 한편, PRC-Tools는 무료로 배포되는 반면, Comand-line방식의 환경을 가지고 있기에 프로그램 작성과 컴파일 과정에서 불편한 점이 있다. 물론 PRC-Tools를 이용한 프로그래밍을 도와주는 PilRC라는 리소스 에디터가 있긴 하지만 이것만으로는 완전한 통합개발환경이라고 말하긴 어렵다. 여기서 소개하는 PilotMAG은 비교적 저렴한 가격($20)으로 위와 같은 PRC-Tools와 PilRC의 단점을 보완하고, Windows 상에서 통합개발환경을 구현해주는 프로그래밍 툴이다(참고로 PilotMAGCodeWarrior처럼 독립된 개발툴이 아니며, PRC-Tools와 PilRC를 필요로 한다).
PilotMAG를 실행하기 위해선 PC에 다음과 같은 프로그램들을 먼저 설치하여야 한다.
(아래 프로그램들은 이 문서에 나오는 설치과정을 따라하면 자동적으로 설치되므로 별도의 설치작업이 필요없다)

Cygwin
PRC-Tools
PilRC
Palm OS SDK
Palm OS Emulator

[edit]4. PRC-Tools 및 PilotMAG의 설치 및 환경설정

PRC-Tools와 PilotMAG을 사용하기 위해서는 Cygwin을 먼저 설치하여야 한다. Cygwin은 windows상에서 유닉스 커널환경을 제공하는 프로그램이다.
Cygwin은 Cygwin사이트에서 setup.exe를 다운받아서(http://www.cygwin.com/setup.exe새 창으로 열기 ) 설치하면 된다. 설치방법은 아래와 같다.

1. 여기서는 C:\download라는 디렉토리에 setup.exe를 다운받았다고 가정하고 진행하자.
setup.exe를 실행하면 아래와 같은 화면이 뜬다. '다음'을 눌러 진행한다.
Upload:cyginstall_01.JPG

2. Download from Internet을 선택해 로컬PC에 일단 프로그램을 저장한다.
Upload:cyginstall_02.JPG

3. 다운로드할 폴더를 지정한다.
Upload:cyginstall_03.JPG

4. Direct Connection을 선택하고 '다음'을 눌러 진행한다.
Upload:cyginstall_04.JPG

5. 다운받아올 사이트를 선택하는데, 먼저 ftp://ftp.kreonet.re.kr 을 선택하고, 아랫쪽 User Url란에 http://prc-tools.sourceforge.net/install 이라고 적어넣은 뒤 Ctrl키를 누른 상태에서 'Add'버튼을 클릭한다.
Upload:cyginstall_05.JPG

6. 스크롤바를 위아래로 움직여 ftp://ftp.kreonet.re.kr과 http://prc-tools.sourceforge.net/install이 동시에 선택되어 있는지를 확인한 뒤 '다음'으로 진행한다.
Upload:cyginstall_06.JPG

7. 아래와 같은 화면이 뜬 뒤
Upload:cyginstall_07.JPG

8. 패키지 내용을 선택하는 아래와 같은 화면이 뜨면, Base 카테고리와 Misc카테고리 왼쪽의 + 표시를 클릭하여 Base카테고리의 세부항목이 전체가 선택되어 있는지 확인하고, Misc카테고리의 prc-tools뿐만 아니라 prc-tools-arm, prc-tools-htmldocs, pilrc도 함께 선택한 뒤, '다음'을 눌러 진행한다.
Upload:cyginstall_08.JPG
Upload:cyginstall_09.JPG

9. 다운이 다 끝나면 다운받은 로컬PC의 폴더(여기서는 C:\download)로 이동하여 각각의 디렉토리를 Install1of2, Install2of2로 이름을 바꾼 뒤 Cygwin(Install1of2)을 먼저 설치하고, 그 후에 prc-tools(Install2of2)를 설치한다.
Upload:2_cyginstall_10.JPG
Upload:2_cyginstall_11.JPG

1. Cygwin의 setup.exe를 다시 실행
2. Install from Local Directory를 선택
3. 다음 선택 (c:\cygwin 디렉토리에 설치)
4. Local Pakage Directory를 현재 디렉토리(여기서는 C:\download) 아래의 'Install1of2'를 선택하여 진행

1. Cygwin의 setup.exe를 다시 실행, 이전에 실행한 적이 있다고 해도 계속 진행
2. Install from Local Directory를 선택
3. 다음 선택
4. Local Pakage Directory를 현재 디렉토리(여기서는 C:\download) 아래의 'Install2of2'를 선택하여 진행
5. 세부사항중 Base와 Dev항목을 선택하여 prc-tools-arm, prc-tools-htmldocs, pilrc 등 모든 항목을 선택한 뒤에 전체를 다 설치

1. 아래 파일을 다운로드 받아 압축을 푼 뒤 설치한다. 이 과정을 거치면, C:\PalmDev\아래에 SDK-4가 설치된다.
(참고로 이전 버전의 SDK는 Kpug.net의 자료실을 살펴보면 구할 수 있을 것이다. 참고로 아래 링크는 Palm SDK 4.0, Palm SDK 4.0 update임)
http://user.chollian.net/~crystal/Palm/sdk4/sdk40.zip새 창으로 열기
http://user.chollian.net/~crystal/Palm/sdk4/sdk40upd1.zip새 창으로 열기

1. 아래 파일을 다운로드 받아 Palm OS Emulator를 설치한다.
(다른 버전의 Palm OS Emulator가 필요하면, Kpug.net의 자료실을 이용해 구해도 된다. 참고로 아래 링크는 POSE 3.5, POSE Skin 1.9임)
http://user.chollian.net/~crystal/Palm/emulator/emulator-win.zip새 창으로 열기
http://user.chollian.net/~crystal/Palm/emulator/emulator-skins-19.zip새 창으로 열기

1. C:\PalmDev 디렉토리를 생성
2. 설치후 바탕화면의 Cygwin 아이콘을 실행
3. bash이 뜨면 아래 내용 입력
mount -tf "C:\PalmDev" /PalmDev
cd /PalmDev
rm sdk
ln -s sdk-4 sdk
C:/cygwin/bin/palmdev-prep
4. PalmOSCygwin의 bin 안의 cygwin1.dll파일을 "C:\Windows\system32" 디렉토리에 복사

1. 아래 파일을 다운로드 받아 PilotMAG를 설치한다.
(참고로 제품등록을 안하는 경우에는 한정된 페이지만 만들 수 있는 제약이 있음. 인터넷에 keygen이 떠돌아 다니기도 함)
http://montesoft.users.cg.yu/download/pmag_44.exe새 창으로 열기
http://www.geocities.com/montesoft/download/pmag_api_help.zip새 창으로 열기

2. 설치후 PilotMAG를 실행한 뒤, 환경옵션을 아래와 같이 설정한다.
Upload:pilotmag1.JPG

3. Copilot Path항목에는 Palm OS Emulator의 실행파일위치를 지정하고, Install Program항목에는 Palm용 프로그램을 설치할 때 사용하는 Instapp.exe파일의 위치를 지정한다. Tools항목에는 사용자가 원하는 프로그램을 등록할 수 있다.
Upload:pilotmag_02.JPG

4. Help Location항목에는 pmag_api_help.zip을 풀어 나온 Palm1.hlp파일의 위치를 지정하고 PDF Location항목에는 SDK의 Documentation 폴더의 위치를 지정한다.
Upload:pilotmag_03.JPG

5. PilRC path항목에는 PilRC가 설치된 폴더 위치를, GCC Path항목에는 PRC-Tools가 설치된 폴더 위치를, Palm-Debugger항목에는 Palm Debugger의 위치를 지정한다.
그리고 반드시 'Check this box if you want to PilotMAG use above paths when call compiler executable'항목을 체크해준다.
Upload:pilotmag_04.JPG

6. Editor 변수에서는 글씨체의 bold 항목을 전부 off시켜준다.(왜냐하면, PilotMAG의 기본 글꼴인 'PilotMAGEditor' 글꼴은 bold로 하면 다른 글자를 깨뜨리기 때문이다)
Upload:pilotmag_05.JPG

[edit]5. PilotMAG의 구성

지금까지 설치를 모두 마쳤다면, PilotMAG를 이용해 팜 프로그램을 만들 모든 준비가 끝난 상태이다.
이제 PilotMAG을 본격적으로 사용하기 전에 PilotMAG이 어떻게 구성되어 있는지 살펴보면, 먼저 화면구성 및 메뉴구성은 다음과 같다.

Upload:scrconf.gif

Upload:menuset.gif

[edit]6. 간단한 프로그램 제작

이제 설치가 끝났으니, "Hello"라는 폼과 "I love you"라는 폼을 만들고 OK버튼을 누르면 폼간에 이동하는 간단한 프로그램을 만들어보자. 프로그램을 실행시킨 후, 메뉴 가운데 "File"항목 중 "New Project"를 누르면, 프로젝트 이름과 경로를 지정하라고 한다. (여기서는 "sample"이라는 이름으로 프로젝트 이름을 정하겠다.) 프로젝트 이름과 경로를 지정하면 메인 폼이 하나 만들어지고 왼쪽에는 프로젝트 이름과 속성을 나타내는 창이 하나 생긴다. (이 창을 앞으로 "속성창"이라 부르겠다.)

Upload:pref.jpg

왼쪽에 있는 속성창의 세부항목에 대한 개괄적인 설명은 다음과 같다.
- Application : Application에 대한 기본적인 정보를 포함, 프로그램 설명과 개발자 ID, 프로그램 아이콘을 설정할 수 있음.
- Forms : 프로그램에서 사용되는 Form에 대한 정보를 표시
- Units : 프로그램의 C소스를 나타냄
- Resource : 프로그램의 헤더와 리소스 파일에 대한 정보를 표시

폼은 속성창 위에 어디든지 마우스를 올려놓고 마우스 오른쪽 버튼을 눌러 나오는 팝업메뉴에서 New Form을 선택하거나, Upload:tree_Form.gif 아이콘을 클릭함으로써 만들 수 있다.
만들어진 폼에는 원하는 리소스를 배치할 수 있으며, 각각의 속성값은 각 리소스를 클릭하여 선택한 뒤, "Properities"탭을 선택하여 변경할 수 있다. 예를 들어 폼의 제목을 바꾸고 싶다면 다음 그림과 같은 순으로 하면 된다.

Upload:ex1.jpg

① 폼을 눌러 활성화시킨 후, ② Properities를 눌러 아래와 같은 화면이 나오면, Label text의 값을 변경해주면 폼의 제목이 바뀌는 것을 알 수 있다. 이처럼 폼이면 폼, 버튼이면 버튼을 먼저 선택하고 Properities탭을 누르면, 각각의 속성값을 변화시킬 수 있다.

Upload:ex2.jpg

마찬가지로 "Object Identifier" 항목을 다른 이름으로 변경하는 것도 가능하다.
여기서는 Form의 Label Text를 Hello로 바꿔 보자. Hello라고 입력한 뒤 엔터키를 치면 아래와 같이 리소스창에 폼 타이틀이 "Hello"로 바뀌는 것을 볼 수 있다.

Upload:ex4.jpg

그리고 ① 메뉴바의 Grid 아이콘을 눌러 그리드를 On 시키고, ② button을 옮긴 후, ③ Button의 라벨을 OK로 바꾼다.

Upload:ex5.jpg

자 이제 두번째 I love you라는 폼을 만들 차례이다.
Upload:tree_Form.gif 아이콘을 눌러 폼을 또 하나 만든다. Object ID가 Form1006인 새로운 폼이 하나 만들어졌다.

Upload:ex6.jpg

① 버튼 아이콘을 눌러 폼에 버튼을 추가하고, ② 위치를 잡은 후, ③ Button의 라벨을 OK로 바꾼다.

Upload:ex7.jpg

만들어진 폼을 확인하려면, 속성창의 Project 탭을 누른 후, Forms 왼쪽의 +를 눌러 노드를 확장시킨 후, 해당 폼 이름을 마우스로 클릭하면 된다. 이렇게 하면 각 폼에 해당되는 내용이 리소스창에 뜬다.
자, 이제 Hello폼과 I love you 폼, 서로간의 이동을 위해 C소스를 직접 만져줄 때가 됐다.

① Units의 노드를 확장시키면 sample.c라는 소스 파일이 나타날 것이다. 이 소스파일을 더블클릭하면 편집기 창에 sample.c라는 소스 파일이 편집가능한 상태로 불러진다. 이 소스 파일은 프로젝트를 만들면 자동으로 생성된다. 이렇게 만들어지는 소스 파일은 기본적인 내용을 포함하고 있기 때문에, 필요한 기능을 추가하고 변경하는 방식으로 프로그램을 짜나가면 된다.
② 소스 파일의 내용을 보자면, 프로그램이 SDK 3.5를 사용하고 있을 경우에는 #include <PalmOS.h> 와 #include <PalmCompatibility.h>라는 명령을 통해 헤더파일을 지정하고, SDK 1.0 ~ 3.1을 사용하는 경우에는 #include <Pilot.h>라는 명령을 통해 헤더파일을 지정함을 알 수 있다. 자신이 현재 사용하는 SDK에 맞게 변경해 주면 된다. 사용하지 않는 명령어 앞에는 "//"를 붙여 주석으로 만들어 주자.
다음으로 #include "@IncludeFile@.h"를 자신의 프로젝트 이름에 맞게 고쳐준다. 여기서는 프로젝트 이름이 sample이므로 #include "sample.h"라고 하면 되겠다. 참고로 속성창의 Resource항목에 이미 sample.h라는 파일이 있는데 이것은 단지 이름만 있는 파일일 뿐 아무 내용이 없는 파일이다(나중에 설명하게 되겠지만, 컴파일 단계에서 Generate Resource명령을 내리면 비로소 sample.h가 생성된다).

Upload:ex8.jpg

이제 Hello 폼과 I love you 폼의 버튼을 눌렀을 때(이벤트가 발생했을 때), 어떻게 처리할지를 추가해주면 된다.
아래 소스파일 중 추가하거나 변경한 내용은 붉은 글씨로 나타냈다. 그러므로 붉은 글씨로 된 부분만 추가 또는 변경해주면 된다.

//---------------------------------------------------------------------------
// PilotMAG Main
//
//
// (c) John Smith 01/01/99
//---------------------------------------------------------------------------
// This file is only start up code, it is not generated by PilotMAG.
// You can edit this file by your self, to made your own start up file.
// Originally located at: c:\Programs Files\Monte Soft\PilotMAG\PilotMAG.ptr
//---------------------------------------------------------------------------

// Main Include file for SDK 3.5
#include <PalmOS.h>
#include <PalmCompatibility.h>

// Main Include file for SDK 1.0, SDK 2.0, SDK 3.0, SDK 3.1
//#include <Pilot.h>

#include "
sample.h" // Change this to: #include "YourProjectName.h"

static int StartApplication(void);
static void EventLoop(void);
static void StopApplication(void);
static Boolean frmMainEventH(EventPtr event);
static Boolean Form1006EH(EventPtr event);

//---------------------------------------------------------------------------
DWord PilotMain (Word cmd, Ptr cmdPBP, Word launchFlags)
{
int error;

if (cmd == sysAppLaunchCmdNormalLaunch)
        {
        error = StartApplication(); // Application start code
        if (error)
                return error;
        EventLoop(); // Event loop
        StopApplication (); // Application stop code
        }
        return 0;
}

//---------------------------------------------------------------------------
static int StartApplication(void)
{
FrmGotoForm(Form1004);
return 0;
}

//---------------------------------------------------------------------------
static void EventLoop(void)
{
short err;
int formID;
FormPtr form;
EventType event;

do
        {
        EvtGetEvent(&event, 200);
        if (SysHandleEvent(&event))
                continue;
        if (MenuHandleEvent((void *)0, &event, &err))
                continue;
        if (event.eType == frmLoadEvent)
                {
                formID = event.data.frmLoad.formID;
                form = FrmInitForm(formID);
                FrmSetActiveForm(form);
                switch (formID)
                        {
                        case Form1004:
                                FrmSetEventHandler(form, (FormEventHandlerPtr) frmMainEventH);
                                break;
                        
case Form1006:
                                FrmSetEventHandler(form, (FormEventHandlerPtr) Form1006EH);
                                break;
                        }
                }
        FrmDispatchEvent(&event);
        }
        while(event.eType != appStopEvent);
}

//---------------------------------------------------------------------------
static void StopApplication(void)
{
//Insert stop code here
FrmSaveAllForms();
FrmCloseAllForms();
}

//---------------------------------------------------------------------------
static Boolean frmMainEventH(EventPtr event)
{
FormPtr form;
int handled = 0;

switch (event->eType)
        {
        case frmOpenEvent:
                form = FrmGetActiveForm();
                FrmDrawForm(form);
                handled = 1;
                break;
        case ctlSelectEvent:
                if (event->data.ctlEnter.controlID == Button1005 )
                        {
                        
FrmGotoForm(Form1006);
                        handled = 1;
                        }
                break;
        case nilEvent:
                handled = 1;
                break;
        }
return handled;
}

//---------------------------------------------------------------------------
static Boolean Form1006EH(EventPtr event)
{
FormPtr form;
int handled = 0;

switch (event->eType)
        {
        case frmOpenEvent:
                form = FrmGetActiveForm();
                FrmDrawForm(form);
                handled = 1;
                break;
        case ctlSelectEvent:
                if (event->data.ctlEnter.controlID == Button1007 )
                        {
                        FrmGotoForm(Form1004);
                        handled = 1;
                        }
                break;
        case nilEvent:
                handled = 1;
                break;
        }
return handled;
}

이제 남은 것은 컴파일과 링크인데, PilotMAG에서는 전과정을 한번에 처리할 수 있다. 바로 Build Pilot Application의 단축키인 <F8>키를 누르기만 하면 된다. 물론 각 부분별로 나누어 진행하는 것도 가능하다. 다음 그림은 <F8>을 눌러, 팜상에서 실행 가능한 .prc파일을 한번에 만드는 것을 보여준다.

Upload:output.jpg

중간에 컴파일과 링크를 멈추려면 Upload:stop.gif 아이콘(평상시에는 안보이며, 컴파일하는 동안만 나타남)을 누르면 되는데, 이때 남게되는 임시 파일들은 지워주는 것이 좋다(Project 메뉴 중 Clean Project를 이용하면 된다).

자 이제 sample.prc파일이 생성되었다.
팜에 프로그램을 설치하는 것은 Upload:main_Install.gif 아이콘을 눌러 Install Tool을 실행시킨 후 핫싱크 버튼을 누르면 된다.

[edit]7. 몇가지 팁

Upload:ex3.jpg

[edit]8. 맺음말

지금까지 간단하게나마 PilotMAG의 기능을 살펴보았다. 사용자에 따라서 더 많은 기능을 활용할 수 있으리라 생각한다.
이 문서가 팜 프로그래밍에 처음 입문하는 분들께 조금이나마 도움이 되기를 바란다.

- 작성자: 이희용(selfhood@yahoo.com)

트랙백 주고받기

마지막 편집일: 2004-10-22 11:34 am (변경사항 [d])
2387 hits | 변경내역 보기 [h] | 페이지 소스 보기