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:
Sun Jan 13 19:02:36 2019 +0000
Revision:
161:0215d0eec1a4
Parent:
160:43f3d90fc491
Child:
167:8aa3fb2a5a31
Child:
173:ae8198c82b88
Readjusted font parameters - ; <space> width is 1/4 the character height,; '0' - '9' by default as sized to the width of the widest digit.; command line can still override digit width.

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