1706f2543Smrg/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86ShopwOpts.c,v 3.80 2003/10/08 14:58:27 dawes Exp $ */
2706f2543Smrg/*
3706f2543Smrg * Copyright 2000-2002 by Alan Hourihane, Flint Mountain, North Wales.
4706f2543Smrg *
5706f2543Smrg * Permission to use, copy, modify, distribute, and sell this software and its
6706f2543Smrg * documentation for any purpose is hereby granted without fee, provided that
7706f2543Smrg * the above copyright notice appear in all copies and that both that
8706f2543Smrg * copyright notice and this permission notice appear in supporting
9706f2543Smrg * documentation, and that the name of Alan Hourihane not be used in
10706f2543Smrg * advertising or publicity pertaining to distribution of the software without
11706f2543Smrg * specific, written prior permission.  Alan Hourihane makes no representations
12706f2543Smrg * about the suitability of this software for any purpose.  It is provided
13706f2543Smrg * "as is" without express or implied warranty.
14706f2543Smrg *
15706f2543Smrg * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16706f2543Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
17706f2543Smrg * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
18706f2543Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
19706f2543Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
20706f2543Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
21706f2543Smrg * PERFORMANCE OF THIS SOFTWARE.
22706f2543Smrg *
23706f2543Smrg * Author:  Marcus Schaefer, ms@suse.de
24706f2543Smrg *
25706f2543Smrg */
26706f2543Smrg
27706f2543Smrg#include <ctype.h>
28706f2543Smrg#include <stdlib.h>
29706f2543Smrg#include <unistd.h>
30706f2543Smrg#include <sys/types.h>
31706f2543Smrg#include <sys/stat.h>
32706f2543Smrg#include <fcntl.h>
33706f2543Smrg#include <X11/X.h>
34706f2543Smrg#include <X11/Xmd.h>
35706f2543Smrg#include "os.h"
36706f2543Smrg#ifdef XFree86LOADER
37706f2543Smrg#include "loaderProcs.h"
38706f2543Smrg#endif
39706f2543Smrg#include "xf86.h"
40706f2543Smrg#include "xf86Config.h"
41706f2543Smrg#include "xf86_OSlib.h"
42706f2543Smrg#include "xf86Priv.h"
43706f2543Smrg/* #include "xf86PciData.h" */
44706f2543Smrg#define IN_XSERVER
45706f2543Smrg#include "xf86Parser.h"
46706f2543Smrg#include "xf86tokens.h"
47706f2543Smrg#include "Configint.h"
48706f2543Smrg#include "xf86DDC.h"
49706f2543Smrg#if defined(__sparc__) && !defined(__OpenBSD__)
50706f2543Smrg#include "xf86Bus.h"
51706f2543Smrg#include "xf86Sbus.h"
52706f2543Smrg#endif
53706f2543Smrg#include "globals.h"
54706f2543Smrg
55706f2543Smrgstatic const char*
56706f2543SmrgoptionTypeToSting(OptionValueType type)
57706f2543Smrg{
58706f2543Smrg    switch (type) {
59706f2543Smrg    case OPTV_NONE:
60706f2543Smrg        return "";
61706f2543Smrg    case OPTV_INTEGER:
62706f2543Smrg        return "<int>";
63706f2543Smrg    case OPTV_STRING:
64706f2543Smrg        return "<str>";
65706f2543Smrg    case OPTV_ANYSTR:
66706f2543Smrg        return "<str>";
67706f2543Smrg    case OPTV_REAL:
68706f2543Smrg        return "<real>";
69706f2543Smrg    case OPTV_BOOLEAN:
70706f2543Smrg        return "<bool>";
71706f2543Smrg    case OPTV_FREQ:
72706f2543Smrg        return "<freq>";
73706f2543Smrg    case OPTV_PERCENT:
74706f2543Smrg        return "<percent>";
75706f2543Smrg    default:
76706f2543Smrg        return "<undef>";
77706f2543Smrg    }
78706f2543Smrg}
79706f2543Smrg
80706f2543Smrgvoid DoShowOptions (void) {
81706f2543Smrg	int  i = 0;
82706f2543Smrg	char **vlist  = 0;
83706f2543Smrg	char *pSymbol = 0;
84706f2543Smrg	XF86ModuleData *initData = 0;
85706f2543Smrg	if (! (vlist = xf86DriverlistFromCompile())) {
86706f2543Smrg		ErrorF("Missing output drivers\n");
87706f2543Smrg		goto bail;
88706f2543Smrg	}
89706f2543Smrg	xf86LoadModules (vlist,0);
90706f2543Smrg	free(vlist);
91706f2543Smrg	for (i = 0; i < xf86NumDrivers; i++) {
92706f2543Smrg		if (xf86DriverList[i]->AvailableOptions) {
93706f2543Smrg			OptionInfoPtr pOption = (OptionInfoPtr)(*xf86DriverList[i]->AvailableOptions)(0,0);
94706f2543Smrg			if (! pOption) {
95706f2543Smrg				ErrorF ("(EE) Couldn't read option table for %s driver\n",
96706f2543Smrg					xf86DriverList[i]->driverName
97706f2543Smrg				);
98706f2543Smrg				continue;
99706f2543Smrg			}
100706f2543Smrg			XNFasprintf(&pSymbol, "%sModuleData",
101706f2543Smrg				    xf86DriverList[i]->driverName);
102706f2543Smrg			initData = LoaderSymbol (pSymbol);
103706f2543Smrg			if (initData) {
104706f2543Smrg				XF86ModuleVersionInfo *vers = initData->vers;
105706f2543Smrg				OptionInfoPtr p;
106706f2543Smrg				ErrorF ("Driver[%d]:%s[%s] {\n",
107706f2543Smrg					i,xf86DriverList[i]->driverName,vers->vendor
108706f2543Smrg				);
109706f2543Smrg				for (p = pOption; p->name != NULL; p++) {
110706f2543Smrg					const char *opttype = optionTypeToSting(p->type);
111706f2543Smrg					/* XXX: Why overallocate by 2 bytes?
112706f2543Smrg					 * Otherwise, this would be strdup()
113706f2543Smrg					 */
114706f2543Smrg					char *optname = malloc(strlen(p->name) + 2 + 1);
115706f2543Smrg					if (!optname) {
116706f2543Smrg						continue;
117706f2543Smrg					}
118706f2543Smrg					sprintf(optname, "%s", p->name);
119706f2543Smrg					ErrorF ("\t%s:%s\n", optname,opttype);
120706f2543Smrg				}
121706f2543Smrg				ErrorF ("}\n");
122706f2543Smrg			}
123706f2543Smrg		}
124706f2543Smrg	}
125706f2543Smrg	bail:
126706f2543Smrg	OsCleanup (TRUE);
127706f2543Smrg	AbortDDX ();
128706f2543Smrg	fflush (stderr);
129706f2543Smrg	exit (0);
130706f2543Smrg}
131