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
36 static const char rcsid[] =
37   "$FreeBSD: stable/9/usr.sbin/sysinstall/menus.c 252025 2013-06-20 08:19:29Z dteske $";
38 #endif
39 
40 #include "sysinstall.h"
41 
42 /* Miscellaneous work routines for menus */
43 static int
setSrc(dialogMenuItem * self)44 setSrc(dialogMenuItem *self)
45 {
46     Dists |= DIST_SRC;
47     SrcDists = DIST_SRC_ALL;
48     return DITEM_SUCCESS | DITEM_REDRAW;
49 }
50 
51 static int
clearSrc(dialogMenuItem * self)52 clearSrc(dialogMenuItem *self)
53 {
54     Dists &= ~DIST_SRC;
55     SrcDists = 0;
56     return DITEM_SUCCESS | DITEM_REDRAW;
57 }
58 
59 static int
setKernel(dialogMenuItem * self)60 setKernel(dialogMenuItem *self)
61 {
62     Dists |= DIST_KERNEL;
63     KernelDists = DIST_KERNEL_ALL;
64     return DITEM_SUCCESS | DITEM_REDRAW;
65 }
66 
67 static int
clearKernel(dialogMenuItem * self)68 clearKernel(dialogMenuItem *self)
69 {
70     Dists &= ~DIST_KERNEL;
71     KernelDists = 0;
72     return DITEM_SUCCESS | DITEM_REDRAW;
73 }
74 
75 static int
setDocAll(dialogMenuItem * self)76 setDocAll(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 
92 static int
checkDistDeveloper(dialogMenuItem * self)93 checkDistDeveloper(dialogMenuItem *self)
94 {
95     return IS_DEVELOPER(Dists, 0) && _IS_SET(SrcDists, DIST_SRC_ALL);
96 }
97 
98 static int
checkDistKernDeveloper(dialogMenuItem * self)99 checkDistKernDeveloper(dialogMenuItem *self)
100 {
101     return IS_DEVELOPER(Dists, 0) && _IS_SET(SrcDists, DIST_SRC_SYS);
102 }
103 
104 static int
checkDistUser(dialogMenuItem * self)105 checkDistUser(dialogMenuItem *self)
106 {
107     return IS_USER(Dists, 0);
108 }
109 
110 static int
checkDistMinimum(dialogMenuItem * self)111 checkDistMinimum(dialogMenuItem *self)
112 {
113     return Dists == (DIST_BASE | DIST_KERNEL);
114 }
115 
116 static int
checkDistEverything(dialogMenuItem * self)117 checkDistEverything(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 
125 static int
srcFlagCheck(dialogMenuItem * item)126 srcFlagCheck(dialogMenuItem *item)
127 {
128     return SrcDists;
129 }
130 
131 static int
kernelFlagCheck(dialogMenuItem * item)132 kernelFlagCheck(dialogMenuItem *item)
133 {
134     return KernelDists;
135 }
136 
137 static int
docFlagCheck(dialogMenuItem * item)138 docFlagCheck(dialogMenuItem *item)
139 {
140     return DocDists;
141 }
142 
143 static int
checkTrue(dialogMenuItem * item)144 checkTrue(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 
156 DMenu 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 */
257 DMenu 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 */
286 DMenu 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 */
308 DMenu 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
364 DMenu 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
420 DMenu 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
437 DMenu 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 
460 DMenu 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 
484 DMenu 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 
496 DMenu 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 
506 DMenu 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 
516 DMenu 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 
532 DMenu 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 
885 DMenu 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 
900 DMenu 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 */
911 DMenu 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 */
921 DMenu 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 */
932 DMenu 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 */
957 DMenu 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 
988 DMenu 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 
1034 DMenu 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 
1051 DMenu 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 
1109 DMenu 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 
1124 DMenu 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 */
1141 DMenu 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 */
1169 DMenu 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 */
1184 DMenu 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 */
1209 DMenu 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 
1265 DMenu 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 
1306 DMenu 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 
1357 DMenu 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 
1384 DMenu 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
1848 DMenu 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
1873 DMenu 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
1886 DMenu 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 
1958 DMenu 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 
1972 DMenu 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
2013 DMenu 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 
2038 DMenu 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 
2059 DMenu 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 
2106 DMenu 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 
2119 DMenu 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 
2142 DMenu 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 
2164 DMenu 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