summaryrefslogtreecommitdiff
path: root/xc/programs/Xserver/hw/xfree86/common/xf86Option.c
diff options
context:
space:
mode:
Diffstat (limited to 'xc/programs/Xserver/hw/xfree86/common/xf86Option.c')
-rw-r--r--xc/programs/Xserver/hw/xfree86/common/xf86Option.c48
1 files changed, 39 insertions, 9 deletions
diff --git a/xc/programs/Xserver/hw/xfree86/common/xf86Option.c b/xc/programs/Xserver/hw/xfree86/common/xf86Option.c
index 538514de8..122d10b8f 100644
--- a/xc/programs/Xserver/hw/xfree86/common/xf86Option.c
+++ b/xc/programs/Xserver/hw/xfree86/common/xf86Option.c
@@ -1,4 +1,4 @@
-/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86Option.c,v 1.15 2000/06/20 05:08:45 dawes Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86Option.c,v 1.20 2000/08/09 20:33:20 tsi Exp $ */
/*
* Copyright (c) 1998 by The XFree86 Project, Inc.
@@ -183,11 +183,36 @@ xf86SetBoolOption(pointer optlist, const char *name, int deflt)
return deflt;
}
+/*
+ * addNewOption() has the required property of replacing the option value
+ * it the option is alread present.
+ */
+pointer
+xf86ReplaceIntOption(pointer optlist, char *name, int val)
+{
+ char *tmp = xnfalloc(16);
+ sprintf(tmp,"%i",val);
+ return xf86AddNewOption(optlist,name,tmp);
+}
+
+pointer
+xf86ReplaceBoolOption(pointer optlist, char *name, Bool val)
+{
+ return xf86AddNewOption(optlist,name,(Bool)val?"True":"False");
+}
+
+pointer
+xf86ReplaceStrOption(pointer optlist, char *name, char* val)
+{
+ return xf86AddNewOption(optlist,name,val);
+}
pointer
xf86AddNewOption(pointer head, char *name, char *val)
{
- return addNewOption(head, name, val);
+ char *tmp = strdup(val);
+
+ return addNewOption(head, name, tmp);
}
@@ -424,32 +449,37 @@ ParseOptionValue(int scrnIndex, pointer options, OptionInfoPtr p)
p->name);
p->found = FALSE;
} else {
- p->value.freq.freq = strtod(s, &end);
- p->value.freq.units = 0;
+ double freq = strtod(s, &end);
+ int units = 0;
+
if (end != s) {
p->found = TRUE;
if (!xf86NameCmp(end, "Hz"))
- p->value.freq.units = 1;
+ units = 1;
else if (!xf86NameCmp(end, "kHz") ||
!xf86NameCmp(end, "k"))
- p->value.freq.units = 1000;
+ units = 1000;
else if (!xf86NameCmp(end, "MHz") ||
!xf86NameCmp(end, "M"))
- p->value.freq.units = 1000000;
+ units = 1000000;
else {
xf86DrvMsg(scrnIndex, X_WARNING,
"Option \"%s\" requires a frequency value\n",
p->name);
p->found = FALSE;
}
- if (p->found && p->value.freq.units > 0)
- p->value.freq.freq *= (double)p->value.freq.units;
+ if (p->found)
+ freq *= (double)units;
} else {
xf86DrvMsg(scrnIndex, X_WARNING,
"Option \"%s\" requires a frequency value\n",
p->name);
p->found = FALSE;
}
+ if (p->found) {
+ p->value.freq.freq = freq;
+ p->value.freq.units = units;
+ }
}
break;
case OPTV_NONE: