On Wed, Sep 21, 2005 at 05:46:55PM +0200, Florian Ernst wrote:
> On Wed, Sep 21, 2005 at 03:19:46PM +0200, Yuri D'Elia wrote:
> > Yes, I saw the patch, I know it's not your fault, but enabling  
> 
> Oh, in a way it is, as I forwarded the corresponding wishlist bug to
> the upstream maintainer... ;)
> 
> > features conditionally is really poor programming. What if I provide  
> > a patch that adds a "--color" switch instead, like most other utilities?
> 
> That, of course, would be the most splendid solution.

So here's the patch-o-splendor.
Incidentally, this patch also fixes "hexedit --".
Upstream cc'ed.

diff -rud hexedit-1.2.11/configure.in hexedit/configure.in
--- hexedit-1.2.11/configure.in 2005-09-20 13:39:19.000000000 +0200
+++ hexedit/configure.in        2005-09-21 23:29:01.328032000 +0200
@@ -21,11 +21,6 @@
 AC_SUBST(SRCS)
 AC_SUBST(OTHER)
 
-AC_ARG_ENABLE(colors,
-  [  --enable-colors         enable colors (fruit salad)],
-  AC_DEFINE(ENABLE_COLORS,1,[Define if you want a colored (fruit salad) 
display])
-)
-
 dnl Enable GNU extensions on systems that have them.
 AH_VERBATIM([_GNU_SOURCE],
 [/* Enable GNU extensions on systems that have them.  */
diff -rud hexedit-1.2.11/display.c hexedit/display.c
--- hexedit-1.2.11/display.c    2005-09-20 14:36:29.000000000 +0200
+++ hexedit/display.c   2005-09-21 23:50:37.847911388 +0200
@@ -52,7 +52,7 @@
 
 int move_base(INT delta)
 {
-  if (option == bySector) {
+  if (mode == bySector) {
     if (delta > 0 && delta < page)
       delta = page;
     else if (delta < 0 && delta > -page)
@@ -69,7 +69,7 @@
   base = loc;
   readFile();
 
-  if (option != bySector && nbBytes < page - lineLength && base != 0) {
+  if (mode != bySector && nbBytes < page - lineLength && base != 0) {
     base -= myfloor(page - nbBytes - lineLength, lineLength);
     if (base < 0) base = 0;
     readFile();
@@ -103,29 +103,31 @@
 void initCurses(void)
 {
   initscr();
-#ifdef ENABLE_COLORS
-  start_color();
-  use_default_colors();
-  init_pair(1, COLOR_RED, -1);   /* null zeros */
-  init_pair(2, COLOR_GREEN, -1); /* control chars */
-  init_pair(3, COLOR_BLUE, -1);  /* extended chars */
-#endif
+
+  if (colored) {
+    start_color();
+    use_default_colors();
+    init_pair(1, COLOR_RED, -1);   /* null zeros */
+    init_pair(2, COLOR_GREEN, -1); /* control chars */
+    init_pair(3, COLOR_BLUE, -1);  /* extended chars */
+  }
+
   refresh();
   raw();
   noecho();
   keypad(stdscr, TRUE);
 
-  if (option == bySector) {
-    lineLength = options[bySector].lineLength;
-    page = options[bySector].page;
+  if (mode == bySector) {
+    lineLength = modes[bySector].lineLength;
+    page = modes[bySector].page;
     page = myfloor((LINES - 1) * lineLength, page);
-    blocSize = options[bySector].blocSize;
+    blocSize = modes[bySector].blocSize;
     if (computeLineSize() > COLS) DIE("%s: term is too small for sectored view 
(width)\n");
     if (page == 0) DIE("%s: term is too small for sectored view (height)\n");
-  } else { /* option == maximized */
+  } else { /* mode == maximized */
     if (LINES <= 4) DIE("%s: term is too small (height)\n");
 
-    blocSize = options[maximized].blocSize;
+    blocSize = modes[maximized].blocSize;
     for (lineLength = blocSize; computeLineSize() <= COLS; lineLength += 
blocSize);
     lineLength -= blocSize;
     if (lineLength == 0) DIE("%s: term is too small (width)\n");
@@ -170,26 +172,31 @@
   else i = '-';
   printw("-%c%c  %s       --0x%llX", i, i, baseName, base + cursor);
   if (MAX(fileSize, lastEditedLoc)) printw("/0x%llX", getfilesize());
-  if (option == bySector) printw("--sector %d", (base + cursor) / SECTOR_SIZE);
+  if (mode == bySector) printw("--sector %d", (base + cursor) / SECTOR_SIZE);
 
   move(cursor / lineLength, computeCursorXCurrentPos());
 }
 
 void displayLine(int offset, int max)
 {
-  int i;
+  int i, attr;
 
   PRINTW(("%08lX   ", (int) (base + offset)));
   for (i = offset; i < offset + lineLength; i++) {
     if (i > offset) MAXATTRPRINTW(bufferAttr[i] & MARKED, (((i - offset) % 
blocSize) ? " " : "  "));
     if (i < max) {
-      ATTRPRINTW(
-#ifdef ENABLE_COLORS
-                (buffer[i] == 0 ? COLOR_PAIR(1) :
-                 buffer[i] < ' ' ? COLOR_PAIR(2) : 
-                 buffer[i] >= 127 ? COLOR_PAIR(3) : 0) |
-#endif
-                bufferAttr[i], ("%02X", buffer[i]));
+      attr = bufferAttr[i];
+
+      if (colored) {
+       if (buffer[i] == 0)
+         attr |= COLOR_PAIR(1);
+       else if (buffer[i] < ' ')
+         attr |= COLOR_PAIR(2);
+       else if (buffer[i] >= 127)
+         attr |= COLOR_PAIR(3);
+      }
+
+      ATTRPRINTW(attr, ("%02X", buffer[i]));
     }
     else PRINTW(("  "));
   }
diff -rud hexedit-1.2.11/hexedit.1 hexedit/hexedit.1
--- hexedit-1.2.11/hexedit.1    2005-09-20 14:49:03.000000000 +0200
+++ hexedit/hexedit.1   2005-09-22 00:23:36.399951181 +0200
@@ -3,7 +3,7 @@
 hexedit \- view and edit files in hexadecimal or in ASCII
 .SH SYNOPSIS
 .I hexedit
-[\-s | \-\-sector] [\-m | \-\-maximize] [\-h | \-\-help] [filename]
+[\-s | \-\-sector] [\-m | \-\-maximize] [\-\-color] [\-h | \-\-help] [filename]
 .SH DESCRIPTION
 .LP
 .I hexedit
@@ -17,6 +17,9 @@
 .I "\-m, \-\-maximize"
 Try to maximize the display.
 .TP
+.I "\-\-color"
+Enable the patent pending Fruit-Salad(tm) color mode.
+.TP
 .I "\-h, \-\-help"
 Show the usage.
 .SH COMMANDS (quickly)
diff -rud hexedit-1.2.11/hexedit.c hexedit/hexedit.c
--- hexedit-1.2.11/hexedit.c    2004-01-20 10:25:58.000000000 +0100
+++ hexedit/hexedit.c   2005-09-22 00:11:25.291544981 +0200
@@ -34,12 +34,12 @@
 char *lastFindFile = NULL, *lastYankToAFile = NULL, *lastAskHexString = NULL, 
*lastAskAsciiString = NULL, *lastFillWithStringHexa = NULL, 
*lastFillWithStringAscii = NULL;
 
 
-optionParams options[LAST] = {
-  { 8, 16, 256, "-s", "--sector" },
-  { 4, 0, 0, "-m", "--maximize" },
-  { 0, 0, 0, "-h", "--help" },
+modeParams modes[LAST] = {
+  { 8, 16, 256 },
+  { 4, 0, 0 },
 };
-optionType option = maximized;
+modeType mode = maximized;
+int colored = FALSE;
 
 
 
/*******************************************************************************/
@@ -53,16 +53,18 @@
 
   for (; argc > 0; argv++, argc--) 
     {
-      recognized = FALSE;
-      for (i = 0; !recognized && i < LAST; i++) {
-       if (streq(*argv, options[i].shortOptionName) || 
-           streq(*argv, options[i].longOptionName)) {
-         if (i == helpOption) DIE(usage);
-         option = i;
-         recognized = TRUE;
-       }
-      }
-      if (!recognized) break;
+      if (streq(*argv, "-s") || streq(*argv, "--sector"))
+       mode = bySector;
+      else if (streq(*argv, "-m") || streq(*argv, "--maximize"))
+       mode = maximized;
+      else if (streq(*argv, "--color"))
+       colored = TRUE;
+      else if (streq(*argv, "--")) {
+       argv++; argc--;
+       break;
+      } else if (*argv[0] == '-')
+       DIE(usage)
+      else break;
     }
   if (argc > 1) DIE(usage);
 
diff -rud hexedit-1.2.11/hexedit.h hexedit/hexedit.h
--- hexedit-1.2.11/hexedit.h    2005-09-20 14:36:48.000000000 +0200
+++ hexedit/hexedit.h   2005-09-21 23:26:02.287924000 +0200
@@ -58,16 +58,18 @@
 
/*******************************************************************************/
 /* Configuration parameters */
 
/*******************************************************************************/
-typedef enum { bySector, maximized, helpOption, LAST } optionType;
+typedef enum { bySector, maximized, LAST } modeType;
 typedef struct {
   int blocSize, lineLength, page;
-  char *shortOptionName, *longOptionName;
-} optionParams;
+} modeParams;
 
-extern optionParams options[LAST];
-extern optionType option;
+extern modeParams modes[LAST];
+extern modeType mode;
+extern int colored;
 
-#define usage "usage: %s [-s | --sector] [-m | --maximize] [-h | --help] 
filename\n"
+#define usage "usage: %s [-s | --sector] [-m | --maximize] [--color] [-h | 
--help] filename\n"
+
+#define usage "usage: %s [-s | --sector] [-m | --maximize] [--color] [-h | 
--help] filename\n"
 #define pressAnyKey "(press any key)"
 
 
diff -rud hexedit-1.2.11/interact.c hexedit/interact.c
--- hexedit-1.2.11/interact.c   2005-09-20 14:57:11.000000000 +0200
+++ hexedit/interact.c  2005-09-21 23:50:59.275645129 +0200
@@ -112,7 +112,7 @@
 {
   INT s = getfilesize();
   cursorOffset = 0;
-  if (option == bySector) set_base(myfloor(s, page));
+  if (mode == bySector) set_base(myfloor(s, page));
   set_cursor(s);
 }
 
@@ -449,7 +449,7 @@
     case '\n':
     case '\r':
     case KEY_ENTER:
-      if (option == bySector) goto_sector(); else goto_char();
+      if (mode == bySector) goto_sector(); else goto_char();
       break;
 
     case CTRL('W'):

Reply via email to