mirror of
https://github.com/armel/uv-k1-k5v3-firmware-custom.git
synced 2026-10-02 03:15:37 +00:00
146 lines
2.9 KiB
C++
146 lines
2.9 KiB
C++
|
|
/* Copyright 2023 OneOfEleven
|
|
* https://github.com/DualTachyon
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <vector>
|
|
|
|
// ************************************************************************
|
|
// "rotate_font()" has nothing to do with this program at all, I just needed
|
|
// to write a bit of code to rotate some fonts I've drawn
|
|
|
|
void rotate_font(const char *filename1, const char *filename2)
|
|
{
|
|
std::vector <uint8_t> data;
|
|
|
|
if (filename1 == NULL || filename2 == NULL)
|
|
return;
|
|
|
|
// ****************************
|
|
// load the file
|
|
|
|
FILE *file = fopen(filename1, "rb");
|
|
if (file == NULL)
|
|
return;
|
|
|
|
if (fseek(file, 0, SEEK_END) != 0)
|
|
{
|
|
fclose(file);
|
|
return;
|
|
}
|
|
const size_t file_size = ftell(file);
|
|
if (file_size <= 0)
|
|
{
|
|
fclose(file);
|
|
return;
|
|
}
|
|
if (fseek(file, 0, SEEK_SET) != 0)
|
|
{
|
|
fclose(file);
|
|
return;
|
|
}
|
|
|
|
data.resize(file_size);
|
|
|
|
const size_t bytes_loaded = fread(&data[0], 1, file_size, file);
|
|
|
|
fclose(file);
|
|
|
|
if (bytes_loaded != file_size)
|
|
return;
|
|
|
|
// ***************************
|
|
// rotate the font 90-deg clockwise
|
|
|
|
for (unsigned int i = 0; i <= (data.size() - 8); i += 8)
|
|
{
|
|
uint8_t c1[8];
|
|
uint8_t c2[8];
|
|
memcpy(c1, &data[i], 8);
|
|
memset(c2, 0, 8);
|
|
for (unsigned int k = 0; k < 8; k++)
|
|
{
|
|
uint8_t b = c1[k];
|
|
for (unsigned int m = 0; m < 8; m++)
|
|
{
|
|
if (b & 0x80)
|
|
c2[m] |= 1u << k;
|
|
b <<= 1;
|
|
}
|
|
}
|
|
memcpy(&data[i], c2, 8);
|
|
}
|
|
|
|
// ***************************
|
|
// save the file
|
|
|
|
file = fopen(filename2, "wt");
|
|
if (file == NULL)
|
|
return;
|
|
|
|
fprintf(file, "const uint8_t gFontSmall[95][7] =\n");
|
|
fprintf(file, "{\n");
|
|
|
|
for (unsigned int i = 0; i < data.size(); )
|
|
{
|
|
char s[1024];
|
|
memset(s, 0, sizeof(s));
|
|
|
|
// for (unsigned int k = 0; k < 8 && i < data.size(); k++)
|
|
for (unsigned int k = 0; k < 7 && i < data.size(); k++)
|
|
{
|
|
char s2[16];
|
|
sprintf(s2, "0x%02X", data[i++]);
|
|
|
|
if (k == 0)
|
|
strcat(s, "\t{");
|
|
|
|
// if (k < 7)
|
|
if (k < 6)
|
|
{
|
|
strcat(s, s2);
|
|
strcat(s, ", ");
|
|
}
|
|
else
|
|
{
|
|
strcat(s, s2);
|
|
strcat(s, "},\n");
|
|
}
|
|
}
|
|
|
|
i++;
|
|
|
|
fprintf(file, "%s", s);
|
|
}
|
|
|
|
fprintf(file, "};\n");
|
|
|
|
fclose(file);
|
|
|
|
// ***************************
|
|
}
|
|
|
|
#pragma argsused
|
|
int main(int argc, char* argv[])
|
|
{
|
|
rotate_font("uv-k5_small.bin", "uv-k5_small.c");
|
|
rotate_font("uv-k5_small_bold.bin", "uv-k5_small_bold.c");
|
|
|
|
return 0;
|
|
}
|