Merge branch 'master' of git+ssh://git.freedesktop.org/git/xorg/xserver into input-hotplug
This commit is contained in:
		
						commit
						87fe85f38b
					
				|  | @ -1723,7 +1723,6 @@ hw/xfree86/dri/Makefile | ||||||
| hw/xfree86/dummylib/Makefile | hw/xfree86/dummylib/Makefile | ||||||
| hw/xfree86/exa/Makefile | hw/xfree86/exa/Makefile | ||||||
| hw/xfree86/fbdevhw/Makefile | hw/xfree86/fbdevhw/Makefile | ||||||
| hw/xfree86/getconfig/Makefile |  | ||||||
| hw/xfree86/i2c/Makefile | hw/xfree86/i2c/Makefile | ||||||
| hw/xfree86/int10/Makefile | hw/xfree86/int10/Makefile | ||||||
| hw/xfree86/loader/Makefile | hw/xfree86/loader/Makefile | ||||||
|  |  | ||||||
|  | @ -7,12 +7,12 @@ DOC_SUBDIR = doc | ||||||
| SUBDIRS = common ddc dummylib i2c x86emu int10 fbdevhw os-support parser rac \
 | SUBDIRS = common ddc dummylib i2c x86emu int10 fbdevhw os-support parser rac \
 | ||||||
|           ramdac shadowfb vbe vgahw xaa xf1bpp xf4bpp xf8_16bpp \
 |           ramdac shadowfb vbe vgahw xaa xf1bpp xf4bpp xf8_16bpp \
 | ||||||
| 	  xf8_32bpp loader scanpci dixmods exa \
 | 	  xf8_32bpp loader scanpci dixmods exa \
 | ||||||
| 	  $(DRI_SUBDIR) utils $(DOC_SUBDIR) getconfig | 	  $(DRI_SUBDIR) utils $(DOC_SUBDIR) | ||||||
| 
 | 
 | ||||||
| DIST_SUBDIRS = common ddc dummylib i2c x86emu int10 fbdevhw os-support \
 | DIST_SUBDIRS = common ddc dummylib i2c x86emu int10 fbdevhw os-support \
 | ||||||
|                parser rac ramdac shadowfb vbe vgahw xaa xf1bpp xf4bpp \
 |                parser rac ramdac shadowfb vbe vgahw xaa xf1bpp xf4bpp \
 | ||||||
|                xf8_16bpp xf8_32bpp loader scanpci dixmods dri exa \
 |                xf8_16bpp xf8_32bpp loader scanpci dixmods dri exa \
 | ||||||
| 	       utils doc getconfig | 	       utils doc | ||||||
| 
 | 
 | ||||||
| bin_PROGRAMS = Xorg | bin_PROGRAMS = Xorg | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -30,7 +30,7 @@ BUILT_SOURCES = xf86DefModeSet.c | ||||||
| 
 | 
 | ||||||
| AM_LDFLAGS = -r | AM_LDFLAGS = -r | ||||||
| libcommon_la_SOURCES = xf86Configure.c xf86Bus.c xf86Config.c \
 | libcommon_la_SOURCES = xf86Configure.c xf86Bus.c xf86Config.c \
 | ||||||
|                       xf86Cursor.c xf86DGA.c xf86DPMS.c \
 |                       xf86Cursor.c xf86cvt.c xf86DGA.c xf86DPMS.c \
 | ||||||
|                       xf86DoProbe.c xf86DoScanPci.c xf86Events.c \
 |                       xf86DoProbe.c xf86DoScanPci.c xf86Events.c \
 | ||||||
|                       xf86Globals.c xf86AutoConfig.c \
 |                       xf86Globals.c xf86AutoConfig.c \
 | ||||||
|                       xf86MiscExt.c xf86Option.c \
 |                       xf86MiscExt.c xf86Option.c \
 | ||||||
|  |  | ||||||
|  | @ -1514,88 +1514,7 @@ inl(unsigned short port) | ||||||
| 
 | 
 | ||||||
| #   endif /* ix86 */ | #   endif /* ix86 */ | ||||||
| 
 | 
 | ||||||
| #  elif defined(__powerpc__) /* && !__GNUC__ */ | #  else /* !GNUC */ | ||||||
| /*
 |  | ||||||
|  * NON-GCC PowerPC - Presumed to be PowerMAX OS for now |  | ||||||
|  */ |  | ||||||
| #   ifndef PowerMAX_OS |  | ||||||
| #    error - Non-gcc PowerPC and !PowerMAXOS ??? |  | ||||||
| #   endif |  | ||||||
| 
 |  | ||||||
| #   define PPCIO_DEBUG  0 |  | ||||||
| #   define PPCIO_INLINE 1 |  | ||||||
| #   define USE_ABS_MACRO 1 |  | ||||||
| /*
 |  | ||||||
|  * Use compiler intrinsics to access certain PPC machine instructions |  | ||||||
|  */ |  | ||||||
| #   define eieio() 	      __inst_eieio() |  | ||||||
| #   define stw_brx(val,base,ndx) __inst_sthbrx(val,base,ndx) |  | ||||||
| #   define stl_brx(val,base,ndx) __inst_stwbrx(val,base,ndx) |  | ||||||
| #   define ldw_brx(base,ndx)     __inst_lhbrx(base,ndx) |  | ||||||
| #   define ldl_brx(base,ndx)     __inst_lwbrx(base,ndx) |  | ||||||
| 
 |  | ||||||
| #   define ldq_u(p)	(*((unsigned long long  *)(p))) |  | ||||||
| #   define ldl_u(p)	(*((unsigned long   *)(p))) |  | ||||||
| #   define ldw_u(p)	(*((unsigned short *)(p))) |  | ||||||
| #   define stq_u(v,p)	(*(unsigned long long *)(p)) = (v) |  | ||||||
| #   define stl_u(v,p)	(*(unsigned long  *)(p)) = (v) |  | ||||||
| #   define stw_u(v,p)	(*(unsigned short *)(p)) = (v) |  | ||||||
| #   define mem_barrier()         eieio() |  | ||||||
| #   define write_mem_barrier()   eieio() |  | ||||||
| 
 |  | ||||||
| extern volatile unsigned char *ioBase; |  | ||||||
| 
 |  | ||||||
| #   if !defined(abs) && defined(USE_ABS_MACRO) |  | ||||||
| #    define abs(x) ((x) >= 0 ? (x) : -(x)) |  | ||||||
| #   endif |  | ||||||
| 
 |  | ||||||
| #   undef inb |  | ||||||
| #   undef inw |  | ||||||
| #   undef inl |  | ||||||
| #   undef outb |  | ||||||
| #   undef outw |  | ||||||
| #   undef outl |  | ||||||
| 
 |  | ||||||
| #   if PPCIO_DEBUG |  | ||||||
| 
 |  | ||||||
| extern void debug_outb(unsigned int a, unsigned char b, int line, char *file);  |  | ||||||
| extern void debug_outw(unsigned int a, unsigned short w, int line, char *file);  |  | ||||||
| extern void debug_outl(unsigned int a, unsigned int l, int line, char *file);  |  | ||||||
| extern unsigned char debug_inb(unsigned int a, int line, char *file);  |  | ||||||
| extern unsigned short debug_inw(unsigned int a, int line, char *file);  |  | ||||||
| extern unsigned int debug_inl(unsigned int a, int line, char *file);  |  | ||||||
| 
 |  | ||||||
| #    define outb(a,b) debug_outb(a,b, __LINE__, __FILE__) |  | ||||||
| #    define outw(a,w) debug_outw(a,w, __LINE__, __FILE__) |  | ||||||
| #    define outl(a,l) debug_outl(a,l, __LINE__, __FILE__) |  | ||||||
| #    define inb(a)    debug_inb(a, __LINE__, __FILE__) |  | ||||||
| #    define inw(a)    debug_inw(a, __LINE__, __FILE__) |  | ||||||
| #    define inl(a)    debug_inl(a, __LINE__, __FILE__) |  | ||||||
| 
 |  | ||||||
| #   else /* !PPCIO_DEBUG */ |  | ||||||
| 
 |  | ||||||
| extern unsigned char  inb(unsigned int a); |  | ||||||
| extern unsigned short inw(unsigned int a); |  | ||||||
| extern unsigned int   inl(unsigned int a); |  | ||||||
| 
 |  | ||||||
| #    if PPCIO_INLINE |  | ||||||
| 
 |  | ||||||
| #     define outb(a,b) \ |  | ||||||
|             (*((volatile unsigned char *)(ioBase + (a))) = (b), eieio()) |  | ||||||
| #     define outw(a,w) (stw_brx((w),ioBase,(a)), eieio()) |  | ||||||
| #     define outl(a,l) (stl_brx((l),ioBase,(a)), eieio()) |  | ||||||
| 
 |  | ||||||
| #    else /* !PPCIO_INLINE */ |  | ||||||
| 
 |  | ||||||
| extern void outb(unsigned int a, unsigned char b); |  | ||||||
| extern void outw(unsigned int a, unsigned short w); |  | ||||||
| extern void outl(unsigned int a, unsigned int l); |  | ||||||
| 
 |  | ||||||
| #    endif /* PPCIO_INLINE */ |  | ||||||
| 
 |  | ||||||
| #   endif /* !PPCIO_DEBUG */ |  | ||||||
| 
 |  | ||||||
| #  else /* !GNUC && !PPC */ |  | ||||||
| #   if !defined(QNX4) | #   if !defined(QNX4) | ||||||
| #    if defined(__STDC__) && (__STDC__ == 1) | #    if defined(__STDC__) && (__STDC__ == 1) | ||||||
| #     ifndef asm | #     ifndef asm | ||||||
|  |  | ||||||
|  | @ -194,6 +194,10 @@ void *xf86GetPointerScreenFuncs(void); | ||||||
| void xf86InitOrigins(void); | void xf86InitOrigins(void); | ||||||
| void xf86ReconfigureLayout(void); | void xf86ReconfigureLayout(void); | ||||||
| 
 | 
 | ||||||
|  | /* xf86cvt.c */ | ||||||
|  | DisplayModePtr xf86CVTMode(int HDisplay, int VDisplay, float VRefresh, | ||||||
|  |                            Bool Reduced, Bool Interlaced); | ||||||
|  | 
 | ||||||
| /* xf86DPMS.c */ | /* xf86DPMS.c */ | ||||||
| 
 | 
 | ||||||
| Bool xf86DPMSInit(ScreenPtr pScreen, DPMSSetProcPtr set, int flags); | Bool xf86DPMSInit(ScreenPtr pScreen, DPMSSetProcPtr set, int flags); | ||||||
|  |  | ||||||
|  | @ -1,6 +1,3 @@ | ||||||
| /* $DHD: xc/programs/Xserver/hw/xfree86/common/xf86AutoConfig.c,v 1.15 2003/09/24 19:39:36 dawes Exp $ */ |  | ||||||
| /* $XdotOrg: $ */ |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|  * Copyright 2003 by David H. Dawes. |  * Copyright 2003 by David H. Dawes. | ||||||
|  * Copyright 2003 by X-Oz Technologies. |  * Copyright 2003 by X-Oz Technologies. | ||||||
|  | @ -32,7 +29,6 @@ | ||||||
|  * Author: David Dawes <dawes@XFree86.Org>. |  * Author: David Dawes <dawes@XFree86.Org>. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| #ifdef HAVE_XORG_CONFIG_H | #ifdef HAVE_XORG_CONFIG_H | ||||||
| #include <xorg-config.h> | #include <xorg-config.h> | ||||||
| #endif | #endif | ||||||
|  | @ -44,9 +40,7 @@ | ||||||
| #include "xf86Priv.h" | #include "xf86Priv.h" | ||||||
| #include "xf86_OSlib.h" | #include "xf86_OSlib.h" | ||||||
| 
 | 
 | ||||||
| /*
 | /* Sections for the default built-in configuration. */ | ||||||
|  * Sections for the default built-in configuration. |  | ||||||
|  */ |  | ||||||
| 
 | 
 | ||||||
| #define BUILTIN_MODULE_SECTION \ | #define BUILTIN_MODULE_SECTION \ | ||||||
| 	"Section \"Module\"\n" \ | 	"Section \"Module\"\n" \ | ||||||
|  | @ -100,17 +94,6 @@ | ||||||
| #define BUILTIN_LAYOUT_SECTION_POST \ | #define BUILTIN_LAYOUT_SECTION_POST \ | ||||||
| 	"EndSection\n\n" | 	"EndSection\n\n" | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| #ifndef GET_CONFIG_CMD |  | ||||||
| #define GET_CONFIG_CMD			"getconfig" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifndef GETCONFIG_DIR |  | ||||||
| #define GETCONFIG_DIR			PROJECTROOT "/lib/X11/getconfig" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #define GETCONFIG_WHITESPACE		" \t\n" |  | ||||||
| 
 |  | ||||||
| static const char **builtinConfig = NULL; | static const char **builtinConfig = NULL; | ||||||
| static int builtinLines = 0; | static int builtinLines = 0; | ||||||
| static const char *deviceList[] = { | static const char *deviceList[] = { | ||||||
|  | @ -170,6 +153,61 @@ AppendToConfig(const char *s) | ||||||
|     AppendToList(s, &builtinConfig, &builtinLines); |     AppendToList(s, &builtinConfig, &builtinLines); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static const char * | ||||||
|  | videoPtrToDriverName(pciVideoPtr info) | ||||||
|  | { | ||||||
|  |     /*
 | ||||||
|  |      * things not handled yet: | ||||||
|  |      * amd/cyrix/nsc | ||||||
|  |      * xgi | ||||||
|  |      */ | ||||||
|  | 
 | ||||||
|  |     switch (info->vendor) | ||||||
|  |     { | ||||||
|  | 	case 0x1142:		    return "apm"; | ||||||
|  | 	case 0xedd8:		    return "ark"; | ||||||
|  | 	case 0x1a03:		    return "ast"; | ||||||
|  | 	case 0x1002:		    return "ati"; | ||||||
|  | 	case 0x102c:		    return "chips"; | ||||||
|  | 	case 0x1013:		    return "cirrus"; | ||||||
|  | 	case 0x8086: | ||||||
|  | 	    if ((info->chipType == 0x00d1) || (info->chipType == 0x7800)) | ||||||
|  | 		return "i740"; | ||||||
|  | 	    else return "i810"; | ||||||
|  | 	case 0x102b:		    return "mga"; | ||||||
|  | 	case 0x10c8:		    return "neomagic"; | ||||||
|  | 	case 0x105d:		    return "i128"; | ||||||
|  | 	case 0x10de: case 0x12d2:   return "nv"; | ||||||
|  | 	case 0x1163:		    return "rendition"; | ||||||
|  | 	case 0x5333: | ||||||
|  | 	    switch (info->chipType) | ||||||
|  | 	    { | ||||||
|  | 		case 0x88d0: case 0x88d1: case 0x88f0: case 0x8811: | ||||||
|  | 		case 0x8812: case 0x8814: case 0x8901: | ||||||
|  | 		    return "s3"; | ||||||
|  | 		case 0x5631: case 0x883d: case 0x8a01: case 0x8a10: | ||||||
|  | 		case 0x8c01: case 0x8c03: case 0x8904: case 0x8a13: | ||||||
|  | 		    return "s3virge"; | ||||||
|  | 		default: | ||||||
|  | 		    return "savage"; | ||||||
|  | 	    } | ||||||
|  | 	case 0x1039:		    return "sis"; | ||||||
|  | 	case 0x126f:		    return "siliconmotion"; | ||||||
|  | 	case 0x121a: | ||||||
|  | 	    if (info->chipType < 0x0003) | ||||||
|  | 	        return "voodoo"; | ||||||
|  | 	    else | ||||||
|  | 	        return "tdfx"; | ||||||
|  | 	case 0x3d3d:		    return "glint"; | ||||||
|  | 	case 0x1023:		    return "trident"; | ||||||
|  | 	case 0x100c:		    return "tseng"; | ||||||
|  | 	case 0x1106:		    return "via"; | ||||||
|  | 	case 0x15ad:		    return "vmware"; | ||||||
|  | 	default: break; | ||||||
|  |     } | ||||||
|  |     return NULL; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| Bool | Bool | ||||||
| xf86AutoConfig(void) | xf86AutoConfig(void) | ||||||
| { | { | ||||||
|  | @ -177,7 +215,6 @@ xf86AutoConfig(void) | ||||||
|     char buf[1024]; |     char buf[1024]; | ||||||
|     pciVideoPtr *pciptr, info = NULL; |     pciVideoPtr *pciptr, info = NULL; | ||||||
|     char *driver = NULL; |     char *driver = NULL; | ||||||
|     FILE *gp = NULL; |  | ||||||
|     ConfigStatus ret; |     ConfigStatus ret; | ||||||
| 
 | 
 | ||||||
|     /* Find the primary device, and get some information about it. */ |     /* Find the primary device, and get some information about it. */ | ||||||
|  | @ -194,108 +231,8 @@ xf86AutoConfig(void) | ||||||
| 	ErrorF("xf86PciVideoInfo is not set\n"); | 	ErrorF("xf86PciVideoInfo is not set\n"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (info) { |     if (info) | ||||||
| 	char *tmp; | 	driver = videoPtrToDriverName(info); | ||||||
| 	char *path = NULL, *a, *b; |  | ||||||
| 	char *searchPath = NULL; |  | ||||||
| 
 |  | ||||||
| 	/*
 |  | ||||||
| 	 * Look for the getconfig program first in the xf86ModulePath |  | ||||||
| 	 * directories, then in GETCONFIG_DIR, then in BINDIR.  If it |  | ||||||
| 	 * isn't found in any of those locations, just use the normal |  | ||||||
| 	 * search path. |  | ||||||
| 	 */ |  | ||||||
| 
 |  | ||||||
| 	if (xf86ModulePath) { |  | ||||||
| 	    a = xnfstrdup(xf86ModulePath); |  | ||||||
| 	    b = strtok(a, ","); |  | ||||||
| 	    while (b) { |  | ||||||
| 		path = xnfrealloc(path, |  | ||||||
| 				  strlen(b) + 1 + strlen(GET_CONFIG_CMD) + 1); |  | ||||||
| 		sprintf(path, "%s/%s", b, GET_CONFIG_CMD); |  | ||||||
| 		if (access(path, X_OK) == 0) |  | ||||||
| 		    break; |  | ||||||
| 		b = strtok(NULL, ","); |  | ||||||
| 	    } |  | ||||||
| 	    if (!b) { |  | ||||||
| 		xfree(path); |  | ||||||
| 		path = NULL; |  | ||||||
| 	    } |  | ||||||
| 	    xfree(a); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if (!path) { |  | ||||||
| 	    path = xnfstrdup(GETCONFIG_DIR "/" GET_CONFIG_CMD); |  | ||||||
| 	    if (access(path, X_OK) != 0) { |  | ||||||
| 		xfree(path); |  | ||||||
| 		path = NULL; |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| #ifdef BINDIR |  | ||||||
| 	if (!path) { |  | ||||||
| 	    path = xnfstrdup(BINDIR "/" GET_CONFIG_CMD); |  | ||||||
| 	    if (access(path, X_OK) != 0) { |  | ||||||
| 		xfree(path); |  | ||||||
| 		path = NULL; |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 	if (!path) |  | ||||||
| 	    path = xnfstrdup(GET_CONFIG_CMD); |  | ||||||
| 
 |  | ||||||
| 	/*
 |  | ||||||
| 	 * Build up the config file directory search path: |  | ||||||
| 	 * |  | ||||||
| 	 * /etc/X11 |  | ||||||
| 	 * PROJECTROOT/etc/X11 |  | ||||||
| 	 * xf86ModulePath |  | ||||||
| 	 * PROJECTROOT/lib/X11/getconfig  (GETCONFIG_DIR) |  | ||||||
| 	 */ |  | ||||||
| 
 |  | ||||||
| 	searchPath = xnfalloc(strlen("/etc/X11") + 1 + |  | ||||||
| 			      strlen(PROJECTROOT "/etc/X11") + 1 + |  | ||||||
| 			      (xf86ModulePath ? strlen(xf86ModulePath) : 0) |  | ||||||
| 				+ 1 + |  | ||||||
| 			      strlen(GETCONFIG_DIR) + 1); |  | ||||||
| 	strcpy(searchPath, "/etc/X11," PROJECTROOT "/etc/X11,"); |  | ||||||
| 	if (xf86ModulePath && *xf86ModulePath) { |  | ||||||
| 	    strcat(searchPath, xf86ModulePath); |  | ||||||
| 	    strcat(searchPath, ","); |  | ||||||
| 	} |  | ||||||
| 	strcat(searchPath, GETCONFIG_DIR); |  | ||||||
| 
 |  | ||||||
| 	ErrorF("xf86AutoConfig: Primary PCI is %d:%d:%d\n", |  | ||||||
| 	       info->bus, info->device, info->func); |  | ||||||
| 
 |  | ||||||
| 	snprintf(buf, sizeof(buf), "%s" |  | ||||||
| #ifdef DEBUG |  | ||||||
| 		 " -D" |  | ||||||
| #endif |  | ||||||
| 		 " -X %d" |  | ||||||
| 		 " -I %s" |  | ||||||
| 		 " -v 0x%04x -d 0x%04x -r 0x%02x -s 0x%04x" |  | ||||||
| 		 " -b 0x%04x -c 0x%04x", |  | ||||||
| 		 path, |  | ||||||
| 		 (unsigned int)xorgGetVersion(), |  | ||||||
| 		 searchPath, |  | ||||||
| 		 info->vendor, info->chipType, info->chipRev, |  | ||||||
| 		 info->subsysVendor, info->subsysCard, |  | ||||||
| 		 info->class << 8 | info->subclass); |  | ||||||
| 	ErrorF("Running \"%s\"\n", buf); |  | ||||||
| 	gp = Popen(buf, "r"); |  | ||||||
| 	if (gp) { |  | ||||||
| 	    if (fgets(buf, sizeof(buf) - 1, gp)) { |  | ||||||
| 		buf[strlen(buf) - 1] = '\0'; |  | ||||||
| 		tmp = strtok(buf, GETCONFIG_WHITESPACE); |  | ||||||
| 		if (tmp) |  | ||||||
| 		    driver = xnfstrdup(tmp); |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 	xfree(path); |  | ||||||
| 	xfree(searchPath); |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     AppendToConfig(BUILTIN_MODULE_SECTION); |     AppendToConfig(BUILTIN_MODULE_SECTION); | ||||||
|     AppendToConfig(BUILTIN_MONITOR_SECTION); |     AppendToConfig(BUILTIN_MONITOR_SECTION); | ||||||
|  | @ -306,19 +243,12 @@ xf86AutoConfig(void) | ||||||
| 	AppendToConfig(buf); | 	AppendToConfig(buf); | ||||||
| 	ErrorF("New driver is \"%s\"\n", driver); | 	ErrorF("New driver is \"%s\"\n", driver); | ||||||
| 	buf[0] = '\t'; | 	buf[0] = '\t'; | ||||||
| 	while (fgets(buf + 1, sizeof(buf) - 2, gp)) { |  | ||||||
| 	    AppendToConfig(buf); |  | ||||||
| 	    ErrorF("Extra line: %s", buf); |  | ||||||
| 	} |  | ||||||
| 	AppendToConfig(BUILTIN_DEVICE_SECTION_POST); | 	AppendToConfig(BUILTIN_DEVICE_SECTION_POST); | ||||||
| 	snprintf(buf, sizeof(buf), BUILTIN_SCREEN_SECTION, | 	snprintf(buf, sizeof(buf), BUILTIN_SCREEN_SECTION, | ||||||
| 		 driver, 0, driver, 0); | 		 driver, 0, driver, 0); | ||||||
| 	AppendToConfig(buf); | 	AppendToConfig(buf); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (gp) |  | ||||||
| 	Pclose(gp); |  | ||||||
| 
 |  | ||||||
|     for (p = deviceList; *p; p++) { |     for (p = deviceList; *p; p++) { | ||||||
| 	snprintf(buf, sizeof(buf), BUILTIN_DEVICE_SECTION, *p, 0, *p); | 	snprintf(buf, sizeof(buf), BUILTIN_DEVICE_SECTION, *p, 0, *p); | ||||||
| 	AppendToConfig(buf); | 	AppendToConfig(buf); | ||||||
|  | @ -337,13 +267,6 @@ xf86AutoConfig(void) | ||||||
|     } |     } | ||||||
|     AppendToConfig(BUILTIN_LAYOUT_SECTION_POST); |     AppendToConfig(BUILTIN_LAYOUT_SECTION_POST); | ||||||
| 
 | 
 | ||||||
| #ifdef BUILTIN_EXTRA |  | ||||||
|     AppendToConfig(BUILTIN_EXTRA); |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
|     if (driver) |  | ||||||
| 	xfree(driver); |  | ||||||
| 
 |  | ||||||
|     xf86MsgVerb(X_DEFAULT, 0, |     xf86MsgVerb(X_DEFAULT, 0, | ||||||
| 		"Using default built-in configuration (%d lines)\n", | 		"Using default built-in configuration (%d lines)\n", | ||||||
| 		builtinLines); | 		builtinLines); | ||||||
|  | @ -356,12 +279,9 @@ xf86AutoConfig(void) | ||||||
|     xf86setBuiltinConfig(builtinConfig); |     xf86setBuiltinConfig(builtinConfig); | ||||||
|     ret = xf86HandleConfigFile(TRUE); |     ret = xf86HandleConfigFile(TRUE); | ||||||
|     FreeConfig(); |     FreeConfig(); | ||||||
|     switch(ret) { |  | ||||||
|     case CONFIG_OK: |  | ||||||
| 	return TRUE; |  | ||||||
|     default: |  | ||||||
| 	xf86Msg(X_ERROR, "Error parsing the built-in default configuration.\n"); |  | ||||||
| 	return FALSE; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
|  |     if (ret != CONFIG_OK) | ||||||
|  | 	xf86Msg(X_ERROR, "Error parsing the built-in default configuration.\n"); | ||||||
|  | 
 | ||||||
|  |     return (ret == CONFIG_OK); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,292 @@ | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2005-2006 Luc Verhaegen. | ||||||
|  |  * | ||||||
|  |  * Permission is hereby granted, free of charge, to any person obtaining a | ||||||
|  |  * copy of this software and associated documentation files (the "Software"), | ||||||
|  |  * to deal in the Software without restriction, including without limitation | ||||||
|  |  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||||
|  |  * and/or sell copies of the Software, and to permit persons to whom the | ||||||
|  |  * Software is furnished to do so, subject to the following conditions: | ||||||
|  |  * | ||||||
|  |  * The above copyright notice and this permission notice shall be included in | ||||||
|  |  * all copies or substantial portions of the Software. | ||||||
|  |  * | ||||||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||||
|  |  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||||||
|  |  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||||||
|  |  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||||||
|  |  * OTHER DEALINGS IN THE SOFTWARE. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The reason for having this function in a file of its own is | ||||||
|  |  * so that ../utils/cvt/cvt can link to it, and that xf86CVTMode | ||||||
|  |  * code is shared directly. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include "xf86.h" | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Generate a CVT standard mode from HDisplay, VDisplay and VRefresh. | ||||||
|  |  * | ||||||
|  |  * These calculations are stolen from the CVT calculation spreadsheet written | ||||||
|  |  * by Graham Loveridge. He seems to be claiming no copyright and there seems to | ||||||
|  |  * be no license attached to this. He apparently just wants to see his name | ||||||
|  |  * mentioned. | ||||||
|  |  * | ||||||
|  |  * This file can be found at http://www.vesa.org/Public/CVT/CVTd6r1.xls
 | ||||||
|  |  * | ||||||
|  |  * Comments and structure corresponds to the comments and structure of the xls. | ||||||
|  |  * This should ease importing of future changes to the standard (not very | ||||||
|  |  * likely though). | ||||||
|  |  * | ||||||
|  |  * About margins; i'm sure that they are to be the bit between HDisplay and | ||||||
|  |  * HBlankStart, HBlankEnd and HTotal, VDisplay and VBlankStart, VBlankEnd and  | ||||||
|  |  * VTotal, where the overscan colour is shown. FB seems to call _all_ blanking | ||||||
|  |  * outside sync "margin" for some reason. Since we prefer seeing proper | ||||||
|  |  * blanking instead of the overscan colour, and since the Crtc* values will | ||||||
|  |  * probably get altered after us, we will disable margins altogether. With | ||||||
|  |  * these calculations, Margins will plainly expand H/VDisplay, and we don't | ||||||
|  |  * want that. -- libv | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | _X_EXPORT DisplayModePtr | ||||||
|  | xf86CVTMode(int HDisplay, int VDisplay, float VRefresh, Bool Reduced, | ||||||
|  |             Bool Interlaced) | ||||||
|  | { | ||||||
|  |     DisplayModeRec  *Mode = xnfalloc(sizeof(DisplayModeRec)); | ||||||
|  | 
 | ||||||
|  |     /* 1) top/bottom margin size (% of height) - default: 1.8 */ | ||||||
|  | #define CVT_MARGIN_PERCENTAGE 1.8     | ||||||
|  | 
 | ||||||
|  |     /* 2) character cell horizontal granularity (pixels) - default 8 */ | ||||||
|  | #define CVT_H_GRANULARITY 8 | ||||||
|  | 
 | ||||||
|  |     /* 4) Minimum vertical porch (lines) - default 3 */ | ||||||
|  | #define CVT_MIN_V_PORCH 3 | ||||||
|  | 
 | ||||||
|  |     /* 4) Minimum number of vertical back porch lines - default 6 */ | ||||||
|  | #define CVT_MIN_V_BPORCH 6 | ||||||
|  | 
 | ||||||
|  |     /* Pixel Clock step (kHz) */ | ||||||
|  | #define CVT_CLOCK_STEP 250 | ||||||
|  | 
 | ||||||
|  |     Bool Margins = FALSE; | ||||||
|  |     float  VFieldRate, HPeriod; | ||||||
|  |     int  HDisplayRnd, HMargin; | ||||||
|  |     int  VDisplayRnd, VMargin, VSync; | ||||||
|  |     float  Interlace; /* Please rename this */ | ||||||
|  | 
 | ||||||
|  |     memset(Mode, 0, sizeof(DisplayModeRec)); | ||||||
|  | 
 | ||||||
|  |     /* CVT default is 60.0Hz */ | ||||||
|  |     if (!VRefresh) | ||||||
|  |         VRefresh = 60.0; | ||||||
|  | 
 | ||||||
|  |     /* 1. Required field rate */ | ||||||
|  |     if (Interlaced) | ||||||
|  |         VFieldRate = VRefresh * 2; | ||||||
|  |     else | ||||||
|  |         VFieldRate = VRefresh; | ||||||
|  | 
 | ||||||
|  |     /* 2. Horizontal pixels */ | ||||||
|  |     HDisplayRnd = HDisplay - (HDisplay % CVT_H_GRANULARITY); | ||||||
|  | 
 | ||||||
|  |     /* 3. Determine left and right borders */ | ||||||
|  |     if (Margins) { | ||||||
|  |         /* right margin is actually exactly the same as left */ | ||||||
|  |         HMargin = (((float) HDisplayRnd) * CVT_MARGIN_PERCENTAGE / 100.0); | ||||||
|  |         HMargin -= HMargin % CVT_H_GRANULARITY; | ||||||
|  |     } else | ||||||
|  |         HMargin = 0; | ||||||
|  | 
 | ||||||
|  |     /* 4. Find total active pixels */ | ||||||
|  |     Mode->HDisplay = HDisplayRnd + 2*HMargin; | ||||||
|  | 
 | ||||||
|  |     /* 5. Find number of lines per field */ | ||||||
|  |     if (Interlaced) | ||||||
|  |         VDisplayRnd = VDisplay / 2; | ||||||
|  |     else | ||||||
|  |         VDisplayRnd = VDisplay; | ||||||
|  | 
 | ||||||
|  |     /* 6. Find top and bottom margins */ | ||||||
|  |     /* nope. */ | ||||||
|  |     if (Margins) | ||||||
|  |         /* top and bottom margins are equal again. */ | ||||||
|  |         VMargin = (((float) VDisplayRnd) * CVT_MARGIN_PERCENTAGE / 100.0); | ||||||
|  |     else | ||||||
|  |         VMargin = 0; | ||||||
|  | 
 | ||||||
|  |     Mode->VDisplay = VDisplay + 2*VMargin; | ||||||
|  | 
 | ||||||
|  |     /* 7. Interlace */ | ||||||
|  |     if (Interlaced) | ||||||
|  |         Interlace = 0.5; | ||||||
|  |     else | ||||||
|  |         Interlace = 0.0; | ||||||
|  | 
 | ||||||
|  |     /* Determine VSync Width from aspect ratio */ | ||||||
|  |     if (!(VDisplay % 3) && ((VDisplay * 4 / 3) == HDisplay)) | ||||||
|  |         VSync = 4; | ||||||
|  |     else if (!(VDisplay % 9) && ((VDisplay * 16 / 9) == HDisplay)) | ||||||
|  |         VSync = 5; | ||||||
|  |     else if (!(VDisplay % 10) && ((VDisplay * 16 / 10) == HDisplay)) | ||||||
|  |         VSync = 6; | ||||||
|  |     else if (!(VDisplay % 4) && ((VDisplay * 5 / 4) == HDisplay)) | ||||||
|  |         VSync = 7; | ||||||
|  |     else if (!(VDisplay % 9) && ((VDisplay * 15 / 9) == HDisplay)) | ||||||
|  |         VSync = 7; | ||||||
|  |     else /* Custom */ | ||||||
|  |         VSync = 10; | ||||||
|  | 
 | ||||||
|  |     if (!Reduced) { /* simplified GTF calculation */ | ||||||
|  | 
 | ||||||
|  |         /* 4) Minimum time of vertical sync + back porch interval (µs) 
 | ||||||
|  |          * default 550.0 */ | ||||||
|  | #define CVT_MIN_VSYNC_BP 550.0 | ||||||
|  | 
 | ||||||
|  |         /* 3) Nominal HSync width (% of line period) - default 8 */ | ||||||
|  | #define CVT_HSYNC_PERCENTAGE 8 | ||||||
|  | 
 | ||||||
|  |         float  HBlankPercentage; | ||||||
|  |         int  VSyncAndBackPorch, VBackPorch; | ||||||
|  |         int  HBlank; | ||||||
|  | 
 | ||||||
|  |         /* 8. Estimated Horizontal period */ | ||||||
|  |         HPeriod = ((float) (1000000.0 / VFieldRate - CVT_MIN_VSYNC_BP)) /  | ||||||
|  |             (VDisplayRnd + 2 * VMargin + CVT_MIN_V_PORCH + Interlace); | ||||||
|  | 
 | ||||||
|  |         /* 9. Find number of lines in sync + backporch */ | ||||||
|  |         if (((int)(CVT_MIN_VSYNC_BP / HPeriod) + 1) < (VSync + CVT_MIN_V_PORCH)) | ||||||
|  |             VSyncAndBackPorch = VSync + CVT_MIN_V_PORCH; | ||||||
|  |         else | ||||||
|  |             VSyncAndBackPorch = (int)(CVT_MIN_VSYNC_BP / HPeriod) + 1; | ||||||
|  | 
 | ||||||
|  |         /* 10. Find number of lines in back porch */ | ||||||
|  |         VBackPorch = VSyncAndBackPorch - VSync; | ||||||
|  | 
 | ||||||
|  |         /* 11. Find total number of lines in vertical field */ | ||||||
|  |         Mode->VTotal = VDisplayRnd + 2 * VMargin + VSyncAndBackPorch + Interlace | ||||||
|  |             + CVT_MIN_V_PORCH; | ||||||
|  | 
 | ||||||
|  |         /* 5) Definition of Horizontal blanking time limitation */ | ||||||
|  |         /* Gradient (%/kHz) - default 600 */ | ||||||
|  | #define CVT_M_FACTOR 600 | ||||||
|  | 
 | ||||||
|  |         /* Offset (%) - default 40 */ | ||||||
|  | #define CVT_C_FACTOR 40 | ||||||
|  | 
 | ||||||
|  |         /* Blanking time scaling factor - default 128 */ | ||||||
|  | #define CVT_K_FACTOR 128 | ||||||
|  | 
 | ||||||
|  |         /* Scaling factor weighting - default 20 */ | ||||||
|  | #define CVT_J_FACTOR 20 | ||||||
|  | 
 | ||||||
|  | #define CVT_M_PRIME CVT_M_FACTOR * CVT_K_FACTOR / 256 | ||||||
|  | #define CVT_C_PRIME (CVT_C_FACTOR - CVT_J_FACTOR) * CVT_K_FACTOR / 256 + \ | ||||||
|  |         CVT_J_FACTOR | ||||||
|  | 
 | ||||||
|  |         /* 12. Find ideal blanking duty cycle from formula */ | ||||||
|  |         HBlankPercentage = CVT_C_PRIME - CVT_M_PRIME * HPeriod/1000.0; | ||||||
|  | 
 | ||||||
|  |         /* 13. Blanking time */ | ||||||
|  |         if (HBlankPercentage < 20) | ||||||
|  |             HBlankPercentage = 20; | ||||||
|  | 
 | ||||||
|  |         HBlank = Mode->HDisplay * HBlankPercentage/(100.0 - HBlankPercentage); | ||||||
|  |         HBlank -= HBlank % (2*CVT_H_GRANULARITY); | ||||||
|  |          | ||||||
|  |         /* 14. Find total number of pixels in a line. */ | ||||||
|  |         Mode->HTotal = Mode->HDisplay + HBlank; | ||||||
|  | 
 | ||||||
|  |         /* Fill in HSync values */ | ||||||
|  |         Mode->HSyncEnd = Mode->HDisplay + HBlank / 2; | ||||||
|  | 
 | ||||||
|  |         Mode->HSyncStart = Mode->HSyncEnd -  | ||||||
|  |             (Mode->HTotal * CVT_HSYNC_PERCENTAGE) / 100; | ||||||
|  |         Mode->HSyncStart += CVT_H_GRANULARITY -  | ||||||
|  |             Mode->HSyncStart % CVT_H_GRANULARITY; | ||||||
|  | 
 | ||||||
|  |         /* Fill in VSync values */ | ||||||
|  |         Mode->VSyncStart = Mode->VDisplay + CVT_MIN_V_PORCH; | ||||||
|  |         Mode->VSyncEnd = Mode->VSyncStart + VSync; | ||||||
|  | 
 | ||||||
|  |     } else { /* Reduced blanking */ | ||||||
|  |         /* Minimum vertical blanking interval time (µs) - default 460 */ | ||||||
|  | #define CVT_RB_MIN_VBLANK 460.0 | ||||||
|  | 
 | ||||||
|  |         /* Fixed number of clocks for horizontal sync */ | ||||||
|  | #define CVT_RB_H_SYNC 32.0 | ||||||
|  | 
 | ||||||
|  |         /* Fixed number of clocks for horizontal blanking */ | ||||||
|  | #define CVT_RB_H_BLANK 160.0 | ||||||
|  | 
 | ||||||
|  |         /* Fixed number of lines for vertical front porch - default 3 */ | ||||||
|  | #define CVT_RB_VFPORCH 3 | ||||||
|  | 
 | ||||||
|  |         int  VBILines; | ||||||
|  | 
 | ||||||
|  |         /* 8. Estimate Horizontal period. */ | ||||||
|  |         HPeriod = ((float) (1000000.0 / VFieldRate - CVT_RB_MIN_VBLANK)) /  | ||||||
|  |             (VDisplayRnd + 2*VMargin); | ||||||
|  | 
 | ||||||
|  |         /* 9. Find number of lines in vertical blanking */ | ||||||
|  |         VBILines = ((float) CVT_RB_MIN_VBLANK) / HPeriod + 1; | ||||||
|  | 
 | ||||||
|  |         /* 10. Check if vertical blanking is sufficient */ | ||||||
|  |         if (VBILines < (CVT_RB_VFPORCH + VSync + CVT_MIN_V_BPORCH)) | ||||||
|  |             VBILines = CVT_RB_VFPORCH + VSync + CVT_MIN_V_BPORCH; | ||||||
|  |          | ||||||
|  |         /* 11. Find total number of lines in vertical field */ | ||||||
|  |         Mode->VTotal = VDisplayRnd + 2 * VMargin + Interlace + VBILines; | ||||||
|  | 
 | ||||||
|  |         /* 12. Find total number of pixels in a line */ | ||||||
|  |         Mode->HTotal = Mode->HDisplay + CVT_RB_H_BLANK; | ||||||
|  | 
 | ||||||
|  |         /* Fill in HSync values */ | ||||||
|  |         Mode->HSyncEnd = Mode->HDisplay + CVT_RB_H_BLANK / 2; | ||||||
|  |         Mode->HSyncStart = Mode->HSyncEnd - CVT_RB_H_SYNC; | ||||||
|  | 
 | ||||||
|  |         /* Fill in VSync values */ | ||||||
|  |         Mode->VSyncStart = Mode->VDisplay + CVT_RB_VFPORCH; | ||||||
|  |         Mode->VSyncEnd = Mode->VSyncStart + VSync; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /* 15/13. Find pixel clock frequency (kHz for xf86) */ | ||||||
|  |     Mode->Clock = Mode->HTotal * 1000.0 / HPeriod; | ||||||
|  |     Mode->Clock -= Mode->Clock % CVT_CLOCK_STEP; | ||||||
|  | 
 | ||||||
|  |     /* 16/14. Find actual Horizontal Frequency (kHz) */ | ||||||
|  |     Mode->HSync = ((float) Mode->Clock) / ((float) Mode->HTotal); | ||||||
|  | 
 | ||||||
|  |     /* 17/15. Find actual Field rate */ | ||||||
|  |     Mode->VRefresh = (1000.0 * ((float) Mode->Clock)) /  | ||||||
|  |         ((float) (Mode->HTotal * Mode->VTotal)); | ||||||
|  | 
 | ||||||
|  |     /* 18/16. Find actual vertical frame frequency */ | ||||||
|  |     /* ignore - just set the mode flag for interlaced */ | ||||||
|  |     if (Interlaced) | ||||||
|  |         Mode->VTotal *= 2; | ||||||
|  | 
 | ||||||
|  |     { | ||||||
|  |         char  Name[256]; | ||||||
|  |         Name[0] = 0; | ||||||
|  | 
 | ||||||
|  |         snprintf(Name, 256, "%dx%d", HDisplay, VDisplay); | ||||||
|  | 
 | ||||||
|  |         Mode->name = xnfalloc(strlen(Name) + 1); | ||||||
|  |         memcpy(Mode->name, Name, strlen(Name) + 1); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (Reduced) | ||||||
|  |         Mode->Flags |= V_PHSYNC | V_NVSYNC; | ||||||
|  |     else | ||||||
|  |         Mode->Flags |= V_NHSYNC | V_PVSYNC; | ||||||
|  | 
 | ||||||
|  |     if (Interlaced) | ||||||
|  |         Mode->Flags |= V_INTERLACE; | ||||||
|  | 
 | ||||||
|  |     return Mode; | ||||||
|  | } | ||||||
|  | @ -1,4 +0,0 @@ | ||||||
| getconfig.1 |  | ||||||
| getconfig.1x |  | ||||||
| getconfig.5 |  | ||||||
| getconfig.5x |  | ||||||
|  | @ -1,56 +0,0 @@ | ||||||
| # Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
 |  | ||||||
| # 
 |  | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a
 |  | ||||||
| # copy of this software and associated documentation files (the
 |  | ||||||
| # "Software"), to deal in the Software without restriction, including
 |  | ||||||
| # without limitation the rights to use, copy, modify, merge, publish,
 |  | ||||||
| # distribute, and/or sell copies of the Software, and to permit persons
 |  | ||||||
| # to whom the Software is furnished to do so, provided that the above
 |  | ||||||
| # copyright notice(s) and this permission notice appear in all copies of
 |  | ||||||
| # the Software and that both the above copyright notice(s) and this
 |  | ||||||
| # permission notice appear in supporting documentation.
 |  | ||||||
| # 
 |  | ||||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 |  | ||||||
| # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 |  | ||||||
| # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
 |  | ||||||
| # OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 |  | ||||||
| # HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
 |  | ||||||
| # INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
 |  | ||||||
| # FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
 |  | ||||||
| # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 |  | ||||||
| # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 |  | ||||||
| # 
 |  | ||||||
| # Except as contained in this notice, the name of a copyright holder
 |  | ||||||
| # shall not be used in advertising or otherwise to promote the sale, use
 |  | ||||||
| # or other dealings in this Software without prior written authorization
 |  | ||||||
| # of the copyright holder.
 |  | ||||||
| # 
 |  | ||||||
| 
 |  | ||||||
| dist_bin_SCRIPTS = getconfig getconfig.pl |  | ||||||
| 
 |  | ||||||
| getconfigdir = $(libdir)/X11/getconfig |  | ||||||
| dist_getconfig_DATA = xorg.cfg cfg.sample |  | ||||||
| 
 |  | ||||||
| include $(top_srcdir)/cpprules.in |  | ||||||
| 
 |  | ||||||
| appmandir = $(APP_MAN_DIR) |  | ||||||
| appman_PRE = getconfig.man |  | ||||||
| appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@) |  | ||||||
| 
 |  | ||||||
| filemandir = $(FILE_MAN_DIR) |  | ||||||
| fileman_DATA = getconfig.$(FILE_MAN_SUFFIX) |  | ||||||
| 
 |  | ||||||
| getconfig.$(FILE_MAN_SUFFIX): cfg.man |  | ||||||
| 	-rm -f getconfig.$(FILE_MAN_SUFFIX) |  | ||||||
| 	$(LN_S) cfg.man getconfig.$(FILE_MAN_SUFFIX) |  | ||||||
| 
 |  | ||||||
| SUFFIXES += .$(APP_MAN_SUFFIX) .man |  | ||||||
| 
 |  | ||||||
| .man.$(APP_MAN_SUFFIX): |  | ||||||
| 	-rm -f $@ |  | ||||||
| 	$(LN_S) $< $@ |  | ||||||
| 
 |  | ||||||
| BUILT_SOURCES = $(appman_PRE) |  | ||||||
| CLEANFILES = $(appman_PRE) $(appman_DATA) $(fileman_DATA) cfg.man |  | ||||||
| 
 |  | ||||||
| EXTRA_DIST = cfg.man.pre getconfig.man.pre |  | ||||||
|  | @ -1,137 +0,0 @@ | ||||||
| .TH getconfig __filemansuffix__  __vendorversion__ |  | ||||||
| .SH NAME |  | ||||||
| getconfig - meta configuration files for getconfig(1) |  | ||||||
| .SH SYNOPSIS |  | ||||||
| .B \(**.cfg |  | ||||||
| .SH DESCRIPTION |  | ||||||
| .B getconfig |  | ||||||
| is a programmatic interface that is used by the |  | ||||||
| .B __xservername__ |  | ||||||
| server to get configuration information about video hardware when |  | ||||||
| operating without an |  | ||||||
| .B __xconfigfile__ |  | ||||||
| file. |  | ||||||
| .PP |  | ||||||
| This implementation of |  | ||||||
| .B getconfig |  | ||||||
| is written in perl.  It processes rules from meta-configuration files. |  | ||||||
| All meta-configuration files have a |  | ||||||
| .I .cfg |  | ||||||
| suffix. |  | ||||||
| .PP |  | ||||||
| Lines starting with a pound-sign (#) are comments, and are ignored. |  | ||||||
| Blank lines that consist only of white space are also treated as comments |  | ||||||
| and ignored. |  | ||||||
| .PP |  | ||||||
| The first non-comment line must be a signature string followed by |  | ||||||
| the file format version number.  The signature string is |  | ||||||
| .PP |  | ||||||
| .RS 4 |  | ||||||
| .nf |  | ||||||
| "Xorg getconfig rules file.\ \ Version: " |  | ||||||
| .fi |  | ||||||
| .RE |  | ||||||
| .PP |  | ||||||
| The currently defined version is "1.0".  Files that do not have the |  | ||||||
| correct signature string are ignored. |  | ||||||
| .PP |  | ||||||
| The remaining non-comment lines define rules.  The start of a new rule |  | ||||||
| is indicated by a line with no leading white space.  Subsequent lines |  | ||||||
| making up a rule must be indented with white space.  Logical lines within |  | ||||||
| a rule may be split over multiple physical lines by using the usual |  | ||||||
| continuation convention ('\e' at the end of the line).  The first logical |  | ||||||
| line of each rule is a perl expression.  It may be any valid perl |  | ||||||
| expression whose evaluated (with 'eval') result may be used as the |  | ||||||
| argument to a perl 'if' statement.  The second logical line should be |  | ||||||
| the name of the __xservername__ video driver to use when the rule is true, and |  | ||||||
| subsequent logical lines of each rule, if present, are additional |  | ||||||
| configuration output for the video device's |  | ||||||
| .B __xconfigfile__ |  | ||||||
| .B Device |  | ||||||
| section.  The driver name and additional lines of configuration information |  | ||||||
| are written to standard output when the rule is chosen as the successful |  | ||||||
| rule. |  | ||||||
| .PP |  | ||||||
| Pseudo rules consisting of perl expressions may be present in the file |  | ||||||
| for the purpose of defining custom perl variables or setting the weight |  | ||||||
| to use for the following rules.  Pseudo rules are rules that consist of |  | ||||||
| a single logical line only, and the are never candidates themselves for the |  | ||||||
| successful rule. |  | ||||||
| .PP |  | ||||||
| Several perl variables are pre-defined, and may be used within rules. |  | ||||||
| They include: |  | ||||||
| .PP |  | ||||||
| .RS 4 |  | ||||||
| .nf |  | ||||||
| .BR "$vendor                 " "PCI vendor ID" |  | ||||||
| .BR "$device                 " "PCI device ID" |  | ||||||
| .BR "$revision               " "PCI revision ID" |  | ||||||
| .BR "$subsys                 " "PCI subsystem ID" |  | ||||||
| .BR "$subsysVendor           " "PCI subsystem vendor ID" |  | ||||||
| .BR "$class                  " "PCI class" |  | ||||||
| .BR "$XorgVersion         " "Xorg version, as a 'v' string" |  | ||||||
| .BR "$XorgVersionNumeric  " "Xorg numeric version" |  | ||||||
| .BR "$XorgVersionMajor    " "Xorg major version" |  | ||||||
| .BR "$XorgVersionMinor    " "Xorg minor version" |  | ||||||
| .BR "$XorgVersionPatch    " "Xorg patch version" |  | ||||||
| .BR "$XorgVersionSnap     " "Xorg snap version" |  | ||||||
| .BR "$weight                 " "current rule weight" |  | ||||||
| .fi |  | ||||||
| .RE |  | ||||||
| .PP |  | ||||||
| The |  | ||||||
| .B $weight |  | ||||||
| variable determines the weight of the rules as they are processed.  The |  | ||||||
| weight for subsequent rules may be set with a pseudo rule that sets or |  | ||||||
| changes the value of |  | ||||||
| .BR $weight . |  | ||||||
| The default weight, and the weight used for built-in rules is 500.  The |  | ||||||
| meta-configuration files are processed in an unpredictable order.  The |  | ||||||
| weighting of the rules is used to determine their relative priority |  | ||||||
| .PP |  | ||||||
| After processing all of the rules, both built-in and those read from |  | ||||||
| the meta-configuration files, the |  | ||||||
| .B getconfig |  | ||||||
| program chooses as the successful rule the last and highest weighted |  | ||||||
| rule that evaluates to true. |  | ||||||
| .SH FILES |  | ||||||
| .I .cfg |  | ||||||
| files located in the search path.  The search path typically specified |  | ||||||
| by the |  | ||||||
| .B __xservername__ |  | ||||||
| server is: |  | ||||||
| .PP |  | ||||||
| .RS 4 |  | ||||||
| .nf |  | ||||||
| .I /etc/X11 |  | ||||||
| .I __projectroot__/etc/X11 |  | ||||||
| .I <modulepath> |  | ||||||
| .I __projectroot__/lib/X11/getconfig |  | ||||||
| .fi |  | ||||||
| .RE |  | ||||||
| .PP |  | ||||||
| where |  | ||||||
| .I <modulepath> |  | ||||||
| is the |  | ||||||
| .B __xservername__ |  | ||||||
| server's module search path. |  | ||||||
| .PP |  | ||||||
| .TP 30 |  | ||||||
| .I __projectroot__/lib/X11/getconfig/xorg.cfg |  | ||||||
| Default rules file that gets installed.  This file doesn't contain any |  | ||||||
| rules by default. |  | ||||||
| .TP 30 |  | ||||||
| .I __projectroot__/lib/X11/getconfig/cfg.sample |  | ||||||
| A sample rules file that gives some examples of what types of rules can |  | ||||||
| appear in rules files. |  | ||||||
| 
 |  | ||||||
| .SH "SEE ALSO" |  | ||||||
| getconfig(1), |  | ||||||
| __xservername__(__appmansuffix__), |  | ||||||
| __xconfigfile__(__filemansuffix__). |  | ||||||
| 
 |  | ||||||
| .SH AUTHORS |  | ||||||
| The __xservername__ automatic configuration support and the |  | ||||||
| .B getconfig |  | ||||||
| interface was written by David H. Dawes, with the support of X-Oz |  | ||||||
| Technologies for XFree86. |  | ||||||
|  | @ -1,110 +0,0 @@ | ||||||
| # $DHD: xc/programs/Xserver/hw/xfree86/getconfig/cfg.sample,v 1.2 2003/09/23 05:12:07 dawes Exp $ |  | ||||||
| 
 |  | ||||||
| # Some sample Xorg getconfig rules file. |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # The line below is the getconfig rules file signature, and must be the |  | ||||||
| # first non-blank, non-comment line. |  | ||||||
| # |  | ||||||
| 
 |  | ||||||
| Xorg Project getconfig rules file.  Version: 1.0 |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # Set the weight for the following rules.  This should be set, otherwise |  | ||||||
| # the previously set weight will get used, and you have no idea of knowing |  | ||||||
| # what that might be. |  | ||||||
| # |  | ||||||
| 
 |  | ||||||
| $weight = 1000 |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # Rules.  Rules consist of a condition (in perl code) followed by |  | ||||||
| # a driver name and optionally some additional strings.  The start of a |  | ||||||
| # rule is indicated by a line with no leading white space.  Subsequent |  | ||||||
| # lines making up a rule must be indented.  Logical lines may be split |  | ||||||
| # over multiple physical lines by using the usual continuation '\'. |  | ||||||
| # |  | ||||||
| # Rules that are not followed by a driver name may be used to do other |  | ||||||
| # things, like setting the weight as above. |  | ||||||
| # |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # Pre-defined variables include: |  | ||||||
| # |  | ||||||
| #   $vendor		PCI vendor ID |  | ||||||
| #   $device		PCI device ID |  | ||||||
| #   $revision		PCI revision ID |  | ||||||
| #   $subsys		PCI subsystem ID |  | ||||||
| #   $subsysVendor	PCI subsystem vendor ID |  | ||||||
| #   $class		PCI class |  | ||||||
| #   $XorgVersion	Xorg version, as a 'v' string. |  | ||||||
| # |  | ||||||
| # The Xorg version information is also available as the following: |  | ||||||
| # |  | ||||||
| #   $XorgVersionNumeric |  | ||||||
| #   $XorgVersionMajor |  | ||||||
| #   $XorgVersionMinor |  | ||||||
| #   $XorgVersionPatch |  | ||||||
| #   $XorgVersionSnap |  | ||||||
| #    |  | ||||||
| 
 |  | ||||||
| # Define a fake vendor ID for some sample rules. |  | ||||||
| 
 |  | ||||||
| $novendor = 0x10000 |  | ||||||
| $nodevice = 0x10000 |  | ||||||
| 
 |  | ||||||
| $vendor == $novendor |  | ||||||
| 	nodriver |  | ||||||
| 	Option "xx" |  | ||||||
| 	Videoram 1000 |  | ||||||
| 
 |  | ||||||
| # A rule with continued lines. |  | ||||||
| 
 |  | ||||||
| $vendor == $novendor && \ |  | ||||||
| $device == $nodevice  |  | ||||||
| 	nodriver2 |  | ||||||
| 	Option \ |  | ||||||
| 	"yy" |  | ||||||
| 
 |  | ||||||
| # Increase the weight of the following rules if the Xorg version is 4.3 or |  | ||||||
| # higher. |  | ||||||
| 
 |  | ||||||
| $weight++ if ($XorgVersion ge v4.3) |  | ||||||
| 
 |  | ||||||
| $vendor == $novendor |  | ||||||
| 	nodriver |  | ||||||
| 	Option "yy" |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # The weight can be changed at any times, and applies to rules that follow |  | ||||||
| # until changed again. |  | ||||||
| # |  | ||||||
| 
 |  | ||||||
| $weight = 100 |  | ||||||
| 
 |  | ||||||
| $vendor == $novendor && $XorgVersion eq v4.3.2.1 |  | ||||||
| 	nodriver3 |  | ||||||
| 
 |  | ||||||
| $weight = 600 |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # The following two examples use some real values. |  | ||||||
| # |  | ||||||
| 
 |  | ||||||
| # Example: make the default depth 24 for Radeon R200 and RV200 cards. |  | ||||||
| 
 |  | ||||||
| $vendor == 0x1002 && \ |  | ||||||
|     ($device >= 0x5148 && $device <= 0x514F || \ |  | ||||||
|      $device >= 0x5168 && $device <= 0x516C || \ |  | ||||||
|      $device == 0x4242 || \ |  | ||||||
|      $device >= 0x5157 && device <= 0x5158) |  | ||||||
| 	ati |  | ||||||
| 	Option "DefaultDepth" "24" |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| # Example: enable DRI for MGA G400 |  | ||||||
| 
 |  | ||||||
| $vendor == 0x102b && $device == 0x0525 |  | ||||||
| 	mga |  | ||||||
| 	Option "dri" |  | ||||||
| 
 |  | ||||||
|  | @ -1,43 +0,0 @@ | ||||||
| #!/bin/sh |  | ||||||
| 
 |  | ||||||
| # $XdotOrg$ |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # Copyright 2003 by David H. Dawes. |  | ||||||
| # Copyright 2003 by X-Oz Technologies. |  | ||||||
| # All rights reserved. |  | ||||||
| # |  | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a |  | ||||||
| # copy of this software and associated documentation files (the "Software"), |  | ||||||
| # to deal in the Software without restriction, including without limitation |  | ||||||
| # the rights to use, copy, modify, merge, publish, distribute, sublicense, |  | ||||||
| # and/or sell copies of the Software, and to permit persons to whom the |  | ||||||
| # Software is furnished to do so, subject to the following conditions: |  | ||||||
| #  |  | ||||||
| # The above copyright notice and this permission notice shall be included in |  | ||||||
| # all copies or substantial portions of the Software. |  | ||||||
| #  |  | ||||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL |  | ||||||
| # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR |  | ||||||
| # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |  | ||||||
| # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |  | ||||||
| # OTHER DEALINGS IN THE SOFTWARE. |  | ||||||
| #  |  | ||||||
| # Except as contained in this notice, the name of the copyright holder(s) |  | ||||||
| # and author(s) shall not be used in advertising or otherwise to promote |  | ||||||
| # the sale, use or other dealings in this Software without prior written |  | ||||||
| # authorization from the copyright holder(s) and author(s). |  | ||||||
| #  |  | ||||||
| # Author: David Dawes <dawes@XFree86.Org>. |  | ||||||
| # |  | ||||||
| 
 |  | ||||||
| # A simple wrapper to execute the real getconfig program.  So long as perl |  | ||||||
| # is in $PATH, we don't need to know where it is this way. |  | ||||||
| 
 |  | ||||||
| if echo $0 | grep / >/dev/null 2>&1; then |  | ||||||
| 	DIR=`dirname $0`/ |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| exec perl ${DIR}getconfig.pl "$@" |  | ||||||
|  | @ -1,98 +0,0 @@ | ||||||
| .TH getconfig 1 __vendorversion__ |  | ||||||
| .SH NAME |  | ||||||
| getconfig - get configuration information for the __xservername__ server |  | ||||||
| .SH SYNOPSIS |  | ||||||
| .B getconfig |  | ||||||
| .RI [ option |  | ||||||
| .IR ... ] |  | ||||||
| .SH DESCRIPTION |  | ||||||
| .B getconfig |  | ||||||
| is a programmatic interface that is used by the |  | ||||||
| .B __xservername__ |  | ||||||
| server to get configuration information about video hardware when |  | ||||||
| operating without an |  | ||||||
| .B __xconfigfile__ |  | ||||||
| file. |  | ||||||
| .PP |  | ||||||
| This implementation of |  | ||||||
| .B getconfig |  | ||||||
| is written in perl.  It processes a prioritized and ordered list of |  | ||||||
| rules supplied internally and from meta-configuration files.  The rules |  | ||||||
| are in the form of perl expressions. |  | ||||||
| .B getconfig |  | ||||||
| writes to standard output the __xconfigfile__-style configuration data |  | ||||||
| specified by the last highest priority rule that evaluates to true. |  | ||||||
| Information about the format of the meta-configuration files can be |  | ||||||
| found in the getconfig(__filemansuffix__) manual page. |  | ||||||
| .SH OPTIONS |  | ||||||
| .TP 8 |  | ||||||
| .BI \-I " search-path" |  | ||||||
| Specify the search path to use for meta-config files. |  | ||||||
| .I search-path |  | ||||||
| is a comma-separated list of directories to search.  Each directory in |  | ||||||
| the search path is searched for files with a |  | ||||||
| .I .cfg |  | ||||||
| suffix.  Each such file is opened and checked for a valid signature |  | ||||||
| string.  Rules are read from files with a valid signature string and |  | ||||||
| appended to the list of rules to evaluate.  If no search path is specified, |  | ||||||
| only the internally supplied configuration rules will be used. |  | ||||||
| .TP 8 |  | ||||||
| .B \-D |  | ||||||
| Enable debugging output. |  | ||||||
| .TP 8 |  | ||||||
| .B \-V |  | ||||||
| Print out the version information and exit. |  | ||||||
| .TP 8 |  | ||||||
| .BI \-X  |  | ||||||
| .BI __xservername__-version |  | ||||||
| Specify the __xservername__ version in numeric (integer) form. |  | ||||||
| .TP 8 |  | ||||||
| .BI \-b " subsys-id" |  | ||||||
| Specify the PCI subsystem ID of the video device. |  | ||||||
| .TP 8 |  | ||||||
| .BI \-c " class" |  | ||||||
| Specify the PCI class of the video device. |  | ||||||
| .TP 8 |  | ||||||
| .BI \-d " device-id" |  | ||||||
| Specify the PCI devide ID of the video device. |  | ||||||
| .TP 8 |  | ||||||
| .BI \-r " revision" |  | ||||||
| Specify the PCI revision of the video device. |  | ||||||
| .TP 8 |  | ||||||
| .BI \-s " subsysvendor-id" |  | ||||||
| Specify the PCI subsystem vendor ID of the video device. |  | ||||||
| .TP 8 |  | ||||||
| .BI \-v " vendor-id" |  | ||||||
| Specify the PCI vendor ID of the video device. |  | ||||||
| .SH FILES |  | ||||||
| .I .cfg |  | ||||||
| files located in the search path.  The search path typically specified |  | ||||||
| by the |  | ||||||
| .B __xservername__ |  | ||||||
| server is: |  | ||||||
| .PP |  | ||||||
| .RS 4 |  | ||||||
| .nf |  | ||||||
| .I /etc/X11 |  | ||||||
| .I __projectroot__/etc/X11 |  | ||||||
| .I <modulepath> |  | ||||||
| .I __projectroot__/lib/X11/getconfig |  | ||||||
| .fi |  | ||||||
| .RE |  | ||||||
| .PP |  | ||||||
| where |  | ||||||
| .I <modulepath> |  | ||||||
| is the |  | ||||||
| .B __xservername__ |  | ||||||
| server's module search path. |  | ||||||
| 
 |  | ||||||
| .SH "SEE ALSO" |  | ||||||
| getconfig(__filemansuffix__), |  | ||||||
| __xservername__(__appmansuffix__), |  | ||||||
| __xconfigfile__(__filemansuffix__). |  | ||||||
| 
 |  | ||||||
| .SH AUTHORS |  | ||||||
| The __xservername__ automatic configuration support and the |  | ||||||
| .B getconfig |  | ||||||
| interface was written by David H. Dawes, with the support of X-Oz |  | ||||||
| Technologies for XFree86. |  | ||||||
|  | @ -1,433 +0,0 @@ | ||||||
| #!/usr/bin/perl |  | ||||||
| 
 |  | ||||||
| # $DHD: xc/programs/Xserver/hw/xfree86/getconfig/getconfig.pl,v 1.13 2003/09/23 05:12:07 dawes Exp $ |  | ||||||
| # $XdotOrg: $ |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # Copyright 2003 by David H. Dawes. |  | ||||||
| # Copyright 2003 by X-Oz Technologies. |  | ||||||
| # All rights reserved. |  | ||||||
| # |  | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a |  | ||||||
| # copy of this software and associated documentation files (the "Software"), |  | ||||||
| # to deal in the Software without restriction, including without limitation |  | ||||||
| # the rights to use, copy, modify, merge, publish, distribute, sublicense, |  | ||||||
| # and/or sell copies of the Software, and to permit persons to whom the |  | ||||||
| # Software is furnished to do so, subject to the following conditions: |  | ||||||
| #  |  | ||||||
| # The above copyright notice and this permission notice shall be included in |  | ||||||
| # all copies or substantial portions of the Software. |  | ||||||
| #  |  | ||||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL |  | ||||||
| # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR |  | ||||||
| # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |  | ||||||
| # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |  | ||||||
| # OTHER DEALINGS IN THE SOFTWARE. |  | ||||||
| #  |  | ||||||
| # Except as contained in this notice, the name of the copyright holder(s) |  | ||||||
| # and author(s) shall not be used in advertising or otherwise to promote |  | ||||||
| # the sale, use or other dealings in this Software without prior written |  | ||||||
| # authorization from the copyright holder(s) and author(s). |  | ||||||
| #  |  | ||||||
| # Author: David Dawes <dawes@XFree86.Org>. |  | ||||||
| # |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # This script takes PCI id information, compares it against an ordered list |  | ||||||
| # of rules, and prints out the configuration information specified by the |  | ||||||
| # last matching rule. |  | ||||||
| # |  | ||||||
| # This script is called by xf86AutoConfig(). |  | ||||||
| # |  | ||||||
| 
 |  | ||||||
| # Command line processing. |  | ||||||
| 
 |  | ||||||
| $GetconfigVersion = v1.0; |  | ||||||
| 
 |  | ||||||
| $debug = 0; |  | ||||||
| 
 |  | ||||||
| $myname = $0; |  | ||||||
| $myname =~ s/.*\///; |  | ||||||
| 
 |  | ||||||
| $signature = "Xorg Foundation getconfig rules file.  Version: "; |  | ||||||
| 
 |  | ||||||
| while (@ARGV[0] =~ /^-[A-Za-z]$/) { |  | ||||||
|     $f = shift; |  | ||||||
|     SWITCH: { |  | ||||||
| 	if ($f eq "-D") { |  | ||||||
| 	    $debug = 1; |  | ||||||
| 	    last SWITCH; |  | ||||||
| 	} |  | ||||||
| 	if ($f eq "-I") { |  | ||||||
| 	    push(@searchPaths, split(/,/, shift)); |  | ||||||
| 	    last SWITCH; |  | ||||||
| 	} |  | ||||||
| 	if ($f eq "-V") { |  | ||||||
| 	    printf STDERR "$myname: Version %vd.\n", $GetconfigVersion; |  | ||||||
| 	    exit 0; |  | ||||||
| 	} |  | ||||||
| 	if ($f eq "-X") { |  | ||||||
| 	    $XorgVersionNumeric = shift; |  | ||||||
| 	    if (!defined($XorgVersionNumeric)) { |  | ||||||
| 		print STDERR "$myname: -X requires the Xorg version.\n"; |  | ||||||
| 		exit 1; |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 	if ($f eq "-b") { |  | ||||||
| 	    $subsys = oct(shift); |  | ||||||
| 	    if (!defined($subsys)) { |  | ||||||
| 		print STDERR "$myname: -b requires the subsys id.\n"; |  | ||||||
| 		exit 1; |  | ||||||
| 	    } |  | ||||||
| 	    last SWITCH; |  | ||||||
| 	} |  | ||||||
| 	if ($f eq "-c") { |  | ||||||
| 	    $class = oct(shift); |  | ||||||
| 	    if (!defined($class)) { |  | ||||||
| 		print STDERR "$myname: -c requires the class value.\n"; |  | ||||||
| 		exit 1; |  | ||||||
| 	    } |  | ||||||
| 	    last SWITCH; |  | ||||||
| 	} |  | ||||||
| 	if ($f eq "-d") { |  | ||||||
| 	    $device = oct(shift); |  | ||||||
| 	    if (!defined($device)) { |  | ||||||
| 		print STDERR "$myname: -d requires the device id.\n"; |  | ||||||
| 		exit 1; |  | ||||||
| 	    } |  | ||||||
| 	    last SWITCH; |  | ||||||
| 	} |  | ||||||
| 	if ($f eq "-r") { |  | ||||||
| 	    $revision = oct(shift); |  | ||||||
| 	    if (!defined($revision)) { |  | ||||||
| 		print STDERR "$myname: -r requires the device revision.\n"; |  | ||||||
| 		exit 1; |  | ||||||
| 	    } |  | ||||||
| 	    last SWITCH; |  | ||||||
| 	} |  | ||||||
| 	if ($f eq "-s") { |  | ||||||
| 	    $subsysVendor = oct(shift); |  | ||||||
| 	    if (!defined($subsysVendor)) { |  | ||||||
| 		print STDERR "$myname: -s requires the subsysVendor id.\n"; |  | ||||||
| 		exit 1; |  | ||||||
| 	    } |  | ||||||
| 	    last SWITCH; |  | ||||||
| 	} |  | ||||||
| 	if ($f eq "-v") { |  | ||||||
| 	    $vendor = oct(shift); |  | ||||||
| 	    if (!defined($vendor)) { |  | ||||||
| 		print STDERR "$myname: -v requires the vendor id.\n"; |  | ||||||
| 		exit 1; |  | ||||||
| 	    } |  | ||||||
| 	    last SWITCH; |  | ||||||
| 	} |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| printf STDERR "$myname: Version %vd.\n", $GetconfigVersion; |  | ||||||
| 
 |  | ||||||
| if (defined($XorgVersionNumeric)) { |  | ||||||
|     $XorgVersionMajor = $XorgVersionNumeric / 10000000; |  | ||||||
|     $XorgVersionMinor = ($XorgVersionNumeric % 10000000) / 100000; |  | ||||||
|     $XorgVersionPatch = ($XorgVersionNumeric % 100000) / 1000; |  | ||||||
|     $XorgVersionSnapshot = $XorgVersionNumeric % 1000; |  | ||||||
|     $XorgVersion = chr($XorgVersionMajor) . chr($XorgVersionMinor) . |  | ||||||
| 		chr($XorgVersionPatch) . chr($XorgVersionSnapshot); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| if ($debug) { |  | ||||||
|     printf STDERR "$myname: Xorg Version: %d, %d.%d.%d.%d, %vd.\n", |  | ||||||
| 	$XorgVersionNumeric, $XorgVersionMajor, $XorgVersionMinor, |  | ||||||
| 	$XorgVersionPatch, $XorgVersionSnapshot, $XorgVersion; |  | ||||||
| } else { |  | ||||||
|     printf STDERR "$myname: Xorg Version: %vd.\n", $XorgVersion; |  | ||||||
| } |  | ||||||
|    |  | ||||||
| 
 |  | ||||||
| # The rules here are just basic vendor ID to driver mappings. |  | ||||||
| # Ideally this is all that would be required.  More complicated configuration |  | ||||||
| # rules will be provided in external files. |  | ||||||
| 
 |  | ||||||
| # XXX This set of basic rules isn't complete yet. |  | ||||||
| 
 |  | ||||||
| @rules = ( |  | ||||||
| 
 |  | ||||||
| # Set the weight for the built-in rules. |  | ||||||
| ['$weight = 500'], |  | ||||||
| 
 |  | ||||||
| # APM |  | ||||||
| ['$vendor == 0x1142', |  | ||||||
| 	'apm'], |  | ||||||
| 
 |  | ||||||
| # ARK |  | ||||||
| ['$vendor == 0xedd8', |  | ||||||
| 	'apm'], |  | ||||||
| 
 |  | ||||||
| # AST |  | ||||||
| ['$vendor == 0x1a03', |  | ||||||
| 	'ast'], |  | ||||||
| 
 |  | ||||||
| # ATI |  | ||||||
| ['$vendor == 0x1002', |  | ||||||
| 	'ati'], |  | ||||||
| 
 |  | ||||||
| # Chips & Technologies |  | ||||||
| ['$vendor == 0x102c', |  | ||||||
| 	'chips'], |  | ||||||
| 
 |  | ||||||
| # Cirrus |  | ||||||
| ['$vendor == 0x1013', |  | ||||||
| 	'cirrus'], |  | ||||||
| 
 |  | ||||||
| # Intel |  | ||||||
| ['$vendor == 0x8086', |  | ||||||
| 	'i810'], |  | ||||||
| ['$vendor == 0x8086 && ($chipType == 0x00d1 || $chipType == 0x7800)', |  | ||||||
| 	'i740'], |  | ||||||
| 
 |  | ||||||
| # Matrox |  | ||||||
| ['$vendor == 0x102b', |  | ||||||
| 	'mga'], |  | ||||||
| 
 |  | ||||||
| # Neomagic |  | ||||||
| ['$vendor == 0x10c8', |  | ||||||
| 	'neomagic'], |  | ||||||
| 
 |  | ||||||
| # Number Nine |  | ||||||
| ['$vendor == 0x105d', |  | ||||||
| 	'i128'], |  | ||||||
| 
 |  | ||||||
| # NVIDIA |  | ||||||
| ['$vendor == 0x10de || $vendor == 0x12d2', |  | ||||||
| 	'nv'], |  | ||||||
| 
 |  | ||||||
| # S3 |  | ||||||
| ['$vendor == 0x5333 && ($device == 0x88d0 ||' . |  | ||||||
| 			'$device == 0x88d1 ||' . |  | ||||||
| 			'$device == 0x88f0 ||' . |  | ||||||
| 			'$device == 0x8811 ||' . |  | ||||||
| 			'$device == 0x8812 ||' . |  | ||||||
| 			'$device == 0x8814 ||' . |  | ||||||
| 			'$device == 0x8901)', |  | ||||||
| 	's3'], |  | ||||||
| 
 |  | ||||||
| # S3 virge |  | ||||||
| ['$vendor == 0x5333 && ($device == 0x5631 ||' . |  | ||||||
| 			'$device == 0x883d ||' . |  | ||||||
| 			'$device == 0x8a01 ||' . |  | ||||||
| 			'$device == 0x8a10 ||' . |  | ||||||
| 			'$device == 0x8c01 ||' . |  | ||||||
| 			'$device == 0x8c03 ||' . |  | ||||||
| 			'$device == 0x8904 ||' . |  | ||||||
| 			'$device == 0x8a13)', |  | ||||||
| 	's3virge'], |  | ||||||
| 
 |  | ||||||
| # S3 Savage |  | ||||||
| ['$vendor == 0x5333 && ($device >= 0x8a20 && $device <= 0x8a22 ||' . |  | ||||||
| 			'$device == 0x9102 ||' . |  | ||||||
| 			'$device >= 0x8c10 && $device <= 0x8c13 ||' . |  | ||||||
| 			'$device == 0x8a25 ||' . |  | ||||||
| 			'$device == 0x8a26 ||' . |  | ||||||
| 			'$device >= 0x8d01 && $device <= 0x8d04 ||' . |  | ||||||
| 			'$device >= 0x8c2a && $device <= 0x8c2f ||' . |  | ||||||
| 			'$device == 0x8c22 ||' . |  | ||||||
| 			'$device == 0x8c24 ||' . |  | ||||||
| 			'$device == 0x8c26)', |  | ||||||
| 	'savage'], |  | ||||||
| 
 |  | ||||||
| # SIS |  | ||||||
| ['$vendor == 0x1039', |  | ||||||
| 	'sis'], |  | ||||||
| 
 |  | ||||||
| # SMI |  | ||||||
| ['$vendor == 0x126f', |  | ||||||
| 	'siliconmotion'], |  | ||||||
| 
 |  | ||||||
| # 3Dfx |  | ||||||
| ['$vendor == 0x121a', |  | ||||||
| 	'tdfx'], |  | ||||||
| 
 |  | ||||||
| # 3Dlabs |  | ||||||
| ['$vendor == 0x3d3d', |  | ||||||
| 	'glint'], |  | ||||||
| 
 |  | ||||||
| # Trident |  | ||||||
| ['$vendor == 0x1023', |  | ||||||
| 	'trident'], |  | ||||||
| 
 |  | ||||||
| # Tseng Labs |  | ||||||
| ['$vendor == 0x100c', |  | ||||||
| 	'tseng'], |  | ||||||
| 
 |  | ||||||
| # VIA |  | ||||||
| ['$vendor == 0x1106', |  | ||||||
| 	'via'], |  | ||||||
| 
 |  | ||||||
| # VMware |  | ||||||
| ['$vendor == 0x15ad', |  | ||||||
| 	'vmware'], |  | ||||||
| 
 |  | ||||||
| ); |  | ||||||
| 
 |  | ||||||
| # Reverse the search path list, since the later rules have higher priority |  | ||||||
| # than earlier ones (weighting being equal). |  | ||||||
| 
 |  | ||||||
| @searchPaths = reverse(@searchPaths); |  | ||||||
| 
 |  | ||||||
| if ($debug) { |  | ||||||
|     $i = 0; |  | ||||||
|     for $path (@searchPaths) { |  | ||||||
| 	print STDERR "$myname: Search path $i is: \"$path\".\n"; |  | ||||||
| 	$i++; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| print STDERR "$myname: ", $#rules + 1, " built-in rule", plural($#rules + 1), |  | ||||||
| 			".\n"; |  | ||||||
| 
 |  | ||||||
| for $path (@searchPaths) { |  | ||||||
|     while (<$path/*.cfg>) { |  | ||||||
| 	@tmp = readRulesFile($_); |  | ||||||
| 	if (defined(@tmp[0])) { |  | ||||||
| 	    push @rules, @tmp; |  | ||||||
| 	} |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| if ($debug) { |  | ||||||
|     $i = 0; |  | ||||||
|     for $r (@rules) { |  | ||||||
| 	print STDERR "$myname: rule $i is: \'@$r\'.\n"; |  | ||||||
| 	$i++ |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| $i = 0; |  | ||||||
| $e = 0; |  | ||||||
| $weight = 0; |  | ||||||
| $w = 0; |  | ||||||
| for $r (@rules) { |  | ||||||
|     ($cond, $d, @o) = @$r; |  | ||||||
|     $result = eval $cond; |  | ||||||
|     if ($@) { |  | ||||||
| 	print STDERR "$myname: Error evaluating rule $i \'$cond\': $@"; |  | ||||||
| 	$e++; |  | ||||||
|     } |  | ||||||
|     if ($debug) { |  | ||||||
| 	print STDERR "$myname: rule $i \'$cond\' evaluates to \'$result\'.\n"; |  | ||||||
|     } |  | ||||||
|     if ($result && defined($d) && $weight >= $w) { |  | ||||||
| 	$driver = $d; |  | ||||||
| 	@opts = @o; |  | ||||||
| 	$w = $weight; |  | ||||||
|     } |  | ||||||
|     $i++; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| print STDERR "$myname: Evaluated $i rule", plural($i), |  | ||||||
| 		" with $e error", plural($e), ".\n"; |  | ||||||
| 
 |  | ||||||
| print STDERR "$myname: Weight of result is $w.\n"; |  | ||||||
| 
 |  | ||||||
| if ($debug) { |  | ||||||
|     if (defined($driver)) { |  | ||||||
| 	print STDERR "$myname: Driver is \'$driver\'.\n"; |  | ||||||
|     } else { |  | ||||||
| 	print STDERR "$myname: No driver.\n"; |  | ||||||
|     } |  | ||||||
|     if (defined(@opts)) { |  | ||||||
| 	print STDERR "$myname: options are:\n"; |  | ||||||
| 	for $opt (@opts) { |  | ||||||
| 	    print STDERR "\t$opt\n"; |  | ||||||
| 	} |  | ||||||
|     } else { |  | ||||||
| 	print STDERR "$myname: No options.\n"; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| print "$driver\n"; |  | ||||||
| for $opt (@opts) { |  | ||||||
|     print "$opt\n"; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| exit 0; |  | ||||||
| 
 |  | ||||||
| # Subroutines. |  | ||||||
| 
 |  | ||||||
| sub readRulesFile { |  | ||||||
|     my ($file) = @_; |  | ||||||
|     my $signatureOK = 0; |  | ||||||
|     my @r, @tmp; |  | ||||||
|     my $line, $cont, $prevcont, $fileversion; |  | ||||||
| 
 |  | ||||||
|     undef @tmp; |  | ||||||
|     undef @r; |  | ||||||
| 
 |  | ||||||
|     if (open(RF, "<$file")) { |  | ||||||
| 	$prevcont = 0; |  | ||||||
| 	while (<RF>) { |  | ||||||
| 	    chop; |  | ||||||
| 	    $line = $_; |  | ||||||
| 	    next if ($line =~ /^#/); |  | ||||||
| 	    next if ($line =~ /^\s*$/); |  | ||||||
| 	    if (!$signatureOK) { |  | ||||||
| 		if ($line  =~ /^$signature(.*)$/) { |  | ||||||
| 		    $fileversion = $1; |  | ||||||
| 		    $signatureOK = 1; |  | ||||||
| 		    print STDERR |  | ||||||
| 			"$myname: rules file \'$file\' has version $fileversion.\n"; |  | ||||||
| 		    next; |  | ||||||
| 		} |  | ||||||
| 	    } |  | ||||||
| 	    if (!$signatureOK) { |  | ||||||
| 		print STDERR "$myname: file \'$file\' has bad signature.\n"; |  | ||||||
| 		close(RF); |  | ||||||
| 		last; |  | ||||||
| 	    } |  | ||||||
| 	    $cont = 0; |  | ||||||
| 	    if ($line =~ s/\\\s*$//) { |  | ||||||
| 		$cont = 1; |  | ||||||
| 	    } |  | ||||||
| 	    if (!$prevcont && $line =~ /^\S+/) { |  | ||||||
| 		if (defined(@tmp[0])) { |  | ||||||
| 		    push(@r,[@tmp]); |  | ||||||
| 		} |  | ||||||
| 		undef @tmp; |  | ||||||
| 	    } |  | ||||||
| 	    if ($prevcont) { |  | ||||||
| 		push(@tmp, pop(@tmp) . $line); |  | ||||||
| 	    } else { |  | ||||||
| 		push(@tmp, $line); |  | ||||||
| 	    } |  | ||||||
| 	    $prevcont = $cont; |  | ||||||
| 	} |  | ||||||
| 	if (defined(@tmp[0])) { |  | ||||||
| 	    push(@r,[@tmp]); |  | ||||||
| 	} |  | ||||||
| 	if (!defined(@r[0])) { |  | ||||||
| 	    print STDERR "$myname: no rules in file \'$file\'.\n"; |  | ||||||
| 	} else { |  | ||||||
| 	    print STDERR "$myname: ", $#r + 1, |  | ||||||
| 			" rule", plural($#r + 1), |  | ||||||
| 			" added from file \'$file\'.\n"; |  | ||||||
| 	} |  | ||||||
|     } else { |  | ||||||
| 	print STDERR "$myname: cannot open file \'$file\'.\n"; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return @r; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| sub plural { |  | ||||||
|     my ($count) = @_; |  | ||||||
| 
 |  | ||||||
|     if ($count != 1) { |  | ||||||
| 	return "s"; |  | ||||||
|     } else { |  | ||||||
| 	return ""; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
|  | @ -1,50 +0,0 @@ | ||||||
| # $XdotOrg: xc/programs/Xserver/hw/xfree86/getconfig/xorg.cfg,v 1.2 2004/04/23 19:54:01 eich Exp $ |  | ||||||
| 
 |  | ||||||
| # Base Xorg getconfig rules file. |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # The line below is the getconfig rules file signature, and must be the |  | ||||||
| # first non-blank, non-comment line. |  | ||||||
| # |  | ||||||
| 
 |  | ||||||
| Xorg Foundation getconfig rules file.  Version: 1.0 |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # Set the weight for the following rules.  This should be set, otherwise |  | ||||||
| # the previously set weight will get used, and you have no idea of knowing |  | ||||||
| # what that might be. |  | ||||||
| # |  | ||||||
| 
 |  | ||||||
| $weight = 1000 |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # Rules.  Rules consist of a condition (in perl code) followed by |  | ||||||
| # a driver name and optionally some additional strings.  The start of a |  | ||||||
| # rule is indicated by a line with no leading white space.  subsequent |  | ||||||
| # lines making up a rule must be indented.  Logical lines may be split |  | ||||||
| # over multiple physical lines by using the usual continuation '\'. |  | ||||||
| # |  | ||||||
| # Rules that are not followed by a driver name may be used to do other |  | ||||||
| # things, like setting the weight as above. |  | ||||||
| # |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # Pre-defined variables include: |  | ||||||
| # |  | ||||||
| #   $vendor		PCI vendor ID |  | ||||||
| #   $device		PCI device ID |  | ||||||
| #   $revision		PCI revision ID |  | ||||||
| #   $subsys		PCI subsystem ID |  | ||||||
| #   $subsysVendor	PCI subsystem vendor ID |  | ||||||
| #   $class		PCI class |  | ||||||
| #   $XorgVersion	Xorg version, as a 'v' string. |  | ||||||
| # |  | ||||||
| # The Xorg version information is also available as the following: |  | ||||||
| # |  | ||||||
| #   $XorgVersionNumeric |  | ||||||
| #   $XorgVersionMajor |  | ||||||
| #   $XorgVersionMinor |  | ||||||
| #   $XorgVersionPatch |  | ||||||
| #   $XorgVersionSnap |  | ||||||
| #    |  | ||||||
| 
 |  | ||||||
|  | @ -92,7 +92,6 @@ extern unsigned long LoaderOptions; | ||||||
| 
 | 
 | ||||||
| /* Internal Functions */ | /* Internal Functions */ | ||||||
| void LoaderDuplicateSymbol(const char *, const int); | void LoaderDuplicateSymbol(const char *, const int); | ||||||
| int _LoaderHandleUnresolved(char *, char *); |  | ||||||
| char *_LoaderModuleToName(int); | char *_LoaderModuleToName(int); | ||||||
| int LoaderOpen(const char *, const char *, int, int *, int *, int *, int); | int LoaderOpen(const char *, const char *, int, int *, int *, int *, int); | ||||||
| int LoaderHandleOpen(int); | int LoaderHandleOpen(int); | ||||||
|  |  | ||||||
|  | @ -103,8 +103,6 @@ ModuleDescPtr AddSibling(ModuleDescPtr head, ModuleDescPtr new); | ||||||
| void LoaderSetPath(const char *path); | void LoaderSetPath(const char *path); | ||||||
| void LoaderSortExtensions(void); | void LoaderSortExtensions(void); | ||||||
| 
 | 
 | ||||||
| void LoaderShowStack(void); |  | ||||||
| void *LoaderSymbolHandle(const char *, int); |  | ||||||
| int LoaderUnload(int); | int LoaderUnload(int); | ||||||
| unsigned long LoaderGetModuleVersion(ModuleDescPtr mod); | unsigned long LoaderGetModuleVersion(ModuleDescPtr mod); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -367,6 +367,9 @@ _X_HIDDEN void *xfree86LookupTab[] = { | ||||||
|     SYMFUNC(xf86AllocateEntityPrivateIndex) |     SYMFUNC(xf86AllocateEntityPrivateIndex) | ||||||
|     SYMFUNC(xf86GetEntityPrivate) |     SYMFUNC(xf86GetEntityPrivate) | ||||||
| 
 | 
 | ||||||
|  |     /* xf86cvt.c */ | ||||||
|  |     SYMFUNC(xf86CVTMode) | ||||||
|  | 
 | ||||||
|     /* xf86Configure.c */ |     /* xf86Configure.c */ | ||||||
|     SYMFUNC(xf86AddDeviceToConfigure) |     SYMFUNC(xf86AddDeviceToConfigure) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -31,9 +31,10 @@ bin_PROGRAMS = cvt | ||||||
| INCLUDES = $(XORG_INCS) | INCLUDES = $(XORG_INCS) | ||||||
| DUMMYLIB_SRCDIR = $(XFREE86_SRCDIR)/dummylib | DUMMYLIB_SRCDIR = $(XFREE86_SRCDIR)/dummylib | ||||||
| 
 | 
 | ||||||
| cvt_SOURCES = cvt.c | # gah
 | ||||||
|  | cvt_SOURCES = cvt.c $(top_srcdir)/hw/xfree86/common/xf86cvt.c | ||||||
| cvt_CFLAGS = $(XORG_CFLAGS) | cvt_CFLAGS = $(XORG_CFLAGS) | ||||||
| cvt_LDADD = ../../dummylib/libdummy-nonserver.a | cvt_LDADD = $(top_builddir)/hw/xfree86/dummylib/libdummy-nonserver.a | ||||||
| 
 | 
 | ||||||
| man1_MANS = cvt.man | man1_MANS = cvt.man | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -25,269 +25,6 @@ | ||||||
| 
 | 
 | ||||||
| #include "xf86.h" | #include "xf86.h" | ||||||
| 
 | 
 | ||||||
| /*
 |  | ||||||
|  * Generate a CVT standard mode from HDisplay, VDisplay and VRefresh. |  | ||||||
|  * |  | ||||||
|  * These calculations are stolen from the CVT calculation spreadsheet written |  | ||||||
|  * by Graham Loveridge. He seems to be claiming no copyright and there seems to |  | ||||||
|  * be no license attached to this. He apparently just wants to see his name |  | ||||||
|  * mentioned. |  | ||||||
|  * |  | ||||||
|  * This file can be found at http://www.vesa.org/Public/CVT/CVTd6r1.xls
 |  | ||||||
|  * |  | ||||||
|  * Comments and structure corresponds to the comments and structure of the xls. |  | ||||||
|  * This should ease importing of future changes to the standard (not very |  | ||||||
|  * likely though). |  | ||||||
|  * |  | ||||||
|  * About margins; i'm sure that they are to be the bit between HDisplay and |  | ||||||
|  * HBlankStart, HBlankEnd and HTotal, VDisplay and VBlankStart, VBlankEnd and  |  | ||||||
|  * VTotal, where the overscan colour is shown. FB seems to call _all_ blanking |  | ||||||
|  * outside sync "margin" for some reason. Since we prefer seeing proper |  | ||||||
|  * blanking instead of the overscan colour, and since the Crtc* values will |  | ||||||
|  * probably get altered after us, we will disable margins altogether. With |  | ||||||
|  * these calculations, Margins will plainly expand H/VDisplay, and we don't |  | ||||||
|  * want that. -- libv |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| static DisplayModePtr |  | ||||||
| xf86CVTMode(int HDisplay, int VDisplay, float VRefresh, Bool Reduced, |  | ||||||
|             Bool Interlaced) |  | ||||||
| { |  | ||||||
|     DisplayModeRec  *Mode = xnfalloc(sizeof(DisplayModeRec)); |  | ||||||
| 
 |  | ||||||
|     /* 1) top/bottom margin size (% of height) - default: 1.8 */ |  | ||||||
| #define CVT_MARGIN_PERCENTAGE 1.8     |  | ||||||
| 
 |  | ||||||
|     /* 2) character cell horizontal granularity (pixels) - default 8 */ |  | ||||||
| #define CVT_H_GRANULARITY 8 |  | ||||||
| 
 |  | ||||||
|     /* 4) Minimum vertical porch (lines) - default 3 */ |  | ||||||
| #define CVT_MIN_V_PORCH 3 |  | ||||||
| 
 |  | ||||||
|     /* 4) Minimum number of vertical back porch lines - default 6 */ |  | ||||||
| #define CVT_MIN_V_BPORCH 6 |  | ||||||
| 
 |  | ||||||
|     /* Pixel Clock step (kHz) */ |  | ||||||
| #define CVT_CLOCK_STEP 250 |  | ||||||
| 
 |  | ||||||
|     Bool Margins = FALSE; |  | ||||||
|     float  VFieldRate, HPeriod; |  | ||||||
|     int  HDisplayRnd, HMargin; |  | ||||||
|     int  VDisplayRnd, VMargin, VSync; |  | ||||||
|     float  Interlace; /* Please rename this */ |  | ||||||
| 
 |  | ||||||
|     memset(Mode, 0, sizeof(DisplayModeRec)); |  | ||||||
| 
 |  | ||||||
|     /* CVT default is 60.0Hz */ |  | ||||||
|     if (!VRefresh) |  | ||||||
|         VRefresh = 60.0; |  | ||||||
| 
 |  | ||||||
|     /* 1. Required field rate */ |  | ||||||
|     if (Interlaced) |  | ||||||
|         VFieldRate = VRefresh * 2; |  | ||||||
|     else |  | ||||||
|         VFieldRate = VRefresh; |  | ||||||
| 
 |  | ||||||
|     /* 2. Horizontal pixels */ |  | ||||||
|     HDisplayRnd = HDisplay - (HDisplay % CVT_H_GRANULARITY); |  | ||||||
| 
 |  | ||||||
|     /* 3. Determine left and right borders */ |  | ||||||
|     if (Margins) { |  | ||||||
|         /* right margin is actually exactly the same as left */ |  | ||||||
|         HMargin = (((float) HDisplayRnd) * CVT_MARGIN_PERCENTAGE / 100.0); |  | ||||||
|         HMargin -= HMargin % CVT_H_GRANULARITY; |  | ||||||
|     } else |  | ||||||
|         HMargin = 0; |  | ||||||
| 
 |  | ||||||
|     /* 4. Find total active pixels */ |  | ||||||
|     Mode->HDisplay = HDisplayRnd + 2*HMargin; |  | ||||||
| 
 |  | ||||||
|     /* 5. Find number of lines per field */ |  | ||||||
|     if (Interlaced) |  | ||||||
|         VDisplayRnd = VDisplay / 2; |  | ||||||
|     else |  | ||||||
|         VDisplayRnd = VDisplay; |  | ||||||
| 
 |  | ||||||
|     /* 6. Find top and bottom margins */ |  | ||||||
|     /* nope. */ |  | ||||||
|     if (Margins) |  | ||||||
|         /* top and bottom margins are equal again. */ |  | ||||||
|         VMargin = (((float) VDisplayRnd) * CVT_MARGIN_PERCENTAGE / 100.0); |  | ||||||
|     else |  | ||||||
|         VMargin = 0; |  | ||||||
| 
 |  | ||||||
|     Mode->VDisplay = VDisplay + 2*VMargin; |  | ||||||
| 
 |  | ||||||
|     /* 7. Interlace */ |  | ||||||
|     if (Interlaced) |  | ||||||
|         Interlace = 0.5; |  | ||||||
|     else |  | ||||||
|         Interlace = 0.0; |  | ||||||
| 
 |  | ||||||
|     /* Determine VSync Width from aspect ratio */ |  | ||||||
|     if (!(VDisplay % 3) && ((VDisplay * 4 / 3) == HDisplay)) |  | ||||||
|         VSync = 4; |  | ||||||
|     else if (!(VDisplay % 9) && ((VDisplay * 16 / 9) == HDisplay)) |  | ||||||
|         VSync = 5; |  | ||||||
|     else if (!(VDisplay % 10) && ((VDisplay * 16 / 10) == HDisplay)) |  | ||||||
|         VSync = 6; |  | ||||||
|     else if (!(VDisplay % 4) && ((VDisplay * 5 / 4) == HDisplay)) |  | ||||||
|         VSync = 7; |  | ||||||
|     else if (!(VDisplay % 9) && ((VDisplay * 15 / 9) == HDisplay)) |  | ||||||
|         VSync = 7; |  | ||||||
|     else /* Custom */ |  | ||||||
|         VSync = 10; |  | ||||||
| 
 |  | ||||||
|     if (!Reduced) { /* simplified GTF calculation */ |  | ||||||
| 
 |  | ||||||
|         /* 4) Minimum time of vertical sync + back porch interval (µs) 
 |  | ||||||
|          * default 550.0 */ |  | ||||||
| #define CVT_MIN_VSYNC_BP 550.0 |  | ||||||
| 
 |  | ||||||
|         /* 3) Nominal HSync width (% of line period) - default 8 */ |  | ||||||
| #define CVT_HSYNC_PERCENTAGE 8 |  | ||||||
| 
 |  | ||||||
|         float  HBlankPercentage; |  | ||||||
|         int  VSyncAndBackPorch, VBackPorch; |  | ||||||
|         int  HBlank; |  | ||||||
| 
 |  | ||||||
|         /* 8. Estimated Horizontal period */ |  | ||||||
|         HPeriod = ((float) (1000000.0 / VFieldRate - CVT_MIN_VSYNC_BP)) /  |  | ||||||
|             (VDisplayRnd + 2 * VMargin + CVT_MIN_V_PORCH + Interlace); |  | ||||||
| 
 |  | ||||||
|         /* 9. Find number of lines in sync + backporch */ |  | ||||||
|         if (((int)(CVT_MIN_VSYNC_BP / HPeriod) + 1) < (VSync + CVT_MIN_V_PORCH)) |  | ||||||
|             VSyncAndBackPorch = VSync + CVT_MIN_V_PORCH; |  | ||||||
|         else |  | ||||||
|             VSyncAndBackPorch = (int)(CVT_MIN_VSYNC_BP / HPeriod) + 1; |  | ||||||
| 
 |  | ||||||
|         /* 10. Find number of lines in back porch */ |  | ||||||
|         VBackPorch = VSyncAndBackPorch - VSync; |  | ||||||
| 
 |  | ||||||
|         /* 11. Find total number of lines in vertical field */ |  | ||||||
|         Mode->VTotal = VDisplayRnd + 2 * VMargin + VSyncAndBackPorch + Interlace |  | ||||||
|             + CVT_MIN_V_PORCH; |  | ||||||
| 
 |  | ||||||
|         /* 5) Definition of Horizontal blanking time limitation */ |  | ||||||
|         /* Gradient (%/kHz) - default 600 */ |  | ||||||
| #define CVT_M_FACTOR 600 |  | ||||||
| 
 |  | ||||||
|         /* Offset (%) - default 40 */ |  | ||||||
| #define CVT_C_FACTOR 40 |  | ||||||
| 
 |  | ||||||
|         /* Blanking time scaling factor - default 128 */ |  | ||||||
| #define CVT_K_FACTOR 128 |  | ||||||
| 
 |  | ||||||
|         /* Scaling factor weighting - default 20 */ |  | ||||||
| #define CVT_J_FACTOR 20 |  | ||||||
| 
 |  | ||||||
| #define CVT_M_PRIME CVT_M_FACTOR * CVT_K_FACTOR / 256 |  | ||||||
| #define CVT_C_PRIME (CVT_C_FACTOR - CVT_J_FACTOR) * CVT_K_FACTOR / 256 + \ |  | ||||||
|         CVT_J_FACTOR |  | ||||||
| 
 |  | ||||||
|         /* 12. Find ideal blanking duty cycle from formula */ |  | ||||||
|         HBlankPercentage = CVT_C_PRIME - CVT_M_PRIME * HPeriod/1000.0; |  | ||||||
| 
 |  | ||||||
|         /* 13. Blanking time */ |  | ||||||
|         if (HBlankPercentage < 20) |  | ||||||
|             HBlankPercentage = 20; |  | ||||||
| 
 |  | ||||||
|         HBlank = Mode->HDisplay * HBlankPercentage/(100.0 - HBlankPercentage); |  | ||||||
|         HBlank -= HBlank % (2*CVT_H_GRANULARITY); |  | ||||||
|          |  | ||||||
|         /* 14. Find total number of pixels in a line. */ |  | ||||||
|         Mode->HTotal = Mode->HDisplay + HBlank; |  | ||||||
| 
 |  | ||||||
|         /* Fill in HSync values */ |  | ||||||
|         Mode->HSyncEnd = Mode->HDisplay + HBlank / 2; |  | ||||||
| 
 |  | ||||||
|         Mode->HSyncStart = Mode->HSyncEnd -  |  | ||||||
|             (Mode->HTotal * CVT_HSYNC_PERCENTAGE) / 100; |  | ||||||
|         Mode->HSyncStart += CVT_H_GRANULARITY -  |  | ||||||
|             Mode->HSyncStart % CVT_H_GRANULARITY; |  | ||||||
| 
 |  | ||||||
|         /* Fill in VSync values */ |  | ||||||
|         Mode->VSyncStart = Mode->VDisplay + CVT_MIN_V_PORCH; |  | ||||||
|         Mode->VSyncEnd = Mode->VSyncStart + VSync; |  | ||||||
| 
 |  | ||||||
|     } else { /* Reduced blanking */ |  | ||||||
|         /* Minimum vertical blanking interval time (µs) - default 460 */ |  | ||||||
| #define CVT_RB_MIN_VBLANK 460.0 |  | ||||||
| 
 |  | ||||||
|         /* Fixed number of clocks for horizontal sync */ |  | ||||||
| #define CVT_RB_H_SYNC 32.0 |  | ||||||
| 
 |  | ||||||
|         /* Fixed number of clocks for horizontal blanking */ |  | ||||||
| #define CVT_RB_H_BLANK 160.0 |  | ||||||
| 
 |  | ||||||
|         /* Fixed number of lines for vertical front porch - default 3 */ |  | ||||||
| #define CVT_RB_VFPORCH 3 |  | ||||||
| 
 |  | ||||||
|         int  VBILines; |  | ||||||
| 
 |  | ||||||
|         /* 8. Estimate Horizontal period. */ |  | ||||||
|         HPeriod = ((float) (1000000.0 / VFieldRate - CVT_RB_MIN_VBLANK)) /  |  | ||||||
|             (VDisplayRnd + 2*VMargin); |  | ||||||
| 
 |  | ||||||
|         /* 9. Find number of lines in vertical blanking */ |  | ||||||
|         VBILines = ((float) CVT_RB_MIN_VBLANK) / HPeriod + 1; |  | ||||||
| 
 |  | ||||||
|         /* 10. Check if vertical blanking is sufficient */ |  | ||||||
|         if (VBILines < (CVT_RB_VFPORCH + VSync + CVT_MIN_V_BPORCH)) |  | ||||||
|             VBILines = CVT_RB_VFPORCH + VSync + CVT_MIN_V_BPORCH; |  | ||||||
|          |  | ||||||
|         /* 11. Find total number of lines in vertical field */ |  | ||||||
|         Mode->VTotal = VDisplayRnd + 2 * VMargin + Interlace + VBILines; |  | ||||||
| 
 |  | ||||||
|         /* 12. Find total number of pixels in a line */ |  | ||||||
|         Mode->HTotal = Mode->HDisplay + CVT_RB_H_BLANK; |  | ||||||
| 
 |  | ||||||
|         /* Fill in HSync values */ |  | ||||||
|         Mode->HSyncEnd = Mode->HDisplay + CVT_RB_H_BLANK / 2; |  | ||||||
|         Mode->HSyncStart = Mode->HSyncEnd - CVT_RB_H_SYNC; |  | ||||||
| 
 |  | ||||||
|         /* Fill in VSync values */ |  | ||||||
|         Mode->VSyncStart = Mode->VDisplay + CVT_RB_VFPORCH; |  | ||||||
|         Mode->VSyncEnd = Mode->VSyncStart + VSync; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /* 15/13. Find pixel clock frequency (kHz for xf86) */ |  | ||||||
|     Mode->Clock = Mode->HTotal * 1000.0 / HPeriod; |  | ||||||
|     Mode->Clock -= Mode->Clock % CVT_CLOCK_STEP; |  | ||||||
| 
 |  | ||||||
|     /* 16/14. Find actual Horizontal Frequency (kHz) */ |  | ||||||
|     Mode->HSync = ((float) Mode->Clock) / ((float) Mode->HTotal); |  | ||||||
| 
 |  | ||||||
|     /* 17/15. Find actual Field rate */ |  | ||||||
|     Mode->VRefresh = (1000.0 * ((float) Mode->Clock)) /  |  | ||||||
|         ((float) (Mode->HTotal * Mode->VTotal)); |  | ||||||
| 
 |  | ||||||
|     /* 18/16. Find actual vertical frame frequency */ |  | ||||||
|     /* ignore - just set the mode flag for interlaced */ |  | ||||||
|     if (Interlaced) |  | ||||||
|         Mode->VTotal *= 2; |  | ||||||
| 
 |  | ||||||
|     { |  | ||||||
|         char  Name[256]; |  | ||||||
|         Name[0] = 0; |  | ||||||
| 
 |  | ||||||
|         snprintf(Name, 256, "%dx%d", HDisplay, VDisplay); |  | ||||||
| 
 |  | ||||||
|         Mode->name = xnfalloc(strlen(Name) + 1); |  | ||||||
|         memcpy(Mode->name, Name, strlen(Name) + 1); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (Reduced) |  | ||||||
|         Mode->Flags |= V_PHSYNC | V_NVSYNC; |  | ||||||
|     else |  | ||||||
|         Mode->Flags |= V_NHSYNC | V_PVSYNC; |  | ||||||
| 
 |  | ||||||
|     if (Interlaced) |  | ||||||
|         Mode->Flags |= V_INTERLACE; |  | ||||||
| 
 |  | ||||||
|     return Mode; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|  * Quickly check wether this is a CVT standard mode. |  * Quickly check wether this is a CVT standard mode. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | @ -30,8 +30,10 @@ DIX_SRCS = \ | ||||||
| XKBFILE_SRCS = \
 | XKBFILE_SRCS = \
 | ||||||
|         maprules.c \
 |         maprules.c \
 | ||||||
|         xkmread.c \
 |         xkmread.c \
 | ||||||
|  |         xkbtext.c \
 | ||||||
|         xkbfmisc.c \
 |         xkbfmisc.c \
 | ||||||
|         xkberrs.c |         xkberrs.c \
 | ||||||
|  |         xkbout.c | ||||||
| 
 | 
 | ||||||
| X11_SRCS = \
 | X11_SRCS = \
 | ||||||
|         XKBMisc.c \
 |         XKBMisc.c \
 | ||||||
|  |  | ||||||
							
								
								
									
										429
									
								
								xkb/xkbfmisc.c
								
								
								
								
							
							
						
						
									
										429
									
								
								xkb/xkbfmisc.c
								
								
								
								
							|  | @ -48,16 +48,185 @@ | ||||||
| #include <X11/extensions/XKBgeom.h> | #include <X11/extensions/XKBgeom.h> | ||||||
| #include "xkb.h" | #include "xkb.h" | ||||||
| 
 | 
 | ||||||
|  | unsigned | ||||||
|  | _XkbKSCheckCase(KeySym ks) | ||||||
|  | { | ||||||
|  | unsigned	set,rtrn; | ||||||
|  | 
 | ||||||
|  |     set= (ks & (~0xff)) >> 8; | ||||||
|  |     rtrn= 0; | ||||||
|  |     switch (set) { | ||||||
|  | 	case 0:		/* latin 1 */ | ||||||
|  | 	    if (((ks>=XK_A)&&(ks<=XK_Z))|| | ||||||
|  | 		((ks>=XK_Agrave)&&(ks<=XK_THORN)&&(ks!=XK_multiply))) { | ||||||
|  | 		rtrn|= _XkbKSUpper; | ||||||
|  | 	    } | ||||||
|  | 	    if (((ks>=XK_a)&&(ks<=XK_z))|| | ||||||
|  | 		((ks>=XK_agrave)&&(ks<=XK_ydiaeresis))) { | ||||||
|  | 		rtrn|= _XkbKSLower; | ||||||
|  | 	    } | ||||||
|  | 	    break; | ||||||
|  | 	case 1:		/* latin 2 */ | ||||||
|  | 	    if (((ks>=XK_Aogonek)&&(ks<=XK_Zabovedot)&&(ks!=XK_breve))|| | ||||||
|  | 		((ks>=XK_Racute)&&(ks<=XK_Tcedilla))) { | ||||||
|  | 		rtrn|= _XkbKSUpper; | ||||||
|  | 	    } | ||||||
|  | 	    if (((ks>=XK_aogonek)&&(ks<=XK_zabovedot)&&(ks!=XK_caron))|| | ||||||
|  | 		((ks>=XK_racute)&&(ks<=XK_tcedilla))) { | ||||||
|  | 		rtrn|= _XkbKSLower; | ||||||
|  | 	    } | ||||||
|  | 	    break; | ||||||
|  | 	case 2:		/* latin 3 */ | ||||||
|  | 	    if (((ks>=XK_Hstroke)&&(ks<=XK_Jcircumflex))|| | ||||||
|  | 		((ks>=XK_Cabovedot)&&(ks<=XK_Scircumflex))) { | ||||||
|  | 		rtrn|= _XkbKSUpper; | ||||||
|  | 	    } | ||||||
|  | 	    if (((ks>=XK_hstroke)&&(ks<=XK_jcircumflex))|| | ||||||
|  | 		((ks>=XK_cabovedot)&&(ks<=XK_scircumflex))) { | ||||||
|  | 		rtrn|= _XkbKSLower; | ||||||
|  | 	    } | ||||||
|  | 	    break; | ||||||
|  | 	case 3:		/* latin 4 */ | ||||||
|  | 	    if (((ks>=XK_Rcedilla)&&(ks<=XK_Tslash))|| | ||||||
|  | 	        (ks==XK_ENG)|| | ||||||
|  | 		((ks>=XK_Amacron)&&(ks<=XK_Umacron))) { | ||||||
|  | 		rtrn|= _XkbKSUpper; | ||||||
|  | 	    } | ||||||
|  | 	    if (((ks>=XK_rcedilla)&&(ks<=XK_tslash))|| | ||||||
|  | 	        (ks==XK_eng)|| | ||||||
|  | 		((ks>=XK_amacron)&&(ks<=XK_umacron))) { | ||||||
|  | 		rtrn|= _XkbKSLower; | ||||||
|  | 	    } | ||||||
|  | 	    break; | ||||||
|  | 	case 18:		/* latin 8 */ | ||||||
|  | 	    if ((ks==XK_Babovedot)|| | ||||||
|  |                 ((ks>=XK_Dabovedot)&&(ks<=XK_Wacute))|| | ||||||
|  | 		((ks>=XK_Ygrave)&&(ks<=XK_Fabovedot))|| | ||||||
|  | 	        (ks==XK_Mabovedot)|| | ||||||
|  | 	        (ks==XK_Pabovedot)|| | ||||||
|  | 	        (ks==XK_Sabovedot)|| | ||||||
|  | 	        (ks==XK_Wdiaeresis)|| | ||||||
|  | 		((ks>=XK_Wcircumflex)&&(ks<=XK_Ycircumflex))) { | ||||||
|  | 		rtrn|= _XkbKSUpper; | ||||||
|  | 	    } | ||||||
|  | 	    if ((ks==XK_babovedot)|| | ||||||
|  | 	        (ks==XK_dabovedot)|| | ||||||
|  | 	        (ks==XK_fabovedot)|| | ||||||
|  | 	        (ks==XK_mabovedot)|| | ||||||
|  |                 ((ks>=XK_wgrave)&&(ks<=XK_wacute))|| | ||||||
|  | 	        (ks==XK_ygrave)|| | ||||||
|  | 		((ks>=XK_wdiaeresis)&&(ks<=XK_ycircumflex))) { | ||||||
|  | 		rtrn|= _XkbKSLower; | ||||||
|  | 	    } | ||||||
|  | 	    break; | ||||||
|  | 	case 19:		/* latin 9 */ | ||||||
|  | 	    if ((ks==XK_OE)||(ks==XK_Ydiaeresis)) { | ||||||
|  | 		rtrn|= _XkbKSUpper; | ||||||
|  | 	    } | ||||||
|  | 	    if (ks==XK_oe) { | ||||||
|  | 		rtrn|= _XkbKSLower; | ||||||
|  | 	    } | ||||||
|  | 	    break; | ||||||
|  |     } | ||||||
|  |     return rtrn; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /***===================================================================***/ | ||||||
|  | 
 | ||||||
|  | Bool | ||||||
|  | XkbLookupGroupAndLevel(	XkbDescPtr 	xkb, | ||||||
|  | 			int 		key, | ||||||
|  | 			int *		mods_inout, | ||||||
|  | 			int *		grp_inout, | ||||||
|  | 			int *		lvl_rtrn) | ||||||
|  | { | ||||||
|  | int		nG,eG; | ||||||
|  | 
 | ||||||
|  |     if ((!xkb)||(!XkbKeycodeInRange(xkb,key))||(!grp_inout)) | ||||||
|  | 	return False; | ||||||
|  | 
 | ||||||
|  |     nG= XkbKeyNumGroups(xkb,key); | ||||||
|  |     eG= *grp_inout; | ||||||
|  | 
 | ||||||
|  |     if ( nG==0 ) { | ||||||
|  | 	*grp_inout= 0; | ||||||
|  | 	if (lvl_rtrn!=NULL) | ||||||
|  | 	    *lvl_rtrn= 0; | ||||||
|  | 	return False; | ||||||
|  |     } | ||||||
|  |     else if ( nG==1 ) { | ||||||
|  | 	eG= 0; | ||||||
|  |     } | ||||||
|  |     else if ( eG>=nG ) { | ||||||
|  | 	unsigned gI= XkbKeyGroupInfo(xkb,key); | ||||||
|  | 	switch (XkbOutOfRangeGroupAction(gI)) { | ||||||
|  | 	    default: | ||||||
|  | 		eG %= nG; | ||||||
|  | 		break; | ||||||
|  | 	    case XkbClampIntoRange: | ||||||
|  | 		eG = nG-1; | ||||||
|  | 		break; | ||||||
|  | 	    case XkbRedirectIntoRange: | ||||||
|  | 		eG = XkbOutOfRangeGroupNumber(gI); | ||||||
|  | 		if (eG>=nG) | ||||||
|  | 		    eG= 0; | ||||||
|  | 		break; | ||||||
|  | 	} | ||||||
|  |     } | ||||||
|  |     *grp_inout= eG; | ||||||
|  |     if (mods_inout!=NULL) { | ||||||
|  | 	XkbKeyTypePtr	type; | ||||||
|  | 	int		preserve; | ||||||
|  | 
 | ||||||
|  | 	type = XkbKeyKeyType(xkb,key,eG); | ||||||
|  | 	if (lvl_rtrn!=NULL) | ||||||
|  | 	    *lvl_rtrn= 0; | ||||||
|  | 	preserve= 0; | ||||||
|  | 	if (type->map) { /* find the shift level */ | ||||||
|  | 	    register int i; | ||||||
|  | 	    register XkbKTMapEntryPtr entry; | ||||||
|  | 	    for (i=0,entry=type->map;i<type->map_count;i++,entry++) { | ||||||
|  | 		if ((entry->active)&& | ||||||
|  | 			(((*mods_inout)&type->mods.mask)==entry->mods.mask)){ | ||||||
|  | 		    if (lvl_rtrn!=NULL) | ||||||
|  | 			*lvl_rtrn= entry->level; | ||||||
|  | 		    if (type->preserve) | ||||||
|  | 			preserve= type->preserve[i].mask; | ||||||
|  | 		    break; | ||||||
|  | 		} | ||||||
|  | 	    } | ||||||
|  | 	} | ||||||
|  | 	(*mods_inout)&= ~(type->mods.mask&(~preserve)); | ||||||
|  |     } | ||||||
|  |     return True; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /***===================================================================***/ | /***===================================================================***/ | ||||||
| 
 | 
 | ||||||
| static Bool | static Bool | ||||||
| XkbWriteSectionFromName(FILE *file,char *sectionName,char *name) | XkbWriteSectionFromName(FILE *file,char *sectionName,char *name) | ||||||
| { | { | ||||||
|     fprintf(file,"    xkb_%-20s { include \"%s\" };\n",sectionName,name); |     fprintf(file,"    xkb_%-20s { include \"%s\" };\n",sectionName,name); | ||||||
|     ErrorF("    xkb_%-20s { include \"%s\" };\n",sectionName,name); |  | ||||||
|     return True; |     return True; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #define	NEED_DESC(n) ((!n)||((n)[0]=='+')||((n)[0]=='|')||(strchr((n),'%'))) | ||||||
|  | #define	COMPLETE(n)  ((n)&&(!NEED_DESC(n))) | ||||||
|  | 
 | ||||||
|  | /* ARGSUSED */ | ||||||
|  | static void | ||||||
|  | _AddIncl(	FILE *		file, | ||||||
|  | 		XkbFileInfo *	result, | ||||||
|  | 		Bool 		topLevel, | ||||||
|  | 		Bool 		showImplicit, | ||||||
|  | 		int 		index, | ||||||
|  | 		void *		priv) | ||||||
|  | { | ||||||
|  |     if ((priv)&&(strcmp((char *)priv,"%")!=0)) | ||||||
|  | 	fprintf(file,"    include \"%s\"\n",(char *)priv); | ||||||
|  |     return; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| Bool | Bool | ||||||
| XkbWriteXKBKeymapForNames(	FILE *			file, | XkbWriteXKBKeymapForNames(	FILE *			file, | ||||||
| 				XkbComponentNamesPtr	names, | 				XkbComponentNamesPtr	names, | ||||||
|  | @ -66,29 +235,229 @@ XkbWriteXKBKeymapForNames(	FILE *			file, | ||||||
| 				unsigned		want, | 				unsigned		want, | ||||||
| 				unsigned		need) | 				unsigned		need) | ||||||
| { | { | ||||||
|     if (!names || (!names->keycodes && !names->types && !names->compat && | char *		name,*tmp; | ||||||
|                    !names->symbols && !names->geometry)) | unsigned	complete; | ||||||
|  | XkbNamesPtr	old_names; | ||||||
|  | int		multi_section; | ||||||
|  | unsigned	wantNames,wantConfig,wantDflts; | ||||||
|  | XkbFileInfo	finfo; | ||||||
|  | 
 | ||||||
|  |     bzero(&finfo,sizeof(XkbFileInfo)); | ||||||
|  | 
 | ||||||
|  |     complete= 0; | ||||||
|  |     if ((name=names->keymap)==NULL)	name= "default"; | ||||||
|  |     if (COMPLETE(names->keycodes))	complete|= XkmKeyNamesMask; | ||||||
|  |     if (COMPLETE(names->types))		complete|= XkmTypesMask; | ||||||
|  |     if (COMPLETE(names->compat))	complete|= XkmCompatMapMask; | ||||||
|  |     if (COMPLETE(names->symbols))	complete|= XkmSymbolsMask; | ||||||
|  |     if (COMPLETE(names->geometry))	complete|= XkmGeometryMask; | ||||||
|  |     want|= (complete|need); | ||||||
|  |     if (want&XkmSymbolsMask) | ||||||
|  | 	want|= XkmKeyNamesMask|XkmTypesMask; | ||||||
|  | 
 | ||||||
|  |     if (want==0) | ||||||
| 	return False; | 	return False; | ||||||
| 
 | 
 | ||||||
|     fprintf(file, "xkb_keymap \"%s\" {\n", names->keymap ? names->keymap : |     if (xkb!=NULL) { | ||||||
|                                                            "default"); | 	 old_names= xkb->names; | ||||||
|  | 	 finfo.type= 0; | ||||||
|  | 	 finfo.defined= 0; | ||||||
|  | 	 finfo.xkb= xkb; | ||||||
|  | 	 if (!XkbDetermineFileType(&finfo,XkbXKBFile,NULL)) | ||||||
|  | 	    return False; | ||||||
|  |     } | ||||||
|  |     else old_names= NULL; | ||||||
| 
 | 
 | ||||||
|     if (names->keycodes) |     wantConfig= want&(~complete); | ||||||
| 	XkbWriteSectionFromName(file, "keycodes", names->keycodes); |     if (xkb!=NULL) { | ||||||
|     if (names->types) | 	if (wantConfig&XkmTypesMask) { | ||||||
| 	XkbWriteSectionFromName(file, "types", names->types); | 	    if ((!xkb->map) || (xkb->map->num_types<XkbNumRequiredTypes)) | ||||||
|     if (names->compat) | 		wantConfig&= ~XkmTypesMask; | ||||||
| 	XkbWriteSectionFromName(file, "compatibility", names->compat); | 	} | ||||||
|     if (names->symbols) | 	if (wantConfig&XkmCompatMapMask) { | ||||||
| 	XkbWriteSectionFromName(file, "symbols", names->symbols); | 	    if ((!xkb->compat) || (xkb->compat->num_si<1)) | ||||||
|     if (names->geometry) | 		wantConfig&= ~XkmCompatMapMask; | ||||||
| 	XkbWriteSectionFromName(file, "geometry", names->geometry); | 	} | ||||||
|  | 	if (wantConfig&XkmSymbolsMask) { | ||||||
|  | 	    if ((!xkb->map) || (!xkb->map->key_sym_map)) | ||||||
|  | 		wantConfig&= ~XkmSymbolsMask; | ||||||
|  | 	} | ||||||
|  | 	if (wantConfig&XkmIndicatorsMask) { | ||||||
|  | 	    if (!xkb->indicators) | ||||||
|  | 		wantConfig&= ~XkmIndicatorsMask; | ||||||
|  | 	} | ||||||
|  | 	if (wantConfig&XkmKeyNamesMask) { | ||||||
|  | 	    if ((!xkb->names)||(!xkb->names->keys)) | ||||||
|  | 		wantConfig&= ~XkmKeyNamesMask; | ||||||
|  | 	} | ||||||
|  | 	if ((wantConfig&XkmGeometryMask)&&(!xkb->geom)) | ||||||
|  | 	    wantConfig&= ~XkmGeometryMask; | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  | 	wantConfig= 0; | ||||||
|  |     } | ||||||
|  |     complete|= wantConfig; | ||||||
| 
 | 
 | ||||||
|  |     wantDflts= 0; | ||||||
|  |     wantNames= want&(~complete); | ||||||
|  |     if ((xkb!=NULL) && (old_names!=NULL)) { | ||||||
|  | 	if (wantNames&XkmTypesMask) { | ||||||
|  | 	    if (old_names->types!=None) { | ||||||
|  | 		tmp= XkbAtomGetString(dpy,old_names->types); | ||||||
|  | 		names->types= _XkbDupString(tmp); | ||||||
|  | 	    } | ||||||
|  | 	    else { | ||||||
|  | 		wantDflts|= XkmTypesMask; | ||||||
|  | 	    } | ||||||
|  | 	    complete|= XkmTypesMask;  | ||||||
|  | 	} | ||||||
|  | 	if (wantNames&XkmCompatMapMask) { | ||||||
|  | 	    if (old_names->compat!=None) { | ||||||
|  | 		tmp= XkbAtomGetString(dpy,old_names->compat); | ||||||
|  | 		names->compat= _XkbDupString(tmp); | ||||||
|  | 	    } | ||||||
|  | 	    else wantDflts|= XkmCompatMapMask; | ||||||
|  | 	    complete|= XkmCompatMapMask;  | ||||||
|  | 	} | ||||||
|  | 	if (wantNames&XkmSymbolsMask) { | ||||||
|  | 	    if (old_names->symbols==None) | ||||||
|  | 		return False; | ||||||
|  | 	    tmp= XkbAtomGetString(dpy,old_names->symbols); | ||||||
|  | 	    names->symbols= _XkbDupString(tmp); | ||||||
|  | 	    complete|= XkmSymbolsMask;  | ||||||
|  | 	} | ||||||
|  | 	if (wantNames&XkmKeyNamesMask) { | ||||||
|  | 	   if (old_names->keycodes!=None) { | ||||||
|  | 		tmp= XkbAtomGetString(dpy,old_names->keycodes); | ||||||
|  | 		names->keycodes= _XkbDupString(tmp); | ||||||
|  | 	    } | ||||||
|  | 	    else wantDflts|= XkmKeyNamesMask; | ||||||
|  | 	    complete|= XkmKeyNamesMask; | ||||||
|  | 	} | ||||||
|  | 	if (wantNames&XkmGeometryMask) { | ||||||
|  | 	    if (old_names->geometry==None) | ||||||
|  | 		return False; | ||||||
|  | 	    tmp= XkbAtomGetString(dpy,old_names->geometry); | ||||||
|  | 	    names->geometry= _XkbDupString(tmp); | ||||||
|  | 	    complete|= XkmGeometryMask;  | ||||||
|  | 	    wantNames&= ~XkmGeometryMask; | ||||||
|  | 	} | ||||||
|  |     } | ||||||
|  |     if (complete&XkmCompatMapMask) | ||||||
|  | 	complete|= XkmIndicatorsMask|XkmVirtualModsMask; | ||||||
|  |     else if (complete&(XkmSymbolsMask|XkmTypesMask)) | ||||||
|  | 	complete|= XkmVirtualModsMask; | ||||||
|  |     if (need & (~complete)) | ||||||
|  | 	return False; | ||||||
|  |     if ((complete&XkmSymbolsMask)&&((XkmKeyNamesMask|XkmTypesMask)&(~complete))) | ||||||
|  | 	return False; | ||||||
|  | 
 | ||||||
|  |     multi_section= 1; | ||||||
|  |     if (((complete&XkmKeymapRequired)==XkmKeymapRequired)&& | ||||||
|  | 	((complete&(~XkmKeymapLegal))==0)) { | ||||||
|  | 	fprintf(file,"xkb_keymap \"%s\" {\n",name); | ||||||
|  |     } | ||||||
|  |     else if (((complete&XkmSemanticsRequired)==XkmSemanticsRequired)&& | ||||||
|  | 	((complete&(~XkmSemanticsLegal))==0)) { | ||||||
|  | 	fprintf(file,"xkb_semantics \"%s\" {\n",name); | ||||||
|  |     } | ||||||
|  |     else if (((complete&XkmLayoutRequired)==XkmLayoutRequired)&& | ||||||
|  | 	((complete&(~XkmLayoutLegal))==0)) { | ||||||
|  | 	fprintf(file,"xkb_layout \"%s\" {\n",name); | ||||||
|  |     } | ||||||
|  |     else if (XkmSingleSection(complete&(~XkmVirtualModsMask))) { | ||||||
|  | 	multi_section= 0; | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  | 	return False; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     wantNames= complete&(~(wantConfig|wantDflts)); | ||||||
|  |     name= names->keycodes; | ||||||
|  |     if (wantConfig&XkmKeyNamesMask) | ||||||
|  | 	XkbWriteXKBKeycodes(file,&finfo,False,False,_AddIncl,name); | ||||||
|  |     else if (wantDflts&XkmKeyNamesMask) | ||||||
|  | 	fprintf(stderr,"Default symbols not implemented yet!\n"); | ||||||
|  |     else if (wantNames&XkmKeyNamesMask) | ||||||
|  | 	XkbWriteSectionFromName(file,"keycodes",name); | ||||||
|  | 
 | ||||||
|  |     name= names->types; | ||||||
|  |     if (wantConfig&XkmTypesMask) | ||||||
|  | 	XkbWriteXKBKeyTypes(file,&finfo,False,False,_AddIncl,name); | ||||||
|  |     else if (wantDflts&XkmTypesMask) | ||||||
|  | 	fprintf(stderr,"Default types not implemented yet!\n"); | ||||||
|  |     else if (wantNames&XkmTypesMask) | ||||||
|  | 	XkbWriteSectionFromName(file,"types",name); | ||||||
|  | 
 | ||||||
|  |     name= names->compat; | ||||||
|  |     if (wantConfig&XkmCompatMapMask) | ||||||
|  | 	XkbWriteXKBCompatMap(file,&finfo,False,False,_AddIncl,name); | ||||||
|  |     else if (wantDflts&XkmCompatMapMask) | ||||||
|  | 	fprintf(stderr,"Default interps not implemented yet!\n"); | ||||||
|  |     else if (wantNames&XkmCompatMapMask) | ||||||
|  | 	XkbWriteSectionFromName(file,"compatibility",name); | ||||||
|  | 
 | ||||||
|  |     name= names->symbols; | ||||||
|  |     if (wantConfig&XkmSymbolsMask) | ||||||
|  | 	XkbWriteXKBSymbols(file,&finfo,False,False,_AddIncl,name); | ||||||
|  |     else if (wantNames&XkmSymbolsMask) | ||||||
|  | 	XkbWriteSectionFromName(file,"symbols",name); | ||||||
|  | 
 | ||||||
|  |     name= names->geometry; | ||||||
|  |     if (wantConfig&XkmGeometryMask) | ||||||
|  | 	XkbWriteXKBGeometry(file,&finfo,False,False,_AddIncl,name); | ||||||
|  |     else if (wantNames&XkmGeometryMask) | ||||||
|  | 	XkbWriteSectionFromName(file,"geometry",name); | ||||||
|  | 
 | ||||||
|  |     if (multi_section) | ||||||
| 	fprintf(file,"};\n"); | 	fprintf(file,"};\n"); | ||||||
| 
 |  | ||||||
|     return True; |     return True; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /***====================================================================***/ | ||||||
|  | 
 | ||||||
|  | /*ARGSUSED*/ | ||||||
|  | Status | ||||||
|  | XkbMergeFile(XkbDescPtr xkb,XkbFileInfo finfo) | ||||||
|  | { | ||||||
|  |     return BadImplementation; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /***====================================================================***/ | ||||||
|  | 
 | ||||||
|  | int | ||||||
|  | XkbFindKeycodeByName(XkbDescPtr xkb,char *name,Bool use_aliases) | ||||||
|  | { | ||||||
|  | register int	i; | ||||||
|  | 
 | ||||||
|  |     if ((!xkb)||(!xkb->names)||(!xkb->names->keys)) | ||||||
|  | 	return 0; | ||||||
|  |     for (i=xkb->min_key_code;i<=xkb->max_key_code;i++) { | ||||||
|  | 	if (strncmp(xkb->names->keys[i].name,name,XkbKeyNameLength)==0) | ||||||
|  | 	    return i; | ||||||
|  |     } | ||||||
|  |     if (!use_aliases) | ||||||
|  | 	return 0; | ||||||
|  |     if (xkb->geom && xkb->geom->key_aliases) { | ||||||
|  | 	XkbKeyAliasPtr	a; | ||||||
|  | 	a= xkb->geom->key_aliases; | ||||||
|  | 	for (i=0;i<xkb->geom->num_key_aliases;i++,a++) { | ||||||
|  | 	    if (strncmp(name,a->alias,XkbKeyNameLength)==0) | ||||||
|  | 		return XkbFindKeycodeByName(xkb,a->real,False); | ||||||
|  | 	} | ||||||
|  |     } | ||||||
|  |     if (xkb->names && xkb->names->key_aliases) { | ||||||
|  | 	XkbKeyAliasPtr	a; | ||||||
|  | 	a= xkb->names->key_aliases; | ||||||
|  | 	for (i=0;i<xkb->names->num_key_aliases;i++,a++) { | ||||||
|  | 	    if (strncmp(name,a->alias,XkbKeyNameLength)==0) | ||||||
|  | 		return XkbFindKeycodeByName(xkb,a->real,False); | ||||||
|  | 	} | ||||||
|  |     } | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| unsigned | unsigned | ||||||
| XkbConvertGetByNameComponents(Bool toXkm,unsigned orig) | XkbConvertGetByNameComponents(Bool toXkm,unsigned orig) | ||||||
| { | { | ||||||
|  | @ -115,6 +484,34 @@ unsigned	rtrn; | ||||||
|     return rtrn; |     return rtrn; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | unsigned | ||||||
|  | XkbConvertXkbComponents(Bool toXkm,unsigned orig) | ||||||
|  | { | ||||||
|  | unsigned	rtrn; | ||||||
|  | 
 | ||||||
|  |     rtrn= 0; | ||||||
|  |     if (toXkm) { | ||||||
|  | 	if (orig&XkbClientMapMask)	rtrn|= XkmTypesMask|XkmSymbolsMask; | ||||||
|  | 	if (orig&XkbServerMapMask)	rtrn|= XkmTypesMask|XkmSymbolsMask; | ||||||
|  | 	if (orig&XkbCompatMapMask)	rtrn|= XkmCompatMapMask; | ||||||
|  | 	if (orig&XkbIndicatorMapMask)	rtrn|= XkmIndicatorsMask; | ||||||
|  | 	if (orig&XkbNamesMask)		rtrn|= XkmKeyNamesMask; | ||||||
|  | 	if (orig&XkbGeometryMask)	rtrn|= XkmGeometryMask; | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  | 	if (orig!=0)			rtrn|= XkbNamesMask; | ||||||
|  | 	if (orig&XkmTypesMask)		rtrn|= XkbClientMapMask; | ||||||
|  | 	if (orig&XkmCompatMapMask) | ||||||
|  | 		rtrn|= XkbCompatMapMask|XkbIndicatorMapMask; | ||||||
|  | 	if (orig&XkmSymbolsMask)	rtrn|=XkbClientMapMask|XkbServerMapMask; | ||||||
|  | 	if (orig&XkmIndicatorsMask)	rtrn|= XkbIndicatorMapMask; | ||||||
|  | 	if (orig&XkmKeyNamesMask)	 | ||||||
|  | 		rtrn|= XkbNamesMask|XkbIndicatorMapMask; | ||||||
|  | 	if (orig&XkmGeometryMask)	rtrn|= XkbGeometryMask; | ||||||
|  |     } | ||||||
|  |     return rtrn; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| Bool | Bool | ||||||
| XkbDetermineFileType(XkbFileInfoPtr finfo,int format,int *opts_missing) | XkbDetermineFileType(XkbFileInfoPtr finfo,int format,int *opts_missing) | ||||||
| { | { | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -167,89 +167,6 @@ int	count,nRead=0; | ||||||
|     return nRead; |     return nRead; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| unsigned |  | ||||||
| _XkbKSCheckCase(KeySym ks) |  | ||||||
| { |  | ||||||
| unsigned	set,rtrn; |  | ||||||
| 
 |  | ||||||
|     set= (ks & (~0xff)) >> 8; |  | ||||||
|     rtrn= 0; |  | ||||||
|     switch (set) { |  | ||||||
| 	case 0:		/* latin 1 */ |  | ||||||
| 	    if (((ks>=XK_A)&&(ks<=XK_Z))|| |  | ||||||
| 		((ks>=XK_Agrave)&&(ks<=XK_THORN)&&(ks!=XK_multiply))) { |  | ||||||
| 		rtrn|= _XkbKSUpper; |  | ||||||
| 	    } |  | ||||||
| 	    if (((ks>=XK_a)&&(ks<=XK_z))|| |  | ||||||
| 		((ks>=XK_agrave)&&(ks<=XK_ydiaeresis))) { |  | ||||||
| 		rtrn|= _XkbKSLower; |  | ||||||
| 	    } |  | ||||||
| 	    break; |  | ||||||
| 	case 1:		/* latin 2 */ |  | ||||||
| 	    if (((ks>=XK_Aogonek)&&(ks<=XK_Zabovedot)&&(ks!=XK_breve))|| |  | ||||||
| 		((ks>=XK_Racute)&&(ks<=XK_Tcedilla))) { |  | ||||||
| 		rtrn|= _XkbKSUpper; |  | ||||||
| 	    } |  | ||||||
| 	    if (((ks>=XK_aogonek)&&(ks<=XK_zabovedot)&&(ks!=XK_caron))|| |  | ||||||
| 		((ks>=XK_racute)&&(ks<=XK_tcedilla))) { |  | ||||||
| 		rtrn|= _XkbKSLower; |  | ||||||
| 	    } |  | ||||||
| 	    break; |  | ||||||
| 	case 2:		/* latin 3 */ |  | ||||||
| 	    if (((ks>=XK_Hstroke)&&(ks<=XK_Jcircumflex))|| |  | ||||||
| 		((ks>=XK_Cabovedot)&&(ks<=XK_Scircumflex))) { |  | ||||||
| 		rtrn|= _XkbKSUpper; |  | ||||||
| 	    } |  | ||||||
| 	    if (((ks>=XK_hstroke)&&(ks<=XK_jcircumflex))|| |  | ||||||
| 		((ks>=XK_cabovedot)&&(ks<=XK_scircumflex))) { |  | ||||||
| 		rtrn|= _XkbKSLower; |  | ||||||
| 	    } |  | ||||||
| 	    break; |  | ||||||
| 	case 3:		/* latin 4 */ |  | ||||||
| 	    if (((ks>=XK_Rcedilla)&&(ks<=XK_Tslash))|| |  | ||||||
| 	        (ks==XK_ENG)|| |  | ||||||
| 		((ks>=XK_Amacron)&&(ks<=XK_Umacron))) { |  | ||||||
| 		rtrn|= _XkbKSUpper; |  | ||||||
| 	    } |  | ||||||
| 	    if (((ks>=XK_rcedilla)&&(ks<=XK_tslash))|| |  | ||||||
| 	        (ks==XK_eng)|| |  | ||||||
| 		((ks>=XK_amacron)&&(ks<=XK_umacron))) { |  | ||||||
| 		rtrn|= _XkbKSLower; |  | ||||||
| 	    } |  | ||||||
| 	    break; |  | ||||||
| 	case 18:		/* latin 8 */ |  | ||||||
| 	    if ((ks==XK_Babovedot)|| |  | ||||||
|                 ((ks>=XK_Dabovedot)&&(ks<=XK_Wacute))|| |  | ||||||
| 		((ks>=XK_Ygrave)&&(ks<=XK_Fabovedot))|| |  | ||||||
| 	        (ks==XK_Mabovedot)|| |  | ||||||
| 	        (ks==XK_Pabovedot)|| |  | ||||||
| 	        (ks==XK_Sabovedot)|| |  | ||||||
| 	        (ks==XK_Wdiaeresis)|| |  | ||||||
| 		((ks>=XK_Wcircumflex)&&(ks<=XK_Ycircumflex))) { |  | ||||||
| 		rtrn|= _XkbKSUpper; |  | ||||||
| 	    } |  | ||||||
| 	    if ((ks==XK_babovedot)|| |  | ||||||
| 	        (ks==XK_dabovedot)|| |  | ||||||
| 	        (ks==XK_fabovedot)|| |  | ||||||
| 	        (ks==XK_mabovedot)|| |  | ||||||
|                 ((ks>=XK_wgrave)&&(ks<=XK_wacute))|| |  | ||||||
| 	        (ks==XK_ygrave)|| |  | ||||||
| 		((ks>=XK_wdiaeresis)&&(ks<=XK_ycircumflex))) { |  | ||||||
| 		rtrn|= _XkbKSLower; |  | ||||||
| 	    } |  | ||||||
| 	    break; |  | ||||||
| 	case 19:		/* latin 9 */ |  | ||||||
| 	    if ((ks==XK_OE)||(ks==XK_Ydiaeresis)) { |  | ||||||
| 		rtrn|= _XkbKSUpper; |  | ||||||
| 	    } |  | ||||||
| 	    if (ks==XK_oe) { |  | ||||||
| 		rtrn|= _XkbKSLower; |  | ||||||
| 	    } |  | ||||||
| 	    break; |  | ||||||
|     } |  | ||||||
|     return rtrn; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /***====================================================================***/ | /***====================================================================***/ | ||||||
| 
 | 
 | ||||||
| static int | static int | ||||||
|  | @ -1251,10 +1168,14 @@ int			nRead; | ||||||
| 		*loaded_rtrn|= XkmGeometryMask; | 		*loaded_rtrn|= XkmGeometryMask; | ||||||
| 	    break; | 	    break; | ||||||
| 	default: | 	default: | ||||||
|  | 	    _XkbLibError(_XkbErrBadImplementation, | ||||||
|  | 	    			XkbConfigText(tmpTOC.type,XkbMessage),0); | ||||||
| 	    nRead= 0; | 	    nRead= 0; | ||||||
| 	    break; | 	    break; | ||||||
|     } |     } | ||||||
|     if (nRead!=tmpTOC.size) { |     if (nRead!=tmpTOC.size) { | ||||||
|  | 	_XkbLibError(_XkbErrBadLength,XkbConfigText(tmpTOC.type,XkbMessage), | ||||||
|  | 						nRead-tmpTOC.size); | ||||||
| 	return 0; | 	return 0; | ||||||
|     } |     } | ||||||
|     return (nRead>=0); |     return (nRead>=0); | ||||||
|  | @ -1288,6 +1209,8 @@ char 		name[100]; | ||||||
| 		return _XkbDupString(name); | 		return _XkbDupString(name); | ||||||
| 	    break; | 	    break; | ||||||
| 	default: | 	default: | ||||||
|  | 	    _XkbLibError(_XkbErrBadImplementation, | ||||||
|  | 				XkbConfigText(tmpTOC.type,XkbMessage),0); | ||||||
| 	    break; | 	    break; | ||||||
|     } |     } | ||||||
|     return NULL; |     return NULL; | ||||||
|  | @ -1353,6 +1276,8 @@ unsigned		which= need|want; | ||||||
| 		tmp= ReadXkmGeometry(file,result); | 		tmp= ReadXkmGeometry(file,result); | ||||||
| 		break; | 		break; | ||||||
| 	    default: | 	    default: | ||||||
|  | 		_XkbLibError(_XkbErrBadImplementation, | ||||||
|  | 				XkbConfigText(tmpTOC.type,XkbMessage),0); | ||||||
| 		tmp= 0; | 		tmp= 0; | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
|  | @ -1362,7 +1287,8 @@ unsigned		which= need|want; | ||||||
| 	    result->defined|= (1<<toc[i].type); | 	    result->defined|= (1<<toc[i].type); | ||||||
| 	} | 	} | ||||||
| 	if (nRead!=tmpTOC.size) { | 	if (nRead!=tmpTOC.size) { | ||||||
|             return 0; | 	    _XkbLibError(_XkbErrBadLength,XkbConfigText(tmpTOC.type,XkbMessage), | ||||||
|  | 	    						nRead-tmpTOC.size); | ||||||
| 	} | 	} | ||||||
|     } |     } | ||||||
|     return which; |     return which; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue