Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package ytree for openSUSE:Factory checked 
in at 2024-06-10 17:38:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ytree (Old)
 and      /work/SRC/openSUSE:Factory/.ytree.new.19518 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ytree"

Mon Jun 10 17:38:32 2024 rev:8 rq:1179691 version:2.09

Changes:
--------
--- /work/SRC/openSUSE:Factory/ytree/ytree.changes      2024-04-10 
17:50:48.717404455 +0200
+++ /work/SRC/openSUSE:Factory/.ytree.new.19518/ytree.changes   2024-06-10 
17:38:51.101657393 +0200
@@ -1,0 +2,7 @@
+Fri Jun  7 11:57:51 UTC 2024 - Dirk Müller <dmuel...@suse.com>
+
+- update to 2.09:
+  * Window resize support for hex-view and hex-edit
+  * Display format improvements
+
+-------------------------------------------------------------------

Old:
----
  ytree-2.08.tar.gz

New:
----
  ytree-2.09.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ytree.spec ++++++
--- /var/tmp/diff_new_pack.DReYdt/_old  2024-06-10 17:38:51.625676778 +0200
+++ /var/tmp/diff_new_pack.DReYdt/_new  2024-06-10 17:38:51.625676778 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           ytree
-Version:        2.08
+Version:        2.09
 Release:        0
 Summary:        A filemanager similar to XTree
 License:        GPL-2.0-only

++++++ ytree-2.08.tar.gz -> ytree-2.09.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ytree-2.08/CHANGES new/ytree-2.09/CHANGES
--- old/ytree-2.08/CHANGES      2024-04-05 14:24:38.000000000 +0200
+++ new/ytree-2.09/CHANGES      2024-05-27 19:20:04.000000000 +0200
@@ -182,3 +182,7 @@
     "Show tagged files only" in file windows (Shift-F4 or Ctrl-F4 (if system 
allows Ctrl function keys / Thanks to frank)
     Lots of UTF_8 improvements/bugfixes
     Improve compatibility with old unix systems / some minor fixes
+New in 2.09
+    Window resize support for hex-view and hex-edit
+    Display format improvements
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ytree-2.08/filewin.c new/ytree-2.09/filewin.c
--- old/ytree-2.08/filewin.c    2024-04-05 14:24:38.000000000 +0200
+++ new/ytree-2.09/filewin.c    2024-05-27 19:20:04.000000000 +0200
@@ -65,6 +65,7 @@
 static void RereadWindowSize(DirEntry *dir_entry);
 static void ListJump( DirEntry * dir_entry, char *str );
 static char GetTypeOfFile(struct stat fst);
+static int  GetVisualFileEntryLength(int mode, int max_visual_filename_len, 
int max_visual_linkname_len);
 
 
 
@@ -73,44 +74,53 @@
 
   GetMaxYX( file_window, &window_height, &window_width );
   file_mode = new_file_mode;
-  switch( file_mode )
+
+  max_column = window_width / 
+              (GetVisualFileEntryLength( file_mode, max_visual_filename_len, 
max_visual_linkname_len) + 1);
+
+  if( max_column == 0 ) 
+    max_column = 1;
+}
+
+
+static int GetVisualFileEntryLength(int mode, int max_visual_filename_len, int 
max_visual_linkname_len)
+{
+  int len = 0;
+
+  switch (file_mode)
   {
-    case MODE_1: if( max_visual_linkname_len)
-                  max_column = window_width / 
-                               (max_visual_filename_len + 
max_visual_linkname_len + 45); 
-                else
-                  max_column = window_width / (max_visual_filename_len + 41); 
-                break;
-    case MODE_2: if( max_visual_linkname_len)
-                  max_column = window_width / 
-                   (max_visual_filename_len + max_visual_linkname_len + 41);
-                else
-                   max_column = window_width / (max_visual_filename_len + 37);
-                break;
-    case MODE_3: max_column = window_width / (max_visual_filename_len + 3);  
-                break;
-    case MODE_4: if( max_visual_linkname_len)
-                  max_column = window_width / 
-                               (max_visual_filename_len + 
max_visual_linkname_len + 44); 
-                else
-                  max_column = window_width / (max_visual_filename_len + 40); 
-                break;
-    case MODE_5: max_visual_userview_len = 
GetVisualUserFileEntryLength(max_visual_filename_len, 
-                                                                       
max_visual_linkname_len, 
-                                                                       
USERVIEW);
-                 if(max_visual_userview_len)
-                  max_column = window_width / (max_visual_userview_len + 1);
-                else
-                  max_column = 0;
+    case MODE_1: len =  (max_visual_linkname_len) ? max_visual_linkname_len + 
4 : 0; /* linkname + " -> " */
+                len += max_visual_filename_len + 38; /* filename + format */
+#ifdef HAS_LONGLONG
+                 len += 4;  /* %11lld instead of %7d */
+#endif
+                 break;
+
+    case MODE_2: len =  (max_visual_linkname_len) ? max_visual_linkname_len + 
4 : 0; /* linkname + " -> " */
+                len += max_visual_filename_len + 40; /* filename + format */
+#ifdef HAS_LONGLONG
+                 len += 4;  /* %11lld instead of %7d */
+#endif
+                 break;
+
+    case MODE_3: len = max_visual_filename_len + 2; /* filename + format */
+                 break;
+
+    case MODE_4: len =  (max_visual_linkname_len) ? max_visual_linkname_len + 
4 : 0; /* linkname + " -> " */
+                len += max_visual_filename_len + 39; /* filename + format */
+                 break;
+
+    case MODE_5: len = GetVisualUserFileEntryLength(max_visual_filename_len, 
max_visual_linkname_len, USERVIEW);
+                max_visual_userview_len = len;
                 break;
   }
 
-  if( max_column == 0 ) 
-    max_column = 1;
+  return len;
 }
 
 
 
+
 void RotateFileMode(void)
 {
   switch( file_mode )
@@ -697,7 +707,7 @@
                                      sym_link_name
                                    );
 #else
-                      (void) sprintf( format, "%%c%%c%%%c%ds %%8u  %%-12s  
%%-12s -> %%-%ds",
+                      (void) sprintf( format, "%%c%%c%%%c%ds  %%8u  %%-12s 
%%-12s -> %%-%ds",
                                       justify,
                                      filename_width,
                                      linkname_width
@@ -729,7 +739,7 @@
                                      group_name_ptr
                                    );
 #else
-                      (void) sprintf( format, "%%c%%c%%%c%ds %%8u  %%-12s  
%%-12s",
+                      (void) sprintf( format, "%%c%%c%%%c%ds  %%8u  %%-12s 
%%-12s",
                                       justify,
                                      filename_width
                                      );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ytree-2.08/input.c new/ytree-2.09/input.c
--- old/ytree-2.08/input.c      2024-04-05 14:24:38.000000000 +0200
+++ new/ytree-2.09/input.c      2024-05-27 19:20:04.000000000 +0200
@@ -620,11 +620,11 @@
 #endif
 
 
-int Getch()
+int WGetch(WINDOW *win)
 {
   int c;
 
-  c = getch();
+  c = wgetch(win);
 
 #ifdef KEY_RESIZE
   if(c == KEY_RESIZE) {
@@ -636,3 +636,9 @@
   return(c);
 }
 
+
+int Getch()
+{
+  return(WGetch(stdscr));
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ytree-2.08/patchlev.h new/ytree-2.09/patchlev.h
--- old/ytree-2.08/patchlev.h   2024-04-05 14:24:38.000000000 +0200
+++ new/ytree-2.09/patchlev.h   2024-05-27 19:20:04.000000000 +0200
@@ -5,6 +5,6 @@
  ***************************************************************************/
 
 
-#define        VERSION         "2.08"
-#define        PATCHLEVEL      2
-#define VERSIONDATE    "05 Apr 2024"
+#define        VERSION         "2.09"
+#define        PATCHLEVEL      0
+#define VERSIONDATE    "27 May 2024"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ytree-2.08/util.c new/ytree-2.09/util.c
--- old/ytree-2.08/util.c       2024-04-05 14:24:38.000000000 +0200
+++ new/ytree-2.09/util.c       2024-05-27 19:20:04.000000000 +0200
@@ -1092,7 +1092,11 @@
       } else if(!strncmp(sptr, LINKCOUNT_VIEWNAME, 3)) {
         n = 3;
       } else if(!strncmp(sptr, FILESIZE_VIEWNAME, 3)) {
+#ifdef HAS_LONGLONG
+        n = 11;
+#else
         n = 7;
+#endif
       } else if(!strncmp(sptr, MODTIME_VIEWNAME, 3)) {
         n = 12;
       } else if(!strncmp(sptr, SYMLINK_VIEWNAME, 3)) {
@@ -1102,7 +1106,11 @@
       } else if(!strncmp(sptr, GID_VIEWNAME, 3)) {
         n = 8;
       } else if(!strncmp(sptr, INODE_VIEWNAME, 3)) {
+#ifdef HAS_LONGLONG
+        n = 11;
+#else
         n = 7;
+#endif
       } else if(!strncmp(sptr, ACCTIME_VIEWNAME, 3)) {
         n = 12;
       } else if(!strncmp(sptr, CHGTIME_VIEWNAME, 3)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ytree-2.08/view.c new/ytree-2.09/view.c
--- old/ytree-2.08/view.c       2024-04-05 14:24:38.000000000 +0200
+++ new/ytree-2.09/view.c       2024-05-27 19:20:04.000000000 +0200
@@ -25,13 +25,14 @@
 static struct stat fdstat;
 static int WLINES, WCOLS, BYTES;
 static WINDOW *VIEW, *BORDER;
+static BOOL resize_done = FALSE;
 
-BOOL inhex=TRUE;
-BOOL inedit=FALSE;
-BOOL hexoffset=TRUE;
+static BOOL inhex=TRUE;
+static BOOL inedit=FALSE;
+static BOOL hexoffset=TRUE;
 
 
-#define CURSOR_CALC_X (10+((cursor_pos_x<(BYTES))? 
2:3)+(cursor_pos_x)+(cursor_pos_x/2))
+#define CURSOR_CALC_X (10+(((cursor_pos_x/2)<(BYTES/2)) ? 
2:3)+(cursor_pos_x)+(cursor_pos_x/2))
 #define CURSOR_POS_X ((inhex)? CURSOR_CALC_X:(WCOLS-BYTES+cursor_pos_x))
 #define C_POSX (((cursor_pos_x%2)!=1)? cursor_pos_x:(cursor_pos_x-1))
 #define CURSOR_POSX ((inhex)? (C_POSX/2):cursor_pos_x)
@@ -97,10 +98,10 @@
   if( access( file_path, R_OK ) )
   {
     (void) sprintf( message, 
-                   "View not possible!*\"%s\"*%s", 
-                   file_path, 
-                   strerror(errno) 
-                 );
+            "View not possible!*\"%s\"*%s", 
+            file_path, 
+            strerror(errno) 
+          );
     MESSAGE( message );
     ESCAPE;
   }
@@ -117,8 +118,9 @@
      {
         (void) sprintf(command_line, aux, file_p_aux);
      } 
-     else 
-          (void) sprintf(command_line, "%s %s", aux, file_p_aux);
+     else {
+        (void) sprintf(command_line, "%s %s", aux, file_p_aux);
+     }
   } 
   else 
   {
@@ -126,51 +128,43 @@
     if( compress_method == FREEZE_COMPRESS )
     {
       (void) sprintf( command_line, 
-                     "%s < %s %s | %s", 
-                     MELT, 
-                     file_p_aux, 
-                     ERR_TO_STDOUT,
-                     PAGER 
-                   );
-  }
-  else if( compress_method == COMPRESS_COMPRESS )
-  {
-    (void) sprintf( command_line, 
-                   "%s < %s %s | %s", 
-                   UNCOMPRESS, 
-                   file_p_aux, 
-                   ERR_TO_STDOUT,
-                   PAGER 
-                 );
-  }
-  else if( compress_method == GZIP_COMPRESS )
-  {
-    (void) sprintf( command_line, 
+              "%s < %s %s | %s", 
+              MELT, 
+              file_p_aux, 
+              ERR_TO_STDOUT,
+              PAGER 
+            );
+    } else if( compress_method == COMPRESS_COMPRESS ) {
+        (void) sprintf( command_line, 
+            "%s < %s %s | %s", 
+            UNCOMPRESS, 
+            file_p_aux, 
+            ERR_TO_STDOUT,
+            PAGER 
+          );
+    } else if( compress_method == GZIP_COMPRESS ) {
+        (void) sprintf( command_line, 
                     "%s < %s %s | %s", 
-                   GNUUNZIP, 
-                   file_p_aux, 
-                   ERR_TO_STDOUT,
-                   PAGER 
-                 );
-  }
-  else if( compress_method == BZIP_COMPRESS )
-  {
-    (void) sprintf( command_line, 
+            GNUUNZIP, 
+            file_p_aux, 
+            ERR_TO_STDOUT,
+            PAGER 
+          );
+    } else if( compress_method == BZIP_COMPRESS ) {
+        (void) sprintf( command_line, 
                     "%s < %s %s | %s", 
-                   BUNZIP, 
-                   file_p_aux, 
-                   ERR_TO_STDOUT,
-                   PAGER 
-                 );
-  }
-  else
-  {
-    (void) sprintf( command_line, 
-                   "%s %s", 
-                   PAGER,
-                   file_p_aux
-                 );
-  }
+            BUNZIP, 
+            file_p_aux, 
+            ERR_TO_STDOUT,
+            PAGER 
+          );
+    } else {
+        (void) sprintf( command_line, 
+            "%s %s", 
+            PAGER,
+            file_p_aux
+          );
+    }
   }
 
 /* --crb3 01oct02: replicating what I did to <e>dit, eliminate
@@ -181,28 +175,27 @@
 
   if (mode == DISK_MODE)
   {
-       if (Getcwd(cwd, PATH_LENGTH) == NULL)
-       {
-               WARNING("Getcwd failed*\".\"assumed");
-               (void) strcpy(cwd, ".");    
-       }
-       if (chdir(GetPath(dir_entry, path)))
-       {
-               (void) sprintf(message, "Can't change directory to*\"%s\"", 
path);
-               MESSAGE(message);
-       }else{
-               result = SystemCall(command_line);
-       }
-       if( chdir(cwd) )
-       {
-               (void) sprintf(message, "Can't change directory to*\"%s\"", 
cwd);
-               MESSAGE(message);
-       }
-  }else{
-       result = SystemCall(command_line);  
+    if (Getcwd(cwd, PATH_LENGTH) == NULL)
+    {
+        WARNING("Getcwd failed*\".\"assumed");
+        (void) strcpy(cwd, ".");    
+    }
+    if (chdir(GetPath(dir_entry, path)))
+    {
+        (void) sprintf(message, "Can't change directory to*\"%s\"", path);
+        MESSAGE(message);
+    } else {
+        result = SystemCall(command_line);
+    }
+    if( chdir(cwd) )
+    {
+        (void) sprintf(message, "Can't change directory to*\"%s\"", cwd);
+        MESSAGE(message);
+    }
+  } else {
+    result = SystemCall(command_line);  
   }
   
-  /*  if((result = SilentSystemCall( command_line )))   ..did systemcall just 
above */
   if(result)                                                                   
   
   {
     (void) sprintf( message, "can't execute*%s", command_line );
@@ -241,9 +234,9 @@
 
   if (( aux = GetExtViewer(file_path)) != NULL) {
      if (strstr(aux,"%s") != NULL) {
-       (void) sprintf( buffer, "| %s", PAGER );
+    (void) sprintf( buffer, "| %s", PAGER );
      } else {
-       (void) sprintf( buffer, "| %s", aux ); /* maybe pipe-able */
+    (void) sprintf( buffer, "| %s", aux ); /* maybe pipe-able */
      }
   } else {
     (void) sprintf( buffer, "| %s", PAGER );
@@ -252,10 +245,10 @@
   archive = (mode == TAPE_MODE) ? statistic.tape_name : statistic.login_path;
 
   MakeExtractCommandLine( command_line, 
-                         archive,
-                         file_path, 
-                         buffer
-                       );
+              archive,
+              file_path, 
+              buffer
+            );
   if((result = SystemCall( command_line )))
   {
     (void) sprintf( message, "can't execute*%s", command_line );
@@ -274,7 +267,7 @@
 {
     dest[c]='\0';
     for( ;c >= 0;c--)
-       dest[c] = (isprint(src[c]) ? src[c] : '.');
+    dest[c] = (isprint(src[c]) ? src[c] : '.');
     return dest;
 }
 */
@@ -287,8 +280,8 @@
     aux = (char *) xmalloc(WCOLS );
     if (r==0)
     {
-       wclrtoeol(win);
-       return;
+        wclrtoeol(win);
+        return;
     }
     if(hexoffset) {
       sprintf(line, "%010X  ", (int)offset);
@@ -298,37 +291,38 @@
     for (i = 1; i <= r; i++ ) 
     {
         if ((i == (BYTES / 2) ) || (i == BYTES ))
-           sprintf(aux, "%02hhX  ", buf[i-1]);
+            sprintf(aux, "%02hhX  ", buf[i-1]);
         else
-           sprintf(aux, "%02hhX ", buf[i-1]);
+            sprintf(aux, "%02hhX ", buf[i-1]);
         strcat(line, aux);
     }
     for (i = r+1; i <= BYTES; i++)
     {
         buf[i-1]= ' ';
         if ((i == (BYTES / 2) ) || (i == BYTES ))
-           sprintf(aux, "    ");
+            sprintf(aux, "    ");
         else
-           sprintf(aux, "   ");
+            sprintf(aux, "   ");
         strcat(line, aux);
     }
 /*    strcat(line, " ");*/
     line[strlen(line)] = ' ';
     for (i=0; i< WCOLS-BYTES; i++)
-       waddch(win, line[i]| THECOLOR);
+        waddch(win, line[i]| THECOLOR);
     for( i=0; i< BYTES; i++)
-       isprint(buf[i]) ? waddch(win, buf[i] | THECOLOR) : 
-                         waddch(win, ACS_BLOCK | COLOR_PAIR(HIDIR_COLOR));
+        isprint(buf[i]) ? waddch(win, buf[i] | THECOLOR) : waddch(win, 
ACS_BLOCK | COLOR_PAIR(HIDIR_COLOR));
     free(aux);
     return;
 }
 
+
+
 static void update_line(WINDOW *win, long line)
 {
     int r;
     char *buf;
     char *line_string;
-    char mensaje[50];
+    char msg[50];
 
     line_string = (char *) xmalloc(WCOLS);
     memset(line_string, ' ', WCOLS);
@@ -337,10 +331,10 @@
     memset(buf, ' ', BYTES);
     if (lseek(fd, (line - 1) * BYTES, SEEK_SET)== -1 )
     {
-        sprintf(mensaje, "Error %ld ", line);
-       perror(mensaje);
-       fflush(stdout);
-       return;
+        sprintf(msg, "File seek failed for line: %ld: %s ", line, 
strerror(errno));
+        ERROR_MSG(msg);
+        fflush(stdout);
+        return;
     }
     r = read(fd, buf, BYTES);
     printhexline(win, line_string, buf, r, (line - 1) * (BYTES));
@@ -376,8 +370,8 @@
 
     for (i = current_line; i <= current_line + l; i++)
     {
-       wmove(win, i - current_line, 0);
-       update_line(win, i);
+        wmove(win, i - current_line, 0);
+        update_line(win, i);
     }
     wnoutrefresh(win);
     doupdate();    
@@ -389,22 +383,27 @@
     int i;
     char *str;
 
-    str = (char *)xmalloc(COLS);
+    str = (char *)xmalloc(WCOLS);
     
     for(i = WLINES + 4; i < LINES; i++)
     {
-       wmove(stdscr,i , 0);
-       wclrtoeol(stdscr);
+        wmove(stdscr,i , 0);
+        wclrtoeol(stdscr);
     }
+
     doupdate();
     
     Print( stdscr, 0, 0, "File: ", MENU_COLOR );
     Print( stdscr, 0, 6, CutPathname(str,file_path,WCOLS-5), HIMENUS_COLOR );
     PrintOptions( stdscr, LINES - 3, 0, "(Edit file in hexadecimal mode)");
+    wclrtoeol(stdscr);
     PrintOptions( stdscr, LINES - 2, 0, "(Q)uit   (^L) redraw  (<TAB>) change 
edit mode");
-    PrintOptions( stdscr, LINES - 1, 0, 
-               "(NEXT)-(RIGHT)/(PREV)-(LEFT) page   (HOME)-(END) of line   
(DOWN)-(UP) line");
+    wclrtoeol(stdscr);
+    PrintOptions( stdscr, LINES - 1, 0, "(NEXT)-(RIGHT)/(PREV)-(LEFT) page   
(HOME)-(END) of line   (DOWN)-(UP) line");
+    wclrtoeol(stdscr);
     free(str);
+    wnoutrefresh(stdscr);
+    doupdate();
     return;
 }
 
@@ -413,37 +412,41 @@
     int i;
     char *str;
     
-    str = (char *)xmalloc(COLS);
+    str = (char *)xmalloc(WCOLS);
     for(i = WLINES + 4; i < LINES; i++)
     {
-       wmove(stdscr,i , 0);
-       wclrtoeol(stdscr);
+        wmove(stdscr,i , 0);
+        wclrtoeol(stdscr);
     }
     doupdate();
     
     Print( stdscr, 0, 0, "File: ", MENU_COLOR );
     Print( stdscr, 0, 6, CutPathname(str,file_path,WCOLS-5), HIMENUS_COLOR );
-    PrintOptions( stdscr, LINES - 3, 0, "View file in hexadecimal mode");
+    PrintOptions( stdscr, LINES - 3, 0, "View file in hexadecimal mode"); 
+    wclrtoeol(stdscr);
     PrintOptions( stdscr, LINES - 2, 0, "(Q)uit   (^L) redraw  (E)dit hex");
-    PrintOptions( stdscr, LINES - 1, 0, 
-               "(NEXT)-(RIGHT)/(PREV)-(LEFT) page   (HOME)-(END) of line   
(DOWN)-(UP) line");
+    wclrtoeol(stdscr);
+    PrintOptions( stdscr, LINES - 1, 0, "(NEXT)-(RIGHT)/(PREV)-(LEFT) page   
(HOME)-(END) of line   (DOWN)-(UP) line");
+    wclrtoeol(stdscr);
     free(str);
+    wnoutrefresh(stdscr);
     return;
 }
 
 static void SetupViewWindow(char *file_path)
 {
     int i;
-    char *str;
+
+    int myCOLS  = (COLS > 18) ? COLS : 19; /* to display (at least) address, 
frame and one byte */
+    int myLINES = (LINES > 6) ? LINES : 7; /* to display (at least) footer, 
border and one line */
     
-    str = (char *)xmalloc(COLS);
-    WLINES= LINES - 6;
-    WCOLS= COLS - 2;
+    WLINES=myLINES - 6;
+    WCOLS=myCOLS - 2;
     if (BORDER)
-       delwin(BORDER);
+        delwin(BORDER);
     BORDER=newwin(WLINES + 2, WCOLS + 2, 1, 0);
     if (VIEW)
-       delwin(VIEW);
+        delwin(VIEW);
     VIEW=newwin(WLINES, WCOLS, 2, 1);
     keypad(VIEW,TRUE);
     scrollok(VIEW,FALSE);
@@ -454,95 +457,98 @@
     wclear(VIEW);
     for( i = 0; i < WLINES - 1; i++)
     {
-       wmove(VIEW,i,0);
-       wclrtoeol(VIEW);
+        wmove(VIEW,i,0);
+        wclrtoeol(VIEW);
     }
     WbkgdSet(BORDER,COLOR_PAIR(WINDIR_COLOR)|A_BOLD);
+    Change2View(file_path);
     box(BORDER,0,0);
     RefreshWindow(BORDER);
     RefreshWindow(VIEW);  
-    Change2View(file_path);
     BYTES = (WCOLS - 13) / 4;
-    free(str);
     return;
-
 }
 
 
 
 static unsigned char hexval(unsigned char v) {
-       if (v >= 'a' && v <= 'f')
-               v = v - 'a' + 10;
-       else if (v >= '0' && v <= '9')
-               v = v - '0';
-       return v;
+    if (v >= 'a' && v <= 'f')
+        v = v - 'a' + 10;
+    else if (v >= '0' && v <= '9')
+        v = v - '0';
+    return v;
 }
 
 
 static void change_char(int ch)
 {
-
     CHANGES *cambio=NULL;
     char pp=0;
-    char mensaje[50];
+    char msg[50];
     
     cambio = malloc(sizeof(struct MODIF));
     cambio -> pos = ( (cursor_pos_y + current_line - 1) * BYTES) + CURSOR_POSX;
     if (lseek(fd, cambio -> pos, SEEK_SET)== -1 )
     {
-        sprintf(mensaje,"Error %s ", strerror(errno));
-       perror(mensaje);
-       fflush(stdout);
-       free(cambio);
-       return;
-    }
-    if ((read(fd, &cambio -> old_char,1)==1))
-       
-    if (lseek(fd, cambio -> pos, SEEK_SET)!= -1 )
-    {
-       if (inhex) {
-           switch( ch){
-           case '0': case '1': case '2': case '3': case '4':
-           case '5': case '6': case '7': case '8': case '9':
-           case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-           case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-               if ((cursor_pos_x%2)==1)
-                   pp = (cambio -> old_char & 0xF0) | (hexval(ch));
-               else
-                   pp = (cambio -> old_char & 0x0F) | (hexval(ch) << 4);
-               touchwin(VIEW);
-               break;
-           default:
-               beep();
-               touchwin(VIEW);
-               free(cambio);
-               return;
-               break;
-           }
-       }else{
-           pp = ch;
-       }
-       if (write(fd, &pp, 1)!= 1)
-       {
-           sprintf(mensaje,"Error al grabar el cambio %s ", strerror(errno));
-           perror(mensaje);
-           fflush(stdout);
-           free(cambio);
-           return;
-       }
-       cambio -> new_char = pp;
-       cambio -> next = changes;
-       changes = cambio;
-    }else{
-        sprintf(mensaje,"Error al posicionar %s ", strerror(errno));
-        perror(mensaje);
+        sprintf(msg,"File seek failed: %s ", strerror(errno));
+        ERROR_MSG(msg);
         fflush(stdout);
         free(cambio);
         return;
     }
-    else{
-        sprintf(mensaje,"Error al pre-leer %s ", strerror(errno));
-        perror(mensaje);
+
+    if ((read(fd, &cambio -> old_char,1)==1))
+    { 
+        if (lseek(fd, cambio -> pos, SEEK_SET)!= -1 )
+        {
+            if (inhex) {
+
+                switch( ch) {
+
+                    case '0': case '1': case '2': case '3': case '4':
+                    case '5': case '6': case '7': case '8': case '9':
+                    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+                    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+
+                    if ((cursor_pos_x%2)==1)
+                        pp = (cambio -> old_char & 0xF0) | (hexval(ch));
+                    else
+                        pp = (cambio -> old_char & 0x0F) | (hexval(ch) << 4);
+                    touchwin(VIEW);
+                    break;
+
+                    default:
+                    beep();
+                    touchwin(VIEW);
+                    free(cambio);
+                    return;
+                    break;
+                }
+            } else {
+                pp = ch;
+            }
+
+            if (write(fd, &pp, 1) != 1)
+            {
+                sprintf(msg,"Write to file failed: %s ", strerror(errno));
+                ERROR_MSG(msg);
+                fflush(stdout);
+                free(cambio);
+                return;
+            }
+            cambio -> new_char = pp;
+            cambio -> next = changes;
+            changes = cambio;
+        } else {
+            sprintf(msg,"File seek failed: %s ", strerror(errno));
+            ERROR_MSG(msg);
+            fflush(stdout);
+            free(cambio);
+            return;
+        }
+    } else {
+        sprintf(msg,"Read from file failed: %s ", strerror(errno));
+        ERROR_MSG(msg);
         fflush(stdout);
         free(cambio);
         return;
@@ -553,51 +559,118 @@
 
 static void move_right(WINDOW *win)
 {
-   fstat(fd,&fdstat);
-   cursor_pos_x++;
-   if (fdstat.st_size > ((cursor_pos_y+current_line-1) * BYTES + CURSOR_POSX 
)){
-       cursor_pos_x--;
-       if ( cursor_pos_x < CANTX(BYTES) - 1 ) {
-           cursor_pos_x += 1;
-           wmove( win, cursor_pos_y, CURSOR_POS_X);
-       }else {
-           if (fdstat.st_size >= ((current_line+cursor_pos_y) * BYTES) ){
-               if (cursor_pos_y < WLINES-1 ) {
-                   cursor_pos_y++;
-                   cursor_pos_x = 0;
-                   wmove( win, cursor_pos_y, CURSOR_POS_X);
-               } else {
-                   current_line++;
-                   scroll_down(win);
-                   cursor_pos_x = 0;
-                   wmove( win, cursor_pos_y, CURSOR_POS_X);
-               }
-           } else
-               beep();
-       }
-    }else{
-       cursor_pos_x--;
-       beep();
+    fstat(fd,&fdstat);
+    cursor_pos_x++;
+    if (fdstat.st_size > ((cursor_pos_y+current_line-1) * BYTES + CURSOR_POSX 
)) {
+        cursor_pos_x--;
+        if ( cursor_pos_x < CANTX(BYTES) - 1 ) {
+            cursor_pos_x += 1;
+            wmove( win, cursor_pos_y, CURSOR_POS_X);
+        } else {
+            if (fdstat.st_size >= ((current_line+cursor_pos_y) * BYTES) ) {
+                if (cursor_pos_y < WLINES-1 ) {
+                    cursor_pos_y++;
+                    cursor_pos_x = 0;
+                    wmove( win, cursor_pos_y, CURSOR_POS_X);
+                } else {
+                    current_line++;
+                    scroll_down(win);
+                    cursor_pos_x = 0;
+                    wmove( win, cursor_pos_y, CURSOR_POS_X);
+                }
+            } else {
+                beep();
+            }
+        }
+    } else {
+        cursor_pos_x--;
+        beep();
     }
     return;
 }
 
+
+static void DoResize(char *file_path)
+{
+    int old_cursor_pos_x = cursor_pos_x;
+    int old_cursor_pos_y = cursor_pos_y;
+    int old_WLINES = WLINES;
+    int old_WCOLS = WCOLS;
+    int offset = (cursor_pos_y + current_line - 1) * BYTES + CURSOR_POSX;
+    int new_cols;
+    int new_lines;
+
+    SetupViewWindow(file_path);
+
+    new_cols   = offset % BYTES;
+    new_lines  = offset / BYTES;
+
+    if(WLINES < old_WLINES)
+    {
+        if(old_cursor_pos_y >= WLINES)  /* view is getting smaller (heigh) */
+        {
+            /* current position is (now) in invisible line; "scoll down" */
+            int n = old_WLINES - WLINES;
+            current_line += n;
+            cursor_pos_y -= n;
+            if(cursor_pos_y < 0)
+            {
+                current_line += (cursor_pos_y * -1);
+                cursor_pos_y = 0;
+            }
+        }
+    }
+
+    if(WCOLS != old_WCOLS) 
+    {
+        /* reposition x */
+        cursor_pos_x = (inhex) ? (new_cols * 2 + (old_cursor_pos_x % 2)) : 
new_cols;
+
+        /* reposition y */
+        while((cursor_pos_y + current_line - 1) < new_lines)  /* maybe view is 
smaller (less columns) */
+        {
+            if(cursor_pos_y < (WLINES-1))
+                cursor_pos_y++;
+            else
+                current_line++;
+        }
+
+        while((cursor_pos_y + current_line - 1) > new_lines)  /* maybe view is 
larger (more columns) */
+        {
+            if(cursor_pos_y > 0)
+                cursor_pos_y--;
+            else
+                current_line--;
+        }
+    }
+
+
+    Change2Edit(file_path);
+    update_all_lines(VIEW,WLINES-1);
+    wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
+    wnoutrefresh(VIEW);
+    doupdate();
+    resize_done = TRUE;
+}
+
+
+
 static void hex_edit(char *file_path)
 {
     int ch;
-    char mensaje[50];
+    char msg[50];
 
     BOOL QUIT=FALSE;
 
     cursor_pos_x = cursor_pos_y = 0;
     fd2 = fd;
     fd=open(file_path,O_RDWR);
-    if (fd == -1){
-        sprintf(mensaje,"Error %s ", strerror(errno));
-       ERROR_MSG(mensaje);
-       touchwin(VIEW);
+    if (fd == -1) {
+        sprintf(msg,"File open failed: %s ", strerror(errno));
+        ERROR_MSG(msg);
+        touchwin(VIEW);
         fd = fd2;
-       return;
+        return;
     }
     inedit=TRUE;
     update_all_lines(VIEW,WLINES-1);
@@ -605,181 +678,188 @@
     curs_set( 1);
     wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
     wnoutrefresh(VIEW);
+
     while (!QUIT) {
-    doupdate();
-    ch = (resize_request) ? -1 : Getch();
+
+       doupdate();
+       ch = (resize_request) ? -1 : Getch();
+
 #ifdef VI_KEYS
-       ch = ViKey(ch);
+        ch = ViKey(ch);
 #endif
-       if (resize_request)
-       {
-           SetupViewWindow(file_path);
-           Change2Edit(file_path);
-/*         current_line = oldpos/BYTES;*/
-           update_all_lines(VIEW,WLINES-1);
-           wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
-           wnoutrefresh(VIEW);
-           doupdate();
-       }
-
-       switch(ch){
-           case ESC: QUIT=TRUE;
-                     break;
-           case KEY_DOWN: /*ScrollDown();*/
-                          fstat(fd,&fdstat);
-                          if (fdstat.st_size > ((cursor_pos_y + current_line - 
1) * BYTES + CURSOR_POSX)) {
-
-                               if (fdstat.st_size > ((cursor_pos_y + 
current_line - 1 + 1) * BYTES + CURSOR_POSX)) {
-                                       
-                                       if (cursor_pos_y < WLINES-1){
-                                               wmove( VIEW, ++cursor_pos_y, 
CURSOR_POS_X);
-                                               wnoutrefresh(VIEW);
-                                       } else {
-                                               ++current_line;
-                                               scroll_down(VIEW);
-                                               wmove( VIEW, cursor_pos_y, 
CURSOR_POS_X);
-                                               wnoutrefresh(VIEW);
-                                       }
-                               } else {
-                                       /* special case: last line */
-
-                                       if (fdstat.st_size > ((cursor_pos_y + 
current_line - 1 + 1) * BYTES)) {
-                                               
-                                               for(cursor_pos_x = 0; 
(CURSOR_POSX + 1) < (fdstat.st_size % BYTES); cursor_pos_x++);
-
-                                               if (cursor_pos_y < WLINES-1){
-                                                       wmove( VIEW, 
++cursor_pos_y, CURSOR_POS_X);
-                                                       wnoutrefresh(VIEW);
-                                               } else {
-                                                       ++current_line;
-                                                       scroll_down(VIEW);
-                                                       wmove( VIEW, 
cursor_pos_y, CURSOR_POS_X);
-                                                       wnoutrefresh(VIEW);
-                                               }
-                                       }
-                               }
-                           } else {
-                               beep();
-                           }
-                           break;
-           case KEY_UP: /*ScroollUp();*/
-                       if (cursor_pos_y > 0)
-                       {
-                           wmove( VIEW, --cursor_pos_y, CURSOR_POS_X);
-                           wnoutrefresh(VIEW);
-                       } else if (current_line > 1) {
-                           current_line--;
-                           scroll_up(VIEW);
-                           wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
-                           wnoutrefresh(VIEW);
-                       } else                  
-                           beep();
-                       break;
-           case KEY_LEFT: /* move 1 char left */
-                           if ( cursor_pos_x > 0 ) {
-                               cursor_pos_x-=1;
-                               wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
-                           } else if (cursor_pos_y > 0 ) {
-                               /*cursor_pos_x=ultimo_caracter;*/
-                               cursor_pos_x=CANTX(BYTES) - 1;
-                               wmove( VIEW, --cursor_pos_y,CURSOR_POS_X);
-                           } else if (current_line > 1) {
-                               current_line--;
-                               scroll_up(VIEW);
-                               cursor_pos_x=CANTX(BYTES) - 1;
-                               wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
-                           } else 
-                               beep();
-                       wnoutrefresh(VIEW);
-                       break;
-           case KEY_PPAGE: /*ScrollPageDown();*/
-                           if (current_line > WLINES)
-                               current_line -= WLINES;
-                           else
-                               if (current_line > 1)
-                                  current_line = 1;
-                               else
-                                   beep();
-/*                         oldpos = current_line * BYTES;*/
-                           update_all_lines(VIEW,WLINES);
-                           wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
-                           wnoutrefresh(VIEW);
-                           break;
-           case KEY_RIGHT: move_right(VIEW);
-                           wnoutrefresh(VIEW);
-                           break;
-           case KEY_NPAGE: /*ScroollPageUp();*/
-                           fstat(fd,&fdstat);
-                           if (fdstat.st_size > ((current_line - 1 + WLINES + 
cursor_pos_y) * BYTES) + CURSOR_POSX ) {
-                               current_line += WLINES;
-                           } else {
-                               int n;
-                               n = fdstat.st_size / BYTES; /* numer of full 
lines */
-                               if(fdstat.st_size % BYTES) {
-                                 n++; /* plus 1 not fully used line */
-                               }
-                               if(current_line != n) {
-                                 current_line = n;
-                                 cursor_pos_y = 0;
-                                 for(cursor_pos_x = 0; (CURSOR_POSX + 1) < 
(fdstat.st_size % BYTES); cursor_pos_x++);
-                               } else {
-                                 beep();
-                               }
-                           }
-/*                         oldpos = current_line * BYTES;*/
-                           update_all_lines(VIEW,WLINES);
-                           wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
-                           wnoutrefresh(VIEW);
-                           break;
-           case KEY_HOME: 
-                           if (CURSOR_POSX > 0) {
-                               cursor_pos_x = 0;
-                               wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
-                           } else
-                               beep();
-                           wnoutrefresh(VIEW);
-                           break;
-           case KEY_END: 
-                        fstat(fd,&fdstat);
-                        if ( ((cursor_pos_y + current_line) * BYTES) > 
fdstat.st_size ) {
-                               cursor_pos_x = CANTX(fdstat.st_size % BYTES) - 
1;
-                        } else {
-                           cursor_pos_x = CANTX(BYTES)-1;
-                        }
-                        wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
-                        wnoutrefresh(VIEW);
-                        break;
-           case '\t' :
-                       /* move cursor to the the other part of the window*/
-                       if (inhex){
-                           inhex=FALSE;
-                           cursor_pos_x=cursor_pos_x/2;
-                       }else{
-                           inhex=TRUE;
-                           cursor_pos_x=cursor_pos_x*2;
-                       }
-                       wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
-                       wnoutrefresh(VIEW);
-                       break;
-           case 'L' & 0x1f: 
-                       clearok(stdscr,TRUE);
-                       RefreshWindow(stdscr);
-                       break;
-
-           case 'q': 
-           case 'Q': if (inhex) {
-                       QUIT=TRUE;
-                       break;
-                       }
-           default:
-                   change_char(ch); 
-                   wmove(VIEW, cursor_pos_y, 0);
-                   update_line(VIEW, current_line+cursor_pos_y);
-                   move_right(VIEW);
-                   wmove(VIEW, cursor_pos_y, CURSOR_POS_X);
-                   wnoutrefresh(VIEW);
-                   break;
-       }
+        if (resize_request)
+        {
+            DoResize(file_path);
+            resize_request = FALSE;
+            continue;
+        }
+
+        switch(ch) {
+
+#ifdef KEY_RESIZE
+
+            case KEY_RESIZE: resize_request = TRUE;
+                    break;
+#endif
+            case ESC: QUIT=TRUE;
+                    break;
+
+            case KEY_DOWN: /*ScrollDown();*/
+                fstat(fd,&fdstat);
+                if (fdstat.st_size > ((cursor_pos_y + current_line - 1) * 
BYTES + CURSOR_POSX)) {
+
+                    if (fdstat.st_size > ((cursor_pos_y + current_line - 1 + 
1) * BYTES + CURSOR_POSX)) {
+                    
+                        if (cursor_pos_y < WLINES-1) {
+                            wmove( VIEW, ++cursor_pos_y, CURSOR_POS_X);
+                            wnoutrefresh(VIEW);
+                        } else {
+                            ++current_line;
+                            scroll_down(VIEW);
+                            wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
+                            wnoutrefresh(VIEW);
+                        }
+                    } else {
+                        /* special case: last line */
+
+                        if (fdstat.st_size > ((cursor_pos_y + current_line - 1 
+ 1) * BYTES)) {
+                        
+                            for(cursor_pos_x = 0; (CURSOR_POSX + 1) < 
(fdstat.st_size % BYTES); cursor_pos_x++);
+
+                            if (cursor_pos_y < WLINES-1) {
+                                wmove( VIEW, ++cursor_pos_y, CURSOR_POS_X);
+                                wnoutrefresh(VIEW);
+                            } else {
+                                ++current_line;
+                                scroll_down(VIEW);
+                                wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
+                                wnoutrefresh(VIEW);
+                            }
+                        }
+                    }
+                } else {
+                    beep();
+                }
+                break;
+        case KEY_UP: /*ScroollUp();*/
+                if (cursor_pos_y > 0)
+                {
+                    wmove( VIEW, --cursor_pos_y, CURSOR_POS_X);
+                    wnoutrefresh(VIEW);
+                } else if (current_line > 1) {
+                    current_line--;
+                    scroll_up(VIEW);
+                    wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
+                    wnoutrefresh(VIEW);
+                } else {        
+                    beep();
+                }
+                break;
+        case KEY_LEFT: /* move 1 char left */
+                if ( cursor_pos_x > 0 ) {
+                    cursor_pos_x-=1;
+                    wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
+                } else if (cursor_pos_y > 0 ) {
+                    /*cursor_pos_x=ultimo_caracter;*/
+                    cursor_pos_x=CANTX(BYTES) - 1;
+                    wmove( VIEW, --cursor_pos_y,CURSOR_POS_X);
+                } else if (current_line > 1) {
+                    current_line--;
+                    scroll_up(VIEW);
+                    cursor_pos_x=CANTX(BYTES) - 1;
+                    wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
+                } else {
+                    beep();
+                }
+                wnoutrefresh(VIEW);
+                break;
+        case KEY_PPAGE: /*ScrollPageDown();*/
+                if (current_line > WLINES)
+                    current_line -= WLINES;
+                else if (current_line > 1)
+                   current_line = 1;
+                else
+                    beep();
+                update_all_lines(VIEW,WLINES);
+                wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
+                wnoutrefresh(VIEW);
+                break;
+        case KEY_RIGHT: move_right(VIEW);
+                wnoutrefresh(VIEW);
+                break;
+        case KEY_NPAGE: /*ScroollPageUp();*/
+                fstat(fd,&fdstat);
+                if (fdstat.st_size > ((current_line - 1 + WLINES + 
cursor_pos_y) * BYTES) + CURSOR_POSX ) {
+                    current_line += WLINES;
+                } else {
+                    int n;
+                    n = fdstat.st_size / BYTES; /* numer of full lines */
+                    if(fdstat.st_size % BYTES) {
+                    n++; /* plus 1 not fully used line */
+                    }
+                    if(current_line != n) {
+                        current_line = n;
+                        cursor_pos_y = 0;
+                        for(cursor_pos_x = 0; (CURSOR_POSX + 1) < 
(fdstat.st_size % BYTES); cursor_pos_x++);
+                    } else {
+                        beep();
+                    }
+                }
+                update_all_lines(VIEW,WLINES);
+                wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
+                wnoutrefresh(VIEW);
+                break;
+        case KEY_HOME: 
+                if (CURSOR_POSX > 0) {
+                    cursor_pos_x = 0;
+                    wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
+                } else {
+                    beep();
+                }
+                wnoutrefresh(VIEW);
+                break;
+        case KEY_END: 
+                fstat(fd,&fdstat);
+                if ( ((cursor_pos_y + current_line) * BYTES) > fdstat.st_size 
) {
+                    cursor_pos_x = CANTX(fdstat.st_size % BYTES) - 1;
+                } else {
+                    cursor_pos_x = CANTX(BYTES)-1;
+                }
+                wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
+                wnoutrefresh(VIEW);
+                break;
+        case '\t' :
+                /* move cursor to the the other part of the window*/
+                if (inhex){
+                    inhex=FALSE;
+                    cursor_pos_x=cursor_pos_x/2;
+                } else {
+                    inhex=TRUE;
+                    cursor_pos_x=cursor_pos_x*2;
+                }
+                wmove( VIEW, cursor_pos_y, CURSOR_POS_X);
+                wnoutrefresh(VIEW);
+                break;
+        case 'L' & 0x1f: 
+                clearok(stdscr,TRUE);
+                RefreshWindow(stdscr);
+                break;
+
+        case 'q': 
+        case 'Q': 
+                if (inhex) {
+                    QUIT=TRUE;
+                    break;
+                }
+        default:
+                change_char(ch); 
+                wmove(VIEW, cursor_pos_y, 0);
+                update_line(VIEW, current_line+cursor_pos_y);
+                move_right(VIEW);
+                wmove(VIEW, cursor_pos_y, CURSOR_POS_X);
+                wnoutrefresh(VIEW);
+                break;
+        }
     }
     curs_set( 0);
     close(fd);
@@ -791,123 +871,127 @@
 
 int InternalView(char *file_path)
 {
-    long oldpos;
     int ch;
     BOOL QUIT=FALSE;
     
     hexoffset = (!strcmp(HEXEDITOFFSET, "HEX")) ? TRUE : FALSE;
 
     if (stat(file_path, &fdstat)!=0)
-       return -1;
+        return -1;
     if (!(S_ISREG(fdstat.st_mode)) || S_ISBLK(fdstat.st_mode))
-       return -1;
+        return -1;
     fd=open(file_path,O_RDONLY);
     if (fd == -1)
-       return -1;
+        return -1;
     SetupViewWindow(file_path);
     current_line = 1;
-    oldpos = 1;
     update_all_lines(VIEW,WLINES-1);
+
     while (!QUIT) {
-    ch = (resize_request) ? -1 : Getch();
+
+       ch = (resize_request) ? -1 : WGetch(VIEW);
+
 #ifdef VI_KEYS
-       ch = ViKey(ch);
+    ch = ViKey(ch);
 #endif
+
        if (resize_request)
        {
-           SetupViewWindow(file_path);
-           current_line = oldpos/BYTES;
-           update_all_lines(VIEW,WLINES-1);
-       }
-
-       switch(ch){
-           case ESC:
-           case 'q':
-           case 'Q': QUIT=TRUE;
-                     break;
-           case 'e':
-           case 'E': Change2Edit(file_path);
-                     hex_edit(file_path);
-                     update_all_lines(VIEW,WLINES-1);
-                     Change2View(file_path);
-                     break;
-           case KEY_DOWN: /*ScrollDown();*/
-                          fstat(fd,&fdstat);
-                          if (fdstat.st_size > (current_line * BYTES) )
-                          {
-                               current_line++;
-                               oldpos = current_line * BYTES;
-                               scroll_down(VIEW);
-                           }
-                           else
-                               beep();
-                           break;
-           case KEY_UP: /*ScroollUp();*/
-                       if (current_line > 1)
-                       {
-                           current_line--;
-                           oldpos = current_line * BYTES;
-                           scroll_up(VIEW);
-                       }
-                       else
-                           beep();
-                       break;
-           case KEY_LEFT:
-           case KEY_PPAGE: /*ScrollPageDown();*/
-                           if (current_line > WLINES)
-                               current_line -= WLINES;
-                           else
-                               if (current_line > 1)
-                                  current_line = 1;
-                               else
-                                   beep();
-                           oldpos = current_line * BYTES;
-                           update_all_lines(VIEW,WLINES);
-                           break;
-           case KEY_RIGHT:
-           case KEY_NPAGE: /*ScroollPageUp();*/
-                           fstat(fd,&fdstat);
-                           if (fdstat.st_size > ((current_line - 1 + WLINES) * 
BYTES) ) {
-                               current_line += WLINES;
-                           } else {
-                               int n;
-                               n = fdstat.st_size / BYTES; /* numer of full 
lines */
-                               if(fdstat.st_size % BYTES) {
-                                 n++; /* plus 1 not fully used line */
-                               }
-                               if(current_line != n) {
-                                 current_line = n;
-                               } else {
-                                 beep();
-                               }
-                           }
-                           oldpos = current_line * BYTES;
-                           update_all_lines(VIEW,WLINES);
-                           break;
-           case KEY_HOME: /*ScrollHome();*/
-                           if (current_line > 1)
-                           {
-                               current_line = 1;
-                               oldpos = current_line * BYTES;
-                               update_all_lines(VIEW,WLINES-1);
-                           }else
-                               beep();                     
-                           break;
-           case KEY_END: /*ScrollEnd();*/
-                        fstat(fd,&fdstat);
-                        if (fdstat.st_size >= BYTES * 2) 
-                           current_line = (fdstat.st_size - BYTES) / BYTES;
-                        else
-                           beep();
-                       oldpos = current_line * BYTES;
-                       update_all_lines(VIEW,WLINES);
-                       break;
-           case 'L' & 0x1f: 
-                       clearok(stdscr,TRUE);
-                       RefreshWindow(stdscr);
-                       break;
-           default: break;
-       }
+            DoResize(file_path);
+            resize_request = FALSE;
+            continue;
+        }
+
+        switch(ch) {
+
+#ifdef KEY_RESIZE
+            case KEY_RESIZE: resize_request = TRUE;
+                     break;
+#endif
+
+            case ESC:
+            case 'q':
+            case 'Q': QUIT=TRUE;
+                break;
+            case 'e':
+            case 'E': Change2Edit(file_path);
+                    hex_edit(file_path);
+                    update_all_lines(VIEW,WLINES-1);
+                    Change2View(file_path);
+                    break;
+            case KEY_DOWN: /*ScrollDown();*/
+                    fstat(fd,&fdstat);
+                    if (fdstat.st_size > (current_line * BYTES) )
+                    {
+                        current_line++;
+                        scroll_down(VIEW);
+                    } else {
+                        beep();
+                    }
+                    break;
+            case KEY_UP: /*ScroollUp();*/
+                    if (current_line > 1)
+                    {
+                        current_line--;
+                        scroll_up(VIEW);
+                    } else {
+                        beep();
+                    }
+                    break;
+            case KEY_LEFT:
+            case KEY_PPAGE: /*ScrollPageDown();*/
+                    if (current_line > WLINES)
+                        current_line -= WLINES;
+                    else
+                    if (current_line > 1)
+                        current_line = 1;
+                    else
+                        beep();
+                    update_all_lines(VIEW,WLINES);
+                    break;
+            case KEY_RIGHT:
+            case KEY_NPAGE: /*ScroollPageUp();*/
+                    fstat(fd,&fdstat);
+                    if (fdstat.st_size > ((current_line - 1 + WLINES) * BYTES) 
) {
+                        current_line += WLINES;
+                    } else {
+                        int n;
+                        n = fdstat.st_size / BYTES; /* numer of full lines */
+                        if(fdstat.st_size % BYTES) {
+                            n++; /* plus 1 not fully used line */
+                        }
+                        if(current_line != n) {
+                            current_line = n;
+                        } else {
+                            beep();
+                        }
+                    }
+                    update_all_lines(VIEW,WLINES);
+                    break;
+            case KEY_HOME: /*ScrollHome();*/
+                    if (current_line > 1)
+                    {
+                        current_line = 1;
+                        update_all_lines(VIEW,WLINES-1);
+                    } else {
+                        beep(); 
+                    }            
+                    break;
+            case KEY_END: /*ScrollEnd();*/
+                fstat(fd,&fdstat);
+                if (fdstat.st_size >= BYTES * 2) {
+                    current_line = (fdstat.st_size - BYTES) / BYTES;
+                }
+                else
+                    beep();
+                update_all_lines(VIEW,WLINES);
+                break;
+            case 'L' & 0x1f: 
+                clearok(stdscr,TRUE);
+                RefreshWindow(stdscr);
+                break;
+            default: break;
+        }
     }
     Print( stdscr, 0, 0, "Path: ", MENU_COLOR );
     delwin(VIEW);
@@ -915,5 +999,8 @@
     touchwin(stdscr);
     wnoutrefresh(stdscr);
     close(fd);
+    resize_request = resize_done;
+    resize_done = FALSE;
     return 0;
 }
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ytree-2.08/ytree-2.08.lsm 
new/ytree-2.09/ytree-2.08.lsm
--- old/ytree-2.08/ytree-2.08.lsm       2024-04-05 14:24:38.000000000 +0200
+++ new/ytree-2.09/ytree-2.08.lsm       1970-01-01 01:00:00.000000000 +0100
@@ -1,18 +0,0 @@
-Begin4
-Title:         ytree-2.08
-Version:       2.08
-Entered-date:  2024-03-17
-Description:   Ytree is a nifty filemanager similar to xtree.
-               With some helper-applications (zip/zoo/tar/rpm etc.)
-               you can also browse archive files. Viewers for
-               "special" files are configurable (*.wav, *.gif etc.).
-               Even the commands/menus are now user configurable.
-               For a screenshot visit http://www.han.de/~werner/ytree.html
-Keywords:      file manager, browser, xtree
-Author:                wer...@frolix.han.de (Werner Bregulla)
-Maintained-by: wer...@frolix.han.de (Werner Bregulla)
-Primary-site:  http://www.han.de/~werner/ytree.html
-               ytree-2.08.tar.gz
-               ytree-2.08.lsm
-Copying-policy:        GPL
-End
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ytree-2.08/ytree-2.09.lsm 
new/ytree-2.09/ytree-2.09.lsm
--- old/ytree-2.08/ytree-2.09.lsm       1970-01-01 01:00:00.000000000 +0100
+++ new/ytree-2.09/ytree-2.09.lsm       2024-05-27 19:21:37.000000000 +0200
@@ -0,0 +1,18 @@
+Begin4
+Title:         ytree-2.09
+Version:       2.09
+Entered-date:  2024-05-27
+Description:   Ytree is a nifty filemanager similar to xtree.
+               With some helper-applications (zip/zoo/tar/rpm etc.)
+               you can also browse archive files. Viewers for
+               "special" files are configurable (*.wav, *.gif etc.).
+               Even the commands/menus are now user configurable.
+               For a screenshot visit http://www.han.de/~werner/ytree.html
+Keywords:      file manager, browser, xtree
+Author:                wer...@frolix.han.de (Werner Bregulla)
+Maintained-by: wer...@frolix.han.de (Werner Bregulla)
+Primary-site:  http://www.han.de/~werner/ytree.html
+               ytree-2.09.tar.gz
+               ytree-2.09.lsm
+Copying-policy:        GPL
+End
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ytree-2.08/ytree.h new/ytree-2.09/ytree.h
--- old/ytree-2.08/ytree.h      2024-04-05 14:24:38.000000000 +0200
+++ new/ytree-2.09/ytree.h      2024-05-27 19:20:04.000000000 +0200
@@ -1088,6 +1088,7 @@
 extern LONGLONG AtoLL(char* cptr);
 extern void DisplayTree(WINDOW *win, int start_entry_no, int hilight_no);
 extern void ReCreateWindows(void);
+extern int  WGetch(WINDOW *win);
 extern int  Getch(void);
 extern int  DirUserMode(DirEntry *dir_entry, int ch);
 extern int  FileUserMode(FileEntryList *file_entry_list, int ch);

Reply via email to