First commit
This commit is contained in:
commit
76f465163f
16 changed files with 4916 additions and 0 deletions
19
CMakeLists.txt
Normal file
19
CMakeLists.txt
Normal file
|
@ -0,0 +1,19 @@
|
|||
cmake_minimum_required(VERSION 2.8)
|
||||
project(fb)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -fopenmp")
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
include_directories(include)
|
||||
include_directories(src/vendor)
|
||||
|
||||
file(GLOB_RECURSE SOURCES
|
||||
"src/*.cpp"
|
||||
"src/*.hpp"
|
||||
"src/resources/*.cpp"
|
||||
"src/resources/*.hpp"
|
||||
)
|
||||
|
||||
add_executable(${PROJECT_NAME} ${SOURCES})
|
||||
|
||||
target_link_libraries(${PROJECT_NAME})
|
3
README.md
Normal file
3
README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# FB32
|
||||
Aquarium en framebuffer (24/32 bit seulement)
|
||||
Si vous voulez la version 16bit, envoyez moi un mail
|
BIN
build/bitmap1
Normal file
BIN
build/bitmap1
Normal file
Binary file not shown.
68
src/bitmap.cpp
Normal file
68
src/bitmap.cpp
Normal file
|
@ -0,0 +1,68 @@
|
|||
#include "bitmap.hpp"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define MIN(a, b) ( (a<b)?a:b )
|
||||
|
||||
#include "config.hpp"
|
||||
|
||||
u8 LoadBitmap(const char* path, Bitmap& bitmap)
|
||||
{
|
||||
FILE* fp;
|
||||
fp = fopen(path, "r");
|
||||
if (fp == NULL) return BITMAP_ERR_CANNOT_OPEN;
|
||||
|
||||
if (fscanf(fp, "%u%u", &bitmap.size_x, &bitmap.size_y) != 2) return BITMAP_ERR_NOT_BITMAP;
|
||||
|
||||
size_t bufflen = bitmap.size_x * bitmap.size_y;
|
||||
|
||||
bitmap.pixels = (RGB*)malloc(bufflen * bytes_per_pixel);
|
||||
if (bitmap.pixels == NULL) return BITMAP_ERR_CANNOT_ALLOCATE;
|
||||
|
||||
if (fread(bitmap.pixels, bytes_per_pixel, bufflen, fp) != bufflen)
|
||||
{
|
||||
free(bitmap.pixels);
|
||||
return BITMAP_ERR_CANNOT_READ;
|
||||
}
|
||||
|
||||
if (fclose(fp) != 0) return BITMAP_ERR_CANNOT_CLOSE;
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
void UnloadBitmap(Bitmap& bitmap)
|
||||
{
|
||||
free(bitmap.pixels);
|
||||
}
|
||||
|
||||
void DrawBitmap(RGB* image, const unsigned int w, const unsigned int& h,
|
||||
const Bitmap& bitmap, const unsigned int& x, const unsigned int& y)
|
||||
{
|
||||
const unsigned int w2 = MIN(MIN(w-x, x+bitmap.size_x), bitmap.size_x)*bytes_per_pixel;
|
||||
const unsigned int y2 = MIN(h, y+bitmap.size_y);
|
||||
|
||||
#pragma omp parallel if(USE_PARALLELIZATION) shared(image)
|
||||
{
|
||||
unsigned int i;
|
||||
#pragma omp for ordered schedule(dynamic) private(i)
|
||||
for (i = y ; i < y2; i++)
|
||||
memcpy(&image[i*w], &bitmap.pixels[(i-y)*bitmap.size_x], w2);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawBitmap(byte* buffer, const fb_var_screeninfo& vinfo,
|
||||
const Bitmap& bitmap, const unsigned int& x, const unsigned int& y)
|
||||
{
|
||||
const unsigned int w2 = MIN(MIN(vinfo.xres-x, x+bitmap.size_x), bitmap.size_x)*bytes_per_pixel;
|
||||
const unsigned int y2 = MIN(vinfo.yres, y+bitmap.size_y);
|
||||
|
||||
#pragma omp parallel if(USE_PARALLELIZATION) shared(buffer)
|
||||
{
|
||||
unsigned int i;
|
||||
#pragma omp for ordered schedule(dynamic) private(i)
|
||||
for (i = y ; i < y2; i++)
|
||||
memcpy(&buffer[(i*vinfo.xres+x)*bytes_per_pixel], &bitmap.pixels[(i-y)*bitmap.size_x], w2);
|
||||
}
|
||||
}
|
34
src/bitmap.hpp
Normal file
34
src/bitmap.hpp
Normal file
|
@ -0,0 +1,34 @@
|
|||
#ifndef FB32_BITMAP_HPP
|
||||
#define FB32_BITMAP_HPP
|
||||
|
||||
#include "fb.hpp"
|
||||
|
||||
#define BITMAP_ERR_CANNOT_OPEN 1 //Could not open file at path
|
||||
#define BITMAP_ERR_NOT_BITMAP 2 //File is not a bitmap
|
||||
#define BITMAP_ERR_CANNOT_ALLOCATE 3 //Could not allocate bitmap
|
||||
#define BITMAP_ERR_CANNOT_READ 4 //Could not read the bitmap
|
||||
#define BITMAP_ERR_CANNOT_CLOSE 5 //Could not close the stream
|
||||
|
||||
/* Structure holding informations for a bitmap */
|
||||
struct Bitmap
|
||||
{
|
||||
RGB* pixels;
|
||||
unsigned int size_x;
|
||||
unsigned int size_y;
|
||||
};
|
||||
|
||||
/* Create bitmap from a path */
|
||||
u8 LoadBitmap(const char* path, Bitmap& bitmap);
|
||||
|
||||
/* Deallocate resources of the bitmap */
|
||||
void UnloadBitmap(Bitmap& bitmap);
|
||||
|
||||
/* Draw a bitmap in the image */
|
||||
void DrawBitmap(RGB* image, const unsigned int w, const unsigned int& h,
|
||||
const Bitmap& bitmap, const unsigned int& x, const unsigned int& y);
|
||||
|
||||
/* Draw a bitmap directly in the frame buffer */
|
||||
void DrawBitmap(byte* buffer, const fb_var_screeninfo& vinfo,
|
||||
const Bitmap& bitmap, const unsigned int& x, const unsigned int& y);
|
||||
|
||||
#endif // FB32_BITMAP_HPP
|
19
src/config.hpp
Normal file
19
src/config.hpp
Normal file
|
@ -0,0 +1,19 @@
|
|||
#ifndef FB32_COFIG_HPP
|
||||
#define FB32_COFIG_HPP
|
||||
|
||||
#include "font_7x14.hpp"
|
||||
|
||||
/****************\
|
||||
General settings
|
||||
\****************/
|
||||
|
||||
/* Wether or not to restore the screen as it was when FB32 ends */
|
||||
#define RESTORE_SCREEN true
|
||||
|
||||
/* Force FB32 to have touchscreen input method enabled */
|
||||
#define REQUIRE_TOUCHSCREEN false
|
||||
|
||||
/* Wether or not to use parallelization when possible */
|
||||
#define USE_PARALLELIZATION false
|
||||
|
||||
#endif // FB32_COFIG_HPP
|
87
src/fb.cpp
Normal file
87
src/fb.cpp
Normal file
|
@ -0,0 +1,87 @@
|
|||
#include "fb.hpp"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "config.hpp"
|
||||
|
||||
#define MIN(a, b) ( (a<b)?a:b )
|
||||
|
||||
void DrawImage(byte* buffer, const size_t& buflen,
|
||||
const RGB* image)
|
||||
{
|
||||
memcpy(buffer, image, buflen);
|
||||
}
|
||||
|
||||
void GetImage(const byte* buffer, const size_t& buflen,
|
||||
RGB* image)
|
||||
{
|
||||
memcpy(image, buffer, buflen);
|
||||
}
|
||||
|
||||
|
||||
void DrawText(byte* buffer, const fb_var_screeninfo& vinfo,
|
||||
const unsigned int& pos_x, const unsigned int& pos_y, const unsigned int& w,
|
||||
const RGB& fg, const RGB& bg, const char* str, const size_t& size_str, const u8& flags)
|
||||
{
|
||||
//Avoid drawing ouutside the screen
|
||||
const size_t size2 = MIN(size_str, ((size_t)(vinfo.xres-pos_x)/FONT_WIDTH));
|
||||
if (pos_y+FONT_HEIGHT > vinfo.yres)
|
||||
return;
|
||||
|
||||
for (unsigned int i = 0; i < size2; i++)
|
||||
{
|
||||
unsigned int offset = str[i]*FONT_WIDTH_B*FONT_HEIGHT;
|
||||
for (unsigned int y = 0; y < FONT_HEIGHT; y++)
|
||||
{
|
||||
for (unsigned int x = 0; x <= FONT_WIDTH+FONT_SPACING; x++)
|
||||
{
|
||||
if ( ! (flags & FB_TEXT_NOFG) && ((fontdata[offset + y*FONT_WIDTH_B] >> (FONT_WIDTH-x)) & 0b1) == 1 && x <= FONT_WIDTH)
|
||||
buffer[((y+pos_y)*vinfo.xres+i*__FONT_SPACING+x+pos_x)*((int)vinfo.bits_per_pixel/8)] = (fg & 0xFF), buffer[((y+pos_y)*vinfo.xres+i*__FONT_SPACING+x+pos_x)*((int)vinfo.bits_per_pixel/8)+1] = ((fg >> 8) & 0xFF), buffer[((y+pos_y)*vinfo.xres+i*__FONT_SPACING+x+pos_x)*((int)vinfo.bits_per_pixel/8)+2] = ((fg >> 16) & 0xFF);
|
||||
else if (! (flags & FB_TEXT_NOBG) )
|
||||
buffer[((y+pos_y)*vinfo.xres+i*__FONT_SPACING+x+pos_x)*((int)vinfo.bits_per_pixel/8)] = (bg & 0xFF), buffer[((y+pos_y)*vinfo.xres+i*__FONT_SPACING+x+pos_x)*((int)vinfo.bits_per_pixel/8)+1] = ((bg >> 8) & 0xFF), buffer[((y+pos_y)*vinfo.xres+i*__FONT_SPACING+x+pos_x)*((int)vinfo.bits_per_pixel/8)+3] = ((bg >> 16) & 0xFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OpenFrameBuffer(char* path, int& fd)
|
||||
{
|
||||
fd = open(path, O_RDWR);
|
||||
if (fd < 0) perror("OpenFrameBuffer() : open");
|
||||
}
|
||||
|
||||
void GetBuffer(byte* &buffer, size_t& buflen, const int& fd, fb_var_screeninfo& vinfo, fb_fix_screeninfo& finfo)
|
||||
{
|
||||
if ( ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) || ioctl(fd, FBIOGET_FSCREENINFO, &finfo) ) perror("GetBuffer() : ioctl");
|
||||
|
||||
buflen = vinfo.yres_virtual * finfo.line_length;
|
||||
buffer = (byte*)mmap
|
||||
(
|
||||
NULL,
|
||||
buflen,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_SHARED,
|
||||
fd,
|
||||
0
|
||||
);
|
||||
if (buffer == MAP_FAILED) perror("mmap");
|
||||
|
||||
if (vinfo.bits_per_pixel != 24 && vinfo.bits_per_pixel != 32) perror("GetBuffer() : FB24 only supports 24bits/32bits display.");
|
||||
}
|
||||
|
||||
void CloseFrameBuffer(byte* buffer, const size_t& buflen, int& fd)
|
||||
{
|
||||
if (buffer && buffer != MAP_FAILED)
|
||||
munmap(buffer, buflen);
|
||||
if (fd >= 0)
|
||||
close(fd);
|
||||
}
|
55
src/fb.hpp
Normal file
55
src/fb.hpp
Normal file
|
@ -0,0 +1,55 @@
|
|||
#ifndef FB32_FRAMEBUFFER_HPP
|
||||
#define FB32_FRAMEBUFFER_HPP
|
||||
|
||||
#include <linux/fb.h>
|
||||
#include <cstdint>
|
||||
#include <cstddef>
|
||||
#include <cstring>
|
||||
|
||||
#include "type.hpp"
|
||||
|
||||
/* We are using RGB565:
|
||||
* -> 5bits depth red
|
||||
* -> 6bits depth green
|
||||
* -> 5bits depth blue
|
||||
*/
|
||||
typedef uint32_t RGB;
|
||||
const u8 bytes_per_pixel = 4;
|
||||
|
||||
/* COLOR(r, g, b):
|
||||
* max r -> 255
|
||||
* max g -> 255
|
||||
* max b -> 255
|
||||
(inclusive)
|
||||
*/
|
||||
constexpr RGB Color(const byte& r, const byte& g, const byte& b)
|
||||
{
|
||||
return RGB((r << 16) | (g << 8) | b);
|
||||
}
|
||||
|
||||
/* Push image on the screen */
|
||||
void DrawImage(byte* buffer, const size_t& buflen,
|
||||
const RGB* image);
|
||||
/* Store the screen's current frame in an image */
|
||||
void GetImage(const byte* buffer, const size_t& buflen,
|
||||
RGB* image);
|
||||
|
||||
#define FB_TEXT_NOBG 0b01
|
||||
#define FB_TEXT_NOFG 0b10
|
||||
|
||||
/* Basic text drawing */
|
||||
void DrawText(byte* buffer, const fb_var_screeninfo& vinfo,
|
||||
const unsigned int& x, const unsigned int& y, const unsigned int& w,
|
||||
const RGB& fg, const RGB& bg, const char* str, const size_t& size_str, const u8& flags=0);
|
||||
|
||||
//void DrawTextLine(const int& fd, const fb_var_screeninfo& vinfo, const fb_fix_screeninfo& finfo, byte* buffer, const size_t& pos_x, const size_t& pos_y,
|
||||
//const RGB& FG, const RGB& BG, const char* str, const size_t& slen);
|
||||
|
||||
/* Open the frame buffer posix char-file */
|
||||
void OpenFrameBuffer(char* path, int& fd);
|
||||
/* Initialize the byte buffer */
|
||||
void GetBuffer(byte* &buffer, size_t& buflen, const int& fd, fb_var_screeninfo& vinfo, fb_fix_screeninfo& finfo);
|
||||
/* Close the frame buffer file and deallocate resources */
|
||||
void CloseFrameBuffer(byte* buffer, const size_t& buflen, int& fd);
|
||||
|
||||
#endif // FB32_FRAMEBUFFER_HPP
|
4120
src/font_7x14.hpp
Normal file
4120
src/font_7x14.hpp
Normal file
File diff suppressed because it is too large
Load diff
203
src/main.cpp
Normal file
203
src/main.cpp
Normal file
|
@ -0,0 +1,203 @@
|
|||
#include "fb.hpp"
|
||||
#include "bitmap.hpp"
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
#include <string.h> //memset
|
||||
|
||||
#include <iostream>
|
||||
#include <bitset>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "config.hpp"
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
/* Microsecond sleep */
|
||||
#ifndef mslep
|
||||
#define msleep(x) usleep(x*1000u)
|
||||
#endif //msleep
|
||||
|
||||
void DirectionChangeX(s8& direction, u16& directionChange, u8& speed,
|
||||
char* fish, const char *fish_array, const u8& fish_width)
|
||||
{
|
||||
directionChange = 20+rand()%150;
|
||||
speed = 1+rand()%3;
|
||||
direction *= -1;
|
||||
if (direction == 1)
|
||||
memcpy(fish, &fish_array[0], fish_width);
|
||||
else
|
||||
memcpy(fish, &fish_array[fish_width], fish_width);
|
||||
}
|
||||
|
||||
void DirectionChangeY(s8& direction, u16& directionChange, u8& speed)
|
||||
{
|
||||
directionChange = 20+rand()%100;
|
||||
speed = 1+rand()%1;
|
||||
direction *= -1;
|
||||
}
|
||||
|
||||
void MoveFish(byte* buffer, const fb_var_screeninfo& vinfo, const u64& ticks,
|
||||
s8& direction_x, u16& directionChange_x, u8& speed_x, s16& pos_x,
|
||||
s8& direction_y, u16& directionChange_y, u8& speed_y, s16& pos_y,
|
||||
char* fish, const RGB& color, const char *fish_array, const u8& fish_width)
|
||||
{
|
||||
//Moving
|
||||
if (ticks % directionChange_x == 0)
|
||||
DirectionChangeX(direction_x, directionChange_x, speed_x, fish, fish_array, fish_width);
|
||||
if (ticks % directionChange_y == 0)
|
||||
DirectionChangeY(direction_y, directionChange_y, speed_y);
|
||||
|
||||
if (direction_x == 1) pos_x+=speed_x;
|
||||
else pos_x-=speed_x;
|
||||
if (pos_x < 0)
|
||||
{
|
||||
pos_x = 0;
|
||||
DirectionChangeX(direction_x, directionChange_x, speed_x, fish, fish_array, fish_width);
|
||||
}
|
||||
if ((s16)(pos_x+fish_width*FONT_WIDTH) > (s16)vinfo.xres)
|
||||
{
|
||||
pos_x = vinfo.xres-fish_width*FONT_WIDTH;
|
||||
DirectionChangeX(direction_x, directionChange_x, speed_x, fish, fish_array, fish_width);
|
||||
}
|
||||
|
||||
if (direction_y == 1) pos_y+=speed_y;
|
||||
else pos_y-=speed_y;
|
||||
if (pos_y < 0)
|
||||
{
|
||||
pos_y = 0;
|
||||
DirectionChangeY(direction_y, directionChange_y, speed_y);
|
||||
}
|
||||
if ((s16)(pos_y+FONT_HEIGHT) > (s16)vinfo.yres)
|
||||
{
|
||||
pos_y = vinfo.yres-FONT_HEIGHT;
|
||||
DirectionChangeY(direction_y, directionChange_y, speed_y);
|
||||
}
|
||||
|
||||
|
||||
//Drawing
|
||||
DrawText(buffer, vinfo,
|
||||
pos_x, pos_y, vinfo.xres,
|
||||
color, 0x0000FF, fish, fish_width);
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
/* Arguments:
|
||||
- argv[1] -> framebuffer
|
||||
- argv[2] -> touchscreen
|
||||
*/
|
||||
#if REQUIRE_TOUCHSCREEN == true
|
||||
if (argc < 3) perror("main() : You need to specify: [1] the framebuffer, [2] the touchscreen");
|
||||
#else
|
||||
if (argc < 2) perror("main() : You need to specify: [1] the framebuffer.");
|
||||
#endif
|
||||
|
||||
//* Screen display
|
||||
struct fb_var_screeninfo vinfo;
|
||||
struct fb_fix_screeninfo finfo;
|
||||
byte* buffer = NULL;
|
||||
size_t buflen = 0;
|
||||
int fd1 = -1;
|
||||
|
||||
OpenFrameBuffer(argv[1], fd1);
|
||||
GetBuffer(buffer, buflen, fd1, vinfo, finfo);
|
||||
|
||||
|
||||
#if RESTORE_SCREEN == true
|
||||
RGB* image_t = (RGB*)calloc(vinfo.xres*vinfo.yres, sizeof(RGB));
|
||||
//GetImage(buffer, buflen, image_t);
|
||||
#endif
|
||||
|
||||
//Bitmaps stuff here
|
||||
Bitmap bitmap1;
|
||||
u8 err = LoadBitmap("bitmap1", bitmap1);
|
||||
|
||||
if (err != EXIT_SUCCESS)
|
||||
{
|
||||
fprintf(stderr, "main() : LoadBitmap failed with error code: %d", err);
|
||||
exit(EXIT_FAILURE);
|
||||
|
||||
#if RESTORE_SCREEN == true
|
||||
DrawImage(buffer, buflen, image_t);
|
||||
free(image_t);
|
||||
#endif
|
||||
}
|
||||
|
||||
static const u8 fish_width = 7;
|
||||
static const char fish_array[fish_width*2] =
|
||||
{
|
||||
'>', '<', '(', '(', '(', '*', '>', //><(((*>
|
||||
'<', '*', ')', ')', ')', '>', '<' //<*)))><
|
||||
};
|
||||
|
||||
static const u16 fish_num = 256;
|
||||
|
||||
char fish[fish_num][fish_width];
|
||||
|
||||
s8 direction_x[fish_num];
|
||||
u16 directionChange_x[fish_num];
|
||||
u8 speed_x[fish_num];
|
||||
s16 pos_x[fish_num];
|
||||
|
||||
s8 direction_y[fish_num];
|
||||
u16 directionChange_y[fish_num];
|
||||
u8 speed_y[fish_num];
|
||||
s16 pos_y[fish_num];
|
||||
|
||||
RGB color[fish_num];
|
||||
|
||||
for (u16 i = 0; i < fish_num; i++)
|
||||
{
|
||||
direction_x[i] = (rand()%1==0)?-1:1;
|
||||
directionChange_x[i] = 50+rand()%150;
|
||||
speed_x[i] = 1+rand()%3;
|
||||
pos_x[i] = rand()%vinfo.xres;
|
||||
|
||||
direction_y[i] = (rand()%1==0)?-1:1;
|
||||
directionChange_y[i] = 10+rand()%100;
|
||||
speed_y[i] = 1+rand()%1;
|
||||
pos_y[i] = rand()%vinfo.yres;
|
||||
|
||||
color[i] = rand()%0xFFFFFF;
|
||||
}
|
||||
|
||||
u64 ticks = 0;
|
||||
char ticks_t[9] = "0";
|
||||
while (true)
|
||||
{
|
||||
//Background (aquarium)
|
||||
DrawBitmap(buffer, vinfo, bitmap1, 0, 0);
|
||||
|
||||
|
||||
//Fishes
|
||||
for (u16 i = 0; i < fish_num; i++)
|
||||
MoveFish(buffer, vinfo, ticks,
|
||||
direction_x[i], directionChange_x[i], speed_x[i], pos_x[i],
|
||||
direction_y[i], directionChange_y[i], speed_y[i], pos_y[i],
|
||||
fish[i], color[i], fish_array, fish_width);
|
||||
|
||||
sprintf(ticks_t, "%ld", ticks);
|
||||
|
||||
DrawText(buffer, vinfo,
|
||||
0, 0, vinfo.xres,
|
||||
Color(31, 63, 0), 0x00FF, ticks_t, 9);
|
||||
|
||||
|
||||
msleep(17);
|
||||
ticks++;
|
||||
}
|
||||
|
||||
UnloadBitmap(bitmap1);
|
||||
|
||||
#if RESTORE_SCREEN == true
|
||||
DrawImage(buffer, buflen, image_t);
|
||||
free(image_t);
|
||||
#endif
|
||||
|
||||
CloseFrameBuffer(buffer, buflen, fd1);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
20
src/type.hpp
Normal file
20
src/type.hpp
Normal file
|
@ -0,0 +1,20 @@
|
|||
#ifndef FB32_TYPE_HPP
|
||||
#define FB32_TYPE_HPP
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
#ifndef byte
|
||||
typedef uint8_t byte;
|
||||
#endif
|
||||
|
||||
typedef uint8_t u8;
|
||||
typedef uint16_t u16;
|
||||
typedef uint32_t u32;
|
||||
typedef uint64_t u64;
|
||||
|
||||
typedef int8_t s8;
|
||||
typedef int16_t s16;
|
||||
typedef int32_t s32;
|
||||
typedef int64_t s64;
|
||||
|
||||
#endif // FB32_TYPE_HPP
|
51
tools/mkBitmap.cpp
Normal file
51
tools/mkBitmap.cpp
Normal file
|
@ -0,0 +1,51 @@
|
|||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <png++/png.hpp>
|
||||
|
||||
#define CACHESIZE 4096u //must be lower than 2^13
|
||||
#define __CACHESIZE (CACHESIZE*4u) //Do not edit
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
if (argc < 3)
|
||||
{
|
||||
std::cerr << "USAGE: " << argv[0] << " INPUT.PNG OUTPUT" << std::endl;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
png::image< png::rgb_pixel > input(argv[1]);
|
||||
|
||||
std::ofstream bitmap(argv[2]);
|
||||
uint32_t width, height, x, y;
|
||||
width = input.get_width();
|
||||
height = input.get_height();
|
||||
x = y = 0;
|
||||
size_t i = 0;
|
||||
|
||||
bitmap << width << " " << height << " ";
|
||||
|
||||
char* cache = new char[__CACHESIZE];
|
||||
while (i < width*height*4)
|
||||
{
|
||||
x = ((uint32_t) i/4 ) % width;
|
||||
y = (uint32_t)(i/4/width);
|
||||
|
||||
cache[(i+1)%__CACHESIZE] = input[y][x].red;
|
||||
cache[(i+0)%__CACHESIZE] = input[y][x].green;
|
||||
cache[(i+3)%__CACHESIZE] = input[y][x].blue;
|
||||
cache[(i+2)%__CACHESIZE] = 255;
|
||||
|
||||
i+=4;
|
||||
|
||||
if (i % __CACHESIZE == 0) //Write
|
||||
bitmap.write(cache, __CACHESIZE);
|
||||
}
|
||||
if (i % __CACHESIZE != 0) //Write what has not been written
|
||||
bitmap.write(cache, width*height*4 % __CACHESIZE);
|
||||
|
||||
delete[] cache;
|
||||
bitmap.close();
|
||||
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
19
tools/mkBitmap.sh
Executable file
19
tools/mkBitmap.sh
Executable file
|
@ -0,0 +1,19 @@
|
|||
#!/bin/bash
|
||||
|
||||
FLAGS="-Wall -std=c++11"
|
||||
LIBS=("libpng")
|
||||
NAME="mkBitmap"
|
||||
|
||||
SRCS=("mkBitmap.cpp")
|
||||
|
||||
for i in ${LIBS[@]}
|
||||
do
|
||||
LIBS_+="$(pkg-config --libs "${i}") "
|
||||
done
|
||||
|
||||
for i in ${SRCS[@]}
|
||||
do
|
||||
SRCS_+="$(find "${i}" -maxdepth 1 | grep -E ".cpp|.hpp") "
|
||||
done
|
||||
|
||||
g++ ${SRCS_} ${FLAGS} ${LIBS_[@]} -o ${NAME}
|
65
tools/mkCharmap.cpp
Normal file
65
tools/mkCharmap.cpp
Normal file
|
@ -0,0 +1,65 @@
|
|||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include <png++/png.hpp>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
if (argc < 3)
|
||||
{
|
||||
std::cerr << "USAGE: " << argv[0] << " INPUT.PNG OUTPUT" << std::endl;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
png::image< png::rgba_pixel > input(argv[1]);
|
||||
|
||||
std::ofstream bitmap(argv[2]);
|
||||
uint32_t width, height, x, y;
|
||||
width = input.get_width();
|
||||
height = input.get_height();
|
||||
x = y = 0;
|
||||
size_t i = 0;
|
||||
|
||||
std::stringstream result;
|
||||
result << std::string("static const unsigned int ") << std::string(argv[2]) << std::string("_width = ") << std::to_string(width) << std::string(";\n");
|
||||
result << std::string("static const unsigned int ") << std::string(argv[2]) << std::string("_height = ") << std::to_string(height) << std::string(";\n");
|
||||
result << std::string("static const unsigned char ");
|
||||
result << std::string(argv[2]);
|
||||
result << std::string("_rgba[");
|
||||
result << std::to_string(width*height*4);
|
||||
result << std::string("] =\n{\n\t");
|
||||
|
||||
result << std::setfill('0') << std::setw(2) << std::hex;
|
||||
while (i < width * height)
|
||||
{
|
||||
x = (uint32_t) i % width;
|
||||
y = (uint32_t)(i / width);
|
||||
|
||||
result << std::string("0x") << (int)input[y][x].red;
|
||||
result << std::string(", ");
|
||||
result << std::string("0x") << (int)input[y][x].green;
|
||||
result << std::string(", ");
|
||||
result << std::string("0x") << (int)input[y][x].blue;
|
||||
result << std::string(", ");
|
||||
result << std::string("0x") << (int)input[y][x].alpha;
|
||||
|
||||
i++;
|
||||
|
||||
if (i == width*height)
|
||||
result << std::string(",");
|
||||
else if (i % 5 == 0)
|
||||
result << std::string(",\n\t");
|
||||
else
|
||||
result << std::string(", ");
|
||||
}
|
||||
|
||||
result << std::string("\n};");
|
||||
|
||||
bitmap << result.rdbuf();
|
||||
|
||||
bitmap.close();
|
||||
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
19
tools/mkCharmap.sh
Executable file
19
tools/mkCharmap.sh
Executable file
|
@ -0,0 +1,19 @@
|
|||
#!/bin/bash
|
||||
|
||||
FLAGS="-Wall -std=c++11"
|
||||
LIBS=("libpng")
|
||||
NAME="mkCharmap"
|
||||
|
||||
SRCS=("mkCharmap.cpp")
|
||||
|
||||
for i in ${LIBS[@]}
|
||||
do
|
||||
LIBS_+="$(pkg-config --libs "${i}") "
|
||||
done
|
||||
|
||||
for i in ${SRCS[@]}
|
||||
do
|
||||
SRCS_+="$(find "${i}" -maxdepth 1 | grep -E ".cpp|.hpp") "
|
||||
done
|
||||
|
||||
g++ ${SRCS_} ${FLAGS} ${LIBS_[@]} -o ${NAME}
|
134
tools/out
Normal file
134
tools/out
Normal file
|
@ -0,0 +1,134 @@
|
|||
static const unsigned int out_width = 28;
|
||||
static const unsigned int out_height = 23;
|
||||
static const unsigned char out_rgba[2576] =
|
||||
{
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0xad, 0x84, 0x4a, 0xff, 0xad, 0x84, 0x4a, 0xff, 0xad, 0x84, 0x4a, 0xff, 0xad, 0x84, 0x4a, 0xff,
|
||||
0xad, 0x84, 0x4a, 0xff, 0xad, 0x84, 0x4a, 0xff, 0xad, 0x84, 0x4a, 0xff, 0xad, 0x84, 0x4a, 0xff, 0x3a, 0x2f, 0x20, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0xe1, 0xaa, 0x5d, 0xff,
|
||||
0x51, 0x40, 0x29, 0xff, 0x45, 0x37, 0x24, 0xff, 0x45, 0x37, 0x24, 0xff, 0x45, 0x37, 0x24, 0xff, 0x45, 0x37, 0x24, 0xff,
|
||||
0x45, 0x37, 0x24, 0xff, 0x45, 0x37, 0x24, 0xff, 0x1f, 0x1b, 0x16, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0x21, 0x1d, 0x17, 0xff, 0x52, 0x41, 0x29, 0xff,
|
||||
0x5e, 0x4b, 0x2e, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x5e, 0x4b, 0x2e, 0xff,
|
||||
0x5e, 0x4b, 0x2e, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x5f, 0x4b, 0x2e, 0xff, 0x20, 0x1c, 0x17, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0xe1, 0xaa, 0x5d, 0xff, 0x21, 0x1d, 0x17, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x27, 0x22, 0x1a, 0xff, 0x15, 0x14, 0x13, 0xff,
|
||||
0x45, 0x37, 0x24, 0xff, 0x34, 0x2b, 0x1e, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0x21, 0x1d, 0x17, 0xff,
|
||||
0x5e, 0x4b, 0x2e, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x3c, 0x31, 0x21, 0xff, 0xdf, 0xa9, 0x5c, 0xff, 0x92, 0x71, 0x41, 0xff, 0x45, 0x37, 0x24, 0xff, 0x34, 0x2b, 0x1e, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0x21, 0x1d, 0x17, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x20, 0x1c, 0x17, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x2a, 0x24, 0x1b, 0xff, 0xc1, 0x92, 0x52, 0xff,
|
||||
0x6c, 0x54, 0x32, 0xff, 0x45, 0x37, 0x24, 0xff, 0x34, 0x2b, 0x1e, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x7f, 0x62, 0x3a, 0xff,
|
||||
0x1a, 0x18, 0x15, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x1d, 0x1a, 0x16, 0xff, 0xbd, 0x8f, 0x50, 0xff, 0x85, 0x67, 0x3c, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x1b, 0x18, 0x15, 0xff, 0x11, 0x11, 0x11, 0xff, 0x45, 0x37, 0x24, 0xff,
|
||||
0x34, 0x2b, 0x1e, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x62, 0x4e, 0x30, 0xff,
|
||||
0xa7, 0x7f, 0x48, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0x80, 0x63, 0x3a, 0xff, 0x21, 0x1d, 0x17, 0xff,
|
||||
0xc4, 0x95, 0x53, 0xff, 0x46, 0x38, 0x25, 0xff, 0x45, 0x37, 0x24, 0xff, 0x34, 0x2b, 0x1e, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0xb2, 0x87, 0x4c, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0xe1, 0xaa, 0x5d, 0xff,
|
||||
0xe1, 0xaa, 0x5d, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0xc9, 0x98, 0x54, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0xd2, 0x9f, 0x57, 0xff,
|
||||
0x62, 0x4e, 0x30, 0xff, 0x34, 0x2b, 0x1e, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0xaa, 0x82, 0x49, 0xff, 0xcd, 0x9b, 0x56, 0xff, 0xcd, 0x9b, 0x56, 0xff, 0xcd, 0x9b, 0x56, 0xff, 0xcd, 0x9b, 0x56, 0xff,
|
||||
0xcd, 0x9b, 0x56, 0xff, 0xcd, 0x9b, 0x56, 0xff, 0xcd, 0x9b, 0x56, 0xff, 0xc5, 0x95, 0x52, 0xff, 0x31, 0x28, 0x1e, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
|
||||
};
|
Loading…
Reference in a new issue