sade.h revision 79304
1189251Ssam/*
2189251Ssam * The new sysinstall program.
3252726Srpaulo *
4189251Ssam * This is probably the last attempt in the `sysinstall' line, the next
5252726Srpaulo * generation being slated to essentially a complete rewrite.
6252726Srpaulo *
7189251Ssam * $FreeBSD: head/usr.sbin/sade/sade.h 79304 2001-07-05 09:51:09Z kris $
8189251Ssam *
9189251Ssam * Copyright (c) 1995
10189251Ssam *	Jordan Hubbard.  All rights reserved.
11189251Ssam *
12214734Srpaulo * Redistribution and use in source and binary forms, with or without
13214734Srpaulo * modification, are permitted provided that the following conditions
14252726Srpaulo * are met:
15214734Srpaulo * 1. Redistributions of source code must retain the above copyright
16189251Ssam *    notice, this list of conditions and the following disclaimer,
17189251Ssam *    verbatim and that no modifications are made prior to this
18189251Ssam *    point in the file.
19189251Ssam * 2. Redistributions in binary form must reproduce the above copyright
20189251Ssam *    notice, this list of conditions and the following disclaimer in the
21189251Ssam *    documentation and/or other materials provided with the distribution.
22189251Ssam *
23189251Ssam * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND
24189251Ssam * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25189251Ssam * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26189251Ssam * ARE DISCLAIMED.  IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE
27189251Ssam * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28189251Ssam * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29189251Ssam * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION)
30189251Ssam * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31189251Ssam * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32189251Ssam * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33189251Ssam * SUCH DAMAGE.
34189251Ssam *
35189251Ssam */
36189251Ssam
37189251Ssam#ifndef _SYSINSTALL_H_INCLUDE
38209158Srpaulo#define _SYSINSTALL_H_INCLUDE
39189251Ssam
40189251Ssam#include <sys/types.h>
41189251Ssam#include <sys/wait.h>
42189251Ssam#include <errno.h>
43189251Ssam#include <setjmp.h>
44189251Ssam#include <stdio.h>
45189251Ssam#include <stdlib.h>
46189251Ssam#include <string.h>
47189251Ssam#include <unistd.h>
48189251Ssam#include <dialog.h>
49189251Ssam#include "ui_objects.h"
50189251Ssam#include "dir.h"
51189251Ssam#include "colors.h"
52189251Ssam#include "libdisk.h"
53189251Ssam#include "dist.h"
54189251Ssam
55189251Ssam/*** Defines ***/
56189251Ssam
57189251Ssam/* device limits */
58189251Ssam#define DEV_NAME_MAX		64	/* The maximum length of a device name	*/
59189251Ssam#define DEV_MAX			100	/* The maximum number of devices we'll deal with */
60189251Ssam#define INTERFACE_MAX		50	/* Maximum number of network interfaces we'll deal with */
61189251Ssam#define IO_ERROR		-2	/* Status code for I/O error rather than normal EOF */
62189251Ssam
63189251Ssam/* Number of seconds to wait for data to come off even the slowest media */
64189251Ssam#define MEDIA_TIMEOUT		300
65189251Ssam
66189251Ssam/*
67189251Ssam * I make some pretty gross assumptions about having a max of 50 chunks
68189251Ssam * total - 8 slices and 42 partitions.  I can't easily display many more
69189251Ssam * than that on the screen at once!
70189251Ssam *
71189251Ssam * For 2.1 I'll revisit this and try to make it more dynamic, but since
72189251Ssam * this will catch 99.99% of all possible cases, I'm not too worried.
73189251Ssam */
74189251Ssam#define MAX_CHUNKS	40
75189251Ssam
76189251Ssam/* Internal environment variable names */
77189251Ssam#define DISK_PARTITIONED		"_diskPartitioned"
78189251Ssam#define DISK_LABELLED			"_diskLabelled"
79189251Ssam#define DISK_SELECTED			"_diskSelected"
80189251Ssam#define SYSTEM_STATE			"_systemState"
81189251Ssam#define RUNNING_ON_ROOT			"_runningOnRoot"
82189251Ssam#define TCP_CONFIGURED			"_tcpConfigured"
83252726Srpaulo
84189251Ssam/* Ones that can be tweaked from config files */
85252726Srpaulo#define VAR_BLANKTIME			"blanktime"
86252726Srpaulo#define VAR_BOOTMGR			"bootManager"
87252726Srpaulo#define VAR_BROWSER_BINARY		"browserBinary"
88189251Ssam#define VAR_BROWSER_PACKAGE		"browserPackage"
89189251Ssam#define VAR_CPIO_VERBOSITY		"cpioVerbose"
90189251Ssam#define VAR_DEBUG			"debug"
91189251Ssam#define VAR_DESKSTYLE			"_deskStyle"
92189251Ssam#define VAR_DISK			"disk"
93189251Ssam#define VAR_DISTS			"dists"
94252726Srpaulo#define VAR_DIST_MAIN			"distMain"
95252726Srpaulo#define VAR_DIST_CRYPTO			"distCRYPTO"
96252726Srpaulo#define VAR_DIST_SRC			"distSRC"
97252726Srpaulo#define VAR_DIST_X11			"distX11"
98252726Srpaulo#define VAR_DIST_XSERVER		"distXserver"
99252726Srpaulo#define VAR_DIST_XFONTS			"distXfonts"
100252726Srpaulo#define VAR_DEDICATE_DISK		"dedicateDisk"
101252726Srpaulo#define VAR_DOMAINNAME			"domainname"
102252726Srpaulo#define VAR_EDITOR			"editor"
103252726Srpaulo#define VAR_EXTRAS			"ifconfig_"
104252726Srpaulo#define VAR_COMMAND			"command"
105252726Srpaulo#define VAR_CONFIG_FILE			"configFile"
106252726Srpaulo#define VAR_FIXIT_TTY			"fixitTty"
107189251Ssam#define VAR_FTP_DIR			"ftpDirectory"
108189251Ssam#define VAR_FTP_PASS			"ftpPass"
109189251Ssam#define VAR_FTP_PATH			"_ftpPath"
110189251Ssam#define VAR_FTP_PORT			"ftpPort"
111189251Ssam#define VAR_FTP_STATE			"ftpState"
112189251Ssam#define VAR_FTP_USER			"ftpUser"
113189251Ssam#define VAR_FTP_HOST			"ftpHost"
114189251Ssam#define VAR_HTTP_PATH			"_httpPath"
115189251Ssam#define VAR_HTTP_PROXY			"httpProxy"
116189251Ssam#define VAR_HTTP_PORT			"httpPort"
117189251Ssam#define VAR_HTTP_HOST			"httpHost"
118189251Ssam#define VAR_HTTP_FTP_MODE		"httpFtpMode"
119189251Ssam#define VAR_GATEWAY			"defaultrouter"
120189251Ssam#define VAR_GEOMETRY			"geometry"
121189251Ssam#define VAR_HOSTNAME			"hostname"
122189251Ssam#define VAR_IFCONFIG			"ifconfig_"
123189251Ssam#define VAR_INSTALL_CFG			"installConfig"
124189251Ssam#define VAR_INSTALL_ROOT		"installRoot"
125189251Ssam#define VAR_IPADDR			"ipaddr"
126189251Ssam#define VAR_IPV6_ENABLE			"ipv6_enable"
127189251Ssam#define VAR_IPV6ADDR			"ipv6addr"
128189251Ssam#define VAR_KEYMAP			"keymap"
129189251Ssam#define VAR_KGET			"kget"
130189251Ssam#define VAR_LABEL			"label"
131189251Ssam#define VAR_LABEL_COUNT			"labelCount"
132189251Ssam#define VAR_LINUX_ENABLE		"linux_enable"
133189251Ssam#define VAR_MEDIA_TYPE			"mediaType"
134189251Ssam#define VAR_MEDIA_TIMEOUT		"MEDIA_TIMEOUT"
135189251Ssam#define VAR_MOUSED			"moused_enable"
136189251Ssam#define VAR_MOUSED_FLAGS                "moused_flags"
137189251Ssam#define VAR_MOUSED_PORT			"moused_port"
138189251Ssam#define VAR_MOUSED_TYPE			"moused_type"
139189251Ssam#define VAR_NAMESERVER			"nameserver"
140189251Ssam#define VAR_NETINTERACTIVE		"netInteractive"
141189251Ssam#define VAR_NETMASK			"netmask"
142189251Ssam#define VAR_NETWORK_DEVICE		"netDev"
143189251Ssam#define VAR_NEWFS_ARGS			"newfsArgs"
144189251Ssam#define VAR_NFS_PATH			"nfs"
145189251Ssam#define VAR_NFS_HOST			"nfsHost"
146189251Ssam#define VAR_NFS_SECURE			"nfs_reserved_port_only"
147189251Ssam#define VAR_NFS_SERVER			"nfs_server_enable"
148189251Ssam#define VAR_NO_CONFIRM			"noConfirm"
149189251Ssam#define VAR_NO_ERROR			"noError"
150189251Ssam#define VAR_NO_HOLOSHELL		"noHoloShell"
151189251Ssam#define VAR_NO_WARN			"noWarn"
152189251Ssam#define VAR_NO_USR			"noUsr"
153189251Ssam#define VAR_NONINTERACTIVE		"nonInteractive"
154189251Ssam#define VAR_NOVELL			"novell"
155189251Ssam#define VAR_NTPDATE_FLAGS		"ntpdate_flags"
156189251Ssam#define VAR_PACKAGE			"package"
157189251Ssam#define VAR_PARTITION			"partition"
158189251Ssam#define VAR_PCNFSD			"pcnfsd"
159189251Ssam#define VAR_PKG_TMPDIR			"PKG_TMPDIR"
160189251Ssam#define VAR_PORTS_PATH			"ports"
161189251Ssam#define VAR_PPP_ENABLE			"ppp_enable"
162189251Ssam#define VAR_PPP_PROFILE			"ppp_profile"
163189251Ssam#define VAR_RELNAME			"releaseName"
164189251Ssam#define VAR_ROOT_SIZE			"rootSize"
165189251Ssam#define VAR_ROUTER			"router"
166189251Ssam#define VAR_ROUTER_ENABLE		"router_enable"
167189251Ssam#define VAR_ROUTERFLAGS			"router_flags"
168189251Ssam#define VAR_SERIAL_SPEED		"serialSpeed"
169189251Ssam#define VAR_SLOW_ETHER			"slowEthernetCard"
170189251Ssam#define VAR_SWAP_SIZE			"swapSize"
171189251Ssam#define VAR_TAPE_BLOCKSIZE		"tapeBlocksize"
172189251Ssam#define VAR_TRY_DHCP			"tryDHCP"
173189251Ssam#define VAR_TRY_RTSOL			"tryRTSOL"
174189251Ssam#define VAR_UFS_PATH			"ufs"
175189251Ssam#define VAR_USR_SIZE			"usrSize"
176189251Ssam#define VAR_VAR_SIZE			"varSize"
177189251Ssam#define VAR_XF86_CONFIG			"_xf86config"
178189251Ssam#define VAR_TERM			"TERM"
179189251Ssam
180189251Ssam#define DEFAULT_TAPE_BLOCKSIZE	"20"
181189251Ssam
182189251Ssam/* One MB worth of blocks */
183189251Ssam#define ONE_MEG				2048
184189251Ssam#define ONE_GIG				(ONE_MEG * 1024)
185189251Ssam
186189251Ssam/* Which selection attributes to use */
187189251Ssam#define ATTR_SELECTED			(ColorDisplay ? item_selected_attr : item_attr)
188189251Ssam#define ATTR_TITLE	button_active_attr
189189251Ssam
190189251Ssam/* Handy strncpy() macro */
191189251Ssam#define SAFE_STRCPY(to, from)	sstrncpy((to), (from), sizeof (to) - 1)
192189251Ssam
193189251Ssam/*** Types ***/
194189251Ssamtypedef int Boolean;
195189251Ssamtypedef struct disk Disk;
196189251Ssamtypedef struct chunk Chunk;
197189251Ssam
198189251Ssam/* Bitfields for menu options */
199189251Ssam#define DMENU_NORMAL_TYPE	0x1     /* Normal dialog menu           */
200189251Ssam#define DMENU_RADIO_TYPE	0x2     /* Radio dialog menu            */
201189251Ssam#define DMENU_CHECKLIST_TYPE	0x4     /* Multiple choice menu         */
202189251Ssam#define DMENU_SELECTION_RETURNS 0x8     /* Immediate return on item selection */
203189251Ssam
204189251Ssamtypedef struct _dmenu {
205189251Ssam    int type;				/* What sort of menu we are	*/
206209158Srpaulo    char *title;			/* Our title			*/
207189251Ssam    char *prompt;			/* Our prompt			*/
208189251Ssam    char *helpline;			/* Line of help at bottom	*/
209189251Ssam    char *helpfile;			/* Help file for "F1"		*/
210189251Ssam    dialogMenuItem items[0];		/* Array of menu items		*/
211189251Ssam} DMenu;
212189251Ssam
213189251Ssam/* An rc.conf variable */
214189251Ssamtypedef struct _variable {
215189251Ssam    struct _variable *next;
216189251Ssam    char *name;
217189251Ssam    char *value;
218189251Ssam    int dirty;
219189251Ssam} Variable;
220189251Ssam
221189251Ssam#define NO_ECHO_OBJ(type)	((type) | (DITEM_NO_ECHO << 16))
222189251Ssam#define TYPE_OF_OBJ(type)	((type) & 0xff)
223189251Ssam#define ATTR_OF_OBJ(type)	((type) >> 16)
224189251Ssam
225189251Ssam/* A screen layout structure */
226189251Ssamtypedef struct _layout {
227189251Ssam    int         y;              /* x & Y co-ordinates */
228189251Ssam    int         x;
229189251Ssam    int         len;            /* The size of the dialog on the screen */
230189251Ssam    int         maxlen;         /* How much the user can type in ... */
231189251Ssam    char        *prompt;        /* The string for the prompt */
232189251Ssam    char        *help;          /* The display for the help line */
233189251Ssam    void        *var;           /* The var to set when this changes */
234189251Ssam    int         type;           /* The type of the dialog to create */
235189251Ssam    void        *obj;           /* The obj pointer returned by libdialog */
236189251Ssam} Layout;
237189251Ssam
238189251Ssamtypedef enum {
239189251Ssam    DEVICE_TYPE_NONE,
240189251Ssam    DEVICE_TYPE_DISK,
241189251Ssam    DEVICE_TYPE_FLOPPY,
242189251Ssam    DEVICE_TYPE_FTP,
243189251Ssam    DEVICE_TYPE_NETWORK,
244189251Ssam    DEVICE_TYPE_CDROM,
245189251Ssam    DEVICE_TYPE_TAPE,
246189251Ssam    DEVICE_TYPE_DOS,
247189251Ssam    DEVICE_TYPE_UFS,
248189251Ssam    DEVICE_TYPE_NFS,
249189251Ssam    DEVICE_TYPE_ANY,
250189251Ssam    DEVICE_TYPE_HTTP,
251189251Ssam} DeviceType;
252189251Ssam
253189251Ssam/* CDROM mount codes */
254189251Ssam#define CD_UNMOUNTED		0
255189251Ssam#define CD_ALREADY_MOUNTED	1
256189251Ssam#define CD_WE_MOUNTED_IT	2
257189251Ssam
258189251Ssam/* A "device" from sysinstall's point of view */
259189251Ssamtypedef struct _device {
260189251Ssam    char name[DEV_NAME_MAX];
261189251Ssam    char *description;
262189251Ssam    char *devname;
263189251Ssam    DeviceType type;
264189251Ssam    Boolean enabled;
265189251Ssam    Boolean (*init)(struct _device *dev);
266189251Ssam    FILE * (*get)(struct _device *dev, char *file, Boolean probe);
267189251Ssam    void (*shutdown)(struct _device *dev);
268189251Ssam    void *private;
269189251Ssam    unsigned int flags;
270189251Ssam} Device;
271189251Ssam
272189251Ssam/* Some internal representations of partitions */
273189251Ssamtypedef enum {
274189251Ssam    PART_NONE,
275189251Ssam    PART_SLICE,
276189251Ssam    PART_SWAP,
277189251Ssam    PART_FILESYSTEM,
278189251Ssam    PART_FAT,
279189251Ssam} PartType;
280189251Ssam
281189251Ssam/* The longest newfs command we'll hand to system() */
282189251Ssam#define NEWFS_CMD_MAX	256
283189251Ssam
284189251Ssamtypedef struct _part_info {
285189251Ssam    Boolean newfs;
286189251Ssam    char mountpoint[FILENAME_MAX];
287189251Ssam    char newfs_cmd[NEWFS_CMD_MAX];
288189251Ssam    int soft;
289189251Ssam} PartInfo;
290189251Ssam
291189251Ssam/* An option */
292189251Ssamtypedef struct _opt {
293189251Ssam    char *name;
294189251Ssam    char *desc;
295189251Ssam    enum { OPT_IS_STRING, OPT_IS_INT, OPT_IS_FUNC, OPT_IS_VAR } type;
296189251Ssam    void *data;
297189251Ssam    void *aux;
298189251Ssam    char *(*check)();
299189251Ssam} Option;
300189251Ssam
301189251Ssam/* Weird index nodey things we use for keeping track of package information */
302189251Ssamtypedef enum { PACKAGE, PLACE } node_type;	/* Types of nodes */
303189251Ssam
304189251Ssamtypedef struct _pkgnode {	/* A node in the reconstructed hierarchy */
305189251Ssam    struct _pkgnode *next;	/* My next sibling			*/
306189251Ssam    node_type type;		/* What am I?				*/
307189251Ssam    char *name;			/* My name				*/
308189251Ssam    char *desc;			/* My description (Hook)		*/
309189251Ssam    struct _pkgnode *kids;	/* My little children			*/
310189251Ssam    void *data;			/* A place to hang my data		*/
311189251Ssam} PkgNode;
312189251Ssamtypedef PkgNode *PkgNodePtr;
313189251Ssam
314189251Ssam/* A single package */
315189251Ssamtypedef struct _indexEntry {	/* A single entry in an INDEX file */
316189251Ssam    char *name;			/* name				*/
317189251Ssam    char *path;			/* full path to port		*/
318189251Ssam    char *prefix;		/* port prefix			*/
319189251Ssam    char *comment;		/* one line description		*/
320189251Ssam    char *descrfile;		/* path to description file	*/
321189251Ssam    char *deps;			/* packages this depends on	*/
322189251Ssam    int  depc;			/* how many depend on me	*/
323189251Ssam    int  installed;		/* indicates if it is installed */
324189251Ssam    char *maintainer;		/* maintainer			*/
325189251Ssam} IndexEntry;
326189251Ssamtypedef IndexEntry *IndexEntryPtr;
327189251Ssam
328189251Ssamtypedef int (*commandFunc)(char *key, void *data);
329189251Ssam
330189251Ssam#define HOSTNAME_FIELD_LEN	128
331189251Ssam#define IPADDR_FIELD_LEN	16
332189251Ssam#define EXTRAS_FIELD_LEN	128
333189251Ssam
334189251Ssam/* This is the structure that Network devices carry around in their private, erm, structures */
335189251Ssamtypedef struct _devPriv {
336189251Ssam    int use_rtsol;
337189251Ssam    int use_dhcp;
338189251Ssam    char ipaddr[IPADDR_FIELD_LEN];
339189251Ssam    char netmask[IPADDR_FIELD_LEN];
340189251Ssam    char extras[EXTRAS_FIELD_LEN];
341189251Ssam} DevInfo;
342189251Ssam
343189251Ssam
344189251Ssam/*** Externs ***/
345189251Ssamextern jmp_buf		BailOut;		/* Used to get the heck out */
346189251Ssamextern int		DebugFD;		/* Where diagnostic output goes			*/
347189251Ssamextern Boolean		Fake;			/* Don't actually modify anything - testing	*/
348189251Ssamextern Boolean		SystemWasInstalled;	/* Did we install it?				*/
349189251Ssamextern Boolean		RunningAsInit;		/* Are we running stand-alone?			*/
350189251Ssamextern Boolean		DialogActive;		/* Is the dialog() stuff up?			*/
351189251Ssamextern Boolean		ColorDisplay;		/* Are we on a color display?			*/
352189251Ssamextern Boolean		OnVTY;			/* On a syscons VTY?				*/
353189251Ssamextern Variable		*VarHead;		/* The head of the variable chain		*/
354189251Ssamextern Device		*mediaDevice;		/* Where we're getting our distribution from	*/
355189251Ssamextern unsigned int	Dists;			/* Which distributions we want			*/
356189251Ssamextern unsigned int	CRYPTODists;		/* Which naughty distributions we want		*/
357189251Ssamextern unsigned int	SrcDists;		/* Which src distributions we want		*/
358189251Ssamextern unsigned int	XF86Dists;		/* Which XFree86 dists we want			*/
359189251Ssamextern unsigned int	XF86ServerDists;	/* The XFree86 servers we want			*/
360189251Ssamextern unsigned int	XF86FontDists;		/* The XFree86 fonts we want			*/
361189251Ssamextern int		BootMgr;		/* Which boot manager to use 			*/
362189251Ssamextern int		StatusLine;		/* Where to print our status messages		*/
363189251Ssamextern DMenu		MenuInitial;		/* Initial installation menu			*/
364189251Ssamextern DMenu		MenuFixit;		/* Fixit repair menu				*/
365189251Ssamextern DMenu		MenuMBRType;		/* Type of MBR to write on the disk		*/
366189251Ssamextern DMenu		MenuConfigure;		/* Final configuration menu			*/
367189251Ssamextern DMenu		MenuDocumentation;	/* Documentation menu				*/
368189251Ssamextern DMenu		MenuFTPOptions;		/* FTP Installation options			*/
369189251Ssamextern DMenu		MenuIndex;		/* Index menu					*/
370189251Ssamextern DMenu		MenuOptions;		/* Installation options				*/
371189251Ssamextern DMenu		MenuOptionsLanguage;	/* Language options menu			*/
372189251Ssamextern DMenu		MenuMedia;		/* Media type menu				*/
373189251Ssamextern DMenu		MenuMouse;		/* Mouse type menu				*/
374189251Ssamextern DMenu		MenuMediaCDROM;		/* CDROM media menu				*/
375189251Ssamextern DMenu		MenuMediaDOS;		/* DOS media menu				*/
376189251Ssamextern DMenu		MenuMediaFloppy;	/* Floppy media menu				*/
377189251Ssamextern DMenu		MenuMediaFTP;		/* FTP media menu				*/
378189251Ssamextern DMenu		MenuMediaTape;		/* Tape media menu				*/
379189251Ssamextern DMenu		MenuNetworkDevice;	/* Network device menu				*/
380189251Ssamextern DMenu		MenuNTP;		/* NTP time server menu				*/
381189251Ssamextern DMenu		MenuSecurityProfile;	/* Security profile menu			*/
382189251Ssamextern DMenu		MenuStartup;		/* Startup services menu			*/
383189251Ssamextern DMenu		MenuSyscons;		/* System console configuration menu		*/
384189251Ssamextern DMenu		MenuSysconsFont;	/* System console font configuration menu	*/
385189251Ssamextern DMenu		MenuSysconsKeymap;	/* System console keymap configuration menu	*/
386189251Ssamextern DMenu		MenuSysconsKeyrate;	/* System console keyrate configuration menu	*/
387189251Ssamextern DMenu		MenuSysconsSaver;	/* System console saver configuration menu	*/
388189251Ssamextern DMenu		MenuSysconsScrnmap;	/* System console screenmap configuration menu	*/
389189251Ssamextern DMenu		MenuNetworking;		/* Network configuration menu			*/
390189251Ssamextern DMenu		MenuInstallCustom;	/* Custom Installation menu			*/
391189251Ssamextern DMenu		MenuDistributions;	/* Distribution menu				*/
392189251Ssamextern DMenu		MenuDiskDevices;	/* Disk type devices				*/
393189251Ssamextern DMenu		MenuSubDistributions;	/* Custom distribution menu			*/
394189251Ssamextern DMenu		MenuSrcDistributions;	/* Source distribution menu			*/
395189251Ssamextern DMenu		MenuXF86;		/* XFree86 main menu				*/
396189251Ssamextern DMenu		MenuXF86Select;		/* XFree86 distribution selection menu		*/
397189251Ssamextern DMenu		MenuXF86SelectCore;	/* XFree86 core distribution menu		*/
398189251Ssamextern DMenu		MenuXF86SelectServer;	/* XFree86 server distribution menu		*/
399189251Ssamextern DMenu		MenuXF86SelectPC98Server; /* XFree86 server distribution menu		*/
400189251Ssamextern DMenu		MenuXF86SelectFonts;	/* XFree86 font selection menu			*/
401189251Ssamextern DMenu		MenuXF86SelectFonts;	/* XFree86 font selection menu			*/
402189251Ssamextern DMenu		MenuXDesktops;		/* Disk devices menu				*/
403189251Ssamextern DMenu		MenuHTMLDoc;		/* HTML Documentation menu			*/
404189251Ssamextern DMenu		MenuUsermgmt;		/* User management menu				*/
405189251Ssamextern DMenu		MenuFixit;		/* Fixit floppy/CDROM/shell menu		*/
406189251Ssamextern DMenu		MenuXF86Config;		/* Select XFree86 configuration type		*/
407189251Ssamextern int              FixItMode;              /* FixItMode starts shell onc urrent device (ie Serial port) */
408189251Ssamextern const char *	StartName;		/* Which name we were started as */
409189251Ssam
410189251Ssam/* Stuff from libdialog which isn't properly declared outside */
411189251Ssamextern void display_helpfile(void);
412189251Ssamextern void display_helpline(WINDOW *w, int y, int width);
413189251Ssam
414189251Ssam/*** Prototypes ***/
415189251Ssam
416189251Ssam/* anonFTP.c */
417189251Ssamextern int	configAnonFTP(dialogMenuItem *self);
418189251Ssam
419189251Ssam/* cdrom.c */
420189251Ssamextern Boolean	mediaInitCDROM(Device *dev);
421189251Ssamextern FILE	*mediaGetCDROM(Device *dev, char *file, Boolean probe);
422189251Ssamextern void	mediaShutdownCDROM(Device *dev);
423189251Ssam
424189251Ssam/* command.c */
425189251Ssamextern void	command_clear(void);
426189251Ssamextern void	command_sort(void);
427189251Ssamextern void	command_execute(void);
428189251Ssamextern void	command_shell_add(char *key, char *fmt, ...) __printflike(2, 3);
429189251Ssamextern void	command_func_add(char *key, commandFunc func, void *data);
430189251Ssam
431189251Ssam/* config.c */
432189251Ssamextern void	configEnvironmentRC_conf(void);
433189251Ssamextern void	configEnvironmentResolv(char *config);
434189251Ssamextern void	configRC_conf(void);
435189251Ssamextern int	configFstab(dialogMenuItem *self);
436189251Ssamextern int	configRC(dialogMenuItem *self);
437252726Srpauloextern int	configResolv(dialogMenuItem *self);
438189251Ssamextern int	configPackages(dialogMenuItem *self);
439189251Ssamextern int	configSaver(dialogMenuItem *self);
440189251Ssamextern int	configSaverTimeout(dialogMenuItem *self);
441189251Ssamextern int	configLinux(dialogMenuItem *self);
442189251Ssamextern int	configNTP(dialogMenuItem *self);
443189251Ssamextern int	configUsers(dialogMenuItem *self);
444189251Ssamextern int	configXSetup(dialogMenuItem *self);
445189251Ssamextern int	configXDesktop(dialogMenuItem *self);
446189251Ssamextern int	configRouter(dialogMenuItem *self);
447189251Ssamextern int	configPCNFSD(dialogMenuItem *self);
448189251Ssamextern int	configNFSServer(dialogMenuItem *self);
449189251Ssamextern int	configWriteRC_conf(dialogMenuItem *self);
450189251Ssamextern int	configSecurityProfile(dialogMenuItem *self);
451189251Ssamextern int	configSecurityFascist(dialogMenuItem *self);
452189251Ssamextern int	configSecurityHigh(dialogMenuItem *self);
453189251Ssamextern int	configSecurityModerate(dialogMenuItem *self);
454189251Ssamextern int	configSecurityLiberal(dialogMenuItem *self);
455189251Ssam
456189251Ssam/* crc.c */
457189251Ssamextern int	crc(int, unsigned long *, unsigned long *);
458189251Ssam
459189251Ssam/* devices.c */
460189251Ssamextern DMenu	*deviceCreateMenu(DMenu *menu, DeviceType type, int (*hook)(dialogMenuItem *d),
461189251Ssam				  int (*check)(dialogMenuItem *d));
462189251Ssamextern void	deviceGetAll(void);
463189251Ssamextern void	deviceReset(void);
464189251Ssamextern void	deviceRescan(void);
465189251Ssamextern Device	**deviceFind(char *name, DeviceType type);
466189251Ssamextern Device	**deviceFindDescr(char *name, char *desc, DeviceType class);
467189251Ssamextern int	deviceCount(Device **devs);
468189251Ssamextern Device	*new_device(char *name);
469189251Ssamextern Device	*deviceRegister(char *name, char *desc, char *devname, DeviceType type, Boolean enabled,
470189251Ssam				Boolean (*init)(Device *mediadev),
471189251Ssam				FILE * (*get)(Device *dev, char *file, Boolean probe),
472189251Ssam				void (*shutDown)(Device *mediadev),
473189251Ssam				void *private);
474189251Ssamextern Boolean	dummyInit(Device *dev);
475189251Ssamextern FILE	*dummyGet(Device *dev, char *dist, Boolean probe);
476189251Ssamextern void	dummyShutdown(Device *dev);
477189251Ssam
478189251Ssam/* dhcp.c */
479189251Ssamextern int	dhcpParseLeases(char *file, char *hostname, char *domain, char *nameserver,
480189251Ssam				char *ipaddr, char *gateway, char *netmask);
481189251Ssam
482189251Ssam/* disks.c */
483189251Ssamextern int	diskPartitionEditor(dialogMenuItem *self);
484189251Ssamextern int	diskPartitionWrite(dialogMenuItem *self);
485189251Ssamextern int	diskGetSelectCount(Device ***devs);
486189251Ssamextern void	diskPartition(Device *dev);
487189251Ssam
488189251Ssam/* dispatch.c */
489189251Ssamextern int	dispatchCommand(char *command);
490189251Ssamextern int	dispatch_load_floppy(dialogMenuItem *self);
491189251Ssamextern int	dispatch_load_file_int(int);
492189251Ssamextern int	dispatch_load_file(dialogMenuItem *self);
493189251Ssam
494189251Ssam
495189251Ssam/* dist.c */
496252726Srpauloextern int	distReset(dialogMenuItem *self);
497252726Srpauloextern int	distConfig(dialogMenuItem *self);
498252726Srpauloextern int	distSetCustom(dialogMenuItem *self);
499252726Srpauloextern int	distUnsetCustom(dialogMenuItem *self);
500252726Srpauloextern int	distSetDeveloper(dialogMenuItem *self);
501252726Srpauloextern int	distSetXDeveloper(dialogMenuItem *self);
502252726Srpauloextern int	distSetKernDeveloper(dialogMenuItem *self);
503252726Srpauloextern int	distSetXKernDeveloper(dialogMenuItem *self);
504189251Ssamextern int	distSetUser(dialogMenuItem *self);
505189251Ssamextern int	distSetXUser(dialogMenuItem *self);
506189251Ssamextern int	distSetMinimum(dialogMenuItem *self);
507189251Ssamextern int	distSetEverything(dialogMenuItem *self);
508189251Ssamextern int	distSetSrc(dialogMenuItem *self);
509189251Ssamextern int	distSetXF86(dialogMenuItem *self);
510189251Ssamextern int	distExtractAll(dialogMenuItem *self);
511189251Ssam
512189251Ssam/* dmenu.c */
513189251Ssamextern int	dmenuDisplayFile(dialogMenuItem *tmp);
514189251Ssamextern int	dmenuSubmenu(dialogMenuItem *tmp);
515189251Ssamextern int	dmenuSystemCommand(dialogMenuItem *tmp);
516189251Ssamextern int	dmenuSystemCommandBox(dialogMenuItem *tmp);
517189251Ssamextern int	dmenuExit(dialogMenuItem *tmp);
518189251Ssamextern int	dmenuISetVariable(dialogMenuItem *tmp);
519189251Ssamextern int	dmenuSetVariable(dialogMenuItem *tmp);
520189251Ssamextern int	dmenuSetKmapVariable(dialogMenuItem *tmp);
521189251Ssamextern int	dmenuSetVariables(dialogMenuItem *tmp);
522189251Ssamextern int	dmenuToggleVariable(dialogMenuItem *tmp);
523189251Ssamextern int	dmenuSetFlag(dialogMenuItem *tmp);
524189251Ssamextern int	dmenuSetValue(dialogMenuItem *tmp);
525189251Ssamextern Boolean	dmenuOpen(DMenu *menu, int *choice, int *scroll, int *curr, int *max, Boolean buttons);
526189251Ssamextern Boolean	dmenuOpenSimple(DMenu *menu, Boolean buttons);
527189251Ssamextern int	dmenuVarCheck(dialogMenuItem *item);
528189251Ssamextern int	dmenuVarsCheck(dialogMenuItem *item);
529189251Ssamextern int	dmenuFlagCheck(dialogMenuItem *item);
530189251Ssamextern int	dmenuRadioCheck(dialogMenuItem *item);
531189251Ssam
532189251Ssam/* doc.c */
533252726Srpauloextern int	docBrowser(dialogMenuItem *self);
534189251Ssamextern int	docShowDocument(dialogMenuItem *self);
535189251Ssam
536252726Srpaulo/* dos.c */
537252726Srpauloextern Boolean	mediaCloseDOS(Device *dev, FILE *fp);
538189251Ssamextern Boolean	mediaInitDOS(Device *dev);
539189251Ssamextern FILE	*mediaGetDOS(Device *dev, char *file, Boolean probe);
540189251Ssamextern void	mediaShutdownDOS(Device *dev);
541252726Srpaulo
542189251Ssam/* floppy.c */
543189251Ssamextern int	getRootFloppy(void);
544189251Ssamextern Boolean	mediaInitFloppy(Device *dev);
545189251Ssamextern FILE	*mediaGetFloppy(Device *dev, char *file, Boolean probe);
546189251Ssamextern void	mediaShutdownFloppy(Device *dev);
547252726Srpaulo
548189251Ssam/* ftp_strat.c */
549189251Ssamextern Boolean	mediaCloseFTP(Device *dev, FILE *fp);
550189251Ssamextern Boolean	mediaInitFTP(Device *dev);
551189251Ssamextern FILE	*mediaGetFTP(Device *dev, char *file, Boolean probe);
552189251Ssamextern void	mediaShutdownFTP(Device *dev);
553189251Ssam
554189251Ssam/* http.c */
555189251Ssamextern Boolean	mediaInitHTTP(Device *dev);
556189251Ssamextern FILE	*mediaGetHTTP(Device *dev, char *file, Boolean probe);
557189251Ssam
558189251Ssam/* globals.c */
559189251Ssamextern void	globalsInit(void);
560189251Ssam
561189251Ssam/* index.c */
562189251Ssamint		index_read(FILE *fp, PkgNodePtr papa);
563189251Ssamint		index_menu(PkgNodePtr root, PkgNodePtr top, PkgNodePtr plist, int *pos, int *scroll);
564189251Ssamvoid		index_init(PkgNodePtr top, PkgNodePtr plist);
565189251Ssamvoid		index_node_free(PkgNodePtr top, PkgNodePtr plist);
566189251Ssamvoid		index_sort(PkgNodePtr top);
567189251Ssamvoid		index_print(PkgNodePtr top, int level);
568189251Ssamint		index_extract(Device *dev, PkgNodePtr top, PkgNodePtr who, Boolean depended);
569189251Ssamint		index_initialize(char *path);
570189251SsamPkgNodePtr	index_search(PkgNodePtr top, char *str, PkgNodePtr *tp);
571189251Ssam
572189251Ssam/* install.c */
573189251Ssamextern Boolean	checkLabels(Boolean whinge, Chunk **rdev, Chunk **sdev, Chunk **udev, Chunk **vdev);
574189251Ssamextern int	installCommit(dialogMenuItem *self);
575189251Ssamextern int	installCustomCommit(dialogMenuItem *self);
576189251Ssamextern int	installExpress(dialogMenuItem *self);
577189251Ssamextern int	installStandard(dialogMenuItem *self);
578189251Ssamextern int	installFixitHoloShell(dialogMenuItem *self);
579189251Ssamextern int	installFixitCDROM(dialogMenuItem *self);
580189251Ssamextern int	installFixitFloppy(dialogMenuItem *self);
581189251Ssamextern int	installFixupBin(dialogMenuItem *self);
582189251Ssamextern int	installFixupXFree(dialogMenuItem *self);
583189251Ssamextern int	installUpgrade(dialogMenuItem *self);
584189251Ssamextern int	installFilesystems(dialogMenuItem *self);
585189251Ssamextern int	installVarDefaults(dialogMenuItem *self);
586189251Ssamextern void	installEnvironment(void);
587189251Ssamextern int	installX11package(dialogMenuItem *self);
588189251Ssamextern Boolean	copySelf(void);
589189251Ssam
590189251Ssam/* kget.c */
591189251Ssamextern int	kget(char *out);
592189251Ssam
593189251Ssam/* keymap.c */
594189251Ssamextern int	loadKeymap(const char *lang);
595189251Ssam
596189251Ssam/* label.c */
597189251Ssamextern int	diskLabelEditor(dialogMenuItem *self);
598189251Ssamextern int	diskLabelCommit(dialogMenuItem *self);
599189251Ssam
600189251Ssam/* makedevs.c (auto-generated) */
601189251Ssamextern const char	termcap_ansi[];
602189251Ssamextern const char	termcap_vt100[];
603189251Ssamextern const char	termcap_cons25w[];
604189251Ssamextern const char	termcap_cons25[];
605189251Ssamextern const char	termcap_cons25_m[];
606189251Ssamextern const char	termcap_cons25r[];
607189251Ssamextern const char	termcap_cons25r_m[];
608189251Ssamextern const char	termcap_cons25l1[];
609189251Ssamextern const char	termcap_cons25l1_m[];
610189251Ssamextern const char	termcap_xterm[];
611189251Ssamextern const u_char	font_iso_8x16[];
612189251Ssamextern const u_char	font_cp850_8x16[];
613189251Ssamextern const u_char	font_cp866_8x16[];
614189251Ssamextern const u_char	koi8_r2cp866[];
615189251Ssamextern u_char		default_scrnmap[];
616189251Ssam
617189251Ssam/* media.c */
618189251Ssamextern char	*cpioVerbosity(void);
619189251Ssamextern void	mediaClose(void);
620189251Ssamextern int	mediaTimeout(void);
621189251Ssamextern int	mediaSetCDROM(dialogMenuItem *self);
622189251Ssamextern int	mediaSetFloppy(dialogMenuItem *self);
623189251Ssamextern int	mediaSetDOS(dialogMenuItem *self);
624189251Ssamextern int	mediaSetTape(dialogMenuItem *self);
625189251Ssamextern int	mediaSetFTP(dialogMenuItem *self);
626189251Ssamextern int	mediaSetFTPActive(dialogMenuItem *self);
627189251Ssamextern int	mediaSetFTPPassive(dialogMenuItem *self);
628189251Ssamextern int	mediaSetHTTP(dialogMenuItem *self);
629189251Ssamextern int	mediaSetUFS(dialogMenuItem *self);
630189251Ssamextern int	mediaSetNFS(dialogMenuItem *self);
631189251Ssamextern int	mediaSetFTPUserPass(dialogMenuItem *self);
632189251Ssamextern int	mediaSetCPIOVerbosity(dialogMenuItem *self);
633189251Ssamextern int	mediaGetType(dialogMenuItem *self);
634189251Ssamextern Boolean	mediaExtractDist(char *dir, char *dist, FILE *fp);
635189251Ssamextern Boolean	mediaExtractDistBegin(char *dir, int *fd, int *zpid, int *cpic);
636189251Ssamextern Boolean	mediaExtractDistEnd(int zpid, int cpid);
637189251Ssamextern Boolean	mediaVerify(void);
638189251Ssamextern FILE	*mediaGenericGet(char *base, const char *file);
639189251Ssam
640189251Ssam/* misc.c */
641189251Ssamextern Boolean	file_readable(char *fname);
642189251Ssamextern Boolean	file_executable(char *fname);
643189251Ssamextern Boolean	directory_exists(const char *dirname);
644189251Ssamextern char	*root_bias(char *path);
645189251Ssamextern char	*itoa(int value);
646189251Ssamextern char	*string_concat(char *p1, char *p2);
647189251Ssamextern char	*string_concat3(char *p1, char *p2, char *p3);
648189251Ssamextern char	*string_prune(char *str);
649189251Ssamextern char	*string_skipwhite(char *str);
650189251Ssamextern char	*string_copy(char *s1, char *s2);
651189251Ssamextern char	*pathBaseName(const char *path);
652189251Ssamextern void	safe_free(void *ptr);
653189251Ssamextern void	*safe_malloc(size_t size);
654189251Ssamextern void	*safe_realloc(void *orig, size_t size);
655189251Ssamextern dialogMenuItem *item_add(dialogMenuItem *list, char *prompt, char *title,
656189251Ssam				int (*checked)(dialogMenuItem *self),
657189251Ssam				int (*fire)(dialogMenuItem *self),
658189251Ssam				void (*selected)(dialogMenuItem *self, int is_selected),
659189251Ssam				void *data, int aux, int *curr, int *max);
660189251Ssamextern void	items_free(dialogMenuItem *list, int *curr, int *max);
661189251Ssamextern int	Mkdir(char *);
662189251Ssamextern int	Mount(char *, void *data);
663189251Ssamextern WINDOW	*openLayoutDialog(char *helpfile, char *title, int x, int y, int width, int height);
664189251Ssamextern ComposeObj *initLayoutDialog(WINDOW *win, Layout *layout, int x, int y, int *max);
665189251Ssamextern int	layoutDialogLoop(WINDOW *win, Layout *layout, ComposeObj **obj,
666189251Ssam				 int *n, int max, int *cbutton, int *cancel);
667189251Ssam
668189251Ssamextern WINDOW	*savescr(void);
669189251Ssamextern void	restorescr(WINDOW *w);
670189251Ssamextern char	*sstrncpy(char *dst, const char *src, int size);
671189251Ssam
672189251Ssam/* modules.c */
673189251Ssamextern void	moduleInitialize(void);
674189251Ssam
675189251Ssam/* mouse.c */
676189251Ssamextern int	mousedTest(dialogMenuItem *self);
677189251Ssamextern int	mousedDisable(dialogMenuItem *self);
678189251Ssamextern int      setMouseFlags(dialogMenuItem *self);
679189251Ssam
680189251Ssam/* msg.c */
681189251Ssamextern Boolean	isDebug(void);
682189251Ssamextern void	msgInfo(char *fmt, ...) __printf0like(1, 2);
683189251Ssamextern void	msgYap(char *fmt, ...) __printflike(1, 2);
684189251Ssamextern void	msgWarn(char *fmt, ...) __printflike(1, 2);
685189251Ssamextern void	msgDebug(char *fmt, ...) __printflike(1, 2);
686189251Ssamextern void	msgError(char *fmt, ...) __printflike(1, 2);
687189251Ssamextern void	msgFatal(char *fmt, ...) __printflike(1, 2);
688189251Ssamextern void	msgConfirm(char *fmt, ...) __printflike(1, 2);
689189251Ssamextern void	msgNotify(char *fmt, ...) __printflike(1, 2);
690189251Ssamextern void	msgWeHaveOutput(char *fmt, ...) __printflike(1, 2);
691189251Ssamextern int	msgYesNo(char *fmt, ...) __printflike(1, 2);
692189251Ssamextern int	msgNoYes(char *fmt, ...) __printflike(1, 2);
693189251Ssamextern char	*msgGetInput(char *buf, char *fmt, ...) __printflike(2, 3);
694189251Ssamextern int	msgSimpleConfirm(char *);
695189251Ssamextern int	msgSimpleNotify(char *);
696189251Ssam
697189251Ssam/* network.c */
698189251Ssamextern Boolean	mediaInitNetwork(Device *dev);
699189251Ssamextern void	mediaShutdownNetwork(Device *dev);
700189251Ssam
701189251Ssam/* nfs.c */
702189251Ssamextern Boolean	mediaInitNFS(Device *dev);
703189251Ssamextern FILE	*mediaGetNFS(Device *dev, char *file, Boolean probe);
704189251Ssamextern void	mediaShutdownNFS(Device *dev);
705189251Ssam
706189251Ssam/* options.c */
707189251Ssamextern int	optionsEditor(dialogMenuItem *self);
708189251Ssam
709189251Ssam/* package.c */
710189251Ssamextern int	packageAdd(dialogMenuItem *self);
711189251Ssamextern int	package_add(char *name);
712189251Ssamextern int	package_extract(Device *dev, char *name, Boolean depended);
713189251Ssamextern Boolean	package_exists(char *name);
714189251Ssam
715189251Ssam/* pccard.c */
716189251Ssamextern void	pccardInitialize(void);
717189251Ssam
718189251Ssam/* system.c */
719189251Ssamextern void	systemInitialize(int argc, char **argv);
720189251Ssamextern void	systemShutdown(int status);
721189251Ssamextern int	execExecute(char *cmd, char *name);
722189251Ssamextern int	systemExecute(char *cmd);
723189251Ssamextern void	systemSuspendDialog(void);
724189251Ssamextern void	systemResumeDialog(void);
725189251Ssamextern int	systemDisplayHelp(char *file);
726189251Ssamextern char	*systemHelpFile(char *file, char *buf);
727189251Ssamextern void	systemChangeFont(const u_char font[]);
728189251Ssamextern void	systemChangeLang(char *lang);
729189251Ssamextern void	systemChangeTerminal(char *color, const u_char c_termcap[], char *mono, const u_char m_termcap[]);
730189251Ssamextern void	systemChangeScreenmap(const u_char newmap[]);
731189251Ssamextern void	systemCreateHoloshell(void);
732189251Ssamextern int	vsystem(char *fmt, ...) __printflike(1, 2);
733189251Ssam
734189251Ssam/* tape.c */
735189251Ssamextern char	*mediaTapeBlocksize(void);
736189251Ssamextern Boolean	mediaInitTape(Device *dev);
737189251Ssamextern FILE	*mediaGetTape(Device *dev, char *file, Boolean probe);
738189251Ssamextern void	mediaShutdownTape(Device *dev);
739189251Ssam
740189251Ssam/* tcpip.c */
741189251Ssamextern int	tcpOpenDialog(Device *dev);
742189251Ssamextern int	tcpMenuSelect(dialogMenuItem *self);
743189251Ssamextern Device	*tcpDeviceSelect(void);
744189251Ssam
745189251Ssam/* termcap.c */
746189251Ssamextern int	set_termcap(void);
747189251Ssam
748189251Ssam/* ufs.c */
749189251Ssamextern void	mediaShutdownUFS(Device *dev);
750189251Ssamextern Boolean	mediaInitUFS(Device *dev);
751189251Ssamextern FILE	*mediaGetUFS(Device *dev, char *file, Boolean probe);
752189251Ssam
753189251Ssam/* usb.c */
754189251Ssamextern void	usbInitialize(void);
755189251Ssam
756189251Ssam/* user.c */
757189251Ssamextern int	userAddGroup(dialogMenuItem *self);
758189251Ssamextern int	userAddUser(dialogMenuItem *self);
759189251Ssam
760189251Ssam/* variable.c */
761189251Ssamextern void	variable_set(char *var, int dirty);
762189251Ssamextern void	variable_set2(char *name, char *value, int dirty);
763189251Ssamextern char 	*variable_get(char *var);
764189251Ssamextern int 	variable_cmp(char *var, char *value);
765189251Ssamextern void	variable_unset(char *var);
766189251Ssamextern char	*variable_get_value(char *var, char *prompt, int dirty);
767189251Ssamextern int 	variable_check(char *data);
768189251Ssamextern int	dump_variables(dialogMenuItem *self);
769189251Ssam
770189251Ssam/* wizard.c */
771189251Ssamextern void	slice_wizard(Disk *d);
772189251Ssam
773189251Ssam/*
774189251Ssam * Macros.  Please find a better place for us!
775189251Ssam */
776189251Ssam#define DEVICE_INIT(d)		((d) != NULL ? (d)->init((d)) : NULL)
777189251Ssam#define DEVICE_GET(d, b, f)	((d) != NULL ? (d)->get((d), (b), (f)) : NULL)
778189251Ssam#define DEVICE_SHUTDOWN(d)	((d) != NULL ? (d)->shutdown((d)) : (void)0)
779189251Ssam
780189251Ssam#endif
781189251Ssam/* _SYSINSTALL_H_INCLUDE */
782189251Ssam