diff --git a/programs/cmm/sysmon/drives.h b/programs/cmm/sysmon/drives.h new file mode 100644 index 0000000000..6418cf94e0 --- /dev/null +++ b/programs/cmm/sysmon/drives.h @@ -0,0 +1,72 @@ + +void Drives__Main() +{ + SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON); + goto _GENERAL_REDRAW_1; + loop() + { + WaitEventTimeout(500); + switch(EAX & 0xFF) + { + case evButton: Sysmon__ButtonEvent(); break; + case evKey: Sysmon__KeyEvent(); break; + case evReDraw: + _GENERAL_REDRAW_1: + Sysmon__DefineAndDrawWindow(); + WriteText(WIN_PAD, WIN_CONTENT_Y+25, 0x90, sc.work, "Update period: 5 seconds"); + default: + MonitorRd(); + MonitorTmp(); + } + } +} + +void MonitorRd() +{ + sensor rd; + dword rdempty = malloc(1440*1024); + rd.set_size(WIN_PAD, WIN_CONTENT_Y+25, WIN_CONTENT_W, 23); + CreateFile(0, 1440*1024, rdempty, "/rd/1/rdempty"); + free(rdempty); + file_size stdcall ("/rd/1/rdempty"); + rdempty = EBX / 1024; + DeleteFile("/rd/1/rdempty"); + + sprintf(#param, "System disk usage: %i Kb free of 1440 Mb", rdempty); + DrawIconWithText(WIN_PAD, rd.y - 25, 5, #param); + + rd.draw_progress(rdempty * rd.w / 1440); +} + +dword GetTmpDiskFreeSpace(int _id) +{ + DIR_SIZE dir_size; + sprintf(#param, "/tmp%i/1", _id); + dir_size.get(#param); + dir_size.bytes += dir_size.files/2 + 32 * 512; //file attr size + FAT table size + dir_size.bytes /= 1024*1024; //convert to MiB + return dir_size.bytes; +} + +void MonitorTmp() +{ + char text_status[64]; + int i, yy=WIN_CONTENT_Y+95; + dword tmp_size[10]; + dword free_space; + sensor tmp; + for (i=0; i<=9; i++) + { + file_size stdcall ( sprintf(#param, "/tmp%i/1", i) ); + tmp_size[i] = EBX / 1024 / 1024; + + if (EBX) { + free_space = tmp_size[i] - GetTmpDiskFreeSpace(i); + sprintf(#text_status, "TMP%i usage: %i Mb free of %i Mb", i, free_space, tmp_size[i]); + tmp.set_size(WIN_PAD, yy, WIN_CONTENT_W, 23); + tmp.draw_progress(free_space * WIN_CONTENT_W / tmp_size[i]); + DrawIconWithText(WIN_PAD, tmp.y - 25, 50, #text_status); + yy += 65; + } + } +} \ No newline at end of file