version 0.0.1
[fms.git] / src / freenet / captcha / easybmp / EasyBMP_Font.cpp
1 /*************************************************\r
2 *                                                *\r
3 *  EasyBMP Cross-Platform Windows Bitmap Library * \r
4 *                                                *\r
5 *  Author: Paul Macklin                          *\r
6 *   email: pmacklin@math.uci.edu                 *\r
7 *                                                *\r
8 *    file: EasyBMP_Font.h                        *\r
9 *    date: 2-21-2005                             *\r
10 * version: 1.05.00                               *\r
11 *                                                *\r
12 *   License: BSD (revised)                       *\r
13 * Copyright: 2005-2006 by the EasyBMP Project    * \r
14 *                                                *\r
15 * description: draw a simple font                *\r
16 *                                                *\r
17 *************************************************/\r
18 \r
19 #include "../../../../include/freenet/captcha/easybmp/EasyBMP_Geometry.h"\r
20 #include "../../../../include/freenet/captcha/easybmp/EasyBMP_Font.h"\r
21                                   \r
22 int PrintString( BMP& Image, char* String , int TopLeftX, int TopLeftY , int Height , \r
23                   RGBApixel Color )\r
24 {\r
25  int CharNumber = 0;\r
26  int StartX = TopLeftX;\r
27  int Spacing = (int) ebmpRound( 0.2*Height );\r
28  if( Spacing < 3 )\r
29  { Spacing = 3; }\r
30  \r
31  for( CharNumber = 0 ; CharNumber < strlen( String ) ; CharNumber++ )\r
32  {\r
33   int ReturnPosition = PrintLetter( Image , String[CharNumber] , StartX , TopLeftY , Height , Color );\r
34   StartX = ReturnPosition;\r
35   StartX += Spacing;\r
36  }\r
37  return StartX;\r
38 }\r
39 \r
40 int PrintLetter( BMP& Image, char Letter , int TopLeftX, int TopLeftY, int Height , \r
41                   RGBApixel Color )\r
42 {\r
43  int Width = (int) floor( 0.6*Height);\r
44  if( Width % 2 != 0 ){ Width++; }\r
45  int Center = (Width)/2;\r
46  \r
47  RGBApixel TempColor;\r
48  TempColor.Red = 0;\r
49  TempColor.Green = 255;\r
50  TempColor.Blue = 0;\r
51  \r
52  double pi = 3.14159265358979;\r
53 \r
54 // if( isalpha(Letter) )\r
55 // { Letter = toupper(Letter); }\r
56 \r
57  if( Letter == COPYRIGHT_SYMBOL )\r
58  {\r
59   return PrintCopyright( Image, TopLeftX, TopLeftY, Height, Color );\r
60  }\r
61 \r
62  if( Letter == 'a'  )\r
63  {\r
64   double x1 = TopLeftX + 0.25*Height;\r
65   double y1 = TopLeftY + 0.75*Height;\r
66   \r
67   int x2 = ebmpRound(TopLeftX+0.5*Height);\r
68   int y2 = ebmpRound(TopLeftY+0.5*Height);\r
69   \r
70   int x3 = x2;\r
71   int y3 = TopLeftY+Height;\r
72   \r
73   DrawArc(Image,x1,y1,0.25*Height,0,2*pi,Color);\r
74   DrawLine(Image,x2,y2,x3,y3,Color);\r
75  \r
76   return ebmpRound( TopLeftX + 0.5*Height );\r
77  }\r
78  \r
79  if( Letter == 'b' )\r
80  {\r
81   double x1 = TopLeftX + 0.25*Height;\r
82   double y1 = TopLeftY + 0.75*Height;\r
83   \r
84   int x2 = TopLeftX; // ebmpRound(TopLeftX+0.5*Height);\r
85   int y2 = TopLeftY; // ebmpRound(TopLeftY+0.5*Height);\r
86   \r
87   int x3 = x2;\r
88   int y3 = TopLeftY+Height;\r
89   \r
90   DrawArc(Image,x1,y1,0.25*Height,0,2*pi,Color);\r
91   DrawLine(Image,x2,y2,x3,y3,Color);\r
92  \r
93   return ebmpRound( TopLeftX + 0.5*Height );\r
94  } \r
95  \r
96  if( Letter == 'c' )\r
97  {\r
98   double x1 = TopLeftX + 0.25*Height;\r
99   double y1 = TopLeftY + 0.75*Height;\r
100 \r
101   DrawArc(Image,x1,y1,0.25*Height,0.25*pi,-0.25*pi,Color);\r
102   return ebmpRound( TopLeftX+0.5*Height);\r
103  }\r
104 \r
105  if( Letter == 'd' )\r
106  {\r
107   double x1 = TopLeftX + 0.25*Height;\r
108   double y1 = TopLeftY + 0.75*Height;\r
109   \r
110   int x2 = ebmpRound(TopLeftX+0.5*Height);\r
111   int y2 = TopLeftY; // ebmpRound(TopLeftY+0.5*Height);\r
112   \r
113   int x3 = x2;\r
114   int y3 = TopLeftY+Height;\r
115   \r
116   DrawArc(Image,x1,y1,0.25*Height,0,2*pi,Color);\r
117   DrawLine(Image,x2,y2,x3,y3,Color);\r
118  \r
119   return ebmpRound( TopLeftX + 0.5*Height );\r
120  }  \r
121  \r
122  if( Letter == 'e' )\r
123  {\r
124   double x1 = TopLeftX + 0.25*Height;\r
125   double y1 = TopLeftY + 0.75*Height;\r
126   \r
127   int x2 = TopLeftX;\r
128   int y2 = ebmpRound(TopLeftY + 0.75*Height);\r
129   \r
130   int x3 = ebmpRound( TopLeftX+0.5*Height);\r
131   int y3 = y2;\r
132 \r
133   DrawArc(Image,x1,y1,0.25*Height,0.25*pi,0,Color);\r
134   DrawLine(Image,x2,y2,x3,y3,Color);\r
135   \r
136   return x3;\r
137  } \r
138  \r
139  if( Letter == 'f' )\r
140  {\r
141   int x1 = ebmpRound( TopLeftX + 0.25*Height);\r
142   int y1 = TopLeftY + Center;\r
143   \r
144   int x2 = x1;\r
145   int y2 = TopLeftY + Height;\r
146   \r
147   int x3 = TopLeftX;\r
148   int y3 = ebmpRound( TopLeftY + 0.5*Height);\r
149   \r
150   int x4 = x1 + (x1-x3);\r
151   int y4 = y3;\r
152   \r
153   double x5 = TopLeftX+0.5*Height;\r
154   double y5 = TopLeftY+0.25*Height;\r
155   \r
156   if( Height % 4 == 3 )\r
157   { x5 -= 1; }\r
158   \r
159   DrawLine(Image,x1,y1,x2,y2,Color);\r
160   DrawLine(Image,x3,y3,x4,y4,Color);\r
161   \r
162   DrawArc(Image,x5,y5,0.25*Height,7*pi/8    ,2*pi,Color);\r
163 \r
164   return x4;  \r
165  }\r
166  \r
167  if( Letter == 'g' )\r
168  {\r
169   double x1 = TopLeftX+0.25*Height;\r
170   double y1 = TopLeftY+0.75*Height;\r
171  \r
172   int x2 = ebmpRound(TopLeftX+0.5*Height);\r
173   int y2 = ebmpRound(TopLeftY+0.5*Height);\r
174   \r
175   int x3 = x2;\r
176   int y3 = ebmpRound(TopLeftY+1.25*Height);\r
177   \r
178   double x4 = x1; \r
179   double y4 = TopLeftY+1.25*Height;\r
180  \r
181   DrawArc(Image,x1,y1,0.25*Height,0,2*pi,Color);\r
182   DrawArc(Image,x4,y4,0.25*Height,0,pi,Color);\r
183   DrawLine(Image,x2,y2,x3,y3,Color);\r
184  \r
185   return ebmpRound(TopLeftX+0.5*Height);\r
186  }\r
187  \r
188  if( Letter == 'h' )\r
189  {\r
190   double x1 = TopLeftX + 0.25*Height;\r
191   double y1 = TopLeftY + 0.75*Height;\r
192   \r
193   int x3 = TopLeftX;\r
194   int y3 = TopLeftY; // ebmpRound(TopLeftY+0.5*Height);\r
195   \r
196   int x4 = x3;\r
197   int y4 = TopLeftY + Height;\r
198   \r
199   int x5 = ebmpRound(TopLeftX+0.5*Height);\r
200   int y5 = ebmpRound(TopLeftY+0.75*Height);\r
201   \r
202   int x6 = x5;\r
203   int y6 = y4;\r
204   \r
205   DrawArc(Image,x1,y1,0.25*Height,pi,2*pi,Color);\r
206   \r
207   DrawLine(Image,x3,y3,x4,y4,Color);\r
208   DrawLine(Image,x5,y5,x6,y6,Color);\r
209  \r
210   return x5;\r
211  }  \r
212  \r
213  if( Letter == 'i' )\r
214  {\r
215   int x1 = TopLeftX;\r
216   int y1 = ebmpRound(TopLeftY+0.5*Height);\r
217    \r
218   int x2 = x1;\r
219   int y2 = TopLeftY+Height;\r
220   \r
221   double x3 = x1;\r
222   double y3 = y1 - 2.5;\r
223  \r
224   DrawArc( Image, x3, y3, 0.75 , 0 , 6.3 , Color );\r
225   DrawLine(Image,x1,y1,x2,y2,Color);\r
226   \r
227   return ebmpRound(x1+1.25);\r
228  }\r
229  \r
230  if( Letter == 'j' )\r
231  {\r
232   int x1 = ebmpRound(TopLeftX+0.25*Height);\r
233   int y1 = ebmpRound(TopLeftY+0.5*Height);\r
234    \r
235   int x2 = x1;\r
236   int y2 = ebmpRound(TopLeftY+1.25*Height);\r
237   \r
238   double x3 = x1;\r
239   double y3 = y1 - 2.5;\r
240   \r
241   double x4 = TopLeftX;\r
242   double y4 = TopLeftY+1.25*Height;\r
243  \r
244   DrawArc( Image, x3, y3, 0.75 , 0 , 6.3 , Color );\r
245   DrawLine(Image,x1,y1,x2,y2,Color);\r
246   \r
247   DrawArc(Image,x4,y4,0.25*Height,0,pi,Color);\r
248   \r
249   return x1;\r
250  } \r
251  \r
252  if( Letter == 'k' )\r
253  {\r
254   int x1 = TopLeftX;\r
255   int y1 = TopLeftY;\r
256   \r
257   int x2 = x1;\r
258   int y2 = TopLeftY+Height;\r
259   \r
260   int x3 = x1;\r
261   int y3 = ebmpRound(TopLeftY+0.75*Height);\r
262   \r
263   int x4 = ebmpRound(TopLeftX+0.3*Height);\r
264   int y4 = ebmpRound(TopLeftY+0.5*Height);\r
265   \r
266   int x5 = x4;\r
267   int y5 = y2;\r
268   \r
269   DrawLine(Image,x1,y1,x2,y2,Color);\r
270   DrawLine(Image,x3,y3,x4,y4,Color);\r
271   DrawLine(Image,x3,y3,x5,y5,Color);\r
272  \r
273   return x5;\r
274  }\r
275  \r
276  if( Letter == 'm' )\r
277  {\r
278   double x1 = TopLeftX + 0.25*Height;\r
279   double y1 = TopLeftY + 0.75*Height;\r
280 \r
281   double x2 = TopLeftX + 0.75*Height;\r
282   double y2 = y1;  \r
283   \r
284   int x3 = TopLeftX;\r
285   int y3 = ebmpRound(TopLeftY+0.5*Height);\r
286   \r
287   int x4 = x3;\r
288   int y4 = TopLeftY + Height;\r
289   \r
290   int x5 = ebmpRound(TopLeftX+0.5*Height);\r
291   int y5 = ebmpRound(TopLeftY+0.75*Height);\r
292   \r
293   int x6 = x5;\r
294   int y6 = y4;\r
295   \r
296   int x7 = ebmpRound(TopLeftX+Height);\r
297   if( x7 - x5 > x5 - x3 )\r
298   { x7--; }\r
299   \r
300   int y7 = y5;\r
301   \r
302   int x8 = x7;\r
303   int y8 = y4;\r
304   \r
305   \r
306   DrawArc(Image,x1,y1,0.25*Height,pi,2*pi,Color);\r
307   DrawArc(Image,x2,y2,0.25*Height,pi,2*pi,Color);\r
308   \r
309   DrawLine(Image,x3,y3,x4,y4,Color);\r
310   DrawLine(Image,x5,y5,x6,y6,Color);\r
311   DrawLine(Image,x7,y7,x8,y8,Color);\r
312  \r
313   return x7;\r
314  }\r
315  \r
316  if( Letter == 'n' )\r
317  {\r
318   double x1 = TopLeftX + 0.25*Height;\r
319   double y1 = TopLeftY + 0.75*Height;\r
320   \r
321   int x3 = TopLeftX;\r
322   int y3 = ebmpRound(TopLeftY+0.5*Height);\r
323   \r
324   int x4 = x3;\r
325   int y4 = TopLeftY + Height;\r
326   \r
327   int x5 = ebmpRound(TopLeftX+0.5*Height);\r
328   int y5 = ebmpRound(TopLeftY+0.75*Height);\r
329   \r
330   int x6 = x5;\r
331   int y6 = y4;\r
332   \r
333   DrawArc(Image,x1,y1,0.25*Height,pi,2*pi,Color);\r
334   \r
335   DrawLine(Image,x3,y3,x4,y4,Color);\r
336   DrawLine(Image,x5,y5,x6,y6,Color);\r
337  \r
338   return x5;\r
339  } \r
340  \r
341  if( Letter == 'o' )\r
342  {\r
343   double x1 = TopLeftX + 0.25*Height;\r
344   double y1 = TopLeftY + 0.75*Height;\r
345   \r
346   DrawArc(Image,x1,y1,0.25*Height,0,2*pi,Color);\r
347  \r
348   return ebmpRound(TopLeftX + 0.5*Height);\r
349  }   \r
350  \r
351  if( Letter == 'p' )\r
352  {\r
353   double x1 = TopLeftX + 0.25*Height;\r
354   double y1 = TopLeftY + 0.75*Height;\r
355   \r
356   int x2 = TopLeftX;\r
357   int y2 = ebmpRound(TopLeftY + 0.5*Height);\r
358   \r
359   int x3 = x2;\r
360   int y3 = ebmpRound(TopLeftY + 1.5*Height);\r
361 \r
362   DrawArc(Image,x1,y1,0.25*Height,0,2*pi,Color);\r
363   DrawLine(Image,x2,y2,x3,y3,Color);\r
364 \r
365   return ebmpRound( TopLeftX + 0.5*Height );\r
366  }\r
367  \r
368  if( Letter == 'q' )\r
369  {\r
370   double x1 = TopLeftX+0.25*Height;\r
371   double y1 = TopLeftY+0.75*Height;\r
372  \r
373   int x2 = ebmpRound(TopLeftX+0.5*Height);\r
374   int y2 = ebmpRound(TopLeftY+0.5*Height);\r
375   \r
376   int x3 = x2;\r
377   int y3 = ebmpRound(TopLeftY+1.5*Height);\r
378 \r
379   int x4 = ebmpRound(x3+0.2*Height);\r
380   int y4 = ebmpRound(y3-0.2*Height);\r
381  \r
382   DrawArc(Image,x1,y1,0.25*Height,0,2*pi,Color);\r
383   DrawLine(Image,x2,y2,x3,y3,Color);\r
384   DrawLine(Image,x3,y3,x4,y4,Color);\r
385  \r
386   return ebmpRound(TopLeftX+0.5*Height);\r
387  }\r
388  \r
389  if( Letter == 'r' )\r
390  {\r
391   double x1 = TopLeftX + 0.25*Height;\r
392   double y1 = TopLeftY + 0.75*Height;\r
393   \r
394   int x3 = TopLeftX;\r
395   int y3 = ebmpRound(TopLeftY+0.5*Height);\r
396   \r
397   int x4 = x3;\r
398   int y4 = TopLeftY + Height;\r
399 \r
400 /*  \r
401   int x5 = ebmpRound(TopLeftX+0.5*Height);\r
402   int y5 = ebmpRound(TopLeftY+0.75*Height);\r
403   \r
404   int x6 = x5;\r
405   int y6 = y4;\r
406 */  \r
407   \r
408   DrawArc(Image,x1,y1,0.25*Height,pi,2*pi,Color);\r
409   \r
410   DrawLine(Image,x3,y3,x4,y4,Color);\r
411 //  DrawLine(Image,x5,y5,x6,y6,Color);\r
412  \r
413   return ebmpRound(TopLeftX+0.5*Height);\r
414  }  \r
415  \r
416  if( Letter == 's' )\r
417  {\r
418   double x1 = TopLeftX+0.125*Height;\r
419   double y1 = TopLeftY+0.625*Height;\r
420 \r
421   double x2 = x1;\r
422   double y2 = (TopLeftY+0.875*Height);\r
423   \r
424   double difference = (TopLeftY+Height)-y2;\r
425   double MaxAngle1 = 0;\r
426   double MaxAngle2 = pi;\r
427   if( difference < 1.5 )\r
428   { difference = 1.5; MaxAngle1 = 0; MaxAngle2 = 1.5; x1 = TopLeftX + difference; x2 = x1; }\r
429   \r
430   y1 = y2 - 2*difference;\r
431   \r
432   DrawArc(Image,x1,y1,difference,0.5*pi,MaxAngle1,Color);\r
433   DrawArc(Image,x2,y2,difference,-0.5*pi,pi,Color);\r
434  \r
435   return ebmpRound(TopLeftX+2*difference);\r
436  }\r
437  \r
438  if( Letter == 't' )\r
439  {\r
440   int x1 = ebmpRound( TopLeftX + 0.25*Height);\r
441   int y1 = TopLeftY + Center;\r
442   \r
443   int x2 = x1;\r
444   int y2 = TopLeftY + Height;\r
445   \r
446   int x3 = TopLeftX;\r
447   int y3 = ebmpRound( TopLeftY + 0.5*Height);\r
448   \r
449   int x4 = x1 + (x1-x3);\r
450   int y4 = y3;\r
451   \r
452   DrawLine(Image,x1,y1,x2,y2,Color);\r
453   DrawLine(Image,x3,y3,x4,y4,Color);\r
454 \r
455   return x4; \r
456  }\r
457  \r
458  if( Letter == 'u' )\r
459  {\r
460   double x1 = TopLeftX + 0.25*Height;\r
461   double y1 = TopLeftY + 0.75*Height;\r
462   \r
463   int x3 = TopLeftX;\r
464   int y3 = ebmpRound(TopLeftY+0.5*Height);\r
465   \r
466   int x4 = x3;\r
467   int y4 = ebmpRound(TopLeftY+0.75*Height);//  + Height;\r
468   \r
469   int x5 = ebmpRound(TopLeftX+0.5*Height);\r
470   int y5 = TopLeftY + Height;// ebmpRound(TopLeftY+0.75*Height);\r
471   \r
472   int x6 = x5;\r
473   int y6 = y3;\r
474   \r
475   DrawArc(Image,x1,y1,0.25*Height,0,pi,Color);\r
476   \r
477   DrawLine(Image,x3,y3,x4,y4,Color);\r
478   DrawLine(Image,x5,y5,x6,y6,Color);\r
479  \r
480   return x5;\r
481  }  \r
482  \r
483  if( Letter == 'v' )\r
484  {\r
485   int x1 = TopLeftX;\r
486   int y1 = ebmpRound(TopLeftY+0.5*Height);\r
487   \r
488   int x2 = ebmpRound( TopLeftX+0.2*Height);\r
489   int y2 = TopLeftY+Height;\r
490   \r
491   int x3 = ebmpRound( TopLeftX+0.4*Height);\r
492   int y3 = y1;\r
493   \r
494   DrawLine(Image,x1,y1,x2,y2,Color);\r
495   DrawLine(Image,x2,y2,x3,y3,Color);\r
496  \r
497   return x3;\r
498  }\r
499 \r
500  if( Letter == 'w' )\r
501  {\r
502   int x1 = TopLeftX;\r
503   int y1 = ebmpRound(TopLeftY+0.5*Height);\r
504   \r
505   int x2 = ebmpRound(TopLeftX+0.2*Height);\r
506   int y2 = TopLeftY+Height;\r
507   \r
508   int x3 = ebmpRound(TopLeftX+0.4*Height);\r
509   int y3 = y1;\r
510   \r
511   int x4 = ebmpRound(x3+0.2*Height);\r
512   int y4 = y2;\r
513   \r
514   int x5 = ebmpRound(x3+0.4*Height);\r
515   int y5 = y1;\r
516   \r
517   DrawLine(Image,x1,y1,x2,y2,Color);\r
518   DrawLine(Image,x2,y2,x3,y3,Color);\r
519   DrawLine(Image,x3,y3,x4,y4,Color);\r
520   DrawLine(Image,x4,y4,x5,y5,Color);\r
521   \r
522   return x5;\r
523  }\r
524  \r
525  if( Letter == 'x' )\r
526  {\r
527   int x1 = TopLeftX;\r
528   int y1 = ebmpRound(TopLeftY+0.5*Height);\r
529   \r
530   int x2 = ebmpRound(TopLeftX+0.5*Height);\r
531   int y2 = y1;\r
532   \r
533   int x3 = x1;\r
534   int y3 = TopLeftY+Height;\r
535   \r
536   int x4 = x2;\r
537   int y4 = y3;\r
538   \r
539   DrawLine(Image,x1,y1,x4,y4,Color);\r
540   DrawLine(Image,x2,y2,x3,y3,Color);\r
541  \r
542   return x4;\r
543  }\r
544  \r
545  if( Letter == 'y' )\r
546  {\r
547   int x1 = TopLeftX;\r
548   int y1 = ebmpRound(TopLeftY+0.5*Height);\r
549   \r
550   int x2 = ebmpRound(TopLeftX+0.5*Height);\r
551   int y2 = y1;\r
552   \r
553   int x3 = ebmpRound(x1+0.25*Height);\r
554   int y3 = TopLeftY+Height;\r
555   \r
556   int x4 = x1;\r
557   int y4 = ebmpRound(TopLeftY+1.25*Height)+1;\r
558   \r
559   DrawLine(Image,x1,y1,x3,y3,Color);\r
560   DrawLine(Image,x2,y2,x4,y4,Color);\r
561  \r
562   return x2;\r
563  } \r
564  \r
565  if( Letter == 'z' )\r
566  {\r
567   int x1 = TopLeftX;\r
568   int y1 = ebmpRound(TopLeftY+0.5*Height);\r
569   \r
570   int x2 = ebmpRound(TopLeftX+0.5*Height);\r
571   int y2 = y1;\r
572   \r
573   int x3 = x1;\r
574   int y3 = TopLeftY+Height;\r
575   \r
576   int x4 = x2;\r
577   int y4 = y3;\r
578   \r
579   DrawLine(Image,x1,y1,x2,y2,Color);\r
580   DrawLine(Image,x2,y2,x3,y3,Color);\r
581   DrawLine(Image,x3,y3,x4,y4,Color);\r
582   \r
583   return x4;\r
584  }\r
585  \r
586  if( Letter == 'A' )\r
587  {\r
588   // define some control points\r
589   \r
590   int x1 = TopLeftX;\r
591   int y1 = TopLeftY+Height;\r
592   \r
593   int x2 = TopLeftX + ebmpRound( 0.3*Height );\r
594   int y2 = TopLeftY;\r
595   \r
596   int x3 = TopLeftX + ebmpRound( 0.6*Height );\r
597   int y3 = y1;\r
598   \r
599   int x4 = TopLeftX + ebmpRound( 0.1*Height );\r
600   int y4 = ebmpRound( y1 - Height/3.0 );\r
601   \r
602   int x5 = ebmpRound( x3 - 0.1*Height ); \r
603   int y5 = y4;\r
604  \r
605   DrawLine( Image , x1, y1, x2, y2, Color );\r
606   DrawLine( Image , x2, y2, x3, y3, Color );\r
607   DrawLine( Image , x4, y4, x5, y5, Color );\r
608  \r
609   return x3; \r
610  }\r
611  \r
612  if( Letter == 'B' )\r
613  {\r
614   int x1 = TopLeftX;\r
615   int y1 = TopLeftY+Height;\r
616   \r
617   int x2 = TopLeftX;\r
618   int y2 = TopLeftY;\r
619   \r
620   int x3 = TopLeftX + Center; // (int) ebmpRound( 0.3*Height );\r
621   int y3 = TopLeftY;\r
622   \r
623   int x4 = x1;\r
624   int y4 = (int) ebmpRound( TopLeftY + 0.5*Height );\r
625 \r
626   int x5 = x3;\r
627   int y5 = y4;\r
628   \r
629   int x6 = x3;\r
630   int y6 = y1;\r
631 \r
632   // centers of the circles\r
633   \r
634   double x7 = x3;\r
635   double y7 = ( TopLeftY + 0.25*Height );\r
636 \r
637   double x8 = x3;\r
638   double y8 = ( TopLeftY + 0.75*Height );\r
639   \r
640   DrawLine( Image , x1, y1, x2, y2, Color );\r
641   DrawLine( Image , x2, y2, x3, y3, Color );\r
642   \r
643   DrawLine( Image , x2, y2, x3, y3, Color );  \r
644   DrawLine( Image , x4, y4, x5, y5, Color );  \r
645   DrawLine( Image , x1, y1, x6, y6, Color );\r
646   \r
647   DrawArc( Image, x7, y7 , 0.25*Height , -1.57079632679490 , 1.57079632679490 , Color ); \r
648   DrawArc( Image, x8, y8 , 0.25*Height , -1.57079632679490 , 1.57079632679490 , Color ); \r
649   \r
650   return ebmpRound( TopLeftX + Center + 0.25*Height); \r
651  }\r
652  \r
653  if( Letter == 'C' )\r
654  {\r
655   double x5 = TopLeftX + Center; \r
656   double y5 = TopLeftY + Center; \r
657 \r
658   double x6 = x5;\r
659   double y6 = TopLeftY + Height - Center; \r
660   \r
661   int x7 = TopLeftX;\r
662   int y7 = (int) y5; \r
663   \r
664   int x8 = x7;\r
665   int y8 = (int) y6; \r
666 \r
667   DrawArc( Image, x5, y5 , Center , -3.14159265358979 , 0 , Color ); \r
668   DrawArc( Image, x6, y6 , Center , 0 , 3.14159265358979, Color ); \r
669   \r
670   DrawLine( Image , x7, y7, x8, y8, Color );\r
671  \r
672   return TopLeftX + Width; //  ebmpRound(TopLeftX+0.6*Height);\r
673  } \r
674  \r
675  if( Letter == 'D' )\r
676  {\r
677   int x1 = TopLeftX;\r
678   int y1 = TopLeftY;\r
679   \r
680   int x2 = TopLeftX + Center; // ebmpRound( TopLeftX + 0.3*Height );\r
681   int y2 = y1;\r
682   \r
683   int x3 = TopLeftX;\r
684   int y3 = TopLeftY+Height;\r
685   \r
686   int x4 = x2;\r
687   int y4 = y3;\r
688   \r
689   double x5 = x2;\r
690   double y5 = TopLeftY + Center; // TopLeftY + 0.3*Height;\r
691 \r
692   double x6 = x2;\r
693   double y6 = TopLeftY + Height - Center; // TopLeftY + 0.7*Height;\r
694   \r
695   int x7 = TopLeftX + Width; // ebmpRound(TopLeftX + 0.6*Height);\r
696   int y7 = (int) y5; // ebmpRound( y5 );\r
697   \r
698   int x8 = x7;\r
699   int y8 = (int) y6; //  ebmpRound( y6 );\r
700   \r
701   DrawLine( Image , x1, y1, x2, y2, Color );\r
702   DrawLine( Image , x1, y1, x3, y3, Color );\r
703   DrawLine( Image , x3, y3, x4, y4, Color );\r
704 \r
705   DrawArc( Image, x5, y5 , Center , -1.57079632679490 , 0 , Color ); \r
706   DrawArc( Image, x6, y6 , Center , 0 , 1.57079632679490 , Color ); \r
707 \r
708   DrawLine( Image , x7, y7, x8, y8, Color );\r
709  \r
710   return x7;\r
711  }\r
712  \r
713  if( Letter == 'E' )\r
714  {\r
715   int x1 = TopLeftX;\r
716   int y1 = TopLeftY;\r
717   \r
718   int x2 = x1;\r
719   int y2 = TopLeftY + Height;\r
720   \r
721   int x3 = TopLeftX + Width;\r
722   int y3 = TopLeftY;\r
723   \r
724   int x4 = TopLeftX;\r
725   int y4 = ebmpRound( TopLeftY + 0.5*Height);\r
726   \r
727   int x5 = ebmpRound( TopLeftX + 0.45*Height);\r
728   int y5 = y4;\r
729   \r
730   int x6 = TopLeftX + Width;\r
731   int y6 = y2;\r
732 \r
733   DrawLine( Image , x1, y1, x2, y2, Color );\r
734   DrawLine( Image , x1, y1, x3, y3, Color );\r
735   DrawLine( Image , x4, y4, x5, y5, Color );\r
736   DrawLine( Image , x2, y2, x6, y6, Color );\r
737   \r
738   return x6;\r
739  }\r
740  \r
741  if( Letter == 'F' )\r
742  {\r
743   int x1 = TopLeftX;\r
744   int y1 = TopLeftY;\r
745   \r
746   int x2 = x1;\r
747   int y2 = TopLeftY + Height;\r
748   \r
749   int x3 = TopLeftX + Width;\r
750   int y3 = TopLeftY;\r
751   \r
752   int x4 = TopLeftX;\r
753   int y4 = ebmpRound( TopLeftY + 0.5*Height);\r
754   \r
755   int x5 = ebmpRound( TopLeftX + 0.45*Height); // x3;\r
756   int y5 = y4;\r
757 \r
758   DrawLine( Image , x1, y1, x2, y2, Color );\r
759   DrawLine( Image , x1, y1, x3, y3, Color );\r
760   DrawLine( Image , x4, y4, x5, y5, Color );\r
761   \r
762   return x3;\r
763  } \r
764  \r
765  if( Letter == 'G' )\r
766  {\r
767   double x5 = TopLeftX + Center; \r
768   double y5 = TopLeftY + Center; \r
769 \r
770   double x6 = x5;\r
771   double y6 = TopLeftY + Height - Center; \r
772   \r
773   int x7 = TopLeftX;\r
774   int y7 = (int) y5; \r
775   \r
776   int x8 = x7;\r
777   int y8 = (int) y6; \r
778   \r
779   int x9 = TopLeftX + Center; // ebmpRound( TopLeftX + 0.45*Height );\r
780   int y9 = ebmpRound( TopLeftY + 0.6*Height );\r
781   \r
782   int x10 = TopLeftX + Width; // ebmpRound( TopLeftX + 0.65*Height );\r
783   int y10 = y9;\r
784   \r
785   int x11 = x10;\r
786   int y11 = TopLeftY + Height;\r
787 \r
788   DrawArc( Image, x5, y5 , Center , -3.14159265358979 , 0 , Color ); \r
789   DrawArc( Image, x6, y6 , Center , 0 , 3.14159265358979, Color ); \r
790   \r
791   DrawLine( Image , x7, y7, x8, y8, Color );\r
792   \r
793   DrawLine( Image , x9, y9, x10 ,y10 ,Color );\r
794   DrawLine( Image , x10, y10, x11 ,y11 ,Color );\r
795  \r
796   return x10; //  ebmpRound(TopLeftX+0.6*Height);\r
797  }  \r
798  \r
799  if( Letter == 'H' )\r
800  {\r
801   int x1 = TopLeftX;\r
802   int y1 = TopLeftY;\r
803   \r
804   int x2 = x1;\r
805   int y2 = TopLeftY + Height;\r
806   \r
807   int x3 = TopLeftX + Width;\r
808   int y3 = y1;\r
809   \r
810   int x4 = x3;\r
811   int y4 = y2;\r
812   \r
813   int x5 = x1;\r
814   int y5 = ebmpRound( TopLeftY + 0.5*Height );\r
815   \r
816   int x6 = x3;\r
817   int y6 = y5;\r
818   \r
819   DrawLine( Image , x1, y1, x2, y2, Color );\r
820   DrawLine( Image , x3, y3, x4, y4, Color );\r
821   DrawLine( Image , x5, y5, x6, y6, Color );\r
822 \r
823   return x3;\r
824  }\r
825  \r
826  if( Letter == 'I' )\r
827  {\r
828   int x1 = ebmpRound( TopLeftX + Height*0.05);\r
829   int y1 = TopLeftY;\r
830   \r
831   int x2 = ebmpRound(x1 + 0.4*Height);\r
832   int y2 = y1;\r
833   \r
834   int x3 = ebmpRound( x1 + 0.2*Height);\r
835   int y3 = y1;\r
836   \r
837   int x4 = x1;\r
838   int y4 = TopLeftY+Height;\r
839   \r
840   int x5 = x2;\r
841   int y5 = y4;\r
842   \r
843   int x6 = x3;\r
844   int y6 = y4;\r
845   \r
846   DrawLine( Image , x1, y1, x2, y2, Color );\r
847   DrawLine( Image , x3, y3, x6, y6, Color );\r
848   DrawLine( Image , x4, y4, x5, y5, Color );\r
849   \r
850   return x2;\r
851  }\r
852  \r
853  if( Letter == 'J' )\r
854  {\r
855   int x1 = TopLeftX + Width;\r
856   int y1 = TopLeftY;\r
857   \r
858   int x2 = x1;\r
859   int y2 = TopLeftY + Height - Center;\r
860   \r
861   double x3 = TopLeftX + Center;\r
862   double y3 = y2;\r
863   \r
864   DrawLine( Image , x1, y1, x2, y2, Color );\r
865   DrawArc( Image, x3, y3, Center , 0 , 1.1*pi , Color );\r
866   return x1;\r
867  }\r
868  \r
869  if( Letter == 'K' )\r
870  {\r
871   int x1 = TopLeftX;\r
872   int y1 = TopLeftY;\r
873   \r
874   int x2 = x1;\r
875   int y2 = TopLeftY + Height;\r
876   \r
877   int x3 = x1;\r
878   int y3 = TopLeftY + Height - Center; // ebmpRound( TopLeftY + 0.6*Height );\r
879   \r
880   int x4 = TopLeftX + Width;\r
881   int y4 = y1;\r
882   \r
883   int x5 = TopLeftX + Center;\r
884   int y5 = ebmpRound( TopLeftY + 0.5*Height );\r
885   \r
886   int x6 = x4;\r
887   int y6 = y2;\r
888   \r
889   DrawLine( Image, x1, y1, x2, y2, Color );\r
890   DrawLine( Image, x3, y3, x4, y4, Color );\r
891   DrawLine( Image, x5, y5, x6, y6, Color );\r
892  \r
893   return x4;\r
894  }\r
895  \r
896  if( Letter == 'L' )\r
897  {\r
898   int x1 = TopLeftX;\r
899   int y1 = TopLeftY;\r
900   \r
901   int x2 = x1;\r
902   int y2 = TopLeftY + Height;\r
903   \r
904   int x3 = TopLeftX + Width;\r
905   int y3 = y2;\r
906   \r
907   DrawLine( Image , x1, y1, x2, y2, Color );\r
908   DrawLine( Image , x2, y2, x3, y3, Color );\r
909 \r
910   return x3;\r
911  }\r
912   \r
913  if( Letter == 'M' )\r
914  {\r
915   int x1 = TopLeftX;\r
916   int y1 = TopLeftY;\r
917   \r
918   int x2 = x1;\r
919   int y2 = TopLeftY + Height;\r
920   \r
921   int x3 = TopLeftX + Width;\r
922   int y3 = y1;\r
923   \r
924   int x4 = x3;\r
925   int y4 = y2;\r
926   \r
927   int x5 = TopLeftX + Center;\r
928   int y5 = y4;\r
929 \r
930   DrawLine( Image , x1, y1, x2, y2, Color );\r
931   DrawLine( Image , x3, y3, x4, y4, Color );\r
932   DrawLine( Image , x1, y1, x5, y5, Color );\r
933   DrawLine( Image , x3, y3, x5, y5, Color );\r
934  \r
935   return x3;\r
936  } \r
937  \r
938  if( Letter == 'N' )\r
939  {\r
940   int x1 = TopLeftX;\r
941   int y1 = TopLeftY;\r
942   \r
943   int x2 = x1;\r
944   int y2 = TopLeftY + Height;\r
945   \r
946   int x3 = TopLeftX + Width;\r
947   int y3 = y1;\r
948   \r
949   int x4 = x3;\r
950   int y4 = y2;\r
951 \r
952   DrawLine( Image , x1, y1, x2, y2, Color );\r
953   DrawLine( Image , x3, y3, x4, y4, Color );\r
954   DrawLine( Image , x1, y1, x4, y4, Color );\r
955  \r
956   return x3;\r
957  }\r
958 \r
959  if( Letter == 'P' )\r
960  {\r
961   int x1 = TopLeftX;\r
962   int y1 = TopLeftY+Height;\r
963   \r
964   int x2 = TopLeftX;\r
965   int y2 = TopLeftY;\r
966   \r
967   int x3 = TopLeftX + Center; \r
968   int y3 = TopLeftY;\r
969   \r
970   int x4 = x1;\r
971   int y4 = ebmpRound( TopLeftY + 0.5*Height );\r
972 \r
973   int x5 = x3;\r
974   int y5 = y4;\r
975   \r
976   int x6 = x3;\r
977   int y6 = y1;\r
978 \r
979   // centers of the circles\r
980   \r
981   double x7 = x3;\r
982   double y7 = ( 0.5*(y3+y5) );\r
983 \r
984   DrawLine( Image , x1, y1, x2, y2, Color );\r
985   DrawLine( Image , x2, y2, x3, y3, Color );\r
986   \r
987   DrawLine( Image , x2, y2, x3, y3, Color );  \r
988   DrawLine( Image , x4, y4, x5, y5, Color );  \r
989   \r
990   DrawArc( Image, x7, y7 , 0.25*Height , -1.57079632679490 , 1.57079632679490 , Color ); \r
991   \r
992   return ebmpRound( TopLeftX + Center + 0.25*Height); \r
993  }\r
994  \r
995  if( Letter == 'Q' )\r
996  {\r
997   int x1 = TopLeftX;\r
998   int y1 = TopLeftY + Height - Center;\r
999   \r
1000   int x2 = x1;\r
1001   int y2 = TopLeftY + Center; \r
1002   \r
1003   int x3 = TopLeftX + Width;\r
1004   int y3 = y2;\r
1005   \r
1006   int x4 = x3;\r
1007   int y4 = y1;\r
1008 \r
1009   // centers of the circles\r
1010   \r
1011   double x5 = TopLeftX + Center; \r
1012   double y5 = TopLeftY + Center; \r
1013 \r
1014   double x6 = x5;\r
1015   double y6 = TopLeftY + Height - Center; \r
1016   \r
1017   // more points\r
1018   \r
1019   int x7 = TopLeftX + Width;\r
1020   int y7 = TopLeftY + Height;\r
1021   \r
1022   int x8 = x7 - Center;\r
1023   int y8 = y7 - Center;\r
1024   \r
1025   DrawLine( Image , x1, y1, x2, y2, Color );\r
1026   DrawLine( Image , x3, y3, x4, y4, Color );\r
1027   \r
1028   DrawArc( Image, x5, y5 , Center , 3.14159265358979 , 6.28318530717959 , Color ); \r
1029   DrawArc( Image, x6, y6 , Center , 0 ,  3.14159265358979 , Color ); \r
1030   \r
1031   DrawLine( Image , x7, y7 , x8, y8 , Color );\r
1032   \r
1033   return x3; \r
1034  } \r
1035  \r
1036  if( Letter == 'R' )\r
1037  {\r
1038   int x1 = TopLeftX;\r
1039   int y1 = TopLeftY+Height;\r
1040   \r
1041   int x2 = TopLeftX;\r
1042   int y2 = TopLeftY;\r
1043   \r
1044   int x3 = TopLeftX + Center; \r
1045   int y3 = TopLeftY;\r
1046   \r
1047   int x4 = x1;\r
1048   int y4 = ebmpRound( TopLeftY + 0.5*Height );\r
1049 \r
1050   int x5 = x3;\r
1051   int y5 = y4;\r
1052   \r
1053   int x6 = x3;\r
1054   int y6 = y1;\r
1055   \r
1056   // centers of the circles\r
1057   \r
1058   double x7 = x3;\r
1059   double y7 = ( 0.5*(y3+y5) );\r
1060   \r
1061   // more\r
1062   \r
1063   int x8 = TopLeftX + Width;\r
1064   int y8 = y1;\r
1065   \r
1066   int x9 = ebmpRound( TopLeftX + 0.25*Height);\r
1067   int y9 = y4;  \r
1068 \r
1069   DrawLine( Image , x1, y1, x2, y2, Color );\r
1070   DrawLine( Image , x2, y2, x3, y3, Color );\r
1071   \r
1072   DrawLine( Image , x2, y2, x3, y3, Color );  \r
1073   DrawLine( Image , x4, y4, x5, y5, Color );  \r
1074   \r
1075   DrawArc( Image, x7, y7 , 0.25*Height , -1.57079632679490 , 1.57079632679490 , Color ); \r
1076   \r
1077   DrawLine( Image , x8, y8, x9, y9 , Color);\r
1078   \r
1079   return TopLeftX + Width; \r
1080  } \r
1081  \r
1082  if( Letter == 'T' )\r
1083  {\r
1084   int x1 = TopLeftX;\r
1085   int y1 = TopLeftY;\r
1086     \r
1087   int x2 = TopLeftX + Width;\r
1088   int y2 = y1; \r
1089   \r
1090   int x3 = TopLeftX + Center;\r
1091   int y3 = y1;\r
1092   \r
1093   int x4 = x3;\r
1094   int y4 = TopLeftY + Height;\r
1095   \r
1096   DrawLine( Image , x1, y1, x2, y2, Color );\r
1097   DrawLine( Image , x3, y3, x4, y4, Color );\r
1098  \r
1099   return x2;\r
1100  }\r
1101  \r
1102  if( Letter == 'S' )\r
1103  {\r
1104   double x1 = TopLeftX + 0.25*Height;\r
1105   double y1 = TopLeftY + 0.25*Height;\r
1106   \r
1107   double x2 = x1;\r
1108   double y2 = TopLeftY + 0.75*Height;\r
1109   \r
1110   DrawArc( Image, x1, y1 , 0.25*Height, 1.5707963267948 , 6.28318530717 , Color );\r
1111   DrawArc( Image, x2, y2 , 0.25*Height, -1.5707963267948 ,3.1415926535897 , Color );\r
1112   \r
1113   return ebmpRound( TopLeftX + 0.5*Height );\r
1114  }\r
1115  \r
1116  if( Letter == 'U' )\r
1117  {\r
1118   int x1 = TopLeftX;\r
1119   int y1 = TopLeftY + Height - Center;\r
1120   \r
1121   int x2 = x1;\r
1122   int y2 = TopLeftY; \r
1123   \r
1124   int x3 = TopLeftX + Width;\r
1125   int y3 = y2;\r
1126   \r
1127   int x4 = x3;\r
1128   int y4 = y1;\r
1129 \r
1130   // centers of the circle\r
1131   \r
1132   double x5 = TopLeftX + Center;\r
1133   double y5 = TopLeftY + Height - Center; \r
1134   \r
1135   DrawLine( Image , x1, y1, x2, y2, Color );\r
1136   DrawLine( Image , x3, y3, x4, y4, Color );\r
1137   \r
1138   DrawArc( Image, x5, y5 , Center , 0 , 3.14159265358979 , Color ); \r
1139 \r
1140   return x3; \r
1141  }\r
1142 \r
1143  if( Letter == 'V' )\r
1144  {\r
1145   int x1 = TopLeftX;\r
1146   int y1 = TopLeftY;\r
1147   \r
1148   int x2 = TopLeftX + Width;\r
1149   int y2 = y1;\r
1150   \r
1151   int x3 = TopLeftX + Center;\r
1152   int y3 = TopLeftY + Height;\r
1153   \r
1154   DrawLine( Image , x1, y1, x3, y3, Color );\r
1155   DrawLine( Image , x2, y2, x3, y3, Color );\r
1156 \r
1157   return x2;\r
1158  } \r
1159  \r
1160  if( Letter == 'W' )\r
1161  {\r
1162   int x1 = TopLeftX;\r
1163   int y1 = TopLeftY;\r
1164   \r
1165   int x2 = ebmpRound(TopLeftX + 0.4*Height);\r
1166   int y2 = y1;\r
1167   \r
1168   int x3 = ebmpRound( TopLeftX + 0.8*Height);\r
1169   int y3 = y1;\r
1170   \r
1171   int x4 = ebmpRound( TopLeftX + 0.2*Height );\r
1172   int y4 = TopLeftY + Height;\r
1173   \r
1174   int x5 = ebmpRound( TopLeftX + 0.6*Height );\r
1175   int y5 = y4;\r
1176   \r
1177   DrawLine( Image , x1, y1, x4, y4, Color );\r
1178   DrawLine( Image , x4, y4, x2, y2, Color );\r
1179   DrawLine( Image , x2, y2, x5, y5, Color );\r
1180   DrawLine( Image , x5, y5, x3, y3, Color );\r
1181 \r
1182   return x3;\r
1183  }  \r
1184  \r
1185  if( Letter == 'X' )\r
1186  {\r
1187   int x1 = TopLeftX;\r
1188   int y1 = TopLeftY;\r
1189   \r
1190   int x2 = TopLeftX + Width;\r
1191   int y2 = y1;\r
1192   \r
1193   int x3 = x1;\r
1194   int y3 = TopLeftY + Height;\r
1195   \r
1196   int x4 = x2;\r
1197   int y4 = y3;\r
1198   \r
1199   DrawLine( Image , x1 , y1, x4, y4 , Color );\r
1200   DrawLine( Image , x2 , y2, x3, y3 , Color );\r
1201  \r
1202   return x2;\r
1203  }\r
1204  \r
1205  if( Letter == 'Y' )\r
1206  {\r
1207   int x1 = TopLeftX;\r
1208   int y1 = TopLeftY;\r
1209   \r
1210   int x2 = TopLeftX + Width;\r
1211   int y2 = y1;\r
1212   \r
1213   int x3 = TopLeftX + Center;\r
1214   int y3 = ebmpRound( TopLeftY + 0.5*Height);\r
1215   \r
1216   int x4 = x3;\r
1217   int y4 = TopLeftY + Height;\r
1218   \r
1219   DrawLine( Image , x1, y1, x3, y3, Color );\r
1220   DrawLine( Image , x2, y2, x3, y3, Color );\r
1221   DrawLine( Image , x3, y3, x4, y4, Color );\r
1222 \r
1223   return x2;\r
1224  }\r
1225  \r
1226  if( Letter == 'Z' )\r
1227  {\r
1228   int x1 = TopLeftX;\r
1229   int y1 = TopLeftY;\r
1230   \r
1231   int x2 = TopLeftX + Width;\r
1232   int y2 = y1;\r
1233   \r
1234   int x3 = x1;\r
1235   int y3 = TopLeftY + Height;\r
1236   \r
1237   int x4 = x2;\r
1238   int y4 = y3;\r
1239 \r
1240   \r
1241   DrawLine( Image , x1 , y1, x2, y2 , Color );\r
1242   DrawLine( Image , x2 , y2, x3, y3 , Color );\r
1243   DrawLine( Image , x3 , y3, x4, y4 , Color );\r
1244  \r
1245   return x2;\r
1246  } \r
1247  \r
1248  // space \r
1249  \r
1250  if( Letter == ' ' || Letter == '\t' )\r
1251  {\r
1252   return ebmpRound( TopLeftX + 0.5*Height );\r
1253  }\r
1254 \r
1255  // numbers\r
1256 \r
1257  if( Letter == '0' || Letter == 'O' )\r
1258  {\r
1259   int x1 = TopLeftX;\r
1260   int y1 = TopLeftY + Height - Center;\r
1261   \r
1262   int x2 = x1;\r
1263   int y2 = TopLeftY + Center; \r
1264   \r
1265   int x3 = TopLeftX + Width;\r
1266   int y3 = y2;\r
1267   \r
1268   int x4 = x3;\r
1269   int y4 = y1;\r
1270 \r
1271   // centers of the circles\r
1272   \r
1273   double x5 = TopLeftX + Center; \r
1274   double y5 = TopLeftY + Center; \r
1275 \r
1276   double x6 = x5;\r
1277   double y6 = TopLeftY + Height - Center; \r
1278   \r
1279   DrawLine( Image , x1, y1, x2, y2, Color );\r
1280   DrawLine( Image , x3, y3, x4, y4, Color );\r
1281   \r
1282   DrawArc( Image, x5, y5 , Center , 3.14159265358979 , 6.28318530717959 , Color ); \r
1283   DrawArc( Image, x6, y6 , Center , 0 ,  3.14159265358979 , Color ); \r
1284   \r
1285   return x3; \r
1286  }\r
1287  \r
1288  if( Letter == '1' )\r
1289  {\r
1290   int x1 = ebmpRound( TopLeftX + Height*0.05);\r
1291   int y1 = TopLeftY+Height;\r
1292   \r
1293   int x2 = ebmpRound(x1 + 0.4*Height);\r
1294   int y2 = y1;\r
1295   \r
1296   int x3 = ebmpRound( x1 + 0.2*Height);\r
1297   int y3 = y1;\r
1298   \r
1299   int x4 = x3;\r
1300   int y4 = TopLeftY;\r
1301   \r
1302   int x5 = ebmpRound(x1 + 0.05*Height);\r
1303   int y5 = ebmpRound(TopLeftY+ 0.2*Height);\r
1304   \r
1305   DrawLine( Image , x1, y1, x2, y2, Color );\r
1306   DrawLine( Image , x3, y3, x4, y4, Color );\r
1307   DrawLine( Image , x4, y4, x5, y5, Color );\r
1308   \r
1309   return ebmpRound(x2 + Height*0.05);\r
1310  } \r
1311  \r
1312  if( Letter == '2' )\r
1313  {\r
1314   int x1 = TopLeftX + Width; // ebmpRound( TopLeftX + 0.6*Height );\r
1315   int y1 = TopLeftY+Height;\r
1316   \r
1317   int x2 = TopLeftX;\r
1318   int y2 = y1;\r
1319   \r
1320   int x3 = x1;\r
1321   int y3 = TopLeftY + Center; // ebmpRound( TopLeftY + 0.3*Height )+1;\r
1322   \r
1323   double x4 = TopLeftX + Center; // TopLeftX + (0.3*Height);\r
1324   double y4 = TopLeftY + Center; // TopLeftY + (0.3*Height);\r
1325   \r
1326   DrawLine( Image , x1, y1, x2, y2, Color );\r
1327   DrawLine( Image , x2, y2, x3, y3, Color );\r
1328   \r
1329   DrawArc( Image , x4 , y4 , Center , 2.74 , 6.3 , Color );\r
1330   \r
1331   return x1;\r
1332  } \r
1333  \r
1334  if( Letter == '3' )\r
1335  {\r
1336   double x1 = TopLeftX + (0.25*Height);\r
1337   double y1 = TopLeftY + (0.25*Height);\r
1338   \r
1339   double x2 = x1;\r
1340   double y2 = TopLeftY + (0.75*Height);\r
1341   \r
1342   int x3 = ebmpRound( TopLeftX + 0.3*Height);\r
1343   int y3 = ebmpRound( TopLeftY + 0.5*Height);\r
1344   \r
1345   int x4 = ebmpRound( TopLeftX + 0.2*Height);\r
1346   int y4 = y3;\r
1347   \r
1348   DrawArc( Image , x1 , y1 , 0.25*Height , -3.14159265358979 , 1.57079632679490 , Color );\r
1349   DrawArc( Image , x2 , y2 , 0.25*Height , -1.57079632679490 , 3.14159265358979 , Color );\r
1350   DrawLine( Image , x3, y3, x4, y4, Color );\r
1351 \r
1352   return ebmpRound(TopLeftX + 0.5*Height); \r
1353  }  \r
1354  \r
1355  if( Letter == '4' )\r
1356  {\r
1357   // define some control points\r
1358   \r
1359   int x1 = TopLeftX+Width;\r
1360   int y1 = TopLeftY+ebmpRound(Height*2.0/3.0);\r
1361   \r
1362   int x2 = TopLeftX;\r
1363   int y2 = y1;\r
1364   \r
1365   int x3 = ebmpRound( TopLeftX + 0.5*Height );\r
1366   int y3 = TopLeftY;\r
1367   \r
1368   int x4 = x3;\r
1369   int y4 = TopLeftY + Height;\r
1370   \r
1371  \r
1372   DrawLine( Image , x1, y1, x2, y2, Color );\r
1373   DrawLine( Image , x2, y2, x3, y3, Color );\r
1374   DrawLine( Image , x3, y3, x4, y4, Color );\r
1375   \r
1376   return x1;\r
1377  }\r
1378  \r
1379  if( Letter == '5' )\r
1380  {\r
1381   int x1 = TopLeftX + Width;\r
1382   int y1 = TopLeftY;\r
1383   \r
1384   int x2;\r
1385   int y2 = TopLeftY;\r
1386   \r
1387   int x3 = TopLeftX + ebmpRound( 0.2*Height )-1;\r
1388   int y3 = TopLeftY + ebmpRound( 0.48786796564404*Height );\r
1389   \r
1390   x2 = x3+1;\r
1391   \r
1392   double x4 = TopLeftX + Center;\r
1393   double y4 = TopLeftY + Height - Center;\r
1394 \r
1395   DrawArc( Image , x4, y4, Center, -2.35619449019234 , 3 , Color );\r
1396  \r
1397   DrawLine( Image , x1, y1, x2, y2, Color );\r
1398   DrawLine( Image , x2, y2, x3, y3, Color );\r
1399  \r
1400   return x1;\r
1401  }\r
1402 \r
1403  if( Letter == '6' )\r
1404  {\r
1405   double x1 = TopLeftX + (0.25*Height);\r
1406   double y1 = TopLeftY + (0.25*Height);\r
1407   \r
1408   double x2 = x1;\r
1409   double y2 = TopLeftY + (0.75*Height);\r
1410   \r
1411   int x3 = TopLeftX;\r
1412   int y3 = ebmpRound( y1 );\r
1413   \r
1414   int x4 = x3;\r
1415   int y4 = ebmpRound( y2 );\r
1416 \r
1417   DrawArc( Image , x1 , y1 , 0.25*Height , 3.1 , 6.2 , Color );\r
1418   DrawArc( Image , x2 , y2 , 0.25*Height , 0 , 6.29 , Color );\r
1419   \r
1420   DrawLine( Image , x3, y3, x4, y4, Color );\r
1421 \r
1422   return TopLeftX + (int) ebmpRound(.5*Height); \r
1423  } \r
1424  \r
1425  if( Letter == '7' )\r
1426  {\r
1427   int x1 = TopLeftX;\r
1428   int y1 = TopLeftY;\r
1429   \r
1430   int x2 = TopLeftX + Width;\r
1431   int y2 = y1;\r
1432   \r
1433   int x3 = ebmpRound(TopLeftX + 0.1*Height);\r
1434   int y3 = TopLeftY + Height;\r
1435  \r
1436   DrawLine( Image , x1, y1, x2, y2, Color );\r
1437   DrawLine( Image , x2, y2, x3, y3, Color );\r
1438   \r
1439   return x2; \r
1440  }\r
1441  \r
1442  if( Letter == '8' )\r
1443  {\r
1444   double x1 = TopLeftX + (0.25*Height);\r
1445   double y1 = TopLeftY + (0.25*Height);\r
1446   \r
1447   double x2 = x1;\r
1448   double y2 = TopLeftY + (0.75*Height);\r
1449 \r
1450   DrawArc( Image , x1 , y1 , 0.25*Height , 0 , 6.28318530717959 , Color );\r
1451   DrawArc( Image , x2 , y2 , 0.25*Height , 0 , 6.28318530717959 , Color );\r
1452 \r
1453   return TopLeftX + (int) ebmpRound(.5*Height); \r
1454  } \r
1455 \r
1456  if( Letter == '9' )\r
1457  {\r
1458   double x1 = TopLeftX + (0.25*Height);\r
1459   double y1 = TopLeftY + (0.25*Height);\r
1460   \r
1461   double x2 = x1;\r
1462   double y2 = TopLeftY + (0.75*Height);\r
1463   \r
1464   int x3 = ebmpRound( TopLeftX + 0.5*Height );\r
1465   int y3 = ebmpRound( y1 );\r
1466   \r
1467   int x4 = x3;\r
1468   int y4 = ebmpRound( y2 );\r
1469 \r
1470   DrawArc( Image , x1 , y1 , 0.25*Height , 0 , 6.28318530717959 , Color );\r
1471   DrawArc( Image , x2 , y2 , 0.25*Height , 0 , 3 , Color );\r
1472   \r
1473   DrawLine( Image , x3, y3, x4, y4, Color );\r
1474 \r
1475   return TopLeftX + (int) ebmpRound(.5*Height); \r
1476  } \r
1477  \r
1478  if( Letter == '.' )\r
1479  {\r
1480   double x1 = TopLeftX + 1.25;\r
1481   double y1 = TopLeftY + Height  - 0.5;\r
1482  \r
1483   DrawArc( Image, x1, y1, 0.75 , 0 , 6.3 , Color );\r
1484   \r
1485   return ebmpRound( x1 + 1.25 );\r
1486  }\r
1487  \r
1488  if( Letter == '!' )\r
1489  {\r
1490   double x1 = TopLeftX + 1.25;\r
1491   double y1 = TopLeftY + Height  - 0.5;\r
1492   \r
1493   int x2 = ebmpRound( x1 );\r
1494   int y2 = TopLeftY;\r
1495   \r
1496   int x3 = x2;\r
1497   int y3 = ebmpRound( y1 - 2 );\r
1498   \r
1499   int y4 = ebmpRound( 0.05*(13*y3+7*y2) );\r
1500  \r
1501   DrawArc( Image, x1, y1, 0.75 , 0 , 6.3 , Color );\r
1502   \r
1503   DrawLine( Image, x2,y2, x3,y3 , Color);\r
1504   DrawLine( Image, x2-1, y2, x3-1,y4 , Color);\r
1505   \r
1506   return ebmpRound( x1 + 1.25 );\r
1507  } \r
1508  \r
1509  if( Letter == ',' )\r
1510  {\r
1511   double x1 = TopLeftX + 1.25;\r
1512   double y1 = TopLeftY + Height  - 0.5;\r
1513   \r
1514   double x3 = x1;\r
1515   double y3 = y1 + 1.75;\r
1516  \r
1517   DrawArc( Image, x1, y1, 0.75 , 0 , 6.3 , Color );\r
1518   DrawArc( Image, x3, y3, 1.75 , -0.5*pi , 0.65*pi , Color );\r
1519   \r
1520   return ebmpRound( x1 + 1.25 );\r
1521  }\r
1522  \r
1523  if( Letter == '\'' )\r
1524  {\r
1525   double x1 = TopLeftX + 1.25;\r
1526   double y1 = TopLeftY + Center  - 0.5;\r
1527   \r
1528   double x3 = x1;\r
1529   double y3 = y1 + 1.75;\r
1530  \r
1531   DrawArc( Image, x1, y1, 0.75 , 0 , 6.3 , Color );\r
1532   DrawArc( Image, x3, y3, 1.75 , -0.5*pi , 0.65*pi , Color );\r
1533   \r
1534   return ebmpRound( x1 + 1.25 );\r
1535  } \r
1536 \r
1537  if( Letter == '`' )\r
1538  {\r
1539   double x1 = TopLeftX + 1.25;\r
1540   double y1 = TopLeftY + Center  - 0.5;\r
1541   \r
1542   double x3 = x1;\r
1543   double y3 = y1 + 1.75;\r
1544  \r
1545   DrawArc( Image, x1, y1, 0.75 , 0 , 6.3 , Color );\r
1546   DrawArc( Image, x3, y3, 1.75 , 0.35*pi , 1.5*pi , Color );\r
1547   \r
1548   return ebmpRound( x1 + 1.25 );\r
1549  } \r
1550  \r
1551  \r
1552  if( Letter == '"' )\r
1553  {\r
1554   double x1 = TopLeftX + 1.25;\r
1555   double y1 = TopLeftY + Center  - 0.5;\r
1556   \r
1557   double x3 = x1;\r
1558   double y3 = y1 + 1.75;\r
1559  \r
1560   DrawArc( Image, x1, y1, 0.75 , 0 , 6.3 , Color );\r
1561   DrawArc( Image, x3, y3, 1.75 , -0.5*pi , 0.65*pi , Color );\r
1562   \r
1563   DrawArc( Image, x1+3.5, y1, 0.75 , 0 , 6.3 , Color );\r
1564   DrawArc( Image, x3+3.5, y3, 1.75 , -0.5*pi , 0.65*pi , Color );  \r
1565   \r
1566   return ebmpRound( x1 + 1.25 + 3.5);\r
1567  }  \r
1568  \r
1569  if( Letter == '[' )\r
1570  {\r
1571   int x1 = TopLeftX;\r
1572   int y1 = TopLeftY;\r
1573   \r
1574   int x2 = x1;\r
1575   int y2 = y1 + Height;\r
1576   \r
1577   int x3 = ebmpRound(TopLeftX + 0.15*Height)+1;\r
1578   int y3 = y1;\r
1579   \r
1580   int x4 = x3;\r
1581   int y4 = y2;\r
1582   \r
1583   DrawLine(Image,x1,y1,x2,y2,Color);\r
1584   DrawLine(Image,x1,y1,x3,y3,Color);\r
1585   DrawLine(Image,x2,y2,x4,y4,Color);\r
1586   \r
1587   return x3;\r
1588  }   \r
1589  \r
1590  if( Letter == ']' )\r
1591  {\r
1592   int x1 = TopLeftX;\r
1593   int y1 = TopLeftY;\r
1594   \r
1595   int x2 = x1;\r
1596   int y2 = y1 + Height;\r
1597   \r
1598   int x3 = ebmpRound(TopLeftX + 0.15*Height)+1;\r
1599   int y3 = y1;\r
1600   \r
1601   int x4 = x3;\r
1602   int y4 = y2;\r
1603   \r
1604   DrawLine(Image,x3,y3,x4,y4,Color);\r
1605   DrawLine(Image,x1,y1,x3,y3,Color);\r
1606   DrawLine(Image,x2,y2,x4,y4,Color);\r
1607   \r
1608   return x3;\r
1609  }   \r
1610  \r
1611  if( Letter == '|' || Letter == 'l' )\r
1612  {\r
1613   int x1 = TopLeftX+2;\r
1614   int y1 = TopLeftY;\r
1615   \r
1616   int x2 = x1;\r
1617   int y2 = y1 + Height;\r
1618   \r
1619   DrawLine(Image,x1,y1,x2,y2,Color);\r
1620   \r
1621   return x1+2;\r
1622  }    \r
1623  \r
1624  if( Letter == ':' )\r
1625  {\r
1626   double x1 = TopLeftX + 1.25;\r
1627   double y1 = TopLeftY + Height  - 0.5;\r
1628   \r
1629   double x2 = x1;\r
1630   double y2 = TopLeftY + 0.5*Height;\r
1631  \r
1632   DrawArc( Image, x1, y1, 0.75 , 0 , 6.3 , Color );\r
1633   DrawArc( Image, x2, y2, 0.75 , 0 , 6.3 , Color );\r
1634   \r
1635   return ebmpRound( x1 + 1.25 );\r
1636  } \r
1637 \r
1638  if( Letter == ';' )\r
1639  {\r
1640   double x1 = TopLeftX + 1.25;\r
1641   double y1 = TopLeftY + Height  - 0.5;\r
1642   \r
1643   double x2 = x1;\r
1644   double y2 = TopLeftY + 0.5*Height;\r
1645   \r
1646   double x3 = x1;\r
1647   double y3 = y1 + 1.75;\r
1648  \r
1649   DrawArc( Image, x1, y1, 0.75 , 0 , 6.3 , Color );\r
1650   DrawArc( Image, x2, y2, 0.75 , 0 , 6.3 , Color );\r
1651   DrawArc( Image, x3, y3, 1.75 , -0.5*pi , 0.65*pi , Color );\r
1652   \r
1653   return ebmpRound( x1 + 1.25 );\r
1654  } \r
1655  \r
1656  if( Letter == '-' )\r
1657  {\r
1658   int TempWidth = ebmpRound(0.5*Height);\r
1659   if( TempWidth % 2 != 0 )\r
1660   { TempWidth++; }\r
1661   int TempRad = (TempWidth-1)/2;\r
1662  \r
1663   int x1 = TopLeftX;\r
1664   int y1 = TopLeftY + TempWidth;\r
1665   \r
1666   int x2 = TopLeftX + TempWidth;\r
1667   int y2 = y1;\r
1668   \r
1669   DrawLine( Image, x1, y1, x2, y2 , Color );\r
1670   \r
1671   return x2;\r
1672  } \r
1673  \r
1674  if( Letter == '=' )\r
1675  {\r
1676   int TempWidth = ebmpRound(0.5*Height);\r
1677   if( TempWidth % 2 != 0 )\r
1678   { TempWidth++; }\r
1679   int TempRad = (TempWidth-1)/2;\r
1680  \r
1681   int x1 = TopLeftX;\r
1682   int y1 = TopLeftY + TempWidth-1;\r
1683   \r
1684   int x2 = TopLeftX + TempWidth+1;\r
1685   int y2 = y1;\r
1686   \r
1687   int x3 = x1;\r
1688   int y3 = y1+3;\r
1689   \r
1690   int x4 = x2;\r
1691   int y4 = y3;\r
1692   \r
1693   \r
1694   DrawLine( Image, x1, y1, x2, y2 , Color );\r
1695   DrawLine( Image, x3, y3, x4, y4 , Color );\r
1696   \r
1697   return x2;\r
1698  }  \r
1699  \r
1700  if( Letter == '+' )\r
1701  {\r
1702   int TempWidth = ebmpRound(0.5*Height);\r
1703   if( TempWidth % 2 != 0 )\r
1704   { TempWidth++; }\r
1705   int TempRad = (TempWidth-1)/2;\r
1706  \r
1707   int x1 = TopLeftX;\r
1708   int y1 = TopLeftY + TempWidth;\r
1709   \r
1710   int x2 = TopLeftX + TempWidth;\r
1711   int y2 = y1;\r
1712   \r
1713   int x3 = ( x1 + TempRad + 1);\r
1714   int y3 = ( y1 + TempRad + 1);\r
1715 \r
1716   int x4 = x3;\r
1717   int y4 = ( y1 - TempRad - 1);\r
1718   \r
1719   DrawLine( Image, x1, y1, x2, y2 , Color );\r
1720   DrawLine( Image, x3, y3, x4, y4 , Color );\r
1721   \r
1722   return x2;\r
1723  }  \r
1724  \r
1725  if( Letter == '/' )\r
1726  {\r
1727   int x1 = TopLeftX;\r
1728   int y1 = TopLeftY+Height;\r
1729  \r
1730   int x2 = TopLeftX+Width;\r
1731   int y2 = TopLeftY;\r
1732   \r
1733   DrawLine(Image,x1,y1,x2,y2,Color);\r
1734  \r
1735   return x2;\r
1736  }\r
1737  if( Letter == '\\' )\r
1738  {\r
1739   int x1 = TopLeftX+Width;\r
1740   int y1 = TopLeftY+Height;\r
1741  \r
1742   int x2 = TopLeftX;\r
1743   int y2 = TopLeftY;\r
1744   \r
1745   DrawLine(Image,x1,y1,x2,y2,Color);\r
1746  \r
1747   return x1;\r
1748  }\r
1749  \r
1750  if( Letter == '%' )\r
1751  {\r
1752   int x1 = TopLeftX;\r
1753   int y1 = TopLeftY+Height;\r
1754  \r
1755   int x2 = TopLeftX+Width;\r
1756   int y2 = TopLeftY;\r
1757   \r
1758   double x3 = TopLeftX + 0.15*Height;\r
1759   double y3 = TopLeftY + 0.15*Height;\r
1760   \r
1761   double x4 = ceil( TopLeftX + 0.45*Height + 0.5);\r
1762   double y4 = ceil( TopLeftY + 0.85*Height );\r
1763   \r
1764   DrawLine(Image,x1,y1,x2,y2,Color);\r
1765 \r
1766   DrawArc(Image,x3,y3,0.15*Height,0,2*pi,Color);\r
1767   DrawArc(Image,x4,y4,0.15*Height,0,2*pi,Color);\r
1768   \r
1769   return x2;\r
1770  } \r
1771  \r
1772  if( Letter == '_' )\r
1773  {\r
1774   DrawLine(Image,TopLeftX,TopLeftY+Height,TopLeftX+Width,TopLeftY+Height,Color);\r
1775  \r
1776   return TopLeftX + Width;\r
1777  }\r
1778  \r
1779  if( Letter == '^' )\r
1780  {\r
1781   DrawLine(Image,TopLeftX,TopLeftY+Center,TopLeftX+Center,TopLeftY,Color);\r
1782   DrawLine(Image,TopLeftX+Center,TopLeftY,TopLeftX+Width,TopLeftY+Center,Color);\r
1783  \r
1784   return TopLeftX + Width;\r
1785  } \r
1786  \r
1787  if( Letter == '<' )\r
1788  {\r
1789   int x1 = TopLeftX;\r
1790   int y1 = ebmpRound( TopLeftY + 0.5*Height );\r
1791   \r
1792   int x2 = TopLeftX+Width;\r
1793   int y2 = TopLeftY;\r
1794   \r
1795   int x3 = x2;\r
1796   int y3 = TopLeftY+Height;\r
1797   \r
1798   DrawLine(Image,x1,y1,x2,y2,Color);\r
1799   DrawLine(Image,x1,y1,x3,y3,Color);\r
1800   \r
1801   return x2;\r
1802  }\r
1803  \r
1804  if( Letter == '>' )\r
1805  {\r
1806   int x1 = TopLeftX+Width;\r
1807   int y1 = ebmpRound( TopLeftY + 0.5*Height );\r
1808   \r
1809   int x2 = TopLeftX;\r
1810   int y2 = TopLeftY;\r
1811   \r
1812   int x3 = x2;\r
1813   int y3 = TopLeftY+Height;\r
1814   \r
1815   DrawLine(Image,x1,y1,x2,y2,Color);\r
1816   DrawLine(Image,x1,y1,x3,y3,Color);\r
1817   \r
1818   return x1;\r
1819  } \r
1820  \r
1821  if( Letter == '#' )\r
1822  {\r
1823   int TempWidth = ebmpRound(0.5*Height);\r
1824   if( TempWidth % 2 != 0 )\r
1825   { TempWidth++; }\r
1826   int TempRad = (TempWidth-1)/2;\r
1827  \r
1828   int x1 = TopLeftX;\r
1829   int y1 = (int) floor(TopLeftY + 0.5*Height-1);\r
1830   \r
1831   int x2 = TopLeftX + Width;\r
1832   int y2 = y1;\r
1833   \r
1834   int x3 = x1;\r
1835   int y3 = y1+2;\r
1836   \r
1837   int x4 = x2;\r
1838   int y4 = y3;\r
1839   \r
1840   int x5 = TopLeftX+Center-1;\r
1841   int y5 = TopLeftY;\r
1842 \r
1843   int x6 = x5;\r
1844   int y6 = TopLeftY+Height;\r
1845   \r
1846   int x7 = TopLeftX+Center+1;\r
1847   int y7 = TopLeftY;\r
1848 \r
1849   int x8 = x7;\r
1850   int y8 = TopLeftY+Height;\r
1851   \r
1852   DrawLine( Image, x1, y1, x2, y2 , Color );\r
1853   DrawLine( Image, x3, y3, x4, y4 , Color );\r
1854   DrawLine( Image, x5, y5, x6, y6, Color );\r
1855   DrawLine( Image, x7,y7,x8,y8,Color);\r
1856 \r
1857   return x2;\r
1858  }\r
1859  \r
1860  if( Letter == '?' )\r
1861  {\r
1862   double x1 = TopLeftX+Center;\r
1863   double y1 = TopLeftY+Center;\r
1864   \r
1865   int x2 = (int) x1;\r
1866   int y2 = TopLeftY + Width;\r
1867   \r
1868   int x3 = x2;\r
1869   int y3 = ebmpRound(TopLeftY+ 0.8*Height);\r
1870   if( TopLeftY+Height-y3 <= 2 )\r
1871   { y3--; }\r
1872   \r
1873   double x4 = x1;\r
1874   double y4 = TopLeftY + Height  - 0.5;\r
1875   \r
1876   DrawArc(Image,x1,y1,Center,pi,pi/2,Color);\r
1877   DrawLine(Image,x2,y2,x3,y3,Color);\r
1878   DrawArc( Image, x4, y4, 0.75 , 0 , 6.3 , Color );\r
1879  \r
1880   return TopLeftX + Width;\r
1881  }\r
1882  \r
1883  if( Letter == '*' )\r
1884  {\r
1885   int x1 = TopLeftX+Center;\r
1886   int y1 = TopLeftY;\r
1887  \r
1888   int x2 = x1;\r
1889   int y2 = TopLeftY+Height;\r
1890   \r
1891   int x3 = TopLeftX;\r
1892   int y3 = ebmpRound(TopLeftY+0.5*Height);\r
1893   \r
1894   int x4 = TopLeftX+Width;\r
1895   int y4 = y3;\r
1896   \r
1897   int x5 = TopLeftX+1; // ebmpRound(TopLeftX+0.15*Width);\r
1898   int y5 = TopLeftY+1; // ebmpRound(TopLeftY+0.15*Height);\r
1899   \r
1900   int x6 = TopLeftX+Width-1; // ebmpRound(TopLeftX+0.45*Width);\r
1901   int y6 = TopLeftY+Height-1; //  ebmpRound(TopLeftY+0.85*Height);\r
1902   \r
1903   int x7 = x6;\r
1904   int y7 = y5;\r
1905   \r
1906   int x8 = x5;\r
1907   int y8 = y6;\r
1908  \r
1909   DrawLine(Image,x1,y1,x2,y2,Color);\r
1910   DrawLine(Image,x3,y3,x4,y4,Color);\r
1911   DrawLine(Image,x5,y5,x6,y6,Color);\r
1912   DrawLine(Image,x7,y7,x8,y8,Color);\r
1913   \r
1914   return x4;\r
1915  }\r
1916  \r
1917  if( Letter == '@' )\r
1918  {\r
1919   double x1 = TopLeftX + 1.5*Center;\r
1920   double y1 = TopLeftY + Height - 1.5*Center;\r
1921   \r
1922   double x2 = x1 + .35*Center + .6*Center;\r
1923   double y2 = y1 + .35*Center;\r
1924   \r
1925   DrawArc(Image,x1,y1,Center*1.5,0,2*pi,Color);\r
1926   DrawArc(Image,x1,y1,Center*0.5,0,2*pi,Color);\r
1927   \r
1928   DrawArc(Image,x2,y2,Center*0.45,0,pi,Color);\r
1929  \r
1930   return ebmpRound(TopLeftX + 3*Center);\r
1931  }\r
1932  \r
1933  if( Letter == '~' )\r
1934  {\r
1935   double x1 = TopLeftX + 0.2*Height;\r
1936   double y1 = TopLeftY + 0.4*Height;\r
1937   \r
1938   double x2 = TopLeftX + 0.6*Height;\r
1939   double y2 = y1;\r
1940   \r
1941   DrawArc(Image,x1,y1,0.2*Height, 0.7*pi,2*pi, Color);\r
1942   DrawArc(Image,x2,y2,0.2*Height, -0.3*pi,pi, Color);\r
1943  \r
1944   return ebmpRound(TopLeftX + 0.8*Height);\r
1945  }\r
1946  \r
1947  if( Letter == '(' ) \r
1948  {\r
1949   double x5 = TopLeftX + Center; \r
1950   double y5 = TopLeftY + 0.5*Height; \r
1951 \r
1952   DrawArc( Image, x5, y5 , 0.7*Height , 0.5*pi , -0.5*pi , Color ); \r
1953  \r
1954   return TopLeftX;\r
1955  }\r
1956  \r
1957  if( Letter == ')' ) \r
1958  {\r
1959   double x5 = TopLeftX - Center; \r
1960   double y5 = TopLeftY + 0.5*Height; \r
1961 \r
1962   DrawArc( Image, x5, y5 , 0.7*Height , -0.5*pi , 0.5*pi , Color ); \r
1963  \r
1964   return TopLeftX;\r
1965  } \r
1966  \r
1967  if( Letter == '&' )\r
1968  {\r
1969   double x1 = TopLeftX + Center;\r
1970   double y1 = TopLeftY + Height-Center;\r
1971   \r
1972   double x2 = x1;\r
1973   double y2 = TopLeftY + 0.2*Height;\r
1974   \r
1975   int x3 = ebmpRound(TopLeftX+0.5*Height);\r
1976   int y3 = ebmpRound(y2);\r
1977   \r
1978   int x4 = TopLeftX;\r
1979   int y4 = ebmpRound(y1);\r
1980   \r
1981   int x5 = ebmpRound(TopLeftX+0.25*Height);\r
1982   int y5 = TopLeftY+Height-2*Center;\r
1983   \r
1984   int x6 = ebmpRound(TopLeftX+1.1*Width);\r
1985   int y6 = TopLeftY+Height;  \r
1986   \r
1987   \r
1988   DrawArc( Image, x1,y1, Center, -.1*pi, 1.5*pi, Color);\r
1989   DrawArc( Image, x2,y2, 0.2*Height, 0,2*pi,Color); \r
1990   \r
1991 //  DrawLine( Image, x3,y3, x4,y4, Color);\r
1992   DrawLine( Image, x5,y5, x6,y6, Color);\r
1993  \r
1994   return x6;\r
1995  }\r
1996 \r
1997  if( Letter == '&' && 1 == 0 ) // alt ampersand &\r
1998  {\r
1999   double x1 = TopLeftX + Center;\r
2000   double y1 = TopLeftY + Height-Center;\r
2001   \r
2002   double x2 = x1;\r
2003   double y2 = TopLeftY + 0.2*Height;\r
2004   \r
2005   int x3 = ebmpRound(TopLeftX+0.5*Height);\r
2006   int y3 = ebmpRound(y2);\r
2007   \r
2008   int x4 = TopLeftX;\r
2009   int y4 = ebmpRound(y1);\r
2010   \r
2011   int x5 = ebmpRound(TopLeftX+0.1*Height);\r
2012   int y5 = y3;\r
2013   \r
2014   int x6 = ebmpRound(TopLeftX+1.1*Width);\r
2015   int y6 = TopLeftY+Height;  \r
2016   \r
2017   \r
2018   DrawArc( Image, x1,y1, Center, -.25*pi, pi, Color);\r
2019   DrawArc( Image, x2,y2, 0.2*Height, pi,2*pi,Color); \r
2020   \r
2021   DrawLine( Image, x3,y3, x4,y4, Color);\r
2022   DrawLine( Image, x5,y5, x6,y6, Color);\r
2023  \r
2024   return x6;\r
2025  } \r
2026  \r
2027  if( Letter == '$' )\r
2028  {\r
2029   double x1 = TopLeftX + 0.25*Height;\r
2030   double y1 = TopLeftY + 0.25*Height;\r
2031   \r
2032   double x2 = x1;\r
2033   double y2 = TopLeftY + 0.75*Height;\r
2034   \r
2035   int x3 = ebmpRound(x1);\r
2036   int y3 = ebmpRound(TopLeftY-0.1*Height);\r
2037   \r
2038   int x4 = x3;\r
2039   int y4 = ebmpRound(TopLeftY+1.1*Height);\r
2040   \r
2041   DrawArc( Image, x1, y1 , 0.25*Height, 1.5707963267948 , 6.28318530717 , Color );\r
2042   DrawArc( Image, x2, y2 , 0.25*Height, -1.5707963267948 ,3.1415926535897 , Color );\r
2043   DrawLine( Image, x3, y3, x4, y4, Color);\r
2044   \r
2045   return ebmpRound( TopLeftX + 0.5*Height );\r
2046  }\r
2047  \r
2048  if( Letter ==  '}' )\r
2049  {\r
2050   double x1 = TopLeftX;\r
2051   double y1 = TopLeftY + 0.15*Height;\r
2052   \r
2053   double x2 = x1+0.3*Height;\r
2054   double y2 = TopLeftY + 0.4*Height;\r
2055 \r
2056   double x3 = x2;\r
2057   double y3 = TopLeftY + 0.6*Height;\r
2058   \r
2059   double x4 = x1;\r
2060   double y4 = TopLeftY + 0.85*Height;\r
2061   \r
2062   DrawArc( Image, x1,y1, 0.2*Height, 1.5*pi, 2*pi, Color);\r
2063   \r
2064   DrawArc( Image, x2,y2, 0.1*Height, 0.5*pi,pi, Color);\r
2065   DrawArc( Image, x3,y3, 0.1*Height, pi,1.5*pi, Color);\r
2066   \r
2067   DrawArc( Image, x4,y4, 0.2*Height, 0,0.5*pi, Color);\r
2068   \r
2069   int x5 = ebmpRound( TopLeftX+0.2*Height);\r
2070   int y5 = ebmpRound( TopLeftY+0.15*Height);\r
2071   \r
2072   int x6 = x5;\r
2073   int y6 = ebmpRound( TopLeftY+0.4*Height);\r
2074   \r
2075   DrawLine( Image, x5,y5, x6,y6, Color );\r
2076 \r
2077   int x7 = x5;\r
2078   int y7 = ebmpRound( TopLeftY+0.6*Height);\r
2079   \r
2080   int x8 = x7;\r
2081   int y8 = ebmpRound( TopLeftY+0.85*Height);\r
2082   \r
2083   DrawLine( Image, x7,y7, x8,y8, Color );  \r
2084 \r
2085   return ebmpRound(TopLeftX + 0.4*Height);\r
2086  }\r
2087  \r
2088  if( Letter ==  '{' )\r
2089  {\r
2090   double x1 = TopLeftX + 0.3*Height;\r
2091   double y1 = TopLeftY + 0.15*Height;\r
2092   \r
2093   double x2 = TopLeftX  ;\r
2094   double y2 = TopLeftY + 0.4*Height;\r
2095 \r
2096   double x3 = x2;\r
2097   double y3 = TopLeftY + 0.6*Height;\r
2098   \r
2099   double x4 = x1;\r
2100   double y4 = TopLeftY + 0.85*Height;\r
2101   \r
2102   DrawArc( Image, x1,y1, 0.2*Height, pi,1.5*pi, Color);\r
2103   \r
2104   DrawArc( Image, x2,y2, 0.1*Height, 0,0.5*pi, Color);\r
2105   DrawArc( Image, x3,y3, 0.1*Height, 1.5*pi,2*pi, Color);\r
2106   \r
2107   DrawArc( Image, x4,y4, 0.2*Height, 0.5*pi,pi, Color);\r
2108   \r
2109   int x5 = ebmpRound( TopLeftX+0.1*Height);\r
2110   int y5 = ebmpRound( TopLeftY+0.15*Height);\r
2111   \r
2112   int x6 = x5;\r
2113   int y6 = ebmpRound( TopLeftY+0.4*Height);\r
2114   \r
2115   DrawLine( Image, x5,y5, x6,y6, Color );\r
2116 \r
2117   int x7 = x5;\r
2118   int y7 = ebmpRound( TopLeftY+0.6*Height);\r
2119   \r
2120   int x8 = x7;\r
2121   int y8 = ebmpRound( TopLeftY+0.85*Height);\r
2122   \r
2123   DrawLine( Image, x7,y7, x8,y8, Color );  \r
2124 \r
2125   return ebmpRound(TopLeftX + 0.4*Height);\r
2126  }  \r
2127  \r
2128  if( Letter == '&' && 1 == 0 ) // old ampersand '&'\r
2129  {\r
2130   double x1 = TopLeftX + (0.25*Height);\r
2131   double y1 = TopLeftY + (0.25*Height);\r
2132   \r
2133   double x2 = x1;\r
2134   double y2 = TopLeftY + (0.75*Height);\r
2135   \r
2136   int x3 = ebmpRound( TopLeftX + 0.3*Height);\r
2137   int y3 = ebmpRound( TopLeftY + 0.5*Height);\r
2138   \r
2139   int x4 = ebmpRound( TopLeftX + 0.2*Height);\r
2140   int y4 = y3;\r
2141   \r
2142   int x5 = ebmpRound(TopLeftX + 0.35*Height);\r
2143   int y5 = ebmpRound(TopLeftY + 0.75*Height);\r
2144   \r
2145   int x6 = ebmpRound(TopLeftX + 0.65*Height);\r
2146   int y6 = y5;\r
2147   \r
2148   \r
2149   DrawArc( Image , x1 , y1 , 0.25*Height , 1.57079632679490 , 2*pi , Color );\r
2150   DrawArc( Image , x2 , y2 , 0.25*Height , 0, 1.5*pi , Color );\r
2151   DrawLine( Image , x3, y3, x4, y4, Color );\r
2152   DrawLine( Image , x5, y5, x6, y6, Color );\r
2153 \r
2154   return x6;\r
2155  }   \r
2156  \r
2157  \r
2158  return TopLeftX;\r
2159 }\r
2160 \r
2161 int PrintCopyright( BMP& Image, int TopLeftX, int TopLeftY , int Height , \r
2162                   RGBApixel Color )\r
2163 {\r
2164  double pi = 3.14159265358979;\r
2165  \r
2166  int CharNumber = 0;\r
2167  int StartX = ebmpRound(TopLeftX+0.25*Height);\r
2168  int Spacing = (int) ebmpRound( 0.2*Height );\r
2169  if( Spacing < 3 )\r
2170  { Spacing = 3; }\r
2171  int StartY = ebmpRound( TopLeftY-0.25*Height);\r
2172  \r
2173  double x1 = TopLeftX + 0.5*Height;\r
2174  double y1 = TopLeftY + 0.5*Height;\r
2175  \r
2176  DrawArc(Image, x1, y1, 0.6*Height , 0, 2*pi , Color );\r
2177  return PrintLetter( Image, 'c' , StartX, StartY , Height, Color ) + Spacing; \r
2178 }\r