# XF86Setup README

## Introduction

XF86Setup is a new program to aid in the configuration of the XFree86 servers. It is unlike previous programs (such as ConfigXF86 and xf86config) in that it is specifically designed to do as much as possible while in graphics mode.

However, xf86config is not being replaced. XF86Setup's resource requirements are considerably greater than those of xf86config. It also is not usable for OS/2 configuration (at least not yet).

XF86Setup requires that both the VGA16 and card-appropriate servers be installed. Furthermore, the servers must include the XKEYBOARD, XFree86-VidModeExtension, and XFree86-Misc extensions. If the dialog program is installed, it will be used, but is not required.

If you wish to run XF86Setup without installing it first, you need to set the environment variable `XF86SETUPLIB` to point to the source directory.

The command line options are documented in the XF86Setup man page. For instructions regarding the use of the program, see the Quick Start Guide to XFree86 Configuration and the on-line help.

The rest of this file contains information that is mainly of use to someone interested in hacking on the code.

## Manifest

CHANGELOG
  List of changes in each version
Imakefile
  Imakefile to generate the program
LICENSE
  Redistribution license and disclaimer
README
  ASCII version of the README
README.html
  HTML version of the README
TODO
  Things to be done or at least considered
XF86Setup.man
  The man page
main.c
  Main prog that starts the Tcl interpreter
tclcards.c
  Routines to connect Tcl and the Cards database reading functions
tclkbd.c
  Routines to connect to the XKB extension
tclmisc.c
  Routines to connect to the XFree86-Misc extension
tclmisc.h
  Prototypes for above
tclother.c
  Routines to implement misc Tcl commands
tclvidmode.c
  Routines to connect Tcl and XFree86-VidModeExtension
tclvidmode.h
  Prototypes for above
tclxfconf.c
  Interface to xf86Config.c for reading an existing XF86Config file
xfsconf.h
  Prototypes for above
tclxkbui.c
  Tk widget interface to the xkbui library
tkother.c
  Routines to implement misc commands requiring Tk
card.tcl
  Device configuration routines
carddata.tcl
  Information regarding supported chips and such that is used by card.tcl
done.tcl
  Routines that are used once the user has finished the various configuration steps
filelist.tcl
  Lists of files that should be checked for proper installation
keyboard.tcl
  Routines for keyboard and other configuration
modeselect.tcl
  Mode selection routines
mondata.tcl
  Default monitor sync rates and modes
monitor.tcl
  Monitor configuration routines
mouse.tcl
  Mouse configuration routines
phase1.tcl
  Tcl commands to do Phase I
phase2.tcl
  Tcl commands for Phase II
phase3.tcl
  Tcl commands for Phase III
phase4.tcl
  Tcl commands for Phase IV
phase5.tcl
  Tcl commands for Phase V
setuplib.tcl
  Library of XF86Setup specific Tcl procs
srvflags.tcl
  Configuration routines for server flags
pics
  Directory containing bitmaps used by program
scripts
  Directory of other scripts that use XF86Setup as an interpreter to implement other clients
tcllib
  Directory containing Tcl code to set the standard widget bindings (from the Tcl & Tk 4.0p3 distributions) and with misc tcl routines and the combobox widget
texts
  Directory containing helps and messages (The subdirectories "generic" and "ja" correspond to English and Japanese respectively)

## New Tcl commands

The program includes a Tcl interpreter which has been extended with additional commands (in addition to those in the Tk toolkit). They are explained below.

### Interfacing with the Cards database

Two commands have been added to read data from the Cards database (as used by xf86config)

xf86cards_getlist
  Return the full list of card names
xf86cards_getentry
  Get complete info on a card

A valid card name should be supplied as an argument to `xf86cards_getentry`

### XFree86-VidModeExtension commands

Several commands have been added which allow the program to communicate with the XFree86-VidModeExtension server extension, namely:

xf86vid_addmodeline
  Add a new mode to the list of video modes
xf86vid_checkmodeline
  Checks that a mode is usable
xf86vid_deletemodeline
  Removes a mode from the list of valid modes
xf86vid_getversion
  Query extension version
xf86vid_getbasevals
  Get the ErrorBase and EventBase
xf86vid_getmodeline
  Get the current video mode settings
xf86vid_getallmodelines
  Get video settings for all modes
xf86vid_getmonitor
  Get monitor specs
xf86vid_lockmodeswitch
  Turn on/off mode switching
xf86vid_switchmode
  Switch to next/previous mode
xf86vid_switchtomode
  Switch to a mode

Only the last two take an argument, which is either `lock` or `unlock` in the case of `xf86vid_lockmodeswitch` and either `next` or `prev` in the case of `xf86vid_switchmode`.

`xf86vid_getversion` returns the version as a floating point number (e.g., 1.2), whereas `xf86vid_getbasevals` returns a Tcl list containing two elements.

The `xf86vid_getmodeline` command returns a string which contains the standard mode line values including flags, if any, with each value separated by a single space.

`xf86vid_getallmodelines` returns a Tcl list. The number of elements corresponds to the number of valid video modes. Each element is in the format returned by `xf86vid_getmodeline`. The first element contains the mode info for the current mode.

`xf86vid_getmonitor` also returns a Tcl list. The first element is the vendor name. The second is the model name. The third element contains all of the horizontal sync rates as comma separated ranges (so for example if the sync rates were 31.5, 35-40, and 45-55 the return value would be: `31.50-31.50,35.00-40.00,45.00-55.00`). The last element contains the vertical sync rates in the same format.

### XFree86-Misc extension commands

Communication with the XFree86-Misc extension is possible using these new commands:

xf86misc_getversion
  Query extension version
xf86misc_getbasevals
  Get the ErrorBase and EventBase
xf86misc_getmouse
  Get the current mouse settings
xf86misc_setmouse
  Set the current mouse settings
xf86misc_getkeyboard
  Get the current keyboard settings
xf86misc_setkeyboard
  Set the current keyboard settings

### XF86Config file reading commands

Two commands are available for reading XF86Config file:

xf86config_findfile
  Locate the XF86Config that would be used by the server
xf86config_readfile
  Read in the XF86Config file and set the values from it

### XKEYBOARD extension commands

A few commands are available for communicating with the XKEYBOARD extension:

xkb_components
  List the components that make up the given keyboard
xkb_free
  Free a previously allocated keyboard description structure
xkb_getrulesprop
  Read the _XKB_RULES_NAMES root property
xkb_listcomponents
  Returns a list of available components
xkb_listrules
  Returns a list of available rules defs and their descriptions
xkb_load
  Change the keyboard setup for the specified components
xkb_read
  Get keyboard information from the server
xkb_setrulesprop
  Set the _XKB_RULES_NAMES root property
xkb_resolvecomponents
  Use the XKB rules to determine the components necessay for an appropriate keymap (requires XKB library support that might not yet be in the XFree86 tree).

The xkbview widget is also available as interface to the xkbui library.

### Miscellaneous

Other commands added to the interpreter are:

getuid
  Returns the real uid of the user
server_running
  Returns true if a server is running on the specified display
process_running
  Checks if the specified process is running
has_symlinks
  Returns true if running on an OS that supports symbolic links
link
  Makes a (soft or hard) link from one file to another
unlink
  Removes the specified file
mkdir
  Create the named directory
rmdir
  Remove the named directory
umask
  Set the file creation mode mask
sleep
  Sleeps for the specified number of seconds
clock
  Obtain and manipulate time
findfocuswindow
  Search along an axis for a window which accepts focus (added to the interpreter after Tk has been initialized)

`getuid` just returns the numeric result of getuid().

The `server_running` command simply tries to perform an `XOpenDisplay()` on its argument. If the call fails, it returns false (0), otherwise it calls `XCloseDisplay()` and returns true (1).