4 #include "io/status_loggers.h"
7 #include "io/rgb_image.h"
8 #include "drv/input/keyboard.h"
9 #include "drv/input/keymap.h"
11 #include "sys/pixfmt.h"
13 tga_header_t pavi_tga_header;
14 void* pavi_image_buffer = 0;
15 void* pavi_view_buffer = 0;
17 uint32_t pavi_view(uint32_t argc,
char* argv[]) {
18 memset(&pavi_tga_header, 0,
sizeof pavi_tga_header);
21 tty_error(
"No arguments!\n");
25 size_t start_load = timestamp();
30 tty_printf(
"Failed to open file: %s!\n", argv[1]);
37 tty_printf(
"Pavi - Opening '%s'...", argv[1]);
39 tga_extract_info(argv[1], &pavi_tga_header);
41 qemu_log(
"W: %d H: %d", pavi_tga_header.w, pavi_tga_header.h);
44 tty_printf(
"Pavi - Reading contents of '%s'...", argv[1]);
46 pavi_image_buffer = kmalloc(pavi_tga_header.w * pavi_tga_header.h * 4);
47 pavi_view_buffer = kmalloc(pavi_tga_header.w * pavi_tga_header.h * 4);
49 tga_extract_pixels(argv[1], pavi_image_buffer);
51 qemu_warn(
"Ended reading data");
53 size_t nh = getScreenHeight();
54 size_t nw = (size_t)((
double)getScreenWidth() * ((double)pavi_tga_header.w / (
double)pavi_tga_header.h));
56 if(nw > pavi_tga_header.w || nh > pavi_tga_header.h) {
57 nw = pavi_tga_header.w;
58 nh = pavi_tga_header.h;
61 qemu_note(
"Colormap is: %x", pavi_tga_header.colormap);
63 pixfmt_conv(pavi_image_buffer, 32, pavi_tga_header.w, pavi_tga_header.h, SCREEN_BGR, SCREEN_RGB);
65 scale_rgb_image(pavi_image_buffer, pavi_tga_header.w, pavi_tga_header.h, nw, nh, 1, pavi_view_buffer);
67 qemu_note(
"Ended scaling");
69 size_t end_load = timestamp();
72 tty_printf(
"Pavi - '%s' [%dx%d] => [%dx%d] (Loaded in: %u ms) (Press ESC to exit)", argv[1], pavi_tga_header.w, pavi_tga_header.h, nw, nh, end_load - start_load);
74 keyboardctl(KEYBOARD_ECHO, 0);
76 draw_rgb_image(pavi_view_buffer, nw, nh, 32, (
int)(getScreenWidth() - nw) / 2, 16 + (
int)(getScreenHeight() - nh) / 2);
81 int key = getCharRaw();
90 keyboardctl(KEYBOARD_ECHO, 1);
92 kfree(pavi_image_buffer);
93 kfree(pavi_view_buffer);
Основные определения ядра
void * memset(void *ptr, char value, size_t num)
Заполнение массива указанными символами
void fclose(FILE *stream)
Закончить работу с файлом
FILE * fopen(const char *filename, const char *_mode)
Открывает файл
Структура файла. Требуется для работы с VFS.