diff options
author | Joursoir <chat@joursoir.net> | 2021-12-14 13:37:44 +0300 |
---|---|---|
committer | Joursoir <chat@joursoir.net> | 2021-12-14 13:38:40 +0300 |
commit | 5bd1cfdd299b7cbc1709363d58598be66b90abb2 (patch) | |
tree | 0d3125d2004dc9b1ecdcbad58547fe7ab6f8092e /Library/UefiShellUfmCommandLib | |
parent | ec796ed26a5860fc501bc00d82b3045553585ee4 (diff) | |
download | ufm-5bd1cfdd299b7cbc1709363d58598be66b90abb2.tar.gz ufm-5bd1cfdd299b7cbc1709363d58598be66b90abb2.tar.bz2 ufm-5bd1cfdd299b7cbc1709363d58598be66b90abb2.zip |
actions: make frontend renaming and moving file
Diffstat (limited to 'Library/UefiShellUfmCommandLib')
-rw-r--r-- | Library/UefiShellUfmCommandLib/UefiShellUfmCommandLib.c | 2 | ||||
-rw-r--r-- | Library/UefiShellUfmCommandLib/actions.c | 47 | ||||
-rw-r--r-- | Library/UefiShellUfmCommandLib/actions.h | 1 |
3 files changed, 49 insertions, 1 deletions
diff --git a/Library/UefiShellUfmCommandLib/UefiShellUfmCommandLib.c b/Library/UefiShellUfmCommandLib/UefiShellUfmCommandLib.c index 09298d8..1920b13 100644 --- a/Library/UefiShellUfmCommandLib/UefiShellUfmCommandLib.c +++ b/Library/UefiShellUfmCommandLib/UefiShellUfmCommandLib.c @@ -24,7 +24,7 @@ STATIC CONST struct shortcut shortcuts[] = { {ACTION_CMD, {SCAN_F2, 0x0}, edit, L"2", L"Edit"}, {ACTION_CMD, {SCAN_F3, 0x0}, hexedit, L"3", L"Hex"}, {ACTION_CMD, {SCAN_F4, 0x0}, do_nothing, L"4", L"Copy"}, - {ACTION_CMD, {SCAN_F5, 0x0}, do_nothing, L"5", L"RenMov"}, + {ACTION_CMD, {SCAN_F5, 0x0}, mv, L"5", L"RenMov"}, {ACTION_CMD, {SCAN_F6, 0x0}, mkdir, L"6", L"Mkdir"}, {ACTION_CMD, {SCAN_F7, 0x0}, rm, L"7", L"Rm"}, {ACTION_CMD, {SCAN_F8, 0x0}, do_nothing, L"8", L""}, diff --git a/Library/UefiShellUfmCommandLib/actions.c b/Library/UefiShellUfmCommandLib/actions.c index aca0e7b..596e7c4 100644 --- a/Library/UefiShellUfmCommandLib/actions.c +++ b/Library/UefiShellUfmCommandLib/actions.c @@ -24,6 +24,8 @@ #define UPANEL ((PANEL == LEFT_PANEL) ? RIGHT_PANEL : LEFT_PANEL) #define FILECOUNT_LENGTH 20 +STATIC CONST CHAR16 mv_title[] = L" Move "; +STATIC CONST CHAR16 mv_label[] = L"Move %u files/directories to:"; STATIC CONST CHAR16 rm_title[] = L" Delete "; STATIC CONST CHAR16 rm_label[] = L"Delete %u files/directories?"; STATIC CONST CHAR16 mkdir_title[] = L" Create a new directory "; @@ -128,6 +130,51 @@ BOOLEAN hexedit(VOID) return TRUE; } +BOOLEAN mv(VOID) +{ + struct dbox_ctx *dbox; + UINTN i, size, line = PANEL->curline; + CHAR16 *label; + EFI_SHELL_FILE_INFO *file; + EFI_STATUS status; + BOOLEAN status_op; + + if(!PANEL->cwd) + return FALSE; + + if(PANEL->marked < 1) + return FALSE; + + size = (StrLen(mv_label) + FILECOUNT_LENGTH + 1) * sizeof(CHAR16); + label = AllocatePool(size); + if(!label) + return FALSE; + + UnicodeSPrint(label, size, mv_label, PANEL->marked); + dbox = dbox_alloc(fm_ctx.scr, mv_title, label, TRUE, UPANEL->cwd); + + dbox_refresh(dbox); + status_op = dbox_handle(dbox); + if(status_op) { + for(i = 1; i <= PANEL->dirs->len; i++) { + if(PANEL->dirs->marked[i-1] == FALSE) + continue; + + file = dirl_getn(PANEL->dirs, i); + status = copy_file(file->FullName, UPANEL->cwd); // NOT UPANEL->cwd!!! + if(!EFI_ERROR(status)) + delete_file(file); + } + panel_cd_to(PANEL, PANEL->cwd); + panel_move_cursor(PANEL, (line > PANEL->dirs->len) ? PANEL->dirs->len : line); + } + + redraw(); + FreePool(label); + dbox_release(dbox); + return TRUE; +} + BOOLEAN mkdir(VOID) { struct dbox_ctx *dbox; diff --git a/Library/UefiShellUfmCommandLib/actions.h b/Library/UefiShellUfmCommandLib/actions.h index 0bb301e..1080678 100644 --- a/Library/UefiShellUfmCommandLib/actions.h +++ b/Library/UefiShellUfmCommandLib/actions.h @@ -24,6 +24,7 @@ BOOLEAN execute(VOID); BOOLEAN mark(VOID); BOOLEAN edit(VOID); BOOLEAN hexedit(VOID); +BOOLEAN mv(VOID); BOOLEAN mkdir(VOID); BOOLEAN rm(VOID); BOOLEAN show_filesystems(VOID); |