sade.h revision 139832
1169240Sjfv/*
2169240Sjfv * The new sysinstall program.
3169240Sjfv *
4169240Sjfv * This is probably the last attempt in the `sysinstall' line, the next
5169240Sjfv * generation being slated to essentially a complete rewrite.
6169240Sjfv *
7169240Sjfv * Copyright (c) 1995
8169240Sjfv *	Jordan Hubbard.  All rights reserved.
9169240Sjfv *
10169240Sjfv * Redistribution and use in source and binary forms, with or without
11169240Sjfv * modification, are permitted provided that the following conditions
12169240Sjfv * are met:
13169240Sjfv * 1. Redistributions of source code must retain the above copyright
14169240Sjfv *    notice, this list of conditions and the following disclaimer,
15169240Sjfv *    verbatim and that no modifications are made prior to this
16169240Sjfv *    point in the file.
17169240Sjfv * 2. Redistributions in binary form must reproduce the above copyright
18169240Sjfv *    notice, this list of conditions and the following disclaimer in the
19169240Sjfv *    documentation and/or other materials provided with the distribution.
20169240Sjfv *
21169240Sjfv * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND
22169240Sjfv * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23169240Sjfv * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24169240Sjfv * ARE DISCLAIMED.  IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE
25169240Sjfv * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26169240Sjfv * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27169240Sjfv * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION)
28169240Sjfv * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29169240Sjfv * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30169240Sjfv * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31169240Sjfv * SUCH DAMAGE.
32169240Sjfv *
33169240Sjfv * $FreeBSD: head/usr.sbin/sade/sade.h 139832 2005-01-07 04:07:48Z kensmith $
34169240Sjfv */
35169240Sjfv
36169240Sjfv#ifndef _SYSINSTALL_H_INCLUDE
37169240Sjfv#define _SYSINSTALL_H_INCLUDE
38169240Sjfv
39169240Sjfv#include <sys/types.h>
40169240Sjfv#include <sys/wait.h>
41169240Sjfv#include <errno.h>
42169240Sjfv#include <setjmp.h>
43169240Sjfv#include <stdio.h>
44169240Sjfv#include <stdlib.h>
45169240Sjfv#include <string.h>
46169240Sjfv#include <unistd.h>
47169240Sjfv#include <dialog.h>
48169240Sjfv#include "ui_objects.h"
49169240Sjfv#include "dir.h"
50169240Sjfv#include "colors.h"
51169240Sjfv#include "dist.h"
52169240Sjfv
53169240Sjfv/*** Defines ***/
54169240Sjfv
55169240Sjfv#if defined(__i386__) || defined(__alpha__) || defined(__amd64__)
56169240Sjfv#define	WITH_SYSCONS
57169240Sjfv#define	WITH_MICE
58169240Sjfv#endif
59169240Sjfv
60169240Sjfv#if defined(__i386__) || defined(__amd64__)
61169240Sjfv#define	WITH_SLICES
62169240Sjfv#endif
63169240Sjfv
64169240Sjfv#if defined(__i386__) || defined(__alpha__)
65169240Sjfv#define	WITH_LINUX
66169240Sjfv#endif
67169240Sjfv
68169240Sjfv#if defined(PC98)
69169240Sjfv#define PCCARD_ARCH 1		        /* Support PCCARD installations */
70169240Sjfv#endif
71169240Sjfv
72169240Sjfv/* device limits */
73169240Sjfv#define DEV_NAME_MAX		128	/* The maximum length of a device name	*/
74169240Sjfv#define DEV_MAX			100	/* The maximum number of devices we'll deal with */
75169240Sjfv#define INTERFACE_MAX		50	/* Maximum number of network interfaces we'll deal with */
76169240Sjfv#define IO_ERROR		-2	/* Status code for I/O error rather than normal EOF */
77169240Sjfv
78169240Sjfv/* Number of seconds to wait for data to come off even the slowest media */
79169240Sjfv#define MEDIA_TIMEOUT		300
80169240Sjfv
81169240Sjfv/*
82169240Sjfv * I make some pretty gross assumptions about having a max of 50 chunks
83169240Sjfv * total - 8 slices and 42 partitions.  I can't easily display many more
84169240Sjfv * than that on the screen at once!
85169240Sjfv *
86169240Sjfv * For 2.1 I'll revisit this and try to make it more dynamic, but since
87169240Sjfv * this will catch 99.99% of all possible cases, I'm not too worried.
88169240Sjfv */
89169240Sjfv#define MAX_CHUNKS	40
90169240Sjfv
91169240Sjfv/* Internal environment variable names */
92169240Sjfv#define DISK_PARTITIONED		"_diskPartitioned"
93169240Sjfv#define DISK_LABELLED			"_diskLabelled"
94169240Sjfv#define DISK_SELECTED			"_diskSelected"
95169240Sjfv#define SYSTEM_STATE			"_systemState"
96169240Sjfv#define RUNNING_ON_ROOT			"_runningOnRoot"
97169240Sjfv#define TCP_CONFIGURED			"_tcpConfigured"
98169240Sjfv
99169240Sjfv/* Ones that can be tweaked from config files */
100169240Sjfv#define VAR_BLANKTIME			"blanktime"
101169240Sjfv#define VAR_BOOTMGR			"bootManager"
102169240Sjfv#define VAR_BROWSER_BINARY		"browserBinary"
103169240Sjfv#define VAR_BROWSER_PACKAGE		"browserPackage"
104169240Sjfv#define VAR_CPIO_VERBOSITY		"cpioVerbose"
105169240Sjfv#define VAR_DEBUG			"debug"
106169240Sjfv#define VAR_DESKSTYLE			"_deskStyle"
107169240Sjfv#define VAR_DISK			"disk"
108169240Sjfv#define VAR_DISKINTERACTIVE		"diskInteractive"
109169240Sjfv#define VAR_DISTS			"dists"
110169240Sjfv#define VAR_DIST_MAIN			"distMain"
111169240Sjfv#define VAR_DIST_SRC			"distSRC"
112169240Sjfv#define VAR_DIST_X11			"distX11"
113169240Sjfv#define VAR_DEDICATE_DISK		"dedicateDisk"
114169240Sjfv#define VAR_DOMAINNAME			"domainname"
115169240Sjfv#define VAR_EDITOR			"editor"
116169240Sjfv#define VAR_EXTRAS			"ifconfig_"
117169240Sjfv#define VAR_COMMAND			"command"
118169240Sjfv#define VAR_CONFIG_FILE			"configFile"
119169240Sjfv#define VAR_FIXIT_TTY			"fixitTty"
120169240Sjfv#define VAR_FTP_DIR			"ftpDirectory"
121169240Sjfv#define VAR_FTP_PASS			"ftpPass"
122169240Sjfv#define VAR_FTP_PATH			"_ftpPath"
123169240Sjfv#define VAR_FTP_PORT			"ftpPort"
124169240Sjfv#define VAR_FTP_STATE			"ftpState"
125169240Sjfv#define VAR_FTP_USER			"ftpUser"
126169240Sjfv#define VAR_FTP_HOST			"ftpHost"
127169240Sjfv#define VAR_HTTP_PATH			"_httpPath"
128169240Sjfv#define VAR_HTTP_PROXY			"httpProxy"
129169240Sjfv#define VAR_HTTP_PORT			"httpPort"
130169240Sjfv#define VAR_HTTP_HOST			"httpHost"
131169240Sjfv#define VAR_HTTP_FTP_MODE		"httpFtpMode"
132169240Sjfv#define VAR_GATEWAY			"defaultrouter"
133169240Sjfv#define VAR_GEOMETRY			"geometry"
134169240Sjfv#define VAR_HOSTNAME			"hostname"
135169240Sjfv#define VAR_IFCONFIG			"ifconfig_"
136169240Sjfv#define VAR_INSTALL_CFG			"installConfig"
137169240Sjfv#define VAR_INSTALL_ROOT		"installRoot"
138169240Sjfv#define VAR_IPADDR			"ipaddr"
139169240Sjfv#define VAR_IPV6_ENABLE			"ipv6_enable"
140169240Sjfv#define VAR_IPV6ADDR			"ipv6addr"
141169240Sjfv#define VAR_KERN_SECURELEVEL		"kern_securelevel"
142169240Sjfv#define VAR_KEYMAP			"keymap"
143169240Sjfv#define VAR_LABEL			"label"
144169240Sjfv#define VAR_LABEL_COUNT			"labelCount"
145169240Sjfv#define VAR_LINUX_ENABLE		"linux_enable"
146169240Sjfv#define VAR_MEDIA_TYPE			"mediaType"
147169240Sjfv#define VAR_MEDIA_TIMEOUT		"MEDIA_TIMEOUT"
148169240Sjfv#define VAR_MOUSED			"moused_enable"
149169240Sjfv#define VAR_MOUSED_FLAGS                "moused_flags"
150169240Sjfv#define VAR_MOUSED_PORT			"moused_port"
151169240Sjfv#define VAR_MOUSED_TYPE			"moused_type"
152169240Sjfv#define VAR_NAMESERVER			"nameserver"
153169240Sjfv#define VAR_NETINTERACTIVE		"netInteractive"
154169240Sjfv#define VAR_NETMASK			"netmask"
155169240Sjfv#define VAR_NETWORK_DEVICE		"netDev"
156169240Sjfv#define VAR_NEWFS_ARGS			"newfsArgs"
157169240Sjfv#define VAR_NFS_PATH			"nfs"
158169240Sjfv#define VAR_NFS_HOST			"nfsHost"
159169240Sjfv#define VAR_NFS_V3			"nfs_use_v3"
160169240Sjfv#define VAR_NFS_TCP			"nfs_use_tcp"
161169240Sjfv#define VAR_NFS_SECURE			"nfs_reserved_port_only"
162169240Sjfv#define VAR_NFS_SERVER			"nfs_server_enable"
163169240Sjfv#define VAR_NO_CONFIRM			"noConfirm"
164169240Sjfv#define VAR_NO_ERROR			"noError"
165169240Sjfv#define VAR_NO_HOLOSHELL		"noHoloShell"
166169240Sjfv#define VAR_NO_INET6			"noInet6"
167169240Sjfv#define VAR_NO_WARN			"noWarn"
168169240Sjfv#define VAR_NO_USR			"noUsr"
169169240Sjfv#define VAR_NO_TMP			"noTmp"
170169240Sjfv#define VAR_NO_HOME			"noHome"
171169240Sjfv#define VAR_NONINTERACTIVE		"nonInteractive"
172169240Sjfv#define VAR_NOVELL			"novell"
173169240Sjfv#define	VAR_OSF1_ENABLE			"osf1_enable"
174169240Sjfv#define	VAR_RPCBIND_ENABLE		"rpcbind_enable"
175169240Sjfv#define VAR_NTPDATE_FLAGS		"ntpdate_flags"
176169240Sjfv#define VAR_PACKAGE			"package"
177169240Sjfv#define VAR_PARTITION			"partition"
178169240Sjfv#define VAR_PCNFSD			"pcnfsd"
179169240Sjfv#define VAR_PKG_TMPDIR			"PKG_TMPDIR"
180169240Sjfv#define VAR_PORTS_PATH			"ports"
181169240Sjfv#define VAR_PPP_ENABLE			"ppp_enable"
182169240Sjfv#define VAR_PPP_PROFILE			"ppp_profile"
183169240Sjfv#define VAR_RELNAME			"releaseName"
184169240Sjfv#define VAR_ROOT_SIZE			"rootSize"
185169240Sjfv#define VAR_ROUTER			"router"
186169240Sjfv#define VAR_ROUTER_ENABLE		"router_enable"
187169240Sjfv#define VAR_ROUTERFLAGS			"router_flags"
188169240Sjfv#define VAR_SENDMAIL_ENABLE		"sendmail_enable"
189169240Sjfv#define VAR_SERIAL_SPEED		"serialSpeed"
190169240Sjfv#define VAR_SLOW_ETHER			"slowEthernetCard"
191169240Sjfv#define VAR_SWAP_SIZE			"swapSize"
192169240Sjfv#define VAR_TAPE_BLOCKSIZE		"tapeBlocksize"
193169240Sjfv#define VAR_TRY_DHCP			"tryDHCP"
194169240Sjfv#define VAR_TRY_RTSOL			"tryRTSOL"
195169240Sjfv#define VAR_SKIP_PCCARD			"skipPCCARD"
196169240Sjfv#define VAR_UFS_PATH			"ufs"
197169240Sjfv#define VAR_USR_SIZE			"usrSize"
198169240Sjfv#define VAR_VAR_SIZE			"varSize"
199169240Sjfv#define VAR_TMP_SIZE			"tmpSize"
200169240Sjfv#define VAR_HOME_SIZE			"homeSize"
201169240Sjfv#define VAR_XORG_CONFIG			"_xorgconfig"
202169240Sjfv#define VAR_TERM			"TERM"
203169240Sjfv#define VAR_CONSTERM                    "_consterm"
204169240Sjfv
205169240Sjfv#define DEFAULT_TAPE_BLOCKSIZE	"20"
206169240Sjfv
207169240Sjfv/* One MB worth of blocks */
208169240Sjfv#define ONE_MEG				2048
209169240Sjfv#define ONE_GIG				(ONE_MEG * 1024)
210169240Sjfv
211169240Sjfv/* Which selection attributes to use */
212169240Sjfv#define ATTR_SELECTED			(ColorDisplay ? item_selected_attr : item_attr)
213169240Sjfv#define ATTR_TITLE	button_active_attr
214169240Sjfv
215169240Sjfv/* Handy strncpy() macro */
216169240Sjfv#define SAFE_STRCPY(to, from)	sstrncpy((to), (from), sizeof (to) - 1)
217169240Sjfv
218169240Sjfv/*** Types ***/
219169240Sjfvtypedef int Boolean;
220169240Sjfvtypedef struct disk Disk;
221169240Sjfvtypedef struct chunk Chunk;
222169240Sjfv
223169240Sjfv/* Bitfields for menu options */
224169240Sjfv#define DMENU_NORMAL_TYPE	0x1     /* Normal dialog menu           */
225169240Sjfv#define DMENU_RADIO_TYPE	0x2     /* Radio dialog menu            */
226169240Sjfv#define DMENU_CHECKLIST_TYPE	0x4     /* Multiple choice menu         */
227169240Sjfv#define DMENU_SELECTION_RETURNS 0x8     /* Immediate return on item selection */
228169240Sjfv
229169240Sjfvtypedef struct _dmenu {
230169240Sjfv    int type;				/* What sort of menu we are	*/
231169240Sjfv    char *title;			/* Our title			*/
232169240Sjfv    char *prompt;			/* Our prompt			*/
233169240Sjfv    char *helpline;			/* Line of help at bottom	*/
234169240Sjfv    char *helpfile;			/* Help file for "F1"		*/
235169240Sjfv#if (__STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3)
236169240Sjfv    dialogMenuItem items[];		/* Array of menu items		*/
237169240Sjfv#elif __GNUC__
238169240Sjfv    dialogMenuItem items[0];		/* Array of menu items		*/
239169240Sjfv#else
240169240Sjfv#error "Create hack for C89 and K&R compilers."
241169240Sjfv#endif
242169240Sjfv} DMenu;
243169240Sjfv
244169240Sjfv/* An rc.conf variable */
245169240Sjfvtypedef struct _variable {
246169240Sjfv    struct _variable *next;
247169240Sjfv    char *name;
248169240Sjfv    char *value;
249169240Sjfv    int dirty;
250169240Sjfv} Variable;
251169240Sjfv
252169240Sjfv#define NO_ECHO_OBJ(type)	((type) | (DITEM_NO_ECHO << 16))
253169240Sjfv#define TYPE_OF_OBJ(type)	((type) & 0xff)
254169240Sjfv#define ATTR_OF_OBJ(type)	((type) >> 16)
255169240Sjfv
256169240Sjfv/* A screen layout structure */
257169240Sjfvtypedef struct _layout {
258169240Sjfv    int         y;              /* x & Y co-ordinates */
259169240Sjfv    int         x;
260169240Sjfv    int         len;            /* The size of the dialog on the screen */
261169240Sjfv    int         maxlen;         /* How much the user can type in ... */
262169240Sjfv    char        *prompt;        /* The string for the prompt */
263169240Sjfv    char        *help;          /* The display for the help line */
264169240Sjfv    void        *var;           /* The var to set when this changes */
265169240Sjfv    int         type;           /* The type of the dialog to create */
266169240Sjfv    void        *obj;           /* The obj pointer returned by libdialog */
267169240Sjfv} Layout;
268169240Sjfv
269169240Sjfvtypedef enum {
270169240Sjfv    DEVICE_TYPE_NONE,
271169240Sjfv    DEVICE_TYPE_DISK,
272169240Sjfv    DEVICE_TYPE_FLOPPY,
273169240Sjfv    DEVICE_TYPE_FTP,
274169240Sjfv    DEVICE_TYPE_NETWORK,
275169240Sjfv    DEVICE_TYPE_CDROM,
276169240Sjfv    DEVICE_TYPE_TAPE,
277169240Sjfv    DEVICE_TYPE_DOS,
278169240Sjfv    DEVICE_TYPE_UFS,
279169240Sjfv    DEVICE_TYPE_NFS,
280169240Sjfv    DEVICE_TYPE_ANY,
281169240Sjfv    DEVICE_TYPE_HTTP,
282169240Sjfv} DeviceType;
283169240Sjfv
284169240Sjfv/* CDROM mount codes */
285169240Sjfv#define CD_UNMOUNTED		0
286169240Sjfv#define CD_ALREADY_MOUNTED	1
287169240Sjfv#define CD_WE_MOUNTED_IT	2
288169240Sjfv
289169240Sjfv/* A "device" from sysinstall's point of view */
290169240Sjfvtypedef struct _device {
291169240Sjfv    char name[DEV_NAME_MAX];
292169240Sjfv    char *description;
293169240Sjfv    char *devname;
294169240Sjfv    DeviceType type;
295169240Sjfv    Boolean enabled;
296169240Sjfv    Boolean (*init)(struct _device *dev);
297169240Sjfv    FILE * (*get)(struct _device *dev, char *file, Boolean probe);
298169240Sjfv    void (*shutdown)(struct _device *dev);
299169240Sjfv    void *private;
300169240Sjfv    unsigned int flags;
301169240Sjfv    unsigned int volume;
302169240Sjfv} Device;
303169240Sjfv
304169240Sjfv/* Some internal representations of partitions */
305169240Sjfvtypedef enum {
306169240Sjfv    PART_NONE,
307169240Sjfv    PART_SLICE,
308169240Sjfv    PART_SWAP,
309169240Sjfv    PART_FILESYSTEM,
310169240Sjfv    PART_FAT,
311169240Sjfv    PART_EFI
312169240Sjfv} PartType;
313169240Sjfv
314169240Sjfv#define	NEWFS_UFS_CMD		"newfs"
315169240Sjfv#define	NEWFS_MSDOS_CMD		"newfs_msdos"
316169240Sjfv
317169240Sjfvenum newfs_type { NEWFS_UFS, NEWFS_MSDOS, NEWFS_CUSTOM };
318169240Sjfv#define	NEWFS_UFS_STRING	"UFS"
319169240Sjfv#define	NEWFS_MSDOS_STRING	"FAT"
320169240Sjfv#define	NEWFS_CUSTOM_STRING	"CST"
321169240Sjfv
322169240Sjfv/* The longest set of custom command line arguments we'll pass. */
323169240Sjfv#define NEWFS_CMD_ARGS_MAX	256
324169240Sjfv
325169240Sjfvtypedef struct _part_info {
326169240Sjfv	char mountpoint[FILENAME_MAX];
327169240Sjfv
328169240Sjfv	/* Is invocation of newfs desired? */
329169240Sjfv	Boolean do_newfs;
330169240Sjfv
331169240Sjfv	enum newfs_type newfs_type;
332169240Sjfv	union {
333169240Sjfv		struct {
334169240Sjfv			char user_options[NEWFS_CMD_ARGS_MAX];
335169240Sjfv			Boolean acls;		/* unused */
336169240Sjfv			Boolean multilabel;	/* unused */
337169240Sjfv			Boolean softupdates;
338169240Sjfv			Boolean ufs1;
339169240Sjfv		} newfs_ufs;
340169240Sjfv		struct {
341169240Sjfv			/* unused */
342169240Sjfv		} newfs_msdos;
343169240Sjfv		struct {
344169240Sjfv			char command[NEWFS_CMD_ARGS_MAX];
345169240Sjfv		} newfs_custom;
346169240Sjfv	} newfs_data;
347169240Sjfv} PartInfo;
348169240Sjfv
349169240Sjfv/* An option */
350169240Sjfvtypedef struct _opt {
351169240Sjfv    char *name;
352169240Sjfv    char *desc;
353169240Sjfv    enum { OPT_IS_STRING, OPT_IS_INT, OPT_IS_FUNC, OPT_IS_VAR } type;
354169240Sjfv    void *data;
355169240Sjfv    void *aux;
356169240Sjfv    char *(*check)();
357169240Sjfv} Option;
358169240Sjfv
359169240Sjfv/* Weird index nodey things we use for keeping track of package information */
360169240Sjfvtypedef enum { PACKAGE, PLACE } node_type;	/* Types of nodes */
361169240Sjfv
362169240Sjfvtypedef struct _pkgnode {	/* A node in the reconstructed hierarchy */
363169240Sjfv    struct _pkgnode *next;	/* My next sibling			*/
364169240Sjfv    node_type type;		/* What am I?				*/
365169240Sjfv    char *name;			/* My name				*/
366169240Sjfv    char *desc;			/* My description (Hook)		*/
367169240Sjfv    struct _pkgnode *kids;	/* My little children			*/
368169240Sjfv    void *data;			/* A place to hang my data		*/
369169240Sjfv} PkgNode;
370169240Sjfvtypedef PkgNode *PkgNodePtr;
371169240Sjfv
372169240Sjfv/* A single package */
373169240Sjfvtypedef struct _indexEntry {	/* A single entry in an INDEX file */
374169240Sjfv    char *name;			/* name				*/
375169240Sjfv    char *path;			/* full path to port		*/
376169240Sjfv    char *prefix;		/* port prefix			*/
377169240Sjfv    char *comment;		/* one line description		*/
378169240Sjfv    char *descrfile;		/* path to description file	*/
379169240Sjfv    char *deps;			/* packages this depends on	*/
380169240Sjfv    int  depc;			/* how many depend on me	*/
381169240Sjfv    int  installed;		/* indicates if it is installed */
382169240Sjfv    char *maintainer;		/* maintainer			*/
383169240Sjfv    unsigned int volume;	/* Volume of package            */
384169240Sjfv} IndexEntry;
385169240Sjfvtypedef IndexEntry *IndexEntryPtr;
386169240Sjfv
387169240Sjfvtypedef int (*commandFunc)(char *key, void *data);
388169240Sjfv
389169240Sjfv#define HOSTNAME_FIELD_LEN	128
390169240Sjfv#define IPADDR_FIELD_LEN	16
391169240Sjfv#define EXTRAS_FIELD_LEN	128
392169240Sjfv
393169240Sjfv/* This is the structure that Network devices carry around in their private, erm, structures */
394169240Sjfvtypedef struct _devPriv {
395169240Sjfv    int use_rtsol;
396169240Sjfv    int use_dhcp;
397169240Sjfv    char ipaddr[IPADDR_FIELD_LEN];
398169240Sjfv    char netmask[IPADDR_FIELD_LEN];
399169240Sjfv    char extras[EXTRAS_FIELD_LEN];
400169240Sjfv} DevInfo;
401169240Sjfv
402169240Sjfv
403169240Sjfv/*** Externs ***/
404169240Sjfvextern jmp_buf		BailOut;		/* Used to get the heck out */
405169240Sjfvextern int		DebugFD;		/* Where diagnostic output goes			*/
406169240Sjfvextern Boolean		Fake;			/* Don't actually modify anything - testing	*/
407169240Sjfvextern Boolean		Restarting;		/* Are we restarting sysinstall?		*/
408169240Sjfvextern Boolean		SystemWasInstalled;	/* Did we install it?				*/
409169240Sjfvextern Boolean		RunningAsInit;		/* Are we running stand-alone?			*/
410169240Sjfvextern Boolean		DialogActive;		/* Is the dialog() stuff up?			*/
411169240Sjfvextern Boolean		ColorDisplay;		/* Are we on a color display?			*/
412169240Sjfvextern Boolean		OnVTY;			/* On a syscons VTY?				*/
413169240Sjfvextern Variable		*VarHead;		/* The head of the variable chain		*/
414169240Sjfvextern Device		*mediaDevice;		/* Where we're getting our distribution from	*/
415169240Sjfvextern unsigned int	Dists;			/* Which distributions we want			*/
416169240Sjfvextern unsigned int	SrcDists;		/* Which src distributions we want		*/
417169240Sjfvextern unsigned int	XOrgDists;		/* Which X.Org dists we want			*/
418169240Sjfvextern int		BootMgr;		/* Which boot manager to use 			*/
419169240Sjfvextern int		StatusLine;		/* Where to print our status messages		*/
420169240Sjfvextern DMenu		MenuInitial;		/* Initial installation menu			*/
421169240Sjfvextern DMenu		MenuFixit;		/* Fixit repair menu				*/
422169240Sjfv#if defined(__i386__) || defined(__amd64__)
423169240Sjfv#ifdef PC98
424169240Sjfvextern DMenu		MenuIPLType;		/* Type of IPL to write on the disk		*/
425169240Sjfv#else
426169240Sjfvextern DMenu		MenuMBRType;		/* Type of MBR to write on the disk		*/
427169240Sjfv#endif
428169240Sjfv#endif
429169240Sjfvextern DMenu		MenuConfigure;		/* Final configuration menu			*/
430169240Sjfvextern DMenu		MenuDocumentation;	/* Documentation menu				*/
431169240Sjfvextern DMenu		MenuFTPOptions;		/* FTP Installation options			*/
432169240Sjfvextern DMenu		MenuIndex;		/* Index menu					*/
433169240Sjfvextern DMenu		MenuOptions;		/* Installation options				*/
434169240Sjfvextern DMenu		MenuOptionsLanguage;	/* Language options menu			*/
435169240Sjfvextern DMenu		MenuKLD;		/* Prototype KLD menu				*/
436169240Sjfvextern DMenu		MenuMedia;		/* Media type menu				*/
437169240Sjfv#ifdef WITH_MICE
438169240Sjfvextern DMenu		MenuMouse;		/* Mouse type menu				*/
439169240Sjfv#endif
440169240Sjfvextern DMenu		MenuMediaCDROM;		/* CDROM media menu				*/
441169240Sjfvextern DMenu		MenuMediaDOS;		/* DOS media menu				*/
442169240Sjfvextern DMenu		MenuMediaFloppy;	/* Floppy media menu				*/
443169240Sjfvextern DMenu		MenuMediaFTP;		/* FTP media menu				*/
444169240Sjfvextern DMenu		MenuMediaTape;		/* Tape media menu				*/
445169240Sjfvextern DMenu		MenuNetworkDevice;	/* Network device menu				*/
446169240Sjfvextern DMenu		MenuNTP;		/* NTP time server menu				*/
447169240Sjfvextern DMenu		MenuSecurity;		/* System security options menu			*/
448169240Sjfvextern DMenu		MenuSecurelevel;	/* Securelevel menu */
449169240Sjfvextern DMenu		MenuStartup;		/* Startup services menu			*/
450169240Sjfv#ifdef WITH_SYSCONS
451169240Sjfvextern DMenu		MenuSyscons;		/* System console configuration menu		*/
452169240Sjfvextern DMenu		MenuSysconsFont;	/* System console font configuration menu	*/
453169240Sjfvextern DMenu		MenuSysconsKeymap;	/* System console keymap configuration menu	*/
454169240Sjfvextern DMenu		MenuSysconsKeyrate;	/* System console keyrate configuration menu	*/
455169240Sjfvextern DMenu		MenuSysconsSaver;	/* System console saver configuration menu	*/
456169240Sjfvextern DMenu		MenuSysconsScrnmap;	/* System console screenmap configuration menu	*/
457169240Sjfvextern DMenu            MenuSysconsTtys;        /* System console terminal type menu            */
458169240Sjfv#endif
459169240Sjfvextern DMenu		MenuNetworking;		/* Network configuration menu			*/
460169240Sjfvextern DMenu		MenuMTA;		/* MTA selection menu				*/
461169240Sjfvextern DMenu		MenuInstallCustom;	/* Custom Installation menu			*/
462169240Sjfvextern DMenu		MenuDistributions;	/* Distribution menu				*/
463169240Sjfvextern DMenu		MenuDiskDevices;	/* Disk type devices				*/
464169240Sjfvextern DMenu		MenuSubDistributions;	/* Custom distribution menu			*/
465169240Sjfvextern DMenu		MenuSrcDistributions;	/* Source distribution menu			*/
466169240Sjfvextern DMenu		MenuXOrg;		/* X.Org main menu				*/
467169240Sjfvextern DMenu		MenuXOrgSelect;		/* X.Org distribution selection menu		*/
468169240Sjfvextern DMenu		MenuXOrgSelectCore;	/* X.Org core distribution menu			*/
469169240Sjfvextern DMenu		MenuXOrgSelectServer;	/* X.Org server distribution menu		*/
470169240Sjfvextern DMenu		MenuXOrgSelectFonts;	/* X.Org font selection menu			*/
471169240Sjfvextern DMenu		MenuXDesktops;		/* X Desktops menu				*/
472169240Sjfvextern DMenu		MenuHTMLDoc;		/* HTML Documentation menu			*/
473169240Sjfvextern DMenu		MenuUsermgmt;		/* User management menu				*/
474169240Sjfvextern DMenu		MenuFixit;		/* Fixit floppy/CDROM/shell menu		*/
475169240Sjfvextern DMenu		MenuXOrgConfig;		/* Select X.Org configuration tool		*/
476169240Sjfvextern int              FixItMode;              /* FixItMode starts shell onc urrent device (ie Serial port) */
477169240Sjfvextern const char *	StartName;		/* Which name we were started as */
478169240Sjfv
479169240Sjfv/* Important chunks. */
480169240Sjfvextern Chunk *HomeChunk;
481169240Sjfvextern Chunk *RootChunk;
482169240Sjfvextern Chunk *SwapChunk;
483169240Sjfvextern Chunk *TmpChunk;
484169240Sjfvextern Chunk *UsrChunk;
485169240Sjfvextern Chunk *VarChunk;
486169240Sjfv#ifdef __ia64__
487169240Sjfvextern Chunk *EfiChunk;
488169240Sjfv#endif
489169240Sjfv
490169240Sjfv/* Stuff from libdialog which isn't properly declared outside */
491169240Sjfvextern void display_helpfile(void);
492169240Sjfvextern void display_helpline(WINDOW *w, int y, int width);
493169240Sjfv
494169240Sjfv/*** Prototypes ***/
495169240Sjfv
496169240Sjfv/* anonFTP.c */
497169240Sjfvextern int	configAnonFTP(dialogMenuItem *self);
498169240Sjfv
499169240Sjfv/* cdrom.c */
500169240Sjfvextern Boolean	mediaInitCDROM(Device *dev);
501169240Sjfvextern FILE	*mediaGetCDROM(Device *dev, char *file, Boolean probe);
502169240Sjfvextern void	mediaShutdownCDROM(Device *dev);
503169240Sjfv
504169240Sjfv/* command.c */
505169240Sjfvextern void	command_clear(void);
506169240Sjfvextern void	command_sort(void);
507169240Sjfvextern void	command_execute(void);
508169240Sjfvextern void	command_shell_add(char *key, char *fmt, ...) __printflike(2, 3);
509169240Sjfvextern void	command_func_add(char *key, commandFunc func, void *data);
510169240Sjfv
511169240Sjfv/* config.c */
512169240Sjfvextern void	configEnvironmentRC_conf(void);
513169240Sjfvextern void	configEnvironmentResolv(char *config);
514169240Sjfvextern void	configRC_conf(void);
515169240Sjfvextern int	configFstab(dialogMenuItem *self);
516169240Sjfvextern int	configRC(dialogMenuItem *self);
517169240Sjfvextern int	configResolv(dialogMenuItem *self);
518169240Sjfvextern int	configPackages(dialogMenuItem *self);
519169240Sjfvextern int	configSaver(dialogMenuItem *self);
520169240Sjfvextern int	configSaverTimeout(dialogMenuItem *self);
521169240Sjfv#ifdef WITH_LINUX
522169240Sjfvextern int	configLinux(dialogMenuItem *self);
523169240Sjfv#endif
524169240Sjfvextern int	configNTP(dialogMenuItem *self);
525169240Sjfv#ifdef __alpha__
526169240Sjfvextern int	configOSF1(dialogMenuItem *self);
527169240Sjfv#endif
528169240Sjfvextern int	configUsers(dialogMenuItem *self);
529169240Sjfvextern int	configRouter(dialogMenuItem *self);
530169240Sjfvextern int	configPCNFSD(dialogMenuItem *self);
531169240Sjfvextern int	configInetd(dialogMenuItem *self);
532169240Sjfvextern int	configNFSServer(dialogMenuItem *self);
533169240Sjfvextern int	configMTAPostfix(dialogMenuItem *self);
534169240Sjfvextern int	configMTAExim(dialogMenuItem *self);
535169240Sjfvextern int	configRpcBind(dialogMenuItem *self);
536169240Sjfvextern int	configWriteRC_conf(dialogMenuItem *self);
537169240Sjfvextern int	configSecurelevel(dialogMenuItem *self);
538169240Sjfvextern int	configSecurelevelDisabled(dialogMenuItem *self);
539169240Sjfvextern int	configSecurelevelSecure(dialogMenuItem *self);
540169240Sjfvextern int	configSecurelevelHighlySecure(dialogMenuItem *self);
541169240Sjfvextern int	configSecurelevelNetworkSecure(dialogMenuItem *self);
542169240Sjfvextern int	configEtcTtys(dialogMenuItem *self);
543169240Sjfv#ifdef __i386__
544169240Sjfvextern int	checkLoaderACPI(void);
545169240Sjfvextern int	configLoaderACPI(int);
546169240Sjfv#endif
547169240Sjfv
548169240Sjfv/* devices.c */
549169240Sjfvextern DMenu	*deviceCreateMenu(DMenu *menu, DeviceType type, int (*hook)(dialogMenuItem *d),
550169240Sjfv				  int (*check)(dialogMenuItem *d));
551169240Sjfvextern void	deviceGetAll(void);
552169240Sjfvextern void	deviceReset(void);
553169240Sjfvextern void	deviceRescan(void);
554169240Sjfvextern Device	**deviceFind(char *name, DeviceType type);
555169240Sjfvextern Device	**deviceFindDescr(char *name, char *desc, DeviceType class);
556169240Sjfvextern int	deviceCount(Device **devs);
557169240Sjfvextern Device	*new_device(char *name);
558169240Sjfvextern Device	*deviceRegister(char *name, char *desc, char *devname, DeviceType type, Boolean enabled,
559169240Sjfv				Boolean (*init)(Device *mediadev),
560169240Sjfv				FILE * (*get)(Device *dev, char *file, Boolean probe),
561169240Sjfv				void (*shutDown)(Device *mediadev),
562169240Sjfv				void *private);
563169240Sjfvextern Boolean	dummyInit(Device *dev);
564169240Sjfvextern FILE	*dummyGet(Device *dev, char *dist, Boolean probe);
565169240Sjfvextern void	dummyShutdown(Device *dev);
566169240Sjfv
567169240Sjfv/* dhcp.c */
568169240Sjfvextern int	dhcpParseLeases(char *file, char *hostname, char *domain, char *nameserver,
569169240Sjfv				char *ipaddr, char *gateway, char *netmask);
570169240Sjfv
571169240Sjfv/* disks.c */
572169240Sjfv#ifdef WITH_SLICES
573169240Sjfvextern void	diskPartition(Device *dev);
574169240Sjfvextern int	diskPartitionEditor(dialogMenuItem *self);
575169240Sjfv#endif
576169240Sjfvextern int	diskPartitionWrite(dialogMenuItem *self);
577169240Sjfvextern int	diskGetSelectCount(Device ***devs);
578169240Sjfv
579169240Sjfv/* dispatch.c */
580169240Sjfvextern int	dispatchCommand(char *command);
581169240Sjfvextern int	dispatch_load_floppy(dialogMenuItem *self);
582169240Sjfvextern int	dispatch_load_file_int(int);
583169240Sjfvextern int	dispatch_load_file(dialogMenuItem *self);
584169240Sjfv
585169240Sjfv
586169240Sjfv/* dist.c */
587169240Sjfvextern int	distReset(dialogMenuItem *self);
588169240Sjfvextern int	distConfig(dialogMenuItem *self);
589169240Sjfvextern int	distSetCustom(dialogMenuItem *self);
590169240Sjfvextern int	distUnsetCustom(dialogMenuItem *self);
591169240Sjfvextern int	distSetDeveloper(dialogMenuItem *self);
592169240Sjfvextern int	distSetXDeveloper(dialogMenuItem *self);
593169240Sjfvextern int	distSetKernDeveloper(dialogMenuItem *self);
594169240Sjfvextern int	distSetXKernDeveloper(dialogMenuItem *self);
595169240Sjfvextern int	distSetUser(dialogMenuItem *self);
596169240Sjfvextern int	distSetXUser(dialogMenuItem *self);
597169240Sjfvextern int	distSetMinimum(dialogMenuItem *self);
598169240Sjfvextern int	distSetEverything(dialogMenuItem *self);
599169240Sjfvextern int	distSetSrc(dialogMenuItem *self);
600169240Sjfvextern int	distSetXOrg(dialogMenuItem *self);
601169240Sjfvextern int	distExtractAll(dialogMenuItem *self);
602169240Sjfv
603169240Sjfv/* dmenu.c */
604169240Sjfvextern int	dmenuDisplayFile(dialogMenuItem *tmp);
605169240Sjfvextern int	dmenuSubmenu(dialogMenuItem *tmp);
606169240Sjfvextern int	dmenuSystemCommand(dialogMenuItem *tmp);
607169240Sjfvextern int	dmenuSystemCommandBox(dialogMenuItem *tmp);
608169240Sjfvextern int	dmenuExit(dialogMenuItem *tmp);
609169240Sjfvextern int	dmenuISetVariable(dialogMenuItem *tmp);
610169240Sjfvextern int	dmenuSetVariable(dialogMenuItem *tmp);
611169240Sjfvextern int	dmenuSetKmapVariable(dialogMenuItem *tmp);
612169240Sjfvextern int	dmenuSetVariables(dialogMenuItem *tmp);
613169240Sjfvextern int	dmenuToggleVariable(dialogMenuItem *tmp);
614169240Sjfvextern int	dmenuSetFlag(dialogMenuItem *tmp);
615169240Sjfvextern int	dmenuSetValue(dialogMenuItem *tmp);
616169240Sjfvextern Boolean	dmenuOpen(DMenu *menu, int *choice, int *scroll, int *curr, int *max, Boolean buttons);
617169240Sjfvextern Boolean	dmenuOpenSimple(DMenu *menu, Boolean buttons);
618169240Sjfvextern int	dmenuVarCheck(dialogMenuItem *item);
619169240Sjfvextern int	dmenuVarsCheck(dialogMenuItem *item);
620169240Sjfvextern int	dmenuFlagCheck(dialogMenuItem *item);
621169240Sjfvextern int	dmenuRadioCheck(dialogMenuItem *item);
622169240Sjfv
623169240Sjfv/* doc.c */
624169240Sjfvextern int	docBrowser(dialogMenuItem *self);
625169240Sjfvextern int	docShowDocument(dialogMenuItem *self);
626169240Sjfv
627169240Sjfv/* dos.c */
628169240Sjfvextern Boolean	mediaCloseDOS(Device *dev, FILE *fp);
629169240Sjfvextern Boolean	mediaInitDOS(Device *dev);
630169240Sjfvextern FILE	*mediaGetDOS(Device *dev, char *file, Boolean probe);
631169240Sjfvextern void	mediaShutdownDOS(Device *dev);
632169240Sjfv
633169240Sjfv/* floppy.c */
634169240Sjfvextern int	getRootFloppy(void);
635169240Sjfvextern Boolean	mediaInitFloppy(Device *dev);
636169240Sjfvextern FILE	*mediaGetFloppy(Device *dev, char *file, Boolean probe);
637169240Sjfvextern void	mediaShutdownFloppy(Device *dev);
638169240Sjfv
639169240Sjfv/* ftp_strat.c */
640169240Sjfvextern Boolean	mediaCloseFTP(Device *dev, FILE *fp);
641169240Sjfvextern Boolean	mediaInitFTP(Device *dev);
642169240Sjfvextern FILE	*mediaGetFTP(Device *dev, char *file, Boolean probe);
643169240Sjfvextern void	mediaShutdownFTP(Device *dev);
644169240Sjfv
645169240Sjfv/* http.c */
646169240Sjfvextern Boolean	mediaInitHTTP(Device *dev);
647169240Sjfvextern FILE	*mediaGetHTTP(Device *dev, char *file, Boolean probe);
648169240Sjfv
649169240Sjfv/* globals.c */
650169240Sjfvextern void	globalsInit(void);
651169240Sjfv
652169240Sjfv/* index.c */
653169240Sjfvint		index_read(FILE *fp, PkgNodePtr papa);
654169240Sjfvint		index_menu(PkgNodePtr root, PkgNodePtr top, PkgNodePtr plist, int *pos, int *scroll);
655169240Sjfvvoid		index_init(PkgNodePtr top, PkgNodePtr plist);
656169240Sjfvvoid		index_node_free(PkgNodePtr top, PkgNodePtr plist);
657169240Sjfvvoid		index_sort(PkgNodePtr top);
658169240Sjfvvoid		index_print(PkgNodePtr top, int level);
659169240Sjfvint		index_extract(Device *dev, PkgNodePtr top, PkgNodePtr who, Boolean depended);
660169240Sjfvint		index_initialize(char *path);
661169240SjfvPkgNodePtr	index_search(PkgNodePtr top, char *str, PkgNodePtr *tp);
662169240Sjfv
663169240Sjfv/* install.c */
664169240Sjfvextern Boolean	checkLabels(Boolean whinge);
665169240Sjfvextern int	installCommit(dialogMenuItem *self);
666169240Sjfvextern int	installCustomCommit(dialogMenuItem *self);
667169240Sjfvextern int	installExpress(dialogMenuItem *self);
668169240Sjfvextern int	installStandard(dialogMenuItem *self);
669169240Sjfvextern int	installFixitHoloShell(dialogMenuItem *self);
670169240Sjfvextern int	installFixitCDROM(dialogMenuItem *self);
671169240Sjfvextern int	installFixitFloppy(dialogMenuItem *self);
672169240Sjfvextern int	installFixupBase(dialogMenuItem *self);
673169240Sjfvextern int	installUpgrade(dialogMenuItem *self);
674169240Sjfvextern int	installFilesystems(dialogMenuItem *self);
675169240Sjfvextern int	installVarDefaults(dialogMenuItem *self);
676169240Sjfvextern void	installEnvironment(void);
677169240Sjfvextern Boolean	copySelf(void);
678169240Sjfv
679169240Sjfv/* kget.c */
680169240Sjfvextern int	kget(char *out);
681169240Sjfv
682169240Sjfv/* keymap.c */
683169240Sjfvextern int	loadKeymap(const char *lang);
684169240Sjfv
685169240Sjfv/* label.c */
686169240Sjfvextern int	diskLabelEditor(dialogMenuItem *self);
687169240Sjfvextern int	diskLabelCommit(dialogMenuItem *self);
688169240Sjfv
689169240Sjfv/* makedevs.c (auto-generated) */
690169240Sjfvextern const char	termcap_ansi[];
691169240Sjfvextern const char	termcap_vt100[];
692169240Sjfvextern const char	termcap_cons25w[];
693169240Sjfvextern const char	termcap_cons25[];
694169240Sjfvextern const char	termcap_cons25_m[];
695169240Sjfvextern const char	termcap_cons25r[];
696169240Sjfvextern const char	termcap_cons25r_m[];
697169240Sjfvextern const char	termcap_cons25l1[];
698169240Sjfvextern const char	termcap_cons25l1_m[];
699169240Sjfvextern const char	termcap_xterm[];
700169240Sjfvextern const u_char	font_iso_8x16[];
701169240Sjfvextern const u_char	font_cp850_8x16[];
702169240Sjfvextern const u_char	font_cp866_8x16[];
703169240Sjfvextern const u_char	koi8_r2cp866[];
704169240Sjfvextern u_char		default_scrnmap[];
705169240Sjfv
706169240Sjfv/* media.c */
707169240Sjfvextern char	*cpioVerbosity(void);
708169240Sjfvextern void	mediaClose(void);
709169240Sjfvextern int	mediaTimeout(void);
710169240Sjfvextern int	mediaSetCDROM(dialogMenuItem *self);
711169240Sjfvextern int	mediaSetFloppy(dialogMenuItem *self);
712169240Sjfvextern int	mediaSetDOS(dialogMenuItem *self);
713169240Sjfvextern int	mediaSetTape(dialogMenuItem *self);
714169240Sjfvextern int	mediaSetFTP(dialogMenuItem *self);
715169240Sjfvextern int	mediaSetFTPActive(dialogMenuItem *self);
716169240Sjfvextern int	mediaSetFTPPassive(dialogMenuItem *self);
717169240Sjfvextern int	mediaSetHTTP(dialogMenuItem *self);
718169240Sjfvextern int	mediaSetUFS(dialogMenuItem *self);
719169240Sjfvextern int	mediaSetNFS(dialogMenuItem *self);
720169240Sjfvextern int	mediaSetFTPUserPass(dialogMenuItem *self);
721169240Sjfvextern int	mediaSetCPIOVerbosity(dialogMenuItem *self);
722169240Sjfvextern int	mediaGetType(dialogMenuItem *self);
723169240Sjfvextern Boolean	mediaExtractDist(char *dir, char *dist, FILE *fp);
724169240Sjfvextern Boolean	mediaExtractDistBegin(char *dir, int *fd, int *zpid, int *cpic);
725169240Sjfvextern Boolean	mediaExtractDistEnd(int zpid, int cpid);
726169240Sjfvextern Boolean	mediaVerify(void);
727169240Sjfvextern FILE	*mediaGenericGet(char *base, const char *file);
728169240Sjfv
729169240Sjfv/* misc.c */
730169240Sjfvextern Boolean	file_readable(char *fname);
731169240Sjfvextern Boolean	file_executable(char *fname);
732169240Sjfvextern Boolean	directory_exists(const char *dirname);
733169240Sjfvextern char	*root_bias(char *path);
734169240Sjfvextern char	*itoa(int value);
735169240Sjfvextern char	*string_concat(char *p1, char *p2);
736169240Sjfvextern char	*string_concat3(char *p1, char *p2, char *p3);
737169240Sjfvextern char	*string_prune(char *str);
738169240Sjfvextern char	*string_skipwhite(char *str);
739169240Sjfvextern char	*string_copy(char *s1, char *s2);
740169240Sjfvextern char	*pathBaseName(const char *path);
741169240Sjfvextern void	safe_free(void *ptr);
742169240Sjfvextern void	*safe_malloc(size_t size);
743169240Sjfvextern void	*safe_realloc(void *orig, size_t size);
744169240Sjfvextern dialogMenuItem *item_add(dialogMenuItem *list, char *prompt, char *title,
745169240Sjfv				int (*checked)(dialogMenuItem *self),
746169240Sjfv				int (*fire)(dialogMenuItem *self),
747169240Sjfv				void (*selected)(dialogMenuItem *self, int is_selected),
748169240Sjfv				void *data, int *aux, int *curr, int *max);
749169240Sjfvextern void	items_free(dialogMenuItem *list, int *curr, int *max);
750169240Sjfvextern int	Mkdir(char *);
751169240Sjfvextern int	Mkdir_command(char *key, void *data);
752169240Sjfvextern int	Mount(char *, void *data);
753169240Sjfvextern int	Mount_msdosfs(char *mountp, void *devname);
754169240Sjfvextern WINDOW	*openLayoutDialog(char *helpfile, char *title, int x, int y, int width, int height);
755169240Sjfvextern ComposeObj *initLayoutDialog(WINDOW *win, Layout *layout, int x, int y, int *max);
756169240Sjfvextern int	layoutDialogLoop(WINDOW *win, Layout *layout, ComposeObj **obj,
757169240Sjfv				 int *n, int max, int *cbutton, int *cancel);
758169240Sjfv
759169240Sjfvextern WINDOW	*savescr(void);
760169240Sjfvextern void	restorescr(WINDOW *w);
761169240Sjfvextern char	*sstrncpy(char *dst, const char *src, int size);
762169240Sjfv
763169240Sjfv/* modules.c */
764169240Sjfvextern void	driverFloppyCheck(void);
765169240Sjfvextern void	moduleInitialize(void);
766169240Sjfvextern int	kldBrowser(dialogMenuItem *self);
767169240Sjfv
768169240Sjfv/* mouse.c */
769169240Sjfvextern int	mousedTest(dialogMenuItem *self);
770169240Sjfvextern int	mousedDisable(dialogMenuItem *self);
771169240Sjfvextern int      setMouseFlags(dialogMenuItem *self);
772169240Sjfv
773169240Sjfv/* msg.c */
774169240Sjfvextern Boolean	isDebug(void);
775169240Sjfvextern void	msgInfo(char *fmt, ...) __printf0like(1, 2);
776169240Sjfvextern void	msgYap(char *fmt, ...) __printflike(1, 2);
777169240Sjfvextern void	msgWarn(char *fmt, ...) __printflike(1, 2);
778169240Sjfvextern void	msgDebug(char *fmt, ...) __printflike(1, 2);
779169240Sjfvextern void	msgError(char *fmt, ...) __printflike(1, 2);
780169240Sjfvextern void	msgFatal(char *fmt, ...) __printflike(1, 2);
781169240Sjfvextern void	msgConfirm(char *fmt, ...) __printflike(1, 2);
782169240Sjfvextern void	msgNotify(char *fmt, ...) __printflike(1, 2);
783169240Sjfvextern void	msgWeHaveOutput(char *fmt, ...) __printflike(1, 2);
784169240Sjfvextern int	msgYesNo(char *fmt, ...) __printflike(1, 2);
785169240Sjfvextern int	msgNoYes(char *fmt, ...) __printflike(1, 2);
786169240Sjfvextern char	*msgGetInput(char *buf, char *fmt, ...) __printflike(2, 3);
787169240Sjfvextern int	msgSimpleConfirm(char *);
788169240Sjfvextern int	msgSimpleNotify(char *);
789169240Sjfv
790169240Sjfv/* network.c */
791169240Sjfvextern Boolean	mediaInitNetwork(Device *dev);
792169240Sjfvextern void	mediaShutdownNetwork(Device *dev);
793169240Sjfv
794169240Sjfv/* nfs.c */
795169240Sjfvextern Boolean	mediaInitNFS(Device *dev);
796169240Sjfvextern FILE	*mediaGetNFS(Device *dev, char *file, Boolean probe);
797169240Sjfvextern void	mediaShutdownNFS(Device *dev);
798169240Sjfv
799169240Sjfv/* options.c */
800169240Sjfvextern int	optionsEditor(dialogMenuItem *self);
801169240Sjfv
802169240Sjfv/* package.c */
803169240Sjfvextern int	packageAdd(dialogMenuItem *self);
804169240Sjfvextern int	package_add(char *name);
805169240Sjfvextern int	package_extract(Device *dev, char *name, Boolean depended);
806169240Sjfvextern Boolean	package_installed(char *name);
807169240Sjfv
808169240Sjfv/* pccard.c */
809169240Sjfvextern void	pccardInitialize(void);
810169240Sjfv
811169240Sjfv/* system.c */
812169240Sjfvextern void	systemInitialize(int argc, char **argv);
813169240Sjfvextern void	systemShutdown(int status);
814169240Sjfvextern int	execExecute(char *cmd, char *name);
815169240Sjfvextern int	systemExecute(char *cmd);
816169240Sjfvextern void	systemSuspendDialog(void);
817169240Sjfvextern void	systemResumeDialog(void);
818169240Sjfvextern int	systemDisplayHelp(char *file);
819169240Sjfvextern char	*systemHelpFile(char *file, char *buf);
820169240Sjfvextern void	systemChangeFont(const u_char font[]);
821169240Sjfvextern void	systemChangeLang(char *lang);
822169240Sjfvextern void	systemChangeTerminal(char *color, const u_char c_termcap[], char *mono, const u_char m_termcap[]);
823169240Sjfvextern void	systemChangeScreenmap(const u_char newmap[]);
824169240Sjfvextern void	systemCreateHoloshell(void);
825169240Sjfvextern int	vsystem(char *fmt, ...) __printflike(1, 2);
826169240Sjfv
827169240Sjfv/* tape.c */
828169240Sjfvextern char	*mediaTapeBlocksize(void);
829169240Sjfvextern Boolean	mediaInitTape(Device *dev);
830169240Sjfvextern FILE	*mediaGetTape(Device *dev, char *file, Boolean probe);
831169240Sjfvextern void	mediaShutdownTape(Device *dev);
832169240Sjfv
833169240Sjfv/* tcpip.c */
834169240Sjfvextern int	tcpOpenDialog(Device *dev);
835169240Sjfvextern int	tcpMenuSelect(dialogMenuItem *self);
836169240Sjfvextern Device	*tcpDeviceSelect(void);
837169240Sjfv
838169240Sjfv/* termcap.c */
839169240Sjfvextern int	set_termcap(void);
840169240Sjfv
841169240Sjfv/* ttys.c */
842169240Sjfvextern void     configTtys(void);
843169240Sjfv
844169240Sjfv/* ufs.c */
845169240Sjfvextern void	mediaShutdownUFS(Device *dev);
846169240Sjfvextern Boolean	mediaInitUFS(Device *dev);
847169240Sjfvextern FILE	*mediaGetUFS(Device *dev, char *file, Boolean probe);
848169240Sjfv
849169240Sjfv/* usb.c */
850169240Sjfvextern void	usbInitialize(void);
851169240Sjfv
852169240Sjfv/* user.c */
853169240Sjfvextern int	userAddGroup(dialogMenuItem *self);
854169240Sjfvextern int	userAddUser(dialogMenuItem *self);
855169240Sjfv
856169240Sjfv/* variable.c */
857169240Sjfvextern void	variable_set(char *var, int dirty);
858169240Sjfvextern void	variable_set2(char *name, char *value, int dirty);
859169240Sjfvextern char 	*variable_get(char *var);
860169240Sjfvextern int 	variable_cmp(char *var, char *value);
861169240Sjfvextern void	variable_unset(char *var);
862169240Sjfvextern char	*variable_get_value(char *var, char *prompt, int dirty);
863169240Sjfvextern int 	variable_check(char *data);
864169240Sjfvextern int 	variable_check2(char *data);
865169240Sjfvextern int	dump_variables(dialogMenuItem *self);
866169240Sjfvextern void	free_variables(void);
867169240Sjfvextern void     pvariable_set(char *var);
868169240Sjfvextern char     *pvariable_get(char *var);
869169240Sjfv
870169240Sjfv/* wizard.c */
871169240Sjfvextern void	slice_wizard(Disk *d);
872169240Sjfv
873169240Sjfv/*
874169240Sjfv * Macros.  Please find a better place for us!
875169240Sjfv */
876169240Sjfv#define DEVICE_INIT(d)		((d) != NULL ? (d)->init((d)) : (Boolean)0)
877169240Sjfv#define DEVICE_GET(d, b, f)	((d) != NULL ? (d)->get((d), (b), (f)) : NULL)
878169240Sjfv#define DEVICE_SHUTDOWN(d)	((d) != NULL ? (d)->shutdown((d)) : (void)0)
879169240Sjfv
880169240Sjfv#ifdef USE_GZIP
881169240Sjfv#define UNZIPPER "gunzip"
882169240Sjfv#else
883169240Sjfv#define UNZIPPER "bunzip2"
884169240Sjfv#endif
885169240Sjfv
886169240Sjfv#endif
887169240Sjfv/* _SYSINSTALL_H_INCLUDE */
888169240Sjfv