All of lore.kernel.org
 help / color / mirror / Atom feed
* fbutils
@ 2003-12-22  1:32 John Zielinski
  2003-12-22 22:42 ` fbutils Alexander Kern
  2003-12-23  6:11 ` fbutils John Zielinski
  0 siblings, 2 replies; 11+ messages in thread
From: John Zielinski @ 2003-12-22  1:32 UTC (permalink / raw)
  To: linux-fbdev-devel

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

Here's a patch to get fbutils from the CVS working if anyone else wants 
to play around with them.

John


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

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-09 14:45:37.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
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-21 20:20:29.000000000 -0500
@@ -29,7 +29,6 @@
 
 static bool Opt_version = false;
 static bool Opt_verbose = false;
-static bool Opt_quiet = false;
 static const char *Opt_debug = NULL;
 const char *Opt_modedb = NULL;
 
@@ -39,7 +38,6 @@
     { ID_HELP, 'h', "help", NULL, 0 },
     { 0, 'V', "version", &Opt_version, 0 },
     { 0, 'v', "verbose", &Opt_verbose, 0 },
-    { 0, 'q', "quiet", &Opt_quiet, 0 },
 };
 
 u_int DebugMask = 0;
@@ -50,18 +48,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/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-13 20:25:28.000000000 -0500
@@ -118,63 +118,117 @@
     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)
 {
-    //
-
-    u_int hstep = 8, vstep = 2;
+    bool changed = false;
+//    u_int hstep = 8, vstep = 2;
 
-    if (Modify_xres)
-	{} // vmode.xres = strtoul(Modify_xres, NULL, 0);
-    if (Modify_yres)
-	{} // vmode.yres = strtoul(Modify_yres, NULL, 0);
-    if (Modify_vxres)
-	{} // vmode.vxres = strtoul(Modify_vxres, NULL, 0);
-    if (Modify_vyres)
-	{} // vmode.vyres = strtoul(Modify_vyres, NULL, 0);
-    if (Modify_depth)
-	{} // vmode.depth = strtoul(Modify_depth, NULL, 0);
-    if (Modify_accel)
-	{} // vmode.accel_flags = atoboolean(Modify_accel) ? FB_ACCELF_TEXT : 0;
-    if (Modify_pixclock)
-	{} // vmode.pixclock = strtoul(Modify_pixclock, NULL, 0);
-    if (Modify_left)
-	{} // vmode.left = strtoul(Modify_left, NULL, 0);
-    if (Modify_right)
-	{} // vmode.right = strtoul(Modify_right, NULL, 0);
-    if (Modify_upper)
-	{} // vmode.upper = strtoul(Modify_upper, NULL, 0);
-    if (Modify_lower)
-	{} // vmode.lower = strtoul(Modify_lower, NULL, 0);
-    if (Modify_hslen)
-	{} // vmode.hslen = strtoul(Modify_hslen, NULL, 0);
-    if (Modify_vslen)
-	{} // vmode.vslen = strtoul(Modify_vslen, NULL, 0);
-    if (Modify_hsync)
-	{} // vmode.hsync = atoboolean(Modify_hsync);
-    if (Modify_vsync)
-	{} // vmode.vsync = atoboolean(Modify_vsync);
-    if (Modify_csync)
-	{} // vmode.csync = atoboolean(Modify_csync);
-    if (Modify_gsync)
-	{} // vmode.gsync = atoboolean(Modify_gsync);
-    if (Modify_extsync)
-	{} // vmode.extsync = atoboolean(Modify_extsync);
-    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_xres) {
+	mode.xres = strtoul(Modify_xres, NULL, 0);
+	changed = true;
+    }
+    if (Modify_yres) {
+	mode.yres = strtoul(Modify_yres, NULL, 0);
+	changed = true;
+    }
+    if (Modify_vxres) {
+	mode.xres_virtual = strtoul(Modify_vxres, NULL, 0);
+	changed = true;
+    }
+    if (Modify_vyres) {
+	mode.yres_virtual = strtoul(Modify_vyres, NULL, 0);
+	changed = true;
+    }
+    if (Modify_depth) {
+	mode.bits_per_pixel = strtoul(Modify_depth, NULL, 0);
+	changed = true;
+    }
+    if (Modify_accel) {
+	atoboolean(Modify_accel) ? mode.accel_flags |= FB_ACCELF_TEXT : mode.accel_flags &= ~FB_ACCELF_TEXT;
+	changed = true;
+    }
+    if (Modify_pixclock) {
+	mode.pixclock = strtoul(Modify_pixclock, NULL, 0);
+	changed = true;
+    }
+    if (Modify_left) {
+	mode.left_margin = strtoul(Modify_left, NULL, 0);
+	changed = true;
+    }
+    if (Modify_right) {
+	mode.right_margin = strtoul(Modify_right, NULL, 0);
+	changed = true;
+    }
+    if (Modify_upper) {
+	mode.upper_margin = strtoul(Modify_upper, NULL, 0);
+	changed = true;
+    }
+    if (Modify_lower) {
+	mode.lower_margin = strtoul(Modify_lower, NULL, 0);
+	changed = true;
+    }
+    if (Modify_hslen) {
+	mode.hsync_len = strtoul(Modify_hslen, NULL, 0);
+	changed = true;
+    }
+    if (Modify_vslen) {
+	mode.vsync_len = strtoul(Modify_vslen, NULL, 0);
+	changed = true;
+    }
+    if (Modify_hsync) {
+	atoboolean(Modify_hsync) ? mode.sync |= FB_SYNC_HOR_HIGH_ACT : mode.sync &= ~FB_SYNC_HOR_HIGH_ACT;
+	changed = true;
+    }
+    if (Modify_vsync) {
+	atoboolean(Modify_vsync) ? mode.sync |= FB_SYNC_VERT_HIGH_ACT : mode.sync &= ~FB_SYNC_VERT_HIGH_ACT; 
+	changed = true;
+    }
+    if (Modify_csync) {
+	atoboolean(Modify_csync) ? mode.sync |= FB_SYNC_COMP_HIGH_ACT : mode.sync &= ~FB_SYNC_COMP_HIGH_ACT;
+	changed = true;
+    }
+    if (Modify_gsync) {
+	atoboolean(Modify_gsync) ? mode.sync |= FB_SYNC_ON_GREEN : mode.sync &= ~FB_SYNC_ON_GREEN;
+	changed = true;
+    }
+    if (Modify_extsync) {
+	atoboolean(Modify_extsync) ? mode.sync |= FB_SYNC_EXT : mode.sync &= ~FB_SYNC_EXT;
+	changed = true;
+    }
+    if (Modify_bcast) {
+	atoboolean(Modify_bcast) ? mode.sync |= FB_SYNC_BROADCAST : mode.sync &= ~FB_SYNC_BROADCAST;
+	changed = true;
+    }
+    if (Modify_laced) {
+	mode.vmode &= ~FB_VMODE_MASK;	
+	mode.vmode = atoboolean(Modify_laced) ? FB_VMODE_INTERLACED : 0;
+	changed = true;
+    }
+    else if (Modify_double) {
+	mode.vmode &= ~FB_VMODE_MASK;	
+	mode.vmode = atoboolean(Modify_double) ? FB_VMODE_DOUBLE : 0;
+	changed = true;
+    }
+    if (Modify_step) {
+	//hstep = vstep = strtoul(Modify_step, NULL, 0);
+	//changed = true;
+    }
     if (Modify_move) {
-	{} //
+	//changed = true;
     }
-    return false;
+    return changed;
 }
 
 
@@ -243,6 +297,8 @@
 {
     int id;
     bool changed;
+    bool setmode;
+    Videomode *mode;
 
     //  Parse the Options
 
@@ -267,30 +323,38 @@
 
     FrameBuffer fb(Opt_fb);
 
-    if (Opt_info) {
-	FixScreenInfo fix;
-	fix.Get(fb);
-	fix.Print();
-    }
-    Videomode *mode;
-    if (Opt_modename) {
-	ReadDatabase();
-	if (Opt_dump)
-	    DumpDatabase();
-	mode = Videomodes.Find(Opt_modename);
-    } else {
-	VarScreenInfo var;
-	var.Get(fb);
-	mode = new Videomode(var);
-	mode->Dump();
-    }
-
-    changed = ModifyVideomode(*mode);
-
-    if (changed && !Opt_just_print) {
-	VarScreenInfo var(*mode);
-	var.Set(fb);
-    }
+    ReadDatabase();
 
-    exit(0);
+    if (Opt_dump) {
+        DumpDatabase();
+    } else {	    
+	if (Opt_info) {
+	    FixScreenInfo fix;
+	    fix.Get(fb);
+	    fix.Print();
+	}
+	
+	if (Opt_modename) {
+	    mode = Videomodes.Find(Opt_modename);
+	    if( mode == NULL ) {
+		printf( "\nMode %s not found.\n\n", Opt_modename );
+		return 1;
+	    }
+	    setmode = true;
+        } else {
+    	    VarScreenInfo var;
+	    var.Get(fb);
+	    mode = new Videomode(var);
+	    setmode = false;
+	}
+
+	changed = ModifyVideomode(*mode);
+        mode->Dump();
+
+	if ((setmode || changed) && !Opt_just_print) {
+	    VarScreenInfo var(*mode);
+	    var.Set(fb);
+        }
+    }
+    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-21 20:22:20.000000000 -0500
@@ -19,6 +19,12 @@
 	virtual void Dump(bool in_list = false) 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 +63,9 @@
 	void Clear(void);
 	void Print(const char *indent = "") const;
 	virtual void Dump(bool in_list = false) const;
+	bool BitfieldsAreNZ(void) const;
+	bool IsGrayscale(void) const;
+	bool IsNonStd(void) const;
 
 	__u32 bits_per_pixel;
 	__u32 grayscale;
@@ -150,6 +159,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 +209,24 @@
     memset(this, 0, sizeof(*this));
 }
 
+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)
 {}
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-11-27 01:33:58.000000000 -0500
@@ -20,7 +20,7 @@
 
 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-09 16:56:06.000000000 -0500
@@ -34,18 +34,14 @@
     { "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 },
     { "", -1, 0 }
 };
 
@@ -110,7 +106,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 +145,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-09 16:56:57.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,7 +25,6 @@
 extern void yyerror(const char *fmt, ...)
     __attribute__((noreturn, format (printf, 1, 2)));
 
-
 static GeometryNode *_GeometryNode = NULL;
 static FormatNode *_FormatNode = NULL;
 
@@ -37,9 +36,9 @@
 
 %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 +64,7 @@
     //  Screen Geometries
 
 geometry_section
-    : // empty
-    | GEOMETRY named_geometry
+    : GEOMETRY named_geometry
     | GEOMETRY OPENB geometries CLOSEB
     ;
 
@@ -107,16 +105,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 +157,7 @@
     //  Pixel Formats
 
 format_section
-    : // empty
-    | FORMAT named_format
+    : FORMAT named_format
     | FORMAT OPENB formats CLOSEB
     ;
 
@@ -150,12 +177,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 +237,10 @@
 format_ref
     : format_name
     | format
+    ;
 
 format_name
     : STRING
-    | format
 	{
 	    const char *s = (const char *)$1;
 	    _FormatNode = Formats.Find(s);
@@ -196,8 +264,7 @@
     //  Video Modes
 
 mode_section
-    : // empty
-    | MODE named_mode
+    : MODE named_mode
     | MODE OPENB modes CLOSEB
     ;
 
@@ -247,8 +314,7 @@
     //  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-09 17:18:38.000000000 -0500
@@ -46,6 +46,18 @@
     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("}");
 }
 
@@ -88,11 +100,21 @@
 
 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" );
 }
 
 void FormatNode::Dump(bool in_list) const
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-11-27 01:33:46.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"
@@ -43,7 +44,7 @@
 
     //  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;

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: fbutils
  2003-12-22 22:42 ` fbutils Alexander Kern
@ 2003-12-22 16:21   ` Geert Uytterhoeven
  2003-12-22 22:12     ` fbutils John Zielinski
  2003-12-22 21:42   ` fbutils John Zielinski
  1 sibling, 1 reply; 11+ messages in thread
From: Geert Uytterhoeven @ 2003-12-22 16:21 UTC (permalink / raw)
  To: Alexander Kern; +Cc: fbdev, John Zielinski

On Mon, 22 Dec 2003, Alexander Kern wrote:
> Am Montag, 22. Dezember 2003 02:32 schrieb John Zielinski:
> > Here's a patch to get fbutils from the CVS working if anyone else wants
> > to play around with them.

Thanks John!

> > John
> Have you ./configure for it ? I'm wonder, that this package does not have
> classic build system.

I started fbutils in 1999, but I never finished it.

In fact I never thought anyone would finish it ;-)

> P.S. You spoked also about program named "fbtest". Where I can find it?

CVS module fbtest in linux-fbdev CVS at SourceForge, next to fbutils.

> I have implement accelerated imageblt for mach64. It works good for boot logo
> and console.

Nice!

> "make menuconfig" works also good, but "mc" completely sucks.

That may be a generic fbcon bug...

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds


-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills.  Sign up for IBM's
Free Linux Tutorials.  Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: fbutils
  2003-12-22 22:42 ` fbutils Alexander Kern
  2003-12-22 16:21   ` fbutils Geert Uytterhoeven
@ 2003-12-22 21:42   ` John Zielinski
  1 sibling, 0 replies; 11+ messages in thread
From: John Zielinski @ 2003-12-22 21:42 UTC (permalink / raw)
  To: Alexander Kern; +Cc: fbdev

Alexander Kern wrote:

>Have you ./configure for it ? I'm wonder, that this package does not have
>classic build system.
>
>  
>
Unfortunately no.  My cross platform skills are serverly lacking.

>P.S. You spoked also about program named "fbtest". Where I can find it?
>
>  
>
I got it from the source forge CVS and I posted a minor patch for it on 
the list.

John




-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills.  Sign up for IBM's
Free Linux Tutorials.  Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: fbutils
  2003-12-22 16:21   ` fbutils Geert Uytterhoeven
@ 2003-12-22 22:12     ` John Zielinski
  0 siblings, 0 replies; 11+ messages in thread
From: John Zielinski @ 2003-12-22 22:12 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: Alexander Kern, fbdev

Geert Uytterhoeven wrote:

>On Mon, 22 Dec 2003, Alexander Kern wrote:
>  
>
>>Am Montag, 22. Dezember 2003 02:32 schrieb John Zielinski:
>>    
>>
>>>Here's a patch to get fbutils from the CVS working if anyone else wants
>>>to play around with them.
>>>      
>>>
>
>Thanks John!
>  
>
>  
>
No problem. 

>I started fbutils in 1999, but I never finished it.
>
>In fact I never thought anyone would finish it ;-)
>  
>
>
It was either that or keep rebooting every time I wanted to play with 
some video mode settings.  :)  

That patch basically got it to the functional stage.  The command line 
options work and all sections of the database file can now be used.  
Changing resolutions doesn't quite work because of some kernel bugs I 
mentioned before and having a different resolution on each virtual 
terminal is also broken in the kernel.  With a working fbset I can look 
into these bugs now.

Hopefully by tonight I'll have another patch ready with the rest of the 
changes I've made to fbutils.  I've made the help text match the actual 
command line arguments and I'm getting the last of them to work.  After 
that patch we can put it in the finished category.

John




-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills.  Sign up for IBM's
Free Linux Tutorials.  Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: fbutils
  2003-12-22  1:32 fbutils John Zielinski
@ 2003-12-22 22:42 ` Alexander Kern
  2003-12-22 16:21   ` fbutils Geert Uytterhoeven
  2003-12-22 21:42   ` fbutils John Zielinski
  2003-12-23  6:11 ` fbutils John Zielinski
  1 sibling, 2 replies; 11+ messages in thread
From: Alexander Kern @ 2003-12-22 22:42 UTC (permalink / raw)
  To: fbdev; +Cc: John Zielinski

Am Montag, 22. Dezember 2003 02:32 schrieb John Zielinski:
> Here's a patch to get fbutils from the CVS working if anyone else wants
> to play around with them.
>
> John
Have you ./configure for it ? I'm wonder, that this package does not have
classic build system.

Regards Alex

P.S. You spoked also about program named "fbtest". Where I can find it?
I have implement accelerated imageblt for mach64. It works good for boot logo 
and console.
"make menuconfig" works also good, but "mc" completely sucks. 



-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills.  Sign up for IBM's
Free Linux Tutorials.  Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: fbutils
  2003-12-22  1:32 fbutils John Zielinski
  2003-12-22 22:42 ` fbutils Alexander Kern
@ 2003-12-23  6:11 ` John Zielinski
  2004-01-06 13:22   ` fbutils Geert Uytterhoeven
  1 sibling, 1 reply; 11+ messages in thread
From: John Zielinski @ 2003-12-23  6:11 UTC (permalink / raw)
  To: linux-fbdev-devel

[-- 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;

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: fbutils
  2003-12-23  6:11 ` fbutils John Zielinski
@ 2004-01-06 13:22   ` Geert Uytterhoeven
  2004-01-08  2:26     ` fbutils John Zielinski
  0 siblings, 1 reply; 11+ messages in thread
From: Geert Uytterhoeven @ 2004-01-06 13:22 UTC (permalink / raw)
  To: John Zielinski; +Cc: Linux Frame Buffer Device Development

On Tue, 23 Dec 2003, John Zielinski wrote:
> 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.

Thanks!

I need these patches to:
  - accept the included etc/modes as a valid config file
  - kill a warning

If these are OK, I'll check everything in (someday :-)

--- fbutils-john-2/etc/modes	2004-01-04 15:38:38.000000000 +0100
+++ fbutils/etc/modes	2004-01-04 15:33:21.000000000 +0100
@@ -14,7 +14,7 @@
     "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+ }
+	{ 800 600 25000 88 40 23 1 128 4 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
--- fbutils-john-2/fbset/fbset.C	2004-01-04 15:38:38.000000000 +0100
+++ fbutils/fbset/fbset.C	2004-01-04 15:42:02.000000000 +0100
@@ -259,8 +259,8 @@

     //  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();

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds


-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills.  Sign up for IBM's
Free Linux Tutorials.  Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: fbutils
  2004-01-06 13:22   ` fbutils Geert Uytterhoeven
@ 2004-01-08  2:26     ` John Zielinski
  0 siblings, 0 replies; 11+ messages in thread
From: John Zielinski @ 2004-01-08  2:26 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: Linux Frame Buffer Device Development

Geert Uytterhoeven wrote:

>--- fbutils-john-2/etc/modes	2004-01-04 15:38:38.000000000 +0100
>+++ fbutils/etc/modes	2004-01-04 15:33:21.000000000 +0100
>@@ -14,7 +14,7 @@
>     "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+ }
>+	{ 800 600 25000 88 40 23 1 128 4 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
>  
>

Woops.  I changed that in my /etc/fb/modes file but forgot to update the 
one in the source package.

>--- fbutils-john-2/fbset/fbset.C	2004-01-04 15:38:38.000000000 +0100
>+++ fbutils/fbset/fbset.C	2004-01-04 15:42:02.000000000 +0100
>@@ -259,8 +259,8 @@
>
>     //  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();
>
>  
>
Already cought that one.  Don't know why I changed it in the first 
place.  That must have been a late night session or something.  :)

I still have a couple of  command line options that need finishing.  
I'll have another updated patch with those in the next few days.  I've 
been extremely busy lately: holidays, email server dying, Prince of 
Persia....

John




-------------------------------------------------------
This SF.net email is sponsored by: Perforce Software.
Perforce is the Fast Software Configuration Management System offering
advanced branching capabilities and atomic changes on 50+ platforms.
Free Eval! http://www.perforce.com/perforce/loadprog.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: fbutils
  2004-06-22 19:51 ` fbutils Geert Uytterhoeven
@ 2004-06-23 11:25   ` Andrew Walrond
  0 siblings, 0 replies; 11+ messages in thread
From: Andrew Walrond @ 2004-06-23 11:25 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: Linux Frame Buffer Device Development

On Tuesday 22 Jun 2004 20:51, Geert Uytterhoeven wrote:
>
> CVS module `fbutils' in linux-fbdev's CVS at SourceForge:
>
>     http://sourceforge.net/cvs/?group_id=908
>

Thanks Geert, I'll pull from cvs.

Andrew


-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
digital self defense, top technical experts, no vendor pitches, 
unmatched networking opportunities. Visit www.blackhat.com

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: fbutils
  2004-06-22 15:52 fbutils Andrew Walrond
@ 2004-06-22 19:51 ` Geert Uytterhoeven
  2004-06-23 11:25   ` fbutils Andrew Walrond
  0 siblings, 1 reply; 11+ messages in thread
From: Geert Uytterhoeven @ 2004-06-22 19:51 UTC (permalink / raw)
  To: Andrew Walrond; +Cc: Linux Frame Buffer Device Development

On Tue, 22 Jun 2004, Andrew Walrond wrote:
> Is this really the newest version of fbutils?
>
>   http://home.tvd.be/cr26864/Linux/fbdev/fbutils_19990802.tar.gz

No.

> Is there a newer version maintained somewhere?

CVS module `fbutils' in linux-fbdev's CVS at SourceForge:

    http://sourceforge.net/cvs/?group_id=908

Thanks for reminding me, I updated the link on my webpage.

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds


-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
digital self defense, top technical experts, no vendor pitches, 
unmatched networking opportunities. Visit www.blackhat.com

^ permalink raw reply	[flat|nested] 11+ messages in thread

* fbutils
@ 2004-06-22 15:52 Andrew Walrond
  2004-06-22 19:51 ` fbutils Geert Uytterhoeven
  0 siblings, 1 reply; 11+ messages in thread
From: Andrew Walrond @ 2004-06-22 15:52 UTC (permalink / raw)
  To: linux-fbdev-devel

Is this really the newest version of fbutils?

  http://home.tvd.be/cr26864/Linux/fbdev/fbutils_19990802.tar.gz

Is there a newer version maintained somewhere?

Andrew Walrond


-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
digital self defense, top technical experts, no vendor pitches, 
unmatched networking opportunities. Visit www.blackhat.com

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2004-06-23 10:29 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 ` fbutils John Zielinski
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

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.