[Home] English [Russian]
[Introduction] [Interface explanation] [Font structure] [Developer's corner] [Internet links]


INTRODUCTION.

 The Handy Pilot Font Editor (FE) is a bitmap font designing program for the Palm (tm) connected organizers.
FE allows you to design your own fonts for the PalmOS operation system, use system fonts as a font template, modify and store them to the Palm device memory. All saved fonts can be transfered to and from the desktop computer by HotSync synchronization.

FE runs on all Palm OS connected organizers: 3COM, IBM WorkPad (tm) and Visor (tm) handhelds.
The latest FE vesrion 1.9R. incorporates the following features:

  • FE is the only one font designing tool which runs on the Palm(tm) connected organizers.
  • Font databases created by FE are native and compatible with all FontHack programs and other PalmOS(tm) font tools.
  • Easy to use font designing interface.
  • Posibility to download PalmOS(tm) system fonts direct to the FE memory.
  • Extensive font designing functions.
  • Font and glyph preview anywhere it is needed.
  • Sound clicks when drawing.
  • Maximum character width and height is 25 pixels.
  • FE uses system clipboard. It means that you may import and export glyph images to/from other applications.
  • Stylus tap position indicator.
  • Font test window. You may test Font which you are designing on the fly.
  • Font Information window.

Created fonts may be embeded to any application you develop or substituted to any application by the following
HackMaster's extensions: FontHack123 (by Sergey Menshikov).
For additional font tools check Internet links page.

Look at Handy Pilot Font Editor demo version. Demo version has everything for font designing except font saving function. You may only save your font in complete version of FE. Complete version of FE costs $22.95 $25.95. Check buttons at the bootom of the page.

It is useful to set new Palm OS™ software update before install FE.
For Palm models you may obtain it from www.palm.com/support/downloads.
For Handspring models get it from www.handspring.com/support/product_support.jhtml.


Interface explanation.

  1. First start of Handy Pilot Font Editor.
  2. Window of Font Header parameters.
  3. Get Font Window.
  4. The Main Screen of editor.
  5. Font Test Window.
  6. Toolbar.
  7. Character selector.
  8. Save, Rename and Delete Fonts.
  9. Font Information.
  10. Menu explanation.

1. First start of Handy Pilot Font Editor.

  When you start FE for the first time, after installation, you see window which gives you to make two choises: load an exsit font or create new one. (Figure N: 1).
  If you would like to create new font just tap `Create New' button. Font Header window will apear on the screen (Figure N: 2). In this window you may set some header values.
  If you would like to load exist font from the Palm memory just tap on `Load Font!' button. Get Font window will be opened. (Figure N: 3).
Figure N:1 First start of the program.

2. Window of Font Header values.

  In the Font Header window you should set some necessary values: decimal ASCII code of the first and last character, ascent and descent values, and leading value (see Figure N: 2).
Figure N:2 Edit font header values.

This window incorporates seven fields:   Tap `OK' to set all entered values and programm returns to the main editor screen, where you may continue create new characters.
  Tap `CANCEL' button to discard entered values.
You may open Font Header window by EDIT->HEADER menu.

NOTE: You may raed full font structure explanation and explanation of font header values on
font structure link.

3. Get Font Window.

  In the `GET FONT' window you may load any exist font to the Font Editor memory.
  Tap on the font name to select it.
  To load selected font to the editor memory, you should tap on `Load' button.
  Program will load this font and then return to the main editor screen.
To return to the main screen without font loading just tap on the `Exit' button.

Figure N:3 Get font window.


4. Main editor screen.

Main editor screen of the program includes:
  1. Glyph drawing area.
  2. Button for character width changing, buttons for change character to edit, and field to enter ASCII code of the character you are going to edit. All of this control buttons are on the top of the screen.
  3. Character preview icon.
  4. Toolbar: 14 buttons which allows you to work with whole character image or just it's part.
  In the glyph drawing area you may change any bit of image. Press on any cell of image to invert it.
Figure N:4 Main editor screen.

  '+' and '-' buttons are for character width changing. Maximum width of character image is 25 pixels.
  Arrow buttons let you go to the next or previous character. You may enter ASCII decimal code to this field ASCII by graffity. To finish just write enter. `DFL' means that this symbol is default.
  Preview icon also works as button to call character selector.

5. Font Test Window.

Font Test Window allows you to see the text by the font you are developing.
Figure N:5 Font Test Window.

Just enter the text which you like to test to the fields or use '123', 'Abc', 'All' buttons to fill fields by sequence of characters. Use 'Exit' button to exit to the main screen.

6. Toolbar.

Toolbar is a group of 14 buttons which operates with marked area or whole glyph image.
Figure N:6 Toolbar.

,,, This four big arrows allow you to shift whole or only marked area to the four directions: left, right, up and down.
, Use this two buttons to rotate marked area of character image. This buttons rotate only in two directions.
, This two buttons allow you do mirroring (up and down, right and left).
Tap this button to invert whole image or marked area.
This button clears marked or whole area. The confirmation window will apear before action.
This button or Mark command in the Edit menu allows you mark area of character image. When this button is active (inverted) then mark mode is on. To mark an area: tap mark button to set marking mode active, tap somewhere in the drawing area to set first corner of marked area, second time you tap will finish marking.
This button or Paste command from Edit menu allows you get image from clipboard and put it to the place you moved it.
To put image to the buffer: set Paste mode active. Tap somewhere in the drawing area and image will apear on the screen, move it to the place you wish to put it and unpress stylus to finish operation.
This button, Ánd Copy command in the Edit menu copies marked area or whole image of character to the system clipboard.
This button or Cut comand in the Edit menu moves marked area to the system buffer and clears marked area to the editor.

7. Window of character selector.

Press this window to call "Character Selector" ( Figure N: 7 ).
Figure N:7 Character Selector.


  In the character selector window you may use scroll button and scrollbar area to navigate the font. Tap on the desired char to select it and then `ïë' button to return to the main editor screen. To return to the main screen without selection tap `CANCEL' button.

8. Font Save/Ren/Del window.

  Go to the `FONT' menu and select `Save/Ren/Del' submenu. In this dialog window (Figure N: 8) you will see list of all saved fonts.
Figure N:8 Font Save/Ren/Del window.


  To save font: fill out the `Name:' filed. Use checkbox to set or clear backup bit. Then tap `Save' button. Saved font will appear in the font list.
  To rename font: enter font name to the 'Name:' field, tap 'Ren' button, enter new font name into rename dialog window then tap 'Rename'. To return back without rename tap 'Cancel'.
  Here You may also delete font. Fill out 'Name:' field and then tap `Delete' button, confirmation window will apear, tap 'YES' to remove font from Palm memory.

  To return back to the main screen tap `Exit' button.

9. Font Information.

  Font Information (Figure N: 9) allows to see information about font you are currently designing. It shows: Font Name, Dimension (maximum width and height), time and date of the last save of the font, flag of modification, and amount of free PalmOS RAM memory.
Figure N:9 Info Panel.



10. Menu command description.

Figure N:10 Menu command description.


The FONT menu incorporates the folowing submenues:
The EDIT menu incorporates the folowing submenues and commands:
The OPTIONS menu incorporates the folowing submenues/command:


PALMOS FONT STRUCTURE.

 Font in the PalmOS looks like 'NFNT' bitmapped font resource which used on the Macintosh computers. PalmOS font consists of a header component, which describes the font, and a glyph data information component, which contains the definitions of the glyphs in the font. See table below:

+----------------------------------------------------+
|  0. FONT HEADER - (13 words or 26 bytes length).   |
+----------------------------------------------------+
|  1. BIT IMAGE TABLE (variable size).               |
+----------------------------------------------------+
|  2. BIT MAP LOCATION TABLE (variable size).        |
+----------------------------------------------------+
|  3. WIDTH OFFSET TABLE (variable size).            |
+----------------------------------------------------+

FONT HEADER:
Font header size is 13 Words (26 Bytes).
The header component is presented by the FontType C structure declaration which shown below:

--- [ Begin part of .../include/PalmOS3/UI/Font.h: ] ---

typedef struct {
        SWord fontType;         // font type
        SWord firstChar;        // ASCII code of first character
        SWord lastChar;         // ASCII code of last character
        SWord maxWidth;         // maximum character width
        SWord kernMax;          // negative of maximum character kern
        SWord nDescent;         // negative of descent
        SWord fRectWidth;       // width of font rectangle
        SWord fRectHeight;      // height of font rectangle
        SWord owTLoc;           // offset to offset/width table
        SWord ascent;           // ascent
        SWord descent;          // descent
        SWord leading;          // leading
        SWord rowWords;         // row width of bit image / 2
} FontType;
--- [ End part of .../include/PalmOS3/UI/Font.h: ] ---

Explanation of fontheader structure elements:

fontType Signed word value specifies the general characteristics of the font (fixed-width, proportional, colors and so on). Default value for PalmOS ROM fonts is 0x9000.
firstChar ASCII code of the first character in font. (0>= x <=255).
lastChar ASCII code of the last character in font. (0>= x <=255).
maxWidth Maximum width in the pixels of the widest character in the font.
kernMax Maximum kerning. An integer value that specifies the distance from the font rectangle's glyph origin to the left edge of the font rectangle, in pixels. If a glyph in the font kerns to the left, the amount is represented as a negative number. If the glyph origin lies on the left edge of the font rectangle, the value of the kernMax field is 0. In the PalmOS this value is 0 by default.
nDescent Negated descent value. If this font has very large tables and this value is positive, this value is the high word of the offset to the width/offset table (owTLoc). If this value is negative, it is the negative of the descent and is not used by the Font Manager.
fRectWidth Font rectangle width. An integer value that specifies the width, in pixels, of the image created if all the glyphs in the font were superimposed at their glyph origins.
fRectHeight Font rectangle height. An integer value that specifies the height, in pixels, of the image created if all the glyphs in the font were superimposed at their glyph origins. This value equals the sum of the maximum ascent and maximum descent measurements for the font.
owTLoc Offset to width/offset table. An integer value that specifies the offset to the offset/width table from this point in the font record, in words:

owTloc=rowWords*fRectHeight+(lastChar-firstChar)+8;

If this font has very large tables, this value is only the low word of the offset and the negated descent value (nDescent) is the high word:

nDescent=owTloc >> 16; owTLoc=owTloc & 0xFFFF;
ascent Maximum ascent. An integer value that specifies the maximum ascent measurement for the entire font, in pixels. The ascent is the distance from the glyph origin to the top of the font rectangle.
descent Maximum descent. An integer value that specifies the maximum descent measurement for the entire font, in pixels. The descent is the distance from the glyph origin to the bottom of the font rectangle.

ascent+descent=fRectHeight.
leading An integer value that specifies the leading measurement for the entire font, in pixels. Leading is the distance from the descent line of one line of single-spaced text to the ascent line of the next line of text.
rowWords Bit image row width. An integer value that specifies the width of the bit image, in words. This is the width of each glyph's bit image as a number of words.

rowpixels = rowWords * 16.

Explanation of glyph data information components:

* Bit image table. The bit image of the glyphs in the font. The glyph images of every defined glyph in the font are placed sequentially in order of increasing ASCII code. The bit image is one pixel image with no undefined stretches that has a height given by the value of the font rectangle element and a width given by the value of the bit image row width element.
Here is binary view of the BitImageTable of 8 pixels heigh for three characters: 'A', 'B' and for default char symbol:
   +--------+-------+------+.......
-->00000000000000000000000000000000--+
+->00111111011111100111111110000000--+
+->01000010001000010100000010000000--+
   01000010001111100100000010000000
   01111110001000010100000010000000
   01000010001000010100000010000000   
   11100111011111100111111110000000   
   00000000000000000000000000000000   
   +--------+-------+------+.......

The same in the hexadecimal view:
   0000 0000 3F7E EF80 4221 4080 423E 4080
   7E21 4080 4221 4080 E77E 7F80 0000 0000
NOTE: The image is padded at the end with extra pixels to make its length a multiple of 16.

* Bitmap location table. For every character in the font, this table contains a word that specifies the bit offset to the location of the bitmap for that glyph in the bit image table. If a glyph is missing from the font, its entry contains the same value for its location as the entry for the next glyph. The missing glyph is the last glyph of the bit image for that font. The last word of the table contains the offset to one bit beyond the end of the bit image.

For the characters 'A', 'B' and default symbol of the previous example this table is:
   0000 000A 0012 0020
You can determine the image width of each glyph from the bitmap location table by subtracting the bit offset to that glyph from the bit offset to the next glyph in the table.

* Width/offset table. For every glyph in the font, this table contains a word with the glyph offset in the high-order byte and the glyph's width, in integer form, in the low-order byte. The value of the offset, when added to the maximum kerning value for the font, determines the horizontal distance from the glyph origin to the left edge of the bit image of the glyph, in pixels. If this sum is negative, the glyph origin is to the right of the glyph image's left edge, meaning the glyph kerns to the left. If the sum is positive, the origin is to the left of the image's left edge. If the sum equals zero (by default), the glyph origin corresponds with the left edge of the bit image. Missing glyphs are represented by a word value of -1 (0xFFFF). The last word of this table is also -1, representing the end.

Thanks to Timothy Lyangouzov - for the some tips and cyrhack fonts.

If you have some info to add write me please.


DEVELOPER'S CORNER.

Here are fonts from font developers.



The following fonts are from Erik Van Blokland ( www.letterror.com):
LTRBitmaps.zip A zip bundle of seven beaty fonts. They ready for fonthack substitutions.

The following fonts are from Jason R. Cupp:
spinsugar.zip Zip archive with SpinSugar fonts. They are very good for system font replacement!

The following fonts .zip archive is from Rainer Zenz:
a-fonts.zip   A lot of professional Fonts for all needs. Better readable and elegant fonts, designed as replacement for the Palm OS fonts. The main family includes 12 fonts for all needs. The rest is everything from Ultra-Small to Blackletter. All with complete additional characters.


This font is from Harry Konstas, www.total.net:
hkfont.zip This is a 40x25 monospaced font (English, code page 437) designed to be used for with QED and onBoardC (for programmers).


This font is from Ronald E. Buelow, http://www.ealoha.com/palm
coolfnts.zip Some Cool Palm Fonts.
Replace your Palm Fonts with something a little more readable, easy to install.
Complete archive includes HackMaster, FontHack and several font tools.


The following fonts .zip archive is from Jiro:
Fonts.zip It is zip archive of beautiful fonts. (Palatino, Verdana, Coronet).

The following fonts included to the Handy Pilot Font Editor archive:
Narrowed.pdb You may use it instead PalmOS standard font.
Times.pdb Times font. Try to replace to large system one.

NOTE1: Files with .pdb extension are PalmOS databases with one record of font data. No unpackers needed for them. They are ready to be loaded direct to the Palm(tm) orgainzer memory.
NOTE2: If you have placed your fonts to the PalmGear H.Q. site, add it to the Development:Fonts subcategory too, please.







How to embed custom fonts to the program you develop. Palm OS v3.x

It is easy to embed custom fonts to Palm applications you develop. Here is four steps explanation of how to do it by PalmOS v3.0 API:

  1. Transfer font database from Palm handheld to your desktop computer. You will have <font_name>.pdb file in the backup directory. If you are using PilRC v2.03 (or higher) by Wes Cherry of Scumby Soft then skip next two steps and improve your .rcp file with new features.
  2. Extract font data record from font database file. Use any programmers binary editor to remove first 88 bytes of database header or use record to file convertion utility (see internet links page). Font data begins with 0x9000 value.
  3. Now you have extracted font data in the fontname.nft file. This binary file is ready to link as a resource to the program you are developing.
    At the end of Makefile process all files with *.bin extension are linked to the program as a resources. The first part of *.bin file name is resource name, the second is resorce ID.
    So, to add your font to program you shuld make a copy of extracted font data file to file with *.bin extension and give it resource name and ID.
    Let name font resource as 'pFNT' and its ID 1000 (0x03e8). For the example in the below, resource file is 'pFNT03e8.bin'. Just add line 'cp customfont.nft pFNT03e8.bin' to MakeFile before linknig.
  4. Look at the examples of the GNU C source code:
    --- [ globals.h ] ---
    #define CustomFont0		129
    ...
    
    --- [ main.rcp ] ---
    ...
    LABEL "Test of my Font" AUTOID AT (CENTER 64) USABLE FONT CustomFont0
    ...
   
    --- [ main.c ] ---
    static  VoidHand		FontHandle0;
    ...
    static int StartApplication( void )
    {
     /* 'pFNT' and 0x03e8 are custom font resourse name and its 
     hexadecimal reource id. */
     FontHandle0=DmGetResource( 'pFNT', 0x03e8);

     /* Now we define ID for memory block of custom font. Font ID should 
     be greater than 128 because values less than 128 are 
     reserved for system use. */
     FntDefineFont( CustomFont0, MemHandleLock( FontHandle0 ));
     FrmGotoForm( FormID_MainForm );
     return 0;
    }
 
    static int StopApplication( void )
    {
     FrmCloseAllForms();
     
     /* Unlock memory block and release custom font resource */
     MemHandleUnlock( FontHandle0 );
     DmReleaseResource( FontHandle0 );
     return 0;
    }
    ------------------
NOTE: FntDefineFont() function runs only on PalmOS v3.x and higher, so check version of PalmOS before run this function. Description of how to embed custom fonts on PalmOS versions 2.x is under writing and will be available soon.

Tips for the MetroWerks CodeWarrior(tm) users.

CodeWarrior's (v1.5lite) resource constructor is not allowing use custom font ID at all. Use third party resource utilites, or change font ID of objects inside of your program.
To add custom font data file as a custom resource to the CodeWarrior project you should follow this steps:
  1. Go to the 'EDIT menu'->'project name Settings'->'Targets'->'File Mappings'
  2. Set the following fields: FileType to 'TEXT', extension - '.r', Compiler 'Rez', clear all flags, press 'Change' and 'Save' button.
  3. Create res.r text file:
        --- [ res.r ] ---
        ...
        READ   'pFNT'  (0x3e8)  "customfont.nft";
        ...
        -----------------------
    
  4. Add res.r file to the resources group of the project and do make.

INTERNET LINKS.

Pilot Font Editor by Sergey Menshikov. This is another Palm Pilot font designing tool which works under Windows(tm).
FontHack123 a HackMaster utility to substitute fonts to PalmOS applications.
Pilot Font Tools by New Data Masters. This is another Palm Pilot font editor for Windows(tm).
FontHackPlus by Rick Bram another HackMaster extension for the font substitution.
HackMaster is a tool for managing extensions to the PalmOS. You will need it to run fonthacks.
TrueType allows you to view data on your pilot using TrueType fonts instead of the built-in pilot fonts.
AAA Font View By Richard Hartman. This program lets you preview font downloaded to the palm device.


PilRC is a resource compiler for PalmOS. Last version allowing you to add custom fonts as a resource.
.Pdb Files by Kenn Shirrif. It is a java program to break .pdb files into components (one file per record). It's useful program to extract font from .pdb file created by FE.
Makefont68 utility to convert bitmap Macintosh font to Palm one.
Z'Catalog a PalmOS database utility. Allows to beam font databases.


NOTE: If you get link that is not working or you like to add your own one then feel free to e-mail to author.

To download zip bundle of the latest demo version: To buy last complete version of FE by credit card. You may order FE by credit card or money transfer here.

This page updated 14-JUL-2001. E-mail your comments to info@symbioforge.com. Thank you.

Palm™ is a registered trademark of Palm Computing inc., 3Com Corporation or its subsidiaries. Other products and brandnames may be trademarks or registered trademarks of their respective owners.

Copyright © 1999-2001 Alexander Ovcharenko. All Rights Reserved.