From 324f214b01543afd8dd6e6038995c5abc0f81a80 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Fri, 27 Feb 2015 01:44:22 +0000 Subject: [PATCH] Tmpdisk v0.6: show disks sizes, use much less memory git-svn-id: svn://kolibrios.org@5482 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/cmm/tmpdisk/icons.raw | Bin 2352 -> 1764 bytes programs/cmm/tmpdisk/t_console.c | 5 +- programs/cmm/tmpdisk/{t_window.c => t_gui.c} | 182 ++++++++++--------- programs/cmm/tmpdisk/tmpdisk.c | 41 ++++- 4 files changed, 136 insertions(+), 92 deletions(-) rename programs/cmm/tmpdisk/{t_window.c => t_gui.c} (58%) diff --git a/programs/cmm/tmpdisk/icons.raw b/programs/cmm/tmpdisk/icons.raw index ad860e4c64aef1abd449ae0ce0ee10d97c05d65c..1d36a60a4d6c02871ff3274082c264c8d6e12cba 100644 GIT binary patch delta 16 YcmdlW^n`cA43^0oIqEkjv!7)I06fnIwg3PC delta 613 zcmaFDyFqBf43>KCh+5*2%&ym_r@u;XdjTYY$mGA`6}Yg@8zU z^Al5`9w1}uGydtf*rS@bn)b&%gc-W@HBj8_)Mt@JFQm6TmEHnUCNSeRb4ca?|NmJd zo8lkCR4#kV*LDD?owI6#(9GL1+h4$y6)o7tRWjf7?02w3>ubf9zh#YX0qO@zFb7xg z&bY%EQ~~7nZaNGU*W3M6dizU=pJaBv;%hs|91ODT*0a|P{^dZ%j`O#GA|g``N^N-t z3=*jCm%f(S_DpE<0lBmepc)_mst2-p+YU)>c?$F%TxC5lpdkJLs^-t02viCrfo!F1 zpzr_&9b73?CD7knp9!|EXN_(Kl9Frh%Wnq-9x$kZ@d9<|j+defpUG@_BD3Ww$Q>Pr zKt^o=83+k!xS2u$vmOYqea$fMk?7LbKm_!n*vgk6_LA4Ycma{SUPBBelAOGdrDAdd LGv{VW*3*mtx*#q> diff --git a/programs/cmm/tmpdisk/t_console.c b/programs/cmm/tmpdisk/t_console.c index 662973b920..05a8f03bde 100644 --- a/programs/cmm/tmpdisk/t_console.c +++ b/programs/cmm/tmpdisk/t_console.c @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////////////////// -///////////////////////// ъюэёюы№ //////////////////// +///////////////////////// Console //////////////////// ///////////////////////////////////////////////////////////////////////////////////////// #ifdef LANG_RUS @@ -38,7 +38,6 @@ char Console_Work() char size_t[256]; strlwr(#param); -// debug(#param); switch (param[0]) { @@ -58,6 +57,7 @@ char Console_Work() ioctl.inp_size = sizeof(del_disk); ioctl.output = 0; ioctl.out_size = 0; + disk_sizes[del_disk.DiskId] = 0; break; case 'a': //фюсртшЄ№ фшёъ debugln(ADD_DISK_TEXT); @@ -80,6 +80,7 @@ char Console_Work() ioctl.inp_size = sizeof(add_disk); ioctl.output = 0; ioctl.out_size = 0; + disk_sizes[add_disk.DiskId] = add_disk.DiskSize * 512; break; default: debugln("unknown command line parameters"); diff --git a/programs/cmm/tmpdisk/t_window.c b/programs/cmm/tmpdisk/t_gui.c similarity index 58% rename from programs/cmm/tmpdisk/t_window.c rename to programs/cmm/tmpdisk/t_gui.c index 648db38290..40fdab41c4 100644 --- a/programs/cmm/tmpdisk/t_window.c +++ b/programs/cmm/tmpdisk/t_gui.c @@ -1,6 +1,8 @@ +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////// GUI //////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + #include "..\lib\figures.h" -#include "..\lib\mem.h" -#include "..\lib\dll.h" #include "..\lib\lib.obj\box_lib.h" #ifdef LANG_RUS @@ -15,8 +17,8 @@ ?define INTRO_TEXT_3 "Попробуйте добавить один..." ?define INTRO_TEXT_4 "Размер:" - ?define NOTIFY_TEXT_NO_DISK "Для начала добавьте хотя бы один диск" - ?define NOTIFY_TEXT_DISK_LIMIT "Достигнут предел количества виртуальных дисков" + ?define NOTIFY_TEXT_NO_DISK "'Для начала добавьте хотя бы один диск' -W" + ?define NOTIFY_TEXT_DISK_LIMIT "'Достигнут предел количества виртуальных дисков' -W" ?define FREE_RAM_TEXT "Размер свободной оперативной памяти: " #else @@ -31,38 +33,36 @@ ?define INTRO_TEXT_3 " Try to add one..." ?define INTRO_TEXT_4 "Size:" - ?define NOTIFY_TEXT_NO_DISK "You need to have at least one disk" - ?define NOTIFY_TEXT_DISK_LIMIT "Reached the limit of the number of virtual disks" + ?define NOTIFY_TEXT_NO_DISK "'You need to have at least one disk' -W" + ?define NOTIFY_TEXT_DISK_LIMIT "'Reached the limit of the number of virtual disks' -W" ?define FREE_RAM_TEXT "Free RAM size: " #endif -struct path_string { unsigned char Item[256]; }; -path_string disk_list[40]; +struct path_string { unsigned char Item[10]; }; +path_string disk_list[10]; dword devbuf; -int disk_num; -int selected; +char disk_num; +char selected; system_colors sc; proc_info Form; -unsigned char dsize[30]; - -unsigned char icons[14*56] = FROM "icons.raw"; +unsigned char icons[] = FROM "icons.raw"; #define TOPPANELH 50 #define BOTPANELH 20 int mouse_dd; -char disk_size[30]; -edit_box edit_disk_size= {50,0,5,0xffffff,0x94AECE,0x000000,0xffffff,0,4,#disk_size,#mouse_dd, 1000000000000010b}; +char new_disk_size[5]; +edit_box edit_disk_size= {50,0,5,0xffffff,0x94AECE,0x000000,0xffffff,0,4,#new_disk_size,#mouse_dd, 1000000000000010b}; void Main_Window() { - unsigned int id, key, err; + word id, key, err; int i, x; mem_Init(); - if (load_dll2(boxlib, #box_lib_init,0)!=0) notify("Error while loading GUI library /sys/lib/boxlib.obj"); + if (load_dll2(boxlib, #box_lib_init,0)!=0) notify("Eror: library doesn't exists - boxlib"); GetSizeDisk(); edit_disk_size.left = strlen(INTRO_TEXT_4)*6 + 10; SetEventMask(0x27); @@ -76,25 +76,10 @@ void Main_Window() break; case evButton: - id=GetButtonID(); - if (id==1) ExitProcess(); + id=GetButtonID(); + if (id==1) return; if (id==10) AddDisk(); - if (id==11) //del - { - _DEL_DISK: - if (disk_num==0) - { - notify(NOTIFY_TEXT_NO_DISK); - break; - } - param[0]='d'; - param[1]=disk_list[selected].Item[3]; - err = Console_Work(); - if ((err!=0) && (err<7)) notify(rezult_text[err]); - pause(15); - GetDisks(); - DrawTmpDisks(); - } + if (id==11) DelDisk(); if (id>=20) { if (selected==id-20) OpenTmpDisk(); @@ -104,14 +89,9 @@ void Main_Window() break; case evKey: key = GetKey(); - if (key==9) - { - if ( !asm test edit_disk_size.flags, 2) edit_disk_size.flags=1000000000000010b; - else edit_disk_size.flags=1000000000000000b; - edit_box_draw stdcall (#edit_disk_size); - } - if ( asm test edit_disk_size.flags, 2) + if (TestBit(edit_disk_size.flags,2)) { + if (key==185) AddDisk(); if (key==13) { edit_disk_size.flags=1000000000000000b; @@ -121,39 +101,47 @@ void Main_Window() edit_box_key stdcall(#edit_disk_size); break; } - if (key==182) if (disk_num<>0) goto _DEL_DISK; - if (key==185) AddDisk(); - if (key==13) OpenTmpDisk(); - if (key==178) + switch(key) { - if (selected==0) break; - selected--; - DrawTmpDisks(); + case 9: + if ( !asm test edit_disk_size.flags, 2) edit_disk_size.flags=1000000000000010b; + else edit_disk_size.flags=1000000000000000b; + edit_box_draw stdcall (#edit_disk_size); + break; + case 185: + AddDisk(); + break; + case 182: + if (disk_num<>0) DelDisk(); + break; + case 13: + OpenTmpDisk(); + break; + case 178: + if (selected==0) break; + selected--; + DrawTmpDisks(); + break; + case 177: + if (selected+2>disk_num) break; + selected++; + DrawTmpDisks(); + break; + case 176: + if (selected<3) break; + selected-=3; + DrawTmpDisks(); + break; + case 179: + if (selected+4>disk_num) break; + selected+=3; + DrawTmpDisks(); + break; } - if (key==177) - { - if (selected+2>disk_num) break; - selected++; - DrawTmpDisks(); - } - if (key==176) - { - if (selected<3) break; - selected-=3; - DrawTmpDisks(); - } - if (key==179) - { - if (selected+4>disk_num) break; - selected+=3; - DrawTmpDisks(); - } - //EAX=key<<8; - //edit_box_key stdcall(#edit_disk_size); break; case evReDraw: sc.get(); - DefineAndDrawWindow(170,150,314,270,0x74,sc.work,"Virtual Disk Manager 0.5",0); + DefineAndDrawWindow(170,150,314,270,0x74,sc.work,"Virtual Disk Manager 0.6",0); GetProcessInfo(#Form, SelfInfo); if (Form.status_window>2) break; @@ -167,29 +155,31 @@ void Main_Window() DefineButton(x,25, strlen(but_text[i])*6+28,19, 10+i, sc.work_button); _PutImage(x+3,28, 14,14, i*14*14*3+#icons); WriteText(x+22,31, 0x80, sc.work_button_text, but_text[i]); - } + } GetDisks(); DrawTmpDisks(); } } } + void GetSizeDisk() { int fr; fr = GetFreeRAM() / 5; fr = itoa(fr / 2048); - strcpy(#disk_size, fr); - edit_disk_size.size = edit_disk_size.pos = strlen(#disk_size); + strcpy(#new_disk_size, fr); + edit_disk_size.size = edit_disk_size.pos = strlen(#new_disk_size); edit_box_draw stdcall (#edit_disk_size); } + void OpenTmpDisk() { - unsigned char eol_param[256]; + unsigned char eol_param[10]; if (!disk_num) return; strcpy(#eol_param, "/tmp#/1/"); - eol_param[4]=disk_list[selected].Item[3]; + eol_param[4] = disk_list[selected].Item[3]; RunProgram("/sys/File managers/Eolite", #eol_param); } @@ -197,7 +187,7 @@ void OpenTmpDisk() void GetDisks() { unsigned int j, fcount=30; - unsigned char disk_name[256]; + unsigned char disk_name[10]; mem_Free(devbuf); devbuf= mem_Alloc(32); @@ -219,13 +209,15 @@ void GetDisks() } -unsigned int disk_pos_x[]={13,13,13,83,83,83,153,153,153,223,223,223}; -unsigned int disk_pos_y[]={60,85,110,60,85,110,60,85,110,60,85,110}; +unsigned int disk_pos_x[]={13,13,13,85,85,85,157,157,157,229,229,229}; +unsigned int disk_pos_y[]={60,95,130, 60, 95, 130, 60, 95,130, 60, 85,130}; void DrawTmpDisks() { char free_ram_text[60]; - int i,FreeRAM=GetFreeRAM()/1024; + int i; + int FreeRAM=GetFreeRAM()/1024; + DrawBar(0,51, Form.cwidth,Form.cheight-TOPPANELH-BOTPANELH-2, 0xFFFFFF); DrawBar(0,Form.cheight-BOTPANELH-1, Form.cwidth,1, sc.work_graph); DrawBar(0,Form.cheight-BOTPANELH, Form.cwidth,BOTPANELH, sc.work); @@ -244,16 +236,18 @@ void DrawTmpDisks() for (i=0; i<10; i++) DeleteButton(20+i); for (i=0; i=10) { notify(NOTIFY_TEXT_DISK_LIMIT); @@ -273,7 +267,7 @@ void AddDisk() param[1]=i+48; param[2]='s'; param[3]='\0'; - strcat(#param, #disk_size); + strcat(#param, #new_disk_size); err = Console_Work(); if ((err!=0) && (err<7)) notify(rezult_text[err]); pause(5); @@ -283,6 +277,24 @@ void AddDisk() } +void DelDisk() +{ + byte err; + if (disk_num==0) + { + notify(NOTIFY_TEXT_NO_DISK); + return; + } + param[0]='d'; + param[1]=disk_list[selected].Item[3]; + err = byte Console_Work(); + if ((err!=0) && (err<7)) notify(rezult_text[err]); + pause(15); + GetDisks(); + DrawTmpDisks(); +} + + diff --git a/programs/cmm/tmpdisk/tmpdisk.c b/programs/cmm/tmpdisk/tmpdisk.c index b9a6cab068..7153fa2172 100644 --- a/programs/cmm/tmpdisk/tmpdisk.c +++ b/programs/cmm/tmpdisk/tmpdisk.c @@ -1,8 +1,13 @@ #define MEMSIZE 0xA0000 #include "..\lib\kolibri.h" -#include "..\lib\strings.h" +#include "..\lib\mem.h" +#include "..\lib\strings.h" #include "..\lib\file_system.h" +#include "..\lib\dll.h" +#include "..\lib\lib.obj\libio_lib.h" +#include "..\lib\lib.obj\libini.h" + #ifndef AUTOBUILD #include "lang.h--" #endif @@ -42,11 +47,13 @@ del_disk_struc del_disk; int driver_handle; +dword disk_sizes[10]; + ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// Code //////////////////// ///////////////////////////////////////////////////////////////////////////////////////// #include "t_console.c" -#include "t_window.c" +#include "t_gui.c" void main() @@ -54,19 +61,43 @@ void main() driver_handle = LoadDriver("tmpdisk"); if (driver_handle==0) { - notify("error: /rd1/1/drivers/tmpdisk.obj driver loading failed"); - notify("virtual disk wouldn't be added"); + notify("'TmpDisk\nError: /rd1/1/drivers/tmpdisk.obj driver loading failed\nvirtual disk wouldn't be added' -tE"); ExitProcess(); } + GetDiskSizesFromIni(); if (param) Console_Work(); else Main_Window(); - + SaveDiskSizesToIni(); ExitProcess(); } + +void GetDiskSizesFromIni() +{ + char i, key[2]; + if (load_dll2(libini, #lib_init,1)!=0) notify("Error: library doesn't exists - libini"); + for (i=0; i<=9; i++) + { + key[0]=i+'0'; + ini_get_int stdcall ("/sys/settings/tmpdisk.ini", "DiskSizes", #key, 0); + disk_sizes[i] = EAX; + } +} + +void SaveDiskSizesToIni() +{ + char i, key[2]; + for (i=0; i<=9; i++) + { + key[0]=i+'0'; + ini_set_int stdcall ("/sys/settings/tmpdisk.ini", "DiskSizes", #key, disk_sizes[i]); + } +} + + stop: