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