All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Zielinski <grim@undead.cc>
To: linux-fbdev-devel@lists.sourceforge.net
Subject: Re: fbutils
Date: Tue, 23 Dec 2003 01:11:56 -0500	[thread overview]
Message-ID: <3FE7DCAC.8000204@undead.cc> (raw)
In-Reply-To: <3FE649BF.30501@undead.cc>

[-- Attachment #1: Type: text/plain, Size: 132 bytes --]

I didn't get as much done as I've hoped but there's a few important 
fixes so I'll repost early.  Apply to a fresh CVS copy.

John


[-- Attachment #2: patch.fbutils2 --]
[-- Type: text/plain, Size: 38598 bytes --]

diff -urNX dontdiff fbutils.old/con2fbmap/con2fbmap.C fbutils/con2fbmap/con2fbmap.C
--- fbutils.old/con2fbmap/con2fbmap.C	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/con2fbmap/con2fbmap.C	2003-12-23 00:32:16.000000000 -0500
@@ -13,6 +13,7 @@
 
 bool Opt_version = false;
 bool Opt_verbose = false;
+bool Opt_quiet = false;
 const char *Opt_debug = NULL;
 const char *Opt_fb = DEFAULT_FRAMEBUFFER;
 const char *Opt_console = NULL;
diff -urNX dontdiff fbutils.old/etc/modes fbutils/etc/modes
--- fbutils.old/etc/modes	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/etc/modes	2003-12-21 22:43:56.000000000 -0500
@@ -7,20 +7,20 @@
 	{ 800 600 27777 128 24 22 1 72 2 }
     "1024x768@87"	# 1024x768 @ 87 Hz interlaced, 35.5 kHz hsync
 	{ 1024 768 22271 56 24 33 8 160 8 interlace }
-#   "640x400@85"	# 640x400 @ 85 Hz, 37.86 kHz hsync
-#	{ 640 400 31746 96 32 41 1 64 3 vsync+ }
+    "640x400@85"	# 640x400 @ 85 Hz, 37.86 kHz hsync
+	{ 640 400 31746 96 32 41 1 64 3 vsync+ }
     "640x480@72"	# 640x480 @ 72 Hz, 36.5 kHz hsync
 	{ 640 480 31746 144 40 30 8 40 3 }
     "640x480@75"	# 640x480 @ 75 Hz, 37.50 kHz hsync
 	{ 640 480 31746 120 16 16 1 64 3 }
-#   "800x600@60"	# 800x600 @ 60 Hz, 37.8 kHz hsync
-#	{ 800 600 25000 88 40 23 1 128 4 0 hsync+ vsync+ }
+    "800x600@60"	# 800x600 @ 60 Hz, 37.8 kHz hsync
+	{ 800 600 25000 88 40 23 1 128 4 0 hsync+ vsync+ }
     "640x480@85"	# 640x480 @ 85 Hz, 43.27 kHz hsync
 	{ 640 480 27777 80 56 25 1 56 3 }
     "1152x864@89"	# 1152x864 @ 89 Hz interlaced, 44 kHz hsync
 	{ 1152 864 15384 96 16 110 1 216 10 interlace }
-#   "800x600@72"	# 800x600 @ 72 Hz, 48.0 kHz hsync
-#	{ 800 600 20000 64 56 23 37 120 6 hsync+ vsync+ }
+    "800x600@72"	# 800x600 @ 72 Hz, 48.0 kHz hsync
+	{ 800 600 20000 64 56 23 37 120 6 hsync+ vsync+ }
     "1024x768@60"	# 1024x768 @ 60 Hz, 48.4 kHz hsync
 	{ 1024 768 15384 168 8 29 3 144 6 }
     "640x480@100"	# 640x480 @ 100 Hz, 53.01 kHz hsync
@@ -47,8 +47,8 @@
 	{ 1152 864 9090 228 88 32 0 84 12 }
     "1280x1024@70"	# 1280x1024 @ 70 Hz, 74.59 kHz hsync
 	{ 1280 1024 7905 224 32 28 8 160 8 }
-#   "1600x1200@60"	# 1600x1200 @ 60Hz, 75.00 kHz hsync
-#	{ 1600 1200 6172 304 64 46 1 192 3 hsync+ vsync+ }
+    "1600x1200@60"	# 1600x1200 @ 60Hz, 75.00 kHz hsync
+	{ 1600 1200 6172 304 64 46 1 192 3 hsync+ vsync+ }
     "1152x864@84"	# 1152x864 @ 84 Hz, 76.0 kHz hsync
 	{ 1152 864 7407 184 312 32 0 128 12 }
     "1280x1024@74"	# 1280x1024 @ 74 Hz, 78.85 kHz hsync
@@ -61,18 +61,18 @@
 	{ 1600 1200 5291 304 64 46 1 192 3 }
     "1152x864@100"	# 1152x864 @ 100 Hz, 89.62 kHz hsync
 	{ 1152 864 7264 224 32 17 2 128 19 }
-#   "1280x1024@85"	# 1280x1024 @ 85 Hz, 91.15 kHz hsync
-#	{ 1280 1024 6349 224 64 44 1 160 3 hsync+ vsync+ }
-#   "1600x1200@75"	# 1600x1200 @ 75 Hz, 93.75 kHz hsync
-#	{ 1600 1200 4938 304 64 46 1 192 3 hsync+ vsync+ }
-#   "1600x1200@85"	# 1600x1200 @ 85 Hz, 105.77 kHz hsync
-#	{ 1600 1200 4545 272 16 37 4 192 3 hsync+ vsync+ }
+    "1280x1024@85"	# 1280x1024 @ 85 Hz, 91.15 kHz hsync
+	{ 1280 1024 6349 224 64 44 1 160 3 hsync+ vsync+ }
+    "1600x1200@75"	# 1600x1200 @ 75 Hz, 93.75 kHz hsync
+	{ 1600 1200 4938 304 64 46 1 192 3 hsync+ vsync+ }
+    "1600x1200@85"	# 1600x1200 @ 85 Hz, 105.77 kHz hsync
+	{ 1600 1200 4545 272 16 37 4 192 3 hsync+ vsync+ }
     "1280x1024@100"	# 1280x1024 @ 100 Hz, 107.16 kHz hsync
 	{ 1280 1024 5502 256 32 26 7 128 15 }
-#   "1800x1440@64"	# 1800x1440 @ 64Hz, 96.15 kHz hsync 
-#	{ 1800 1440 4347 304 96 46 1 192 3 hsync+ vsync+ }
-#   "1800x1440@70"	# 1800x1440 @ 70Hz, 104.52 kHz hsync 
-#	{ 1800 1440 4000 304 96 46 1 192 3 hsync+ vsync+ }
+    "1800x1440@64"	# 1800x1440 @ 64Hz, 96.15 kHz hsync 
+	{ 1800 1440 4347 304 96 46 1 192 3 hsync+ vsync+ }
+    "1800x1440@70"	# 1800x1440 @ 70Hz, 104.52 kHz hsync 
+	{ 1800 1440 4000 304 96 46 1 192 3 hsync+ vsync+ }
     "512x384@78"	# 512x384 @ 78 Hz, 31.50 kHz hsync
 	{ 512 384 49603 48 16 16 1 64 3 }
     "512x384@85"	# 512x384 @ 85 Hz, 34.38 kHz hsync
@@ -100,11 +100,11 @@
 }
 
 format {
-#   "8bpp" { 8 }
-#   "15bpp" { 16 0:5:0 0:5:0 0:5:0 0:0:0 }
-#   "16bpp" { 16 0:5:0 0:6:0 0:5:0 0:0:0 }
-#   "24bpp" { 24 0:8:0 0:8:0 0:8:0 0:0:0 }
-#   "32bpp" { 32 0:8:0 0:8:0 0:8:0 0:0:0 }
+   "8bpp" { 8 }
+   "15bpp" { 16 0:5:0 0:5:0 0:5:0 0:0:0 }
+   "16bpp" { 16 0:5:0 0:6:0 0:5:0 0:0:0 }
+   "24bpp" { 24 0:8:0 0:8:0 0:8:0 0:0:0 }
+   "32bpp" { 32 0:8:0 0:8:0 0:8:0 0:0:0 }
 }
 
 mode {
diff -urNX dontdiff fbutils.old/fbcmap/fbcmap.C fbutils/fbcmap/fbcmap.C
--- fbutils.old/fbcmap/fbcmap.C	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/fbcmap/fbcmap.C	2003-12-23 00:31:07.000000000 -0500
@@ -16,6 +16,7 @@
 
 bool Opt_version = false;
 bool Opt_verbose = false;
+bool Opt_quiet = false;
 const char *Opt_debug = NULL;
 const char *Opt_fb = DEFAULT_FRAMEBUFFER;
 const char *Opt_length = NULL;
diff -urNX dontdiff fbutils.old/fbconvert/fbconvert.C fbutils/fbconvert/fbconvert.C
--- fbutils.old/fbconvert/fbconvert.C	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/fbconvert/fbconvert.C	2003-12-23 00:32:35.000000000 -0500
@@ -27,9 +27,9 @@
 extern int y2parse(void);
 
 
-static bool Opt_version = false;
-static bool Opt_verbose = false;
-static bool Opt_quiet = false;
+bool Opt_version = false;
+bool Opt_verbose = false;
+bool Opt_quiet = false;
 static const char *Opt_debug = NULL;
 const char *Opt_modedb = NULL;
 
@@ -50,18 +50,12 @@
 static void Usage(void)
 {
     puts(VERSION);
-    Die("\nUsage: %s [options] [mode]\n\n"
+    Die("\nUsage: %s [options] modedb\n\n"
 	"Valid options:\n"
 	"  General options:\n"
 	"    -h, --help         : display this usage information\n"
-	"    --test             : don't change, just test whether the mode is "
-				 "valid\n"
-	"    -s, --show         : display video mode settings\n"
-	"    -i, --info         : display all frame buffer information\n"
 	"    -v, --verbose      : verbose mode\n"
 	"    -V, --version      : print version information\n"
-	"    -x, --xfree86      : XFree86 compatibility mode\n"
-	"    -a, --all          : change all virtual consoles on this device\n"
 	"n", ProgramName);
 }
 
diff -urNX dontdiff fbutils.old/fbconvert/modes.y fbutils/fbconvert/modes.y
--- fbutils.old/fbconvert/modes.y	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/fbconvert/modes.y	2003-12-22 00:40:34.000000000 -0500
@@ -108,7 +108,7 @@
     virtual_.xres_virtual = vmode->vxres;
     virtual_.yres_virtual = vmode->vyres;
 
-    Videomode *node = new Videomode(vmode->name, geometry, format, &virtual_);
+    Videomode *node = new Videomode(vmode->name, geometry, format, virtual_);
     node->accel_flags = vmode->accel_flags;
     Videomodes.Add(node);
 }
diff -urNX dontdiff fbutils.old/fbset/fbset.C fbutils/fbset/fbset.C
--- fbutils.old/fbset/fbset.C	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/fbset/fbset.C	2003-12-23 00:49:10.000000000 -0500
@@ -105,7 +105,7 @@
     //  Function Prototypes
 
 static void ReadDatabase(void);
-static bool ModifyVideomode(Videomode &mode);
+static void ModifyVideomode(Videomode &mode);
 
 
     //  Read the Video Mode Database
@@ -118,63 +118,70 @@
     ReadDatabase(Opt_modedb);
 }
 
+    // Convert string to bool
+
+static bool atoboolean( const char *opt )
+{
+    if (strcasecmp(opt, "true") == 0) return true;
+    if (strcasecmp(opt, "yes") == 0) return true;
+    if (strcasecmp(opt, "1") == 0) return true;
+    return false;
+}
 
     //  Modify a Video Mode
 
-static bool ModifyVideomode(Videomode &mode)
+static void ModifyVideomode(Videomode &mode)
 {
-    //
-
-    u_int hstep = 8, vstep = 2;
+//    u_int hstep = 8, vstep = 2;
 
     if (Modify_xres)
-	{} // vmode.xres = strtoul(Modify_xres, NULL, 0);
+	mode.xres = strtoul(Modify_xres, NULL, 0);
     if (Modify_yres)
-	{} // vmode.yres = strtoul(Modify_yres, NULL, 0);
+	mode.yres = strtoul(Modify_yres, NULL, 0);
     if (Modify_vxres)
-	{} // vmode.vxres = strtoul(Modify_vxres, NULL, 0);
+	mode.xres_virtual = strtoul(Modify_vxres, NULL, 0);
     if (Modify_vyres)
-	{} // vmode.vyres = strtoul(Modify_vyres, NULL, 0);
+	mode.yres_virtual = strtoul(Modify_vyres, NULL, 0);
     if (Modify_depth)
-	{} // vmode.depth = strtoul(Modify_depth, NULL, 0);
+	mode.bits_per_pixel = strtoul(Modify_depth, NULL, 0);
     if (Modify_accel)
-	{} // vmode.accel_flags = atoboolean(Modify_accel) ? FB_ACCELF_TEXT : 0;
+	atoboolean(Modify_accel) ? mode.accel_flags |= FB_ACCELF_TEXT : mode.accel_flags &= ~FB_ACCELF_TEXT;
     if (Modify_pixclock)
-	{} // vmode.pixclock = strtoul(Modify_pixclock, NULL, 0);
+	mode.pixclock = strtoul(Modify_pixclock, NULL, 0);
     if (Modify_left)
-	{} // vmode.left = strtoul(Modify_left, NULL, 0);
+	mode.left_margin = strtoul(Modify_left, NULL, 0);
     if (Modify_right)
-	{} // vmode.right = strtoul(Modify_right, NULL, 0);
+	mode.right_margin = strtoul(Modify_right, NULL, 0);
     if (Modify_upper)
-	{} // vmode.upper = strtoul(Modify_upper, NULL, 0);
+	mode.upper_margin = strtoul(Modify_upper, NULL, 0);
     if (Modify_lower)
-	{} // vmode.lower = strtoul(Modify_lower, NULL, 0);
+	mode.lower_margin = strtoul(Modify_lower, NULL, 0);
     if (Modify_hslen)
-	{} // vmode.hslen = strtoul(Modify_hslen, NULL, 0);
+	mode.hsync_len = strtoul(Modify_hslen, NULL, 0);
     if (Modify_vslen)
-	{} // vmode.vslen = strtoul(Modify_vslen, NULL, 0);
+	mode.vsync_len = strtoul(Modify_vslen, NULL, 0);
     if (Modify_hsync)
-	{} // vmode.hsync = atoboolean(Modify_hsync);
+	atoboolean(Modify_hsync) ? mode.sync |= FB_SYNC_HOR_HIGH_ACT : mode.sync &= ~FB_SYNC_HOR_HIGH_ACT;
     if (Modify_vsync)
-	{} // vmode.vsync = atoboolean(Modify_vsync);
+	atoboolean(Modify_vsync) ? mode.sync |= FB_SYNC_VERT_HIGH_ACT : mode.sync &= ~FB_SYNC_VERT_HIGH_ACT; 
     if (Modify_csync)
-	{} // vmode.csync = atoboolean(Modify_csync);
+	atoboolean(Modify_csync) ? mode.sync |= FB_SYNC_COMP_HIGH_ACT : mode.sync &= ~FB_SYNC_COMP_HIGH_ACT;
     if (Modify_gsync)
-	{} // vmode.gsync = atoboolean(Modify_gsync);
+	atoboolean(Modify_gsync) ? mode.sync |= FB_SYNC_ON_GREEN : mode.sync &= ~FB_SYNC_ON_GREEN;
     if (Modify_extsync)
-	{} // vmode.extsync = atoboolean(Modify_extsync);
+	atoboolean(Modify_extsync) ? mode.sync |= FB_SYNC_EXT : mode.sync &= ~FB_SYNC_EXT;
     if (Modify_bcast)
-	{} // vmode.bcast = atoboolean(Modify_bcast);
-    if (Modify_laced)
-	{} // vmode.laced = atoboolean(Modify_laced);
-    if (Modify_double)
-	{} // vmode.dblscan = atoboolean(Modify_double);
-    if (Modify_step)
-	hstep = vstep = strtoul(Modify_step, NULL, 0);
-    if (Modify_move) {
-	{} //
+	atoboolean(Modify_bcast) ? mode.sync |= FB_SYNC_BROADCAST : mode.sync &= ~FB_SYNC_BROADCAST;
+    if (Modify_laced) {
+	mode.vmode &= ~FB_VMODE_MASK;	
+	mode.vmode = atoboolean(Modify_laced) ? FB_VMODE_INTERLACED : 0;
     }
-    return false;
+    else if (Modify_double) {
+	mode.vmode &= ~FB_VMODE_MASK;	
+	mode.vmode = atoboolean(Modify_double) ? FB_VMODE_DOUBLE : 0;
+    }
+//    if (Modify_step) 
+//    if (Modify_move) 
 }
 
 
@@ -186,53 +193,56 @@
     Die("\nUsage: %s [options] [mode]\n\n"
 	"Valid options:\n"
 	"  General options:\n"
-	"    -h, --help         : display this usage information\n"
-	"    --test             : don't change, just test whether the mode is "
-				 "valid\n"
-	"    -s, --show         : display video mode settings\n"
-	"    -i, --info         : display all frame buffer information\n"
-	"    -v, --verbose      : verbose mode\n"
-	"    -V, --version      : print version information\n"
-	"    -x, --xfree86      : XFree86 compatibility mode\n"
-	"    -a, --all          : change all virtual consoles on this device\n"
+	"    -h, --help           : display this usage information\n"
+//	"    --test               : don't change, just test whether the mode is "
+//				    "valid\n"
+	"    -s, --show           : display video mode settings\n"
+	"    -n, --just-print     : don't do anything, just print results\n"
+	"    -i, --info           : display all frame buffer information\n"
+	"    -v, --verbose        : verbose mode\n"
+	"    -q, --quiet          : quiet mode\n"
+	"    -V, --version        : print version information\n"
+//	"    --xfree86            : XFree86 compatibility mode\n"
+//	"    -a, --all            : change all virtual consoles on this device\n"
 	"  Frame buffer special device nodes:\n"
-	"    -fb <device>       : processed frame buffer device\n"
-	"                         (default is %s)\n"
+	"    -f, --frame-buffer   : processed frame buffer device\n"
+	"               <device>  : (default is %s)\n"
 	"  Video mode database:\n"
-	"    -db <file>         : video mode database file\n"
-	"                         (default is %s)\n"
+	"    -m, --mode-db <file> : video mode database file\n"
+	"                           (default is %s)\n"
+	"    -d, --dump           : dump database\n"
 	"  Display geometry:\n"
-	"    -xres <value>      : horizontal resolution (in pixels)\n"
-	"    -yres <value>      : vertical resolution (in pixels)\n"
-	"    -vxres <value>     : virtual horizontal resolution (in pixels)\n"
-	"    -vyres <value>     : virtual vertical resolution (in pixels)\n"
-	"    -depth <value>     : display depth (in bits per pixel)\n"
-	"    -g, --geometry ... : set all geometry parameters at once\n"
+	"    -x, --xres <value>   : horizontal resolution (in pixels)\n"
+	"    -y, --yres <value>   : vertical resolution (in pixels)\n"
+	"    --vxres <value>      : virtual horizontal resolution (in pixels)\n"
+	"    --vyres <value>      : virtual vertical resolution (in pixels)\n"
+	"    -b, --bpp <value>    : display depth (in bits per pixel)\n"
+//	"    -g, --geometry ...   : set all geometry parameters at once\n"
 	"  Display timings:\n"
-	"    -pixclock <value>  : pixel clock (in picoseconds)\n"
-	"    -left <value>      : left margin (in pixels)\n"
-	"    -right <value>     : right margin (in pixels)\n"
-	"    -upper <value>     : upper margin (in pixel lines)\n"
-	"    -lower <value>     : lower margin (in pixel lines)\n"
-	"    -hslen <value>     : horizontal sync length (in pixels)\n"
-	"    -vslen <value>     : vertical sync length (in pixel lines)\n"
-	"    -t, --timings ...  : set all timing parameters at once\n"
+	"    --pixclock <value>   : pixel clock (in picoseconds)\n"
+	"    --left <value>       : left margin (in pixels)\n"
+	"    --right <value>      : right margin (in pixels)\n"
+	"    --upper <value>      : upper margin (in pixel lines)\n"
+	"    --lower <value>      : lower margin (in pixel lines)\n"
+	"    --hslen <value>      : horizontal sync length (in pixels)\n"
+	"    --vslen <value>      : vertical sync length (in pixel lines)\n"
+//	"    -t, --timings ...    : set all timing parameters at once\n"
 	"  Display flags:\n"
-	"    -accel <value>     : hardware text acceleration enable (false or "
-				 "true)\n"
-	"    -hsync <value>     : horizontal sync polarity (low or high)\n"
-	"    -vsync <value>     : vertical sync polarity (low or high)\n"
-	"    -csync <value>     : composite sync polarity (low or high)\n"
-	"    -gsync <value>     : synch on green (false or true)\n"
-	"    -extsync <value>   : external sync enable (false or true)\n"
-	"    -bcast <value>     : broadcast enable (false or true)\n"
-	"    -laced <value>     : interlace enable (false or true)\n"
-	"    -double <value>    : doublescan enable (false or true)\n"
-	"  Display positioning:\n"
-	"    -move <direction>  : move the visible part (left, right, up or "
-				 "down)\n"
-	"    -step <value>      : step increment (in pixels or pixel lines)\n"
-	"                         (default is 8 horizontal, 2 vertical)\n",
+	"    -a, --accel <value>  : hardware text acceleration enable (false or "
+				    "true)\n"
+	"    --hsync <value>      : horizontal sync polarity (low or high)\n"
+	"    --vsync <value>      : vertical sync polarity (low or high)\n"
+	"    --csync <value>      : composite sync polarity (low or high)\n"
+	"    --gsync <value>      : synch on green (false or true)\n"
+	"    --extsync <value>    : external sync enable (false or true)\n"
+	"    --bcast <value>      : broadcast enable (false or true)\n"
+	"    --laced <value>      : interlace enable (false or true)\n"
+	"    --double <value>     : doublescan enable (false or true)\n"
+//	"  Display positioning:\n"
+//	"    --move <direction>   : move the visible part (left, right, up or "
+//				    "down)\n"
+//	"    --step <value>       : step increment (in pixels or pixel lines)\n"
+,//	"                           (default is 8 horizontal, 2 vertical)\n",
 	ProgramName, Opt_fb, Opt_modedb);
 }
 
@@ -243,11 +253,14 @@
 {
     int id;
     bool changed;
+    bool setmode;
+    Videomode const *mode;
+    Videomode *newmode;
 
     //  Parse the Options
 
-    while ((id = GetNextOption(argc, argv, Options,
-			       sizeof(Options)/sizeof(*Options))))
+    while (id = GetNextOption(argc, argv, Options,
+			       sizeof(Options)/sizeof(*Options))) {
 	switch (id) {
 	    case ID_HELP:
 		Usage();
@@ -259,6 +272,7 @@
 		argc--;
 		argv++;
 	}
+    }
     if (Opt_debug)
 	DebugMask = strtoul(Opt_debug, NULL, 0);
 
@@ -267,30 +281,42 @@
 
     FrameBuffer fb(Opt_fb);
 
+    ReadDatabase();
+
+    if (Opt_dump) {
+        DumpDatabase();
+	return 0;
+    } 
+
     if (Opt_info) {
-	FixScreenInfo fix;
-	fix.Get(fb);
-	fix.Print();
+        FixScreenInfo fix;
+        fix.Get(fb);
+        fix.Print();
     }
-    Videomode *mode;
+	
     if (Opt_modename) {
-	ReadDatabase();
-	if (Opt_dump)
-	    DumpDatabase();
-	mode = Videomodes.Find(Opt_modename);
+        mode = Videomodes.Find(Opt_modename);
+        if (!mode) 
+	    Die( "\nMode %s not found.\n\n", Opt_modename );
+	setmode = true;
     } else {
 	VarScreenInfo var;
 	var.Get(fb);
 	mode = new Videomode(var);
-	mode->Dump();
+	setmode = false;
     }
 
-    changed = ModifyVideomode(*mode);
-
-    if (changed && !Opt_just_print) {
-	VarScreenInfo var(*mode);
-	var.Set(fb);
+    newmode = new Videomode(*mode);
+    ModifyVideomode(*newmode);
+    changed = (*newmode != *mode);
+
+    if ((setmode || changed) && !Opt_just_print) {
+        VarScreenInfo var(*newmode);
+        var.Set(fb);
     }
-
-    exit(0);
+    
+    if (Opt_show) 
+        Videomodes.TryToFind(changed ? newmode : mode)->Dump();
+    
+    return 0;
 }
diff -urNX dontdiff fbutils.old/include/database.h fbutils/include/database.h
--- fbutils.old/include/database.h	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/include/database.h	2003-12-23 00:04:18.000000000 -0500
@@ -17,8 +17,16 @@
 	void Print(const char *indent = "") const;
 	void XFree86(const char *indent = "") const;
 	virtual void Dump(bool in_list = false) const;
+	bool operator==(const Geometry &geometry) const;
+	bool operator!=(const Geometry &geometry) const;
 	bool IsInterlaced(void) const;
 	bool IsDoubleScan(void) const;
+	bool IsSyncHorPos(void) const;
+	bool IsSyncVertPos(void) const;
+	bool IsSyncCompPos(void) const;
+	bool IsSyncOnGreen(void) const;
+	bool IsSyncExt(void) const;
+	bool IsSyncBcast(void) const;
 
 	__u32 xres;
 	__u32 yres;
@@ -57,6 +65,11 @@
 	void Clear(void);
 	void Print(const char *indent = "") const;
 	virtual void Dump(bool in_list = false) const;
+	bool operator==(const Format &format) const;
+	bool operator!=(const Format &format) const;
+	bool BitfieldsAreNZ(void) const;
+	bool IsGrayscale(void) const;
+	bool IsNonStd(void) const;
 
 	__u32 bits_per_pixel;
 	__u32 grayscale;
@@ -90,6 +103,8 @@
 	void Clear(void);
 	void Print(const char *indent = "") const;
 	void Dump(void) const;
+	bool operator==(const Virtual &v) const;
+	bool operator!=(const Virtual &v) const;
 
 	__u32 xres_virtual;
 	__u32 yres_virtual;
@@ -104,10 +119,17 @@
 		  public Virtual {
     public:
 	Videomode(const char *name, const Geometry &geometry,
-		  const Format &format, const Virtual *_virtual = NULL);
+		  const Format &format, const Virtual &_virtual);
 	Videomode(const VarScreenInfo &var);
+	Videomode(const Videomode &mode);
+	void SetAccel(__u32 _accel_flags);
+	void SetNames(const Node *geometry, const Node *format);
 	void Print(const char *indent = "") const;
 	void Dump(bool in_list = false) const;
+	int operator==(const Videomode &mode) const;
+	int operator!=(const Videomode &mode) const;
+	bool IsVirtual() const;
+	bool IsAccel() const;
 
     private:
 	void FillScanRates(void);
@@ -119,12 +141,16 @@
 	double PixelRate;
 	double HorizSync;
 	double VertSync;
+	
+	const char *geometry_name;
+	const char *format_name;
 };
 
 class VideomodeList : public List {
     public:
 	VideomodeList();
-	Videomode *Find(const char *name) const;
+	const Videomode *Find(const char *name) const;
+	const Videomode *TryToFind(const Videomode *mode) const;
 };
 
 
@@ -140,6 +166,11 @@
     memset(this, 0, sizeof(*this));
 }
 
+inline bool Geometry::operator!=(const Geometry &geometry) const
+{
+    return !operator==(geometry);
+}
+	
 inline bool Geometry::IsInterlaced(void) const
 {
     return (vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED;
@@ -150,6 +181,36 @@
     return (vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE;
 }
 
+inline bool Geometry::IsSyncHorPos(void) const
+{
+    return (sync & FB_SYNC_HOR_HIGH_ACT) == FB_SYNC_HOR_HIGH_ACT;
+}
+
+inline bool Geometry::IsSyncVertPos(void) const
+{
+    return (sync & FB_SYNC_VERT_HIGH_ACT) == FB_SYNC_VERT_HIGH_ACT;
+}
+
+inline bool Geometry::IsSyncCompPos(void) const
+{
+    return (sync & FB_SYNC_COMP_HIGH_ACT) == FB_SYNC_COMP_HIGH_ACT;
+}
+
+inline bool Geometry::IsSyncOnGreen(void) const
+{
+    return (sync & FB_SYNC_ON_GREEN) == FB_SYNC_ON_GREEN;
+}
+
+inline bool Geometry::IsSyncExt(void) const
+{
+    return (sync & FB_SYNC_EXT) == FB_SYNC_EXT;
+}
+
+inline bool Geometry::IsSyncBcast(void) const
+{
+    return (sync & FB_SYNC_BROADCAST) == FB_SYNC_BROADCAST;
+}
+
 inline GeometryNode::GeometryNode(const char *name,
 				  const Geometry &geometry)
     : Node(name), Geometry(geometry)
@@ -170,6 +231,29 @@
     memset(this, 0, sizeof(*this));
 }
 
+inline bool Format::operator!=(const Format &format) const
+{
+    return !operator==(format);
+}
+	
+inline bool Format::BitfieldsAreNZ(void) const
+{
+    return (red.offset | red.length | red.msb_right |
+	    green.offset | green.length | green.msb_right |
+	    blue.offset | blue.length | blue.msb_right |
+	    transp.offset | transp.length | transp.msb_right ) != 0;
+}
+
+inline bool Format::IsGrayscale(void) const
+{
+    return grayscale != 0;
+}
+
+inline bool Format::IsNonStd(void) const
+{
+    return nonstd != 0;
+}
+
 inline FormatNode::FormatNode(const char *name, const Format &format)
     : Node(name), Format(format)
 {}
@@ -189,7 +273,32 @@
     memset(this, 0, sizeof(*this));
 }
 
-inline Videomode *VideomodeList::Find(const char *name) const
+inline bool Virtual::operator!=(const Virtual &v) const
+{
+    return !operator==(v);
+}
+
+inline int Videomode::operator!=(const Videomode &mode) const
+{
+    return !operator==(mode);
+}
+	
+inline void Videomode::SetAccel(__u32 _accel_flags)
+{
+    accel_flags = _accel_flags;
+}
+	
+inline bool Videomode::IsVirtual(void) const
+{
+    return xres != xres_virtual || yres != yres_virtual;
+}
+
+inline bool Videomode::IsAccel(void) const
+{
+    return accel_flags & FB_ACCELF_TEXT;
+}
+
+inline const Videomode *VideomodeList::Find(const char *name) const
 {
     return (Videomode *)List::Find(name);
 }
diff -urNX dontdiff fbutils.old/include/list.h fbutils/include/list.h
--- fbutils.old/include/list.h	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/include/list.h	2003-12-22 00:05:44.000000000 -0500
@@ -48,6 +48,10 @@
     return Pred->Pred ? Pred : (Node *)NULL;
 }
 
+inline const char *Node::GetName(void) const
+{
+    return Name;
+}
 
     //	List Header
 
diff -urNX dontdiff fbutils.old/include/util.h fbutils/include/util.h
--- fbutils.old/include/util.h	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/include/util.h	2003-12-23 00:28:34.000000000 -0500
@@ -14,13 +14,14 @@
 
 
 extern const char *ProgramName;
+extern bool Opt_quiet;
 
 
     //  Function Prototypes
 
 extern void Die(const char *fmt,...) __attribute__((noreturn));
 extern void Warn(const char *fmt,...);
-extern int GetNextOption(int &argc, const char **&argv,
+extern int GetNextOption(int &argc, char **&argv,
 			 const struct option options[],
 			 const u_int num_options);
 
diff -urNX dontdiff fbutils.old/lib/config.l fbutils/lib/config.l
--- fbutils.old/lib/config.l	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/lib/config.l	2003-12-22 00:56:27.000000000 -0500
@@ -34,18 +34,16 @@
     { "geometry", GEOMETRY, 0 },
     { "format", FORMAT, 0 },
     { "mode", MODE, 0 },
-    { "hsync", HSYNC, 0 },
-    { "vsync", VSYNC, 0 },
-    { "csync", CSYNC, 0 },
+    { "hsync+", HSYNCP, 0 },
+    { "vsync+", VSYNCP, 0 },
+    { "csync+", CSYNCP, 0 },
     { "gsync", GSYNC, 0 },
     { "extsync", EXTSYNC, 0 },
     { "broadcast", BCAST, 0 },
     { "interlace", LACED, 0 },
     { "doublescan", DOUBLE, 0 },
-    { "low", POLARITY, 0 },
-    { "high", POLARITY, 1 },
-    { "false", BOOL, 0 },
-    { "true", BOOL, 1 },
+    { "virtual", VIRTUAL, 0 },
+    { "accel", ACCEL, 0 },
     { "", -1, 0 }
 };
 
@@ -110,7 +108,7 @@
 
 %}
 
-keyword	[a-zA-Z][a-zA-Z0-9]*
+keyword	[a-zA-Z][a-zA-Z0-9\+]*
 int	[0-9]*
 string	\"[^\"\n]*\"
 comment	\#([^\n]*)
@@ -149,6 +147,10 @@
 \}		{
 		    return CLOSEB;
 		}
+		
+\:		{
+		    return COLON;
+		}
 
 {junk}		{
 		    yyerror("Invalid token `%s'\n", yytext);
diff -urNX dontdiff fbutils.old/lib/config.y fbutils/lib/config.y
--- fbutils.old/lib/config.y	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/lib/config.y	2003-12-22 01:00:27.000000000 -0500
@@ -1,4 +1,3 @@
-
 //  Linux Frame Buffer Device Configuration
 //
 //  ��� Copyright 1995-1999 by Geert Uytterhoeven <geert@linux-m68k.org>
@@ -13,6 +12,7 @@
 %{
 
 #define YYSTYPE		long
+#define YY_NO_UNPUT
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -25,21 +25,21 @@
 extern void yyerror(const char *fmt, ...)
     __attribute__((noreturn, format (printf, 1, 2)));
 
-
 static GeometryNode *_GeometryNode = NULL;
 static FormatNode *_FormatNode = NULL;
 
 static Geometry _Geometry;
 static Format _Format;
 static Virtual _Virtual;
+static __u32 _Accel_Flags = 0;
 
 %}
 
 %start file
 
-%token OPENB CLOSEB GEOMETRY FORMAT MODE ALIAS
-    HSYNC VSYNC CSYNC GSYNC EXTSYNC BCAST
-    LACED DOUBLE GRAYSCALE NONSTD ACCEL VIRTUAL POLARITY BOOL STRING INT
+%token OPENB CLOSEB COLON GEOMETRY FORMAT MODE ALIAS
+    HSYNCP VSYNCP CSYNCP GSYNC EXTSYNC BCAST
+    LACED DOUBLE GRAYSCALE NONSTD ACCEL VIRTUAL STRING INT
 
 %%
 
@@ -65,8 +65,7 @@
     //  Screen Geometries
 
 geometry_section
-    : // empty
-    | GEOMETRY named_geometry
+    : GEOMETRY named_geometry
     | GEOMETRY OPENB geometries CLOSEB
     ;
 
@@ -107,16 +106,46 @@
 
 geometry_option
     : LACED
+	{
+	    _Geometry.vmode |= FB_VMODE_INTERLACED;
+	}
     | DOUBLE
+	{
+	    _Geometry.vmode |= FB_VMODE_DOUBLE;
+	}
+    | HSYNCP
+	{
+	    _Geometry.sync |= FB_SYNC_HOR_HIGH_ACT;
+	}
+    | VSYNCP
+	{
+	    _Geometry.sync |= FB_SYNC_VERT_HIGH_ACT;
+	}
+    | CSYNCP
+	{
+	    _Geometry.sync |= FB_SYNC_COMP_HIGH_ACT;
+	}
+    | GSYNC
+	{
+	    _Geometry.sync |= FB_SYNC_ON_GREEN;
+	}
+    | EXTSYNC
+	{
+	    _Geometry.sync |= FB_SYNC_EXT;
+	}
+    | BCAST
+	{
+	    _Geometry.sync |= FB_SYNC_BROADCAST;
+	}
     ;
 
 geometry_ref
     : geometry_name
     | geometry
+    ;
 
 geometry_name
     : STRING
-    | geometry
 	{
 	    const char *s = (const char *)$1;
 	    _GeometryNode = Geometries.Find(s);
@@ -129,8 +158,7 @@
     //  Pixel Formats
 
 format_section
-    : // empty
-    | FORMAT named_format
+    : FORMAT named_format
     | FORMAT OPENB formats CLOSEB
     ;
 
@@ -150,12 +178,53 @@
     ;
 
 format
-    : OPENB INT format_options OPENB
+    : OPENB INT format_bitfields format_options CLOSEB
 	{
 	    _Format.bits_per_pixel = $2;
 	}
     ;
 
+format_bitfields
+    : // empty
+    | format_red_bitfield format_green_bitfield format_blue_bitfield format_transp_bitfield
+    ;
+    
+format_red_bitfield
+    : INT COLON INT COLON INT
+	{
+	    _Format.red.offset = $1;
+	    _Format.red.length = $3;
+	    _Format.red.msb_right = $5;
+	}
+    ;
+
+format_green_bitfield
+    : INT COLON INT COLON INT
+	{
+	    _Format.green.offset = $1;
+	    _Format.green.length = $3;
+	    _Format.green.msb_right = $5;
+	}
+    ;
+
+format_blue_bitfield
+    : INT COLON INT COLON INT
+	{
+	    _Format.blue.offset = $1;
+	    _Format.blue.length = $3;
+	    _Format.blue.msb_right = $5;
+	}
+    ;
+
+format_transp_bitfield
+    : INT COLON INT COLON INT
+	{
+	    _Format.transp.offset = $1;
+	    _Format.transp.length = $3;
+	    _Format.transp.msb_right = $5;
+	}
+    ;
+
 format_options
     : // empty
     | format_options format_option
@@ -169,10 +238,10 @@
 format_ref
     : format_name
     | format
+    ;
 
 format_name
     : STRING
-    | format
 	{
 	    const char *s = (const char *)$1;
 	    _FormatNode = Formats.Find(s);
@@ -185,10 +254,11 @@
     //  Virtual Screen Dimensions
 
 virtual
-    : VIRTUAL INT INT
+    : // empty
+    | VIRTUAL INT INT
 	{
-	    _Virtual.xres_virtual = $1;
-	    _Virtual.yres_virtual = $2;
+	    _Virtual.xres_virtual = $2;
+	    _Virtual.yres_virtual = $3;
 	}
     ;
 
@@ -196,8 +266,7 @@
     //  Video Modes
 
 mode_section
-    : // empty
-    | MODE named_mode
+    : MODE named_mode
     | MODE OPENB modes CLOSEB
     ;
 
@@ -207,30 +276,22 @@
     ;
 
 named_mode
-    : STRING OPENB geometry_ref format_ref mode_options CLOSEB
-	{
-	    const char *s = (const char *)$1;
-	    Videomode *node = new Videomode(s,
-				_GeometryNode ? *_GeometryNode : _Geometry,
-				_FormatNode ? *_FormatNode : _Format);
-	    Videomodes.Add(node);
-	    _GeometryNode = NULL;
-	    _Geometry.Clear();
-	    _FormatNode = NULL;
-	    _Format.Clear();
-	}
-    | STRING OPENB geometry_ref format_ref virtual mode_options CLOSEB
+    : STRING OPENB geometry_ref format_ref virtual mode_options CLOSEB
 	{
 	    const char *s = (const char *)$1;
 	    Videomode *node = new Videomode(s,
 				_GeometryNode ? *_GeometryNode : _Geometry,
 				_FormatNode ? *_FormatNode : _Format,
-				&_Virtual);
+				_Virtual);
+	    node->SetAccel(_Accel_Flags);
+	    node->SetNames(_GeometryNode, _FormatNode);
 	    Videomodes.Add(node);
 	    _GeometryNode = NULL;
 	    _Geometry.Clear();
 	    _FormatNode = NULL;
 	    _Format.Clear();
+	    _Virtual.Clear();
+	    _Accel_Flags = 0;
 	}
     ;
 
@@ -241,14 +302,16 @@
 
 mode_option
     : ACCEL
+	{
+	    _Accel_Flags |= FB_ACCELF_TEXT;
+	}
     ;
 
 
     //  Aliases
 
 alias_section
-    : // empty
-    | ALIAS named_alias
+    : ALIAS named_alias
     | ALIAS OPENB aliases CLOSEB
     ;
 
diff -urNX dontdiff fbutils.old/lib/database.C fbutils/lib/database.C
--- fbutils.old/lib/database.C	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/lib/database.C	2003-12-23 01:03:30.000000000 -0500
@@ -46,9 +46,30 @@
     if (IsDoubleScan())
 	printf("doublescan ");
     // if (sync) ...
+    if (IsSyncHorPos())
+	printf("hsync+ ");
+    if (IsSyncVertPos())
+	printf("vsync+ ");
+    if (IsSyncCompPos())
+	printf("csync+ ");
+    if (IsSyncOnGreen())
+	printf("gsync ");
+    if (IsSyncExt())
+	printf("extsync ");
+    if (IsSyncBcast())
+	printf("broadcast ");
     puts("}");
 }
 
+bool Geometry::operator==(const Geometry &g) const
+{
+    return xres == g.xres && yres == g.yres && pixclock == g.pixclock &&
+	   left_margin == g.left_margin && right_margin == g.right_margin &&
+	   upper_margin == g.upper_margin && lower_margin == g.lower_margin &&
+	   hsync_len == g.hsync_len && vsync_len == g.vsync_len &&
+	   vmode == g.vmode && sync == g.sync;
+}	
+
 void GeometryNode::Dump(bool in_list) const
 {
     printf("%s\"%s\" ", in_list ? "    " : "geometry ",
@@ -88,11 +109,40 @@
 
 void Format::Dump(bool in_list) const
 {
-    printf("{ %d %d:%d:%d %d:%d:%d %d:%d:%d %d:%d:%d %d %d }\n",
-           bits_per_pixel, red.offset, red.length, red.msb_right, green.offset,
-	   green.length, green.msb_right, blue.offset, blue.length,
-	   blue.msb_right, transp.offset, transp.length, transp.msb_right,
-	   grayscale, nonstd);
+    printf("{ %d ", bits_per_pixel );
+
+    if (BitfieldsAreNZ()) 
+        printf("%d:%d:%d %d:%d:%d %d:%d:%d %d:%d:%d ",
+               red.offset, red.length, red.msb_right, green.offset,
+	       green.length, green.msb_right, blue.offset, blue.length,
+	       blue.msb_right, transp.offset, transp.length, transp.msb_right );
+    
+    if (IsGrayscale())
+	printf( "grayscale " );
+	
+    if (IsNonStd()) 
+	printf( "nonstd %d ", nonstd );
+	
+    printf( "}\n" );
+}
+
+bool Format::operator==(const Format& format) const
+{
+    return bits_per_pixel == format.bits_per_pixel &&
+	   grayscale == format.grayscale &&
+	   nonstd == nonstd; /* &&
+	   red.length == format.red.length &&
+	   red.offset == format.red.offset && 
+	   red.msb_right == format.red.msb_right &&    
+	   green.length == format.green.length &&
+	   green.offset == format.green.offset &&
+	   green.msb_right == format.green.msb_right &&    
+	   blue.length == format.blue.length &&
+	   blue.offset == format.blue.offset && 
+	   blue.msb_right == format.blue.msb_right &&    
+	   transp.length == format.transp.length &&
+	   transp.offset == format.transp.offset &&
+	   transp.msb_right == format.transp.msb_right;*/
 }
 
 void FormatNode::Dump(bool in_list) const
@@ -125,21 +175,27 @@
     printf("virtual %d %d\n", xres_virtual, yres_virtual);
 }
 
+bool Virtual::operator==(const Virtual &v) const
+{
+    return xres_virtual == v.xres_virtual &&
+	   yres_virtual == v.yres_virtual;
+}
 
     //  List of Video Modes
 
 Videomode::Videomode(const char *name, const Geometry &geometry,
-		     const Format &format, const Virtual *virtual_)
-    : Node(name), Geometry(geometry), Format(format), PixelRate(0.0),
-      HorizSync(0), VertSync(0)
-{
-    if (virtual_)
-	*((Virtual *)this) = *virtual_;
-    else {
+		     const Format &format, const Virtual &virtual_)
+    : Node(name), Geometry(geometry), Format(format), Virtual(virtual_),
+      PixelRate(0.0), HorizSync(0), VertSync(0)
+{
+    if ( xres_virtual == 0 || yres_virtual == 0 ) {
 	xres_virtual = xres;
 	yres_virtual = yres;
     }
+    accel_flags = 0;
     FillScanRates();
+    geometry_name = NULL;
+    format_name = NULL;
 }
 
 Videomode::Videomode(const VarScreenInfo &var)
@@ -148,6 +204,28 @@
 {
     accel_flags = var.accel_flags;
     FillScanRates();
+    geometry_name = NULL;
+    format_name = NULL;
+}
+
+Videomode::Videomode(const Videomode &mode)
+    : Geometry(mode), Format(mode), Virtual(mode), PixelRate(0.0), HorizSync(0),
+      VertSync(0)
+{
+    accel_flags = mode.accel_flags;
+    PixelRate = mode.PixelRate;
+    HorizSync = mode.HorizSync;
+    VertSync = mode.VertSync;
+    geometry_name = mode.geometry_name;
+    format_name = mode.format_name;
+}
+
+void Videomode::SetNames(const Node *geometry, const Node *format)
+{
+    if (geometry)
+        geometry_name = geometry->GetName();
+    if (format)
+        format_name = format->GetName();
 }
 
 void Videomode::FillScanRates(void)
@@ -185,6 +263,7 @@
     ((Format *)this)->Print(indent2);
     printf("%sVirtual screen dimensions:\n", indent);
     ((Virtual *)this)->Print(indent2);
+    printf("%saccel_flags = %d\n", indent, accel_flags);
 }
 
 void Videomode::Dump(bool in_list) const
@@ -192,18 +271,46 @@
     printf("%s\"%s\" {\n", in_list ? "    " : "mode ",
 	   Name ? Name : "UNNAMED");
     printf(in_list ? "\t" : "    ");
-    Geometry::Dump();
-    printf(in_list ? "\t" : "    ");
-    Format::Dump();
+    if (geometry_name)
+	printf("\"%s\"\n", geometry_name);
+    else
+        Geometry::Dump();
     printf(in_list ? "\t" : "    ");
-    Virtual::Dump();
+    if (format_name)
+	printf("\"%s\"\n", format_name);
+    else
+        Format::Dump();
+    if (IsVirtual()) {
+        printf(in_list ? "\t" : "    ");
+	Virtual::Dump();
+    }
+    if (IsAccel()) 
+        printf( "%saccel\n", in_list ? "\t" : "    ");
     printf("%s}\n", in_list ? "    " : "");
 }
 
+int Videomode::operator==(const Videomode &mode) const
+{
+   return Geometry::operator==(mode) && Format::operator==(mode) && 
+	  Virtual::operator==(mode) && accel_flags == mode.accel_flags;
+}
+
 VideomodeList::VideomodeList()
     : List("mode")
 {}
 
+const Videomode *VideomodeList::TryToFind(const Videomode *mode) const
+{
+    const Videomode *dbmode;
+
+    for (dbmode = (Videomode *)GetHead(); dbmode; dbmode = (Videomode *)dbmode->GetNext()) {
+	if( *dbmode == *mode ) {
+	    return dbmode;
+	}
+    }
+    return mode;
+}
+
 VideomodeList Videomodes;
 
 
diff -urNX dontdiff fbutils.old/lib/framebuffer.C fbutils/lib/framebuffer.C
--- fbutils.old/lib/framebuffer.C	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/lib/framebuffer.C	2003-11-27 01:31:01.000000000 -0500
@@ -164,7 +164,7 @@
     }
 }
 
-void ColorMap::Print(const char *indent = "") const
+void ColorMap::Print(const char *indent) const
 {
     printf("start = %d\n", start);
     printf("len = %d\n", len);
@@ -191,7 +191,7 @@
 	Die("ioctl FBIOPUT_CON2FBMAP: %s\n", strerror(errno));
 }
 
-void Con2FBMap::Print(const char *indent = "") const
+void Con2FBMap::Print(const char *indent) const
 {
     printf("%sconsole %d -> fb %d\n", indent, console, framebuffer);
 }
diff -urNX dontdiff fbutils.old/lib/list.C fbutils/lib/list.C
--- fbutils.old/lib/list.C	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/lib/list.C	2003-11-27 01:28:40.000000000 -0500
@@ -1,4 +1,6 @@
 
+#include <string.h>
+
 #include "list.h"
 #include "util.h"
 
diff -urNX dontdiff fbutils.old/lib/util.C fbutils/lib/util.C
--- fbutils.old/lib/util.C	2001-08-06 13:28:23.000000000 -0400
+++ fbutils/lib/util.C	2003-12-23 00:28:01.000000000 -0500
@@ -5,6 +5,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
+#include <stdlib.h>
 #include <sys/ioctl.h>
 
 #include "util.h"
@@ -19,11 +20,12 @@
 {
     va_list ap;
 
-    fflush(stdout);
-    va_start(ap, fmt);
-    vfprintf(stderr, fmt, ap);
-    va_end(ap);
-
+    if (!Opt_quiet) {
+	fflush(stdout);
+	va_start(ap, fmt);
+	vfprintf(stderr, fmt, ap);
+	va_end(ap);
+    }
     exit(1);
 }
 
@@ -34,16 +36,18 @@
 {
     va_list ap;
 
-    fflush(stdout);
-    va_start(ap, fmt);
-    vfprintf(stderr, fmt, ap);
+    if (!Opt_quiet) {
+	fflush(stdout);
+	va_start(ap, fmt);
+	vfprintf(stderr, fmt, ap);
+    }
     va_end(ap);
 }
 
 
     //  Command Line Parameter Processing
 
-int GetNextOption(int &argc, const char **&argv,
+int GetNextOption(int &argc, char **&argv,
 		  const struct option options[], const u_int num_options)
 {
     static bool first = true;

  parent reply	other threads:[~2003-12-23  6:12 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-22  1:32 fbutils John Zielinski
2003-12-22 22:42 ` fbutils Alexander Kern
2003-12-22 16:21   ` fbutils Geert Uytterhoeven
2003-12-22 22:12     ` fbutils John Zielinski
2003-12-22 21:42   ` fbutils John Zielinski
2003-12-23  6:11 ` John Zielinski [this message]
2004-01-06 13:22   ` fbutils Geert Uytterhoeven
2004-01-08  2:26     ` fbutils John Zielinski
2004-06-22 15:52 fbutils Andrew Walrond
2004-06-22 19:51 ` fbutils Geert Uytterhoeven
2004-06-23 11:25   ` fbutils Andrew Walrond

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3FE7DCAC.8000204@undead.cc \
    --to=grim@undead.cc \
    --cc=linux-fbdev-devel@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.