Ticket #2229: mc-null_viewer2.patch

File mc-null_viewer2.patch, 9.4 KB (added by andrew_b, 12 years ago)

Summarized patch with code indentation

  • src/viewer/dialogs.c

    diff --git a/src/viewer/dialogs.c b/src/viewer/dialogs.c
    index 1fab867..a6b3fc8 100644
    a b mcview_dialog_goto (mcview_t * view, off_t * offset) 
    280280            default: 
    281281                break; 
    282282            } 
    283             *offset = mcview_bol (view, *offset); 
     283            *offset = mcview_bol (view, *offset, 0); 
    284284        } 
    285285    } 
    286286 
  • src/viewer/internal.h

    diff --git a/src/viewer/internal.h b/src/viewer/internal.h
    index 7c4ab19..fa08628 100644
    a b void mcview_done (mcview_t * view); 
    289289void mcview_select_encoding (mcview_t * view); 
    290290void mcview_set_codeset (mcview_t * view); 
    291291void mcview_show_error (mcview_t * view, const char *error); 
    292 off_t mcview_bol (mcview_t * view, off_t current); 
    293 off_t mcview_eol (mcview_t * view, off_t current); 
     292off_t mcview_bol (mcview_t * view, off_t current, off_t limit); 
     293off_t mcview_eol (mcview_t * view, off_t current, off_t limit); 
    294294char *mcview_get_title (const Dlg_head * h, size_t len); 
    295295gboolean mcview_lock_file (mcview_t * view); 
    296296gboolean mcview_unlock_file (mcview_t * view); 
  • src/viewer/lib.c

    diff --git a/src/viewer/lib.c b/src/viewer/lib.c
    index f7bb51f..c29d985 100644
    a b void 
    9797mcview_toggle_wrap_mode (mcview_t * view) 
    9898{ 
    9999    if (view->text_wrap_mode) 
    100         view->dpy_start = mcview_bol (view, view->dpy_start); 
     100        view->dpy_start = mcview_bol (view, view->dpy_start, 0); 
    101101    view->text_wrap_mode = !view->text_wrap_mode; 
    102102    view->dpy_bbar_dirty = TRUE; 
    103103    view->dirty++; 
    mcview_show_error (mcview_t * view, const char *msg) 
    343343/* returns index of the first char in the line */ 
    344344/* it is constant for all line characters */ 
    345345off_t 
    346 mcview_bol (mcview_t * view, off_t current) 
     346mcview_bol (mcview_t * view, off_t current, off_t limit) 
    347347{ 
    348348    int c; 
    349349    off_t filesize; 
    mcview_bol (mcview_t * view, off_t current) 
    361361        if (c == '\r') 
    362362            current--; 
    363363    } 
    364     while (current > 0) 
     364    while (current > 0 && current >= limit) 
    365365    { 
    366366        if (!mcview_get_byte (view, current - 1, &c)) 
    367367            break; 
    mcview_bol (mcview_t * view, off_t current) 
    377377/* returns index of last char on line + width EOL */ 
    378378/* mcview_eol of the current line == mcview_bol next line */ 
    379379off_t 
    380 mcview_eol (mcview_t * view, off_t current) 
     380mcview_eol (mcview_t * view, off_t current, off_t limit) 
    381381{ 
    382382    int c, prev_ch = 0; 
    383383    off_t filesize; 
    mcview_eol (mcview_t * view, off_t current) 
    386386        return 0; 
    387387    if (current >= filesize) 
    388388        return filesize; 
    389     while (current < filesize) 
     389    while (current < filesize && current < limit) 
    390390    { 
    391391        if (!mcview_get_byte (view, current, &c)) 
    392392            break; 
  • src/viewer/mcviewer.c

    diff --git a/src/viewer/mcviewer.c b/src/viewer/mcviewer.c
    index 7c864f4..69c839d 100644
    a b mcview_load (mcview_t * view, const char *command, const char *file, int start_l 
    405405        canon_fname = vfs_canon (view->filename); 
    406406        load_file_position (canon_fname, &line, &col, &new_offset, &view->saved_bookmarks); 
    407407        new_offset = min (new_offset, mcview_get_filesize (view)); 
    408         view->dpy_start = mcview_bol (view, new_offset); 
     408        view->dpy_start = mcview_bol (view, new_offset, 0); 
    409409        g_free (canon_fname); 
    410410    } 
    411411    else if (start_line > 0) 
  • src/viewer/move.c

    diff --git a/src/viewer/move.c b/src/viewer/move.c
    index 873ed9a..0f0be77 100644
    a b void 
    8989mcview_move_up (mcview_t * view, off_t lines) 
    9090{ 
    9191    off_t new_offset; 
     92 
    9293    if (view->hex_mode) 
    9394    { 
    9495        off_t bytes = lines * view->bytes_per_line; 
    mcview_move_up (mcview_t * view, off_t lines) 
    106107    else 
    107108    { 
    108109        off_t i; 
     110 
    109111        for (i = 0; i < lines; i++) 
    110112        { 
    111             off_t cur_bol; 
    112             cur_bol = new_offset = mcview_bol (view, view->dpy_start); 
    113             if (new_offset > 0) 
    114                 new_offset--; 
    115             new_offset = mcview_bol (view, new_offset); 
    116             if (new_offset < 0) 
    117                 new_offset = 0; 
     113            if (view->dpy_start == 0) 
     114                break; 
    118115            if (view->text_wrap_mode) 
    119116            { 
    120                 size_t last_row_length = (view->dpy_start - new_offset) % view->data_area.width; 
    121                 if (last_row_length != 0 && cur_bol == view->dpy_start) 
    122                     new_offset = max (new_offset, (off_t) (view->dpy_start - last_row_length)); 
     117                new_offset = mcview_bol (view, view->dpy_start, view->dpy_start - (off_t) 1); 
     118                /* check if dpy_start == BOL or not (then new_offset = dpy_start - 1, 
     119                 * no need to check more) */ 
     120                if (new_offset == view->dpy_start) 
     121                { 
     122                    size_t last_row_length; 
     123 
     124                    new_offset = mcview_bol (view, new_offset - 1, 0); 
     125                    last_row_length = (view->dpy_start - new_offset) % view->data_area.width; 
     126                    if (last_row_length != 0) 
     127                    { 
     128                        /* if dpy_start == BOL in wrapped mode, find BOL of previous line 
     129                         * and move down all but the last rows */ 
     130                        new_offset = view->dpy_start - (off_t) last_row_length; 
     131                    } 
     132                } 
    123133                else 
    124                     new_offset = max (new_offset, view->dpy_start - (off_t) view->data_area.width); 
     134                { 
     135                    /* if dpy_start != BOL in wrapped mode, just move one row up; 
     136                     * no need to check if > 0 as there is at least exactly one wrap 
     137                     * between dpy_start and BOL */ 
     138                    new_offset = view->dpy_start - (off_t) view->data_area.width; 
     139                } 
     140                view->dpy_start = new_offset; 
     141            } 
     142            else 
     143            { 
     144                /* if unwrapped -> current BOL equals dpy_start, just find BOL of previous line */ 
     145                new_offset = view->dpy_start - 1; 
     146                view->dpy_start = mcview_bol (view, new_offset, 0); 
    125147            } 
    126             view->dpy_start = new_offset; 
    127148        } 
    128149    } 
    129150    mcview_movement_fixups (view, TRUE); 
    mcview_move_down (mcview_t * view, off_t lines) 
    153174    } 
    154175    else 
    155176    { 
    156         off_t i; 
    157177        off_t new_offset = 0; 
    158178 
    159179        if (view->dpy_end - view->dpy_start > last_byte - view->dpy_end) 
    160180        { 
    161181            while (lines-- > 0) 
    162182            { 
    163                 new_offset = mcview_eol (view, view->dpy_end); 
    164183                if (view->text_wrap_mode) 
    165                     new_offset = min (new_offset, view->dpy_end + (off_t) view->data_area.width); 
    166                 view->dpy_end = new_offset; 
     184                    view->dpy_end = 
     185                        mcview_eol (view, view->dpy_end, 
     186                                    view->dpy_end + (off_t) view->data_area.width); 
     187                else 
     188                    view->dpy_end = mcview_eol (view, view->dpy_end, last_byte); 
    167189 
    168                 new_offset = mcview_eol (view, view->dpy_start); 
    169190                if (view->text_wrap_mode) 
    170                     new_offset = min (new_offset, view->dpy_start + (off_t) view->data_area.width); 
     191                    new_offset = 
     192                        mcview_eol (view, view->dpy_start, 
     193                                    view->dpy_start + (off_t) view->data_area.width); 
     194                else 
     195                    new_offset = mcview_eol (view, view->dpy_start, last_byte); 
    171196                if (new_offset < last_byte) 
    172197                    view->dpy_start = new_offset; 
    173198                if (view->dpy_end >= last_byte) 
    mcview_move_down (mcview_t * view, off_t lines) 
    176201        } 
    177202        else 
    178203        { 
     204            off_t i; 
    179205            for (i = 0; i < lines && new_offset < last_byte; i++) 
    180206            { 
    181                 new_offset = mcview_eol (view, view->dpy_start); 
    182207                if (view->text_wrap_mode) 
    183                     new_offset = min (new_offset, view->dpy_start + (off_t) view->data_area.width); 
     208                    new_offset = 
     209                        mcview_eol (view, view->dpy_start, 
     210                                    view->dpy_start + (off_t) view->data_area.width); 
     211                else 
     212                    new_offset = mcview_eol (view, view->dpy_start, last_byte); 
    184213                if (new_offset < last_byte) 
    185214                    view->dpy_start = new_offset; 
    186215            } 
    mcview_moveto_bol (mcview_t * view) 
    314343    } 
    315344    else if (!view->text_wrap_mode) 
    316345    { 
    317         view->dpy_start = mcview_bol (view, view->dpy_start); 
     346        view->dpy_start = mcview_bol (view, view->dpy_start, 0); 
    318347    } 
    319348    view->dpy_text_column = 0; 
    320349    mcview_movement_fixups (view, TRUE); 
    mcview_moveto_eol (mcview_t * view) 
    344373    else 
    345374    { 
    346375        off_t eol; 
    347         bol = mcview_bol (view, view->dpy_start); 
    348         eol = mcview_eol (view, view->dpy_start); 
     376        bol = mcview_bol (view, view->dpy_start, 0); 
     377        eol = mcview_eol (view, view->dpy_start, mcview_get_filesize (view)); 
    349378        if (!view->utf8) 
    350379        { 
    351380            if (eol > bol) 
    mcview_moveto_match (mcview_t * view) 
    467496    } 
    468497    else 
    469498    { 
    470         view->dpy_start = mcview_bol (view, offset); 
     499        view->dpy_start = mcview_bol (view, offset, 0); 
    471500    } 
    472501 
    473502    mcview_scroll_to_cursor (view);