Subversion Repositories Kolibri OS

Rev

Rev 9601 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
9428 leency 1
#define MEMSIZE 1024*20
9426 leency 2
#define ENTRY_POINT #main
3
 
9594 leency 4
//===================================================//
5
//                                                   //
6
//                       LIB                         //
7
//                                                   //
8
//===================================================//
9
 
9426 leency 10
#include "../lib/fs.h"
11
#include "../lib/mem.h"
12
#include "../lib/obj/libimg.h"
13
#include "../lib/patterns/rgb.h"
9594 leency 14
#include "../lib/patterns/restart_process.h"
15
#include "../lib/patterns/toolbar_button.h"
9426 leency 16
 
9594 leency 17
//===================================================//
18
//                                                   //
19
//                   GLOBAL VARS                     //
20
//                                                   //
21
//===================================================//
22
 
23
libimg_image icons32;
24
libimg_image icons16;
25
libimg_image icons16w;
26
unsigned int size32;
27
unsigned int size16;
28
 
9601 leency 29
:unsigned char checkbox_flag[507] = {
30
	0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC,
31
	0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4,
32
	0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xDC, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04,
33
	0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC,
34
	0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xDC,
35
	0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xBC, 0x04,
36
	0xFC, 0xBC, 0x04, 0xFC, 0xBC, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC,
37
	0xB4, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8,
38
	0x04, 0xFC, 0xBC, 0x04, 0xFC, 0xBC, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xB4, 0x04, 0xF9, 0x98, 0x04,
39
	0xFC, 0xF2, 0xD2, 0xFC, 0xF2, 0xD2, 0xFA, 0xA5, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xD4, 0x04, 0xFC,
40
	0xB4, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xB4,
41
	0x04, 0xF9, 0x98, 0x04, 0xFF, 0xFF, 0xFF, 0xFD, 0xFD, 0xF6, 0xFC, 0xF9, 0xAF, 0xF9, 0x98, 0x04,
42
	0xFC, 0xB4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xF2, 0xD2, 0xFC, 0xF2, 0xD2, 0xF9,
43
	0x98, 0x04, 0xFC, 0xB4, 0x04, 0xF9, 0x98, 0x04, 0xFF, 0xFF, 0xFF, 0xFD, 0xFD, 0xF6, 0xF7, 0xE0,
44
	0x95, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xD4, 0x04, 0xF9, 0x98, 0x04,
45
	0xFD, 0xFD, 0xF6, 0xFF, 0xFF, 0xFF, 0xFC, 0xDC, 0x2C, 0xF9, 0x98, 0x04, 0xFF, 0xFF, 0xFF, 0xFD,
46
	0xFD, 0xF6, 0xF7, 0xE0, 0x95, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xA9,
47
	0x04, 0xFC, 0xD4, 0x04, 0xF9, 0x98, 0x04, 0xF7, 0xE0, 0x95, 0xFD, 0xFD, 0xF6, 0xFF, 0xFF, 0xFF,
48
	0xFF, 0xFF, 0xFF, 0xFD, 0xFD, 0xF6, 0xF7, 0xE0, 0x95, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFA,
49
	0x9F, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xD4, 0x04, 0xF9, 0x98, 0x04, 0xBC, 0x64,
50
	0x04, 0xF7, 0xE0, 0x95, 0xFD, 0xFD, 0xF6, 0xFD, 0xFD, 0xF6, 0xF7, 0xE0, 0x95, 0xBC, 0x64, 0x04,
51
	0xF9, 0x98, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC,
52
	0xC8, 0x04, 0xFA, 0xA5, 0x04, 0xF9, 0x98, 0x04, 0xBC, 0x64, 0x04, 0xF7, 0xE0, 0x95, 0xF7, 0xE0,
53
	0x95, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04,
54
	0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xF9,
55
	0x98, 0x04, 0xBC, 0x64, 0x04, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xA9,
56
	0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xC8, 0x04,
57
	0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xFA,
58
	0x9F, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xFA, 0x9F,
59
	0x04, 0xF9, 0x98, 0x04, 0xFC, 0xB4, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04,
60
	0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9,
61
	0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04
62
};
63
 
9594 leency 64
//===================================================//
65
//                                                   //
66
//                       MAIN                        //
67
//                                                   //
68
//===================================================//
69
 
70
void main()
71
{
72
	mem_init();
73
	load_dll(libimg, #libimg_init, 1);
74
 
75
	icons32.load("/SYS/ICONS32.PNG"); size32 = icons32.h * 32 * 4;
76
	icons16.load("/SYS/ICONS16.PNG"); size16 = icons16.h * 18 * 4;
77
 
78
	if (GetProcessesCount("@RESHARE")>1) {
79
		start_ui();
80
	} else {
81
		start_daemon();
82
	}
83
}
84
 
85
//===================================================//
86
//                                                   //
87
//                      DAEMON                       //
88
//                                                   //
89
//===================================================//
90
 
91
void start_daemon()
92
{
93
	char* shared_i32;
94
	char* shared_i16;
95
	char* shared_i16w;
96
	char* shared_chbox;
97
 
9601 leency 98
	shared_chbox = memopen("CHECKBOX", sizeof(checkbox_flag), SHM_CREATE+SHM_WRITE);
99
	memmov(shared_chbox, #checkbox_flag, sizeof(checkbox_flag));
9594 leency 100
 
101
	shared_i32 = memopen("ICONS32", size32, SHM_CREATE+SHM_WRITE);
102
	memmov(shared_i32, icons32.imgsrc, size32);
103
	img_destroy stdcall(icons32.image);
104
 
105
	shared_i16 = memopen("ICONS18", size16, SHM_CREATE + SHM_WRITE);
106
	memmov(shared_i16, icons16.imgsrc, size16);
107
	//img_destroy stdcall(icons16.image);
108
 
109
	shared_i16w = memopen("ICONS18W", size16, SHM_CREATE + SHM_WRITE);
110
 
111
	@SetEventMask(EVM_DESKTOPBG);
112
	do {
113
		$push sc.work
114
		sc.get();
115
		$pop eax
116
		if (sc.work != EAX) {
117
			memmov(shared_i16w, icons16.imgsrc, size16);
9602 leency 118
			replace_2cols(shared_i16w, size16, 0xffFFFfff, sc.work, 0xffCACBD6, sc.dark);
9594 leency 119
		}
120
	} while(WaitEvent()==evDesktop);
121
}
122
 
123
//===================================================//
124
//                                                   //
125
//                        UI                         //
126
//                                                   //
127
//===================================================//
128
 
129
#define WINW 775
130
#define WINH 660
131
#define PAD  10
132
#define BTNW 100
133
#define BTNH 24
134
#define RESY PAD+30+BTNH+BTNH
135
 
136
enum { ACTIVE_ICONS32=1, ACTIVE_ICONS16=2, ACTIVE_ICONS16W=4, ACTIVE_CHECKBOX=8 };
137
int active_tab = ACTIVE_ICONS32;
138
 
139
void start_ui()
140
{
141
	loop() switch(WaitEvent())
142
	{
143
		case evKey:
144
			@GetKeyScancode();
145
			if (AL == SCAN_CODE_ESC) ExitProcess();
146
			if (AL == SCAN_CODE_TAB) {
147
				active_tab <<= 1;
148
				if (active_tab > ACTIVE_CHECKBOX) active_tab = 1;
149
				draw_tabs();
150
			}
151
			break;
152
 
153
		case evButton:
154
			GetButtonID();
155
			if (1==EAX) {
156
				ExitProcess();
157
			} else {
158
				active_tab = EAX - 10;
159
				draw_tabs();
160
			}
161
			break;
162
 
163
		case evReDraw:
164
			sc.get();
165
			DefineAndDrawWindow(80, 50, WINW+9, WINH+4+GetSkinHeight(), 0x74, 0, "@RESHARE - A service that provides shared resorces", 0);
166
			DrawBar(0, 0, WINW, RESY-PAD-1, sc.work); //top bg
9602 leency 167
			DrawBar(0, RESY-PAD-1, WINW, 1, sc.line);
9594 leency 168
			WriteText(PAD, PAD, 0x90, sc.work_text, "Each tab name corresponds to memory name that can be accessed by sysfunc 68.22. Now availabe:");
169
			draw_tabs();
170
	}
171
}
172
 
173
void DrawFlatButton(dword _x, _y, _text, _id, _active)
174
{
9602 leency 175
	if (_active) EDX = sc.button; else EDX = sc.light;
9594 leency 176
	DrawBar(_x, _y, BTNW, BTNH+1, EDX);
177
 
178
	if (_active) EDX = sc.button_text; else EDX = sc.work_text;
179
	WriteText(-strlen(_text)*8+BTNW/2+_x, _y+6, 0x90, EDX, _text);
180
 
181
	PutPixel(_x,_y,sc.work);
182
	PutPixel(_x,_y+BTNH,EDX);
183
	PutPixel(_x+BTNW-1,_y,EDX);
184
	PutPixel(_x+BTNW-1,_y+BTNH,EDX);
185
 
186
	DefineHiddenButton(_x, _y, BTNW-1, BTNH, _id);
187
}
188
 
189
void draw_tabs()
190
{
191
	#define TABX WINW-BTNW-PAD-BTNW-PAD-BTNW-PAD-BTNW/2
192
	DrawFlatButton(           TABX, PAD+30, "ICONS32",  10+ACTIVE_ICONS32, active_tab & ACTIVE_ICONS32);
193
	DrawFlatButton(PAD+BTNW*1+TABX, PAD+30, "ICONS16",  10+ACTIVE_ICONS16, active_tab & ACTIVE_ICONS16);
194
	DrawFlatButton(PAD+BTNW*2+TABX, PAD+30, "ICONS16W", 10+ACTIVE_ICONS16W, active_tab & ACTIVE_ICONS16W);
195
	DrawFlatButton(PAD+BTNW*3+TABX, PAD+30, "CHECKBOX", 10+ACTIVE_CHECKBOX, active_tab & ACTIVE_CHECKBOX);
196
	draw_tab_icons32();
197
}
198
 
199
void draw_tab_icons32()
200
{
201
	int i;
202
	int x=PAD, y;
203
	int iconimg;
204
	int iconh;
205
	int iconw;
206
 
207
	DrawBar(0, RESY-PAD, WINW, WINH-RESY+PAD, sc.work);
208
	if (active_tab & ACTIVE_ICONS32) {
209
		iconimg = icons32.imgsrc;
210
		iconw = 32;
211
		iconh = icons32.h;
212
	} else if (active_tab & ACTIVE_ICONS16) {
213
		iconimg = icons16.imgsrc;
214
		iconw = 18;
215
		iconh = icons16.h;
216
	} else if (active_tab & ACTIVE_ICONS16W) {
217
		iconimg = memopen("ICONS18W", NULL, SHM_READ);
218
		iconw = 18;
219
		iconh = icons16.h;
220
	} else {
9602 leency 221
		PutImage(WINW-13/2, WINH-RESY-13/2+RESY, 13, 13, #checkbox_flag);
9594 leency 222
		return;
223
	}
224
 
225
	for (i = 0; i < iconh/iconw; i++)
226
	{
227
		PutPaletteImage(iconw*iconw*4*i + iconimg, iconw, iconw, 50-iconw/2+x, y+RESY, 32, 0);
9602 leency 228
		WriteText(-strlen(itoa(i))*8+50/2+x, y+RESY+iconw+5, 0x90, sc.line, itoa(i));
9594 leency 229
		x += 50;
230
		if (x + 50 > WINW) {
231
			x = PAD;
232
			y += iconw + 30;
233
		}
234
	}
235
}