1.7. Data aplikace na Palm Pilotovi
Struktura souboru *.prc
Soubory s příponou *.prc v sobě obsahují všechny prostředky, které tvoří jednu aplikaci: jednak její spustitelný kód, data pro inicializaci globálních proměnných, ikonu a jméno programu, ale i definici uživatelského rozhraní: formulářů, obrázků, textových konstant, menu programu, výzev - prostě všeho, co aplikace potřebuje k činnosti. Každý z těchto prostředků je jednoznačně určen svým typem a číslem. Typ je 32-bitová hodnota, často reprezentovaná jako 4-znaková konstanta. Číslo je uživatelem zvolené 16-bitové číslo prostředku. Na pořadí těchto prostředků v souboru nezáleží. Připomeňme si, že tyto prostředky spojuje do jednoho souboru program build-prc. Struktura souboru je na obrázku:
Typy prostředků, ve kterých jsou uloženy prvky uživatelského rozhraní a kód aplikace jsou v PalmOS pevně dané. Pro vaší informaci uvádím neúplný seznam prostředků, které mohou být přítomny v souboru *.prc:
Typ | Číslo | Popis |
---|---|---|
code | 1* | vlastní spustitelný kód programu |
pref | 0* | informace pro (budoucí verze) PalmOS o požadavcích programu na paměť. |
code | 0* | Velikost požadované paměti pro globální proměnné. |
data | 0* | Inicializace globálních proměnných (v komprimované podobě). |
Talt | libovolné | Definice výzvy (alert). |
tFRM | libovolné | Definice jednoho formuláře (form). |
tSTR | libovolné | Definice textové konstanty (string). |
MBAR | libovolné | Definice menu. |
Tbmp | libovolné | Obrázek (bitmap). |
FONT | libovolné | Definice vlastního písma. |
TRAP | > 1000 | Definice rozšíření systému pro program HackMaster. |
tAIS | libovolné | Seznam textových konstant, určený k například k inicializaci kategorií databáze při prvním spuštění programu. |
APPL | libovolné* | Jednoznačná identifikace prostředků programu - 4-písmenný kód. |
tAIN | libovolné* | Jméno ikony programu. |
tVER | libovolné* | Textové označení verze aplikace. |
tAIB | dle barev* | Ikony aplikace - může jich být víc; číslem prostředku jsou odlišeny ikony černobílé, v odstínech šedi a barevné. |
Prostředky, které jsou pro program povinné jsou v tabulce označeny hvězdičkou. Z toho první 4 v tabulce (s typy 'code', 'pref' a 'data') jsou vytvářeny v procesu překladu zdrojového textu programu (vytvoří je program m68k-palmos-obj-res) a poslední 4 jsou povinně definovány v souboru prostředků aplikace (*.rcp) a přeloží je program pilrc.
Jednoznačná identifikace programu
Každá aplikace pro Palm Pilota má přiřazeno vlastní unikátní 32bitové číslo (to je ona jednoznačná identifikace), které ji odlišuje od ostatních. Pokud na Palm Pilota instalujete aplikaci, která má stejnou jednoznačnou identifikaci jako starší aplikace, která už je přítomna, tak je stará aplikace nahrazena tou novější. Různé verze aplikace mohou mít stejnou jednoznačnou identifikaci a je to výhodné - instalujete-li novější verzi, je stará automaticky přemazána. Smažete-li na Palm Pilotovi aplikaci, jsou na základě tohoto jednoznačného kódu, který je označuje smazána i všechna její data.
Tento systém je výhodný z hlediska správy aplikací operačním systémem, programátorům však komplikuje život tím, že si musí svůj kód registrovat na webových stránkách společnosti Palm, Inc., která zdarma archivuje a přiděluje tyto jednoznačné identifikace na internetové adrese http://www.palmos.com/dev/tech/palmos/creatorid. Pro všechny aplikace popsané v této knize již byla registrována jednoznačná identifikace 'NECO'; proto už nemusíte pro programy z této knihy žádné další své jednoznačné identifikace registrovat. Z toho že mají všechny v knize popsané aplikace stejnou jednoznačnou identifikaci mimo jiné vyplývá, že pokud tuto jednoznačnou identifikaci u některé z aplikací v této knize nezměníte, tak můžete mít na svém Palm Pilotovi pouze jednu z těchto aplikací.
POZOR: Jednoznačné identifikace, ve kterých jsou použita pouze malá písmena anglické abecedy jsou vyhrazeny pro vývojáře společnosti Palm, Inc..
32bitové číslo bývá většinou reprezentováno jako 4písmenná znaková konstanta (v jazyce C/C++ uvedena v apostrofech). Některé známější programy mají (pro vaší informaci) registrovány následující jednoznačné identifikace:
Jméno aplikace | identifikace |
---|---|
Čeština GNU | 'CZcz' |
QEd - všechny verze | 'QEDi' |
List (freewarová databáze) | 'LSdb' |
Všechny programy v této knize | 'NECO' |
Pokud budete uvádět jednoznačnou identifikaci vaší aplikace v souboru Makefile pro program build-prc, můžete ale nemusíte ji dát do uvozovek:
build-prc appl.prc "MujProgram" NECO *.bin *.grc build-prc appl.prc "MujProgram" 'NECO' *.bin *.grc
Pokud budete jednoznačnou identifikaci vaší aplikace uvádět ve zdrojovém textu vašeho programu, uzavřete ji do apostrofů jako 4znakovou (32bitovou) konstantu. Následující dva řádky definují stejnou konstantu - jediný rozdíl je, že ten první je o něco čitelnější a proto mu budeme dávat přednost:
#define MOJE_IDENTIFIKACE 'NECO' #define MOJE_IDENTIFIKACE 0x4E45434F
A konečně pokud budete uvádět tuto identifikaci v souboru prostředků aplikace (s příponou *.rcp) tak bude v uvozovkách:
1.8. Hlavičkové soubory (header files)
Hlavičkové soubory pro PalmOS 3.5
Prototypy všech funkcí a konstant pro PalmOS 3.5 (znovu podotýkám, že je možné je použít ve většině případů i pro nižší verze operačního systému PalmOS) jsou dostupné po vložení souboru c:\PalmDev\sdk3.5\include\PalmOS.h do zdrojového textu vaší aplikace. Na začátku souboru zdrojového textu je třeba uvést deklaraci:
#include <PalmOS.h>
a všechny prototypy funkcí a konstant, které budete používat při programování PalmOS vám budou k dispozici.
Základní typy číselných proměnných
V hlavičkovém souboru PalmTypes.h jsou definovány základní číselné typy, které vývojáři PalmOS doporučují využívat místo datových typů jazyka C/C++ z důvodů jednoznačnosti a snadnější přenositelnosti zdrojových textů vaší aplikace mezi různými vývojovými prostředími (Windows - GCC a CodeWarrior, MacOS, Unix).
8bitové | 16bitové | 32bitové | |
se znaménkem | Int8 | Int16 | Int32 |
bez znaménka | UInt8 | UInt16 | UInt32 |
písmeno | Char | WChar | |
logické | Boolean | ||
kód chyby | Err | ||
obecný ukazatel | MemPtr |
Také jsou zde mimo jiné definovány konstanty true a false pro logický datový typ Boolean a hodnota NULL.
Při popisu funkcí, proměnných, konstant a typů dat operačního systému (které jsou popsány v hlavičkových souborech) použili vývojáři operačního systému PalmOS několik základních konvencí, které si zde musíme uvést. Funkce, proměnné i typy dat jsou uspořádány do skupin, podle jednotlivých podjednotek operačního systému (podjednotka pro práci s formuláři, s řetězci, se zvukem apod.).
Tyto konvence pro vytváření jmen funkcí, jsou důsledně dodržovány a doporučuji se jich držet i při psaní vlastních aplikací. Nejvýznamnější použité konvence jsou následující:
Funkce
- Jména funkcí začínají velkým počátečním písmenem (např. FrmGetActiveForm())
- Všechny funkce jedné podjednotky (například pro kreslení) začínají společným prefixem (např. StrCopy(), StrCat() a StrIToA() jsou funkce z podjednotky pracující s řetězci a mají společný prefix Str)
Proměnné
- Všechny globální proměnné PalmOS začínají velkým počátečním písmenem
- Lokální proměnné začínají malým počátečním písmenem
Typy dat
- Jednoduché datové typy začínají velkým písmenem (Char)
- Prvky struktury začínají s malým počátečním písmenem
- Definice typů (typedef) začínají velkým písmenem a končí slovem Type (například DateFormatType)
- Definice ukazatelů končí slovem Ptr (například ukazatel na strukturu RectangleType je pojmenován RectanglePtr)
- Prvky výčtového typu (enum) začínají prefixem z malých písmen, po kterém následuje jméno začínající velkým písmenem.
typedef struct RectangleType { PointType topLeft; PointType extent; } RectangleType; typedef RectangleType *RectanglePtr; typedef enum { blackPattern, whitePattern, grayPattern, customPattern } PatternType;
Tyto konvence, které vývojáři PalmOS důsledně dodržují nám pomohou orientovat se ve vlastních i cizích zdrojových textech (například podle počátečního písmena proměnné poznáme zda je lokální nebo globální; podle prvních několika písmen jména funkce poznáme, ve které skupině ji hledat apod.) Pro získání ucelené představy bych vám doporučil prohlédnout si některé z hlavičkových souborů PalmOS, které máte instalovány ve vašem počítači.
Příště si povíme o tom, jak operační systém PalmOS spouští programy a pak zkusíme dát všechno, co jsme doteď probrali dohromady a vytvoříme první program, který sice nebude dělat vůbec nic, ale zato to bude dělat správně.