changeset 12940:b205f8ca892a

Moved to the TOOLS directory.
author diego
date Tue, 03 Aug 2004 00:45:55 +0000
parents 9b44f32dae3f
children 876bcf984097
files TOOLS/TVout/Mon-640x400 TOOLS/TVout/Mon-640x480 TOOLS/TVout/TV-640x512 TOOLS/TVout/TV-640x528 TOOLS/TVout/TV-704x528 TOOLS/TVout/TV-704x576 TOOLS/TVout/TV-720x576 TOOLS/TVout/TV-720x576-old TOOLS/TVout/clean.sh TOOLS/TVout/cloning TOOLS/TVout/compile.sh TOOLS/TVout/con2fb/con2fb.c TOOLS/TVout/fbset.db TOOLS/TVout/fbset/INSTALL TOOLS/TVout/fbset/Makefile TOOLS/TVout/fbset/fb.h TOOLS/TVout/fbset/fb.modes.5 TOOLS/TVout/fbset/fbset.8 TOOLS/TVout/fbset/fbset.c TOOLS/TVout/fbset/fbset.h TOOLS/TVout/fbset/modeline2fb TOOLS/TVout/fbset/modes.l TOOLS/TVout/fbset/modes.y TOOLS/TVout/independ TOOLS/TVout/matroxfbtune TOOLS/TVout/matroxset/.cvsignore TOOLS/TVout/matroxset/Makefile TOOLS/TVout/matroxset/fb.h TOOLS/TVout/matroxset/matroxfb.h TOOLS/TVout/matroxset/matroxset.c TOOLS/TVout/matroxset/normal TOOLS/TVout/matroxset/swapit TOOLS/TVout/matroxset/swapped TOOLS/TVout/matroxtv TOOLS/TVout/modules TVout/Mon-640x400 TVout/Mon-640x480 TVout/TV-640x512 TVout/TV-640x528 TVout/TV-704x528 TVout/TV-704x576 TVout/TV-720x576 TVout/TV-720x576-old TVout/clean.sh TVout/cloning TVout/compile.sh TVout/con2fb/con2fb.c TVout/fbset.db TVout/fbset/INSTALL TVout/fbset/Makefile TVout/fbset/fb.h TVout/fbset/fb.modes.5 TVout/fbset/fbset.8 TVout/fbset/fbset.c TVout/fbset/fbset.h TVout/fbset/modeline2fb TVout/fbset/modes.l TVout/fbset/modes.y TVout/independ TVout/matroxfbtune TVout/matroxset/.cvsignore TVout/matroxset/Makefile TVout/matroxset/fb.h TVout/matroxset/matroxfb.h TVout/matroxset/matroxset.c TVout/matroxset/normal TVout/matroxset/swapit TVout/matroxset/swapped TVout/matroxtv TVout/modules
diffstat 70 files changed, 4019 insertions(+), 4019 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/Mon-640x400	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,3 @@
+
+fbset/fbset -fb /dev/fb1 -db fbset.db 640x400-60
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/Mon-640x480	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,3 @@
+
+fbset/fbset -fb /dev/fb1 -db fbset.db 640x480-60
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/TV-640x512	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,2 @@
+
+fbset/fbset -fb /dev/fb0 -left 60 -right 0 -upper 70 -lower 39 -hslen 76 -vslen 4 -xres 640 -yres 512 -bcast true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/TV-640x528	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,3 @@
+
+fbset/fbset -fb /dev/fb0 -left 40 -right 0 -upper 63 -lower 29 -hslen 56 -vslen 4 -xres 640 -yres 528 -vxres 640 -vyres 528 -depth 32 -laced false -bcast true
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/TV-704x528	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,3 @@
+
+fbset/fbset -fb /dev/fb0 -left 40 -right 0 -upper 63 -lower 29 -hslen 56 -vslen 4 -xres 640 -yres 528 -vxres 704 -vyres 528 -depth 32 -laced false -bcast true
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/TV-704x576	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,3 @@
+
+fbset/fbset -fb /dev/fb0 -left 42 -right 0 -upper 29 -lower 20 -hslen 46 -vslen 4 -xres 704 -yres 576 -vxres 704 -vyres 576 -depth 32 -laced false -bcast true
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/TV-720x576	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,3 @@
+
+fbset/fbset -fb /dev/fb0 -left 18 -right 0 -upper 39 -lower 10 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -depth 32 -laced false -bcast true
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/TV-720x576-old	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,3 @@
+
+fbset/fbset -fb /dev/fb0 -left 38 -right 0 -upper 29 -lower 20 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -depth 32 -laced false -bcast true
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/clean.sh	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,13 @@
+
+# Compile TVout tools
+
+rm -f con2fb/con2fb
+
+cd matroxset
+make clean
+cd ..
+
+cd fbset
+make clean
+cd ..
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/cloning	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,14 @@
+
+# SETUP TVout
+# Same picture on TV & Monitor
+
+# CRTC1 -> TVout & Monitor
+matroxset/matroxset -f /dev/fb1 -m 0
+matroxset/matroxset -f /dev/fb0 -m 3
+
+# Enable TV
+matroxset/matroxset 1
+
+# Keep consoles on CRTC1
+con2fb/con2fb /dev/fb0 /dev/tty1
+con2fb/con2fb /dev/fb0 /dev/tty2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/compile.sh	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,15 @@
+
+# Compile TVout tools
+
+cd con2fb
+gcc con2fb.c -o con2fb
+cd ..
+
+cd matroxset
+make
+cd ..
+
+cd fbset
+make
+cd ..
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/con2fb/con2fb.c	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,79 @@
+/* this is userspace utility which allows you to redirect console to another fb device 
+ * You can specify devices & consoles by both numbers and devices. Framebuffers numbers
+ * are zero based (/dev/fb0 ... ), consoles begins with 1 (/dev/tty1 ... )
+ */
+#include <linux/fb.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+int main(int argc, char* argv[]) {
+	struct fb_con2fbmap c2m;
+	char* fbPath;
+	u_int32_t con, fb;
+	char* e;
+	char* progname = strrchr(argv[0], '/');
+	int f;
+
+	if (progname)
+		progname++;
+	else
+		progname = argv[0];
+	if (argc < 3) {
+		fprintf(stderr, "usage: %s fbdev console\n", progname);
+		return 1;
+	}
+	fb = strtoul(argv[1], &e, 10);
+	if (*e) {
+		struct stat sbf;
+
+		if (stat(argv[1], &sbf)) {	
+			fprintf(stderr, "%s: are you sure that %s can be used to describe fbdev?\n", progname, argv[1]);
+			return 1;
+		}
+		if (!S_ISCHR(sbf.st_mode)) {
+			fprintf(stderr, "%s: %s must be character device\n", progname, argv[1]);
+			return 1;
+		}
+		fb = sbf.st_rdev & 0xFF;
+		if (fb >= 32)
+			fb >>= 5;
+		fbPath = argv[1];
+	} else 
+		fbPath = "/dev/fb0";
+	con = strtoul(argv[2], &e, 10);
+	if (*e) {
+		struct stat sbf;
+
+		if (stat(argv[2], &sbf)) {
+			fprintf(stderr, "%s: are you sure that %s can be used to describe vt?\n", progname, argv[2]);
+			return 1;
+		}
+		if (!S_ISCHR(sbf.st_mode)) {
+			fprintf(stderr, "%s: %s must be character device\n", progname, argv[2]);
+			return 1;
+		}
+		con = sbf.st_rdev & 0xFF;
+	}
+	c2m.console = con;
+	c2m.framebuffer = fb;
+	f = open(fbPath, O_RDWR);
+	if (f < 0) {
+		fprintf(stderr, "%s: Cannot open %s\n", progname, fbPath);
+		return 1;
+	}
+	if (ioctl(f, FBIOPUT_CON2FBMAP, &c2m)) {
+		fprintf(stderr, "%s: Cannot set console mapping\n", progname);
+		close(f);
+		return 1;
+	}
+	close(f);
+	return 0;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/fbset.db	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,34 @@
+
+# FBset mode database
+
+mode "640x480"                         # H: 33.78 kHz, V: 67.56 Hz
+   geometry 640 480 640 480 4
+   timings 35242 24 64 17 1 112 2
+endmode
+
+mode "640x480-60"
+    # D: 25.176 MHz, H: 31.469 kHz, V: 59.942 Hz
+    geometry 640 480 640 480 16
+    timings 39721 48 16 33 10 96 2
+    hsync high
+    accel true
+#    rgba 5/11,6/5,5/0,0/0
+endmode
+
+mode "640x400-60"
+    # D: 25.176 MHz, H: 31.469 kHz, V: 59.942 Hz
+    geometry 640 400 640 400 16
+    timings 39721 48 16 33 10 96 2
+    hsync high
+    accel true
+#    rgba 5/11,6/5,5/0,0/0
+endmode
+
+mode "vga70"
+    # H: 31.113 kHz, V: 69.294 Hz
+    geometry 640 400 640 400 4
+    timings 35242 64 96 35 12 112 2
+#    vsync high
+#    csync high
+endmode
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/fbset/INSTALL	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,20 @@
+
+
+			FBSET INSTALLATION GUIDE
+
+
+Change the current directory to the directory containing the fbset sources and
+type
+
+    make install
+
+This will create the fbset binary and install it, together with the manual
+pages. It also creates the standard frame buffer special device nodes.
+
+
+The etc subdirectory contains sample frame buffer mode definitions files. Copy
+one of them to /etc/fb.modes and edit it to your needs.
+
+
+Enjoy!
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/fbset/Makefile	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,41 @@
+#
+# Linux Frame Buffer Device Configuration
+#
+
+CFLAGS =	-Wall -O2 -I.
+BISON =		bison -d
+FLEX =		flex
+INSTALL =	install
+RM =		rm -f
+
+All:		fbset
+
+
+fbset:		fbset.o modes.tab.o lex.yy.o
+
+fbset.o:	fbset.c fbset.h fb.h
+modes.tab.o:	modes.tab.c fbset.h fb.h
+lex.yy.o:	lex.yy.c fbset.h modes.tab.h
+
+lex.yy.c:	modes.l
+		$(FLEX) modes.l
+
+modes.tab.c:	modes.y
+		$(BISON) modes.y
+
+install:	fbset
+		if [ -f /sbin/fbset ]; then rm /sbin/fbset; fi
+		$(INSTALL) fbset /usr/sbin
+		$(INSTALL) fbset.8 /usr/man/man8
+		$(INSTALL) fb.modes.5 /usr/man/man5
+		if [ ! -c /dev/fb0 ]; then mknod /dev/fb0 c 29 0; fi
+		if [ ! -c /dev/fb1 ]; then mknod /dev/fb1 c 29 32; fi
+		if [ ! -c /dev/fb2 ]; then mknod /dev/fb2 c 29 64; fi
+		if [ ! -c /dev/fb3 ]; then mknod /dev/fb3 c 29 96; fi
+		if [ ! -c /dev/fb4 ]; then mknod /dev/fb4 c 29 128; fi
+		if [ ! -c /dev/fb5 ]; then mknod /dev/fb5 c 29 160; fi
+		if [ ! -c /dev/fb6 ]; then mknod /dev/fb6 c 29 192; fi
+		if [ ! -c /dev/fb7 ]; then mknod /dev/fb7 c 29 224; fi
+
+clean:
+		$(RM) *.o fbset lex.yy.c modes.tab.c modes.tab.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/fbset/fb.h	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,497 @@
+#ifndef _LINUX_FB_H
+#define _LINUX_FB_H
+
+#include <asm/types.h>
+
+/* Definitions of frame buffers						*/
+
+#define FB_MAJOR	29
+
+#define FB_MODES_SHIFT		5	/* 32 modes per framebuffer */
+#define FB_NUM_MINORS		256	/* 256 Minors               */
+#define FB_MAX			(FB_NUM_MINORS / (1 << FB_MODES_SHIFT))
+#define GET_FB_IDX(node)	(MINOR(node) >> FB_MODES_SHIFT)
+
+/* ioctls
+   0x46 is 'F'								*/
+#define FBIOGET_VSCREENINFO	0x4600
+#define FBIOPUT_VSCREENINFO	0x4601
+#define FBIOGET_FSCREENINFO	0x4602
+#define FBIOGETCMAP		0x4604
+#define FBIOPUTCMAP		0x4605
+#define FBIOPAN_DISPLAY		0x4606
+/* 0x4607-0x460B are defined below */
+/* #define FBIOGET_MONITORSPEC	0x460C */
+/* #define FBIOPUT_MONITORSPEC	0x460D */
+/* #define FBIOSWITCH_MONIBIT	0x460E */
+#define FBIOGET_CON2FBMAP	0x460F
+#define FBIOPUT_CON2FBMAP	0x4610
+
+#define FB_TYPE_PACKED_PIXELS		0	/* Packed Pixels	*/
+#define FB_TYPE_PLANES			1	/* Non interleaved planes */
+#define FB_TYPE_INTERLEAVED_PLANES	2	/* Interleaved planes	*/
+#define FB_TYPE_TEXT			3	/* Text/attributes	*/
+#define FB_TYPE_VGA_PLANES		4	/* EGA/VGA planes	*/
+
+#define FB_AUX_TEXT_MDA		0	/* Monochrome text */
+#define FB_AUX_TEXT_CGA		1	/* CGA/EGA/VGA Color text */
+#define FB_AUX_TEXT_S3_MMIO	2	/* S3 MMIO fasttext */
+#define FB_AUX_TEXT_MGA_STEP16	3	/* MGA Millenium I: text, attr, 14 reserved bytes */
+#define FB_AUX_TEXT_MGA_STEP8	4	/* other MGAs:      text, attr,  6 reserved bytes */
+
+#define FB_AUX_VGA_PLANES_VGA4		0	/* 16 color planes (EGA/VGA) */
+#define FB_AUX_VGA_PLANES_CFB4		1	/* CFB4 in planes (VGA) */
+#define FB_AUX_VGA_PLANES_CFB8		2	/* CFB8 in planes (VGA) */
+
+#define FB_VISUAL_MONO01		0	/* Monochr. 1=Black 0=White */
+#define FB_VISUAL_MONO10		1	/* Monochr. 1=White 0=Black */
+#define FB_VISUAL_TRUECOLOR		2	/* True color	*/
+#define FB_VISUAL_PSEUDOCOLOR		3	/* Pseudo color (like atari) */
+#define FB_VISUAL_DIRECTCOLOR		4	/* Direct color */
+#define FB_VISUAL_STATIC_PSEUDOCOLOR	5	/* Pseudo color readonly */
+
+#define FB_ACCEL_NONE		0	/* no hardware accelerator	*/
+#define FB_ACCEL_ATARIBLITT	1	/* Atari Blitter		*/
+#define FB_ACCEL_AMIGABLITT	2	/* Amiga Blitter                */
+#define FB_ACCEL_S3_TRIO64	3	/* Cybervision64 (S3 Trio64)    */
+#define FB_ACCEL_NCR_77C32BLT	4	/* RetinaZ3 (NCR 77C32BLT)      */
+#define FB_ACCEL_S3_VIRGE	5	/* Cybervision64/3D (S3 ViRGE)	*/
+#define FB_ACCEL_ATI_MACH64GX	6	/* ATI Mach 64GX family		*/
+#define FB_ACCEL_DEC_TGA	7	/* DEC 21030 TGA		*/
+#define FB_ACCEL_ATI_MACH64CT	8	/* ATI Mach 64CT family		*/
+#define FB_ACCEL_ATI_MACH64VT	9	/* ATI Mach 64CT family VT class */
+#define FB_ACCEL_ATI_MACH64GT	10	/* ATI Mach 64CT family GT class */
+#define FB_ACCEL_SUN_CREATOR	11	/* Sun Creator/Creator3D	*/
+#define FB_ACCEL_SUN_CGSIX	12	/* Sun cg6			*/
+#define FB_ACCEL_SUN_LEO	13	/* Sun leo/zx			*/
+#define FB_ACCEL_IMS_TWINTURBO	14	/* IMS Twin Turbo		*/
+#define FB_ACCEL_3DLABS_PERMEDIA2 15	/* 3Dlabs Permedia 2		*/
+#define FB_ACCEL_MATROX_MGA2064W 16	/* Matrox MGA2064W (Millenium)	*/
+#define FB_ACCEL_MATROX_MGA1064SG 17	/* Matrox MGA1064SG (Mystique)	*/
+#define FB_ACCEL_MATROX_MGA2164W 18	/* Matrox MGA2164W (Millenium II) */
+#define FB_ACCEL_MATROX_MGA2164W_AGP 19	/* Matrox MGA2164W (Millenium II) */
+#define FB_ACCEL_MATROX_MGAG100	20	/* Matrox G100 (Productiva G100) */
+#define FB_ACCEL_MATROX_MGAG200	21	/* Matrox G200 (Myst, Mill, ...) */
+#define FB_ACCEL_SUN_CG14	22	/* Sun cgfourteen		 */
+#define FB_ACCEL_SUN_BWTWO	23	/* Sun bwtwo			 */
+#define FB_ACCEL_SUN_CGTHREE	24	/* Sun cgthree			 */
+#define FB_ACCEL_SUN_TCX	25	/* Sun tcx			 */
+#define FB_ACCEL_MATROX_MGAG400	26	/* Matrox G400			 */
+
+struct fb_fix_screeninfo {
+	char id[16];			/* identification string eg "TT Builtin" */
+	char *smem_start;		/* Start of frame buffer mem */
+					/* (physical address) */
+	__u32 smem_len;			/* Length of frame buffer mem */
+	__u32 type;			/* see FB_TYPE_*		*/
+	__u32 type_aux;			/* Interleave for interleaved Planes */
+	__u32 visual;			/* see FB_VISUAL_*		*/ 
+	__u16 xpanstep;			/* zero if no hardware panning  */
+	__u16 ypanstep;			/* zero if no hardware panning  */
+	__u16 ywrapstep;		/* zero if no hardware ywrap    */
+	__u32 line_length;		/* length of a line in bytes    */
+	char *mmio_start;		/* Start of Memory Mapped I/O   */
+					/* (physical address) */
+	__u32 mmio_len;			/* Length of Memory Mapped I/O  */
+	__u32 accel;			/* Type of acceleration available */
+	__u16 reserved[3];		/* Reserved for future compatibility */
+};
+
+/* Interpretation of offset for color fields: All offsets are from the right,
+ * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
+ * can use the offset as right argument to <<). A pixel afterwards is a bit
+ * stream and is written to video memory as that unmodified. This implies
+ * big-endian byte order if bits_per_pixel is greater than 8.
+ */
+struct fb_bitfield {
+	__u32 offset;			/* beginning of bitfield	*/
+	__u32 length;			/* length of bitfield		*/
+	__u32 msb_right;		/* != 0 : Most significant bit is */ 
+					/* right */ 
+};
+
+#define FB_NONSTD_HAM		1	/* Hold-And-Modify (HAM)        */
+
+#define FB_ACTIVATE_NOW		0	/* set values immediately (or vbl)*/
+#define FB_ACTIVATE_NXTOPEN	1	/* activate on next open	*/
+#define FB_ACTIVATE_TEST	2	/* don't set, round up impossible */
+#define FB_ACTIVATE_MASK       15
+					/* values			*/
+#define FB_ACTIVATE_VBL	       16	/* activate values on next vbl  */
+#define FB_CHANGE_CMAP_VBL     32	/* change colormap on vbl	*/
+#define FB_ACTIVATE_ALL	       64	/* change all VCs on this fb	*/
+
+#define FB_ACCELF_TEXT		1	/* text mode acceleration */
+
+#define FB_SYNC_HOR_HIGH_ACT	1	/* horizontal sync high active	*/
+#define FB_SYNC_VERT_HIGH_ACT	2	/* vertical sync high active	*/
+#define FB_SYNC_EXT		4	/* external sync		*/
+#define FB_SYNC_COMP_HIGH_ACT	8	/* composite sync high active   */
+#define FB_SYNC_BROADCAST	16	/* broadcast video timings      */
+					/* vtotal = 144d/288n/576i => PAL  */
+					/* vtotal = 121d/242n/484i => NTSC */
+#define FB_SYNC_ON_GREEN	32	/* sync on green */
+
+#define FB_VMODE_NONINTERLACED  0	/* non interlaced */
+#define FB_VMODE_INTERLACED	1	/* interlaced	*/
+#define FB_VMODE_DOUBLE		2	/* double scan */
+#define FB_VMODE_MASK		255
+
+#define FB_VMODE_YWRAP		256	/* ywrap instead of panning     */
+#define FB_VMODE_SMOOTH_XPAN	512	/* smooth xpan possible (internally used) */
+#define FB_VMODE_CONUPDATE	512	/* don't update x/yoffset	*/
+
+struct fb_var_screeninfo {
+	__u32 xres;			/* visible resolution		*/
+	__u32 yres;
+	__u32 xres_virtual;		/* virtual resolution		*/
+	__u32 yres_virtual;
+	__u32 xoffset;			/* offset from virtual to visible */
+	__u32 yoffset;			/* resolution			*/
+
+	__u32 bits_per_pixel;		/* guess what			*/
+	__u32 grayscale;		/* != 0 Graylevels instead of colors */
+
+	struct fb_bitfield red;		/* bitfield in fb mem if true color, */
+	struct fb_bitfield green;	/* else only length is significant */
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;	/* transparency			*/	
+
+	__u32 nonstd;			/* != 0 Non standard pixel format */
+
+	__u32 activate;			/* see FB_ACTIVATE_*		*/
+
+	__u32 height;			/* height of picture in mm    */
+	__u32 width;			/* width of picture in mm     */
+
+	__u32 accel_flags;		/* acceleration flags (hints)	*/
+
+	/* Timing: All values in pixclocks, except pixclock (of course) */
+	__u32 pixclock;			/* pixel clock in ps (pico seconds) */
+	__u32 left_margin;		/* time from sync to picture	*/
+	__u32 right_margin;		/* time from picture to sync	*/
+	__u32 upper_margin;		/* time from sync to picture	*/
+	__u32 lower_margin;
+	__u32 hsync_len;		/* length of horizontal sync	*/
+	__u32 vsync_len;		/* length of vertical sync	*/
+	__u32 sync;			/* see FB_SYNC_*		*/
+	__u32 vmode;			/* see FB_VMODE_*		*/
+	__u32 reserved[6];		/* Reserved for future compatibility */
+};
+
+struct fb_cmap {
+	__u32 start;			/* First entry	*/
+	__u32 len;			/* Number of entries */
+	__u16 *red;			/* Red values	*/
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;			/* transparency, can be NULL */
+};
+
+struct fb_con2fbmap {
+	__u32 console;
+	__u32 framebuffer;
+};
+
+struct fb_monspecs {
+	__u32 hfmin;			/* hfreq lower limit (Hz) */
+	__u32 hfmax; 			/* hfreq upper limit (Hz) */
+	__u16 vfmin;			/* vfreq lower limit (Hz) */
+	__u16 vfmax;			/* vfreq upper limit (Hz) */
+	unsigned dpms : 1;		/* supports DPMS */
+};
+
+#ifdef __KERNEL__
+
+#include <linux/fs.h>
+
+
+struct fb_info;
+struct fb_info_gen;
+struct vm_area_struct;
+struct file;
+
+    /*
+     *  Frame buffer operations
+     */
+
+struct fb_ops {
+    /* open/release and usage marking */
+    int (*fb_open)(struct fb_info *info, int user);
+    int (*fb_release)(struct fb_info *info, int user);
+    /* get non settable parameters */
+    int (*fb_get_fix)(struct fb_fix_screeninfo *fix, int con,
+		      struct fb_info *info); 
+    /* get settable parameters */
+    int (*fb_get_var)(struct fb_var_screeninfo *var, int con,
+		      struct fb_info *info);		
+    /* set settable parameters */
+    int (*fb_set_var)(struct fb_var_screeninfo *var, int con,
+		      struct fb_info *info);		
+    /* get colormap */
+    int (*fb_get_cmap)(struct fb_cmap *cmap, int kspc, int con,
+		       struct fb_info *info);
+    /* set colormap */
+    int (*fb_set_cmap)(struct fb_cmap *cmap, int kspc, int con,
+		       struct fb_info *info);
+    /* pan display */
+    int (*fb_pan_display)(struct fb_var_screeninfo *var, int con,
+			  struct fb_info *info);
+    /* perform fb specific ioctl */
+    int (*fb_ioctl)(struct inode *inode, struct file *file, unsigned int cmd,
+		    unsigned long arg, int con, struct fb_info *info);
+    /* perform fb specific mmap */
+    int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma);
+    /* switch to/from raster image mode */
+    int (*fb_rasterimg)(struct fb_info *info, int start);
+};
+
+
+   /*
+    *    This is the interface between the low-level console driver and the
+    *    low-level frame buffer device
+    */
+
+struct display {
+    /* Filled in by the frame buffer device */
+
+    struct fb_var_screeninfo var;   /* variable infos. yoffset and vmode */
+				    /* are updated by fbcon.c */
+    struct fb_cmap cmap;            /* colormap */
+    char *screen_base;              /* pointer to top of virtual screen */    
+				    /* (virtual address) */
+    int visual;
+    int type;                       /* see FB_TYPE_* */
+    int type_aux;                   /* Interleave for interleaved Planes */
+    u_short ypanstep;               /* zero if no hardware ypan */
+    u_short ywrapstep;              /* zero if no hardware ywrap */
+    u_long line_length;             /* length of a line in bytes */
+    u_short can_soft_blank;         /* zero if no hardware blanking */
+    u_short inverse;                /* != 0 text black on white as default */
+    struct display_switch *dispsw;  /* low level operations */
+    void *dispsw_data;		    /* optional dispsw helper data */
+
+#if 0
+    struct fb_fix_cursorinfo fcrsr;
+    struct fb_var_cursorinfo *vcrsr;
+    struct fb_cursorstate crsrstate;
+#endif
+
+    /* Filled in by the low-level console driver */
+
+    struct vc_data *conp;           /* pointer to console data */
+    struct fb_info *fb_info;        /* frame buffer for this console */
+    int vrows;                      /* number of virtual rows */
+    unsigned short cursor_x;	    /* current cursor position */
+    unsigned short cursor_y;
+    int fgcol;                      /* text colors */
+    int bgcol;
+    u_long next_line;               /* offset to one line below */
+    u_long next_plane;              /* offset to next plane */
+    u_char *fontdata;               /* Font associated to this display */
+    unsigned short _fontheightlog;
+    unsigned short _fontwidthlog;
+    unsigned short _fontheight;
+    unsigned short _fontwidth;
+    int userfont;                   /* != 0 if fontdata kmalloc()ed */
+    u_short scrollmode;             /* Scroll Method */
+    short yscroll;                  /* Hardware scrolling */
+    unsigned char fgshift, bgshift;
+    unsigned short charmask;	    /* 0xff or 0x1ff */
+};
+
+
+struct fb_info {
+   char modename[40];			/* default video mode */
+   kdev_t node;
+   int flags;
+#define FBINFO_FLAG_MODULE	1	/* Low-level driver is a module */
+   struct fb_ops *fbops;
+   struct fb_monspecs monspecs;
+   struct display *disp;		/* initial display variable */
+   struct vc_data *display_fg;		/* Console visible on this display */
+   char fontname[40];			/* default font name */
+   int (*changevar)(int);		/* tell console var has changed */
+   int (*switch_con)(int, struct fb_info*);
+					/* tell fb to switch consoles */
+   int (*updatevar)(int, struct fb_info*);
+					/* tell fb to update the vars */
+   void (*blank)(int, struct fb_info*);	/* tell fb to (un)blank the screen */
+					/* arg = 0: unblank */
+					/* arg > 0: VESA level (arg-1) */
+
+   /* From here on everything is device dependent */
+};
+
+#ifdef MODULE
+#define FBINFO_FLAG_DEFAULT	FBINFO_FLAG_MODULE
+#else
+#define FBINFO_FLAG_DEFAULT	0
+#endif
+
+    /*
+     *  This structure abstracts from the underlying hardware. It is not
+     *  mandatory but used by the `generic' frame buffer operations.
+     *  Read drivers/video/skeletonfb.c for more information.
+     */
+
+struct fbgen_hwswitch {
+    void (*detect)(void);
+    int (*encode_fix)(struct fb_fix_screeninfo *fix, const void *par,
+		      struct fb_info_gen *info);
+    int (*decode_var)(const struct fb_var_screeninfo *var, void *par,
+		      struct fb_info_gen *info);
+    int (*encode_var)(struct fb_var_screeninfo *var, const void *par,
+		      struct fb_info_gen *info);
+    void (*get_par)(void *par, struct fb_info_gen *info);
+    void (*set_par)(const void *par, struct fb_info_gen *info);
+    int (*getcolreg)(unsigned regno, unsigned *red, unsigned *green,
+		     unsigned *blue, unsigned *transp, struct fb_info *info);
+    int (*setcolreg)(unsigned regno, unsigned red, unsigned green,
+		     unsigned blue, unsigned transp, struct fb_info *info);
+    int (*pan_display)(const struct fb_var_screeninfo *var,
+		       struct fb_info_gen *info);
+    int (*blank)(int blank_mode, struct fb_info_gen *info);
+    void (*set_disp)(const void *par, struct display *disp,
+		     struct fb_info_gen *info);
+};
+
+struct fb_info_gen {
+    struct fb_info info;
+
+    /* Entries for a generic frame buffer device */
+    /* Yes, this starts looking like C++ */
+    u_int parsize;
+    struct fbgen_hwswitch *fbhw;
+
+   /* From here on everything is device dependent */
+};
+
+    /*
+     *  `Generic' versions of the frame buffer device operations
+     */
+
+extern int fbgen_get_fix(struct fb_fix_screeninfo *fix, int con,
+			 struct fb_info *info);
+extern int fbgen_get_var(struct fb_var_screeninfo *var, int con,
+			 struct fb_info *info);
+extern int fbgen_set_var(struct fb_var_screeninfo *var, int con,
+			 struct fb_info *info);
+extern int fbgen_get_cmap(struct fb_cmap *cmap, int kspc, int con,
+			  struct fb_info *info);
+extern int fbgen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
+			  struct fb_info *info);
+extern int fbgen_pan_display(struct fb_var_screeninfo *var, int con,
+			     struct fb_info *info);
+extern int fbgen_ioctl(struct inode *inode, struct file *file,
+		       unsigned int cmd, unsigned long arg, int con,
+		       struct fb_info *info);
+
+    /*
+     *  Helper functions
+     */
+
+extern int fbgen_do_set_var(struct fb_var_screeninfo *var, int isactive,
+			    struct fb_info_gen *info);
+extern void fbgen_set_disp(int con, struct fb_info_gen *info);
+extern void fbgen_install_cmap(int con, struct fb_info_gen *info);
+extern int fbgen_update_var(int con, struct fb_info *info);
+extern int fbgen_switch(int con, struct fb_info *info);
+extern void fbgen_blank(int blank, struct fb_info *info);
+
+
+struct fb_videomode {
+    const char *name;
+    struct fb_var_screeninfo var;
+};
+
+
+/* drivers/char/fbmem.c */
+extern int register_framebuffer(struct fb_info *fb_info);
+extern int unregister_framebuffer(const struct fb_info *fb_info);
+extern int fbmon_valid_timings(u_int pixclock, u_int htotal, u_int vtotal,
+			       const struct fb_info *fb_info);
+extern int fbmon_dpms(const struct fb_info *fb_info);
+
+
+extern int num_registered_fb;
+extern struct fb_info *registered_fb[FB_MAX];
+extern char con2fb_map[MAX_NR_CONSOLES];
+
+/* drivers/video/fbcon.c */
+extern struct display fb_display[MAX_NR_CONSOLES];
+
+/* drivers/video/fbcmap.c */
+extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp);
+extern void fb_copy_cmap(struct fb_cmap *from, struct fb_cmap *to,
+			 int fsfromto);
+extern int fb_get_cmap(struct fb_cmap *cmap, int kspc,
+		       int (*getcolreg)(u_int, u_int *, u_int *, u_int *,
+					u_int *, struct fb_info *),
+		       struct fb_info *fb_info);
+extern int fb_set_cmap(struct fb_cmap *cmap, int kspc,
+		       int (*setcolreg)(u_int, u_int, u_int, u_int, u_int,
+					struct fb_info *),
+		       struct fb_info *fb_info);
+extern struct fb_cmap *fb_default_cmap(int len);
+extern void fb_invert_cmaps(void);
+
+/* VESA Blanking Levels */
+#define VESA_NO_BLANKING	0
+#define VESA_VSYNC_SUSPEND	1
+#define VESA_HSYNC_SUSPEND	2
+#define VESA_POWERDOWN		3
+
+#endif /* __KERNEL__ */
+
+#if 1
+
+#define FBCMD_GET_CURRENTPAR	0xDEAD0005
+#define FBCMD_SET_CURRENTPAR	0xDEAD8005
+
+#endif
+
+
+#if 1 /* Preliminary */
+
+   /*
+    *    Hardware Cursor
+    */
+
+#define FBIOGET_FCURSORINFO     0x4607
+#define FBIOGET_VCURSORINFO     0x4608
+#define FBIOPUT_VCURSORINFO     0x4609
+#define FBIOGET_CURSORSTATE     0x460A
+#define FBIOPUT_CURSORSTATE     0x460B
+
+
+struct fb_fix_cursorinfo {
+	__u16 crsr_width;		/* width and height of the cursor in */
+	__u16 crsr_height;		/* pixels (zero if no cursor)	*/
+	__u16 crsr_xsize;		/* cursor size in display pixels */
+	__u16 crsr_ysize;
+	__u16 crsr_color1;		/* colormap entry for cursor color1 */
+	__u16 crsr_color2;		/* colormap entry for cursor color2 */
+};
+
+struct fb_var_cursorinfo {
+	__u16 width;
+	__u16 height;
+	__u16 xspot;
+	__u16 yspot;
+	__u8 data[1];			/* field with [height][width]        */
+};
+
+struct fb_cursorstate {
+	__s16 xoffset;
+	__s16 yoffset;
+	__u16 mode;
+};
+
+#define FB_CURSOR_OFF		0
+#define FB_CURSOR_ON		1
+#define FB_CURSOR_FLASH		2
+
+#endif /* Preliminary */
+
+#endif /* _LINUX_FB_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/fbset/fb.modes.5	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,228 @@
+.TH fb.modes 8 "Aug 1996" local "Linux frame buffer utils"
+.SH NAME
+fb.modes \- frame buffer modes file
+.SH DESCRIPTION
+.I /etc/fb.modes
+contains an unlimited number of video mode descriptions. The general format
+of a video mode is:
+.sp
+mode
+.RI \" name \"
+.RS
+geometry
+.RI < xres >
+.RI < yres >
+.RI < vxres >
+.RI < vyres >
+.RI < depth >
+.br
+timings
+.RI < pixclock >
+.RI < left >
+.RI < right >
+.RI < upper >
+.RI < lower >
+.RI < hslen >
+.RI < vslen >
+.br
+.B options
+.RI < value >
+.RE
+endmode
+.SH OPTIONS
+geometry options:
+.RS
+.TP
+.I xres
+visible horizontal resolution (in pixels)
+.TP
+.I yres
+visible vertical resolution (in pixels)
+.TP
+.I vxres
+virtual horizontal resolution (in pixels)
+.TP
+.I vyres
+virtual vertical resolution (in pixels)
+.TP
+.I depth
+display depth (in bits per pixel)
+.RE
+.PP
+timing options:
+.RS
+.TP
+.I pixclock
+length of one pixel (in picoseconds)
+.TP
+.I left
+left margin (in pixels)
+.TP
+.I right
+right margin (in pixels)
+.TP
+.I upper
+upper margin (in pixel lines)
+.TP
+.I lower
+lower margin (in pixel lines)
+.TP
+.I hslen
+horizontal sync length (in pixels)
+.TP
+.I vslen
+vertical sync length (in pixel lines)
+.RE
+.PP
+other options:
+.RS
+the first value of this options is the default
+.TP
+.IR \fBhsync "\ {" low | high }
+the horizontal sync polarity
+.TP
+.IR \fBvsync "\ {" low | high }
+the vertical sync polarity
+.TP
+.IR \fBcsync "\ {" low | high }
+the composite sync polarity
+.TP
+.IR \fBextsync "\ {" false | true }
+enable or disable external resync. If enabled the sync timings are not
+generated by the frame buffer device and must be provided externally
+instead. Note that this option may not be supported by every frame buffer
+device
+.TP
+.IR \fBlaced "\ {" false | true }
+enable or disable interlace. If enabled the display will be split in two
+frames, each frame contains only even and odd lines respectively. These two
+frames will be displayed alternating, this way twice the lines can be
+displayed and the vertical frequency for monitor stays the same, but the
+visible vertical frequency gets halved
+.TP
+.IR \fBdouble "\ {" false | true }
+enable or disable doublescan. If enabled every line will be displayed twice
+and this way the horizontal frequency can easily be doubled, so that the
+same resolution can be displayed on different monitors, even if the
+horizontal frequency specification differs. Note that this option may not be
+supported by every frame buffer device
+.RE
+.SH INTERNALS
+Generally a frame buffer display is organized as follows:
+.sp
+.ad c
++\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-+\-\-\-+
+.br
+.RB "|\ \ \ |\ \ \ \ \ \ \ " ^ "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |"
+.br
+.RB "|\ \ \ |\ \ \ \ \ \ \ " | "\ " \fI5 "\ \ \ \ \ |\ \ \ |\ \ \ |"
+.br
+.RB "|\ \ \ |\ \ \ \ \ \ \ " v "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |"
+.br
++\-\-\-#################\-\-\-+\-\-\-+
+.br
+.RB "|\ \ \ #\ \ \ \ \ \ \ " ^ "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |"
+.br
+.RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |"
+.br
+.RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |"
+.br
+.RI "| " 1 " #       " \fB| "   " 2 "   # " 3 " | " 4 " |"
+.br
+.RB "|" "<\->" "#" "<\-\-\-\-\-\-+\-\-\-\-\-\->" "#" "<\->" "|" "<\->" "|"
+.br
+.RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |"
+.br
+.RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ " \fI6 "\ \ \ \ \ #\ \ \ |\ \ \ |"
+.br
+.RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |"
+.br
+.RB "|\ \ \ #\ \ \ \ \ \ \ " v "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |"
+.br
++\-\-\-#################\-\-\-+\-\-\-+
+.br
+.RB "|\ \ \ |\ \ \ \ \ \ \ " ^ "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |"
+.br
+.RB "|\ \ \ |\ \ \ \ \ \ \ " | "\ " \fI7 "\ \ \ \ \ |\ \ \ |\ \ \ |"
+.br
+.RB "|\ \ \ |\ \ \ \ \ \ \ " v "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |"
+.br
++\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-+\-\-\-+
+.br
+.RB "|\ \ \ |\ \ \ \ \ \ \ " ^ "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |"
+.br
+.RB "|\ \ \ |\ \ \ \ \ \ \ " | "\ " \fI8 "\ \ \ \ \ |\ \ \ |\ \ \ |"
+.br
+.RB "|\ \ \ |\ \ \ \ \ \ \ " v "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |"
+.br
++\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-+\-\-\-+
+.sp
+.ad n
+.RS
+.I 1
+\t left margin
+.br
+.I 2
+\t xres
+.br
+.I 3
+\t right margin
+.br
+.I 4
+\t horizontal sync len
+.br
+.I 5
+\t upper margin
+.br
+.I 6
+\t yres
+.br
+.I 7
+\t lower margin
+.br
+.I 8
+\t vertical sync len
+.RE
+.sp
+The area bordered with `#' is the visible display area. Horizontal and
+vertical frequencies can now easily be calculated, for this the sum of
+horizontal or vertical values are important
+.RS
+.sp
+htotal\ =\ left\ +\ xres\ +\ right\ +\ hslen
+.br
+vtotal\ =\ upper\ +\ yres\ +\ lower\ +\ vslen
+.sp
+.RE
+The length of one line can now be calculated with pixclock
+.RS
+.sp
+line\ =\ pixclock\ *\ htotal
+.sp
+.RE
+and we have the horizontal frequency
+.RS
+.sp
+hfreq\ =\ 1E12\ /\ line\ =\ 1E12\ /\ (pixclock\ *\ htotal)
+.sp
+.RE
+To get the vertical frequency vtotal must eventually adjusted. If the
+display is laced, vtotal must be halved or if the display is a doublescan
+one, vtotal must be doubled. Now we can calculate the length of one frame
+.RS
+.sp
+if\ (lace)\ \ \ vtotal\ /=\ 2
+.br
+if\ (double)\ vtotal\ *=\ 2
+.sp
+frame\ =\ vtotal\ *\ line
+.sp
+.RE
+and we get also the vertical frequency
+.RS
+.sp
+vfreq\ =\ 1E12\ /\ frame\ =\ hfreq\ /\ vtotal
+.sp
+.RE
+.SH SEE ALSO
+.BR fbset "(8), " fbdev (4)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/fbset/fbset.8	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,242 @@
+.TH fbset 8 "July 1998" local "Linux frame buffer utils"
+.SH NAME
+fbset \- show and modify frame buffer device settings
+.SH SYNOPSIS
+.B fbset
+.RI [ options ]
+.RI [ mode ]
+.SH DESCRIPTION
+.B This documentation is out of date!!
+.PP
+.B fbset
+is a system utility to show or change the settings of the frame buffer
+device. The frame buffer device provides a simple and unique interface to
+access different kinds of graphic displays.
+.PP
+Frame buffer devices are accessed via special device nodes located in the
+/dev directory. The naming scheme for these nodes is always
+.IR \fBfb < n >,
+where
+.I n
+is the number of the used frame buffer device.
+.PP
+.B fbset
+uses an own video mode database located in /etc/fb.modes. An unlimited
+number of video modes can be defined in this database. For further
+information see
+.BR fb.modes (5).
+.SH OPTIONS
+If no option is given,
+.B fbset
+will display the current frame buffer settings.
+.sp
+General options:
+.RS
+.TP
+.BR \-\-help ",\ " \-h
+display an usage information
+.TP
+.BR \-\-now ",\ " \-n
+change the video mode immediately. If no frame buffer device is given via
+.B \-fb
+, then this option is activated by default
+.TP
+.BR \-\-show ",\ " \-s
+display the video mode settings. This is default if no further option or
+only a frame buffer device via
+.B \-fb
+is given
+.TP
+.BR \-\-info ",\ " \-i
+display all available frame buffer information
+.TP
+.BR \-\-verbose ",\ " \-v
+display information what
+.B fbset
+is currently doing
+.TP
+.BR \-\-version ",\ " \-V
+display the version information about
+.B fbset
+.TP
+.BR \-\-xfree86 ",\ "  \-x
+display the timing information as it's needed by XFree86
+.RE
+.PP
+Frame buffer device nodes:
+.RS
+.TP
+.BR \-fb "\ <" \fIdevice >
+.I device
+gives the frame buffer device node. If no device via
+.B \-fb
+is given, 
+.I /dev/fb0
+is used
+.TP
+.RE
+.PP
+Video mode database:
+.RS
+.TP
+.BR \-db "\ <" \fIfile >
+set an alternative video mode database file (default is 
+.IR /etc/fb.modes ),
+see also
+.BR fb.modes (5)
+.RE
+.PP
+Display geometry:
+.RS
+.TP
+.BR \-xres "\ <" \fIvalue >
+set visible horizontal resolution (in pixels)
+.TP
+.BR \-yres "\ <" \fIvalue >
+set visible vertical resolution (in pixels)
+.TP
+.BR \-vxres "\ <" \fIvalue >
+set virtual horizontal resolution (in pixels)
+.TP
+.BR \-vyres "\ <" \fIvalue >
+set virtual vertical resolution (in pixels)
+.TP
+.BR \-depth "\ <" \fIvalue >
+set display depth (in bits per pixel)
+.TP
+.BR \-\-geometry ",\ " \-g "\ ..."
+set all geometry parameters at once in the order
+.RI < xres >
+.RI < yres >
+.RI < vxres >
+.RI < vyres >
+.RI < depth >,
+e.g.
+.B \-g
+.I 640 400 640 400 4
+.TP
+.BR \-match "\ \ \ \ \ \ "
+make the physical resolution match the virtual resolution
+.RE
+.PP
+Display timings:
+.RS
+.TP
+.BR \-pixclock "\ <" \fIvalue >
+set the length of one pixel (in picoseconds). Note that the frame buffer
+device may only support some pixel lengths
+.TP
+.BR \-left "\ <" \fIvalue >
+set left margin (in pixels)
+.TP
+.BR \-right "\ <" \fIvalue >
+set right margin (in pixels)
+.TP
+.BR \-upper "\ <" \fIvalue >
+set upper margin (in pixel lines)
+.TP
+.BR \-lower "\ <" \fIvalue >
+set lower margin (in pixel lines)
+.TP
+.BR \-hslen "\ <" \fIvalue >
+set horizontal sync length (in pixels)
+.TP
+.BR \-vslen "\ <" \fIvalue >
+set vertical sync length (in pixel lines)
+.TP
+.BR \-\-timings ",\ " \-t "\ ..."
+set all timing parameters at once in the order
+.RI < pixclock >
+.RI < left >
+.RI < right >
+.RI < upper >
+.RI < lower >
+.RI < hslen >
+.RI < vslen >,
+e.g.
+.B \-g
+.I 35242 64 96 35 12 112 2
+.RE
+.PP
+Display flags:
+.RS
+.TP
+.IR \fB\-hsync "\ {" low | high }
+set the horizontal sync polarity
+.TP
+.IR \fB\-vsync "\ {" low | high }
+set the vertical sync polarity
+.TP
+.IR \fB\-csync "\ {" low | high }
+set the composite sync polarity
+.TP
+.IR \fB\-extsync "\ {" false | true }
+enable or disable external resync. If enabled the sync timings are not
+generated by the frame buffer device and must be provided externally
+instead. Note that this option may not be supported by every frame buffer
+device
+.TP
+.IR \fB\-bcast "\ {" false | true }
+enable or disable broadcast modes. If enabled the frame buffer generates the
+exact timings for several broadcast modes (e.g. PAL or NTSC). Note that
+this option may not be supported by every frame buffer device
+.TP
+.IR \fB\-laced "\ {" false | true }
+enable or disable interlace. If enabled the display will be split in two
+frames, each frame contains only even and odd lines respectively. These two
+frames will be displayed alternating, this way twice the lines can be
+displayed and the vertical frequency for the monitor stays the same, but the
+visible vertical frequency gets halved
+.TP
+.IR \fB\-double "\ {" false | true }
+enable or disable doublescan. If enabled every line will be displayed twice
+and this way the horizontal frequency can easily be doubled, so that the
+same resolution can be displayed on different monitors, even if the
+horizontal frequency specification differs. Note that this option may not be
+supported by every frame buffer device
+.RE
+.PP
+Display positioning:
+.RS
+.TP
+.IR \fB\-move "\ {" left | right | up | down }
+move the visible part of the display in the specified direction
+.TP
+.BR \-step "\ <" \fIvalue >
+set step size for display positioning (in pixels or pixel lines), if
+.B \-step
+is not given display will be moved 8 pixels horizontally or 2 pixel lines
+vertically
+.RE
+.SH EXAMPLE
+To set the used video mode for
+.B X
+insert the following in rc.local:
+.RS
+.sp
+.B fbset
+-fb
+.I /dev/fb0
+vga
+.sp
+.RE
+and make the used frame buffer device known to
+.BR X :
+.RS
+.sp
+.B export
+.RI FRAMEBUFFER= /dev/fb0
+.RE
+.SH FILES
+.I /dev/fb*
+.br
+.I /etc/fb.modes
+.SH SEE ALSO
+.BR fb.modes "(5), " fbdev (4)
+.SH AUTHORS
+.TP
+Geert Uytterhoeven <Geert.Uytterhoeven@cs.kuleuven.ac.be>
+.TP
+Roman Zippel <zippel@fh-brandenburg.de>
+.br
+man files
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/fbset/fbset.c	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,1054 @@
+/*
+ *  Linux Frame Buffer Device Configuration
+ *
+ *  © Copyright 1995-1999 by Geert Uytterhoeven
+ *		       (Geert.Uytterhoeven@cs.kuleuven.ac.be)
+ *
+ *  --------------------------------------------------------------------------
+ *
+ *  This file is subject to the terms and conditions of the GNU General Public
+ *  License. See the file COPYING in the main directory of the Linux
+ *  distribution for more details.
+ *
+ *  Petr Vandrovec <vandrove@vc.cvut.cz>:
+ *           -grayscale, -rgba, -nonstd, VGA modes reporting
+ *
+ *  Brad Midgley <brad@exodus.pht.com>:
+ *           -match
+ *
+ */
+
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <ctype.h>
+#include <sys/stat.h>
+
+struct file;
+struct inode;
+
+#include "fb.h"
+
+#include "fbset.h"
+
+
+    /*
+     *  Default Frame Buffer Special Device Node
+     */
+
+#define DEFAULT_FRAMEBUFFER	"/dev/fb0"
+
+
+    /*
+     *  Default Video Mode Database File
+     */
+
+#define DEFAULT_MODEDBFILE	"/etc/fb.modes"
+
+
+    /*
+     *  Command Line Options
+     */
+
+static const char *ProgramName;
+
+static int Opt_test = 0;
+static int Opt_show = 0;
+static int Opt_info = 0;
+static int Opt_version = 0;
+static int Opt_verbose = 0;
+static int Opt_xfree86 = 0;
+static int Opt_change = 0;
+static int Opt_all = 0;
+
+static const char *Opt_fb = NULL;
+const char *Opt_modedb = DEFAULT_MODEDBFILE;
+static const char *Opt_xres = NULL;
+static const char *Opt_yres = NULL;
+static const char *Opt_vxres = NULL;
+static const char *Opt_vyres = NULL;
+static const char *Opt_depth = NULL;
+static const char *Opt_pixclock = NULL;
+static const char *Opt_left = NULL;
+static const char *Opt_right = NULL;
+static const char *Opt_upper = NULL;
+static const char *Opt_lower = NULL;
+static const char *Opt_hslen = NULL;
+static const char *Opt_vslen = NULL;
+static const char *Opt_accel = NULL;
+static const char *Opt_hsync = NULL;
+static const char *Opt_vsync = NULL;
+static const char *Opt_csync = NULL;
+static const char *Opt_gsync = NULL;
+static const char *Opt_extsync = NULL;
+static const char *Opt_bcast = NULL;
+static const char *Opt_laced = NULL;
+static const char *Opt_double = NULL;
+static const char *Opt_move = NULL;
+static const char *Opt_step = NULL;
+static const char *Opt_modename = NULL;
+static const char *Opt_rgba = NULL;
+static const char *Opt_nonstd = NULL;
+static const char *Opt_grayscale = NULL;
+static const char *Opt_matchyres = NULL;
+
+static struct {
+    const char *name;
+    const char **value;
+    const int change;
+} Options[] = {
+    { "-fb", &Opt_fb, 0 },
+    { "-db", &Opt_modedb, 0 },
+    { "-xres", &Opt_xres, 1 },
+    { "-yres", &Opt_yres, 1 },
+    { "-vxres", &Opt_vxres, 1 },
+    { "-vyres", &Opt_vyres, 1 },
+    { "-depth", &Opt_depth, 1 },
+    { "-nonstd", &Opt_nonstd, 1},
+    { "-pixclock", &Opt_pixclock, 1 },
+    { "-left", &Opt_left, 1 },
+    { "-right", &Opt_right, 1 },
+    { "-upper", &Opt_upper, 1 },
+    { "-lower", &Opt_lower, 1 },
+    { "-hslen", &Opt_hslen, 1 },
+    { "-vslen", &Opt_vslen, 1 },
+    { "-accel", &Opt_accel, 1 },
+    { "-hsync", &Opt_hsync, 1 },
+    { "-vsync", &Opt_vsync, 1 },
+    { "-csync", &Opt_csync, 1 },
+    { "-gsync", &Opt_gsync, 1 },
+    { "-extsync", &Opt_extsync, 1 },
+    { "-bcast", &Opt_bcast, 1 },
+    { "-laced", &Opt_laced, 1 },
+    { "-double", &Opt_double, 1 },
+    { "-move", &Opt_move, 1 },
+    { "-step", &Opt_step, 1 },
+    { "-rgba", &Opt_rgba, 1 },
+    { "-grayscale", &Opt_grayscale, 1 },
+    { NULL, NULL, 0 }
+};
+
+
+    /*
+     *  Video Mode Database
+     */
+
+struct VideoMode *VideoModes = NULL;
+
+
+    /*
+     *  Hardware Text Modes
+     */
+
+static struct textentry {
+    __u32 id;
+    const char *name;
+} Textmodes[] = {
+    { FB_AUX_TEXT_MDA, "Monochrome text" },
+    { FB_AUX_TEXT_CGA, "CGA/EGA/VGA Color text" },
+    { FB_AUX_TEXT_S3_MMIO, "S3 MMIO fasttext" },
+    { FB_AUX_TEXT_MGA_STEP16, "MGA Millennium I step 16 text" },
+    { FB_AUX_TEXT_MGA_STEP8, "MGA step 8 text" },
+};
+
+static struct textentry VGAModes[] = {
+    { FB_AUX_VGA_PLANES_VGA4, "VGA 16 colors in 4 planes" },
+    { FB_AUX_VGA_PLANES_CFB4, "VGA 16 colors in 1 plane" },
+    { FB_AUX_VGA_PLANES_CFB8, "VGA 256 colors in 4 planes" },
+    /* last entry has name == NULL */
+    { 0,                      NULL}
+};
+
+    /*
+     *  Hardware Accelerators
+     */
+
+static struct accelentry {
+    __u32 id;
+    const char *name;
+} Accelerators[] = {
+    { FB_ACCEL_NONE, "No" },
+    { FB_ACCEL_ATARIBLITT, "Atari Blitter" },
+    { FB_ACCEL_AMIGABLITT, "Amiga Blitter" },
+    { FB_ACCEL_S3_TRIO64, "S3 Trio64" },
+    { FB_ACCEL_NCR_77C32BLT, "NCR 77C32BLT" },
+    { FB_ACCEL_S3_VIRGE, "S3 ViRGE" },
+    { FB_ACCEL_ATI_MACH64GX, "ATI Mach64GX" },
+    { FB_ACCEL_DEC_TGA, "DEC 21030 TGA" },
+    { FB_ACCEL_ATI_MACH64CT, "ATI Mach64CT" },
+    { FB_ACCEL_ATI_MACH64VT, "ATI Mach64VT" },
+    { FB_ACCEL_ATI_MACH64GT, "ATI Mach64GT" },
+    { FB_ACCEL_SUN_CREATOR, "Sun Creator/Creator3D" },
+    { FB_ACCEL_SUN_CGSIX, "Sun cg6" },
+    { FB_ACCEL_SUN_LEO, "Sun leo/zx" },
+    { FB_ACCEL_IMS_TWINTURBO, "IMS Twin Turbo" },
+    { FB_ACCEL_3DLABS_PERMEDIA2, "3Dlabs Permedia 2" },
+    { FB_ACCEL_MATROX_MGA2064W, "Matrox MGA2064W (Millennium)" },
+    { FB_ACCEL_MATROX_MGA1064SG, "Matrox MGA1064SG (Mystique)" },
+    { FB_ACCEL_MATROX_MGA2164W, "Matrox MGA2164W (Millennium II)" },
+    { FB_ACCEL_MATROX_MGA2164W_AGP, "Matrox MGA2164W (Millennium II AGP)" },
+    { FB_ACCEL_MATROX_MGAG100, "Matrox G100 (Productiva G100)" },
+    { FB_ACCEL_MATROX_MGAG200, "Matrox G200 (Millennium, Mystique)" },
+    { FB_ACCEL_SUN_CG14, "Sun cg14" },
+    { FB_ACCEL_SUN_BWTWO, "Sun bw2" },
+    { FB_ACCEL_SUN_CGTHREE, "Sun cg3" },
+    { FB_ACCEL_SUN_TCX, "Sun tcx" },
+    { FB_ACCEL_MATROX_MGAG400, "Matrox G400" },
+};
+
+
+    /*
+     *  Current Video Mode
+     */
+
+struct VideoMode Current;
+
+
+    /*
+     *  Function Prototypes
+     */
+
+int OpenFrameBuffer(const char *name);
+void CloseFrameBuffer(int fh);
+void GetVarScreenInfo(int fh, struct fb_var_screeninfo *var);
+void SetVarScreenInfo(int fh, struct fb_var_screeninfo *var);
+void GetFixScreenInfo(int fh, struct fb_fix_screeninfo *fix);
+static void ConvertFromVideoMode(const struct VideoMode *vmode,
+				 struct fb_var_screeninfo *var);
+static void ConvertToVideoMode(const struct fb_var_screeninfo *var,
+			       struct VideoMode *vmode);
+static int atoboolean(const char *var);
+static void ReadModeDB(void);
+static struct VideoMode *FindVideoMode(const char *name);
+static void ModifyVideoMode(struct VideoMode *vmode);
+static void DisplayVModeInfo(struct VideoMode *vmode);
+static void DisplayFBInfo(struct fb_fix_screeninfo *fix);
+static int FillScanRates(struct VideoMode *vmode);
+static void Usage(void) __attribute__ ((noreturn));
+int main(int argc, char *argv[]);
+
+
+    /*
+     *  Print an Error Message and Exit
+     */
+
+void Die(const char *fmt, ...)
+{
+    va_list ap;
+
+    fflush(stdout);
+    va_start(ap, fmt);
+    vfprintf(stderr, fmt, ap);
+    va_end(ap);
+    exit(1);
+}
+
+
+    /*
+     *  Open the Frame Buffer Device
+     */
+
+int OpenFrameBuffer(const char *name)
+{
+    int fh;
+
+    if (Opt_verbose)
+	printf("Opening frame buffer device `%s'\n", name);
+
+    if ((fh = open(name, O_RDONLY)) == -1)
+	Die("open %s: %s\n", name, strerror(errno));
+    return fh;
+}
+
+
+    /*
+     *  Close the Frame Buffer Device
+     */
+
+void CloseFrameBuffer(int fh)
+{
+    close(fh);
+}
+
+    /*
+     *  Get the Variable Part of the Screen Info
+     */
+
+void GetVarScreenInfo(int fh, struct fb_var_screeninfo *var)
+{
+    if (ioctl(fh, FBIOGET_VSCREENINFO, var))
+	Die("ioctl FBIOGET_VSCREENINFO: %s\n", strerror(errno));
+}
+
+
+    /*
+     *  Set (and Get) the Variable Part of the Screen Info
+     */
+
+void SetVarScreenInfo(int fh, struct fb_var_screeninfo *var)
+{
+    if (ioctl(fh, FBIOPUT_VSCREENINFO, var))
+	Die("ioctl FBIOPUT_VSCREENINFO: %s\n", strerror(errno));
+}
+
+
+    /*
+     *  Get the Fixed Part of the Screen Info
+     */
+
+void GetFixScreenInfo(int fh, struct fb_fix_screeninfo *fix)
+{
+    if (ioctl(fh, FBIOGET_FSCREENINFO, fix))
+	Die("ioctl FBIOGET_FSCREENINFO: %s\n", strerror(errno));
+}
+
+
+    /*
+     *  Conversion Routines
+     */
+
+static void ConvertFromVideoMode(const struct VideoMode *vmode,
+				 struct fb_var_screeninfo *var)
+{
+    memset(var, 0, sizeof(struct fb_var_screeninfo));
+    var->xres = vmode->xres;
+    var->yres = vmode->yres;
+    var->xres_virtual = vmode->vxres;
+    var->yres_virtual = vmode->vyres;
+    var->bits_per_pixel = vmode->depth;
+    var->nonstd = vmode->nonstd;
+    if (Opt_test)
+	var->activate = FB_ACTIVATE_TEST;
+    else
+	var->activate = FB_ACTIVATE_NOW;
+    if (Opt_all)
+	var->activate = FB_ACTIVATE_ALL;
+    var->accel_flags = vmode->accel_flags;
+    var->pixclock = vmode->pixclock;
+    var->left_margin = vmode->left;
+    var->right_margin = vmode->right;
+    var->upper_margin = vmode->upper;
+    var->lower_margin = vmode->lower;
+    var->hsync_len = vmode->hslen;
+    var->vsync_len = vmode->vslen;
+    if (vmode->hsync == HIGH)
+	var->sync |= FB_SYNC_HOR_HIGH_ACT;
+    if (vmode->vsync == HIGH)
+	var->sync |= FB_SYNC_VERT_HIGH_ACT;
+    if (vmode->csync == HIGH)
+	var->sync |= FB_SYNC_COMP_HIGH_ACT;
+    if (vmode->gsync == HIGH)
+	var->sync |= FB_SYNC_ON_GREEN;
+    if (vmode->extsync == TRUE)
+	var->sync |= FB_SYNC_EXT;
+    if (vmode->bcast == TRUE)
+	var->sync |= FB_SYNC_BROADCAST;
+    if (vmode->laced == TRUE)
+	var->vmode = FB_VMODE_INTERLACED;
+    else if (vmode->dblscan == TRUE)
+	var->vmode = FB_VMODE_DOUBLE;
+    else
+	var->vmode = FB_VMODE_NONINTERLACED;
+    var->vmode |= FB_VMODE_CONUPDATE;
+    var->red.length = vmode->red.length;
+    var->red.offset = vmode->red.offset;
+    var->green.length = vmode->green.length;
+    var->green.offset = vmode->green.offset;
+    var->blue.length = vmode->blue.length;
+    var->blue.offset = vmode->blue.offset;
+    var->transp.length = vmode->transp.length;
+    var->transp.offset = vmode->transp.offset;
+    var->grayscale = vmode->grayscale;
+}
+
+
+static void ConvertToVideoMode(const struct fb_var_screeninfo *var,
+			       struct VideoMode *vmode)
+{
+    vmode->name = NULL;
+    vmode->xres = var->xres;
+    vmode->yres = var->yres;
+    vmode->vxres = var->xres_virtual;
+    vmode->vyres = var->yres_virtual;
+    vmode->depth = var->bits_per_pixel;
+    vmode->nonstd = var->nonstd;
+    vmode->accel_flags = var->accel_flags;
+    vmode->pixclock = var->pixclock;
+    vmode->left = var->left_margin;
+    vmode->right = var->right_margin;
+    vmode->upper = var->upper_margin;
+    vmode->lower = var->lower_margin;
+    vmode->hslen = var->hsync_len;
+    vmode->vslen = var->vsync_len;
+    vmode->hsync = var->sync & FB_SYNC_HOR_HIGH_ACT ? HIGH : LOW;
+    vmode->vsync = var->sync & FB_SYNC_VERT_HIGH_ACT ? HIGH : LOW;
+    vmode->csync = var->sync & FB_SYNC_COMP_HIGH_ACT ? HIGH : LOW;
+    vmode->gsync = var->sync & FB_SYNC_ON_GREEN ? TRUE : FALSE;
+    vmode->extsync = var->sync & FB_SYNC_EXT ? TRUE : FALSE;
+    vmode->bcast = var->sync & FB_SYNC_BROADCAST ? TRUE : FALSE;
+    vmode->grayscale = var->grayscale;
+    vmode->laced = FALSE;
+    vmode->dblscan = FALSE;
+    switch (var->vmode & FB_VMODE_MASK) {
+	case FB_VMODE_INTERLACED:
+	    vmode->laced = TRUE;
+	    break;
+	case FB_VMODE_DOUBLE:
+	    vmode->dblscan = TRUE;
+	    break;
+    }
+    vmode->red.length = var->red.length;
+    vmode->red.offset = var->red.offset;
+    vmode->green.length = var->green.length;
+    vmode->green.offset = var->green.offset;
+    vmode->blue.length = var->blue.length;
+    vmode->blue.offset = var->blue.offset;
+    vmode->transp.length = var->transp.length;
+    vmode->transp.offset = var->transp.offset;
+    FillScanRates(vmode);
+}
+
+
+static int atoboolean(const char *var)
+{
+    int value = 0;
+
+    if (!strcasecmp(var, "false") || !strcasecmp(var, "low") ||
+	!strcasecmp(var, "no") || !strcasecmp(var, "off") ||
+	!strcmp(var, "0"))
+	value = 0;
+    else if (!strcasecmp(var, "true") || !strcasecmp(var, "high") ||
+	     !strcasecmp(var, "yes") || !strcasecmp(var, "on") ||
+	     !strcmp(var, "1"))
+	value = 1;
+    else
+	Die("Invalid value `%s'\n", var);
+
+    return value;
+}
+
+
+void AddVideoMode(const struct VideoMode *vmode)
+{
+    struct VideoMode *vmode2;
+
+    if (FindVideoMode(vmode->name))
+	Die("%s:%d: Duplicate mode name `%s'\n", Opt_modedb, line,
+	    vmode->name);
+    vmode2 = malloc(sizeof(struct VideoMode));
+    *vmode2 = *vmode;
+    if (!FillScanRates(vmode2))
+	Die("%s:%d: Bad video mode `%s'\n", Opt_modedb, line, vmode2->name);
+    vmode2->next = VideoModes;
+    VideoModes = vmode2;
+}
+
+
+    /*
+     *  Read the Video Mode Database
+     */
+
+static void ReadModeDB(void)
+{
+    if (Opt_verbose)
+	printf("Reading mode database from file `%s'\n", Opt_modedb);
+
+    if (!(yyin = fopen(Opt_modedb, "r")))
+	Die("fopen %s: %s\n", Opt_modedb, strerror(errno));
+    yyparse();
+    fclose(yyin);
+}
+
+
+static void getColor(struct color *color, const char** opt)
+{
+    char* ptr;
+
+    color->length = 0;
+    color->offset = 0;
+    ptr = (char*)(*opt);
+    if (!ptr)
+	return;
+    color->length = strtoul(ptr, &ptr, 0);
+    if (!ptr)
+	return;
+    if (*ptr == '/')
+	color->offset = strtoul(ptr+1, &ptr, 0);
+    if (ptr) {
+	while (*ptr && isspace(*ptr))
+	    ptr++;
+	if (*ptr == ',') {
+	    ptr++;
+	} else if (*ptr)
+	    Die("Bad RGBA syntax, rL/rO,gL/gO,bL/bO,tL/tO or rL,gL,bL,tL\n");
+    }
+    *opt = ptr;
+    return;
+}
+
+void makeRGBA(struct VideoMode *vmode, const char* opt)
+{
+    getColor(&vmode->red, &opt);
+    getColor(&vmode->green, &opt);
+    getColor(&vmode->blue, &opt);
+    getColor(&vmode->transp, &opt);
+}
+
+    /*
+     *  Find a Video Mode
+     */
+
+static struct VideoMode *FindVideoMode(const char *name)
+{
+    struct VideoMode *vmode;
+
+    for (vmode = VideoModes; vmode; vmode = vmode->next)
+	if (!strcmp(name, vmode->name))
+	    break;
+
+    return vmode;
+}
+
+
+    /*
+     *  Modify a Video Mode
+     */
+
+static void ModifyVideoMode(struct VideoMode *vmode)
+{
+    u_int hstep = 8, vstep = 2;
+
+    if (Opt_xres)
+	vmode->xres = strtoul(Opt_xres, NULL, 0);
+    if (Opt_yres)
+	vmode->yres = strtoul(Opt_yres, NULL, 0);
+    if (Opt_vxres)
+	vmode->vxres = strtoul(Opt_vxres, NULL, 0);
+    if (Opt_vyres)
+	vmode->vyres = strtoul(Opt_vyres, NULL, 0);
+    if (Opt_depth)
+	vmode->depth = strtoul(Opt_depth, NULL, 0);
+    if (Opt_nonstd)
+	vmode->nonstd = strtoul(Opt_nonstd, NULL, 0);
+    if (Opt_accel)
+	vmode->accel_flags = atoboolean(Opt_accel) ? FB_ACCELF_TEXT : 0;
+    if (Opt_pixclock)
+	vmode->pixclock = strtoul(Opt_pixclock, NULL, 0);
+    if (Opt_left)
+	vmode->left = strtoul(Opt_left, NULL, 0);
+    if (Opt_right)
+	vmode->right = strtoul(Opt_right, NULL, 0);
+    if (Opt_upper)
+	vmode->upper = strtoul(Opt_upper, NULL, 0);
+    if (Opt_lower)
+	vmode->lower = strtoul(Opt_lower, NULL, 0);
+    if (Opt_hslen)
+	vmode->hslen = strtoul(Opt_hslen, NULL, 0);
+    if (Opt_vslen)
+	vmode->vslen = strtoul(Opt_vslen, NULL, 0);
+    if (Opt_hsync)
+	vmode->hsync = atoboolean(Opt_hsync);
+    if (Opt_vsync)
+	vmode->vsync = atoboolean(Opt_vsync);
+    if (Opt_csync)
+	vmode->csync = atoboolean(Opt_csync);
+    if (Opt_gsync)
+	vmode->gsync = atoboolean(Opt_gsync);
+    if (Opt_extsync)
+	vmode->extsync = atoboolean(Opt_extsync);
+    if (Opt_bcast)
+	vmode->bcast = atoboolean(Opt_bcast);
+    if (Opt_laced)
+	vmode->laced = atoboolean(Opt_laced);
+    if (Opt_double)
+	vmode->dblscan = atoboolean(Opt_double);
+    if (Opt_grayscale)
+	vmode->grayscale = atoboolean(Opt_grayscale);
+    if (Opt_step)
+	hstep = vstep = strtoul(Opt_step, NULL, 0);
+    if (Opt_matchyres)
+        vmode->vyres = vmode->yres;
+    if (Opt_move) {
+	if (!strcasecmp(Opt_move, "left")) {
+	    if (hstep > vmode->left)
+		Die("The left margin cannot be negative\n");
+	    vmode->left -= hstep;
+	    vmode->right += hstep;
+	} else if (!strcasecmp(Opt_move, "right")) {
+	    if (hstep > vmode->right)
+		Die("The right margin cannot be negative\n");
+	    vmode->left += hstep;
+	    vmode->right -= hstep;
+	} else if (!strcasecmp(Opt_move, "up")) {
+	    if (vstep > vmode->upper)
+		Die("The upper margin cannot be negative\n");
+	    vmode->upper -= vstep;
+	    vmode->lower += vstep;
+	} else if (!strcasecmp(Opt_move, "down")) {
+	    if (vstep > vmode->lower)
+		Die("The lower margin cannot be negative\n");
+	    vmode->upper += vstep;
+	    vmode->lower -= vstep;
+	} else
+	    Die("Invalid direction `%s'\n", Opt_move);
+    }
+    if (Opt_rgba) {
+	makeRGBA(vmode, Opt_rgba);
+    }
+    if (!FillScanRates(vmode))
+	Die("Bad video mode\n");
+}
+
+
+    /*
+     *  Display the Video Mode Information
+     */
+
+static void DisplayVModeInfo(struct VideoMode *vmode)
+{
+    u_int res, sstart, send, total;
+
+    puts("");
+    if (!Opt_xfree86) {
+	printf("mode \"%dx%d", vmode->xres, vmode->yres);
+	if (vmode->pixclock) {
+	    printf("-%d\"\n", (int)(vmode->vrate+0.5));
+	    printf("    # D: %5.3f MHz, H: %5.3f kHz, V: %5.3f Hz\n",
+		   vmode->drate/1E6, vmode->hrate/1E3, vmode->vrate);
+	} else
+	    puts("\"");
+	printf("    geometry %d %d %d %d %d\n", vmode->xres, vmode->yres,
+	       vmode->vxres, vmode->vyres, vmode->depth);
+	printf("    timings %d %d %d %d %d %d %d\n", vmode->pixclock,
+	       vmode->left, vmode->right, vmode->upper, vmode->lower,
+	       vmode->hslen, vmode->vslen);
+	if (vmode->hsync)
+	    puts("    hsync high");
+	if (vmode->vsync)
+	    puts("    vsync high");
+	if (vmode->csync)
+	    puts("    csync high");
+	if (vmode->gsync)
+	    puts("    gsync true");
+	if (vmode->extsync)
+	    puts("    extsync true");
+	if (vmode->bcast)
+	    puts("    bcast true");
+	if (vmode->laced)
+	    puts("    laced true");
+	if (vmode->dblscan)
+	    puts("    double true");
+	if (vmode->nonstd)
+            printf("    nonstd %u\n", vmode->nonstd);
+	if (vmode->accel_flags)
+	    puts("    accel true");
+	if (vmode->grayscale)
+	    puts("    grayscale true");
+	printf("    rgba %u/%u,%u/%u,%u/%u,%u/%u\n",
+	    vmode->red.length, vmode->red.offset, vmode->green.length,
+	    vmode->green.offset, vmode->blue.length, vmode->blue.offset,
+	    vmode->transp.length, vmode->transp.offset);
+	puts("endmode\n");
+    } else {
+	printf("Mode \"%dx%d\"\n", vmode->xres, vmode->yres);
+	if (vmode->pixclock) {
+	    printf("    # D: %5.3f MHz, H: %5.3f kHz, V: %5.3f Hz\n",
+		   vmode->drate/1E6, vmode->hrate/1E3, vmode->vrate);
+	    printf("    DotClock %5.3f\n", vmode->drate/1E6+0.001);
+	} else
+	    puts("    DotClock Unknown");
+	res = vmode->xres;
+	sstart = res+vmode->right;
+	send = sstart+vmode->hslen;
+	total = send+vmode->left;
+	printf("    HTimings %d %d %d %d\n", res, sstart, send, total);
+	res = vmode->yres;
+	sstart = res+vmode->lower;
+	send = sstart+vmode->vslen;
+	total = send+vmode->upper;
+	printf("    VTimings %d %d %d %d\n", res, sstart, send, total);
+	printf("    Flags   ");
+	if (vmode->laced)
+	    printf(" \"Interlace\"");
+	if (vmode->dblscan)
+	    printf(" \"DoubleScan\"");
+	if (vmode->hsync)
+	    printf(" \"+HSync\"");
+	else
+	    printf(" \"-HSync\"");
+	if (vmode->vsync)
+	    printf(" \"+VSync\"");
+	else
+	    printf(" \"-VSync\"");
+	if (vmode->csync)
+	    printf(" \"Composite\"");
+	if (vmode->extsync)
+	    puts("    # Warning: XFree86 doesn't support extsync\n");
+	if (vmode->bcast)
+	    printf(" \"bcast\"");
+	if (vmode->accel_flags)
+	    puts("    # Warning: XFree86 doesn't support accel\n");
+	if (vmode->grayscale)
+	    puts("    # Warning: XFree86 doesn't support grayscale\n");
+	puts("\nEndMode\n");
+    }
+}
+
+
+    /*
+     *  Display the Frame Buffer Device Information
+     */
+
+static void DisplayFBInfo(struct fb_fix_screeninfo *fix)
+{
+    int i;
+
+    puts("Frame buffer device information:");
+    printf("    Name        : %s\n", fix->id);
+    printf("    Address     : %p\n", fix->smem_start);
+    printf("    Size        : %d\n", fix->smem_len);
+    printf("    Type        : ");
+    switch (fix->type) {
+	case FB_TYPE_PACKED_PIXELS:
+	    puts("PACKED PIXELS");
+	    break;
+	case FB_TYPE_PLANES:
+	    puts("PLANES");
+	    break;
+	case FB_TYPE_INTERLEAVED_PLANES:
+	    printf("INTERLEAVED PLANES (%d bytes interleave)\n",
+		   fix->type_aux);
+	    break;
+	case FB_TYPE_TEXT:
+	    for (i = 0; i < sizeof(Textmodes)/sizeof(*Textmodes); i++)
+		if (fix->type_aux == Textmodes[i].id)
+		    break;
+	    if (i < sizeof(Textmodes)/sizeof(*Textmodes))
+		puts(Textmodes[i].name);
+	    else
+		printf("Unknown text (%d)\n", fix->type_aux);
+	    break;
+	case FB_TYPE_VGA_PLANES:
+	    {
+	    	struct textentry *t;
+		
+		for (t = VGAModes; t->name; t++)
+		    if (fix->type_aux == t->id)
+		    	break;
+		if (t->name)
+		    puts(t->name);
+		else
+	            printf("Unknown VGA mode (%d)\n", fix->type_aux);
+	    }
+	    break;
+	default:
+	    printf("%d (UNKNOWN)\n", fix->type);
+	    printf("    Type_aux    : %d\n", fix->type_aux);
+	    break;
+    }
+    printf("    Visual      : ");
+    switch (fix->visual) {
+	case FB_VISUAL_MONO01:
+	    puts("MONO01");
+	    break;
+	case FB_VISUAL_MONO10:
+	    puts("MONO10");
+	    break;
+	case FB_VISUAL_TRUECOLOR:
+	    puts("TRUECOLOR");
+	    break;
+	case FB_VISUAL_PSEUDOCOLOR:
+	    puts("PSEUDOCOLOR");
+	    break;
+	case FB_VISUAL_DIRECTCOLOR:
+	    puts("DIRECTCOLOR");
+	    break;
+	case FB_VISUAL_STATIC_PSEUDOCOLOR:
+	    puts("STATIC PSEUDOCOLOR");
+	    break;
+	default:
+	    printf("%d (UNKNOWN)\n", fix->visual);
+	    break;
+    }
+    printf("    XPanStep    : %d\n", fix->xpanstep);
+    printf("    YPanStep    : %d\n", fix->ypanstep);
+    printf("    YWrapStep   : %d\n", fix->ywrapstep);
+    printf("    LineLength  : %d\n", fix->line_length);
+    if (fix->mmio_len) {
+	printf("    MMIO Address: %p\n", fix->mmio_start);
+	printf("    MMIO Size   : %d\n", fix->mmio_len);
+    }
+    printf("    Accelerator : ");
+    for (i = 0; i < sizeof(Accelerators)/sizeof(*Accelerators); i++)
+	if (fix->accel == Accelerators[i].id)
+	    break;
+    if (i < sizeof(Accelerators)/sizeof(*Accelerators))
+	puts(Accelerators[i].name);
+    else
+	printf("Unknown (%d)\n", fix->accel);
+}
+
+
+    /*
+     *  Calculate the Scan Rates for a Video Mode
+     */
+
+static int FillScanRates(struct VideoMode *vmode)
+{
+    u_int htotal = vmode->left+vmode->xres+vmode->right+vmode->hslen;
+    u_int vtotal = vmode->upper+vmode->yres+vmode->lower+vmode->vslen;
+
+    if (vmode->dblscan)
+	vtotal <<= 2;
+    else if (!vmode->laced)
+	vtotal <<= 1;
+
+    if (!htotal || !vtotal)
+	return 0;
+
+    if (vmode->pixclock) {
+	vmode->drate = 1E12/vmode->pixclock;
+	vmode->hrate = vmode->drate/htotal;
+	vmode->vrate = vmode->hrate/vtotal*2;
+    } else {
+	vmode->drate = 0;
+	vmode->hrate = 0;
+	vmode->vrate = 0;
+    }
+
+    return 1;
+}
+
+
+    /*
+     *  Print the Usage Template and Exit
+     */
+
+static void Usage(void)
+{
+    puts(VERSION);
+    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"
+	"  Frame buffer special device nodes:\n"
+	"    -fb <device>       : processed frame buffer device\n"
+	"                         (default is " DEFAULT_FRAMEBUFFER ")\n"
+	"  Video mode database:\n"
+	"    -db <file>         : video mode database file\n"
+	"                         (default is " DEFAULT_MODEDBFILE ")\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"
+	"    -nonstd <value>    : select nonstandard video mode\n"
+	"    -g, --geometry ... : set all geometry parameters at once\n"
+	"    -match             : set virtual vertical resolution by virtual resolution\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"
+	"  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"
+	"    -rgba <r,g,b,a>    : recommended length of color entries\n"
+	"    -grayscale <value> : grayscale 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);
+}
+
+
+    /*
+     *  Main Routine
+     */
+
+int main(int argc, char *argv[])
+{
+    struct VideoMode *vmode;
+    struct fb_var_screeninfo var;
+    struct fb_fix_screeninfo fix;
+    int fh = -1, i;
+
+    ProgramName = argv[0];
+
+    /*
+     *  Parse the Options
+     */
+
+    while (--argc > 0) {
+	argv++;
+	if (!strcmp(argv[0], "-h") || !strcmp(argv[0], "--help"))
+	    Usage();
+	else if (!strcmp(argv[0], "-v") || !strcmp(argv[0], "--verbose"))
+	    Opt_verbose = 1;
+	else if (!strcmp(argv[0], "-V") || !strcmp(argv[0], "--version"))
+	    Opt_version = 1;
+	else if (!strcmp(argv[0], "--test"))
+	    Opt_test = 1;
+	else if (!strcmp(argv[0], "-s") || !strcmp(argv[0], "--show"))
+	    Opt_show = 1;
+	else if (!strcmp(argv[0], "-i") || !strcmp(argv[0], "--info")) {
+	    Opt_show = 1;
+	    Opt_info = 1;
+	} else if (!strcmp(argv[0], "-x") || !strcmp(argv[0], "--xfree86"))
+	    Opt_xfree86 = 1;
+	else if (!strcmp(argv[0], "-a") || !strcmp(argv[0], "--all"))
+	    Opt_all = 1;
+	else if (!strcmp(argv[0], "-g") || !strcmp(argv[0], "--geometry")) {
+	    if (argc > 5) {
+		Opt_xres = argv[1];
+		Opt_yres = argv[2];
+		Opt_vxres = argv[3];
+		Opt_vyres = argv[4];
+		Opt_depth = argv[5];
+		Opt_change = 1;
+		argc -= 5;
+		argv += 5;
+	    } else
+		Usage();
+	} else if (!strcmp(argv[0], "-t") || !strcmp(argv[0], "--timings")) {
+	    if (argc > 7) {
+		Opt_pixclock = argv[1];
+		Opt_left = argv[2];
+		Opt_right = argv[3];
+		Opt_upper = argv[4];
+		Opt_lower = argv[5];
+		Opt_hslen = argv[6];
+		Opt_vslen = argv[7];
+		Opt_change = 1;
+		argc -= 7;
+		argv += 7;
+	    } else
+		Usage();
+	} else if (!strcmp(argv[0], "-match")) {
+	    Opt_matchyres = argv[0];
+	    Opt_change = 1;
+	} else {
+	    for (i = 0; Options[i].name; i++)
+		if (!strcmp(argv[0], Options[i].name))
+		    break;
+	    if (Options[i].name) {
+		if (argc-- > 1) {
+		    *Options[i].value = argv[1];
+		    Opt_change |= Options[i].change;
+		    argv++;
+		} else
+		    Usage();
+	    } else if (!Opt_modename) {
+		Opt_modename = argv[0];
+		Opt_change = 1;
+	    } else
+		Usage();
+	}
+    }
+
+    if (Opt_version || Opt_verbose)
+	puts(VERSION);
+
+    if (!Opt_fb)
+	Opt_fb = DEFAULT_FRAMEBUFFER;
+
+    /*
+     *  Open the Frame Buffer Device
+     */
+
+    fh = OpenFrameBuffer(Opt_fb);
+
+    /*
+     *  Get the Video Mode
+     */
+
+    if (Opt_modename) {
+
+	/*
+	 *  Read the Video Mode Database
+	 */
+
+	ReadModeDB();
+
+	if (!(vmode = FindVideoMode(Opt_modename)))
+	    Die("Unknown video mode `%s'\n", Opt_modename);      
+
+	Current = *vmode;
+	if (Opt_verbose)
+	    printf("Using video mode `%s'\n", Opt_modename);
+    } else {
+	GetVarScreenInfo(fh, &var);
+	ConvertToVideoMode(&var, &Current);
+	if (Opt_verbose)
+	    printf("Using current video mode from `%s'\n", Opt_fb);
+    }
+
+    if (Opt_change) {
+
+	/*
+	 *  Optionally Modify the Video Mode
+	 */
+
+	ModifyVideoMode(&Current);
+
+	/*
+	 *  Set the Video Mode
+	 */
+
+	ConvertFromVideoMode(&Current, &var);
+	if (Opt_verbose)
+	    printf("Setting video mode to `%s'\n", Opt_fb);
+	SetVarScreenInfo(fh, &var);
+	ConvertToVideoMode(&var, &Current);
+    }
+
+    /*
+     *  Display some Video Mode Information
+     */
+
+    if (Opt_show || !Opt_change)
+	DisplayVModeInfo(&Current);
+
+    if (Opt_info) {
+	if (Opt_verbose)
+	    puts("Getting further frame buffer information");
+	GetFixScreenInfo(fh, &fix);
+	DisplayFBInfo(&fix);
+    }
+
+    /*
+     *  Close the Frame Buffer Device
+     */
+
+    CloseFrameBuffer(fh);
+
+    exit(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/fbset/fbset.h	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,82 @@
+/*
+ *  Linux Frame Buffer Device Configuration
+ *
+ *  © Copyright 1995-1998 by Geert Uytterhoeven
+ *			(Geert.Uytterhoeven@cs.kuleuven.ac.be)
+ *
+ *  --------------------------------------------------------------------------
+ *
+ *  This file is subject to the terms and conditions of the GNU General Public
+ *  License. See the file COPYING in the main directory of the Linux
+ *  distribution for more details.
+ */
+
+
+#include <stdio.h>
+#include <sys/types.h>
+
+#ifdef __GLIBC__
+#include <asm/types.h>
+#endif
+
+#define VERSION         "Linux Frame Buffer Device Configuration " \
+			"Version 2.1 (23/06/1999)\n"  \
+			"(C) Copyright 1995-1999 by Geert Uytterhoeven\n"
+
+#define LOW		(0)
+#define HIGH		(1)
+
+#define FALSE		(0)
+#define TRUE		(1)
+
+struct color {
+    unsigned int length;
+    unsigned int offset;
+};
+
+struct VideoMode {
+    struct VideoMode *next;
+    const char *name;
+    /* geometry */
+    __u32 xres;
+    __u32 yres;
+    __u32 vxres;
+    __u32 vyres;
+    __u32 depth;
+    __u32 nonstd;
+    /* acceleration */
+    __u32 accel_flags;
+    /* timings */
+    __u32 pixclock;
+    __u32 left;
+    __u32 right;
+    __u32 upper;
+    __u32 lower;
+    __u32 hslen;
+    __u32 vslen;
+    /* flags */
+    unsigned hsync : 1;
+    unsigned vsync : 1;
+    unsigned csync : 1;
+    unsigned gsync : 1;
+    unsigned extsync : 1;
+    unsigned bcast : 1;
+    unsigned laced : 1;
+    unsigned dblscan : 1;
+    unsigned grayscale : 1;
+    /* scanrates */
+    double drate;
+    double hrate;
+    double vrate;
+    /* RGB entries */
+    struct color red, green, blue, transp;
+};
+
+extern FILE *yyin;
+extern int line;
+extern const char *Opt_modedb;
+
+extern int yyparse(void);
+extern void Die(const char *fmt, ...) __attribute__ ((noreturn));
+extern void AddVideoMode(const struct VideoMode *vmode);
+extern void makeRGBA(struct VideoMode *vmode, const char* opt);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/fbset/modeline2fb	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,150 @@
+#!/usr/bin/perl
+
+# Simple modeline-to-fb.modes translator
+# (c) 1998 by Patrick Reynolds
+# distributed under the GNU General Public License
+ 
+# mapping of modeline options to fb.modes options
+%options_map = (
+  "-hsync" => "hsync low",
+  "-vsync" => "vsync low",
+  "+hsync" => "hsync high",
+  "+vsync" => "vsync high",
+  "interlace" => "laced true",
+  "doublescan" => "double true"
+);
+
+@possible_vxres = ( 640, 800, 1024, 1152, 1280, 1600, 1920, 2048 );
+
+# default settings (override with -d and -r)
+$depth = 8;
+$rounding = 128;
+
+# parse options
+while ($ARGV[0] =~ /^-/) {
+  $arg = shift;
+  if ($arg eq "-d" || $arg eq "--depth") {
+    if (!($arg = shift @ARGV)) {
+      usage("-d requires an argument");
+    }
+    $depth = $arg;
+  }
+  elsif ($arg eq "-r" || $arg eq "--rounding") {
+    if (!($arg = shift @ARGV)) {
+      usage("-r requires an argument");
+    }
+    $rounding = $arg;
+  }
+  elsif ($arg eq "-x" || $arg eq "--vxres") {
+    if (!($arg = shift @ARGV)) {
+      usage("-x requires an argument");
+    }
+    push @possible_vxres, (split/,/,$arg);
+    @possible_vxres = sort { $a <=> $b } @possible_vxres;
+    print "new vxres: " . (join ",", @possible_vxres) . "\n";
+  }
+  elsif ($arg eq "-h" || $arg eq "--help") {
+    usage();
+  }
+  else {
+    usage("unknown option: $arg");
+  }
+}
+
+# find out how much video memory is available
+open(FBSET, "fbset -i|") || die "could not detect available video memory";
+while (<FBSET>) {
+  if (/Size\s*:\s*(\d+)/) {
+    $size = $1;
+    last;
+  }
+}
+if (!$size) { die "could not detect available video memory"; }
+
+# huge kludge (hey, that rhymes!) ...
+#   subtract 16384 from the available memory $size
+#   why?  the default 640x480 mode uses all but 16384, and when I set it
+#   to use more than that, it oopses (!).  So... for safety's sake, and
+#   because you probably don't use those 15-25 lines anyway...
+$size -= 16384;
+
+print "# modes.fb - video mode descriptions for fbset
+#
+# See fbset(8) and fb.modes(5) for more information
+
+";
+
+$flag = 0;
+# read all XF86Config files
+while(<>) {
+  chomp;
+  next if !(($name, $clock, $xres, $xsyncstart, $xsyncend, $xfres,
+                  $yres, $ysyncstart, $ysyncend, $yfres, $extra) =
+    /^\s*modeline\s+"([^"]+)"\s+([0-9.]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s*(.*)$/i);
+  $flag = 1;
+
+  # timing transformations, as described in the fb HOWTO
+  $pixtime = int(1000000/$clock);
+  $left = $xfres - $xsyncend;
+  $right = $xsyncstart - $xres;
+  $hsynclen = $xsyncend - $xsyncstart;
+  $top = $yfres - $ysyncend;
+  $bottom = $ysyncstart - $yres;
+  $vsynclen = $ysyncend - $ysyncstart;
+
+  # pick a virtual X and Y resolution
+  $vxres = get_vxres($xres);
+  if ($vxres < 0) {
+    print STDERR "Could not guess a good virtual resolution for mode $name.\n";
+    print STDERR "Use the advanced options --rounding and --vxres.\n";
+    next;
+  }
+  $vyres = int($size/$vxres);
+
+  # print out our entry
+  print "mode \"$name\"\n";
+  print "  geometry   $xres $yres   $vxres $vyres   $depth\n";
+  print "  timings    $pixtime   $left $right   $top $bottom   $hsynclen $vsynclen\n";
+
+  # handle extra options at the end of the modeline
+  $extra =~ tr/A-Z/a-z/;
+  @options = split/\s+/,$extra;
+  foreach (@options) {
+    if ($options_map{$_}) {
+      print "  $options_map{$_}\n";
+    }
+    else {
+      print "  # unknown option: $_\n";
+    }
+  }
+  print "endmode\n\n";
+}
+
+if (!$flag) {
+  print STDERR "No modelines found.\n";
+  print STDERR "Make sure the file you specified was an XF86Config file and\n";
+  print STDERR "used the single-line Modeline format.\n\n";
+  print STDERR "Use \"$0 --help\" for help.\n";
+}
+
+sub get_vxres {
+  foreach (@possible_vxres) {
+    return $_ if ($_ >= $_[0] && ($_ % $rounding) == 0);
+  }
+  return -1;
+}
+
+sub usage {
+  print STDERR "$_[0]\n" if ($_[0]);
+  print STDERR "$0 [OPTION] [FILES]\n\n";
+  print STDERR "  -d,--depth depth     use a certain display depth (default is 8)\n";
+  print STDERR "  -h,--help            what you see here\n\n";
+  print STDERR "Advanced options:\n";
+  print STDERR "  -r,--rounding div    vxres divisor (default is 128)\n";
+  print STDERR "  -x,--vxres X,X,X,... extra possible vxres values\n\n";
+  print STDERR "[FILES] refers to one or more XF86Config files.  Note that\n";
+  print STDERR "all modelines must be in single-line format.\n\n";
+  print STDERR "Example:\n";
+  print STDERR "  $0 -d 16 /etc/X11/XF86Config\n";
+  exit 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/fbset/modes.l	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,136 @@
+
+/*
+ *  Linux Frame Buffer Device Configuration
+ *
+ *  © Copyright 1995-1998 by Geert Uytterhoeven
+ *		       (Geert.Uytterhoeven@cs.kuleuven.ac.be)
+ *
+ *  --------------------------------------------------------------------------
+ *
+ *  This file is subject to the terms and conditions of the GNU General Public
+ *  License. See the file COPYING in the main directory of the Linux
+ *  distribution for more details.
+ */
+
+
+%{
+
+#define YYSTYPE		long
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "fbset.h"
+#include "modes.tab.h"
+
+struct keyword {
+    const char *name;
+    int token;
+    int value;
+};
+
+static struct keyword keywords[] = {
+    { "mode", MODE, 0 },
+    { "geometry", GEOMETRY, 0 },
+    { "timings", TIMINGS, 0 },
+    { "hsync", HSYNC, 0 },
+    { "vsync", VSYNC, 0 },
+    { "csync", CSYNC, 0 },
+    { "gsync", GSYNC, 0 },
+    { "extsync", EXTSYNC, 0 },
+    { "bcast", BCAST, 0 },
+    { "laced", LACED, 0 },
+    { "double", DOUBLE, 0 },
+    { "rgba", RGBA, 0 },
+    { "nonstd", NONSTD, 0 },
+    { "accel", ACCEL, 0 },
+    { "grayscale", GRAYSCALE, 0 },
+    { "endmode", ENDMODE, 0 },
+    { "low", POLARITY, LOW },
+    { "high", POLARITY, HIGH },
+    { "false", BOOLEAN, FALSE },
+    { "true", BOOLEAN, TRUE },
+    { "", -1, 0 }
+};
+
+int line = 1;
+
+
+void yyerror(const char *s)
+{
+    Die("%s:%d: %s\n", Opt_modedb, line, s);
+}
+
+
+int yywrap(void)
+{
+    return 1;
+}
+
+
+static int FindToken(const char *s)
+{
+    int i;
+
+    for (i = 0; keywords[i].token > 0; i++)
+	if (!strcasecmp(s, keywords[i].name)) {
+	    yylval = keywords[i].value;
+	    return keywords[i].token;
+	}
+    Die("%s:%d: Unknown keyword `%s'\n", Opt_modedb, line, s);
+}
+
+
+static const char *CopyString(const char *s)
+{
+    int len;
+    char *s2;
+
+    len = strlen(s)-2;
+    if (!(s2 = malloc(len+1)))
+	Die("No memory\n");
+    strncpy(s2, s+1, len);
+    s2[len] = '\0';
+    return s2;
+}
+
+
+%}
+
+keyword	[a-zA-Z][a-zA-Z0-9]*
+number	[0-9]*
+string	\"[^\"\n]*\"
+comment	\#([^\n]*)
+space	[ \t]+
+junk	.
+
+%%
+
+{keyword}   {
+		return FindToken(yytext);
+	    }
+
+{number}    {
+		yylval = strtoul(yytext, NULL, 0);
+		return NUMBER;
+	    }
+
+{string}    {
+		yylval = (unsigned long)CopyString(yytext);
+		return STRING;
+	    }
+
+{comment}$  break;
+
+{space}	    break;
+
+\n	    {
+		line++;
+		break;
+	    }
+
+{junk}	    {
+		Die("%s:%d: Invalid token `%s'\n", Opt_modedb, line, yytext);
+	    }
+
+%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/fbset/modes.y	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,175 @@
+/*
+ *  Linux Frame Buffer Device Configuration
+ *
+ *  © Copyright 1995-1998 by Geert Uytterhoeven
+ *		       (Geert.Uytterhoeven@cs.kuleuven.ac.be)
+ *
+ *  --------------------------------------------------------------------------
+ *
+ *  This file is subject to the terms and conditions of the GNU General Public
+ *  License. See the file COPYING in the main directory of the Linux
+ *  distribution for more details.
+ */
+
+
+%{
+
+#define YYSTYPE		long
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "fb.h"
+#include "fbset.h"
+
+extern int yylex(void);
+extern void yyerror(const char *s);
+extern int line;
+
+
+static struct VideoMode VideoMode;
+
+static void ClearVideoMode(void)
+{
+    memset(&VideoMode, 0, sizeof(VideoMode));
+    VideoMode.accel_flags = FB_ACCELF_TEXT;
+}
+
+%}
+
+%start file
+
+%token MODE GEOMETRY TIMINGS HSYNC VSYNC CSYNC GSYNC EXTSYNC BCAST LACED DOUBLE
+       RGBA NONSTD ACCEL GRAYSCALE
+       ENDMODE POLARITY BOOLEAN STRING NUMBER 
+
+%%
+
+file	  : vmodes
+	  ;
+
+
+vmodes	  : /* empty */
+	  | vmodes vmode
+	  ;
+
+vmode	  : MODE STRING geometry timings options ENDMODE
+	    {
+		VideoMode.name = (const char *)$2;
+		AddVideoMode(&VideoMode);
+		ClearVideoMode();
+	    }
+	  ;
+
+geometry  : GEOMETRY NUMBER NUMBER NUMBER NUMBER NUMBER
+	    {
+		ClearVideoMode();
+		VideoMode.xres = $2;
+		VideoMode.yres = $3;
+		VideoMode.vxres = $4;
+		VideoMode.vyres = $5;
+		VideoMode.depth = $6;
+	    }
+	  ;
+
+timings	  : TIMINGS NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER
+	    {
+		VideoMode.pixclock = $2;
+		VideoMode.left = $3;
+		VideoMode.right = $4;
+		VideoMode.upper = $5;
+		VideoMode.lower = $6;
+		VideoMode.hslen = $7;
+		VideoMode.vslen = $8;
+	    }
+	  ;
+
+options	  : /* empty */
+	  | options hsync
+	  | options vsync
+	  | options csync
+	  | options gsync
+	  | options extsync
+	  | options bcast
+	  | options laced
+	  | options double
+	  | options rgba
+	  | options nonstd
+	  | options accel
+	  | options grayscale
+	  ;
+
+hsync	  : HSYNC POLARITY
+	    {
+		VideoMode.hsync = $2;
+	    }
+	  ;
+
+vsync	  : VSYNC POLARITY
+	    {
+		VideoMode.vsync = $2;
+	    }
+	  ;
+
+csync	  : CSYNC POLARITY
+	    {
+		VideoMode.csync = $2;
+	    }
+	  ;
+
+gsync	  : GSYNC POLARITY
+	    {
+		VideoMode.gsync = $2;
+	    }
+	  ;
+
+extsync	  : EXTSYNC BOOLEAN
+	    {
+		VideoMode.extsync = $2;
+	    }
+	  ;
+
+bcast	  : BCAST BOOLEAN
+	    {
+		VideoMode.bcast = $2;
+	    }
+	  ;
+
+laced	  : LACED BOOLEAN
+	    {
+		VideoMode.laced = $2;
+	    }
+	  ;
+
+double	  : DOUBLE BOOLEAN
+	    {
+		VideoMode.dblscan = $2;
+	    }
+	  ;
+
+rgba      : RGBA STRING
+            {
+		makeRGBA(&VideoMode, (const char*)$2);
+	    }
+	  ;
+
+nonstd    : NONSTD NUMBER
+            {
+	    	VideoMode.nonstd = $2;
+	    }
+	  ;
+
+accel	  : ACCEL BOOLEAN
+	    {
+		VideoMode.accel_flags = $2;
+	    }
+	  ;
+
+grayscale : GRAYSCALE BOOLEAN
+	    {
+		VideoMode.grayscale = $2;
+	    }
+	  ;
+	  
+%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/independ	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,16 @@
+
+# SETUP TVout
+# Independent picture on TV and Monitor
+
+# CRTC1 -> TVout
+matroxset/matroxset -f /dev/fb0 -m 2
+
+# CRTC2 -> Monitor
+matroxset/matroxset -f /dev/fb1 -m 1
+
+# Enable TV
+matroxset/matroxset 1
+
+# move tty1-2 to CRTC2
+con2fb/con2fb /dev/fb1 /dev/tty1
+con2fb/con2fb /dev/fb1 /dev/tty2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/matroxfbtune	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,142 @@
+#!/bin/sh
+# needs very much fixing
+
+#
+# 720x576, the upper left corner is right on my TV, but
+# it's too tall and wide
+#
+
+LEFT=54
+RIGHT=-36
+UPPER=55
+LOWER=-6
+XRES=720
+YRES=576
+
+while [ 1 ]; do
+
+clear
+
+echo q w	left
+echo a s	right
+echo e r	upper
+echo d f	lower
+echo t y	xres
+echo g h	yres
+echo z		reset
+echo x		save
+
+echo n		LEFT
+echo m		RIGHT
+echo o		TALLER	-BUG-
+echo k		SHORTER	-BUG-
+echo p		UP
+echo l		DOWN
+
+echo $LEFT $RIGHT
+echo $UPPER $LOWER
+echo $XRES $YRES
+echo
+fbset
+
+read ABC
+
+case "$ABC" in
+	q)
+	LEFT=$(($LEFT-2))
+	;;
+
+	w)
+	LEFT=$(($LEFT+2))
+	;;
+
+	a)
+	RIGHT=$(($RIGHT-2))
+	;;
+
+	s)
+	RIGHT=$(($RIGHT+2))
+	;;
+
+	e)
+	UPPER=$(($UPPER-2))
+	;;
+
+	r)
+	UPPER=$(($UPPER+2))
+	;;
+
+	d)
+	LOWER=$(($LOWER-2))
+	;;
+
+	f)
+	LOWER=$(($LOWER+2))
+	;;
+
+	t)
+	XRES=$(($XRES-2))
+	;;
+
+	y)
+	XRES=$(($XRES+2))
+	;;
+
+	g)
+	YRES=$(($YRES-2))
+	;;
+
+	h)
+	YRES=$(($YRES+2))
+	;;
+
+	n)
+	LEFT=$(($LEFT-2))
+	RIGHT=$(($RIGHT+2))
+	;;
+
+	m)
+	LEFT=$(($LEFT+2))
+	RIGHT=$(($RIGHT-2))
+	;;
+
+	o)
+	UPPER=$(($UPPER-2))
+	LOWER=$(($LOWER-2))
+	YRES=$(($YRES+4))
+	;;
+
+	k)
+	UPPER=$(($UPPER+2))
+	LOWER=$(($LOWER+2))
+	YRES=$(($YRES-4))
+	;;
+
+	p)
+	UPPER=$(($UPPER-2))
+	LOWER=$(($LOWER+2))
+	;;
+
+	l)
+	UPPER=$(($UPPER+2))
+	LOWER=$(($LOWER-2))
+	;;
+
+	z)
+LEFT=54
+RIGHT=-36
+UPPER=55
+LOWER=-6
+XRES=720
+YRES=576
+	;;
+
+	x)
+	echo "fbset -fb /dev/fb1 -left $LEFT -right $RIGHT -upper $UPPER -lower $LOWER -hslen 46 -vslen 4 -xres $XRES -yres $YRES -vxres 720 -vyres 576 -depth 32 -laced false -bcast true" > save
+	;;
+
+esac
+
+fbset -fb /dev/fb1 -left $LEFT -right $RIGHT -upper $UPPER -lower $LOWER -hslen 46 -vslen 4 -xres $XRES -yres $YRES -vxres 720 -vyres 576 -depth 32 -laced false -bcast true
+
+done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/matroxset/.cvsignore	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,1 @@
+matroxset
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/matroxset/Makefile	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,10 @@
+CFLAGS = -O2 -W -Wall
+
+all: matroxset
+
+matrox:	matroxset.o
+
+matroxset.o:	matroxset.c
+
+clean:
+	-rm *.o matroxset
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/matroxset/fb.h	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,502 @@
+#ifndef _LINUX_FB_H
+#define _LINUX_FB_H
+
+#include <linux/tty.h>
+#include <asm/types.h>
+
+/* Definitions of frame buffers						*/
+
+#define FB_MAJOR		29
+#define FB_MAX			32	/* sufficient for now */
+
+/* ioctls
+   0x46 is 'F'								*/
+#define FBIOGET_VSCREENINFO	0x4600
+#define FBIOPUT_VSCREENINFO	0x4601
+#define FBIOGET_FSCREENINFO	0x4602
+#define FBIOGETCMAP		0x4604
+#define FBIOPUTCMAP		0x4605
+#define FBIOPAN_DISPLAY		0x4606
+/* 0x4607-0x460B are defined below */
+/* #define FBIOGET_MONITORSPEC	0x460C */
+/* #define FBIOPUT_MONITORSPEC	0x460D */
+/* #define FBIOSWITCH_MONIBIT	0x460E */
+#define FBIOGET_CON2FBMAP	0x460F
+#define FBIOPUT_CON2FBMAP	0x4610
+#define FBIOBLANK		0x4611		/* arg: 0 or vesa level + 1 */
+#define FBIOGET_VBLANK		_IOR('F', 0x12, struct fb_vblank)
+
+/* next 2 lines are temporary solution, support in 2.5 will be different */
+#define FBIOGET_VT_VSCREENINFO	0x4680
+#define FBIOPUT_VT_VSCREENINFO	0x4681
+
+
+#define FB_TYPE_PACKED_PIXELS		0	/* Packed Pixels	*/
+#define FB_TYPE_PLANES			1	/* Non interleaved planes */
+#define FB_TYPE_INTERLEAVED_PLANES	2	/* Interleaved planes	*/
+#define FB_TYPE_TEXT			3	/* Text/attributes	*/
+#define FB_TYPE_VGA_PLANES		4	/* EGA/VGA planes	*/
+
+#define FB_AUX_TEXT_MDA		0	/* Monochrome text */
+#define FB_AUX_TEXT_CGA		1	/* CGA/EGA/VGA Color text */
+#define FB_AUX_TEXT_S3_MMIO	2	/* S3 MMIO fasttext */
+#define FB_AUX_TEXT_MGA_STEP16	3	/* MGA Millenium I: text, attr, 14 reserved bytes */
+#define FB_AUX_TEXT_MGA_STEP8	4	/* other MGAs:      text, attr,  6 reserved bytes */
+
+#define FB_AUX_VGA_PLANES_VGA4		0	/* 16 color planes (EGA/VGA) */
+#define FB_AUX_VGA_PLANES_CFB4		1	/* CFB4 in planes (VGA) */
+#define FB_AUX_VGA_PLANES_CFB8		2	/* CFB8 in planes (VGA) */
+
+#define FB_VISUAL_MONO01		0	/* Monochr. 1=Black 0=White */
+#define FB_VISUAL_MONO10		1	/* Monochr. 1=White 0=Black */
+#define FB_VISUAL_TRUECOLOR		2	/* True color	*/
+#define FB_VISUAL_PSEUDOCOLOR		3	/* Pseudo color (like atari) */
+#define FB_VISUAL_DIRECTCOLOR		4	/* Direct color */
+#define FB_VISUAL_STATIC_PSEUDOCOLOR	5	/* Pseudo color readonly */
+
+#define FB_ACCEL_NONE		0	/* no hardware accelerator	*/
+#define FB_ACCEL_ATARIBLITT	1	/* Atari Blitter		*/
+#define FB_ACCEL_AMIGABLITT	2	/* Amiga Blitter                */
+#define FB_ACCEL_S3_TRIO64	3	/* Cybervision64 (S3 Trio64)    */
+#define FB_ACCEL_NCR_77C32BLT	4	/* RetinaZ3 (NCR 77C32BLT)      */
+#define FB_ACCEL_S3_VIRGE	5	/* Cybervision64/3D (S3 ViRGE)	*/
+#define FB_ACCEL_ATI_MACH64GX	6	/* ATI Mach 64GX family		*/
+#define FB_ACCEL_DEC_TGA	7	/* DEC 21030 TGA		*/
+#define FB_ACCEL_ATI_MACH64CT	8	/* ATI Mach 64CT family		*/
+#define FB_ACCEL_ATI_MACH64VT	9	/* ATI Mach 64CT family VT class */
+#define FB_ACCEL_ATI_MACH64GT	10	/* ATI Mach 64CT family GT class */
+#define FB_ACCEL_SUN_CREATOR	11	/* Sun Creator/Creator3D	*/
+#define FB_ACCEL_SUN_CGSIX	12	/* Sun cg6			*/
+#define FB_ACCEL_SUN_LEO	13	/* Sun leo/zx			*/
+#define FB_ACCEL_IMS_TWINTURBO	14	/* IMS Twin Turbo		*/
+#define FB_ACCEL_3DLABS_PERMEDIA2 15	/* 3Dlabs Permedia 2		*/
+#define FB_ACCEL_MATROX_MGA2064W 16	/* Matrox MGA2064W (Millenium)	*/
+#define FB_ACCEL_MATROX_MGA1064SG 17	/* Matrox MGA1064SG (Mystique)	*/
+#define FB_ACCEL_MATROX_MGA2164W 18	/* Matrox MGA2164W (Millenium II) */
+#define FB_ACCEL_MATROX_MGA2164W_AGP 19	/* Matrox MGA2164W (Millenium II) */
+#define FB_ACCEL_MATROX_MGAG100	20	/* Matrox G100 (Productiva G100) */
+#define FB_ACCEL_MATROX_MGAG200	21	/* Matrox G200 (Myst, Mill, ...) */
+#define FB_ACCEL_SUN_CG14	22	/* Sun cgfourteen		 */
+#define FB_ACCEL_SUN_BWTWO	23	/* Sun bwtwo			*/
+#define FB_ACCEL_SUN_CGTHREE	24	/* Sun cgthree			*/
+#define FB_ACCEL_SUN_TCX	25	/* Sun tcx			*/
+#define FB_ACCEL_MATROX_MGAG400	26	/* Matrox G400			*/
+#define FB_ACCEL_NV3		27	/* nVidia RIVA 128              */
+#define FB_ACCEL_NV4		28	/* nVidia RIVA TNT		*/
+#define FB_ACCEL_NV5		29	/* nVidia RIVA TNT2		*/
+#define FB_ACCEL_CT_6555x	30	/* C&T 6555x			*/
+#define FB_ACCEL_3DFX_BANSHEE	31	/* 3Dfx Banshee			*/
+#define FB_ACCEL_ATI_RAGE128	32	/* ATI Rage128 family		*/
+
+struct fb_fix_screeninfo {
+	char id[16];			/* identification string eg "TT Builtin" */
+	unsigned long smem_start;	/* Start of frame buffer mem */
+					/* (physical address) */
+	__u32 smem_len;			/* Length of frame buffer mem */
+	__u32 type;			/* see FB_TYPE_*		*/
+	__u32 type_aux;			/* Interleave for interleaved Planes */
+	__u32 visual;			/* see FB_VISUAL_*		*/ 
+	__u16 xpanstep;			/* zero if no hardware panning  */
+	__u16 ypanstep;			/* zero if no hardware panning  */
+	__u16 ywrapstep;		/* zero if no hardware ywrap    */
+	__u32 line_length;		/* length of a line in bytes    */
+	unsigned long mmio_start;	/* Start of Memory Mapped I/O   */
+					/* (physical address) */
+	__u32 mmio_len;			/* Length of Memory Mapped I/O  */
+	__u32 accel;			/* Type of acceleration available */
+	__u16 reserved[3];		/* Reserved for future compatibility */
+};
+
+/* Interpretation of offset for color fields: All offsets are from the right,
+ * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
+ * can use the offset as right argument to <<). A pixel afterwards is a bit
+ * stream and is written to video memory as that unmodified. This implies
+ * big-endian byte order if bits_per_pixel is greater than 8.
+ */
+struct fb_bitfield {
+	__u32 offset;			/* beginning of bitfield	*/
+	__u32 length;			/* length of bitfield		*/
+	__u32 msb_right;		/* != 0 : Most significant bit is */ 
+					/* right */ 
+};
+
+#define FB_NONSTD_HAM		1	/* Hold-And-Modify (HAM)        */
+
+#define FB_ACTIVATE_NOW		0	/* set values immediately (or vbl)*/
+#define FB_ACTIVATE_NXTOPEN	1	/* activate on next open	*/
+#define FB_ACTIVATE_TEST	2	/* don't set, round up impossible */
+#define FB_ACTIVATE_MASK       15
+					/* values			*/
+#define FB_ACTIVATE_VBL	       16	/* activate values on next vbl  */
+#define FB_CHANGE_CMAP_VBL     32	/* change colormap on vbl	*/
+#define FB_ACTIVATE_ALL	       64	/* change all VCs on this fb	*/
+
+#define FB_ACCELF_TEXT		1	/* text mode acceleration */
+
+#define FB_SYNC_HOR_HIGH_ACT	1	/* horizontal sync high active	*/
+#define FB_SYNC_VERT_HIGH_ACT	2	/* vertical sync high active	*/
+#define FB_SYNC_EXT		4	/* external sync		*/
+#define FB_SYNC_COMP_HIGH_ACT	8	/* composite sync high active   */
+#define FB_SYNC_BROADCAST	16	/* broadcast video timings      */
+					/* vtotal = 144d/288n/576i => PAL  */
+					/* vtotal = 121d/242n/484i => NTSC */
+#define FB_SYNC_ON_GREEN	32	/* sync on green */
+
+#define FB_VMODE_NONINTERLACED  0	/* non interlaced */
+#define FB_VMODE_INTERLACED	1	/* interlaced	*/
+#define FB_VMODE_DOUBLE		2	/* double scan */
+#define FB_VMODE_MASK		255
+
+#define FB_VMODE_YWRAP		256	/* ywrap instead of panning     */
+#define FB_VMODE_SMOOTH_XPAN	512	/* smooth xpan possible (internally used) */
+#define FB_VMODE_CONUPDATE	512	/* don't update x/yoffset	*/
+
+struct fb_var_screeninfo {
+	__u32 xres;			/* visible resolution		*/
+	__u32 yres;
+	__u32 xres_virtual;		/* virtual resolution		*/
+	__u32 yres_virtual;
+	__u32 xoffset;			/* offset from virtual to visible */
+	__u32 yoffset;			/* resolution			*/
+
+	__u32 bits_per_pixel;		/* guess what			*/
+	__u32 grayscale;		/* != 0 Graylevels instead of colors */
+
+	struct fb_bitfield red;		/* bitfield in fb mem if true color, */
+	struct fb_bitfield green;	/* else only length is significant */
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;	/* transparency			*/	
+
+	__u32 nonstd;			/* != 0 Non standard pixel format */
+
+	__u32 activate;			/* see FB_ACTIVATE_*		*/
+
+	__u32 height;			/* height of picture in mm    */
+	__u32 width;			/* width of picture in mm     */
+
+	__u32 accel_flags;		/* acceleration flags (hints)	*/
+
+	/* Timing: All values in pixclocks, except pixclock (of course) */
+	__u32 pixclock;			/* pixel clock in ps (pico seconds) */
+	__u32 left_margin;		/* time from sync to picture	*/
+	__u32 right_margin;		/* time from picture to sync	*/
+	__u32 upper_margin;		/* time from sync to picture	*/
+	__u32 lower_margin;
+	__u32 hsync_len;		/* length of horizontal sync	*/
+	__u32 vsync_len;		/* length of vertical sync	*/
+	__u32 sync;			/* see FB_SYNC_*		*/
+	__u32 vmode;			/* see FB_VMODE_*		*/
+	__u32 reserved[6];		/* Reserved for future compatibility */
+};
+
+struct fb_cmap {
+	__u32 start;			/* First entry	*/
+	__u32 len;			/* Number of entries */
+	__u16 *red;			/* Red values	*/
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;			/* transparency, can be NULL */
+};
+
+struct fb_con2fbmap {
+	__u32 console;
+	__u32 framebuffer;
+};
+
+/* VESA Blanking Levels */
+#define VESA_NO_BLANKING        0
+#define VESA_VSYNC_SUSPEND      1
+#define VESA_HSYNC_SUSPEND      2
+#define VESA_POWERDOWN          3
+
+struct fb_monspecs {
+	__u32 hfmin;			/* hfreq lower limit (Hz) */
+	__u32 hfmax; 			/* hfreq upper limit (Hz) */
+	__u16 vfmin;			/* vfreq lower limit (Hz) */
+	__u16 vfmax;			/* vfreq upper limit (Hz) */
+	unsigned dpms : 1;		/* supports DPMS */
+};
+
+/* next structure is only 2.2 temporary hack, 2.3 solution will be different */
+struct fb_vt_info {
+	__u32 console;
+	struct fb_var_screeninfo *info;
+};
+
+#define FB_VBLANK_VBLANKING     1       /* currently in a vertical blank */
+#define FB_VBLANK_HBLANKING     2       /* currently in a horizontal blank */
+#define FB_VBLANK_HAVE_VBLANK   4       /* vertical blanks can be detected */
+#define FB_VBLANK_HAVE_HBLANK   8       /* horizontal blanks can be detected */
+#define FB_VBLANK_HAVE_COUNT    16      /* global retrace counter is available */
+#define FB_VBLANK_HAVE_VCOUNT   32      /* the vcount field is valid */
+#define FB_VBLANK_HAVE_HCOUNT   64      /* the hcount field is valid */
+
+struct fb_vblank {
+	__u32 flags;                    /* FB_VBLANK flags */
+	__u32 count;                    /* counter of retraces since boot */
+	__s32 vcount;                   /* current scanline position */
+	__s32 hcount;                   /* current scandot position */
+	__u32 reserved[4];              /* reserved for future compatibility */
+};
+
+#ifdef __KERNEL__
+
+#if 1 /* to go away in 2.4.0 */
+extern int GET_FB_IDX(kdev_t rdev);
+#else
+#define GET_FB_IDX(node)	(MINOR(node))
+#endif
+
+#include <linux/fs.h>
+#include <linux/init.h>
+
+
+struct fb_info;
+struct fb_info_gen;
+struct vm_area_struct;
+struct file;
+
+    /*
+     *  Frame buffer operations
+     */
+
+struct fb_ops {
+    /* open/release and usage marking */
+    int (*fb_open)(struct fb_info *info, int user);
+    int (*fb_release)(struct fb_info *info, int user);
+    /* get non settable parameters */
+    int (*fb_get_fix)(struct fb_fix_screeninfo *fix, int con,
+		      struct fb_info *info); 
+    /* get settable parameters */
+    int (*fb_get_var)(struct fb_var_screeninfo *var, int con,
+		      struct fb_info *info);		
+    /* set settable parameters */
+    int (*fb_set_var)(struct fb_var_screeninfo *var, int con,
+		      struct fb_info *info);		
+    /* get colormap */
+    int (*fb_get_cmap)(struct fb_cmap *cmap, int kspc, int con,
+		       struct fb_info *info);
+    /* set colormap */
+    int (*fb_set_cmap)(struct fb_cmap *cmap, int kspc, int con,
+		       struct fb_info *info);
+    /* pan display */
+    int (*fb_pan_display)(struct fb_var_screeninfo *var, int con,
+			  struct fb_info *info);
+    /* perform fb specific ioctl */
+    int (*fb_ioctl)(struct inode *inode, struct file *file, unsigned int cmd,
+		    unsigned long arg, int con, struct fb_info *info);
+    /* perform fb specific mmap */
+    int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma);
+    /* switch to/from raster image mode */
+    int (*fb_rasterimg)(struct fb_info *info, int start);
+};
+
+struct fb_info {
+   char modename[40];			/* default video mode */
+   kdev_t node;
+   int flags;
+   int open;                            /* Has this been open already ? */
+#define FBINFO_FLAG_MODULE	1	/* Low-level driver is a module */
+   struct fb_fix_screeninfo fix;        /* Current fix */
+   struct fb_monspecs monspecs;         /* Current Monitor specs */
+   struct fb_ops *fbops;
+   char *screen_base;                   /* Virtual address */
+   struct display *disp;		/* initial display variable */
+   struct display *currcon;
+   struct vc_data *display_fg;		/* Console visible on this display */
+   char fontname[40];			/* default font name */
+   int (*changevar)(int);		/* tell console var has changed */
+   int (*switch_con)(int, struct fb_info*);
+					/* tell fb to switch consoles */
+   int (*updatevar)(int, struct fb_info*);
+					/* tell fb to update the vars */
+   void (*blank)(int, struct fb_info*);	/* tell fb to (un)blank the screen */
+					/* arg = 0: unblank */
+					/* arg > 0: VESA level (arg-1) */
+   void *pseudo_palette;                /* Fake palette of 16 colors and 
+					   the cursor's color for non
+                                           palette mode */
+   /* From here on everything is device dependent */
+   void *par;	
+};
+
+#ifdef MODULE
+#define FBINFO_FLAG_DEFAULT	FBINFO_FLAG_MODULE
+#else
+#define FBINFO_FLAG_DEFAULT	0
+#endif
+
+    /*
+     *  This structure abstracts from the underlying hardware. It is not
+     *  mandatory but used by the `generic' frame buffer operations.
+     *  Read drivers/video/skeletonfb.c for more information.
+     */
+
+struct fbgen_hwswitch {
+    void (*detect)(void);
+    int (*encode_fix)(struct fb_fix_screeninfo *fix, const void *par,
+		      struct fb_info_gen *info);
+    int (*decode_var)(const struct fb_var_screeninfo *var, void *par,
+		      struct fb_info_gen *info);
+    int (*encode_var)(struct fb_var_screeninfo *var, const void *par,
+		      struct fb_info_gen *info);
+    void (*get_par)(void *par, struct fb_info_gen *info);
+    void (*set_par)(const void *par, struct fb_info_gen *info);
+    int (*getcolreg)(unsigned regno, unsigned *red, unsigned *green,
+		     unsigned *blue, unsigned *transp, struct fb_info *info);
+    int (*setcolreg)(unsigned regno, unsigned red, unsigned green,
+		     unsigned blue, unsigned transp, struct fb_info *info);
+    int (*pan_display)(const struct fb_var_screeninfo *var,
+		       struct fb_info_gen *info);
+    int (*blank)(int blank_mode, struct fb_info_gen *info);
+    void (*set_disp)(const void *par, struct display *disp,
+		     struct fb_info_gen *info);
+};
+
+struct fb_info_gen {
+    struct fb_info info;
+
+    /* Entries for a generic frame buffer device */
+    /* Yes, this starts looking like C++ */
+    u_int parsize;
+    struct fbgen_hwswitch *fbhw;
+
+   /* From here on everything is device dependent */
+};
+
+    /*
+     *  `Generic' versions of the frame buffer device operations
+     */
+
+extern int fbgen_get_fix(struct fb_fix_screeninfo *fix, int con,
+			 struct fb_info *info);
+extern int fbgen_get_var(struct fb_var_screeninfo *var, int con,
+			 struct fb_info *info);
+extern int fbgen_set_var(struct fb_var_screeninfo *var, int con,
+			 struct fb_info *info);
+extern int fbgen_get_cmap(struct fb_cmap *cmap, int kspc, int con,
+			  struct fb_info *info);
+extern int fbgen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
+			  struct fb_info *info);
+extern int fbgen_pan_display(struct fb_var_screeninfo *var, int con,
+			     struct fb_info *info);
+extern int fbgen_ioctl(struct inode *inode, struct file *file,
+		       unsigned int cmd, unsigned long arg, int con,
+		       struct fb_info *info);
+
+    /*
+     *  Helper functions
+     */
+
+extern int fbgen_do_set_var(struct fb_var_screeninfo *var, int isactive,
+			    struct fb_info_gen *info);
+extern void fbgen_set_disp(int con, struct fb_info_gen *info);
+extern void fbgen_install_cmap(int con, struct fb_info_gen *info);
+extern int fbgen_update_var(int con, struct fb_info *info);
+extern int fbgen_switch(int con, struct fb_info *info);
+extern void fbgen_blank(int blank, struct fb_info *info);
+
+
+/* drivers/video/fbmem.c */
+extern int register_framebuffer(struct fb_info *fb_info);
+extern int unregister_framebuffer(const struct fb_info *fb_info);
+
+extern int num_registered_fb;
+extern struct fb_info *registered_fb[FB_MAX];
+
+/* drivers/video/fbmon.c */
+extern int fbmon_valid_timings(u_int pixclock, u_int htotal, u_int vtotal,
+			       const struct fb_info *fb_info);
+extern int fbmon_dpms(const struct fb_info *fb_info);
+
+/* drivers/video/fbcmap.c */
+extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp);
+extern void fb_copy_cmap(struct fb_cmap *from, struct fb_cmap *to,
+			 int fsfromto);
+extern int fb_get_cmap(struct fb_cmap *cmap, int kspc,
+		       int (*getcolreg)(u_int, u_int *, u_int *, u_int *,
+					u_int *, struct fb_info *),
+		       struct fb_info *fb_info);
+extern int fb_set_cmap(struct fb_cmap *cmap, int kspc,
+		       int (*setcolreg)(u_int, u_int, u_int, u_int, u_int,
+					struct fb_info *),
+		       struct fb_info *fb_info);
+extern struct fb_cmap *fb_default_cmap(int len);
+extern void fb_invert_cmaps(void);
+
+struct fb_videomode {
+    const char *name;	/* optional */
+    u32 refresh;	/* optional */
+    u32 xres;
+    u32 yres;
+    u32 pixclock;
+    u32 left_margin;
+    u32 right_margin;
+    u32 upper_margin;
+    u32 lower_margin;
+    u32 hsync_len;
+    u32 vsync_len;
+    u32 sync;
+    u32 vmode;
+};
+
+extern int __init fb_find_mode(struct fb_var_screeninfo *var,
+			       struct fb_info *info, const char *mode_option,
+			       const struct fb_videomode *db,
+			       unsigned int dbsize,
+			       const struct fb_videomode *default_mode,
+			       unsigned int default_bpp);
+
+#endif /* __KERNEL__ */
+
+#if 1
+
+#define FBCMD_GET_CURRENTPAR	0xDEAD0005
+#define FBCMD_SET_CURRENTPAR	0xDEAD8005
+
+#endif
+
+
+#if 1 /* Preliminary */
+
+   /*
+    *    Hardware Cursor
+    */
+
+#define FBIOGET_FCURSORINFO     0x4607
+#define FBIOGET_VCURSORINFO     0x4608
+#define FBIOPUT_VCURSORINFO     0x4609
+#define FBIOGET_CURSORSTATE     0x460A
+#define FBIOPUT_CURSORSTATE     0x460B
+
+
+struct fb_fix_cursorinfo {
+	__u16 crsr_width;		/* width and height of the cursor in */
+	__u16 crsr_height;		/* pixels (zero if no cursor)	*/
+	__u16 crsr_xsize;		/* cursor size in display pixels */
+	__u16 crsr_ysize;
+	__u16 crsr_color1;		/* colormap entry for cursor color1 */
+	__u16 crsr_color2;		/* colormap entry for cursor color2 */
+};
+
+struct fb_var_cursorinfo {
+	__u16 width;
+	__u16 height;
+	__u16 xspot;
+	__u16 yspot;
+	__u8 data[1];			/* field with [height][width]        */
+};
+
+struct fb_cursorstate {
+	__s16 xoffset;
+	__s16 yoffset;
+	__u16 mode;
+};
+
+#define FB_CURSOR_OFF		0
+#define FB_CURSOR_ON		1
+#define FB_CURSOR_FLASH		2
+
+#endif /* Preliminary */
+
+#endif /* _LINUX_FB_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/matroxset/matroxfb.h	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,32 @@
+#ifndef __LINUX_MATROXFB_H__
+#define __LINUX_MATROXFB_H__
+
+#include <asm/ioctl.h>
+#include <asm/types.h>
+
+struct matroxioc_output_mode {
+	__u32	output;		/* which output */
+#define MATROXFB_OUTPUT_PRIMARY		0x0000
+#define MATROXFB_OUTPUT_SECONDARY	0x0001
+	__u32	mode;		/* which mode */
+#define MATROXFB_OUTPUT_MODE_PAL	0x0001
+#define MATROXFB_OUTPUT_MODE_NTSC	0x0002
+#define MATROXFB_OUTPUT_MODE_MONITOR	0x0080
+};
+#define MATROXFB_SET_OUTPUT_MODE	_IOW('n',0xFA,sizeof(struct matroxioc_output_mode))
+#define MATROXFB_GET_OUTPUT_MODE	_IOWR('n',0xFA,sizeof(struct matroxioc_output_mode))
+
+/* bitfield */
+#define MATROXFB_OUTPUT_CONN_PRIMARY	(1 << MATROXFB_OUTPUT_PRIMARY)
+#define MATROXFB_OUTPUT_CONN_SECONDARY	(1 << MATROXFB_OUTPUT_SECONDARY)
+/* connect these outputs to this framebuffer */
+#define MATROXFB_SET_OUTPUT_CONNECTION	_IOW('n',0xF8,sizeof(__u32))
+/* which outputs are connected to this framebuffer */
+#define MATROXFB_GET_OUTPUT_CONNECTION	_IOR('n',0xF8,sizeof(__u32))
+/* which outputs are available for this framebuffer */
+#define MATROXFB_GET_AVAILABLE_OUTPUTS	_IOR('n',0xF9,sizeof(__u32))
+/* which outputs exist on this framebuffer */
+#define MATROXFB_GET_ALL_OUTPUTS	_IOR('n',0xFB,sizeof(__u32))
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/matroxset/matroxset.c	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,162 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include "fb.h"
+#include "matroxfb.h"
+
+static int help(void) {
+	fprintf(stderr, "usage: matroxset [-f fbdev] [-o output] [-m] [value]\n"
+	                "\n"
+	                "where -f fbdev  is fbdev device (default /dev/fb1)\n"
+	                "      -o output is output number to investigate (0=primary, 1=secondary=default)\n"
+	                "      -m        says that CRTC->output mapping should be changed/retrieved\n"
+			"      -p        print information about blanking\n"
+	                "      value     if present, value is set, if missing, value is retrieved\n"
+			"\n"
+			"For output mode, 128 means monitor, 1 = PAL TV, 2 = NTSC TV\n");
+	return 98;
+}
+
+int main(int argc, char* argv[]) {
+	char* fb = "/dev/fb1";
+	int fd;
+	struct matroxioc_output_mode mom;
+	struct fb_vblank vbl;
+	int rtn;
+	int output = MATROXFB_OUTPUT_SECONDARY;
+	int o_present = 0;
+	int m_present = 0;
+	int p_present = 0;
+	int act;
+	u_int32_t conns;
+	
+	while ((rtn = getopt(argc, argv, "o:f:mhp")) != -1) {
+		switch (rtn) {
+			case 'o':
+				output = strtoul(optarg, NULL, 0);
+				o_present = 1;
+				break;
+			case 'm':
+				m_present = 1;
+				break;
+			case 'f':
+				fb = optarg;
+				break;
+			case 'p':
+				p_present = 1;
+				break;
+			case 'h':
+				return help();
+			default:
+				fprintf(stderr, "Bad commandline\n");
+				return 99;
+		}
+	}
+	act = 0;
+	if (p_present) {
+		if (m_present || o_present) {
+			fprintf(stderr, "You cannot use -p together with -m or -o\n");
+			return 95;
+		}
+		act = 4;
+	} else if (optind >= argc) {
+		if (m_present) {
+			if (o_present) {
+				fprintf(stderr, "You cannot use -m and -o together\n");
+				return 96;
+			}
+			act = 2;
+		} else {
+			mom.output = output;
+			mom.mode = 0;
+		}
+	} else {
+		if (m_present) {
+			conns = strtoul(argv[optind], NULL, 0);
+			act = 3;
+		} else {
+			mom.output = output;
+			mom.mode = strtoul(argv[optind], NULL, 0);
+			act = 1;
+		}
+	}
+	fd = open(fb, O_RDWR);
+	if (fd == -1) {
+		fprintf(stderr, "Cannot open %s: %s\n", fb, strerror(errno));
+		return 122;
+	}
+	switch (act) {
+		case 0:
+			rtn = ioctl(fd, MATROXFB_GET_OUTPUT_MODE, &mom);
+			if (rtn)
+				break;
+			printf("Output mode is %u\n", mom.mode);
+			break;
+		case 1:
+			rtn = ioctl(fd, MATROXFB_SET_OUTPUT_MODE, &mom);
+			break;
+		case 2:
+			rtn = ioctl(fd, MATROXFB_GET_OUTPUT_CONNECTION, &conns);
+			if (rtn)
+				break;
+			printf("This framebuffer is connected to outputs %08X\n", conns);
+			break;
+		case 3:
+			rtn = ioctl(fd, MATROXFB_SET_OUTPUT_CONNECTION, &conns);
+			break;
+		case 4:
+#if 0
+			{ int i; for (i = 0; i < 1000000; i++) {
+			rtn = ioctl(fd, FBIOGET_VBLANK, &vbl);
+			if (rtn)
+				break;
+			}}
+#else
+			rtn = ioctl(fd, FBIOGET_VBLANK, &vbl);
+			if (rtn)
+				break;
+#endif
+			printf("VBlank flags:          %08X\n", vbl.flags);
+			printf("  Symbolic: ");
+			{
+				static const struct { u_int32_t mask; const char* msg; } *ptr, vals[] = {
+					{ FB_VBLANK_HAVE_VBLANK, "vblank" },
+					{ FB_VBLANK_HAVE_HBLANK, "hblank" },
+					{ FB_VBLANK_HAVE_COUNT, "field no." },
+					{ FB_VBLANK_HAVE_VCOUNT, "line no." },
+					{ FB_VBLANK_HAVE_HCOUNT, "column no." },
+					{ FB_VBLANK_VBLANKING, "vblanking" },
+					{ FB_VBLANK_HBLANKING, "hblanking" },
+					{ 0, NULL }};
+				int ap = 0;
+				for (ptr = vals; ptr->msg; ptr++) {
+					if (vbl.flags & ptr->mask) {
+						if (ap) printf(", ");
+						printf(ptr->msg);
+						ap = 1;
+					}
+				}
+				if (!ap)
+					printf("none");
+				printf("\n");
+			}
+			printf("Field count:       %12u\n", vbl.count);
+			printf("Vertical line:     %12u\n", vbl.vcount);
+			printf("Horizontal column: %12u\n", vbl.hcount);
+			break;
+		default:
+			rtn = -1; errno = EINVAL;
+			break;
+	}
+	if (rtn) {
+		fprintf(stderr, "ioctl failed: %s\n", strerror(errno));
+	}
+	close(fd);
+	return 0;
+}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/matroxset/normal	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+if [ -c /dev/fb0 ]; then
+  HEAD0=/dev/fb0
+  HEAD1=/dev/fb1
+else
+  HEAD0=/dev/fb/0
+  HEAD1=/dev/fb/1
+fi
+matroxset -f ${HEAD1} -m 0
+matroxset -f ${HEAD0} -m 1
+matroxset -f ${HEAD1} -m 2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/matroxset/swapit	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,5 @@
+#! /bin/sh
+~/mga/con2fb /dev/fb0 /dev/tty4
+rmmod matroxfb_maven
+modprobe matroxfb_maven
+~/mga/con2fb /dev/fb1 /dev/tty4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/matroxset/swapped	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+if [ -c /dev/fb0 ]; then
+  HEAD0=/dev/fb0
+  HEAD1=/dev/fb1
+else
+  HEAD0=/dev/fb/0
+  HEAD1=/dev/fb/1
+fi
+matroxset -f ${HEAD1} -m 0
+matroxset -f ${HEAD0} -m 2
+matroxset -f ${HEAD1} -m 1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/matroxtv	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,314 @@
+#!/bin/sh
+#
+# Gabucino - no warranty, this script can BOOM your TV and/or monitor, or else.
+# v3.0
+# This script has been tested and configured on a Matrox G400DH, a PAL TV,
+# a 14" analog and a 15" digital monitor.
+#
+# INSTALLATION:
+#	1. READ MPLAYER'S TVOUT DOCUMENTATION!
+#	2. Choose proper mode at 'defaultmode', 'TVdefaultmode',
+#	   and 'SetTVstandard' functions to fit your needs.
+#	   You normally shouldn't touch anything else.
+#	3. Remove 'exit 1' safety check.
+#
+
+function defaultmode {
+	# You can choose the mode to use in monitor-only mode
+	# 640x480 60Hz 32bpp	(14" monitors)
+	fbset -a -xres 640 -yres 480 -vxres 640 -vyres 480 -depth 32 -pixclock 39721 -left 48 -right 16 -upper 33 -lower 10 -hslen 96 -vslen 2 -hsync high -accel true -laced false
+	# 768x576 60Hz 32bpp	(14" monitors)
+	# fbset -a -xres 768 -yres 576 -vxres 768 -vyres 5460 -depth 32 -pixclock 26101 -left 144 -right 16 -upper 28 -lower 6 -hslen 112 -vslen 4 -accel true -laced false
+	# 800x600 76Hz 32bpp	(15" monitors)
+	# fbset -a -xres 800 -yres 600 -vxres 800 -vyres 1440 -depth 32 -pixclock 20000 -left 128 -right 16 -upper 24 -lower 2 -hslen 96 -vslen 6 -laced false
+	# 1024x768 70Hz 32bpp	(15" monitors)
+	# fbset -a -xres 1024 -yres 768 -vxres 1024 -vyres 1440 -depth 32 -pixclock 12500 -left 144 -right 32 -upper 30 -lower 2 -hslen 192 -vslen 6 -laced false
+}
+
+function TVdefaultmode {
+
+	##
+	## PAL modes
+	##
+
+	# 640x512 80Hz 32bpp
+	fbset -fb $1 -a -depth 32 -left 60 -right 0 -upper 70 -lower 39 -hslen 76 -vslen 4 -xres 640 -yres 512 -bcast true -laced false
+	# 640x528 83Hz 32bpp
+	# fbset -fb $1 -a -depth 32 -left 40 -right 0 -upper 63 -lower 29 -hslen 56 -vslen 4 -xres 640 -yres 528 -vxres 640 -vyres 528 -laced false -bcast true
+	# 720x576 78Hz 32bpp
+	# fbset -fb $1 -a -depth 32 -left 54 -right -36 -upper 55 -lower -6 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -laced false -bcast true
+
+	##
+	## NTSC modes
+	##
+
+	# 640x240 non-interlaced 32bpp
+	# fbset -fb $1 -a -depth 32 -xres 640 -yres 240 -vxres 640 -vyres 240 -pixclock 79443 -left 72 -right 40 -upper 15 -lower 5 -hslen 48 -vslen 3 -laced false
+	# 640x480 interlaced 32bpp
+	# fbset -fb $1 -a -depth 32 -xres 640 -yres 480 -vxres 640 -vyres 480 -pixclock 79443 -left 72 -right 40 -upper 30 -lower 10 -hslen 48 -vslen 5 -laced true
+}
+
+function SetTVstandard {
+	matroxset 1		# PAL
+	# matroxset 2		# NTSC
+}
+
+function SetMonitorMode {
+        matroxset 128
+}
+
+function mappingreset {
+	matroxset -f /dev/fb0 -m 0
+	matroxset -f /dev/fb1 -m 0
+	matroxset -f /dev/fb0 -m 1
+	con2fb /dev/fb0 /dev/tty1
+	con2fb /dev/fb0 /dev/tty2
+	SetMonitorMode
+	defaultmode
+}
+
+function warn {
+	clear
+	echo "tty2 will be automatically transferred to fb1 using the con2fb utility."
+	echo
+	echo
+	echo "A big \"1\" letter will be displayed on tty1 after the change."
+	echo "A big \"2\" letter will be displayed on tty2 after the change."
+	echo
+	echo
+	echo "If you read this, PRESS ANY KEY TO CONTINUE"
+	read
+}
+
+function warn2 {
+	id1 > /dev/tty1 &
+	id2 > /dev/tty2 &
+}	
+
+function id1 {
+	sleep 1
+	clear
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo "                                   ****"
+	echo "                                  *****"
+	echo "                                 ******"
+	echo "                                *******"
+	echo "                                    ***"
+	echo "                                    ***"
+	echo "                                    ***"
+	echo "                                    ***"
+	echo "                                    ***"
+	echo "                                   *****"
+	echo
+	echo
+	echo "	                        FAST console"
+	echo
+	echo
+	echo "                         Press ALT-F1 to change here"
+}
+
+function id2 {
+	sleep 1
+	clear
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo
+	echo "                                   *****"
+	echo "                                  **   **"
+	echo "                                  *    **"
+	echo "                                      **"
+	echo "                                     **"
+	echo "                                    **"
+	echo "                                   **"
+	echo "                                  **"
+	echo "                                  **   **"
+	echo "                                  *******"
+	echo
+	echo
+	echo "	                        SLOW console"
+	echo
+	echo
+	echo "                         Press ALT-F2 to change here"
+}
+
+echo
+echo "Please read MPlayer's TV-out documentation, and install 'matroxset' and 'fbset'."
+echo "Then edit this script to suit your monitor+TV set."
+echo
+exit 1
+
+while [ 1 ]; do
+
+clear
+
+echo " [ 0 ]    Clear & blank screen"
+echo " [ 1 ]    Monitor only"
+echo
+echo " [ 2 ]    Cloning  - CRTC1 -> Monitor"
+echo "                     CRTC2 -> TV"
+echo
+echo " [ 3 ]    Cloning  - CRTC1 -> Monitor1"
+echo "                     CRTC2 -> Monitor2"
+echo
+echo " [ 4 ]    DualHead - CRTC1 -> Monitor1"
+echo "                     CRTC2 -> Monitor2"
+echo
+echo " [ 5 ]    DualHead - CRTC1 -> Monitor2 (SWAP!)"
+echo "                     CRTC2 -> Monitor1"
+echo
+echo " [ 6 ]    DualHead - CRTC1 -> Monitor1"
+echo "                     CRTC2 -> TV"
+echo
+echo " [ 7 ]    DualHead - CRTC1 -> TV (SWAP!)"
+echo "                     CRTC2 -> Monitor1"
+
+echo
+
+echo "-- TV MODES on /dev/fb0			 -- TV MODES on /dev/fb1"
+echo
+echo " [ a ]	640x512		PAL                 [ A ]    640x512		PAL"
+echo " [ s ]	640x528		PAL                 [ S ]    640x528		PAL"
+echo " [ d ]	720x576		PAL                 [ D ]    720x576		PAL"
+echo " [ f ]	640x240		NTSC                [ F ]    640x240		NTSC"
+echo " [ g ]	640x480		NTSC, interlaced    [ G ]    640x480		NTSCl"
+echo
+echo " (Warning, fb0 and fb1 tend to change RANDOMLY with these mode changers..)"
+
+read ABC
+
+case "$ABC" in
+	0)
+	clear
+	setterm -cursor off
+	setterm -blank 0
+	read
+	setterm -cursor on
+	;;
+
+	1)
+	mappingreset
+	echo
+	;;
+
+	2)
+	mappingreset
+	matroxset -f /dev/fb0 -m 3
+	SetTVstandard
+	TVdefaultmode /dev/fb0
+	;;
+
+	3)
+	mappingreset
+	matroxset -f /dev/fb0 -m 3
+	;;
+
+	4)
+	warn
+	mappingreset
+	matroxset -f /dev/fb0 -m 1
+	matroxset -f /dev/fb1 -m 2
+	warn2
+	;;
+
+	5)
+	warn
+	mappingreset
+	matroxset -f /dev/fb0 -m 2
+	matroxset -f /dev/fb1 -m 1
+	warn2
+	;;
+
+	6)
+	warn
+	mappingreset
+	con2fb /dev/fb1 /dev/tty2
+	matroxset -f /dev/fb0 -m 1
+	matroxset -f /dev/fb1 -m 2
+	SetTVstandard
+	TVdefaultmode /dev/fb1
+	warn2
+	;;
+
+	7)
+	warn
+	mappingreset
+	con2fb /dev/fb1 /dev/tty2
+	matroxset -f /dev/fb0 -m 2
+	matroxset -f /dev/fb1 -m 1
+	SetTVstandard
+	TVdefaultmode /dev/fb0
+	warn2
+	;;
+
+	a)
+	# 640x512 80Hz 32bpp
+	fbset -depth 32 -left 60 -right 0 -upper 70 -lower 39 -hslen 76 -vslen 4 -xres 640 -yres 512 -bcast true -laced false
+	;;
+
+	A)
+	# 640x512 80Hz 32bpp
+	fbset -fb /dev/fb1 -depth 32 -left 60 -right 0 -upper 70 -lower 39 -hslen 76 -vslen 4 -xres 640 -yres 512 -bcast true -laced false
+	;;
+
+	s)
+	# 640x528 83Hz 32bpp
+	fbset -depth 32 -left 40 -right 0 -upper 63 -lower 29 -hslen 56 -vslen 4 -xres 640 -yres 528 -vxres 640 -vyres 528 -laced false -bcast true
+	;;
+
+	S)
+	# 640x528 83Hz 32bpp
+	fbset -fb /dev/fb1 -depth 32 -left 40 -right 0 -upper 63 -lower 29 -hslen 56 -vslen 4 -xres 640 -yres 528 -vxres 640 -vyres 528 -laced false -bcast true
+	;;
+
+	d)
+	# 720x576 78Hz 32bpp
+#	fbset -depth 32 -left 54 -right -36 -upper 55 -lower -6 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -laced false -bcast true
+	fbset -depth 32 -right -36 -lower -6 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -laced false -bcast true
+	;;
+
+	D)
+	# 720x576 78Hz 32bpp
+#	fbset -fb /dev/fb1 -depth 32 -left 54 -right -36 -upper 55 -lower -6 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -laced false -bcast true
+	fbset -fb /dev/fb1 -depth 32 -right -36 -lower -6 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -laced false -bcast true
+	;;
+
+	f)
+	# 640x240 non-interlaced 32bpp
+	fbset -depth 32 -xres 640 -yres 240 -vxres 640 -vyres 240 -pixclock 79443 -left 72 -right 40 -upper 15 -lower 5 -hslen 48 -vslen 3 -laced false
+	;;
+
+	F)
+	# 640x240 non-interlaced 32bpp
+	fbset -fb /dev/fb1 -depth 32 -xres 640 -yres 240 -vxres 640 -vyres 240 -pixclock 79443 -left 72 -right 40 -upper 15 -lower 5 -hslen 48 -vslen 3 -laced false
+	;;
+
+	g)
+	# 640x480 interlaced 32bpp
+	fbset -depth 32 -xres 640 -yres 480 -vxres 640 -vyres 480 -pixclock 79443 -left 72 -right 40 -upper 30 -lower 10 -hslen 48 -vslen 5 -laced true
+	;;
+
+	G)
+	# 640x480 interlaced 32bpp
+	fbset -fb /dev/fb1 -depth 32 -xres 640 -yres 480 -vxres 640 -vyres 480 -pixclock 79443 -left 72 -right 40 -upper 30 -lower 10 -hslen 48 -vslen 5 -laced true
+	;;
+esac
+
+done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/TVout/modules	Tue Aug 03 00:45:55 2004 +0000
@@ -0,0 +1,8 @@
+
+# Load kernel modules...
+# (you must have 2.3/2.4 kernel with matroxfb enabled!)
+
+modprobe matroxfb_Ti3026
+modprobe matroxfb_maven
+modprobe i2c-matroxfb
+modprobe matroxfb_crtc2
--- a/TVout/Mon-640x400	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-
-fbset/fbset -fb /dev/fb1 -db fbset.db 640x400-60
-
--- a/TVout/Mon-640x480	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-
-fbset/fbset -fb /dev/fb1 -db fbset.db 640x480-60
-
--- a/TVout/TV-640x512	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-
-fbset/fbset -fb /dev/fb0 -left 60 -right 0 -upper 70 -lower 39 -hslen 76 -vslen 4 -xres 640 -yres 512 -bcast true
--- a/TVout/TV-640x528	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-
-fbset/fbset -fb /dev/fb0 -left 40 -right 0 -upper 63 -lower 29 -hslen 56 -vslen 4 -xres 640 -yres 528 -vxres 640 -vyres 528 -depth 32 -laced false -bcast true
-
--- a/TVout/TV-704x528	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-
-fbset/fbset -fb /dev/fb0 -left 40 -right 0 -upper 63 -lower 29 -hslen 56 -vslen 4 -xres 640 -yres 528 -vxres 704 -vyres 528 -depth 32 -laced false -bcast true
-
--- a/TVout/TV-704x576	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-
-fbset/fbset -fb /dev/fb0 -left 42 -right 0 -upper 29 -lower 20 -hslen 46 -vslen 4 -xres 704 -yres 576 -vxres 704 -vyres 576 -depth 32 -laced false -bcast true
-
--- a/TVout/TV-720x576	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-
-fbset/fbset -fb /dev/fb0 -left 18 -right 0 -upper 39 -lower 10 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -depth 32 -laced false -bcast true
-
--- a/TVout/TV-720x576-old	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-
-fbset/fbset -fb /dev/fb0 -left 38 -right 0 -upper 29 -lower 20 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -depth 32 -laced false -bcast true
-
--- a/TVout/clean.sh	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-
-# Compile TVout tools
-
-rm -f con2fb/con2fb
-
-cd matroxset
-make clean
-cd ..
-
-cd fbset
-make clean
-cd ..
-
--- a/TVout/cloning	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-
-# SETUP TVout
-# Same picture on TV & Monitor
-
-# CRTC1 -> TVout & Monitor
-matroxset/matroxset -f /dev/fb1 -m 0
-matroxset/matroxset -f /dev/fb0 -m 3
-
-# Enable TV
-matroxset/matroxset 1
-
-# Keep consoles on CRTC1
-con2fb/con2fb /dev/fb0 /dev/tty1
-con2fb/con2fb /dev/fb0 /dev/tty2
--- a/TVout/compile.sh	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-
-# Compile TVout tools
-
-cd con2fb
-gcc con2fb.c -o con2fb
-cd ..
-
-cd matroxset
-make
-cd ..
-
-cd fbset
-make
-cd ..
-
--- a/TVout/con2fb/con2fb.c	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/* this is userspace utility which allows you to redirect console to another fb device 
- * You can specify devices & consoles by both numbers and devices. Framebuffers numbers
- * are zero based (/dev/fb0 ... ), consoles begins with 1 (/dev/tty1 ... )
- */
-#include <linux/fb.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-int main(int argc, char* argv[]) {
-	struct fb_con2fbmap c2m;
-	char* fbPath;
-	u_int32_t con, fb;
-	char* e;
-	char* progname = strrchr(argv[0], '/');
-	int f;
-
-	if (progname)
-		progname++;
-	else
-		progname = argv[0];
-	if (argc < 3) {
-		fprintf(stderr, "usage: %s fbdev console\n", progname);
-		return 1;
-	}
-	fb = strtoul(argv[1], &e, 10);
-	if (*e) {
-		struct stat sbf;
-
-		if (stat(argv[1], &sbf)) {	
-			fprintf(stderr, "%s: are you sure that %s can be used to describe fbdev?\n", progname, argv[1]);
-			return 1;
-		}
-		if (!S_ISCHR(sbf.st_mode)) {
-			fprintf(stderr, "%s: %s must be character device\n", progname, argv[1]);
-			return 1;
-		}
-		fb = sbf.st_rdev & 0xFF;
-		if (fb >= 32)
-			fb >>= 5;
-		fbPath = argv[1];
-	} else 
-		fbPath = "/dev/fb0";
-	con = strtoul(argv[2], &e, 10);
-	if (*e) {
-		struct stat sbf;
-
-		if (stat(argv[2], &sbf)) {
-			fprintf(stderr, "%s: are you sure that %s can be used to describe vt?\n", progname, argv[2]);
-			return 1;
-		}
-		if (!S_ISCHR(sbf.st_mode)) {
-			fprintf(stderr, "%s: %s must be character device\n", progname, argv[2]);
-			return 1;
-		}
-		con = sbf.st_rdev & 0xFF;
-	}
-	c2m.console = con;
-	c2m.framebuffer = fb;
-	f = open(fbPath, O_RDWR);
-	if (f < 0) {
-		fprintf(stderr, "%s: Cannot open %s\n", progname, fbPath);
-		return 1;
-	}
-	if (ioctl(f, FBIOPUT_CON2FBMAP, &c2m)) {
-		fprintf(stderr, "%s: Cannot set console mapping\n", progname);
-		close(f);
-		return 1;
-	}
-	close(f);
-	return 0;
-}
-
-
--- a/TVout/fbset.db	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-
-# FBset mode database
-
-mode "640x480"                         # H: 33.78 kHz, V: 67.56 Hz
-   geometry 640 480 640 480 4
-   timings 35242 24 64 17 1 112 2
-endmode
-
-mode "640x480-60"
-    # D: 25.176 MHz, H: 31.469 kHz, V: 59.942 Hz
-    geometry 640 480 640 480 16
-    timings 39721 48 16 33 10 96 2
-    hsync high
-    accel true
-#    rgba 5/11,6/5,5/0,0/0
-endmode
-
-mode "640x400-60"
-    # D: 25.176 MHz, H: 31.469 kHz, V: 59.942 Hz
-    geometry 640 400 640 400 16
-    timings 39721 48 16 33 10 96 2
-    hsync high
-    accel true
-#    rgba 5/11,6/5,5/0,0/0
-endmode
-
-mode "vga70"
-    # H: 31.113 kHz, V: 69.294 Hz
-    geometry 640 400 640 400 4
-    timings 35242 64 96 35 12 112 2
-#    vsync high
-#    csync high
-endmode
-
--- a/TVout/fbset/INSTALL	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-
-
-			FBSET INSTALLATION GUIDE
-
-
-Change the current directory to the directory containing the fbset sources and
-type
-
-    make install
-
-This will create the fbset binary and install it, together with the manual
-pages. It also creates the standard frame buffer special device nodes.
-
-
-The etc subdirectory contains sample frame buffer mode definitions files. Copy
-one of them to /etc/fb.modes and edit it to your needs.
-
-
-Enjoy!
-
--- a/TVout/fbset/Makefile	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-#
-# Linux Frame Buffer Device Configuration
-#
-
-CFLAGS =	-Wall -O2 -I.
-BISON =		bison -d
-FLEX =		flex
-INSTALL =	install
-RM =		rm -f
-
-All:		fbset
-
-
-fbset:		fbset.o modes.tab.o lex.yy.o
-
-fbset.o:	fbset.c fbset.h fb.h
-modes.tab.o:	modes.tab.c fbset.h fb.h
-lex.yy.o:	lex.yy.c fbset.h modes.tab.h
-
-lex.yy.c:	modes.l
-		$(FLEX) modes.l
-
-modes.tab.c:	modes.y
-		$(BISON) modes.y
-
-install:	fbset
-		if [ -f /sbin/fbset ]; then rm /sbin/fbset; fi
-		$(INSTALL) fbset /usr/sbin
-		$(INSTALL) fbset.8 /usr/man/man8
-		$(INSTALL) fb.modes.5 /usr/man/man5
-		if [ ! -c /dev/fb0 ]; then mknod /dev/fb0 c 29 0; fi
-		if [ ! -c /dev/fb1 ]; then mknod /dev/fb1 c 29 32; fi
-		if [ ! -c /dev/fb2 ]; then mknod /dev/fb2 c 29 64; fi
-		if [ ! -c /dev/fb3 ]; then mknod /dev/fb3 c 29 96; fi
-		if [ ! -c /dev/fb4 ]; then mknod /dev/fb4 c 29 128; fi
-		if [ ! -c /dev/fb5 ]; then mknod /dev/fb5 c 29 160; fi
-		if [ ! -c /dev/fb6 ]; then mknod /dev/fb6 c 29 192; fi
-		if [ ! -c /dev/fb7 ]; then mknod /dev/fb7 c 29 224; fi
-
-clean:
-		$(RM) *.o fbset lex.yy.c modes.tab.c modes.tab.h
--- a/TVout/fbset/fb.h	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,497 +0,0 @@
-#ifndef _LINUX_FB_H
-#define _LINUX_FB_H
-
-#include <asm/types.h>
-
-/* Definitions of frame buffers						*/
-
-#define FB_MAJOR	29
-
-#define FB_MODES_SHIFT		5	/* 32 modes per framebuffer */
-#define FB_NUM_MINORS		256	/* 256 Minors               */
-#define FB_MAX			(FB_NUM_MINORS / (1 << FB_MODES_SHIFT))
-#define GET_FB_IDX(node)	(MINOR(node) >> FB_MODES_SHIFT)
-
-/* ioctls
-   0x46 is 'F'								*/
-#define FBIOGET_VSCREENINFO	0x4600
-#define FBIOPUT_VSCREENINFO	0x4601
-#define FBIOGET_FSCREENINFO	0x4602
-#define FBIOGETCMAP		0x4604
-#define FBIOPUTCMAP		0x4605
-#define FBIOPAN_DISPLAY		0x4606
-/* 0x4607-0x460B are defined below */
-/* #define FBIOGET_MONITORSPEC	0x460C */
-/* #define FBIOPUT_MONITORSPEC	0x460D */
-/* #define FBIOSWITCH_MONIBIT	0x460E */
-#define FBIOGET_CON2FBMAP	0x460F
-#define FBIOPUT_CON2FBMAP	0x4610
-
-#define FB_TYPE_PACKED_PIXELS		0	/* Packed Pixels	*/
-#define FB_TYPE_PLANES			1	/* Non interleaved planes */
-#define FB_TYPE_INTERLEAVED_PLANES	2	/* Interleaved planes	*/
-#define FB_TYPE_TEXT			3	/* Text/attributes	*/
-#define FB_TYPE_VGA_PLANES		4	/* EGA/VGA planes	*/
-
-#define FB_AUX_TEXT_MDA		0	/* Monochrome text */
-#define FB_AUX_TEXT_CGA		1	/* CGA/EGA/VGA Color text */
-#define FB_AUX_TEXT_S3_MMIO	2	/* S3 MMIO fasttext */
-#define FB_AUX_TEXT_MGA_STEP16	3	/* MGA Millenium I: text, attr, 14 reserved bytes */
-#define FB_AUX_TEXT_MGA_STEP8	4	/* other MGAs:      text, attr,  6 reserved bytes */
-
-#define FB_AUX_VGA_PLANES_VGA4		0	/* 16 color planes (EGA/VGA) */
-#define FB_AUX_VGA_PLANES_CFB4		1	/* CFB4 in planes (VGA) */
-#define FB_AUX_VGA_PLANES_CFB8		2	/* CFB8 in planes (VGA) */
-
-#define FB_VISUAL_MONO01		0	/* Monochr. 1=Black 0=White */
-#define FB_VISUAL_MONO10		1	/* Monochr. 1=White 0=Black */
-#define FB_VISUAL_TRUECOLOR		2	/* True color	*/
-#define FB_VISUAL_PSEUDOCOLOR		3	/* Pseudo color (like atari) */
-#define FB_VISUAL_DIRECTCOLOR		4	/* Direct color */
-#define FB_VISUAL_STATIC_PSEUDOCOLOR	5	/* Pseudo color readonly */
-
-#define FB_ACCEL_NONE		0	/* no hardware accelerator	*/
-#define FB_ACCEL_ATARIBLITT	1	/* Atari Blitter		*/
-#define FB_ACCEL_AMIGABLITT	2	/* Amiga Blitter                */
-#define FB_ACCEL_S3_TRIO64	3	/* Cybervision64 (S3 Trio64)    */
-#define FB_ACCEL_NCR_77C32BLT	4	/* RetinaZ3 (NCR 77C32BLT)      */
-#define FB_ACCEL_S3_VIRGE	5	/* Cybervision64/3D (S3 ViRGE)	*/
-#define FB_ACCEL_ATI_MACH64GX	6	/* ATI Mach 64GX family		*/
-#define FB_ACCEL_DEC_TGA	7	/* DEC 21030 TGA		*/
-#define FB_ACCEL_ATI_MACH64CT	8	/* ATI Mach 64CT family		*/
-#define FB_ACCEL_ATI_MACH64VT	9	/* ATI Mach 64CT family VT class */
-#define FB_ACCEL_ATI_MACH64GT	10	/* ATI Mach 64CT family GT class */
-#define FB_ACCEL_SUN_CREATOR	11	/* Sun Creator/Creator3D	*/
-#define FB_ACCEL_SUN_CGSIX	12	/* Sun cg6			*/
-#define FB_ACCEL_SUN_LEO	13	/* Sun leo/zx			*/
-#define FB_ACCEL_IMS_TWINTURBO	14	/* IMS Twin Turbo		*/
-#define FB_ACCEL_3DLABS_PERMEDIA2 15	/* 3Dlabs Permedia 2		*/
-#define FB_ACCEL_MATROX_MGA2064W 16	/* Matrox MGA2064W (Millenium)	*/
-#define FB_ACCEL_MATROX_MGA1064SG 17	/* Matrox MGA1064SG (Mystique)	*/
-#define FB_ACCEL_MATROX_MGA2164W 18	/* Matrox MGA2164W (Millenium II) */
-#define FB_ACCEL_MATROX_MGA2164W_AGP 19	/* Matrox MGA2164W (Millenium II) */
-#define FB_ACCEL_MATROX_MGAG100	20	/* Matrox G100 (Productiva G100) */
-#define FB_ACCEL_MATROX_MGAG200	21	/* Matrox G200 (Myst, Mill, ...) */
-#define FB_ACCEL_SUN_CG14	22	/* Sun cgfourteen		 */
-#define FB_ACCEL_SUN_BWTWO	23	/* Sun bwtwo			 */
-#define FB_ACCEL_SUN_CGTHREE	24	/* Sun cgthree			 */
-#define FB_ACCEL_SUN_TCX	25	/* Sun tcx			 */
-#define FB_ACCEL_MATROX_MGAG400	26	/* Matrox G400			 */
-
-struct fb_fix_screeninfo {
-	char id[16];			/* identification string eg "TT Builtin" */
-	char *smem_start;		/* Start of frame buffer mem */
-					/* (physical address) */
-	__u32 smem_len;			/* Length of frame buffer mem */
-	__u32 type;			/* see FB_TYPE_*		*/
-	__u32 type_aux;			/* Interleave for interleaved Planes */
-	__u32 visual;			/* see FB_VISUAL_*		*/ 
-	__u16 xpanstep;			/* zero if no hardware panning  */
-	__u16 ypanstep;			/* zero if no hardware panning  */
-	__u16 ywrapstep;		/* zero if no hardware ywrap    */
-	__u32 line_length;		/* length of a line in bytes    */
-	char *mmio_start;		/* Start of Memory Mapped I/O   */
-					/* (physical address) */
-	__u32 mmio_len;			/* Length of Memory Mapped I/O  */
-	__u32 accel;			/* Type of acceleration available */
-	__u16 reserved[3];		/* Reserved for future compatibility */
-};
-
-/* Interpretation of offset for color fields: All offsets are from the right,
- * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
- * can use the offset as right argument to <<). A pixel afterwards is a bit
- * stream and is written to video memory as that unmodified. This implies
- * big-endian byte order if bits_per_pixel is greater than 8.
- */
-struct fb_bitfield {
-	__u32 offset;			/* beginning of bitfield	*/
-	__u32 length;			/* length of bitfield		*/
-	__u32 msb_right;		/* != 0 : Most significant bit is */ 
-					/* right */ 
-};
-
-#define FB_NONSTD_HAM		1	/* Hold-And-Modify (HAM)        */
-
-#define FB_ACTIVATE_NOW		0	/* set values immediately (or vbl)*/
-#define FB_ACTIVATE_NXTOPEN	1	/* activate on next open	*/
-#define FB_ACTIVATE_TEST	2	/* don't set, round up impossible */
-#define FB_ACTIVATE_MASK       15
-					/* values			*/
-#define FB_ACTIVATE_VBL	       16	/* activate values on next vbl  */
-#define FB_CHANGE_CMAP_VBL     32	/* change colormap on vbl	*/
-#define FB_ACTIVATE_ALL	       64	/* change all VCs on this fb	*/
-
-#define FB_ACCELF_TEXT		1	/* text mode acceleration */
-
-#define FB_SYNC_HOR_HIGH_ACT	1	/* horizontal sync high active	*/
-#define FB_SYNC_VERT_HIGH_ACT	2	/* vertical sync high active	*/
-#define FB_SYNC_EXT		4	/* external sync		*/
-#define FB_SYNC_COMP_HIGH_ACT	8	/* composite sync high active   */
-#define FB_SYNC_BROADCAST	16	/* broadcast video timings      */
-					/* vtotal = 144d/288n/576i => PAL  */
-					/* vtotal = 121d/242n/484i => NTSC */
-#define FB_SYNC_ON_GREEN	32	/* sync on green */
-
-#define FB_VMODE_NONINTERLACED  0	/* non interlaced */
-#define FB_VMODE_INTERLACED	1	/* interlaced	*/
-#define FB_VMODE_DOUBLE		2	/* double scan */
-#define FB_VMODE_MASK		255
-
-#define FB_VMODE_YWRAP		256	/* ywrap instead of panning     */
-#define FB_VMODE_SMOOTH_XPAN	512	/* smooth xpan possible (internally used) */
-#define FB_VMODE_CONUPDATE	512	/* don't update x/yoffset	*/
-
-struct fb_var_screeninfo {
-	__u32 xres;			/* visible resolution		*/
-	__u32 yres;
-	__u32 xres_virtual;		/* virtual resolution		*/
-	__u32 yres_virtual;
-	__u32 xoffset;			/* offset from virtual to visible */
-	__u32 yoffset;			/* resolution			*/
-
-	__u32 bits_per_pixel;		/* guess what			*/
-	__u32 grayscale;		/* != 0 Graylevels instead of colors */
-
-	struct fb_bitfield red;		/* bitfield in fb mem if true color, */
-	struct fb_bitfield green;	/* else only length is significant */
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;	/* transparency			*/	
-
-	__u32 nonstd;			/* != 0 Non standard pixel format */
-
-	__u32 activate;			/* see FB_ACTIVATE_*		*/
-
-	__u32 height;			/* height of picture in mm    */
-	__u32 width;			/* width of picture in mm     */
-
-	__u32 accel_flags;		/* acceleration flags (hints)	*/
-
-	/* Timing: All values in pixclocks, except pixclock (of course) */
-	__u32 pixclock;			/* pixel clock in ps (pico seconds) */
-	__u32 left_margin;		/* time from sync to picture	*/
-	__u32 right_margin;		/* time from picture to sync	*/
-	__u32 upper_margin;		/* time from sync to picture	*/
-	__u32 lower_margin;
-	__u32 hsync_len;		/* length of horizontal sync	*/
-	__u32 vsync_len;		/* length of vertical sync	*/
-	__u32 sync;			/* see FB_SYNC_*		*/
-	__u32 vmode;			/* see FB_VMODE_*		*/
-	__u32 reserved[6];		/* Reserved for future compatibility */
-};
-
-struct fb_cmap {
-	__u32 start;			/* First entry	*/
-	__u32 len;			/* Number of entries */
-	__u16 *red;			/* Red values	*/
-	__u16 *green;
-	__u16 *blue;
-	__u16 *transp;			/* transparency, can be NULL */
-};
-
-struct fb_con2fbmap {
-	__u32 console;
-	__u32 framebuffer;
-};
-
-struct fb_monspecs {
-	__u32 hfmin;			/* hfreq lower limit (Hz) */
-	__u32 hfmax; 			/* hfreq upper limit (Hz) */
-	__u16 vfmin;			/* vfreq lower limit (Hz) */
-	__u16 vfmax;			/* vfreq upper limit (Hz) */
-	unsigned dpms : 1;		/* supports DPMS */
-};
-
-#ifdef __KERNEL__
-
-#include <linux/fs.h>
-
-
-struct fb_info;
-struct fb_info_gen;
-struct vm_area_struct;
-struct file;
-
-    /*
-     *  Frame buffer operations
-     */
-
-struct fb_ops {
-    /* open/release and usage marking */
-    int (*fb_open)(struct fb_info *info, int user);
-    int (*fb_release)(struct fb_info *info, int user);
-    /* get non settable parameters */
-    int (*fb_get_fix)(struct fb_fix_screeninfo *fix, int con,
-		      struct fb_info *info); 
-    /* get settable parameters */
-    int (*fb_get_var)(struct fb_var_screeninfo *var, int con,
-		      struct fb_info *info);		
-    /* set settable parameters */
-    int (*fb_set_var)(struct fb_var_screeninfo *var, int con,
-		      struct fb_info *info);		
-    /* get colormap */
-    int (*fb_get_cmap)(struct fb_cmap *cmap, int kspc, int con,
-		       struct fb_info *info);
-    /* set colormap */
-    int (*fb_set_cmap)(struct fb_cmap *cmap, int kspc, int con,
-		       struct fb_info *info);
-    /* pan display */
-    int (*fb_pan_display)(struct fb_var_screeninfo *var, int con,
-			  struct fb_info *info);
-    /* perform fb specific ioctl */
-    int (*fb_ioctl)(struct inode *inode, struct file *file, unsigned int cmd,
-		    unsigned long arg, int con, struct fb_info *info);
-    /* perform fb specific mmap */
-    int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma);
-    /* switch to/from raster image mode */
-    int (*fb_rasterimg)(struct fb_info *info, int start);
-};
-
-
-   /*
-    *    This is the interface between the low-level console driver and the
-    *    low-level frame buffer device
-    */
-
-struct display {
-    /* Filled in by the frame buffer device */
-
-    struct fb_var_screeninfo var;   /* variable infos. yoffset and vmode */
-				    /* are updated by fbcon.c */
-    struct fb_cmap cmap;            /* colormap */
-    char *screen_base;              /* pointer to top of virtual screen */    
-				    /* (virtual address) */
-    int visual;
-    int type;                       /* see FB_TYPE_* */
-    int type_aux;                   /* Interleave for interleaved Planes */
-    u_short ypanstep;               /* zero if no hardware ypan */
-    u_short ywrapstep;              /* zero if no hardware ywrap */
-    u_long line_length;             /* length of a line in bytes */
-    u_short can_soft_blank;         /* zero if no hardware blanking */
-    u_short inverse;                /* != 0 text black on white as default */
-    struct display_switch *dispsw;  /* low level operations */
-    void *dispsw_data;		    /* optional dispsw helper data */
-
-#if 0
-    struct fb_fix_cursorinfo fcrsr;
-    struct fb_var_cursorinfo *vcrsr;
-    struct fb_cursorstate crsrstate;
-#endif
-
-    /* Filled in by the low-level console driver */
-
-    struct vc_data *conp;           /* pointer to console data */
-    struct fb_info *fb_info;        /* frame buffer for this console */
-    int vrows;                      /* number of virtual rows */
-    unsigned short cursor_x;	    /* current cursor position */
-    unsigned short cursor_y;
-    int fgcol;                      /* text colors */
-    int bgcol;
-    u_long next_line;               /* offset to one line below */
-    u_long next_plane;              /* offset to next plane */
-    u_char *fontdata;               /* Font associated to this display */
-    unsigned short _fontheightlog;
-    unsigned short _fontwidthlog;
-    unsigned short _fontheight;
-    unsigned short _fontwidth;
-    int userfont;                   /* != 0 if fontdata kmalloc()ed */
-    u_short scrollmode;             /* Scroll Method */
-    short yscroll;                  /* Hardware scrolling */
-    unsigned char fgshift, bgshift;
-    unsigned short charmask;	    /* 0xff or 0x1ff */
-};
-
-
-struct fb_info {
-   char modename[40];			/* default video mode */
-   kdev_t node;
-   int flags;
-#define FBINFO_FLAG_MODULE	1	/* Low-level driver is a module */
-   struct fb_ops *fbops;
-   struct fb_monspecs monspecs;
-   struct display *disp;		/* initial display variable */
-   struct vc_data *display_fg;		/* Console visible on this display */
-   char fontname[40];			/* default font name */
-   int (*changevar)(int);		/* tell console var has changed */
-   int (*switch_con)(int, struct fb_info*);
-					/* tell fb to switch consoles */
-   int (*updatevar)(int, struct fb_info*);
-					/* tell fb to update the vars */
-   void (*blank)(int, struct fb_info*);	/* tell fb to (un)blank the screen */
-					/* arg = 0: unblank */
-					/* arg > 0: VESA level (arg-1) */
-
-   /* From here on everything is device dependent */
-};
-
-#ifdef MODULE
-#define FBINFO_FLAG_DEFAULT	FBINFO_FLAG_MODULE
-#else
-#define FBINFO_FLAG_DEFAULT	0
-#endif
-
-    /*
-     *  This structure abstracts from the underlying hardware. It is not
-     *  mandatory but used by the `generic' frame buffer operations.
-     *  Read drivers/video/skeletonfb.c for more information.
-     */
-
-struct fbgen_hwswitch {
-    void (*detect)(void);
-    int (*encode_fix)(struct fb_fix_screeninfo *fix, const void *par,
-		      struct fb_info_gen *info);
-    int (*decode_var)(const struct fb_var_screeninfo *var, void *par,
-		      struct fb_info_gen *info);
-    int (*encode_var)(struct fb_var_screeninfo *var, const void *par,
-		      struct fb_info_gen *info);
-    void (*get_par)(void *par, struct fb_info_gen *info);
-    void (*set_par)(const void *par, struct fb_info_gen *info);
-    int (*getcolreg)(unsigned regno, unsigned *red, unsigned *green,
-		     unsigned *blue, unsigned *transp, struct fb_info *info);
-    int (*setcolreg)(unsigned regno, unsigned red, unsigned green,
-		     unsigned blue, unsigned transp, struct fb_info *info);
-    int (*pan_display)(const struct fb_var_screeninfo *var,
-		       struct fb_info_gen *info);
-    int (*blank)(int blank_mode, struct fb_info_gen *info);
-    void (*set_disp)(const void *par, struct display *disp,
-		     struct fb_info_gen *info);
-};
-
-struct fb_info_gen {
-    struct fb_info info;
-
-    /* Entries for a generic frame buffer device */
-    /* Yes, this starts looking like C++ */
-    u_int parsize;
-    struct fbgen_hwswitch *fbhw;
-
-   /* From here on everything is device dependent */
-};
-
-    /*
-     *  `Generic' versions of the frame buffer device operations
-     */
-
-extern int fbgen_get_fix(struct fb_fix_screeninfo *fix, int con,
-			 struct fb_info *info);
-extern int fbgen_get_var(struct fb_var_screeninfo *var, int con,
-			 struct fb_info *info);
-extern int fbgen_set_var(struct fb_var_screeninfo *var, int con,
-			 struct fb_info *info);
-extern int fbgen_get_cmap(struct fb_cmap *cmap, int kspc, int con,
-			  struct fb_info *info);
-extern int fbgen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
-			  struct fb_info *info);
-extern int fbgen_pan_display(struct fb_var_screeninfo *var, int con,
-			     struct fb_info *info);
-extern int fbgen_ioctl(struct inode *inode, struct file *file,
-		       unsigned int cmd, unsigned long arg, int con,
-		       struct fb_info *info);
-
-    /*
-     *  Helper functions
-     */
-
-extern int fbgen_do_set_var(struct fb_var_screeninfo *var, int isactive,
-			    struct fb_info_gen *info);
-extern void fbgen_set_disp(int con, struct fb_info_gen *info);
-extern void fbgen_install_cmap(int con, struct fb_info_gen *info);
-extern int fbgen_update_var(int con, struct fb_info *info);
-extern int fbgen_switch(int con, struct fb_info *info);
-extern void fbgen_blank(int blank, struct fb_info *info);
-
-
-struct fb_videomode {
-    const char *name;
-    struct fb_var_screeninfo var;
-};
-
-
-/* drivers/char/fbmem.c */
-extern int register_framebuffer(struct fb_info *fb_info);
-extern int unregister_framebuffer(const struct fb_info *fb_info);
-extern int fbmon_valid_timings(u_int pixclock, u_int htotal, u_int vtotal,
-			       const struct fb_info *fb_info);
-extern int fbmon_dpms(const struct fb_info *fb_info);
-
-
-extern int num_registered_fb;
-extern struct fb_info *registered_fb[FB_MAX];
-extern char con2fb_map[MAX_NR_CONSOLES];
-
-/* drivers/video/fbcon.c */
-extern struct display fb_display[MAX_NR_CONSOLES];
-
-/* drivers/video/fbcmap.c */
-extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp);
-extern void fb_copy_cmap(struct fb_cmap *from, struct fb_cmap *to,
-			 int fsfromto);
-extern int fb_get_cmap(struct fb_cmap *cmap, int kspc,
-		       int (*getcolreg)(u_int, u_int *, u_int *, u_int *,
-					u_int *, struct fb_info *),
-		       struct fb_info *fb_info);
-extern int fb_set_cmap(struct fb_cmap *cmap, int kspc,
-		       int (*setcolreg)(u_int, u_int, u_int, u_int, u_int,
-					struct fb_info *),
-		       struct fb_info *fb_info);
-extern struct fb_cmap *fb_default_cmap(int len);
-extern void fb_invert_cmaps(void);
-
-/* VESA Blanking Levels */
-#define VESA_NO_BLANKING	0
-#define VESA_VSYNC_SUSPEND	1
-#define VESA_HSYNC_SUSPEND	2
-#define VESA_POWERDOWN		3
-
-#endif /* __KERNEL__ */
-
-#if 1
-
-#define FBCMD_GET_CURRENTPAR	0xDEAD0005
-#define FBCMD_SET_CURRENTPAR	0xDEAD8005
-
-#endif
-
-
-#if 1 /* Preliminary */
-
-   /*
-    *    Hardware Cursor
-    */
-
-#define FBIOGET_FCURSORINFO     0x4607
-#define FBIOGET_VCURSORINFO     0x4608
-#define FBIOPUT_VCURSORINFO     0x4609
-#define FBIOGET_CURSORSTATE     0x460A
-#define FBIOPUT_CURSORSTATE     0x460B
-
-
-struct fb_fix_cursorinfo {
-	__u16 crsr_width;		/* width and height of the cursor in */
-	__u16 crsr_height;		/* pixels (zero if no cursor)	*/
-	__u16 crsr_xsize;		/* cursor size in display pixels */
-	__u16 crsr_ysize;
-	__u16 crsr_color1;		/* colormap entry for cursor color1 */
-	__u16 crsr_color2;		/* colormap entry for cursor color2 */
-};
-
-struct fb_var_cursorinfo {
-	__u16 width;
-	__u16 height;
-	__u16 xspot;
-	__u16 yspot;
-	__u8 data[1];			/* field with [height][width]        */
-};
-
-struct fb_cursorstate {
-	__s16 xoffset;
-	__s16 yoffset;
-	__u16 mode;
-};
-
-#define FB_CURSOR_OFF		0
-#define FB_CURSOR_ON		1
-#define FB_CURSOR_FLASH		2
-
-#endif /* Preliminary */
-
-#endif /* _LINUX_FB_H */
--- a/TVout/fbset/fb.modes.5	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,228 +0,0 @@
-.TH fb.modes 8 "Aug 1996" local "Linux frame buffer utils"
-.SH NAME
-fb.modes \- frame buffer modes file
-.SH DESCRIPTION
-.I /etc/fb.modes
-contains an unlimited number of video mode descriptions. The general format
-of a video mode is:
-.sp
-mode
-.RI \" name \"
-.RS
-geometry
-.RI < xres >
-.RI < yres >
-.RI < vxres >
-.RI < vyres >
-.RI < depth >
-.br
-timings
-.RI < pixclock >
-.RI < left >
-.RI < right >
-.RI < upper >
-.RI < lower >
-.RI < hslen >
-.RI < vslen >
-.br
-.B options
-.RI < value >
-.RE
-endmode
-.SH OPTIONS
-geometry options:
-.RS
-.TP
-.I xres
-visible horizontal resolution (in pixels)
-.TP
-.I yres
-visible vertical resolution (in pixels)
-.TP
-.I vxres
-virtual horizontal resolution (in pixels)
-.TP
-.I vyres
-virtual vertical resolution (in pixels)
-.TP
-.I depth
-display depth (in bits per pixel)
-.RE
-.PP
-timing options:
-.RS
-.TP
-.I pixclock
-length of one pixel (in picoseconds)
-.TP
-.I left
-left margin (in pixels)
-.TP
-.I right
-right margin (in pixels)
-.TP
-.I upper
-upper margin (in pixel lines)
-.TP
-.I lower
-lower margin (in pixel lines)
-.TP
-.I hslen
-horizontal sync length (in pixels)
-.TP
-.I vslen
-vertical sync length (in pixel lines)
-.RE
-.PP
-other options:
-.RS
-the first value of this options is the default
-.TP
-.IR \fBhsync "\ {" low | high }
-the horizontal sync polarity
-.TP
-.IR \fBvsync "\ {" low | high }
-the vertical sync polarity
-.TP
-.IR \fBcsync "\ {" low | high }
-the composite sync polarity
-.TP
-.IR \fBextsync "\ {" false | true }
-enable or disable external resync. If enabled the sync timings are not
-generated by the frame buffer device and must be provided externally
-instead. Note that this option may not be supported by every frame buffer
-device
-.TP
-.IR \fBlaced "\ {" false | true }
-enable or disable interlace. If enabled the display will be split in two
-frames, each frame contains only even and odd lines respectively. These two
-frames will be displayed alternating, this way twice the lines can be
-displayed and the vertical frequency for monitor stays the same, but the
-visible vertical frequency gets halved
-.TP
-.IR \fBdouble "\ {" false | true }
-enable or disable doublescan. If enabled every line will be displayed twice
-and this way the horizontal frequency can easily be doubled, so that the
-same resolution can be displayed on different monitors, even if the
-horizontal frequency specification differs. Note that this option may not be
-supported by every frame buffer device
-.RE
-.SH INTERNALS
-Generally a frame buffer display is organized as follows:
-.sp
-.ad c
-+\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-+\-\-\-+
-.br
-.RB "|\ \ \ |\ \ \ \ \ \ \ " ^ "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |"
-.br
-.RB "|\ \ \ |\ \ \ \ \ \ \ " | "\ " \fI5 "\ \ \ \ \ |\ \ \ |\ \ \ |"
-.br
-.RB "|\ \ \ |\ \ \ \ \ \ \ " v "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |"
-.br
-+\-\-\-#################\-\-\-+\-\-\-+
-.br
-.RB "|\ \ \ #\ \ \ \ \ \ \ " ^ "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |"
-.br
-.RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |"
-.br
-.RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |"
-.br
-.RI "| " 1 " #       " \fB| "   " 2 "   # " 3 " | " 4 " |"
-.br
-.RB "|" "<\->" "#" "<\-\-\-\-\-\-+\-\-\-\-\-\->" "#" "<\->" "|" "<\->" "|"
-.br
-.RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |"
-.br
-.RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ " \fI6 "\ \ \ \ \ #\ \ \ |\ \ \ |"
-.br
-.RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |"
-.br
-.RB "|\ \ \ #\ \ \ \ \ \ \ " v "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |"
-.br
-+\-\-\-#################\-\-\-+\-\-\-+
-.br
-.RB "|\ \ \ |\ \ \ \ \ \ \ " ^ "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |"
-.br
-.RB "|\ \ \ |\ \ \ \ \ \ \ " | "\ " \fI7 "\ \ \ \ \ |\ \ \ |\ \ \ |"
-.br
-.RB "|\ \ \ |\ \ \ \ \ \ \ " v "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |"
-.br
-+\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-+\-\-\-+
-.br
-.RB "|\ \ \ |\ \ \ \ \ \ \ " ^ "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |"
-.br
-.RB "|\ \ \ |\ \ \ \ \ \ \ " | "\ " \fI8 "\ \ \ \ \ |\ \ \ |\ \ \ |"
-.br
-.RB "|\ \ \ |\ \ \ \ \ \ \ " v "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |"
-.br
-+\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-+\-\-\-+
-.sp
-.ad n
-.RS
-.I 1
-\t left margin
-.br
-.I 2
-\t xres
-.br
-.I 3
-\t right margin
-.br
-.I 4
-\t horizontal sync len
-.br
-.I 5
-\t upper margin
-.br
-.I 6
-\t yres
-.br
-.I 7
-\t lower margin
-.br
-.I 8
-\t vertical sync len
-.RE
-.sp
-The area bordered with `#' is the visible display area. Horizontal and
-vertical frequencies can now easily be calculated, for this the sum of
-horizontal or vertical values are important
-.RS
-.sp
-htotal\ =\ left\ +\ xres\ +\ right\ +\ hslen
-.br
-vtotal\ =\ upper\ +\ yres\ +\ lower\ +\ vslen
-.sp
-.RE
-The length of one line can now be calculated with pixclock
-.RS
-.sp
-line\ =\ pixclock\ *\ htotal
-.sp
-.RE
-and we have the horizontal frequency
-.RS
-.sp
-hfreq\ =\ 1E12\ /\ line\ =\ 1E12\ /\ (pixclock\ *\ htotal)
-.sp
-.RE
-To get the vertical frequency vtotal must eventually adjusted. If the
-display is laced, vtotal must be halved or if the display is a doublescan
-one, vtotal must be doubled. Now we can calculate the length of one frame
-.RS
-.sp
-if\ (lace)\ \ \ vtotal\ /=\ 2
-.br
-if\ (double)\ vtotal\ *=\ 2
-.sp
-frame\ =\ vtotal\ *\ line
-.sp
-.RE
-and we get also the vertical frequency
-.RS
-.sp
-vfreq\ =\ 1E12\ /\ frame\ =\ hfreq\ /\ vtotal
-.sp
-.RE
-.SH SEE ALSO
-.BR fbset "(8), " fbdev (4)
--- a/TVout/fbset/fbset.8	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,242 +0,0 @@
-.TH fbset 8 "July 1998" local "Linux frame buffer utils"
-.SH NAME
-fbset \- show and modify frame buffer device settings
-.SH SYNOPSIS
-.B fbset
-.RI [ options ]
-.RI [ mode ]
-.SH DESCRIPTION
-.B This documentation is out of date!!
-.PP
-.B fbset
-is a system utility to show or change the settings of the frame buffer
-device. The frame buffer device provides a simple and unique interface to
-access different kinds of graphic displays.
-.PP
-Frame buffer devices are accessed via special device nodes located in the
-/dev directory. The naming scheme for these nodes is always
-.IR \fBfb < n >,
-where
-.I n
-is the number of the used frame buffer device.
-.PP
-.B fbset
-uses an own video mode database located in /etc/fb.modes. An unlimited
-number of video modes can be defined in this database. For further
-information see
-.BR fb.modes (5).
-.SH OPTIONS
-If no option is given,
-.B fbset
-will display the current frame buffer settings.
-.sp
-General options:
-.RS
-.TP
-.BR \-\-help ",\ " \-h
-display an usage information
-.TP
-.BR \-\-now ",\ " \-n
-change the video mode immediately. If no frame buffer device is given via
-.B \-fb
-, then this option is activated by default
-.TP
-.BR \-\-show ",\ " \-s
-display the video mode settings. This is default if no further option or
-only a frame buffer device via
-.B \-fb
-is given
-.TP
-.BR \-\-info ",\ " \-i
-display all available frame buffer information
-.TP
-.BR \-\-verbose ",\ " \-v
-display information what
-.B fbset
-is currently doing
-.TP
-.BR \-\-version ",\ " \-V
-display the version information about
-.B fbset
-.TP
-.BR \-\-xfree86 ",\ "  \-x
-display the timing information as it's needed by XFree86
-.RE
-.PP
-Frame buffer device nodes:
-.RS
-.TP
-.BR \-fb "\ <" \fIdevice >
-.I device
-gives the frame buffer device node. If no device via
-.B \-fb
-is given, 
-.I /dev/fb0
-is used
-.TP
-.RE
-.PP
-Video mode database:
-.RS
-.TP
-.BR \-db "\ <" \fIfile >
-set an alternative video mode database file (default is 
-.IR /etc/fb.modes ),
-see also
-.BR fb.modes (5)
-.RE
-.PP
-Display geometry:
-.RS
-.TP
-.BR \-xres "\ <" \fIvalue >
-set visible horizontal resolution (in pixels)
-.TP
-.BR \-yres "\ <" \fIvalue >
-set visible vertical resolution (in pixels)
-.TP
-.BR \-vxres "\ <" \fIvalue >
-set virtual horizontal resolution (in pixels)
-.TP
-.BR \-vyres "\ <" \fIvalue >
-set virtual vertical resolution (in pixels)
-.TP
-.BR \-depth "\ <" \fIvalue >
-set display depth (in bits per pixel)
-.TP
-.BR \-\-geometry ",\ " \-g "\ ..."
-set all geometry parameters at once in the order
-.RI < xres >
-.RI < yres >
-.RI < vxres >
-.RI < vyres >
-.RI < depth >,
-e.g.
-.B \-g
-.I 640 400 640 400 4
-.TP
-.BR \-match "\ \ \ \ \ \ "
-make the physical resolution match the virtual resolution
-.RE
-.PP
-Display timings:
-.RS
-.TP
-.BR \-pixclock "\ <" \fIvalue >
-set the length of one pixel (in picoseconds). Note that the frame buffer
-device may only support some pixel lengths
-.TP
-.BR \-left "\ <" \fIvalue >
-set left margin (in pixels)
-.TP
-.BR \-right "\ <" \fIvalue >
-set right margin (in pixels)
-.TP
-.BR \-upper "\ <" \fIvalue >
-set upper margin (in pixel lines)
-.TP
-.BR \-lower "\ <" \fIvalue >
-set lower margin (in pixel lines)
-.TP
-.BR \-hslen "\ <" \fIvalue >
-set horizontal sync length (in pixels)
-.TP
-.BR \-vslen "\ <" \fIvalue >
-set vertical sync length (in pixel lines)
-.TP
-.BR \-\-timings ",\ " \-t "\ ..."
-set all timing parameters at once in the order
-.RI < pixclock >
-.RI < left >
-.RI < right >
-.RI < upper >
-.RI < lower >
-.RI < hslen >
-.RI < vslen >,
-e.g.
-.B \-g
-.I 35242 64 96 35 12 112 2
-.RE
-.PP
-Display flags:
-.RS
-.TP
-.IR \fB\-hsync "\ {" low | high }
-set the horizontal sync polarity
-.TP
-.IR \fB\-vsync "\ {" low | high }
-set the vertical sync polarity
-.TP
-.IR \fB\-csync "\ {" low | high }
-set the composite sync polarity
-.TP
-.IR \fB\-extsync "\ {" false | true }
-enable or disable external resync. If enabled the sync timings are not
-generated by the frame buffer device and must be provided externally
-instead. Note that this option may not be supported by every frame buffer
-device
-.TP
-.IR \fB\-bcast "\ {" false | true }
-enable or disable broadcast modes. If enabled the frame buffer generates the
-exact timings for several broadcast modes (e.g. PAL or NTSC). Note that
-this option may not be supported by every frame buffer device
-.TP
-.IR \fB\-laced "\ {" false | true }
-enable or disable interlace. If enabled the display will be split in two
-frames, each frame contains only even and odd lines respectively. These two
-frames will be displayed alternating, this way twice the lines can be
-displayed and the vertical frequency for the monitor stays the same, but the
-visible vertical frequency gets halved
-.TP
-.IR \fB\-double "\ {" false | true }
-enable or disable doublescan. If enabled every line will be displayed twice
-and this way the horizontal frequency can easily be doubled, so that the
-same resolution can be displayed on different monitors, even if the
-horizontal frequency specification differs. Note that this option may not be
-supported by every frame buffer device
-.RE
-.PP
-Display positioning:
-.RS
-.TP
-.IR \fB\-move "\ {" left | right | up | down }
-move the visible part of the display in the specified direction
-.TP
-.BR \-step "\ <" \fIvalue >
-set step size for display positioning (in pixels or pixel lines), if
-.B \-step
-is not given display will be moved 8 pixels horizontally or 2 pixel lines
-vertically
-.RE
-.SH EXAMPLE
-To set the used video mode for
-.B X
-insert the following in rc.local:
-.RS
-.sp
-.B fbset
--fb
-.I /dev/fb0
-vga
-.sp
-.RE
-and make the used frame buffer device known to
-.BR X :
-.RS
-.sp
-.B export
-.RI FRAMEBUFFER= /dev/fb0
-.RE
-.SH FILES
-.I /dev/fb*
-.br
-.I /etc/fb.modes
-.SH SEE ALSO
-.BR fb.modes "(5), " fbdev (4)
-.SH AUTHORS
-.TP
-Geert Uytterhoeven <Geert.Uytterhoeven@cs.kuleuven.ac.be>
-.TP
-Roman Zippel <zippel@fh-brandenburg.de>
-.br
-man files
--- a/TVout/fbset/fbset.c	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1054 +0,0 @@
-/*
- *  Linux Frame Buffer Device Configuration
- *
- *  © Copyright 1995-1999 by Geert Uytterhoeven
- *		       (Geert.Uytterhoeven@cs.kuleuven.ac.be)
- *
- *  --------------------------------------------------------------------------
- *
- *  This file is subject to the terms and conditions of the GNU General Public
- *  License. See the file COPYING in the main directory of the Linux
- *  distribution for more details.
- *
- *  Petr Vandrovec <vandrove@vc.cvut.cz>:
- *           -grayscale, -rgba, -nonstd, VGA modes reporting
- *
- *  Brad Midgley <brad@exodus.pht.com>:
- *           -match
- *
- */
-
-
-#include <stdarg.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/ioctl.h>
-#include <ctype.h>
-#include <sys/stat.h>
-
-struct file;
-struct inode;
-
-#include "fb.h"
-
-#include "fbset.h"
-
-
-    /*
-     *  Default Frame Buffer Special Device Node
-     */
-
-#define DEFAULT_FRAMEBUFFER	"/dev/fb0"
-
-
-    /*
-     *  Default Video Mode Database File
-     */
-
-#define DEFAULT_MODEDBFILE	"/etc/fb.modes"
-
-
-    /*
-     *  Command Line Options
-     */
-
-static const char *ProgramName;
-
-static int Opt_test = 0;
-static int Opt_show = 0;
-static int Opt_info = 0;
-static int Opt_version = 0;
-static int Opt_verbose = 0;
-static int Opt_xfree86 = 0;
-static int Opt_change = 0;
-static int Opt_all = 0;
-
-static const char *Opt_fb = NULL;
-const char *Opt_modedb = DEFAULT_MODEDBFILE;
-static const char *Opt_xres = NULL;
-static const char *Opt_yres = NULL;
-static const char *Opt_vxres = NULL;
-static const char *Opt_vyres = NULL;
-static const char *Opt_depth = NULL;
-static const char *Opt_pixclock = NULL;
-static const char *Opt_left = NULL;
-static const char *Opt_right = NULL;
-static const char *Opt_upper = NULL;
-static const char *Opt_lower = NULL;
-static const char *Opt_hslen = NULL;
-static const char *Opt_vslen = NULL;
-static const char *Opt_accel = NULL;
-static const char *Opt_hsync = NULL;
-static const char *Opt_vsync = NULL;
-static const char *Opt_csync = NULL;
-static const char *Opt_gsync = NULL;
-static const char *Opt_extsync = NULL;
-static const char *Opt_bcast = NULL;
-static const char *Opt_laced = NULL;
-static const char *Opt_double = NULL;
-static const char *Opt_move = NULL;
-static const char *Opt_step = NULL;
-static const char *Opt_modename = NULL;
-static const char *Opt_rgba = NULL;
-static const char *Opt_nonstd = NULL;
-static const char *Opt_grayscale = NULL;
-static const char *Opt_matchyres = NULL;
-
-static struct {
-    const char *name;
-    const char **value;
-    const int change;
-} Options[] = {
-    { "-fb", &Opt_fb, 0 },
-    { "-db", &Opt_modedb, 0 },
-    { "-xres", &Opt_xres, 1 },
-    { "-yres", &Opt_yres, 1 },
-    { "-vxres", &Opt_vxres, 1 },
-    { "-vyres", &Opt_vyres, 1 },
-    { "-depth", &Opt_depth, 1 },
-    { "-nonstd", &Opt_nonstd, 1},
-    { "-pixclock", &Opt_pixclock, 1 },
-    { "-left", &Opt_left, 1 },
-    { "-right", &Opt_right, 1 },
-    { "-upper", &Opt_upper, 1 },
-    { "-lower", &Opt_lower, 1 },
-    { "-hslen", &Opt_hslen, 1 },
-    { "-vslen", &Opt_vslen, 1 },
-    { "-accel", &Opt_accel, 1 },
-    { "-hsync", &Opt_hsync, 1 },
-    { "-vsync", &Opt_vsync, 1 },
-    { "-csync", &Opt_csync, 1 },
-    { "-gsync", &Opt_gsync, 1 },
-    { "-extsync", &Opt_extsync, 1 },
-    { "-bcast", &Opt_bcast, 1 },
-    { "-laced", &Opt_laced, 1 },
-    { "-double", &Opt_double, 1 },
-    { "-move", &Opt_move, 1 },
-    { "-step", &Opt_step, 1 },
-    { "-rgba", &Opt_rgba, 1 },
-    { "-grayscale", &Opt_grayscale, 1 },
-    { NULL, NULL, 0 }
-};
-
-
-    /*
-     *  Video Mode Database
-     */
-
-struct VideoMode *VideoModes = NULL;
-
-
-    /*
-     *  Hardware Text Modes
-     */
-
-static struct textentry {
-    __u32 id;
-    const char *name;
-} Textmodes[] = {
-    { FB_AUX_TEXT_MDA, "Monochrome text" },
-    { FB_AUX_TEXT_CGA, "CGA/EGA/VGA Color text" },
-    { FB_AUX_TEXT_S3_MMIO, "S3 MMIO fasttext" },
-    { FB_AUX_TEXT_MGA_STEP16, "MGA Millennium I step 16 text" },
-    { FB_AUX_TEXT_MGA_STEP8, "MGA step 8 text" },
-};
-
-static struct textentry VGAModes[] = {
-    { FB_AUX_VGA_PLANES_VGA4, "VGA 16 colors in 4 planes" },
-    { FB_AUX_VGA_PLANES_CFB4, "VGA 16 colors in 1 plane" },
-    { FB_AUX_VGA_PLANES_CFB8, "VGA 256 colors in 4 planes" },
-    /* last entry has name == NULL */
-    { 0,                      NULL}
-};
-
-    /*
-     *  Hardware Accelerators
-     */
-
-static struct accelentry {
-    __u32 id;
-    const char *name;
-} Accelerators[] = {
-    { FB_ACCEL_NONE, "No" },
-    { FB_ACCEL_ATARIBLITT, "Atari Blitter" },
-    { FB_ACCEL_AMIGABLITT, "Amiga Blitter" },
-    { FB_ACCEL_S3_TRIO64, "S3 Trio64" },
-    { FB_ACCEL_NCR_77C32BLT, "NCR 77C32BLT" },
-    { FB_ACCEL_S3_VIRGE, "S3 ViRGE" },
-    { FB_ACCEL_ATI_MACH64GX, "ATI Mach64GX" },
-    { FB_ACCEL_DEC_TGA, "DEC 21030 TGA" },
-    { FB_ACCEL_ATI_MACH64CT, "ATI Mach64CT" },
-    { FB_ACCEL_ATI_MACH64VT, "ATI Mach64VT" },
-    { FB_ACCEL_ATI_MACH64GT, "ATI Mach64GT" },
-    { FB_ACCEL_SUN_CREATOR, "Sun Creator/Creator3D" },
-    { FB_ACCEL_SUN_CGSIX, "Sun cg6" },
-    { FB_ACCEL_SUN_LEO, "Sun leo/zx" },
-    { FB_ACCEL_IMS_TWINTURBO, "IMS Twin Turbo" },
-    { FB_ACCEL_3DLABS_PERMEDIA2, "3Dlabs Permedia 2" },
-    { FB_ACCEL_MATROX_MGA2064W, "Matrox MGA2064W (Millennium)" },
-    { FB_ACCEL_MATROX_MGA1064SG, "Matrox MGA1064SG (Mystique)" },
-    { FB_ACCEL_MATROX_MGA2164W, "Matrox MGA2164W (Millennium II)" },
-    { FB_ACCEL_MATROX_MGA2164W_AGP, "Matrox MGA2164W (Millennium II AGP)" },
-    { FB_ACCEL_MATROX_MGAG100, "Matrox G100 (Productiva G100)" },
-    { FB_ACCEL_MATROX_MGAG200, "Matrox G200 (Millennium, Mystique)" },
-    { FB_ACCEL_SUN_CG14, "Sun cg14" },
-    { FB_ACCEL_SUN_BWTWO, "Sun bw2" },
-    { FB_ACCEL_SUN_CGTHREE, "Sun cg3" },
-    { FB_ACCEL_SUN_TCX, "Sun tcx" },
-    { FB_ACCEL_MATROX_MGAG400, "Matrox G400" },
-};
-
-
-    /*
-     *  Current Video Mode
-     */
-
-struct VideoMode Current;
-
-
-    /*
-     *  Function Prototypes
-     */
-
-int OpenFrameBuffer(const char *name);
-void CloseFrameBuffer(int fh);
-void GetVarScreenInfo(int fh, struct fb_var_screeninfo *var);
-void SetVarScreenInfo(int fh, struct fb_var_screeninfo *var);
-void GetFixScreenInfo(int fh, struct fb_fix_screeninfo *fix);
-static void ConvertFromVideoMode(const struct VideoMode *vmode,
-				 struct fb_var_screeninfo *var);
-static void ConvertToVideoMode(const struct fb_var_screeninfo *var,
-			       struct VideoMode *vmode);
-static int atoboolean(const char *var);
-static void ReadModeDB(void);
-static struct VideoMode *FindVideoMode(const char *name);
-static void ModifyVideoMode(struct VideoMode *vmode);
-static void DisplayVModeInfo(struct VideoMode *vmode);
-static void DisplayFBInfo(struct fb_fix_screeninfo *fix);
-static int FillScanRates(struct VideoMode *vmode);
-static void Usage(void) __attribute__ ((noreturn));
-int main(int argc, char *argv[]);
-
-
-    /*
-     *  Print an Error Message and Exit
-     */
-
-void Die(const char *fmt, ...)
-{
-    va_list ap;
-
-    fflush(stdout);
-    va_start(ap, fmt);
-    vfprintf(stderr, fmt, ap);
-    va_end(ap);
-    exit(1);
-}
-
-
-    /*
-     *  Open the Frame Buffer Device
-     */
-
-int OpenFrameBuffer(const char *name)
-{
-    int fh;
-
-    if (Opt_verbose)
-	printf("Opening frame buffer device `%s'\n", name);
-
-    if ((fh = open(name, O_RDONLY)) == -1)
-	Die("open %s: %s\n", name, strerror(errno));
-    return fh;
-}
-
-
-    /*
-     *  Close the Frame Buffer Device
-     */
-
-void CloseFrameBuffer(int fh)
-{
-    close(fh);
-}
-
-    /*
-     *  Get the Variable Part of the Screen Info
-     */
-
-void GetVarScreenInfo(int fh, struct fb_var_screeninfo *var)
-{
-    if (ioctl(fh, FBIOGET_VSCREENINFO, var))
-	Die("ioctl FBIOGET_VSCREENINFO: %s\n", strerror(errno));
-}
-
-
-    /*
-     *  Set (and Get) the Variable Part of the Screen Info
-     */
-
-void SetVarScreenInfo(int fh, struct fb_var_screeninfo *var)
-{
-    if (ioctl(fh, FBIOPUT_VSCREENINFO, var))
-	Die("ioctl FBIOPUT_VSCREENINFO: %s\n", strerror(errno));
-}
-
-
-    /*
-     *  Get the Fixed Part of the Screen Info
-     */
-
-void GetFixScreenInfo(int fh, struct fb_fix_screeninfo *fix)
-{
-    if (ioctl(fh, FBIOGET_FSCREENINFO, fix))
-	Die("ioctl FBIOGET_FSCREENINFO: %s\n", strerror(errno));
-}
-
-
-    /*
-     *  Conversion Routines
-     */
-
-static void ConvertFromVideoMode(const struct VideoMode *vmode,
-				 struct fb_var_screeninfo *var)
-{
-    memset(var, 0, sizeof(struct fb_var_screeninfo));
-    var->xres = vmode->xres;
-    var->yres = vmode->yres;
-    var->xres_virtual = vmode->vxres;
-    var->yres_virtual = vmode->vyres;
-    var->bits_per_pixel = vmode->depth;
-    var->nonstd = vmode->nonstd;
-    if (Opt_test)
-	var->activate = FB_ACTIVATE_TEST;
-    else
-	var->activate = FB_ACTIVATE_NOW;
-    if (Opt_all)
-	var->activate = FB_ACTIVATE_ALL;
-    var->accel_flags = vmode->accel_flags;
-    var->pixclock = vmode->pixclock;
-    var->left_margin = vmode->left;
-    var->right_margin = vmode->right;
-    var->upper_margin = vmode->upper;
-    var->lower_margin = vmode->lower;
-    var->hsync_len = vmode->hslen;
-    var->vsync_len = vmode->vslen;
-    if (vmode->hsync == HIGH)
-	var->sync |= FB_SYNC_HOR_HIGH_ACT;
-    if (vmode->vsync == HIGH)
-	var->sync |= FB_SYNC_VERT_HIGH_ACT;
-    if (vmode->csync == HIGH)
-	var->sync |= FB_SYNC_COMP_HIGH_ACT;
-    if (vmode->gsync == HIGH)
-	var->sync |= FB_SYNC_ON_GREEN;
-    if (vmode->extsync == TRUE)
-	var->sync |= FB_SYNC_EXT;
-    if (vmode->bcast == TRUE)
-	var->sync |= FB_SYNC_BROADCAST;
-    if (vmode->laced == TRUE)
-	var->vmode = FB_VMODE_INTERLACED;
-    else if (vmode->dblscan == TRUE)
-	var->vmode = FB_VMODE_DOUBLE;
-    else
-	var->vmode = FB_VMODE_NONINTERLACED;
-    var->vmode |= FB_VMODE_CONUPDATE;
-    var->red.length = vmode->red.length;
-    var->red.offset = vmode->red.offset;
-    var->green.length = vmode->green.length;
-    var->green.offset = vmode->green.offset;
-    var->blue.length = vmode->blue.length;
-    var->blue.offset = vmode->blue.offset;
-    var->transp.length = vmode->transp.length;
-    var->transp.offset = vmode->transp.offset;
-    var->grayscale = vmode->grayscale;
-}
-
-
-static void ConvertToVideoMode(const struct fb_var_screeninfo *var,
-			       struct VideoMode *vmode)
-{
-    vmode->name = NULL;
-    vmode->xres = var->xres;
-    vmode->yres = var->yres;
-    vmode->vxres = var->xres_virtual;
-    vmode->vyres = var->yres_virtual;
-    vmode->depth = var->bits_per_pixel;
-    vmode->nonstd = var->nonstd;
-    vmode->accel_flags = var->accel_flags;
-    vmode->pixclock = var->pixclock;
-    vmode->left = var->left_margin;
-    vmode->right = var->right_margin;
-    vmode->upper = var->upper_margin;
-    vmode->lower = var->lower_margin;
-    vmode->hslen = var->hsync_len;
-    vmode->vslen = var->vsync_len;
-    vmode->hsync = var->sync & FB_SYNC_HOR_HIGH_ACT ? HIGH : LOW;
-    vmode->vsync = var->sync & FB_SYNC_VERT_HIGH_ACT ? HIGH : LOW;
-    vmode->csync = var->sync & FB_SYNC_COMP_HIGH_ACT ? HIGH : LOW;
-    vmode->gsync = var->sync & FB_SYNC_ON_GREEN ? TRUE : FALSE;
-    vmode->extsync = var->sync & FB_SYNC_EXT ? TRUE : FALSE;
-    vmode->bcast = var->sync & FB_SYNC_BROADCAST ? TRUE : FALSE;
-    vmode->grayscale = var->grayscale;
-    vmode->laced = FALSE;
-    vmode->dblscan = FALSE;
-    switch (var->vmode & FB_VMODE_MASK) {
-	case FB_VMODE_INTERLACED:
-	    vmode->laced = TRUE;
-	    break;
-	case FB_VMODE_DOUBLE:
-	    vmode->dblscan = TRUE;
-	    break;
-    }
-    vmode->red.length = var->red.length;
-    vmode->red.offset = var->red.offset;
-    vmode->green.length = var->green.length;
-    vmode->green.offset = var->green.offset;
-    vmode->blue.length = var->blue.length;
-    vmode->blue.offset = var->blue.offset;
-    vmode->transp.length = var->transp.length;
-    vmode->transp.offset = var->transp.offset;
-    FillScanRates(vmode);
-}
-
-
-static int atoboolean(const char *var)
-{
-    int value = 0;
-
-    if (!strcasecmp(var, "false") || !strcasecmp(var, "low") ||
-	!strcasecmp(var, "no") || !strcasecmp(var, "off") ||
-	!strcmp(var, "0"))
-	value = 0;
-    else if (!strcasecmp(var, "true") || !strcasecmp(var, "high") ||
-	     !strcasecmp(var, "yes") || !strcasecmp(var, "on") ||
-	     !strcmp(var, "1"))
-	value = 1;
-    else
-	Die("Invalid value `%s'\n", var);
-
-    return value;
-}
-
-
-void AddVideoMode(const struct VideoMode *vmode)
-{
-    struct VideoMode *vmode2;
-
-    if (FindVideoMode(vmode->name))
-	Die("%s:%d: Duplicate mode name `%s'\n", Opt_modedb, line,
-	    vmode->name);
-    vmode2 = malloc(sizeof(struct VideoMode));
-    *vmode2 = *vmode;
-    if (!FillScanRates(vmode2))
-	Die("%s:%d: Bad video mode `%s'\n", Opt_modedb, line, vmode2->name);
-    vmode2->next = VideoModes;
-    VideoModes = vmode2;
-}
-
-
-    /*
-     *  Read the Video Mode Database
-     */
-
-static void ReadModeDB(void)
-{
-    if (Opt_verbose)
-	printf("Reading mode database from file `%s'\n", Opt_modedb);
-
-    if (!(yyin = fopen(Opt_modedb, "r")))
-	Die("fopen %s: %s\n", Opt_modedb, strerror(errno));
-    yyparse();
-    fclose(yyin);
-}
-
-
-static void getColor(struct color *color, const char** opt)
-{
-    char* ptr;
-
-    color->length = 0;
-    color->offset = 0;
-    ptr = (char*)(*opt);
-    if (!ptr)
-	return;
-    color->length = strtoul(ptr, &ptr, 0);
-    if (!ptr)
-	return;
-    if (*ptr == '/')
-	color->offset = strtoul(ptr+1, &ptr, 0);
-    if (ptr) {
-	while (*ptr && isspace(*ptr))
-	    ptr++;
-	if (*ptr == ',') {
-	    ptr++;
-	} else if (*ptr)
-	    Die("Bad RGBA syntax, rL/rO,gL/gO,bL/bO,tL/tO or rL,gL,bL,tL\n");
-    }
-    *opt = ptr;
-    return;
-}
-
-void makeRGBA(struct VideoMode *vmode, const char* opt)
-{
-    getColor(&vmode->red, &opt);
-    getColor(&vmode->green, &opt);
-    getColor(&vmode->blue, &opt);
-    getColor(&vmode->transp, &opt);
-}
-
-    /*
-     *  Find a Video Mode
-     */
-
-static struct VideoMode *FindVideoMode(const char *name)
-{
-    struct VideoMode *vmode;
-
-    for (vmode = VideoModes; vmode; vmode = vmode->next)
-	if (!strcmp(name, vmode->name))
-	    break;
-
-    return vmode;
-}
-
-
-    /*
-     *  Modify a Video Mode
-     */
-
-static void ModifyVideoMode(struct VideoMode *vmode)
-{
-    u_int hstep = 8, vstep = 2;
-
-    if (Opt_xres)
-	vmode->xres = strtoul(Opt_xres, NULL, 0);
-    if (Opt_yres)
-	vmode->yres = strtoul(Opt_yres, NULL, 0);
-    if (Opt_vxres)
-	vmode->vxres = strtoul(Opt_vxres, NULL, 0);
-    if (Opt_vyres)
-	vmode->vyres = strtoul(Opt_vyres, NULL, 0);
-    if (Opt_depth)
-	vmode->depth = strtoul(Opt_depth, NULL, 0);
-    if (Opt_nonstd)
-	vmode->nonstd = strtoul(Opt_nonstd, NULL, 0);
-    if (Opt_accel)
-	vmode->accel_flags = atoboolean(Opt_accel) ? FB_ACCELF_TEXT : 0;
-    if (Opt_pixclock)
-	vmode->pixclock = strtoul(Opt_pixclock, NULL, 0);
-    if (Opt_left)
-	vmode->left = strtoul(Opt_left, NULL, 0);
-    if (Opt_right)
-	vmode->right = strtoul(Opt_right, NULL, 0);
-    if (Opt_upper)
-	vmode->upper = strtoul(Opt_upper, NULL, 0);
-    if (Opt_lower)
-	vmode->lower = strtoul(Opt_lower, NULL, 0);
-    if (Opt_hslen)
-	vmode->hslen = strtoul(Opt_hslen, NULL, 0);
-    if (Opt_vslen)
-	vmode->vslen = strtoul(Opt_vslen, NULL, 0);
-    if (Opt_hsync)
-	vmode->hsync = atoboolean(Opt_hsync);
-    if (Opt_vsync)
-	vmode->vsync = atoboolean(Opt_vsync);
-    if (Opt_csync)
-	vmode->csync = atoboolean(Opt_csync);
-    if (Opt_gsync)
-	vmode->gsync = atoboolean(Opt_gsync);
-    if (Opt_extsync)
-	vmode->extsync = atoboolean(Opt_extsync);
-    if (Opt_bcast)
-	vmode->bcast = atoboolean(Opt_bcast);
-    if (Opt_laced)
-	vmode->laced = atoboolean(Opt_laced);
-    if (Opt_double)
-	vmode->dblscan = atoboolean(Opt_double);
-    if (Opt_grayscale)
-	vmode->grayscale = atoboolean(Opt_grayscale);
-    if (Opt_step)
-	hstep = vstep = strtoul(Opt_step, NULL, 0);
-    if (Opt_matchyres)
-        vmode->vyres = vmode->yres;
-    if (Opt_move) {
-	if (!strcasecmp(Opt_move, "left")) {
-	    if (hstep > vmode->left)
-		Die("The left margin cannot be negative\n");
-	    vmode->left -= hstep;
-	    vmode->right += hstep;
-	} else if (!strcasecmp(Opt_move, "right")) {
-	    if (hstep > vmode->right)
-		Die("The right margin cannot be negative\n");
-	    vmode->left += hstep;
-	    vmode->right -= hstep;
-	} else if (!strcasecmp(Opt_move, "up")) {
-	    if (vstep > vmode->upper)
-		Die("The upper margin cannot be negative\n");
-	    vmode->upper -= vstep;
-	    vmode->lower += vstep;
-	} else if (!strcasecmp(Opt_move, "down")) {
-	    if (vstep > vmode->lower)
-		Die("The lower margin cannot be negative\n");
-	    vmode->upper += vstep;
-	    vmode->lower -= vstep;
-	} else
-	    Die("Invalid direction `%s'\n", Opt_move);
-    }
-    if (Opt_rgba) {
-	makeRGBA(vmode, Opt_rgba);
-    }
-    if (!FillScanRates(vmode))
-	Die("Bad video mode\n");
-}
-
-
-    /*
-     *  Display the Video Mode Information
-     */
-
-static void DisplayVModeInfo(struct VideoMode *vmode)
-{
-    u_int res, sstart, send, total;
-
-    puts("");
-    if (!Opt_xfree86) {
-	printf("mode \"%dx%d", vmode->xres, vmode->yres);
-	if (vmode->pixclock) {
-	    printf("-%d\"\n", (int)(vmode->vrate+0.5));
-	    printf("    # D: %5.3f MHz, H: %5.3f kHz, V: %5.3f Hz\n",
-		   vmode->drate/1E6, vmode->hrate/1E3, vmode->vrate);
-	} else
-	    puts("\"");
-	printf("    geometry %d %d %d %d %d\n", vmode->xres, vmode->yres,
-	       vmode->vxres, vmode->vyres, vmode->depth);
-	printf("    timings %d %d %d %d %d %d %d\n", vmode->pixclock,
-	       vmode->left, vmode->right, vmode->upper, vmode->lower,
-	       vmode->hslen, vmode->vslen);
-	if (vmode->hsync)
-	    puts("    hsync high");
-	if (vmode->vsync)
-	    puts("    vsync high");
-	if (vmode->csync)
-	    puts("    csync high");
-	if (vmode->gsync)
-	    puts("    gsync true");
-	if (vmode->extsync)
-	    puts("    extsync true");
-	if (vmode->bcast)
-	    puts("    bcast true");
-	if (vmode->laced)
-	    puts("    laced true");
-	if (vmode->dblscan)
-	    puts("    double true");
-	if (vmode->nonstd)
-            printf("    nonstd %u\n", vmode->nonstd);
-	if (vmode->accel_flags)
-	    puts("    accel true");
-	if (vmode->grayscale)
-	    puts("    grayscale true");
-	printf("    rgba %u/%u,%u/%u,%u/%u,%u/%u\n",
-	    vmode->red.length, vmode->red.offset, vmode->green.length,
-	    vmode->green.offset, vmode->blue.length, vmode->blue.offset,
-	    vmode->transp.length, vmode->transp.offset);
-	puts("endmode\n");
-    } else {
-	printf("Mode \"%dx%d\"\n", vmode->xres, vmode->yres);
-	if (vmode->pixclock) {
-	    printf("    # D: %5.3f MHz, H: %5.3f kHz, V: %5.3f Hz\n",
-		   vmode->drate/1E6, vmode->hrate/1E3, vmode->vrate);
-	    printf("    DotClock %5.3f\n", vmode->drate/1E6+0.001);
-	} else
-	    puts("    DotClock Unknown");
-	res = vmode->xres;
-	sstart = res+vmode->right;
-	send = sstart+vmode->hslen;
-	total = send+vmode->left;
-	printf("    HTimings %d %d %d %d\n", res, sstart, send, total);
-	res = vmode->yres;
-	sstart = res+vmode->lower;
-	send = sstart+vmode->vslen;
-	total = send+vmode->upper;
-	printf("    VTimings %d %d %d %d\n", res, sstart, send, total);
-	printf("    Flags   ");
-	if (vmode->laced)
-	    printf(" \"Interlace\"");
-	if (vmode->dblscan)
-	    printf(" \"DoubleScan\"");
-	if (vmode->hsync)
-	    printf(" \"+HSync\"");
-	else
-	    printf(" \"-HSync\"");
-	if (vmode->vsync)
-	    printf(" \"+VSync\"");
-	else
-	    printf(" \"-VSync\"");
-	if (vmode->csync)
-	    printf(" \"Composite\"");
-	if (vmode->extsync)
-	    puts("    # Warning: XFree86 doesn't support extsync\n");
-	if (vmode->bcast)
-	    printf(" \"bcast\"");
-	if (vmode->accel_flags)
-	    puts("    # Warning: XFree86 doesn't support accel\n");
-	if (vmode->grayscale)
-	    puts("    # Warning: XFree86 doesn't support grayscale\n");
-	puts("\nEndMode\n");
-    }
-}
-
-
-    /*
-     *  Display the Frame Buffer Device Information
-     */
-
-static void DisplayFBInfo(struct fb_fix_screeninfo *fix)
-{
-    int i;
-
-    puts("Frame buffer device information:");
-    printf("    Name        : %s\n", fix->id);
-    printf("    Address     : %p\n", fix->smem_start);
-    printf("    Size        : %d\n", fix->smem_len);
-    printf("    Type        : ");
-    switch (fix->type) {
-	case FB_TYPE_PACKED_PIXELS:
-	    puts("PACKED PIXELS");
-	    break;
-	case FB_TYPE_PLANES:
-	    puts("PLANES");
-	    break;
-	case FB_TYPE_INTERLEAVED_PLANES:
-	    printf("INTERLEAVED PLANES (%d bytes interleave)\n",
-		   fix->type_aux);
-	    break;
-	case FB_TYPE_TEXT:
-	    for (i = 0; i < sizeof(Textmodes)/sizeof(*Textmodes); i++)
-		if (fix->type_aux == Textmodes[i].id)
-		    break;
-	    if (i < sizeof(Textmodes)/sizeof(*Textmodes))
-		puts(Textmodes[i].name);
-	    else
-		printf("Unknown text (%d)\n", fix->type_aux);
-	    break;
-	case FB_TYPE_VGA_PLANES:
-	    {
-	    	struct textentry *t;
-		
-		for (t = VGAModes; t->name; t++)
-		    if (fix->type_aux == t->id)
-		    	break;
-		if (t->name)
-		    puts(t->name);
-		else
-	            printf("Unknown VGA mode (%d)\n", fix->type_aux);
-	    }
-	    break;
-	default:
-	    printf("%d (UNKNOWN)\n", fix->type);
-	    printf("    Type_aux    : %d\n", fix->type_aux);
-	    break;
-    }
-    printf("    Visual      : ");
-    switch (fix->visual) {
-	case FB_VISUAL_MONO01:
-	    puts("MONO01");
-	    break;
-	case FB_VISUAL_MONO10:
-	    puts("MONO10");
-	    break;
-	case FB_VISUAL_TRUECOLOR:
-	    puts("TRUECOLOR");
-	    break;
-	case FB_VISUAL_PSEUDOCOLOR:
-	    puts("PSEUDOCOLOR");
-	    break;
-	case FB_VISUAL_DIRECTCOLOR:
-	    puts("DIRECTCOLOR");
-	    break;
-	case FB_VISUAL_STATIC_PSEUDOCOLOR:
-	    puts("STATIC PSEUDOCOLOR");
-	    break;
-	default:
-	    printf("%d (UNKNOWN)\n", fix->visual);
-	    break;
-    }
-    printf("    XPanStep    : %d\n", fix->xpanstep);
-    printf("    YPanStep    : %d\n", fix->ypanstep);
-    printf("    YWrapStep   : %d\n", fix->ywrapstep);
-    printf("    LineLength  : %d\n", fix->line_length);
-    if (fix->mmio_len) {
-	printf("    MMIO Address: %p\n", fix->mmio_start);
-	printf("    MMIO Size   : %d\n", fix->mmio_len);
-    }
-    printf("    Accelerator : ");
-    for (i = 0; i < sizeof(Accelerators)/sizeof(*Accelerators); i++)
-	if (fix->accel == Accelerators[i].id)
-	    break;
-    if (i < sizeof(Accelerators)/sizeof(*Accelerators))
-	puts(Accelerators[i].name);
-    else
-	printf("Unknown (%d)\n", fix->accel);
-}
-
-
-    /*
-     *  Calculate the Scan Rates for a Video Mode
-     */
-
-static int FillScanRates(struct VideoMode *vmode)
-{
-    u_int htotal = vmode->left+vmode->xres+vmode->right+vmode->hslen;
-    u_int vtotal = vmode->upper+vmode->yres+vmode->lower+vmode->vslen;
-
-    if (vmode->dblscan)
-	vtotal <<= 2;
-    else if (!vmode->laced)
-	vtotal <<= 1;
-
-    if (!htotal || !vtotal)
-	return 0;
-
-    if (vmode->pixclock) {
-	vmode->drate = 1E12/vmode->pixclock;
-	vmode->hrate = vmode->drate/htotal;
-	vmode->vrate = vmode->hrate/vtotal*2;
-    } else {
-	vmode->drate = 0;
-	vmode->hrate = 0;
-	vmode->vrate = 0;
-    }
-
-    return 1;
-}
-
-
-    /*
-     *  Print the Usage Template and Exit
-     */
-
-static void Usage(void)
-{
-    puts(VERSION);
-    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"
-	"  Frame buffer special device nodes:\n"
-	"    -fb <device>       : processed frame buffer device\n"
-	"                         (default is " DEFAULT_FRAMEBUFFER ")\n"
-	"  Video mode database:\n"
-	"    -db <file>         : video mode database file\n"
-	"                         (default is " DEFAULT_MODEDBFILE ")\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"
-	"    -nonstd <value>    : select nonstandard video mode\n"
-	"    -g, --geometry ... : set all geometry parameters at once\n"
-	"    -match             : set virtual vertical resolution by virtual resolution\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"
-	"  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"
-	"    -rgba <r,g,b,a>    : recommended length of color entries\n"
-	"    -grayscale <value> : grayscale 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);
-}
-
-
-    /*
-     *  Main Routine
-     */
-
-int main(int argc, char *argv[])
-{
-    struct VideoMode *vmode;
-    struct fb_var_screeninfo var;
-    struct fb_fix_screeninfo fix;
-    int fh = -1, i;
-
-    ProgramName = argv[0];
-
-    /*
-     *  Parse the Options
-     */
-
-    while (--argc > 0) {
-	argv++;
-	if (!strcmp(argv[0], "-h") || !strcmp(argv[0], "--help"))
-	    Usage();
-	else if (!strcmp(argv[0], "-v") || !strcmp(argv[0], "--verbose"))
-	    Opt_verbose = 1;
-	else if (!strcmp(argv[0], "-V") || !strcmp(argv[0], "--version"))
-	    Opt_version = 1;
-	else if (!strcmp(argv[0], "--test"))
-	    Opt_test = 1;
-	else if (!strcmp(argv[0], "-s") || !strcmp(argv[0], "--show"))
-	    Opt_show = 1;
-	else if (!strcmp(argv[0], "-i") || !strcmp(argv[0], "--info")) {
-	    Opt_show = 1;
-	    Opt_info = 1;
-	} else if (!strcmp(argv[0], "-x") || !strcmp(argv[0], "--xfree86"))
-	    Opt_xfree86 = 1;
-	else if (!strcmp(argv[0], "-a") || !strcmp(argv[0], "--all"))
-	    Opt_all = 1;
-	else if (!strcmp(argv[0], "-g") || !strcmp(argv[0], "--geometry")) {
-	    if (argc > 5) {
-		Opt_xres = argv[1];
-		Opt_yres = argv[2];
-		Opt_vxres = argv[3];
-		Opt_vyres = argv[4];
-		Opt_depth = argv[5];
-		Opt_change = 1;
-		argc -= 5;
-		argv += 5;
-	    } else
-		Usage();
-	} else if (!strcmp(argv[0], "-t") || !strcmp(argv[0], "--timings")) {
-	    if (argc > 7) {
-		Opt_pixclock = argv[1];
-		Opt_left = argv[2];
-		Opt_right = argv[3];
-		Opt_upper = argv[4];
-		Opt_lower = argv[5];
-		Opt_hslen = argv[6];
-		Opt_vslen = argv[7];
-		Opt_change = 1;
-		argc -= 7;
-		argv += 7;
-	    } else
-		Usage();
-	} else if (!strcmp(argv[0], "-match")) {
-	    Opt_matchyres = argv[0];
-	    Opt_change = 1;
-	} else {
-	    for (i = 0; Options[i].name; i++)
-		if (!strcmp(argv[0], Options[i].name))
-		    break;
-	    if (Options[i].name) {
-		if (argc-- > 1) {
-		    *Options[i].value = argv[1];
-		    Opt_change |= Options[i].change;
-		    argv++;
-		} else
-		    Usage();
-	    } else if (!Opt_modename) {
-		Opt_modename = argv[0];
-		Opt_change = 1;
-	    } else
-		Usage();
-	}
-    }
-
-    if (Opt_version || Opt_verbose)
-	puts(VERSION);
-
-    if (!Opt_fb)
-	Opt_fb = DEFAULT_FRAMEBUFFER;
-
-    /*
-     *  Open the Frame Buffer Device
-     */
-
-    fh = OpenFrameBuffer(Opt_fb);
-
-    /*
-     *  Get the Video Mode
-     */
-
-    if (Opt_modename) {
-
-	/*
-	 *  Read the Video Mode Database
-	 */
-
-	ReadModeDB();
-
-	if (!(vmode = FindVideoMode(Opt_modename)))
-	    Die("Unknown video mode `%s'\n", Opt_modename);      
-
-	Current = *vmode;
-	if (Opt_verbose)
-	    printf("Using video mode `%s'\n", Opt_modename);
-    } else {
-	GetVarScreenInfo(fh, &var);
-	ConvertToVideoMode(&var, &Current);
-	if (Opt_verbose)
-	    printf("Using current video mode from `%s'\n", Opt_fb);
-    }
-
-    if (Opt_change) {
-
-	/*
-	 *  Optionally Modify the Video Mode
-	 */
-
-	ModifyVideoMode(&Current);
-
-	/*
-	 *  Set the Video Mode
-	 */
-
-	ConvertFromVideoMode(&Current, &var);
-	if (Opt_verbose)
-	    printf("Setting video mode to `%s'\n", Opt_fb);
-	SetVarScreenInfo(fh, &var);
-	ConvertToVideoMode(&var, &Current);
-    }
-
-    /*
-     *  Display some Video Mode Information
-     */
-
-    if (Opt_show || !Opt_change)
-	DisplayVModeInfo(&Current);
-
-    if (Opt_info) {
-	if (Opt_verbose)
-	    puts("Getting further frame buffer information");
-	GetFixScreenInfo(fh, &fix);
-	DisplayFBInfo(&fix);
-    }
-
-    /*
-     *  Close the Frame Buffer Device
-     */
-
-    CloseFrameBuffer(fh);
-
-    exit(0);
-}
--- a/TVout/fbset/fbset.h	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- *  Linux Frame Buffer Device Configuration
- *
- *  © Copyright 1995-1998 by Geert Uytterhoeven
- *			(Geert.Uytterhoeven@cs.kuleuven.ac.be)
- *
- *  --------------------------------------------------------------------------
- *
- *  This file is subject to the terms and conditions of the GNU General Public
- *  License. See the file COPYING in the main directory of the Linux
- *  distribution for more details.
- */
-
-
-#include <stdio.h>
-#include <sys/types.h>
-
-#ifdef __GLIBC__
-#include <asm/types.h>
-#endif
-
-#define VERSION         "Linux Frame Buffer Device Configuration " \
-			"Version 2.1 (23/06/1999)\n"  \
-			"(C) Copyright 1995-1999 by Geert Uytterhoeven\n"
-
-#define LOW		(0)
-#define HIGH		(1)
-
-#define FALSE		(0)
-#define TRUE		(1)
-
-struct color {
-    unsigned int length;
-    unsigned int offset;
-};
-
-struct VideoMode {
-    struct VideoMode *next;
-    const char *name;
-    /* geometry */
-    __u32 xres;
-    __u32 yres;
-    __u32 vxres;
-    __u32 vyres;
-    __u32 depth;
-    __u32 nonstd;
-    /* acceleration */
-    __u32 accel_flags;
-    /* timings */
-    __u32 pixclock;
-    __u32 left;
-    __u32 right;
-    __u32 upper;
-    __u32 lower;
-    __u32 hslen;
-    __u32 vslen;
-    /* flags */
-    unsigned hsync : 1;
-    unsigned vsync : 1;
-    unsigned csync : 1;
-    unsigned gsync : 1;
-    unsigned extsync : 1;
-    unsigned bcast : 1;
-    unsigned laced : 1;
-    unsigned dblscan : 1;
-    unsigned grayscale : 1;
-    /* scanrates */
-    double drate;
-    double hrate;
-    double vrate;
-    /* RGB entries */
-    struct color red, green, blue, transp;
-};
-
-extern FILE *yyin;
-extern int line;
-extern const char *Opt_modedb;
-
-extern int yyparse(void);
-extern void Die(const char *fmt, ...) __attribute__ ((noreturn));
-extern void AddVideoMode(const struct VideoMode *vmode);
-extern void makeRGBA(struct VideoMode *vmode, const char* opt);
--- a/TVout/fbset/modeline2fb	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-#!/usr/bin/perl
-
-# Simple modeline-to-fb.modes translator
-# (c) 1998 by Patrick Reynolds
-# distributed under the GNU General Public License
- 
-# mapping of modeline options to fb.modes options
-%options_map = (
-  "-hsync" => "hsync low",
-  "-vsync" => "vsync low",
-  "+hsync" => "hsync high",
-  "+vsync" => "vsync high",
-  "interlace" => "laced true",
-  "doublescan" => "double true"
-);
-
-@possible_vxres = ( 640, 800, 1024, 1152, 1280, 1600, 1920, 2048 );
-
-# default settings (override with -d and -r)
-$depth = 8;
-$rounding = 128;
-
-# parse options
-while ($ARGV[0] =~ /^-/) {
-  $arg = shift;
-  if ($arg eq "-d" || $arg eq "--depth") {
-    if (!($arg = shift @ARGV)) {
-      usage("-d requires an argument");
-    }
-    $depth = $arg;
-  }
-  elsif ($arg eq "-r" || $arg eq "--rounding") {
-    if (!($arg = shift @ARGV)) {
-      usage("-r requires an argument");
-    }
-    $rounding = $arg;
-  }
-  elsif ($arg eq "-x" || $arg eq "--vxres") {
-    if (!($arg = shift @ARGV)) {
-      usage("-x requires an argument");
-    }
-    push @possible_vxres, (split/,/,$arg);
-    @possible_vxres = sort { $a <=> $b } @possible_vxres;
-    print "new vxres: " . (join ",", @possible_vxres) . "\n";
-  }
-  elsif ($arg eq "-h" || $arg eq "--help") {
-    usage();
-  }
-  else {
-    usage("unknown option: $arg");
-  }
-}
-
-# find out how much video memory is available
-open(FBSET, "fbset -i|") || die "could not detect available video memory";
-while (<FBSET>) {
-  if (/Size\s*:\s*(\d+)/) {
-    $size = $1;
-    last;
-  }
-}
-if (!$size) { die "could not detect available video memory"; }
-
-# huge kludge (hey, that rhymes!) ...
-#   subtract 16384 from the available memory $size
-#   why?  the default 640x480 mode uses all but 16384, and when I set it
-#   to use more than that, it oopses (!).  So... for safety's sake, and
-#   because you probably don't use those 15-25 lines anyway...
-$size -= 16384;
-
-print "# modes.fb - video mode descriptions for fbset
-#
-# See fbset(8) and fb.modes(5) for more information
-
-";
-
-$flag = 0;
-# read all XF86Config files
-while(<>) {
-  chomp;
-  next if !(($name, $clock, $xres, $xsyncstart, $xsyncend, $xfres,
-                  $yres, $ysyncstart, $ysyncend, $yfres, $extra) =
-    /^\s*modeline\s+"([^"]+)"\s+([0-9.]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s*(.*)$/i);
-  $flag = 1;
-
-  # timing transformations, as described in the fb HOWTO
-  $pixtime = int(1000000/$clock);
-  $left = $xfres - $xsyncend;
-  $right = $xsyncstart - $xres;
-  $hsynclen = $xsyncend - $xsyncstart;
-  $top = $yfres - $ysyncend;
-  $bottom = $ysyncstart - $yres;
-  $vsynclen = $ysyncend - $ysyncstart;
-
-  # pick a virtual X and Y resolution
-  $vxres = get_vxres($xres);
-  if ($vxres < 0) {
-    print STDERR "Could not guess a good virtual resolution for mode $name.\n";
-    print STDERR "Use the advanced options --rounding and --vxres.\n";
-    next;
-  }
-  $vyres = int($size/$vxres);
-
-  # print out our entry
-  print "mode \"$name\"\n";
-  print "  geometry   $xres $yres   $vxres $vyres   $depth\n";
-  print "  timings    $pixtime   $left $right   $top $bottom   $hsynclen $vsynclen\n";
-
-  # handle extra options at the end of the modeline
-  $extra =~ tr/A-Z/a-z/;
-  @options = split/\s+/,$extra;
-  foreach (@options) {
-    if ($options_map{$_}) {
-      print "  $options_map{$_}\n";
-    }
-    else {
-      print "  # unknown option: $_\n";
-    }
-  }
-  print "endmode\n\n";
-}
-
-if (!$flag) {
-  print STDERR "No modelines found.\n";
-  print STDERR "Make sure the file you specified was an XF86Config file and\n";
-  print STDERR "used the single-line Modeline format.\n\n";
-  print STDERR "Use \"$0 --help\" for help.\n";
-}
-
-sub get_vxres {
-  foreach (@possible_vxres) {
-    return $_ if ($_ >= $_[0] && ($_ % $rounding) == 0);
-  }
-  return -1;
-}
-
-sub usage {
-  print STDERR "$_[0]\n" if ($_[0]);
-  print STDERR "$0 [OPTION] [FILES]\n\n";
-  print STDERR "  -d,--depth depth     use a certain display depth (default is 8)\n";
-  print STDERR "  -h,--help            what you see here\n\n";
-  print STDERR "Advanced options:\n";
-  print STDERR "  -r,--rounding div    vxres divisor (default is 128)\n";
-  print STDERR "  -x,--vxres X,X,X,... extra possible vxres values\n\n";
-  print STDERR "[FILES] refers to one or more XF86Config files.  Note that\n";
-  print STDERR "all modelines must be in single-line format.\n\n";
-  print STDERR "Example:\n";
-  print STDERR "  $0 -d 16 /etc/X11/XF86Config\n";
-  exit 0;
-}
--- a/TVout/fbset/modes.l	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-
-/*
- *  Linux Frame Buffer Device Configuration
- *
- *  © Copyright 1995-1998 by Geert Uytterhoeven
- *		       (Geert.Uytterhoeven@cs.kuleuven.ac.be)
- *
- *  --------------------------------------------------------------------------
- *
- *  This file is subject to the terms and conditions of the GNU General Public
- *  License. See the file COPYING in the main directory of the Linux
- *  distribution for more details.
- */
-
-
-%{
-
-#define YYSTYPE		long
-
-#include <string.h>
-#include <stdlib.h>
-
-#include "fbset.h"
-#include "modes.tab.h"
-
-struct keyword {
-    const char *name;
-    int token;
-    int value;
-};
-
-static struct keyword keywords[] = {
-    { "mode", MODE, 0 },
-    { "geometry", GEOMETRY, 0 },
-    { "timings", TIMINGS, 0 },
-    { "hsync", HSYNC, 0 },
-    { "vsync", VSYNC, 0 },
-    { "csync", CSYNC, 0 },
-    { "gsync", GSYNC, 0 },
-    { "extsync", EXTSYNC, 0 },
-    { "bcast", BCAST, 0 },
-    { "laced", LACED, 0 },
-    { "double", DOUBLE, 0 },
-    { "rgba", RGBA, 0 },
-    { "nonstd", NONSTD, 0 },
-    { "accel", ACCEL, 0 },
-    { "grayscale", GRAYSCALE, 0 },
-    { "endmode", ENDMODE, 0 },
-    { "low", POLARITY, LOW },
-    { "high", POLARITY, HIGH },
-    { "false", BOOLEAN, FALSE },
-    { "true", BOOLEAN, TRUE },
-    { "", -1, 0 }
-};
-
-int line = 1;
-
-
-void yyerror(const char *s)
-{
-    Die("%s:%d: %s\n", Opt_modedb, line, s);
-}
-
-
-int yywrap(void)
-{
-    return 1;
-}
-
-
-static int FindToken(const char *s)
-{
-    int i;
-
-    for (i = 0; keywords[i].token > 0; i++)
-	if (!strcasecmp(s, keywords[i].name)) {
-	    yylval = keywords[i].value;
-	    return keywords[i].token;
-	}
-    Die("%s:%d: Unknown keyword `%s'\n", Opt_modedb, line, s);
-}
-
-
-static const char *CopyString(const char *s)
-{
-    int len;
-    char *s2;
-
-    len = strlen(s)-2;
-    if (!(s2 = malloc(len+1)))
-	Die("No memory\n");
-    strncpy(s2, s+1, len);
-    s2[len] = '\0';
-    return s2;
-}
-
-
-%}
-
-keyword	[a-zA-Z][a-zA-Z0-9]*
-number	[0-9]*
-string	\"[^\"\n]*\"
-comment	\#([^\n]*)
-space	[ \t]+
-junk	.
-
-%%
-
-{keyword}   {
-		return FindToken(yytext);
-	    }
-
-{number}    {
-		yylval = strtoul(yytext, NULL, 0);
-		return NUMBER;
-	    }
-
-{string}    {
-		yylval = (unsigned long)CopyString(yytext);
-		return STRING;
-	    }
-
-{comment}$  break;
-
-{space}	    break;
-
-\n	    {
-		line++;
-		break;
-	    }
-
-{junk}	    {
-		Die("%s:%d: Invalid token `%s'\n", Opt_modedb, line, yytext);
-	    }
-
-%%
--- a/TVout/fbset/modes.y	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,175 +0,0 @@
-/*
- *  Linux Frame Buffer Device Configuration
- *
- *  © Copyright 1995-1998 by Geert Uytterhoeven
- *		       (Geert.Uytterhoeven@cs.kuleuven.ac.be)
- *
- *  --------------------------------------------------------------------------
- *
- *  This file is subject to the terms and conditions of the GNU General Public
- *  License. See the file COPYING in the main directory of the Linux
- *  distribution for more details.
- */
-
-
-%{
-
-#define YYSTYPE		long
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "fb.h"
-#include "fbset.h"
-
-extern int yylex(void);
-extern void yyerror(const char *s);
-extern int line;
-
-
-static struct VideoMode VideoMode;
-
-static void ClearVideoMode(void)
-{
-    memset(&VideoMode, 0, sizeof(VideoMode));
-    VideoMode.accel_flags = FB_ACCELF_TEXT;
-}
-
-%}
-
-%start file
-
-%token MODE GEOMETRY TIMINGS HSYNC VSYNC CSYNC GSYNC EXTSYNC BCAST LACED DOUBLE
-       RGBA NONSTD ACCEL GRAYSCALE
-       ENDMODE POLARITY BOOLEAN STRING NUMBER 
-
-%%
-
-file	  : vmodes
-	  ;
-
-
-vmodes	  : /* empty */
-	  | vmodes vmode
-	  ;
-
-vmode	  : MODE STRING geometry timings options ENDMODE
-	    {
-		VideoMode.name = (const char *)$2;
-		AddVideoMode(&VideoMode);
-		ClearVideoMode();
-	    }
-	  ;
-
-geometry  : GEOMETRY NUMBER NUMBER NUMBER NUMBER NUMBER
-	    {
-		ClearVideoMode();
-		VideoMode.xres = $2;
-		VideoMode.yres = $3;
-		VideoMode.vxres = $4;
-		VideoMode.vyres = $5;
-		VideoMode.depth = $6;
-	    }
-	  ;
-
-timings	  : TIMINGS NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER
-	    {
-		VideoMode.pixclock = $2;
-		VideoMode.left = $3;
-		VideoMode.right = $4;
-		VideoMode.upper = $5;
-		VideoMode.lower = $6;
-		VideoMode.hslen = $7;
-		VideoMode.vslen = $8;
-	    }
-	  ;
-
-options	  : /* empty */
-	  | options hsync
-	  | options vsync
-	  | options csync
-	  | options gsync
-	  | options extsync
-	  | options bcast
-	  | options laced
-	  | options double
-	  | options rgba
-	  | options nonstd
-	  | options accel
-	  | options grayscale
-	  ;
-
-hsync	  : HSYNC POLARITY
-	    {
-		VideoMode.hsync = $2;
-	    }
-	  ;
-
-vsync	  : VSYNC POLARITY
-	    {
-		VideoMode.vsync = $2;
-	    }
-	  ;
-
-csync	  : CSYNC POLARITY
-	    {
-		VideoMode.csync = $2;
-	    }
-	  ;
-
-gsync	  : GSYNC POLARITY
-	    {
-		VideoMode.gsync = $2;
-	    }
-	  ;
-
-extsync	  : EXTSYNC BOOLEAN
-	    {
-		VideoMode.extsync = $2;
-	    }
-	  ;
-
-bcast	  : BCAST BOOLEAN
-	    {
-		VideoMode.bcast = $2;
-	    }
-	  ;
-
-laced	  : LACED BOOLEAN
-	    {
-		VideoMode.laced = $2;
-	    }
-	  ;
-
-double	  : DOUBLE BOOLEAN
-	    {
-		VideoMode.dblscan = $2;
-	    }
-	  ;
-
-rgba      : RGBA STRING
-            {
-		makeRGBA(&VideoMode, (const char*)$2);
-	    }
-	  ;
-
-nonstd    : NONSTD NUMBER
-            {
-	    	VideoMode.nonstd = $2;
-	    }
-	  ;
-
-accel	  : ACCEL BOOLEAN
-	    {
-		VideoMode.accel_flags = $2;
-	    }
-	  ;
-
-grayscale : GRAYSCALE BOOLEAN
-	    {
-		VideoMode.grayscale = $2;
-	    }
-	  ;
-	  
-%%
--- a/TVout/independ	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-
-# SETUP TVout
-# Independent picture on TV and Monitor
-
-# CRTC1 -> TVout
-matroxset/matroxset -f /dev/fb0 -m 2
-
-# CRTC2 -> Monitor
-matroxset/matroxset -f /dev/fb1 -m 1
-
-# Enable TV
-matroxset/matroxset 1
-
-# move tty1-2 to CRTC2
-con2fb/con2fb /dev/fb1 /dev/tty1
-con2fb/con2fb /dev/fb1 /dev/tty2
--- a/TVout/matroxfbtune	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-#!/bin/sh
-# needs very much fixing
-
-#
-# 720x576, the upper left corner is right on my TV, but
-# it's too tall and wide
-#
-
-LEFT=54
-RIGHT=-36
-UPPER=55
-LOWER=-6
-XRES=720
-YRES=576
-
-while [ 1 ]; do
-
-clear
-
-echo q w	left
-echo a s	right
-echo e r	upper
-echo d f	lower
-echo t y	xres
-echo g h	yres
-echo z		reset
-echo x		save
-
-echo n		LEFT
-echo m		RIGHT
-echo o		TALLER	-BUG-
-echo k		SHORTER	-BUG-
-echo p		UP
-echo l		DOWN
-
-echo $LEFT $RIGHT
-echo $UPPER $LOWER
-echo $XRES $YRES
-echo
-fbset
-
-read ABC
-
-case "$ABC" in
-	q)
-	LEFT=$(($LEFT-2))
-	;;
-
-	w)
-	LEFT=$(($LEFT+2))
-	;;
-
-	a)
-	RIGHT=$(($RIGHT-2))
-	;;
-
-	s)
-	RIGHT=$(($RIGHT+2))
-	;;
-
-	e)
-	UPPER=$(($UPPER-2))
-	;;
-
-	r)
-	UPPER=$(($UPPER+2))
-	;;
-
-	d)
-	LOWER=$(($LOWER-2))
-	;;
-
-	f)
-	LOWER=$(($LOWER+2))
-	;;
-
-	t)
-	XRES=$(($XRES-2))
-	;;
-
-	y)
-	XRES=$(($XRES+2))
-	;;
-
-	g)
-	YRES=$(($YRES-2))
-	;;
-
-	h)
-	YRES=$(($YRES+2))
-	;;
-
-	n)
-	LEFT=$(($LEFT-2))
-	RIGHT=$(($RIGHT+2))
-	;;
-
-	m)
-	LEFT=$(($LEFT+2))
-	RIGHT=$(($RIGHT-2))
-	;;
-
-	o)
-	UPPER=$(($UPPER-2))
-	LOWER=$(($LOWER-2))
-	YRES=$(($YRES+4))
-	;;
-
-	k)
-	UPPER=$(($UPPER+2))
-	LOWER=$(($LOWER+2))
-	YRES=$(($YRES-4))
-	;;
-
-	p)
-	UPPER=$(($UPPER-2))
-	LOWER=$(($LOWER+2))
-	;;
-
-	l)
-	UPPER=$(($UPPER+2))
-	LOWER=$(($LOWER-2))
-	;;
-
-	z)
-LEFT=54
-RIGHT=-36
-UPPER=55
-LOWER=-6
-XRES=720
-YRES=576
-	;;
-
-	x)
-	echo "fbset -fb /dev/fb1 -left $LEFT -right $RIGHT -upper $UPPER -lower $LOWER -hslen 46 -vslen 4 -xres $XRES -yres $YRES -vxres 720 -vyres 576 -depth 32 -laced false -bcast true" > save
-	;;
-
-esac
-
-fbset -fb /dev/fb1 -left $LEFT -right $RIGHT -upper $UPPER -lower $LOWER -hslen 46 -vslen 4 -xres $XRES -yres $YRES -vxres 720 -vyres 576 -depth 32 -laced false -bcast true
-
-done
--- a/TVout/matroxset/.cvsignore	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-matroxset
--- a/TVout/matroxset/Makefile	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-CFLAGS = -O2 -W -Wall
-
-all: matroxset
-
-matrox:	matroxset.o
-
-matroxset.o:	matroxset.c
-
-clean:
-	-rm *.o matroxset
--- a/TVout/matroxset/fb.h	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,502 +0,0 @@
-#ifndef _LINUX_FB_H
-#define _LINUX_FB_H
-
-#include <linux/tty.h>
-#include <asm/types.h>
-
-/* Definitions of frame buffers						*/
-
-#define FB_MAJOR		29
-#define FB_MAX			32	/* sufficient for now */
-
-/* ioctls
-   0x46 is 'F'								*/
-#define FBIOGET_VSCREENINFO	0x4600
-#define FBIOPUT_VSCREENINFO	0x4601
-#define FBIOGET_FSCREENINFO	0x4602
-#define FBIOGETCMAP		0x4604
-#define FBIOPUTCMAP		0x4605
-#define FBIOPAN_DISPLAY		0x4606
-/* 0x4607-0x460B are defined below */
-/* #define FBIOGET_MONITORSPEC	0x460C */
-/* #define FBIOPUT_MONITORSPEC	0x460D */
-/* #define FBIOSWITCH_MONIBIT	0x460E */
-#define FBIOGET_CON2FBMAP	0x460F
-#define FBIOPUT_CON2FBMAP	0x4610
-#define FBIOBLANK		0x4611		/* arg: 0 or vesa level + 1 */
-#define FBIOGET_VBLANK		_IOR('F', 0x12, struct fb_vblank)
-
-/* next 2 lines are temporary solution, support in 2.5 will be different */
-#define FBIOGET_VT_VSCREENINFO	0x4680
-#define FBIOPUT_VT_VSCREENINFO	0x4681
-
-
-#define FB_TYPE_PACKED_PIXELS		0	/* Packed Pixels	*/
-#define FB_TYPE_PLANES			1	/* Non interleaved planes */
-#define FB_TYPE_INTERLEAVED_PLANES	2	/* Interleaved planes	*/
-#define FB_TYPE_TEXT			3	/* Text/attributes	*/
-#define FB_TYPE_VGA_PLANES		4	/* EGA/VGA planes	*/
-
-#define FB_AUX_TEXT_MDA		0	/* Monochrome text */
-#define FB_AUX_TEXT_CGA		1	/* CGA/EGA/VGA Color text */
-#define FB_AUX_TEXT_S3_MMIO	2	/* S3 MMIO fasttext */
-#define FB_AUX_TEXT_MGA_STEP16	3	/* MGA Millenium I: text, attr, 14 reserved bytes */
-#define FB_AUX_TEXT_MGA_STEP8	4	/* other MGAs:      text, attr,  6 reserved bytes */
-
-#define FB_AUX_VGA_PLANES_VGA4		0	/* 16 color planes (EGA/VGA) */
-#define FB_AUX_VGA_PLANES_CFB4		1	/* CFB4 in planes (VGA) */
-#define FB_AUX_VGA_PLANES_CFB8		2	/* CFB8 in planes (VGA) */
-
-#define FB_VISUAL_MONO01		0	/* Monochr. 1=Black 0=White */
-#define FB_VISUAL_MONO10		1	/* Monochr. 1=White 0=Black */
-#define FB_VISUAL_TRUECOLOR		2	/* True color	*/
-#define FB_VISUAL_PSEUDOCOLOR		3	/* Pseudo color (like atari) */
-#define FB_VISUAL_DIRECTCOLOR		4	/* Direct color */
-#define FB_VISUAL_STATIC_PSEUDOCOLOR	5	/* Pseudo color readonly */
-
-#define FB_ACCEL_NONE		0	/* no hardware accelerator	*/
-#define FB_ACCEL_ATARIBLITT	1	/* Atari Blitter		*/
-#define FB_ACCEL_AMIGABLITT	2	/* Amiga Blitter                */
-#define FB_ACCEL_S3_TRIO64	3	/* Cybervision64 (S3 Trio64)    */
-#define FB_ACCEL_NCR_77C32BLT	4	/* RetinaZ3 (NCR 77C32BLT)      */
-#define FB_ACCEL_S3_VIRGE	5	/* Cybervision64/3D (S3 ViRGE)	*/
-#define FB_ACCEL_ATI_MACH64GX	6	/* ATI Mach 64GX family		*/
-#define FB_ACCEL_DEC_TGA	7	/* DEC 21030 TGA		*/
-#define FB_ACCEL_ATI_MACH64CT	8	/* ATI Mach 64CT family		*/
-#define FB_ACCEL_ATI_MACH64VT	9	/* ATI Mach 64CT family VT class */
-#define FB_ACCEL_ATI_MACH64GT	10	/* ATI Mach 64CT family GT class */
-#define FB_ACCEL_SUN_CREATOR	11	/* Sun Creator/Creator3D	*/
-#define FB_ACCEL_SUN_CGSIX	12	/* Sun cg6			*/
-#define FB_ACCEL_SUN_LEO	13	/* Sun leo/zx			*/
-#define FB_ACCEL_IMS_TWINTURBO	14	/* IMS Twin Turbo		*/
-#define FB_ACCEL_3DLABS_PERMEDIA2 15	/* 3Dlabs Permedia 2		*/
-#define FB_ACCEL_MATROX_MGA2064W 16	/* Matrox MGA2064W (Millenium)	*/
-#define FB_ACCEL_MATROX_MGA1064SG 17	/* Matrox MGA1064SG (Mystique)	*/
-#define FB_ACCEL_MATROX_MGA2164W 18	/* Matrox MGA2164W (Millenium II) */
-#define FB_ACCEL_MATROX_MGA2164W_AGP 19	/* Matrox MGA2164W (Millenium II) */
-#define FB_ACCEL_MATROX_MGAG100	20	/* Matrox G100 (Productiva G100) */
-#define FB_ACCEL_MATROX_MGAG200	21	/* Matrox G200 (Myst, Mill, ...) */
-#define FB_ACCEL_SUN_CG14	22	/* Sun cgfourteen		 */
-#define FB_ACCEL_SUN_BWTWO	23	/* Sun bwtwo			*/
-#define FB_ACCEL_SUN_CGTHREE	24	/* Sun cgthree			*/
-#define FB_ACCEL_SUN_TCX	25	/* Sun tcx			*/
-#define FB_ACCEL_MATROX_MGAG400	26	/* Matrox G400			*/
-#define FB_ACCEL_NV3		27	/* nVidia RIVA 128              */
-#define FB_ACCEL_NV4		28	/* nVidia RIVA TNT		*/
-#define FB_ACCEL_NV5		29	/* nVidia RIVA TNT2		*/
-#define FB_ACCEL_CT_6555x	30	/* C&T 6555x			*/
-#define FB_ACCEL_3DFX_BANSHEE	31	/* 3Dfx Banshee			*/
-#define FB_ACCEL_ATI_RAGE128	32	/* ATI Rage128 family		*/
-
-struct fb_fix_screeninfo {
-	char id[16];			/* identification string eg "TT Builtin" */
-	unsigned long smem_start;	/* Start of frame buffer mem */
-					/* (physical address) */
-	__u32 smem_len;			/* Length of frame buffer mem */
-	__u32 type;			/* see FB_TYPE_*		*/
-	__u32 type_aux;			/* Interleave for interleaved Planes */
-	__u32 visual;			/* see FB_VISUAL_*		*/ 
-	__u16 xpanstep;			/* zero if no hardware panning  */
-	__u16 ypanstep;			/* zero if no hardware panning  */
-	__u16 ywrapstep;		/* zero if no hardware ywrap    */
-	__u32 line_length;		/* length of a line in bytes    */
-	unsigned long mmio_start;	/* Start of Memory Mapped I/O   */
-					/* (physical address) */
-	__u32 mmio_len;			/* Length of Memory Mapped I/O  */
-	__u32 accel;			/* Type of acceleration available */
-	__u16 reserved[3];		/* Reserved for future compatibility */
-};
-
-/* Interpretation of offset for color fields: All offsets are from the right,
- * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
- * can use the offset as right argument to <<). A pixel afterwards is a bit
- * stream and is written to video memory as that unmodified. This implies
- * big-endian byte order if bits_per_pixel is greater than 8.
- */
-struct fb_bitfield {
-	__u32 offset;			/* beginning of bitfield	*/
-	__u32 length;			/* length of bitfield		*/
-	__u32 msb_right;		/* != 0 : Most significant bit is */ 
-					/* right */ 
-};
-
-#define FB_NONSTD_HAM		1	/* Hold-And-Modify (HAM)        */
-
-#define FB_ACTIVATE_NOW		0	/* set values immediately (or vbl)*/
-#define FB_ACTIVATE_NXTOPEN	1	/* activate on next open	*/
-#define FB_ACTIVATE_TEST	2	/* don't set, round up impossible */
-#define FB_ACTIVATE_MASK       15
-					/* values			*/
-#define FB_ACTIVATE_VBL	       16	/* activate values on next vbl  */
-#define FB_CHANGE_CMAP_VBL     32	/* change colormap on vbl	*/
-#define FB_ACTIVATE_ALL	       64	/* change all VCs on this fb	*/
-
-#define FB_ACCELF_TEXT		1	/* text mode acceleration */
-
-#define FB_SYNC_HOR_HIGH_ACT	1	/* horizontal sync high active	*/
-#define FB_SYNC_VERT_HIGH_ACT	2	/* vertical sync high active	*/
-#define FB_SYNC_EXT		4	/* external sync		*/
-#define FB_SYNC_COMP_HIGH_ACT	8	/* composite sync high active   */
-#define FB_SYNC_BROADCAST	16	/* broadcast video timings      */
-					/* vtotal = 144d/288n/576i => PAL  */
-					/* vtotal = 121d/242n/484i => NTSC */
-#define FB_SYNC_ON_GREEN	32	/* sync on green */
-
-#define FB_VMODE_NONINTERLACED  0	/* non interlaced */
-#define FB_VMODE_INTERLACED	1	/* interlaced	*/
-#define FB_VMODE_DOUBLE		2	/* double scan */
-#define FB_VMODE_MASK		255
-
-#define FB_VMODE_YWRAP		256	/* ywrap instead of panning     */
-#define FB_VMODE_SMOOTH_XPAN	512	/* smooth xpan possible (internally used) */
-#define FB_VMODE_CONUPDATE	512	/* don't update x/yoffset	*/
-
-struct fb_var_screeninfo {
-	__u32 xres;			/* visible resolution		*/
-	__u32 yres;
-	__u32 xres_virtual;		/* virtual resolution		*/
-	__u32 yres_virtual;
-	__u32 xoffset;			/* offset from virtual to visible */
-	__u32 yoffset;			/* resolution			*/
-
-	__u32 bits_per_pixel;		/* guess what			*/
-	__u32 grayscale;		/* != 0 Graylevels instead of colors */
-
-	struct fb_bitfield red;		/* bitfield in fb mem if true color, */
-	struct fb_bitfield green;	/* else only length is significant */
-	struct fb_bitfield blue;
-	struct fb_bitfield transp;	/* transparency			*/	
-
-	__u32 nonstd;			/* != 0 Non standard pixel format */
-
-	__u32 activate;			/* see FB_ACTIVATE_*		*/
-
-	__u32 height;			/* height of picture in mm    */
-	__u32 width;			/* width of picture in mm     */
-
-	__u32 accel_flags;		/* acceleration flags (hints)	*/
-
-	/* Timing: All values in pixclocks, except pixclock (of course) */
-	__u32 pixclock;			/* pixel clock in ps (pico seconds) */
-	__u32 left_margin;		/* time from sync to picture	*/
-	__u32 right_margin;		/* time from picture to sync	*/
-	__u32 upper_margin;		/* time from sync to picture	*/
-	__u32 lower_margin;
-	__u32 hsync_len;		/* length of horizontal sync	*/
-	__u32 vsync_len;		/* length of vertical sync	*/
-	__u32 sync;			/* see FB_SYNC_*		*/
-	__u32 vmode;			/* see FB_VMODE_*		*/
-	__u32 reserved[6];		/* Reserved for future compatibility */
-};
-
-struct fb_cmap {
-	__u32 start;			/* First entry	*/
-	__u32 len;			/* Number of entries */
-	__u16 *red;			/* Red values	*/
-	__u16 *green;
-	__u16 *blue;
-	__u16 *transp;			/* transparency, can be NULL */
-};
-
-struct fb_con2fbmap {
-	__u32 console;
-	__u32 framebuffer;
-};
-
-/* VESA Blanking Levels */
-#define VESA_NO_BLANKING        0
-#define VESA_VSYNC_SUSPEND      1
-#define VESA_HSYNC_SUSPEND      2
-#define VESA_POWERDOWN          3
-
-struct fb_monspecs {
-	__u32 hfmin;			/* hfreq lower limit (Hz) */
-	__u32 hfmax; 			/* hfreq upper limit (Hz) */
-	__u16 vfmin;			/* vfreq lower limit (Hz) */
-	__u16 vfmax;			/* vfreq upper limit (Hz) */
-	unsigned dpms : 1;		/* supports DPMS */
-};
-
-/* next structure is only 2.2 temporary hack, 2.3 solution will be different */
-struct fb_vt_info {
-	__u32 console;
-	struct fb_var_screeninfo *info;
-};
-
-#define FB_VBLANK_VBLANKING     1       /* currently in a vertical blank */
-#define FB_VBLANK_HBLANKING     2       /* currently in a horizontal blank */
-#define FB_VBLANK_HAVE_VBLANK   4       /* vertical blanks can be detected */
-#define FB_VBLANK_HAVE_HBLANK   8       /* horizontal blanks can be detected */
-#define FB_VBLANK_HAVE_COUNT    16      /* global retrace counter is available */
-#define FB_VBLANK_HAVE_VCOUNT   32      /* the vcount field is valid */
-#define FB_VBLANK_HAVE_HCOUNT   64      /* the hcount field is valid */
-
-struct fb_vblank {
-	__u32 flags;                    /* FB_VBLANK flags */
-	__u32 count;                    /* counter of retraces since boot */
-	__s32 vcount;                   /* current scanline position */
-	__s32 hcount;                   /* current scandot position */
-	__u32 reserved[4];              /* reserved for future compatibility */
-};
-
-#ifdef __KERNEL__
-
-#if 1 /* to go away in 2.4.0 */
-extern int GET_FB_IDX(kdev_t rdev);
-#else
-#define GET_FB_IDX(node)	(MINOR(node))
-#endif
-
-#include <linux/fs.h>
-#include <linux/init.h>
-
-
-struct fb_info;
-struct fb_info_gen;
-struct vm_area_struct;
-struct file;
-
-    /*
-     *  Frame buffer operations
-     */
-
-struct fb_ops {
-    /* open/release and usage marking */
-    int (*fb_open)(struct fb_info *info, int user);
-    int (*fb_release)(struct fb_info *info, int user);
-    /* get non settable parameters */
-    int (*fb_get_fix)(struct fb_fix_screeninfo *fix, int con,
-		      struct fb_info *info); 
-    /* get settable parameters */
-    int (*fb_get_var)(struct fb_var_screeninfo *var, int con,
-		      struct fb_info *info);		
-    /* set settable parameters */
-    int (*fb_set_var)(struct fb_var_screeninfo *var, int con,
-		      struct fb_info *info);		
-    /* get colormap */
-    int (*fb_get_cmap)(struct fb_cmap *cmap, int kspc, int con,
-		       struct fb_info *info);
-    /* set colormap */
-    int (*fb_set_cmap)(struct fb_cmap *cmap, int kspc, int con,
-		       struct fb_info *info);
-    /* pan display */
-    int (*fb_pan_display)(struct fb_var_screeninfo *var, int con,
-			  struct fb_info *info);
-    /* perform fb specific ioctl */
-    int (*fb_ioctl)(struct inode *inode, struct file *file, unsigned int cmd,
-		    unsigned long arg, int con, struct fb_info *info);
-    /* perform fb specific mmap */
-    int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma);
-    /* switch to/from raster image mode */
-    int (*fb_rasterimg)(struct fb_info *info, int start);
-};
-
-struct fb_info {
-   char modename[40];			/* default video mode */
-   kdev_t node;
-   int flags;
-   int open;                            /* Has this been open already ? */
-#define FBINFO_FLAG_MODULE	1	/* Low-level driver is a module */
-   struct fb_fix_screeninfo fix;        /* Current fix */
-   struct fb_monspecs monspecs;         /* Current Monitor specs */
-   struct fb_ops *fbops;
-   char *screen_base;                   /* Virtual address */
-   struct display *disp;		/* initial display variable */
-   struct display *currcon;
-   struct vc_data *display_fg;		/* Console visible on this display */
-   char fontname[40];			/* default font name */
-   int (*changevar)(int);		/* tell console var has changed */
-   int (*switch_con)(int, struct fb_info*);
-					/* tell fb to switch consoles */
-   int (*updatevar)(int, struct fb_info*);
-					/* tell fb to update the vars */
-   void (*blank)(int, struct fb_info*);	/* tell fb to (un)blank the screen */
-					/* arg = 0: unblank */
-					/* arg > 0: VESA level (arg-1) */
-   void *pseudo_palette;                /* Fake palette of 16 colors and 
-					   the cursor's color for non
-                                           palette mode */
-   /* From here on everything is device dependent */
-   void *par;	
-};
-
-#ifdef MODULE
-#define FBINFO_FLAG_DEFAULT	FBINFO_FLAG_MODULE
-#else
-#define FBINFO_FLAG_DEFAULT	0
-#endif
-
-    /*
-     *  This structure abstracts from the underlying hardware. It is not
-     *  mandatory but used by the `generic' frame buffer operations.
-     *  Read drivers/video/skeletonfb.c for more information.
-     */
-
-struct fbgen_hwswitch {
-    void (*detect)(void);
-    int (*encode_fix)(struct fb_fix_screeninfo *fix, const void *par,
-		      struct fb_info_gen *info);
-    int (*decode_var)(const struct fb_var_screeninfo *var, void *par,
-		      struct fb_info_gen *info);
-    int (*encode_var)(struct fb_var_screeninfo *var, const void *par,
-		      struct fb_info_gen *info);
-    void (*get_par)(void *par, struct fb_info_gen *info);
-    void (*set_par)(const void *par, struct fb_info_gen *info);
-    int (*getcolreg)(unsigned regno, unsigned *red, unsigned *green,
-		     unsigned *blue, unsigned *transp, struct fb_info *info);
-    int (*setcolreg)(unsigned regno, unsigned red, unsigned green,
-		     unsigned blue, unsigned transp, struct fb_info *info);
-    int (*pan_display)(const struct fb_var_screeninfo *var,
-		       struct fb_info_gen *info);
-    int (*blank)(int blank_mode, struct fb_info_gen *info);
-    void (*set_disp)(const void *par, struct display *disp,
-		     struct fb_info_gen *info);
-};
-
-struct fb_info_gen {
-    struct fb_info info;
-
-    /* Entries for a generic frame buffer device */
-    /* Yes, this starts looking like C++ */
-    u_int parsize;
-    struct fbgen_hwswitch *fbhw;
-
-   /* From here on everything is device dependent */
-};
-
-    /*
-     *  `Generic' versions of the frame buffer device operations
-     */
-
-extern int fbgen_get_fix(struct fb_fix_screeninfo *fix, int con,
-			 struct fb_info *info);
-extern int fbgen_get_var(struct fb_var_screeninfo *var, int con,
-			 struct fb_info *info);
-extern int fbgen_set_var(struct fb_var_screeninfo *var, int con,
-			 struct fb_info *info);
-extern int fbgen_get_cmap(struct fb_cmap *cmap, int kspc, int con,
-			  struct fb_info *info);
-extern int fbgen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
-			  struct fb_info *info);
-extern int fbgen_pan_display(struct fb_var_screeninfo *var, int con,
-			     struct fb_info *info);
-extern int fbgen_ioctl(struct inode *inode, struct file *file,
-		       unsigned int cmd, unsigned long arg, int con,
-		       struct fb_info *info);
-
-    /*
-     *  Helper functions
-     */
-
-extern int fbgen_do_set_var(struct fb_var_screeninfo *var, int isactive,
-			    struct fb_info_gen *info);
-extern void fbgen_set_disp(int con, struct fb_info_gen *info);
-extern void fbgen_install_cmap(int con, struct fb_info_gen *info);
-extern int fbgen_update_var(int con, struct fb_info *info);
-extern int fbgen_switch(int con, struct fb_info *info);
-extern void fbgen_blank(int blank, struct fb_info *info);
-
-
-/* drivers/video/fbmem.c */
-extern int register_framebuffer(struct fb_info *fb_info);
-extern int unregister_framebuffer(const struct fb_info *fb_info);
-
-extern int num_registered_fb;
-extern struct fb_info *registered_fb[FB_MAX];
-
-/* drivers/video/fbmon.c */
-extern int fbmon_valid_timings(u_int pixclock, u_int htotal, u_int vtotal,
-			       const struct fb_info *fb_info);
-extern int fbmon_dpms(const struct fb_info *fb_info);
-
-/* drivers/video/fbcmap.c */
-extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp);
-extern void fb_copy_cmap(struct fb_cmap *from, struct fb_cmap *to,
-			 int fsfromto);
-extern int fb_get_cmap(struct fb_cmap *cmap, int kspc,
-		       int (*getcolreg)(u_int, u_int *, u_int *, u_int *,
-					u_int *, struct fb_info *),
-		       struct fb_info *fb_info);
-extern int fb_set_cmap(struct fb_cmap *cmap, int kspc,
-		       int (*setcolreg)(u_int, u_int, u_int, u_int, u_int,
-					struct fb_info *),
-		       struct fb_info *fb_info);
-extern struct fb_cmap *fb_default_cmap(int len);
-extern void fb_invert_cmaps(void);
-
-struct fb_videomode {
-    const char *name;	/* optional */
-    u32 refresh;	/* optional */
-    u32 xres;
-    u32 yres;
-    u32 pixclock;
-    u32 left_margin;
-    u32 right_margin;
-    u32 upper_margin;
-    u32 lower_margin;
-    u32 hsync_len;
-    u32 vsync_len;
-    u32 sync;
-    u32 vmode;
-};
-
-extern int __init fb_find_mode(struct fb_var_screeninfo *var,
-			       struct fb_info *info, const char *mode_option,
-			       const struct fb_videomode *db,
-			       unsigned int dbsize,
-			       const struct fb_videomode *default_mode,
-			       unsigned int default_bpp);
-
-#endif /* __KERNEL__ */
-
-#if 1
-
-#define FBCMD_GET_CURRENTPAR	0xDEAD0005
-#define FBCMD_SET_CURRENTPAR	0xDEAD8005
-
-#endif
-
-
-#if 1 /* Preliminary */
-
-   /*
-    *    Hardware Cursor
-    */
-
-#define FBIOGET_FCURSORINFO     0x4607
-#define FBIOGET_VCURSORINFO     0x4608
-#define FBIOPUT_VCURSORINFO     0x4609
-#define FBIOGET_CURSORSTATE     0x460A
-#define FBIOPUT_CURSORSTATE     0x460B
-
-
-struct fb_fix_cursorinfo {
-	__u16 crsr_width;		/* width and height of the cursor in */
-	__u16 crsr_height;		/* pixels (zero if no cursor)	*/
-	__u16 crsr_xsize;		/* cursor size in display pixels */
-	__u16 crsr_ysize;
-	__u16 crsr_color1;		/* colormap entry for cursor color1 */
-	__u16 crsr_color2;		/* colormap entry for cursor color2 */
-};
-
-struct fb_var_cursorinfo {
-	__u16 width;
-	__u16 height;
-	__u16 xspot;
-	__u16 yspot;
-	__u8 data[1];			/* field with [height][width]        */
-};
-
-struct fb_cursorstate {
-	__s16 xoffset;
-	__s16 yoffset;
-	__u16 mode;
-};
-
-#define FB_CURSOR_OFF		0
-#define FB_CURSOR_ON		1
-#define FB_CURSOR_FLASH		2
-
-#endif /* Preliminary */
-
-#endif /* _LINUX_FB_H */
--- a/TVout/matroxset/matroxfb.h	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-#ifndef __LINUX_MATROXFB_H__
-#define __LINUX_MATROXFB_H__
-
-#include <asm/ioctl.h>
-#include <asm/types.h>
-
-struct matroxioc_output_mode {
-	__u32	output;		/* which output */
-#define MATROXFB_OUTPUT_PRIMARY		0x0000
-#define MATROXFB_OUTPUT_SECONDARY	0x0001
-	__u32	mode;		/* which mode */
-#define MATROXFB_OUTPUT_MODE_PAL	0x0001
-#define MATROXFB_OUTPUT_MODE_NTSC	0x0002
-#define MATROXFB_OUTPUT_MODE_MONITOR	0x0080
-};
-#define MATROXFB_SET_OUTPUT_MODE	_IOW('n',0xFA,sizeof(struct matroxioc_output_mode))
-#define MATROXFB_GET_OUTPUT_MODE	_IOWR('n',0xFA,sizeof(struct matroxioc_output_mode))
-
-/* bitfield */
-#define MATROXFB_OUTPUT_CONN_PRIMARY	(1 << MATROXFB_OUTPUT_PRIMARY)
-#define MATROXFB_OUTPUT_CONN_SECONDARY	(1 << MATROXFB_OUTPUT_SECONDARY)
-/* connect these outputs to this framebuffer */
-#define MATROXFB_SET_OUTPUT_CONNECTION	_IOW('n',0xF8,sizeof(__u32))
-/* which outputs are connected to this framebuffer */
-#define MATROXFB_GET_OUTPUT_CONNECTION	_IOR('n',0xF8,sizeof(__u32))
-/* which outputs are available for this framebuffer */
-#define MATROXFB_GET_AVAILABLE_OUTPUTS	_IOR('n',0xF9,sizeof(__u32))
-/* which outputs exist on this framebuffer */
-#define MATROXFB_GET_ALL_OUTPUTS	_IOR('n',0xFB,sizeof(__u32))
-
-#endif
-
--- a/TVout/matroxset/matroxset.c	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-#include <stdio.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include "fb.h"
-#include "matroxfb.h"
-
-static int help(void) {
-	fprintf(stderr, "usage: matroxset [-f fbdev] [-o output] [-m] [value]\n"
-	                "\n"
-	                "where -f fbdev  is fbdev device (default /dev/fb1)\n"
-	                "      -o output is output number to investigate (0=primary, 1=secondary=default)\n"
-	                "      -m        says that CRTC->output mapping should be changed/retrieved\n"
-			"      -p        print information about blanking\n"
-	                "      value     if present, value is set, if missing, value is retrieved\n"
-			"\n"
-			"For output mode, 128 means monitor, 1 = PAL TV, 2 = NTSC TV\n");
-	return 98;
-}
-
-int main(int argc, char* argv[]) {
-	char* fb = "/dev/fb1";
-	int fd;
-	struct matroxioc_output_mode mom;
-	struct fb_vblank vbl;
-	int rtn;
-	int output = MATROXFB_OUTPUT_SECONDARY;
-	int o_present = 0;
-	int m_present = 0;
-	int p_present = 0;
-	int act;
-	u_int32_t conns;
-	
-	while ((rtn = getopt(argc, argv, "o:f:mhp")) != -1) {
-		switch (rtn) {
-			case 'o':
-				output = strtoul(optarg, NULL, 0);
-				o_present = 1;
-				break;
-			case 'm':
-				m_present = 1;
-				break;
-			case 'f':
-				fb = optarg;
-				break;
-			case 'p':
-				p_present = 1;
-				break;
-			case 'h':
-				return help();
-			default:
-				fprintf(stderr, "Bad commandline\n");
-				return 99;
-		}
-	}
-	act = 0;
-	if (p_present) {
-		if (m_present || o_present) {
-			fprintf(stderr, "You cannot use -p together with -m or -o\n");
-			return 95;
-		}
-		act = 4;
-	} else if (optind >= argc) {
-		if (m_present) {
-			if (o_present) {
-				fprintf(stderr, "You cannot use -m and -o together\n");
-				return 96;
-			}
-			act = 2;
-		} else {
-			mom.output = output;
-			mom.mode = 0;
-		}
-	} else {
-		if (m_present) {
-			conns = strtoul(argv[optind], NULL, 0);
-			act = 3;
-		} else {
-			mom.output = output;
-			mom.mode = strtoul(argv[optind], NULL, 0);
-			act = 1;
-		}
-	}
-	fd = open(fb, O_RDWR);
-	if (fd == -1) {
-		fprintf(stderr, "Cannot open %s: %s\n", fb, strerror(errno));
-		return 122;
-	}
-	switch (act) {
-		case 0:
-			rtn = ioctl(fd, MATROXFB_GET_OUTPUT_MODE, &mom);
-			if (rtn)
-				break;
-			printf("Output mode is %u\n", mom.mode);
-			break;
-		case 1:
-			rtn = ioctl(fd, MATROXFB_SET_OUTPUT_MODE, &mom);
-			break;
-		case 2:
-			rtn = ioctl(fd, MATROXFB_GET_OUTPUT_CONNECTION, &conns);
-			if (rtn)
-				break;
-			printf("This framebuffer is connected to outputs %08X\n", conns);
-			break;
-		case 3:
-			rtn = ioctl(fd, MATROXFB_SET_OUTPUT_CONNECTION, &conns);
-			break;
-		case 4:
-#if 0
-			{ int i; for (i = 0; i < 1000000; i++) {
-			rtn = ioctl(fd, FBIOGET_VBLANK, &vbl);
-			if (rtn)
-				break;
-			}}
-#else
-			rtn = ioctl(fd, FBIOGET_VBLANK, &vbl);
-			if (rtn)
-				break;
-#endif
-			printf("VBlank flags:          %08X\n", vbl.flags);
-			printf("  Symbolic: ");
-			{
-				static const struct { u_int32_t mask; const char* msg; } *ptr, vals[] = {
-					{ FB_VBLANK_HAVE_VBLANK, "vblank" },
-					{ FB_VBLANK_HAVE_HBLANK, "hblank" },
-					{ FB_VBLANK_HAVE_COUNT, "field no." },
-					{ FB_VBLANK_HAVE_VCOUNT, "line no." },
-					{ FB_VBLANK_HAVE_HCOUNT, "column no." },
-					{ FB_VBLANK_VBLANKING, "vblanking" },
-					{ FB_VBLANK_HBLANKING, "hblanking" },
-					{ 0, NULL }};
-				int ap = 0;
-				for (ptr = vals; ptr->msg; ptr++) {
-					if (vbl.flags & ptr->mask) {
-						if (ap) printf(", ");
-						printf(ptr->msg);
-						ap = 1;
-					}
-				}
-				if (!ap)
-					printf("none");
-				printf("\n");
-			}
-			printf("Field count:       %12u\n", vbl.count);
-			printf("Vertical line:     %12u\n", vbl.vcount);
-			printf("Horizontal column: %12u\n", vbl.hcount);
-			break;
-		default:
-			rtn = -1; errno = EINVAL;
-			break;
-	}
-	if (rtn) {
-		fprintf(stderr, "ioctl failed: %s\n", strerror(errno));
-	}
-	close(fd);
-	return 0;
-}
-	
--- a/TVout/matroxset/normal	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-#! /bin/sh
-
-if [ -c /dev/fb0 ]; then
-  HEAD0=/dev/fb0
-  HEAD1=/dev/fb1
-else
-  HEAD0=/dev/fb/0
-  HEAD1=/dev/fb/1
-fi
-matroxset -f ${HEAD1} -m 0
-matroxset -f ${HEAD0} -m 1
-matroxset -f ${HEAD1} -m 2
--- a/TVout/matroxset/swapit	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#! /bin/sh
-~/mga/con2fb /dev/fb0 /dev/tty4
-rmmod matroxfb_maven
-modprobe matroxfb_maven
-~/mga/con2fb /dev/fb1 /dev/tty4
--- a/TVout/matroxset/swapped	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-#! /bin/sh
-
-if [ -c /dev/fb0 ]; then
-  HEAD0=/dev/fb0
-  HEAD1=/dev/fb1
-else
-  HEAD0=/dev/fb/0
-  HEAD1=/dev/fb/1
-fi
-matroxset -f ${HEAD1} -m 0
-matroxset -f ${HEAD0} -m 2
-matroxset -f ${HEAD1} -m 1
--- a/TVout/matroxtv	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,314 +0,0 @@
-#!/bin/sh
-#
-# Gabucino - no warranty, this script can BOOM your TV and/or monitor, or else.
-# v3.0
-# This script has been tested and configured on a Matrox G400DH, a PAL TV,
-# a 14" analog and a 15" digital monitor.
-#
-# INSTALLATION:
-#	1. READ MPLAYER'S TVOUT DOCUMENTATION!
-#	2. Choose proper mode at 'defaultmode', 'TVdefaultmode',
-#	   and 'SetTVstandard' functions to fit your needs.
-#	   You normally shouldn't touch anything else.
-#	3. Remove 'exit 1' safety check.
-#
-
-function defaultmode {
-	# You can choose the mode to use in monitor-only mode
-	# 640x480 60Hz 32bpp	(14" monitors)
-	fbset -a -xres 640 -yres 480 -vxres 640 -vyres 480 -depth 32 -pixclock 39721 -left 48 -right 16 -upper 33 -lower 10 -hslen 96 -vslen 2 -hsync high -accel true -laced false
-	# 768x576 60Hz 32bpp	(14" monitors)
-	# fbset -a -xres 768 -yres 576 -vxres 768 -vyres 5460 -depth 32 -pixclock 26101 -left 144 -right 16 -upper 28 -lower 6 -hslen 112 -vslen 4 -accel true -laced false
-	# 800x600 76Hz 32bpp	(15" monitors)
-	# fbset -a -xres 800 -yres 600 -vxres 800 -vyres 1440 -depth 32 -pixclock 20000 -left 128 -right 16 -upper 24 -lower 2 -hslen 96 -vslen 6 -laced false
-	# 1024x768 70Hz 32bpp	(15" monitors)
-	# fbset -a -xres 1024 -yres 768 -vxres 1024 -vyres 1440 -depth 32 -pixclock 12500 -left 144 -right 32 -upper 30 -lower 2 -hslen 192 -vslen 6 -laced false
-}
-
-function TVdefaultmode {
-
-	##
-	## PAL modes
-	##
-
-	# 640x512 80Hz 32bpp
-	fbset -fb $1 -a -depth 32 -left 60 -right 0 -upper 70 -lower 39 -hslen 76 -vslen 4 -xres 640 -yres 512 -bcast true -laced false
-	# 640x528 83Hz 32bpp
-	# fbset -fb $1 -a -depth 32 -left 40 -right 0 -upper 63 -lower 29 -hslen 56 -vslen 4 -xres 640 -yres 528 -vxres 640 -vyres 528 -laced false -bcast true
-	# 720x576 78Hz 32bpp
-	# fbset -fb $1 -a -depth 32 -left 54 -right -36 -upper 55 -lower -6 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -laced false -bcast true
-
-	##
-	## NTSC modes
-	##
-
-	# 640x240 non-interlaced 32bpp
-	# fbset -fb $1 -a -depth 32 -xres 640 -yres 240 -vxres 640 -vyres 240 -pixclock 79443 -left 72 -right 40 -upper 15 -lower 5 -hslen 48 -vslen 3 -laced false
-	# 640x480 interlaced 32bpp
-	# fbset -fb $1 -a -depth 32 -xres 640 -yres 480 -vxres 640 -vyres 480 -pixclock 79443 -left 72 -right 40 -upper 30 -lower 10 -hslen 48 -vslen 5 -laced true
-}
-
-function SetTVstandard {
-	matroxset 1		# PAL
-	# matroxset 2		# NTSC
-}
-
-function SetMonitorMode {
-        matroxset 128
-}
-
-function mappingreset {
-	matroxset -f /dev/fb0 -m 0
-	matroxset -f /dev/fb1 -m 0
-	matroxset -f /dev/fb0 -m 1
-	con2fb /dev/fb0 /dev/tty1
-	con2fb /dev/fb0 /dev/tty2
-	SetMonitorMode
-	defaultmode
-}
-
-function warn {
-	clear
-	echo "tty2 will be automatically transferred to fb1 using the con2fb utility."
-	echo
-	echo
-	echo "A big \"1\" letter will be displayed on tty1 after the change."
-	echo "A big \"2\" letter will be displayed on tty2 after the change."
-	echo
-	echo
-	echo "If you read this, PRESS ANY KEY TO CONTINUE"
-	read
-}
-
-function warn2 {
-	id1 > /dev/tty1 &
-	id2 > /dev/tty2 &
-}	
-
-function id1 {
-	sleep 1
-	clear
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo "                                   ****"
-	echo "                                  *****"
-	echo "                                 ******"
-	echo "                                *******"
-	echo "                                    ***"
-	echo "                                    ***"
-	echo "                                    ***"
-	echo "                                    ***"
-	echo "                                    ***"
-	echo "                                   *****"
-	echo
-	echo
-	echo "	                        FAST console"
-	echo
-	echo
-	echo "                         Press ALT-F1 to change here"
-}
-
-function id2 {
-	sleep 1
-	clear
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo
-	echo "                                   *****"
-	echo "                                  **   **"
-	echo "                                  *    **"
-	echo "                                      **"
-	echo "                                     **"
-	echo "                                    **"
-	echo "                                   **"
-	echo "                                  **"
-	echo "                                  **   **"
-	echo "                                  *******"
-	echo
-	echo
-	echo "	                        SLOW console"
-	echo
-	echo
-	echo "                         Press ALT-F2 to change here"
-}
-
-echo
-echo "Please read MPlayer's TV-out documentation, and install 'matroxset' and 'fbset'."
-echo "Then edit this script to suit your monitor+TV set."
-echo
-exit 1
-
-while [ 1 ]; do
-
-clear
-
-echo " [ 0 ]    Clear & blank screen"
-echo " [ 1 ]    Monitor only"
-echo
-echo " [ 2 ]    Cloning  - CRTC1 -> Monitor"
-echo "                     CRTC2 -> TV"
-echo
-echo " [ 3 ]    Cloning  - CRTC1 -> Monitor1"
-echo "                     CRTC2 -> Monitor2"
-echo
-echo " [ 4 ]    DualHead - CRTC1 -> Monitor1"
-echo "                     CRTC2 -> Monitor2"
-echo
-echo " [ 5 ]    DualHead - CRTC1 -> Monitor2 (SWAP!)"
-echo "                     CRTC2 -> Monitor1"
-echo
-echo " [ 6 ]    DualHead - CRTC1 -> Monitor1"
-echo "                     CRTC2 -> TV"
-echo
-echo " [ 7 ]    DualHead - CRTC1 -> TV (SWAP!)"
-echo "                     CRTC2 -> Monitor1"
-
-echo
-
-echo "-- TV MODES on /dev/fb0			 -- TV MODES on /dev/fb1"
-echo
-echo " [ a ]	640x512		PAL                 [ A ]    640x512		PAL"
-echo " [ s ]	640x528		PAL                 [ S ]    640x528		PAL"
-echo " [ d ]	720x576		PAL                 [ D ]    720x576		PAL"
-echo " [ f ]	640x240		NTSC                [ F ]    640x240		NTSC"
-echo " [ g ]	640x480		NTSC, interlaced    [ G ]    640x480		NTSCl"
-echo
-echo " (Warning, fb0 and fb1 tend to change RANDOMLY with these mode changers..)"
-
-read ABC
-
-case "$ABC" in
-	0)
-	clear
-	setterm -cursor off
-	setterm -blank 0
-	read
-	setterm -cursor on
-	;;
-
-	1)
-	mappingreset
-	echo
-	;;
-
-	2)
-	mappingreset
-	matroxset -f /dev/fb0 -m 3
-	SetTVstandard
-	TVdefaultmode /dev/fb0
-	;;
-
-	3)
-	mappingreset
-	matroxset -f /dev/fb0 -m 3
-	;;
-
-	4)
-	warn
-	mappingreset
-	matroxset -f /dev/fb0 -m 1
-	matroxset -f /dev/fb1 -m 2
-	warn2
-	;;
-
-	5)
-	warn
-	mappingreset
-	matroxset -f /dev/fb0 -m 2
-	matroxset -f /dev/fb1 -m 1
-	warn2
-	;;
-
-	6)
-	warn
-	mappingreset
-	con2fb /dev/fb1 /dev/tty2
-	matroxset -f /dev/fb0 -m 1
-	matroxset -f /dev/fb1 -m 2
-	SetTVstandard
-	TVdefaultmode /dev/fb1
-	warn2
-	;;
-
-	7)
-	warn
-	mappingreset
-	con2fb /dev/fb1 /dev/tty2
-	matroxset -f /dev/fb0 -m 2
-	matroxset -f /dev/fb1 -m 1
-	SetTVstandard
-	TVdefaultmode /dev/fb0
-	warn2
-	;;
-
-	a)
-	# 640x512 80Hz 32bpp
-	fbset -depth 32 -left 60 -right 0 -upper 70 -lower 39 -hslen 76 -vslen 4 -xres 640 -yres 512 -bcast true -laced false
-	;;
-
-	A)
-	# 640x512 80Hz 32bpp
-	fbset -fb /dev/fb1 -depth 32 -left 60 -right 0 -upper 70 -lower 39 -hslen 76 -vslen 4 -xres 640 -yres 512 -bcast true -laced false
-	;;
-
-	s)
-	# 640x528 83Hz 32bpp
-	fbset -depth 32 -left 40 -right 0 -upper 63 -lower 29 -hslen 56 -vslen 4 -xres 640 -yres 528 -vxres 640 -vyres 528 -laced false -bcast true
-	;;
-
-	S)
-	# 640x528 83Hz 32bpp
-	fbset -fb /dev/fb1 -depth 32 -left 40 -right 0 -upper 63 -lower 29 -hslen 56 -vslen 4 -xres 640 -yres 528 -vxres 640 -vyres 528 -laced false -bcast true
-	;;
-
-	d)
-	# 720x576 78Hz 32bpp
-#	fbset -depth 32 -left 54 -right -36 -upper 55 -lower -6 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -laced false -bcast true
-	fbset -depth 32 -right -36 -lower -6 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -laced false -bcast true
-	;;
-
-	D)
-	# 720x576 78Hz 32bpp
-#	fbset -fb /dev/fb1 -depth 32 -left 54 -right -36 -upper 55 -lower -6 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -laced false -bcast true
-	fbset -fb /dev/fb1 -depth 32 -right -36 -lower -6 -hslen 46 -vslen 4 -xres 720 -yres 576 -vxres 720 -vyres 576 -laced false -bcast true
-	;;
-
-	f)
-	# 640x240 non-interlaced 32bpp
-	fbset -depth 32 -xres 640 -yres 240 -vxres 640 -vyres 240 -pixclock 79443 -left 72 -right 40 -upper 15 -lower 5 -hslen 48 -vslen 3 -laced false
-	;;
-
-	F)
-	# 640x240 non-interlaced 32bpp
-	fbset -fb /dev/fb1 -depth 32 -xres 640 -yres 240 -vxres 640 -vyres 240 -pixclock 79443 -left 72 -right 40 -upper 15 -lower 5 -hslen 48 -vslen 3 -laced false
-	;;
-
-	g)
-	# 640x480 interlaced 32bpp
-	fbset -depth 32 -xres 640 -yres 480 -vxres 640 -vyres 480 -pixclock 79443 -left 72 -right 40 -upper 30 -lower 10 -hslen 48 -vslen 5 -laced true
-	;;
-
-	G)
-	# 640x480 interlaced 32bpp
-	fbset -fb /dev/fb1 -depth 32 -xres 640 -yres 480 -vxres 640 -vyres 480 -pixclock 79443 -left 72 -right 40 -upper 30 -lower 10 -hslen 48 -vslen 5 -laced true
-	;;
-esac
-
-done
--- a/TVout/modules	Tue Aug 03 00:37:05 2004 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-
-# Load kernel modules...
-# (you must have 2.3/2.4 kernel with matroxfb enabled!)
-
-modprobe matroxfb_Ti3026
-modprobe matroxfb_maven
-modprobe i2c-matroxfb
-modprobe matroxfb_crtc2