forked from KolibriOS/kolibrios
imgview 0.08
git-svn-id: svn://kolibrios.org@958 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
43ecc0b6a4
commit
aef7c5284b
28
programs/media/imgview/MCSMEMM.H
Normal file
28
programs/media/imgview/MCSMEMM.H
Normal file
@ -0,0 +1,28 @@
|
||||
//
|
||||
|
||||
struct MemBlock
|
||||
{
|
||||
Dword Size;
|
||||
Dword Addr;
|
||||
MemBlock *Next;
|
||||
MemBlock *Previous;
|
||||
};
|
||||
|
||||
|
||||
#define INITIALQUEUESIZE (32 * 4)
|
||||
|
||||
#define FALSE 0
|
||||
#define TRUE -1
|
||||
|
||||
#define MB_FREE 0
|
||||
#define MB_USER 1
|
||||
|
||||
#define SIZE_ALIGN 4
|
||||
|
||||
|
||||
|
||||
Byte *allocmem( Dword reqsize );
|
||||
Dword freemem( void *vaddress );
|
||||
|
||||
|
||||
|
163
programs/media/imgview/STDARG.H
Normal file
163
programs/media/imgview/STDARG.H
Normal file
@ -0,0 +1,163 @@
|
||||
/***
|
||||
*stdarg.h - defines ANSI-style macros for variable argument functions
|
||||
*
|
||||
* Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
|
||||
*
|
||||
*Purpose:
|
||||
* This file defines ANSI-style macros for accessing arguments
|
||||
* of functions which take a variable number of arguments.
|
||||
* [ANSI]
|
||||
*
|
||||
* [Public]
|
||||
*
|
||||
****/
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#ifndef _INC_STDARG
|
||||
#define _INC_STDARG
|
||||
|
||||
#if !defined(_WIN32) && !defined(_MAC)
|
||||
#error ERROR: Only Mac or Win32 targets supported!
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _MSC_VER
|
||||
/*
|
||||
* Currently, all MS C compilers for Win32 platforms default to 8 byte
|
||||
* alignment.
|
||||
*/
|
||||
#pragma pack(push,8)
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef _VA_LIST_DEFINED
|
||||
#ifdef _M_ALPHA
|
||||
typedef struct {
|
||||
char *a0; /* pointer to first homed integer argument */
|
||||
int offset; /* byte offset of next parameter */
|
||||
} va_list;
|
||||
#else
|
||||
typedef char * va_list;
|
||||
#endif
|
||||
#define _VA_LIST_DEFINED
|
||||
#endif
|
||||
|
||||
#ifdef _M_IX86
|
||||
|
||||
|
||||
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
|
||||
|
||||
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
|
||||
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
|
||||
#define va_end(ap) ( ap = (va_list)0 )
|
||||
|
||||
#elif defined(_M_MRX000)
|
||||
|
||||
|
||||
/* Use these types and definitions if generating code for MIPS */
|
||||
|
||||
#define va_start(ap,v) ap = (va_list)&v + sizeof(v)
|
||||
#define va_end(list)
|
||||
#define va_arg(list, mode) ((mode *)(list =\
|
||||
(char *) ((((int)list + (__builtin_alignof(mode)<=4?3:7)) &\
|
||||
(__builtin_alignof(mode)<=4?-4:-8))+sizeof(mode))))[-1]
|
||||
|
||||
/* +++++++++++++++++++++++++++++++++++++++++++
|
||||
Because of parameter passing conventions in C:
|
||||
use mode=int for char, and short types
|
||||
use mode=double for float types
|
||||
use a pointer for array types
|
||||
+++++++++++++++++++++++++++++++++++++++++++ */
|
||||
|
||||
|
||||
#elif defined(_M_ALPHA)
|
||||
|
||||
|
||||
/* Use these types and definitions if generating code for ALPHA */
|
||||
|
||||
/*
|
||||
* The Alpha compiler supports two builtin functions that are used to
|
||||
* implement stdarg/varargs. The __builtin_va_start function is used
|
||||
* by va_start to initialize the data structure that locates the next
|
||||
* argument. The __builtin_isfloat function is used by va_arg to pick
|
||||
* which part of the home area a given register argument is stored in.
|
||||
* The home area is where up to six integer and/or six floating point
|
||||
* register arguments are stored down (so they can also be referenced
|
||||
* by a pointer like any arguments passed on the stack).
|
||||
*/
|
||||
|
||||
extern void * __builtin_va_start(va_list, ...);
|
||||
|
||||
#ifdef _CFRONT
|
||||
#define __builtin_isfloat(a) __builtin_alignof(a)
|
||||
#endif
|
||||
|
||||
#define va_start(list, v) __builtin_va_start(list, v, 1)
|
||||
#define va_end(list)
|
||||
#define va_arg(list, mode) \
|
||||
( *( ((list).offset += ((int)sizeof(mode) + 7) & -8) , \
|
||||
(mode *)((list).a0 + (list).offset - \
|
||||
((__builtin_isfloat(mode) && (list).offset <= (6 * 8)) ? \
|
||||
(6 * 8) + 8 : ((int)sizeof(mode) + 7) & -8) \
|
||||
) \
|
||||
) \
|
||||
)
|
||||
|
||||
#elif defined(_M_PPC)
|
||||
|
||||
/* Microsoft C8 front end (used in Motorola Merged compiler) */
|
||||
/* bytes that a type occupies in the argument list */
|
||||
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
|
||||
/* return 'ap' adjusted for type 't' in arglist */
|
||||
#define _ALIGNIT(ap,t) \
|
||||
((((int)(ap))+(sizeof(t)<8?3:7)) & (sizeof(t)<8?~3:~7))
|
||||
|
||||
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
|
||||
#define va_arg(ap,t) ( *(t *)((ap = (char *) (_ALIGNIT(ap, t) + _INTSIZEOF(t))) - _INTSIZEOF(t)) )
|
||||
#define va_end(ap) ( ap = (va_list)0 )
|
||||
|
||||
#elif defined(_M_M68K)
|
||||
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
|
||||
|
||||
#define va_start(ap,v) ( ap = (va_list)&v + (sizeof(v) < sizeof(int) ? sizeof(v) : _INTSIZEOF(v)) )
|
||||
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
|
||||
#define va_end(ap) ( ap = (va_list)0 )
|
||||
|
||||
#elif defined(_M_MPPC)
|
||||
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
|
||||
|
||||
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
|
||||
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
|
||||
#define va_end(ap) ( ap = (va_list)0 )
|
||||
|
||||
#else
|
||||
|
||||
/* A guess at the proper definitions for other platforms */
|
||||
|
||||
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
|
||||
|
||||
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
|
||||
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
|
||||
#define va_end(ap) ( ap = (va_list)0 )
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma pack(pop)
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
#endif /* _INC_STDARG */
|
29
programs/media/imgview/bin/ChangeLog
Normal file
29
programs/media/imgview/bin/ChangeLog
Normal file
@ -0,0 +1,29 @@
|
||||
Версия 0.08 -
|
||||
= Устарнена ошибка: программа вылетала при открытии несуществующего файла
|
||||
= Устарнена ошибка: при открытии файла через параметры, окно не подстраивалось под размеры изображения
|
||||
|
||||
Версия 0.07 - 05.08.08:
|
||||
= Исправлена ошибка с постоянной перерисовкой изображения
|
||||
= При открытии большого изображения окно не выезжает за пределы экрана (касается эмулятора)
|
||||
= Оптимизация кода
|
||||
= Новые иконки для кнопок (25х25 -> 21х21)
|
||||
= Новый режим отображения: подгонять под размеры окна (с сохранением пропорций изображения)
|
||||
= Подогнанное изображение центрируется
|
||||
|
||||
Версия 0.05 - 14.07.08:
|
||||
= Устранен баг с исчезновением полос прокрутки, и вообще скроллы стали юзабельней
|
||||
= Правильно отображаются перевернутые tga
|
||||
= Добавлены черно-белые и 16-ти цветные bmp
|
||||
= Исправление мелких, не влияющих на основную работу, ошибок
|
||||
|
||||
Версия 0.04 - 09.07.08:
|
||||
= Уменьшен размер программы, за счет удаления одинакового кода.
|
||||
= Изображение не выгружается до тех пор, пока не будет открыто новое.
|
||||
= Добавлен 16-битный bmp.
|
||||
= Исправлена ошибка с утечкой памяти.
|
||||
= Теперь с помощью соответствующих кнопок можно просматривать все, поддерживаемые программой,
|
||||
файлы текущего каталога, не выходя из программы.
|
||||
= Добавлена строка статуса
|
||||
|
||||
Версия 0.01 - 04.07.08:
|
||||
= Первая версия программы.
|
26
programs/media/imgview/bin/readme
Normal file
26
programs/media/imgview/bin/readme
Normal file
@ -0,0 +1,26 @@
|
||||
ImageView v 0.07
|
||||
--------------------------------------------------------------
|
||||
|
||||
Описание
|
||||
========
|
||||
Эта программа предназначена для удобного просмотра графических
|
||||
файлов. Поддерживаемые форматы: bmp (без сжатия), pcx (только
|
||||
256-цветные), tga (не все). Поддерживает запуск с параметрами,
|
||||
поэтому можно сделать в KFAR ассоциации с соответствующими
|
||||
файлами.
|
||||
|
||||
|
||||
Интерфейс
|
||||
=========
|
||||
Программа имеет интуитивно понятный интерфейс. В верхней части
|
||||
окна расположена панель управляющих кнопок. Вот их назначение
|
||||
(слева направо): открыть файл, перейти к предыдущиму файлу в
|
||||
каталоге, перейти к следующему файлу в каталоге, переключить
|
||||
режим просмотра. Внизу окна имеется строка состояния, отобра-
|
||||
жающая имя текущего файла, его номер в каталоге и общее число
|
||||
поддерживаемых файлов в каталоге.
|
||||
|
||||
|
||||
Sh@dy 05.08.08
|
||||
alex_megasoft@mail.ru
|
||||
http://artech.org.ru/
|
6
programs/media/imgview/compile.bat
Normal file
6
programs/media/imgview/compile.bat
Normal file
@ -0,0 +1,6 @@
|
||||
@echo off
|
||||
@cl /c /O2 /nologo main.cpp kosSyst.cpp mcsmemm.cpp formats\pcx.cpp formats\bmp.cpp formats\tga.cpp dlgopen.cpp
|
||||
@link /nologo /entry:crtStartUp /subsystem:native /base:0 /fixed /align:16 /nodefaultlib main.obj kosSyst.obj mcsmemm.obj pcx.obj bmp.obj tga.obj dlgopen.obj
|
||||
@tools\pe2kos main.exe imgview.kos PARAM
|
||||
@erase main.obj,kosSyst.obj,mcsmemm.obj,pcx.obj,bmp.obj,tga.obj,KosFile.obj,main.exe,dlgopen.obj
|
||||
pause
|
107
programs/media/imgview/dlgopen.cpp
Normal file
107
programs/media/imgview/dlgopen.cpp
Normal file
@ -0,0 +1,107 @@
|
||||
#include "kosSyst.h"
|
||||
|
||||
char* DialogOpenFile(void (*draw)())
|
||||
{
|
||||
sProcessInfo proc;
|
||||
kosFileInfo fi;
|
||||
char param[6];
|
||||
int i;
|
||||
Dword pID,msg_num=0;
|
||||
char path[1040];
|
||||
Byte* pPath=(Byte*)&path;
|
||||
|
||||
//Ïàðàìåòðû çàïóñêà X-TREE
|
||||
kos_ProcessInfo(&proc,-1);
|
||||
pID=proc.processInfo.PID;
|
||||
for(i=3;i!=-1;i--)
|
||||
{
|
||||
param[i]=(char)('0'+(pID % 10));
|
||||
pID=pID/10;
|
||||
}
|
||||
param[4]=(char)0x20;
|
||||
param[5]='O';
|
||||
param[6]=(char)0;
|
||||
//IPC
|
||||
((Dword*)pPath)[0] = 0;
|
||||
((Dword*)pPath)[1] = 8;
|
||||
|
||||
Dword retval;
|
||||
__asm
|
||||
{
|
||||
mov eax,60
|
||||
mov ebx,1
|
||||
mov ecx,pPath
|
||||
mov edx,1040
|
||||
int 40h
|
||||
}
|
||||
|
||||
sprintf(fi.fileURL,"/sys/sysxtree");
|
||||
fi.rwMode = 7;
|
||||
fi.OffsetLow = 0;
|
||||
fi.OffsetHigh = (Dword)param;
|
||||
fi.dataCount = 0;
|
||||
fi.bufferPtr = 0;
|
||||
int dlg_pID=kos_FileSystemAccess(&fi);
|
||||
if (dlg_pID<=0) return 0;
|
||||
|
||||
//kos_SetMaskForEvents(0x47);
|
||||
kos_SetMaskForEvents(0x67);
|
||||
//draw();
|
||||
|
||||
Dword btnID;
|
||||
Byte keyCode;
|
||||
|
||||
for(;;)
|
||||
{
|
||||
get_next_event:
|
||||
//Ñîáûòèÿ
|
||||
switch (kos_WaitForEvent(50))
|
||||
{
|
||||
case 1:
|
||||
draw();
|
||||
break;
|
||||
case 2:
|
||||
kos_GetKey(keyCode);
|
||||
break;
|
||||
case 3:
|
||||
kos_GetButtonID(btnID);
|
||||
break;
|
||||
case 7:
|
||||
if (msg_num==0)
|
||||
{
|
||||
((Dword*)pPath)[0] = 0;
|
||||
((Dword*)pPath)[1] = 8;
|
||||
((Dword*)pPath)[2] = 0;
|
||||
((Dword*)pPath)[3] = 0;
|
||||
((Dword*)pPath)[4] = 0;
|
||||
msg_num=1;
|
||||
draw();
|
||||
} else {
|
||||
return (char*)pPath+16;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
//Æèâ ëè åùå X-TREE?
|
||||
if (msg_num)
|
||||
{
|
||||
int proc_count=kos_ProcessInfo(&proc,-1);
|
||||
for(i=1;i<=proc_count;i++)
|
||||
{
|
||||
kos_ProcessInfo(&proc,i);
|
||||
if (proc.processInfo.PID==dlg_pID)
|
||||
{
|
||||
if (proc.processInfo.slot_state==9)
|
||||
{
|
||||
return 0;
|
||||
} else {
|
||||
goto get_next_event;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
1
programs/media/imgview/dlgopen.h
Normal file
1
programs/media/imgview/dlgopen.h
Normal file
@ -0,0 +1 @@
|
||||
char* DialogOpenFile(void (*draw)());
|
122
programs/media/imgview/formats/bmp.cpp
Normal file
122
programs/media/imgview/formats/bmp.cpp
Normal file
@ -0,0 +1,122 @@
|
||||
#include "..\kosSyst.h"
|
||||
#include "bmp.h"
|
||||
|
||||
int BMPFile::LoadBMPFile(Byte* filebuff, Dword filesize)
|
||||
{
|
||||
Dword offset;
|
||||
|
||||
memcpy((Byte*)&Bmp_head,(Byte*)filebuff,sizeof(tagBITMAPFILEHEADER));
|
||||
memcpy((Byte*)&Info_head,(Byte*)filebuff+14,sizeof(tagBITMAPINFOHEADER));
|
||||
|
||||
width=Info_head.biWidth;
|
||||
height=Info_head.biHeight;
|
||||
offset=(Dword)Bmp_head.bfOffbits;
|
||||
|
||||
int state=0;
|
||||
if (Bmp_head.bfType==0x4d42 && !Info_head.biCompression)
|
||||
{
|
||||
Byte* cBuffer;
|
||||
Byte* pImg;
|
||||
Byte* pPal;
|
||||
Dword x,y;
|
||||
Byte r;
|
||||
Dword s,p;
|
||||
Dword cWidth;
|
||||
int i;
|
||||
|
||||
buffer=kos_GetMemory(width*height*3);
|
||||
pImg=filebuff+offset;
|
||||
pPal=filebuff+53;
|
||||
|
||||
int align_bytes = (4 - ((width * 3) % 4)) % 4;
|
||||
Dword bpp = Info_head.biBitCount;
|
||||
|
||||
switch(Info_head.biBitCount)
|
||||
{
|
||||
/* 16,24,32-bit decoding */
|
||||
case 32:
|
||||
case 24:
|
||||
case 16:
|
||||
for(y=height-1;y!=-1;y--)
|
||||
{
|
||||
for(x=0;x<width;x++)
|
||||
{
|
||||
cBuffer=buffer+(y*width*3)+x*3;
|
||||
if (Info_head.biBitCount==16)
|
||||
{
|
||||
*(cBuffer+0)=(Byte)((*(Word*)(pImg)) & 31)<<3;
|
||||
*(cBuffer+1)=(Byte)((*(Word*)(pImg)>>5) & 31)<<3;
|
||||
*(cBuffer+2)=(Byte)((*(Word*)(pImg)>>10) & 31)<<3;
|
||||
} else {
|
||||
*(cBuffer+0)=*(pImg+0);
|
||||
*(cBuffer+1)=*(pImg+1);
|
||||
*(cBuffer+2)=*(pImg+2);
|
||||
}
|
||||
pImg=pImg+Info_head.biBitCount/8;
|
||||
}
|
||||
pImg=pImg+align_bytes;
|
||||
}
|
||||
break;
|
||||
/* 8-bit decoding */
|
||||
case 8:
|
||||
for(y=height-1;y!=-1;y--)
|
||||
{
|
||||
for(x=0;x<width;x++)
|
||||
{
|
||||
r=*(pImg); pImg++;
|
||||
cBuffer=buffer+(y*width*3)+x*3;
|
||||
*(cBuffer+0)=(Byte)(pPal[r*4+1]);
|
||||
*(cBuffer+1)=(Byte)(pPal[r*4+2]);
|
||||
*(cBuffer+2)=(Byte)(pPal[r*4+3]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
/* 1,4-bit decode */
|
||||
case 4:
|
||||
case 1:
|
||||
for(y=height-1;y!=-1;y--)
|
||||
{
|
||||
x=0;
|
||||
while(x<width-1)
|
||||
{
|
||||
s=*(Dword*)(pImg);
|
||||
pImg=pImg+4;
|
||||
__asm
|
||||
{
|
||||
mov eax,s
|
||||
bswap eax
|
||||
mov s,eax
|
||||
}
|
||||
for(i=0;i<32/bpp;i++)
|
||||
{
|
||||
if (x>=width) break;
|
||||
__asm
|
||||
{
|
||||
mov eax,s
|
||||
mov ecx,bpp
|
||||
rol eax,cl
|
||||
mov s,eax
|
||||
mov ebx,1
|
||||
shl ebx,cl
|
||||
dec ebx
|
||||
and eax,ebx
|
||||
mov p,eax
|
||||
}
|
||||
cBuffer=buffer+(y*width*3)+x*3;
|
||||
*(cBuffer+0)=(Byte)(pPal[p*4+1]);
|
||||
*(cBuffer+1)=(Byte)(pPal[p*4+2]);
|
||||
*(cBuffer+2)=(Byte)(pPal[p*4+3]);
|
||||
x++;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
state=1;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
state=1;
|
||||
}
|
||||
return state;
|
||||
}
|
45
programs/media/imgview/formats/bmp.h
Normal file
45
programs/media/imgview/formats/bmp.h
Normal file
@ -0,0 +1,45 @@
|
||||
#pragma pack(push, 1)
|
||||
typedef struct tagBITMAPFILEHEADER
|
||||
{
|
||||
Word bfType; //тип файла (для битового образа - BM)
|
||||
Dword bfSize; //размер файла в dword
|
||||
Word bfReserved1; //не используется
|
||||
Word bfReserved2; //не используется
|
||||
Dword bfOffbits; //смещение данных битового образа от заголовка в байтах
|
||||
} tagBITMAPFILEHEADER;
|
||||
|
||||
typedef struct tagBITMAPINFOHEADER
|
||||
{
|
||||
Dword biSize; //число байт, занимаемых структурой BITMAPINFOHEADER
|
||||
Dword biWidth; //ширина битового образа в пикселах
|
||||
Dword biHeight; //высота битового образа в пикселах
|
||||
Word biPlanes; //число битовых плоскостей устройства
|
||||
Word biBitCount; //число битов на пиксель
|
||||
Dword biCompression; //тип сжатия
|
||||
Dword biSizeImage; //размер картинки в байтах
|
||||
Dword biXPelsPerMeter; //горизонтальное разрешение устройства, пиксел/м
|
||||
Dword biYPelPerMeter; //вертикальное разрешение устройства, пиксел/м
|
||||
Dword biClrUsed; //число используемых цветов
|
||||
Dword biClrImportant; //число "важных" цветов
|
||||
} tagBITMAPINFOHEADER;
|
||||
|
||||
typedef struct tagRGBQUAD
|
||||
{
|
||||
Byte rgbBlue;
|
||||
Byte rgbGreen;
|
||||
Byte rgbRed;
|
||||
Byte rgbReserved;
|
||||
} tagRGBQUAD;
|
||||
#pragma pack(pop)
|
||||
|
||||
class BMPFile
|
||||
{
|
||||
protected:
|
||||
tagBITMAPFILEHEADER Bmp_head;
|
||||
tagBITMAPINFOHEADER Info_head;
|
||||
public:
|
||||
Dword width;
|
||||
Dword height;
|
||||
Byte* buffer;
|
||||
int BMPFile::LoadBMPFile(Byte* filebuff, Dword filesize);
|
||||
};
|
55
programs/media/imgview/formats/pcx.cpp
Normal file
55
programs/media/imgview/formats/pcx.cpp
Normal file
@ -0,0 +1,55 @@
|
||||
#include "..\kosSyst.h"
|
||||
#include "pcx.h"
|
||||
|
||||
int PCXFile::LoadPCXFile(Byte* filebuff, Dword filesize)
|
||||
{
|
||||
memcpy((Byte*)&Pcx_head,(Byte*)filebuff,sizeof(PCXHeader));
|
||||
|
||||
int state=0;
|
||||
if (Pcx_head.bManufacturer==0x0a && Pcx_head.bVersion==0x05)
|
||||
{
|
||||
width=Pcx_head.dwWidth-Pcx_head.dwX+1;
|
||||
height=Pcx_head.dwHeight-Pcx_head.dwY+1;
|
||||
buffer=kos_GetMemory(width*height*3);
|
||||
|
||||
Byte* pPal=filebuff+filesize-768;
|
||||
Byte* pImg=filebuff+128;
|
||||
Byte* cBuffer=(Byte*)buffer;
|
||||
if (Pcx_head.bNPlanes==1)
|
||||
{
|
||||
/* 8-bit decoding */
|
||||
Dword y,i;
|
||||
Byte cur_byte,counter;
|
||||
Dword cWidth;
|
||||
|
||||
for(y=0;y<height;y++)
|
||||
{
|
||||
cWidth=width;
|
||||
while(cWidth!=0)
|
||||
{
|
||||
cur_byte=*(pImg); pImg++;
|
||||
counter=1;
|
||||
if (cur_byte>=192)
|
||||
{
|
||||
counter=(cur_byte & 0x3F);
|
||||
cur_byte=*(pImg); pImg++;
|
||||
}
|
||||
for(i=0;i<counter;i++)
|
||||
{
|
||||
*(cBuffer+0)=(pPal[cur_byte*3+0]);
|
||||
*(cBuffer+1)=(pPal[cur_byte*3+1]);
|
||||
*(cBuffer+2)=(pPal[cur_byte*3+2]);
|
||||
cBuffer=cBuffer+3;
|
||||
cWidth--;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (Pcx_head.bNPlanes==3) {
|
||||
/* 24-bit decoding */
|
||||
state=1;
|
||||
}
|
||||
} else {
|
||||
state=1;
|
||||
}
|
||||
return state;
|
||||
}
|
31
programs/media/imgview/formats/pcx.h
Normal file
31
programs/media/imgview/formats/pcx.h
Normal file
@ -0,0 +1,31 @@
|
||||
#pragma pack(push, 1)
|
||||
typedef struct PCXHeader
|
||||
{
|
||||
Byte bManufacturer;
|
||||
Byte bVersion;
|
||||
Byte bEncoding;
|
||||
Byte bBPP;
|
||||
Word dwX;
|
||||
Word dwY;
|
||||
Word dwWidth;
|
||||
Word dwHeight;
|
||||
Word dwHRes;
|
||||
Word dwVRes;
|
||||
Byte colormap[48];
|
||||
Byte bReserved;
|
||||
Byte bNPlanes;
|
||||
Word iBPL;
|
||||
Word iPalInfo;
|
||||
} PCXHeader;
|
||||
#pragma pack(pop)
|
||||
|
||||
class PCXFile
|
||||
{
|
||||
protected:
|
||||
PCXHeader Pcx_head;
|
||||
public:
|
||||
Word width;
|
||||
Word height;
|
||||
Byte* buffer;
|
||||
int LoadPCXFile(Byte* filebuff, Dword filesize);
|
||||
};
|
103
programs/media/imgview/formats/tga.cpp
Normal file
103
programs/media/imgview/formats/tga.cpp
Normal file
@ -0,0 +1,103 @@
|
||||
#include "..\kosSyst.h"
|
||||
#include "tga.h"
|
||||
|
||||
int TGAFile::LoadTGAFile(Byte* filebuff, Dword filesize)
|
||||
{
|
||||
|
||||
memcpy((Byte*)&Tga_head,(Byte*)filebuff,sizeof(sTGAHeader));
|
||||
width=Tga_head.Width;
|
||||
height=Tga_head.Height;
|
||||
|
||||
Byte* pImg=filebuff+sizeof(sTGAHeader)+Tga_head.BytesInIdentField+Tga_head.ColorMapOrigin+(Tga_head.ColorMapLength*Tga_head.ColorMapEntrySize/8);
|
||||
Byte* pPal=filebuff+sizeof(sTGAHeader)+Tga_head.BytesInIdentField+Tga_head.ColorMapOrigin;
|
||||
Byte* cBuffer;
|
||||
int x,y;
|
||||
Byte r;
|
||||
int sm;
|
||||
|
||||
int state=1;
|
||||
|
||||
if (Tga_head.ImageDescByte >= 32) sm=height-1; else sm=0;
|
||||
// Èçîáðàæåíèå ñ ïàëèòðîé (ïàëèòðà 24 èëè 32-áèòíàÿ)
|
||||
if (Tga_head.ImageTypeCode==1)
|
||||
{
|
||||
if (Tga_head.ColorMapEntrySize>=24)
|
||||
{
|
||||
buffer=kos_GetMemory(width*height*3);
|
||||
int bpp=Tga_head.ColorMapEntrySize/8;
|
||||
for(y=height-1;y!=-1;y--)
|
||||
{
|
||||
for(x=0;x<width;x++)
|
||||
{
|
||||
r=*(pImg); pImg++;
|
||||
cBuffer=buffer+(abs(sm-y)*width*3)+x*3;
|
||||
*(cBuffer+0)=(Byte)(pPal[r*bpp+1]);
|
||||
*(cBuffer+1)=(Byte)(pPal[r*bpp+2]);
|
||||
*(cBuffer+2)=(Byte)(pPal[r*bpp+3]);
|
||||
}
|
||||
}
|
||||
state=0;
|
||||
}
|
||||
}
|
||||
// ÖÂåòíîå èçîáðàæåíèå áåç ñæàòèÿ è ïàëèòðû
|
||||
else if (Tga_head.ImageTypeCode==2)
|
||||
{
|
||||
switch (Tga_head.ImagePixelSize)
|
||||
{
|
||||
case 32:
|
||||
case 24:
|
||||
buffer=kos_GetMemory(width*height*3);
|
||||
for(y=height-1;y!=-1;y--)
|
||||
{
|
||||
for(x=0;x<width;x++)
|
||||
{
|
||||
cBuffer=buffer+(abs(sm-y)*width*3)+x*3;
|
||||
*(cBuffer+0)=*(pImg+0);
|
||||
*(cBuffer+1)=*(pImg+1);
|
||||
*(cBuffer+2)=*(pImg+2);
|
||||
pImg=pImg+Tga_head.ImagePixelSize/8;
|
||||
}
|
||||
}
|
||||
state=0;
|
||||
break;
|
||||
case 16:
|
||||
buffer=kos_GetMemory(width*height*3);
|
||||
for(y=height-1;y!=-1;y--)
|
||||
{
|
||||
for(x=0;x<width;x++)
|
||||
{
|
||||
cBuffer=buffer+(abs(sm-y)*width*3)+x*3;
|
||||
*(cBuffer+0)=(Byte)((*(Word*)(pImg)) & 31)<<3;
|
||||
*(cBuffer+1)=(Byte)((*(Word*)(pImg)>>5) & 31)<<3;
|
||||
*(cBuffer+2)=(Byte)((*(Word*)(pImg)>>10) & 31)<<3;
|
||||
pImg=pImg+2;
|
||||
}
|
||||
}
|
||||
state=0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Ìîíîõðîìíîå èçîáðàæåíèå
|
||||
else if (Tga_head.ImageTypeCode==3)
|
||||
{
|
||||
switch (Tga_head.ImagePixelSize)
|
||||
{
|
||||
case 8:
|
||||
buffer=kos_GetMemory(width*height*3);
|
||||
for(y=height-1;y!=-1;y--)
|
||||
{
|
||||
for(x=0;x<width;x++)
|
||||
{
|
||||
cBuffer=buffer+(abs(sm-y)*width*3)+x*3;
|
||||
*(cBuffer+0)=*(pImg);
|
||||
*(cBuffer+1)=*(pImg);
|
||||
*(cBuffer+2)=*(pImg);
|
||||
pImg++;
|
||||
}
|
||||
}
|
||||
state=0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return state;
|
||||
}
|
37
programs/media/imgview/formats/tga.h
Normal file
37
programs/media/imgview/formats/tga.h
Normal file
@ -0,0 +1,37 @@
|
||||
#pragma pack(push, 1)
|
||||
typedef struct sTGAHeader
|
||||
{
|
||||
Byte BytesInIdentField;
|
||||
Byte ColorMapType; // Color map type - 0 [no map] 1 [256 entry]
|
||||
Byte ImageTypeCode; /* Image type
|
||||
[0] No image data included
|
||||
[1] Uncompressed color map image [4,6]
|
||||
[2] Uncompressed RGB Image [16,24]
|
||||
[3] Uncompressed Black & White
|
||||
[9] RLE Color map image
|
||||
[10] RLE RGB Image
|
||||
[11] RLE Black & White
|
||||
[32 | 33] compressed color map by Huffman, Delta, RLE
|
||||
*/
|
||||
Word ColorMapOrigin; // Offset of first color map entry
|
||||
Word ColorMapLength; // Number of color map entries
|
||||
Byte ColorMapEntrySize; // Number of bits per color map entries
|
||||
Word XOrigin;
|
||||
Word YOrigin;
|
||||
Word Width;
|
||||
Word Height;
|
||||
Byte ImagePixelSize; // BPP
|
||||
Byte ImageDescByte; // Flags
|
||||
} sTGAHeader;
|
||||
#pragma pack(pop)
|
||||
|
||||
class TGAFile
|
||||
{
|
||||
protected:
|
||||
sTGAHeader Tga_head;
|
||||
public:
|
||||
Word width;
|
||||
Word height;
|
||||
Byte* buffer;
|
||||
int LoadTGAFile(Byte* filebuff, Dword filesize);
|
||||
};
|
215
programs/media/imgview/gfx.cpp
Normal file
215
programs/media/imgview/gfx.cpp
Normal file
@ -0,0 +1,215 @@
|
||||
RGB tbOpen[] = { /* 21x21 */
|
||||
0xEFEBEF,0xBDCDE1,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0xBDCDE1,0xEFEBEF,
|
||||
0xBDCDE1,0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,0xBDCDE1,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x8491A4,0x8491A4,0x8193B1,0xB2B8C3,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x607391,0xB2B8C3,0xEFEBEF,0xEFEBEF,0x8491A4,0xC3C9D3,0x607391,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xD4D3CC,0xB0A890,0xB0A890,0xB0A890,0xB0A890,0xB0A890,0xCAC4B6,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xC3C9D3,0x4C658B,0x4C658B,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xB0A890,0xEBD5A0,0xFCF0B0,0xFCF0B0,0xFAE8A0,0xFAE8A0,0xB0A191,0xCAC4B6,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x4C658B,0x4C658B,0x4C658B,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xB0A191,0xF5EBA4,0xFCF0B0,0xFAE8A0,0xFAE8A0,0xFAE8A0,0xF9D370,0xA19B96,0xA09880,0xA09880,0xA09080,0x8C8C8C,0x908770,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xB0A191,0xFAE8A0,0xFAE8A0,0xFAE8A0,0xFAE8A0,0xFEE080,0xFBD460,0xFBD460,0xFBD460,0xFBD460,0xFBD460,0xFBD460,0x908770,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xA19B96,0xFAE8A0,0xFAE8A0,0xFAE8A0,0xC0B200,0xC0B200,0xB0A890,0xB0A890,0xB0A191,0xB0A191,0xA09880,0xA09880,0xA09080,0xA09080,0x828282,0x908770,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xA09880,0xF5E190,0xFAE8A0,0xEED483,0xB0A890,0xFEE080,0xFEE080,0xFEE080,0xFEE080,0xFEE080,0xFEE080,0xFEE080,0xF9D370,0xF9D370,0xE0985D,0xA09080,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xA09880,0xF5E190,0xF5E190,0xB0A890,0xC0B200,0xF9D370,0xFBD460,0xFBD460,0xFBD460,0xFBD460,0xF2D050,0xF5C34E,0xE8B544,0xEAAA00,0x706850,0xCCCBCB,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xA09080,0xEED483,0xEED483,0xB0A890,0xFEE080,0xF9D370,0xFBD460,0xFBD460,0xFBD460,0xF5C34E,0xE8B544,0xE8B544,0xEAAA00,0x896C22,0x908770,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xA09080,0xEED483,0xB0A890,0xD0C385,0xF9D370,0xFBD460,0xFBD460,0xF5C34E,0xF5C34E,0xE8B544,0xEAAA00,0xEAAA00,0xC68E0F,0x614C00,0xCCCBCB,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0x828282,0xD0C385,0xB0A890,0xFEE080,0xFBD460,0xF5C34E,0xF5C34E,0xE8B544,0xEAAA00,0xEAAA00,0xEAAA00,0xC68E0F,0x896C22,0x595B59,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0x908770,0xB0A191,0xD0C385,0xD09100,0xD09100,0xD09100,0xC68E0F,0xC68E0F,0xB08010,0xB08010,0xA07820,0x896C22,0x614C00,0xA8ABAC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0x908770,0x908463,0x807870,0x84704C,0x706050,0x645448,0x444646,0x403730,0x2C2726,0x2C2726,0x12100E,0x12100E,0x12100E,0xEFEEE8,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0xBDCDE1,0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,0xBDCDE1,
|
||||
0xEFEBEF,0xBDCDE1,0x98AFBE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0xBDCDE1,0xEFEBEF,
|
||||
};
|
||||
RGB tbNext[] = { /* 21x21 */
|
||||
0xEFEBEF,0xBDCDE1,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0xBDCDE1,0xEFEBEF,
|
||||
0xBDCDE1,0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,0xBDCDE1,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x2D84DA,0x2D84DA,0x2D84DA,0x2D84DA,0x2D84DA,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x2D84DA,0x2D84DA,0x4EB6FF,0x2DA8FF,0x14A0FF,0x0200FF,0x0090F6,0x0056BC,0x0054BA,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x2D84DA,0x62BBFE,0x2DA8FF,0x2DA8FF,0x0200FF,0x0095FB,0x008CF2,0x0087ED,0x007CE1,0x0075DB,0x0049AF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x1E7BD6,0x4EB6FF,0x2DA8FF,0x62BBFE,0x0095FB,0x0090F6,0x0087ED,0x0082E7,0x0082E7,0x007CE1,0x0069CF,0x0066CC,0x2657AF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x1E7BD6,0x14A0FF,0x0200FF,0xFEFFFF,0xA4D4FE,0x0082E7,0x007CE1,0x0075DB,0xFFFFFF,0xBFDBF4,0x0066CC,0x0066CC,0x004DB3,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0x0667CA,0xA9CFF,0x0095FB,0x0090F6,0xFEFFFF,0xFDFEFF,0x8BB5E7,0x006FD5,0x0069CF,0xFFFFFF,0xBFDBF4,0x0066CC,0x0066CC,0x0064CA,0x0056BC,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0x006FD5,0x0095FB,0x008CF2,0x0082E7,0xFFFFFF,0xFEFFFF,0xFDFEFF,0x5DA2E2,0x0066CC,0xFFFFFF,0xBFDBF4,0x0066CC,0x0066CC,0x0066CC,0x0056BC,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0x006FD5,0x0087ED,0x007CE1,0x0075DB,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFD,0x1E7BD6,0xFFFFFF,0xBFDBF4,0x0066CC,0x0066CC,0x0066CC,0x0056BC,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0x006FD5,0x007CE1,0x006FD5,0x0069CF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x5DA2E2,0x0064CA,0xFFFFFF,0xBFDBF4,0x0066CC,0x0066CC,0x0064CA,0x0056BC,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0x006FD5,0x0069CF,0x0066CC,0x0066CC,0xFFFFFF,0xEBF5FE,0x2D84DA,0x0066CC,0x0066CC,0xFFFFFF,0xBFDBF4,0x0066CC,0x0066CC,0x0053B9,0x0056BC,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x004DB3,0x0066CC,0x0066CC,0xFFFFFD,0x2D84DA,0x0066CC,0x0066CC,0x0066CC,0xFFFFFF,0xBFDBF4,0x0066CC,0x0066CC,0x1049A9,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x004DB3,0x0000C0,0x0066CC,0x0066CC,0x0064CA,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x004DB3,0x0046AC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x2657AF,0x0056BC,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x0049AF,0x0046AC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x004DB3,0x004DB3,0x0053B9,0x0000C0,0x0000C0,0x0000C0,0x004DB3,0x2657AF,0x0046AC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x0046AC,0x0046AC,0x0046AC,0x0046AC,0x0046AC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0xBDCDE1,0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,0xBDCDE1,
|
||||
0xEFEBEF,0xBDCDE1,0x98AFBE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0xBDCDE1,0xEFEBEF,
|
||||
};
|
||||
RGB tbPrev[] = { /* 21x21 */
|
||||
0xEFEBEF,0xBDCDE1,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0xBDCDE1,0xEFEBEF,
|
||||
0xBDCDE1,0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,0xBDCDE1,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x2D84DA,0x2D84DA,0x2D84DA,0x2D84DA,0x2D84DA,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x2D84DA,0x2D84DA,0x62BBFE,0x2DA8FF,0x2DA8FF,0x0200FF,0x0095FB,0x0056BC,0x0056BC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x2D84DA,0x62BBFE,0x4EB6FF,0x2DA8FF,0x14A0FF,0x0200FF,0x0090F6,0x0087ED,0x0082E7,0x007CE1,0x004DB3,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x1E7BD6,0x62BBFE,0x2DA8FF,0x2DA8FF,0x0090F6,0x0095FB,0x008CF2,0x0082E7,0x007CE1,0x1E7BD6,0x0069CF,0x0066CC,0x1049A9,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x1E7BD6,0x2DA8FF,0xA9CFF,0xCAE6FF,0xFFFFFF,0x0087ED,0x007CE1,0x0075DB,0x5DA2E2,0xFDFEFF,0x0066CC,0x0066CC,0x0056BC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0x0064CA,0x14A0FF,0x0200FF,0x0095FB,0xBDDEFF,0xFFFFFF,0x007CE1,0x006FD5,0x5DA2E2,0xFFFFFF,0xFFFFFF,0x0066CC,0x0066CC,0x0066CC,0x0056BC,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0x0064CA,0x0095FB,0x008CF2,0x0087ED,0xBFDBF4,0xFDFEFF,0x006FD5,0x2D84DA,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x0066CC,0x0066CC,0x0066CC,0x0056BC,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0x0000C0,0x0087ED,0x0082E7,0x007CE1,0xBFDBF4,0xFFFFFF,0x1E7BD6,0xEBF5FE,0xFFFFFF,0xFFFFFF,0xFFFFFF,0x0066CC,0x0066CC,0x0066CC,0x0056BC,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0x0046AC,0x007CE1,0x0075DB,0x0069CF,0xBFDBF4,0xFFFFFF,0x1070CF,0x2D84DA,0xFFFFFD,0xFFFFFF,0xFFFFFF,0x0066CC,0x0066CC,0x0066CC,0x0056BC,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0x0046AC,0x0066CC,0x0066CC,0x0066CC,0xBFDBF4,0xFFFFFF,0x0066CC,0x1070CF,0x2D84DA,0xFFFFFF,0xFFFFFF,0x0066CC,0x0066CC,0x0062C8,0x0056BC,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x004DB3,0x0066CC,0x0066CC,0xBFDBF4,0xFFFFFF,0x0066CC,0x0066CC,0x1070CF,0x2D84DA,0xFFFFFF,0x0066CC,0x0066CC,0x004DB3,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x0046AC,0x0000C0,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x438DD9,0x0066CC,0x0000C0,0x0056BC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x2657AF,0x0000C0,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x0066CC,0x0000C0,0x0056BC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x0046AC,0x0046AC,0x0056BC,0x0066CC,0x0066CC,0x0066CC,0x0056BC,0x0046AC,0x0046AC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x0046AC,0x0046AC,0x0046AC,0x0046AC,0x0046AC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0xBDCDE1,0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,0xBDCDE1,
|
||||
0xEFEBEF,0xBDCDE1,0x98AFBE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0xBDCDE1,0xEFEBEF,
|
||||
};
|
||||
RGB tbFit[] = { /* 21x21 */
|
||||
0xEFEBEF,0xBDCDE1,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0xBDCDE1,0xEFEBEF,
|
||||
0xBDCDE1,0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,0xBDCDE1,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x003399,0x003399,0x003399,0x003399,0x003399,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x003399,0x003399,0x003399,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x003399,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x757DAC,0x757DAC,0x757DAC,0x757DAC,0x757DAC,0x757DAC,0x757DAC,0x757DAC,0x757DAC,0x757DAC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x757DAC,0x78C9FF,0x78C9FF,0x78C9FF,0x78C9FF,0x78C9FF,0x78C9FF,0x78C9FF,0x78C9FF,0x757DAC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0x003399,0xEFEBEF,0xEFEBEF,0x757DAC,0xB5E3FF,0x9BD1DC,0xAEDBF7,0xB5E3FF,0xB5E3FF,0xB5E3FF,0xB5E3FF,0xB5E3FF,0x757DAC,0xEFEBEF,0xEFEBEF,0x003399,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0x003399,0x003399,0xEFEBEF,0x757DAC,0xDFE7EE,0x23791E,0x3F0031,0xEBF5FE,0xF3F9FF,0xF3F9FF,0xF3F9FF,0xF3F9FF,0x757DAC,0xEFEBEF,0x10409F,0x003399,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0x003399,0x003399,0x2657AF,0x767DAA,0x5EB541,0x3F0031,0x3F0031,0x5EB541,0xF5F8F3,0x5EB541,0x85CE70,0xFAFCF9,0x757DAC,0x2657AF,0x003399,0x003399,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0x003399,0x003399,0xEFEBEF,0x757DAC,0x5EB541,0x5EC33B,0x5EB541,0x5EB541,0x5EB541,0x5EB541,0x5EB541,0x5EB541,0x757DAC,0xEFEBEF,0x10409F,0x003399,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0x003399,0xEFEBEF,0xEFEBEF,0x757DAC,0x7ED351,0x7ED351,0x7ED351,0x7ED351,0x7ED351,0x7ED351,0x7ED351,0x7ED351,0x757DAC,0xEFEBEF,0xEFEBEF,0x003399,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x757DAC,0x757DAC,0x757DAC,0x7600A6,0x757DAC,0x7600A6,0x757DAC,0x757DAC,0x757DAC,0x757DAC,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x10409F,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x003399,0x003399,0x10409F,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x003399,0x003399,0x003399,0x003399,0x003399,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,
|
||||
0xBDCDE1,0x94AECE,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0xEFEBEF,0x94AECE,0xBDCDE1,
|
||||
0xEFEBEF,0xBDCDE1,0x98AFBE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0xBDCDE1,0xEFEBEF,
|
||||
};
|
||||
|
||||
RGB arrow_up[] = { /* 15x15 */
|
||||
0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,
|
||||
0x94AECE,0xE7E7E7,0xE7E7E7,0xE6E6E6,0xE8E8E8,0xEBEBEB,0xE5E5E5,0xE3E3E3,0xE9E9E9,0xE9E9E9,0xE9E9E9,0xE4E4E4,0xEAEAEA,0xC4C4C4,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xDFDFDF,0xE1E1E1,0xD9D9D9,0xD8D8D8,0xD9D9D9,0xDFDFDF,0xD4D4D4,0xCFCFCF,0xD8D8D8,0xCECECE,0xCECECE,0xB6B6B6,0x94AECE,
|
||||
0x94AECE,0xEAEAEA,0xE2E2E2,0xDADADA,0xE0E0E0,0xDBDBDB,0xDCDCDC,0xCECECE,0xD6D6D6,0xDADADA,0xD1D1D1,0xCCCCCC,0xCFCFCF,0xB0B0B0,0x94AECE,
|
||||
0x94AECE,0xE1E1E1,0xE0E0E0,0xDADADA,0xD7D7D7,0xDADADA,0xDBDBDB,0x343434,0xCFCFCF,0xD0D0D0,0xCBCBCB,0xCDCDCD,0xCDCDCD,0xA8A8A8,0x94AECE,
|
||||
0x94AECE,0xE5E5E5,0xDEDEDE,0xDCDCDC,0xD5D5D5,0xD9D9D9,0x2E2E2E,0x333333,0x333333,0xD0D0D0,0xCFCFCF,0xC9C9C9,0xCACACA,0xB1B1B1,0x94AECE,
|
||||
0x94AECE,0xE5E5E5,0xDADADA,0xDDDDDD,0xD3D3D3,0x343434,0x343434,0x343434,0x343434,0x343434,0xCBCBCB,0xC8C8C8,0xC8C8C8,0xB5B5B5,0x94AECE,
|
||||
0x94AECE,0xEAEAEA,0xD7D7D7,0xD1D1D1,0x343434,0x343434,0x343434,0x343434,0x343434,0x343434,0x343434,0xC8C8C8,0xCACACA,0xA8A8A8,0x94AECE,
|
||||
0x94AECE,0xE3E3E3,0xDCDCDC,0xDCDCDC,0xCDCDCD,0xD0D0D0,0x353535,0x343434,0x303030,0xCDCDCD,0xC0C0C0,0xC7C7C7,0xC6C6C6,0xADADAD,0x94AECE,
|
||||
0x94AECE,0xEBEBEB,0xCFCFCF,0xCFCFCF,0xD7D7D7,0xD3D3D3,0x2C2C2C,0x383838,0x353535,0xC5C5C5,0xC9C9C9,0xC6C6C6,0xC3C3C3,0xACACAC,0x94AECE,
|
||||
0x94AECE,0xE6E6E6,0xD2D2D2,0xD4D4D4,0xC9C9C9,0xC8C8C8,0xCECECE,0xC5C5C5,0xC8C8C8,0xC8C8C8,0xC2C2C2,0xC8C8C8,0xBDBDBD,0xAFAFAF,0x94AECE,
|
||||
0x94AECE,0xE7E7E7,0xCDCDCD,0xCFCFCF,0xD6D6D6,0xCDCDCD,0xCDCDCD,0xCACACA,0xC5C5C5,0xC8C8C8,0xBEBEBE,0xBBBBBB,0xC0C0C0,0xACACAC,0x94AECE,
|
||||
0x94AECE,0xE9E9E9,0xD0D0D0,0xCDCDCD,0xC5C5C5,0xCACACA,0xC5C5C5,0xC4C4C4,0xC6C6C6,0xC2C2C2,0xC0C0C0,0xC3C3C3,0xC0C0C0,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xC9C9C9,0xB2B2B2,0xACACAC,0xB0B0B0,0xAEAEAE,0xAFAFAF,0xB0B0B0,0xAFAFAF,0xADADAD,0xB0B0B0,0xADADAD,0xABABAB,0xADADAD,0x94AECE,
|
||||
0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,
|
||||
};
|
||||
RGB arrow_right[] = { /* 15x15 */
|
||||
0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xF1F1F1,0xEAEAEA,0xE8E8E8,0xE1E1E1,0xDEDEDE,0xD9D9D9,0xD9D9D9,0xCFCFCF,0xD1D1D1,0xC9C9C9,0xAFAFAF,0x94AECE,
|
||||
0x94AECE,0xF3F3F3,0xE2E2E2,0xDFDFDF,0xDFDFDF,0xD9D9D9,0xDBDBDB,0xD8D8D8,0xD6D6D6,0xD3D3D3,0xD5D5D5,0xCFCFCF,0xCFCFCF,0xB3B3B3,0x94AECE,
|
||||
0x94AECE,0xF3F3F3,0xE0E0E0,0xDBDBDB,0xDEDEDE,0xDADADA,0xD9D9D9,0xD5D5D5,0xD5D5D5,0xD3D3D3,0xCFCFCF,0xD0D0D0,0xCDCDCD,0xB3B3B3,0x94AECE,
|
||||
0x94AECE,0xF0F0F0,0xDCDCDC,0xE0E0E0,0xD9D9D9,0xD8D8D8,0xD6D6D6,0x333333,0xD3D3D3,0xD0D0D0,0xD1D1D1,0xCBCBCB,0xCACACA,0xB2B2B2,0x94AECE,
|
||||
0x94AECE,0xF3F3F3,0xDEDEDE,0xD6D6D6,0xD7D7D7,0xD8D8D8,0xD4D4D4,0x353535,0x333333,0xD0D0D0,0xCCCCCC,0xCFCFCF,0xCACACA,0xB3B3B3,0x94AECE,
|
||||
0x94AECE,0xF2F2F2,0xD7D7D7,0xDBDBDB,0xD8D8D8,0x323232,0x333333,0x313131,0x323232,0x363636,0xC9C9C9,0xC9C9C9,0xC6C6C6,0xB4B4B4,0x94AECE,
|
||||
0x94AECE,0xF2F2F2,0xD9D9D9,0xD5D5D5,0xD6D6D6,0x343434,0x343434,0x343434,0x343434,0x313131,0x343434,0xC7C7C7,0xC9C9C9,0xB0B0B0,0x94AECE,
|
||||
0x94AECE,0xF3F3F3,0xD7D7D7,0xD2D2D2,0xD1D1D1,0x343434,0x323232,0x343434,0x343434,0x303030,0xCBCBCB,0xC5C5C5,0xC5C5C5,0xB4B4B4,0x94AECE,
|
||||
0x94AECE,0xF2F2F2,0xD3D3D3,0xD5D5D5,0xD1D1D1,0xCFCFCF,0xCCCCCC,0x333333,0x323232,0xC9C9C9,0xC5C5C5,0xC5C5C5,0xC3C3C3,0xB0B0B0,0x94AECE,
|
||||
0x94AECE,0xF2F2F2,0xD3D3D3,0xCECECE,0xCFCFCF,0xCBCBCB,0xCCCCCC,0x343434,0xC7C7C7,0xC8C8C8,0xC3C3C3,0xC1C1C1,0xC2C2C2,0xB3B3B3,0x94AECE,
|
||||
0x94AECE,0xF2F2F2,0xD0D0D0,0xD0D0D0,0xCCCCCC,0xCBCBCB,0xC9C9C9,0xC7C7C7,0xC6C6C6,0xC4C4C4,0xC4C4C4,0xC1C1C1,0xBEBEBE,0xB1B1B1,0x94AECE,
|
||||
0x94AECE,0xF2F2F2,0xCFCFCF,0xCACACA,0xCCCCCC,0xC9C9C9,0xC8C8C8,0xC6C6C6,0xC4C4C4,0xC3C3C3,0xC0C0C0,0xC0C0C0,0xBDBDBD,0xB1B1B1,0x94AECE,
|
||||
0x94AECE,0xF4F4F4,0xAEAEAE,0xB5B5B5,0xB2B2B2,0xB1B1B1,0xB2B2B2,0xB2B2B2,0xB2B2B2,0xB2B2B2,0xB1B1B1,0xB4B4B4,0xB1B1B1,0xB5B5B5,0x94AECE,
|
||||
0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,
|
||||
};
|
||||
RGB arrow_down[] = { /* 15x15 */
|
||||
0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xF3F3F1,0xF3F3F1,0xF0F0EE,0xF8F8F6,0xF6F6F4,0xEFEFED,0xF5F5F5,0xF1F1F1,0xEEEEEE,0xF4F4F4,0xEEEEEC,0x94AECE,
|
||||
0x94AECE,0xEBEBEB,0xE6E6E6,0xE0E0E0,0xD9D9D9,0xDADADA,0xD9D9D9,0xD4D4D4,0xD7D7D7,0xD3D3D3,0xD1D1D1,0xD8D8D8,0xCACACA,0xB1B1B1,0x94AECE,
|
||||
0x94AECE,0xF1F1F1,0xDFDFDF,0xD9D9D9,0xDFDFDF,0xDCDCDC,0xD6D6D6,0xD8D8D8,0xD3D3D3,0xD6D6D8,0xCFCFD1,0xCBCBCB,0xD1D1D1,0xB2B2B2,0x94AECE,
|
||||
0x94AECE,0xE9E9E9,0xE0E0E0,0xDBDBDB,0xDADADA,0xDCDCDC,0xD4D4D4,0xD7D7D7,0xD2D2D2,0xD1D1D1,0xD0D0D0,0xD0D0D0,0xC9C9C9,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE3E3E3,0xE0E0E0,0xD3D3D3,0xDBDBDB,0xD3D3D3,0x353535,0x353535,0x2F2F2F,0xD0D0D0,0xC6C6C6,0xCCCCCC,0xCBCBCB,0xB3B3B3,0x94AECE,
|
||||
0x94AECE,0xDEDEDE,0xDFDFDF,0xD9D9D9,0xD9D9D9,0xCFCFCF,0x343434,0x323232,0x343434,0xD0D0D0,0xCACACA,0xCACACA,0xC5C5C5,0xB1B1B1,0x94AECE,
|
||||
0x94AECE,0xE1E1E1,0xD6D6D6,0xD4D4D4,0x343434,0x323232,0x333333,0x323232,0x323232,0x333333,0x353535,0xC8C8C8,0xC8C8C8,0xADADAD,0x94AECE,
|
||||
0x94AECE,0xD7D7D7,0xD4D4D4,0xD3D3D3,0xD3D3D3,0x313131,0x353535,0x333333,0x363636,0x323232,0xCBCBCB,0xBFBFBF,0xC9C9C9,0xB4B4B4,0x94AECE,
|
||||
0x94AECE,0xD9D9D9,0xD5D5D5,0xD1D1D1,0xD3D3D3,0xD2D2D2,0x333333,0x323232,0x303030,0xC5C5C5,0xCACACA,0xC8C8C8,0xBCBCBC,0xB0B0B0,0x94AECE,
|
||||
0x94AECE,0xCDCDCD,0xDADADA,0xCFCFCF,0xC9C9C9,0xD3D3D3,0xC9C9C9,0x343434,0xCCCCCC,0xC7C7C7,0xC2C2C2,0xC3C3C3,0xC3C3C3,0xB3B3B3,0x94AECE,
|
||||
0x94AECE,0xCECECE,0xD1D1D1,0xCFCFCF,0xCFCFCF,0xC8C8C8,0xCBCBCB,0xC6C6C6,0xC6C6C6,0xC7C7C7,0xBEBEBE,0xC3C3C3,0xBDBDBD,0xB1B1B1,0x94AECE,
|
||||
0x94AECE,0xCCCCCC,0xCCCCCC,0xCCCCCC,0xCCCCCC,0xCACACA,0xC8C8C8,0xC6C6C6,0xC5C5C5,0xC2C2C2,0xC4C4C4,0xBFBFBF,0xB8B8B8,0xB4B4B4,0x94AECE,
|
||||
0x94AECE,0xB1B1B1,0xB2B2B2,0xB2B2B2,0xB3B3B3,0xB3B3B3,0xB2B2B2,0xB1B1B1,0xB1B1B1,0xB3B3B3,0xAEAEAE,0xAFAFAF,0xBEBEBE,0xA8A8A8,0x94AECE,
|
||||
0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,
|
||||
};
|
||||
RGB arrow_left[] = { /* 15x15 */
|
||||
0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xE7E7E7,0xE7E7E7,0xE7E7E7,0xE6E6E6,0xE7E7E7,0xE8E8E8,0xE7E7E7,0xE5E5E5,0xE7E7E7,0xE6E6E6,0xCDCDCD,0x94AECE,
|
||||
0x94AECE,0xE7E7E7,0xE2E2E2,0xE1E1E1,0xDCDCDC,0xDDDDDD,0xD9D9D9,0xDBDBDB,0xD3D3D3,0xD6D6D6,0xD3D3D3,0xD0D0CE,0xD0D0CE,0xABABA9,0x94AECE,
|
||||
0x94AECE,0xE7E7E7,0xDFDFDF,0xDFDFDF,0xDBDBDB,0xD9D9D9,0xDADADA,0xD2D2D2,0xD8D8D8,0xD2D2D2,0xD0D0D0,0xCFCFCD,0xCCCCCA,0xAEAEAC,0x94AECE,
|
||||
0x94AECE,0xE9E9E9,0xDEDEDE,0xD8D8D8,0xDEDEDE,0xD7D7D7,0xD6D6D6,0x353535,0xD0D0D0,0xD1D1D1,0xCFCFCF,0xCDCDCD,0xCBCBCB,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE5E5E5,0xDDDDDD,0xDCDCDC,0xD7D7D7,0xD6D6D6,0x333333,0x333333,0xD0D0D0,0xD0D0D0,0xCCCCCC,0xCBCBCB,0xC8C8CA,0xAEAEB0,0x94AECE,
|
||||
0x94AECE,0xE7E7E7,0xDADADA,0xD9D9D9,0xD7D7D7,0x353535,0x323232,0x323232,0x343434,0x343434,0xCCCCCC,0xCBCBCB,0xC6C6C6,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE6E6E6,0xD8D8D8,0xD6D6D6,0x323232,0x333333,0x323232,0x353535,0x323232,0x323232,0xCACACA,0xC7C7C7,0xC7C7C7,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xD6D6D6,0xD4D4D4,0xD2D2D2,0x343434,0x323232,0x353535,0x333333,0x313131,0xC8C8C8,0xC6C6C4,0xC3C3C1,0xAFAFAD,0x94AECE,
|
||||
0x94AECE,0xE4E4E4,0xD6D6D6,0xD3D3D3,0xD2D2D2,0xCFCFCF,0x343434,0x303030,0xCCCCCC,0xC7C7C7,0xC6C6C6,0xC7C7C5,0xC1C1C1,0xADADAD,0x94AECE,
|
||||
0x94AECE,0xE9E9E9,0xD1D1D1,0xD0D0D0,0xCECECE,0xCDCDCD,0xCCCCCC,0x343434,0xC5C5C5,0xC7C7C7,0xC4C4C4,0xC0C0C0,0xC3C3C5,0xADADAF,0x94AECE,
|
||||
0x94AECE,0xE7E7E7,0xD2D2D2,0xD0D0D0,0xCECECE,0xCBCBCB,0xCCCCCC,0xC6C6C6,0xC9C9C9,0xC6C6C6,0xC3C3C3,0xC1C1C1,0xBEBEBE,0xADADAD,0x94AECE,
|
||||
0x94AECE,0xE7E7E7,0xCFCFCF,0xCCCCCC,0xCDCDCD,0xC9C9C9,0xC9C9C9,0xC7C7C7,0xC4C4C4,0xC0C0C0,0xC2C2C2,0xBDBDBB,0xBCBCBC,0xB1B1B1,0x94AECE,
|
||||
0x94AECE,0xCDCDCD,0xAEAEAE,0xB0B0B0,0xADADAD,0xAFAFAF,0xACACAC,0xAEAEAE,0xAFAFAF,0xAFAFAF,0xADADAD,0xB0B0AE,0xADADAD,0xADADAD,0x94AECE,
|
||||
0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,
|
||||
};
|
||||
RGB scroll_v[] = { /* 15x35 */
|
||||
0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,
|
||||
0x94AECE,0xEFEBEF,0xEFEBEF,0xE5E5E5,0xE8E8E8,0xE7E7E7,0xE7E7E7,0xE7E7E7,0xE5E5E5,0xE5E5E5,0xE2E2E2,0xE7E7E7,0xEAEAEA,0xC1C1C1,0x94AECE,
|
||||
0x94AECE,0xD1D1D1,0xCBCBCB,0xC9C9C9,0xC9C9C9,0xC7C7C7,0xC7C7C7,0xC7C7C7,0xC6C6C6,0xC6C6C6,0xCACACA,0xC7C7C7,0xC9C9C9,0xAFAFAF,0x94AECE,
|
||||
0x94AECE,0xEDEDED,0xE8E8E8,0xE6E6E6,0xE8E8E8,0xE7E7E7,0xE8E8E8,0xE9E9E9,0xE8E8E8,0xECECEC,0xE7E7E7,0xE2E2E2,0xE5E5E5,0xCBCBCB,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE7E7E7,0xE0E0E0,0xDCDCDC,0xDADADA,0xD5D5D5,0xD1D1D1,0xCECECE,0xCBCBCB,0xC3C3C3,0xC3C3C3,0xBABABA,0xBABABA,0xACACAC,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xE8E8E8,0xE1E1E1,0xDDDDDD,0xDBDBDB,0xD5D5D5,0xD0D0D0,0xCDCDCD,0xC9C9C9,0xC4C4C4,0xC1C1C1,0xBBBBBB,0xB8B8B8,0xAEAEAE,0x94AECE,
|
||||
0x94AECE,0xD6D6D6,0xB3B3B3,0xAAAAAA,0xADADAD,0xACACAC,0xAFAFAF,0xAEAEAE,0xABABAB,0xADADAD,0xADADAD,0xADADAD,0xB1B1B1,0xABABAB,0x94AECE,
|
||||
0x94AECE,0xE8E8EA,0xCDCDCF,0xC4C4C6,0xC6C6C8,0xCACACC,0xC9C9CB,0xC4C4C6,0xCBCBCD,0xCCCBD0,0xC4C3C8,0xCCCBD0,0xC5C5C7,0xAFAFB1,0x94AECE,
|
||||
0x94AECE,0xC9C9C9,0xAAAAAA,0xB2B2B2,0xB3B3B3,0xADADAD,0xB0B0B0,0xABABAB,0xB1B1B1,0xABABAD,0xB5B5B7,0xAAAAAC,0xB3B3B3,0xAAAAAA,0x94AECE,
|
||||
0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,
|
||||
};
|
||||
RGB scroll_h[] = { /* 35x15*/
|
||||
0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,
|
||||
0x94AECE,0xAAAAAA,0xEFEBEF,0xD6D6D6,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xE7E7E7,0xE8E8E8,0xE8E8E8,0xE8E8E8,0xEDEDED,0xD1D1D1,0xEBEBEB,0x94AECE,
|
||||
0x94AECE,0xAAAAAA,0xCDCDCF,0xB3B3B3,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE0E0E0,0xE1E1E1,0xE1E1E1,0xE1E1E1,0xE8E8E8,0xCBCBCB,0xE6E6E6,0x94AECE,
|
||||
0x94AECE,0xB2B2B2,0xC4C4C6,0xAAAAAA,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xDCDCDC,0xDDDDDD,0xDDDDDD,0xDDDDDD,0xE6E6E6,0xC9C9C9,0xE5E5E5,0x94AECE,
|
||||
0x94AECE,0xB3B3B3,0xC6C6C8,0xADADAD,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xDADADA,0xDBDBDB,0xDBDBDB,0xDBDBDB,0xE8E8E8,0xC9C9C9,0xE8E8E8,0x94AECE,
|
||||
0x94AECE,0xADADAD,0xCACACC,0xACACAC,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xD5D5D5,0xE7E7E7,0xC7C7C7,0xE7E7E7,0x94AECE,
|
||||
0x94AECE,0xB0B0B0,0xC9C9CB,0xAFAFAF,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xD1D1D1,0xD0D0D0,0xD0D0D0,0xD0D0D0,0xE8E8E8,0xC7C7C7,0xE7E7E7,0x94AECE,
|
||||
0x94AECE,0xABABAB,0xC4C4C6,0xAEAEAE,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xCECECE,0xCDCDCD,0xCDCDCD,0xCDCDCD,0xE9E9E9,0xC7C7C7,0xE7E7E7,0x94AECE,
|
||||
0x94AECE,0xB1B1B1,0xCBCBCD,0xABABAB,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xCBCBCB,0xC9C9C9,0xC9C9C9,0xC9C9C9,0xE8E8E8,0xC6C6C6,0xE5E5E5,0x94AECE,
|
||||
0x94AECE,0xABABAD,0xCCCBD0,0xADADAD,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xC3C3C3,0xC4C4C4,0xC4C4C4,0xC4C4C4,0xECECEC,0xC6C6C6,0xE5E5E5,0x94AECE,
|
||||
0x94AECE,0xB5B5B7,0xC4C3C8,0xADADAD,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xC3C3C3,0xC1C1C1,0xC1C1C1,0xC1C1C1,0xE7E7E7,0xCACACA,0xE2E2E2,0x94AECE,
|
||||
0x94AECE,0xAAAAAC,0xCCCBD0,0xADADAD,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xBABABA,0xBBBBBB,0xBBBBBB,0xBBBBBB,0xE2E2E2,0xC7C7C7,0xE7E7E7,0x94AECE,
|
||||
0x94AECE,0xB3B3B3,0xC5C5C7,0xB1B1B1,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xBABABA,0xB8B8B8,0xB8B8B8,0xB8B8B8,0xE5E5E5,0xC9C9C9,0xEAEAEA,0x94AECE,
|
||||
0x94AECE,0xAAAAAA,0xAFAFB1,0xABABAB,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xACACAC,0xAEAEAE,0xAEAEAE,0xAEAEAE,0xCBCBCB,0xAFAFAF,0xC1C1C1,0x94AECE,
|
||||
0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,0x94AECE,
|
||||
};
|
BIN
programs/media/imgview/img/btn_fit.bmp
Normal file
BIN
programs/media/imgview/img/btn_fit.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
BIN
programs/media/imgview/img/btn_next.bmp
Normal file
BIN
programs/media/imgview/img/btn_next.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
BIN
programs/media/imgview/img/btn_open.bmp
Normal file
BIN
programs/media/imgview/img/btn_open.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
BIN
programs/media/imgview/img/btn_prev.bmp
Normal file
BIN
programs/media/imgview/img/btn_prev.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
BIN
programs/media/imgview/img/template.bmp
Normal file
BIN
programs/media/imgview/img/template.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
921
programs/media/imgview/kosSyst.cpp
Normal file
921
programs/media/imgview/kosSyst.cpp
Normal file
@ -0,0 +1,921 @@
|
||||
#include "kosSyst.h"
|
||||
#include "stdarg.h"
|
||||
|
||||
#define atexitBufferSize 32
|
||||
|
||||
|
||||
char pureCallMessage[] = "PURE function call!";
|
||||
|
||||
char *kosExePath = NULL;
|
||||
|
||||
int abs(int value)
|
||||
{
|
||||
if (value<0) value=0-value;
|
||||
return value;
|
||||
}
|
||||
|
||||
//
|
||||
void (__cdecl *atExitList[atexitBufferSize])();
|
||||
int atExitFnNum = 0;
|
||||
//
|
||||
int __cdecl atexit( void (__cdecl *func )( void ))
|
||||
{
|
||||
//
|
||||
if ( atExitFnNum < atexitBufferSize )
|
||||
{
|
||||
//
|
||||
atExitList[atExitFnNum++] = func;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
Dword RandomSeed = 1;
|
||||
//
|
||||
void rtlSrand( Dword seed )
|
||||
{
|
||||
RandomSeed = seed;
|
||||
}
|
||||
//
|
||||
Dword rtlRand( void )
|
||||
{
|
||||
//ìàñêà 0x80000776
|
||||
|
||||
Dword dwi, i;
|
||||
|
||||
for ( i = 0; i < 32; i++ )
|
||||
{
|
||||
|
||||
dwi = RandomSeed & 0x80000776;
|
||||
|
||||
__asm{
|
||||
mov eax, dwi
|
||||
mov edx, eax
|
||||
bswap eax
|
||||
xor eax, edx
|
||||
xor al, ah
|
||||
setpo al
|
||||
movzx eax, al
|
||||
mov dwi, eax
|
||||
}
|
||||
|
||||
RandomSeed = ( RandomSeed << 1 ) | ( dwi & 1 );
|
||||
}
|
||||
|
||||
return RandomSeed;
|
||||
}
|
||||
|
||||
#if _MSC_VER >= 1400
|
||||
//
|
||||
void * __cdecl memcpy( void *dst, const void *src, size_t bytesCount )
|
||||
{
|
||||
__asm{
|
||||
mov edi, dst
|
||||
mov eax, dst
|
||||
mov esi, src
|
||||
mov ecx, bytesCount
|
||||
rep movsb
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
void memset( Byte *dst, Byte filler, Dword count )
|
||||
{
|
||||
//
|
||||
__asm{
|
||||
mov edi, dst
|
||||
mov al, filler
|
||||
mov ecx, count
|
||||
rep stosb
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
//
|
||||
Dword rtlInterlockedExchange( Dword *target, Dword value )
|
||||
{
|
||||
// Dword result;
|
||||
|
||||
//
|
||||
__asm{
|
||||
mov eax, value
|
||||
mov ebx, target
|
||||
xchg eax, [ebx]
|
||||
// mov result, eax
|
||||
}
|
||||
//
|
||||
// return result;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// êîïèðîâàíèå ñòðîêè
|
||||
//
|
||||
|
||||
char * __cdecl strcpy( char *target, const char *source )
|
||||
{
|
||||
char *result = target;
|
||||
|
||||
while( target[0] = source[0] )
|
||||
{
|
||||
target++;
|
||||
source++;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ðåâåðñèâíûé ïîèñê ñèìâîëà
|
||||
//
|
||||
|
||||
char * __cdecl strrchr( const char * string, int c )
|
||||
{
|
||||
char *cPtr;
|
||||
|
||||
//
|
||||
for ( cPtr = (char *)string + strlen( string ); cPtr >= string; cPtr-- )
|
||||
{
|
||||
//
|
||||
if ( *cPtr == c ) return cPtr;
|
||||
}
|
||||
//
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// îïðåäåëåíèå äëèíû ñòðîêè
|
||||
//
|
||||
|
||||
int __cdecl strlen( const char *line )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i=0; line[i] != 0; i++ );
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Ñðàâíåíèå ñòðîê
|
||||
//
|
||||
|
||||
int strcmp(char* string1, char* string2)
|
||||
{
|
||||
Dword retval;
|
||||
if (strlen(string1)==strlen(string2))
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov dword ptr [retval],0
|
||||
mov esi,string1
|
||||
mov edi,string2
|
||||
next_char:
|
||||
mov al,byte ptr [esi]
|
||||
mov bl,byte ptr [edi]
|
||||
inc esi
|
||||
inc edi
|
||||
cmp bl,0
|
||||
je fin
|
||||
cmp al,bl
|
||||
je next_char
|
||||
jmp not_equal
|
||||
fin:
|
||||
mov dword ptr [retval],1
|
||||
not_equal:
|
||||
}
|
||||
return retval;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ïåðåâîä øåñòíàäöàòèðè÷íîãî ÷èñëà â ñèìâîë
|
||||
//
|
||||
|
||||
unsigned int num2hex( unsigned int num )
|
||||
{
|
||||
if( num < 10 )
|
||||
return num + '0';
|
||||
return num - 10 + 'A';
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ïåðåâîä ñòðîêè â íèæíèé ðåãèñòð
|
||||
//
|
||||
|
||||
void lcase(char* string)
|
||||
{
|
||||
int i;
|
||||
char chr;
|
||||
for(i=0;i<strlen(string);i++)
|
||||
{
|
||||
chr=((char*)string)[i];
|
||||
if (chr>=65 && chr<=90) chr=chr+32; //a-z
|
||||
if (chr>=128 && chr<=143) chr=chr+32; //à-ï
|
||||
if (chr>=144 && chr<=159) chr=chr+80; //ð-ÿ
|
||||
if (chr==240) chr=241; //¸
|
||||
((char*)string)[i]=chr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// âûâîä ñòðîêè íà ïå÷àòü
|
||||
//
|
||||
|
||||
Dword dectab[] = { 1000000000, 100000000, 10000000, 1000000, 100000,
|
||||
10000, 1000, 100, 10, 0 };
|
||||
|
||||
//
|
||||
void sprintf( char *Str, char* Format, ... )
|
||||
{
|
||||
int i, fmtlinesize, j, k, flag;
|
||||
Dword head, tail;
|
||||
char c;
|
||||
va_list arglist;
|
||||
//
|
||||
va_start(arglist, Format);
|
||||
|
||||
//
|
||||
fmtlinesize = strlen( Format );
|
||||
//
|
||||
if( fmtlinesize == 0 ) return;
|
||||
|
||||
//
|
||||
for( i = 0, j = 0; i < fmtlinesize; i++ )
|
||||
{
|
||||
//
|
||||
c = Format[i];
|
||||
//
|
||||
if( c != '%' )
|
||||
{
|
||||
Str[j++] = c;
|
||||
continue;
|
||||
}
|
||||
//
|
||||
i++;
|
||||
//
|
||||
if( i >= fmtlinesize ) break;
|
||||
|
||||
//
|
||||
flag = 0;
|
||||
//
|
||||
c = Format[i];
|
||||
//
|
||||
switch( c )
|
||||
{
|
||||
//
|
||||
case '%':
|
||||
Str[j++] = c;
|
||||
break;
|
||||
// âûâîä ñòðîêè
|
||||
case 'S':
|
||||
Byte* str;
|
||||
str = va_arg(arglist, Byte*);
|
||||
for( k = 0; ( c = str[k] ) != 0; k++ )
|
||||
{
|
||||
Str[j++] = c;
|
||||
}
|
||||
break;
|
||||
// âûâîä áàéòà
|
||||
case 'B':
|
||||
k = va_arg(arglist, int) & 0xFF;
|
||||
Str[j++] = num2hex( ( k >> 4 ) & 0xF );
|
||||
Str[j++] = num2hex( k & 0xF );
|
||||
break;
|
||||
// âûâîä ñèìâîëà
|
||||
case 'C':
|
||||
Str[j++] = va_arg(arglist, int) & 0xFF;
|
||||
break;
|
||||
// âûâîä äâîéíîãî ñëîâà â øåñòíàäöàòèðè÷íîì âèäå
|
||||
case 'X':
|
||||
Dword val;
|
||||
val = va_arg(arglist, Dword);
|
||||
for( k = 7; k >= 0; k-- )
|
||||
{
|
||||
//
|
||||
c = num2hex ( ( val >> (k * 4) ) & 0xF );
|
||||
//
|
||||
if( c == '0' )
|
||||
{
|
||||
if( flag ) Str[j++] = c;
|
||||
}
|
||||
else
|
||||
{
|
||||
flag++;
|
||||
Str[j++] = c;
|
||||
}
|
||||
}
|
||||
//
|
||||
if( flag == 0 ) Str[j++] = '0';
|
||||
break;
|
||||
// âûâîä äâîéíîãî ñëîâà â äåñÿòè÷íîì âèäå
|
||||
case 'U':
|
||||
head = va_arg(arglist, Dword);
|
||||
tail = 0;
|
||||
for( k = 0; dectab[k] != 0; k++ )
|
||||
{
|
||||
tail = head % dectab[k];
|
||||
head /= dectab[k];
|
||||
c = head + '0';
|
||||
if( c == '0' )
|
||||
{
|
||||
if( flag ) Str[j++] = c;
|
||||
}
|
||||
else
|
||||
{
|
||||
flag++;
|
||||
Str[j++] = c;
|
||||
}
|
||||
//
|
||||
head = tail;
|
||||
}
|
||||
//
|
||||
c = head + '0';
|
||||
Str[j++] = c;
|
||||
break;
|
||||
// âûâîä 64-áèòíîãî ñëîâà â øåñòíàäöàòèðè÷íîì âèäå
|
||||
case 'Q':
|
||||
unsigned int low_dword, high_dword;
|
||||
low_dword = va_arg(arglist, unsigned int);
|
||||
high_dword = va_arg(arglist, unsigned int);
|
||||
for( k = 7; k >= 0; k-- )
|
||||
{
|
||||
//
|
||||
c = num2hex ( ( ( high_dword + 1) >> (k * 4) ) & 0xF );
|
||||
//
|
||||
if( c == '0' )
|
||||
{
|
||||
if( flag ) Str[j++] = c;
|
||||
}
|
||||
else
|
||||
{
|
||||
flag++;
|
||||
Str[j++] = c;
|
||||
}
|
||||
}
|
||||
//
|
||||
for( k=7; k >= 0; k-- )
|
||||
{
|
||||
//
|
||||
c = num2hex ( ( low_dword >> (k * 4) ) & 0xF );
|
||||
//
|
||||
if( c == '0' )
|
||||
{
|
||||
if( flag ) Str[j++] = c;
|
||||
}
|
||||
else
|
||||
{
|
||||
flag++;
|
||||
Str[j++] = c;
|
||||
}
|
||||
}
|
||||
//
|
||||
if( flag == 0 ) Str[j++] = '0';
|
||||
//
|
||||
break;
|
||||
//
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
//
|
||||
Str[j] = 0;
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ -1 çàâåðøåíèÿ ïðîöåññà
|
||||
void kos_ExitApp()
|
||||
{
|
||||
int i;
|
||||
|
||||
//
|
||||
for ( i = atExitFnNum - 1; i >= 0; i-- )
|
||||
{
|
||||
//
|
||||
atExitList[i]();
|
||||
}
|
||||
//
|
||||
__asm{
|
||||
mov eax, -1
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 0
|
||||
void kos_DefineAndDrawWindow(
|
||||
Word x, Word y,
|
||||
Word sizeX, Word sizeY,
|
||||
Byte mainAreaType,
|
||||
Dword mainAreaColour,
|
||||
Byte headerType,
|
||||
Dword headerColour,
|
||||
Dword borderColour
|
||||
)
|
||||
{
|
||||
Dword arg1, arg2, arg3, arg4;
|
||||
|
||||
//
|
||||
arg1 = ( x << 16 ) + sizeX;
|
||||
arg2 = ( y << 16 ) + sizeY;
|
||||
arg3 = ( mainAreaType << 24 ) | mainAreaColour;
|
||||
arg4 = ( headerType << 24 ) | headerColour;
|
||||
//
|
||||
__asm{
|
||||
mov eax, 0
|
||||
mov ebx, arg1
|
||||
mov ecx, arg2
|
||||
mov edx, arg3
|
||||
mov esi, arg4
|
||||
mov edi, borderColour
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 1 ïîñòàâèòü òî÷êó
|
||||
void kos_PutPixel( Dword x, Dword y, Dword colour )
|
||||
{
|
||||
//
|
||||
__asm{
|
||||
mov eax, 1
|
||||
mov ebx, x
|
||||
mov ecx, y
|
||||
mov edx, colour
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 2 ïîëó÷èòü êîä íàæàòîé êëàâèøè
|
||||
bool kos_GetKey( Byte &keyCode )
|
||||
{
|
||||
Dword result;
|
||||
|
||||
//
|
||||
__asm{
|
||||
mov eax, 2
|
||||
int 0x40
|
||||
mov result, eax
|
||||
}
|
||||
//
|
||||
keyCode = result >> 8;
|
||||
//
|
||||
return ( result & 0xFF ) == 0;
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 3 ïîëó÷èòü âðåìÿ
|
||||
Dword kos_GetSystemClock()
|
||||
{
|
||||
// Dword result;
|
||||
|
||||
//
|
||||
__asm{
|
||||
mov eax, 3
|
||||
int 0x40
|
||||
// mov result, eax
|
||||
}
|
||||
//
|
||||
// return result;
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 4
|
||||
void kos_WriteTextToWindow(
|
||||
Word x,
|
||||
Word y,
|
||||
Byte fontType,
|
||||
Dword textColour,
|
||||
char *textPtr,
|
||||
Dword textLen
|
||||
)
|
||||
{
|
||||
Dword arg1, arg2;
|
||||
|
||||
//
|
||||
arg1 = ( x << 16 ) | y;
|
||||
arg2 = ( fontType << 24 ) | textColour;
|
||||
//
|
||||
__asm{
|
||||
mov eax, 4
|
||||
mov ebx, arg1
|
||||
mov ecx, arg2
|
||||
mov edx, textPtr
|
||||
mov esi, textLen
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 5 ïàóçà, â ñîòûõ äîëÿõ ñåêóíäû
|
||||
void kos_Pause( Dword value )
|
||||
{
|
||||
//
|
||||
__asm{
|
||||
mov eax, 5
|
||||
mov ebx, value
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 7 íàðèñîâàòü èçîáðàæåíèå
|
||||
void kos_PutImage( RGB * imagePtr, Word sizeX, Word sizeY, Word x, Word y )
|
||||
{
|
||||
Dword arg1, arg2;
|
||||
|
||||
//
|
||||
arg1 = ( sizeX << 16 ) | sizeY;
|
||||
arg2 = ( x << 16 ) | y;
|
||||
//
|
||||
__asm{
|
||||
mov eax, 7
|
||||
mov ebx, imagePtr
|
||||
mov ecx, arg1
|
||||
mov edx, arg2
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ôóíêöèÿ 8 îïðåäåëèòü êíîïêó
|
||||
void kos_DefineButton( Word x, Word y, Word sizeX, Word sizeY, Dword buttonID, Dword colour )
|
||||
{
|
||||
Dword arg1, arg2;
|
||||
|
||||
//
|
||||
arg1 = ( x << 16 ) | sizeX;
|
||||
arg2 = ( y << 16 ) | sizeY;
|
||||
//
|
||||
__asm{
|
||||
mov eax, 8
|
||||
mov ebx, arg1
|
||||
mov ecx, arg2
|
||||
mov edx, buttonID
|
||||
mov esi, colour
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 9 - èíôîðìàöèÿ î ïðîöåññå
|
||||
Dword kos_ProcessInfo( sProcessInfo *targetPtr, Dword processID )
|
||||
{
|
||||
// Dword result;
|
||||
|
||||
//
|
||||
__asm{
|
||||
mov eax, 9
|
||||
mov ebx, targetPtr
|
||||
mov ecx, processID
|
||||
int 0x40
|
||||
// mov result, eax
|
||||
}
|
||||
//
|
||||
// return result;
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 10
|
||||
Dword kos_WaitForEvent()
|
||||
{
|
||||
// Dword result;
|
||||
|
||||
__asm{
|
||||
mov eax, 10
|
||||
int 0x40
|
||||
// mov result, eax
|
||||
}
|
||||
|
||||
// return result;
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 11
|
||||
Dword kos_CheckForEvent()
|
||||
{
|
||||
// Dword result;
|
||||
|
||||
__asm{
|
||||
mov eax, 11
|
||||
int 0x40
|
||||
// mov result, eax
|
||||
}
|
||||
|
||||
// return result;
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 12
|
||||
void kos_WindowRedrawStatus( Dword status )
|
||||
{
|
||||
__asm{
|
||||
mov eax, 12
|
||||
mov ebx, status
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 13 íàðèñîâàòü ïîëîñó
|
||||
void kos_DrawBar( Word x, Word y, Word sizeX, Word sizeY, Dword colour )
|
||||
{
|
||||
Dword arg1, arg2;
|
||||
|
||||
//
|
||||
arg1 = ( x << 16 ) | sizeX;
|
||||
arg2 = ( y << 16 ) | sizeY;
|
||||
//
|
||||
__asm{
|
||||
mov eax, 13
|
||||
mov ebx, arg1
|
||||
mov ecx, arg2
|
||||
mov edx, colour
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 17
|
||||
bool kos_GetButtonID( Dword &buttonID )
|
||||
{
|
||||
Dword result;
|
||||
|
||||
//
|
||||
__asm{
|
||||
mov eax, 17
|
||||
int 0x40
|
||||
mov result, eax
|
||||
}
|
||||
//
|
||||
buttonID = result >> 8;
|
||||
//
|
||||
return (result & 0xFF) == 0;
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 23
|
||||
Dword kos_WaitForEvent( Dword timeOut )
|
||||
{
|
||||
// Dword result;
|
||||
|
||||
__asm{
|
||||
mov eax, 23
|
||||
mov ebx, timeOut
|
||||
int 0x40
|
||||
// mov result, eax
|
||||
}
|
||||
|
||||
// return result;
|
||||
}
|
||||
|
||||
|
||||
// ïîëó÷åíèå èíôîðìàöèè î ñîñòîÿíèè "ìûøè" ôóíêöèÿ 37
|
||||
void kos_GetMouseState( Dword & buttons, int & cursorX, int & cursorY )
|
||||
{
|
||||
Dword mB;
|
||||
Word curX;
|
||||
Word curY;
|
||||
sProcessInfo sPI;
|
||||
|
||||
//
|
||||
__asm{
|
||||
mov eax, 37
|
||||
mov ebx, 1
|
||||
int 0x40
|
||||
mov curY, ax
|
||||
shr eax, 16
|
||||
mov curX, ax
|
||||
mov eax, 37
|
||||
mov ebx, 2
|
||||
int 0x40
|
||||
mov mB, eax
|
||||
}
|
||||
//
|
||||
kos_ProcessInfo( &sPI );
|
||||
//
|
||||
buttons = mB;
|
||||
cursorX = curX - sPI.processInfo.left;
|
||||
cursorY = curY - sPI.processInfo.top;
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 40 óñòàíîâèòü ìàñêó ñîáûòèé
|
||||
void kos_SetMaskForEvents( Dword mask )
|
||||
{
|
||||
//
|
||||
__asm{
|
||||
mov eax, 40
|
||||
mov ebx, mask
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 47 âûâåñòè â îêíî ïðèëîæåíèÿ ÷èñëî
|
||||
void kos_DisplayNumberToWindow(
|
||||
Dword value,
|
||||
Dword digitsNum,
|
||||
Word x,
|
||||
Word y,
|
||||
Dword colour,
|
||||
eNumberBase nBase,
|
||||
bool valueIsPointer
|
||||
)
|
||||
{
|
||||
Dword arg1, arg2;
|
||||
|
||||
//
|
||||
arg1 = ( valueIsPointer ? 1 : 0 ) |
|
||||
( ((Byte)nBase) << 8 ) |
|
||||
( ( digitsNum & 0x1F ) << 16 );
|
||||
arg2 = ( x << 16 ) | y;
|
||||
//
|
||||
__asm{
|
||||
mov eax, 47
|
||||
mov ebx, arg1
|
||||
mov ecx, value
|
||||
mov edx, arg2
|
||||
mov esi, colour
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 70 äîñòóï ê ôàéëîâîé ñèñòåìå
|
||||
Dword kos_FileSystemAccess( kosFileInfo *fileInfo )
|
||||
{
|
||||
// Dword result;
|
||||
|
||||
//
|
||||
__asm{
|
||||
mov eax, 70
|
||||
mov ebx, fileInfo
|
||||
int 0x40
|
||||
// mov result, eax
|
||||
}
|
||||
//
|
||||
// return result;
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 63 âûâîä ñèìâîëÿ â îêíî îòëàäêè
|
||||
void kos_DebugOutChar( char ccc )
|
||||
{
|
||||
//
|
||||
__asm{
|
||||
mov eax, 63
|
||||
mov ebx, 1
|
||||
mov cl, ccc
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 66 ðåæèì ïîëó÷åíèÿ äàííûõ îò êëàâèàòóðû
|
||||
void kos_SetKeyboardDataMode( Dword mode )
|
||||
{
|
||||
//
|
||||
__asm{
|
||||
mov eax, 66
|
||||
mov ebx, 1
|
||||
mov ecx, mode
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// âûâîä ñòðîêè â îêíî îòëàäêè
|
||||
void rtlDebugOutString( char *str )
|
||||
{
|
||||
//
|
||||
for ( ; str[0] != 0; str++ )
|
||||
{
|
||||
kos_DebugOutChar( str[0] );
|
||||
}
|
||||
//
|
||||
kos_DebugOutChar( 13 );
|
||||
kos_DebugOutChar( 10 );
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 64 èçìåíåíèå êîëè÷åñòâà ïàìÿòè, âûäåëåííîé äëÿ ïðîãðàììû
|
||||
bool kos_ApplicationMemoryResize( Dword targetSize )
|
||||
{
|
||||
Dword result;
|
||||
|
||||
//
|
||||
__asm{
|
||||
mov eax, 64
|
||||
mov ebx, 1
|
||||
mov ecx, targetSize
|
||||
int 0x40
|
||||
mov result, eax
|
||||
}
|
||||
//
|
||||
return result == 0;
|
||||
}
|
||||
|
||||
|
||||
// ôóíêöèÿ 67 èçìåíèòü ïàðàìåòðû îêíà, ïàðàìåòð == -1 íå ìåíÿåòñÿ
|
||||
void kos_ChangeWindow( Dword x, Dword y, Dword sizeX, Dword sizeY )
|
||||
{
|
||||
//
|
||||
__asm{
|
||||
mov eax, 67
|
||||
mov ebx, x
|
||||
mov ecx, y
|
||||
mov edx, sizeX
|
||||
mov esi, sizeY
|
||||
int 0x40
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Byte* kos_GetMemory(Dword count)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax,68
|
||||
mov ebx,12
|
||||
mov ecx,count
|
||||
int 40h
|
||||
}
|
||||
}
|
||||
|
||||
Dword kos_FreeMemory(Byte* pMemory)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov eax,68
|
||||
mov ebx,13
|
||||
mov ecx,pMemory
|
||||
int 40h
|
||||
}
|
||||
}
|
||||
|
||||
// âûçîâ àáñòðàêòíîãî ìåòîäà
|
||||
int __cdecl _purecall()
|
||||
{
|
||||
rtlDebugOutString( pureCallMessage );
|
||||
kos_ExitApp();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// âûçîâ ñòàòè÷åñêèõ èíèöèàëèçàòîðîâ
|
||||
// çàîäíî èíèöèàëèçàöèÿ ãåíåðàòîðà ñëó÷àéíûõ ÷èñåë
|
||||
//#pragma section(".CRT$XCA",long,read,write)
|
||||
//#pragma section(".CRT$XCZ",long,read,write)
|
||||
#pragma data_seg(".CRT$XCA")
|
||||
#pragma data_seg(".CRT$XCZ")
|
||||
typedef void (__cdecl *_PVFV)(void);
|
||||
__declspec(allocate(".CRT$XCA")) _PVFV __xc_a[1] = { NULL };
|
||||
__declspec(allocate(".CRT$XCZ")) _PVFV __xc_z[1] = { NULL };
|
||||
//
|
||||
#pragma comment(linker, "/merge:.CRT=.rdata")
|
||||
//
|
||||
void crtStartUp()
|
||||
{
|
||||
// âûçûâàåì èíèöèàëèçàòîðû ïî ñïèñêó, NULL'û èãíîðèðóåì
|
||||
for ( _PVFV *pbegin = __xc_a; pbegin < __xc_z; pbegin++ )
|
||||
{
|
||||
//
|
||||
if ( *pbegin != NULL )
|
||||
(**pbegin)();
|
||||
}
|
||||
// èíèöèàëèçèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë
|
||||
rtlSrand( kos_GetSystemClock() );
|
||||
// ïóòü ê ôàéëó ïðîöåññà
|
||||
kosExePath = *((char **)0x20);
|
||||
// âûçîâ ãëàâíîé ôóíêöèè ïðèëîæåíèÿ
|
||||
kos_Main();
|
||||
// âûõîä
|
||||
kos_ExitApp();
|
||||
}
|
||||
|
||||
|
203
programs/media/imgview/kosSyst.h
Normal file
203
programs/media/imgview/kosSyst.h
Normal file
@ -0,0 +1,203 @@
|
||||
typedef unsigned __int32 Dword;
|
||||
typedef unsigned __int16 Word;
|
||||
typedef unsigned __int8 Byte;
|
||||
//typedef unsigned __int32 size_t;
|
||||
|
||||
#define NULL 0
|
||||
|
||||
#define MAX_PATH 256
|
||||
|
||||
#define FO_READ 0
|
||||
#define FO_WRITE 2
|
||||
|
||||
#define EM_WINDOW_REDRAW 1
|
||||
#define EM_KEY_PRESS 2
|
||||
#define EM_BUTTON_CLICK 4
|
||||
#define EM_APP_CLOSE 8
|
||||
#define EM_DRAW_BACKGROUND 16
|
||||
#define EM_MOUSE_EVENT 32
|
||||
#define EM_IPC 64
|
||||
#define EM_NETWORK 256
|
||||
|
||||
#define KM_CHARS 0
|
||||
#define KM_SCANS 1
|
||||
|
||||
#define WRS_BEGIN 1
|
||||
#define WRS_END 2
|
||||
|
||||
#define PROCESS_ID_SELF -1
|
||||
|
||||
//#define abs(a) (a<0?0-a:a)
|
||||
|
||||
extern "C" double acos(double x);
|
||||
extern "C" double asin(double x);
|
||||
extern "C" double floor(double x);
|
||||
extern "C" double round(double x);
|
||||
#pragma function(acos,asin)
|
||||
#if _MSC_VER > 1200
|
||||
#pragma function(floor)
|
||||
#endif
|
||||
|
||||
|
||||
struct kosFileInfo
|
||||
{
|
||||
Dword rwMode;
|
||||
Dword OffsetLow;
|
||||
Dword OffsetHigh;
|
||||
Dword dataCount;
|
||||
Byte *bufferPtr;
|
||||
char fileURL[MAX_PATH];
|
||||
};
|
||||
|
||||
|
||||
struct RGB
|
||||
{
|
||||
Byte b;
|
||||
Byte g;
|
||||
Byte r;
|
||||
//
|
||||
RGB() {};
|
||||
//
|
||||
RGB( Dword value )
|
||||
{
|
||||
r = (Byte)(value >> 16);
|
||||
g = (Byte)(value >> 8);
|
||||
b = (Byte)value;
|
||||
};
|
||||
//
|
||||
bool operator != ( RGB &another )
|
||||
{
|
||||
return this->b != another.b || this->g != another.g || this->r != another.r;
|
||||
};
|
||||
//
|
||||
bool operator == ( RGB &another )
|
||||
{
|
||||
return this->b == another.b && this->g == another.g && this->r == another.r;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
union sProcessInfo
|
||||
{
|
||||
Byte rawData[1024];
|
||||
#pragma pack(push, 1)
|
||||
struct
|
||||
{
|
||||
Dword cpu_usage;
|
||||
Word window_stack_position;
|
||||
Word window_stack_value;
|
||||
Word reserved1;
|
||||
char process_name[12];
|
||||
Dword memory_start;
|
||||
Dword used_memory;
|
||||
Dword PID;
|
||||
Dword left;
|
||||
Dword top;
|
||||
Dword width;
|
||||
Dword height;
|
||||
Word slot_state;
|
||||
Word reserved2;
|
||||
Dword work_left;
|
||||
Dword work_top;
|
||||
Dword work_width;
|
||||
Dword work_height;
|
||||
Byte window_state;
|
||||
} processInfo;
|
||||
#pragma pack(pop)
|
||||
};
|
||||
|
||||
//
|
||||
extern char *kosExePath;
|
||||
//
|
||||
int abs(int value);
|
||||
//
|
||||
void crtStartUp();
|
||||
//
|
||||
int __cdecl _purecall();
|
||||
//
|
||||
int __cdecl atexit( void (__cdecl *func )( void ));
|
||||
//
|
||||
void rtlSrand( Dword seed );
|
||||
Dword rtlRand( void );
|
||||
//
|
||||
char * __cdecl strcpy( char *target, const char *source );
|
||||
int __cdecl strlen( const char *line );
|
||||
char * __cdecl strrchr( const char * string, int c );
|
||||
void lcase(char* string);
|
||||
int strcmp(char* string1, char* string2);
|
||||
|
||||
#if _MSC_VER < 1400
|
||||
extern "C" void * __cdecl memcpy( void *dst, const void *src, size_t bytesCount );
|
||||
extern "C" void memset( Byte *dst, Byte filler, Dword count );
|
||||
#pragma intrinsic(memcpy,memset)
|
||||
#else
|
||||
void * __cdecl memcpy( void *dst, const void *src, size_t bytesCount );
|
||||
void memset( Byte *dst, Byte filler, Dword count );
|
||||
#endif
|
||||
|
||||
void sprintf( char *Str, char* Format, ... );
|
||||
//
|
||||
Dword rtlInterlockedExchange(Dword *target, Dword value);
|
||||
// ôóíêöèÿ -1 çàâåðøåíèÿ ïðîöåññà
|
||||
void kos_ExitApp();
|
||||
// ôóíêöèÿ 0
|
||||
void kos_DefineAndDrawWindow(Word x, Word y, Word sizeX, Word sizeY,Byte mainAreaType, Dword mainAreaColour,Byte headerType, Dword headerColour, Dword borderColour);
|
||||
// ôóíêöèÿ 1 ïîñòàâèòü òî÷êó
|
||||
void kos_PutPixel( Dword x, Dword y, Dword colour);
|
||||
// ôóíêöèÿ 2 ïîëó÷èòü êîä íàæàòîé êëàâèøè
|
||||
bool kos_GetKey(Byte &keyCode);
|
||||
// ôóíêöèÿ 3 ïîëó÷èòü âðåìÿ
|
||||
Dword kos_GetSystemClock();
|
||||
// ôóíêöèÿ 4
|
||||
void kos_WriteTextToWindow(Word x, Word y,Byte fontType,Dword textColour,char *textPtr,Dword textLen);
|
||||
// ôóíêöèÿ 7 íàðèñîâàòü èçîáðàæåíèå
|
||||
void kos_PutImage( RGB * imagePtr, Word sizeX, Word sizeY, Word x, Word y);
|
||||
// ôóíêöèÿ 8 îïðåäåëèòü êíîïêó
|
||||
void kos_DefineButton(Word x, Word y, Word sizeX, Word sizeY, Dword buttonID, Dword colour);
|
||||
// ôóíêöèÿ 5 ïàóçà, â ñîòûõ äîëÿõ ñåêóíäû
|
||||
void kos_Pause(Dword value);
|
||||
// ôóíêöèÿ 9 - èíôîðìàöèÿ î ïðîöåññå
|
||||
Dword kos_ProcessInfo(sProcessInfo *targetPtr, Dword processID = PROCESS_ID_SELF);
|
||||
// ôóíêöèÿ 10
|
||||
Dword kos_WaitForEvent();
|
||||
// ôóíêöèÿ 11
|
||||
Dword kos_CheckForEvent();
|
||||
// ôóíêöèÿ 12
|
||||
void kos_WindowRedrawStatus(Dword status );
|
||||
// ôóíêöèÿ 13 íàðèñîâàòü ïîëîñó
|
||||
void kos_DrawBar(Word x, Word y, Word sizeX, Word sizeY, Dword colour);
|
||||
// ôóíêöèÿ 17
|
||||
bool kos_GetButtonID(Dword &buttonID);
|
||||
// ôóíêöèÿ 23
|
||||
Dword kos_WaitForEvent(Dword timeOut);
|
||||
//
|
||||
enum eNumberBase
|
||||
{
|
||||
nbDecimal = 0,
|
||||
nbHex,
|
||||
nbBin
|
||||
};
|
||||
// ïîëó÷åíèå èíôîðìàöèè î ñîñòîÿíèè "ìûøè" ôóíêöèÿ 37
|
||||
void kos_GetMouseState(Dword & buttons, int & cursorX, int & cursorY);
|
||||
// ôóíêöèÿ 40 óñòàíîâèòü ìàñêó ñîáûòèé
|
||||
void kos_SetMaskForEvents(Dword mask);
|
||||
// ôóíêöèÿ 47 âûâåñòè â îêíî ïðèëîæåíèÿ ÷èñëî
|
||||
void kos_DisplayNumberToWindow(Dword value, Dword digitsNum, Word x, Word y, Dword colour, eNumberBase nBase = nbDecimal, bool valueIsPointer = false);
|
||||
// ôóíêöèÿ 58 äîñòóï ê ôàéëîâîé ñèñòåìå
|
||||
Dword kos_FileSystemAccess(kosFileInfo *fileInfo);
|
||||
// ôóíêöèÿ 63
|
||||
void kos_DebugOutChar(char ccc);
|
||||
//
|
||||
void rtlDebugOutString(char *str);
|
||||
// ôóíêöèÿ 64 èçìåíèòü ïàðàìåòðû îêíà, ïàðàìåòð == -1 íå ìåíÿåòñÿ
|
||||
void kos_ChangeWindow(Dword x, Dword y, Dword sizeX, Dword sizeY);
|
||||
// ôóíêöèÿ 67 èçìåíåíèå êîëè÷åñòâà ïàìÿòè, âûäåëåííîé äëÿ ïðîãðàììû
|
||||
bool kos_ApplicationMemoryResize(Dword targetSize);
|
||||
// ôóíêöèÿ 66 ðåæèì ïîëó÷åíèÿ äàííûõ îò êëàâèàòóðû
|
||||
void kos_SetKeyboardDataMode(Dword mode);
|
||||
//
|
||||
Byte* kos_GetMemory(Dword count);
|
||||
//
|
||||
Dword kos_FreeMemory(Byte* pMemory);
|
||||
//
|
||||
void kos_Main();
|
575
programs/media/imgview/main.cpp
Normal file
575
programs/media/imgview/main.cpp
Normal file
@ -0,0 +1,575 @@
|
||||
#include "kosSyst.h"
|
||||
#include "gfx.cpp"
|
||||
#include "dlgopen.h"
|
||||
#include "formats\pcx.h"
|
||||
#include "formats\bmp.h"
|
||||
#include "formats\tga.h"
|
||||
|
||||
#define btn_open 10
|
||||
#define btn_prev 11
|
||||
#define btn_next 12
|
||||
#define btn_fit 13
|
||||
|
||||
#define scrl_up 30
|
||||
#define scrl_down 31
|
||||
#define scrl_left 32
|
||||
#define scrl_right 33
|
||||
|
||||
char params[2048] = "PARAM";
|
||||
const char header[] = "ImageView v 0.08";
|
||||
int image_opened=0;
|
||||
|
||||
Byte* image_buffer=NULL; // Ïîëíîå RAW-Èçîáðàæåíèå
|
||||
Byte* img_cuted=NULL; // Óñå÷åííîå RAW-èçîáðàæåíèå (èñïîëüçóåòñÿ ïðè ïðîêðóòêå èëè ìàñøòàáèðîâàíèè)
|
||||
Byte* cur_files=NULL; // Áóôåð äëÿ îáùåãî ñïèñêà ôàéëîâ òåêóùåé ïàïêè
|
||||
Word* img_files=NULL; // Óêàçàòåëü ìàññèâ ñî ñïèñîê ãðàô.ôàéëîâ â òåêóùåé ïàïêå
|
||||
Dword cnt_imgfiles; // Êîëè÷åñòâî ýëåìåíòîâ ìàññèâà img_files[]
|
||||
Dword cur_image; // Íîìåð òåêóùåãî èçîáðàæåíèÿ â ìàññèâå
|
||||
char cur_folder[512]; // Ïóòü ê òåêóùåé ïàïêå ñ / íà êîíöå
|
||||
|
||||
Dword image_width;
|
||||
Dword image_height;
|
||||
Dword old_status_size=0;
|
||||
|
||||
char szStatus[256];
|
||||
bool scale=0;
|
||||
|
||||
|
||||
sProcessInfo proc;
|
||||
Dword img_area_left,img_area_top,img_area_width,img_area_height;
|
||||
int vscrl_max=100,vscrl_value=0,vscrl_coord_x,vscrl_coord_y,vscrl_coord_min,vscrl_coord_max,vscrl_using=0;
|
||||
int hscrl_max=100,hscrl_value=0,hscrl_coord_x,hscrl_coord_y,hscrl_coord_min,hscrl_coord_max,hscrl_using=0;
|
||||
Dword width_old,height_old;
|
||||
|
||||
/* Âûðåçàåò êâàäðàò èç èçîáðàæåíèÿ ïî êîîðäèíàòàì*/
|
||||
void GetRectImage(Byte* src, Byte* dst, Dword left,Dword top,Dword width,Dword height)
|
||||
{
|
||||
int x,y;
|
||||
int pImgS,pImgD=0;
|
||||
|
||||
for(y=top;y<top+height;y++)
|
||||
{
|
||||
for(x=left;x<left+width;x++)
|
||||
{
|
||||
pImgS=y*image_width*3+x*3;
|
||||
*(dst+pImgD+0)=*(src+pImgS+0);
|
||||
*(dst+pImgD+1)=*(src+pImgS+1);
|
||||
*(dst+pImgD+2)=*(src+pImgS+2);
|
||||
pImgD=pImgD+3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Ðàñòÿãèâàåò èçîáðàæåíèå â ìåíüøóþ ñòîðîíó (èíà÷å íóæíî âûäåëÿòü áîëüøå ïàìÿòè ïîä img_cuted) */
|
||||
void ResizeImage(Byte* src, Byte* dst, Dword new_width,Dword new_height)
|
||||
{
|
||||
int x,y,src_y,src_x;
|
||||
int pImgS,pImgD=0;
|
||||
for(y=0;y<new_height;y++)
|
||||
{
|
||||
for(x=0;x<new_width;x++)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
finit
|
||||
fild image_width
|
||||
fidiv new_width
|
||||
fild x
|
||||
fmul st(0),st(1)
|
||||
fistp src_x
|
||||
fild image_height
|
||||
fidiv new_height
|
||||
fild y
|
||||
fmul st(0),st(1)
|
||||
fistp src_y
|
||||
}
|
||||
pImgS=src_y*image_width*3+src_x*3;
|
||||
pImgD=y*new_width*3+x*3;
|
||||
*(dst+pImgD+0)=*(src+pImgS+0);
|
||||
*(dst+pImgD+1)=*(src+pImgS+1);
|
||||
*(dst+pImgD+2)=*(src+pImgS+2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void set_vscroll_values(Dword max, Dword value)
|
||||
{
|
||||
vscrl_max=max;
|
||||
vscrl_value=value;
|
||||
kos_DrawBar(vscrl_coord_x,vscrl_coord_y,15,35,0xDADADA);
|
||||
vscrl_coord_y=vscrl_coord_min+((value*(vscrl_coord_max-vscrl_coord_min-35))/vscrl_max);
|
||||
kos_PutImage(scroll_v,15,35,vscrl_coord_x,vscrl_coord_y);
|
||||
}
|
||||
|
||||
void set_hscroll_values(Dword max, Dword value)
|
||||
{
|
||||
hscrl_max=max;
|
||||
hscrl_value=value;
|
||||
kos_DrawBar(hscrl_coord_x,hscrl_coord_y,35,15,0xDADADA);
|
||||
hscrl_coord_x=hscrl_coord_min+((value*(hscrl_coord_max-hscrl_coord_min-35))/hscrl_max);
|
||||
kos_PutImage(scroll_h,35,15,hscrl_coord_x,hscrl_coord_y);
|
||||
}
|
||||
|
||||
void draw_image()
|
||||
{
|
||||
Dword new_width,new_height,scale_left,scale_top;
|
||||
if (!image_opened) return;
|
||||
|
||||
if (scale==0)
|
||||
{
|
||||
/* Çäåñü âûâîä èçîáðàæåíèÿ ñ èñïîëüçîâàíèåì ïîëîñ ïðîêðóòêè */
|
||||
new_width = image_width <= img_area_width ? image_width : img_area_width;
|
||||
new_height = image_height <= img_area_height ? image_height : img_area_height;
|
||||
GetRectImage(image_buffer, img_cuted, hscrl_value, vscrl_value, new_width, new_height);
|
||||
kos_PutImage((RGB*)img_cuted, new_width, new_height, img_area_left,img_area_top);
|
||||
} else {
|
||||
/* Çäåñü âûâîä èçîáðàæåíèÿ ñ èñïîëüçîâàíèåì ìàñøòàáèðîâàíèÿ, ñîõðàíÿÿ ïðîïîðöèè */
|
||||
__asm
|
||||
{
|
||||
finit
|
||||
fild img_area_width
|
||||
fidiv image_width
|
||||
fild image_width
|
||||
fmul st(0),st(1)
|
||||
fistp new_width
|
||||
fild image_height
|
||||
fmul st(0),st(1)
|
||||
fistp new_height
|
||||
}
|
||||
if (img_area_height<new_height)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
finit
|
||||
fild img_area_height
|
||||
fidiv image_height
|
||||
fild image_width
|
||||
fmul st(0),st(1)
|
||||
fistp new_width
|
||||
fild image_height
|
||||
fmul st(0),st(1)
|
||||
fistp new_height
|
||||
}
|
||||
}
|
||||
|
||||
/* ýòî â ñëó÷àå íå ïðîïîðöèîíàëüíîãî ìàñøòàáèðîâàíèÿ */
|
||||
//new_width=img_area_width;
|
||||
//new_height=img_area_height;
|
||||
|
||||
if (new_width>image_width) new_width=image_width;
|
||||
if (new_height>image_height) new_height=image_height;
|
||||
|
||||
ResizeImage(image_buffer,img_cuted,new_width,new_height);
|
||||
/* Öåíòðèðîâàíèå èçîáðàæåíèÿ */
|
||||
scale_left=(img_area_width/2)-(new_width/2);
|
||||
scale_top=(img_area_height/2)-(new_height/2);
|
||||
kos_PutImage((RGB*)img_cuted,new_width,new_height,img_area_left+scale_left,img_area_top+scale_top);
|
||||
}
|
||||
}
|
||||
|
||||
void draw_window(void)
|
||||
{
|
||||
kos_WindowRedrawStatus(1);
|
||||
kos_DefineAndDrawWindow(0,0,450,350,0x33,0xEFEBEF,0,0,(Dword)header);
|
||||
|
||||
//ToolBar
|
||||
//open
|
||||
kos_DefineButton(2,4,20,20,btn_open+0x40000000,0xEFEBEF);
|
||||
kos_PutImage(tbOpen,21,21,2,4);
|
||||
//prev
|
||||
kos_DefineButton(25,4,20,20,btn_prev+0x40000000,0xEFEBEF);
|
||||
kos_PutImage(tbPrev,21,21,25,4);
|
||||
//next
|
||||
kos_DefineButton(48,4,20,20,btn_next+0x40000000,0xEFEBEF);
|
||||
kos_PutImage(tbNext,21,21,48,4);
|
||||
//fit image
|
||||
kos_DefineButton(71,4,20,20,btn_fit+0x40000000,0xEFEBEF);
|
||||
kos_PutImage(tbFit,21,21,71,4);
|
||||
|
||||
//Lines
|
||||
kos_ProcessInfo(&proc,-1);
|
||||
kos_DrawBar(2,30,proc.processInfo.work_width-3,1,0x94AECE);
|
||||
|
||||
//Scroll controls
|
||||
//vertical scroll bar
|
||||
vscrl_coord_x=proc.processInfo.work_width-16;
|
||||
vscrl_coord_max=proc.processInfo.work_height-46;
|
||||
kos_DrawBar(proc.processInfo.work_width-16,33,15,proc.processInfo.work_height-79,0xDADADA);
|
||||
kos_DefineButton(proc.processInfo.work_width-16,33,14,14,scrl_up+0x40000000,0xEFEBEF);
|
||||
kos_DefineButton(proc.processInfo.work_width-16,proc.processInfo.work_height-46,14,14,scrl_down+0x40000000,0xEFEBEF);
|
||||
kos_PutImage(arrow_up,15,15,proc.processInfo.work_width-16,33);
|
||||
kos_PutImage(arrow_down,15,15,proc.processInfo.work_width-16,proc.processInfo.work_height-46);
|
||||
kos_PutImage(scroll_v,15,35,vscrl_coord_x,vscrl_coord_y);
|
||||
|
||||
|
||||
//horisontal scroll bar
|
||||
hscrl_coord_y=proc.processInfo.work_height-31;
|
||||
hscrl_coord_max=proc.processInfo.work_width-31;
|
||||
kos_DrawBar(2,proc.processInfo.work_height-31,proc.processInfo.work_width-18,15,0xDADADA);
|
||||
kos_DefineButton(2,proc.processInfo.work_height-31,14,14,scrl_left+0x40000000,0xEFEBEF);
|
||||
kos_DefineButton(proc.processInfo.work_width-31,proc.processInfo.work_height-31,14,14,scrl_right+0x40000000,0xEFEBEF);
|
||||
kos_PutImage(arrow_left,15,15,2,proc.processInfo.work_height-31);
|
||||
kos_PutImage(arrow_right,15,15,proc.processInfo.work_width-31,proc.processInfo.work_height-31);
|
||||
kos_PutImage(scroll_h,35,15,hscrl_coord_x,hscrl_coord_y);
|
||||
|
||||
img_area_left=2;
|
||||
img_area_top=33;
|
||||
img_area_width=proc.processInfo.work_width-img_area_left-3-16;
|
||||
img_area_height=proc.processInfo.work_height-img_area_top-3-16-15;
|
||||
|
||||
kos_WriteTextToWindow(2,proc.processInfo.work_height-12, 0x80, 0, szStatus, 0);
|
||||
|
||||
if (img_area_width<image_width) set_hscroll_values(image_width-img_area_width,0); else set_hscroll_values(1,0);
|
||||
if (img_area_height<image_height) set_vscroll_values(image_height-img_area_height,0); else set_vscroll_values(1,0);
|
||||
|
||||
draw_image();
|
||||
|
||||
kos_WindowRedrawStatus(2);
|
||||
}
|
||||
|
||||
void LoadPCX(Byte* filebuff, Dword filesize)
|
||||
{
|
||||
PCXFile pcx;
|
||||
if (!pcx.LoadPCXFile(filebuff,filesize))
|
||||
{
|
||||
image_opened=1;
|
||||
image_buffer=pcx.buffer;
|
||||
image_width=pcx.width;
|
||||
image_height=pcx.height;
|
||||
} else {
|
||||
image_opened=0;
|
||||
}
|
||||
}
|
||||
|
||||
void LoadBMP(Byte* filebuff, Dword filesize)
|
||||
{
|
||||
BMPFile bmp;
|
||||
if (!bmp.LoadBMPFile(filebuff,filesize))
|
||||
{
|
||||
image_opened=1;
|
||||
image_buffer=bmp.buffer;
|
||||
image_width=bmp.width;
|
||||
image_height=bmp.height;
|
||||
} else {
|
||||
image_opened=0;
|
||||
}
|
||||
}
|
||||
|
||||
void LoadTGA(Byte* filebuff, Dword filesize)
|
||||
{
|
||||
TGAFile tga;
|
||||
if (!tga.LoadTGAFile(filebuff,filesize))
|
||||
{
|
||||
image_opened=1;
|
||||
image_buffer=tga.buffer;
|
||||
image_width=tga.width;
|
||||
image_height=tga.height;
|
||||
} else {
|
||||
image_opened=0;
|
||||
}
|
||||
}
|
||||
|
||||
//Çàãðóçèòü ñïèñîê ôàéëîâ, ïîääåðæèâàåìûõ ïðîãðàììîé èç ïàïêè ñ òåêóùèì ôàéëîì
|
||||
void load_folder(char* imgfile)
|
||||
{
|
||||
kosFileInfo fi;
|
||||
char* cPtr;
|
||||
int i;
|
||||
|
||||
// Èçâëå÷åì èìÿ ïàïêè
|
||||
strcpy(fi.fileURL, imgfile);
|
||||
cPtr=strrchr(fi.fileURL,'/');
|
||||
cPtr[1]=0;
|
||||
strcpy(cur_folder,fi.fileURL);
|
||||
|
||||
if (cur_files) { kos_FreeMemory(cur_files); cur_files=NULL;}
|
||||
if (img_files) { kos_FreeMemory((Byte*)img_files); img_files=NULL;}
|
||||
|
||||
/* Âûäåëèì ïàìÿòü ïîä ôàéë */
|
||||
cur_files = kos_GetMemory(65536);
|
||||
fi.rwMode = 1;
|
||||
fi.OffsetLow = 0;
|
||||
fi.OffsetHigh = 0;
|
||||
fi.dataCount = 65536;
|
||||
fi.bufferPtr = cur_files;
|
||||
int state = kos_FileSystemAccess(&fi);
|
||||
if (state!=0 && state!=6) {kos_FreeMemory(cur_files); cur_files=NULL; return;}
|
||||
|
||||
Dword file_count=*(cur_files+8);
|
||||
img_files = (Word*)kos_GetMemory(4*file_count);
|
||||
|
||||
char* image_name;
|
||||
cnt_imgfiles=0;
|
||||
cur_image=-1;
|
||||
|
||||
lcase(imgfile);
|
||||
for(i=0;i<file_count;i++)
|
||||
{
|
||||
image_name=(char*)cur_files+32+i*304+40;
|
||||
lcase(image_name);
|
||||
cPtr=strrchr(image_name,'.');
|
||||
if (strcmp((char*)cPtr,".bmp") || strcmp((char*)cPtr,".pcx") || strcmp((char*)cPtr,".tga"))
|
||||
{
|
||||
cPtr=strrchr(imgfile,'/');
|
||||
if (strcmp(cPtr+1,image_name)) cur_image=cnt_imgfiles;
|
||||
((Word*)img_files)[cnt_imgfiles]=i;
|
||||
cnt_imgfiles++;
|
||||
}
|
||||
}
|
||||
cnt_imgfiles--;
|
||||
}
|
||||
|
||||
void open_imgfile(char* imgfile)
|
||||
{
|
||||
Word scr_left,scr_top,scr_right,scr_bot;
|
||||
Word win_width,win_height;
|
||||
Dword skin_height;
|
||||
kosFileInfo fi;
|
||||
Dword file_size;
|
||||
Byte* filebuff;
|
||||
Byte* infoBuf;
|
||||
|
||||
|
||||
/* Âû÷èñëèì ðàçìåð ôàéëà */
|
||||
infoBuf = kos_GetMemory(40); /* Áóôåð äëÿ èíôî-ñòðóêòóðû */
|
||||
fi.rwMode = 5;
|
||||
fi.OffsetLow = 0;
|
||||
fi.OffsetHigh = 0;
|
||||
fi.dataCount = 0;
|
||||
fi.bufferPtr = infoBuf;
|
||||
strcpy(fi.fileURL, imgfile);
|
||||
if (kos_FileSystemAccess(&fi)) { kos_FreeMemory(infoBuf); return;}
|
||||
file_size=*(Dword*)(infoBuf+32);
|
||||
kos_FreeMemory(infoBuf);
|
||||
|
||||
/* Âûäåëèì ïàìÿòü ïîä ôàéë */
|
||||
filebuff = kos_GetMemory(file_size);
|
||||
fi.rwMode = 0;
|
||||
fi.OffsetLow = 0;
|
||||
fi.OffsetHigh = 0;
|
||||
fi.dataCount = file_size;
|
||||
fi.bufferPtr = filebuff;
|
||||
strcpy(fi.fileURL, imgfile);
|
||||
if (kos_FileSystemAccess(&fi)) { kos_FreeMemory(filebuff); return;}
|
||||
|
||||
/* Îïðåäåëÿåì òèï ôàéëà */
|
||||
//lcase(imgfile); óæå â íèæíåì ðåãèñòðå: ýòî âûïîëíÿåòñÿ â load_folder
|
||||
char* cPtr;
|
||||
cPtr=strrchr(imgfile,'.');
|
||||
if (strcmp((char*)cPtr,".bmp")) LoadBMP(filebuff,file_size);
|
||||
if (strcmp((char*)cPtr,".pcx")) LoadPCX(filebuff,file_size);
|
||||
if (strcmp((char*)cPtr,".tga")) LoadTGA(filebuff,file_size);
|
||||
cPtr=strrchr(imgfile,'/')+1;
|
||||
if (image_opened)
|
||||
{
|
||||
sprintf(szStatus,"” ©« %S... [%U/%U]",cPtr,cur_image+1,cnt_imgfiles+1);
|
||||
|
||||
__asm
|
||||
{
|
||||
mov eax,48
|
||||
mov ebx,5
|
||||
int 40h
|
||||
mov scr_right,ax
|
||||
shr eax,16
|
||||
mov scr_bot,bx
|
||||
shr ebx,16
|
||||
mov scr_left,ax
|
||||
mov scr_top,bx
|
||||
mov eax,48
|
||||
mov ebx,4
|
||||
int 40h
|
||||
mov skin_height,eax
|
||||
}
|
||||
|
||||
if (scr_right-scr_left+1>image_width) win_width=image_width+img_area_left+3+16+10; else win_width=scr_right-scr_left+1;
|
||||
if (scr_bot-scr_top+1>image_height) win_height=image_height+img_area_top+3+16+15+5+skin_height; else win_height=scr_bot-scr_top+1;
|
||||
|
||||
if (win_width<150) win_width=150;
|
||||
if (win_height<160) win_height=160;
|
||||
|
||||
img_cuted=kos_GetMemory(image_width*image_height*3);
|
||||
kos_ChangeWindow(scr_left,scr_top,win_width,win_height);
|
||||
|
||||
if (img_area_width<image_width) set_hscroll_values(image_width-img_area_width,0); else set_hscroll_values(1,0);
|
||||
if (img_area_height<image_height) set_vscroll_values(image_height-img_area_height,0); else set_vscroll_values(1,0);
|
||||
} else {
|
||||
sprintf(szStatus,"” ©« %S ¥ § £à㦥. ”®à¬ â ¥ ¯®¤¤¥à¦¨¢ ¥âáï.",cPtr);
|
||||
}
|
||||
draw_window();
|
||||
kos_FreeMemory(filebuff);
|
||||
}
|
||||
|
||||
void show_dlg()
|
||||
{
|
||||
char* imgfile;
|
||||
imgfile=DialogOpenFile(&draw_window);
|
||||
if (!imgfile) return;
|
||||
load_folder(imgfile);
|
||||
//Åñëè ôàéë óæå áûë îòêðûò...
|
||||
if (image_opened)
|
||||
{
|
||||
image_opened=0;
|
||||
kos_FreeMemory(image_buffer); image_buffer=NULL;
|
||||
kos_FreeMemory(img_cuted); img_cuted=NULL;
|
||||
}
|
||||
open_imgfile(imgfile);
|
||||
}
|
||||
|
||||
void kos_Main()
|
||||
{
|
||||
Dword btnID;
|
||||
Byte keyCode;
|
||||
Dword mButton;
|
||||
int mX,mXOld;
|
||||
int mY,mYOld;
|
||||
char label1[100];
|
||||
|
||||
/* Èíèöèàëèçàöèÿ êó÷è ïðîöåññà */
|
||||
__asm
|
||||
{
|
||||
mov eax,68
|
||||
mov ebx,11
|
||||
int 40h
|
||||
}
|
||||
|
||||
vscrl_coord_min=vscrl_coord_y=33+15;
|
||||
hscrl_coord_min=hscrl_coord_x=2+15;
|
||||
strcpy(szStatus,"” ©« ¥ § £à㦥");
|
||||
|
||||
draw_window();
|
||||
if (params[0]!='P') {load_folder(params); open_imgfile(params);}
|
||||
kos_SetMaskForEvents(0x27);
|
||||
for (;;)
|
||||
{
|
||||
switch (kos_WaitForEvent(10))
|
||||
{
|
||||
case 1:
|
||||
draw_window();
|
||||
break;
|
||||
|
||||
case 2:
|
||||
kos_GetKey(keyCode);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
kos_GetButtonID(btnID);
|
||||
switch (btnID)
|
||||
{
|
||||
case 1:
|
||||
//Îñâîáîäèì ïàìÿòü
|
||||
if (image_buffer) kos_FreeMemory(image_buffer);
|
||||
if (img_cuted) kos_FreeMemory(img_cuted);
|
||||
if (cur_files) kos_FreeMemory(cur_files);
|
||||
if (img_files) kos_FreeMemory((Byte*)img_files);
|
||||
kos_ExitApp();
|
||||
break;
|
||||
|
||||
case btn_open:
|
||||
show_dlg();
|
||||
break;
|
||||
|
||||
//Èñïîëüçóåì óæå íå íóæíûé íàì params
|
||||
case btn_prev:
|
||||
if (!cur_files) break;
|
||||
if (!cur_image) cur_image=cnt_imgfiles; else cur_image--;
|
||||
strcpy(params,cur_folder);
|
||||
strcpy(params+strlen(cur_folder),(char*)cur_files+32+((Word*)img_files)[cur_image]*304+40);
|
||||
open_imgfile(params);
|
||||
break;
|
||||
|
||||
case btn_next:
|
||||
if (!cur_files) break;
|
||||
if (cur_image==cnt_imgfiles) cur_image=0; else cur_image++;
|
||||
strcpy(params,cur_folder);
|
||||
strcpy(params+strlen(cur_folder),(char*)cur_files+32+((Word*)img_files)[cur_image]*304+40);
|
||||
open_imgfile(params);
|
||||
break;
|
||||
|
||||
/*
|
||||
case scrl_up:
|
||||
if (vscrl_max==1 || vscrl_coord_y<=vscrl_coord_min) break;
|
||||
set_vscroll_values(vscrl_max, ((vscrl_coord_y - 2 - vscrl_coord_min) * vscrl_max) / (vscrl_coord_max - vscrl_coord_min - 35));
|
||||
break;
|
||||
|
||||
case scrl_down:
|
||||
if (vscrl_max == 1 || vscrl_coord_y >= vscrl_coord_max) break;
|
||||
set_vscroll_values(vscrl_max, ((vscrl_coord_y + 2 - vscrl_coord_min) * vscrl_max) / (vscrl_coord_max - vscrl_coord_min - 35));
|
||||
break;
|
||||
*/
|
||||
|
||||
case btn_fit:
|
||||
scale = scale ? 0 : 1;
|
||||
draw_window();
|
||||
break;
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case 6:
|
||||
default:
|
||||
kos_GetMouseState(mButton,mX,mY);
|
||||
//Âåðòèêàëüíàÿ ïðîêðóòêà
|
||||
if (mButton==1)
|
||||
{
|
||||
if (vscrl_using)
|
||||
{
|
||||
kos_DrawBar(vscrl_coord_x,vscrl_coord_y,15,35,0xDADADA);
|
||||
if (vscrl_coord_y+mY-mYOld<vscrl_coord_min)
|
||||
{
|
||||
vscrl_value=0;
|
||||
vscrl_coord_y=vscrl_coord_min;
|
||||
} else if (vscrl_coord_y+35+mY-mYOld>vscrl_coord_max) {
|
||||
vscrl_value=vscrl_max;
|
||||
vscrl_coord_y=vscrl_coord_max-35;
|
||||
} else {
|
||||
vscrl_value=(((vscrl_coord_y-vscrl_coord_min)*vscrl_max)/(vscrl_coord_max-vscrl_coord_min-35));
|
||||
vscrl_coord_y=vscrl_coord_y+mY-mYOld;
|
||||
mYOld=mY;
|
||||
}
|
||||
kos_PutImage(scroll_v,15,35,vscrl_coord_x,vscrl_coord_y);
|
||||
draw_image();
|
||||
} else {
|
||||
if (mY>=vscrl_coord_y && mY<=vscrl_coord_y+35 && mX>=vscrl_coord_x && mX<=vscrl_coord_x+15)
|
||||
{
|
||||
vscrl_using=1;
|
||||
mYOld=mY;
|
||||
}
|
||||
}
|
||||
} else if(mButton==0) {
|
||||
if (vscrl_using) {vscrl_using=0; draw_image();}
|
||||
}
|
||||
//Ãîðèçîíòàëüíàÿ ïðîêðóòêà
|
||||
if (mButton==1)
|
||||
{
|
||||
if (hscrl_using)
|
||||
{
|
||||
kos_DrawBar(hscrl_coord_x,hscrl_coord_y,35,15,0xDADADA);
|
||||
if (hscrl_coord_x+mX-mXOld<hscrl_coord_min)
|
||||
{
|
||||
hscrl_value=0;
|
||||
hscrl_coord_x=hscrl_coord_min;
|
||||
} else if (hscrl_coord_x+35+mX-mXOld>hscrl_coord_max) {
|
||||
hscrl_value=hscrl_max;
|
||||
hscrl_coord_x=hscrl_coord_max-35;
|
||||
} else {
|
||||
hscrl_value=(((hscrl_coord_x-hscrl_coord_min)*hscrl_max)/(hscrl_coord_max-hscrl_coord_min-35));
|
||||
hscrl_coord_x=hscrl_coord_x+mX-mXOld;
|
||||
mXOld=mX;
|
||||
}
|
||||
kos_PutImage(scroll_h,35,15,hscrl_coord_x,hscrl_coord_y);
|
||||
draw_image();
|
||||
} else {
|
||||
if (mX>=hscrl_coord_x && mX<=hscrl_coord_x+35 && mY>=hscrl_coord_y && mY<=hscrl_coord_y+15)
|
||||
{
|
||||
hscrl_using=1;
|
||||
mXOld=mX;
|
||||
}
|
||||
}
|
||||
} else if(mButton==0) {
|
||||
if (hscrl_using) {hscrl_using=0; draw_image();}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
329
programs/media/imgview/mcsmemm.cpp
Normal file
329
programs/media/imgview/mcsmemm.cpp
Normal file
@ -0,0 +1,329 @@
|
||||
// memman.cpp : Defines the entry point for the console application.
|
||||
//
|
||||
|
||||
#include "kosSyst.h"
|
||||
#include "mcsmemm.h"
|
||||
|
||||
|
||||
void * __cdecl operator new ( size_t count, size_t element_size )
|
||||
{
|
||||
return allocmem( (Dword)(count * element_size) );
|
||||
}
|
||||
|
||||
void * __cdecl operator new [] ( size_t amount )
|
||||
{
|
||||
return allocmem( (Dword)amount );
|
||||
}
|
||||
|
||||
void * __cdecl operator new ( size_t amount )
|
||||
{
|
||||
return allocmem( (Dword)amount );
|
||||
}
|
||||
|
||||
void __cdecl operator delete ( void *pointer )
|
||||
{
|
||||
if ( pointer != NULL ) freemem( pointer );
|
||||
}
|
||||
|
||||
void __cdecl operator delete [] ( void *pointer )
|
||||
{
|
||||
if ( pointer != NULL ) freemem( pointer );
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
Dword mmMutex = FALSE;
|
||||
MemBlock *rootfree = NULL;
|
||||
MemBlock *rootuser = NULL;
|
||||
bool mmInitialized = false;
|
||||
Byte *mmHeapTop = NULL;
|
||||
|
||||
|
||||
//
|
||||
Byte * AllocMemFromSystem( Dword reqSize )
|
||||
{
|
||||
Byte *result;
|
||||
sProcessInfo pInfo;
|
||||
|
||||
//
|
||||
if ( mmInitialized )
|
||||
{
|
||||
result = mmHeapTop;
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
kos_ProcessInfo( &pInfo );
|
||||
//
|
||||
result = (Byte *)(pInfo.processInfo.used_memory + 1);
|
||||
//
|
||||
mmInitialized = true;
|
||||
}
|
||||
//
|
||||
if ( ! kos_ApplicationMemoryResize( ((Dword)result) + reqSize ) )
|
||||
{
|
||||
result = NULL;
|
||||
}
|
||||
//
|
||||
mmHeapTop = result + reqSize;
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
Byte *allocmem( Dword reqsize )
|
||||
{
|
||||
MemBlock *BlockForCheck;
|
||||
MemBlock *LastKnownGood;
|
||||
Dword tail;
|
||||
Byte *address;
|
||||
|
||||
//ïîäðîâíÿåì ðàçìåð
|
||||
if( ( tail = reqsize % SIZE_ALIGN ) != 0 )
|
||||
{
|
||||
reqsize += SIZE_ALIGN - tail;
|
||||
}
|
||||
|
||||
LastKnownGood = NULL;
|
||||
|
||||
// æä¸ì îñâîáîæäåíèÿ ìüþòåêñà
|
||||
while ( rtlInterlockedExchange( &mmMutex, TRUE ) )
|
||||
{
|
||||
//
|
||||
kos_Pause( 1 );
|
||||
}
|
||||
|
||||
//èùåì ïîäõîäÿùèé ñâîáîäíûé áëîê
|
||||
if( rootfree != NULL )
|
||||
{
|
||||
for ( BlockForCheck = rootfree; ; BlockForCheck = BlockForCheck->Next )
|
||||
{
|
||||
if ( BlockForCheck->Size >= reqsize )
|
||||
{
|
||||
//íàøëè
|
||||
if ( LastKnownGood != NULL )
|
||||
{
|
||||
if ( LastKnownGood->Size >= BlockForCheck->Size )
|
||||
LastKnownGood = BlockForCheck;
|
||||
}
|
||||
else
|
||||
LastKnownGood = BlockForCheck;
|
||||
if ( LastKnownGood->Size == reqsize )
|
||||
break;
|
||||
}
|
||||
if ( BlockForCheck->Next == NULL )
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( LastKnownGood != NULL )
|
||||
{
|
||||
//ïðîâåðèì íàéäåííûé áëîê íà âîçìîæíîñòü äåëåíèÿ
|
||||
tail = LastKnownGood->Size - reqsize;
|
||||
if ( tail >= ( sizeof(MemBlock) + SIZE_ALIGN ) )
|
||||
{
|
||||
//áóäåì ðàçáèâàòü
|
||||
BlockForCheck = (MemBlock *)( ( (Byte *)LastKnownGood ) + tail );
|
||||
BlockForCheck->Size = reqsize;
|
||||
//âñòàâèì çàíÿòûé áëîê â íà÷àëî ñïèñêà çàíàòûõ áëîêîâ
|
||||
if( rootuser != NULL )
|
||||
{
|
||||
BlockForCheck->Next = rootuser;
|
||||
rootuser->Previous = BlockForCheck;
|
||||
BlockForCheck->Previous = NULL;
|
||||
rootuser = BlockForCheck;
|
||||
}
|
||||
else
|
||||
{
|
||||
rootuser = BlockForCheck;
|
||||
BlockForCheck->Next = NULL;
|
||||
BlockForCheck->Previous = NULL;
|
||||
}
|
||||
|
||||
//èçìåíèì ðàçìåð îñòàâøåéñÿ ÷àñòè
|
||||
LastKnownGood->Size = tail - sizeof(MemBlock);
|
||||
address = ( (Byte *)BlockForCheck ) + sizeof(MemBlock);
|
||||
|
||||
// îòïóñòèì ìüþòåêñ
|
||||
rtlInterlockedExchange( &mmMutex, FALSE );
|
||||
|
||||
return address;
|
||||
}
|
||||
else
|
||||
{
|
||||
//ïåðåìåñòè áëîê èç î÷åðåäè ñâîáîäíûõ â íà÷àëî î÷åðåäè çàíÿòûõ
|
||||
//ñíà÷àëà âûêèíåì åãî èç î÷åðåäè ñâîáîäíûõ
|
||||
if ( LastKnownGood->Previous != NULL )
|
||||
{
|
||||
LastKnownGood->Previous->Next = LastKnownGood->Next;
|
||||
}
|
||||
else
|
||||
{
|
||||
//áëîê ñòîèò â íà÷àëå î÷åðåäè
|
||||
rootfree = LastKnownGood->Next;
|
||||
}
|
||||
if( LastKnownGood->Next != NULL )
|
||||
{
|
||||
LastKnownGood->Next->Previous = LastKnownGood->Previous;
|
||||
}
|
||||
//òåïåðü âñòàâèì åãî â î÷åðåäü çàíÿòûõ
|
||||
if( rootuser != NULL )
|
||||
{
|
||||
LastKnownGood->Next = rootuser;
|
||||
rootuser->Previous = LastKnownGood;
|
||||
LastKnownGood->Previous = NULL;
|
||||
rootuser = LastKnownGood;
|
||||
}
|
||||
else
|
||||
{
|
||||
rootuser = LastKnownGood;
|
||||
LastKnownGood->Next = NULL;
|
||||
LastKnownGood->Previous = NULL;
|
||||
}
|
||||
//
|
||||
address = ( (Byte *)LastKnownGood ) + sizeof(MemBlock);
|
||||
|
||||
// îòïóñòèì ìüþòåêñ
|
||||
rtlInterlockedExchange( &mmMutex, FALSE );
|
||||
|
||||
return address;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//íàäî ïîëó÷èòü åù¸ êóñî÷åê ïàìÿòè
|
||||
LastKnownGood = (MemBlock *)AllocMemFromSystem( reqsize + sizeof(MemBlock) );
|
||||
//
|
||||
if( LastKnownGood != NULL )
|
||||
{
|
||||
LastKnownGood->Size = reqsize;
|
||||
//òåïåðü âñòàâèì åãî â î÷åðåäü çàíÿòûõ
|
||||
if( rootuser != NULL )
|
||||
{
|
||||
LastKnownGood->Next = rootuser;
|
||||
rootuser->Previous = LastKnownGood;
|
||||
LastKnownGood->Previous = NULL;
|
||||
rootuser = LastKnownGood;
|
||||
}
|
||||
else
|
||||
{
|
||||
rootuser = LastKnownGood;
|
||||
LastKnownGood->Next = NULL;
|
||||
LastKnownGood->Previous = NULL;
|
||||
}
|
||||
address = ( (Byte *)LastKnownGood ) + sizeof(MemBlock);
|
||||
|
||||
// îòïóñòèì ìüþòåêñ
|
||||
rtlInterlockedExchange( &mmMutex, FALSE );
|
||||
|
||||
return address;
|
||||
}
|
||||
}
|
||||
|
||||
// îòïóñòèì ìüþòåêñ
|
||||
rtlInterlockedExchange( &mmMutex, FALSE );
|
||||
|
||||
//
|
||||
rtlDebugOutString( "allocmem failed." );
|
||||
kos_ExitApp();
|
||||
//
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//
|
||||
Dword freemem( void *vaddress )
|
||||
{
|
||||
Dword result;
|
||||
|
||||
Byte *checknext, *address = (Byte *)vaddress;
|
||||
|
||||
// æä¸ì îñâîáîæäåíèÿ ìüþòåêñà
|
||||
while ( rtlInterlockedExchange( &mmMutex, TRUE ) )
|
||||
{
|
||||
//
|
||||
kos_Pause( 1 );
|
||||
}
|
||||
|
||||
MemBlock *released = (MemBlock *)( address - sizeof(MemBlock) );
|
||||
|
||||
result = released->Size;
|
||||
|
||||
//óáèðàåì áëîê èç ñïèñêà çàíÿòûõ
|
||||
if ( released->Previous != NULL )
|
||||
{
|
||||
released->Previous->Next = released->Next;
|
||||
}
|
||||
else
|
||||
{
|
||||
rootuser = released->Next;
|
||||
}
|
||||
if ( released->Next != NULL )
|
||||
{
|
||||
released->Next->Previous = released->Previous;
|
||||
}
|
||||
//çàêèíåì òåïåðü ýòîò áëîê â ñïèñîê ñâîáîäíûõ
|
||||
released->Next = rootfree;
|
||||
released->Previous = NULL;
|
||||
rootfree = released;
|
||||
if ( released->Next != NULL )
|
||||
{
|
||||
released->Next->Previous = released;
|
||||
}
|
||||
|
||||
//òåïåðü ïîèùåì ñìåæíûå ñâîáîäíûå áëîêè
|
||||
checknext = (Byte *)(rootfree) + ( rootfree->Size + sizeof(MemBlock) );
|
||||
//
|
||||
for ( released = rootfree->Next; released != NULL; released = released->Next )
|
||||
{
|
||||
if ( checknext == (Byte *)released )
|
||||
{
|
||||
//ñîáèðàåì áëîêè âìåñòå
|
||||
//ñíà÷àëà âûêèíåì èç î÷åðåäè ñâîáîäíûõ
|
||||
released->Previous->Next = released->Next;
|
||||
if( released->Next != NULL )
|
||||
{
|
||||
released->Next->Previous = released->Previous;
|
||||
}
|
||||
//òåïåðü óâåëè÷èì ðàçìåð êîðíåâîãî áëîêà
|
||||
rootfree->Size += released->Size + sizeof(MemBlock);
|
||||
break;
|
||||
}
|
||||
}
|
||||
//åñëè íàäî, ïîèùåì áëîêè ïåðåä òåêùèì.
|
||||
checknext = (Byte *)(rootfree);
|
||||
//
|
||||
if ( released == NULL )
|
||||
{
|
||||
for ( released = rootfree->Next; released != NULL; released = released->Next )
|
||||
{
|
||||
if ( checknext == (Byte *)released + ( released->Size + sizeof(MemBlock) ) )
|
||||
{
|
||||
//ñîáèðàåì áëîêè âìåñòå
|
||||
//óâåëè÷èì ðàçìåð áëîêà
|
||||
released->Size += rootfree->Size + sizeof(MemBlock);
|
||||
//òåïåðü âûêèíåì èç î÷åðåäè ñâîáîäíûõ
|
||||
released->Previous->Next = released->Next;
|
||||
if ( released->Next != NULL )
|
||||
{
|
||||
released->Next->Previous = released->Previous;
|
||||
}
|
||||
//è çàêèíåì åãî â íà÷àëî î÷åðåäè âìåñòî ïðèñîåäèí¸ííîãî áëîêà èç êîðíÿ ñïèñêà
|
||||
if ( rootfree->Next != NULL )
|
||||
{
|
||||
rootfree->Next->Previous = released;
|
||||
}
|
||||
released->Next = rootfree->Next;
|
||||
released->Previous = NULL;
|
||||
rootfree = released;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// îòïóñòèì ìüþòåêñ
|
||||
rtlInterlockedExchange( &mmMutex, FALSE );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user