]> git.karo-electronics.de Git - oswald.git/blob - ui/Fonts.c
Oh boy... lots of changes, too many to describe
[oswald.git] / ui / Fonts.c
1 //==============================================================================
2 //  Copyright 2011 Meta Watch Ltd. - http://www.MetaWatch.org/
3 // 
4 //  Licensed under the Meta Watch License, Version 1.0 (the "License");
5 //  you may not use this file except in compliance with the License.
6 //  You may obtain a copy of the License at
7 //  
8 //      http://www.MetaWatch.org/licenses/license-1.0.html
9 //
10 //  Unless required by applicable law or agreed to in writing, software
11 //  distributed under the License is distributed on an "AS IS" BASIS,
12 //  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 //  See the License for the specific language governing permissions and
14 //  limitations under the License.
15 //==============================================================================
16
17 #include <stdio.h>
18 #include "Fonts.h"
19
20 /*! The number of printable characters in the font tables */
21 #define PRINTABLE_CHARACTERS ( 94 )
22
23 #if defined(__GNUC__) && (__MSP430X__ > 0)
24 __attribute__((__far__))
25 #endif
26 const unsigned char MetaWatch5table[PRINTABLE_CHARACTERS][5];
27 #if defined(__GNUC__) && (__MSP430X__ > 0)
28 __attribute__((__far__))
29 #endif
30 const unsigned char MetaWatch7table[PRINTABLE_CHARACTERS][7];
31 #if defined(__GNUC__) && (__MSP430X__ > 0)
32 __attribute__((__far__))
33 #endif
34 const u16t MetaWatch16table[PRINTABLE_CHARACTERS][16];
35 #if defined(__GNUC__) && (__MSP430X__ > 0)
36 __attribute__((__far__))
37 #endif
38 const u16t MetaWatchTimeTable[TOTAL_TIME_CHARACTERS][19];
39 #if defined(__GNUC__) && (__MSP430X__ > 0)
40 __attribute__((__far__))
41 #endif
42 const unsigned char MetaWatchMonospaced10Table[PRINTABLE_CHARACTERS][10];
43
44 #if defined(__GNUC__) && (__MSP430X__ > 0)
45 __attribute__((__far__))
46 #endif
47 const unsigned char MetaWatch5width[PRINTABLE_CHARACTERS];
48 #if defined(__GNUC__) && (__MSP430X__ > 0)
49 __attribute__((__far__))
50 #endif
51 const unsigned char MetaWatch7width[PRINTABLE_CHARACTERS];
52 #if defined(__GNUC__) && (__MSP430X__ > 0)
53 __attribute__((__far__))
54 #endif
55 const unsigned char MetaWatch16width[PRINTABLE_CHARACTERS];
56 #if defined(__GNUC__) && (__MSP430X__ > 0)
57 __attribute__((__far__))
58 #endif
59 const unsigned char MetaWatchTimeWidth[TOTAL_TIME_CHARACTERS];
60
61 /*! Font Structure
62  *
63  * \param Type is the enumerated type of font
64  * \param Height
65  * \param Spacing is the horizontal spacing that should be inserted when
66  * drawing characters
67  */
68 typedef struct
69 {
70   etFontType Type;
71   unsigned char Height;
72   unsigned char Spacing;
73 } tFont;
74
75 static tFont CurrentFont;
76
77 void SetFont(etFontType Type)
78 {
79   switch (Type)
80   {
81   case MetaWatch5:
82     CurrentFont.Type = Type;
83     CurrentFont.Height = 5;
84     CurrentFont.Spacing = 1;
85     break;
86   
87   case MetaWatch7:
88     CurrentFont.Type = Type;
89     CurrentFont.Height = 7;
90     CurrentFont.Spacing = 1;
91     break;
92   
93   case MetaWatch16:
94     CurrentFont.Type = Type;
95     CurrentFont.Height = 16;
96     CurrentFont.Spacing = 1;
97     break;
98     
99   case MetaWatchTime:
100     CurrentFont.Type = Type;
101     CurrentFont.Height = 19;
102     CurrentFont.Spacing = 1;
103     break;
104
105   case MetaWatchMonospaced10:
106     CurrentFont.Type = Type;
107     CurrentFont.Height = 10;
108     CurrentFont.Spacing = 0;
109     break;    
110
111   default:
112     //printf("Undefined Font Selected\r\n");
113     break;
114   }  
115 }
116
117 unsigned char MapDigitToIndex(unsigned char Digit)
118 {
119   /* default is a space (the first printable character) */
120   return (Digit < 10 ? Digit + 0x10 : 0);
121 }
122
123
124 unsigned char GetCharacterWidth(unsigned char Character)
125
126   unsigned char index = MapCharacterToIndex(Character);
127   unsigned char Width = 0;
128   
129   switch (CurrentFont.Type)
130   {
131   case MetaWatch5:    Width = MetaWatch5width[index];    break;
132   case MetaWatch7:    Width = MetaWatch7width[index];    break;
133   case MetaWatch16:   Width = MetaWatch16width[index];   break;
134   case MetaWatchTime: Width = MetaWatchTimeWidth[index]; break;
135   case MetaWatchMonospaced10: Width = 7; break;
136   default : 
137     break;
138   }
139   
140   return Width;
141   
142 }
143
144 unsigned char GetCharacterHeight(void)
145 {
146   return CurrentFont.Height;  
147 }
148
149 void SetFontSpacing(unsigned char Spacing)
150 {
151   CurrentFont.Spacing = Spacing;  
152 }
153
154 unsigned char GetFontSpacing(void)
155 {
156   return CurrentFont.Spacing;  
157 }
158
159 unsigned char MapCharacterToIndex(unsigned char CharIn)
160 {
161   unsigned char Result = 0;
162
163   switch (CurrentFont.Type)
164   {
165   case MetaWatchTime: 
166     Result = CharIn;  
167     break;
168     
169   default : 
170     // space = 0x20 and 0x7f = delete character
171     if ( (CharIn >= 0x20) && (CharIn < 0x7f) )
172     {
173       Result = CharIn - 0x20;
174     }
175     break;
176   }
177   
178   return Result;
179   
180 }
181
182
183 void GetCharacterBitmap(unsigned char Character, u16t *pBitmap)
184 {
185   unsigned char index = MapCharacterToIndex(Character);
186
187   unsigned char row;
188   for (row = 0; row < CurrentFont.Height; row++ )
189   {
190     switch (CurrentFont.Type)
191     {
192     case MetaWatch5:
193       pBitmap[row] = (u16t)MetaWatch5table[index][row];  
194       break;
195   
196     case MetaWatch7:
197       pBitmap[row] = (u16t)MetaWatch7table[index][row];  
198       break;
199   
200     case MetaWatch16:
201       pBitmap[row] = MetaWatch16table[index][row];  
202       break;
203   
204     case MetaWatchTime:
205       pBitmap[row] = MetaWatchTimeTable[index][row];
206       break;
207       
208     case MetaWatchMonospaced10:
209       pBitmap[row] = MetaWatchMonospaced10Table[index][row];
210       break;
211     default:
212       break;
213     }
214   
215   }
216
217 }
218
219 #if defined(__GNUC__) && (__MSP430X__ > 0)
220 __attribute__((__far__))
221 #endif
222 const unsigned char MetaWatch5table[PRINTABLE_CHARACTERS][5] = 
223 {
224   /* character 0x20 (' '): (width = 2) */
225   {0x00, 0x00, 0x00, 0x00, 0x00,},
226   
227   /* character 0x21 ('!'): (width=1) */
228   {0x01, 0x01, 0x01, 0x00, 0x01,},
229   
230   /* character 0x22 ('"'): (width=3) */
231   {0x05, 0x05, 0x00, 0x00, 0x00,},
232   
233   /* character 0x23 ('#'): (width=5) */
234   { 0x0A, 0x1F, 0x0A, 0x1F, 0x0A,},
235   {
236   /* character 0x24 ('$'): (width=3) */
237   0x00, 0x00, 0x00, 0x00, 0x00,},
238   {
239   /* character 0x25 ('%'): (width=3) */
240   0x00, 0x00, 0x00, 0x00, 0x00,},
241   {
242   /* character 0x26 ('&'): (width=5) */
243   0x02, 0x05, 0x16, 0x09, 0x1E,},
244   {
245   /* character 0x27 ('''): (width=1) */
246   0x01, 0x01, 0x00, 0x00, 0x00,},
247   {
248   /* character 0x28 ('('): (width=2) */
249   0x02, 0x01, 0x01, 0x01, 0x02,},
250   {
251   /* character 0x29 (')'): (width=2) */
252   0x01, 0x02, 0x02, 0x02, 0x01,},
253   {
254   /* character 0x2A ('*'): (width=5) */
255   0x0A, 0x04, 0x1F, 0x04, 0x0A,},
256   {
257   /* character 0x2B ('+'): (width=5) */
258   0x04, 0x04, 0x1F, 0x04, 0x04,},
259   {
260   /* character 0x2C (','): (width=1) */
261   0x00, 0x00, 0x00, 0x01, 0x01,},
262   {
263   /* character 0x2D ('-'): (width=3) */
264   0x00, 0x00, 0x07, 0x00, 0x00,},
265   {
266   /* character 0x2E ('.'): (width=1) */
267   0x00, 0x00, 0x00, 0x00, 0x01,},
268   {
269   /* character 0x2F ('/'): (width=5) */
270   0x10, 0x08, 0x04, 0x02, 0x01,},
271   {
272   /* character 0x30 ('0'): (width=4) */
273   0x06, 0x09, 0x09, 0x09, 0x06,},
274   {
275   /* character 0x31 ('1'): (width=3) */
276   0x03, 0x02, 0x02, 0x02, 0x07,},
277   {
278   /* character 0x32 ('2'): (width=4) */
279   0x06, 0x09, 0x04, 0x02, 0x0F,},
280   {
281   /* character 0x33 ('3'): (width=4) */
282   0x0F, 0x08, 0x06, 0x08, 0x07,},
283   {
284   /* character 0x34 ('4'): (width=4) */
285   0x04, 0x06, 0x05, 0x0F, 0x04,},
286   {
287   /* character 0x35 ('5'): (width=4) */
288   0x0F, 0x01, 0x0F, 0x08, 0x07,},
289   {
290   /* character 0x36 ('6'): (width=4) */
291   0x06, 0x01, 0x07, 0x09, 0x06,},
292   {
293   /* character 0x37 ('7'): (width=4) */
294   0x0F, 0x08, 0x04, 0x02, 0x02,},
295   {
296   /* character 0x38 ('8'): (width=4) */
297   0x06, 0x09, 0x06, 0x09, 0x06,},
298   {
299   /* character 0x39 ('9'): (width=4) */
300   0x06, 0x09, 0x0E, 0x08, 0x06,},
301   {
302   /* character 0x3A (':'): (width=1) */
303   0x00, 0x01, 0x00, 0x01, 0x00,},
304   {
305   /* character 0x3B (';'): (width=2) */
306   0x00, 0x02, 0x00, 0x02, 0x01,},
307   {
308   /* character 0x3C ('<'): (width=3) */
309   0x04, 0x02, 0x01, 0x02, 0x04,},
310   {
311   /* character 0x3D ('='): (width=4) */
312   0x00, 0x0F, 0x00, 0x0F, 0x00,},
313   {
314   /* character 0x3E ('>'): (width=3) */
315   0x01, 0x02, 0x04, 0x02, 0x01,},
316   {
317   /* character 0x3F ('?'): (width=3) */
318   0x03, 0x04, 0x02, 0x00, 0x02,},
319   {
320   /* character 0x40 ('@'): (width=3) */
321   0x00, 0x00, 0x00, 0x00, 0x00,},
322   {
323   /* character 0x41 ('A'): (width=5) */
324   0x04, 0x04, 0x0A, 0x0E, 0x11,},
325   {
326   /* character 0x42 ('B'): (width=4) */
327   0x07, 0x09, 0x07, 0x09, 0x07,},
328   {
329   /* character 0x43 ('C'): (width=4) */
330   0x06, 0x09, 0x01, 0x09, 0x06,},
331   {
332   /* character 0x44 ('D'): (width=4) */
333   0x07, 0x09, 0x09, 0x09, 0x07,},
334   {
335   /* character 0x45 ('E'): (width=4) */
336   0x0F, 0x01, 0x07, 0x01, 0x0F,},
337   {
338   /* character 0x46 ('F'): (width=4) */
339   0x0F, 0x01, 0x07, 0x01, 0x01,},
340   {
341   /* character 0x47 ('G'): (width=4) */
342   0x06, 0x01, 0x0D, 0x09, 0x06,},
343   {
344   /* character 0x48 ('H'): (width=4) */
345   0x09, 0x09, 0x0F, 0x09, 0x09,},
346   {
347   /* character 0x49 ('I'): (width=3) */
348   0x07, 0x02, 0x02, 0x02, 0x07,},
349   {
350   /* character 0x4A ('J'): (width=4) */
351   0x08, 0x08, 0x08, 0x09, 0x06,},
352   {
353   /* character 0x4B ('K'): (width=4) */
354   0x09, 0x05, 0x03, 0x05, 0x09,},
355   {
356   /* character 0x4C ('L'): (width=4) */
357   0x01, 0x01, 0x01, 0x01, 0x0F,},
358   {
359   /* character 0x4D ('M'): (width=5) */
360   0x11, 0x1B, 0x15, 0x11, 0x11,},
361   {
362   /* character 0x4E ('N'): (width=5) */
363   0x11, 0x13, 0x15, 0x19, 0x11,},
364   {
365   /* character 0x4F ('O'): (width=4) */
366   0x06, 0x09, 0x09, 0x09, 0x06,},
367   {
368   /* character 0x50 ('P'): (width=4) */
369   0x07, 0x09, 0x07, 0x01, 0x01,},
370   {
371   /* character 0x51 ('Q'): (width=5) */
372   0x06, 0x09, 0x09, 0x09, 0x1E,},
373   {
374   /* character 0x52 ('R'): (width=4) */
375   0x07, 0x09, 0x07, 0x09, 0x09,},
376   {
377   /* character 0x53 ('S'): (width=4) */
378   0x0E, 0x01, 0x06, 0x08, 0x07,},
379   {
380   /* character 0x54 ('T'): (width=3) */
381   0x07, 0x02, 0x02, 0x02, 0x02,},
382   {
383   /* character 0x55 ('U'): (width=4) */
384   0x09, 0x09, 0x09, 0x09, 0x06,},
385   {
386   /* character 0x56 ('V'): (width=5) */
387   0x11, 0x0A, 0x0A, 0x04, 0x04,},
388   {
389   /* character 0x57 ('W'): (width=5) */
390   0x15, 0x15, 0x0A, 0x0A, 0x0A,},
391   {
392   /* character 0x58 ('X'): (width=4) */
393   0x09, 0x09, 0x06, 0x09, 0x09,},
394   {
395   /* character 0x59 ('Y'): (width=5) */
396   0x11, 0x0A, 0x04, 0x04, 0x04,},
397   {
398   /* character 0x5A ('Z'): (width=4) */
399   0x0F, 0x04, 0x02, 0x01, 0x0F,},
400   {
401   /* character 0x5B ('['): (width=2) */
402   0x03, 0x01, 0x01, 0x01, 0x03,},
403   {
404   /* character 0x5C ('\'): (width=5) */
405   0x01, 0x02, 0x04, 0x08, 0x10,},
406   {
407   /* character 0x5D (']'): (width=2) */
408   0x03, 0x02, 0x02, 0x02, 0x03,},
409   {
410   /* character 0x5E ('^'): (width=5) */
411   0x04, 0x0A, 0x11, 0x00, 0x00,},
412   {
413   /* character 0x5F ('_'): (width=4) */
414   0x00, 0x00, 0x00, 0x00, 0x0F,},
415   {
416   /* character 0x60 ('`'): (width=1) */
417   0x01, 0x01, 0x00, 0x00, 0x00,},
418   {
419   /* character 0x61 ('a'): (width=5) */
420   0x04, 0x04, 0x0A, 0x0E, 0x11,},
421   {
422   /* character 0x62 ('b'): (width=4) */
423   0x07, 0x09, 0x07, 0x09, 0x07,},
424   {
425   /* character 0x63 ('c'): (width=4) */
426   0x06, 0x09, 0x01, 0x09, 0x06,},
427   {
428   /* character 0x64 ('d'): (width=4) */
429   0x07, 0x09, 0x09, 0x09, 0x07,},
430   {
431   /* character 0x65 ('e'): (width=4) */
432   0x0F, 0x01, 0x07, 0x01, 0x0F,},
433   {
434   /* character 0x66 ('f'): (width=4) */
435   0x0F, 0x01, 0x07, 0x01, 0x01,},
436   {
437   /* character 0x67 ('g'): (width=4) */
438   0x06, 0x01, 0x0D, 0x09, 0x06,},
439   {
440   /* character 0x68 ('h'): (width=4) */
441   0x09, 0x09, 0x0F, 0x09, 0x09,},
442   {
443   /* character 0x69 ('i'): (width=3) */
444   0x07, 0x02, 0x02, 0x02, 0x07,},
445   {
446   /* character 0x6A ('j'): (width=4) */
447   0x08, 0x08, 0x08, 0x09, 0x06,},
448   {
449   /* character 0x6B ('k'): (width=4) */
450   0x09, 0x05, 0x03, 0x05, 0x09,},
451   {
452   /* character 0x6C ('l'): (width=4) */
453   0x01, 0x01, 0x01, 0x01, 0x0F,},
454   {
455   /* character 0x6D ('m'): (width=5) */
456   0x11, 0x1B, 0x15, 0x11, 0x11,},
457   {
458   /* character 0x6E ('n'): (width=5) */
459   0x11, 0x13, 0x15, 0x19, 0x11,},
460   {
461   /* character 0x6F ('o'): (width=4) */
462   0x06, 0x09, 0x09, 0x09, 0x06,},
463   {
464   /* character 0x70 ('p'): (width=4) */
465   0x07, 0x09, 0x07, 0x01, 0x01,},
466   {
467   /* character 0x71 ('q'): (width=5) */
468   0x06, 0x09, 0x09, 0x09, 0x1E,},
469   {
470   /* character 0x72 ('r'): (width=4) */
471   0x07, 0x09, 0x07, 0x09, 0x09,},
472   {
473   /* character 0x73 ('s'): (width=4) */
474   0x0E, 0x01, 0x06, 0x08, 0x07,},
475   {
476   /* character 0x74 ('t'): (width=3) */
477   0x07, 0x02, 0x02, 0x02, 0x02,},
478   {
479   /* character 0x75 ('u'): (width=4) */
480   0x09, 0x09, 0x09, 0x09, 0x06,},
481   {
482   /* character 0x76 ('v'): (width=5) */
483   0x11, 0x0A, 0x0A, 0x04, 0x04,},
484   {
485   /* character 0x77 ('w'): (width=5) */
486   0x15, 0x15, 0x0A, 0x0A, 0x0A,},
487   {
488   /* character 0x78 ('x'): (width=4) */
489   0x09, 0x09, 0x06, 0x09, 0x09,},
490   {
491   /* character 0x79 ('y'): (width=5) */
492   0x11, 0x0A, 0x04, 0x04, 0x04,},
493   {
494   /* character 0x7A ('z'): (width=4) */
495   0x0F, 0x04, 0x02, 0x01, 0x0F,},
496   {
497   /* character 0x7B ('{'): (width=3) */
498   0x00, 0x00, 0x00, 0x00, 0x00,},
499   {
500   /* character 0x7C ('|'): (width=1) */
501   0x01, 0x01, 0x01, 0x01, 0x01,},
502   {
503   /* character 0x7D ('}'): (width=3) */
504   0x00, 0x00, 0x00, 0x00, 0x00,},
505 };
506
507 #if defined(__GNUC__) && (__MSP430X__ > 0)
508 __attribute__((__far__))
509 #endif
510 const unsigned char MetaWatch5width[PRINTABLE_CHARACTERS] = 
511 {
512 /*              width    char    hexcode */
513 /*              =====    ====    ======= */
514                   2, /*  '  '    20      */
515                   1, /*   !      21      */
516                   3, /*   "      22      */
517                   5, /*   #      23      */
518                   3, /*   $      24      */
519                   3, /*   %      25      */
520                   5, /*   &      26      */
521                   1, /*   '      27      */
522                   2, /*   (      28      */
523                   2, /*   )      29      */
524                   5, /*   *      2A      */
525                   5, /*   +      2B      */
526                   1, /*   ,      2C      */
527                   3, /*   -      2D      */
528                   1, /*   .      2E      */
529                   5, /*   /      2F      */
530                   4, /*   0      30      */
531                   3, /*   1      31      */
532                   4, /*   2      32      */
533                   4, /*   3      33      */
534                   4, /*   4      34      */
535                   4, /*   5      35      */
536                   4, /*   6      36      */
537                   4, /*   7      37      */
538                   4, /*   8      38      */
539                   4, /*   9      39      */
540                   1, /*   :      3A      */
541                   2, /*   ;      3B      */
542                   3, /*   <      3C      */
543                   4, /*   =      3D      */
544                   3, /*   >      3E      */
545                   3, /*   ?      3F      */
546                   3, /*   @      40      */
547                   5, /*   A      41      */
548                   4, /*   B      42      */
549                   4, /*   C      43      */
550                   4, /*   D      44      */
551                   4, /*   E      45      */
552                   4, /*   F      46      */
553                   4, /*   G      47      */
554                   4, /*   H      48      */
555                   3, /*   I      49      */
556                   4, /*   J      4A      */
557                   4, /*   K      4B      */
558                   4, /*   L      4C      */
559                   5, /*   M      4D      */
560                   5, /*   N      4E      */
561                   4, /*   O      4F      */
562                   4, /*   P      50      */
563                   5, /*   Q      51      */
564                   4, /*   R      52      */
565                   4, /*   S      53      */
566                   3, /*   T      54      */
567                   4, /*   U      55      */
568                   5, /*   V      56      */
569                   5, /*   W      57      */
570                   4, /*   X      58      */
571                   5, /*   Y      59      */
572                   4, /*   Z      5A      */
573                   2, /*   [      5B      */
574                   5, /*   \      5C      */
575                   2, /*   ]      5D      */
576                   5, /*   ^      5E      */
577                   4, /*   _      5F      */
578                   1, /*   `      60      */
579                   5, /*   a      61      */
580                   4, /*   b      62      */
581                   4, /*   c      63      */
582                   4, /*   d      64      */
583                   4, /*   e      65      */
584                   4, /*   f      66      */
585                   4, /*   g      67      */
586                   4, /*   h      68      */
587                   3, /*   i      69      */
588                   4, /*   j      6A      */
589                   4, /*   k      6B      */
590                   4, /*   l      6C      */
591                   5, /*   m      6D      */
592                   5, /*   n      6E      */
593                   4, /*   o      6F      */
594                   4, /*   p      70      */
595                   5, /*   q      71      */
596                   4, /*   r      72      */
597                   4, /*   s      73      */
598                   3, /*   t      74      */
599                   4, /*   u      75      */
600                   5, /*   v      76      */
601                   5, /*   w      77      */
602                   4, /*   x      78      */
603                   5, /*   y      79      */
604                   4, /*   z      7A      */
605                   3, /*   {      7B      */
606                   1, /*   |      7C      */
607                   3, /*   }      7D      */
608 };
609
610 #if defined(__GNUC__) && (__MSP430X__ > 0)
611 __attribute__((__far__))
612 #endif
613 const unsigned char MetaWatch7table[PRINTABLE_CHARACTERS][7] = 
614 {
615
616   /* character 0x20 (' '): (width = 2) */
617   {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
618   /* character 0x21 ('!'): (width=1) */
619   {0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01,},
620   {
621   /* character 0x22 ('"'): (width=3) */
622   0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,},
623   {
624   /* character 0x23 ('#'): (width=7) */
625   0x00, 0x28, 0x7E, 0x14, 0x3F, 0x0A, 0x00,},
626   {
627   /* character 0x24 ('$'): (width=5) */
628   0x04, 0x1E, 0x05, 0x0E, 0x14, 0x0F, 0x04,},
629   {
630   /* character 0x25 ('%'): (width=7) */
631   0x42, 0x25, 0x15, 0x2A, 0x54, 0x52, 0x21,},
632   {
633   /* character 0x26 ('&'): (width=5) */
634   0x02, 0x05, 0x05, 0x02, 0x15, 0x09, 0x16,},
635   {
636   /* character 0x27 ('''): (width=3) */
637   0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,},
638   {
639   /* character 0x28 ('('): (width=3) */
640   0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x04,},
641   {
642   /* character 0x29 (')'): (width=3) */
643   0x01, 0x02, 0x04, 0x04, 0x04, 0x02, 0x01,},
644   {
645   /* character 0x2A ('*'): (width=7) */
646   0x08, 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x08,},
647   {
648   /* character 0x2B ('+'): (width=5) */
649   0x00, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x00,},
650   {
651   /* character 0x2C (','): (width=1) */
652   0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,},
653   {
654   /* character 0x2D ('-'): (width=4) */
655   0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,},
656   {
657   /* character 0x2E ('.'): (width=1) */
658   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,},
659   {
660   /* character 0x2F ('/'): (width=4) */
661   0x08, 0x08, 0x04, 0x06, 0x02, 0x01, 0x01,},
662   {
663   /* character 0x30 ('0'): (width=4) */
664   0x06, 0x09, 0x09, 0x09, 0x09, 0x09, 0x06,},
665   {
666   /* character 0x31 ('1'): (width=2) */
667   0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02,},
668   {
669   /* character 0x32 ('2'): (width=4) */
670   0x06, 0x09, 0x08, 0x04, 0x02, 0x01, 0x0F,},
671   {
672   /* character 0x33 ('3'): (width=4) */
673   0x06, 0x09, 0x08, 0x06, 0x08, 0x09, 0x06,},
674   {
675   /* character 0x34 ('4'): (width=5) */
676   0x04, 0x04, 0x0A, 0x09, 0x1F, 0x08, 0x08,},
677   {
678   /* character 0x35 ('5'): (width=4) */
679   0x0F, 0x01, 0x07, 0x08, 0x08, 0x09, 0x06,},
680   {
681   /* character 0x36 ('6'): (width=4) */
682   0x06, 0x01, 0x07, 0x09, 0x09, 0x09, 0x06,},
683   {
684   /* character 0x37 ('7'): (width=4) */
685   0x0F, 0x08, 0x04, 0x04, 0x02, 0x02, 0x02,},
686   {
687   /* character 0x38 ('8'): (width=4) */
688   0x06, 0x09, 0x09, 0x06, 0x09, 0x09, 0x06,},
689   {
690   /* character 0x39 ('9'): (width=4) */
691   0x06, 0x09, 0x09, 0x09, 0x0E, 0x08, 0x06,},
692   {
693   /* character 0x3A (':'): (width=1) */
694   0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,},
695   {
696   /* character 0x3B (';'): (width=1) */
697   0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01,},
698   {
699   /* character 0x3C ('<'): (width=3) */
700   0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00,},
701   {
702   /* character 0x3D ('='): (width=4) */
703   0x00, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x00,},
704   {
705   /* character 0x3E ('>'): (width=3) */
706   0x00, 0x01, 0x02, 0x04, 0x02, 0x01, 0x00,},
707   {
708   /* character 0x3F ('?'): (width=4) */
709   0x07, 0x08, 0x04, 0x02, 0x02, 0x00, 0x02,},
710   {
711   /* character 0x40 ('@'): (width=7) */
712   0x3C, 0x42, 0x59, 0x55, 0x39, 0x02, 0x3C,},
713   {
714   /* character 0x41 ('A'): (width=7) */
715   0x08, 0x08, 0x14, 0x14, 0x3E, 0x22, 0x41,},
716   {
717   /* character 0x42 ('B'): (width=5) */
718   0x0F, 0x11, 0x11, 0x0F, 0x11, 0x11, 0x0F,},
719   {
720   /* character 0x43 ('C'): (width=5) */
721   0x0C, 0x12, 0x01, 0x01, 0x01, 0x12, 0x0C,},
722   {
723   /* character 0x44 ('D'): (width=5) */
724   0x07, 0x09, 0x11, 0x11, 0x11, 0x09, 0x07,},
725   {
726   /* character 0x45 ('E'): (width=4) */
727   0x0F, 0x01, 0x01, 0x07, 0x01, 0x01, 0x0F,},
728   {
729   /* character 0x46 ('F'): (width=4) */
730   0x0F, 0x01, 0x01, 0x07, 0x01, 0x01, 0x01,},
731   {
732   /* character 0x47 ('G'): (width=6) */
733   0x0C, 0x12, 0x01, 0x39, 0x21, 0x12, 0x0C,},
734   {
735   /* character 0x48 ('H'): (width=5) */
736   0x11, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11,},
737   {
738   /* character 0x49 ('I'): (width=3) */
739   0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07,},
740   {
741   /* character 0x4A ('J'): (width=5) */
742   0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x0E,},
743   {
744   /* character 0x4B ('K'): (width=5) */
745   0x11, 0x09, 0x05, 0x03, 0x05, 0x09, 0x11,},
746   {
747   /* character 0x4C ('L'): (width=4) */
748   0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F,},
749   {
750   /* character 0x4D ('M'): (width=7) */
751   0x41, 0x63, 0x63, 0x55, 0x55, 0x49, 0x49,},
752   {
753   /* character 0x4E ('N'): (width=6) */
754   0x21, 0x23, 0x25, 0x2D, 0x29, 0x31, 0x21,},
755   {
756   /* character 0x4F ('O'): (width=6) */
757   0x0C, 0x12, 0x21, 0x21, 0x21, 0x12, 0x0C,},
758   {
759   /* character 0x50 ('P'): (width=4) */
760   0x07, 0x09, 0x09, 0x07, 0x01, 0x01, 0x01,},
761   {
762   /* character 0x51 ('Q'): (width=7) */
763   0x0C, 0x12, 0x21, 0x21, 0x21, 0x12, 0x6C,},
764   {
765   /* character 0x52 ('R'): (width=5) */
766   0x0F, 0x11, 0x11, 0x0F, 0x09, 0x11, 0x11,},
767   {
768   /* character 0x53 ('S'): (width=4) */
769   0x06, 0x09, 0x01, 0x06, 0x08, 0x09, 0x06,},
770   {
771   /* character 0x54 ('T'): (width=5) */
772   0x1F, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,},
773   {
774   /* character 0x55 ('U'): (width=5) */
775   0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E,},
776   {
777   /* character 0x56 ('V'): (width=7) */
778   0x41, 0x22, 0x22, 0x14, 0x14, 0x08, 0x08,},
779   {
780   /* character 0x57 ('W'): (width=7) */
781   0x49, 0x49, 0x49, 0x55, 0x55, 0x22, 0x22,},
782   {
783   /* character 0x58 ('X'): (width=5) */
784   0x11, 0x1B, 0x0A, 0x04, 0x0A, 0x1B, 0x11,},
785   {
786   /* character 0x59 ('Y'): (width=7) */
787   0x41, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08,},
788   {
789   /* character 0x5A ('Z'): (width=5) */
790   0x1F, 0x10, 0x08, 0x04, 0x02, 0x01, 0x1F,},
791   {
792   /* character 0x5B ('['): (width=3) */
793   0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07,},
794   {
795   /* character 0x5C ('\'): (width=4) */
796   0x01, 0x01, 0x02, 0x06, 0x04, 0x08, 0x08,},
797   {
798   /* character 0x5D (']'): (width=3) */
799   0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07,},
800   {
801   /* character 0x5E ('^'): (width=5) */
802   0x04, 0x0A, 0x11, 0x00, 0x00, 0x00, 0x00,},
803   {
804   /* character 0x5F ('_'): (width=5) */
805   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,},
806   {
807   /* character 0x60 ('`'): (width=1) */
808   0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,},
809   {
810   /* character 0x61 ('a'): (width=7) */
811   0x08, 0x08, 0x14, 0x14, 0x3E, 0x22, 0x41,},
812   {
813   /* character 0x62 ('b'): (width=5) */
814   0x0F, 0x11, 0x11, 0x0F, 0x11, 0x11, 0x0F,},
815   {
816   /* character 0x63 ('c'): (width=5) */
817   0x0C, 0x12, 0x01, 0x01, 0x01, 0x12, 0x0C,},
818   {
819   /* character 0x64 ('d'): (width=5) */
820   0x07, 0x09, 0x11, 0x11, 0x11, 0x09, 0x07,},
821   {
822   /* character 0x65 ('e'): (width=4) */
823   0x0F, 0x01, 0x01, 0x07, 0x01, 0x01, 0x0F,},
824   {
825   /* character 0x66 ('f'): (width=4) */
826   0x0F, 0x01, 0x01, 0x07, 0x01, 0x01, 0x01,},
827   {
828   /* character 0x67 ('g'): (width=6) */
829   0x0C, 0x12, 0x01, 0x39, 0x21, 0x12, 0x0C,},
830   {
831   /* character 0x68 ('h'): (width=5) */
832   0x11, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11,},
833   {
834   /* character 0x69 ('i'): (width=3) */
835   0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07,},
836   {
837   /* character 0x6A ('j'): (width=5) */
838   0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x0E,},
839   {
840   /* character 0x6B ('k'): (width=5) */
841   0x11, 0x09, 0x05, 0x03, 0x05, 0x09, 0x11,},
842   {
843   /* character 0x6C ('l'): (width=4) */
844   0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F,},
845   {
846   /* character 0x6D ('m'): (width=7) */
847   0x41, 0x63, 0x63, 0x55, 0x55, 0x49, 0x49,},
848   {
849   /* character 0x6E ('n'): (width=6) */
850   0x21, 0x23, 0x25, 0x2D, 0x29, 0x31, 0x21,},
851   {
852   /* character 0x6F ('o'): (width=6) */
853   0x0C, 0x12, 0x21, 0x21, 0x21, 0x12, 0x0C,},
854   {
855   /* character 0x70 ('p'): (width=4) */
856   0x07, 0x09, 0x09, 0x07, 0x01, 0x01, 0x01,},
857   {
858   /* character 0x71 ('q'): (width=7) */
859   0x0C, 0x12, 0x21, 0x21, 0x21, 0x12, 0x6C,},
860   {
861   /* character 0x72 ('r'): (width=5) */
862   0x0F, 0x11, 0x11, 0x0F, 0x09, 0x11, 0x11,},
863   {
864   /* character 0x73 ('s'): (width=4) */
865   0x06, 0x09, 0x01, 0x06, 0x08, 0x09, 0x06,},
866   {
867   /* character 0x74 ('t'): (width=5) */
868   0x1F, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,},
869   {
870   /* character 0x75 ('u'): (width=5) */
871   0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E,},
872   {
873   /* character 0x76 ('v'): (width=7) */
874   0x41, 0x22, 0x22, 0x14, 0x14, 0x08, 0x08,},
875   {
876   /* character 0x77 ('w'): (width=7) */
877   0x49, 0x49, 0x49, 0x55, 0x55, 0x22, 0x22,},
878   {
879   /* character 0x78 ('x'): (width=5) */
880   0x11, 0x1B, 0x0A, 0x04, 0x0A, 0x1B, 0x11,},
881   {
882   /* character 0x79 ('y'): (width=7) */
883   0x41, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08,},
884   {
885   /* character 0x7A ('z'): (width=5) */
886   0x1F, 0x10, 0x08, 0x04, 0x02, 0x01, 0x1F,},
887   {
888   /* character 0x7B ('{'): (width=3) */
889   0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x04,},
890   {
891   /* character 0x7C ('|'): (width=1) */
892   0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,},
893   {
894   /* character 0x7D ('}'): (width=3) */
895   0x01, 0x02, 0x04, 0x04, 0x04, 0x02, 0x01,},
896
897 };
898
899 #if defined(__GNUC__) && (__MSP430X__ > 0)
900 __attribute__((__far__))
901 #endif
902 const unsigned char MetaWatch7width[PRINTABLE_CHARACTERS] = {
903 /*              width    char    hexcode */
904 /*              =====    ====    ======= */
905         2, /*  '  '    20      */
906                   1, /*   !      21      */
907                   3, /*   "      22      */
908                   7, /*   #      23      */
909                   5, /*   $      24      */
910                   7, /*   %      25      */
911                   5, /*   &      26      */
912                   3, /*   '      27      */
913                   3, /*   (      28      */
914                   3, /*   )      29      */
915                   7, /*   *      2A      */
916                   5, /*   +      2B      */
917                   1, /*   ,      2C      */
918                   4, /*   -      2D      */
919                   1, /*   .      2E      */
920                   4, /*   /      2F      */
921                   4, /*   0      30      */
922                   2, /*   1      31      */
923                   4, /*   2      32      */
924                   4, /*   3      33      */
925                   5, /*   4      34      */
926                   4, /*   5      35      */
927                   4, /*   6      36      */
928                   4, /*   7      37      */
929                   4, /*   8      38      */
930                   4, /*   9      39      */
931                   1, /*   :      3A      */
932                   1, /*   ;      3B      */
933                   3, /*   <      3C      */
934                   4, /*   =      3D      */
935                   3, /*   >      3E      */
936                   4, /*   ?      3F      */
937                   7, /*   @      40      */
938                   7, /*   A      41      */
939                   5, /*   B      42      */
940                   5, /*   C      43      */
941                   5, /*   D      44      */
942                   4, /*   E      45      */
943                   4, /*   F      46      */
944                   6, /*   G      47      */
945                   5, /*   H      48      */
946                   3, /*   I      49      */
947                   5, /*   J      4A      */
948                   5, /*   K      4B      */
949                   4, /*   L      4C      */
950                   7, /*   M      4D      */
951                   6, /*   N      4E      */
952                   6, /*   O      4F      */
953                   4, /*   P      50      */
954                   7, /*   Q      51      */
955                   5, /*   R      52      */
956                   4, /*   S      53      */
957                   5, /*   T      54      */
958                   5, /*   U      55      */
959                   7, /*   V      56      */
960                   7, /*   W      57      */
961                   5, /*   X      58      */
962                   7, /*   Y      59      */
963                   5, /*   Z      5A      */
964                   3, /*   [      5B      */
965                   4, /*   \      5C      */
966                   3, /*   ]      5D      */
967                   5, /*   ^      5E      */
968                   5, /*   _      5F      */
969                   1, /*   `      60      */
970                   7, /*   a      61      */
971                   5, /*   b      62      */
972                   5, /*   c      63      */
973                   5, /*   d      64      */
974                   4, /*   e      65      */
975                   4, /*   f      66      */
976                   6, /*   g      67      */
977                   5, /*   h      68      */
978                   3, /*   i      69      */
979                   5, /*   j      6A      */
980                   5, /*   k      6B      */
981                   4, /*   l      6C      */
982                   7, /*   m      6D      */
983                   6, /*   n      6E      */
984                   6, /*   o      6F      */
985                   4, /*   p      70      */
986                   7, /*   q      71      */
987                   5, /*   r      72      */
988                   4, /*   s      73      */
989                   5, /*   t      74      */
990                   5, /*   u      75      */
991                   7, /*   v      76      */
992                   7, /*   w      77      */
993                   5, /*   x      78      */
994                   7, /*   y      79      */
995                   5, /*   z      7A      */
996                   3, /*   {      7B      */
997                   1, /*   |      7C      */
998                   3, /*   }      7D      */
999 };
1000
1001
1002 #if defined(__GNUC__) && (__MSP430X__ > 0)
1003 __attribute__((__far__))
1004 #endif
1005 const u16t MetaWatch16table[PRINTABLE_CHARACTERS][16] = 
1006 {
1007   /* character 0x20 (' '): (width=4) */
1008   {0x0000, 0x0000, 0x0000, 0x0000,
1009   0x0000, 0x0000, 0x0000, 0x0000,
1010   0x0000, 0x0000, 0x0000, 0x0000,
1011   0x0000, 0x0000, 0x0000, 0x0000},
1012   
1013   /* character 0x21 ('!'): (width=2) */
1014   {0x0000, 0x0000, 0x0003, 0x0003,
1015   0x0003, 0x0003, 0x0003, 0x0003,
1016   0x0003, 0x0003, 0x0000, 0x0003,
1017   0x0003, 0x0000, 0x0000, 0x0000},
1018   /* character 0x22 ('"'): (width=5) */
1019   {0x0000, 0x0012, 0x001B, 0x001B,
1020   0x0009, 0x0000, 0x0000, 0x0000,
1021   0x0000, 0x0000, 0x0000, 0x0000,
1022   0x0000, 0x0000, 0x0000, 0x0000},
1023   
1024   /* character 0x23 ('#'): (width=12) */
1025   {0x0000, 0x0000, 0x0000, 0x0110,
1026   0x0198, 0x0FFE, 0x07FF, 0x0198,
1027   0x0198, 0x0FFE, 0x07FF, 0x0198,
1028   0x0088, 0x0000, 0x0000, 0x0000},
1029   
1030   /* character 0x24 ('$'): (width=6) */
1031   {0x000C, 0x000C, 0x001E, 0x003F,
1032   0x0033, 0x0003, 0x0007, 0x001E,
1033   0x0038, 0x0030, 0x0033, 0x003F,
1034   0x001E, 0x000C, 0x000C, 0x0000},
1035   
1036   /* character 0x25 ('%'): (width=10) */
1037   {0x0000, 0x020E, 0x031F, 0x039B,
1038   0x01DF, 0x00EE, 0x0070, 0x0038,
1039   0x01DC, 0x03EE, 0x0367, 0x03E3,
1040   0x01C1, 0x0000, 0x0000, 0x0000},
1041   
1042   /* character 0x26 ('&'): (width=10) */
1043   {0x0000, 0x0000, 0x001C, 0x003E,
1044   0x0036, 0x003E, 0x001C, 0x01BE,
1045   0x01F7, 0x00E3, 0x01F7, 0x03BE,
1046   0x031C, 0x0000, 0x0000, 0x0000},
1047   
1048   /* character 0x27 ('''): (width=2) */
1049   {0x0000, 0x0002, 0x0003, 0x0003,
1050   0x0001, 0x0000, 0x0000, 0x0000,
1051   0x0000, 0x0000, 0x0000, 0x0000,
1052   0x0000, 0x0000, 0x0000, 0x0000},
1053   {
1054   /* character 0x28 ('('): (width=4) */
1055   0x0008, 0x0004, 0x0006, 0x0006,
1056   0x0003, 0x0003, 0x0003, 0x0003,
1057   0x0003, 0x0003, 0x0003, 0x0006,
1058   0x0006, 0x0004, 0x0008, 0x0000},
1059   {
1060   /* character 0x29 (')'): (width=4) */
1061   0x0001, 0x0002, 0x0006, 0x0006,
1062   0x000C, 0x000C, 0x000C, 0x000C,
1063   0x000C, 0x000C, 0x000C, 0x0006,
1064   0x0006, 0x0002, 0x0001, 0x0000},
1065   {
1066   /* character 0x2A ('*'): (width=8) */
1067   0x0000, 0x0000, 0x0018, 0x0018,
1068   0x00DB, 0x00FF, 0x003C, 0x00FF,
1069   0x00DB, 0x0018, 0x0018, 0x0000,
1070   0x0000, 0x0000, 0x0000, 0x0000},
1071   {
1072   /* character 0x2B ('+'): (width=8) */
1073   0x0000, 0x0000, 0x0000, 0x0000,
1074   0x0018, 0x0018, 0x0018, 0x00FF,
1075   0x00FF, 0x0018, 0x0018, 0x0018,
1076   0x0000, 0x0000, 0x0000, 0x0000},
1077   {
1078   /* character 0x2C (','): (width=2) */
1079   0x0000, 0x0000, 0x0000, 0x0000,
1080   0x0000, 0x0000, 0x0000, 0x0000,
1081   0x0000, 0x0000, 0x0000, 0x0002,
1082   0x0003, 0x0003, 0x0001, 0x0000},
1083   {
1084   /* character 0x2D ('-'): (width=8) */
1085   0x0000, 0x0000, 0x0000, 0x0000,
1086   0x0000, 0x0000, 0x0000, 0x00FF,
1087   0x00FF, 0x0000, 0x0000, 0x0000,
1088   0x0000, 0x0000, 0x0000, 0x0000},
1089   {
1090   /* character 0x2E ('.'): (width=2) */
1091   0x0000, 0x0000, 0x0000, 0x0000,
1092   0x0000, 0x0000, 0x0000, 0x0000,
1093   0x0000, 0x0000, 0x0000, 0x0003,
1094   0x0003, 0x0000, 0x0000, 0x0000},
1095   {
1096   /* character 0x2F ('/'): (width=6) */
1097   0x0000, 0x0000, 0x0000, 0x0030,
1098   0x0030, 0x0018, 0x0018, 0x000C,
1099   0x000C, 0x0006, 0x0006, 0x0003,
1100   0x0003, 0x0000, 0x0000, 0x0000},
1101   {
1102   /* character 0x30 ('0'): (width=7) */
1103   0x0000, 0x0000, 0x001C, 0x003E,
1104   0x0036, 0x0063, 0x0063, 0x0063,
1105   0x0063, 0x0063, 0x0036, 0x003E,
1106   0x001C, 0x0000, 0x0000, 0x0000},
1107   {
1108   /* character 0x31 ('1'): (width=3) */
1109   0x0000, 0x0000, 0x0006, 0x0007,
1110   0x0007, 0x0006, 0x0006, 0x0006,
1111   0x0006, 0x0006, 0x0006, 0x0006,
1112   0x0006, 0x0000, 0x0000, 0x0000},
1113   {
1114   /* character 0x32 ('2'): (width=6) */
1115   0x0000, 0x0000, 0x001E, 0x003F,
1116   0x0033, 0x0030, 0x0038, 0x001C,
1117   0x000E, 0x0007, 0x0003, 0x003F,
1118   0x003F, 0x0000, 0x0000, 0x0000},
1119   {
1120   /* character 0x33 ('3'): (width=6) */
1121   0x0000, 0x0000, 0x001E, 0x003F,
1122   0x0033, 0x0030, 0x001C, 0x003C,
1123   0x0030, 0x0030, 0x0033, 0x003F,
1124   0x001E, 0x0000, 0x0000, 0x0000},
1125   {
1126   /* character 0x34 ('4'): (width=7) */
1127   0x0000, 0x0000, 0x000C, 0x000C,
1128   0x000C, 0x0036, 0x0036, 0x0033,
1129   0x007F, 0x007F, 0x0030, 0x0030,
1130   0x0030, 0x0000, 0x0000, 0x0000},
1131   {
1132   /* character 0x35 ('5'): (width=6) */
1133   0x0000, 0x0000, 0x003F, 0x003F,
1134   0x0003, 0x0003, 0x001F, 0x003F,
1135   0x0030, 0x0030, 0x0033, 0x003F,
1136   0x001E, 0x0000, 0x0000, 0x0000},
1137   {
1138   /* character 0x36 ('6'): (width=6) */
1139   0x0000, 0x0000, 0x000C, 0x000E,
1140   0x0006, 0x0003, 0x001F, 0x003F,
1141   0x0033, 0x0033, 0x0033, 0x001F,
1142   0x001E, 0x0000, 0x0000, 0x0000},
1143   {
1144   /* character 0x37 ('7'): (width=6) */
1145   0x0000, 0x0000, 0x003F, 0x003F,
1146   0x0030, 0x0030, 0x0018, 0x0018,
1147   0x000C, 0x000C, 0x000C, 0x000C,
1148   0x000C, 0x0000, 0x0000, 0x0000},
1149   {
1150   /* character 0x38 ('8'): (width=6) */
1151   0x0000, 0x0000, 0x001E, 0x003F,
1152   0x0033, 0x0033, 0x003F, 0x001E,
1153   0x0033, 0x0033, 0x0033, 0x003F,
1154   0x001E, 0x0000, 0x0000, 0x0000},
1155   {
1156   /* character 0x39 ('9'): (width=6) */
1157   0x0000, 0x0000, 0x001E, 0x003F,
1158   0x0033, 0x0033, 0x0033, 0x003F,
1159   0x003E, 0x0030, 0x0018, 0x001C,
1160   0x000C, 0x0000, 0x0000, 0x0000},
1161   {
1162   /* character 0x3A (':'): (width=2) */
1163   0x0000, 0x0000, 0x0000, 0x0000,
1164   0x0000, 0x0003, 0x0003, 0x0000,
1165   0x0000, 0x0003, 0x0003, 0x0000,
1166   0x0000, 0x0000, 0x0000, 0x0000},
1167   
1168   /* character 0x3B (';'): (width=2) */
1169   {0x0000, 0x0000, 0x0000, 0x0000,
1170   0x0000, 0x0003, 0x0003, 0x0000,
1171   0x0002, 0x0003, 0x0003, 0x0001,
1172   0x0000, 0x0000, 0x0000, 0x0000},
1173   {
1174   /* character 0x3C ('<'): (width=8) */
1175   0x0000, 0x0000, 0x0000, 0x0000,
1176   0x00C0, 0x00F0, 0x003C, 0x000F,
1177   0x003C, 0x00F0, 0x00C0, 0x0000,
1178   0x0000, 0x0000, 0x0000, 0x0000},
1179   {
1180   /* character 0x3D ('='): (width=7) */
1181   0x0000, 0x0000, 0x0000, 0x0000,
1182   0x0000, 0x0000, 0x007F, 0x007F,
1183   0x0000, 0x007F, 0x007F, 0x0000,
1184   0x0000, 0x0000, 0x0000, 0x0000},
1185   {
1186   /* character 0x3E ('>'): (width=8) */
1187   0x0000, 0x0000, 0x0000, 0x0000,
1188   0x0003, 0x000F, 0x003C, 0x00F0,
1189   0x003C, 0x000F, 0x0003, 0x0000,
1190   0x0000, 0x0000, 0x0000, 0x0000},
1191   {
1192   /* character 0x3F ('?'): (width=6) */
1193   0x0000, 0x0000, 0x001E, 0x003F,
1194   0x0033, 0x0030, 0x0018, 0x001C,
1195   0x000C, 0x000C, 0x0000, 0x000C,
1196   0x000C, 0x0000, 0x0000, 0x0000},
1197   {
1198   /* character 0x40 ('@'): (width=11) */
1199   0x0000, 0x0000, 0x01F8, 0x03FE,
1200   0x0706, 0x06F3, 0x06FB, 0x06DB,
1201   0x07FB, 0x03F3, 0x0006, 0x01FE,
1202   0x00F8, 0x0000, 0x0000, 0x0000},
1203   {
1204   /* character 0x41 ('A'): (width=9) */
1205   0x0000, 0x0000, 0x0010, 0x0010,
1206   0x0038, 0x0038, 0x006C, 0x006C,
1207   0x00C6, 0x00C6, 0x01FF, 0x0183,
1208   0x0183, 0x0000, 0x0000, 0x0000},
1209   {
1210   /* character 0x42 ('B'): (width=7) */
1211   0x0000, 0x0000, 0x003F, 0x007F,
1212   0x0063, 0x0063, 0x003F, 0x007F,
1213   0x0063, 0x0063, 0x0063, 0x007F,
1214   0x003F, 0x0000, 0x0000, 0x0000},
1215   {
1216   /* character 0x43 ('C'): (width=7) */
1217   0x0000, 0x0000, 0x003E, 0x007F,
1218   0x0063, 0x0003, 0x0003, 0x0003,
1219   0x0003, 0x0003, 0x0063, 0x007F,
1220   0x003E, 0x0000, 0x0000, 0x0000},
1221   {
1222   /* character 0x44 ('D'): (width=7) */
1223   0x0000, 0x0000, 0x003F, 0x007F,
1224   0x0063, 0x0063, 0x0063, 0x0063,
1225   0x0063, 0x0063, 0x0063, 0x007F,
1226   0x003F, 0x0000, 0x0000, 0x0000},
1227   {
1228   /* character 0x45 ('E'): (width=7) */
1229   0x0000, 0x0000, 0x007F, 0x007F,
1230   0x0003, 0x0003, 0x001F, 0x001F,
1231   0x0003, 0x0003, 0x0003, 0x007F,
1232   0x007F, 0x0000, 0x0000, 0x0000},
1233   {
1234   /* character 0x46 ('F'): (width=6) */
1235   0x0000, 0x0000, 0x003F, 0x003F,
1236   0x0003, 0x0003, 0x003F, 0x003F,
1237   0x0003, 0x0003, 0x0003, 0x0003,
1238   0x0003, 0x0000, 0x0000, 0x0000},
1239   {
1240   /* character 0x47 ('G'): (width=7) */
1241   0x0000, 0x0000, 0x003E, 0x007F,
1242   0x0063, 0x0003, 0x0003, 0x007B,
1243   0x007B, 0x0063, 0x0063, 0x007F,
1244   0x003E, 0x0000, 0x0000, 0x0000},
1245   {
1246   /* character 0x48 ('H'): (width=7) */
1247   0x0000, 0x0000, 0x0063, 0x0063,
1248   0x0063, 0x0063, 0x007F, 0x007F,
1249   0x0063, 0x0063, 0x0063, 0x0063,
1250   0x0063, 0x0000, 0x0000, 0x0000},
1251   {
1252   /* character 0x49 ('I'): (width=4) */
1253   0x0000, 0x0000, 0x000F, 0x000F,
1254   0x0006, 0x0006, 0x0006, 0x0006,
1255   0x0006, 0x0006, 0x0006, 0x000F,
1256   0x000F, 0x0000, 0x0000, 0x0000},
1257   {
1258   /* character 0x4A ('J'): (width=6) */
1259   0x0000, 0x0000, 0x0030, 0x0030,
1260   0x0030, 0x0030, 0x0030, 0x0030,
1261   0x0030, 0x0030, 0x0033, 0x003F,
1262   0x001E, 0x0000, 0x0000, 0x0000},
1263   {
1264   /* character 0x4B ('K'): (width=7) */
1265   0x0000, 0x0000, 0x0063, 0x0073,
1266   0x003B, 0x001F, 0x000F, 0x0007,
1267   0x000F, 0x001F, 0x003B, 0x0073,
1268   0x0063, 0x0000, 0x0000, 0x0000},
1269   {
1270   /* character 0x4C ('L'): (width=6) */
1271   0x0000, 0x0000, 0x0003, 0x0003,
1272   0x0003, 0x0003, 0x0003, 0x0003,
1273   0x0003, 0x0003, 0x0003, 0x003F,
1274   0x003F, 0x0000, 0x0000, 0x0000},
1275   {
1276   /* character 0x4D ('M'): (width=11) */
1277   0x0000, 0x0000, 0x0401, 0x0603,
1278   0x0707, 0x078F, 0x07DF, 0x06FB,
1279   0x0673, 0x0623, 0x0603, 0x0603,
1280   0x0603, 0x0000, 0x0000, 0x0000},
1281   {
1282   /* character 0x4E ('N'): (width=9) */
1283   0x0000, 0x0000, 0x0181, 0x0183,
1284   0x0187, 0x018F, 0x019F, 0x01BB,
1285   0x01F3, 0x01E3, 0x01C3, 0x0183,
1286   0x0103, 0x0000, 0x0000, 0x0000},
1287   {
1288   /* character 0x4F ('O'): (width=7) */
1289   0x0000, 0x0000, 0x003E, 0x007F,
1290   0x0063, 0x0063, 0x0063, 0x0063,
1291   0x0063, 0x0063, 0x0063, 0x007F,
1292   0x003E, 0x0000, 0x0000, 0x0000},
1293   {
1294   /* character 0x50 ('P'): (width=7) */
1295   0x0000, 0x0000, 0x003F, 0x007F,
1296   0x0063, 0x0063, 0x0063, 0x007F,
1297   0x003F, 0x0003, 0x0003, 0x0003,
1298   0x0003, 0x0000, 0x0000, 0x0000},
1299   {
1300   /* character 0x51 ('Q'): (width=8) */
1301   0x0000, 0x0000, 0x003E, 0x007F,
1302   0x0063, 0x0063, 0x0063, 0x0063,
1303   0x0063, 0x0063, 0x0063, 0x007F,
1304   0x003E, 0x00F0, 0x0060, 0x0000},
1305   {
1306   /* character 0x52 ('R'): (width=7) */
1307   0x0000, 0x0000, 0x003F, 0x007F,
1308   0x0063, 0x0063, 0x0063, 0x003F,
1309   0x007F, 0x0063, 0x0063, 0x0063,
1310   0x0063, 0x0000, 0x0000, 0x0000},
1311   {
1312   /* character 0x53 ('S'): (width=6) */
1313   0x0000, 0x0000, 0x001E, 0x003F,
1314   0x0033, 0x0003, 0x0007, 0x001E,
1315   0x0038, 0x0030, 0x0033, 0x003F,
1316   0x001E, 0x0000, 0x0000, 0x0000},
1317   {
1318   /* character 0x54 ('T'): (width=6) */
1319   0x0000, 0x0000, 0x003F, 0x003F,
1320   0x000C, 0x000C, 0x000C, 0x000C,
1321   0x000C, 0x000C, 0x000C, 0x000C,
1322   0x000C, 0x0000, 0x0000, 0x0000},
1323   {
1324   /* character 0x55 ('U'): (width=7) */
1325   0x0000, 0x0000, 0x0063, 0x0063,
1326   0x0063, 0x0063, 0x0063, 0x0063,
1327   0x0063, 0x0063, 0x0063, 0x007F,
1328   0x003E, 0x0000, 0x0000, 0x0000},
1329   {
1330   /* character 0x56 ('V'): (width=7) */
1331   0x0000, 0x0000, 0x0063, 0x0063,
1332   0x0063, 0x0036, 0x0036, 0x0036,
1333   0x001C, 0x001C, 0x001C, 0x0008,
1334   0x0008, 0x0000, 0x0000, 0x0000},
1335   {
1336   /* character 0x57 ('W'): (width=11) */
1337   0x0000, 0x0000, 0x0603, 0x0623,
1338   0x0623, 0x0376, 0x0376, 0x0376,
1339   0x01DC, 0x01DC, 0x01DC, 0x0088,
1340   0x0088, 0x0000, 0x0000, 0x0000},
1341   {
1342   /* character 0x58 ('X'): (width=7) */
1343   0x0000, 0x0000, 0x0063, 0x0063,
1344   0x0036, 0x0036, 0x001C, 0x001C,
1345   0x001C, 0x0036, 0x0036, 0x0063,
1346   0x0063, 0x0000, 0x0000, 0x0000},
1347   {
1348   /* character 0x59 ('Y'): (width=8) */
1349   0x0000, 0x0000, 0x00C3, 0x00C3,
1350   0x0066, 0x0066, 0x003C, 0x003C,
1351   0x0018, 0x0018, 0x0018, 0x0018,
1352   0x0018, 0x0000, 0x0000, 0x0000},
1353   {
1354   /* character 0x5A ('Z'): (width=7) */
1355   0x0000, 0x0000, 0x007F, 0x007F,
1356   0x0030, 0x0030, 0x0018, 0x0018,
1357   0x000C, 0x000E, 0x0006, 0x007F,
1358   0x007F, 0x0000, 0x0000, 0x0000},
1359   {
1360   /* character 0x5B ('['): (width=4) */
1361   0x000F, 0x000F, 0x0003, 0x0003,
1362   0x0003, 0x0003, 0x0003, 0x0003,
1363   0x0003, 0x0003, 0x0003, 0x0003,
1364   0x0003, 0x000F, 0x000F, 0x0000},
1365   {
1366   /* character 0x5C ('\'): (width=6) */
1367   0x0000, 0x0000, 0x0000, 0x0003,
1368   0x0003, 0x0006, 0x0006, 0x000C,
1369   0x000C, 0x0018, 0x0018, 0x0030,
1370   0x0030, 0x0000, 0x0000, 0x0000},
1371   {
1372   /* character 0x5D (']'): (width=4) */
1373   0x000F, 0x000F, 0x000C, 0x000C,
1374   0x000C, 0x000C, 0x000C, 0x000C,
1375   0x000C, 0x000C, 0x000C, 0x000C,
1376   0x000C, 0x000F, 0x000F, 0x0000},
1377   {
1378   /* character 0x5E ('^'): (width=7) */
1379   0x0000, 0x0000, 0x0000, 0x0008,
1380   0x0008, 0x001C, 0x001C, 0x0036,
1381   0x0036, 0x0063, 0x0063, 0x0000,
1382   0x0000, 0x0000, 0x0000, 0x0000},
1383   {
1384   /* character 0x5F ('_'): (width=9) */
1385   0x0000, 0x0000, 0x0000, 0x0000,
1386   0x0000, 0x0000, 0x0000, 0x0000,
1387   0x0000, 0x0000, 0x0000, 0x0000,
1388   0x01FF, 0x0000, 0x0000, 0x0000},
1389   {
1390   /* character 0x60 ('`'): (width=3) */
1391   0x0000, 0x0000, 0x0000, 0x0001,
1392   0x0003, 0x0006, 0x0004, 0x0000,
1393   0x0000, 0x0000, 0x0000, 0x0000,
1394   0x0000, 0x0000, 0x0000, 0x0000},
1395   {
1396   /* character 0x61 ('a'): (width=6) */
1397   0x0000, 0x0000, 0x0000, 0x0000,
1398   0x0000, 0x001E, 0x003F, 0x0030,
1399   0x003E, 0x003F, 0x0033, 0x003F,
1400   0x003E, 0x0000, 0x0000, 0x0000},
1401   {
1402   /* character 0x62 ('b'): (width=6) */
1403   0x0000, 0x0000, 0x0003, 0x0003,
1404   0x0003, 0x001F, 0x003F, 0x0033,
1405   0x0033, 0x0033, 0x0033, 0x003F,
1406   0x001F, 0x0000, 0x0000, 0x0000},
1407   {
1408   /* character 0x63 ('c'): (width=6) */
1409   0x0000, 0x0000, 0x0000, 0x0000,
1410   0x0000, 0x001E, 0x003F, 0x0033,
1411   0x0003, 0x0003, 0x0033, 0x003F,
1412   0x001E, 0x0000, 0x0000, 0x0000},
1413   {
1414   /* character 0x64 ('d'): (width=6) */
1415   0x0000, 0x0000, 0x0030, 0x0030,
1416   0x0030, 0x003E, 0x003F, 0x0033,
1417   0x0033, 0x0033, 0x0033, 0x003F,
1418   0x003E, 0x0000, 0x0000, 0x0000},
1419   {
1420   /* character 0x65 ('e'): (width=6) */
1421   0x0000, 0x0000, 0x0000, 0x0000,
1422   0x0000, 0x001E, 0x003F, 0x0033,
1423   0x003F, 0x003F, 0x0003, 0x003F,
1424   0x001E, 0x0000, 0x0000, 0x0000},
1425   {
1426   /* character 0x66 ('f'): (width=4) */
1427   0x0000, 0x0000, 0x000C, 0x000E,
1428   0x0006, 0x000F, 0x000F, 0x0006,
1429   0x0006, 0x0006, 0x0006, 0x0006,
1430   0x0006, 0x0000, 0x0000, 0x0000},
1431   {
1432   /* character 0x67 ('g'): (width=6) */
1433   0x0000, 0x0000, 0x0000, 0x0000,
1434   0x0000, 0x003E, 0x003F, 0x0033,
1435   0x0033, 0x0033, 0x0033, 0x003F,
1436   0x003E, 0x0030, 0x003E, 0x001C},
1437   {
1438   /* character 0x68 ('h'): (width=6) */
1439   0x0000, 0x0000, 0x0003, 0x0003,
1440   0x0003, 0x001F, 0x003F, 0x0033,
1441   0x0033, 0x0033, 0x0033, 0x0033,
1442   0x0033, 0x0000, 0x0000, 0x0000},
1443   {
1444   /* character 0x69 ('i'): (width=2) */
1445   0x0000, 0x0000, 0x0003, 0x0003,
1446   0x0000, 0x0003, 0x0003, 0x0003,
1447   0x0003, 0x0003, 0x0003, 0x0003,
1448   0x0003, 0x0000, 0x0000, 0x0000},
1449   {
1450   /* character 0x6A ('j'): (width=5) */
1451   0x0000, 0x0000, 0x0018, 0x0018,
1452   0x0000, 0x0018, 0x0018, 0x0018,
1453   0x0018, 0x0018, 0x0018, 0x0018,
1454   0x0018, 0x0018, 0x001F, 0x000E},
1455   {
1456   /* character 0x6B ('k'): (width=6) */
1457   0x0000, 0x0000, 0x0003, 0x0003,
1458   0x0003, 0x0033, 0x003B, 0x001F,
1459   0x000F, 0x000F, 0x001F, 0x003B,
1460   0x0033, 0x0000, 0x0000, 0x0000},
1461   {
1462   /* character 0x6C ('l'): (width=2) */
1463   0x0000, 0x0000, 0x0003, 0x0003,
1464   0x0003, 0x0003, 0x0003, 0x0003,
1465   0x0003, 0x0003, 0x0003, 0x0003,
1466   0x0003, 0x0000, 0x0000, 0x0000},
1467   {
1468   /* character 0x6D ('m'): (width=10) */
1469   0x0000, 0x0000, 0x0000, 0x0000,
1470   0x0000, 0x01DB, 0x03FF, 0x0377,
1471   0x0333, 0x0333, 0x0333, 0x0333,
1472   0x0333, 0x0000, 0x0000, 0x0000},
1473   {
1474   /* character 0x6E ('n'): (width=6) */
1475   0x0000, 0x0000, 0x0000, 0x0000,
1476   0x0000, 0x001B, 0x003F, 0x0037,
1477   0x0033, 0x0033, 0x0033, 0x0033,
1478   0x0033, 0x0000, 0x0000, 0x0000},
1479   {
1480   /* character 0x6F ('o'): (width=6) */
1481   0x0000, 0x0000, 0x0000, 0x0000,
1482   0x0000, 0x001E, 0x003F, 0x0033,
1483   0x0033, 0x0033, 0x0033, 0x003F,
1484   0x001E, 0x0000, 0x0000, 0x0000},
1485   {
1486   /* character 0x70 ('p'): (width=6) */
1487   0x0000, 0x0000, 0x0000, 0x0000,
1488   0x0000, 0x001F, 0x003F, 0x0033,
1489   0x0033, 0x0033, 0x0033, 0x001F,
1490   0x001F, 0x0003, 0x0003, 0x0003},
1491   {
1492   /* character 0x71 ('q'): (width=6) */
1493   0x0000, 0x0000, 0x0000, 0x0000,
1494   0x0000, 0x003E, 0x003F, 0x0033,
1495   0x0033, 0x0033, 0x0033, 0x003E,
1496   0x003E, 0x0030, 0x0030, 0x0030},
1497   {
1498   /* character 0x72 ('r'): (width=5) */
1499   0x0000, 0x0000, 0x0000, 0x0000,
1500   0x0000, 0x001B, 0x001F, 0x0007,
1501   0x0003, 0x0003, 0x0003, 0x0003,
1502   0x0003, 0x0000, 0x0000, 0x0000},
1503   {
1504   /* character 0x73 ('s'): (width=5) */
1505   0x0000, 0x0000, 0x0000, 0x0000,
1506   0x0000, 0x000E, 0x001F, 0x0003,
1507   0x000F, 0x001E, 0x0018, 0x001F,
1508   0x000E, 0x0000, 0x0000, 0x0000},
1509   {
1510   /* character 0x74 ('t'): (width=4) */
1511   0x0000, 0x0000, 0x0004, 0x0006,
1512   0x0006, 0x000F, 0x000F, 0x0006,
1513   0x0006, 0x0006, 0x0006, 0x000E,
1514   0x000C, 0x0000, 0x0000, 0x0000},
1515   {
1516   /* character 0x75 ('u'): (width=6) */
1517   0x0000, 0x0000, 0x0000, 0x0000,
1518   0x0000, 0x0033, 0x0033, 0x0033,
1519   0x0033, 0x0033, 0x0033, 0x003F,
1520   0x003E, 0x0000, 0x0000, 0x0000},
1521   {
1522   /* character 0x76 ('v'): (width=7) */
1523   0x0000, 0x0000, 0x0000, 0x0000,
1524   0x0000, 0x0063, 0x0063, 0x0036,
1525   0x0036, 0x001C, 0x001C, 0x0008,
1526   0x0008, 0x0000, 0x0000, 0x0000},
1527   {
1528   /* character 0x77 ('w'): (width=11) */
1529   0x0000, 0x0000, 0x0000, 0x0000,
1530   0x0000, 0x0623, 0x0623, 0x0376,
1531   0x0376, 0x01DC, 0x01DC, 0x0088,
1532   0x0088, 0x0000, 0x0000, 0x0000},
1533   {
1534   /* character 0x78 ('x'): (width=7) */
1535   0x0000, 0x0000, 0x0000, 0x0000,
1536   0x0000, 0x0063, 0x0077, 0x003E,
1537   0x001C, 0x001C, 0x003E, 0x0077,
1538   0x0063, 0x0000, 0x0000, 0x0000},
1539   {
1540   /* character 0x79 ('y'): (width=6) */
1541   0x0000, 0x0000, 0x0000, 0x0000,
1542   0x0000, 0x0033, 0x0033, 0x0033,
1543   0x0033, 0x0033, 0x0033, 0x003F,
1544   0x003E, 0x0030, 0x003E, 0x001C},
1545   {
1546   /* character 0x7A ('z'): (width=6) */
1547   0x0000, 0x0000, 0x0000, 0x0000,
1548   0x0000, 0x003F, 0x003F, 0x0030,
1549   0x0018, 0x000C, 0x0006, 0x003F,
1550   0x003F, 0x0000, 0x0000, 0x0000},
1551   {
1552   /* character 0x7B ('{'): (width=4) */
1553   0x0008, 0x0004, 0x0006, 0x0006,
1554   0x0003, 0x0003, 0x0003, 0x0003,
1555   0x0003, 0x0003, 0x0003, 0x0006,
1556   0x0006, 0x0004, 0x0008, 0x0000},
1557   {
1558   /* character 0x7C ('|'): (width=2) */
1559   0x0000, 0x0003, 0x0003, 0x0003,
1560   0x0003, 0x0003, 0x0000, 0x0000,
1561   0x0003, 0x0003, 0x0003, 0x0003,
1562   0x0003, 0x0000, 0x0000, 0x0000},
1563   {
1564   /* character 0x7D ('}'): (width=4) */
1565   0x0001, 0x0002, 0x0006, 0x0006,
1566   0x000C, 0x000C, 0x000C, 0x000C,
1567   0x000C, 0x000C, 0x000C, 0x0006,
1568   0x0006, 0x0002, 0x0001, 0x0000},
1569 };
1570
1571 #if defined(__GNUC__) && (__MSP430X__ > 0)
1572 __attribute__((__far__))
1573 #endif
1574 const unsigned char MetaWatch16width[PRINTABLE_CHARACTERS] = 
1575 {
1576 /*              width    char    hexcode */
1577 /*              =====    ====    ======= */
1578         4, /*  '  '    20      */
1579                   2, /*   !      21      */
1580                   5, /*   "      22      */
1581                  12, /*   #      23      */
1582                   6, /*   $      24      */
1583                  10, /*   %      25      */
1584                  10, /*   &      26      */
1585                   2, /*   '      27      */
1586                   4, /*   (      28      */
1587                   4, /*   )      29      */
1588                   8, /*   *      2A      */
1589                   8, /*   +      2B      */
1590                   2, /*   ,      2C      */
1591                   8, /*   -      2D      */
1592                   2, /*   .      2E      */
1593                   6, /*   /      2F      */
1594                   7, /*   0      30      */
1595                   3, /*   1      31      */
1596                   6, /*   2      32      */
1597                   6, /*   3      33      */
1598                   7, /*   4      34      */
1599                   6, /*   5      35      */
1600                   6, /*   6      36      */
1601                   6, /*   7      37      */
1602                   6, /*   8      38      */
1603                   6, /*   9      39      */
1604                   2, /*   :      3A      */
1605                   2, /*   ;      3B      */
1606                   8, /*   <      3C      */
1607                   7, /*   =      3D      */
1608                   8, /*   >      3E      */
1609                   6, /*   ?      3F      */
1610                  11, /*   @      40      */
1611                   9, /*   A      41      */
1612                   7, /*   B      42      */
1613                   7, /*   C      43      */
1614                   7, /*   D      44      */
1615                   7, /*   E      45      */
1616                   6, /*   F      46      */
1617                   7, /*   G      47      */
1618                   7, /*   H      48      */
1619                   4, /*   I      49      */
1620                   6, /*   J      4A      */
1621                   7, /*   K      4B      */
1622                   6, /*   L      4C      */
1623                  11, /*   M      4D      */
1624                   9, /*   N      4E      */
1625                   7, /*   O      4F      */
1626                   7, /*   P      50      */
1627                   8, /*   Q      51      */
1628                   7, /*   R      52      */
1629                   6, /*   S      53      */
1630                   6, /*   T      54      */
1631                   7, /*   U      55      */
1632                   7, /*   V      56      */
1633                  11, /*   W      57      */
1634                   7, /*   X      58      */
1635                   8, /*   Y      59      */
1636                   7, /*   Z      5A      */
1637                   4, /*   [      5B      */
1638                   6, /*   \      5C      */
1639                   4, /*   ]      5D      */
1640                   7, /*   ^      5E      */
1641                   9, /*   _      5F      */
1642                   3, /*   `      60      */
1643                   6, /*   a      61      */
1644                   6, /*   b      62      */
1645                   6, /*   c      63      */
1646                   6, /*   d      64      */
1647                   6, /*   e      65      */
1648                   4, /*   f      66      */
1649                   6, /*   g      67      */
1650                   6, /*   h      68      */
1651                   2, /*   i      69      */
1652                   5, /*   j      6A      */
1653                   6, /*   k      6B      */
1654                   2, /*   l      6C      */
1655                  10, /*   m      6D      */
1656                   6, /*   n      6E      */
1657                   6, /*   o      6F      */
1658                   6, /*   p      70      */
1659                   6, /*   q      71      */
1660                   5, /*   r      72      */
1661                   5, /*   s      73      */
1662                   4, /*   t      74      */
1663                   6, /*   u      75      */
1664                   7, /*   v      76      */
1665                  11, /*   w      77      */
1666                   7, /*   x      78      */
1667                   6, /*   y      79      */
1668                   6, /*   z      7A      */
1669                   4, /*   {      7B      */
1670                   2, /*   |      7C      */
1671                   4, /*   }      7D      */
1672 };
1673
1674 /******************************************************************************/
1675 #if defined(__GNUC__) && (__MSP430X__ > 0)
1676 __attribute__((__far__))
1677 #endif
1678 const u16t MetaWatchTimeTable[TOTAL_TIME_CHARACTERS][19] = 
1679 {
1680   /* character 0x30 ('0'): (width=11, offset=0) */
1681   {0x01FC, 0x03FE, 0x07FF, 0x07FF,
1682   0x078F, 0x078F, 0x078F, 0x078F,
1683   0x078F, 0x078F, 0x078F, 0x078F,
1684   0x078F, 0x078F, 0x078F, 0x07FF,
1685   0x07FF, 0x03FE, 0x01FC},
1686   {
1687   /* character 0x31 ('1'): (width=11, offset=38) */
1688   0x01C0, 0x01E0, 0x01F8, 0x01F8,
1689   0x01F8, 0x01F8, 0x01E0, 0x01E0,
1690   0x01E0, 0x01E0, 0x01E0, 0x01E0,
1691   0x01E0, 0x01E0, 0x01E0, 0x01E0,
1692   0x01E0, 0x01E0, 0x01E0},
1693   {
1694   /* character 0x32 ('2'): (width=11, offset=76) */
1695   0x01FC, 0x03FE, 0x07FF, 0x07FF,
1696   0x078F, 0x078F, 0x0780, 0x07C0,
1697   0x07E0, 0x03F0, 0x01F8, 0x00FC,
1698   0x007E, 0x003F, 0x001F, 0x07FF,
1699   0x07FF, 0x07FF, 0x07FF},
1700   {
1701   /* character 0x33 ('3'): (width=11, offset=114) */
1702   0x01FC, 0x03FE, 0x07FF, 0x07FF,
1703   0x078F, 0x078F, 0x0780, 0x07C0,
1704   0x03F0, 0x01F0, 0x03F0, 0x07C0,
1705   0x0780, 0x078F, 0x078F, 0x07FF,
1706   0x07FF, 0x03FE, 0x01FC},
1707   {
1708   /* character 0x34 ('4'): (width=11, offset=152) */
1709   0x003C, 0x07BC, 0x07BC, 0x079E,
1710   0x079E, 0x078F, 0x078F, 0x07FF,
1711   0x07FF, 0x07FF, 0x07FF, 0x0780,
1712   0x0780, 0x0780, 0x0780, 0x0780,
1713   0x0780, 0x0780, 0x0780},
1714   {
1715   /* character 0x35 ('5'): (width=11, offset=190) */
1716   0x07FF, 0x07FF, 0x07FF, 0x07FF,
1717   0x000F, 0x000F, 0x000F, 0x03FF,
1718   0x07FF, 0x07FF, 0x07FF, 0x0780,
1719   0x0780, 0x0780, 0x07C0, 0x07FF,
1720   0x03FF, 0x03FF, 0x00FF},
1721   {
1722   /* character 0x36 ('6'): (width=11, offset=228) */
1723   0x01F0, 0x01FC, 0x01FE, 0x01FE,
1724   0x001F, 0x000F, 0x000F, 0x01FF,
1725   0x03FF, 0x07FF, 0x07FF, 0x078F,
1726   0x078F, 0x078F, 0x078F, 0x07FF,
1727   0x07FF, 0x03FE, 0x01FC},
1728   {
1729   /* character 0x37 ('7'): (width=11, offset=266) */
1730   0x07FF, 0x07FF, 0x07FF, 0x07FF,
1731   0x0780, 0x07C0, 0x03C0, 0x03E0,
1732   0x01E0, 0x01F0, 0x00F0, 0x00F8,
1733   0x0078, 0x0078, 0x0078, 0x0078,
1734   0x0078, 0x0078, 0x0078},
1735   {
1736   /* character 0x38 ('8'): (width=11, offset=304) */
1737   0x01FC, 0x03FE, 0x07FF, 0x07FF,
1738   0x078F, 0x078F, 0x078F, 0x07FF,
1739   0x07FF, 0x03FE, 0x07FF, 0x078F,
1740   0x078F, 0x078F, 0x078F, 0x07FF,
1741   0x07FF, 0x03FE, 0x01FC},
1742   {
1743   /* character 0x39 ('9'): (width=11, offset=342) */
1744   0x01FC, 0x03FE, 0x07FF, 0x07FF,
1745   0x078F, 0x078F, 0x078F, 0x078F,
1746   0x07FF, 0x07FF, 0x07FE, 0x07FC,
1747   0x0780, 0x0780, 0x07C0, 0x03FC,
1748   0x03FC, 0x01FC, 0x007C},
1749   {
1750   /* character 0x3A (':'): (width=4, offset=380) */
1751   0x0000, 0x0000, 0x0000, 0x0000,
1752   0x0006, 0x000F, 0x000F, 0x0006,
1753   0x0000, 0x0000, 0x0000, 0x0006,
1754   0x000F, 0x000F, 0x0006, 0x0000,
1755   0x0000, 0x0000, 0x0000},
1756   {
1757   /* character 0x3B (';'): (width=11, offset=418) */
1758   0x0000, 0x0000, 0x0000, 0x0000,
1759   0x0000, 0x0000, 0x0000, 0x0000,
1760   0x0000, 0x0000, 0x0000, 0x0000,
1761   0x0000, 0x0000, 0x0000, 0x0000,
1762   0x0000, 0x0000, 0x0000},
1763 };
1764
1765 #if defined(__GNUC__) && (__MSP430X__ > 0)
1766 __attribute__((__far__))
1767 #endif
1768 const unsigned char MetaWatchTimeWidth[TOTAL_TIME_CHARACTERS] = 
1769 {
1770 /*              width    char    hexcode */
1771 /*              =====    ====    ======= */
1772                  11, /*   0      30      */
1773                  11, /*   1      31      */
1774                  11, /*   2      32      */
1775                  11, /*   3      33      */
1776                  11, /*   4      34      */
1777                  11, /*   5      35      */
1778                  11, /*   6      36      */
1779                  11, /*   7      37      */
1780                  11, /*   8      38      */
1781                  11, /*   9      39      */
1782                   4, /*   :      3A      */
1783                  11, /*  ' '     3B      */ 
1784 };
1785
1786 /******************************************************************************/
1787
1788 #if defined(__GNUC__) && (__MSP430X__ > 0)
1789 __attribute__((__far__))
1790 #endif
1791 const unsigned char MetaWatchMonospaced10Table[PRINTABLE_CHARACTERS][10] =  
1792 {
1793   {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
1794   {0x00,0x00,0x10,0x38,0x38,0x10,0x10,0x00,0x10,0x00},
1795   {0x00,0x00,0x6C,0x6C,0x24,0x00,0x00,0x00,0x00,0x00},
1796   {0x00,0x00,0x00,0x28,0x7C,0x28,0x28,0x7C,0x28,0x00},
1797   {0x00,0x00,0x10,0x70,0x08,0x30,0x40,0x38,0x20,0x00},
1798   {0x00,0x00,0x4C,0x4C,0x20,0x10,0x08,0x64,0x64,0x00},
1799   {0x00,0x00,0x08,0x14,0x14,0x08,0x54,0x24,0x58,0x00},
1800   {0x00,0x00,0x18,0x18,0x10,0x08,0x00,0x00,0x00,0x00},
1801   {0x00,0x00,0x10,0x08,0x08,0x08,0x08,0x08,0x10,0x00},
1802   {0x00,0x00,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x00},
1803   {0x00,0x00,0x92,0x54,0x38,0xFE,0x38,0x54,0x92,0x00},
1804   {0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00},
1805   {0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x10,0x08},
1806   {0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00},
1807   {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00},
1808   {0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x00,0x00},
1809   {0x00,0x00,0x38,0x44,0x64,0x54,0x4C,0x44,0x38,0x00},
1810   {0x00,0x00,0x10,0x18,0x10,0x10,0x10,0x10,0x38,0x00},
1811   {0x00,0x00,0x38,0x44,0x40,0x30,0x08,0x04,0x7C,0x00},
1812   {0x00,0x00,0x38,0x44,0x40,0x38,0x40,0x44,0x38,0x00},
1813   {0x00,0x00,0x20,0x30,0x28,0x24,0x7C,0x20,0x20,0x00},
1814   {0x00,0x00,0x7C,0x04,0x04,0x3C,0x40,0x44,0x38,0x00},
1815   {0x00,0x00,0x30,0x08,0x04,0x3C,0x44,0x44,0x38,0x00},
1816   {0x00,0x00,0x7C,0x40,0x20,0x10,0x08,0x08,0x08,0x00},
1817   {0x00,0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x38,0x00},
1818   {0x00,0x00,0x38,0x44,0x44,0x78,0x40,0x20,0x18,0x00},
1819   {0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x00},
1820   {0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x10},
1821   {0x00,0x00,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x00},
1822   {0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00},
1823   {0x00,0x00,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x00},
1824   {0x00,0x00,0x38,0x44,0x40,0x30,0x10,0x00,0x10,0x00},
1825   {0x00,0x00,0x38,0x44,0x74,0x54,0x74,0x04,0x38,0x00},
1826   {0x00,0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44,0x00},
1827   {0x00,0x00,0x3C,0x44,0x44,0x3C,0x44,0x44,0x3C,0x00},
1828   {0x00,0x00,0x38,0x44,0x04,0x04,0x04,0x44,0x38,0x00},
1829   {0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x00},
1830   {0x00,0x00,0x7C,0x04,0x04,0x3C,0x04,0x04,0x7C,0x00},
1831   {0x00,0x00,0x7C,0x04,0x04,0x3C,0x04,0x04,0x04,0x00},
1832   {0x00,0x00,0x38,0x44,0x04,0x74,0x44,0x44,0x78,0x00},
1833   {0x00,0x00,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x00},
1834   {0x00,0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x38,0x00},
1835   {0x00,0x00,0x40,0x40,0x40,0x40,0x44,0x44,0x38,0x00},
1836   {0x00,0x00,0x44,0x24,0x14,0x0C,0x14,0x24,0x44,0x00},
1837   {0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x7C,0x00},
1838   {0x00,0x00,0x44,0x6C,0x54,0x44,0x44,0x44,0x44,0x00},
1839   {0x00,0x00,0x44,0x4C,0x54,0x64,0x44,0x44,0x44,0x00},
1840   {0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00},
1841   {0x00,0x00,0x3C,0x44,0x44,0x3C,0x04,0x04,0x04,0x00},
1842   {0x00,0x00,0x38,0x44,0x44,0x44,0x54,0x24,0x58,0x00},
1843   {0x00,0x00,0x3C,0x44,0x44,0x3C,0x24,0x44,0x44,0x00},
1844   {0x00,0x00,0x38,0x44,0x04,0x38,0x40,0x44,0x38,0x00},
1845   {0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x00},
1846   {0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00},
1847   {0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x28,0x10,0x00},
1848   {0x00,0x00,0x44,0x44,0x54,0x54,0x54,0x54,0x28,0x00},
1849   {0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00},
1850   {0x00,0x00,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x00},
1851   {0x00,0x00,0x7C,0x40,0x20,0x10,0x08,0x04,0x7C,0x00},
1852   {0x00,0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x38,0x00},
1853   {0x00,0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x00,0x00},
1854   {0x00,0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x38,0x00},
1855   {0x00,0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00},
1856   {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00},
1857   {0x00,0x18,0x18,0x08,0x10,0x00,0x00,0x00,0x00,0x00},
1858   {0x00,0x00,0x00,0x00,0x38,0x40,0x78,0x44,0x78,0x00},
1859   {0x00,0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x3C,0x00},
1860   {0x00,0x00,0x00,0x00,0x38,0x44,0x04,0x44,0x38,0x00},
1861   {0x00,0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x78,0x00},
1862   {0x00,0x00,0x00,0x00,0x38,0x44,0x3C,0x04,0x38,0x00},
1863   {0x00,0x00,0x60,0x10,0x10,0x78,0x10,0x10,0x10,0x00},
1864   {0x00,0x00,0x00,0x78,0x44,0x44,0x78,0x40,0x38,0x00},
1865   {0x00,0x00,0x08,0x08,0x38,0x48,0x48,0x48,0x48,0x00},
1866   {0x00,0x00,0x10,0x00,0x10,0x10,0x10,0x10,0x10,0x00},
1867   {0x00,0x00,0x40,0x00,0x60,0x40,0x40,0x40,0x48,0x30},
1868   {0x00,0x00,0x08,0x08,0x48,0x28,0x18,0x28,0x48,0x00},
1869   {0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00},
1870   {0x00,0x00,0x00,0x00,0x2C,0x54,0x54,0x44,0x44,0x00},
1871   {0x00,0x00,0x00,0x00,0x38,0x48,0x48,0x48,0x48,0x00},
1872   {0x00,0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00},
1873   {0x00,0x00,0x00,0x00,0x3C,0x44,0x44,0x3C,0x04,0x04},
1874   {0x00,0x00,0x00,0x00,0x78,0x44,0x44,0x78,0x40,0x40},
1875   {0x00,0x00,0x00,0x00,0x34,0x48,0x08,0x08,0x1C,0x00},
1876   {0x00,0x00,0x00,0x00,0x38,0x04,0x38,0x40,0x38,0x00},
1877   {0x00,0x00,0x00,0x10,0x78,0x10,0x10,0x50,0x20,0x00},
1878   {0x00,0x00,0x00,0x00,0x48,0x48,0x48,0x68,0x50,0x00},
1879   {0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x28,0x10,0x00},
1880   {0x00,0x00,0x00,0x00,0x44,0x44,0x54,0x7C,0x28,0x00},
1881   {0x00,0x00,0x00,0x00,0x44,0x28,0x10,0x28,0x44,0x00},
1882   {0x00,0x00,0x00,0x00,0x48,0x48,0x48,0x70,0x40,0x70},
1883   {0x00,0x00,0x00,0x00,0x78,0x40,0x30,0x08,0x78,0x00},
1884   {0x00,0x00,0x30,0x08,0x08,0x0C,0x08,0x08,0x30,0x00},
1885   {0x00,0x00,0x10,0x10,0x10,0x00,0x10,0x10,0x10,0x00},
1886   {0x00,0x00,0x18,0x20,0x20,0x60,0x20,0x20,0x18,0x00},
1887 //  {0x00,0x00,0x00,0x50,0x28,0x00,0x00,0x00,0x00,0x00},
1888 };
1889