Library to control a Graphics TFT connected to 4-wire SPI - revised for the Raio RA8875 Display Controller.

Dependents:   FRDM_RA8875_mPaint RA8875_Demo RA8875_KeyPadDemo SignalGenerator ... more

Fork of SPI_TFT by Peter Drescher

See Components - RA8875 Based Display

Enhanced touch-screen support - where it previous supported both the Resistive Touch and Capacitive Touch based on the FT5206 Touch Controller, now it also has support for the GSL1680 Touch Controller.

Offline Help Manual (Windows chm)

/media/uploads/WiredHome/ra8875.zip.bin (download, rename to .zip and unzip)

Committer:
WiredHome
Date:
Sat Jan 12 21:40:51 2019 +0000
Revision:
160:43f3d90fc491
Parent:
159:dee976689d08
Child:
161:0215d0eec1a4
Fix a typo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 159:dee976689d08 1 // This file contains a perl script used to modify the mikroe generated fonts.
WiredHome 159:dee976689d08 2 //
WiredHome 159:dee976689d08 3 // Do not include this file into your project - just copy everything from
WiredHome 160:43f3d90fc491 4 // the #if to the #endif and put it into a .pl file on your local PC to
WiredHome 159:dee976689d08 5 // run it.
WiredHome 159:dee976689d08 6 #if 0
WiredHome 159:dee976689d08 7
WiredHome 159:dee976689d08 8 #
WiredHome 159:dee976689d08 9 # Modify Mikroe Font File and make a few strategic changes
WiredHome 159:dee976689d08 10 #
WiredHome 159:dee976689d08 11 # Copyright (c) 2019 by Smartware Computing, all rights reserved.
WiredHome 159:dee976689d08 12 #
WiredHome 159:dee976689d08 13 use strict;
WiredHome 159:dee976689d08 14 use warnings;
WiredHome 159:dee976689d08 15 use POSIX;
WiredHome 159:dee976689d08 16
WiredHome 159:dee976689d08 17 my @HelpInfo = (
WiredHome 159:dee976689d08 18 " ",
WiredHome 159:dee976689d08 19 "This script modifies a font file which was generated with a tool by ",
WiredHome 159:dee976689d08 20 "MikroElektronika - GLD Font Creator. ",
WiredHome 159:dee976689d08 21 " ",
WiredHome 159:dee976689d08 22 "That tool creates the font data set for an embedded system from a Windows ",
WiredHome 159:dee976689d08 23 "True Type font. The user is encouraged to ensure that the font used is ",
WiredHome 159:dee976689d08 24 "properly licenses, or drawn from a source that does not have a license ",
WiredHome 159:dee976689d08 25 "restriction. ",
WiredHome 159:dee976689d08 26 " ",
WiredHome 159:dee976689d08 27 "This script will read and then modify the file for a few specific purposes:",
WiredHome 159:dee976689d08 28 " * <space> character is redefined to set the width to 1/2 the height. ",
WiredHome 159:dee976689d08 29 " * '0' - '9' characters are redefined to set the width equal to width('0')",
WiredHome 159:dee976689d08 30 " ",
WiredHome 159:dee976689d08 31 "And just because it can, it then improves upon the documentation in the ",
WiredHome 159:dee976689d08 32 "resulting data structure. ",
WiredHome 159:dee976689d08 33 " ",
WiredHome 159:dee976689d08 34 "This script was created by Smartware Computing, and is provided 'as is' ",
WiredHome 159:dee976689d08 35 "for anyone to use or modify subject to the agreement that: ",
WiredHome 159:dee976689d08 36 " * The Smartware copyright statement remains intact. ",
WiredHome 159:dee976689d08 37 " * Modifications for derivative use are clearly stated in this header ",
WiredHome 159:dee976689d08 38 " ",
WiredHome 159:dee976689d08 39 "Modifications from the original: ",
WiredHome 159:dee976689d08 40 " * none. ",
WiredHome 159:dee976689d08 41 " ",
WiredHome 159:dee976689d08 42 );
WiredHome 159:dee976689d08 43
WiredHome 159:dee976689d08 44
WiredHome 159:dee976689d08 45 my $FixFile = 1; # Fix the file with planned changes
WiredHome 159:dee976689d08 46 my $Details = 1; # Emit more detailed information
WiredHome 159:dee976689d08 47 my $Debug = 0; # 0=None, 1=Some, 2=Detailed
WiredHome 159:dee976689d08 48
WiredHome 159:dee976689d08 49 my $DigitWidth = 0; # can be set on the command line, or it uses width('0')
WiredHome 159:dee976689d08 50 my $ff = ""; # FontFile
WiredHome 159:dee976689d08 51 my $of = ""; # Output File - otherwise stdout
WiredHome 159:dee976689d08 52 my $OH; # Handle to the output file
WiredHome 159:dee976689d08 53
WiredHome 159:dee976689d08 54 if (!@ARGV) {
WiredHome 159:dee976689d08 55 ShowHelp();
WiredHome 159:dee976689d08 56 exit;
WiredHome 159:dee976689d08 57 }
WiredHome 159:dee976689d08 58 foreach (@ARGV) {
WiredHome 159:dee976689d08 59 if (/-0=(\d+)/) {
WiredHome 159:dee976689d08 60 $DigitWidth = $1;
WiredHome 159:dee976689d08 61 } elsif (/-d=(\d+)/) {
WiredHome 159:dee976689d08 62 $Debug = $1;
WiredHome 159:dee976689d08 63 } elsif ($ff eq "") {
WiredHome 159:dee976689d08 64 $ff = $_;
WiredHome 159:dee976689d08 65 } elsif ($of eq "") {
WiredHome 159:dee976689d08 66 $of = $_;
WiredHome 159:dee976689d08 67 } else {
WiredHome 159:dee976689d08 68 ShowHelp();
WiredHome 159:dee976689d08 69 exit;
WiredHome 159:dee976689d08 70 }
WiredHome 159:dee976689d08 71 }
WiredHome 159:dee976689d08 72 if (! -e $ff) {
WiredHome 159:dee976689d08 73 printf("Can't read $ff\n");
WiredHome 159:dee976689d08 74 ShowHelp();
WiredHome 159:dee976689d08 75 exit;
WiredHome 159:dee976689d08 76 }
WiredHome 159:dee976689d08 77 if (! -T $ff) {
WiredHome 159:dee976689d08 78 printf("File $ff isn't text.\n");
WiredHome 159:dee976689d08 79 ShowHelp();
WiredHome 159:dee976689d08 80 exit;
WiredHome 159:dee976689d08 81 }
WiredHome 159:dee976689d08 82 if ($of ne "") {
WiredHome 159:dee976689d08 83 open($OH, ">$of") || die("Can't write to $of");
WiredHome 159:dee976689d08 84 select($OH);
WiredHome 159:dee976689d08 85 }
WiredHome 159:dee976689d08 86
WiredHome 159:dee976689d08 87 my @data = (); # Raw byte stream from the source file
WiredHome 159:dee976689d08 88 my @FileTop;
WiredHome 159:dee976689d08 89 my $FontDec;
WiredHome 159:dee976689d08 90 my @FileBot;
WiredHome 159:dee976689d08 91 my %charData; # charData{$char}{width}, {$char}{data}
WiredHome 159:dee976689d08 92
WiredHome 159:dee976689d08 93 # 0 = scanning
WiredHome 159:dee976689d08 94 # 1 = after '{'
WiredHome 159:dee976689d08 95 # 2 = found '}'
WiredHome 159:dee976689d08 96 my $state = 0;
WiredHome 159:dee976689d08 97
WiredHome 159:dee976689d08 98 ImportFontFile();
WiredHome 159:dee976689d08 99 DumpRawData() if ($Debug >= 2);
WiredHome 159:dee976689d08 100
WiredHome 159:dee976689d08 101 my $unk_0 = GetValueAt_Size_(0,1);
WiredHome 159:dee976689d08 102 my $unk_1 = GetValueAt_Size_(1,1);
WiredHome 159:dee976689d08 103
WiredHome 159:dee976689d08 104 my $firstChar = GetValueAt_Size_(2,2);
WiredHome 159:dee976689d08 105 my $lastChar = GetValueAt_Size_(4,2);
WiredHome 159:dee976689d08 106 my $fontHeight = GetValueAt_Size_(6,1);
WiredHome 159:dee976689d08 107 my $unk_2 = GetValueAt_Size_(7,1);
WiredHome 159:dee976689d08 108
WiredHome 159:dee976689d08 109 printf("Char Range [%4X - %4X]\n", $firstChar, $lastChar) if ($Debug);
WiredHome 159:dee976689d08 110
WiredHome 159:dee976689d08 111 for (my $char = $firstChar; $char <= $lastChar; $char++) {
WiredHome 159:dee976689d08 112 my $offsetToChar = 8 + 4 * ($char - $firstChar);
WiredHome 159:dee976689d08 113 my $charWidth = GetValueAt_Size_($offsetToChar,1);
WiredHome 159:dee976689d08 114 my $charDataNdx = GetValueAt_Size_($offsetToChar + 1, 2);
WiredHome 159:dee976689d08 115 $charData{$char}{width} = $charWidth;
WiredHome 159:dee976689d08 116 my $count = (floor(($charWidth+7)/8));
WiredHome 159:dee976689d08 117 @{$charData{$char}{data}} = GetByteArrayAt_Size_($charDataNdx, $count * $fontHeight);
WiredHome 159:dee976689d08 118 }
WiredHome 159:dee976689d08 119
WiredHome 159:dee976689d08 120 ShowFonts() if ($Debug >= 2); # Before Modifications
WiredHome 159:dee976689d08 121 #FixFonts() if ($FixFile);
WiredHome 159:dee976689d08 122 if ($FixFile) {
WiredHome 159:dee976689d08 123 my @newDat;
WiredHome 159:dee976689d08 124 my $char;
WiredHome 159:dee976689d08 125 my $charWidth;
WiredHome 159:dee976689d08 126 my $BytesWide;
WiredHome 159:dee976689d08 127
WiredHome 159:dee976689d08 128 #
WiredHome 159:dee976689d08 129 # Set <space> width to be 1/2 the Height
WiredHome 159:dee976689d08 130 #
WiredHome 159:dee976689d08 131 $char = 0x20; # Fix <space>
WiredHome 159:dee976689d08 132 $charWidth = floor($fontHeight/2);
WiredHome 159:dee976689d08 133 $charData{$char}{width} = $charWidth;
WiredHome 159:dee976689d08 134 $BytesWide = floor($charWidth/8);
WiredHome 159:dee976689d08 135 for (my $i=0; $i<($BytesWide*$fontHeight); $i++) {
WiredHome 159:dee976689d08 136 $charData{$char}{data}[$i] = 0x00;
WiredHome 159:dee976689d08 137 }
WiredHome 159:dee976689d08 138
WiredHome 159:dee976689d08 139 #
WiredHome 159:dee976689d08 140 # Set '0' - '9' width to be equal to width('0'), or the user override value
WiredHome 159:dee976689d08 141 #
WiredHome 159:dee976689d08 142 if ($DigitWidth > 0) {
WiredHome 159:dee976689d08 143 $charWidth = $DigitWidth; # User override option
WiredHome 159:dee976689d08 144 } else {
WiredHome 159:dee976689d08 145 $charWidth = $charData{0x30}{width}; # Set it to the width of the '0'
WiredHome 159:dee976689d08 146 }
WiredHome 159:dee976689d08 147 $BytesWide = floor(($charWidth+7)/8);
WiredHome 159:dee976689d08 148 #printf("Set Width = $charWidth, BytesWide = $BytesWide, Height = $fontHeight\n");
WiredHome 159:dee976689d08 149 for ($char = 0x30; $char <= 0x39; $char++) {
WiredHome 159:dee976689d08 150 for (my $h=0; $h<$fontHeight; $h++) {
WiredHome 159:dee976689d08 151 for (my $w=0; $w<$BytesWide; $w++) {
WiredHome 159:dee976689d08 152 my $pDst = $h * $BytesWide + $w;
WiredHome 159:dee976689d08 153 if ($w < ceil($charData{$char}{width}/8)) {
WiredHome 159:dee976689d08 154 my $pSrc = $h * floor(($charData{$char}{width}+7)/8) + $w;
WiredHome 159:dee976689d08 155 $newDat[$pDst] = $charData{$char}{data}[$pSrc];
WiredHome 159:dee976689d08 156 } else {
WiredHome 159:dee976689d08 157 $newDat[$pDst] = 0x00;
WiredHome 159:dee976689d08 158 }
WiredHome 159:dee976689d08 159 }
WiredHome 159:dee976689d08 160 }
WiredHome 159:dee976689d08 161 $charData{$char}{width} = $charWidth;
WiredHome 159:dee976689d08 162 for (my $i=0; $i<($fontHeight * $BytesWide); $i++) {
WiredHome 159:dee976689d08 163 $charData{$char}{data}[$i] = $newDat[$i];
WiredHome 159:dee976689d08 164 }
WiredHome 159:dee976689d08 165 #RenderChar($char);
WiredHome 159:dee976689d08 166 #<stdin>;
WiredHome 159:dee976689d08 167 }
WiredHome 159:dee976689d08 168 }
WiredHome 159:dee976689d08 169 ShowFonts() if ($Debug); # After Modifications
WiredHome 159:dee976689d08 170 EmitFile();
WiredHome 159:dee976689d08 171 if ($of ne "") {
WiredHome 159:dee976689d08 172 select(STDOUT);
WiredHome 159:dee976689d08 173 close($OH);
WiredHome 159:dee976689d08 174 }
WiredHome 159:dee976689d08 175 exit;
WiredHome 159:dee976689d08 176
WiredHome 159:dee976689d08 177 #########################################################################
WiredHome 159:dee976689d08 178
WiredHome 159:dee976689d08 179 sub FixFonts {
WiredHome 159:dee976689d08 180 my @newDat;
WiredHome 159:dee976689d08 181 my $char;
WiredHome 159:dee976689d08 182 my $charWidth;
WiredHome 159:dee976689d08 183 my $BytesWide;
WiredHome 159:dee976689d08 184
WiredHome 159:dee976689d08 185 #
WiredHome 159:dee976689d08 186 # Set <space> width to be 1/2 the Height
WiredHome 159:dee976689d08 187 #
WiredHome 159:dee976689d08 188 $char = 0x20; # Fix <space>
WiredHome 159:dee976689d08 189 $charWidth = floor($fontHeight/2);
WiredHome 159:dee976689d08 190 $charData{$char}{width} = $charWidth;
WiredHome 159:dee976689d08 191 $BytesWide = floor($charWidth/8);
WiredHome 159:dee976689d08 192 for (my $i=0; $i<($BytesWide*$fontHeight); $i++) {
WiredHome 159:dee976689d08 193 $charData{$char}{data}[$i] = 0x00;
WiredHome 159:dee976689d08 194 }
WiredHome 159:dee976689d08 195
WiredHome 159:dee976689d08 196 #
WiredHome 159:dee976689d08 197 # Set '0' - '9' width to be equal to width('0'), or the user override value
WiredHome 159:dee976689d08 198 #
WiredHome 159:dee976689d08 199 if ($DigitWidth > 0) {
WiredHome 159:dee976689d08 200 $charWidth = $DigitWidth; # User override option
WiredHome 159:dee976689d08 201 } else {
WiredHome 159:dee976689d08 202 $charWidth = $charData{0x30}{width}; # Set it to the width of the '0'
WiredHome 159:dee976689d08 203 }
WiredHome 159:dee976689d08 204 $BytesWide = floor(($charWidth+7)/8);
WiredHome 159:dee976689d08 205 printf("Set Width = $charWidth, BytesWide = $BytesWide\n");
WiredHome 159:dee976689d08 206 for ($char = 0x30; $char <= 0x39; $char++) {
WiredHome 159:dee976689d08 207 for (my $h=0; $h<$fontHeight; $h++) {
WiredHome 159:dee976689d08 208 for (my $w=0; $w<$BytesWide; $w++) {
WiredHome 159:dee976689d08 209 my $pDst = $h * $BytesWide + $w;
WiredHome 159:dee976689d08 210 if ($w < ceil($charData{$char}{width}/8)) {
WiredHome 159:dee976689d08 211 my $pSrc = $h * floor(($charData{$char}{width}+7)/8) + $w;
WiredHome 159:dee976689d08 212 $newDat[$pDst] = $charData{$char}{data}[$pSrc];
WiredHome 159:dee976689d08 213 } else {
WiredHome 159:dee976689d08 214 $newDat[$pDst] = 0x00;
WiredHome 159:dee976689d08 215 }
WiredHome 159:dee976689d08 216 }
WiredHome 159:dee976689d08 217 }
WiredHome 159:dee976689d08 218 $charData{$char}{width} = $charWidth;
WiredHome 159:dee976689d08 219 for (my $i=0; $i<($fontHeight * $BytesWide); $i++) {
WiredHome 159:dee976689d08 220 $charData{$char}{data}[$i] = $newDat[$i];
WiredHome 159:dee976689d08 221 }
WiredHome 159:dee976689d08 222 }
WiredHome 159:dee976689d08 223 }
WiredHome 159:dee976689d08 224
WiredHome 159:dee976689d08 225
WiredHome 159:dee976689d08 226 sub ImportFontFile {
WiredHome 159:dee976689d08 227 open(FH, "<$ff") || die("Can't open $ff");
WiredHome 159:dee976689d08 228 while (<FH>) {
WiredHome 159:dee976689d08 229 my $rec = $_;
WiredHome 159:dee976689d08 230 chomp $rec;
WiredHome 159:dee976689d08 231 if ($state == 0) {
WiredHome 159:dee976689d08 232 if ($rec =~ /^const .*{/) {
WiredHome 159:dee976689d08 233 $FontDec = $rec;
WiredHome 159:dee976689d08 234 } else {
WiredHome 159:dee976689d08 235 push @FileTop, $rec;
WiredHome 159:dee976689d08 236 }
WiredHome 159:dee976689d08 237 $state = 1 if ($rec =~ /= \{/);
WiredHome 159:dee976689d08 238 } elsif ($state == 1) {
WiredHome 159:dee976689d08 239 if ($rec =~ /};/) {
WiredHome 159:dee976689d08 240 $rec =~ s/^ +(.*)$/$1/ if ($Details);
WiredHome 159:dee976689d08 241 push @FileBot, $rec;
WiredHome 159:dee976689d08 242 $state = 2;
WiredHome 159:dee976689d08 243 } else {
WiredHome 159:dee976689d08 244 $rec =~ s/( +)/ /g;
WiredHome 159:dee976689d08 245 next if ($rec =~ /^ *$/);
WiredHome 159:dee976689d08 246 $rec =~ s# +//.*##;
WiredHome 159:dee976689d08 247 $rec =~ s/^ +(.*)$/$1/;
WiredHome 159:dee976689d08 248 $rec =~ s/^(.*),$/$1/;
WiredHome 159:dee976689d08 249 $rec =~ s/0x//g;
WiredHome 159:dee976689d08 250 push @data, split(",", $rec);
WiredHome 159:dee976689d08 251 }
WiredHome 159:dee976689d08 252 } elsif ($state == 2) {
WiredHome 159:dee976689d08 253 push @FileBot, $rec;
WiredHome 159:dee976689d08 254 }
WiredHome 159:dee976689d08 255 }
WiredHome 159:dee976689d08 256 close FH;
WiredHome 159:dee976689d08 257 }
WiredHome 159:dee976689d08 258
WiredHome 159:dee976689d08 259
WiredHome 159:dee976689d08 260 sub ShowHelp {
WiredHome 159:dee976689d08 261 my $prg = $0;
WiredHome 159:dee976689d08 262 $prg =~ s/.*[\\\/]//;
WiredHome 159:dee976689d08 263 $prg =~ s/\.pl//i;
WiredHome 159:dee976689d08 264 print "\n\n$prg\n\n";
WiredHome 159:dee976689d08 265 foreach (@HelpInfo) {
WiredHome 159:dee976689d08 266 print " $_\n";
WiredHome 159:dee976689d08 267 }
WiredHome 159:dee976689d08 268 print <<EOM;
WiredHome 159:dee976689d08 269 $prg <MikroeFontFile> [Options] [<OptionalNewFile>]
WiredHome 159:dee976689d08 270
WiredHome 159:dee976689d08 271 Process the MikreFontFile, optionally generating a new file.
WiredHome 159:dee976689d08 272
WiredHome 159:dee976689d08 273 Options:
WiredHome 159:dee976689d08 274 -0=xx Set Digit '0' - '9' width to xx
WiredHome 159:dee976689d08 275 -d=x Set Debug Level 0=None, 1=Some, 2=More
WiredHome 159:dee976689d08 276
WiredHome 159:dee976689d08 277 EOM
WiredHome 159:dee976689d08 278 }
WiredHome 159:dee976689d08 279
WiredHome 159:dee976689d08 280 sub ShowFonts {
WiredHome 159:dee976689d08 281 for (my $char = $firstChar; $char <= $lastChar; $char++) {
WiredHome 159:dee976689d08 282 my $charWidth = $charData{$char}{width};
WiredHome 159:dee976689d08 283 printf("\n=== %d (0x%2X) === w:%d, h:%d\n", $char, $char, $charWidth, $fontHeight);
WiredHome 159:dee976689d08 284 RenderChar($char);
WiredHome 159:dee976689d08 285 }
WiredHome 159:dee976689d08 286 }
WiredHome 159:dee976689d08 287
WiredHome 159:dee976689d08 288 sub EmitFile {
WiredHome 159:dee976689d08 289 if ($Details) {
WiredHome 159:dee976689d08 290 foreach (@HelpInfo) {
WiredHome 159:dee976689d08 291 print "// $_\n";
WiredHome 159:dee976689d08 292 }
WiredHome 159:dee976689d08 293 }
WiredHome 159:dee976689d08 294
WiredHome 159:dee976689d08 295 print join("\n", @FileTop) . "\n"; # Mikroe header
WiredHome 159:dee976689d08 296 printf("%s\n", $FontDec);
WiredHome 159:dee976689d08 297 printf(" // Font Info\n") if ($Details);
WiredHome 159:dee976689d08 298 printf(" 0x%02X, // Unknown #1\n", $unk_0);
WiredHome 159:dee976689d08 299 printf(" 0x%02X, // Unknown #2\n", $unk_1);
WiredHome 159:dee976689d08 300 printf(" %s, // FirstChar\n", HexStream($firstChar,2));
WiredHome 159:dee976689d08 301 printf(" %s, // LastChar\n", HexStream($lastChar,2));
WiredHome 159:dee976689d08 302 printf(" %s, // FontHeight\n", HexStream($fontHeight,1));
WiredHome 159:dee976689d08 303 printf(" 0x%02X, // Unknown #3\n", $unk_2);
WiredHome 159:dee976689d08 304
WiredHome 159:dee976689d08 305 printf(" // Directory of Chars [Width] [Offset-L] [Offset-M] [Offset-H]\n") if ($Details);
WiredHome 159:dee976689d08 306 my $offsetToChar = 8 + 4 * ($lastChar - $firstChar + 1);
WiredHome 159:dee976689d08 307 for (my $char = $firstChar; $char <= $lastChar; $char++) {
WiredHome 159:dee976689d08 308 my $charWidth = $charData{$char}{width};
WiredHome 159:dee976689d08 309 my $charByteCount = floor(($charWidth+7)/8) * $fontHeight;
WiredHome 159:dee976689d08 310 my $asc = ($char >= 0x20 && $char < 0x7F) ? chr($char) : "<non-printable>";
WiredHome 159:dee976689d08 311 $asc = "\\\\" if ($char == 0x5C);
WiredHome 159:dee976689d08 312 my $details = ($Details) ? sprintf(" // 0x%02X '%s' ", $char, $asc) : "";
WiredHome 159:dee976689d08 313 printf(" 0x%02X,%s,0x%02X,%s\n",
WiredHome 159:dee976689d08 314 $charWidth, HexStream($offsetToChar,2), 0,
WiredHome 159:dee976689d08 315 $details
WiredHome 159:dee976689d08 316 );
WiredHome 159:dee976689d08 317 $offsetToChar += $charByteCount;
WiredHome 159:dee976689d08 318 }
WiredHome 159:dee976689d08 319 printf(" // Chars Bitstream\n") if ($Details);
WiredHome 159:dee976689d08 320 for (my $char = $firstChar; $char <= $lastChar; $char++) {
WiredHome 159:dee976689d08 321 my $charWidth = $charData{$char}{width};
WiredHome 159:dee976689d08 322 my $charByteCount = floor(($charWidth+7)/8) * $fontHeight;
WiredHome 159:dee976689d08 323 my $asc = ($char >= 0x20 && $char < 0x7F) ? chr($char) : "<non-printable>";
WiredHome 159:dee976689d08 324 $asc = "\\\\" if ($char == 0x5C);
WiredHome 159:dee976689d08 325 my $string = GetSomeHexBytes($char, 0, 8 * $charByteCount);
WiredHome 159:dee976689d08 326 printf(" %s%s // 0x%02X '%s'\n",
WiredHome 159:dee976689d08 327 $string,
WiredHome 159:dee976689d08 328 ($char != $lastChar) ? "," : "",
WiredHome 159:dee976689d08 329 $char, $asc
WiredHome 159:dee976689d08 330 );
WiredHome 159:dee976689d08 331 }
WiredHome 159:dee976689d08 332 print join("\n", @FileBot);
WiredHome 159:dee976689d08 333 }
WiredHome 159:dee976689d08 334
WiredHome 159:dee976689d08 335 sub DumpRawData {
WiredHome 159:dee976689d08 336 my $i;
WiredHome 159:dee976689d08 337 for ($i=0; $i<=$#data; $i++) {
WiredHome 159:dee976689d08 338 printf("%02X ", hex($data[$i]));
WiredHome 159:dee976689d08 339 print "\n" if ($i % 16 == 15);
WiredHome 159:dee976689d08 340 }
WiredHome 159:dee976689d08 341 print "\n";
WiredHome 159:dee976689d08 342 }
WiredHome 159:dee976689d08 343
WiredHome 159:dee976689d08 344
WiredHome 159:dee976689d08 345 sub HexStream {
WiredHome 159:dee976689d08 346 my ($value, $len) = @_;
WiredHome 159:dee976689d08 347 my @parts;
WiredHome 159:dee976689d08 348 while ($len--) {
WiredHome 159:dee976689d08 349 push @parts, sprintf("0x%02X", $value & 0xFF);
WiredHome 159:dee976689d08 350 $value >>= 8;
WiredHome 159:dee976689d08 351 }
WiredHome 159:dee976689d08 352 return join(",", @parts);
WiredHome 159:dee976689d08 353 }
WiredHome 159:dee976689d08 354
WiredHome 159:dee976689d08 355 sub RenderChar {
WiredHome 159:dee976689d08 356 my ($char) = shift;
WiredHome 159:dee976689d08 357 my $h = $fontHeight;
WiredHome 159:dee976689d08 358 my $w = $charData{$char}{width};
WiredHome 159:dee976689d08 359
WiredHome 159:dee976689d08 360 PrintChar($char,$w,$h,@{$charData{$char}{data}});
WiredHome 159:dee976689d08 361 }
WiredHome 159:dee976689d08 362
WiredHome 159:dee976689d08 363 sub PrintChar {
WiredHome 159:dee976689d08 364 my ($char,$w,$h,@datablock) = @_;
WiredHome 159:dee976689d08 365
WiredHome 159:dee976689d08 366 printf(" +%s+ \n", '-' x $w);
WiredHome 159:dee976689d08 367 my $row = 0;
WiredHome 159:dee976689d08 368 my $boolStream = 0;
WiredHome 159:dee976689d08 369 while ($h--) {
WiredHome 159:dee976689d08 370 my $pixels = $w;
WiredHome 159:dee976689d08 371 my $bitmask = 0x01;
WiredHome 159:dee976689d08 372 my $rowStream = $boolStream;
WiredHome 159:dee976689d08 373 printf("%02X |", $row++);
WiredHome 159:dee976689d08 374 my $tail = "";
WiredHome 159:dee976689d08 375 while ($pixels) {
WiredHome 159:dee976689d08 376 my $byte;
WiredHome 159:dee976689d08 377 $datablock[$rowStream] = 0 if (!defined($datablock[$rowStream]));
WiredHome 159:dee976689d08 378 $byte = $datablock[$rowStream];
WiredHome 159:dee976689d08 379 printf("%s", ($byte & $bitmask) ? "*" : " ");
WiredHome 159:dee976689d08 380 $bitmask <<= 1;
WiredHome 159:dee976689d08 381 if ($pixels > 1 && ($bitmask & 0xFF) == 0) {
WiredHome 159:dee976689d08 382 $bitmask = 0x01;
WiredHome 159:dee976689d08 383 $rowStream++;
WiredHome 159:dee976689d08 384 }
WiredHome 159:dee976689d08 385 $pixels--;
WiredHome 159:dee976689d08 386 }
WiredHome 159:dee976689d08 387 printf("| %s\n", $tail);
WiredHome 159:dee976689d08 388 $boolStream += ($rowStream - $boolStream + 1);
WiredHome 159:dee976689d08 389 }
WiredHome 159:dee976689d08 390 printf(" +%s+\n", '-' x $w);
WiredHome 159:dee976689d08 391 }
WiredHome 159:dee976689d08 392
WiredHome 159:dee976689d08 393
WiredHome 159:dee976689d08 394 sub GetSomeHexBytes {
WiredHome 159:dee976689d08 395 my ($char, $offSet, $w) = @_;
WiredHome 159:dee976689d08 396 my @out;
WiredHome 159:dee976689d08 397 my $x = 0;
WiredHome 159:dee976689d08 398
WiredHome 159:dee976689d08 399 $w = floor(($w+7)/8);
WiredHome 159:dee976689d08 400 while ($w--) {
WiredHome 159:dee976689d08 401 my $c = 0;
WiredHome 159:dee976689d08 402 $c = $charData{$char}{data}[$offSet + $x++] if (defined($charData{$char}{data}[$offSet + $x]));
WiredHome 159:dee976689d08 403 push @out, sprintf("0x%02X", $c);
WiredHome 159:dee976689d08 404 }
WiredHome 159:dee976689d08 405 return join(",", @out);
WiredHome 159:dee976689d08 406 }
WiredHome 159:dee976689d08 407
WiredHome 159:dee976689d08 408 sub GetSomeBytes {
WiredHome 159:dee976689d08 409 my ($char, $offSet, $w) = @_;
WiredHome 159:dee976689d08 410 my $string = "";
WiredHome 159:dee976689d08 411 my $x = 0;
WiredHome 159:dee976689d08 412
WiredHome 159:dee976689d08 413 $w = floor(($w+7)/8);
WiredHome 159:dee976689d08 414 while ($w--) {
WiredHome 159:dee976689d08 415 $string .= sprintf("%02X ", $charData{$char}{data}[$offSet + $x++]);
WiredHome 159:dee976689d08 416 }
WiredHome 159:dee976689d08 417 return $string;
WiredHome 159:dee976689d08 418 }
WiredHome 159:dee976689d08 419
WiredHome 159:dee976689d08 420 sub GetValueAt_Size_ {
WiredHome 159:dee976689d08 421 my ($offset, $size) = @_;
WiredHome 159:dee976689d08 422 my $value = 0;
WiredHome 159:dee976689d08 423 while ($size--) {
WiredHome 159:dee976689d08 424 $value = ($value << 8) | hex($data[$offset + $size]);
WiredHome 159:dee976689d08 425 }
WiredHome 159:dee976689d08 426 return $value;
WiredHome 159:dee976689d08 427 }
WiredHome 159:dee976689d08 428
WiredHome 159:dee976689d08 429 sub GetValueFromArray_At_Size_ {
WiredHome 159:dee976689d08 430 my ($offset, $size, $ary) = @_;
WiredHome 159:dee976689d08 431 my $value = 0;
WiredHome 159:dee976689d08 432 while ($size--) {
WiredHome 159:dee976689d08 433 $value = ($value << 8) | hex($$ary[$offset + $size]);
WiredHome 159:dee976689d08 434 }
WiredHome 159:dee976689d08 435 return $value;
WiredHome 159:dee976689d08 436 }
WiredHome 159:dee976689d08 437
WiredHome 159:dee976689d08 438 sub GetByteArrayAt_Size_ {
WiredHome 159:dee976689d08 439 my ($offset, $size) = @_;
WiredHome 159:dee976689d08 440 my @bytes;
WiredHome 159:dee976689d08 441 while ($size--) {
WiredHome 159:dee976689d08 442 push @bytes, hex($data[$offset++]);
WiredHome 159:dee976689d08 443 }
WiredHome 159:dee976689d08 444 return @bytes;
WiredHome 159:dee976689d08 445 }
WiredHome 159:dee976689d08 446
WiredHome 159:dee976689d08 447 sub GetByteSreamAt_Size_ {
WiredHome 159:dee976689d08 448 my ($offset, $size) = @_;
WiredHome 159:dee976689d08 449 my $value = "";
WiredHome 159:dee976689d08 450 while ($size--) {
WiredHome 159:dee976689d08 451 $value .= sprintf("%02X ", hex($data[$offset++]));
WiredHome 159:dee976689d08 452 }
WiredHome 159:dee976689d08 453 return $value;
WiredHome 159:dee976689d08 454 }
WiredHome 159:dee976689d08 455
WiredHome 159:dee976689d08 456 #endif