Subversion Repositories Kolibri OS

Rev

Rev 3965 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3965 Rev 3975
1
#include "..\lib\figures.h"
1
#include "..\lib\figures.h"
2
#include "..\lib\mem.h" 
2
#include "..\lib\mem.h" 
3
#include "..\lib\dll.h"
3
#include "..\lib\dll.h"
4
#include "..\lib\lib.obj\box_lib.h"
4
#include "..\lib\lib.obj\box_lib.h"
5
 
5
 
6
#ifdef LANG_RUS
6
#ifdef LANG_RUS
7
	unsigned char *but_text[]={
7
	unsigned char *but_text[]={
8
	"„®¡ ¢¨âì ¤¨áª [Ins]",
8
	"„®¡ ¢¨âì ¤¨áª [Ins]",
9
	"“¤ «¨âì ¤¨áª [Del]",
9
	"“¤ «¨âì ¤¨áª [Del]",
10
	"„®¡ ¢¨âì [Ctrl+Enter]",
10
	"„®¡ ¢¨âì [Ctrl+Enter]",
11
	0};
11
	0};
12
	
12
	
13
	?define INTRO_TEXT_1 "‡¤¥áì ¡ã¤¥â ®â®¡à ¦ âìáï ᯨ᮪"
13
	?define INTRO_TEXT_1 "‡¤¥áì ¡ã¤¥â ®â®¡à ¦ âìáï ᯨ᮪"
14
	?define INTRO_TEXT_2 "¢¨àâã «ì­ëå ¤¨áª®¢ ¢ á¨á⥬¥."
14
	?define INTRO_TEXT_2 "¢¨àâã «ì­ëå ¤¨áª®¢ ¢ á¨á⥬¥."
15
	?define INTRO_TEXT_3 "®¯à®¡ã©â¥ ¤®¡ ¢¨âì ®¤¨­..."
15
	?define INTRO_TEXT_3 "®¯à®¡ã©â¥ ¤®¡ ¢¨âì ®¤¨­..."
16
	?define INTRO_TEXT_4 " §¬¥à:"
16
	?define INTRO_TEXT_4 " §¬¥à:"
17
 
17
 
18
	?define NOTIFY_TEXT_NO_DISK    "„«ï ­ ç «  ¤®¡ ¢ì⥠å®âï ¡ë ®¤¨­ ¤¨áª"
18
	?define NOTIFY_TEXT_NO_DISK    "„«ï ­ ç «  ¤®¡ ¢ì⥠å®âï ¡ë ®¤¨­ ¤¨áª"
19
	?define NOTIFY_TEXT_DISK_LIMIT "„®á⨣­ã⠯।¥« ª®«¨ç¥á⢠ ¢¨àâã «ì­ëå ¤¨áª®¢"
19
	?define NOTIFY_TEXT_DISK_LIMIT "„®á⨣­ã⠯।¥« ª®«¨ç¥á⢠ ¢¨àâã «ì­ëå ¤¨áª®¢"
-
 
20
	?define FREE_RAM_TEXT " §¬¥à ᢮¡®¤­®© ®¯¥à â¨¢­®© ¯ ¬ïâ¨: "
20
	
21
	
21
#else
22
#else
22
	unsigned char *but_text[]={
23
	unsigned char *but_text[]={
23
	"Add disk [Ins]",
24
	"Add disk [Ins]",
24
	"Delete disk [Del]",
25
	"Delete disk [Del]",
25
	"Add [Ctrl+Enter]",
26
	"Add [Ctrl+Enter]",
26
	0};
27
	0};
27
	
28
	
28
	?define INTRO_TEXT_1 " There will be list of mounted"
29
	?define INTRO_TEXT_1 " There will be list of mounted"
29
	?define INTRO_TEXT_2 " virtual disks."
30
	?define INTRO_TEXT_2 " virtual disks."
30
	?define INTRO_TEXT_3 " Try to add one..."
31
	?define INTRO_TEXT_3 " Try to add one..."
31
	?define INTRO_TEXT_4 "Size:"
32
	?define INTRO_TEXT_4 "Size:"
32
 
33
 
33
	?define NOTIFY_TEXT_NO_DISK    "You need to have at least one disk"
34
	?define NOTIFY_TEXT_NO_DISK    "You need to have at least one disk"
34
	?define NOTIFY_TEXT_DISK_LIMIT "Reached the limit of the number of virtual disks"
35
	?define NOTIFY_TEXT_DISK_LIMIT "Reached the limit of the number of virtual disks"
-
 
36
	?define FREE_RAM_TEXT "Free RAM size: "
35
#endif
37
#endif
36
 
38
 
37
struct path_string { unsigned char Item[256]; };
39
struct path_string { unsigned char Item[256]; };
38
path_string disk_list[40];
40
path_string disk_list[40];
39
 
41
 
40
dword devbuf;
42
dword devbuf;
41
int disk_num;
43
int disk_num;
42
int selected;
44
int selected;
43
 
45
 
44
system_colors sc;
46
system_colors sc;
45
proc_info Form;
47
proc_info Form;
46
 
48
 
47
unsigned char dsize[30];
49
unsigned char dsize[30];
48
 
50
 
49
unsigned char icons[14*56] = FROM "icons.raw";
51
unsigned char icons[14*56] = FROM "icons.raw";
50
#define TOPPANELH 50
52
#define TOPPANELH 50
51
#define BOTPANELH 20
53
#define BOTPANELH 20
52
 
54
 
53
int	mouse_dd;
55
int	mouse_dd;
54
char disk_size[30]="\0";
56
char disk_size[30];
55
#ifdef LANG_RUS
-
 
56
edit_box edit_disk_size= {60,50,5,0xffffff,0x94AECE,0x000000,0xffffff,0,sizeof(disk_size)+2,#disk_size,#mouse_dd, 0b100000000000000};
-
 
57
#else
-
 
58
edit_box edit_disk_size= {60,40,5,0xffffff,0x94AECE,0x000000,0xffffff,0,sizeof(disk_size)+2,#disk_size,#mouse_dd, 0b100000000000000};
57
edit_box edit_disk_size= {50,0,5,0xffffff,0x94AECE,0x000000,0xffffff,0,4,#disk_size,#mouse_dd, 1000000000000010b};
59
#endif
-
 
60
 
58
 
61
void Main_Window()
59
void Main_Window()
62
{
60
{
63
	unsigned int id, key, err;
61
	unsigned int id, key, err;
64
	int i, x, fr;
62
	int i, x, fr;
65
	
63
	
66
   	mem_Init();
64
   	mem_Init();
67
	if (load_dll2(boxlib, #box_lib_init,0)!=0) notify("Error while loading GUI library /sys/lib/boxlib.obj");
65
	if (load_dll2(boxlib, #box_lib_init,0)!=0) notify("Error while loading GUI library /sys/lib/boxlib.obj");
68
	fr = GetFreeRAM() / 5;
66
	fr = GetFreeRAM() / 5;
69
	fr = itoa(fr / 2048);
67
	fr = itoa(fr / 2048);
70
	strcat(#disk_size, fr);
68
	strcat(#disk_size, fr);
71
	edit_disk_size.size = strlen(#disk_size);
69
	edit_disk_size.size = strlen(#disk_size);
-
 
70
	edit_disk_size.left = strlen(INTRO_TEXT_4)*6 + 10;
72
	SetEventMask(0x27);
71
	SetEventMask(0x27);
73
	loop()
72
	loop()
74
	{
73
	{
75
		switch(WaitEvent()) 
74
		switch(WaitEvent()) 
76
		{
75
		{
77
		case evMouse:
76
		case evMouse:
78
			IF (GetProcessSlot(Form.ID)-GetActiveProcess()!=0) break;
77
			if (GetProcessSlot(Form.ID)-GetActiveProcess()!=0) break;
79
			edit_box_mouse stdcall (#edit_disk_size);
78
			edit_box_mouse stdcall (#edit_disk_size);
80
			break;
79
			break;
81
			
80
			
82
		case evButton:
81
		case evButton:
83
	                id=GetButtonID();               
82
	                id=GetButtonID();               
84
			if (id==1) ExitProcess();
83
			if (id==1) ExitProcess();
85
			if (id==10) AddDisk();
84
			if (id==10) AddDisk();
86
			if (id==11) //del
85
			if (id==11) //del
87
			{
86
			{
88
				_DEL_DISK:
87
				_DEL_DISK:
89
				if (disk_num==0)
88
				if (disk_num==0)
90
				{
89
				{
91
					notify(NOTIFY_TEXT_NO_DISK);
90
					notify(NOTIFY_TEXT_NO_DISK);
92
					break;
91
					break;
93
				}
92
				}
94
				param[0]='d';
93
				param[0]='d';
95
				param[1]=disk_list[selected].Item[3];
94
				param[1]=disk_list[selected].Item[3];
96
				err = Console_Work();
95
				err = Console_Work();
97
				if ((err!=0) && (err<7)) notify(rezult_text[err]);
96
				if ((err!=0) && (err<7)) notify(rezult_text[err]);
98
				pause(15);
97
				pause(15);
99
				GetDisks();
98
				GetDisks();
100
				DrawTmpDisks();
99
				DrawTmpDisks();
101
			}
100
			}
102
			if (id>=20)
101
			if (id>=20)
103
			{
102
			{
104
				if (selected==id-20) OpenTmpDisk();
103
				if (selected==id-20) OpenTmpDisk();
105
				selected=id-20;
104
				selected=id-20;
106
				DrawTmpDisks();
105
				DrawTmpDisks();
107
			}
106
			}
108
            break;
107
            break;
109
        case evKey:
108
        case evKey:
110
			key = GetKey();
109
			key = GetKey();
111
			if (key==9)
110
			if (key==9)
112
			{
111
			{
113
				if ( !asm test edit_disk_size.flags, 2) edit_disk_size.flags=1000000000000010b;
112
				if ( !asm test edit_disk_size.flags, 2) edit_disk_size.flags=1000000000000010b;
114
				else edit_disk_size.flags=1000000000000000b;
113
				else edit_disk_size.flags=1000000000000000b;
115
				edit_box_draw stdcall (#edit_disk_size);
114
				edit_box_draw stdcall (#edit_disk_size);
116
			}				
115
			}				
117
			if ( asm test edit_disk_size.flags, 2)
116
			if ( asm test edit_disk_size.flags, 2)
118
			{
117
			{
119
				if (key==13)
118
				if (key==13)
120
				{
119
				{
121
					edit_disk_size.flags=1000000000000000b;
120
					edit_disk_size.flags=1000000000000000b;
122
					edit_box_draw stdcall (#edit_disk_size);
121
					edit_box_draw stdcall (#edit_disk_size);
123
				}
122
				}
124
				EAX=key<<8;
123
				EAX=key<<8;
125
				edit_box_key stdcall(#edit_disk_size);
124
				edit_box_key stdcall(#edit_disk_size);
126
				break;
125
				break;
127
			}
126
			}
128
			if (key==182) if (disk_num<>0) goto _DEL_DISK;
127
			if (key==182) if (disk_num<>0) goto _DEL_DISK;
129
			if (key==185) AddDisk();
128
			if (key==185) AddDisk();
130
			if (key==13) OpenTmpDisk();
129
			if (key==13) OpenTmpDisk();
131
			if (key==178)
130
			if (key==178)
132
			{
131
			{
133
				if (selected==0) break;
132
				if (selected==0) break;
134
				selected--;
133
				selected--;
135
				DrawTmpDisks();
134
				DrawTmpDisks();
136
			}
135
			}
137
			if (key==177)
136
			if (key==177)
138
			{
137
			{
139
				if (selected+2>disk_num) break;
138
				if (selected+2>disk_num) break;
140
				selected++;
139
				selected++;
141
				DrawTmpDisks();
140
				DrawTmpDisks();
142
			}
141
			}
143
			if (key==176)
142
			if (key==176)
144
			{
143
			{
145
				if (selected<3) break;
144
				if (selected<3) break;
146
				selected-=3;
145
				selected-=3;
147
				DrawTmpDisks();
146
				DrawTmpDisks();
148
			}
147
			}
149
			if (key==179)
148
			if (key==179)
150
			{
149
			{
151
				if (selected+4>disk_num) break;
150
				if (selected+4>disk_num) break;
152
				selected+=3;
151
				selected+=3;
153
				DrawTmpDisks();
152
				DrawTmpDisks();
154
			}
153
			}
155
			//EAX=key<<8;
154
			//EAX=key<<8;
156
			//edit_box_key stdcall(#edit_disk_size);
155
			//edit_box_key stdcall(#edit_disk_size);
157
			break;
156
			break;
158
         case evReDraw:			
157
         case evReDraw:			
159
			sc.get();
158
			sc.get();
160
			DefineAndDrawWindow(170,150,314,270,0x74,sc.work,"Virtual Disk Manager 0.47",0);
159
			DefineAndDrawWindow(170,150,314,270,0x74,sc.work,"Virtual Disk Manager 0.5",0);
161
			GetProcessInfo(#Form, SelfInfo);
160
			GetProcessInfo(#Form, SelfInfo);
162
			if (Form.status_window>2) break;
161
			if (Form.status_window>2) break;
163
 
162
 
164
			DrawBar(0,0,  Form.cwidth,TOPPANELH, sc.work);
163
			DrawBar(0,0,  Form.cwidth,TOPPANELH, sc.work);
165
			DrawBar(0,TOPPANELH, Form.cwidth,1,  sc.work_graph);
164
			DrawBar(0,TOPPANELH, Form.cwidth,1,  sc.work_graph);
166
			#ifdef LANG_RUS
-
 
167
			WriteText(6, 9, 0x80, sc.work_text, INTRO_TEXT_4);
165
			WriteText(6, 9, 0x80, sc.work_text, INTRO_TEXT_4);
168
			WriteText(117, 9, 0x80, sc.work_text, "MB.");
-
 
169
			#else
-
 
170
			WriteText(6, 9, 0x80, sc.work_text, INTRO_TEXT_4);
-
 
171
			WriteText(107, 9, 0x80, sc.work_text, "MB.");
166
			WriteText(edit_disk_size.left + edit_disk_size.width + 8, 9, 0x80, sc.work_text, "MB.");
172
			#endif
-
 
173
			edit_box_draw stdcall (#edit_disk_size);
167
			edit_box_draw stdcall (#edit_disk_size);
174
			x=6;
-
 
175
			for (i=0; i<2; i++)
168
			for (i=0, x=6; i<2; i++, x+=strlen(but_text[i])*6+37)
176
			{
169
			{
177
				DefineButton(x,25, strlen(but_text[i])*6+28,19, 10+i, sc.work_button);
170
				DefineButton(x,25, strlen(but_text[i])*6+28,19, 10+i, sc.work_button);
178
				_PutImage(x+3,28,  14,14,   i*14*14*3+#icons);
171
				_PutImage(x+3,28,  14,14,   i*14*14*3+#icons);
179
				WriteText(x+22,31, 0x80, sc.work_button_text, but_text[i]);
172
				WriteText(x+22,31, 0x80, sc.work_button_text, but_text[i]);
180
				x+=strlen(but_text[i])*6+37; 
-
 
181
			}			
173
			}			
182
			GetDisks();
174
			GetDisks();
183
			DrawTmpDisks();
175
			DrawTmpDisks();
184
		}
176
		}
185
	}
177
	}
186
}
178
}
187
 
179
 
188
 
180
 
189
void OpenTmpDisk()
181
void OpenTmpDisk()
190
{
182
{
191
	unsigned char eol_param[256];
183
	unsigned char eol_param[256];
192
	if (!disk_num) return;
184
	if (!disk_num) return;
193
	strcpy(#eol_param, "/tmp#/1/");
185
	strcpy(#eol_param, "/tmp#/1/");
194
	eol_param[4]=disk_list[selected].Item[3];
186
	eol_param[4]=disk_list[selected].Item[3];
195
	RunProgram("/sys/File managers/Eolite", #eol_param);
187
	RunProgram("/sys/File managers/Eolite", #eol_param);
196
}
188
}
197
 
189
 
198
 
190
 
199
void GetDisks()
191
void GetDisks()
200
{
192
{
201
	unsigned int j, fcount=30;
193
	unsigned int j, fcount=30;
202
	unsigned char disk_name[256];
194
	unsigned char disk_name[256];
203
	
195
	
204
	mem_Free(devbuf);
196
	mem_Free(devbuf);
205
	devbuf= mem_Alloc(32);
197
	devbuf= mem_Alloc(32);
206
	ReadDir(0, devbuf, "/");
198
	ReadDir(0, devbuf, "/");
207
	fcount=ESDWORD[devbuf+8];
199
	fcount=ESDWORD[devbuf+8];
208
	mem_Free(devbuf);
200
	mem_Free(devbuf);
209
	devbuf = mem_Alloc(fcount+1*304+32);
201
	devbuf = mem_Alloc(fcount+1*304+32);
210
	ReadDir(fcount, devbuf, "/");
202
	ReadDir(fcount, devbuf, "/");
211
	
203
	
212
	disk_num=0;
204
	disk_num=0;
213
	for (j=0; j
205
	for (j=0; j
214
	{
206
	{
215
		strcpy(#disk_name, j*304+devbuf+72);
207
		strcpy(#disk_name, j*304+devbuf+72);
216
		if (disk_name[0]!='t') continue;
208
		if (disk_name[0]!='t') continue;
217
		strcpy(#disk_list[disk_num].Item, #disk_name);
209
		strcpy(#disk_list[disk_num].Item, #disk_name);
218
		disk_num++;
210
		disk_num++;
219
	}
211
	}
220
	if (disk_num>12) disk_num=12;
212
	if (disk_num>12) disk_num=12;
221
}
213
}
222
 
214
 
223
 
215
 
224
unsigned int disk_pos_x[]={13,13,13,83,83,83,153,153,153,223,223,223};
216
unsigned int disk_pos_x[]={13,13,13,83,83,83,153,153,153,223,223,223};
225
unsigned int disk_pos_y[]={60,85,110,60,85,110,60,85,110,60,85,110};
217
unsigned int disk_pos_y[]={60,85,110,60,85,110,60,85,110,60,85,110};
226
 
218
 
227
void DrawTmpDisks()
219
void DrawTmpDisks()
228
{
220
{
-
 
221
	char free_ram_text[60];
229
	int i,FreeRAM=GetFreeRAM()/1024;
222
	int i,FreeRAM=GetFreeRAM()/1024;
230
	DrawBar(0,51, Form.cwidth,Form.cheight-TOPPANELH-BOTPANELH-2, 0xFFFFFF);
223
	DrawBar(0,51, Form.cwidth,Form.cheight-TOPPANELH-BOTPANELH-2, 0xFFFFFF);
231
	DrawBar(0,Form.cheight-BOTPANELH-1, Form.cwidth,1, sc.work_graph);
224
	DrawBar(0,Form.cheight-BOTPANELH-1, Form.cwidth,1, sc.work_graph);
232
	DrawBar(0,Form.cheight-BOTPANELH, Form.cwidth,BOTPANELH, sc.work);
225
	DrawBar(0,Form.cheight-BOTPANELH, Form.cwidth,BOTPANELH, sc.work);
233
	WriteText(10, Form.cheight-13, 0x80, sc.work_text, "Free RAM size:");
226
	strcpy(#free_ram_text, FREE_RAM_TEXT);
234
	WriteText(100, Form.cheight-13, 0x80, sc.work_text, itoa(FreeRAM));
227
	strcat(#free_ram_text, itoa(FreeRAM));
-
 
228
	strcat(#free_ram_text, " MB");
235
	WriteText(strlen(itoa(FreeRAM))*6 + 100, Form.cheight-13, 0x80, sc.work_text, " MB");
229
	WriteText(10, Form.cheight-13, 0x80, sc.work_text, #free_ram_text);
236
	if (disk_num==0)
230
	if (disk_num==0)
237
	{
231
	{
238
		WriteText(17,65,    0x90, 0x777777, INTRO_TEXT_1);
232
		WriteText(17,65,    0x90, 0x777777, INTRO_TEXT_1);
239
		WriteText(17,65+15, 0x90, 0x777777, INTRO_TEXT_2);
233
		WriteText(17,65+15, 0x90, 0x777777, INTRO_TEXT_2);
240
		WriteText(17,65+42, 0x90, 0x777777, INTRO_TEXT_3);
234
		WriteText(17,65+42, 0x90, 0x777777, INTRO_TEXT_3);
241
		return;
235
		return;
242
	};
236
	};
243
	if (selected>=disk_num) selected=disk_num-1; //restore selected
237
	if (selected>=disk_num) selected=disk_num-1; //restore selected
244
	for (i=0; i<10; i++) DeleteButton(20+i);
238
	for (i=0; i<10; i++) DeleteButton(20+i);
245
	for (i=0; i
239
	for (i=0; i
246
	{
240
	{
247
		DefineButton(disk_pos_x[i], disk_pos_y[i], 60, 20, 20+i, 0xFFFfff);
241
		DefineButton(disk_pos_x[i], disk_pos_y[i], 60, 20, 20+i, 0xFFFfff);
248
		WriteText(disk_pos_x[i]+25,disk_pos_y[i]+6, 0x90, 0, #disk_list[i].Item);
242
		WriteText(disk_pos_x[i]+25,disk_pos_y[i]+6, 0x90, 0, #disk_list[i].Item);
249
		_PutImage(disk_pos_x[i]+5,disk_pos_y[i]+4, 14,14, 3*14*14*3+#icons);
243
		_PutImage(disk_pos_x[i]+5,disk_pos_y[i]+4, 14,14, 3*14*14*3+#icons);
250
		if (selected==i) DrawRectangle(disk_pos_x[i], disk_pos_y[i], 60-1, 20-1, 0x00459A);
244
		if (selected==i) DrawRectangle(disk_pos_x[i], disk_pos_y[i], 60-1, 20-1, 0x00459A);
251
	}
245
	}
252
}
246
}
253
 
247
 
254
void AddDisk()
248
void AddDisk()
255
{
249
{
256
	unsigned int i, j, err;
250
	unsigned int i, j, err;
257
	if (disk_num>=10)
251
	if (disk_num>=10)
258
	{
252
	{
259
		notify(NOTIFY_TEXT_DISK_LIMIT);
253
		notify(NOTIFY_TEXT_DISK_LIMIT);
260
		return;
254
		return;
261
	}
255
	}
262
	
256
	
263
	param[0]='a';
257
	param[0]='a';
264
	for (i=0; i<9; i++)
258
	for (i=0; i<9; i++)
265
	{
259
	{
266
		for (j=0; j<=disk_num; j++)
260
		for (j=0; j<=disk_num; j++)
267
		{
261
		{
268
			if (i+48==disk_list[j].Item[3]) continue 1;
262
			if (i+48==disk_list[j].Item[3]) continue 1;
269
		}
263
		}
270
		break;
264
		break;
271
	}
265
	}
272
	
266
	
273
	param[1]=i+48;
267
	param[1]=i+48;
274
	param[2]='s';
268
	param[2]='s';
275
	param[3]='\0';
269
	param[3]='\0';
276
	strcat(#param, #disk_size); 
270
	strcat(#param, #disk_size); 
277
	err = Console_Work();
271
	err = Console_Work();
278
	if ((err!=0) && (err<7)) notify(rezult_text[err]);
272
	if ((err!=0) && (err<7)) notify(rezult_text[err]);
279
	pause(5);
273
	pause(5);
280
	GetDisks();
274
	GetDisks();
281
	DrawTmpDisks();
275
	DrawTmpDisks();
282
}
276
}
283
>
277
>
284
>
278
>
285
>
279
>
286
>
280
>