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