/programs/media/imgview/MCSMEMM.H |
---|
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 ); |
/programs/media/imgview/STDARG.H |
---|
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 */ |
/programs/media/imgview/bin/ChangeLog |
---|
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: |
= Ïåðâàÿ âåðñèÿ ïðîãðàììû. |
/programs/media/imgview/bin/readme |
---|
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/ |
/programs/media/imgview/bin |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/imgview/compile.bat |
---|
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 |
/programs/media/imgview/dlgopen.cpp |
---|
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; |
} |
/programs/media/imgview/dlgopen.h |
---|
0,0 → 1,0 |
char* DialogOpenFile(void (*draw)()); |
/programs/media/imgview/formats/bmp.cpp |
---|
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; |
} |
/programs/media/imgview/formats/bmp.h |
---|
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); |
}; |
/programs/media/imgview/formats/pcx.cpp |
---|
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; |
} |
/programs/media/imgview/formats/pcx.h |
---|
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); |
}; |
/programs/media/imgview/formats/tga.cpp |
---|
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; |
} |
/programs/media/imgview/formats/tga.h |
---|
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); |
}; |
/programs/media/imgview/formats |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/imgview/gfx.cpp |
---|
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, |
}; |
/programs/media/imgview/img/btn_fit.bmp |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/imgview/img/btn_next.bmp |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/imgview/img/btn_open.bmp |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/imgview/img/btn_prev.bmp |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/imgview/img/template.bmp |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/imgview/img |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/imgview/kosSyst.cpp |
---|
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(); |
} |
/programs/media/imgview/kosSyst.h |
---|
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(); |
/programs/media/imgview/main.cpp |
---|
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; |
} |
} |
} |
/programs/media/imgview/mcsmemm.cpp |
---|
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; |
} |
/programs/media/imgview/. |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |