1/*
2 * The new sysinstall program.
3 *
4 * This is probably the last program in the `sysinstall' line - the next
5 * generation being essentially a complete rewrite.
6 *
7 * Copyright (c) 1995
8 *	Jordan Hubbard.  All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 *    notice, this list of conditions and the following disclaimer,
15 *    verbatim and that no modifications are made prior to this
16 *    point in the file.
17 * 2. Redistributions in binary form must reproduce the above copyright
18 *    notice, this list of conditions and the following disclaimer in the
19 *    documentation and/or other materials provided with the distribution.
20 *
21 * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED.  IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 */
34
35#ifndef lint
36static const char rcsid[] =
37  "$FreeBSD$";
38#endif
39
40#include "sysinstall.h"
41
42/* Miscellaneous work routines for menus */
43static int
44setSrc(dialogMenuItem *self)
45{
46    Dists |= DIST_SRC;
47    SrcDists = DIST_SRC_ALL;
48    return DITEM_SUCCESS | DITEM_REDRAW;
49}
50
51static int
52clearSrc(dialogMenuItem *self)
53{
54    Dists &= ~DIST_SRC;
55    SrcDists = 0;
56    return DITEM_SUCCESS | DITEM_REDRAW;
57}
58
59static int
60setKernel(dialogMenuItem *self)
61{
62    Dists |= DIST_KERNEL;
63    KernelDists = DIST_KERNEL_ALL;
64    return DITEM_SUCCESS | DITEM_REDRAW;
65}
66
67static int
68clearKernel(dialogMenuItem *self)
69{
70    Dists &= ~DIST_KERNEL;
71    KernelDists = 0;
72    return DITEM_SUCCESS | DITEM_REDRAW;
73}
74
75static int
76setDocAll(dialogMenuItem *self)
77{
78    Dists |= DIST_DOC;
79    DocDists = DIST_DOC_ALL;
80    return DITEM_SUCCESS | DITEM_REDRAW;
81}
82
83
84#define _IS_SET(dist, set) (((dist) & (set)) == (set))
85
86#define IS_DEVELOPER(dist, extra) (_IS_SET(dist, _DIST_DEVELOPER | extra) || \
87	_IS_SET(dist, _DIST_DEVELOPER | extra))
88
89#define IS_USER(dist, extra) (_IS_SET(dist, _DIST_USER | extra) || \
90	_IS_SET(dist, _DIST_USER | extra))
91
92static int
93checkDistDeveloper(dialogMenuItem *self)
94{
95    return IS_DEVELOPER(Dists, 0) && _IS_SET(SrcDists, DIST_SRC_ALL);
96}
97
98static int
99checkDistKernDeveloper(dialogMenuItem *self)
100{
101    return IS_DEVELOPER(Dists, 0) && _IS_SET(SrcDists, DIST_SRC_SYS);
102}
103
104static int
105checkDistUser(dialogMenuItem *self)
106{
107    return IS_USER(Dists, 0);
108}
109
110static int
111checkDistMinimum(dialogMenuItem *self)
112{
113    return Dists == (DIST_BASE | DIST_KERNEL);
114}
115
116static int
117checkDistEverything(dialogMenuItem *self)
118{
119    return Dists == DIST_ALL &&
120	_IS_SET(DocDists, DIST_DOC_ALL) &&
121	_IS_SET(SrcDists, DIST_SRC_ALL) &&
122	_IS_SET(KernelDists, DIST_KERNEL_ALL);
123}
124
125static int
126srcFlagCheck(dialogMenuItem *item)
127{
128    return SrcDists;
129}
130
131static int
132kernelFlagCheck(dialogMenuItem *item)
133{
134    return KernelDists;
135}
136
137static int
138docFlagCheck(dialogMenuItem *item)
139{
140    return DocDists;
141}
142
143static int
144checkTrue(dialogMenuItem *item)
145{
146    return TRUE;
147}
148
149/* All the system menus go here.
150 *
151 * Hardcoded things like version number strings will disappear from
152 * these menus just as soon as I add the code for doing inline variable
153 * expansion.
154 */
155
156DMenu MenuIndex = {
157    DMENU_NORMAL_TYPE,
158    "Glossary of functions",
159    "This menu contains an alphabetized index of the top level functions in\n"
160    "this program (sysinstall).  Invoke an option by pressing [SPACE] or\n"
161    "[ENTER].  To exit, use [TAB] to move to the Cancel button.",
162    "Use PageUp or PageDown to move through this menu faster!",
163    NULL,
164    { { " Anon FTP",		"Configure anonymous FTP logins.",	dmenuVarCheck, configAnonFTP, NULL, "anon_ftp" },
165      { " Commit",		"Commit any pending actions (dangerous!)", NULL, installCustomCommit },
166      { " Country",		"Set the system's country",		NULL, configCountry },
167#ifdef WITH_SYSCONS
168      { " Console settings",	"Customize system console behavior.",	NULL, dmenuSubmenu, NULL, &MenuSyscons },
169#endif
170      { " Configure",		"The system configuration menu.",	NULL, dmenuSubmenu, NULL, &MenuConfigure },
171      { " Defaults, Load (FDD)","Load default settings from floppy.",	NULL, dispatch_load_floppy },
172      { " Defaults, Load (CD)",	"Load default settings from CDROM.",	NULL, dispatch_load_cdrom },
173      { " Defaults, Load",	"Load default settings (all devices).",	NULL, dispatch_load_menu },
174#ifdef WITH_MICE
175      { " Device, Mouse",	"The mouse configuration menu.",	NULL, dmenuSubmenu, NULL, &MenuMouse },
176#endif
177      { " Disklabel",		"The disk label editor",		NULL, diskLabelEditor },
178      { " Dists, All",		"Root of the distribution tree.",	NULL, dmenuSubmenu, NULL, &MenuDistributions },
179      { " Dists, Basic",		"Basic FreeBSD distribution menu.",	NULL, dmenuSubmenu, NULL, &MenuSubDistributions },
180      { " Dists, Developer",	"Select developer's distribution.",	checkDistDeveloper, distSetDeveloper },
181      { " Dists, Src",		"Src distribution menu.",		NULL, dmenuSubmenu, NULL, &MenuSrcDistributions },
182      { " Dists, Kern Developer", "Select kernel developer's distribution.", checkDistKernDeveloper, distSetKernDeveloper },
183      { " Dists, User",		"Select average user distribution.",	checkDistUser, distSetUser },
184      { " Distributions, Adding", "Installing additional distribution sets", NULL, distExtractAll },
185      { " Documentation",	"Installation instructions, README, etc.", NULL, dmenuSubmenu, NULL, &MenuDocumentation },
186      { " Documentation Installation",	"Installation of FreeBSD documentation set", NULL, distSetDocMenu },
187      { " Doc, README",		"The distribution README file.",	NULL, dmenuDisplayFile, NULL, "README" },
188      { " Doc, Errata",		"The distribution errata.",	NULL, dmenuDisplayFile, NULL, "ERRATA" },
189      { " Doc, Hardware",	"The distribution hardware guide.",	NULL, dmenuDisplayFile,	NULL, "HARDWARE" },
190      { " Doc, Copyright",	"The distribution copyright notices.",	NULL, dmenuDisplayFile,	NULL, "COPYRIGHT" },
191      { " Doc, Release",		"The distribution release notes.",	NULL, dmenuDisplayFile, NULL, "RELNOTES" },
192      { " Doc, HTML",		"The HTML documentation menu.",		NULL, docBrowser },
193      { " Dump Vars",		"(debugging) dump out internal variables.", NULL, dump_variables },
194      { " Emergency shell",	"Start an Emergency Holographic shell.",	NULL, installFixitHoloShell },
195#ifdef WITH_SLICES
196      { " Fdisk",		"The disk Partition Editor",		NULL, diskPartitionEditor },
197#endif
198      { " Fixit",		"Repair mode with CDROM or fixit floppy.",	NULL, dmenuSubmenu, NULL, &MenuFixit },
199      { " FTP sites",		"The FTP mirror site listing.",		NULL, dmenuSubmenu, NULL, &MenuMediaFTP },
200      { " Gateway",		"Set flag to route packets between interfaces.", dmenuVarCheck, dmenuToggleVariable, NULL, "gateway=YES" },
201      { " HTML Docs",		"The HTML documentation menu",		NULL, docBrowser },
202      { " inetd Configuration",	"Configure inetd and simple internet services.",	dmenuVarCheck, configInetd, NULL, "inetd_enable=YES" },
203      { " Install, Standard",	"A standard system installation.",	NULL, installStandard },
204      { " Install, Express",	"An express system installation.",	NULL, installExpress },
205      { " Install, Custom",	"The custom installation menu",		NULL, dmenuSubmenu, NULL, &MenuInstallCustom },
206      { " Label",		"The disk Label editor",		NULL, diskLabelEditor },
207      { " Media",		"Top level media selection menu.",	NULL, dmenuSubmenu, NULL, &MenuMedia },
208      { " Media, NFS",		"Select NFS installation media.",	NULL, mediaSetNFS },
209      { " Media, Floppy",	"Select floppy installation media.",	NULL, mediaSetFloppy },
210      { " Media, CDROM/DVD",	"Select CDROM/DVD installation media.",	NULL, mediaSetCDROM },
211      { " Media, USB",		"Select USB installation media.",	NULL, mediaSetUSB },
212      { " Media, DOS",		"Select DOS installation media.",	NULL, mediaSetDOS },
213      { " Media, UFS",		"Select UFS installation media.",	NULL, mediaSetUFS },
214      { " Media, FTP",		"Select FTP installation media.",	NULL, mediaSetFTP },
215      { " Media, FTP Passive",	"Select passive FTP installation media.", NULL, mediaSetFTPPassive },
216      { " Media, HTTP Proxy",	"Select FTP via HTTP proxy install media.", NULL, mediaSetHTTP },
217      { " Media, HTTP Direct",	"Select HTTP direct installation media.", NULL, mediaSetHTTPDirect },
218      { " Network Interfaces",	"Configure network interfaces",		NULL, tcpMenuSelect },
219      { " Networking Services",	"The network services menu.",		NULL, dmenuSubmenu, NULL, &MenuNetworking },
220      { " NFS, client",		"Set NFS client flag.",			dmenuVarCheck, dmenuToggleVariable, NULL, "nfs_client_enable=YES" },
221      { " NFS, server",		"Set NFS server flag.",			dmenuVarCheck, configNFSServer, NULL, "nfs_server_enable=YES" },
222      { " NTP Menu",		"The NTP configuration menu.",		NULL, dmenuSubmenu, NULL, &MenuNTP },
223      { " Options",		"The options editor.",			NULL, optionsEditor },
224      { " Packages",		"The packages collection",		NULL, configPackages },
225#ifdef WITH_SLICES
226      { " Partition",		"The disk slice (PC-style partition) editor",	NULL, diskPartitionEditor },
227#endif
228      { " PCNFSD",		"Run authentication server for PC-NFS.", dmenuVarCheck, configPCNFSD, NULL, "pcnfsd" },
229      { " Root Password",	"Set the system manager's password.",   NULL, dmenuSystemCommand, NULL, "passwd root" },
230      { " Router",		"Select routing daemon (default: routed)", NULL, configRouter, NULL, "router_enable" },
231      { " Security",		"Configure system security options", NULL, dmenuSubmenu, NULL, &MenuSecurity },
232#ifdef WITH_SYSCONS
233      { " Syscons",		"The system console configuration menu.", NULL, dmenuSubmenu, NULL, &MenuSyscons },
234#ifndef PC98
235      { " Syscons, Font",	"The console screen font.",	  NULL, dmenuSubmenu, NULL, &MenuSysconsFont },
236#endif
237      { " Syscons, Keymap",	"The console keymap configuration menu.", NULL, keymapMenuSelect },
238      { " Syscons, Keyrate",	"The console key rate configuration menu.", NULL, dmenuSubmenu, NULL, &MenuSysconsKeyrate },
239      { " Syscons, Saver",	"The console screen saver configuration menu.",	NULL, dmenuSubmenu, NULL, &MenuSysconsSaver },
240#ifndef PC98
241      { " Syscons, Screenmap",	"The console screenmap configuration menu.", NULL, dmenuSubmenu, NULL, &MenuSysconsScrnmap },
242      { " Syscons, Ttys",       "The console terminal type menu.", NULL, dmenuSubmenu, NULL, &MenuSysconsTtys },
243#endif
244#endif /* WITH_SYSCONS */
245      { " Time Zone",		"Set the system's time zone.",		NULL, dmenuSystemCommand, NULL, "tzsetup" },
246      { " TTYs",		"Configure system ttys.",		NULL, configEtcTtys, NULL, "ttys" },
247      { " Upgrade",		"Upgrade an existing system.",		NULL, installUpgrade },
248      { " Usage",		"Quick start - How to use this menu system.",	NULL, dmenuDisplayFile, NULL, "usage" },
249      { " User Management",	"Add user and group information.",	NULL, dmenuSubmenu, NULL, &MenuUsermgmt },
250      { NULL } },
251};
252
253/* The country menu */
254#include "countries.h"
255
256/* The initial installation menu */
257DMenu MenuInitial = {
258    DMENU_NORMAL_TYPE,
259    "sysinstall Main Menu",				/* title */
260    "Welcome to the FreeBSD installation and configuration tool.  Please\n" /* prompt */
261    "select one of the options below by using the arrow keys or typing the\n"
262    "first character of the option name you're interested in.  Invoke an\n"
263    "option with [SPACE] or [ENTER].  To exit, use [TAB] to move to Exit.",
264    NULL,
265    NULL,
266    { { " Select " },
267      { "X Exit Install",	NULL, NULL, dmenuExit },
268      { " Usage",	"Quick start - How to use this menu system",	NULL, dmenuDisplayFile, NULL, "usage" },
269      { "Standard",	"Begin a standard installation (recommended)",	NULL, installStandard },
270      { "Express",	"Begin a quick installation (for experts)", NULL, installExpress },
271      { " Custom",	"Begin a custom installation (for experts)",	NULL, dmenuSubmenu, NULL, &MenuInstallCustom },
272      { "Configure",	"Do post-install configuration of FreeBSD",	NULL, dmenuSubmenu, NULL, &MenuConfigure },
273      { "Doc",	"Installation instructions, README, etc.",	NULL, dmenuSubmenu, NULL, &MenuDocumentation },
274#ifdef WITH_SYSCONS
275      { "Keymap",	"Select keyboard type",				NULL, keymapMenuSelect },
276#endif
277      { "Options",	"View/Set various installation options",	NULL, optionsEditor },
278      { "Fixit",	"Repair mode with CDROM/DVD/floppy or start shell",	NULL, dmenuSubmenu, NULL, &MenuFixit },
279      { "Upgrade",	"Upgrade an existing system",			NULL, installUpgrade },
280      { "Load Config..","Load default install configuration",		NULL, dispatch_load_menu },
281      { "Index",	"Glossary of functions",			NULL, dmenuSubmenu, NULL, &MenuIndex },
282      { NULL } },
283};
284
285/* The main documentation menu */
286DMenu MenuDocumentation = {
287    DMENU_NORMAL_TYPE,
288    "FreeBSD Documentation Menu",
289    "If you are at all unsure about the configuration of your hardware\n"
290    "or are looking to build a system specifically for FreeBSD, read the\n"
291    "Hardware guide!  New users should also read the Install document for\n"
292    "a step-by-step tutorial on installing FreeBSD.  For general information,\n"
293    "consult the README file.",
294    "Confused?  Press F1 for help.",
295    "usage",
296    { { "X Exit",	"Exit this menu (returning to previous)",	NULL, dmenuExit },
297      { "1 README",	"A general description of FreeBSD.  Read this!", NULL, dmenuDisplayFile, NULL, "README" },
298      { "2 Errata",	"Late-breaking, post-release news.", NULL, dmenuDisplayFile, NULL, "ERRATA" },
299      { "3 Hardware",	"The FreeBSD survival guide for PC hardware.",	NULL, dmenuDisplayFile,	NULL, "HARDWARE" },
300      { "4 Copyright",	"The FreeBSD Copyright notices.",		NULL, dmenuDisplayFile,	NULL, "COPYRIGHT" },
301      { "5 Release"	,"The release notes for this version of FreeBSD.", NULL, dmenuDisplayFile, NULL, "RELNOTES" },
302      { "6 Shortcuts",	"Creating shortcuts to sysinstall.",		NULL, dmenuDisplayFile, NULL, "shortcuts" },
303      { "7 HTML Docs",	"Go to the HTML documentation menu (post-install).", NULL, docBrowser },
304      { NULL } },
305};
306
307/* The FreeBSD documentation installation menu */
308DMenu MenuDocInstall = {
309    DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS,
310    "FreeBSD Documentation Installation Menu",
311    "This menu will allow you to install the whole documentation set\n"
312    "from the FreeBSD Documentation Project: Handbook, FAQ and articles.\n\n"
313    "Please select the language versions you wish to install.  At minimum,\n"
314    "you should install the English version, this is the original version\n"
315    "of the documentation.",
316    NULL,
317    NULL,
318    { { "X Exit",	"Exit this menu (returning to previous)",
319	      checkTrue,      dmenuExit, NULL, NULL, '<', '<', '<' },
320      { "All",		"Select all below",
321	      NULL,	      setDocAll, NULL, NULL, ' ', ' ', ' ' },
322      { " bn", 	"Bengali Documentation",
323	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_BN },
324      { " da", 	"Danish Documentation",
325	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_DA },
326      { " de", 	"German Documentation",
327	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_DE },
328      { " el", 	"Greek Documentation",
329	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_EL },
330      { " en", 	"English Documentation (recommended)",
331	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_EN },
332      { " es", 	"Spanish Documentation",
333	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_ES },
334      { " fr", 	"French Documentation",
335	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_FR },
336      { " hu", 	"Hungarian Documentation",
337	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_HU },
338      { " it", 	"Italian Documentation",
339	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_IT },
340      { " ja", 	"Japanese Documentation",
341	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_JA },
342      { " mn", 	"Mongolian Documentation",
343	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_MN },
344      { " nl", 	"Dutch Documentation",
345	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_NL },
346      { " pl", 	"Polish Documentation",
347	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_PL },
348      { " pt", 	"Portuguese Documentation",
349	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_PT },
350      { " ru", 	"Russian Documentation",
351	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_RU },
352      { " sr", 	"Serbian Documentation",
353	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_SR },
354      { " tr", 	"Turkish Documentation",
355	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_TR },
356      { " zh_cn", 	"Simplified Chinese Documentation",
357	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_ZH_CN },
358      { " zh_tw", 	"Traditional Chinese Documentation",
359	      dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_ZH_TW },
360      { NULL } },
361};
362
363#ifdef WITH_MICE
364DMenu MenuMouseType = {
365    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
366#ifdef PC98
367    "Select a protocol type for your mouse",
368    "If your mouse is attached to the bus mouse port, you should always choose\n"
369    "\"Auto\", regardless of the model and the brand of the mouse.  All other\n"
370    "protocol types are for serial mice and should not be used with the bus\n"
371    "mouse.  If you have a serial mouse and are not sure about its protocol,\n"
372    "you should also try \"Auto\".  It may not work for the serial mouse if the\n"
373    "mouse does not support the PnP standard.  But, it won't hurt.  Many\n"
374    "2-button serial mice are compatible with \"Microsoft\" or \"MouseMan\".\n"
375    "3-button serial mice may be compatible with \"MouseSystems\" or \"MouseMan\".\n"
376    "If the serial mouse has a wheel, it may be compatible with \"IntelliMouse\".",
377    NULL,
378    NULL,
379    { { "1 Auto",	"Bus mouse or PnP serial mouse",
380	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=auto" },
381#else
382    "Select a protocol type for your mouse",
383    "If your mouse is attached to the PS/2 mouse port or the bus mouse port,\n"
384    "you should always choose \"Auto\", regardless of the model and the brand\n"
385    "of the mouse.  All other protocol types are for serial mice and should\n"
386    "not be used with the PS/2 port mouse or the bus mouse.  If you have\n"
387    "a serial mouse and are not sure about its protocol, you should also try\n"
388    "\"Auto\".  It may not work for the serial mouse if the mouse does not\n"
389    "support the PnP standard.  But, it won't hurt.  Many 2-button serial mice\n"
390    "are compatible with \"Microsoft\" or \"MouseMan\".  3-button serial mice\n"
391    "may be compatible with \"MouseSystems\" or \"MouseMan\".  If the serial\n"
392    "mouse has a wheel, it may be compatible with \"IntelliMouse\".",
393    NULL,
394    NULL,
395    { { "1 Auto",	"Bus mouse, PS/2 style mouse or PnP serial mouse",
396	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=auto" },
397#endif /* PC98 */
398      { "2 GlidePoint",	"ALPS GlidePoint pad (serial)",
399	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=glidepoint" },
400      { "3 Hitachi","Hitachi tablet (serial)",
401	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=mmhittab" },
402      { "4 IntelliMouse",	"Microsoft IntelliMouse (serial)",
403	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=intellimouse" },
404      { "5 Logitech",	"Logitech protocol (old models) (serial)",
405	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=logitech" },
406      { "6 Microsoft",	"Microsoft protocol (serial)",
407	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=microsoft" },
408      { "7 MM Series","MM Series protocol (serial)",
409	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=mmseries" },
410      { "8 MouseMan",	"Logitech MouseMan/TrackMan models (serial)",
411	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=mouseman" },
412      { "9 MouseSystems",	"MouseSystems protocol (serial)",
413	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=mousesystems" },
414      { "A ThinkingMouse","Kensington ThinkingMouse (serial)",
415	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=thinkingmouse" },
416      { NULL } },
417};
418
419#ifdef PC98
420DMenu MenuMousePort = {
421    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
422    "Select your mouse port from the following menu",
423    "The built-in pointing device of laptop/notebook computers is usually\n"
424    "a BusMouse style device.",
425    NULL,
426    NULL,
427    {
428      { "1 BusMouse",	"PC-98x1 bus mouse (/dev/mse0)",
429	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/mse0" },
430      { "2 COM1",	"Serial mouse on COM1 (/dev/cuau0)",
431	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/cuau0" },
432      { "3 COM2",	"Serial mouse on COM2 (/dev/cuau1)",
433	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/cuau1" },
434      { NULL } },
435};
436#else
437DMenu MenuMousePort = {
438    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
439    "Select your mouse port from the following menu",
440    "The built-in pointing device of laptop/notebook computers is usually\n"
441    "a PS/2 style device.",
442    NULL,
443    NULL,
444    { { "1 PS/2",	"PS/2 style mouse (/dev/psm0)",
445	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/psm0" },
446      { "2 COM1",	"Serial mouse on COM1 (/dev/cuau0)",
447	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/cuau0" },
448      { "3 COM2",	"Serial mouse on COM2 (/dev/cuau1)",
449	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/cuau1" },
450      { "4 COM3",	"Serial mouse on COM3 (/dev/cuau2)",
451	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/cuau2" },
452      { "5 COM4",	"Serial mouse on COM4 (/dev/cuau3)",
453	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/cuau3" },
454      { "6 BusMouse",	"Logitech, ATI or MS bus mouse (/dev/mse0)",
455	dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/mse0" },
456      { NULL } },
457};
458#endif /* PC98 */
459
460DMenu MenuMouse = {
461    DMENU_NORMAL_TYPE,
462    "Please configure your mouse",
463    "You can cut and paste text in the text console by running the mouse\n"
464    "daemon.  Specify a port and a protocol type of your mouse and enable\n"
465    "the mouse daemon.  If you don't want this feature, select 6 to disable\n"
466    "the daemon.\n"
467    "Once you've enabled the mouse daemon, you can specify \"/dev/sysmouse\"\n"
468    "as your mouse device and \"SysMouse\" or \"MouseSystems\" as mouse\n"
469    "protocol when running the X configuration utility (see Configuration\n"
470    "menu).",
471    NULL,
472    NULL,
473    { { "X Exit", "Exit this menu (returning to previous)", NULL, dmenuExit },
474      { "2 Enable",	"Test and run the mouse daemon", NULL, mousedTest, NULL, NULL },
475      { "3 Type",	"Select mouse protocol type", NULL, dmenuSubmenu, NULL, &MenuMouseType },
476      { "4 Port",	"Select mouse port", NULL, dmenuSubmenu, NULL, &MenuMousePort },
477      { "5 Flags",      "Set additional flags", dmenuVarCheck, setMouseFlags,
478	NULL, VAR_MOUSED_FLAGS "=" },
479      { "6 Disable",	"Disable the mouse daemon", NULL, mousedDisable, NULL, NULL },
480      { NULL } },
481};
482#endif /* WITH_MICE */
483
484DMenu MenuMediaCDROM = {
485    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
486    "Choose a CD/DVD type",
487    "FreeBSD can be installed directly from a CD/DVD containing a valid\n"
488    "FreeBSD distribution.  If you are seeing this menu it is because\n"
489    "more than one CD/DVD drive was found on your system.  Please select one\n"
490    "of the following CD/DVD drives as your installation drive.",
491    NULL,
492    NULL,
493    { { NULL } },
494};
495
496DMenu MenuMediaFloppy = {
497    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
498    "Choose a Floppy drive",
499    "You have more than one floppy drive.  Please choose which drive\n"
500    "you would like to use.",
501    NULL,
502    NULL,
503    { { NULL } },
504};
505
506DMenu MenuMediaUSB = {
507	DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
508	"Choose a USB drive",
509	"You have more than one USB drive. Please choose which drive\n"
510	"you would like to use.",
511	NULL,
512	NULL,
513	{ { NULL } },
514};
515
516DMenu MenuMediaDOS = {
517    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
518    "Choose a DOS partition",
519    "FreeBSD can be installed directly from a DOS partition\n"
520    "assuming, of course, that you have copied the relevant\n"
521    "distributions into your DOS partition before starting this\n"
522    "installation.  If this is not the case then you should reboot\n"
523    "DOS at this time and copy the distributions you wish to install\n"
524    "into a \"FREEBSD\" subdirectory on one of your DOS partitions.\n"
525    "Otherwise, please select the DOS partition containing the FreeBSD\n"
526    "distribution files.",
527    NULL,
528    NULL,
529    { { NULL } },
530};
531
532DMenu MenuMediaFTP = {
533    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
534    "Please select a FreeBSD FTP distribution site",
535    "Please select the site closest to you or \"other\" if you'd like to\n"
536    "specify a different choice.  Also note that not every site listed here\n"
537    "carries more than the base distribution kits. Only Primary sites are\n"
538    "guaranteed to carry the full range of possible distributions.",
539    "Select a site that's close!",
540    NULL,
541    { { "Main Site",	"ftp.freebsd.org", NULL, dmenuSetVariable, NULL,
542	VAR_FTP_PATH "=ftp://ftp.freebsd.org" },
543      { "URL", "Specify some other ftp site by URL", NULL, dmenuSetVariable, NULL,
544	VAR_FTP_PATH "=other" },
545      { "Snapshots Server Japan", "snapshots.jp.freebsd.org", NULL, dmenuSetVariable, NULL,
546	VAR_FTP_PATH "=ftp://snapshots.jp.freebsd.org" },
547      { "Snapshots Server Sweden", "snapshots.se.freebsd.org", NULL, dmenuSetVariable, NULL,
548	VAR_FTP_PATH "=ftp://snapshots.se.freebsd.org" },
549
550      { "IPv6 Main Site", "ftp.freebsd.org", NULL, dmenuSetVariable, NULL,
551	VAR_FTP_PATH "=ftp://ftp.freebsd.org" },
552      { " IPv6 Ireland", "ftp3.ie.freebsd.org", NULL, dmenuSetVariable, NULL,
553	VAR_FTP_PATH "=ftp://ftp3.ie.freebsd.org" },
554      { " IPv6 Israel", "ftp.il.freebsd.org", NULL, dmenuSetVariable, NULL,
555	VAR_FTP_PATH "=ftp://ftp.il.freebsd.org" },
556      { " IPv6 Japan", "ftp2.jp.freebsd.org", NULL, dmenuSetVariable, NULL,
557	VAR_FTP_PATH "=ftp://ftp2.jp.freebsd.org" },
558      { " IPv6 USA", "ftp4.us.freebsd.org", NULL, dmenuSetVariable, NULL,
559	VAR_FTP_PATH "=ftp://ftp4.us.freebsd.org" },
560      { " IPv6 Turkey", "ftp2.tr.freebsd.org", NULL, dmenuSetVariable, NULL,
561	VAR_FTP_PATH "=ftp://ftp2.tr.freebsd.org" },
562
563      { "Primary",	"ftp1.freebsd.org", NULL, dmenuSetVariable, NULL,
564	VAR_FTP_PATH "=ftp://ftp1.freebsd.org" },
565      { " Primary #2",	"ftp2.freebsd.org", NULL, dmenuSetVariable, NULL,
566	VAR_FTP_PATH "=ftp://ftp2.freebsd.org" },
567      { " Primary #3",	"ftp3.freebsd.org", NULL, dmenuSetVariable, NULL,
568	VAR_FTP_PATH "=ftp://ftp3.freebsd.org" },
569      { " Primary #4",	"ftp4.freebsd.org", NULL, dmenuSetVariable, NULL,
570	VAR_FTP_PATH "=ftp://ftp4.freebsd.org" },
571      { " Primary #5",	"ftp5.freebsd.org", NULL, dmenuSetVariable, NULL,
572	VAR_FTP_PATH "=ftp://ftp5.freebsd.org" },
573      { " Primary #6",	"ftp6.freebsd.org", NULL, dmenuSetVariable, NULL,
574	VAR_FTP_PATH "=ftp://ftp6.freebsd.org" },
575      { " Primary #7",	"ftp7.freebsd.org", NULL, dmenuSetVariable, NULL,
576	VAR_FTP_PATH "=ftp://ftp7.freebsd.org" },
577      { " Primary #8",	"ftp8.freebsd.org", NULL, dmenuSetVariable, NULL,
578	VAR_FTP_PATH "=ftp://ftp8.freebsd.org" },
579      { " Primary #9",	"ftp9.freebsd.org", NULL, dmenuSetVariable, NULL,
580	VAR_FTP_PATH "=ftp://ftp9.freebsd.org" },
581      { " Primary #10",	"ftp10.freebsd.org", NULL, dmenuSetVariable, NULL,
582	VAR_FTP_PATH "=ftp://ftp10.freebsd.org" },
583      { " Primary #11",	"ftp11.freebsd.org", NULL, dmenuSetVariable, NULL,
584	VAR_FTP_PATH "=ftp://ftp11.freebsd.org" },
585      { " Primary #12",	"ftp12.freebsd.org", NULL, dmenuSetVariable, NULL,
586	VAR_FTP_PATH "=ftp://ftp12.freebsd.org" },
587      { " Primary #13",	"ftp13.freebsd.org", NULL, dmenuSetVariable, NULL,
588	VAR_FTP_PATH "=ftp://ftp13.freebsd.org" },
589      { " Primary #14",	"ftp14.freebsd.org", NULL, dmenuSetVariable, NULL,
590	VAR_FTP_PATH "=ftp://ftp14.freebsd.org" },
591
592      { "Argentina",	"ftp.ar.freebsd.org", NULL, dmenuSetVariable, NULL,
593	VAR_FTP_PATH "=ftp://ftp.ar.freebsd.org" },
594
595      { "Australia",	"ftp.au.freebsd.org", NULL, dmenuSetVariable, NULL,
596	VAR_FTP_PATH "=ftp://ftp.au.freebsd.org" },
597      { " Australia #2","ftp2.au.freebsd.org", NULL, dmenuSetVariable, NULL,
598	VAR_FTP_PATH "=ftp://ftp2.au.freebsd.org" },
599      { " Australia #3","ftp3.au.freebsd.org", NULL, dmenuSetVariable, NULL,
600	VAR_FTP_PATH "=ftp://ftp3.au.freebsd.org" },
601
602      { "Austria","ftp.at.freebsd.org", NULL, dmenuSetVariable, NULL,
603	VAR_FTP_PATH "=ftp://ftp.at.freebsd.org" },
604      { " Austria #2","ftp2.at.freebsd.org", NULL, dmenuSetVariable, NULL,
605	VAR_FTP_PATH "=ftp://ftp2.at.freebsd.org" },
606
607      { "Brazil",	"ftp.br.freebsd.org", NULL, dmenuSetVariable, NULL,
608	VAR_FTP_PATH "=ftp://ftp.br.freebsd.org" },
609      { " Brazil #2",	"ftp2.br.freebsd.org", NULL, dmenuSetVariable, NULL,
610	VAR_FTP_PATH "=ftp://ftp2.br.freebsd.org" },
611      { " Brazil #3",	"ftp3.br.freebsd.org", NULL, dmenuSetVariable, NULL,
612	VAR_FTP_PATH "=ftp://ftp3.br.freebsd.org" },
613      { " Brazil #4",	"ftp4.br.freebsd.org", NULL, dmenuSetVariable, NULL,
614	VAR_FTP_PATH "=ftp://ftp4.br.freebsd.org" },
615      { " Brazil #5",	"ftp5.br.freebsd.org", NULL, dmenuSetVariable, NULL,
616	VAR_FTP_PATH "=ftp://ftp5.br.freebsd.org" },
617      { " Brazil #6",	"ftp6.br.freebsd.org", NULL, dmenuSetVariable, NULL,
618	VAR_FTP_PATH "=ftp://ftp6.br.freebsd.org" },
619      { " Brazil #7",	"ftp7.br.freebsd.org", NULL, dmenuSetVariable, NULL,
620	VAR_FTP_PATH "=ftp://ftp7.br.freebsd.org" },
621
622      { "Canada",	"ftp.ca.freebsd.org", NULL, dmenuSetVariable, NULL,
623	VAR_FTP_PATH "=ftp://ftp.ca.freebsd.org" },
624
625      { "China",	"ftp.cn.freebsd.org", NULL, dmenuSetVariable, NULL,
626	VAR_FTP_PATH "=ftp://ftp.cn.freebsd.org" },
627      { " China #2",	"ftp2.cn.freebsd.org", NULL, dmenuSetVariable, NULL,
628	VAR_FTP_PATH "=ftp://ftp2.cn.freebsd.org" },
629
630      { "Croatia",	"ftp.hr.freebsd.org", NULL, dmenuSetVariable, NULL,
631	VAR_FTP_PATH "=ftp://ftp.hr.freebsd.org" },
632
633      { "Czech Republic", "ftp.cz.freebsd.org", NULL, dmenuSetVariable, NULL,
634	VAR_FTP_PATH "=ftp://ftp.cz.freebsd.org" },
635
636      { "Denmark",	"ftp.dk.freebsd.org", NULL, dmenuSetVariable, NULL,
637	VAR_FTP_PATH "=ftp://ftp.dk.freebsd.org" },
638      { " Denmark #2",	"ftp2.dk.freebsd.org", NULL, dmenuSetVariable, NULL,
639	VAR_FTP_PATH "=ftp://ftp2.dk.freebsd.org" },
640
641      { "Estonia",	"ftp.ee.freebsd.org", NULL, dmenuSetVariable, NULL,
642	VAR_FTP_PATH "=ftp://ftp.ee.freebsd.org" },
643
644      { "Finland",	"ftp.fi.freebsd.org", NULL, dmenuSetVariable, NULL,
645	VAR_FTP_PATH "=ftp://ftp.fi.freebsd.org" },
646
647      { "France",	"ftp.fr.freebsd.org", NULL, dmenuSetVariable, NULL,
648	VAR_FTP_PATH "=ftp://ftp.fr.freebsd.org" },
649      { " France #2",	"ftp2.fr.freebsd.org", NULL, dmenuSetVariable, NULL,
650	VAR_FTP_PATH "=ftp://ftp2.fr.freebsd.org" },
651      { " France #3",	"ftp3.fr.freebsd.org", NULL, dmenuSetVariable, NULL,
652	VAR_FTP_PATH "=ftp://ftp3.fr.freebsd.org" },
653      { " France #5",	"ftp5.fr.freebsd.org", NULL, dmenuSetVariable, NULL,
654	VAR_FTP_PATH "=ftp://ftp5.fr.freebsd.org" },
655      { " France #6",	"ftp6.fr.freebsd.org", NULL, dmenuSetVariable, NULL,
656	VAR_FTP_PATH "=ftp://ftp6.fr.freebsd.org" },
657      { " France #8",	"ftp8.fr.freebsd.org", NULL, dmenuSetVariable, NULL,
658	VAR_FTP_PATH "=ftp://ftp8.fr.freebsd.org" },
659
660      { "Germany",	"ftp.de.freebsd.org", NULL, dmenuSetVariable, NULL,
661	VAR_FTP_PATH "=ftp://ftp.de.freebsd.org" },
662      { " Germany #2",	"ftp2.de.freebsd.org", NULL, dmenuSetVariable, NULL,
663	VAR_FTP_PATH "=ftp://ftp2.de.freebsd.org" },
664      { " Germany #3",	"ftp3.de.freebsd.org", NULL, dmenuSetVariable, NULL,
665	VAR_FTP_PATH "=ftp://ftp3.de.freebsd.org" },
666      { " Germany #4",	"ftp4.de.freebsd.org", NULL, dmenuSetVariable, NULL,
667	VAR_FTP_PATH "=ftp://ftp4.de.freebsd.org" },
668      { " Germany #5",	"ftp5.de.freebsd.org", NULL, dmenuSetVariable, NULL,
669	VAR_FTP_PATH "=ftp://ftp5.de.freebsd.org" },
670      { " Germany #6",	"ftp6.de.freebsd.org", NULL, dmenuSetVariable, NULL,
671	VAR_FTP_PATH "=ftp://ftp6.de.freebsd.org" },
672      { " Germany #7",	"ftp7.de.freebsd.org", NULL, dmenuSetVariable, NULL,
673	VAR_FTP_PATH "=ftp://ftp7.de.freebsd.org" },
674      { " Germany #8",	"ftp8.de.freebsd.org", NULL, dmenuSetVariable, NULL,
675	VAR_FTP_PATH "=ftp://ftp8.de.freebsd.org" },
676
677      { "Greece",	"ftp.gr.freebsd.org", NULL, dmenuSetVariable, NULL,
678	VAR_FTP_PATH "=ftp://ftp.gr.freebsd.org" },
679      { " Greece #2",	"ftp2.gr.freebsd.org", NULL, dmenuSetVariable, NULL,
680	VAR_FTP_PATH "=ftp://ftp2.gr.freebsd.org" },
681
682      { "Hungary",     "ftp.hu.freebsd.org", NULL, dmenuSetVariable, NULL,
683	VAR_FTP_PATH "=ftp://ftp.hu.freebsd.org" },
684
685      { "Iceland",	"ftp.is.freebsd.org", NULL, dmenuSetVariable, NULL,
686	VAR_FTP_PATH "=ftp://ftp.is.freebsd.org" },
687
688      { "Ireland",	"ftp.ie.freebsd.org", NULL, dmenuSetVariable, NULL,
689	VAR_FTP_PATH "=ftp://ftp.ie.freebsd.org" },
690      { " Ireland #2",	"ftp2.ie.freebsd.org", NULL, dmenuSetVariable, NULL,
691	VAR_FTP_PATH "=ftp://ftp2.ie.freebsd.org" },
692      { " Ireland #3",	"ftp3.ie.freebsd.org", NULL, dmenuSetVariable, NULL,
693	VAR_FTP_PATH "=ftp://ftp3.ie.freebsd.org" },
694
695      { "Israel",	"ftp.il.freebsd.org", NULL, dmenuSetVariable, NULL,
696	VAR_FTP_PATH "=ftp://ftp.il.freebsd.org" },
697
698      { "Italy",	"ftp.it.freebsd.org", NULL, dmenuSetVariable, NULL,
699	VAR_FTP_PATH "=ftp://ftp.it.freebsd.org" },
700
701      { "Japan",	"ftp.jp.freebsd.org", NULL, dmenuSetVariable, NULL,
702	VAR_FTP_PATH "=ftp://ftp.jp.freebsd.org" },
703      { " Japan #2",	"ftp2.jp.freebsd.org", NULL, dmenuSetVariable, NULL,
704	VAR_FTP_PATH "=ftp://ftp2.jp.freebsd.org" },
705      { " Japan #3",	"ftp3.jp.freebsd.org", NULL, dmenuSetVariable, NULL,
706	VAR_FTP_PATH "=ftp://ftp3.jp.freebsd.org" },
707      { " Japan #4",	"ftp4.jp.freebsd.org", NULL, dmenuSetVariable, NULL,
708	VAR_FTP_PATH "=ftp://ftp4.jp.freebsd.org" },
709      { " Japan #5",	"ftp5.jp.freebsd.org", NULL, dmenuSetVariable, NULL,
710	VAR_FTP_PATH "=ftp://ftp5.jp.freebsd.org" },
711      { " Japan #6",	"ftp6.jp.freebsd.org", NULL, dmenuSetVariable, NULL,
712	VAR_FTP_PATH "=ftp://ftp6.jp.freebsd.org" },
713      { " Japan #7",	"ftp7.jp.freebsd.org", NULL, dmenuSetVariable, NULL,
714	VAR_FTP_PATH "=ftp://ftp7.jp.freebsd.org" },
715      { " Japan #8",	"ftp8.jp.freebsd.org", NULL, dmenuSetVariable, NULL,
716	VAR_FTP_PATH "=ftp://ftp8.jp.freebsd.org" },
717      { " Japan #9",	"ftp9.jp.freebsd.org", NULL, dmenuSetVariable, NULL,
718	VAR_FTP_PATH "=ftp://ftp9.jp.freebsd.org" },
719
720      { "Korea",	"ftp.kr.freebsd.org", NULL, dmenuSetVariable, NULL,
721	VAR_FTP_PATH "=ftp://ftp.kr.freebsd.org" },
722      { " Korea #2",	"ftp2.kr.freebsd.org", NULL, dmenuSetVariable, NULL,
723	VAR_FTP_PATH "=ftp://ftp2.kr.freebsd.org" },
724
725      { "Lithuania",	"ftp.lt.freebsd.org", NULL, dmenuSetVariable, NULL,
726	VAR_FTP_PATH "=ftp://ftp.lt.freebsd.org" },
727
728      { "Netherlands",	"ftp.nl.freebsd.org", NULL, dmenuSetVariable, NULL,
729	VAR_FTP_PATH "=ftp://ftp.nl.freebsd.org" },
730      { " Netherlands #2",	"ftp2.nl.freebsd.org", NULL, dmenuSetVariable, NULL,
731	VAR_FTP_PATH "=ftp://ftp2.nl.freebsd.org" },
732
733      { "Norway",	"ftp.no.freebsd.org", NULL, dmenuSetVariable, NULL,
734	VAR_FTP_PATH "=ftp://ftp.no.freebsd.org" },
735      { " Norway #3",	"ftp3.no.freebsd.org", NULL, dmenuSetVariable, NULL,
736	VAR_FTP_PATH "=ftp://ftp3.no.freebsd.org" },
737
738      { "Poland",	"ftp.pl.freebsd.org", NULL, dmenuSetVariable, NULL,
739	VAR_FTP_PATH "=ftp://ftp.pl.freebsd.org" },
740      { " Poland #2",	"ftp2.pl.freebsd.org", NULL, dmenuSetVariable, NULL,
741	VAR_FTP_PATH "=ftp://ftp2.pl.freebsd.org" },
742      { " Poland #5",	"ftp5.pl.freebsd.org", NULL, dmenuSetVariable, NULL,
743	VAR_FTP_PATH "=ftp://ftp5.pl.freebsd.org" },
744
745      { "Portugal",	"ftp.pt.freebsd.org", NULL, dmenuSetVariable, NULL,
746	VAR_FTP_PATH "=ftp://ftp.pt.freebsd.org" },
747      { " Portugal #2",	"ftp2.pt.freebsd.org", NULL, dmenuSetVariable, NULL,
748	VAR_FTP_PATH "=ftp://ftp2.pt.freebsd.org" },
749      { " Portugal #4",	"ftp4.pt.freebsd.org", NULL, dmenuSetVariable, NULL,
750	VAR_FTP_PATH "=ftp://ftp4.pt.freebsd.org" },
751
752      { "Romania",	"ftp.ro.freebsd.org", NULL, dmenuSetVariable, NULL,
753	VAR_FTP_PATH "=ftp://ftp.ro.freebsd.org" },
754
755      { "Russia",	"ftp.ru.freebsd.org", NULL, dmenuSetVariable, NULL,
756	VAR_FTP_PATH "=ftp://ftp.ru.freebsd.org" },
757      { " Russia #2",	"ftp2.ru.freebsd.org", NULL, dmenuSetVariable, NULL,
758	VAR_FTP_PATH "=ftp://ftp2.ru.freebsd.org" },
759      { " Russia #3",	"ftp3.ru.freebsd.org", NULL, dmenuSetVariable, NULL,
760	VAR_FTP_PATH "=ftp://ftp3.ru.freebsd.org" },
761      { " Russia #4",	"ftp4.ru.freebsd.org", NULL, dmenuSetVariable, NULL,
762	VAR_FTP_PATH "=ftp://ftp4.ru.freebsd.org" },
763
764      { "Singapore",	"ftp.sg.freebsd.org", NULL, dmenuSetVariable, NULL,
765	VAR_FTP_PATH "=ftp://ftp.sg.freebsd.org" },
766
767      { "Slovak Republic",	"ftp.sk.freebsd.org", NULL, dmenuSetVariable, NULL,
768	VAR_FTP_PATH "=ftp://ftp.sk.freebsd.org" },
769
770      { "Slovenia",	"ftp.si.freebsd.org", NULL, dmenuSetVariable, NULL,
771	VAR_FTP_PATH "=ftp://ftp.si.freebsd.org" },
772      { " Slovenia #2",	"ftp2.si.freebsd.org", NULL, dmenuSetVariable, NULL,
773	VAR_FTP_PATH "=ftp://ftp2.si.freebsd.org" },
774
775      { "South Africa",	"ftp.za.freebsd.org", NULL, dmenuSetVariable, NULL,
776	VAR_FTP_PATH "=ftp://ftp.za.freebsd.org" },
777      { " South Africa #2", "ftp2.za.freebsd.org", NULL, dmenuSetVariable, NULL,
778	VAR_FTP_PATH "=ftp://ftp2.za.freebsd.org" },
779      { " South Africa #3", "ftp3.za.freebsd.org", NULL, dmenuSetVariable, NULL,
780	VAR_FTP_PATH "=ftp://ftp3.za.freebsd.org" },
781      { " South Africa #4", "ftp4.za.freebsd.org", NULL, dmenuSetVariable, NULL,
782	VAR_FTP_PATH "=ftp://ftp4.za.freebsd.org" },
783
784      { "Spain",	"ftp.es.freebsd.org", NULL, dmenuSetVariable, NULL,
785	VAR_FTP_PATH "=ftp://ftp.es.freebsd.org" },
786      { " Spain #2",	"ftp2.es.freebsd.org", NULL, dmenuSetVariable, NULL,
787	VAR_FTP_PATH "=ftp://ftp2.es.freebsd.org" },
788      { " Spain #3",	"ftp3.es.freebsd.org", NULL, dmenuSetVariable, NULL,
789	VAR_FTP_PATH "=ftp://ftp3.es.freebsd.org" },
790
791      { "Sweden",	"ftp.se.freebsd.org", NULL, dmenuSetVariable, NULL,
792	VAR_FTP_PATH "=ftp://ftp.se.freebsd.org" },
793      { " Sweden #2",	"ftp2.se.freebsd.org", NULL, dmenuSetVariable, NULL,
794	VAR_FTP_PATH "=ftp://ftp2.se.freebsd.org" },
795      { " Sweden #3",	"ftp3.se.freebsd.org", NULL, dmenuSetVariable, NULL,
796	VAR_FTP_PATH "=ftp://ftp3.se.freebsd.org" },
797      { " Sweden #4",	"ftp4.se.freebsd.org", NULL, dmenuSetVariable, NULL,
798	VAR_FTP_PATH "=ftp://ftp4.se.freebsd.org" },
799      { " Sweden #5",	"ftp5.se.freebsd.org", NULL, dmenuSetVariable, NULL,
800	VAR_FTP_PATH "=ftp://ftp5.se.freebsd.org" },
801
802      { "Switzerland",	"ftp.ch.freebsd.org", NULL, dmenuSetVariable, NULL,
803	VAR_FTP_PATH "=ftp://ftp.ch.freebsd.org" },
804      { " Switzerland #2",	"ftp2.ch.freebsd.org", NULL, dmenuSetVariable, NULL,
805	VAR_FTP_PATH "=ftp://ftp2.ch.freebsd.org" },
806
807      { "Taiwan",	"ftp.tw.freebsd.org", NULL, dmenuSetVariable, NULL,
808	VAR_FTP_PATH "=ftp://ftp.tw.freebsd.org" },
809      { " Taiwan #2",	"ftp2.tw.freebsd.org", NULL, dmenuSetVariable, NULL,
810	VAR_FTP_PATH "=ftp://ftp2.tw.freebsd.org" },
811      { " Taiwan #3",	"ftp3.tw.freebsd.org", NULL, dmenuSetVariable, NULL,
812	VAR_FTP_PATH "=ftp://ftp3.tw.freebsd.org" },
813      { " Taiwan #4",   "ftp4.tw.freebsd.org", NULL, dmenuSetVariable, NULL,
814	VAR_FTP_PATH "=ftp://ftp4.tw.freebsd.org" },
815      { " Taiwan #6",   "ftp6.tw.freebsd.org", NULL, dmenuSetVariable, NULL,
816	VAR_FTP_PATH "=ftp://ftp6.tw.freebsd.org" },
817      { " Taiwan #11",   "ftp11.tw.freebsd.org", NULL, dmenuSetVariable, NULL,
818	VAR_FTP_PATH "=ftp://ftp11.tw.freebsd.org" },
819
820      { "Turkey",	"ftp.tr.freebsd.org", NULL, dmenuSetVariable, NULL,
821	VAR_FTP_PATH "=ftp://ftp.tr.freebsd.org" },
822      { " Turkey #2",	"ftp2.tr.freebsd.org", NULL, dmenuSetVariable, NULL,
823	VAR_FTP_PATH "=ftp://ftp2.tr.freebsd.org" },
824
825      { "UK",		"ftp.uk.freebsd.org", NULL, dmenuSetVariable, NULL,
826	VAR_FTP_PATH "=ftp://ftp.uk.freebsd.org" },
827      { " UK #2",	"ftp2.uk.freebsd.org", NULL, dmenuSetVariable, NULL,
828	VAR_FTP_PATH "=ftp://ftp2.uk.freebsd.org" },
829      { " UK #3",	"ftp3.uk.freebsd.org", NULL, dmenuSetVariable, NULL,
830	VAR_FTP_PATH "=ftp://ftp3.uk.freebsd.org" },
831      { " UK #4",	"ftp4.uk.freebsd.org", NULL, dmenuSetVariable, NULL,
832	VAR_FTP_PATH "=ftp://ftp4.uk.freebsd.org" },
833      { " UK #5",	"ftp5.uk.freebsd.org", NULL, dmenuSetVariable, NULL,
834	VAR_FTP_PATH "=ftp://ftp5.uk.freebsd.org" },
835      { " UK #6",	"ftp6.uk.freebsd.org", NULL, dmenuSetVariable, NULL,
836	VAR_FTP_PATH "=ftp://ftp6.uk.freebsd.org" },
837
838      { "Ukraine",	"ftp.ua.freebsd.org", NULL, dmenuSetVariable, NULL,
839	VAR_FTP_PATH "=ftp://ftp.ua.freebsd.org" },
840      { " Ukraine #2",	"ftp2.ua.freebsd.org", NULL, dmenuSetVariable, NULL,
841	VAR_FTP_PATH "=ftp://ftp2.ua.freebsd.org" },
842      { " Ukraine #5",	"ftp5.ua.freebsd.org", NULL, dmenuSetVariable, NULL,
843	VAR_FTP_PATH "=ftp://ftp5.ua.freebsd.org" },
844      { " Ukraine #6",	"ftp6.ua.freebsd.org", NULL, dmenuSetVariable, NULL,
845	VAR_FTP_PATH "=ftp://ftp6.ua.freebsd.org" },
846      { " Ukraine #7",	"ftp7.ua.freebsd.org", NULL, dmenuSetVariable, NULL,
847	VAR_FTP_PATH "=ftp://ftp7.ua.freebsd.org" },
848      { " Ukraine #8",	"ftp8.ua.freebsd.org", NULL, dmenuSetVariable, NULL,
849	VAR_FTP_PATH "=ftp://ftp8.ua.freebsd.org" },
850
851      { "USA #1",	"ftp1.us.freebsd.org", NULL, dmenuSetVariable, NULL,
852	VAR_FTP_PATH "=ftp://ftp1.us.freebsd.org" },
853      { " USA #2",	"ftp2.us.freebsd.org", NULL, dmenuSetVariable, NULL,
854	VAR_FTP_PATH "=ftp://ftp2.us.freebsd.org" },
855      { " USA #3",	"ftp3.us.freebsd.org", NULL, dmenuSetVariable, NULL,
856	VAR_FTP_PATH "=ftp://ftp3.us.freebsd.org" },
857      { " USA #4",	"ftp4.us.freebsd.org", NULL, dmenuSetVariable, NULL,
858	VAR_FTP_PATH "=ftp://ftp4.us.freebsd.org" },
859      { " USA #5",	"ftp5.us.freebsd.org", NULL, dmenuSetVariable, NULL,
860	VAR_FTP_PATH "=ftp://ftp5.us.freebsd.org" },
861      { " USA #6",	"ftp6.us.freebsd.org", NULL, dmenuSetVariable, NULL,
862	VAR_FTP_PATH "=ftp://ftp6.us.freebsd.org" },
863      { " USA #7",	"ftp7.us.freebsd.org", NULL, dmenuSetVariable, NULL,
864	VAR_FTP_PATH "=ftp://ftp7.us.freebsd.org" },
865      { " USA #8",	"ftp8.us.freebsd.org", NULL, dmenuSetVariable, NULL,
866	VAR_FTP_PATH "=ftp://ftp8.us.freebsd.org" },
867      { " USA #9",	"ftp9.us.freebsd.org", NULL, dmenuSetVariable, NULL,
868	VAR_FTP_PATH "=ftp://ftp9.us.freebsd.org" },
869      { " USA #10",	"ftp10.us.freebsd.org", NULL, dmenuSetVariable, NULL,
870	VAR_FTP_PATH "=ftp://ftp10.us.freebsd.org" },
871      { " USA #11",	"ftp11.us.freebsd.org", NULL, dmenuSetVariable, NULL,
872	VAR_FTP_PATH "=ftp://ftp11.us.freebsd.org" },
873      { " USA #12",	"ftp12.us.freebsd.org", NULL, dmenuSetVariable, NULL,
874	VAR_FTP_PATH "=ftp://ftp12.us.freebsd.org" },
875      { " USA #13",	"ftp13.us.freebsd.org", NULL, dmenuSetVariable, NULL,
876	VAR_FTP_PATH "=ftp://ftp13.us.freebsd.org" },
877      { " USA #14",	"ftp14.us.freebsd.org", NULL, dmenuSetVariable, NULL,
878	VAR_FTP_PATH "=ftp://ftp14.us.freebsd.org" },
879      { " USA #15",	"ftp15.us.freebsd.org", NULL, dmenuSetVariable, NULL,
880	VAR_FTP_PATH "=ftp://ftp15.us.freebsd.org" },
881
882      { NULL } }
883};
884
885DMenu MenuMediaHTTPDirect = {
886    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
887    "Please select a FreeBSD HTTP distribution site",
888    "Please select the site closest to you or \"other\" if you'd like to\n"
889    "specify a different choice.  Also note that not every site listed here\n"
890    "carries more than the base distribution kits. Only Primary sites are\n"
891    "guaranteed to carry the full range of possible distributions.",
892    "Select a site that's close!",
893    NULL,
894    { { "URL", "Specify some other http site by URL", NULL, dmenuSetVariable, NULL,
895	VAR_HTTP_PATH "=other" },
896
897      { NULL } }
898};
899
900DMenu MenuNetworkDevice = {
901    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
902    "Network interface information required",
903    "Please select the ethernet or PLIP device to configure.\n\n"
904    "",
905    "Press F1 to read network configuration manual",
906    "network_device",
907    { { NULL } },
908};
909
910/* Prototype KLD load menu */
911DMenu MenuKLD = {
912    DMENU_NORMAL_TYPE,
913    "KLD Menu",
914    "Load a KLD from a floppy\n",
915    NULL,
916    NULL,
917    { { NULL } },
918};
919
920/* Prototype config file load menu */
921DMenu MenuConfig = {
922    DMENU_NORMAL_TYPE,
923    "Config Menu",
924    "Please select the device to load your configuration file from.\n"
925    "Note that a USB key will show up as daNs1.",
926    NULL,
927    NULL,
928    { { NULL } },
929};
930
931/* The media selection menu */
932DMenu MenuMedia = {
933    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
934    "Choose Installation Media",
935    "FreeBSD can be installed from a variety of different installation\n"
936    "media, ranging from floppies to an Internet FTP server.  If you're\n"
937    "installing FreeBSD from a supported CD/DVD drive then this is generally\n"
938    "the best media to use if you have no overriding reason for using other\n"
939    "media.",
940    "Press F1 for more information on the various media types",
941    "media",
942    { { "1 CD/DVD",		"Install from a FreeBSD CD/DVD",	NULL, mediaSetCDROM },
943      { "2 FTP",		"Install from an FTP server",		NULL, mediaSetFTPActive },
944      { "3 FTP Passive",	"Install from an FTP server through a firewall", NULL, mediaSetFTPPassive },
945      { "4 HTTP Proxy",		"Install from an FTP server through a http proxy", NULL, mediaSetHTTP },
946      { "5 HTTP Direct",	"Install from an HTTP server",		NULL, mediaSetHTTPDirect },
947      { "6 DOS",		"Install from a DOS partition",		NULL, mediaSetDOS },
948      { "7 NFS",		"Install over NFS",			NULL, mediaSetNFS },
949      { "8 File System",	"Install from an existing filesystem",	NULL, mediaSetUFS },
950      { "9 Floppy",		"Install from a floppy disk set",	NULL, mediaSetFloppy },
951      { "A USB",		"Install from a USB drive",		NULL, mediaSetUSB },
952      { "X Options",		"Go to the Options screen",		NULL, optionsEditor },
953      { NULL } },
954};
955
956/* The distributions menu */
957DMenu MenuDistributions = {
958    DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS,
959    "Choose Distributions",
960    "As a convenience, we provide several \"canned\" distribution sets.\n"
961    "These select what we consider to be the most reasonable defaults for the\n"
962    "type of system in question.  If you would prefer to pick and choose the\n"
963    "list of distributions yourself, simply select \"Custom\".  You can also\n"
964    "pick a canned distribution set and then fine-tune it with the Custom item.\n\n"
965    "Choose an item by pressing [SPACE] or [ENTER].  When finished, choose the\n"
966    "Exit item or move to the OK button with [TAB].",
967    "Press F1 for more information on these options.",
968    "distributions",
969    { { "X Exit", "Exit this menu (returning to previous)",
970	checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' },
971      { "All",			"All system sources and binaries",
972	checkDistEverything,	distSetEverything, NULL, NULL, ' ', ' ', ' ' },
973      { "Reset",		"Reset selected distribution list to nothing",
974	NULL,			distReset, NULL, NULL, ' ', ' ', ' ' },
975      { "4 Developer",		"Full sources, binaries and doc but no games",
976	checkDistDeveloper,	distSetDeveloper },
977      { "5 Kern-Developer",	"Full binaries and doc, kernel sources only",
978	checkDistKernDeveloper, distSetKernDeveloper },
979      { "6 User",		"Average user - binaries and doc only",
980	checkDistUser,		distSetUser },
981      { "7 Minimal",		"The smallest configuration possible",
982	checkDistMinimum,	distSetMinimum },
983      { "8 Custom",		"Specify your own distribution set",
984	NULL,			dmenuSubmenu, NULL, &MenuSubDistributions, '>', '>', '>' },
985      { NULL } },
986};
987
988DMenu MenuSubDistributions = {
989    DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS,
990    "Select the distributions you wish to install.",
991    "Please check off the distributions you wish to install.  At the\n"
992    "very minimum, this should be \"base\".",
993    NULL,
994    NULL,
995    { { "X Exit", "Exit this menu (returning to previous)",
996	checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' },
997      { "All",		"All system sources and binaries",
998	NULL, distSetEverything, NULL, NULL, ' ', ' ', ' ' },
999      { "Reset",	"Reset all of the below",
1000	NULL, distReset, NULL, NULL, ' ', ' ', ' ' },
1001      { " base",	"Binary base distribution (required)",
1002	dmenuFlagCheck,	dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_BASE },
1003      { " kernels",	"Binary kernel distributions (required)",
1004	kernelFlagCheck,distSetKernel },
1005      { " dict",	"Spelling checker dictionary files",
1006	dmenuFlagCheck,	dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_DICT },
1007      { " doc",		"FreeBSD Documentation set",
1008	docFlagCheck,	distSetDoc },
1009      { " docuser",		"Miscellaneous userland docs",
1010	dmenuFlagCheck,	dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_DOCUSERLAND },
1011      { " games",	"Games (non-commercial)",
1012	dmenuFlagCheck,	dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_GAMES },
1013      { " info",	"GNU info files",
1014	dmenuFlagCheck,	dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_INFO },
1015#if defined(__amd64__) || defined(__powerpc64__)
1016      { " lib32",	"32-bit runtime compatibility libraries",
1017	dmenuFlagCheck,	dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_LIB32 },
1018#endif
1019      { " man",		"System manual pages - recommended",
1020	dmenuFlagCheck,	dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_MANPAGES },
1021      { " catman",	"Preformatted system manual pages",
1022	dmenuFlagCheck,	dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_CATPAGES },
1023      { " proflibs",	"Profiled versions of the libraries",
1024	dmenuFlagCheck,	dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_PROFLIBS },
1025      { " src",		"Sources for everything",
1026	srcFlagCheck,	distSetSrc },
1027      { " ports",	"The FreeBSD Ports collection",
1028	dmenuFlagCheck,	dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_PORTS },
1029      { " local",	"Local additions collection",
1030	dmenuFlagCheck,	dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_LOCAL},
1031      { NULL } },
1032};
1033
1034DMenu MenuKernelDistributions = {
1035    DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS,
1036    "Select the operating system kernels you wish to install.",
1037    "Please check off those kernels you wish to install.\n",
1038    NULL,
1039    NULL,
1040    { { "X Exit", "Exit this menu (returning to previous)",
1041	checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' },
1042      { "All",		"Select all of the below",
1043	NULL,		setKernel, NULL, NULL, ' ', ' ', ' ' },
1044      { "Reset",	"Reset all of the below",
1045	NULL,		clearKernel, NULL, NULL, ' ', ' ', ' ' },
1046      { " GENERIC",	"GENERIC kernel configuration",
1047	dmenuFlagCheck,	dmenuSetFlag, NULL, &KernelDists, '[', 'X', ']', DIST_KERNEL_GENERIC },
1048      { NULL } },
1049};
1050
1051DMenu MenuSrcDistributions = {
1052    DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS,
1053    "Select the sub-components of src you wish to install.",
1054    "Please check off those portions of the FreeBSD source tree\n"
1055    "you wish to install.",
1056    NULL,
1057    NULL,
1058    { { "X Exit", "Exit this menu (returning to previous)",
1059	checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' },
1060      { "All",		"Select all of the below",
1061	NULL,		setSrc, NULL, NULL, ' ', ' ', ' ' },
1062      { "Reset",	"Reset all of the below",
1063	NULL,		clearSrc, NULL, NULL, ' ', ' ', ' ' },
1064      { " base",	"top-level files in /usr/src",
1065	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_BASE },
1066      { " cddl",	"/usr/src/cddl (software from Sun)",
1067	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_CDDL },
1068      { " contrib",	"/usr/src/contrib (contributed software)",
1069	dmenuFlagCheck,	dmenuSetFlag,	NULL, &SrcDists, '[', 'X', ']', DIST_SRC_CONTRIB },
1070      { " crypto",	"/usr/src/crypto (contrib encryption sources)",
1071	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_SCRYPTO },
1072      { " gnu",		"/usr/src/gnu (software from the GNU Project)",
1073	dmenuFlagCheck,	dmenuSetFlag,	NULL, &SrcDists, '[', 'X', ']', DIST_SRC_GNU },
1074      { " etc",		"/usr/src/etc (miscellaneous system files)",
1075	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_ETC },
1076      { " games",	"/usr/src/games (the obvious!)",
1077	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_GAMES },
1078      { " include",	"/usr/src/include (header files)",
1079	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_INCLUDE },
1080      { " krb5",	"/usr/src/kerberos5 (sources for Kerberos5)",
1081	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_SKERBEROS5 },
1082      { " lib",		"/usr/src/lib (system libraries)",
1083	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_LIB },
1084      { " libexec",	"/usr/src/libexec (system programs)",
1085	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_LIBEXEC },
1086      { " release",	"/usr/src/release (release-generation tools)",
1087	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_RELEASE },
1088      { " rescue",	"/usr/src/rescue (static rescue tools)",
1089	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_RESCUE },
1090      { " bin",		"/usr/src/bin (system binaries)",
1091	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_BIN },
1092      { " sbin",	"/usr/src/sbin (system binaries)",
1093	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_SBIN },
1094      { " secure",	"/usr/src/secure (BSD encryption sources)",
1095	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_SSECURE },
1096      { " share",	"/usr/src/share (documents and shared files)",
1097	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_SHARE },
1098      { " sys",		"/usr/src/sys (FreeBSD kernel)",
1099	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_SYS },
1100      { " tools",	"/usr/src/tools (miscellaneous tools)",
1101	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_TOOLS },
1102      { " ubin",	"/usr/src/usr.bin (user binaries)",
1103	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_UBIN },
1104      { " usbin",	"/usr/src/usr.sbin (aux system binaries)",
1105	dmenuFlagCheck,	dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_USBIN },
1106      { NULL } },
1107};
1108
1109DMenu MenuDiskDevices = {
1110    DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS,
1111    "Select Drive(s)",
1112    "Please select the drive, or drives, on which you wish to perform\n"
1113    "this operation.  If you are attempting to install a boot partition\n"
1114    "on a drive other than the first one or have multiple operating\n"
1115    "systems on your machine, you will have the option to install a boot\n"
1116    "manager later.  To select a drive, use the arrow keys to move to it\n"
1117    "and press [SPACE] or [ENTER].  To de-select it, press it again.\n\n"
1118    "Use [TAB] to get to the buttons and leave this menu.",
1119    "Press F1 for important information regarding disk geometry!",
1120    "drives",
1121    { { NULL } },
1122};
1123
1124DMenu MenuHTMLDoc = {
1125    DMENU_NORMAL_TYPE,
1126    "Select HTML Documentation pointer",
1127    "Please select the body of documentation you're interested in, the main\n"
1128    "ones right now being the FAQ and the Handbook.  You can also choose \"other\"\n"
1129    "to enter an arbitrary URL for browsing.",
1130    "Press F1 for more help on what you see here.",
1131    "html",
1132    { { "X Exit",	"Exit this menu (returning to previous)", NULL,	dmenuExit },
1133      { "2 Handbook",	"The FreeBSD Handbook.",				NULL, docShowDocument },
1134      { "3 FAQ",	"The Frequently Asked Questions guide.",		NULL, docShowDocument },
1135      { "4 Home",	"The Home Pages for the FreeBSD Project (requires net)", NULL, docShowDocument },
1136      { "5 Other",	"Enter a URL.",						NULL, docShowDocument },
1137      { NULL } },
1138};
1139
1140/* The main installation menu */
1141DMenu MenuInstallCustom = {
1142    DMENU_NORMAL_TYPE,
1143    "Choose Custom Installation Options",
1144    "This is the custom installation menu. You may use this menu to specify\n"
1145    "details on the type of distribution you wish to have, where you wish\n"
1146    "to install it from and how you wish to allocate disk storage to FreeBSD.",
1147    NULL,
1148    NULL,
1149    { { "X Exit",		"Exit this menu (returning to previous)", NULL,	dmenuExit },
1150      { "2 Options",		"View/Set various installation options", NULL, optionsEditor },
1151#ifndef WITH_SLICES
1152      { "3 Label",		"Label disk partitions",		NULL, diskLabelEditor },
1153      { "4 Distributions",	"Select distribution(s) to extract",	NULL, dmenuSubmenu, NULL, &MenuDistributions },
1154      { "5 Media",		"Choose the installation media type",	NULL, dmenuSubmenu, NULL, &MenuMedia },
1155      { "6 Commit",		"Perform any pending Partition/Label/Extract actions", NULL, installCustomCommit },
1156#else
1157      { "3 Partition",		"Allocate disk space for FreeBSD",	NULL, diskPartitionEditor },
1158      { "4 Label",		"Label allocated disk partitions",	NULL, diskLabelEditor },
1159      { "5 Distributions",	"Select distribution(s) to extract",	NULL, dmenuSubmenu, NULL, &MenuDistributions },
1160      { "6 Media",		"Choose the installation media type",	NULL, dmenuSubmenu, NULL, &MenuMedia },
1161      { "7 Commit",		"Perform any pending Partition/Label/Extract actions", NULL, installCustomCommit },
1162#endif
1163      { NULL } },
1164};
1165
1166#if defined(__i386__) || defined(__amd64__)
1167#ifdef PC98
1168/* IPL type menu */
1169DMenu MenuIPLType = {
1170    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
1171    "overwrite me",		/* will be disk specific label */
1172    "If you want a FreeBSD Boot Manager, select \"BootMgr\".  If you would\n"
1173    "prefer your Boot Manager to remain untouched then select \"None\".\n\n",
1174    "Press F1 to read about drive setup",
1175    "drives",
1176    { { "BootMgr",	"Install the FreeBSD Boot Manager",
1177	dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr },
1178      { "None",		"Leave the IPL untouched",
1179	dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr, '(', '*', ')', 1 },
1180      { NULL } },
1181};
1182#else
1183/* MBR type menu */
1184DMenu MenuMBRType = {
1185    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
1186    "overwrite me",		/* will be disk specific label */
1187    "FreeBSD comes with a boot manager that allows you to easily\n"
1188    "select between FreeBSD and any other operating systems on your machine\n"
1189    "at boot time.  If you have more than one drive and want to boot\n"
1190    "from the second one, the boot manager will also make it possible\n"
1191    "to do so (limitations in the PC BIOS usually prevent this otherwise).\n"
1192    "If you have other operating systems installed and would like a choice when\n"
1193    "booting, choose \"BootMgr\". If you would prefer to keep your existing\n"
1194    "boot manager, select \"None\".\n\n",
1195    "",
1196    "drives",
1197    { { "Standard",	"Install a standard MBR (non-interactive boot manager)",
1198	dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr, '(', '*', ')', 1 },
1199      { "BootMgr",	"Install the FreeBSD Boot Manager",
1200	dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr, '(', '*', ')', 0 },
1201      { "None",		"Do not install a boot manager",
1202	dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr, '(', '*', ')', 2 },
1203      { NULL } },
1204};
1205#endif /* PC98 */
1206#endif /* __i386__ */
1207
1208/* Final configuration menu */
1209DMenu MenuConfigure = {
1210    DMENU_NORMAL_TYPE,
1211    "FreeBSD Configuration Menu",	/* title */
1212    "If you've already installed FreeBSD, you may use this menu to customize\n"
1213    "it somewhat to suit your particular configuration.  Most importantly,\n"
1214    "you can use the Packages utility to load extra \"3rd party\"\n"
1215    "software not provided in the base distributions.",
1216    "Press F1 for more information on these options",
1217    "configure",
1218    { { "X Exit",		"Exit this menu (returning to previous)",
1219	NULL,	dmenuExit },
1220      { " Distributions", "Install additional distribution sets",
1221	NULL, distExtractAll },
1222      { " Documentation installation", "Install FreeBSD Documentation set",
1223	NULL, distSetDocMenu },
1224      { " Packages",	"Install pre-packaged software for FreeBSD",
1225	NULL, configPackages },
1226      { " Root Password", "Set the system manager's password",
1227	NULL,	dmenuSystemCommand, NULL, "passwd root" },
1228#ifdef WITH_SLICES
1229      { " Fdisk",	"The disk slice (PC-style partition) editor",
1230	NULL, diskPartitionEditor },
1231#endif
1232      { " Label",	"The disk label editor",
1233	NULL, diskLabelEditor },
1234      { " User Management",	"Add user and group information",
1235	NULL, dmenuSubmenu, NULL, &MenuUsermgmt },
1236#ifdef WITH_SYSCONS
1237      { " Console",	"Customize system console behavior",
1238	NULL,	dmenuSubmenu, NULL, &MenuSyscons },
1239#endif
1240      { " Time Zone",	"Set which time zone you're in",
1241	NULL,	dmenuSystemCommand, NULL, "tzsetup" },
1242      { " Media",	"Change the installation media type",
1243	NULL,	dmenuSubmenu, NULL, &MenuMedia },
1244#ifdef WITH_MICE
1245      { " Mouse",	"Configure your mouse",
1246	NULL,	dmenuSubmenu, NULL, &MenuMouse },
1247#endif
1248      { " Networking",	"Configure additional network services",
1249	NULL,	dmenuSubmenu, NULL, &MenuNetworking },
1250      { " Security",	"Configure system security options",
1251	NULL,	dmenuSubmenu, NULL, &MenuSecurity },
1252      { " Startup",	"Configure system startup options",
1253	NULL,	dmenuSubmenu, NULL, &MenuStartup },
1254      { " TTYs",	"Configure system ttys.",
1255	NULL,	configEtcTtys, NULL, "ttys" },
1256      { " Options",	"View/Set various installation options",
1257	NULL, optionsEditor },
1258      { " HTML Docs",	"Go to the HTML documentation menu (post-install)",
1259	NULL, docBrowser },
1260      { " Load KLD",	"Load a KLD from a floppy",
1261	NULL, kldBrowser },
1262      { NULL } },
1263};
1264
1265DMenu MenuStartup = {
1266    DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS,
1267    "Startup Services Menu",
1268    "This menu allows you to configure various aspects of your system's\n"
1269    "startup configuration.  Use [SPACE] or [ENTER] to select items, and\n"
1270    "[TAB] to move to the buttons.  Select Exit to leave this menu.",
1271    NULL,
1272    NULL,
1273    { { "X Exit",	"Exit this menu (returning to previous)",
1274	checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' },
1275#ifdef __i386__
1276      { " APM",		"Auto-power management services (typically laptops)",
1277	dmenuVarCheck,	dmenuToggleVariable, NULL, "apm_enable=YES" },
1278#endif
1279      { " ",		" -- ", NULL,	NULL, NULL, NULL, ' ', ' ', ' ' },
1280      { " Startup dirs",	"Set the list of dirs to look for startup scripts",
1281	dmenuVarCheck, dmenuISetVariable, NULL, "local_startup" },
1282      { " named",	"Run a local name server on this host",
1283	dmenuVarCheck, dmenuToggleVariable, NULL, "named_enable=YES" },
1284      { " named flags",	"Set default flags to named (if enabled)",
1285	dmenuVarCheck, dmenuISetVariable, NULL, "named_flags" },
1286      { " NIS client",	"This host wishes to be an NIS client.",
1287	dmenuVarCheck, configRpcBind, NULL, "nis_client_enable=YES" },
1288      { " NIS domainname",	"Set NIS domainname (if enabled)",
1289	dmenuVarCheck, dmenuISetVariable, NULL, "nisdomainname" },
1290      { " NIS server",	"This host wishes to be an NIS server.",
1291	dmenuVarCheck, configRpcBind, NULL, "nis_server_enable=YES" },
1292      { " ",		" -- ", NULL,	NULL, NULL, NULL, ' ', ' ', ' ' },
1293      { " Accounting",	"This host wishes to run process accounting.",
1294	dmenuVarCheck, dmenuToggleVariable, NULL, "accounting_enable=YES" },
1295      { " lpd",		"This host has a printer and wants to run lpd.",
1296	dmenuVarCheck, dmenuToggleVariable, NULL, "lpd_enable=YES" },
1297#ifdef __i386__
1298      { " SCO",		"This host wants to be able to run IBCS2 binaries.",
1299	dmenuVarCheck, dmenuToggleVariable, NULL, "ibcs2_enable=YES" },
1300      { " SVR4",	"This host wants to be able to run SVR4 binaries.",
1301	dmenuVarCheck, dmenuToggleVariable, NULL, "svr4_enable=YES" },
1302#endif
1303      { NULL } },
1304};
1305
1306DMenu MenuNetworking = {
1307    DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS,
1308    "Network Services Menu",
1309    "You may have already configured one network device (and the other\n"
1310    "various hostname/gateway/name server parameters) in the process\n"
1311    "of installing FreeBSD.  This menu allows you to configure other\n"
1312    "aspects of your system's network configuration.",
1313    NULL,
1314    NULL,
1315    { { "X Exit",	"Exit this menu (returning to previous)",
1316	checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' },
1317      { " Interfaces",	"Configure additional network interfaces",
1318	NULL, tcpMenuSelect },
1319      { " AMD",		"This machine wants to run the auto-mounter service",
1320	dmenuVarCheck,	configRpcBind, NULL, "amd_enable=YES" },
1321      { " AMD Flags",	"Set flags to AMD service (if enabled)",
1322	dmenuVarCheck,	dmenuISetVariable, NULL, "amd_flags" },
1323      { " Anon FTP",	"This machine wishes to allow anonymous FTP.",
1324	dmenuVarCheck,	configAnonFTP, NULL, "anon_ftp" },
1325      { " Gateway",	"This machine will route packets between interfaces",
1326	dmenuVarCheck,	dmenuToggleVariable, NULL, "gateway_enable=YES" },
1327      { " inetd",	"This machine wants to run the inet daemon",
1328	dmenuVarCheck,	configInetd, NULL, "inetd_enable=YES" },
1329      { " Mail",	"This machine wants to run a Mail Transfer Agent",
1330	NULL,		dmenuSubmenu, NULL, &MenuMTA },
1331      { " NFS client",	"This machine will be an NFS client",
1332	dmenuVarCheck,	dmenuToggleVariable, NULL, "nfs_client_enable=YES" },
1333      { " NFS server",	"This machine will be an NFS server",
1334	dmenuVarCheck,	configNFSServer, NULL, "nfs_server_enable=YES" },
1335      { " Ntpdate",	"Select a clock synchronization server",
1336	dmenuVarCheck,	dmenuSubmenu, NULL, &MenuNTP, '[', 'X', ']',
1337	(uintptr_t)"ntpdate_enable=YES" },
1338      { " PCNFSD",	"Run authentication server for clients with PC-NFS.",
1339	dmenuVarCheck,	configPCNFSD, NULL, "pcnfsd" },
1340      { " rpcbind", 	"RPC port mapping daemon (formerly portmapper)",
1341        dmenuVarCheck, dmenuToggleVariable, NULL, "rpcbind_enable=YES" },
1342      { " rpc.statd", 	"NFS status monitoring daemon",
1343	dmenuVarCheck, configRpcBind, NULL, "rpc_statd_enable=YES" },
1344      { " rpc.lockd",	"NFS file locking daemon",
1345	dmenuVarCheck, configRpcBind, NULL, "rpc_lockd_enable=YES" },
1346      { " Routed",	"Select routing daemon (default: routed)",
1347	dmenuVarCheck,	configRouter, NULL, "router_enable=YES" },
1348      { " Rwhod",	"This machine wants to run the rwho daemon",
1349	dmenuVarCheck,	dmenuToggleVariable, NULL, "rwhod_enable=YES" },
1350      { " sshd",	"This machine wants to run the SSH daemon",
1351	dmenuVarCheck,	dmenuToggleVariable, NULL, "sshd_enable=YES" },
1352      { " TCP Extensions", "Allow RFC1323 and RFC1644 TCP extensions?",
1353	dmenuVarCheck,	dmenuToggleVariable, NULL, "tcp_extensions=YES" },
1354      { NULL } },
1355};
1356
1357DMenu MenuMTA = {
1358    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
1359    "Mail Transfer Agent Selection",
1360    "You can choose which Mail Transfer Agent (MTA) you wish to install and run.\n"
1361    "Selecting Sendmail local disables sendmail's network socket for\n"
1362    "incoming mail, but still enables sendmail for local and outbound mail.\n"
1363    "The Postfix option will install the Postfix MTA from the ports\n"
1364    "collection.  The Exim option will install the Exim MTA from the ports\n"
1365    "collection.  To return to the previous menu, select Exit.",
1366    NULL,
1367    NULL,
1368    {
1369      { "Sendmail",           "Use sendmail",
1370        dmenuVarCheck, dmenuSetVariable, NULL, "sendmail_enable=YES" },
1371      { "Sendmail local",    "Use sendmail, but do not listen on the network",
1372        dmenuVarCheck, dmenuSetVariable, NULL, "sendmail_enable=NO" },
1373      { "Postfix",            "Use the Postfix MTA",
1374      NULL, configMTAPostfix, NULL, NULL },
1375      { "Exim",               "Use the Exim MTA",
1376      NULL, configMTAExim, NULL, NULL },
1377      { "None",               "Do not install an MTA",
1378        dmenuVarCheck, dmenuSetVariable, NULL, "sendmail_enable=NONE" },
1379      { "X Exit",             "Exit this menu (returning to previous)",
1380        checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' },
1381      { NULL } },
1382};
1383
1384DMenu MenuNTP = {
1385    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
1386    "NTPDATE Server Selection",
1387    "There are a number of time synchronization servers available\n"
1388    "for public use around the Internet.  Please select one reasonably\n"
1389    "close to you to have your system time synchronized accordingly.",
1390    "These are the primary open-access NTP servers",
1391    NULL,
1392    { { "None",		        "No NTP server",
1393	dmenuVarsCheck,	dmenuSetVariables, NULL,
1394	"ntpdate_enable=NO,ntpdate_hosts=none" },
1395      { "Other",		"Select a site not on this list",
1396	dmenuVarsCheck, configNTP, NULL, NULL },
1397      { "Worldwide",		"pool.ntp.org",
1398	dmenuVarsCheck,	dmenuSetVariables, NULL,
1399	"ntpdate_enable=YES,ntpdate_hosts=pool.ntp.org" },
1400      { "Asia",		"asia.pool.ntp.org",
1401	dmenuVarsCheck,	dmenuSetVariables, NULL,
1402	"ntpdate_enable=YES,ntpdate_hosts=asia.pool.ntp.org" },
1403      { "Europe",		"europe.pool.ntp.org",
1404	dmenuVarsCheck,	dmenuSetVariables, NULL,
1405	"ntpdate_enable=YES,ntpdate_hosts=europe.pool.ntp.org" },
1406      { "Oceania",		"oceania.pool.ntp.org",
1407	dmenuVarsCheck,	dmenuSetVariables, NULL,
1408	"ntpdate_enable=YES,ntpdate_hosts=oceania.pool.ntp.org" },
1409      { "North America",	"north-america.pool.ntp.org",
1410	dmenuVarsCheck,	dmenuSetVariables, NULL,
1411	"ntpdate_enable=YES,ntpdate_hosts=north-america.pool.ntp.org" },
1412      { "Argentina",		"tick.nap.com.ar",
1413	dmenuVarsCheck, dmenuSetVariables, NULL,
1414	"ntpdate_enable=YES,ntpdate_hosts=tick.nap.com.ar" },
1415      { "Argentina #2",		"time.sinectis.com.ar",
1416	dmenuVarsCheck, dmenuSetVariables, NULL,
1417	"ntpdate_enable=YES,ntpdate_hosts=time.sinectis.com.ar" },
1418      { "Argentina #3",		"tock.nap.com.ar",
1419	dmenuVarsCheck, dmenuSetVariables, NULL,
1420	"ntpdate_enable=YES,ntpdate_hosts=tock.nap.com.ar" },
1421      { "Australia",		"au.pool.ntp.org",
1422	dmenuVarsCheck,	dmenuSetVariables, NULL,
1423	"ntpdate_enable=YES,ntpdate_hosts=au.pool.ntp.org" },
1424      { "Australia #2",		"augean.eleceng.adelaide.edu.au",
1425	dmenuVarsCheck,	dmenuSetVariables, NULL,
1426	"ntpdate_enable=YES,ntpdate_hosts=augean.eleceng.adelaide.edu.au" },
1427      { "Australia #3",		"ntp.adelaide.edu.au",
1428	dmenuVarsCheck,	dmenuSetVariables, NULL,
1429	"ntpdate_enable=YES,ntpdate_hosts=ntp.adelaide.edu.au" },
1430      { "Australia #4",		"ntp.saard.net",
1431	dmenuVarsCheck,	dmenuSetVariables, NULL,
1432	"ntpdate_enable=YES,ntpdate_hosts=ntp.saard.net" },
1433      { "Australia #5",		"time.deakin.edu.au",
1434	dmenuVarsCheck,	dmenuSetVariables, NULL,
1435	"ntpdate_enable=YES,ntpdate_hosts=time.deakin.edu.au" },
1436      { "Belgium",		"ntp1.belbone.be",
1437	dmenuVarsCheck, dmenuSetVariables, NULL,
1438	"ntpdate_enable=YES,ntpdate_hosts=ntp1.belbone.be" },
1439      { "Belgium #2",		"ntp2.belbone.be",
1440	dmenuVarsCheck, dmenuSetVariables, NULL,
1441	"ntpdate_enable=YES,ntpdate_hosts=ntp2.belbone.be" },
1442      { "Brazil",		"a.ntp.br",
1443	dmenuVarsCheck, dmenuSetVariables, NULL,
1444	"ntpdate_enable=YES,ntpdate_hosts=a.ntp.br" },
1445      { "Brazil #2",		"b.ntp.br",
1446	dmenuVarsCheck, dmenuSetVariables, NULL,
1447	"ntpdate_enable=YES,ntpdate_hosts=b.ntp.br" },
1448      { "Brazil #3",		"c.ntp.br",
1449	dmenuVarsCheck, dmenuSetVariables, NULL,
1450	"ntpdate_enable=YES,ntpdate_hosts=c.ntp.br" },
1451      { "Brazil #4",		"ntp.cais.rnp.br",
1452	dmenuVarsCheck, dmenuSetVariables, NULL,
1453	"ntpdate_enable=YES,ntpdate_hosts=ntp.cais.rnp.br" },
1454      { "Brazil #5",		"ntp1.pucpr.br",
1455	dmenuVarsCheck, dmenuSetVariables, NULL,
1456	"ntpdate_enable=YES,ntpdate_hosts=ntp1.pucpr.br" },
1457      { "Canada",		"ca.pool.ntp.org",
1458	dmenuVarsCheck,	dmenuSetVariables, NULL,
1459	"ntpdate_enable=YES,ntpdate_hosts=ca.pool.ntp.org" },
1460      { "Canada #2",		"ntp.cpsc.ucalgary.ca",
1461	dmenuVarsCheck,	dmenuSetVariables, NULL,
1462	"ntpdate_enable=YES,ntpdate_hosts=ntp.cpsc.ucalgary.ca" },
1463      { "Canada #3",		"ntp1.cmc.ec.gc.ca",
1464	dmenuVarsCheck,	dmenuSetVariables, NULL,
1465	"ntpdate_enable=YES,ntpdate_hosts=ntp1.cmc.ec.gc.ca" },
1466      { "Canada #4",		"ntp2.cmc.ec.gc.ca",
1467	dmenuVarsCheck,	dmenuSetVariables, NULL,
1468	"ntpdate_enable=YES,ntpdate_hosts=ntp2.cmc.ec.gc.ca" },
1469      { "Canada #5",		"tick.utoronto.ca",
1470	dmenuVarsCheck,	dmenuSetVariables, NULL,
1471	"ntpdate_enable=YES,ntpdate_hosts=tick.utoronto.ca" },
1472      { "Canada #6",		"time.chu.nrc.ca",
1473	dmenuVarsCheck,	dmenuSetVariables, NULL,
1474	"ntpdate_enable=YES,ntpdate_hosts=time.chu.nrc.ca" },
1475      { "Canada #7",		"time.nrc.ca",
1476	dmenuVarsCheck,	dmenuSetVariables, NULL,
1477	"ntpdate_enable=YES,ntpdate_hosts=time.nrc.ca" },
1478      { "Canada #8",		"timelord.uregina.ca",
1479	dmenuVarsCheck,	dmenuSetVariables, NULL,
1480	"ntpdate_enable=YES,ntpdate_hosts=timelord.uregina.ca" },
1481      { "Canada #9",		"tock.utoronto.ca",
1482	dmenuVarsCheck,	dmenuSetVariables, NULL,
1483	"ntpdate_enable=YES,ntpdate_hosts=tock.utoronto.ca" },
1484      { "Czech",		"ntp.karpo.cz",
1485	dmenuVarsCheck, dmenuSetVariables, NULL,
1486	"ntpdate_enable=YES,ntpdate_hosts=ntp.karpo.cz" },
1487      { "Czech #2",		"ntp.cgi.cz",
1488	dmenuVarsCheck, dmenuSetVariables, NULL,
1489	"ntpdate_enable=YES,ntpdate_hosts=ntp.cgi.cz" },
1490      { "Denmark",		"clock.netcetera.dk",
1491	dmenuVarsCheck, dmenuSetVariables, NULL,
1492	"ntpdate_enable=YES,ntpdate_hosts=clock.netcetera.dk" },
1493      { "Denmark",		"clock2.netcetera.dk",
1494	dmenuVarsCheck, dmenuSetVariables, NULL,
1495	"ntpdate_enable=YES,ntpdate_hosts=clock2.netcetera.dk" },
1496      { "Spain",		"slug.ctv.es",
1497	dmenuVarsCheck, dmenuSetVariables, NULL,
1498	"ntpdate_enable=YES,ntpdate_hosts=slug.ctv.es" },
1499      { "Finland",		"tick.keso.fi",
1500	dmenuVarsCheck, dmenuSetVariables, NULL,
1501	"ntpdate_enable=YES,ntpdate_hosts=tick.keso.fi" },
1502      { "Finland #2",		"tock.keso.fi",
1503	dmenuVarsCheck, dmenuSetVariables, NULL,
1504	"ntpdate_enable=YES,ntpdate_hosts=tock.keso.fi" },
1505      { "France",		"ntp.obspm.fr",
1506	dmenuVarsCheck,	dmenuSetVariables, NULL,
1507	"ntpdate_enable=YES,ntpdate_hosts=ntp.obspm.fr" },
1508      { "France #2",		"ntp.univ-lyon1.fr",
1509	dmenuVarsCheck, dmenuSetVariables, NULL,
1510	"ntpdate_enable=YES,ntpdate_hosts=ntp.univ-lyon1.fr" },
1511      { "France #3",		"ntp.via.ecp.fr",
1512	dmenuVarsCheck, dmenuSetVariables, NULL,
1513	"ntpdate_enable=YES,ntpdate_hosts=ntp.via.ecp.fr" },
1514      { "Croatia",		"zg1.ntp.carnet.hr",
1515	dmenuVarsCheck, dmenuSetVariables, NULL,
1516	"ntpdate_enable=YES,ntpdate_hosts=zg1.ntp.carnet.hr" },
1517      { "Croatia #2",		"zg2.ntp.carnet.hr",
1518	dmenuVarsCheck, dmenuSetVariables, NULL,
1519	"ntpdate_enable=YES,ntpdate_hosts=zg2.ntp.carnet.hr" },
1520      { "Croatia #3",		"st.ntp.carnet.hr",
1521	dmenuVarsCheck, dmenuSetVariables, NULL,
1522	"ntpdate_enable=YES,ntpdate_hosts=st.ntp.carnet.hr" },
1523      { "Croatia #4",		"ri.ntp.carnet.hr",
1524	dmenuVarsCheck, dmenuSetVariables, NULL,
1525	"ntpdate_enable=YES,ntpdate_hosts=ri.ntp.carnet.hr" },
1526      { "Croatia #5",		"os.ntp.carnet.hr",
1527	dmenuVarsCheck, dmenuSetVariables, NULL,
1528	"ntpdate_enable=YES,ntpdate_hosts=os.ntp.carnet.hr" },
1529      { "Hungary",		"time.kfki.hu",
1530	dmenuVarsCheck, dmenuSetVariables, NULL,
1531	"ntpdate_enable=YES,ntpdate_hosts=time.kfki.hu" },
1532      { "Indonesia",		"ntp.kim.lipi.go.id",
1533	dmenuVarsCheck, dmenuSetVariables, NULL,
1534	"ntpdate_enable=YES,ntpdate_hosts=ntp.kim.lipi.go.id" },
1535      { "Ireland",		"ntp.maths.tcd.ie",
1536	dmenuVarsCheck, dmenuSetVariables, NULL,
1537	"ntpdate_enable=YES,ntpdate_hosts=ntp.maths.tcd.ie" },
1538      { "Italy",		"it.pool.ntp.org",
1539	dmenuVarsCheck, dmenuSetVariables, NULL,
1540	"ntpdate_enable=YES,ntpdate_hosts=it.pool.ntp.org" },
1541      { "Japan",		"ntp.jst.mfeed.ad.jp",
1542	dmenuVarsCheck, dmenuSetVariables, NULL,
1543	"ntpdate_enable=YES,ntpdate_hosts=ntp.jst.mfeed.ad.jp" },
1544      { "Japan IPv6",		"ntp1.v6.mfeed.ad.jp",
1545	dmenuVarsCheck, dmenuSetVariables, NULL,
1546	"ntpdate_enable=YES,ntpdate_hosts=ntp1.v6.mfeed.ad.jp" },
1547      { "Korea",		"time.nuri.net",
1548	dmenuVarsCheck,	dmenuSetVariables, NULL,
1549	"ntpdate_enable=YES,ntpdate_hosts=time.nuri.net" },
1550      { "Mexico",		"mx.pool.ntp.org",
1551	dmenuVarsCheck, dmenuSetVariables, NULL,
1552	"ntpdate_enable=YES,ntpdate_hosts=mx.pool.ntp.org" },
1553      { "Netherlands",		"ntp0.nl.net",
1554	dmenuVarsCheck, dmenuSetVariables, NULL,
1555	"ntpdate_enable=YES,ntpdate_hosts=ntp0.nl.net" },
1556      { "Netherlands #2",	"ntp1.nl.net",
1557	dmenuVarsCheck, dmenuSetVariables, NULL,
1558	"ntpdate_enable=YES,ntpdate_hosts=ntp1.nl.net" },
1559      { "Netherlands #3",	"ntp2.nl.net",
1560	dmenuVarsCheck, dmenuSetVariables, NULL,
1561	"ntpdate_enable=YES,ntpdate_hosts=ntp2.nl.net" },
1562      { "Norway",		"fartein.ifi.uio.no",
1563	dmenuVarsCheck,	dmenuSetVariables, NULL,
1564	"ntpdate_enable=YES,ntpdate_hosts=fartein.ifi.uio.no" },
1565      { "Norway #2",		"time.alcanet.no",
1566	dmenuVarsCheck,	dmenuSetVariables, NULL,
1567	"ntpdate_enable=YES,ntpdate_hosts=time.alcanet.no" },
1568      { "New Zealand",		"ntp.massey.ac.nz",
1569	dmenuVarsCheck, dmenuSetVariables, NULL,
1570	"ntpdate_enable=YES,ntpdate_hosts=ntp.massey.ac.nz" },
1571      { "New Zealand #2",	"ntp.public.otago.ac.nz",
1572	dmenuVarsCheck, dmenuSetVariables, NULL,
1573	"ntpdate_enable=YES,ntpdate_hosts=ntp.public.otago.ac.nz" },
1574      { "New Zealand #3",	"tk1.ihug.co.nz",
1575	dmenuVarsCheck, dmenuSetVariables, NULL,
1576	"ntpdate_enable=YES,ntpdate_hosts=tk1.ihug.co.nz" },
1577      { "New Zealand #4",	"ntp.waikato.ac.nz",
1578	dmenuVarsCheck, dmenuSetVariables, NULL,
1579	"ntpdate_enable=YES,ntpdate_hosts=ntp.waikato.ac.nz" },
1580      { "Poland",		"info.cyf-kr.edu.pl",
1581	dmenuVarsCheck, dmenuSetVariables, NULL,
1582	"ntpdate_enable=YES,ntpdate_hosts=info.cyf-kr.edu.pl" },
1583      { "Romania",		"ticks.roedu.net",
1584	dmenuVarsCheck, dmenuSetVariables, NULL,
1585	"ntpdate_enable=YES,ntpdate_hosts=ticks.roedu.net" },
1586      { "Russia",		"ru.pool.ntp.org",
1587	dmenuVarsCheck, dmenuSetVariables, NULL,
1588	"ntpdate_enable=YES,ntpdate_hosts=ru.pool.ntp.org" },
1589      { "Russia #2",		"ntp.psn.ru",
1590	dmenuVarsCheck, dmenuSetVariables, NULL,
1591	"ntpdate_enable=YES,ntpdate_hosts=ntp.psn.ru" },
1592      { "Sweden",		"se.pool.ntp.org",
1593	dmenuVarsCheck,	dmenuSetVariables, NULL,
1594	"ntpdate_enable=YES,ntpdate_hosts=se.pool.ntp.org" },
1595      { "Sweden #2",		"ntp.lth.se",
1596	dmenuVarsCheck,	dmenuSetVariables, NULL,
1597	"ntpdate_enable=YES,ntpdate_hosts=ntp.lth.se" },
1598      { "Sweden #3",		"ntp1.sp.se",
1599	dmenuVarsCheck,	dmenuSetVariables, NULL,
1600	"ntpdate_enable=YES,ntpdate_hosts=ntp1.sp.se" },
1601      { "Sweden #4",		"ntp2.sp.se",
1602	dmenuVarsCheck,	dmenuSetVariables, NULL,
1603	"ntpdate_enable=YES,ntpdate_hosts=ntp2.sp.se" },
1604      { "Sweden #5",		"ntp.kth.se",
1605	dmenuVarsCheck,	dmenuSetVariables, NULL,
1606	"ntpdate_enable=YES,ntpdate_hosts=ntp.kth.se" },
1607      { "Singapore",		"sg.pool.ntp.org",
1608	dmenuVarsCheck, dmenuSetVariables, NULL,
1609	"ntpdate_enable=YES,ntpdate_hosts=sg.pool.ntp.org" },
1610      { "Slovenia",		"si.pool.ntp.org",
1611	dmenuVarsCheck, dmenuSetVariables, NULL,
1612	"ntpdate_enable=YES,ntpdate_hosts=si.pool.ntp.org" },
1613      { "Slovenia #2",		"sizif.mf.uni-lj.si",
1614	dmenuVarsCheck, dmenuSetVariables, NULL,
1615	"ntpdate_enable=YES,ntpdate_hosts=sizif.mf.uni-lj.si" },
1616      { "Slovenia #3",		"ntp1.arnes.si",
1617	dmenuVarsCheck, dmenuSetVariables, NULL,
1618	"ntpdate_enable=YES,ntpdate_hosts=ntp1.arnes.si" },
1619      { "Slovenia #4",		"ntp2.arnes.si",
1620	dmenuVarsCheck, dmenuSetVariables, NULL,
1621	"ntpdate_enable=YES,ntpdate_hosts=ntp2.arnes.si" },
1622      { "Slovenia #5",		"time.ijs.si",
1623	dmenuVarsCheck, dmenuSetVariables, NULL,
1624	"ntpdate_enable=YES,ntpdate_hosts=time.ijs.si" },
1625      { "Scotland",		"ntp.cs.strath.ac.uk",
1626	dmenuVarsCheck, dmenuSetVariables, NULL,
1627	"ntpdate_enable=YES,ntpdate_hosts=ntp.cs.strath.ac.uk" },
1628      { "Taiwan",              "time.stdtime.gov.tw",
1629	dmenuVarsCheck, dmenuSetVariables, NULL,
1630	"ntpdate_enable=YES,ntpdate_hosts=time.stdtime.gov.tw" },
1631      { "Taiwan #2",           "clock.stdtime.gov.tw",
1632	dmenuVarsCheck, dmenuSetVariables, NULL,
1633	"ntpdate_enable=YES,ntpdate_hosts=clock.stdtime.gov.tw" },
1634      { "Taiwan #3",           "tick.stdtime.gov.tw",
1635	dmenuVarsCheck, dmenuSetVariables, NULL,
1636	"ntpdate_enable=YES,ntpdate_hosts=tick.stdtime.gov.tw" },
1637      { "Taiwan #4",           "tock.stdtime.gov.tw",
1638	dmenuVarsCheck, dmenuSetVariables, NULL,
1639	"ntpdate_enable=YES,ntpdate_hosts=tock.stdtime.gov.tw" },
1640      { "Taiwan #5",           "watch.stdtime.gov.tw",
1641	dmenuVarsCheck, dmenuSetVariables, NULL,
1642	"ntpdate_enable=YES,ntpdate_hosts=watch.stdtime.gov.tw" },
1643      { "United Kingdom",	"uk.pool.ntp.org",
1644	dmenuVarsCheck, dmenuSetVariables, NULL,
1645	"ntpdate_enable=YES,ntpdate_hosts=uk.pool.ntp.org" },
1646      { "United Kingdom #2",	"ntp.exnet.com",
1647	dmenuVarsCheck, dmenuSetVariables, NULL,
1648	"ntpdate_enable=YES,ntpdate_hosts=ntp.exnet.com" },
1649      { "United Kingdom #3",	"ntp0.uk.uu.net",
1650	dmenuVarsCheck, dmenuSetVariables, NULL,
1651	"ntpdate_enable=YES,ntpdate_hosts=ntp0.uk.uu.net" },
1652      { "United Kingdom #4",	"ntp1.uk.uu.net",
1653	dmenuVarsCheck, dmenuSetVariables, NULL,
1654	"ntpdate_enable=YES,ntpdate_hosts=ntp1.uk.uu.net" },
1655      { "United Kingdom #5",	"ntp2.uk.uu.net",
1656	dmenuVarsCheck, dmenuSetVariables, NULL,
1657	"ntpdate_enable=YES,ntpdate_hosts=ntp2.uk.uu.net" },
1658      { "United Kingdom #6",	"ntp2a.mcc.ac.uk",
1659	dmenuVarsCheck, dmenuSetVariables, NULL,
1660	"ntpdate_enable=YES,ntpdate_hosts=ntp2a.mcc.ac.uk" },
1661      { "United Kingdom #7",	"ntp2b.mcc.ac.uk",
1662	dmenuVarsCheck, dmenuSetVariables, NULL,
1663	"ntpdate_enable=YES,ntpdate_hosts=ntp2b.mcc.ac.uk" },
1664      { "United Kingdom #8",	"ntp2c.mcc.ac.uk",
1665	dmenuVarsCheck, dmenuSetVariables, NULL,
1666	"ntpdate_enable=YES,ntpdate_hosts=ntp2c.mcc.ac.uk" },
1667      { "United Kingdom #9",	"ntp2d.mcc.ac.uk",
1668	dmenuVarsCheck, dmenuSetVariables, NULL,
1669	"ntpdate_enable=YES,ntpdate_hosts=ntp2d.mcc.ac.uk" },
1670      { "U.S.",	"us.pool.ntp.org",
1671	dmenuVarsCheck,	dmenuSetVariables, NULL,
1672	"ntpdate_enable=YES,ntpdate_hosts=us.pool.ntp.org" },
1673      { "U.S. AR",	"sushi.lyon.edu",
1674	dmenuVarsCheck,	dmenuSetVariables, NULL,
1675	"ntpdate_enable=YES,ntpdate_hosts=sushi.compsci.lyon.edu" },
1676      { "U.S. AZ",	"ntp.drydog.com",
1677	dmenuVarsCheck,	dmenuSetVariables, NULL,
1678	"ntpdate_enable=YES,ntpdate_hosts=ntp.drydog.com" },
1679      { "U.S. CA",	"ntp.ucsd.edu",
1680	dmenuVarsCheck,	dmenuSetVariables, NULL,
1681	"ntpdate_enable=YES,ntpdate_hosts=ntp.ucsd.edu" },
1682      { "U.S. CA #2",	"ntp1.mainecoon.com",
1683	dmenuVarsCheck,	dmenuSetVariables, NULL,
1684	"ntpdate_enable=YES,ntpdate_hosts=ntp1.mainecoon.com" },
1685      { "U.S. CA #3",	"ntp2.mainecoon.com",
1686	dmenuVarsCheck,	dmenuSetVariables, NULL,
1687	"ntpdate_enable=YES,ntpdate_hosts=ntp2.mainecoon.com" },
1688      { "U.S. CA #4",	"reloj.kjsl.com",
1689	dmenuVarsCheck,	dmenuSetVariables, NULL,
1690	"ntpdate_enable=YES,ntpdate_hosts=reloj.kjsl.com" },
1691      { "U.S. CA #5",	"time.five-ten-sg.com",
1692	dmenuVarsCheck,	dmenuSetVariables, NULL,
1693	"ntpdate_enable=YES,ntpdate_hosts=time.five-ten-sg.com" },
1694      { "U.S. DE",	"louie.udel.edu",
1695	dmenuVarsCheck,	dmenuSetVariables, NULL,
1696	"ntpdate_enable=YES,ntpdate_hosts=louie.udel.edu" },
1697      { "U.S. GA",		"ntp.shorty.com",
1698	dmenuVarsCheck,	dmenuSetVariables, NULL,
1699	"ntpdate_enable=YES,ntpdate_hosts=ntp.shorty.com" },
1700      { "U.S. GA #2",		"rolex.usg.edu",
1701	dmenuVarsCheck,	dmenuSetVariables, NULL,
1702	"ntpdate_enable=YES,ntpdate_hosts=rolex.usg.edu" },
1703      { "U.S. GA #3",		"timex.usg.edu",
1704	dmenuVarsCheck,	dmenuSetVariables, NULL,
1705	"ntpdate_enable=YES,ntpdate_hosts=timex.usg.edu" },
1706      { "U.S. IL",	"ntp-0.cso.uiuc.edu",
1707	dmenuVarsCheck, dmenuSetVariables, NULL,
1708	"ntpdate_enable=YES,ntpdate_hosts=ntp-0.cso.uiuc.edu" },
1709      { "U.S. IL #2",	"ntp-1.cso.uiuc.edu",
1710	dmenuVarsCheck, dmenuSetVariables, NULL,
1711	"ntpdate_enable=YES,ntpdate_hosts=ntp-1.cso.uiuc.edu" },
1712      { "U.S. IL #3",	"ntp-1.mcs.anl.gov",
1713	dmenuVarsCheck, dmenuSetVariables, NULL,
1714	"ntpdate_enable=YES,ntpdate_hosts=ntp-1.mcs.anl.gov" },
1715      { "U.S. IL #4",	"ntp-2.cso.uiuc.edu",
1716	dmenuVarsCheck, dmenuSetVariables, NULL,
1717	"ntpdate_enable=YES,ntpdate_hosts=ntp-2.cso.uiuc.edu" },
1718      { "U.S. IL #5",	"ntp-2.mcs.anl.gov",
1719	dmenuVarsCheck, dmenuSetVariables, NULL,
1720	"ntpdate_enable=YES,ntpdate_hosts=ntp-2.mcs.anl.gov" },
1721      { "U.S. IN",	"gilbreth.ecn.purdue.edu",
1722	dmenuVarsCheck, dmenuSetVariables, NULL,
1723	"ntpdate_enable=YES,ntpdate_hosts=gilbreth.ecn.purdue.edu" },
1724      { "U.S. IN #2",	"harbor.ecn.purdue.edu",
1725	dmenuVarsCheck, dmenuSetVariables, NULL,
1726	"ntpdate_enable=YES,ntpdate_hosts=harbor.ecn.purdue.edu" },
1727      { "U.S. IN #3",	"molecule.ecn.purdue.edu",
1728	dmenuVarsCheck, dmenuSetVariables, NULL,
1729	"ntpdate_enable=YES,ntpdate_hosts=molecule.ecn.purdue.edu" },
1730      { "U.S. KS",	"ntp1.kansas.net",
1731	dmenuVarsCheck, dmenuSetVariables, NULL,
1732	"ntpdate_enable=YES,ntpdate_hosts=ntp1.kansas.net" },
1733      { "U.S. KS #2",	"ntp2.kansas.net",
1734	dmenuVarsCheck, dmenuSetVariables, NULL,
1735	"ntpdate_enable=YES,ntpdate_hosts=ntp2.kansas.net" },
1736      { "U.S. MA",	"ntp.ourconcord.net",
1737	dmenuVarsCheck, dmenuSetVariables, NULL,
1738	"ntpdate_enable=YES,ntpdate_hosts=ntp.ourconcord.net" },
1739      { "U.S. MA #2",	"timeserver.cs.umb.edu",
1740	dmenuVarsCheck, dmenuSetVariables, NULL,
1741	"ntpdate_enable=YES,ntpdate_hosts=timeserver.cs.umb.edu" },
1742      { "U.S. MN",	"ns.nts.umn.edu",
1743	dmenuVarsCheck, dmenuSetVariables, NULL,
1744	"ntpdate_enable=YES,ntpdate_hosts=ns.nts.umn.edu" },
1745      { "U.S. MN #2",	"nss.nts.umn.edu",
1746	dmenuVarsCheck, dmenuSetVariables, NULL,
1747	"ntpdate_enable=YES,ntpdate_hosts=nss.nts.umn.edu" },
1748      { "U.S. MO",	"time-ext.missouri.edu",
1749	dmenuVarsCheck, dmenuSetVariables, NULL,
1750	"ntpdate_enable=YES,ntpdate_hosts=time-ext.missouri.edu" },
1751      { "U.S. MT",	"chronos1.umt.edu",
1752	dmenuVarsCheck, dmenuSetVariables, NULL,
1753	"ntpdate_enable=YES,ntpdate_hosts=chronos1.umt.edu" },
1754      { "U.S. MT #2",	"chronos2.umt.edu",
1755	dmenuVarsCheck, dmenuSetVariables, NULL,
1756	"ntpdate_enable=YES,ntpdate_hosts=chronos2.umt.edu" },
1757      { "U.S. MT #3",	"chronos3.umt.edu",
1758	dmenuVarsCheck, dmenuSetVariables, NULL,
1759	"ntpdate_enable=YES,ntpdate_hosts=chronos3.umt.edu" },
1760      { "U.S. NC",	"clock1.unc.edu",
1761	dmenuVarsCheck, dmenuSetVariables, NULL,
1762	"ntpdate_enable=YES,ntpdate_hosts=clock1.unc.edu" },
1763      { "U.S. NV",	"cuckoo.nevada.edu",
1764	dmenuVarsCheck, dmenuSetVariables, NULL,
1765	"ntpdate_enable=YES,ntpdate_hosts=cuckoo.nevada.edu" },
1766      { "U.S. NV #2",	"tick.cs.unlv.edu",
1767	dmenuVarsCheck, dmenuSetVariables, NULL,
1768	"ntpdate_enable=YES,ntpdate_hosts=tick.cs.unlv.edu" },
1769      { "U.S. NV #3",	"tock.cs.unlv.edu",
1770	dmenuVarsCheck, dmenuSetVariables, NULL,
1771	"ntpdate_enable=YES,ntpdate_hosts=tock.cs.unlv.edu" },
1772      { "U.S. NY",	"ntp0.cornell.edu",
1773	dmenuVarsCheck, dmenuSetVariables, NULL,
1774	"ntpdate_enable=YES,ntpdate_hosts=ntp0.cornell.edu" },
1775      { "U.S. NY #2",	"sundial.columbia.edu",
1776	dmenuVarsCheck, dmenuSetVariables, NULL,
1777	"ntpdate_enable=YES,ntpdate_hosts=sundial.columbia.edu" },
1778      { "U.S. NY #3",	"timex.cs.columbia.edu",
1779	dmenuVarsCheck, dmenuSetVariables, NULL,
1780	"ntpdate_enable=YES,ntpdate_hosts=timex.cs.columbia.edu" },
1781      { "U.S. PA",	"clock-1.cs.cmu.edu",
1782	dmenuVarsCheck, dmenuSetVariables, NULL,
1783	"ntpdate_enable=YES,ntpdate_hosts=clock-1.cs.cmu.edu" },
1784      { "U.S. PA #2",	"clock-2.cs.cmu.edu",
1785	dmenuVarsCheck, dmenuSetVariables, NULL,
1786	"ntpdate_enable=YES,ntpdate_hosts=clock-2.cs.cmu.edu" },
1787      { "U.S. PA #3",	"clock.psu.edu",
1788	dmenuVarsCheck, dmenuSetVariables, NULL,
1789	"ntpdate_enable=YES,ntpdate_hosts=clock.psu.edu" },
1790      { "U.S. PA #4",	"fuzz.psc.edu",
1791	dmenuVarsCheck, dmenuSetVariables, NULL,
1792	"ntpdate_enable=YES,ntpdate_hosts=fuzz.psc.edu" },
1793      { "U.S. PA #5",	"ntp-1.ece.cmu.edu",
1794	dmenuVarsCheck, dmenuSetVariables, NULL,
1795	"ntpdate_enable=YES,ntpdate_hosts=ntp-1.ece.cmu.edu" },
1796      { "U.S. PA #6",	"ntp-2.ece.cmu.edu",
1797	dmenuVarsCheck, dmenuSetVariables, NULL,
1798	"ntpdate_enable=YES,ntpdate_hosts=ntp-2.ece.cmu.edu" },
1799      { "U.S. TX",	"ntp.fnbhs.com",
1800	dmenuVarsCheck, dmenuSetVariables, NULL,
1801	"ntpdate_enable=YES,ntpdate_hosts=ntp.fnbhs.com" },
1802      { "U.S. TX #2",	"ntp.tmc.edu",
1803	dmenuVarsCheck, dmenuSetVariables, NULL,
1804	"ntpdate_enable=YES,ntpdate_hosts=ntp.tmc.edu" },
1805      { "U.S. TX #3",	"ntp5.tamu.edu",
1806	dmenuVarsCheck, dmenuSetVariables, NULL,
1807	"ntpdate_enable=YES,ntpdate_hosts=ntp5.tamu.edu" },
1808      { "U.S. TX #4",	"tick.greyware.com",
1809	dmenuVarsCheck, dmenuSetVariables, NULL,
1810	"ntpdate_enable=YES,ntpdate_hosts=tick.greyware.com" },
1811      { "U.S. TX #5",	"tock.greyware.com",
1812	dmenuVarsCheck, dmenuSetVariables, NULL,
1813	"ntpdate_enable=YES,ntpdate_hosts=tock.greyware.com" },
1814      { "U.S. VA",	"ntp-1.vt.edu",
1815	dmenuVarsCheck, dmenuSetVariables, NULL,
1816	"ntpdate_enable=YES,ntpdate_hosts=ntp-1.vt.edu" },
1817      { "U.S. VA #2",	"ntp-2.vt.edu",
1818	dmenuVarsCheck, dmenuSetVariables, NULL,
1819	"ntpdate_enable=YES,ntpdate_hosts=ntp-2.vt.edu" },
1820      { "U.S. VA #3",	"ntp.cmr.gov",
1821	dmenuVarsCheck, dmenuSetVariables, NULL,
1822	"ntpdate_enable=YES,ntpdate_hosts=ntp.cmr.gov" },
1823      { "U.S. VT",	"ntp0.state.vt.us",
1824	dmenuVarsCheck, dmenuSetVariables, NULL,
1825	"ntpdate_enable=YES,ntpdate_hosts=ntp0.state.vt.us" },
1826      { "U.S. VT #2",	"ntp1.state.vt.us",
1827	dmenuVarsCheck, dmenuSetVariables, NULL,
1828	"ntpdate_enable=YES,ntpdate_hosts=ntp1.state.vt.us" },
1829      { "U.S. VT #3",	"ntp2.state.vt.us",
1830	dmenuVarsCheck, dmenuSetVariables, NULL,
1831	"ntpdate_enable=YES,ntpdate_hosts=ntp2.state.vt.us" },
1832      { "U.S. WA",	"ntp.tcp-udp.net",
1833	dmenuVarsCheck, dmenuSetVariables, NULL,
1834	"ntpdate_enable=YES,ntpdate_hosts=ntp.tcp-udp.net" },
1835      { "U.S. WI",	"ntp1.cs.wisc.edu",
1836	dmenuVarsCheck, dmenuSetVariables, NULL,
1837	"ntpdate_enable=YES,ntpdate_hosts=ntp1.cs.wisc.edu" },
1838      { "U.S. WI #2",	"ntp3.cs.wisc.edu",
1839	dmenuVarsCheck, dmenuSetVariables, NULL,
1840	"ntpdate_enable=YES,ntpdate_hosts=ntp3.cs.wisc.edu" },
1841      { "South Africa",	"ntp.cs.unp.ac.za",
1842	dmenuVarsCheck, dmenuSetVariables, NULL,
1843	"ntpdate_enable=YES,ntpdate_hosts=ntp.cs.unp.ac.za" },
1844      { NULL } },
1845};
1846
1847#ifdef WITH_SYSCONS
1848DMenu MenuSyscons = {
1849    DMENU_NORMAL_TYPE,
1850    "System Console Configuration",
1851    "The system console driver for FreeBSD has a number of configuration\n"
1852    "options which may be set according to your preference.\n\n"
1853    "When you are done setting configuration options, select Cancel.",
1854    "Configure your system console settings",
1855    NULL,
1856    { { "X Exit",	"Exit this menu (returning to previous)", NULL, dmenuExit },
1857#ifdef PC98
1858      { "2 Keymap",	"Choose an alternate keyboard map",	NULL, dmenuSubmenu, NULL, &MenuSysconsKeymap },
1859      { "3 Repeat",	"Set the rate at which keys repeat",	NULL, dmenuSubmenu, NULL, &MenuSysconsKeyrate },
1860      { "4 Saver",	"Configure the screen saver",		NULL, dmenuSubmenu, NULL, &MenuSysconsSaver },
1861#else
1862      { "2 Font",	"Choose an alternate screen font",	NULL, dmenuSubmenu, NULL, &MenuSysconsFont },
1863      { "3 Keymap",	"Choose an alternate keyboard map",	NULL, dmenuSubmenu, NULL, &MenuSysconsKeymap },
1864      { "4 Repeat",	"Set the rate at which keys repeat",	NULL, dmenuSubmenu, NULL, &MenuSysconsKeyrate },
1865      { "5 Saver",	"Configure the screen saver",		NULL, dmenuSubmenu, NULL, &MenuSysconsSaver },
1866      { "6 Screenmap",	"Choose an alternate screenmap",	NULL, dmenuSubmenu, NULL, &MenuSysconsScrnmap },
1867      { "7 Ttys",       "Choose console terminal type",         NULL, dmenuSubmenu, NULL, &MenuSysconsTtys },
1868#endif
1869      { NULL } },
1870};
1871
1872#ifdef PC98
1873DMenu MenuSysconsKeymap = {
1874    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
1875    "System Console Keymap",
1876    "The system console driver for FreeBSD defaults to a standard\n"
1877    "\"PC-98x1\" keyboard map.  Users may wish to choose one of the\n"
1878    "other keymaps below.",
1879    "Choose a keyboard map",
1880    NULL,
1881    { { "Japanese PC-98x1",		"Japanese PC-98x1 keymap",  dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=jp.pc98" },
1882      { " Japanese PC-98x1 (ISO)",	"Japanese PC-98x1 (ISO) keymap",  dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=jp.pc98.iso" },
1883      { NULL } },
1884};
1885#else
1886DMenu MenuSysconsKeymap = {
1887    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
1888    "System Console Keymap",
1889    "The system console driver for FreeBSD defaults to a standard\n"
1890    "\"US\" keyboard map.  Users may wish to choose one of the\n"
1891    "other keymaps below.",
1892    "Choose a keyboard map",
1893    NULL,
1894    { { "Belgian",	"Belgian ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=be.iso" },
1895      { " Brazil CP850",	"Brazil CP850 keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=br275.cp850" },
1896      { " Brazil ISO (accent)",	"Brazil ISO keymap (accent keys)",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=br275.iso.acc" },
1897      { " Brazil ISO",	"Brazil ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=br275.iso" },
1898      { " Bulgarian BDS",	"Bulgarian BDS keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=bg.bds.ctrlcaps" },
1899      { " Bulgarian Phonetic",	"Bulgarian Phonetic keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=bg.phonetic.ctrlcaps" },
1900      { "Central European ISO", "Central European ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=ce.iso2" },
1901      { " Croatian ISO",	"Croatian ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=hr.iso" },
1902      { " Czech ISO (accent)",	"Czech ISO keymap (accent keys)",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=cs.latin2.qwertz" },
1903      { "Danish CP865",	"Danish Code Page 865 keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=danish.cp865" },
1904      { " Danish ISO",	"Danish ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=danish.iso" },
1905      { "Estonian ISO", "Estonian ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=estonian.iso" },
1906      { " Estonian ISO 15", "Estonian ISO 8859-15 keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=estonian.iso15" },
1907      { " Estonian CP850", "Estonian Code Page 850 keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=estonian.cp850" },
1908      { "Finnish CP850","Finnish Code Page 850 keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=finnish.cp850" },
1909      { " Finnish ISO",  "Finnish ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=finnish.iso" },
1910      { " French ISO (accent)", "French ISO keymap (accent keys)",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=fr.iso.acc" },
1911      { " French ISO",	"French ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=fr.iso" },
1912      { " French ISO/Macbook",	"French ISO keymap on macbook",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=fr.macbook.acc" },
1913      { "German CP850",	"German Code Page 850 keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=german.cp850"	},
1914      { " German ISO",	"German ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=german.iso" },
1915      { " Greek 101",	"Greek ISO keymap (101 keys)",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=gr.us101.acc" },
1916      { " Greek 104",	"Greek ISO keymap (104 keys)",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=el.iso07" },
1917      { " Greek ELOT",	"Greek ISO keymap (ELOT 1000)",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=gr.elot.acc" },
1918      { "Hungarian 101", "Hungarian ISO keymap (101 key)",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=hu.iso2.101keys" },
1919      { " Hungarian 102", "Hungarian ISO keymap (102 key)",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=hu.iso2.102keys" },
1920      { "Icelandic (accent)", "Icelandic ISO keymap (accent keys)",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=icelandic.iso.acc" },
1921      { " Icelandic",	"Icelandic ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=icelandic.iso" },
1922      { " Italian",	"Italian ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=it.iso" },
1923      { "Japanese 106",	"Japanese 106 keymap",  dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=jp.106" },
1924      { "Latin American (accent)",	"Latin American ISO keymap (accent keys)",	dmenuVarCheck,	dmenuSetKmapVariable,	NULL,	"keymap=latinamerican.iso.acc" },
1925      { " Latin American",	"Latin American ISO keymap",	dmenuVarCheck,	dmenuSetKmapVariable,	NULL,	"keymap=latinamerican" },
1926      { "Norway ISO",	"Norwegian ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=norwegian.iso" },
1927      { "Polish ISO",	"Polish ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=pl_PL.ISO8859-2" },
1928      { " Portuguese (accent)",	"Portuguese ISO keymap (accent keys)",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=pt.iso.acc" },
1929      { " Portuguese",	"Portuguese ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=pt.iso" },
1930      { "Russia KOI8-R", "Russian KOI8-R keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=ru.koi8-r" },
1931      { "Slovak", "Slovak ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=sk.iso2" },
1932      { "Slovenian", "Slovenian ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=si.iso" },
1933      { " Spanish (accent)", "Spanish ISO keymap (accent keys)",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=spanish.iso.acc" },
1934      { " Spanish",	"Spanish ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=spanish.iso" },
1935      { " Swedish CP850", "Swedish Code Page 850 keymap", dmenuVarCheck,	dmenuSetKmapVariable, NULL, "keymap=swedish.cp850" },
1936      { " Swedish ISO",	"Swedish ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swedish.iso" },
1937      { " Swiss French ISO (accent)", "Swiss French ISO keymap (accent keys)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swissfrench.iso.acc" },
1938      { " Swiss French ISO", "Swiss French ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swissfrench.iso" },
1939      { " Swiss French CP850", "Swiss French Code Page 850 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swissfrench.cp850" },
1940      { " Swiss German ISO (accent)", "Swiss German ISO keymap (accent keys)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swissgerman.iso.acc" },
1941      { " Swiss German ISO", "Swiss German ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swissgerman.iso" },
1942      { " Swiss German CP850", "Swiss German Code Page 850 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swissgerman.cp850" },
1943      { "UK CP850",	"UK Code Page 850 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=uk.cp850" },
1944      { " UK ISO",	"UK ISO keymap", dmenuVarCheck,	dmenuSetKmapVariable, NULL, "keymap=uk.iso" },
1945      { " Ukrainian KOI8-U",	"Ukrainian KOI8-U keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=ua.koi8-u" },
1946      { " Ukrainian KOI8-U+KOI8-R",	"Ukrainian KOI8-U+KOI8-R keymap (alter)",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=ua.koi8-u.shift.alt" },
1947      { " USA CapsLock->Ctrl",	"US standard (Caps as L-Control)",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.pc-ctrl" },
1948      { " USA Dvorak",	"US Dvorak keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.dvorak" },
1949      { " USA Dvorak (left)",	"US left handed Dvorak keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.dvorakl" },
1950      { " USA Dvorak (right)",	"US right handed Dvorak keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.dvorakr" },
1951      { " USA Emacs",	"US standard optimized for EMACS",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.emacs" },
1952      { " USA ISO",	"US ISO keymap",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.iso" },
1953      { " USA UNIX",	"US traditional UNIX-workstation",	dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.unix" },
1954      { NULL } },
1955};
1956#endif /* PC98 */
1957
1958DMenu MenuSysconsKeyrate = {
1959    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
1960    "System Console Keyboard Repeat Rate",
1961    "This menu allows you to set the speed at which keys repeat\n"
1962    "when held down.",
1963    "Choose a keyboard repeat rate",
1964    NULL,
1965    { { "Slow",	"Slow keyboard repeat rate",	dmenuVarCheck,	dmenuSetVariable, NULL, "keyrate=slow" },
1966      { "Normal", "\"Normal\" keyboard repeat rate",	dmenuVarCheck,	dmenuSetVariable, NULL, "keyrate=normal" },
1967      { "Fast",	"Fast keyboard repeat rate",	dmenuVarCheck,	dmenuSetVariable, NULL, "keyrate=fast" },
1968      { "Default", "Use default keyboard repeat rate",	dmenuVarCheck,	dmenuSetVariable, NULL, "keyrate=NO" },
1969      { NULL } }
1970};
1971
1972DMenu MenuSysconsSaver = {
1973    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
1974    "System Console Screen Saver",
1975    "By default, the console driver will not attempt to do anything\n"
1976    "special with your screen when it's idle.  If you expect to leave your\n"
1977    "monitor switched on and idle for long periods of time then you should\n"
1978    "probably enable one of these screen savers to prevent burn-in.",
1979    "Choose a nifty-looking screen saver",
1980    NULL,
1981    { { "1 Blank",	"Simply blank the screen",
1982	dmenuVarCheck, configSaver, NULL, "saver=blank" },
1983      { "2 Beastie",	"\"BSD Daemon\" animated screen saver (graphics)",
1984	dmenuVarCheck, configSaver, NULL, "saver=beastie" },
1985      { "3 Daemon",	"\"BSD Daemon\" animated screen saver (text)",
1986	dmenuVarCheck, configSaver, NULL, "saver=daemon" },
1987      { "4 Dragon",	"Dragon screensaver (graphics)",
1988	dmenuVarCheck, configSaver, NULL, "saver=dragon" },
1989      { "5 Fade",	"Fade out effect screen saver",
1990	dmenuVarCheck, configSaver, NULL, "saver=fade" },
1991      { "6 Fire",	"Flames effect screen saver",
1992	dmenuVarCheck, configSaver, NULL, "saver=fire" },
1993      { "7 Green",	"\"Green\" power saving mode (if supported by monitor)",
1994	dmenuVarCheck, configSaver, NULL, "saver=green" },
1995      { "8 Logo",	"FreeBSD \"logo\" animated screen saver (graphics)",
1996	dmenuVarCheck, configSaver, NULL, "saver=logo" },
1997      { "9 Rain",	"Rain drops screen saver",
1998	dmenuVarCheck, configSaver, NULL, "saver=rain" },
1999      { "a Snake",	"Draw a FreeBSD \"snake\" on your screen",
2000	dmenuVarCheck, configSaver, NULL, "saver=snake" },
2001      { "b Star",	"A \"twinkling stars\" effect",
2002	dmenuVarCheck, configSaver, NULL, "saver=star" },
2003      { "c Warp",	"A \"stars warping\" effect",
2004	dmenuVarCheck, configSaver, NULL, "saver=warp" },
2005      { "d None",	"Disable the screensaver",
2006        dmenuVarCheck, configSaver, NULL, "saver=NO" },
2007      { "Timeout",	"Set the screen saver timeout interval",
2008	NULL, configSaverTimeout, NULL, NULL, ' ', ' ', ' ' },
2009      { NULL } }
2010};
2011
2012#ifndef PC98
2013DMenu MenuSysconsScrnmap = {
2014    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
2015    "System Console Screenmap",
2016    "Unless you load a specific font, most PC hardware defaults to\n"
2017    "displaying characters in the IBM 437 character set.  However,\n"
2018    "in the Unix world, this character set is very rarely used.  Most\n"
2019    "Western European countries, for example, prefer ISO 8859-1.\n"
2020    "American users won't notice the difference since the bottom half\n"
2021    "of all these character sets is ANSI anyway.\n"
2022    "If your hardware is capable of downloading a new display font,\n"
2023    "you should probably choose that option.  However, for hardware\n"
2024    "where this is not possible (e.g. monochrome adapters), a screen\n"
2025    "map will give you the best approximation that your hardware can\n"
2026    "display at all.",
2027    "Choose a screen map",
2028    NULL,
2029    { { "1 None",                 "No screenmap, don't touch font", dmenuVarCheck, dmenuSetVariable, NULL, "scrnmap=NO" },
2030      { "2 ISO 8859-1 to IBM437", "W-Europe ISO 8859-1 to IBM 437 screenmap", dmenuVarCheck, dmenuSetVariable, NULL, "scrnmap=iso-8859-1_to_cp437" },
2031      { "3 ISO 8859-7 to IBM437", "Greek ISO 8859-7 to IBM 437 screenmap", dmenuVarCheck, dmenuSetVariable, NULL, "scrnmap=iso-8859-7_to_cp437" },
2032      { "4 US-ASCII to IBM437",   "US-ASCII to IBM 437 screenmap", dmenuVarCheck, dmenuSetVariable, NULL, "scrnmap=us-ascii_to_cp437" },
2033      { "5 KOI8-R to IBM866",     "Russian KOI8-R to IBM 866 screenmap", dmenuVarCheck, dmenuSetVariable, NULL, "scrnmap=koi8-r2cp866" },
2034      { "6 KOI8-U to IBM866u",    "Ukrainian KOI8-U to IBM 866u screenmap", dmenuVarCheck, dmenuSetVariable, NULL, "scrnmap=koi8-u2cp866u" },
2035      { NULL } },
2036};
2037
2038DMenu MenuSysconsTtys = {
2039    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
2040    "System Console Terminal Type",
2041    "For various console encodings, a corresponding terminal type\n"
2042    "must be chosen in /etc/ttys.\n\n"
2043    "WARNING: For compatibility reasons, only entries starting with\n"
2044    "ttyv and terminal types starting with cons[0-9] can be changed\n"
2045    "via this menu.\n",
2046    "Choose a terminal type",
2047    NULL,
2048    { { "1 None",               "Don't touch anything",  dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=NO" },
2049      { "2 IBM437 (VGA default)", "cons25", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25" },
2050      { "3 ISO 8859-1",         "cons25l1", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25l1" },
2051      { "4 ISO 8859-2",         "cons25l2", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25l2" },
2052      { "5 ISO 8859-7",         "cons25l7", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25l7" },
2053      { "6 KOI8-R",             "cons25r", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25r" },
2054      { "7 KOI8-U",             "cons25u", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25u" },
2055      { "8 US-ASCII",           "cons25w", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25w" },
2056      { NULL } },
2057};
2058
2059DMenu MenuSysconsFont = {
2060    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
2061    "System Console Font",
2062    "Most PC hardware defaults to displaying characters in the\n"
2063    "IBM 437 character set.  However, in the Unix world, this\n"
2064    "character set is very rarely used.  Most Western European\n"
2065    "countries, for example, prefer ISO 8859-1.\n"
2066    "American users won't notice the difference since the bottom half\n"
2067    "of all these charactersets is ANSI anyway.  However, they might\n"
2068    "want to load a font anyway to use the 30- or 50-line displays.\n"
2069    "If your hardware is capable of downloading a new display font,\n"
2070    "you can select the appropriate font below.",
2071    "Choose a font",
2072    NULL,
2073    { { "1 None", "Use hardware default font", dmenuVarCheck, dmenuSetVariables, NULL,
2074	"font8x8=NO,font8x14=NO,font8x16=NO" },
2075      { "2 IBM 437", "English and others, VGA default", dmenuVarCheck,  dmenuSetVariables, NULL,
2076	"font8x8=cp437-8x8,font8x14=cp437-8x14,font8x16=cp437-8x16" },
2077      { "3 IBM 850", "Western Europe, IBM encoding",	dmenuVarCheck,	dmenuSetVariables, NULL,
2078	"font8x8=cp850-8x8,font8x14=cp850-8x14,font8x16=cp850-8x16" },
2079      { "4 IBM 865", "Norwegian, IBM encoding",	dmenuVarCheck,	dmenuSetVariables, NULL,
2080	"font8x8=cp865-8x8,font8x14=cp865-8x14,font8x16=cp865-8x16" },
2081      { "5 IBM 866", "Russian, IBM encoding (use with KOI8-R screenmap)",   dmenuVarCheck,  dmenuSetVariables, NULL,
2082	"font8x8=cp866-8x8,font8x14=cp866-8x14,font8x16=cp866b-8x16,mousechar_start=3" },
2083      { "6 IBM 866u", "Ukrainian, IBM encoding (use with KOI8-U screenmap)",   dmenuVarCheck,  dmenuSetVariables, NULL,
2084	"font8x8=cp866u-8x8,font8x14=cp866u-8x14,font8x16=cp866u-8x16,mousechar_start=3" },
2085      { "7 IBM 1251", "Cyrillic, MS Windows encoding",  dmenuVarCheck, dmenuSetVariables, NULL,
2086	"font8x8=cp1251-8x8,font8x14=cp1251-8x14,font8x16=cp1251-8x16,mousechar_start=3" },
2087      { "8 ISO 8859-1", "Western Europe, ISO encoding", dmenuVarCheck,  dmenuSetVariables, NULL,
2088	"font8x8=iso-8x8,font8x14=iso-8x14,font8x16=iso-8x16" },
2089      { "9 ISO 8859-2", "Eastern Europe, ISO encoding", dmenuVarCheck,  dmenuSetVariables, NULL,
2090	"font8x8=iso02-8x8,font8x14=iso02-8x14,font8x16=iso02-8x16" },
2091      { "a ISO 8859-4", "Baltic, ISO encoding", dmenuVarCheck,  dmenuSetVariables, NULL,
2092	"font8x8=iso04-8x8,font8x14=iso04-8x14,font8x16=iso04-8x16" },
2093      { "b ISO 8859-7", "Greek, ISO encoding", dmenuVarCheck,  dmenuSetVariables, NULL,
2094	"font8x8=iso07-8x8,font8x14=iso07-8x14,font8x16=iso07-8x16" },
2095      { "c ISO 8859-8", "Hebrew, ISO encoding", dmenuVarCheck,  dmenuSetVariables, NULL,
2096	"font8x8=iso08-8x8,font8x14=iso08-8x14,font8x16=iso08-8x16" },
2097      { "d ISO 8859-15", "Europe, ISO encoding", dmenuVarCheck,  dmenuSetVariables, NULL,
2098	"font8x8=iso15-8x8,font8x14=iso15-8x14,font8x16=iso15-8x16" },
2099      { "e SWISS", "English, better resolution", dmenuVarCheck, dmenuSetVariables, NULL,
2100	"font8x8=swiss-8x8,font8x14=NO,font8x16=swiss-8x16" },
2101      { NULL } },
2102};
2103#endif /* PC98 */
2104#endif /* WITH_SYSCONS */
2105
2106DMenu MenuUsermgmt = {
2107    DMENU_NORMAL_TYPE,
2108    "User and group management",
2109    "The submenus here allow to manipulate user groups and\n"
2110    "login accounts.\n",
2111    "Configure your user groups and users",
2112    NULL,
2113    { { "X Exit",	"Exit this menu (returning to previous)", NULL, dmenuExit },
2114      { "User",		"Add a new user to the system.",	NULL, userAddUser },
2115      { "Group",	"Add a new user group to the system.",	NULL, userAddGroup },
2116      { NULL } },
2117};
2118
2119DMenu MenuSecurity = {
2120    DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS,
2121    "System Security Options Menu",
2122    "This menu allows you to configure aspects of the operating system security\n"
2123    "policy.  Please read the system documentation carefully before modifying\n"
2124    "these settings, as they may cause service disruption if used improperly.\n"
2125    "\n"
2126    "Most settings will take affect only following a system reboot.",
2127    "Configure system security options",
2128    NULL,
2129    { { "X Exit",      "Exit this menu (returning to previous)",
2130	checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' },
2131      { " Securelevel",	"Configure securelevels for the system",
2132	NULL, configSecurelevel },
2133#if 0
2134      { " LOMAC",         "Use Low Watermark Mandatory Access Control at boot",
2135	dmenuVarCheck,  dmenuToggleVariable, NULL, "lomac_enable=YES" },
2136#endif
2137      { " NFS port",	"Require that the NFS clients use reserved ports",
2138	dmenuVarCheck,  dmenuToggleVariable, NULL, "nfs_reserved_port_only=YES" },
2139      { NULL } },
2140};
2141
2142DMenu MenuSecurelevel = {
2143    DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,
2144    "Securelevel Configuration Menu",
2145    "This menu allows you to select the securelevel your system runs with.\n"
2146    "When operating at a securelevel, certain root privileges are disabled,\n"
2147    "which may increase resistance to exploits and protect system integrity.\n"
2148    "In secure mode system flags may not be overriden by the root user,\n"
2149    "access to direct kernel memory is limited, and kernel modules may not\n"
2150    "be changed.  In highly secure mode, mounted file systems may not be\n"
2151    "modified on-disk, tampering with the system clock is prohibited.  In\n"
2152    "network secure mode configuration changes to firewalling are prohibited.\n",
2153    "Select a securelevel to operate at - F1 for help",
2154    "securelevel",
2155    { { "X Exit",      "Exit this menu (returning to previous)",
2156	checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' },
2157      { "Disabled", "Disable securelevels", NULL, configSecurelevelDisabled, },
2158      { "Secure", "Secure mode", NULL, configSecurelevelSecure },
2159      { "Highly Secure", "Highly secure mode", NULL, configSecurelevelHighlySecure },
2160      { "Network Secure", "Network secure mode", NULL, configSecurelevelNetworkSecure },
2161      { NULL } }
2162};
2163
2164DMenu MenuFixit = {
2165    DMENU_NORMAL_TYPE,
2166    "Please choose a fixit option",
2167    "There are three ways of going into \"fixit\" mode:\n"
2168    "- you can use the live filesystem CDROM/DVD, in which case there will be\n"
2169    "  full access to the complete set of FreeBSD commands and utilities,\n"
2170    "- you can use the more limited (but perhaps customized) fixit floppy,\n"
2171    "- or you can start an Emergency Holographic Shell now, which is\n"
2172    "  limited to the subset of commands that is already available right now.",
2173    "Press F1 for more detailed repair instructions",
2174    "fixit",
2175{ { "X Exit",		"Exit this menu (returning to previous)",	NULL, dmenuExit },
2176  { "2 CDROM/DVD",	"Use the live filesystem CDROM/DVD",		NULL, installFixitCDROM },
2177  { "3 USB",		"Use the live filesystem from a USB drive",	NULL, installFixitUSB },
2178  { "4 Floppy",	"Use a floppy generated from the fixit image",	NULL, installFixitFloppy },
2179  { "5 Shell",		"Start an Emergency Holographic Shell",		NULL, installFixitHoloShell },
2180  { NULL } },
2181};
2182