2015-06-14 12:54:15 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
Reorganize string buffers. Global buffers used to have descriptive names, but as the need to more temporary buffer appears we have to decide between creating new global buffers or reusing existing ones disregarding their names. Therefore, to avoid the creation of too many buffers or the use of confusing variable names, this change give more generic names to buffers, except for INPUT, which is only used for input. The wide buffer has been made into a global buffer. All global string buffers now have the same size, BUFLEN.
diff --git a/rover.c b/rover.c index 3f1fdbb..92cee60 100644 --- a/rover.c +++ b/rover.c @@ -23,12 +23,11 @@ #include "config.h" /* String buffers. */ -#define ROWSZ 256 -static char ROW[ROWSZ]; -#define STATUSSZ 256 -static char STATUS[STATUSSZ]; -#define INPUTSZ 256 -static char INPUT[INPUTSZ]; +#define BUFLEN 256 +static char BUF1[BUFLEN]; +static char BUF2[BUFLEN]; +static char INPUT[BUFLEN]; +static wchar_t WBUF[BUFLEN]; /* Argument buffers for execvp(). */ #define MAXARGS 256 @@ -66,7 +65,7 @@ typedef struct Marks { /* Line editing state. */ typedef struct Edit { - wchar_t buffer[INPUTSZ+1]; + wchar_t buffer[BUFLEN+1]; int left, right; } Edit; @@ -105,13 +104,13 @@ static struct Rover { /* Line Editing Macros. */ #define EDIT_FULL(E) ((E).left == (E).right) #define EDIT_CAN_LEFT(E) ((E).left) -#define EDIT_CAN_RIGHT(E) ((E).right < INPUTSZ-1) +#define EDIT_CAN_RIGHT(E) ((E).right < BUFLEN-1) #define EDIT_LEFT(E) (E).buffer[(E).right--] = (E).buffer[--(E).left] #define EDIT_RIGHT(E) (E).buffer[(E).left++] = (E).buffer[++(E).right] #define EDIT_INSERT(E, C) (E).buffer[(E).left++] = (C) #define EDIT_BACKSPACE(E) (E).left-- #define EDIT_DELETE(E) (E).right++ -#define EDIT_CLEAR(E) do { (E).left = 0; (E).right = INPUTSZ-1; } while(0) +#define EDIT_CLEAR(E) do { (E).left = 0; (E).right = BUFLEN-1; } while(0) typedef enum EditStat {CONTINUE, CONFIRM, CANCEL} EditStat; typedef enum Color {DEFAULT, RED, GREEN, YELLOW, BLUE, CYAN, MAGENTA, WHITE, BLACK} Color; @@ -343,7 +342,6 @@ update_view() int numsize; int ishidden, isdir; int marking; - wchar_t wbuf[PATH_MAX]; mvhline(0, 0, ' ', COLS); attr_on(A_BOLD, NULL); @@ -351,14 +349,14 @@ update_view() mvaddch(0, COLS - 2, rover.tab + '0'); attr_off(A_BOLD, NULL); if (rover.marks.nentries) { - numsize = snprintf(STATUS, STATUSSZ, "%d", rover.marks.nentries); + numsize = snprintf(BUF1, BUFLEN, "%d", rover.marks.nentries); color_set(RVC_MARKS, NULL); - mvaddstr(0, COLS - 3 - numsize, STATUS); + mvaddstr(0, COLS - 3 - numsize, BUF1); } else numsize = -1; color_set(RVC_CWD, NULL); - mbstowcs(wbuf, CWD, PATH_MAX); - mvaddnwstr(0, 0, wbuf, COLS - 4 - numsize); + mbstowcs(WBUF, CWD, PATH_MAX); + mvaddnwstr(0, 0, WBUF, COLS - 4 - numsize); wcolor_set(rover.window, RVC_BORDER, NULL); wborder(rover.window, 0, 0, 0, 0, 0, 0, 0, 0); /* Selection might not be visible, due to cursor wrapping or window @@ -385,17 +383,17 @@ update_view() for (suffix = suffixes; human_size >= 10240; suffix++) human_size = (human_size + 512) / 1024; if (*suffix == 'B') - swprintf(wbuf, PATH_MAX, L"%s%*d %c", ENAME(j), + swprintf(WBUF, PATH_MAX, L"%s%*d %c", ENAME(j), (int) (COLS - length - 6), (int) human_size / 10, *suffix); else - swprintf(wbuf, PATH_MAX, L"%s%*d.%d %c", ENAME(j), + swprintf(WBUF, PATH_MAX, L"%s%*d.%d %c", ENAME(j), (int) (COLS - length - 8), (int) human_size / 10, (int) human_size % 10, *suffix); } else - mbstowcs(wbuf, ENAME(j), PATH_MAX); + mbstowcs(WBUF, ENAME(j), PATH_MAX); mvwhline(rover.window, i + 1, 1, ' ', COLS - 2); - mvwaddnwstr(rover.window, i + 1, 2, wbuf, COLS - 4); + mvwaddnwstr(rover.window, i + 1, 2, WBUF, COLS - 4); if (marking && MARKED(j)) { wcolor_set(rover.window, RVC_MARKS, NULL); mvwaddch(rover.window, i + 1, 1, RVS_MARK); @@ -414,16 +412,16 @@ update_view() wcolor_set(rover.window, RVC_SCROLLBAR, NULL); mvwvline(rover.window, center-height/2+1, COLS-1, RVS_SCROLLBAR, height); } - STATUS[0] = FLAGS & SHOW_FILES ? 'F' : ' '; - STATUS[1] = FLAGS & SHOW_DIRS ? 'D' : ' '; - STATUS[2] = FLAGS & SHOW_HIDDEN ? 'H' : ' '; + BUF1[0] = FLAGS & SHOW_FILES ? 'F' : ' '; + BUF1[1] = FLAGS & SHOW_DIRS ? 'D' : ' '; + BUF1[2] = FLAGS & SHOW_HIDDEN ? 'H' : ' '; if (!rover.nfiles) - strcpy(ROW, "0/0"); + strcpy(BUF2, "0/0"); else - snprintf(ROW, ROWSZ, "%d/%d", ESEL + 1, rover.nfiles); - snprintf(STATUS+3, STATUSSZ-3, "%12s", ROW); + snprintf(BUF2, BUFLEN, "%d/%d", ESEL + 1, rover.nfiles); + snprintf(BUF1+3, BUFLEN-3, "%12s", BUF2); color_set(RVC_STATUS, NULL); - mvaddstr(LINES - 1, STATUSPOS, STATUS); + mvaddstr(LINES - 1, STATUSPOS, BUF1); wrefresh(rover.window); } @@ -714,10 +712,10 @@ static void start_line_edit(const char *init_input) { curs_set(TRUE); - strncpy(INPUT, init_input, INPUTSZ); - rover.edit.left = mbstowcs(rover.edit.buffer, init_input, INPUTSZ); - rover.edit.right = INPUTSZ - 1; - rover.edit.buffer[INPUTSZ] = L'\0'; + strncpy(INPUT, init_input, BUFLEN); + rover.edit.left = mbstowcs(rover.edit.buffer, init_input, BUFLEN); + rover.edit.right = BUFLEN - 1; + rover.edit.buffer[BUFLEN] = L'\0'; rover.edit_scroll = 0; } @@ -766,9 +764,9 @@ get_line_edit() } /* Encode edit contents in INPUT. */ rover.edit.buffer[rover.edit.left] = L'\0'; - length = wcstombs(INPUT, rover.edit.buffer, INPUTSZ); + length = wcstombs(INPUT, rover.edit.buffer, BUFLEN); wcstombs(&INPUT[length], &rover.edit.buffer[rover.edit.right+1], - INPUTSZ-length); + BUFLEN-length); return CONTINUE; } @@ -777,7 +775,6 @@ static void update_input(char *prompt, Color color) { int plen, ilen, maxlen; - wchar_t wbuf[COLS]; plen = strlen(prompt); ilen = mbstowcs(NULL, INPUT, 0); @@ -791,8 +788,8 @@ update_input(char *prompt, Color color) color_set(RVC_PROMPT, NULL); mvaddstr(LINES - 1, 0, prompt); color_set(color, NULL); - mbstowcs(wbuf, INPUT, COLS); - mvaddnwstr(LINES - 1, plen, &wbuf[rover.edit_scroll], maxlen); + mbstowcs(WBUF, INPUT, COLS); + mvaddnwstr(LINES - 1, plen, &WBUF[rover.edit_scroll], maxlen); mvaddch(LINES - 1, plen + MIN(ilen - rover.edit_scroll, maxlen + 1), ' '); color_set(DEFAULT, NULL); if (rover.edit_scroll)