From e0512c10dcd6d38a13de0e589b916e6b67be9807 Mon Sep 17 00:00:00 2001 From: Roland Illig Date: Mon, 16 Aug 2004 04:16:55 +0000 Subject: [PATCH] Invented two new data types (offset_type and screen_dimen) and adjusted the type of many variables. --- src/view.c | 130 ++++++++++++++++++++++++++++------------------------- 1 file changed, 69 insertions(+), 61 deletions(-) diff --git a/src/view.c b/src/view.c index fb86e21d1..6da5406a6 100644 --- a/src/view.c +++ b/src/view.c @@ -76,10 +76,17 @@ #define vwidth (view->widget.cols - (view->have_frame ? 2 : 0)) #define vheight (view->widget.lines - (view->have_frame ? 2 : 0)) +/* Offset in bytes into a file */ +typedef unsigned long offset_type; +#define EOF_offset ((offset_type) -1) + +/* A width or height on the screen */ +typedef unsigned int screen_dimen; + /* A node for building a change list on change_list */ struct hexedit_change_node { struct hexedit_change_node *next; - long offset; + offset_type offset; unsigned char value; }; @@ -97,24 +104,24 @@ struct WView { int file; /* File descriptor (for mmap and munmap) */ FILE *stdfile; /* Stdio struct for reading file in parts */ int reading_pipe; /* Flag: Reading from pipe(use popen/pclose) */ - unsigned long bytes_read; /* How much of file is read */ + offset_type bytes_read; /* How much of file is read */ int mmapping; /* Did we use mmap on the file? */ /* Display information */ - unsigned long last; /* Last byte shown */ - unsigned long last_byte; /* Last byte of file */ - long first; /* First byte in file */ - long bottom_first; /* First byte shown when very last page is displayed */ + offset_type last; /* Last byte shown */ + offset_type last_byte; /* Last byte of file */ + offset_type first; /* First byte in file */ + offset_type bottom_first; /* First byte shown when very last page is displayed */ /* For the case of WINCH we should reset it to -1 */ - unsigned long start_display;/* First char displayed */ + offset_type start_display; /* First char displayed */ int start_col; /* First displayed column, negative */ - unsigned long edit_cursor; /* HexEdit cursor position in file */ + offset_type edit_cursor; /* HexEdit cursor position in file */ int hexedit_mode:1; /* Hexidecimal editing mode flag */ int nib_shift:1; /* Set if editing the least significant nibble */ int hexedit_text:1; /* Set if hexedit is in the text mode */ - int start_save; /* Line start shift between text and hex */ - int cursor_col; /* Cursor column */ - int cursor_row; /* Cursor row */ + screen_dimen start_save; /* Line start shift between text and hex */ + screen_dimen cursor_col; /* Cursor column */ + screen_dimen cursor_row; /* Cursor row */ struct hexedit_change_node *change_list; /* Linked list of changes */ int dirty; /* Number of skipped updates */ @@ -133,8 +140,8 @@ struct WView { /* Search variables */ - int search_start; /* First character to start searching from */ - int found_len; /* Length of found string or 0 if none was found */ + offset_type search_start; /* First character to start searching from */ + offset_type found_len; /* Length of found string or 0 if none was found */ char *search_exp; /* The search expression */ int direction; /* 1= forward; -1 backward */ void (*last_search)(void *, char *); @@ -144,7 +151,7 @@ struct WView { int monitor; /* Monitor file growth (like tail -f) */ /* Markers */ int marker; /* mark to use */ - int marks [10]; /* 10 marks: 0..9 */ + offset_type marks [10]; /* 10 marks: 0..9 */ int move_dir; /* return value from widget: @@ -480,14 +487,14 @@ set_view_init_error (WView *view, const char *msg) view->bytes_read = strlen (msg); return g_strdup (msg); } - return 0; + return NULL; } /* return values: NULL for success, else points to error message */ static char * init_growing_view (WView *view, const char *name, const char *filename) { - char *err_msg = NULL; + const char *err_msg = NULL; view->growing_buffer = 1; @@ -577,7 +584,7 @@ static int do_view_init (WView *view, const char *_command, const char *_file, int start_line) { - char *error = 0; + char *error = NULL; int i, type; int fd = -1; char tmp[BUF_MEDIUM]; @@ -847,14 +854,14 @@ typedef enum { } mark_t; /* Shows the file pointed to by *start_display on view_win */ -static long +static offset_type display (WView *view) { const int frame_shift = view->have_frame; int col = 0 + frame_shift; int row = STATUS_LINES + frame_shift; int height, width; - unsigned long from; + offset_type from; int c; mark_t boldflag = MARK_NORMAL; struct hexedit_change_node *curr = view->change_list; @@ -1163,7 +1170,7 @@ view_update (WView *view, gboolean update_gui) } static inline void -my_define (Dlg_head *h, int idx, char *text, void (*fn) (WView *), +my_define (Dlg_head *h, int idx, const char *text, void (*fn) (WView *), WView *view) { define_label_data (h, idx, text, (buttonbarfn) fn, view); @@ -1171,10 +1178,10 @@ my_define (Dlg_head *h, int idx, char *text, void (*fn) (WView *), /* If the last parameter is nonzero, it means we want get the count of lines from current up to the the upto position inclusive */ -static long -move_forward2 (WView *view, long current, int lines, long upto) +static offset_type +move_forward2 (WView *view, offset_type current, int lines, offset_type upto) { - unsigned long q, p; + offset_type q, p; int line; int col = 0; @@ -1259,10 +1266,10 @@ move_forward2 (WView *view, long current, int lines, long upto) just find the nearest '\n', use move_forward2(p, 0, q) to get the count of lines up to there and then use move_forward2(p, something, 0), which we return */ -static long -move_backward2 (WView *view, unsigned long current, int lines) +static offset_type +move_backward2 (WView *view, offset_type current, int lines) { - long p, q, pm; + offset_type p, q, pm; int line; if (!view->hex_mode && current == view->first) @@ -1322,22 +1329,22 @@ view_move_backward (WView *view, int i) view->dirty++; } -static long +static offset_type get_bottom_first (WView *view, int do_not_cache, int really) { - int bottom_first; + offset_type bottom_first; if (!have_fast_cpu && !really) return INT_MAX; - if (!do_not_cache && view->bottom_first != -1) + if (!do_not_cache && view->bottom_first != EOF_offset) return view->bottom_first; /* Force loading */ if (view->growing_buffer) { - int old_last_byte; + offset_type old_last_byte; - old_last_byte = -1; + old_last_byte = EOF_offset; while (old_last_byte != view->last_byte) { old_last_byte = view->last_byte; get_byte (view, view->last_byte + VIEW_PAGE_SIZE); @@ -1442,9 +1449,9 @@ move_left (WView *view) static int icase_search_p (WView *view, char *text, char *data, int nothing) { - char *q; + const char *q; int lng; - int direction = view->direction; + const int direction = view->direction; /* If we are searching backwards, reverse the string */ if (direction == -1) { @@ -1485,15 +1492,15 @@ grow_string_buffer (char *text, int *size) } static char * -get_line_at (WView *view, unsigned long *p, unsigned long *skipped) +get_line_at (WView *view, offset_type *p, offset_type *skipped) { - char *buffer = 0; + char *buffer = NULL; int buffer_size = 0; - int usable_size = 0; + offset_type usable_size = 0; int ch; - int direction = view->direction; - unsigned long pos = *p; - long i = 0; + const int direction = view->direction; + offset_type pos = *p; + offset_type i = 0; int prev = 0; if (!pos && direction == -1) @@ -1551,17 +1558,17 @@ get_line_at (WView *view, unsigned long *p, unsigned long *skipped) /** Search status optmizations **/ /* The number of bytes between percent increments */ -static int update_steps; +static offset_type update_steps; /* Last point where we updated the status */ -static long update_activate; +static offset_type update_activate; static void search_update_steps (WView *view) { if (view->s.st_size) update_steps = 40000; - else + else /* viewing a data stream, not a file */ update_steps = view->last_byte / 100; /* Do not update the percent display but every 20 ks */ @@ -1573,20 +1580,20 @@ static void search (WView *view, char *text, int (*search) (WView *, char *, char *, int)) { - int w = view->widget.cols - view->have_frame + 1; + const int w = view->widget.cols - view->have_frame + 1; - char *s = NULL; /* The line we read from the view buffer */ - long p, beginning; - int found_len, search_start; + char *s = NULL; /* The line we read from the view buffer */ + offset_type p, beginning, search_start; + int found_len; int search_status; Dlg_head *d = 0; /* Used to keep track of where the line starts, when looking forward */ /* is the index before transfering the line; the reverse case uses */ /* the position returned after the line has been read */ - long forward_line_start; - long reverse_line_start; - long t; + offset_type forward_line_start; + offset_type reverse_line_start; + offset_type t; /* Clear interrupt status */ got_interrupt (); @@ -1677,13 +1684,14 @@ search (WView *view, char *text, /* Search buffer (it's size is len) in the complete buffer */ /* returns the position where the block was found or -1 if not found */ -static long -block_search (WView *view, char *buffer, int len) +static offset_type +block_search (WView *view, const char *buffer, int len) { - int w = view->widget.cols - view->have_frame + 1; + const int w = view->widget.cols - view->have_frame + 1; int direction = view->direction; - char *d = buffer, b; - unsigned long e; + const char *d = buffer; + char b; + offset_type e; /* clear interrupt status */ got_interrupt (); @@ -1750,7 +1758,7 @@ block_search (WView *view, char *buffer, int len) } } disable_interrupt_key (); - return -1; + return EOF_offset; } /* @@ -1759,12 +1767,12 @@ block_search (WView *view, char *buffer, int len) * - strings in double quotes. Matches exactly without quotes. */ static void -hex_search (WView *view, char *text) +hex_search (WView *view, const char *text) { char *buffer; /* Parsed search string */ char *cur; /* Current position in it */ int block_len; /* Length of the search string */ - long pos; /* Position of the string in the file */ + offset_type pos; /* Position of the string in the file */ int parse_error = 0; if (!*text) { @@ -1834,7 +1842,7 @@ hex_search (WView *view, char *text) g_free (buffer); - if (pos == -1) { + if (pos == EOF_offset) { message (0, _("Search"), _(" Search string not found ")); view->found_len = 0; return; @@ -1993,7 +2001,7 @@ goto_line (WView *view) char *line, prompt[BUF_SMALL]; int oldline = 1; int saved_wrap_mode = view->wrap_mode; - unsigned long i; + offset_type i; view->wrap_mode = 0; for (i = view->first; i < view->start_display; i++) @@ -2020,7 +2028,7 @@ static void goto_addr (WView *view) { char *line, *error, prompt[BUF_SMALL]; - unsigned long addr; + offset_type addr; g_snprintf (prompt, sizeof (prompt), _(" The current address is 0x%lx.\n" @@ -2028,7 +2036,7 @@ goto_addr (WView *view) line = input_dialog (_(" Goto Address "), prompt, ""); if (line) { if (*line) { - addr = strtol (line, &error, 0); + addr = strtoul (line, &error, 0); if ((*error == '\0') && (addr <= view->last_byte)) { move_to_top (view); view_move_forward (view, addr / view->bytes_per_line);