00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include <stdio.h>
00039 #include <stdlib.h>
00040 #include <string.h>
00041 #include <ctype.h>
00042 #include <math.h>
00043 #include <float.h>
00044 #include "cplot.h"
00045
00046
00047 #ifndef WIN32
00048 #ifdef _WIN32
00049 #define WIN32
00050 #endif
00051 #endif
00052
00053 #if defined _MSC_VER && _MSC_VER < 1400
00054 #define _CRT_SECURE_NO_DEPRECATE
00055 #endif
00056
00057 #ifndef _MSC_VER
00058 #define _CRT_SECURE_NO_DEPRECATE
00059 #endif
00060
00061
00062
00063 #ifdef INTEL_IPPS // the intel performance primitives acceleration libraries
00064 #include <ippcore.h>
00065 #include <ipps.h>
00066 #include <ippvm.h>
00067 #include <ippdc.h>
00068
00069
00070
00071 #endif
00072
00073 #define CPLOT_SIZEOF_BITMAPFILEHEADER (14)
00074 #define CPLOT_SIZEOF_BITMAPINFOHEADER (40)
00075
00076 #define CPLOT_RGB_WHITE { 255, 255, 255, 0 }
00077 #define CPLOT_RGB_BLACK { 0, 0, 0, 0 }
00078 #define CPLOT_RGB_BLUE { 255, 0, 0, 0 }
00079 #define CPLOT_RGB_GREEN { 0, 128, 0, 0 }
00080 #define CPLOT_RGB_CYAN { 255, 255, 0, 0 }
00081 #define CPLOT_RGB_RED { 0, 0, 255, 0 }
00082 #define CPLOT_RGB_INDIANRED { 0, 0, 128, 0 }
00083 #define CPLOT_RGB_YELLOW { 0, 255, 255, 0 }
00084 #define CPLOT_RGB_LIMEGREEN { 0, 255, 0, 0 }
00085 #define CPLOT_RGB_DARKBLUE { 128, 64, 0, 0 }
00086 #define CPLOT_RGB_BABYBLUE { 255, 128, 0, 0 }
00087 #define CPLOT_RGB_PAISLYBLUE { 192, 128, 0, 0 }
00088 #define CPLOT_RGB_LIGHTPURPLE { 255, 0, 128, 0 }
00089 #define CPLOT_RGB_PURPLE { 255, 0, 128, 0 }
00090 #define CPLOT_RGB_DARKPURPLE { 128, 0, 64, 0 }
00091 #define CPLOT_RGB_PINK { 255, 128, 255, 0 }
00092 #define CPLOT_RGB_GREYPURPLE { 192, 128, 128, 0 }
00093 #define CPLOT_RGB_BROWN { 64, 64, 128, 0 }
00094 #define CPLOT_RGB_GREY { 128, 128, 128, 0 }
00095 #define CPLOT_RGB_LIGHTGREY { 192, 192, 192, 0 }
00096 #define CPLOT_RGB_MAGENTA { 128, 0, 128, 0 }
00097 #define CPLOT_RGB_ORANGE { 0, 128, 255, 0 }
00098
00099 #define CPLOT_LARGEFONT (14)
00100 #define CPLOT_LARGEFONT_NBYTES (196)
00101 #define CPLOT_SMALLFONT_HGT (7)
00102 #define CPLOT_SMALLFONT_WIDTH (6)
00103 #define CPLOT_SMALLFONT_NBYTES (42)
00104
00105 #define CPLOT_PIXELS_PER_CM (38)
00106
00107 #define CPLOT_POINT_SIZE (5)
00108 #define CPLOT_LARGEPOINT_SIZE (8)
00109
00110 #define CPLOT_DEFAULT_PLOT_WIDTH_CM (15)
00111 #define CPLOT_DEFAULT_PLOT_HEIGHT_CM (13)
00112
00113
00114 typedef unsigned char byte;
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142 const CPLOT_structColorTable CPLOT_DefaultColorTable = {
00143 CPLOT_RGB_WHITE,
00144 CPLOT_RGB_BLACK,
00145 CPLOT_RGB_BLUE,
00146 CPLOT_RGB_GREEN,
00147 CPLOT_RGB_PURPLE,
00148 CPLOT_RGB_MAGENTA,
00149 CPLOT_RGB_DARKBLUE,
00150 CPLOT_RGB_INDIANRED,
00151 CPLOT_RGB_BABYBLUE,
00152 CPLOT_RGB_PAISLYBLUE,
00153 CPLOT_RGB_LIGHTPURPLE,
00154 CPLOT_RGB_DARKPURPLE,
00155 CPLOT_RGB_GREYPURPLE,
00156 CPLOT_RGB_BROWN,
00157 CPLOT_RGB_RED,
00158 CPLOT_RGB_PINK,
00159 CPLOT_RGB_YELLOW,
00160 CPLOT_RGB_ORANGE,
00161 CPLOT_RGB_CYAN,
00162 CPLOT_RGB_LIMEGREEN,
00163 CPLOT_RGB_GREY,
00164 CPLOT_RGB_LIGHTGREY,
00165 };
00166
00167
00168
00169
00170
00171 const byte CPLOT_Point[CPLOT_POINT_SIZE][CPLOT_POINT_SIZE] =
00172 {{ 0,0,1,0,0 },
00173 { 0,1,1,1,0 },
00174 { 1,1,1,1,1 },
00175 { 0,1,1,1,0 },
00176 { 0,0,1,0,0 },};
00177
00178 const byte CPLOT_LargePoint[CPLOT_LARGEPOINT_SIZE][CPLOT_LARGEPOINT_SIZE] =
00179 {{ 0,0,1,1,0,0 },
00180 { 0,1,1,1,1,0 },
00181 { 1,1,1,1,1,1 },
00182 { 1,1,1,1,1,1 },
00183 { 0,1,1,1,1,0 },
00184 { 0,0,1,1,0,0 },};
00185
00186
00187 const byte CPLOT_LARGEFONT_sigma[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00188 {
00189 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00190 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00191 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00192 { 0,0,0,1,1,1,1,1,1,1,1,1,1,1 },
00193 { 0,0,1,1,1,1,1,1,1,1,1,1,1,1 },
00194 { 0,1,1,1,0,0,0,0,1,1,0,0,0,0 },
00195 { 0,1,1,0,0,0,0,0,0,1,1,0,0,0 },
00196 { 0,1,1,0,0,0,0,0,0,1,1,0,0,0 },
00197 { 0,1,1,0,0,0,0,0,0,1,1,0,0,0 },
00198 { 0,0,1,1,0,0,0,0,1,1,1,0,0,0 },
00199 { 0,0,0,1,1,1,1,1,1,1,0,0,0,0 },
00200 { 0,0,0,0,1,1,1,1,1,0,0,0,0,0 },
00201 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00202 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00203 };
00204
00205
00206 const byte CPLOT_LARGEFONT_A[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00207 {
00208 { 0,0,0,1,1,1,0,0,0,0,0,0,0,0 },
00209 { 0,0,0,1,1,1,0,0,0,0,0,0,0,0 },
00210 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
00211 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
00212 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
00213 { 0,1,1,0,0,0,1,1,0,0,0,0,0,0 },
00214 { 0,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00215 { 0,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00216 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00217 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00218 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00219 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00220 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00221 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00222 };
00223
00224 const byte CPLOT_LARGEFONT_B[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00225 {
00226 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00227 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00228 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00229 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00230 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00231 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00232 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00233 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00234 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00235 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00236 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00237 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00238 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00239 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00240 };
00241
00242
00243 const byte CPLOT_LARGEFONT_C[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00244 {
00245 { 0,0,0,1,1,1,1,0,0,0,0,0,0,0 },
00246 { 0,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00247 { 0,1,1,0,0,0,1,1,1,0,0,0,0,0 },
00248 { 1,1,0,0,0,0,0,1,0,0,0,0,0,0 },
00249 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00250 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00251 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00252 { 1,1,0,0,0,0,0,1,0,0,0,0,0,0 },
00253 { 0,1,1,0,0,0,1,1,1,0,0,0,0,0 },
00254 { 0,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00255 { 0,0,0,1,1,1,1,0,0,0,0,0,0,0 },
00256 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00257 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00258 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00259 };
00260
00261
00262 const byte CPLOT_LARGEFONT_D[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00263 {
00264 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00265 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00266 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00267 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00268 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00269 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00270 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00271 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00272 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00273 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00274 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00275 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00276 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00277 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00278 };
00279
00280
00281
00282 const byte CPLOT_LARGEFONT_E[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00283 {
00284 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00285 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00286 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00287 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00288 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00289 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00290 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00291 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00292 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00293 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00294 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00295 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00296 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00297 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00298 };
00299
00300
00301 const byte CPLOT_LARGEFONT_F[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00302 {
00303 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00304 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00305 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00306 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00307 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00308 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00309 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00310 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00311 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00312 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00313 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00314 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00315 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00316 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00317 };
00318
00319
00320 const byte CPLOT_LARGEFONT_G[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00321 {
00322 { 0,0,0,1,1,1,1,0,0,0,0,0,0,0 },
00323 { 0,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00324 { 0,1,1,0,0,0,1,1,1,0,0,0,0,0 },
00325 { 1,1,0,0,0,0,0,1,0,0,0,0,0,0 },
00326 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00327 { 1,1,0,0,0,1,1,1,1,0,0,0,0,0 },
00328 { 1,1,0,0,0,1,1,1,1,0,0,0,0,0 },
00329 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00330 { 0,1,1,0,0,0,1,1,1,0,0,0,0,0 },
00331 { 0,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00332 { 0,0,0,1,1,1,1,0,0,0,0,0,0,0 },
00333 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00334 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00335 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00336 };
00337
00338
00339
00340 const byte CPLOT_LARGEFONT_H[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00341 {
00342 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00343 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00344 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00345 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00346 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00347 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00348 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00349 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00350 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00351 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00352 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00353 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00354 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00355 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00356 };
00357
00358
00359 const byte CPLOT_LARGEFONT_I[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00360 {
00361 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00362 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00363 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00364 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00365 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00366 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00367 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00368 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00369 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00370 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00371 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00372 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00373 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00374 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00375 };
00376
00377
00378 const byte CPLOT_LARGEFONT_J[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00379 {
00380 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
00381 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
00382 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
00383 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
00384 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
00385 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
00386 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
00387 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00388 { 1,1,1,0,0,1,1,0,0,0,0,0,0,0 },
00389 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00390 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
00391 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00392 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00393 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00394 };
00395
00396
00397 const byte CPLOT_LARGEFONT_K[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00398 {
00399 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00400 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00401 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00402 { 1,1,0,0,1,1,1,0,0,0,0,0,0,0 },
00403 { 1,1,0,1,1,1,1,0,0,0,0,0,0,0 },
00404 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00405 { 1,1,1,0,0,1,1,0,0,0,0,0,0,0 },
00406 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00407 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00408 { 1,1,0,0,0,0,1,1,1,0,0,0,0,0 },
00409 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00410 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00411 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00412 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00413 };
00414
00415
00416 const byte CPLOT_LARGEFONT_L[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00417 {
00418 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00419 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00420 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00421 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00422 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00423 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00424 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00425 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00426 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00427 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00428 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00429 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00430 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00431 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00432 };
00433
00434
00435 const byte CPLOT_LARGEFONT_M[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00436 {
00437 { 1,1,1,0,0,0,0,0,1,1,1,0,0,0 },
00438 { 1,1,1,0,0,0,0,0,1,1,1,0,0,0 },
00439 { 1,1,1,1,0,0,0,1,1,1,1,0,0,0 },
00440 { 1,1,1,1,0,0,0,1,1,1,1,0,0,0 },
00441 { 1,1,0,1,1,0,1,1,0,1,1,0,0,0 },
00442 { 1,1,0,1,1,0,1,1,0,1,1,0,0,0 },
00443 { 1,1,0,1,1,0,1,1,0,1,1,0,0,0 },
00444 { 1,1,0,0,1,1,1,0,0,1,1,0,0,0 },
00445 { 1,1,0,0,1,1,1,0,0,1,1,0,0,0 },
00446 { 1,1,0,0,1,1,1,0,0,1,1,0,0,0 },
00447 { 1,1,0,0,0,1,0,0,0,1,1,0,0,0 },
00448 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00449 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00450 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00451 };
00452
00453
00454 const byte CPLOT_LARGEFONT_N[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00455 {
00456 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00457 { 1,1,1,0,0,0,0,1,1,0,0,0,0,0 },
00458 { 1,1,1,1,0,0,0,1,1,0,0,0,0,0 },
00459 { 1,1,1,1,0,0,0,1,1,0,0,0,0,0 },
00460 { 1,1,0,1,1,0,0,1,1,0,0,0,0,0 },
00461 { 1,1,0,1,1,1,0,1,1,0,0,0,0,0 },
00462 { 1,1,0,0,1,1,0,1,1,0,0,0,0,0 },
00463 { 1,1,0,0,0,1,1,1,1,0,0,0,0,0 },
00464 { 1,1,0,0,0,1,1,1,1,0,0,0,0,0 },
00465 { 1,1,0,0,0,0,1,1,1,0,0,0,0,0 },
00466 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00467 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00468 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00469 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00470 };
00471
00472
00473 const byte CPLOT_LARGEFONT_O[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00474 {
00475 { 0,0,0,1,1,1,1,0,0,0,0,0,0,0 },
00476 { 0,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00477 { 0,1,1,0,0,0,0,1,1,0,0,0,0,0 },
00478 { 1,1,0,0,0,0,0,1,1,1,0,0,0,0 },
00479 { 1,1,0,0,0,0,0,0,1,1,0,0,0,0 },
00480 { 1,1,0,0,0,0,0,0,1,1,0,0,0,0 },
00481 { 1,1,0,0,0,0,0,0,1,1,0,0,0,0 },
00482 { 1,1,0,0,0,0,0,1,1,1,0,0,0,0 },
00483 { 0,1,1,0,0,0,0,1,1,0,0,0,0,0 },
00484 { 0,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00485 { 0,0,0,1,1,1,1,0,0,0,0,0,0,0 },
00486 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00487 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00488 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00489 };
00490
00491
00492
00493 const byte CPLOT_LARGEFONT_P[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00494 {
00495 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00496 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00497 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00498 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00499 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00500 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00501 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00502 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00503 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00504 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00505 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00506 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00507 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00508 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00509 };
00510
00511
00512 const byte CPLOT_LARGEFONT_Q[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00513 {
00514 { 0,0,0,1,1,1,1,0,0,0,0,0,0,0 },
00515 { 0,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00516 { 0,1,1,0,0,0,0,1,1,0,0,0,0,0 },
00517 { 1,1,0,0,0,0,0,1,1,1,0,0,0,0 },
00518 { 1,1,0,0,0,0,0,0,1,1,0,0,0,0 },
00519 { 1,1,0,0,0,0,0,0,1,1,0,0,0,0 },
00520 { 1,1,0,0,0,0,0,0,1,1,0,0,0,0 },
00521 { 1,1,0,0,1,1,0,0,1,1,0,0,0,0 },
00522 { 0,1,1,0,0,1,1,1,1,0,0,0,0,0 },
00523 { 0,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00524 { 0,0,0,1,1,1,0,1,1,0,0,0,0,0 },
00525 { 0,0,0,0,0,0,0,0,1,1,0,0,0,0 },
00526 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00527 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00528 };
00529
00530
00531 const byte CPLOT_LARGEFONT_R[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00532 {
00533 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00534 { 1,1,1,1,1,1,1,1,1,0,0,0,0,0 },
00535 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00536 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00537 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00538 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00539 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00540 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00541 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00542 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00543 { 1,1,0,0,0,0,0,1,1,1,0,0,0,0 },
00544 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00545 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00546 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00547 };
00548
00549
00550 const byte CPLOT_LARGEFONT_S[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00551 {
00552 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
00553 { 0,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00554 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00555 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00556 { 1,1,1,1,1,0,0,0,0,0,0,0,0,0 },
00557 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00558 { 0,0,0,0,1,1,1,1,0,0,0,0,0,0 },
00559 { 0,0,0,0,0,0,1,1,0,0,0,0,0,0 },
00560 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00561 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00562 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
00563 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00564 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00565 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00566 };
00567
00568
00569 const byte CPLOT_LARGEFONT_T[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00570 {
00571 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00572 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00573 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00574 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00575 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00576 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00577 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00578 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00579 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00580 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00581 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00582 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00583 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00584 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00585 };
00586
00587
00588 const byte CPLOT_LARGEFONT_U[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00589 {
00590 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00591 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00592 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00593 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00594 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00595 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00596 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00597 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00598 { 0,1,1,0,0,0,1,1,1,0,0,0,0,0 },
00599 { 0,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00600 { 0,0,1,1,1,1,1,0,0,0,0,0,0,0 },
00601 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00602 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00603 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00604 };
00605
00606
00607 const byte CPLOT_LARGEFONT_V[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00608 {
00609 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00610 { 1,1,0,0,0,0,0,1,1,0,0,0,0,0 },
00611 { 0,1,1,0,0,0,1,1,0,0,0,0,0,0 },
00612 { 0,1,1,0,0,0,1,1,0,0,0,0,0,0 },
00613 { 0,1,1,0,0,0,1,1,0,0,0,0,0,0 },
00614 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
00615 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
00616 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
00617 { 0,0,0,1,1,1,0,0,0,0,0,0,0,0 },
00618 { 0,0,0,1,1,1,0,0,0,0,0,0,0,0 },
00619 { 0,0,0,1,1,1,0,0,0,0,0,0,0,0 },
00620 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00621 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00622 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00623 };
00624
00625 const byte CPLOT_LARGEFONT_W[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00626 {
00627 { 1,1,0,0,0,1,1,1,0,0,0,1,1,0 },
00628 { 1,1,0,0,0,1,1,1,0,0,0,1,1,0 },
00629 { 1,1,1,0,0,1,1,1,0,0,1,1,1,0 },
00630 { 0,1,1,0,1,1,0,1,1,0,1,1,0,0 },
00631 { 0,1,1,0,1,1,0,1,1,0,1,1,0,0 },
00632 { 0,1,1,0,1,1,0,1,1,0,1,1,0,0 },
00633 { 0,1,1,0,1,1,0,1,1,0,1,1,0,0 },
00634 { 0,1,1,0,1,0,0,0,1,0,1,1,0,0 },
00635 { 0,0,1,1,1,0,0,0,1,1,1,0,0,0 },
00636 { 0,0,1,1,1,0,0,0,1,1,1,0,0,0 },
00637 { 0,0,1,1,1,0,0,0,1,1,1,0,0,0 },
00638 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00639 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00640 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00641 };
00642
00643
00644 const byte CPLOT_LARGEFONT_X[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00645 {
00646 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00647 { 1,1,1,0,0,1,1,1,0,0,0,0,0,0 },
00648 { 0,1,1,0,0,1,1,0,0,0,0,0,0,0 },
00649 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
00650 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
00651 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00652 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
00653 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
00654 { 0,1,1,0,0,1,1,0,0,0,0,0,0,0 },
00655 { 1,1,1,0,0,1,1,1,0,0,0,0,0,0 },
00656 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00657 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00658 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00659 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00660 };
00661
00662
00663 const byte CPLOT_LARGEFONT_Y[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00664 {
00665 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00666 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
00667 { 0,1,1,0,0,1,1,0,0,0,0,0,0,0 },
00668 { 0,1,1,0,0,1,1,0,0,0,0,0,0,0 },
00669 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
00670 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00671 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00672 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00673 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00674 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00675 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00676 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00677 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00678 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00679 };
00680
00681
00682 const byte CPLOT_LARGEFONT_Z[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00683 {
00684 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00685 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00686 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
00687 { 0,0,0,0,1,1,0,0,0,0,0,0,0,0 },
00688 { 0,0,0,1,1,1,0,0,0,0,0,0,0,0 },
00689 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
00690 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
00691 { 0,1,1,1,0,0,0,0,0,0,0,0,0,0 },
00692 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
00693 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00694 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
00695 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00696 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00697 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00698 };
00699
00700
00701 const byte CPLOT_LARGEFONT_a[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00702 {
00703 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00704 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00705 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00706 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
00707 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00708 { 0,0,0,0,1,1,0,0,0,0,0,0,0,0 },
00709 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
00710 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
00711 { 1,1,0,0,1,1,0,0,0,0,0,0,0,0 },
00712 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00713 { 0,1,1,1,0,1,1,0,0,0,0,0,0,0 },
00714 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00715 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00716 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00717 };
00718
00719 const byte CPLOT_LARGEFONT_b[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00720 {
00721 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00722 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00723 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00724 { 1,1,0,1,1,0,0,0,0,0,0,0,0,0 },
00725 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00726 { 1,1,1,0,1,1,1,0,0,0,0,0,0,0 },
00727 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00728 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00729 { 1,1,0,0,1,1,1,0,0,0,0,0,0,0 },
00730 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00731 { 1,1,0,1,1,0,0,0,0,0,0,0,0,0 },
00732 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00733 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00734 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00735 };
00736
00737 const byte CPLOT_LARGEFONT_c[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00738 {
00739 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00740 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00741 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00742 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
00743 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00744 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00745 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00746 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00747 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00748 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00749 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
00750 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00751 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00752 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00753 };
00754
00755 const byte CPLOT_LARGEFONT_d[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00756 {
00757 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
00758 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
00759 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
00760 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
00761 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00762 { 1,1,1,0,1,1,1,0,0,0,0,0,0,0 },
00763 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00764 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00765 { 1,1,1,0,1,1,1,0,0,0,0,0,0,0 },
00766 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00767 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
00768 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00769 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00770 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00771 };
00772
00773 const byte CPLOT_LARGEFONT_e[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00774 {
00775 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00776 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00777 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00778 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
00779 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00780 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00781 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00782 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00783 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00784 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00785 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
00786 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00787 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00788 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00789 };
00790
00791 const byte CPLOT_LARGEFONT_f[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00792 {
00793 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
00794 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00795 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
00796 { 1,1,1,1,1,0,0,0,0,0,0,0,0,0 },
00797 { 1,1,1,1,1,0,0,0,0,0,0,0,0,0 },
00798 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
00799 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
00800 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
00801 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
00802 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
00803 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
00804 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00805 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00806 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00807 };
00808
00809 const byte CPLOT_LARGEFONT_g[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00810 {
00811 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00812 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00813 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00814 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
00815 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00816 { 1,1,0,0,1,1,1,0,0,0,0,0,0,0 },
00817 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00818 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00819 { 1,1,1,0,1,1,1,0,0,0,0,0,0,0 },
00820 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00821 { 0,1,1,1,0,1,1,0,0,0,0,0,0,0 },
00822 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00823 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00824 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00825 };
00826
00827
00828 const byte CPLOT_LARGEFONT_h[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00829 {
00830 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00831 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00832 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00833 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00834 { 1,1,0,1,1,1,0,0,0,0,0,0,0,0 },
00835 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00836 { 1,1,1,0,0,1,1,0,0,0,0,0,0,0 },
00837 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00838 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00839 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00840 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00841 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00842 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00843 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00844 };
00845
00846 const byte CPLOT_LARGEFONT_i[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00847 {
00848 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00849 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00850 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00851 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00852 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00853 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00854 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00855 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00856 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00857 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00858 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00859 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00860 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00861 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00862 };
00863
00864 const byte CPLOT_LARGEFONT_j[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00865 {
00866 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
00867 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
00868 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00869 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
00870 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
00871 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
00872 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
00873 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
00874 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
00875 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
00876 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
00877 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
00878 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
00879 { 1,1,1,0,0,0,0,0,0,0,0,0,0,0 },
00880 };
00881
00882 const byte CPLOT_LARGEFONT_k[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00883 {
00884 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00885 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00886 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00887 { 1,1,0,0,1,1,0,0,0,0,0,0,0,0 },
00888 { 1,1,0,1,1,0,0,0,0,0,0,0,0,0 },
00889 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
00890 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
00891 { 1,1,1,1,1,0,0,0,0,0,0,0,0,0 },
00892 { 1,1,0,1,1,0,0,0,0,0,0,0,0,0 },
00893 { 1,1,0,0,1,1,0,0,0,0,0,0,0,0 },
00894 { 1,1,0,0,1,1,0,0,0,0,0,0,0,0 },
00895 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00896 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00897 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00898 };
00899
00900 const byte CPLOT_LARGEFONT_l[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00901 {
00902 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00903 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00904 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00905 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00906 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00907 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00908 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00909 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00910 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00911 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00912 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00913 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00914 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00915 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00916 };
00917
00918
00919 const byte CPLOT_LARGEFONT_m[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00920 {
00921 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00922 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00923 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00924 { 1,1,0,1,1,0,0,1,1,0,0,0,0,0 },
00925 { 1,1,1,1,1,1,1,1,1,1,0,0,0,0 },
00926 { 1,1,0,0,1,1,0,0,1,1,0,0,0,0 },
00927 { 1,1,0,0,1,1,0,0,1,1,0,0,0,0 },
00928 { 1,1,0,0,1,1,0,0,1,1,0,0,0,0 },
00929 { 1,1,0,0,1,1,0,0,1,1,0,0,0,0 },
00930 { 1,1,0,0,1,1,0,0,1,1,0,0,0,0 },
00931 { 1,1,0,0,1,1,0,0,1,1,0,0,0,0 },
00932 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00933 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00934 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00935 };
00936
00937 const byte CPLOT_LARGEFONT_n[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00938 {
00939 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00940 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00941 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00942 { 1,1,0,1,1,1,0,0,0,0,0,0,0,0 },
00943 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00944 { 1,1,1,0,0,1,1,0,0,0,0,0,0,0 },
00945 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00946 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00947 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00948 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00949 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00950 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00951 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00952 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00953 };
00954
00955
00956 const byte CPLOT_LARGEFONT_o[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00957 {
00958 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00959 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00960 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00961 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
00962 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00963 { 1,1,1,0,1,1,1,0,0,0,0,0,0,0 },
00964 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00965 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00966 { 1,1,1,0,1,1,1,0,0,0,0,0,0,0 },
00967 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00968 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
00969 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00970 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00971 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00972 };
00973
00974 const byte CPLOT_LARGEFONT_p[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00975 {
00976 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00977 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00978 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00979 { 1,1,0,1,1,0,0,0,0,0,0,0,0,0 },
00980 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00981 { 1,1,1,0,1,1,1,0,0,0,0,0,0,0 },
00982 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00983 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
00984 { 1,1,1,0,1,1,1,0,0,0,0,0,0,0 },
00985 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
00986 { 1,1,0,1,1,0,0,0,0,0,0,0,0,0 },
00987 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00988 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00989 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
00990 };
00991
00992 const byte CPLOT_LARGEFONT_q[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
00993 {
00994 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00995 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00996 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
00997 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
00998 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
00999 { 1,1,1,0,1,1,1,0,0,0,0,0,0,0 },
01000 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01001 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01002 { 1,1,1,0,1,1,1,0,0,0,0,0,0,0 },
01003 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01004 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
01005 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
01006 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
01007 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
01008 };
01009
01010 const byte CPLOT_LARGEFONT_r[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01011 {
01012 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01013 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01014 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01015 { 1,1,0,1,1,0,0,0,0,0,0,0,0,0 },
01016 { 1,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01017 { 1,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01018 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01019 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01020 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01021 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01022 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01023 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01024 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01025 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01026 };
01027
01028 const byte CPLOT_LARGEFONT_s[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01029 {
01030 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01031 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01032 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01033 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01034 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01035 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01036 { 1,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01037 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01038 { 0,0,0,0,1,1,0,0,0,0,0,0,0,0 },
01039 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01040 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01041 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01042 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01043 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01044 };
01045
01046 const byte CPLOT_LARGEFONT_t[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01047 {
01048 { 0,0,1,0,0,0,0,0,0,0,0,0,0,0 },
01049 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01050 { 1,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01051 { 1,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01052 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01053 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01054 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01055 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01056 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01057 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01058 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01059 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01060 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01061 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01062 };
01063
01064
01065 const byte CPLOT_LARGEFONT_u[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01066 {
01067 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01068 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01069 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01070 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01071 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01072 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01073 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01074 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01075 { 1,1,0,0,1,1,1,0,0,0,0,0,0,0 },
01076 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01077 { 0,1,1,1,0,1,1,0,0,0,0,0,0,0 },
01078 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01079 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01080 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01081 };
01082
01083 const byte CPLOT_LARGEFONT_v[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01084 {
01085 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01086 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01087 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01088 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01089 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01090 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01091 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
01092 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
01093 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01094 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01095 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01096 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01097 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01098 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01099 };
01100
01101 const byte CPLOT_LARGEFONT_w[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01102 {
01103 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01104 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01105 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01106 { 1,1,0,0,0,1,0,0,0,1,1,0,0,0 },
01107 { 1,1,0,0,1,1,1,0,0,1,1,0,0,0 },
01108 { 0,1,1,0,1,1,1,0,1,1,0,0,0,0 },
01109 { 0,1,1,0,1,0,1,0,1,1,0,0,0,0 },
01110 { 0,1,1,0,1,0,1,0,1,1,0,0,0,0 },
01111 { 0,0,1,1,1,0,1,1,1,0,0,0,0,0 },
01112 { 0,0,1,1,1,0,1,1,1,0,0,0,0,0 },
01113 { 0,0,1,1,0,0,0,1,1,0,0,0,0,0 },
01114 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01115 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01116 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01117 };
01118
01119 const byte CPLOT_LARGEFONT_x[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01120 {
01121 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01122 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01123 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01124 { 1,1,0,0,1,1,0,0,0,0,0,0,0,0 },
01125 { 1,1,0,0,1,1,0,0,0,0,0,0,0,0 },
01126 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01127 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01128 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01129 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01130 { 1,1,0,0,1,1,0,0,0,0,0,0,0,0 },
01131 { 1,1,0,0,1,1,0,0,0,0,0,0,0,0 },
01132 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01133 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01134 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01135 };
01136
01137 const byte CPLOT_LARGEFONT_y[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01138 {
01139 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01140 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01141 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01142 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01143 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01144 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
01145 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
01146 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
01147 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01148 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01149 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01150 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01151 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01152 { 0,1,1,1,0,0,0,0,0,0,0,0,0,0 },
01153 };
01154
01155
01156 const byte CPLOT_LARGEFONT_z[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01157 {
01158 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01159 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01160 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01161 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01162 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01163 { 0,0,0,0,1,1,0,0,0,0,0,0,0,0 },
01164 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01165 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01166 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01167 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01168 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01169 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01170 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01171 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01172 };
01173
01174
01175 const byte CPLOT_LARGEFONT_tilda[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01176 {
01177 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01178 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01179 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01180 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01181 { 0,1,1,1,0,0,0,1,0,0,0,0,0,0 },
01182 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
01183 { 1,0,0,0,1,1,1,0,0,0,0,0,0,0 },
01184 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01185 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01186 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01187 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01188 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01189 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01190 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01191 };
01192
01193 const byte CPLOT_LARGEFONT_exclamation[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01194 {
01195 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01196 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01197 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01198 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01199 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01200 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01201 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01202 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01203 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01204 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01205 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01206 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01207 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01208 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01209 };
01210
01211 const byte CPLOT_LARGEFONT_at[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01212 {
01213 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01214 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01215 { 0,0,0,1,1,1,1,1,0,0,0,0,0,0 },
01216 { 0,0,1,1,0,0,0,0,1,1,0,0,0,0 },
01217 { 0,1,0,0,1,1,0,1,1,0,1,0,0,0 },
01218 { 0,1,0,1,1,1,1,1,1,0,1,0,0,0 },
01219 { 1,0,1,1,0,0,0,1,1,0,1,0,0,0 },
01220 { 1,0,1,1,0,0,0,1,1,0,1,0,0,0 },
01221 { 1,0,1,1,0,0,0,1,1,0,1,0,0,0 },
01222 { 1,0,1,1,1,1,1,1,1,1,0,0,0,0 },
01223 { 1,0,0,1,1,0,1,1,1,0,0,0,0,0 },
01224 { 0,1,0,0,0,0,0,0,0,0,1,0,0,0 },
01225 { 0,0,1,0,0,0,0,0,0,1,0,0,0,0 },
01226 { 0,0,0,1,1,1,1,1,1,0,0,0,0,0 },
01227 };
01228
01229 const byte CPLOT_LARGEFONT_hash[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01230 {
01231 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
01232 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
01233 { 0,0,1,1,0,1,1,0,0,0,0,0,0,0 },
01234 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01235 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01236 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
01237 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
01238 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01239 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01240 { 1,1,0,1,1,0,0,0,0,0,0,0,0,0 },
01241 { 1,1,0,1,1,0,0,0,0,0,0,0,0,0 },
01242 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01243 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01244 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01245 };
01246
01247 const byte CPLOT_LARGEFONT_dollarsign[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01248 {
01249 { 0,0,0,1,0,0,0,0,0,0,0,0,0,0 },
01250 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01251 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01252 { 1,1,0,1,0,1,1,0,0,0,0,0,0,0 },
01253 { 1,1,0,1,0,0,0,0,0,0,0,0,0,0 },
01254 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
01255 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01256 { 0,0,0,1,1,1,1,0,0,0,0,0,0,0 },
01257 { 1,1,0,1,0,1,1,0,0,0,0,0,0,0 },
01258 { 1,1,0,1,0,1,1,0,0,0,0,0,0,0 },
01259 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01260 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01261 { 0,0,0,1,0,0,0,0,0,0,0,0,0,0 },
01262 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01263 };
01264
01265 const byte CPLOT_LARGEFONT_percent[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01266 {
01267 { 0,1,1,1,0,0,0,0,1,1,0,0,0,0 },
01268 { 1,1,0,1,1,0,0,1,1,0,0,0,0,0 },
01269 { 1,1,0,1,1,0,0,1,1,0,0,0,0,0 },
01270 { 1,1,0,1,1,0,1,1,0,0,0,0,0,0 },
01271 { 0,1,1,1,0,0,1,1,0,0,0,0,0,0 },
01272 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
01273 { 0,0,0,0,0,1,1,0,1,1,1,0,0,0 },
01274 { 0,0,0,0,1,1,0,1,1,0,1,1,0,0 },
01275 { 0,0,0,0,1,1,0,1,1,0,1,1,0,0 },
01276 { 0,0,0,1,1,0,0,1,1,0,1,1,0,0 },
01277 { 0,0,0,1,1,0,0,0,1,1,1,0,0,0 },
01278 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01279 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01280 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01281 };
01282
01283 const byte CPLOT_LARGEFONT_raiseto[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01284 {
01285 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01286 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
01287 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
01288 { 0,1,1,0,0,1,1,0,0,0,0,0,0,0 },
01289 { 0,1,1,0,0,1,1,0,0,0,0,0,0,0 },
01290 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
01291 { 1,1,0,0,0,0,1,1,0,0,0,0,0,0 },
01292 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01293 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01294 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01295 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01296 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01297 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01298 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01299 };
01300
01301 const byte CPLOT_LARGEFONT_andsign[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01302 {
01303 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
01304 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01305 { 0,1,1,0,0,1,1,0,0,0,0,0,0,0 },
01306 { 0,1,1,0,0,1,1,0,0,0,0,0,0,0 },
01307 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
01308 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01309 { 1,1,0,0,1,1,0,1,1,0,0,0,0,0 },
01310 { 1,1,0,0,1,1,1,1,1,0,0,0,0,0 },
01311 { 1,1,0,0,0,1,1,1,1,0,0,0,0,0 },
01312 { 1,1,1,1,1,1,1,1,1,1,0,0,0,0 },
01313 { 0,1,1,1,1,1,0,0,1,0,0,0,0,0 },
01314 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01315 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01316 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01317 };
01318
01319 const byte CPLOT_LARGEFONT_star[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01320 {
01321 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01322 { 0,0,0,1,0,0,0,0,0,0,0,0,0,0 },
01323 { 0,1,0,1,0,1,0,0,0,0,0,0,0,0 },
01324 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01325 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
01326 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01327 { 0,1,0,1,0,1,0,0,0,0,0,0,0,0 },
01328 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01329 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01330 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01331 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01332 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01333 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01334 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01335 };
01336
01337 const byte CPLOT_LARGEFONT_leftbracket[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01338 {
01339 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01340 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01341 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01342 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01343 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01344 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01345 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01346 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01347 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01348 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01349 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01350 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01351 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01352 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01353 };
01354
01355 const byte CPLOT_LARGEFONT_rightbracket[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01356 {
01357 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01358 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01359 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01360 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01361 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01362 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01363 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01364 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01365 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01366 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01367 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01368 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01369 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01370 { 1,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01371 };
01372
01373 const byte CPLOT_LARGEFONT_dash[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01374 {
01375 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01376 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01377 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01378 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01379 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01380 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
01381 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
01382 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01383 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01384 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01385 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01386 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01387 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01388 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01389 };
01390
01391 const byte CPLOT_LARGEFONT_underscore[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01392 {
01393 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01394 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01395 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01396 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01397 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01398 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01399 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01400 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01401 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01402 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01403 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
01404 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
01405 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01406 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01407 };
01408
01409 const byte CPLOT_LARGEFONT_plus[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01410 {
01411 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01412 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01413 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01414 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01415 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
01416 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
01417 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01418 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01419 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01420 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01421 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01422 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01423 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01424 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01425 };
01426
01427 const byte CPLOT_LARGEFONT_equals[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01428 {
01429 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01430 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01431 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01432 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
01433 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
01434 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01435 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
01436 { 1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
01437 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01438 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01439 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01440 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01441 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01442 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01443 };
01444
01445 const byte CPLOT_LARGEFONT_leftcurly[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01446 {
01447 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01448 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01449 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01450 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01451 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01452 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01453 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01454 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01455 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01456 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01457 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01458 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01459 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01460 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01461 };
01462
01463 const byte CPLOT_LARGEFONT_rightcurly[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01464 {
01465 { 1,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01466 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
01467 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01468 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01469 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01470 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01471 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01472 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01473 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01474 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01475 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01476 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01477 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
01478 { 1,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01479 };
01480
01481 const byte CPLOT_LARGEFONT_vert[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01482 {
01483 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01484 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01485 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01486 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01487 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01488 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01489 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01490 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01491 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01492 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01493 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01494 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01495 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01496 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01497 };
01498
01499 const byte CPLOT_LARGEFONT_leftsquare[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01500 {
01501 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
01502 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
01503 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01504 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01505 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01506 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01507 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01508 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01509 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01510 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01511 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01512 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
01513 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
01514 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01515 };
01516
01517 const byte CPLOT_LARGEFONT_rightsquare[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01518 {
01519 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01520 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01521 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01522 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01523 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01524 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01525 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01526 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01527 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01528 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01529 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01530 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01531 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01532 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01533 };
01534
01535 const byte CPLOT_LARGEFONT_backslash[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01536 {
01537 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01538 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01539 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01540 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01541 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01542 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01543 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01544 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01545 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01546 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01547 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01548 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01549 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01550 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01551 };
01552
01553 const byte CPLOT_LARGEFONT_forwardslash[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01554 {
01555 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01556 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01557 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01558 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01559 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01560 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01561 { 0,1,1,1,0,0,0,0,0,0,0,0,0,0 },
01562 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01563 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01564 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01565 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01566 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01567 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01568 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01569 };
01570
01571 const byte CPLOT_LARGEFONT_semicolon[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01572 {
01573 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01574 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01575 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01576 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01577 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01578 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01579 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01580 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01581 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01582 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01583 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01584 { 0,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01585 { 1,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01586 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01587 };
01588
01589 const byte CPLOT_LARGEFONT_colon[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01590 {
01591 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01592 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01593 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01594 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01595 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01596 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01597 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01598 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01599 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01600 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01601 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01602 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01603 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01604 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01605 };
01606
01607 const byte CPLOT_LARGEFONT_singlequote[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01608 {
01609 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01610 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01611 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01612 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01613 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01614 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01615 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01616 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01617 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01618 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01619 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01620 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01621 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01622 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01623 };
01624
01625 const byte CPLOT_LARGEFONT_comma[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01626 {
01627 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01628 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01629 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01630 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01631 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01632 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01633 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01634 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01635 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01636 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01637 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01638 { 0,0,1,0,0,0,0,0,0,0,0,0,0,0 },
01639 { 0,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01640 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01641 };
01642
01643 const byte CPLOT_LARGEFONT_point[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01644 {
01645 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01646 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01647 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01648 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01649 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01650 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01651 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01652 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01653 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01654 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01655 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01656 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01657 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01658 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01659 };
01660
01661
01662
01663 const byte CPLOT_LARGEFONT_doublequote[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01664 {
01665 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
01666 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
01667 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
01668 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
01669 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01670 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01671 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01672 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01673 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01674 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01675 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01676 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01677 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01678 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01679 };
01680
01681 const byte CPLOT_LARGEFONT_lessthan[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01682 {
01683 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01684 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01685 { 0,0,0,0,0,0,1,0,0,0,0,0,0,0 },
01686 { 0,0,0,0,1,1,1,0,0,0,0,0,0,0 },
01687 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
01688 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
01689 { 1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
01690 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
01691 { 0,0,0,0,1,1,1,0,0,0,0,0,0,0 },
01692 { 0,0,0,0,0,0,1,0,0,0,0,0,0,0 },
01693 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01694 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01695 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01696 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01697 };
01698
01699 const byte CPLOT_LARGEFONT_morethan[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01700 {
01701 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01702 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01703 { 1,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01704 { 1,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01705 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01706 { 0,0,0,1,1,1,1,0,0,0,0,0,0,0 },
01707 { 0,0,0,1,1,1,1,0,0,0,0,0,0,0 },
01708 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01709 { 1,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01710 { 1,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01711 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01712 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01713 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01714 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01715 };
01716
01717
01718 const byte CPLOT_LARGEFONT_questionmark[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01719 {
01720 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01721 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01722 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01723 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
01724 { 0,0,0,0,1,1,1,0,0,0,0,0,0,0 },
01725 { 0,0,0,1,1,1,0,0,0,0,0,0,0,0 },
01726 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01727 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01728 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01729 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01730 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01731 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01732 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01733 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01734 };
01735
01736
01737
01738 const byte CPLOT_LARGEFONT_One[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01739 {
01740 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01741 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01742 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01743 { 1,1,0,1,1,0,0,0,0,0,0,0,0,0 },
01744 { 1,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01745 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01746 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01747 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01748 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01749 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01750 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01751 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01752 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01753 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01754 };
01755
01756 const byte CPLOT_LARGEFONT_Two[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01757 {
01758 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
01759 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01760 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01761 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01762 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
01763 { 0,0,0,0,1,1,0,0,0,0,0,0,0,0 },
01764 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01765 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01766 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01767 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01768 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01769 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01770 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01771 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01772 };
01773
01774 const byte CPLOT_LARGEFONT_Three[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01775 {
01776 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01777 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01778 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01779 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
01780 { 0,0,0,1,1,1,0,0,0,0,0,0,0,0 },
01781 { 0,0,0,1,1,1,0,0,0,0,0,0,0,0 },
01782 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
01783 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01784 { 1,1,1,0,0,1,1,0,0,0,0,0,0,0 },
01785 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01786 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01787 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01788 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01789 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01790 };
01791
01792 const byte CPLOT_LARGEFONT_Four[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01793 {
01794 { 0,0,0,0,1,1,0,0,0,0,0,0,0,0 },
01795 { 0,0,0,1,1,1,0,0,0,0,0,0,0,0 },
01796 { 0,0,0,1,1,1,0,0,0,0,0,0,0,0 },
01797 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
01798 { 0,0,1,0,1,1,0,0,0,0,0,0,0,0 },
01799 { 0,1,1,0,1,1,0,0,0,0,0,0,0,0 },
01800 { 1,1,0,0,1,1,0,0,0,0,0,0,0,0 },
01801 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01802 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01803 { 0,0,0,0,1,1,0,0,0,0,0,0,0,0 },
01804 { 0,0,0,0,1,1,0,0,0,0,0,0,0,0 },
01805 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01806 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01807 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01808 };
01809
01810 const byte CPLOT_LARGEFONT_Five[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01811 {
01812 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01813 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01814 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01815 { 1,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01816 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01817 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01818 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
01819 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01820 { 1,1,1,0,0,1,1,0,0,0,0,0,0,0 },
01821 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01822 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01823 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01824 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01825 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01826 };
01827
01828 const byte CPLOT_LARGEFONT_Six[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01829 {
01830 { 0,0,1,1,1,1,0,0,0,0,0,0,0,0 },
01831 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01832 { 1,1,1,0,0,1,1,0,0,0,0,0,0,0 },
01833 { 1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
01834 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01835 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01836 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01837 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01838 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01839 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01840 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01841 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01842 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01843 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01844 };
01845
01846 const byte CPLOT_LARGEFONT_Seven[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01847 {
01848 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01849 { 1,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01850 { 0,0,0,0,1,1,0,0,0,0,0,0,0,0 },
01851 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01852 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0 },
01853 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01854 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01855 { 0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
01856 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01857 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01858 { 0,1,1,0,0,0,0,0,0,0,0,0,0,0 },
01859 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01860 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01861 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01862 };
01863
01864 const byte CPLOT_LARGEFONT_Eight[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01865 {
01866 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01867 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01868 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01869 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01870 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01871 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01872 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01873 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01874 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01875 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01876 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01877 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01878 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01879 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01880 };
01881
01882 const byte CPLOT_LARGEFONT_Nine[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01883 {
01884 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01885 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01886 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01887 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01888 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01889 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01890 { 0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
01891 { 0,0,0,0,0,1,1,0,0,0,0,0,0,0 },
01892 { 1,1,0,0,1,1,1,0,0,0,0,0,0,0 },
01893 { 1,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01894 { 0,1,1,1,1,0,0,0,0,0,0,0,0,0 },
01895 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01896 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01897 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01898 };
01899
01900 const byte CPLOT_LARGEFONT_Zero[CPLOT_LARGEFONT][CPLOT_LARGEFONT] =
01901 {
01902 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01903 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01904 { 1,1,1,0,1,1,1,0,0,0,0,0,0,0 },
01905 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01906 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01907 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01908 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01909 { 1,1,0,0,0,1,1,0,0,0,0,0,0,0 },
01910 { 1,1,1,0,1,1,1,0,0,0,0,0,0,0 },
01911 { 0,1,1,1,1,1,0,0,0,0,0,0,0,0 },
01912 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
01913 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01914 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01915 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
01916 };
01917
01918
01919 const byte CPLOT_SMALLFONT_A[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
01920 {{ 0,0,1,0,0,0 },
01921 { 0,0,1,0,0,0 },
01922 { 0,1,0,1,0,0 },
01923 { 0,1,0,1,0,0 },
01924 { 0,1,1,1,0,0 },
01925 { 1,0,0,0,1,0 },
01926 { 1,0,0,0,1,0 },};
01927
01928 const byte CPLOT_SMALLFONT_B[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
01929 {{ 1,1,1,1,0,0 },
01930 { 1,0,0,0,1,0 },
01931 { 1,0,0,0,1,0 },
01932 { 1,1,1,1,0,0 },
01933 { 1,0,0,0,1,0 },
01934 { 1,0,0,0,1,0 },
01935 { 1,1,1,1,0,0 },};
01936
01937 const byte CPLOT_SMALLFONT_C[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
01938 {{ 0,1,1,1,0,0 },
01939 { 1,0,0,0,1,0 },
01940 { 1,0,0,0,0,0 },
01941 { 1,0,0,0,0,0 },
01942 { 1,0,0,0,0,0 },
01943 { 1,0,0,0,1,0 },
01944 { 0,1,1,1,0,0 },};
01945
01946 const byte CPLOT_SMALLFONT_D[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
01947 {{ 1,1,1,1,0,0 },
01948 { 1,0,0,0,1,0 },
01949 { 1,0,0,0,1,0 },
01950 { 1,0,0,0,1,0 },
01951 { 1,0,0,0,1,0 },
01952 { 1,0,0,0,1,0 },
01953 { 1,1,1,1,0,0 },};
01954
01955 const byte CPLOT_SMALLFONT_E[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
01956 {{ 1,1,1,1,1,0 },
01957 { 1,0,0,0,0,0 },
01958 { 1,0,0,0,0,0 },
01959 { 1,1,1,1,0,0 },
01960 { 1,0,0,0,0,0 },
01961 { 1,0,0,0,0,0 },
01962 { 1,1,1,1,1,0 },};
01963
01964 const byte CPLOT_SMALLFONT_F[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
01965 {{ 1,1,1,1,1,0 },
01966 { 1,0,0,0,0,0 },
01967 { 1,0,0,0,0,0 },
01968 { 1,1,1,1,0,0 },
01969 { 1,0,0,0,0,0 },
01970 { 1,0,0,0,0,0 },
01971 { 1,0,0,0,0,0 },};
01972
01973 const byte CPLOT_SMALLFONT_G[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
01974 {{ 0,1,1,1,0,0 },
01975 { 1,0,0,0,1,0 },
01976 { 1,0,0,0,0,0 },
01977 { 1,0,1,1,1,0 },
01978 { 1,0,0,0,1,0 },
01979 { 1,0,0,0,1,0 },
01980 { 0,1,1,1,0,0 },};
01981
01982 const byte CPLOT_SMALLFONT_H[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
01983 {{ 1,0,0,0,1,0 },
01984 { 1,0,0,0,1,0 },
01985 { 1,0,0,0,1,0 },
01986 { 1,1,1,1,1,0 },
01987 { 1,0,0,0,1,0 },
01988 { 1,0,0,0,1,0 },
01989 { 1,0,0,0,1,0 },};
01990
01991
01992 const byte CPLOT_SMALLFONT_I[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
01993 {{ 1,1,1,1,1,0 },
01994 { 0,0,1,0,0,0 },
01995 { 0,0,1,0,0,0 },
01996 { 0,0,1,0,0,0 },
01997 { 0,0,1,0,0,0 },
01998 { 0,0,1,0,0,0 },
01999 { 1,1,1,1,1,0 },};
02000
02001 const byte CPLOT_SMALLFONT_J[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02002 {{ 0,1,1,1,1,0 },
02003 { 0,0,0,1,0,0 },
02004 { 0,0,0,1,0,0 },
02005 { 0,0,0,1,0,0 },
02006 { 0,0,0,1,0,0 },
02007 { 1,0,0,1,0,0 },
02008 { 0,1,1,0,0,0 },};
02009
02010 const byte CPLOT_SMALLFONT_K[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02011 {{ 1,0,0,1,0,0 },
02012 { 1,0,0,1,0,0 },
02013 { 1,0,1,0,0,0 },
02014 { 1,1,0,0,0,0 },
02015 { 1,1,0,0,0,0 },
02016 { 1,0,1,0,0,0 },
02017 { 1,0,0,1,0,0 },};
02018
02019 const byte CPLOT_SMALLFONT_L[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02020 {{ 1,0,0,0,0,0 },
02021 { 1,0,0,0,0,0 },
02022 { 1,0,0,0,0,0 },
02023 { 1,0,0,0,0,0 },
02024 { 1,0,0,0,0,0 },
02025 { 1,0,0,0,0,0 },
02026 { 1,1,1,1,1,0 },};
02027
02028 const byte CPLOT_SMALLFONT_M[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02029 {{ 1,0,0,0,1,0 },
02030 { 1,1,0,1,1,0 },
02031 { 1,0,1,0,1,0 },
02032 { 1,0,1,0,1,0 },
02033 { 1,0,0,0,1,0 },
02034 { 1,0,0,0,1,0 },
02035 { 1,0,0,0,1,0 },};
02036
02037 const byte CPLOT_SMALLFONT_N[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02038 {{ 1,0,0,0,1,0 },
02039 { 1,1,0,0,1,0 },
02040 { 1,1,1,0,1,0 },
02041 { 1,0,1,0,1,0 },
02042 { 1,0,0,1,1,0 },
02043 { 1,0,0,1,1,0 },
02044 { 1,0,0,0,1,0 },};
02045
02046 const byte CPLOT_SMALLFONT_O[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02047 {{ 0,1,1,1,0,0 },
02048 { 1,0,0,0,1,0 },
02049 { 1,0,0,0,1,0 },
02050 { 1,0,0,0,1,0 },
02051 { 1,0,0,0,1,0 },
02052 { 1,0,0,0,1,0 },
02053 { 0,1,1,1,0,0 },};
02054
02055 const byte CPLOT_SMALLFONT_P[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02056 {{ 1,1,1,1,0,0 },
02057 { 1,0,0,0,1,0 },
02058 { 1,0,0,0,1,0 },
02059 { 1,1,1,1,0,0 },
02060 { 1,0,0,0,0,0 },
02061 { 1,0,0,0,0,0 },
02062 { 1,0,0,0,0,0 },};
02063
02064 const byte CPLOT_SMALLFONT_Q[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02065 {{ 0,1,1,1,0,0 },
02066 { 1,0,0,0,1,0 },
02067 { 1,0,0,0,1,0 },
02068 { 1,0,0,0,1,0 },
02069 { 1,0,1,0,1,0 },
02070 { 1,0,0,1,0,0 },
02071 { 0,1,1,0,1,0 },};
02072
02073 const byte CPLOT_SMALLFONT_R[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02074 {{ 1,1,1,0,0,0 },
02075 { 1,0,0,1,0,0 },
02076 { 1,0,0,1,0,0 },
02077 { 1,1,1,0,0,0 },
02078 { 1,0,1,0,0,0 },
02079 { 1,0,0,1,0,0 },
02080 { 1,0,0,1,0,0 },};
02081
02082 const byte CPLOT_SMALLFONT_S[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02083 {{ 0,1,1,1,0,0 },
02084 { 1,0,0,0,1,0 },
02085 { 1,0,0,0,0,0 },
02086 { 0,1,1,1,0,0 },
02087 { 0,0,0,0,1,0 },
02088 { 1,0,0,0,1,0 },
02089 { 0,1,1,1,0,0 },};
02090
02091 const byte CPLOT_SMALLFONT_T[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02092 {{ 1,1,1,1,1,0 },
02093 { 0,0,1,0,0,0 },
02094 { 0,0,1,0,0,0 },
02095 { 0,0,1,0,0,0 },
02096 { 0,0,1,0,0,0 },
02097 { 0,0,1,0,0,0 },
02098 { 0,0,1,0,0,0 },};
02099
02100 const byte CPLOT_SMALLFONT_U[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02101 {{ 1,0,0,0,1,0 },
02102 { 1,0,0,0,1,0 },
02103 { 1,0,0,0,1,0 },
02104 { 1,0,0,0,1,0 },
02105 { 1,0,0,0,1,0 },
02106 { 1,0,0,0,1,0 },
02107 { 0,1,1,1,0,0 },};
02108
02109 const byte CPLOT_SMALLFONT_V[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02110 {{ 1,0,0,0,1,0 },
02111 { 1,0,0,0,1,0 },
02112 { 1,0,0,0,1,0 },
02113 { 0,1,0,1,0,0 },
02114 { 0,1,0,1,0,0 },
02115 { 0,0,1,0,0,0 },
02116 { 0,0,1,0,0,0 },};
02117
02118 const byte CPLOT_SMALLFONT_W[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02119 {{ 1,0,0,0,1,0 },
02120 { 1,0,0,0,1,0 },
02121 { 1,0,0,0,1,0 },
02122 { 1,0,1,0,1,0 },
02123 { 1,0,1,0,1,0 },
02124 { 1,0,1,0,1,0 },
02125 { 0,1,0,1,0,0 },};
02126
02127 const byte CPLOT_SMALLFONT_X[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02128 {{ 1,0,0,0,1,0 },
02129 { 0,1,0,1,0,0 },
02130 { 0,1,0,1,0,0 },
02131 { 0,0,1,0,0,0 },
02132 { 0,1,0,1,0,0 },
02133 { 0,1,0,1,0,0 },
02134 { 1,0,0,0,1,0 },};
02135
02136 const byte CPLOT_SMALLFONT_Y[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02137 {{ 1,0,0,0,1,0 },
02138 { 0,1,0,1,0,0 },
02139 { 0,1,0,1,0,0 },
02140 { 0,0,1,0,0,0 },
02141 { 0,0,1,0,0,0 },
02142 { 0,0,1,0,0,0 },
02143 { 0,0,1,0,0,0 },};
02144
02145 const byte CPLOT_SMALLFONT_Z[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02146 {{ 1,1,1,1,1,0 },
02147 { 0,0,0,1,0,0 },
02148 { 0,0,0,1,0,0 },
02149 { 0,0,1,0,0,0 },
02150 { 0,1,0,0,0,0 },
02151 { 0,1,0,0,0,0 },
02152 { 1,1,1,1,1,0 },};
02153
02154 const byte CPLOT_SMALLFONT_a[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02155 {{ 0,0,0,0,0,0 },
02156 { 0,0,0,0,0,0 },
02157 { 0,1,1,1,1,0 },
02158 { 0,0,0,0,1,0 },
02159 { 0,1,1,1,1,0 },
02160 { 1,0,0,0,1,0 },
02161 { 0,1,1,1,1,0 },};
02162
02163 const byte CPLOT_SMALLFONT_b[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02164 {{ 1,0,0,0,0,0 },
02165 { 1,0,0,0,0,0 },
02166 { 1,0,0,0,0,0 },
02167 { 1,1,1,1,0,0 },
02168 { 1,0,0,0,1,0 },
02169 { 1,0,0,0,1,0 },
02170 { 1,1,1,1,0,0 },};
02171
02172 const byte CPLOT_SMALLFONT_c[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02173 {{ 0,0,0,0,0,0 },
02174 { 0,0,0,0,0,0 },
02175 { 0,1,1,1,0,0 },
02176 { 1,0,0,0,1,0 },
02177 { 1,0,0,0,0,0 },
02178 { 1,0,0,0,1,0 },
02179 { 0,1,1,1,0,0 },};
02180
02181 const byte CPLOT_SMALLFONT_d[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02182 {{ 0,0,0,0,1,0 },
02183 { 0,0,0,0,1,0 },
02184 { 0,0,0,0,1,0 },
02185 { 0,1,1,1,1,0 },
02186 { 1,0,0,0,1,0 },
02187 { 1,0,0,0,1,0 },
02188 { 0,1,1,1,1,0 },};
02189
02190 const byte CPLOT_SMALLFONT_e[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02191 {{ 0,0,0,0,0,0 },
02192 { 0,0,0,0,0,0 },
02193 { 0,1,1,1,0,0 },
02194 { 1,0,0,0,1,0 },
02195 { 1,1,1,1,0,0 },
02196 { 1,0,0,0,0,0 },
02197 { 0,1,1,1,0,0 },};
02198
02199 const byte CPLOT_SMALLFONT_f[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02200 {{ 0,0,1,0,0,0 },
02201 { 0,1,0,0,0,0 },
02202 { 0,1,0,0,0,0 },
02203 { 1,1,1,1,0,0 },
02204 { 0,1,0,0,0,0 },
02205 { 0,1,0,0,0,0 },
02206 { 0,1,0,0,0,0 },};
02207
02208 const byte CPLOT_SMALLFONT_g[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02209 {{ 0,0,0,0,0,0 },
02210 { 0,0,0,0,0,0 },
02211 { 0,0,1,1,1,0 },
02212 { 0,1,0,0,1,0 },
02213 { 0,1,1,1,1,0 },
02214 { 0,0,0,0,1,0 },
02215 { 0,0,1,1,0,0 },};
02216
02217 const byte CPLOT_SMALLFONT_h[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02218 {{ 1,0,0,0,0,0 },
02219 { 1,0,0,0,0,0 },
02220 { 1,0,0,0,0,0 },
02221 { 1,1,1,1,0,0 },
02222 { 1,0,0,0,1,0 },
02223 { 1,0,0,0,1,0 },
02224 { 1,0,0,0,1,0 },};
02225
02226 const byte CPLOT_SMALLFONT_i[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02227 {{ 0,0,0,0,0,0 },
02228 { 0,0,1,0,0,0 },
02229 { 0,0,0,0,0,0 },
02230 { 0,0,1,0,0,0 },
02231 { 0,0,1,0,0,0 },
02232 { 0,0,1,0,0,0 },
02233 { 0,0,1,0,0,0 },};
02234
02235 const byte CPLOT_SMALLFONT_j[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02236 {{ 0,0,0,0,0,0 },
02237 { 0,0,1,0,0,0 },
02238 { 0,0,0,0,0,0 },
02239 { 0,0,1,0,0,0 },
02240 { 0,0,1,0,0,0 },
02241 { 1,0,1,0,0,0 },
02242 { 0,1,0,0,0,0 },};
02243
02244 const byte CPLOT_SMALLFONT_k[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02245 {{ 0,0,0,0,0,0 },
02246 { 1,0,0,0,0,0 },
02247 { 1,0,0,0,0,0 },
02248 { 1,0,1,0,0,0 },
02249 { 1,1,0,0,0,0 },
02250 { 1,1,0,0,0,0 },
02251 { 1,0,1,1,0,0 },};
02252
02253 const byte CPLOT_SMALLFONT_l[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02254 {{ 0,0,1,0,0,0 },
02255 { 0,0,1,0,0,0 },
02256 { 0,0,1,0,0,0 },
02257 { 0,0,1,0,0,0 },
02258 { 0,0,1,0,0,0 },
02259 { 0,0,1,0,0,0 },
02260 { 0,0,1,0,0,0 },};
02261
02262 const byte CPLOT_SMALLFONT_m[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02263 {{ 0,0,0,0,0,0 },
02264 { 0,0,0,0,0,0 },
02265 { 1,1,1,1,0,0 },
02266 { 1,0,1,0,1,0 },
02267 { 1,0,1,0,1,0 },
02268 { 1,0,1,0,1,0 },
02269 { 1,0,1,0,1,0 },};
02270
02271 const byte CPLOT_SMALLFONT_n[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02272 {{ 0,0,0,0,0,0 },
02273 { 0,0,0,0,0,0 },
02274 { 1,1,1,1,0,0 },
02275 { 1,0,0,0,1,0 },
02276 { 1,0,0,0,1,0 },
02277 { 1,0,0,0,1,0 },
02278 { 1,0,0,0,1,0 },};
02279
02280 const byte CPLOT_SMALLFONT_o[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02281 {{ 0,0,0,0,0,0 },
02282 { 0,0,0,0,0,0 },
02283 { 0,1,1,1,0,0 },
02284 { 1,0,0,0,1,0 },
02285 { 1,0,0,0,1,0 },
02286 { 1,0,0,0,1,0 },
02287 { 0,1,1,1,0,0 },};
02288
02289 const byte CPLOT_SMALLFONT_p[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02290 {{ 0,0,0,0,0,0 },
02291 { 1,1,1,0,0,0 },
02292 { 1,0,0,1,0,0 },
02293 { 1,0,0,1,0,0 },
02294 { 1,1,1,0,0,0 },
02295 { 1,0,0,0,0,0 },
02296 { 1,0,0,0,0,0 },};
02297
02298 const byte CPLOT_SMALLFONT_q[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02299 {{ 0,0,0,0,0,0 },
02300 { 0,0,1,1,1,0 },
02301 { 0,1,0,0,1,0 },
02302 { 0,1,0,0,1,0 },
02303 { 0,0,1,1,1,0 },
02304 { 0,0,0,0,1,0 },
02305 { 0,0,0,0,1,0 },};
02306
02307 const byte CPLOT_SMALLFONT_r[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02308 {{ 0,0,0,0,0,0 },
02309 { 0,0,0,0,0,0 },
02310 { 1,0,1,1,0,0 },
02311 { 0,1,0,0,0,0 },
02312 { 0,1,0,0,0,0 },
02313 { 0,1,0,0,0,0 },
02314 { 0,1,0,0,0,0 },};
02315
02316 const byte CPLOT_SMALLFONT_s[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02317 {{ 0,0,0,0,0,0 },
02318 { 0,0,0,0,0,0 },
02319 { 0,0,1,1,1,0 },
02320 { 0,1,0,0,0,0 },
02321 { 0,1,1,1,1,0 },
02322 { 0,0,0,0,1,0 },
02323 { 0,1,1,1,0,0 },};
02324
02325 const byte CPLOT_SMALLFONT_t[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02326 {{ 0,0,1,0,0,0 },
02327 { 0,0,1,0,0,0 },
02328 { 1,1,1,1,1,0 },
02329 { 0,0,1,0,0,0 },
02330 { 0,0,1,0,0,0 },
02331 { 0,0,1,0,0,0 },
02332 { 0,0,1,0,0,0 },};
02333
02334 const byte CPLOT_SMALLFONT_u[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02335 {{ 0,0,0,0,0,0 },
02336 { 0,0,0,0,0,0 },
02337 { 1,0,0,0,1,0 },
02338 { 1,0,0,0,1,0 },
02339 { 1,0,0,0,1,0 },
02340 { 1,0,0,0,1,0 },
02341 { 0,1,1,1,0,0 },};
02342
02343 const byte CPLOT_SMALLFONT_v[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02344 {{ 0,0,0,0,0,0 },
02345 { 0,0,0,0,0,0 },
02346 { 0,0,0,0,0,0 },
02347 { 1,0,0,0,1,0 },
02348 { 1,0,0,0,1,0 },
02349 { 0,1,0,1,0,0 },
02350 { 0,0,1,0,0,0 },};
02351
02352 const byte CPLOT_SMALLFONT_w[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02353 {{ 0,0,0,0,0,0 },
02354 { 0,0,0,0,0,0 },
02355 { 0,0,0,0,0,0 },
02356 { 1,0,1,0,1,0 },
02357 { 1,0,1,0,1,0 },
02358 { 1,0,1,0,1,0 },
02359 { 0,1,0,1,0,0 },};
02360
02361 const byte CPLOT_SMALLFONT_x[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02362 {{ 0,0,0,0,0,0 },
02363 { 0,0,0,0,0,0 },
02364 { 1,0,0,0,1,0 },
02365 { 0,1,0,1,0,0 },
02366 { 0,0,1,0,0,0 },
02367 { 0,1,0,1,0,0 },
02368 { 1,0,0,0,1,0 },};
02369
02370 const byte CPLOT_SMALLFONT_y[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02371 {{ 0,0,0,0,0,0 },
02372 { 0,0,0,0,0,0 },
02373 { 1,0,0,0,1,0 },
02374 { 0,1,0,1,0,0 },
02375 { 0,0,1,0,0,0 },
02376 { 0,1,0,0,0,0 },
02377 { 1,0,0,0,0,0 },};
02378
02379 const byte CPLOT_SMALLFONT_z[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02380 {{ 0,0,0,0,0,0 },
02381 { 0,0,0,0,0,0 },
02382 { 0,0,0,0,0,0 },
02383 { 1,1,1,1,0,0 },
02384 { 0,0,1,0,0,0 },
02385 { 0,1,0,0,0,0 },
02386 { 1,1,1,1,1,0 },};
02387
02388 const byte CPLOT_SMALLFONT_colon[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02389 {{ 0,0,0,0,0,0 },
02390 { 0,0,1,1,0,0 },
02391 { 0,0,1,1,0,0 },
02392 { 0,0,0,0,0,0 },
02393 { 0,0,0,0,0,0 },
02394 { 0,0,1,1,0,0 },
02395 { 0,0,1,1,0,0 },};
02396
02397 const byte CPLOT_SMALLFONT_backslash[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02398 {{ 1,0,0,0,0,0 },
02399 { 0,1,0,0,0,0 },
02400 { 0,0,1,0,0,0 },
02401 { 0,0,1,0,0,0 },
02402 { 0,0,0,1,0,0 },
02403 { 0,0,0,0,1,0 },
02404 { 0,0,0,0,0,1 },};
02405
02406 const byte CPLOT_SMALLFONT_forwardslash[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02407 {{ 0,0,0,0,0,1 },
02408 { 0,0,0,0,1,0 },
02409 { 0,0,0,1,0,0 },
02410 { 0,0,1,0,0,0 },
02411 { 0,1,1,0,0,0 },
02412 { 0,1,0,0,0,0 },
02413 { 1,0,0,0,0,0 },};
02414
02415 const byte CPLOT_SMALLFONT_percent[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02416 {{ 0,0,0,0,0,0 },
02417 { 1,1,0,0,1,0 },
02418 { 1,1,0,0,1,0 },
02419 { 0,0,0,1,0,0 },
02420 { 0,0,1,0,0,0 },
02421 { 0,1,0,1,1,0 },
02422 { 1,0,0,1,1,0 },};
02423
02424 const byte CPLOT_SMALLFONT_raiseto[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02425 {{ 0,0,1,0,0,0 },
02426 { 0,1,0,1,0,0 },
02427 { 1,0,0,0,1,0 },
02428 { 0,0,0,0,0,0 },
02429 { 0,0,0,0,0,0 },
02430 { 0,0,0,0,0,0 },
02431 { 0,0,0,0,0,0 },};
02432
02433 const byte CPLOT_SMALLFONT_dollarsign[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02434 {{ 0,1,1,1,0,0 },
02435 { 1,0,1,0,1,0 },
02436 { 1,0,1,0,0,0 },
02437 { 0,1,1,1,0,0 },
02438 { 0,0,1,0,1,0 },
02439 { 1,0,1,0,1,0 },
02440 { 0,1,1,1,0,0 },};
02441
02442 const byte CPLOT_SMALLFONT_andsign[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02443 {{ 0,1,1,0,0,0 },
02444 { 1,0,0,1,0,0 },
02445 { 1,0,0,1,0,0 },
02446 { 0,1,1,0,0,0 },
02447 { 1,0,1,0,1,0 },
02448 { 1,0,0,1,0,0 },
02449 { 0,1,1,0,1,0 },};
02450
02451 const byte CPLOT_SMALLFONT_star[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02452 {{ 0,0,0,0,0,0 },
02453 { 1,0,1,0,1,0 },
02454 { 0,1,1,1,0,0 },
02455 { 0,0,1,0,0,0 },
02456 { 0,1,0,1,0,0 },
02457 { 1,0,0,0,1,0 },
02458 { 0,0,0,0,0,0 },};
02459
02460 const byte CPLOT_SMALLFONT_leftbracket[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02461 {{ 0,0,1,0,0,0 },
02462 { 0,1,0,0,0,0 },
02463 { 1,0,0,0,0,0 },
02464 { 1,0,0,0,0,0 },
02465 { 1,0,0,0,0,0 },
02466 { 0,1,0,0,0,0 },
02467 { 0,0,1,0,0,0 },};
02468
02469 const byte CPLOT_SMALLFONT_rightbracket[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02470 {{ 0,0,1,0,0,0 },
02471 { 0,0,0,1,0,0 },
02472 { 0,0,0,0,1,0 },
02473 { 0,0,0,0,1,0 },
02474 { 0,0,0,0,1,0 },
02475 { 0,0,0,1,0,0 },
02476 { 0,0,1,0,0,0 },};
02477
02478 const byte CPLOT_SMALLFONT_leftsquare[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02479 {{ 1,1,1,0,0,0 },
02480 { 1,0,0,0,0,0 },
02481 { 1,0,0,0,0,0 },
02482 { 1,0,0,0,0,0 },
02483 { 1,0,0,0,0,0 },
02484 { 1,0,0,0,0,0 },
02485 { 1,1,1,0,0,0 },};
02486
02487 const byte CPLOT_SMALLFONT_rightsquare[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02488 {{ 0,0,1,1,1,0 },
02489 { 0,0,0,0,1,0 },
02490 { 0,0,0,0,1,0 },
02491 { 0,0,0,0,1,0 },
02492 { 0,0,0,0,1,0 },
02493 { 0,0,0,0,1,0 },
02494 { 0,0,1,1,1,0 },};
02495
02496 const byte CPLOT_SMALLFONT_dash[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02497 {{ 0,0,0,0,0,0 },
02498 { 0,0,0,0,0,0 },
02499 { 0,0,0,0,0,0 },
02500 { 1,1,1,1,1,0 },
02501 { 0,0,0,0,0,0 },
02502 { 0,0,0,0,0,0 },
02503 { 0,0,0,0,0,0 },};
02504
02505 const byte CPLOT_SMALLFONT_equals[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02506 {{ 0,0,0,0,0,0 },
02507 { 0,0,0,0,0,0 },
02508 { 1,1,1,1,1,0 },
02509 { 0,0,0,0,0,0 },
02510 { 0,0,0,0,0,0 },
02511 { 1,1,1,1,1,0 },
02512 { 0,0,0,0,0,0 },};
02513
02514 const byte CPLOT_SMALLFONT_plus[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02515 {{ 0,0,1,0,0,0 },
02516 { 0,0,1,0,0,0 },
02517 { 0,0,1,0,0,0 },
02518 { 1,1,1,1,1,0 },
02519 { 0,0,1,0,0,0 },
02520 { 0,0,1,0,0,0 },
02521 { 0,0,1,0,0,0 },};
02522
02523 const byte CPLOT_SMALLFONT_semicolon[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02524 {{ 0,0,0,0,0,0 },
02525 { 0,1,1,0,0,0 },
02526 { 0,1,1,0,0,0 },
02527 { 0,0,0,0,0,0 },
02528 { 0,0,1,0,0,0 },
02529 { 0,1,0,0,0,0 },
02530 { 1,0,0,0,0,0 },};
02531
02532 const byte CPLOT_SMALLFONT_singlequote[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02533 {{ 0,0,1,0,0,0 },
02534 { 0,0,1,0,0,0 },
02535 { 0,0,1,0,0,0 },
02536 { 0,0,0,0,0,0 },
02537 { 0,0,0,0,0,0 },
02538 { 0,0,0,0,0,0 },
02539 { 0,0,0,0,0,0 },};
02540
02541 const byte CPLOT_SMALLFONT_doublequote[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02542 {{ 0,1,0,1,0,0 },
02543 { 0,1,0,1,0,0 },
02544 { 0,1,0,1,0,0 },
02545 { 0,0,0,0,0,0 },
02546 { 0,0,0,0,0,0 },
02547
02548 { 0,0,0,0,0,0 },
02549 { 0,0,0,0,0,0 },};
02550
02551 const byte CPLOT_SMALLFONT_lessthan[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02552 {{ 0,0,0,0,1,0 },
02553 { 0,0,0,1,0,0 },
02554 { 0,0,1,0,0,0 },
02555 { 0,1,0,0,0,0 },
02556 { 0,0,1,0,0,0 },
02557 { 0,0,0,1,0,0 },
02558 { 0,0,0,0,1,0 },};
02559
02560 const byte CPLOT_SMALLFONT_morethan[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02561 {{ 1,0,0,0,0,0 },
02562 { 0,1,0,0,0,0 },
02563 { 0,0,1,0,0,0 },
02564 { 0,0,0,1,0,0 },
02565 { 0,0,1,0,0,0 },
02566 { 0,1,0,0,0,0 },
02567 { 1,0,0,0,0,0 },};
02568
02569 const byte CPLOT_SMALLFONT_comma[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02570 {{ 0,0,0,0,0,0 },
02571 { 0,0,0,0,0,0 },
02572 { 0,0,0,0,0,0 },
02573 { 0,0,0,0,0,0 },
02574 { 0,0,1,0,0,0 },
02575 { 0,1,0,0,0,0 },
02576 { 1,0,0,0,0,0 },};
02577
02578 const byte CPLOT_SMALLFONT_point[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02579 {{ 0,0,0,0,0,0 },
02580 { 0,0,0,0,0,0 },
02581 { 0,0,0,0,0,0 },
02582 { 0,0,0,0,0,0 },
02583 { 0,0,0,0,0,0 },
02584 { 0,0,1,1,0,0 },
02585 { 0,0,1,1,0,0 },};
02586
02587 const byte CPLOT_SMALLFONT_exclamation[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02588 {{ 0,0,1,1,0,0 },
02589 { 0,0,1,1,0,0 },
02590 { 0,0,1,1,0,0 },
02591 { 0,0,1,1,0,0 },
02592 { 0,0,0,0,0,0 },
02593 { 0,0,1,1,0,0 },
02594 { 0,0,1,1,0,0 },};
02595
02596
02597 const byte CPLOT_SMALLFONT_vert[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02598 {{ 0,0,1,0,0,0 },
02599 { 0,0,1,0,0,0 },
02600 { 0,0,1,0,0,0 },
02601 { 0,0,1,0,0,0 },
02602 { 0,0,1,0,0,0 },
02603 { 0,0,1,0,0,0 },
02604 { 0,0,1,0,0,0 },};
02605
02606 const byte CPLOT_SMALLFONT_tilda[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02607 {{ 0,0,0,0,0,0 },
02608 { 0,0,0,0,0,0 },
02609 { 0,1,1,0,0,0 },
02610 { 1,0,1,0,1,0 },
02611 { 0,0,0,1,1,0 },
02612 { 0,0,0,0,0,0 },
02613 { 0,0,0,0,0,0 },};
02614
02615
02616 const byte CPLOT_SMALLFONT_Zero[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02617 {{ 0,1,1,1,0,0 },
02618 { 1,0,0,0,1,0 },
02619 { 1,0,0,1,1,0 },
02620 { 1,0,1,0,1,0 },
02621 { 1,1,0,0,1,0 },
02622 { 1,0,0,0,1,0 },
02623 { 0,1,1,1,0,0 }};
02624
02625 const byte CPLOT_SMALLFONT_One[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02626 {{ 0,0,1,0,0,0 },
02627 { 0,1,1,0,0,0 },
02628 { 0,0,1,0,0,0 },
02629 { 0,0,1,0,0,0 },
02630 { 0,0,1,0,0,0 },
02631 { 0,0,1,0,0,0 },
02632 { 0,1,1,1,0,0 }};
02633
02634 const byte CPLOT_SMALLFONT_Two[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02635 {{ 0,1,1,1,0,0 },
02636 { 1,0,0,0,1,0 },
02637 { 0,0,0,0,1,0 },
02638 { 0,0,0,1,0,0 },
02639 { 0,0,1,0,0,0 },
02640 { 0,1,0,0,0,0 },
02641 { 1,1,1,1,1,0 }};
02642
02643 const byte CPLOT_SMALLFONT_Three[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02644 {{ 1,1,1,1,1,0 },
02645 { 0,0,0,1,0,0 },
02646 { 0,0,1,0,0,0 },
02647 { 0,0,0,1,0,0 },
02648 { 0,0,0,0,1,0 },
02649 { 1,0,0,0,1,0 },
02650 { 0,1,1,1,0,0 }};
02651
02652 const byte CPLOT_SMALLFONT_Four[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02653 {{ 0,0,0,1,0,0 },
02654 { 0,0,1,1,0,0 },
02655 { 0,1,0,1,0,0 },
02656 { 1,0,0,1,0,0 },
02657 { 1,1,1,1,1,0 },
02658 { 0,0,0,1,0,0 },
02659 { 0,0,0,1,0,0 }};
02660
02661 const byte CPLOT_SMALLFONT_Five[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02662 {{ 1,1,1,1,1,0 },
02663 { 1,0,0,0,0,0 },
02664 { 1,1,1,1,0,0 },
02665 { 0,0,0,0,1,0 },
02666 { 0,0,0,0,1,0 },
02667 { 1,0,0,0,1,0 },
02668 { 0,1,1,1,0,0 }};
02669
02670 const byte CPLOT_SMALLFONT_Six[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02671 {{ 0,0,1,1,0,0 },
02672 { 0,1,0,0,0,0 },
02673 { 1,0,0,0,0,0 },
02674 { 1,1,1,1,0,0 },
02675 { 1,0,0,0,1,0 },
02676 { 1,0,0,0,1,0 },
02677 { 0,1,1,1,0,0 }};
02678
02679 const byte CPLOT_SMALLFONT_Seven[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02680 {{ 1,1,1,1,1,0 },
02681 { 0,0,0,0,1,0 },
02682 { 0,0,0,1,0,0 },
02683 { 0,0,1,0,0,0 },
02684 { 0,0,1,0,0,0 },
02685 { 0,0,1,0,0,0 },
02686 { 0,0,1,0,0,0 }};
02687
02688 const byte CPLOT_SMALLFONT_Eight[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02689 {{ 0,1,1,1,0,0 },
02690 { 1,0,0,0,1,0 },
02691 { 1,0,0,0,1,0 },
02692 { 0,1,1,1,0,0 },
02693 { 1,0,0,0,1,0 },
02694 { 1,0,0,0,1,0 },
02695 { 0,1,1,1,0,0 }};
02696
02697 const byte CPLOT_SMALLFONT_Nine[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH] =
02698 {{ 0,1,1,1,0,0 },
02699 { 1,0,0,0,1,0 },
02700 { 1,0,0,0,1,0 },
02701 { 0,1,1,1,1,0 },
02702 { 0,0,0,0,1,0 },
02703 { 0,0,0,1,0,0 },
02704 { 0,1,1,0,0,0 }};
02705
02706
02707
02708
02709 BOOL CPLOT_BYTE_MTX_Init( CPLOT_structByteMatrix *M )
02710 {
02711 if( !M )
02712 return FALSE;
02713
02714 M->ncols = 0;
02715 M->nrows = 0;
02716 M->data = NULL;
02717
02718 return TRUE;
02719 }
02720
02721 BOOL CPLOT_BYTE_MTX_isNull( const CPLOT_structByteMatrix *M )
02722 {
02723 if( !M )
02724 return TRUE;
02725
02726 if( M->data == NULL )
02727 return TRUE;
02728
02729 return FALSE;
02730 }
02731
02732
02733 BOOL CPLOT_BYTE_MTX_Zero( CPLOT_structByteMatrix *dst )
02734 {
02735 unsigned i = 0;
02736
02737 if( CPLOT_BYTE_MTX_isNull( dst ) )
02738 return FALSE;
02739
02740 for( i = 0; i < dst->nrows; i++ )
02741 {
02742 #ifdef INTEL_IPPS
02743 if( ippsZero_8u( (Ipp8u*)(dst->data[i]), dst->ncols ) != ippStsNoErr )
02744 return FALSE;
02745 #else
02746 memset( &(dst->data[i]), 0, dst->ncols );
02747 #endif
02748 }
02749 return TRUE;
02750 }
02751
02752 BOOL CPLOT_BYTE_MTX_Free( CPLOT_structByteMatrix *M )
02753 {
02754 unsigned i = 0;
02755
02756 if( !M )
02757 return FALSE;
02758
02759 if( M->data == NULL )
02760 {
02761 M->nrows = 0;
02762 M->ncols = 0;
02763 return TRUE;
02764 }
02765
02766
02767 for( i = 0; i < M->nrows; i++ )
02768 {
02769 #ifdef INTEL_IPPS
02770 ippsFree( M->data[i] );
02771 #else
02772 free( M->data[i] );
02773 #endif
02774 }
02775
02776
02777 free( M->data );
02778
02779 M->nrows = 0;
02780 M->ncols = 0;
02781 M->data = NULL;
02782
02783 return TRUE;
02784 }
02785
02786
02787 BOOL CPLOT_BYTE_MTX_calloc( CPLOT_structByteMatrix *M, const unsigned nrows, const unsigned ncols )
02788 {
02789 unsigned i = 0;
02790
02791
02792 if( nrows == 0 || ncols == 0 )
02793 return FALSE;
02794 if( !M )
02795 return FALSE;
02796
02797
02798 if( M->nrows > 0 && M->ncols > 0 )
02799 {
02800 if( M->nrows == nrows && M->ncols == ncols )
02801 {
02802
02803 if( !CPLOT_BYTE_MTX_Zero( M ) )
02804 return FALSE;
02805
02806 return TRUE;
02807 }
02808 }
02809
02810
02811 if( M->data != NULL )
02812 {
02813
02814 if( !CPLOT_BYTE_MTX_Free( M ) )
02815 return FALSE;
02816 }
02817
02818 M->nrows = 0;
02819 M->ncols = ncols;
02820
02821
02822 M->data = (byte**)malloc( nrows*sizeof(byte*) );
02823 if( !M->data )
02824 return FALSE;
02825
02826
02827 for( i = 0; i < nrows; i++ )
02828 {
02829 #ifdef INTEL_IPPS
02830 M->data[i] = ippsMalloc_8u( ncols );
02831 if( !(M->data[i]) )
02832 {
02833
02834 CPLOT_BYTE_MTX_Free( M );
02835 return FALSE;
02836 }
02837 if( ippsZero_8u( (Ipp8u*)(M->data[i]), ncols ) != ippStsNoErr )
02838 return FALSE;
02839 #else
02840 M->data[i] = (byte*)calloc( ncols, sizeof(byte) );
02841 if( !M->data[i] )
02842 {
02843
02844 CPLOT_BYTE_MTX_Free( M );
02845 return FALSE;
02846 }
02847 #endif
02848 M->nrows++;
02849 }
02850
02851 return TRUE;
02852 }
02853
02854
02855 BOOL CPLOT_BYTE_MTX_Fill( CPLOT_structByteMatrix *dst, const byte value )
02856 {
02857 unsigned i = 0;
02858
02859 if( CPLOT_BYTE_MTX_isNull( dst ) )
02860 return FALSE;
02861
02862 for( i = 0; i < dst->nrows; i++ )
02863 {
02864 #ifdef INTEL_IPPS
02865 if( ippsSet_8u( (Ipp8u)(value), (Ipp8u*)(dst->data[i]), dst->ncols ) != ippStsNoErr )
02866 return FALSE;
02867 #else
02868 memset( dst->data[i], value, dst->ncols );
02869 #endif
02870 }
02871 return TRUE;
02872 }
02873
02874 BOOL CPLOT_PlotOptionsInit( CPLOT_structPlotOptions *Opt )
02875 {
02876 if( !Opt )
02877 return FALSE;
02878 memset( Opt, 0, sizeof(CPLOT_structPlotOptions) );
02879 Opt->y_label_right_scale_factor = 1.0;
02880 Opt->RightYLabelColor = CPLOT_BLACK;
02881 Opt->numberOfSeries = 1;
02882 Opt->plotLabelOnRight = TRUE;
02883 Opt->endOfWarmupEpoch = -DBL_MAX;
02884 Opt->PlotSize_Width_cm = CPLOT_DEFAULT_PLOT_WIDTH_CM;
02885 Opt->PlotSize_Height_cm = CPLOT_DEFAULT_PLOT_HEIGHT_CM;
02886 return TRUE;
02887 }
02888
02889 BOOL CPLOT_Init( CPLOT* P )
02890 {
02891 int rem = 0;
02892 if( !P )
02893 return FALSE;
02894
02895 P->mIsAxesDrawn = FALSE;
02896 P->mSeriesIndex = 0;
02897 P->mFootNoteIndex = 0;
02898
02899 P->mStatsValueHeight = 15;
02900 P->mYLabelAllowance = 106;
02901 P->mRightYLabelAllowance = 80;
02902 P->mTitleAllowance = 50;
02903 P->mXLabelAllowance = 56;
02904
02905 P->mImage.Height = CPLOT_DEFAULT_PLOT_HEIGHT_CM * CPLOT_PIXELS_PER_CM;
02906 P->mImage.Width = CPLOT_DEFAULT_PLOT_WIDTH_CM * CPLOT_PIXELS_PER_CM;
02907
02908
02909 rem = P->mImage.Width%4;
02910 P->mImage.Width += rem;
02911
02912
02913 P->mAxes.StartX = 100;
02914 P->mAxes.StartY = 40;
02915 P->mAxes.FinishX = 530;
02916 P->mAxes.FinishY = 440;
02917 P->mAxes.Width = P->mAxes.FinishX - P->mAxes.StartX;
02918 P->mAxes.Height = P->mAxes.FinishY - P->mAxes.StartY;
02919 P->mAxes.TickDashInPixels = 4;
02920
02921
02922 P->mColorTable = NULL;
02923
02924
02925 P->mDefaultColorTable = CPLOT_DefaultColorTable;
02926
02927 P->mData.xtickstart = 0.0;
02928 P->mData.xtickend = 0.0;
02929 P->mData.xticksize = 0.0;
02930 P->mData.ytickstart = 0.0;
02931 P->mData.ytickend = 0.0;
02932 P->mData.yticksize = 0.0;
02933 P->mData.RangeX = 0.0;
02934 P->mData.RangeY = 0.0;
02935 P->mData.OnePercentRangeX = 0.0;
02936 P->mData.OnePercentRangeY = 0.0;
02937 P->mData.ScaleX = 0.0;
02938 P->mData.ScaleY = 0.0;
02939 P->mData.MinX = 0.0;
02940 P->mData.MaxX = 0.0;
02941 P->mData.MinY = 0.0;
02942 P->mData.MaxY = 0.0;
02943
02944 P->mLabelWidth = 80;
02945
02946 memset( &(P->mOptions), 0, sizeof(CPLOT_structPlotOptions) );
02947 P->mOptions.y_label_right_scale_factor = 1.0;
02948 P->mOptions.RightYLabelColor = CPLOT_BLACK;
02949 P->mOptions.numberOfSeries = 1;
02950 P->mOptions.plotLabelOnRight = TRUE;
02951 P->mOptions.endOfWarmupEpoch = -DBL_MAX;
02952 P->mOptions.PlotSize_Width_cm = 19;
02953 P->mOptions.PlotSize_Height_cm = 14;
02954
02955 if( !CPLOT_BYTE_MTX_Init( &(P->mPlotData) ) )
02956 return FALSE;
02957 if( !CPLOT_BYTE_MTX_calloc( &(P->mPlotData), P->mImage.Height, P->mImage.Width ) )
02958 return FALSE;
02959
02960 return TRUE;
02961 }
02962
02963
02964 BOOL CPLOT_SetPlottingOptions( CPLOT *P, CPLOT_structPlotOptions Options )
02965 {
02966 if( !P )
02967 return FALSE;
02968
02969 P->mOptions = Options;
02970 return TRUE;
02971 }
02972
02973
02974 BOOL CPLOT_DrawLine(
02975 CPLOT *P,
02976 const int x,
02977 const int y,
02978 const int to_x,
02979 const int to_y,
02980 const CPLOT_enumColor color
02981 )
02982 {
02983 int row = 0,
02984 row_last = 0,
02985 halfway = 0,
02986 col = 0;
02987
02988 double m = 0.0,
02989 b = 0.0;
02990
02991 if( !P )
02992 return FALSE;
02993
02994 if( x >= P->mImage.Width || to_x >= P->mImage.Width )
02995 return TRUE;
02996 if( y >= P->mImage.Height || to_y >= P->mImage.Height )
02997 return TRUE;
02998
02999 if( to_x - x == 0 )
03000 {
03001 if( y < to_y )
03002 {
03003 for( row=y; row<=to_y; row++ )
03004 {
03005 P->mPlotData.data[row][x] = color;
03006 }
03007 }
03008 else
03009 {
03010 for( row=to_y; row<=y; row++ )
03011 {
03012 P->mPlotData.data[row][x] = color;
03013 }
03014 }
03015 return TRUE;
03016 }
03017
03018 if( to_x > x )
03019 {
03020 m = (double)(to_y - y) / (double)(to_x - x);
03021 b = y - m*x;
03022
03023 col = x;
03024 row_last = (int)(m*col + b);
03025 for( col=x; col<=to_x; col++ )
03026 {
03027 row = (int)(m*col + b);
03028
03029 halfway = abs(row_last - row) / 2;
03030 while( abs(row_last - row) > 1 )
03031 {
03032 if( row_last > row )
03033 row_last--;
03034 else
03035 row_last++;
03036
03037
03038 if( abs(row_last - row) > halfway )
03039 P->mPlotData.data[row_last][col-1] = color;
03040 else
03041 P->mPlotData.data[row_last][col] = color;
03042 }
03043
03044 P->mPlotData.data[row][col] = color;
03045 row_last = row;
03046 }
03047 }
03048 else
03049 {
03050 m = (double)(y - to_y) / (double)(x - to_x);
03051 b = y - m*x;
03052
03053 col = to_x;
03054 row_last = (int)(m*col + b);
03055 for( col=to_x; col<=x; col++ )
03056 {
03057 row = (int)(m*col + b);
03058
03059 halfway = abs(row_last - row) / 2;
03060 while( abs(row_last - row) > 1 )
03061 {
03062 if( row_last > row )
03063 row_last--;
03064 else
03065 row_last++;
03066
03067
03068 if( abs(row_last - row) > halfway )
03069 P->mPlotData.data[row_last][col-1] = color;
03070 else
03071 P->mPlotData.data[row_last][col] = color;
03072 }
03073
03074 P->mPlotData.data[row][col] = color;
03075 row_last = row;
03076 }
03077 }
03078 return TRUE;
03079 }
03080
03081
03082 BOOL CPLOT_DrawDashedLine(
03083 CPLOT *P,
03084 const int x,
03085 const int y,
03086 const int to_x,
03087 const int to_y,
03088 const int kDashSize,
03089 const CPLOT_enumColor color )
03090 {
03091 int row = 0,
03092 row_last = 0,
03093 halfway = 0,
03094 col = 0,
03095 dash = 0;
03096
03097 double m = 0.0,
03098 b = 0.0;
03099
03100 if( !P )
03101 return FALSE;
03102
03103 if( x >= P->mImage.Width || to_x >= P->mImage.Width )
03104 return TRUE;
03105 if( y >= P->mImage.Height || to_y >= P->mImage.Height )
03106 return TRUE;
03107
03108
03109
03110 if( to_x - x == 0 )
03111 {
03112 for( row=y; row<=to_y; row++ )
03113 {
03114 if( dash < kDashSize )
03115 P->mPlotData.data[row][x] = color;
03116
03117 dash++;
03118 if( dash == kDashSize*2 )
03119 dash = 0;
03120 }
03121 return TRUE;
03122 }
03123
03124 if( to_x > x )
03125 {
03126 dash = 0;
03127 m = (double)(to_y - y) / (double)(to_x - x);
03128 b = y - m*x;
03129
03130 col = x;
03131 row_last = (int)(m*col + b);
03132 for( col=x; col<=to_x; col++ )
03133 {
03134 row = (int)(m*col + b);
03135
03136 halfway = abs(row_last - row) / 2;
03137 while( abs(row_last - row) > 1 )
03138 {
03139 if( row_last > row )
03140 row_last--;
03141 else
03142 row_last++;
03143
03144
03145 if( abs(row_last - row) > halfway )
03146 {
03147 if( dash < kDashSize )
03148 P->mPlotData.data[row_last][col-1] = color;
03149 }
03150 else
03151 {
03152 if( dash < kDashSize )
03153 P->mPlotData.data[row_last][col] = color;
03154 }
03155
03156 dash++;
03157 if( dash == kDashSize*2 )
03158 dash = 0;
03159
03160 }
03161
03162 if( dash < kDashSize )
03163 P->mPlotData.data[row][col] = color;
03164
03165 dash++;
03166 if( dash == kDashSize*2 )
03167 dash = 0;
03168 }
03169 }
03170 else
03171 {
03172 dash = 0;
03173 m = (double)(y - to_y) / (double)(x - to_x);
03174 b = y - m*x;
03175
03176 col = to_x;
03177 row_last = (int)(m*col + b);
03178 for( col=to_x; col<=x; col++ )
03179 {
03180 row = (int)(m*col + b);
03181
03182 halfway = abs(row_last - row) / 2;
03183 while( abs(row_last - row) > 1 )
03184 {
03185 if( row_last > row )
03186 row_last--;
03187 else
03188 row_last++;
03189
03190
03191 if( abs(row_last - row) > halfway )
03192 {
03193 if( dash < kDashSize )
03194 P->mPlotData.data[row_last][col-1] = color;
03195 }
03196 else
03197 {
03198 if( dash < kDashSize )
03199 P->mPlotData.data[row_last][col] = color;
03200 }
03201 dash++;
03202 if( dash == kDashSize*2 )
03203 dash = 0;
03204 }
03205
03206 if( dash < kDashSize )
03207 P->mPlotData.data[row][col] = color;
03208
03209 dash++;
03210 if( dash == kDashSize*2 )
03211 dash = 0;
03212
03213
03214 row_last = row;
03215 }
03216 }
03217
03218 return TRUE;
03219 }
03220
03221
03222
03223
03224 int CPLOT_DrawSmallLetter(
03225 CPLOT *P,
03226 const char Letter,
03227 const int x,
03228 const int y,
03229 BOOL isRotatedLeft,
03230 const CPLOT_enumColor color
03231 )
03232 {
03233 const int klH = CPLOT_SMALLFONT_HGT;
03234 const int klW = CPLOT_SMALLFONT_WIDTH;
03235
03236 int row = 0;
03237 int col = 0;
03238
03239 byte rotatedleft[CPLOT_SMALLFONT_WIDTH][CPLOT_SMALLFONT_HGT];
03240 byte temp[CPLOT_SMALLFONT_HGT][CPLOT_SMALLFONT_WIDTH];
03241
03242 if( !P )
03243 return FALSE;
03244
03245 if( y < klH )
03246 return 0;
03247
03248 if( x + klW >= P->mImage.Width )
03249 return 0;
03250
03251 memset( &rotatedleft, 0, CPLOT_SMALLFONT_WIDTH*CPLOT_SMALLFONT_HGT );
03252 memset( &temp, 0, CPLOT_SMALLFONT_WIDTH*CPLOT_SMALLFONT_HGT );
03253
03254 switch( Letter )
03255 {
03256 case 'A': memcpy( &temp, CPLOT_SMALLFONT_A, CPLOT_SMALLFONT_NBYTES ); break;
03257 case 'B': memcpy( &temp, CPLOT_SMALLFONT_B, CPLOT_SMALLFONT_NBYTES ); break;
03258 case 'C': memcpy( &temp, CPLOT_SMALLFONT_C, CPLOT_SMALLFONT_NBYTES ); break;
03259 case 'D': memcpy( &temp, CPLOT_SMALLFONT_D, CPLOT_SMALLFONT_NBYTES ); break;
03260 case 'E': memcpy( &temp, CPLOT_SMALLFONT_E, CPLOT_SMALLFONT_NBYTES ); break;
03261 case 'F': memcpy( &temp, CPLOT_SMALLFONT_F, CPLOT_SMALLFONT_NBYTES ); break;
03262 case 'G': memcpy( &temp, CPLOT_SMALLFONT_G, CPLOT_SMALLFONT_NBYTES ); break;
03263 case 'H': memcpy( &temp, CPLOT_SMALLFONT_H, CPLOT_SMALLFONT_NBYTES ); break;
03264 case 'I': memcpy( &temp, CPLOT_SMALLFONT_I, CPLOT_SMALLFONT_NBYTES ); break;
03265 case 'J': memcpy( &temp, CPLOT_SMALLFONT_J, CPLOT_SMALLFONT_NBYTES ); break;
03266 case 'K': memcpy( &temp, CPLOT_SMALLFONT_K, CPLOT_SMALLFONT_NBYTES ); break;
03267 case 'L': memcpy( &temp, CPLOT_SMALLFONT_L, CPLOT_SMALLFONT_NBYTES ); break;
03268 case 'M': memcpy( &temp, CPLOT_SMALLFONT_M, CPLOT_SMALLFONT_NBYTES ); break;
03269 case 'N': memcpy( &temp, CPLOT_SMALLFONT_N, CPLOT_SMALLFONT_NBYTES ); break;
03270 case 'O': memcpy( &temp, CPLOT_SMALLFONT_O, CPLOT_SMALLFONT_NBYTES ); break;
03271 case 'P': memcpy( &temp, CPLOT_SMALLFONT_P, CPLOT_SMALLFONT_NBYTES ); break;
03272 case 'Q': memcpy( &temp, CPLOT_SMALLFONT_Q, CPLOT_SMALLFONT_NBYTES ); break;
03273 case 'R': memcpy( &temp, CPLOT_SMALLFONT_R, CPLOT_SMALLFONT_NBYTES ); break;
03274 case 'S': memcpy( &temp, CPLOT_SMALLFONT_S, CPLOT_SMALLFONT_NBYTES ); break;
03275 case 'T': memcpy( &temp, CPLOT_SMALLFONT_T, CPLOT_SMALLFONT_NBYTES ); break;
03276 case 'U': memcpy( &temp, CPLOT_SMALLFONT_U, CPLOT_SMALLFONT_NBYTES ); break;
03277 case 'V': memcpy( &temp, CPLOT_SMALLFONT_V, CPLOT_SMALLFONT_NBYTES ); break;
03278 case 'W': memcpy( &temp, CPLOT_SMALLFONT_W, CPLOT_SMALLFONT_NBYTES ); break;
03279 case 'X': memcpy( &temp, CPLOT_SMALLFONT_X, CPLOT_SMALLFONT_NBYTES ); break;
03280 case 'Y': memcpy( &temp, CPLOT_SMALLFONT_Y, CPLOT_SMALLFONT_NBYTES ); break;
03281 case 'Z': memcpy( &temp, CPLOT_SMALLFONT_Z, CPLOT_SMALLFONT_NBYTES ); break;
03282
03283
03284 case 'a': memcpy( &temp, CPLOT_SMALLFONT_a, CPLOT_SMALLFONT_NBYTES ); break;
03285 case 'b': memcpy( &temp, CPLOT_SMALLFONT_b, CPLOT_SMALLFONT_NBYTES ); break;
03286 case 'c': memcpy( &temp, CPLOT_SMALLFONT_c, CPLOT_SMALLFONT_NBYTES ); break;
03287 case 'd': memcpy( &temp, CPLOT_SMALLFONT_d, CPLOT_SMALLFONT_NBYTES ); break;
03288 case 'e': memcpy( &temp, CPLOT_SMALLFONT_e, CPLOT_SMALLFONT_NBYTES ); break;
03289 case 'f': memcpy( &temp, CPLOT_SMALLFONT_f, CPLOT_SMALLFONT_NBYTES ); break;
03290 case 'g': memcpy( &temp, CPLOT_SMALLFONT_g, CPLOT_SMALLFONT_NBYTES ); break;
03291 case 'h': memcpy( &temp, CPLOT_SMALLFONT_h, CPLOT_SMALLFONT_NBYTES ); break;
03292 case 'i': memcpy( &temp, CPLOT_SMALLFONT_i, CPLOT_SMALLFONT_NBYTES ); break;
03293 case 'j': memcpy( &temp, CPLOT_SMALLFONT_j, CPLOT_SMALLFONT_NBYTES ); break;
03294 case 'k': memcpy( &temp, CPLOT_SMALLFONT_k, CPLOT_SMALLFONT_NBYTES ); break;
03295 case 'l': memcpy( &temp, CPLOT_SMALLFONT_l, CPLOT_SMALLFONT_NBYTES ); break;
03296 case 'm': memcpy( &temp, CPLOT_SMALLFONT_m, CPLOT_SMALLFONT_NBYTES ); break;
03297 case 'n': memcpy( &temp, CPLOT_SMALLFONT_n, CPLOT_SMALLFONT_NBYTES ); break;
03298 case 'o': memcpy( &temp, CPLOT_SMALLFONT_o, CPLOT_SMALLFONT_NBYTES ); break;
03299 case 'p': memcpy( &temp, CPLOT_SMALLFONT_p, CPLOT_SMALLFONT_NBYTES ); break;
03300 case 'q': memcpy( &temp, CPLOT_SMALLFONT_q, CPLOT_SMALLFONT_NBYTES ); break;
03301 case 'r': memcpy( &temp, CPLOT_SMALLFONT_r, CPLOT_SMALLFONT_NBYTES ); break;
03302 case 's': memcpy( &temp, CPLOT_SMALLFONT_s, CPLOT_SMALLFONT_NBYTES ); break;
03303 case 't': memcpy( &temp, CPLOT_SMALLFONT_t, CPLOT_SMALLFONT_NBYTES ); break;
03304 case 'u': memcpy( &temp, CPLOT_SMALLFONT_u, CPLOT_SMALLFONT_NBYTES ); break;
03305 case 'v': memcpy( &temp, CPLOT_SMALLFONT_v, CPLOT_SMALLFONT_NBYTES ); break;
03306 case 'w': memcpy( &temp, CPLOT_SMALLFONT_w, CPLOT_SMALLFONT_NBYTES ); break;
03307 case 'x': memcpy( &temp, CPLOT_SMALLFONT_x, CPLOT_SMALLFONT_NBYTES ); break;
03308 case 'y': memcpy( &temp, CPLOT_SMALLFONT_y, CPLOT_SMALLFONT_NBYTES ); break;
03309 case 'z': memcpy( &temp, CPLOT_SMALLFONT_z, CPLOT_SMALLFONT_NBYTES ); break;
03310
03311 case '~': memcpy( &temp, CPLOT_SMALLFONT_tilda, CPLOT_SMALLFONT_NBYTES ); break;
03312 case '!': memcpy( &temp, CPLOT_SMALLFONT_exclamation, CPLOT_SMALLFONT_NBYTES ); break;
03313
03314
03315 case '$': memcpy( &temp, CPLOT_SMALLFONT_dollarsign, CPLOT_SMALLFONT_NBYTES ); break;
03316 case '%': memcpy( &temp, CPLOT_SMALLFONT_percent, CPLOT_SMALLFONT_NBYTES ); break;
03317 case '^': memcpy( &temp, CPLOT_SMALLFONT_raiseto, CPLOT_SMALLFONT_NBYTES ); break;
03318 case '&': memcpy( &temp, CPLOT_SMALLFONT_andsign, CPLOT_SMALLFONT_NBYTES ); break;
03319 case '*': memcpy( &temp, CPLOT_SMALLFONT_star, CPLOT_SMALLFONT_NBYTES ); break;
03320 case '(': memcpy( &temp, CPLOT_SMALLFONT_leftbracket, CPLOT_SMALLFONT_NBYTES ); break;
03321 case ')': memcpy( &temp, CPLOT_SMALLFONT_rightbracket, CPLOT_SMALLFONT_NBYTES ); break;
03322 case '-': memcpy( &temp, CPLOT_SMALLFONT_dash, CPLOT_SMALLFONT_NBYTES ); break;
03323
03324 case '+': memcpy( &temp, CPLOT_SMALLFONT_plus, CPLOT_SMALLFONT_NBYTES ); break;
03325 case '=': memcpy( &temp, CPLOT_SMALLFONT_equals, CPLOT_SMALLFONT_NBYTES ); break;
03326
03327
03328 case '|': memcpy( &temp, CPLOT_SMALLFONT_vert, CPLOT_SMALLFONT_NBYTES ); break;
03329 case '[': memcpy( &temp, CPLOT_SMALLFONT_leftsquare, CPLOT_SMALLFONT_NBYTES ); break;
03330 case ']': memcpy( &temp, CPLOT_SMALLFONT_rightsquare, CPLOT_SMALLFONT_NBYTES ); break;
03331 case '\\': memcpy( &temp, CPLOT_SMALLFONT_backslash, CPLOT_SMALLFONT_NBYTES ); break;
03332 case '/': memcpy( &temp, CPLOT_SMALLFONT_forwardslash, CPLOT_SMALLFONT_NBYTES ); break;
03333 case ';': memcpy( &temp, CPLOT_SMALLFONT_semicolon, CPLOT_SMALLFONT_NBYTES ); break;
03334 case ':': memcpy( &temp, CPLOT_SMALLFONT_colon, CPLOT_SMALLFONT_NBYTES ); break;
03335 case '\'': memcpy( &temp, CPLOT_SMALLFONT_singlequote, CPLOT_SMALLFONT_NBYTES ); break;
03336 case ',': memcpy( &temp, CPLOT_SMALLFONT_comma, CPLOT_SMALLFONT_NBYTES ); break;
03337 case '.': memcpy( &temp, CPLOT_SMALLFONT_point, CPLOT_SMALLFONT_NBYTES ); break;
03338 case '"': memcpy( &temp, CPLOT_SMALLFONT_doublequote, CPLOT_SMALLFONT_NBYTES ); break;
03339 case '<': memcpy( &temp, CPLOT_SMALLFONT_lessthan, CPLOT_SMALLFONT_NBYTES ); break;
03340 case '>': memcpy( &temp, CPLOT_SMALLFONT_morethan, CPLOT_SMALLFONT_NBYTES ); break;
03341
03342
03343 case '1': memcpy( &temp, CPLOT_SMALLFONT_One, CPLOT_SMALLFONT_NBYTES ); break;
03344 case '2': memcpy( &temp, CPLOT_SMALLFONT_Two, CPLOT_SMALLFONT_NBYTES ); break;
03345 case '3': memcpy( &temp, CPLOT_SMALLFONT_Three, CPLOT_SMALLFONT_NBYTES ); break;
03346 case '4': memcpy( &temp, CPLOT_SMALLFONT_Four, CPLOT_SMALLFONT_NBYTES ); break;
03347 case '5': memcpy( &temp, CPLOT_SMALLFONT_Five, CPLOT_SMALLFONT_NBYTES ); break;
03348 case '6': memcpy( &temp, CPLOT_SMALLFONT_Six, CPLOT_SMALLFONT_NBYTES ); break;
03349 case '7': memcpy( &temp, CPLOT_SMALLFONT_Seven, CPLOT_SMALLFONT_NBYTES ); break;
03350 case '8': memcpy( &temp, CPLOT_SMALLFONT_Eight, CPLOT_SMALLFONT_NBYTES ); break;
03351 case '9': memcpy( &temp, CPLOT_SMALLFONT_Nine, CPLOT_SMALLFONT_NBYTES ); break;
03352 case '0': memcpy( &temp, CPLOT_SMALLFONT_Zero, CPLOT_SMALLFONT_NBYTES ); break;
03353
03354 default: break;
03355 }
03356
03357
03358 if( isRotatedLeft )
03359 {
03360 for( row = 0; row < klH; row++ )
03361 {
03362 for( col = 0; col < klW; col++ )
03363 {
03364 rotatedleft[5-col][row] = temp[row][col];
03365 }
03366 }
03367 }
03368
03369
03370 if( isRotatedLeft )
03371 {
03372 for( row = 0; row < klW; row++ )
03373 {
03374 for( col = 0; col < klH; col++ )
03375 {
03376 if( rotatedleft[row][col] )
03377 P->mPlotData.data[y-row][x+col] = rotatedleft[row][col] * color;
03378 }
03379 }
03380 }
03381 else
03382 {
03383 for( row = 0; row < klH; row++ )
03384 {
03385 for( col = 0; col < klW; col++ )
03386 {
03387 if( temp[row][col] )
03388 P->mPlotData.data[y-row][x+col] = temp[row][col] * color;
03389 }
03390 }
03391 }
03392 return klW;
03393 }
03394
03395
03396
03397
03398
03399
03400 int CPLOT_DrawLargeLetter(
03401 CPLOT *P,
03402 const char Letter,
03403 const int x,
03404 const int y,
03405 BOOL isRotatedLeft,
03406 const CPLOT_enumColor color
03407 )
03408 {
03409 int row = 0;
03410 int col = 0;
03411 int numCols = 0;
03412 char letter = Letter;
03413 const int kSize = CPLOT_LARGEFONT;
03414
03415 byte temp[CPLOT_LARGEFONT][CPLOT_LARGEFONT];
03416 byte rotatedleft[CPLOT_LARGEFONT][CPLOT_LARGEFONT];
03417
03418 if( !P )
03419 return FALSE;
03420
03421 memset( &temp, 0, CPLOT_LARGEFONT*CPLOT_LARGEFONT );
03422 memset( &rotatedleft, 0, CPLOT_LARGEFONT*CPLOT_LARGEFONT );
03423
03424 switch( letter )
03425 {
03426 case 'A': numCols = 11; break;
03427 case 'B': numCols = 11; break;
03428 case 'C': numCols = 11; break;
03429 case 'D': numCols = 11; break;
03430 case 'E': numCols = 11; break;
03431 case 'F': numCols = 11; break;
03432 case 'G': numCols = 11; break;
03433 case 'H': numCols = 11; break;
03434 case 'I': numCols = 3; break;
03435 case 'J': numCols = 9; break;
03436 case 'K': numCols = 11; break;
03437 case 'L': numCols = 9; break;
03438 case 'M': numCols = 13; break;
03439 case 'N': numCols = 11; break;
03440 case 'O': numCols = 12; break;
03441 case 'P': numCols = 10; break;
03442 case 'Q': numCols = 12; break;
03443 case 'R': numCols = 11; break;
03444 case 'S': numCols = 10; break;
03445 case 'T': numCols = 10; break;
03446 case 'U': numCols = 10; break;
03447 case 'V': numCols = 9; break;
03448 case 'W': numCols = 14; break;
03449 case 'X': numCols = 10; break;
03450 case 'Y': numCols = 9; break;
03451 case 'Z': numCols = 9; break;
03452
03453 case 'a': numCols = 8; break;
03454 case 'b': numCols = 9; break;
03455 case 'c': numCols = 9; break;
03456 case 'd': numCols = 9; break;
03457 case 'e': numCols = 9; break;
03458 case 'f': numCols = 7; break;
03459 case 'g': numCols = 9; break;
03460 case 'h': numCols = 9; break;
03461 case 'i': numCols = 4; break;
03462 case 'j': numCols = 6; break;
03463 case 'k': numCols = 8; break;
03464 case 'l': numCols = 4; break;
03465 case 'm': numCols = 12; break;
03466 case 'n': numCols = 9; break;
03467 case 'o': numCols = 9; break;
03468 case 'p': numCols = 9; break;
03469 case 'q': numCols = 9; break;
03470 case 'r': numCols = 6; break;
03471 case 's': numCols = 7; break;
03472 case 't': numCols = 6; break;
03473 case 'u': numCols = 9; break;
03474 case 'v': numCols = 8; break;
03475 case 'w': numCols = 12; break;
03476 case 'x': numCols = 7; break;
03477 case 'y': numCols = 8; break;
03478 case 'z': numCols = 8; break;
03479
03480 case '~': numCols = 10; break;
03481 case '!': numCols = 4; break;
03482 case '@': numCols = 12; break;
03483 case '#': numCols = 9; break;
03484 case '$': numCols = 10; break;
03485 case '%': numCols = 14; break;
03486 case '^': numCols = 10; break;
03487 case '&': numCols = 11; break;
03488 case '*': numCols = 8; break;
03489 case '(': numCols = 5; break;
03490 case ')': numCols = 5; break;
03491 case '-': numCols = 5; break;
03492 case '_': numCols = 9; break;
03493 case '+': numCols = 10; break;
03494 case '=': numCols = 10; break;
03495 case '{': numCols = 6; break;
03496 case '}': numCols = 6; break;
03497 case '|': numCols = 5; break;
03498 case '[': numCols = 5; break;
03499 case ']': numCols = 5; break;
03500 case '\\': numCols = 6; break;
03501 case '/': numCols = 6; break;
03502 case ';': numCols = 4; break;
03503 case ':': numCols = 4; break;
03504 case '\'': numCols = 4; break;
03505 case ',': numCols = 4; break;
03506 case '.': numCols = 4; break;
03507 case '"': numCols = 8; break;
03508 case '<': numCols = 9; break;
03509 case '>': numCols = 9; break;
03510 case '?': numCols = 9; break;
03511
03512 case '1': numCols = 7; break;
03513 case '2':
03514 case '3':
03515 case '4':
03516 case '5':
03517 case '6':
03518 case '7':
03519 case '8':
03520 case '9':
03521 case '0': numCols = 8; break;
03522
03523 case -1: numCols = 12; break;
03524
03525 default: numCols = 5; break;
03526 }
03527
03528
03529 switch( letter )
03530 {
03531 case 'A': memcpy( &temp, CPLOT_LARGEFONT_A, CPLOT_LARGEFONT_NBYTES ); break;
03532 case 'B': memcpy( &temp, CPLOT_LARGEFONT_B, CPLOT_LARGEFONT_NBYTES ); break;
03533 case 'C': memcpy( &temp, CPLOT_LARGEFONT_C, CPLOT_LARGEFONT_NBYTES ); break;
03534 case 'D': memcpy( &temp, CPLOT_LARGEFONT_D, CPLOT_LARGEFONT_NBYTES ); break;
03535 case 'E': memcpy( &temp, CPLOT_LARGEFONT_E, CPLOT_LARGEFONT_NBYTES ); break;
03536 case 'F': memcpy( &temp, CPLOT_LARGEFONT_F, CPLOT_LARGEFONT_NBYTES ); break;
03537 case 'G': memcpy( &temp, CPLOT_LARGEFONT_G, CPLOT_LARGEFONT_NBYTES ); break;
03538 case 'H': memcpy( &temp, CPLOT_LARGEFONT_H, CPLOT_LARGEFONT_NBYTES ); break;
03539 case 'I': memcpy( &temp, CPLOT_LARGEFONT_I, CPLOT_LARGEFONT_NBYTES ); break;
03540 case 'J': memcpy( &temp, CPLOT_LARGEFONT_J, CPLOT_LARGEFONT_NBYTES ); break;
03541 case 'K': memcpy( &temp, CPLOT_LARGEFONT_K, CPLOT_LARGEFONT_NBYTES ); break;
03542 case 'L': memcpy( &temp, CPLOT_LARGEFONT_L, CPLOT_LARGEFONT_NBYTES ); break;
03543 case 'M': memcpy( &temp, CPLOT_LARGEFONT_M, CPLOT_LARGEFONT_NBYTES ); break;
03544 case 'N': memcpy( &temp, CPLOT_LARGEFONT_N, CPLOT_LARGEFONT_NBYTES ); break;
03545 case 'O': memcpy( &temp, CPLOT_LARGEFONT_O, CPLOT_LARGEFONT_NBYTES ); break;
03546 case 'P': memcpy( &temp, CPLOT_LARGEFONT_P, CPLOT_LARGEFONT_NBYTES ); break;
03547 case 'Q': memcpy( &temp, CPLOT_LARGEFONT_Q, CPLOT_LARGEFONT_NBYTES ); break;
03548 case 'R': memcpy( &temp, CPLOT_LARGEFONT_R, CPLOT_LARGEFONT_NBYTES ); break;
03549 case 'S': memcpy( &temp, CPLOT_LARGEFONT_S, CPLOT_LARGEFONT_NBYTES ); break;
03550 case 'T': memcpy( &temp, CPLOT_LARGEFONT_T, CPLOT_LARGEFONT_NBYTES ); break;
03551 case 'U': memcpy( &temp, CPLOT_LARGEFONT_U, CPLOT_LARGEFONT_NBYTES ); break;
03552 case 'V': memcpy( &temp, CPLOT_LARGEFONT_V, CPLOT_LARGEFONT_NBYTES ); break;
03553 case 'W': memcpy( &temp, CPLOT_LARGEFONT_W, CPLOT_LARGEFONT_NBYTES ); break;
03554 case 'X': memcpy( &temp, CPLOT_LARGEFONT_X, CPLOT_LARGEFONT_NBYTES ); break;
03555 case 'Y': memcpy( &temp, CPLOT_LARGEFONT_Y, CPLOT_LARGEFONT_NBYTES ); break;
03556 case 'Z': memcpy( &temp, CPLOT_LARGEFONT_Z, CPLOT_LARGEFONT_NBYTES ); break;
03557
03558
03559 case 'a': memcpy( &temp, CPLOT_LARGEFONT_a, CPLOT_LARGEFONT_NBYTES ); break;
03560 case 'b': memcpy( &temp, CPLOT_LARGEFONT_b, CPLOT_LARGEFONT_NBYTES ); break;
03561 case 'c': memcpy( &temp, CPLOT_LARGEFONT_c, CPLOT_LARGEFONT_NBYTES ); break;
03562 case 'd': memcpy( &temp, CPLOT_LARGEFONT_d, CPLOT_LARGEFONT_NBYTES ); break;
03563 case 'e': memcpy( &temp, CPLOT_LARGEFONT_e, CPLOT_LARGEFONT_NBYTES ); break;
03564 case 'f': memcpy( &temp, CPLOT_LARGEFONT_f, CPLOT_LARGEFONT_NBYTES ); break;
03565 case 'g': memcpy( &temp, CPLOT_LARGEFONT_g, CPLOT_LARGEFONT_NBYTES ); break;
03566 case 'h': memcpy( &temp, CPLOT_LARGEFONT_h, CPLOT_LARGEFONT_NBYTES ); break;
03567 case 'i': memcpy( &temp, CPLOT_LARGEFONT_i, CPLOT_LARGEFONT_NBYTES ); break;
03568 case 'j': memcpy( &temp, CPLOT_LARGEFONT_j, CPLOT_LARGEFONT_NBYTES ); break;
03569 case 'k': memcpy( &temp, CPLOT_LARGEFONT_k, CPLOT_LARGEFONT_NBYTES ); break;
03570 case 'l': memcpy( &temp, CPLOT_LARGEFONT_l, CPLOT_LARGEFONT_NBYTES ); break;
03571 case 'm': memcpy( &temp, CPLOT_LARGEFONT_m, CPLOT_LARGEFONT_NBYTES ); break;
03572 case 'n': memcpy( &temp, CPLOT_LARGEFONT_n, CPLOT_LARGEFONT_NBYTES ); break;
03573 case 'o': memcpy( &temp, CPLOT_LARGEFONT_o, CPLOT_LARGEFONT_NBYTES ); break;
03574 case 'p': memcpy( &temp, CPLOT_LARGEFONT_p, CPLOT_LARGEFONT_NBYTES ); break;
03575 case 'q': memcpy( &temp, CPLOT_LARGEFONT_q, CPLOT_LARGEFONT_NBYTES ); break;
03576 case 'r': memcpy( &temp, CPLOT_LARGEFONT_r, CPLOT_LARGEFONT_NBYTES ); break;
03577 case 's': memcpy( &temp, CPLOT_LARGEFONT_s, CPLOT_LARGEFONT_NBYTES ); break;
03578 case 't': memcpy( &temp, CPLOT_LARGEFONT_t, CPLOT_LARGEFONT_NBYTES ); break;
03579 case 'u': memcpy( &temp, CPLOT_LARGEFONT_u, CPLOT_LARGEFONT_NBYTES ); break;
03580 case 'v': memcpy( &temp, CPLOT_LARGEFONT_v, CPLOT_LARGEFONT_NBYTES ); break;
03581 case 'w': memcpy( &temp, CPLOT_LARGEFONT_w, CPLOT_LARGEFONT_NBYTES ); break;
03582 case 'x': memcpy( &temp, CPLOT_LARGEFONT_x, CPLOT_LARGEFONT_NBYTES ); break;
03583 case 'y': memcpy( &temp, CPLOT_LARGEFONT_y, CPLOT_LARGEFONT_NBYTES ); break;
03584 case 'z': memcpy( &temp, CPLOT_LARGEFONT_z, CPLOT_LARGEFONT_NBYTES ); break;
03585
03586 case '~': memcpy( &temp, CPLOT_LARGEFONT_tilda, CPLOT_LARGEFONT_NBYTES ); break;
03587 case '!': memcpy( &temp, CPLOT_LARGEFONT_exclamation, CPLOT_LARGEFONT_NBYTES ); break;
03588 case '@': memcpy( &temp, CPLOT_LARGEFONT_at, CPLOT_LARGEFONT_NBYTES ); break;
03589 case '#': memcpy( &temp, CPLOT_LARGEFONT_hash, CPLOT_LARGEFONT_NBYTES ); break;
03590 case '$': memcpy( &temp, CPLOT_LARGEFONT_dollarsign, CPLOT_LARGEFONT_NBYTES ); break;
03591 case '%': memcpy( &temp, CPLOT_LARGEFONT_percent, CPLOT_LARGEFONT_NBYTES ); break;
03592 case '^': memcpy( &temp, CPLOT_LARGEFONT_raiseto, CPLOT_LARGEFONT_NBYTES ); break;
03593 case '&': memcpy( &temp, CPLOT_LARGEFONT_andsign, CPLOT_LARGEFONT_NBYTES ); break;
03594 case '*': memcpy( &temp, CPLOT_LARGEFONT_star, CPLOT_LARGEFONT_NBYTES ); break;
03595 case '(': memcpy( &temp, CPLOT_LARGEFONT_leftbracket, CPLOT_LARGEFONT_NBYTES ); break;
03596 case ')': memcpy( &temp, CPLOT_LARGEFONT_rightbracket, CPLOT_LARGEFONT_NBYTES ); break;
03597 case '-': memcpy( &temp, CPLOT_LARGEFONT_dash, CPLOT_LARGEFONT_NBYTES ); break;
03598 case '_': memcpy( &temp, CPLOT_LARGEFONT_underscore, CPLOT_LARGEFONT_NBYTES ); break;
03599 case '+': memcpy( &temp, CPLOT_LARGEFONT_plus, CPLOT_LARGEFONT_NBYTES ); break;
03600 case '=': memcpy( &temp, CPLOT_LARGEFONT_equals, CPLOT_LARGEFONT_NBYTES ); break;
03601 case '{': memcpy( &temp, CPLOT_LARGEFONT_leftcurly, CPLOT_LARGEFONT_NBYTES ); break;
03602 case '}': memcpy( &temp, CPLOT_LARGEFONT_rightcurly, CPLOT_LARGEFONT_NBYTES ); break;
03603 case '|': memcpy( &temp, CPLOT_LARGEFONT_vert, CPLOT_LARGEFONT_NBYTES ); break;
03604 case '[': memcpy( &temp, CPLOT_LARGEFONT_leftsquare, CPLOT_LARGEFONT_NBYTES ); break;
03605 case ']': memcpy( &temp, CPLOT_LARGEFONT_rightsquare, CPLOT_LARGEFONT_NBYTES ); break;
03606 case '\\': memcpy( &temp, CPLOT_LARGEFONT_backslash, CPLOT_LARGEFONT_NBYTES ); break;
03607 case '/': memcpy( &temp, CPLOT_LARGEFONT_forwardslash, CPLOT_LARGEFONT_NBYTES ); break;
03608 case ';': memcpy( &temp, CPLOT_LARGEFONT_semicolon, CPLOT_LARGEFONT_NBYTES ); break;
03609 case ':': memcpy( &temp, CPLOT_LARGEFONT_colon, CPLOT_LARGEFONT_NBYTES ); break;
03610 case '\'': memcpy( &temp, CPLOT_LARGEFONT_singlequote, CPLOT_LARGEFONT_NBYTES ); break;
03611 case ',': memcpy( &temp, CPLOT_LARGEFONT_comma, CPLOT_LARGEFONT_NBYTES ); break;
03612 case '.': memcpy( &temp, CPLOT_LARGEFONT_point, CPLOT_LARGEFONT_NBYTES ); break;
03613 case '"': memcpy( &temp, CPLOT_LARGEFONT_doublequote, CPLOT_LARGEFONT_NBYTES ); break;
03614 case '<': memcpy( &temp, CPLOT_LARGEFONT_lessthan, CPLOT_LARGEFONT_NBYTES ); break;
03615 case '>': memcpy( &temp, CPLOT_LARGEFONT_morethan, CPLOT_LARGEFONT_NBYTES ); break;
03616 case '?': memcpy( &temp, CPLOT_LARGEFONT_questionmark, CPLOT_LARGEFONT_NBYTES ); break;
03617
03618 case '1': memcpy( &temp, CPLOT_LARGEFONT_One, CPLOT_LARGEFONT_NBYTES ); break;
03619 case '2': memcpy( &temp, CPLOT_LARGEFONT_Two, CPLOT_LARGEFONT_NBYTES ); break;
03620 case '3': memcpy( &temp, CPLOT_LARGEFONT_Three, CPLOT_LARGEFONT_NBYTES ); break;
03621 case '4': memcpy( &temp, CPLOT_LARGEFONT_Four, CPLOT_LARGEFONT_NBYTES ); break;
03622 case '5': memcpy( &temp, CPLOT_LARGEFONT_Five, CPLOT_LARGEFONT_NBYTES ); break;
03623 case '6': memcpy( &temp, CPLOT_LARGEFONT_Six, CPLOT_LARGEFONT_NBYTES ); break;
03624 case '7': memcpy( &temp, CPLOT_LARGEFONT_Seven, CPLOT_LARGEFONT_NBYTES ); break;
03625 case '8': memcpy( &temp, CPLOT_LARGEFONT_Eight, CPLOT_LARGEFONT_NBYTES ); break;
03626 case '9': memcpy( &temp, CPLOT_LARGEFONT_Nine, CPLOT_LARGEFONT_NBYTES ); break;
03627 case '0': memcpy( &temp, CPLOT_LARGEFONT_Zero, CPLOT_LARGEFONT_NBYTES ); break;
03628
03629 case -1: memcpy( &temp, CPLOT_LARGEFONT_sigma, CPLOT_LARGEFONT_NBYTES ); break;
03630
03631 default: break;
03632 }
03633
03634 if( isRotatedLeft )
03635 {
03636 for( row = 0; row < kSize; row++ )
03637 {
03638 for( col = 0; col < kSize; col++ )
03639 {
03640 rotatedleft[kSize - row - 1][col] = temp[col][row];
03641 }
03642 }
03643 }
03644
03645
03646 if( isRotatedLeft )
03647 {
03648 if( y < kSize )
03649 return 0;
03650
03651 if( x + kSize >= P->mImage.Width )
03652 return 0;
03653
03654 for( row = kSize - numCols; row < kSize; row++ )
03655 {
03656 for( col = 0; col < kSize; col++ )
03657 {
03658 if( rotatedleft[row][col] )
03659 P->mPlotData.data[y-row][x+col] = (rotatedleft[row][col]) * color;
03660 }
03661 }
03662 }
03663 else
03664 {
03665 if( y < kSize )
03666 return 0;
03667
03668 if( x + numCols >= P->mImage.Width )
03669 return 0;
03670
03671 for( row = 0; row < kSize; row++ )
03672 {
03673 for( col = 0; col < numCols; col++ )
03674 {
03675 if( temp[row][col] )
03676 P->mPlotData.data[y-row][x+col] = (temp[row][col]) * color;
03677 }
03678 }
03679 }
03680
03681 return numCols;
03682 }
03683
03684 BOOL CPLOT_DrawString(
03685 CPLOT *P,
03686 const char* str,
03687 const int left,
03688 const int top,
03689 const BOOL useLargeFont,
03690 const BOOL isRotatedLeft,
03691 const CPLOT_enumColor color
03692 )
03693 {
03694 int length;
03695
03696 int offset = 0,
03697 i = 0,
03698 letterWidth = 0;
03699
03700 if( str == NULL )
03701 return TRUE;
03702
03703 length = (int)strlen(str);
03704
03705 if( !P )
03706 return FALSE;
03707 if( !str )
03708 return FALSE;
03709
03710 if( left >= P->mImage.Width )
03711 return TRUE;
03712 if( top >= P->mImage.Height )
03713 return TRUE;
03714
03715 if( strstr( str, "\\sigma" ) )
03716 {
03717 letterWidth = CPLOT_DrawLargeLetter( P, -1, left, top + offset, isRotatedLeft, color );
03718 }
03719 else
03720 {
03721 for( i = 0; i < length; i++ )
03722 {
03723 if( isRotatedLeft )
03724 {
03725 if( top + offset > P->mImage.Height )
03726 break;
03727
03728 if( useLargeFont )
03729 letterWidth = CPLOT_DrawLargeLetter( P, str[i], left, top + offset, isRotatedLeft, color );
03730 else
03731 letterWidth = CPLOT_DrawSmallLetter( P, str[i], left, top + offset, isRotatedLeft, color );
03732 }
03733 else
03734 {
03735 if( left + offset > P->mImage.Width )
03736 break;
03737
03738 if( useLargeFont )
03739 letterWidth = CPLOT_DrawLargeLetter( P, str[i], left + offset, top, isRotatedLeft, color );
03740 else
03741 letterWidth = CPLOT_DrawSmallLetter( P, str[i], left + offset, top, isRotatedLeft, color );
03742
03743 }
03744 offset += letterWidth;
03745 }
03746 }
03747 return TRUE;
03748 }
03749
03750
03751
03752
03753 BOOL CPLOT_DrawValue(
03754 CPLOT *P,
03755 const BOOL leftalign,
03756 double value,
03757 const int left,
03758 const int top,
03759 const CPLOT_enumColor color
03760 )
03761 {
03762 const int kTextWidth = 6*13;
03763 char ValueBuffer[48];
03764 size_t length = 0;
03765
03766 if( !P )
03767 return FALSE;
03768
03769 ValueBuffer[0] = '\0';
03770
03771 if( leftalign )
03772 {
03773 #ifndef _CRT_SECURE_NO_DEPRECATE
03774 sprintf_s( ValueBuffer, 48, "%-13.7g", value );
03775 #else
03776 sprintf( ValueBuffer, "%-13.7g", value );
03777 #endif
03778 }
03779 else
03780 {
03781 #ifndef _CRT_SECURE_NO_DEPRECATE
03782 sprintf_s( ValueBuffer, 48, "%13.7g", value );
03783 #else
03784 sprintf( ValueBuffer, "%13.7g", value );
03785 #endif
03786 }
03787
03788
03789 if( (left + kTextWidth) >= P->mImage.Width )
03790 return TRUE;
03791 if( top >= P->mImage.Height )
03792 return TRUE;
03793
03794 length = strlen(ValueBuffer);
03795
03796 if( !CPLOT_DrawString( P, ValueBuffer, left, top, TRUE, FALSE, color ) )
03797 return FALSE;
03798
03799 return TRUE;
03800 }
03801
03802
03803
03804 BOOL CPLOT_ResizePlot( CPLOT *P )
03805 {
03806
03807
03808
03809
03810
03811
03812
03813
03814
03815
03816
03817
03818
03819
03820
03821
03822
03823
03824
03825 int previousWidth = 0;
03826 int rem = 0;
03827
03828 if( !P )
03829 return FALSE;
03830
03831 if( P->mOptions.PlotSize_Width_cm % 2 )
03832 P->mAxes.Width = P->mOptions.PlotSize_Width_cm*CPLOT_PIXELS_PER_CM + 2;
03833 else
03834 P->mAxes.Width = P->mOptions.PlotSize_Width_cm*CPLOT_PIXELS_PER_CM;
03835
03836 P->mAxes.Height = P->mOptions.PlotSize_Height_cm*CPLOT_PIXELS_PER_CM;
03837
03838 if( P->mOptions.title == NULL )
03839 P->mTitleAllowance = 50;
03840
03841 if( P->mOptions.x.label == NULL )
03842 P->mXLabelAllowance = 15;
03843
03844 if( P->mOptions.y_label_right != NULL )
03845 P->mRightYLabelAllowance = 112;
03846
03847 previousWidth = P->mImage.Width;
03848 P->mImage.Width = P->mAxes.Width + P->mRightYLabelAllowance + P->mYLabelAllowance;
03849
03850
03851 rem = P->mImage.Width%4;
03852 P->mImage.Width += rem;
03853
03854 P->mImage.Height = P->mAxes.Height + P->mXLabelAllowance + P->mTitleAllowance;
03855
03856 if( P->mImage.Width < 700 &&
03857 P->mOptions.plotStatistics &&
03858 P->mOptions.plotLabelOnRight == FALSE )
03859 {
03860 P->mImage.Width = 700;
03861 }
03862
03863
03864 P->mAxes.StartX = P->mYLabelAllowance;
03865 P->mAxes.FinishX = P->mAxes.StartX + P->mAxes.Width;
03866
03867 P->mAxes.StartY = P->mXLabelAllowance;
03868 P->mAxes.FinishY = P->mAxes.StartY + P->mAxes.Height;
03869
03870
03871
03872
03873
03874
03875 if( P->mOptions.plotLabelOnRight )
03876 {
03877 if( P->mOptions.plotStatistics )
03878 {
03879 P->mLabelWidth = 112;
03880 switch( P->mOptions.numberOfSeries )
03881 {
03882 case 1:
03883 case 2:
03884 case 3: P->mImage.Width += P->mOptions.numberOfSeries*P->mLabelWidth + 44; break;
03885 case 4:
03886 case 5:
03887 case 6:
03888 case 7:
03889 case 8:
03890 case 9:
03891 case 10:
03892 case 11:
03893 case 12: P->mImage.Width += 3*P->mLabelWidth + 44; break;
03894 default: break;
03895 }
03896 }
03897 else
03898 {
03899 P->mImage.Width += 120;
03900 }
03901 }
03902 else
03903 {
03904 P->mImage.Height += P->mOptions.numberOfSeries*20 + 20;
03905 P->mAxes.StartY += P->mOptions.numberOfSeries*20 + 20;
03906 P->mAxes.FinishY += P->mOptions.numberOfSeries*20 + 20;
03907 }
03908
03909 if( previousWidth > P->mImage.Width )
03910 P->mImage.Width = previousWidth;
03911
03912
03913 rem = P->mImage.Width%4;
03914 P->mImage.Width += rem;
03915
03916
03917 if( !CPLOT_BYTE_MTX_calloc( &(P->mPlotData), P->mImage.Height, P->mImage.Width ) )
03918 return FALSE;
03919
03920 return TRUE;
03921 }
03922
03923
03924 BOOL CPLOT_IsNAN( double value )
03925 {
03926 #ifdef WIN32
03927 if( _isnan( value ) )
03928 return TRUE;
03929 else
03930 return FALSE;
03931 #else
03932 if( isnan( value ) )
03933 return TRUE;
03934 else
03935 return FALSE;
03936 #endif
03937 }
03938
03939
03940
03941 BOOL CPLOT_IsPostiveINF( double value )
03942 {
03943 #ifdef WIN32
03944 if( _finite( value ) )
03945 {
03946 return FALSE;
03947 }
03948 else
03949 {
03950 if( value > 0 )
03951 return TRUE;
03952 else
03953 return FALSE;
03954 }
03955 #else
03956 if( isfinite( value ) )
03957 {
03958 return FALSE;
03959 }
03960 else
03961 {
03962 if( value > 0 )
03963 return TRUE;
03964 else
03965 return FALSE;
03966 }
03967 #endif
03968 }
03969
03970
03971 BOOL CPLOT_IsNegativeINF( double value )
03972 {
03973 #ifdef WIN32
03974 if( _finite( value ) )
03975 {
03976 return FALSE;
03977 }
03978 else
03979 {
03980 if( value < 0 )
03981 return TRUE;
03982 else
03983 return FALSE;
03984 }
03985 #else
03986 if( isfinite( value ) )
03987 {
03988 return FALSE;
03989 }
03990 else
03991 {
03992 if( value < 0 )
03993 return TRUE;
03994 else
03995 return FALSE;
03996 }
03997 #endif
03998 }
03999
04000
04001
04002
04003 BOOL CPLOT_DetermineSeriesStatistics( CPLOT_structSeries *series )
04004 {
04005 int i;
04006 int n;
04007 int n_tmp;
04008 int index_a;
04009 int index_b;
04010 double sumx2 = 0;
04011 double sumx = 0;
04012 BOOL isIPPSEnabled = FALSE;
04013 BOOL computeStats = TRUE;
04014
04015 if( !series )
04016 return FALSE;
04017
04018 index_a = index_b = 0;
04019 n = series->n;
04020
04021 memset( &(series->xStats), 0, sizeof(CPLOT_structStats) );
04022 memset( &(series->yStats), 0, sizeof(CPLOT_structStats) );
04023
04024 if( n == 0 )
04025 {
04026 return TRUE;
04027 }
04028
04029 if( n == 1 )
04030 {
04031 series->xStats.min = series->X[0];
04032 series->xStats.max = series->X[0];
04033 series->xStats.mean = series->X[0];
04034 series->xStats.stdev = 0.0;
04035 series->xStats.rms = series->X[0];
04036 series->xStats.range = 0.0;
04037
04038 series->yStats.min = series->Y[0];
04039 series->yStats.max = series->Y[0];
04040 series->yStats.mean = series->Y[0];
04041 series->yStats.stdev = 0.0;
04042 series->yStats.rms = series->Y[0];
04043 series->yStats.range = 0.0;
04044 return TRUE;
04045 }
04046
04047 #ifdef INTEL_IPPS
04048
04049 isIPPSEnabled = TRUE;
04050
04051 if( ippsMinMaxIndx_64f( series->X, n, &(series->xStats.min), &index_a, &(series->xStats.max), &index_b ) != ippStsNoErr )
04052 return FALSE;
04053 if( series->xStats.min > series->X[index_a] )
04054 series->xStats.min = series->X[index_a];
04055 if( series->xStats.max < series->X[index_b] )
04056 series->xStats.max = series->X[index_b];
04057
04058 if( ippsMinMaxIndx_64f( series->Y, n, &(series->yStats.min), &index_a, &(series->yStats.max), &index_b ) != ippStsNoErr )
04059 return FALSE;
04060 if( series->yStats.min > series->Y[index_a] )
04061 series->yStats.min = series->Y[index_a];
04062 if( series->yStats.max < series->Y[index_b] )
04063 series->yStats.max = series->Y[index_b];
04064
04065 series->xStats.range = series->xStats.max - series->xStats.min;
04066 series->yStats.range = series->yStats.max - series->yStats.min;
04067
04068 if( ippsSum_64f( series->X, n, &(series->xStats.mean) ) != ippStsNoErr )
04069 return FALSE;
04070 series->xStats.mean /= (double)(n);
04071
04072 if( ippsSum_64f( series->Y, n, &(series->yStats.mean) ) != ippStsNoErr )
04073 return FALSE;
04074 series->yStats.mean /= (double)(n);
04075
04076
04077 if( ippsNorm_L2_64f( series->X, n, &(series->xStats.rms) ) != ippStsNoErr )
04078 return FALSE;
04079 series->xStats.rms /= sqrt( (double)(n));
04080 if( ippsNorm_L2_64f( series->Y, n, &(series->yStats.rms) ) != ippStsNoErr )
04081 return FALSE;
04082 series->yStats.rms /= sqrt( (double)(n));
04083
04084 computeStats = FALSE;
04085
04086 #endif
04087
04088 if( isIPPSEnabled )
04089 {
04090
04091 do
04092 {
04093 if( CPLOT_IsNAN( series->xStats.min ) || CPLOT_IsPostiveINF( series->xStats.min ) || CPLOT_IsNegativeINF( series->xStats.min ) )
04094 {
04095 computeStats = TRUE;
04096 break;
04097 }
04098 if( CPLOT_IsNAN( series->xStats.max ) || CPLOT_IsPostiveINF( series->xStats.max ) || CPLOT_IsNegativeINF( series->xStats.max ) )
04099 {
04100 computeStats = TRUE;
04101 break;
04102 }
04103 if( CPLOT_IsNAN( series->xStats.mean ) || CPLOT_IsPostiveINF( series->xStats.mean ) || CPLOT_IsNegativeINF( series->xStats.mean ) )
04104 {
04105 computeStats = TRUE;
04106 break;
04107 }
04108 if( CPLOT_IsNAN( series->xStats.rms ) || CPLOT_IsPostiveINF( series->xStats.rms ) || CPLOT_IsNegativeINF( series->xStats.rms ) )
04109 {
04110 computeStats = TRUE;
04111 break;
04112 }
04113 }while(0);
04114 }
04115
04116
04117
04118 if( computeStats )
04119 {
04120 series->xStats.min = DBL_MAX;
04121 series->xStats.max = -DBL_MAX;
04122 n_tmp = 0;
04123 for( i = 0; i < n; i++ )
04124 {
04125
04126 if( CPLOT_IsNAN( series->X[i] ) || CPLOT_IsPostiveINF( series->X[i] ) || CPLOT_IsNegativeINF( series->X[i] ) )
04127 continue;
04128
04129 if( series->X[i] < series->xStats.min )
04130 {
04131 series->xStats.min = series->X[i];
04132 }
04133 if( series->X[i] > series->xStats.max )
04134 {
04135 series->xStats.max = series->X[i];
04136 }
04137 series->xStats.mean += series->X[i];
04138 n_tmp++;
04139 }
04140 series->xStats.range = series->xStats.max - series->xStats.min;
04141 if( n_tmp )
04142 {
04143 series->xStats.mean /= (double)(n_tmp);
04144 }
04145
04146
04147 series->yStats.min = DBL_MAX;
04148 series->yStats.max = -DBL_MAX;
04149 n_tmp = 0;
04150 for( i = 0; i < n; i++ )
04151 {
04152
04153 if( CPLOT_IsNAN( series->Y[i] ) || CPLOT_IsPostiveINF( series->Y[i] ) || CPLOT_IsNegativeINF( series->Y[i] ) )
04154 continue;
04155
04156 if( series->Y[i] < series->yStats.min )
04157 {
04158 series->yStats.min = series->Y[i];
04159 }
04160 if( series->Y[i] > series->yStats.max )
04161 {
04162 series->yStats.max = series->Y[i];
04163 }
04164 series->yStats.mean += series->Y[i];
04165 n_tmp++;
04166 }
04167 series->yStats.range = series->yStats.max - series->yStats.min;
04168 if( n_tmp )
04169 {
04170 series->yStats.mean /= (double)(n_tmp);
04171 }
04172
04173
04174 series->xStats.rms = 0;
04175 n_tmp = 0;
04176 for( i = 0; i < n; i++ )
04177 {
04178 if( !CPLOT_IsNAN( series->X[i] ) )
04179 {
04180 series->xStats.rms += series->X[i] * series->X[i];
04181 n_tmp++;
04182 }
04183 }
04184 if( n_tmp )
04185 {
04186 series->xStats.rms /= (double)(n_tmp);
04187 series->xStats.rms = sqrt(series->xStats.rms);
04188 }
04189
04190 series->yStats.rms = 0;
04191 n_tmp = 0;
04192 for( i = 0; i < n; i++ )
04193 {
04194 if( !CPLOT_IsNAN( series->Y[i] ) )
04195 {
04196 series->yStats.rms += series->Y[i] * series->Y[i];
04197 n_tmp++;
04198 }
04199 }
04200 if( n_tmp )
04201 {
04202 series->yStats.rms /= (double)(n_tmp);
04203 series->yStats.rms = sqrt(series->yStats.rms);
04204 }
04205 }
04206
04207
04208 n_tmp = 0;
04209 for( i = 0; i < n; i++ )
04210 {
04211 if( !CPLOT_IsNAN( series->X[i] ) )
04212 {
04213 sumx += series->X[i];
04214 sumx2 += series->X[i]*series->X[i];
04215 n_tmp++;
04216 }
04217 }
04218 if( CPLOT_IsPostiveINF( sumx2 ) )
04219 {
04220 series->xStats.stdev = sumx2;
04221 }
04222 else
04223 {
04224 series->xStats.stdev = (n_tmp*sumx2 - sumx*sumx) / (n_tmp*(n_tmp-1.0));
04225 series->xStats.stdev = sqrt(series->xStats.stdev);
04226 }
04227
04228 n_tmp = 0;
04229 sumx = 0;
04230 sumx2 = 0;
04231 for( i = 0; i < n; i++ )
04232 {
04233 if( !CPLOT_IsNAN( series->Y[i] ) )
04234 {
04235 sumx += series->Y[i];
04236 sumx2 += series->Y[i]*series->Y[i];
04237 n_tmp++;
04238 }
04239 }
04240 if( CPLOT_IsPostiveINF( sumx2 ) )
04241 {
04242 series->xStats.stdev = sumx2;
04243 }
04244 else
04245 {
04246 series->yStats.stdev = (n_tmp*sumx2 - sumx*sumx) / (n_tmp*(n_tmp-1.0));
04247 series->yStats.stdev = sqrt(series->yStats.stdev);
04248 }
04249
04250 return TRUE;
04251 }
04252
04253
04254 BOOL CPLOT_DetermineScaleFactors( CPLOT *P, CPLOT_structSeries *Series )
04255 {
04256 double val = 0;
04257 typedef struct
04258 {
04259 double lowerlimit;
04260 double upperlimit;
04261 double tickstart;
04262 double ticksize;
04263 double tickend;
04264 } _structAxis;
04265 _structAxis x;
04266 _structAxis y;
04267
04268 if( !P )
04269 return FALSE;
04270
04271
04272
04273
04274
04275 if( !P->mOptions.x.lowerlimit.doNotUseDefault &&
04276 !P->mOptions.x.upperlimit.doNotUseDefault &&
04277 !P->mOptions.x.tickstart.doNotUseDefault &&
04278 !P->mOptions.x.tickend.doNotUseDefault )
04279 {
04280 val = Series->xStats.min;
04281 if( val < 0 )
04282 {
04283 val = -ceil( -val * 10.0 ) / 10.0;
04284 }
04285 else
04286 {
04287 val = floor( val * 10.0 ) / 10.0;
04288 }
04289 x.lowerlimit = val;
04290
04291 val = Series->xStats.max;
04292 if( val < 0 )
04293 {
04294 val = -floor( -val * 10.0 ) / 10.0;
04295 }
04296 else
04297 {
04298 val = ceil( val * 10.0 ) / 10.0;
04299 }
04300 x.upperlimit = val;
04301
04302
04303 if( x.lowerlimit == x.upperlimit )
04304 {
04305 x.lowerlimit -= x.lowerlimit/100.0;
04306 x.upperlimit += x.upperlimit/100.0;
04307 }
04308
04309 x.tickstart = x.lowerlimit;
04310 x.ticksize = (x.upperlimit-x.lowerlimit)/5.0;
04311 x.tickend = x.upperlimit;
04312 }
04313 else
04314 {
04315
04316
04317 if( P->mOptions.x.lowerlimit.doNotUseDefault )
04318 x.lowerlimit = P->mOptions.x.lowerlimit.val;
04319 else
04320 x.lowerlimit = Series->xStats.min;
04321
04322 if( P->mOptions.x.upperlimit.doNotUseDefault )
04323 x.upperlimit = P->mOptions.x.upperlimit.val;
04324 else
04325 x.upperlimit = Series->xStats.max;
04326
04327 if( P->mOptions.x.tickstart.doNotUseDefault )
04328 x.tickstart = P->mOptions.x.tickstart.val;
04329 else
04330 x.tickstart = x.lowerlimit;
04331
04332 if( P->mOptions.x.tickend.doNotUseDefault )
04333 x.tickend = P->mOptions.x.tickend.val;
04334 else
04335 x.tickend = x.upperlimit;
04336
04337 if( P->mOptions.x.ticksize.doNotUseDefault )
04338 x.ticksize = P->mOptions.x.ticksize.val;
04339 else
04340 x.ticksize = (x.tickend - x.tickstart)/5.0;
04341 }
04342 if( x.lowerlimit == x.upperlimit )
04343 return FALSE;
04344 if( x.tickstart == x.tickend )
04345 return FALSE;
04346 if( x.ticksize <= 0.0 )
04347 return FALSE;
04348
04349
04350
04351
04352 if( !P->mOptions.y.lowerlimit.doNotUseDefault &&
04353 !P->mOptions.y.upperlimit.doNotUseDefault &&
04354 !P->mOptions.y.tickstart.doNotUseDefault &&
04355 !P->mOptions.y.tickend.doNotUseDefault )
04356 {
04357 val = Series->yStats.min;
04358 if( val < 0 )
04359 {
04360 val = -ceil( -val * 10.0 ) / 10.0;
04361 }
04362 else
04363 {
04364 val = floor( val * 10.0 ) / 10.0;
04365 }
04366 y.lowerlimit = val;
04367
04368 val = Series->yStats.max;
04369 if( val < 0 )
04370 {
04371 val = -floor( -val * 10.0 ) / 10.0;
04372 }
04373 else
04374 {
04375 val = ceil( val * 10.0 ) / 10.0;
04376 }
04377 y.upperlimit = val;
04378
04379
04380 if( y.lowerlimit == y.upperlimit )
04381 {
04382 y.lowerlimit -= y.lowerlimit/100.0;
04383 y.upperlimit += y.upperlimit/100.0;
04384 }
04385
04386 y.tickstart = y.lowerlimit;
04387 y.ticksize = (y.upperlimit-y.lowerlimit)/10.0;
04388 y.tickend = y.upperlimit;
04389 }
04390 else
04391 {
04392
04393
04394 if( P->mOptions.y.lowerlimit.doNotUseDefault )
04395 y.lowerlimit = P->mOptions.y.lowerlimit.val;
04396 else
04397 y.lowerlimit = Series->yStats.min;
04398
04399 if( P->mOptions.y.upperlimit.doNotUseDefault )
04400 y.upperlimit = P->mOptions.y.upperlimit.val;
04401 else
04402 y.upperlimit = Series->yStats.max;
04403
04404 if( P->mOptions.y.tickstart.doNotUseDefault )
04405 y.tickstart = P->mOptions.y.tickstart.val;
04406 else
04407 y.tickstart = y.lowerlimit;
04408
04409 if( P->mOptions.y.tickend.doNotUseDefault )
04410 y.tickend = P->mOptions.y.tickend.val;
04411 else
04412 y.tickend = y.upperlimit;
04413
04414 if( P->mOptions.y.ticksize.doNotUseDefault )
04415 y.ticksize = P->mOptions.y.ticksize.val;
04416 else
04417 y.ticksize = (y.tickend - y.tickstart)/10.0;
04418 }
04419 if( y.lowerlimit == y.upperlimit )
04420 return FALSE;
04421 if( y.tickstart == y.tickend )
04422 return FALSE;
04423 if( y.ticksize <= 0.0 )
04424 return FALSE;
04425
04426
04427
04428 P->mOptions.x.lowerlimit.val = x.lowerlimit;
04429 P->mOptions.x.upperlimit.val = x.upperlimit;
04430 P->mOptions.x.tickstart.val = x.tickstart;
04431 P->mOptions.x.ticksize.val = x.ticksize;
04432 P->mOptions.x.tickend.val = x.tickend;
04433
04434 P->mOptions.x.lowerlimit.doNotUseDefault = TRUE;
04435 P->mOptions.x.upperlimit.doNotUseDefault = TRUE;
04436 P->mOptions.x.tickstart.doNotUseDefault = TRUE;
04437 P->mOptions.x.ticksize.doNotUseDefault = TRUE;
04438 P->mOptions.x.tickend.doNotUseDefault = TRUE;
04439
04440 P->mOptions.y.lowerlimit.val = y.lowerlimit;
04441 P->mOptions.y.upperlimit.val = y.upperlimit;
04442 P->mOptions.y.tickstart.val = y.tickstart;
04443 P->mOptions.y.ticksize.val = y.ticksize;
04444 P->mOptions.y.tickend.val = y.tickend;
04445
04446 P->mOptions.y.lowerlimit.doNotUseDefault = TRUE;
04447 P->mOptions.y.upperlimit.doNotUseDefault = TRUE;
04448 P->mOptions.y.tickstart.doNotUseDefault = TRUE;
04449 P->mOptions.y.ticksize.doNotUseDefault = TRUE;
04450 P->mOptions.y.tickend.doNotUseDefault = TRUE;
04451
04452
04453 P->mData.RangeX = x.upperlimit - x.lowerlimit;
04454 P->mData.RangeY = y.upperlimit - y.lowerlimit;
04455
04456 if( CPLOT_IsPostiveINF( P->mData.RangeX ) )
04457 {
04458 return FALSE;
04459 }
04460 if( CPLOT_IsPostiveINF( P->mData.RangeY ) )
04461 {
04462 return FALSE;
04463 }
04464
04465 if( P->mData.RangeX == 0.0 )
04466 P->mData.RangeX = 0.1;
04467 if( P->mData.RangeY == 0.0 )
04468 P->mData.RangeY = 0.1;
04469
04470 P->mData.OnePercentRangeX = P->mData.RangeX / 100.0;
04471 P->mData.OnePercentRangeY = P->mData.RangeY / 100.0;
04472 P->mData.ScaleX = P->mAxes.Width / P->mData.RangeX;
04473 P->mData.ScaleY = P->mAxes.Height / P->mData.RangeY;
04474
04475 P->mData.MinX = x.lowerlimit;
04476 P->mData.MaxX = x.upperlimit;
04477 P->mData.MinY = y.lowerlimit;
04478 P->mData.MaxY = y.upperlimit;
04479
04480 P->mData.xtickstart = x.tickstart;
04481 P->mData.xtickend = x.tickend;
04482 P->mData.ytickstart = y.tickstart;
04483 P->mData.ytickend = y.tickend;
04484
04485 P->mData.xticksize = x.ticksize;
04486 P->mData.yticksize = y.ticksize;
04487
04488 return TRUE;
04489 }
04490
04491
04492 BOOL CPLOT_GPSLabel( CPLOT *P, double tow, const int x )
04493 {
04494
04495 int sec_since_midnight = 0,
04496 hour = 0,
04497 minute = 0,
04498 second = 0,
04499 scount = 0;
04500 char timeString[64];
04501
04502 if( !P )
04503 return FALSE;
04504
04505 if( tow < 0 )
04506 return FALSE;
04507
04508 tow += P->mOptions.UTCOffset;
04509
04510 sec_since_midnight = (int)floor( fmod( tow, 86400.0 ) );
04511 hour = sec_since_midnight / 3600;
04512 sec_since_midnight -= hour*3600;
04513
04514 minute = sec_since_midnight / 60;
04515 sec_since_midnight -= minute*60;
04516 second = sec_since_midnight;
04517
04518 if( hour < 10 )
04519 {
04520 #ifndef _CRT_SECURE_NO_DEPRECATE
04521 scount += sprintf_s( timeString+scount, 64-scount, "0%d:", hour );
04522 #else
04523 scount += sprintf( timeString+scount, "0%d:", hour );
04524 #endif
04525 }
04526 else
04527 {
04528 #ifndef _CRT_SECURE_NO_DEPRECATE
04529 scount += sprintf_s( timeString+scount, 64-scount, "%d:", hour );
04530 #else
04531 scount += sprintf( timeString+scount, "%d:", hour );
04532 #endif
04533 }
04534 if( minute < 10 )
04535 {
04536 #ifndef _CRT_SECURE_NO_DEPRECATE
04537 scount += sprintf_s( timeString+scount, 64-scount, "0%d:", minute );
04538 #else
04539 scount += sprintf( timeString+scount, "0%d:", minute );
04540 #endif
04541 }
04542 else
04543 {
04544 #ifndef _CRT_SECURE_NO_DEPRECATE
04545 scount += sprintf_s( timeString+scount, 64-scount, "%d:", minute );
04546 #else
04547 scount += sprintf( timeString+scount, "%d:", minute );
04548 #endif
04549 }
04550 if( second < 10 )
04551 {
04552 #ifndef _CRT_SECURE_NO_DEPRECATE
04553 scount += sprintf_s( timeString+scount, 64-scount, "0%d", second );
04554 #else
04555 scount += sprintf( timeString+scount, "0%d", second );
04556 #endif
04557 }
04558 else
04559 {
04560 #ifndef _CRT_SECURE_NO_DEPRECATE
04561 scount += sprintf_s( timeString+scount, 64-scount, "%d", second );
04562 #else
04563 scount += sprintf( timeString+scount, "%d", second );
04564 #endif
04565 }
04566
04567 if( !CPLOT_DrawString( P, timeString, x, P->mAxes.StartY - 20, TRUE, FALSE, CPLOT_BLACK ) )
04568 return FALSE;
04569
04570 return TRUE;
04571 }
04572
04573
04574 BOOL CPLOT_Title(
04575 CPLOT *P,
04576 const char* title
04577 )
04578 {
04579 int length;
04580 int hpos;
04581
04582 if( !P )
04583 return FALSE;
04584 if( !title )
04585 return FALSE;
04586
04587 length = (int)strlen(title)*CPLOT_SMALLFONT_WIDTH;
04588
04589 hpos = P->mAxes.StartX/2 + (P->mAxes.Width - length) / 2;
04590
04591 if( hpos < 0 )
04592 return TRUE;
04593
04594 if( !CPLOT_DrawString( P, title, hpos, P->mAxes.FinishY + 30, TRUE, FALSE, CPLOT_BLACK ) )
04595 return FALSE;
04596
04597 return TRUE;
04598 }
04599
04600 BOOL CPLOT_xLabel(
04601 CPLOT *P,
04602 const char* label
04603 )
04604 {
04605 int length;
04606 int hpos;
04607
04608 if( !P )
04609 return FALSE;
04610 if( !label )
04611 return FALSE;
04612
04613 length = (int)strlen(label)*CPLOT_SMALLFONT_WIDTH;
04614
04615 hpos = P->mAxes.StartX/2 + (P->mAxes.Width - length) / 2;
04616
04617 if( hpos < 0 )
04618 return TRUE;
04619
04620 if( !CPLOT_DrawString( P, label, hpos, P->mAxes.StartY - 35, TRUE, FALSE, CPLOT_BLACK ) )
04621 return FALSE;
04622
04623 return TRUE;
04624 }
04625
04626
04627 BOOL CPLOT_yLabel(
04628 CPLOT *P,
04629 const char* label,
04630 BOOL onLeft
04631 )
04632 {
04633 int length;
04634 int vpos;
04635
04636 if( !P )
04637 return FALSE;
04638 if( !label )
04639 return FALSE;
04640
04641 length = (int)strlen(label)*CPLOT_SMALLFONT_WIDTH;
04642
04643 vpos = P->mAxes.StartY + (P->mAxes.Height - length) / 2;
04644
04645 if( vpos < 0 )
04646 return TRUE;
04647
04648 if( onLeft )
04649 {
04650 if( !CPLOT_DrawString( P, label, 8, vpos, TRUE, TRUE, CPLOT_BLACK ) )
04651 return FALSE;
04652 }
04653 else
04654 {
04655 if( !CPLOT_DrawString( P, label, P->mAxes.FinishX+80, vpos, TRUE, TRUE, P->mOptions.RightYLabelColor ) )
04656 return FALSE;
04657 }
04658 return TRUE;
04659 }
04660
04661
04662
04663 BOOL CPLOT_DrawPoint(
04664 CPLOT *P,
04665 const int x,
04666 const int y,
04667 const CPLOT_enumColor color
04668 )
04669 {
04670 int i;
04671 int j;
04672
04673 if( !P )
04674 return FALSE;
04675
04676 if( y < 3 )
04677 return TRUE;
04678
04679 if( x + 3 >= P->mImage.Width )
04680 return TRUE;
04681
04682 for( i = 0; i < CPLOT_POINT_SIZE; i++ )
04683 {
04684 for( j = 0; j < CPLOT_POINT_SIZE; j++ )
04685 {
04686
04687 if( CPLOT_Point[i][j] )
04688 {
04689 if( y-i+2 >= (int)P->mPlotData.nrows )
04690 return FALSE;
04691 if( x+j-2 >= (int)P->mPlotData.ncols )
04692 return FALSE;
04693 P->mPlotData.data[y-i+2][x+j-2] = color;
04694 }
04695 }
04696 }
04697 return TRUE;
04698 }
04699
04700
04701
04702 BOOL CPLOT_DrawLargePoint(
04703 CPLOT *P,
04704 const int x,
04705 const int y,
04706 const CPLOT_enumColor color
04707 )
04708 {
04709 int i;
04710 int j;
04711
04712 if( !P )
04713 return FALSE;
04714
04715 if( y < 3 )
04716 return TRUE;
04717
04718 if( x + 3 >= P->mImage.Width )
04719 return TRUE;
04720
04721 for( i = 0; i < CPLOT_LARGEPOINT_SIZE; i++ )
04722 {
04723 for( j = 0; j < CPLOT_LARGEPOINT_SIZE; j++ )
04724 {
04725
04726 if( CPLOT_LargePoint[i][j] )
04727 {
04728 if( y-i+2 >= (int)P->mPlotData.nrows )
04729 return FALSE;
04730 if( x+j-2 >= (int)P->mPlotData.ncols )
04731 return FALSE;
04732 P->mPlotData.data[y-i+2][x+j-2] = color;
04733 }
04734 }
04735 }
04736 return TRUE;
04737 }
04738
04739
04740
04741
04742
04743 BOOL CPLOT_DrawLegendLabel(
04744 CPLOT *P,
04745 const char* label,
04746 const char* units,
04747 const CPLOT_enumColor color
04748 )
04749 {
04750 int ypos = 0;
04751 int xpos = 0;
04752 int xoffset = P->mRightYLabelAllowance + 47;
04753 char buffer[128];
04754
04755 if( !P )
04756 return FALSE;
04757 if( !label )
04758 return FALSE;
04759
04760 if( strlen(label) < 1 )
04761 return FALSE;
04762
04763 if( P->mOptions.plotLabelOnRight )
04764 {
04765 if( P->mOptions.plotStatistics )
04766 {
04767 switch( P->mSeriesIndex )
04768 {
04769 case 0:
04770 case 1:
04771 case 2:
04772 xpos = P->mAxes.FinishX + xoffset + P->mSeriesIndex*P->mLabelWidth;
04773 ypos = P->mAxes.FinishY - 8;
04774 break;
04775 case 3:
04776 case 4:
04777 case 5:
04778 xpos = P->mAxes.FinishX + xoffset + (P->mSeriesIndex-3)*P->mLabelWidth;
04779 ypos = P->mAxes.FinishY - 8 - (P->mSeriesIndex/3)*(P->mStatsValueHeight*8);
04780 break;
04781 case 6:
04782 case 7:
04783 case 8:
04784 xpos = P->mAxes.FinishX + xoffset + (P->mSeriesIndex-6)*P->mLabelWidth;
04785 ypos = P->mAxes.FinishY - 8 - (P->mSeriesIndex/3)*(P->mStatsValueHeight*8);
04786 break;
04787 case 9:
04788 case 10:
04789 case 11:
04790 xpos = P->mAxes.FinishX + xoffset + (P->mSeriesIndex-9)*P->mLabelWidth;
04791 ypos = P->mAxes.FinishY - 8 - (P->mSeriesIndex/3)*(P->mStatsValueHeight*8);
04792 break;
04793 default:
04794 return TRUE;
04795 }
04796 if( !CPLOT_DrawLargePoint( P, xpos - 5, ypos-6, color ) )
04797 return FALSE;
04798
04799
04800 if( !CPLOT_DrawString( P, label, xpos, ypos, TRUE, FALSE, color ) )
04801 return FALSE;
04802 if( !CPLOT_DrawString( P, units, xpos, ypos - P->mStatsValueHeight, TRUE, FALSE, color ) )
04803 return FALSE;
04804 }
04805 else
04806 {
04807 xpos = P->mAxes.FinishX + P->mRightYLabelAllowance;
04808 ypos = P->mAxes.FinishY - 16*(P->mSeriesIndex) - P->mStatsValueHeight*8;
04809 if( !CPLOT_DrawLargePoint( P, xpos - 8, ypos, color ) )
04810 return FALSE;
04811
04812
04813 if( units && label )
04814 {
04815 #ifndef _CRT_SECURE_NO_DEPRECATE
04816 sprintf_s( buffer, 128, "%s %s", label, units );
04817 #else
04818 sprintf( buffer, "%s %s", label, units );
04819 #endif
04820 }
04821 else if ( label )
04822 {
04823 #ifndef _CRT_SECURE_NO_DEPRECATE
04824 sprintf_s( buffer, 128, "%s", label );
04825 #else
04826 sprintf( buffer, "%s", label );
04827 #endif
04828 }
04829 else
04830 buffer[0] = '\0';
04831 if( !CPLOT_DrawString( P, buffer, xpos, ypos + 3, TRUE, FALSE, CPLOT_BLACK ) )
04832 return FALSE;
04833 }
04834 }
04835 else
04836 {
04837 xpos = 16;
04838 ypos = P->mAxes.StartY - P->mXLabelAllowance - 8 - P->mStatsValueHeight*(P->mSeriesIndex+1);
04839 if( !CPLOT_DrawLargePoint( P, xpos - 8, ypos - 5, color ) )
04840 return FALSE;
04841
04842
04843 if( !CPLOT_DrawString( P, label, xpos, ypos, TRUE, FALSE, CPLOT_BLACK ) )
04844 return FALSE;
04845 if( !CPLOT_DrawString( P, units, 600, ypos, TRUE, FALSE, color ) )
04846 return FALSE;
04847 }
04848 return TRUE;
04849 }
04850
04851
04852
04853
04854
04855 BOOL CPLOT_DrawAxes(
04856 CPLOT *P,
04857 CPLOT_structSeries *Series,
04858 const CPLOT_enumColor color
04859 )
04860 {
04861 double x = 0.0;
04862 double y = 0.0;
04863
04864 double xTickRange = 0;
04865 double yTickRange = 0;
04866
04867 int xtick;
04868 int ytick;
04869
04870
04871
04872 if( !CPLOT_ResizePlot(P) )
04873 return FALSE;
04874
04875
04876 if( !P->mOptions.redrawAxes )
04877 {
04878 CPLOT_BYTE_MTX_Fill( &(P->mPlotData), P->mOptions.figureBackgroundColor );
04879 }
04880
04881
04882
04883 if( !CPLOT_DrawLine( P, P->mAxes.StartX, P->mAxes.StartY, P->mAxes.FinishX, P->mAxes.StartY, color) )
04884 return FALSE;
04885 if( !CPLOT_DrawLine( P, P->mAxes.StartX, P->mAxes.StartY, P->mAxes.StartX, P->mAxes.FinishY, color) )
04886 return FALSE;
04887 if( !CPLOT_DrawLine( P, P->mAxes.StartX, P->mAxes.FinishY, P->mAxes.FinishX, P->mAxes.FinishY, color) )
04888 return FALSE;
04889 if( !CPLOT_DrawLine( P, P->mAxes.FinishX, P->mAxes.StartY, P->mAxes.FinishX, P->mAxes.FinishY, color) )
04890 return FALSE;
04891
04892
04893 if( !CPLOT_DetermineScaleFactors( P, Series ) )
04894 return FALSE;
04895
04896 xTickRange = P->mData.xtickend - P->mData.xtickstart;
04897 yTickRange = P->mData.ytickend - P->mData.ytickstart;
04898
04899
04900 for( x = P->mData.xtickstart; x <= P->mData.xtickend + P->mData.OnePercentRangeX; x += P->mData.xticksize )
04901 {
04902 if( Series->xStats.range > 1e-6 )
04903 {
04904 if( fabs(x) < 1e-6 )
04905 x = 0;
04906 }
04907 xtick = (int)( (x - P->mData.MinX)*P->mData.ScaleX ) + P->mAxes.StartX;
04908
04909 if( !CPLOT_DrawLine( P, xtick, P->mAxes.StartY, xtick, P->mAxes.StartY + P->mAxes.TickDashInPixels, CPLOT_BLACK ) )
04910 return FALSE;
04911 if( !CPLOT_DrawLine( P, xtick, P->mAxes.FinishY - P->mAxes.TickDashInPixels , xtick, P->mAxes.FinishY, CPLOT_BLACK ) )
04912 return FALSE;
04913
04914 if( P->mOptions.x.label )
04915 {
04916 if( !CPLOT_DrawValue( P, TRUE, x, xtick - 3, P->mAxes.StartY - 5, color ) )
04917 return FALSE;
04918
04919 if( P->mOptions.useGPSLabel )
04920 CPLOT_GPSLabel( P, x, xtick - 3 );
04921 }
04922 if( P->mOptions.x.isGridOn )
04923 {
04924 if( !CPLOT_DrawDashedLine( P, xtick, P->mAxes.StartY, xtick, P->mAxes.FinishY, 2, color ) )
04925 return FALSE;
04926 }
04927 }
04928
04929
04930 for( y = P->mData.ytickstart; y <= P->mData.ytickend + P->mData.OnePercentRangeY; y += P->mData.yticksize )
04931 {
04932 if( Series->yStats.range > 1e-6 )
04933 {
04934 if( fabs(y) < 1e-6 )
04935 y = 0;
04936 }
04937 ytick = (int)( (y - P->mData.MinY)*P->mData.ScaleY ) + P->mAxes.StartY;
04938
04939 if( !CPLOT_DrawLine( P, P->mAxes.StartX, ytick, P->mAxes.StartX + P->mAxes.TickDashInPixels, ytick, color ) )
04940 return FALSE;
04941 if( !CPLOT_DrawLine( P, P->mAxes.FinishX - P->mAxes.TickDashInPixels, ytick, P->mAxes.FinishX, ytick, color ) )
04942 return FALSE;
04943
04944 if( P->mOptions.y.label )
04945 {
04946 if( !CPLOT_DrawValue( P, FALSE, y, P->mAxes.StartX - CPLOT_SMALLFONT_WIDTH*15, ytick + 7, color ) )
04947 return FALSE;
04948 }
04949
04950 if( P->mOptions.y.isGridOn )
04951 {
04952 if( !CPLOT_DrawDashedLine( P, P->mAxes.StartX, ytick, P->mAxes.FinishX, ytick, 2, color ) )
04953 return FALSE;
04954 }
04955
04956 if( P->mOptions.y_label_right != NULL )
04957 {
04958 double value = y / P->mOptions.y_label_right_scale_factor - P->mOptions.y_label_right_bias;
04959 if( !CPLOT_DrawValue( P, TRUE, value, P->mAxes.FinishX + 3, ytick + 7, P->mOptions.RightYLabelColor ) )
04960 return FALSE;
04961 }
04962 }
04963
04964
04965
04966 if( P->mOptions.title )
04967 if( !CPLOT_Title( P, P->mOptions.title ) )
04968 return FALSE;
04969 if( P->mOptions.x.label )
04970 if( !CPLOT_xLabel( P, P->mOptions.x.label ) )
04971 return FALSE;
04972 if( P->mOptions.y.label )
04973 if( !CPLOT_yLabel( P, P->mOptions.y.label, TRUE ) )
04974 return FALSE;
04975 if( P->mOptions.y_label_right )
04976 if( !CPLOT_yLabel( P, P->mOptions.y_label_right, FALSE ) )
04977 return FALSE;
04978
04979 return TRUE;
04980 }
04981
04982
04983
04984 BOOL CPLOT_DrawStatsValue(
04985 CPLOT *P,
04986 double value,
04987 const int left,
04988 const int top,
04989 const CPLOT_enumColor color,
04990 const int precision
04991 )
04992 {
04993 char formatBuffer[48];
04994 char ValueBuffer[48];
04995 ValueBuffer[0] = '\0';
04996
04997 if( !P )
04998 return FALSE;
04999
05000 #ifndef _CRT_SECURE_NO_DEPRECATE
05001 sprintf_s( formatBuffer, 48, "%%%d.%dg", P->mLabelWidth/CPLOT_SMALLFONT_WIDTH, precision );
05002 sprintf_s( ValueBuffer, 48, formatBuffer, value );
05003 #else
05004 sprintf( formatBuffer, "%%%d.%dg", P->mLabelWidth/CPLOT_SMALLFONT_WIDTH, precision );
05005 sprintf( ValueBuffer, formatBuffer, value );
05006 #endif
05007
05008
05009
05010
05011
05012
05013
05014
05015
05016
05017
05018
05019
05020
05021
05022
05023
05024 if( (left + P->mLabelWidth) >= P->mImage.Width )
05025 return TRUE;
05026 if( top >= P->mImage.Height )
05027 return TRUE;
05028
05029 if( !CPLOT_DrawString( P, ValueBuffer, left, top, TRUE, FALSE, color ) )
05030 return FALSE;
05031
05032 return TRUE;
05033 }
05034
05035 BOOL CPLOT_DrawStats(
05036 CPLOT *P,
05037 CPLOT_structSeries* Series
05038 )
05039 {
05040 int ypos = 0,
05041 xpos = 0,
05042 boxwidth = 45,
05043 boxheight = 0,
05044 yoffset = 0,
05045 xoffset = 0,
05046 i = 0;
05047
05048 int high;
05049 int low;
05050
05051
05052 if( !P )
05053 return FALSE;
05054 if( !Series )
05055 return FALSE;
05056
05057 boxheight = P->mStatsValueHeight*7+1;
05058
05059 if( P->mOptions.plotLabelOnRight )
05060 {
05061 switch( P->mSeriesIndex )
05062 {
05063 case 0:
05064 case 1:
05065 case 2: ypos = P->mAxes.FinishY - 6; break;
05066 default: ypos = P->mAxes.FinishY - 6 - (P->mSeriesIndex/3)*(P->mStatsValueHeight*8); break;
05067
05068
05069
05070
05071
05072
05073
05074
05075
05076
05077
05078
05079 }
05080
05081
05082 xpos = P->mAxes.FinishX + P->mRightYLabelAllowance - 10;
05083 if( !CPLOT_DrawLine( P, xpos - 2, ypos - boxheight, xpos - 2, ypos, CPLOT_LIGHTGREY ) )
05084 return FALSE;
05085 if( !CPLOT_DrawLine( P, xpos + boxwidth, ypos - boxheight, xpos + boxwidth, ypos, CPLOT_LIGHTGREY ) )
05086 return FALSE;
05087 if( !CPLOT_DrawLine( P, xpos - 2, ypos, xpos + boxwidth, ypos, CPLOT_LIGHTGREY ) )
05088 return FALSE;
05089 if( !CPLOT_DrawLine( P, xpos - 2, ypos - boxheight, xpos + boxwidth, ypos - boxheight, CPLOT_LIGHTGREY ) )
05090 return FALSE;
05091
05092
05093 ypos -= 5;
05094 ypos -= P->mStatsValueHeight;
05095 for( i = 0; i < 6; i++ )
05096 {
05097 if( !CPLOT_DrawLine(
05098 P,
05099 xpos - 2,
05100 ypos + 5 - P->mStatsValueHeight*i,
05101 xpos + boxwidth,
05102 ypos + 5 - P->mStatsValueHeight*i,
05103 CPLOT_LIGHTGREY ) )
05104 {
05105 return FALSE;
05106 }
05107 }
05108 ypos += 2;
05109
05110
05111 ypos -= P->mStatsValueHeight;
05112 if( !CPLOT_DrawString( P, "Min", xpos, ypos, TRUE, FALSE, CPLOT_BLACK ) )
05113 return FALSE;
05114 ypos -= P->mStatsValueHeight;
05115 if( !CPLOT_DrawString( P, "Max", xpos, ypos, TRUE, FALSE, CPLOT_BLACK ) )
05116 return FALSE;
05117 ypos -= P->mStatsValueHeight;
05118 if( !CPLOT_DrawString( P, "Mean", xpos, ypos, TRUE, FALSE, CPLOT_BLACK ) )
05119 return FALSE;
05120 ypos -= P->mStatsValueHeight;
05121 if( !CPLOT_DrawString( P, "RMS", xpos, ypos, TRUE, FALSE, CPLOT_BLACK ) )
05122 return FALSE;
05123 ypos -= P->mStatsValueHeight;
05124 if( !CPLOT_DrawString( P, "\\sigma", xpos, ypos, TRUE, FALSE, CPLOT_BLACK ) )
05125 return FALSE;
05126
05127
05128 xoffset = P->mRightYLabelAllowance + 37;
05129 switch( P->mSeriesIndex )
05130 {
05131 case 0:
05132 case 1:
05133 case 2:
05134 xpos = P->mAxes.FinishX + xoffset + P->mSeriesIndex*P->mLabelWidth;
05135 ypos = P->mAxes.FinishY - 6;
05136 break;
05137 case 3:
05138 case 4:
05139 case 5:
05140 xpos = P->mAxes.FinishX + xoffset + (P->mSeriesIndex-3)*P->mLabelWidth;
05141 ypos = P->mAxes.FinishY - 6 - (P->mSeriesIndex/3)*(P->mStatsValueHeight*8);
05142 break;
05143 case 6:
05144 case 7:
05145 case 8:
05146 xpos = P->mAxes.FinishX + xoffset + (P->mSeriesIndex-6)*P->mLabelWidth;
05147 ypos = P->mAxes.FinishY - 6 - (P->mSeriesIndex/3)*(P->mStatsValueHeight*8);
05148 break;
05149 case 9:
05150 case 10:
05151 case 11:
05152 xpos = P->mAxes.FinishX + xoffset + (P->mSeriesIndex-9)*P->mLabelWidth;
05153 ypos = P->mAxes.FinishY - 6 - (P->mSeriesIndex/3)*(P->mStatsValueHeight*8);
05154 break;
05155 default:
05156 return FALSE;
05157 }
05158
05159 if( !CPLOT_DrawLine( P, xpos + P->mLabelWidth, ypos - boxheight, xpos + P->mLabelWidth, ypos, CPLOT_LIGHTGREY ) )
05160 return FALSE;
05161 if( !CPLOT_DrawLine( P, xpos - 2, ypos, xpos + P->mLabelWidth, ypos, CPLOT_LIGHTGREY ) )
05162 return FALSE;
05163 if( !CPLOT_DrawLine( P, xpos - 2, ypos - boxheight, xpos + P->mLabelWidth, ypos - boxheight, CPLOT_LIGHTGREY ) )
05164 return FALSE;
05165
05166 ypos -= P->mStatsValueHeight*2 + 5;
05167 for( i = 0; i < 5; i++ )
05168 {
05169 if( !CPLOT_DrawLine(
05170 P,
05171 xpos - 2,
05172 ypos + 5 - P->mStatsValueHeight*i,
05173 xpos + P->mLabelWidth,
05174 ypos + 5 - P->mStatsValueHeight*i,
05175 CPLOT_LIGHTGREY ) )
05176 {
05177 return FALSE;
05178 }
05179 }
05180
05181 xpos += 3;
05182 ypos += 2;
05183 if( !CPLOT_DrawStatsValue( P, Series->yStats.min, xpos, ypos, Series->color, Series->precision ) )
05184 return FALSE;
05185 ypos -= P->mStatsValueHeight;
05186 if( !CPLOT_DrawStatsValue( P, Series->yStats.max, xpos, ypos, Series->color, Series->precision ) )
05187 return FALSE;
05188 ypos -= P->mStatsValueHeight;
05189 if( !CPLOT_DrawStatsValue( P, Series->yStats.mean, xpos, ypos, Series->color, Series->precision ) )
05190 return FALSE;
05191 ypos -= P->mStatsValueHeight;
05192 if( !CPLOT_DrawStatsValue( P, Series->yStats.rms, xpos, ypos, Series->color, Series->precision ) )
05193 return FALSE;
05194 ypos -= P->mStatsValueHeight;
05195 if( !CPLOT_DrawStatsValue( P, Series->yStats.stdev, xpos, ypos, Series->color, Series->precision ) )
05196 return FALSE;
05197 }
05198 else
05199 {
05200 yoffset = P->mXLabelAllowance + 6;
05201 high = P->mAxes.StartY - yoffset;
05202 low = P->mAxes.StartY - yoffset - P->mStatsValueHeight;
05203
05204 if( !CPLOT_DrawString( P, "Min", 200, high-2, TRUE, FALSE, CPLOT_BLACK ) )
05205 return FALSE;
05206 if( !CPLOT_DrawLine( P, 6, high, 680, high, CPLOT_LIGHTGREY ) )
05207 return FALSE;
05208 if( !CPLOT_DrawLine( P, 197, low, 197, high, CPLOT_LIGHTGREY ) )
05209 return FALSE;
05210
05211 if( !CPLOT_DrawString( P, "Max", 280, high-2, TRUE, FALSE, CPLOT_BLACK ) )
05212 return FALSE;
05213 if( !CPLOT_DrawLine( P, 277, low, 277, high, CPLOT_LIGHTGREY ) )
05214 return FALSE;
05215
05216 if( !CPLOT_DrawString( P, "Mean", 360, high-2, TRUE, FALSE, CPLOT_BLACK ) )
05217 return FALSE;
05218 if( !CPLOT_DrawLine( P, 357, low, 357, high, CPLOT_LIGHTGREY ) )
05219 return FALSE;
05220
05221 if( !CPLOT_DrawString( P, "RMS", 440, high-2, TRUE, FALSE, CPLOT_BLACK ) )
05222 return FALSE;
05223 if( !CPLOT_DrawLine( P, 437, low, 437, high, CPLOT_LIGHTGREY ) )
05224 return FALSE;
05225
05226 if( !CPLOT_DrawString( P, "\\sigma", 520, high-2, TRUE, FALSE, CPLOT_BLACK ) )
05227 return FALSE;
05228 if( !CPLOT_DrawLine( P, 517, low, 517, high, CPLOT_LIGHTGREY ) )
05229 return FALSE;
05230
05231
05232
05233 if( !CPLOT_DrawLine( P, 597, low, 597, high, CPLOT_LIGHTGREY ) )
05234 return FALSE;
05235
05236 if( !CPLOT_DrawLine( P, 6, P->mAxes.StartY-yoffset-P->mStatsValueHeight, 680, P->mAxes.StartY-yoffset-P->mStatsValueHeight, CPLOT_LIGHTGREY ) )
05237 return FALSE;
05238 if( !CPLOT_DrawLine( P, 6, P->mAxes.StartY-yoffset-P->mStatsValueHeight, 6, P->mAxes.StartY-yoffset, CPLOT_LIGHTGREY ) )
05239 return FALSE;
05240 if( !CPLOT_DrawLine( P, 680, P->mAxes.StartY-yoffset-P->mStatsValueHeight, 680, P->mAxes.StartY-yoffset, CPLOT_LIGHTGREY ) )
05241 return FALSE;
05242
05243 ypos = P->mAxes.StartY - yoffset - P->mStatsValueHeight*(P->mSeriesIndex+2);
05244
05245 if( !CPLOT_DrawLine( P, 6, ypos, 680, ypos, CPLOT_LIGHTGREY ) )
05246 return FALSE;
05247 if( !CPLOT_DrawLine( P, 6, ypos, 6, ypos+P->mStatsValueHeight, CPLOT_LIGHTGREY ) )
05248 return FALSE;
05249 if( !CPLOT_DrawLine( P, 197, ypos, 197, ypos+P->mStatsValueHeight, CPLOT_LIGHTGREY ) )
05250 return FALSE;
05251 if( !CPLOT_DrawLine( P, 277, ypos, 277, ypos+P->mStatsValueHeight, CPLOT_LIGHTGREY ) )
05252 return FALSE;
05253 if( !CPLOT_DrawLine( P, 357, ypos, 357, ypos+P->mStatsValueHeight, CPLOT_LIGHTGREY ) )
05254 return FALSE;
05255 if( !CPLOT_DrawLine( P, 437, ypos, 437, ypos+P->mStatsValueHeight, CPLOT_LIGHTGREY ) )
05256 return FALSE;
05257 if( !CPLOT_DrawLine( P, 517, ypos, 517, ypos+P->mStatsValueHeight, CPLOT_LIGHTGREY ) )
05258 return FALSE;
05259 if( !CPLOT_DrawLine( P, 597, ypos, 597, ypos+P->mStatsValueHeight, CPLOT_LIGHTGREY ) )
05260 return FALSE;
05261 if( !CPLOT_DrawLine( P, 680, ypos, 680, ypos+P->mStatsValueHeight, CPLOT_LIGHTGREY ) )
05262 return FALSE;
05263
05264 ypos = P->mAxes.StartY - yoffset - 2 - P->mStatsValueHeight*(P->mSeriesIndex+1);
05265
05266 if( !CPLOT_DrawStatsValue( P, Series->yStats.min, 200, ypos, Series->color, Series->precision ) )
05267 return FALSE;
05268 if( !CPLOT_DrawStatsValue( P, Series->yStats.max, 280, ypos, Series->color, Series->precision ) )
05269 return FALSE;
05270 if( !CPLOT_DrawStatsValue( P, Series->yStats.mean, 360, ypos, Series->color, Series->precision ) )
05271 return FALSE;
05272 if( !CPLOT_DrawStatsValue( P, Series->yStats.rms, 440, ypos, Series->color, Series->precision ) )
05273 return FALSE;
05274 if( !CPLOT_DrawStatsValue( P, Series->yStats.stdev, 520, ypos, Series->color, Series->precision ) )
05275 return FALSE;
05276
05277 }
05278 return TRUE;
05279 }
05280
05281
05282
05283
05284 BOOL CPLOT_FWriteRGB( FILE* out, CPLOT_structRGB val )
05285 {
05286 if( !out )
05287 return FALSE;
05288 fwrite( &val.Blue, sizeof(byte), 1, out );
05289 fwrite( &val.Green, sizeof(byte), 1, out );
05290 fwrite( &val.Red, sizeof(byte), 1, out );
05291 fwrite( &val.Reserved, sizeof(byte), 1, out );
05292 return TRUE;
05293 }
05294
05295
05296
05297
05298
05299
05300
05301
05302
05303
05304
05305
05306
05307 typedef struct
05308 {
05309 unsigned short Type;
05310 unsigned long Size;
05311 unsigned short Reserved1;
05312 unsigned short Reserved2;
05313 unsigned long OffsetToBitmapBits;
05314 } CPLOT_structBitmapFileHeader;
05315
05316
05317
05318
05319
05320
05321
05322
05323
05324
05325
05326
05327
05328
05329
05330
05331
05332
05333
05334 typedef struct
05335 {
05336 unsigned long Size;
05337 long Width;
05338 long Height;
05339 unsigned short Planes;
05340 unsigned short BitCount;
05341 unsigned long Compression;
05342 unsigned long SizeImage;
05343 long XPelsPerMeter;
05344 long YPelsPerMeter;
05345 unsigned long ClrUsed;
05346 unsigned long ClrImportant;
05347 } CPLOT_structBitmapInfoHeader;
05348
05349
05350 BOOL CPLOT_SaveToFile(
05351 CPLOT *P,
05352 const char *FileName
05353 )
05354 {
05355 int i = 0,
05356 j = 0,
05357 z = 0,
05358 count = 0,
05359 sizeOfColorTable = 0;
05360 int max_z;
05361
05362 unsigned compressedSize = 0;
05363
05364 BOOL first = TRUE;
05365
05366 byte theByte = 0;
05367 byte last = 0;
05368
05369 CPLOT_structByteMatrix CompressedVector;
05370
05371 FILE* BmpFile = NULL;
05372
05373 CPLOT_structBitmapFileHeader BitmapFileHeader;
05374 CPLOT_structBitmapInfoHeader BitmapInfoHeader;
05375
05376 CPLOT_BYTE_MTX_Init( &CompressedVector );
05377
05378
05379 if( P->mImage.Width%4 != 0 )
05380 return FALSE;
05381
05382 memset( &BitmapFileHeader, 0, sizeof(CPLOT_structBitmapFileHeader) );
05383 memset( &BitmapInfoHeader, 0, sizeof(CPLOT_structBitmapInfoHeader) );
05384
05385 BitmapFileHeader.Type = 0x4D42;
05386
05387
05388 BitmapFileHeader.Size = P->mImage.Width*P->mImage.Height +
05389 CPLOT_SIZEOF_BITMAPFILEHEADER +
05390 CPLOT_SIZEOF_BITMAPINFOHEADER +
05391 sizeof(CPLOT_structColorTable);
05392
05393 BitmapFileHeader.Reserved1 = 0;
05394 BitmapFileHeader.Reserved2 = 0;
05395 BitmapFileHeader.OffsetToBitmapBits = 0;
05396
05397 BitmapInfoHeader.Size = CPLOT_SIZEOF_BITMAPINFOHEADER;
05398 BitmapInfoHeader.Width = P->mImage.Width;
05399 BitmapInfoHeader.Height = P->mImage.Height;
05400 BitmapInfoHeader.Planes = 1;
05401 BitmapInfoHeader.BitCount = 8;
05402 BitmapInfoHeader.Compression = 0;
05403 BitmapInfoHeader.SizeImage = P->mImage.Width*P->mImage.Height;
05404 BitmapInfoHeader.XPelsPerMeter = 0;
05405 BitmapInfoHeader.YPelsPerMeter = 0;
05406 BitmapInfoHeader.ClrUsed = 22;
05407 BitmapInfoHeader.ClrImportant = 22;
05408
05409
05410
05411
05412 max_z = BitmapInfoHeader.SizeImage*2;
05413 if( max_z > 41943040 )
05414 return FALSE;
05415 CPLOT_BYTE_MTX_calloc( &CompressedVector, 1, max_z );
05416
05417
05418 for( i = 0; i < (int)P->mPlotData.nrows; i++ )
05419 {
05420 count = 0;
05421 first = TRUE;
05422 for( j = 0; j < (int)P->mPlotData.ncols; j++ )
05423 {
05424 theByte = P->mPlotData.data[i][j];
05425
05426 if( first )
05427 {
05428 last = theByte;
05429 count = 1;
05430 first = FALSE;
05431 continue;
05432 }
05433
05434 if( count == 255 )
05435 {
05436 CompressedVector.data[0][z] = count;
05437 z++;
05438 if( z >= max_z )
05439 {
05440 CPLOT_BYTE_MTX_Free( &CompressedVector );
05441 return FALSE;
05442 }
05443 CompressedVector.data[0][z] = last;
05444 z++;
05445 if( z >= max_z )
05446 {
05447 CPLOT_BYTE_MTX_Free( &CompressedVector );
05448 return FALSE;
05449 }
05450 first = TRUE;
05451 count = 0;
05452 j--;
05453 continue;
05454 }
05455
05456 if( theByte == last )
05457 {
05458 count++;
05459 }
05460 else
05461 {
05462 CompressedVector.data[0][z] = count;
05463 z++;
05464 if( z >= max_z )
05465 {
05466 CPLOT_BYTE_MTX_Free( &CompressedVector );
05467 return FALSE;
05468 }
05469 CompressedVector.data[0][z] = last;
05470 z++;
05471 if( z >= max_z )
05472 {
05473 CPLOT_BYTE_MTX_Free( &CompressedVector );
05474 return FALSE;
05475 }
05476 count = 1;
05477 last = theByte;
05478 }
05479 }
05480 if( count != 0 )
05481 {
05482 CompressedVector.data[0][z] = count;
05483 z++;
05484 if( z >= max_z )
05485 {
05486 CPLOT_BYTE_MTX_Free( &CompressedVector );
05487 return FALSE;
05488 }
05489 CompressedVector.data[0][z] = last;
05490 z++;
05491 if( z >= max_z )
05492 {
05493 CPLOT_BYTE_MTX_Free( &CompressedVector );
05494 return FALSE;
05495 }
05496 }
05497 if( i != (int)(P->mPlotData.nrows - 1) )
05498 {
05499 CompressedVector.data[0][z] = 0;
05500 z++;
05501 if( z >= max_z )
05502 {
05503 CPLOT_BYTE_MTX_Free( &CompressedVector );
05504 return FALSE;
05505 }
05506 CompressedVector.data[0][z] = 0;
05507 z++;
05508 if( z >= max_z )
05509 {
05510 CPLOT_BYTE_MTX_Free( &CompressedVector );
05511 return FALSE;
05512 }
05513 }
05514 }
05515
05516
05517 CompressedVector.data[0][z] = 0;
05518 z++;
05519 if( z >= max_z )
05520 {
05521 CPLOT_BYTE_MTX_Free( &CompressedVector );
05522 return FALSE;
05523 }
05524 CompressedVector.data[0][z] = 1;
05525 z++;
05526 if( z >= max_z )
05527 {
05528 CPLOT_BYTE_MTX_Free( &CompressedVector );
05529 return FALSE;
05530 }
05531 compressedSize = z;
05532
05533 sizeOfColorTable = BitmapInfoHeader.ClrUsed * 4;
05534 BitmapFileHeader.OffsetToBitmapBits = CPLOT_SIZEOF_BITMAPFILEHEADER + CPLOT_SIZEOF_BITMAPINFOHEADER + sizeOfColorTable;
05535
05536
05537 if( compressedSize < BitmapInfoHeader.SizeImage )
05538 {
05539 BitmapInfoHeader.Compression = 1;
05540 BitmapInfoHeader.SizeImage = compressedSize;
05541 BitmapFileHeader.Size = compressedSize + BitmapFileHeader.OffsetToBitmapBits;
05542 }
05543
05544 #ifndef _CRT_SECURE_NO_DEPRECATE
05545 if( fopen_s( &BmpFile, FileName, "wb" ) != 0 )
05546 {
05547 CPLOT_BYTE_MTX_Free( &CompressedVector );
05548 return FALSE;
05549 }
05550 #else
05551 BmpFile = fopen(FileName,"wb");
05552 if( !BmpFile )
05553 {
05554 CPLOT_BYTE_MTX_Free( &CompressedVector );
05555 return FALSE;
05556 }
05557 #endif
05558
05559
05560 fwrite( &BitmapFileHeader.Type, sizeof(BitmapFileHeader.Type), 1, BmpFile );
05561 fwrite( &BitmapFileHeader.Size, sizeof(BitmapFileHeader.Size), 1, BmpFile );
05562 fwrite( &BitmapFileHeader.Reserved1, sizeof(BitmapFileHeader.Reserved1), 1, BmpFile );
05563 fwrite( &BitmapFileHeader.Reserved2, sizeof(BitmapFileHeader.Reserved2), 1, BmpFile );
05564 fwrite( &BitmapFileHeader.OffsetToBitmapBits, sizeof(BitmapFileHeader.OffsetToBitmapBits), 1, BmpFile );
05565
05566 fwrite( &BitmapInfoHeader.Size, sizeof(BitmapInfoHeader.Size), 1, BmpFile );
05567 fwrite( &BitmapInfoHeader.Width, sizeof(BitmapInfoHeader.Width), 1, BmpFile );
05568 fwrite( &BitmapInfoHeader.Height, sizeof(BitmapInfoHeader.Height), 1, BmpFile );
05569 fwrite( &BitmapInfoHeader.Planes, sizeof(BitmapInfoHeader.Planes), 1, BmpFile );
05570 fwrite( &BitmapInfoHeader.BitCount, sizeof(BitmapInfoHeader.BitCount), 1, BmpFile );
05571 fwrite( &BitmapInfoHeader.Compression, sizeof(BitmapInfoHeader.Compression), 1, BmpFile );
05572 fwrite( &BitmapInfoHeader.SizeImage, sizeof(BitmapInfoHeader.SizeImage), 1, BmpFile );
05573 fwrite( &BitmapInfoHeader.XPelsPerMeter, sizeof(BitmapInfoHeader.XPelsPerMeter), 1, BmpFile );
05574 fwrite( &BitmapInfoHeader.YPelsPerMeter, sizeof(BitmapInfoHeader.YPelsPerMeter), 1, BmpFile );
05575 fwrite( &BitmapInfoHeader.ClrUsed, sizeof(BitmapInfoHeader.ClrUsed), 1, BmpFile );
05576 fwrite( &BitmapInfoHeader.ClrImportant, sizeof(BitmapInfoHeader.ClrImportant), 1, BmpFile );
05577
05578
05579 if( P->mUseDefaultColorTable )
05580 {
05581 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.White );
05582 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Black );
05583 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Blue );
05584 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Green );
05585 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Purple );
05586 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Magenta );
05587 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.DarkBlue );
05588 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.IndianRed );
05589 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.BabyBlue );
05590 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.PaislyBlue );
05591 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.LightPurple );
05592 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.DarkPurple );
05593 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.GreyPurple );
05594 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Brown );
05595 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Red );
05596 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Pink );
05597 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Yellow );
05598 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Orange );
05599 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Cyan );
05600 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.LimeGreen );
05601 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Grey );
05602 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.LightGrey );
05603 }
05604 else
05605 {
05606 if( P->mColorTable )
05607 {
05608 for( i = 0; i < sizeOfColorTable; i++ )
05609 fwrite( &(P->mColorTable[i]), sizeof(unsigned char), 1, BmpFile );
05610 }
05611 else
05612 {
05613 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.White );
05614 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Black );
05615 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Blue );
05616 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Green );
05617 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Purple );
05618 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Magenta );
05619 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.DarkBlue );
05620 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.IndianRed );
05621 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.BabyBlue );
05622 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.PaislyBlue );
05623 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.LightPurple );
05624 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.DarkPurple );
05625 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.GreyPurple );
05626 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Brown );
05627 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Red );
05628 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Pink );
05629 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Yellow );
05630 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Orange );
05631 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Cyan );
05632 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.LimeGreen );
05633 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.Grey );
05634 CPLOT_FWriteRGB( BmpFile, P->mDefaultColorTable.LightGrey );
05635 }
05636 }
05637
05638
05639 if( BitmapInfoHeader.Compression == 1 )
05640 {
05641 if( fwrite( CompressedVector.data[0], sizeof(byte), compressedSize, BmpFile ) != compressedSize )
05642 {
05643 CPLOT_BYTE_MTX_Free( &CompressedVector );
05644 return FALSE;
05645 }
05646
05647 }
05648 else
05649 {
05650 for( i = 0; i < (int)P->mPlotData.nrows; i++ )
05651 {
05652
05653 if( fwrite( P->mPlotData.data[i], sizeof(byte), P->mPlotData.ncols, BmpFile ) != P->mPlotData.ncols )
05654 {
05655 CPLOT_BYTE_MTX_Free( &CompressedVector );
05656 return FALSE;
05657 }
05658 }
05659 }
05660
05661 fclose(BmpFile);
05662
05663 CPLOT_BYTE_MTX_Free( &CompressedVector );
05664 return TRUE;
05665 }
05666
05667
05668
05669
05670
05671
05672 BOOL CPLOT_SetPlotOptions(
05673 CPLOT *P,
05674 CPLOT_structPlotOptions *opt
05675 )
05676 {
05677 if( !P )
05678 return FALSE;
05679 if( !opt )
05680 return FALSE;
05681
05682 memcpy( &(P->mOptions), opt, sizeof(CPLOT_structPlotOptions) );
05683 return TRUE;
05684 }
05685
05686
05687
05688 BOOL CPLOT_Plot(
05689 CPLOT *P,
05690 CPLOT_structSeries *Series
05691 )
05692 {
05693 int i = 0;
05694 int x1 = 0;
05695 int x2 = 0;
05696 int y1 = 0;
05697 int y2 = 0;
05698 int n = 0;
05699
05700 double xval_i;
05701 double xval_ip1;
05702 double yval_i;
05703 double yval_ip1;
05704 CPLOT_enumColor color;
05705
05706 if( !P )
05707 return FALSE;
05708 if( !Series )
05709 return FALSE;
05710 if( !Series->X )
05711 return FALSE;
05712 if( !Series->Y )
05713 return FALSE;
05714
05715 n = Series->n;
05716
05717 if( !CPLOT_DetermineSeriesStatistics( Series ) )
05718 return FALSE;
05719
05720 if( !P->mIsAxesDrawn || P->mOptions.redrawAxes )
05721 {
05722
05723 if( !CPLOT_DrawAxes( P, Series, CPLOT_BLACK ) )
05724 return FALSE;
05725 P->mIsAxesDrawn = TRUE;
05726 }
05727
05728 if( P->mOptions.numberOfSeries < P->mSeriesIndex + 1 )
05729 {
05730 P->mOptions.numberOfSeries = P->mSeriesIndex+1;
05731 if( P->mOptions.numberOfSeries <= 3 )
05732 {
05733 if( !CPLOT_ResizePlot(P) )
05734 return FALSE;
05735 }
05736 }
05737
05738
05739
05740 for( i = 0; i < n; i++ )
05741 {
05742 xval_i = Series->X[i];
05743 yval_i = Series->Y[i];
05744
05745 if( CPLOT_IsNAN( xval_i ) )
05746 continue;
05747 if( CPLOT_IsNAN( yval_i ) )
05748 continue;
05749
05750 if( xval_i < P->mData.MinX )
05751 continue;
05752 if( xval_i > P->mData.MaxX )
05753 continue;
05754
05755 x1 = (int)( (xval_i - P->mData.MinX)*P->mData.ScaleX ) + P->mAxes.StartX;
05756 y1 = (int)( (yval_i - P->mData.MinY)*P->mData.ScaleY ) + P->mAxes.StartY;
05757
05758 if( i == n - 1 )
05759 {
05760 xval_ip1 = xval_i;
05761 yval_ip1 = yval_i;
05762 x2 = x1;
05763 y2 = y1;
05764 }
05765 else
05766 {
05767 xval_ip1 = Series->X[i+1];
05768 yval_ip1 = Series->Y[i+1];
05769 if( CPLOT_IsNAN( xval_ip1 ) )
05770 {
05771 xval_ip1 = xval_i;
05772 yval_ip1 = yval_i;
05773 x2 = x1;
05774 y2 = y1;
05775 }
05776 else if( CPLOT_IsNAN( yval_ip1 ) )
05777 {
05778 xval_ip1 = xval_i;
05779 yval_ip1 = yval_i;
05780 x2 = x1;
05781 y2 = y1;
05782 }
05783 else
05784 {
05785 x2 = (int)( (xval_ip1 - P->mData.MinX)*P->mData.ScaleX ) + P->mAxes.StartX;
05786 y2 = (int)( (yval_ip1 - P->mData.MinY)*P->mData.ScaleY ) + P->mAxes.StartY;
05787 }
05788 }
05789
05790 color = Series->color;
05791
05792 if( x1 <= P->mAxes.StartX - 2)
05793 {
05794 continue;
05795 }
05796 if( x1 >= P->mAxes.FinishX + 2)
05797 {
05798 continue;
05799 }
05800 if( y1 <= P->mAxes.StartY - 2)
05801 {
05802 if( Series->markOutlierData )
05803 {
05804
05805 if( CPLOT_IsPostiveINF( yval_i ) )
05806 {
05807 y1 = P->mAxes.FinishY + 2;
05808 if( i == n - 1 )
05809 {
05810 y2 = P->mAxes.FinishY;
05811 }
05812 }
05813 else
05814 {
05815 y1 = P->mAxes.StartY - 2;
05816 if( i == n - 1 )
05817 {
05818 y2 = P->mAxes.StartY;
05819 }
05820 }
05821 color = CPLOT_CYAN;
05822 }
05823 else
05824 {
05825 continue;
05826 }
05827 }
05828 if( y1 >= P->mAxes.FinishY + 2)
05829 {
05830 if( Series->markOutlierData )
05831 {
05832
05833 if( CPLOT_IsNegativeINF( yval_i ) )
05834 {
05835 y1 = P->mAxes.StartY - 2;
05836 if( i == n - 1 )
05837 {
05838 y2 = P->mAxes.StartY;
05839 }
05840 }
05841 else
05842 {
05843 y1 = P->mAxes.FinishY + 2;
05844 if( i == n - 1 )
05845 {
05846 y2 = P->mAxes.FinishY;
05847 }
05848 }
05849 color = CPLOT_CYAN;
05850 }
05851 else
05852 {
05853 continue;
05854 }
05855 }
05856
05857 if( xval_i < P->mOptions.endOfWarmupEpoch )
05858 {
05859 if( !CPLOT_DrawPoint( P, x1, y1, CPLOT_LIGHTGREY ) )
05860 return FALSE;
05861 }
05862 else
05863 {
05864 if( !CPLOT_DrawPoint( P, x1, y1, color ) )
05865 return FALSE;
05866 }
05867
05868 if( x2 < P->mAxes.StartX )
05869 {
05870 if( CPLOT_IsPostiveINF( xval_ip1 ) )
05871 {
05872 x2 = P->mAxes.FinishX;
05873 }
05874 else
05875 {
05876 x2 = P->mAxes.StartX;
05877 }
05878 }
05879
05880 if( x2 > P->mAxes.FinishX )
05881 {
05882 if( CPLOT_IsNegativeINF( xval_ip1 ) )
05883 {
05884 x2 = P->mAxes.StartX;
05885 }
05886 else
05887 {
05888 x2 = P->mAxes.FinishX;
05889 }
05890 }
05891
05892 if( y2 < P->mAxes.StartY )
05893 {
05894 if( CPLOT_IsPostiveINF( yval_ip1 ) )
05895 {
05896 y2 = P->mAxes.FinishY;
05897 }
05898 else
05899 {
05900 y2 = P->mAxes.StartY;
05901 }
05902 }
05903
05904 if( y2 > P->mAxes.FinishY )
05905 {
05906 if( CPLOT_IsNegativeINF( yval_ip1 ) )
05907 {
05908 y2 = P->mAxes.StartY;
05909 }
05910 else
05911 {
05912 y2 = P->mAxes.FinishY;
05913 }
05914 }
05915
05916 if( Series->connected )
05917 {
05918 if( xval_i < P->mOptions.endOfWarmupEpoch )
05919 {
05920 if( !CPLOT_DrawLine( P, x1, y1, x2, y2, CPLOT_LIGHTGREY ) )
05921 return FALSE;
05922 }
05923 else
05924 {
05925 if( !CPLOT_DrawLine( P, x1, y1, x2, y2, Series->color ) )
05926 return FALSE;
05927 }
05928 }
05929 }
05930
05931 if( Series->label != NULL )
05932 {
05933 if( strlen( Series->label ) > 0 )
05934 {
05935 if( !CPLOT_DrawLegendLabel( P, Series->label, Series->units, Series->color ) )
05936 return FALSE;
05937 }
05938 }
05939
05940 if( P->mOptions.plotStatistics )
05941 {
05942 if( !CPLOT_DrawStats( P, Series ) )
05943 return FALSE;
05944 }
05945
05946 P->mSeriesIndex++;
05947 return TRUE;
05948 }
05949
05950
05951