From 5012225aed844c9ce2f4e03fa05c5b1f84fce442 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Thu, 15 Nov 2012 21:43:25 +0000 Subject: [PATCH] add tmpdisk 0.35 to fs folder git-svn-id: svn://kolibrios.org@3042 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/fs/tmpdisk/compile.bat | 9 ++ programs/fs/tmpdisk/icons.raw | 1 + programs/fs/tmpdisk/t_console.c | 87 ++++++++++++ programs/fs/tmpdisk/t_window.c | 244 ++++++++++++++++++++++++++++++++ programs/fs/tmpdisk/tmpdisk.c | 71 ++++++++++ 5 files changed, 412 insertions(+) create mode 100644 programs/fs/tmpdisk/compile.bat create mode 100644 programs/fs/tmpdisk/icons.raw create mode 100644 programs/fs/tmpdisk/t_console.c create mode 100644 programs/fs/tmpdisk/t_window.c create mode 100644 programs/fs/tmpdisk/tmpdisk.c diff --git a/programs/fs/tmpdisk/compile.bat b/programs/fs/tmpdisk/compile.bat new file mode 100644 index 0000000000..4a139a8c8f --- /dev/null +++ b/programs/fs/tmpdisk/compile.bat @@ -0,0 +1,9 @@ +del lang.h +echo #define LANG_RUS 1 >lang.h + +..\C--\C-- tmpdisk.c +del tmpdisk +rename tmpdisk.com tmpdisk +rem ..\C--\kpack tmpdisk +pause +del warning.txt diff --git a/programs/fs/tmpdisk/icons.raw b/programs/fs/tmpdisk/icons.raw new file mode 100644 index 0000000000..10616f7009 --- /dev/null +++ b/programs/fs/tmpdisk/icons.raw @@ -0,0 +1 @@ +;C;CCC)WC)W)W)W)W9;C;CC)W)W;9;;;)WC)W9;C9;;;C9C9;;C9C9;;;C;;C9;;;C;C;;9;;;9;C49299;999;9;)))))))))))))))@ K@ KKKg7Kg7g7g7g7))> @ K@ @ @ K@ KKg7g7))@ > @ @ @ K@ @ Kg7Kg7))> @ K> @ @ @ K@ @ @ K))> 2222222222K))> 22@ ))@ 22K))> 2222222222K))> @ @ @ > @ @ > K@ @ K))> @ @ @ @ @ @ @ K@ K@ ))@ > @ @ @ > @ @ @ > @ K))9> 8> > @ > > > @ > @ ))))))))))))))) ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]////O/OOOO ] ]/pp//OO ] ]cc/O/O ] ]/{cc{/ ] ]// ] ]pp/ ] ]cc/ ] ]ccO/ ] ]cc// ] ]cc// ] ]cccc/ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]lggWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPlggWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPPWPP \ No newline at end of file diff --git a/programs/fs/tmpdisk/t_console.c b/programs/fs/tmpdisk/t_console.c new file mode 100644 index 0000000000..5c0e839e9b --- /dev/null +++ b/programs/fs/tmpdisk/t_console.c @@ -0,0 +1,87 @@ +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////// //////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + +/*#ifdef LANG_RUS + char *rezult_text[]={ + " "w, + " IOCTL, ..."w, + " 0 9"w, + " "w, + " "w, + " "w, + " O_o"w, + 0}; +#else*/ + char *rezult_text[]={ + "operation compleated successfully", + "unknown IOCTL code, wrong input/output size...", + "DiskId must be from 0 to 9", + "DiskSize is too large", + "DiskSize is too small", + "memory allocation failed", + "unknown error O_o", + 0}; +//#endif + +void Console_Work() +{ + unsigned int disk_size, driver_rezult; + char size_t[256]; + + strlwr(#param); + + switch (param[0]) + { + case '?': // + case 'h': + debug("tmpdisk command line parameters:"); + debug("a[number]s[size in MB] - add RAM disk"); + debug("d[number] - delete RAM disk"); + ExitProcess(); + break; + case 'd': // + debug("trying to delete disk"); + del_disk.DiskId = param[1]-'0'; + ioctl.handle = driver_handle; + ioctl.io_code = DEV_DEL_DISK; + ioctl.input = #del_disk; + ioctl.inp_size = sizeof(del_disk); + ioctl.output = 0; + ioctl.out_size = 0; + break; + case 'a': // + debug("trying to add disk"); + disk_size= strchr(#param, 's'); + if (!disk_size) + { + add_disk.DiskSize = GetFreeRAM() / 5; + debug("disk size is not specified"); + strcpy(#size_t, "10% from free RAM will be used, new DiskSize: "); + driver_rezult=itoa(add_disk.DiskSize/2048); + strcat(#size_t, driver_rezult); + //strcat(#size_t, itoa(add_disk.DiskSize/2048)); + strcat(#size_t, " MB"); + debug(#size_t); + } + else + add_disk.DiskSize = atoi(#param+disk_size)*2048; + + add_disk.DiskId = param[1]-'0'; + ioctl.handle = driver_handle; + ioctl.io_code = DEV_ADD_DISK; + ioctl.input = #add_disk; + ioctl.inp_size = sizeof(add_disk); + ioctl.output = 0; + ioctl.out_size = 0; + break; + default: + debug("unknown command line parameters"); + debug("use 'h' or '?' for help"); + ExitProcess(); + } + + driver_rezult = RuleDriver(#ioctl); + if (driver_rezult<7) debug(rezult_text[driver_rezult]); +} + diff --git a/programs/fs/tmpdisk/t_window.c b/programs/fs/tmpdisk/t_window.c new file mode 100644 index 0000000000..365e508056 --- /dev/null +++ b/programs/fs/tmpdisk/t_window.c @@ -0,0 +1,244 @@ +#include "..\lib\mem.h" +#include "..\lib\dll.h" +#include "..\lib\edit_box_lib.h" + + +#ifdef LANG_RUS + char *but_text[]={ + " "w, + " "w, + ""w, + 0}; +#else + char *but_text[]={ + "Add disk", + "Delete disk", + "Help", + 0}; +#endif + +dword icons[14*56] = FROM "icons.raw"; + +struct path_string { +unsigned char Item[256]; +}; + +path_string disk_list[40]; +dword devbuf; +int disk_num; +int selected; + +system_colors sc; +proc_info Form; + +int mouse_dd; +unsigned char dsize[30]; +edit_box edit1= {200,20,16,0xffffff,0x94AECE,0x94AECE,0x94AECE,0,248,#dsize,#mouse_dd,100000000000010b}; + + + +void Main_Window() +{ + unsigned int id; + unsigned char key; + unsigned int i, j, bbreak; + + mem_Init(); + if (load_dll2(boxlib, #edit_box_draw,0)!=0) + { + notify("error: library doesn't exists /rd/1/lib/box_lib.obj"); + ExitProcess(); + } + SetEventMask(0x27); + loop() + { + switch(WaitEvent()) + { + case evMouse: + //edit_box_mouse stdcall (#edit1); + break; + case evButton: + id=GetButtonID(); + if (id==1) ExitProcess(); + if (id==10) //add + { + _ADD_DISK: + if (disk_num>=10) + { + notify(" "w); + break; + } + param[0]='a'; + // + for (i=0; i<9; i++) + { + bbreak = true; + for (j=0; j<=disk_num; j++) + { + if (i+48==disk_list[j].Item[3]) bbreak=false; + } + if (bbreak) break; + } + param[1]=i+48; + Console_Work(); + Pause(5); + GetDisks(); + DrawTmpDisks(); + } + if (id==11) //del + { + _DEL_DISK: + if (disk_num==0) + { + notify(" "w); + break; + } + param[0]='d'; + param[1]=disk_list[selected].Item[3]; + Console_Work(); + Pause(15); + GetDisks(); + DrawTmpDisks(); + } + if (id==12) //help + { + notify(" "w); + } + if (id>=20) + { + if (selected==id-20) OpenTmpDisk(); + selected=id-20; + DrawTmpDisks(); + } + break; + case evKey: + key = GetKey(); + if (key==182) if (disk_num<>0) goto _DEL_DISK; + if (key==14) goto _ADD_DISK; + if (key==178) + { + if (selected==0) break; + selected--; + DrawTmpDisks(); + } + 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(); + } + if (key==013) + { + OpenTmpDisk(); + } + break; + case evReDraw: + Draw_Window(); + } + } +} + + +void OpenTmpDisk() +{ + unsigned char eol_param[256]; + if (!disk_num) return; + strcpy(#eol_param, "/tmp#/1/"); + eol_param[4]=disk_list[selected].Item[3]; + RunProgram("/sys/File managers/Eolite", #eol_param); +} + + +void GetDisks() +{ + unsigned int j, fcount=30; + unsigned char disk_name[256]; + + mem_Free(devbuf); + devbuf= mem_Alloc(32); + ReadDir(0, devbuf, "/"); + fcount=ESDWORD[devbuf+8]; + mem_Free(devbuf); + devbuf = mem_Alloc(fcount+1*304+32); + ReadDir(fcount, devbuf, "/"); + + disk_num=0; + for (j=0; j12) disk_num=12; +} + + +unsigned int disk_pos_x[]={13,13,13,83,83,83,153,153,153,223,223,223}; +unsigned int disk_pos_y[]={40,65,90,40,65,90,40,65,90,40,65,90}; +void DrawTmpDisks() +{ + int i; + DrawBar(0,31, Form.width-9,Form.height-GetSkinHeight()-5-30, 0xFFFFFF); + if (disk_num==0) + { + WriteText(17,45, 0x90, 0x777777, " "w, 0); + WriteText(17,45+15, 0x90, 0x777777, " ."w, 0); + WriteText(17,45+42, 0x90, 0x777777, " ..."w, 0); + return; + }; + if (selected>=disk_num) selected=disk_num-1; // - + for (i=0; i2) return; // , + + // + DrawBar(0,0, Form.width-9,30, sc.work); + DrawBar(0,30, Form.width-9,1, sc.work_graph); + x=6; + for (i=0; i<3; i++) + { + DefineButton(x,5, strlen(but_text[i])*6+28,19, 10+i, sc.work_button); + _PutImage(x+3,8, 14,14, i*14*14*3+#icons); + WriteText(x+22,11, 0x80, sc.work_button_text, but_text[i], 0); + x+=strlen(but_text[i])*6+37; + } + + // + GetDisks(); + // + DrawTmpDisks(); + // +} + + + + + + diff --git a/programs/fs/tmpdisk/tmpdisk.c b/programs/fs/tmpdisk/tmpdisk.c new file mode 100644 index 0000000000..14120ec10f --- /dev/null +++ b/programs/fs/tmpdisk/tmpdisk.c @@ -0,0 +1,71 @@ +#include "..\lib\kolibri.h" +#include "..\lib\strings.h" +#include "..\lib\file_system.h" + +#include "lang.h" + +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////// //////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + +struct ioctl_struct +{ + dword handle; + dword io_code; + dword input; + dword inp_size; + dword output; + dword out_size; +}; + +#define DEV_ADD_DISK 1 //input = structure add_disk_struc +#define DEV_DEL_DISK 2 //input = structure del_disk_struc + +struct add_disk_struc +{ + dword DiskSize; // in sectors, 1 sector = 512 bytes. Include FAT service data + unsigned char DiskId; // from 0 to 9 +}; + +struct del_disk_struc +{ + unsigned char DiskId; //from 0 to 9 +}; + + +ioctl_struct ioctl; +add_disk_struc add_disk; +del_disk_struc del_disk; + +int driver_handle; + +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////// //////////////////// +///////////////////////////////////////////////////////////////////////////////////////// +#include "t_console.c" +#include "t_window.c" + + +void main() +{ + debug("========= tmpdisk 0.35 ========="); + driver_handle = LoadDriver("tmpdisk"); + if (driver_handle==0) + { + notify("error: /rd1/1/lib/tmpdisk.obj driver loading failed"); + notify("program terminated"); + ExitProcess(); + } + else + debug("tmpdisk.obj driver loaded successfully"); + + if (param) + Console_Work(); + else + Main_Window(); + + + ExitProcess(); +} + +stop: