sade.h revision 67862
1261991Sdim/*
2218885Sdim * The new sysinstall program.
3218885Sdim *
4218885Sdim * This is probably the last attempt in the `sysinstall' line, the next
5218885Sdim * generation being slated to essentially a complete rewrite.
6218885Sdim *
7218885Sdim * $FreeBSD: head/usr.sbin/sade/sade.h 67862 2000-10-29 09:57:50Z eivind $
8218885Sdim *
9218885Sdim * Copyright (c) 1995
10261991Sdim *	Jordan Hubbard.  All rights reserved.
11218885Sdim *
12218885Sdim * Redistribution and use in source and binary forms, with or without
13218885Sdim * modification, are permitted provided that the following conditions
14218885Sdim * are met:
15261991Sdim * 1. Redistributions of source code must retain the above copyright
16261991Sdim *    notice, this list of conditions and the following disclaimer,
17218885Sdim *    verbatim and that no modifications are made prior to this
18218885Sdim *    point in the file.
19261991Sdim * 2. Redistributions in binary form must reproduce the above copyright
20276479Sdim *    notice, this list of conditions and the following disclaimer in the
21261991Sdim *    documentation and/or other materials provided with the distribution.
22261991Sdim *
23261991Sdim * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND
24261991Sdim * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25218885Sdim * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26276479Sdim * ARE DISCLAIMED.  IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE
27276479Sdim * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28276479Sdim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29276479Sdim * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION)
30276479Sdim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31261991Sdim * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32218885Sdim * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33261991Sdim * SUCH DAMAGE.
34261991Sdim *
35261991Sdim */
36261991Sdim
37261991Sdim#ifndef _SYSINSTALL_H_INCLUDE
38218885Sdim#define _SYSINSTALL_H_INCLUDE
39261991Sdim
40261991Sdim#include <sys/types.h>
41296417Sdim#include <sys/wait.h>
42261991Sdim#include <errno.h>
43218885Sdim#include <setjmp.h>
44261991Sdim#include <stdio.h>
45218885Sdim#include <stdlib.h>
46261991Sdim#include <string.h>
47261991Sdim#include <unistd.h>
48280031Sdim#include <dialog.h>
49218885Sdim#include "ui_objects.h"
50276479Sdim#include "dir.h"
51276479Sdim#include "colors.h"
52276479Sdim#include "libdisk.h"
53276479Sdim#include "dist.h"
54276479Sdim
55276479Sdim/*** Defines ***/
56276479Sdim
57218885Sdim/* device limits */
58218885Sdim#define DEV_NAME_MAX		64	/* The maximum length of a device name	*/
59218885Sdim#define DEV_MAX			100	/* The maximum number of devices we'll deal with */
60261991Sdim#define INTERFACE_MAX		50	/* Maximum number of network interfaces we'll deal with */
61261991Sdim#define IO_ERROR		-2	/* Status code for I/O error rather than normal EOF */
62280031Sdim
63280031Sdim/* Number of seconds to wait for data to come off even the slowest media */
64280031Sdim#define MEDIA_TIMEOUT		300
65280031Sdim
66280031Sdim/*
67280031Sdim * I make some pretty gross assumptions about having a max of 50 chunks
68280031Sdim * total - 8 slices and 42 partitions.  I can't easily display many more
69280031Sdim * than that on the screen at once!
70280031Sdim *
71280031Sdim * For 2.1 I'll revisit this and try to make it more dynamic, but since
72280031Sdim * this will catch 99.99% of all possible cases, I'm not too worried.
73280031Sdim */
74280031Sdim#define MAX_CHUNKS	40
75280031Sdim
76280031Sdim/* Internal environment variable names */
77280031Sdim#define DISK_PARTITIONED		"_diskPartitioned"
78280031Sdim#define DISK_LABELLED			"_diskLabelled"
79280031Sdim#define DISK_SELECTED			"_diskSelected"
80280031Sdim#define SYSTEM_STATE			"_systemState"
81280031Sdim#define RUNNING_ON_ROOT			"_runningOnRoot"
82280031Sdim#define TCP_CONFIGURED			"_tcpConfigured"
83288943Sdim
84280031Sdim/* Ones that can be tweaked from config files */
85280031Sdim#define VAR_BLANKTIME			"blanktime"
86280031Sdim#define VAR_BOOTMGR			"bootManager"
87280031Sdim#define VAR_BROWSER_BINARY		"browserBinary"
88280031Sdim#define VAR_BROWSER_PACKAGE		"browserPackage"
89280031Sdim#define VAR_CPIO_VERBOSITY		"cpioVerbose"
90280031Sdim#define VAR_DEBUG			"debug"
91280031Sdim#define VAR_DESKSTYLE			"_deskStyle"
92280031Sdim#define VAR_DISK			"disk"
93280031Sdim#define VAR_DISTS			"dists"
94280031Sdim#define VAR_DIST_MAIN			"distMain"
95280031Sdim#define VAR_DIST_CRYPTO			"distCRYPTO"
96280031Sdim#define VAR_DIST_SRC			"distSRC"
97280031Sdim#define VAR_DIST_X11			"distX11"
98280031Sdim#define VAR_DIST_XSERVER		"distXserver"
99280031Sdim#define VAR_DIST_XFONTS			"distXfonts"
100280031Sdim#define VAR_DEDICATE_DISK		"dedicateDisk"
101280031Sdim#define VAR_DOMAINNAME			"domainname"
102280031Sdim#define VAR_EDITOR			"editor"
103280031Sdim#define VAR_EXTRAS			"ifconfig_"
104280031Sdim#define VAR_COMMAND			"command"
105280031Sdim#define VAR_CONFIG_FILE			"configFile"
106280031Sdim#define VAR_FIXIT_TTY			"fixitTty"
107280031Sdim#define VAR_FTP_DIR			"ftpDirectory"
108280031Sdim#define VAR_FTP_PASS			"ftpPass"
109280031Sdim#define VAR_FTP_PATH			"_ftpPath"
110280031Sdim#define VAR_FTP_PORT			"ftpPort"
111280031Sdim#define VAR_FTP_STATE			"ftpState"
112280031Sdim#define VAR_FTP_USER			"ftpUser"
113280031Sdim#define VAR_FTP_HOST			"ftpHost"
114280031Sdim#define VAR_HTTP_PATH			"_httpPath"
115280031Sdim#define VAR_HTTP_PROXY			"httpProxy"
116280031Sdim#define VAR_HTTP_PORT			"httpPort"
117280031Sdim#define VAR_HTTP_HOST			"httpHost"
118261991Sdim#define VAR_HTTP_FTP_MODE		"httpFtpMode"
119218885Sdim#define VAR_GATEWAY			"defaultrouter"
120261991Sdim#define VAR_GEOMETRY			"geometry"
121261991Sdim#define VAR_HOSTNAME			"hostname"
122261991Sdim#define VAR_IFCONFIG			"ifconfig_"
123218885Sdim#define VAR_INTERFACES			"network_interfaces"
124261991Sdim#define VAR_INSTALL_CFG			"installConfig"
125261991Sdim#define VAR_INSTALL_ROOT		"installRoot"
126261991Sdim#define VAR_IPADDR			"ipaddr"
127218885Sdim#define VAR_IPV6_ENABLE			"ipv6_enable"
128261991Sdim#define VAR_IPV6ADDR			"ipv6addr"
129261991Sdim#define VAR_KEYMAP			"keymap"
130261991Sdim#define VAR_KGET			"kget"
131261991Sdim#define VAR_LABEL			"label"
132218885Sdim#define VAR_LABEL_COUNT			"labelCount"
133261991Sdim#define VAR_LINUX_ENABLE		"linux_enable"
134261991Sdim#define VAR_MEDIA_TYPE			"mediaType"
135261991Sdim#define VAR_MEDIA_TIMEOUT		"MEDIA_TIMEOUT"
136218885Sdim#define VAR_MOUSED			"moused_enable"
137261991Sdim#define VAR_MOUSED_FLAGS                "moused_flags"
138261991Sdim#define VAR_MOUSED_PORT			"moused_port"
139261991Sdim#define VAR_MOUSED_TYPE			"moused_type"
140261991Sdim#define VAR_NAMESERVER			"nameserver"
141218885Sdim#define VAR_NETINTERACTIVE		"netInteractive"
142261991Sdim#define VAR_NETMASK			"netmask"
143218885Sdim#define VAR_NETWORK_DEVICE		"netDev"
144218885Sdim#define VAR_NEWFS_ARGS			"newfsArgs"
145261991Sdim#define VAR_NFS_PATH			"nfs"
146261991Sdim#define VAR_NFS_HOST			"nfsHost"
147261991Sdim#define VAR_NFS_SECURE			"nfs_reserved_port_only"
148261991Sdim#define VAR_NFS_SERVER			"nfs_server_enable"
149261991Sdim#define VAR_NO_CONFIRM			"noConfirm"
150261991Sdim#define VAR_NO_ERROR			"noError"
151261991Sdim#define VAR_NO_WARN			"noWarn"
152218885Sdim#define VAR_NO_USR			"noUsr"
153218885Sdim#define VAR_NONINTERACTIVE		"nonInteractive"
154261991Sdim#define VAR_NOVELL			"novell"
155261991Sdim#define VAR_NTPDATE_FLAGS		"ntpdate_flags"
156261991Sdim#define VAR_PACKAGE			"package"
157261991Sdim#define VAR_PARTITION			"partition"
158218885Sdim#define VAR_PCNFSD			"pcnfsd"
159261991Sdim#define VAR_PKG_TMPDIR			"PKG_TMPDIR"
160261991Sdim#define VAR_PORTS_PATH			"ports"
161261991Sdim#define VAR_PPP_ENABLE			"ppp_enable"
162218885Sdim#define VAR_PPP_PROFILE			"ppp_profile"
163218885Sdim#define VAR_RELNAME			"releaseName"
164276479Sdim#define VAR_ROOT_SIZE			"rootSize"
165261991Sdim#define VAR_ROUTER			"router"
166261991Sdim#define VAR_ROUTER_ENABLE		"router_enable"
167218885Sdim#define VAR_ROUTERFLAGS			"router_flags"
168261991Sdim#define VAR_SERIAL_SPEED		"serialSpeed"
169261991Sdim#define VAR_SLOW_ETHER			"slowEthernetCard"
170261991Sdim#define VAR_SWAP_SIZE			"swapSize"
171218885Sdim#define VAR_TAPE_BLOCKSIZE		"tapeBlocksize"
172261991Sdim#define VAR_TRY_DHCP			"tryDHCP"
173261991Sdim#define VAR_TRY_RTSOL			"tryRTSOL"
174288943Sdim#define VAR_UFS_PATH			"ufs"
175218885Sdim#define VAR_USR_SIZE			"usrSize"
176261991Sdim#define VAR_VAR_SIZE			"varSize"
177261991Sdim#define VAR_XF86_CONFIG			"_xf86config"
178261991Sdim
179261991Sdim#define DEFAULT_TAPE_BLOCKSIZE	"20"
180261991Sdim
181261991Sdim/* One MB worth of blocks */
182261991Sdim#define ONE_MEG				2048
183261991Sdim#define ONE_GIG				(ONE_MEG * 1024)
184218885Sdim
185218885Sdim/* Which selection attributes to use */
186296417Sdim#define ATTR_SELECTED			(ColorDisplay ? item_selected_attr : item_attr)
187296417Sdim#define ATTR_TITLE	button_active_attr
188261991Sdim
189218885Sdim/* Handy strncpy() macro */
190280031Sdim#define SAFE_STRCPY(to, from)	sstrncpy((to), (from), sizeof (to) - 1)
191261991Sdim
192218885Sdim/*** Types ***/
193261991Sdimtypedef unsigned int Boolean;
194276479Sdimtypedef struct disk Disk;
195276479Sdimtypedef struct chunk Chunk;
196288943Sdim
197276479Sdim/* Bitfields for menu options */
198218885Sdim#define DMENU_NORMAL_TYPE	0x1     /* Normal dialog menu           */
199276479Sdim#define DMENU_RADIO_TYPE	0x2     /* Radio dialog menu            */
200218885Sdim#define DMENU_CHECKLIST_TYPE	0x4     /* Multiple choice menu         */
201218885Sdim#define DMENU_SELECTION_RETURNS 0x8     /* Immediate return on item selection */
202276479Sdim
203276479Sdimtypedef struct _dmenu {
204261991Sdim    int type;				/* What sort of menu we are	*/
205261991Sdim    char *title;			/* Our title			*/
206261991Sdim    char *prompt;			/* Our prompt			*/
207280031Sdim    char *helpline;			/* Line of help at bottom	*/
208276479Sdim    char *helpfile;			/* Help file for "F1"		*/
209280031Sdim    dialogMenuItem items[0];		/* Array of menu items		*/
210276479Sdim} DMenu;
211218885Sdim
212276479Sdim/* An rc.conf variable */
213288943Sdimtypedef struct _variable {
214218885Sdim    struct _variable *next;
215276479Sdim    char *name;
216218885Sdim    char *value;
217218885Sdim    int dirty;
218276479Sdim} Variable;
219261991Sdim
220218885Sdim#define NO_ECHO_OBJ(type)	((type) | (DITEM_NO_ECHO << 16))
221276479Sdim#define TYPE_OF_OBJ(type)	((type) & 0xff)
222276479Sdim#define ATTR_OF_OBJ(type)	((type) >> 16)
223276479Sdim
224276479Sdim/* A screen layout structure */
225276479Sdimtypedef struct _layout {
226261991Sdim    int         y;              /* x & Y co-ordinates */
227261991Sdim    int         x;
228280031Sdim    int         len;            /* The size of the dialog on the screen */
229261991Sdim    int         maxlen;         /* How much the user can type in ... */
230261991Sdim    char        *prompt;        /* The string for the prompt */
231276479Sdim    char        *help;          /* The display for the help line */
232261991Sdim    void        *var;           /* The var to set when this changes */
233288943Sdim    int         type;           /* The type of the dialog to create */
234276479Sdim    void        *obj;           /* The obj pointer returned by libdialog */
235276479Sdim} Layout;
236276479Sdim
237276479Sdimtypedef enum {
238261991Sdim    DEVICE_TYPE_NONE,
239276479Sdim    DEVICE_TYPE_DISK,
240288943Sdim    DEVICE_TYPE_FLOPPY,
241276479Sdim    DEVICE_TYPE_FTP,
242276479Sdim    DEVICE_TYPE_NETWORK,
243276479Sdim    DEVICE_TYPE_CDROM,
244276479Sdim    DEVICE_TYPE_TAPE,
245218885Sdim    DEVICE_TYPE_DOS,
246218885Sdim    DEVICE_TYPE_UFS,
247276479Sdim    DEVICE_TYPE_NFS,
248261991Sdim    DEVICE_TYPE_ANY,
249261991Sdim    DEVICE_TYPE_HTTP,
250261991Sdim} DeviceType;
251280031Sdim
252276479Sdim/* CDROM mount codes */
253280031Sdim#define CD_UNMOUNTED		0
254276479Sdim#define CD_ALREADY_MOUNTED	1
255261991Sdim#define CD_WE_MOUNTED_IT	2
256276479Sdim
257296417Sdim/* A "device" from sysinstall's point of view */
258296417Sdimtypedef struct _device {
259296417Sdim    char name[DEV_NAME_MAX];
260296417Sdim    char *description;
261296417Sdim    char *devname;
262261991Sdim    DeviceType type;
263296417Sdim    Boolean enabled;
264296417Sdim    Boolean (*init)(struct _device *dev);
265296417Sdim    FILE * (*get)(struct _device *dev, char *file, Boolean probe);
266296417Sdim    void (*shutdown)(struct _device *dev);
267296417Sdim    void *private;
268296417Sdim    unsigned int flags;
269296417Sdim} Device;
270296417Sdim
271296417Sdim/* Some internal representations of partitions */
272296417Sdimtypedef enum {
273296417Sdim    PART_NONE,
274296417Sdim    PART_SLICE,
275296417Sdim    PART_SWAP,
276296417Sdim    PART_FILESYSTEM,
277261991Sdim    PART_FAT,
278261991Sdim} PartType;
279276479Sdim
280296417Sdim/* The longest newfs command we'll hand to system() */
281296417Sdim#define NEWFS_CMD_MAX	256
282296417Sdim
283296417Sdimtypedef struct _part_info {
284296417Sdim    Boolean newfs;
285261991Sdim    char mountpoint[FILENAME_MAX];
286261991Sdim    char newfs_cmd[NEWFS_CMD_MAX];
287261991Sdim} PartInfo;
288261991Sdim
289218885Sdim/* An option */
290218885Sdimtypedef struct _opt {
291280031Sdim    char *name;
292261991Sdim    char *desc;
293280031Sdim    enum { OPT_IS_STRING, OPT_IS_INT, OPT_IS_FUNC, OPT_IS_VAR } type;
294261991Sdim    void *data;
295280031Sdim    void *aux;
296261991Sdim    char *(*check)();
297276479Sdim} Option;
298218885Sdim
299218885Sdim/* Weird index nodey things we use for keeping track of package information */
300280031Sdimtypedef enum { PACKAGE, PLACE } node_type;	/* Types of nodes */
301280031Sdim
302218885Sdimtypedef struct _pkgnode {	/* A node in the reconstructed hierarchy */
303280031Sdim    struct _pkgnode *next;	/* My next sibling			*/
304280031Sdim    node_type type;		/* What am I?				*/
305218885Sdim    char *name;			/* My name				*/
306280031Sdim    char *desc;			/* My description (Hook)		*/
307218885Sdim    struct _pkgnode *kids;	/* My little children			*/
308280031Sdim    void *data;			/* A place to hang my data		*/
309261991Sdim} PkgNode;
310276479Sdimtypedef PkgNode *PkgNodePtr;
311276479Sdim
312276479Sdim/* A single package */
313288943Sdimtypedef struct _indexEntry {	/* A single entry in an INDEX file */
314280031Sdim    char *name;			/* name				*/
315280031Sdim    char *path;			/* full path to port		*/
316218885Sdim    char *prefix;		/* port prefix			*/
317280031Sdim    char *comment;		/* one line description		*/
318280031Sdim    char *descrfile;		/* path to description file	*/
319218885Sdim    char *deps;			/* packages this depends on	*/
320280031Sdim    int  depc;			/* how many depend on me	*/
321261991Sdim    int  installed;		/* indicates if it is installed */
322218885Sdim    char *maintainer;		/* maintainer			*/
323296417Sdim} IndexEntry;
324296417Sdimtypedef IndexEntry *IndexEntryPtr;
325296417Sdim
326296417Sdimtypedef int (*commandFunc)(char *key, void *data);
327296417Sdim
328261991Sdim#define HOSTNAME_FIELD_LEN	128
329261991Sdim#define IPADDR_FIELD_LEN	16
330261991Sdim#define EXTRAS_FIELD_LEN	128
331261991Sdim
332261991Sdim/* This is the structure that Network devices carry around in their private, erm, structures */
333261991Sdimtypedef struct _devPriv {
334261991Sdim    int use_rtsol;
335261991Sdim    int use_dhcp;
336261991Sdim    char ipaddr[IPADDR_FIELD_LEN];
337218885Sdim    char netmask[IPADDR_FIELD_LEN];
338218885Sdim    char extras[EXTRAS_FIELD_LEN];
339276479Sdim} DevInfo;
340261991Sdim
341276479Sdim
342276479Sdim/*** Externs ***/
343276479Sdimextern jmp_buf		BailOut;		/* Used to get the heck out */
344276479Sdimextern int		DebugFD;		/* Where diagnostic output goes			*/
345261991Sdimextern Boolean		Fake;			/* Don't actually modify anything - testing	*/
346276479Sdimextern Boolean		SystemWasInstalled;	/* Did we install it?				*/
347261991Sdimextern Boolean		RunningAsInit;		/* Are we running stand-alone?			*/
348218885Sdimextern Boolean		DialogActive;		/* Is the dialog() stuff up?			*/
349261991Sdimextern Boolean		ColorDisplay;		/* Are we on a color display?			*/
350261991Sdimextern Boolean		OnVTY;			/* On a syscons VTY?				*/
351261991Sdimextern Variable		*VarHead;		/* The head of the variable chain		*/
352296417Sdimextern Device		*mediaDevice;		/* Where we're getting our distribution from	*/
353296417Sdimextern unsigned int	Dists;			/* Which distributions we want			*/
354296417Sdimextern unsigned int	CRYPTODists;		/* Which naughty distributions we want		*/
355296417Sdimextern unsigned int	SrcDists;		/* Which src distributions we want		*/
356296417Sdimextern unsigned int	XF86Dists;		/* Which XFree86 dists we want			*/
357296417Sdimextern unsigned int	XF86ServerDists;	/* The XFree86 servers we want			*/
358218885Sdimextern unsigned int	XF86FontDists;		/* The XFree86 fonts we want			*/
359261991Sdimextern int		BootMgr;		/* Which boot manager to use 			*/
360261991Sdimextern int		StatusLine;		/* Where to print our status messages		*/
361261991Sdimextern DMenu		MenuInitial;		/* Initial installation menu			*/
362261991Sdimextern DMenu		MenuFixit;		/* Fixit repair menu				*/
363261991Sdimextern DMenu		MenuMBRType;		/* Type of MBR to write on the disk		*/
364261991Sdimextern DMenu		MenuConfigure;		/* Final configuration menu			*/
365261991Sdimextern DMenu		MenuDocumentation;	/* Documentation menu				*/
366261991Sdimextern DMenu		MenuFTPOptions;		/* FTP Installation options			*/
367218885Sdimextern DMenu		MenuIndex;		/* Index menu					*/
368218885Sdimextern DMenu		MenuOptions;		/* Installation options				*/
369218885Sdimextern DMenu		MenuOptionsLanguage;	/* Language options menu			*/
370261991Sdimextern DMenu		MenuMedia;		/* Media type menu				*/
371218885Sdimextern DMenu		MenuMouse;		/* Mouse type menu				*/
372218885Sdimextern DMenu		MenuMediaCDROM;		/* CDROM media menu				*/
373218885Sdimextern DMenu		MenuMediaDOS;		/* DOS media menu				*/
374276479Sdimextern DMenu		MenuMediaFloppy;	/* Floppy media menu				*/
375261991Sdimextern DMenu		MenuMediaFTP;		/* FTP media menu				*/
376261991Sdimextern DMenu		MenuMediaTape;		/* Tape media menu				*/
377261991Sdimextern DMenu		MenuNetworkDevice;	/* Network device menu				*/
378261991Sdimextern DMenu		MenuNTP;		/* NTP time server menu				*/
379261991Sdimextern DMenu		MenuSecurityProfile;	/* Security profile menu			*/
380261991Sdimextern DMenu		MenuStartup;		/* Startup services menu			*/
381261991Sdimextern DMenu		MenuSyscons;		/* System console configuration menu		*/
382261991Sdimextern DMenu		MenuSysconsFont;	/* System console font configuration menu	*/
383261991Sdimextern DMenu		MenuSysconsKeymap;	/* System console keymap configuration menu	*/
384288943Sdimextern DMenu		MenuSysconsKeyrate;	/* System console keyrate configuration menu	*/
385261991Sdimextern DMenu		MenuSysconsSaver;	/* System console saver configuration menu	*/
386276479Sdimextern DMenu		MenuSysconsScrnmap;	/* System console screenmap configuration menu	*/
387218885Sdimextern DMenu		MenuNetworking;		/* Network configuration menu			*/
388261991Sdimextern DMenu		MenuInstallCustom;	/* Custom Installation menu			*/
389261991Sdimextern DMenu		MenuDistributions;	/* Distribution menu				*/
390261991Sdimextern DMenu		MenuDiskDevices;	/* Disk type devices				*/
391261991Sdimextern DMenu		MenuSubDistributions;	/* Custom distribution menu			*/
392276479Sdimextern DMenu		MenuSrcDistributions;	/* Source distribution menu			*/
393261991Sdimextern DMenu		MenuXF86;		/* XFree86 main menu				*/
394261991Sdimextern DMenu		MenuXF86Select;		/* XFree86 distribution selection menu		*/
395276479Sdimextern DMenu		MenuXF86SelectCore;	/* XFree86 core distribution menu		*/
396261991Sdimextern DMenu		MenuXF86SelectServer;	/* XFree86 server distribution menu		*/
397218885Sdimextern DMenu		MenuXF86SelectPC98Server; /* XFree86 server distribution menu		*/
398261991Sdimextern DMenu		MenuXF86SelectFonts;	/* XFree86 font selection menu			*/
399261991Sdimextern DMenu		MenuXF86SelectFonts;	/* XFree86 font selection menu			*/
400261991Sdimextern DMenu		MenuXDesktops;		/* Disk devices menu				*/
401261991Sdimextern DMenu		MenuHTMLDoc;		/* HTML Documentation menu			*/
402261991Sdimextern DMenu		MenuUsermgmt;		/* User management menu				*/
403261991Sdimextern DMenu		MenuFixit;		/* Fixit floppy/CDROM/shell menu		*/
404261991Sdimextern DMenu		MenuXF86Config;		/* Select XFree86 configuration type		*/
405261991Sdimextern int              FixItMode;              /* FixItMode starts shell onc urrent device (ie Serial port) */
406261991Sdimextern const char *	StartName;		/* Which name we were started as */
407261991Sdim
408261991Sdim/* Stuff from libdialog which isn't properly declared outside */
409261991Sdimextern void display_helpfile(void);
410261991Sdimextern void display_helpline(WINDOW *w, int y, int width);
411276479Sdim
412218885Sdim/*** Prototypes ***/
413218885Sdim
414261991Sdim/* anonFTP.c */
415276479Sdimextern int	configAnonFTP(dialogMenuItem *self);
416276479Sdim
417276479Sdim/* cdrom.c */
418261991Sdimextern Boolean	mediaInitCDROM(Device *dev);
419276479Sdimextern FILE	*mediaGetCDROM(Device *dev, char *file, Boolean probe);
420261991Sdimextern void	mediaShutdownCDROM(Device *dev);
421218885Sdim
422261991Sdim/* command.c */
423288943Sdimextern void	command_clear(void);
424261991Sdimextern void	command_sort(void);
425218885Sdimextern void	command_execute(void);
426276479Sdimextern void	command_shell_add(char *key, char *fmt, ...);
427261991Sdimextern void	command_func_add(char *key, commandFunc func, void *data);
428261991Sdim
429261991Sdim/* config.c */
430261991Sdimextern void	configEnvironmentRC_conf(void);
431261991Sdimextern void	configEnvironmentResolv(char *config);
432261991Sdimextern void	configRC_conf(void);
433276479Sdimextern int	configFstab(dialogMenuItem *self);
434218885Sdimextern int	configRC(dialogMenuItem *self);
435218885Sdimextern int	configResolv(dialogMenuItem *self);
436280031Sdimextern int	configPackages(dialogMenuItem *self);
437261991Sdimextern int	configSaver(dialogMenuItem *self);
438218885Sdimextern int	configSaverTimeout(dialogMenuItem *self);
439261991Sdimextern int	configLinux(dialogMenuItem *self);
440261991Sdimextern int	configNTP(dialogMenuItem *self);
441261991Sdimextern int	configUsers(dialogMenuItem *self);
442261991Sdimextern int	configXSetup(dialogMenuItem *self);
443261991Sdimextern int	configXDesktop(dialogMenuItem *self);
444261991Sdimextern int	configRouter(dialogMenuItem *self);
445261991Sdimextern int	configPCNFSD(dialogMenuItem *self);
446261991Sdimextern int	configNFSServer(dialogMenuItem *self);
447261991Sdimextern int	configWriteRC_conf(dialogMenuItem *self);
448261991Sdimextern int	configSecurityProfile(dialogMenuItem *self);
449261991Sdimextern int	configSecurityFascist(dialogMenuItem *self);
450261991Sdimextern int	configSecurityHigh(dialogMenuItem *self);
451261991Sdimextern int	configSecurityModerate(dialogMenuItem *self);
452261991Sdimextern int	configSecurityLiberal(dialogMenuItem *self);
453261991Sdim
454261991Sdim/* crc.c */
455218885Sdimextern int	crc(int, unsigned long *, unsigned long *);
456261991Sdim
457261991Sdim/* devices.c */
458261991Sdimextern DMenu	*deviceCreateMenu(DMenu *menu, DeviceType type, int (*hook)(dialogMenuItem *d),
459261991Sdim				  int (*check)(dialogMenuItem *d));
460261991Sdimextern void	deviceGetAll(void);
461261991Sdimextern void	deviceReset(void);
462261991Sdimextern void	deviceRescan(void);
463261991Sdimextern Device	**deviceFind(char *name, DeviceType type);
464261991Sdimextern Device	**deviceFindDescr(char *name, char *desc, DeviceType class);
465218885Sdimextern int	deviceCount(Device **devs);
466218885Sdimextern Device	*new_device(char *name);
467276479Sdimextern Device	*deviceRegister(char *name, char *desc, char *devname, DeviceType type, Boolean enabled,
468261991Sdim				Boolean (*init)(Device *mediadev),
469261991Sdim				FILE * (*get)(Device *dev, char *file, Boolean probe),
470261991Sdim				void (*shutDown)(Device *mediadev),
471261991Sdim				void *private);
472276479Sdimextern Boolean	dummyInit(Device *dev);
473261991Sdimextern FILE	*dummyGet(Device *dev, char *dist, Boolean probe);
474261991Sdimextern void	dummyShutdown(Device *dev);
475261991Sdim
476261991Sdim/* dhcp.c */
477261991Sdimextern int	dhcpParseLeases(char *file, char *hostname, char *domain, char *nameserver,
478261991Sdim				char *ipaddr, char *gateway, char *netmask);
479261991Sdim
480288943Sdim/* disks.c */
481276479Sdimextern int	diskPartitionEditor(dialogMenuItem *self);
482261991Sdimextern int	diskPartitionWrite(dialogMenuItem *self);
483261991Sdimextern int	diskGetSelectCount(Device ***devs);
484280031Sdimextern void	diskPartition(Device *dev);
485280031Sdim
486261991Sdim/* dispatch.c */
487280031Sdimextern int	dispatchCommand(char *command);
488261991Sdimextern int	dispatch_load_floppy(dialogMenuItem *self);
489261991Sdimextern int	dispatch_load_file_int(int);
490280031Sdimextern int	dispatch_load_file(dialogMenuItem *self);
491280031Sdim
492280031Sdim
493280031Sdim/* dist.c */
494261991Sdimextern int	distReset(dialogMenuItem *self);
495261991Sdimextern int	distConfig(dialogMenuItem *self);
496261991Sdimextern int	distSetCustom(dialogMenuItem *self);
497261991Sdimextern int	distUnsetCustom(dialogMenuItem *self);
498261991Sdimextern int	distSetDeveloper(dialogMenuItem *self);
499218885Sdimextern int	distSetXDeveloper(dialogMenuItem *self);
500218885Sdimextern int	distSetKernDeveloper(dialogMenuItem *self);
501280031Sdimextern int	distSetXKernDeveloper(dialogMenuItem *self);
502261991Sdimextern int	distSetUser(dialogMenuItem *self);
503261991Sdimextern int	distSetXUser(dialogMenuItem *self);
504261991Sdimextern int	distSetMinimum(dialogMenuItem *self);
505261991Sdimextern int	distSetEverything(dialogMenuItem *self);
506261991Sdimextern int	distSetSrc(dialogMenuItem *self);
507288943Sdimextern int	distSetXF86(dialogMenuItem *self);
508261991Sdimextern int	distExtractAll(dialogMenuItem *self);
509218885Sdim
510218885Sdim/* dmenu.c */
511261991Sdimextern int	dmenuDisplayFile(dialogMenuItem *tmp);
512261991Sdimextern int	dmenuSubmenu(dialogMenuItem *tmp);
513261991Sdimextern int	dmenuSystemCommand(dialogMenuItem *tmp);
514261991Sdimextern int	dmenuSystemCommandBox(dialogMenuItem *tmp);
515261991Sdimextern int	dmenuExit(dialogMenuItem *tmp);
516261991Sdimextern int	dmenuISetVariable(dialogMenuItem *tmp);
517261991Sdimextern int	dmenuSetVariable(dialogMenuItem *tmp);
518261991Sdimextern int	dmenuSetKmapVariable(dialogMenuItem *tmp);
519261991Sdimextern int	dmenuSetVariables(dialogMenuItem *tmp);
520261991Sdimextern int	dmenuToggleVariable(dialogMenuItem *tmp);
521261991Sdimextern int	dmenuSetFlag(dialogMenuItem *tmp);
522261991Sdimextern int	dmenuSetValue(dialogMenuItem *tmp);
523288943Sdimextern Boolean	dmenuOpen(DMenu *menu, int *choice, int *scroll, int *curr, int *max, Boolean buttons);
524261991Sdimextern Boolean	dmenuOpenSimple(DMenu *menu, Boolean buttons);
525261991Sdimextern int	dmenuVarCheck(dialogMenuItem *item);
526261991Sdimextern int	dmenuVarsCheck(dialogMenuItem *item);
527261991Sdimextern int	dmenuFlagCheck(dialogMenuItem *item);
528261991Sdimextern int	dmenuRadioCheck(dialogMenuItem *item);
529261991Sdim
530261991Sdim/* doc.c */
531261991Sdimextern int	docBrowser(dialogMenuItem *self);
532288943Sdimextern int	docShowDocument(dialogMenuItem *self);
533261991Sdim
534261991Sdim/* dos.c */
535261991Sdimextern Boolean	mediaCloseDOS(Device *dev, FILE *fp);
536218885Sdimextern Boolean	mediaInitDOS(Device *dev);
537261991Sdimextern FILE	*mediaGetDOS(Device *dev, char *file, Boolean probe);
538218885Sdimextern void	mediaShutdownDOS(Device *dev);
539218885Sdim
540261991Sdim/* floppy.c */
541261991Sdimextern int	getRootFloppy(void);
542261991Sdimextern Boolean	mediaInitFloppy(Device *dev);
543276479Sdimextern FILE	*mediaGetFloppy(Device *dev, char *file, Boolean probe);
544218885Sdimextern void	mediaShutdownFloppy(Device *dev);
545218885Sdim
546280031Sdim/* ftp_strat.c */
547280031Sdimextern Boolean	mediaCloseFTP(Device *dev, FILE *fp);
548280031Sdimextern Boolean	mediaInitFTP(Device *dev);
549280031Sdimextern FILE	*mediaGetFTP(Device *dev, char *file, Boolean probe);
550280031Sdimextern void	mediaShutdownFTP(Device *dev);
551280031Sdim
552261991Sdim/* http.c */
553218885Sdimextern Boolean	mediaInitHTTP(Device *dev);
554261991Sdimextern FILE	*mediaGetHTTP(Device *dev, char *file, Boolean probe);
555261991Sdim
556261991Sdim/* globals.c */
557261991Sdimextern void	globalsInit(void);
558218885Sdim
559261991Sdim/* index.c */
560261991Sdimint		index_read(FILE *fp, PkgNodePtr papa);
561261991Sdimint		index_menu(PkgNodePtr root, PkgNodePtr top, PkgNodePtr plist, int *pos, int *scroll);
562261991Sdimvoid		index_init(PkgNodePtr top, PkgNodePtr plist);
563218885Sdimvoid		index_node_free(PkgNodePtr top, PkgNodePtr plist);
564261991Sdimvoid		index_sort(PkgNodePtr top);
565261991Sdimvoid		index_print(PkgNodePtr top, int level);
566261991Sdimint		index_extract(Device *dev, PkgNodePtr top, PkgNodePtr who, Boolean depended);
567261991Sdimint		index_initialize(char *path);
568218885SdimPkgNodePtr	index_search(PkgNodePtr top, char *str, PkgNodePtr *tp);
569261991Sdim
570261991Sdim/* install.c */
571261991Sdimextern Boolean	checkLabels(Boolean whinge, Chunk **rdev, Chunk **sdev, Chunk **udev, Chunk **vdev);
572261991Sdimextern int	installCommit(dialogMenuItem *self);
573218885Sdimextern int	installCustomCommit(dialogMenuItem *self);
574261991Sdimextern int	installExpress(dialogMenuItem *self);
575261991Sdimextern int	installStandard(dialogMenuItem *self);
576261991Sdimextern int	installFixitHoloShell(dialogMenuItem *self);
577261991Sdimextern int	installFixitCDROM(dialogMenuItem *self);
578261991Sdimextern int	installFixitFloppy(dialogMenuItem *self);
579218885Sdimextern int	installFixupBin(dialogMenuItem *self);
580276479Sdimextern int	installFixupXFree(dialogMenuItem *self);
581261991Sdimextern int	installUpgrade(dialogMenuItem *self);
582261991Sdimextern int	installFilesystems(dialogMenuItem *self);
583218885Sdimextern int	installVarDefaults(dialogMenuItem *self);
584280031Sdimextern void	installEnvironment(void);
585261991Sdimextern int	installX11package(dialogMenuItem *self);
586218885Sdimextern Boolean	copySelf(void);
587261991Sdim
588261991Sdim/* kget.c */
589261991Sdimextern int	kget(char *out);
590261991Sdim
591261991Sdim/* keymap.c */
592261991Sdimextern int	loadKeymap(const char *lang);
593261991Sdim
594261991Sdim/* label.c */
595261991Sdimextern int	diskLabelEditor(dialogMenuItem *self);
596218885Sdimextern int	diskLabelCommit(dialogMenuItem *self);
597261991Sdim
598261991Sdim/* lndir.c */
599261991Sdimextern int	lndir(char *from, char *to);
600261991Sdim
601288943Sdim/* makedevs.c (auto-generated) */
602218885Sdimextern const char	termcap_ansi[];
603261991Sdimextern const char	termcap_vt100[];
604261991Sdimextern const char	termcap_cons25w[];
605261991Sdimextern const char	termcap_cons25[];
606261991Sdimextern const char	termcap_cons25_m[];
607261991Sdimextern const char	termcap_cons25r[];
608276479Sdimextern const char	termcap_cons25r_m[];
609261991Sdimextern const char	termcap_cons25l1[];
610276479Sdimextern const char	termcap_cons25l1_m[];
611261991Sdimextern const char	termcap_xterm[];
612288943Sdimextern const u_char	font_iso_8x16[];
613261991Sdimextern const u_char	font_cp850_8x16[];
614261991Sdimextern const u_char	font_cp866_8x16[];
615218885Sdimextern const u_char	koi8_r2cp866[];
616261991Sdimextern u_char		default_scrnmap[];
617261991Sdim
618276479Sdim/* media.c */
619276479Sdimextern char	*cpioVerbosity(void);
620276479Sdimextern void	mediaClose(void);
621261991Sdimextern int	mediaTimeout(void);
622218885Sdimextern int	mediaSetCDROM(dialogMenuItem *self);
623261991Sdimextern int	mediaSetFloppy(dialogMenuItem *self);
624261991Sdimextern int	mediaSetDOS(dialogMenuItem *self);
625288943Sdimextern int	mediaSetTape(dialogMenuItem *self);
626288943Sdimextern int	mediaSetFTP(dialogMenuItem *self);
627218885Sdimextern int	mediaSetFTPActive(dialogMenuItem *self);
628276479Sdimextern int	mediaSetFTPPassive(dialogMenuItem *self);
629218885Sdimextern int	mediaSetHTTP(dialogMenuItem *self);
630218885Sdimextern int	mediaSetUFS(dialogMenuItem *self);
631276479Sdimextern int	mediaSetNFS(dialogMenuItem *self);
632261991Sdimextern int	mediaSetFTPUserPass(dialogMenuItem *self);
633261991Sdimextern int	mediaSetCPIOVerbosity(dialogMenuItem *self);
634261991Sdimextern int	mediaGetType(dialogMenuItem *self);
635261991Sdimextern Boolean	mediaExtractDist(char *dir, char *dist, FILE *fp);
636261991Sdimextern Boolean	mediaExtractDistBegin(char *dir, int *fd, int *zpid, int *cpic);
637276479Sdimextern Boolean	mediaExtractDistEnd(int zpid, int cpid);
638261991Sdimextern Boolean	mediaVerify(void);
639218885Sdimextern FILE	*mediaGenericGet(char *base, const char *file);
640276479Sdim
641261991Sdim/* misc.c */
642261991Sdimextern Boolean	file_readable(char *fname);
643276479Sdimextern Boolean	file_executable(char *fname);
644261991Sdimextern Boolean	directory_exists(const char *dirname);
645276479Sdimextern char	*root_bias(char *path);
646261991Sdimextern char	*itoa(int value);
647288943Sdimextern char	*string_concat(char *p1, char *p2);
648261991Sdimextern char	*string_concat3(char *p1, char *p2, char *p3);
649218885Sdimextern char	*string_prune(char *str);
650261991Sdimextern char	*string_skipwhite(char *str);
651261991Sdimextern char	*string_copy(char *s1, char *s2);
652261991Sdimextern char	*pathBaseName(const char *path);
653261991Sdimextern void	safe_free(void *ptr);
654261991Sdimextern void	*safe_malloc(size_t size);
655218885Sdimextern void	*safe_realloc(void *orig, size_t size);
656261991Sdimextern dialogMenuItem *item_add(dialogMenuItem *list, char *prompt, char *title,
657276479Sdim				int (*checked)(dialogMenuItem *self),
658276479Sdim				int (*fire)(dialogMenuItem *self),
659276479Sdim				void (*selected)(dialogMenuItem *self, int is_selected),
660261991Sdim				void *data, int aux, int *curr, int *max);
661218885Sdimextern void	items_free(dialogMenuItem *list, int *curr, int *max);
662261991Sdimextern int	Mkdir(char *);
663276479Sdimextern int	Mount(char *, void *data);
664218885Sdimextern WINDOW	*openLayoutDialog(char *helpfile, char *title, int x, int y, int width, int height);
665218885Sdimextern ComposeObj *initLayoutDialog(WINDOW *win, Layout *layout, int x, int y, int *max);
666276479Sdimextern int	layoutDialogLoop(WINDOW *win, Layout *layout, ComposeObj **obj,
667261991Sdim				 int *n, int max, int *cbutton, int *cancel);
668218885Sdim
669280031Sdimextern WINDOW	*savescr(void);
670261991Sdimextern void	restorescr(WINDOW *w);
671218885Sdimextern char	*sstrncpy(char *dst, const char *src, int size);
672296417Sdim
673296417Sdim/* mouse.c */
674296417Sdimextern int	mousedTest(dialogMenuItem *self);
675296417Sdimextern int	mousedDisable(dialogMenuItem *self);
676261991Sdimextern int      setMouseFlags(dialogMenuItem *self);
677276479Sdim
678288943Sdim/* msg.c */
679261991Sdimextern Boolean	isDebug(void);
680261991Sdimextern void	msgInfo(char *fmt, ...);
681261991Sdimextern void	msgYap(char *fmt, ...);
682276479Sdimextern void	msgWarn(char *fmt, ...);
683261991Sdimextern void	msgDebug(char *fmt, ...);
684261991Sdimextern void	msgError(char *fmt, ...);
685276479Sdimextern void	msgFatal(char *fmt, ...);
686261991Sdimextern void	msgConfirm(char *fmt, ...);
687218885Sdimextern void	msgNotify(char *fmt, ...);
688218885Sdimextern void	msgWeHaveOutput(char *fmt, ...);
689261991Sdimextern int	msgYesNo(char *fmt, ...);
690261991Sdimextern char	*msgGetInput(char *buf, char *fmt, ...);
691261991Sdimextern int	msgSimpleConfirm(char *);
692288943Sdimextern int	msgSimpleNotify(char *);
693218885Sdim
694218885Sdim/* network.c */
695261991Sdimextern Boolean	mediaInitNetwork(Device *dev);
696276479Sdimextern void	mediaShutdownNetwork(Device *dev);
697218885Sdim
698218885Sdim/* nfs.c */
699276479Sdimextern Boolean	mediaInitNFS(Device *dev);
700261991Sdimextern FILE	*mediaGetNFS(Device *dev, char *file, Boolean probe);
701261991Sdimextern void	mediaShutdownNFS(Device *dev);
702261991Sdim
703261991Sdim/* options.c */
704218885Sdimextern int	optionsEditor(dialogMenuItem *self);
705261991Sdim
706218885Sdim/* package.c */
707280031Sdimextern int	packageAdd(dialogMenuItem *self);
708261991Sdimextern int	package_add(char *name);
709218885Sdimextern int	package_extract(Device *dev, char *name, Boolean depended);
710261991Sdimextern Boolean	package_exists(char *name);
711261991Sdim
712261991Sdim/* pccard.c */
713261991Sdimextern void	pccardInitialize(void);
714261991Sdim
715261991Sdim/* system.c */
716261991Sdimextern void	systemInitialize(int argc, char **argv);
717261991Sdimextern void	systemShutdown(int status);
718276479Sdimextern int	execExecute(char *cmd, char *name);
719276479Sdimextern int	systemExecute(char *cmd);
720276479Sdimextern void	systemSuspendDialog(void);
721276479Sdimextern void	systemResumeDialog(void);
722276479Sdimextern int	systemDisplayHelp(char *file);
723261991Sdimextern char	*systemHelpFile(char *file, char *buf);
724261991Sdimextern void	systemChangeFont(const u_char font[]);
725261991Sdimextern void	systemChangeLang(char *lang);
726261991Sdimextern void	systemChangeTerminal(char *color, const u_char c_termcap[], char *mono, const u_char m_termcap[]);
727276479Sdimextern void	systemChangeScreenmap(const u_char newmap[]);
728288943Sdimextern void	systemCreateHoloshell(void);
729261991Sdimextern int	vsystem(char *fmt, ...);
730261991Sdim
731261991Sdim/* tape.c */
732276479Sdimextern char	*mediaTapeBlocksize(void);
733261991Sdimextern Boolean	mediaInitTape(Device *dev);
734261991Sdimextern FILE	*mediaGetTape(Device *dev, char *file, Boolean probe);
735276479Sdimextern void	mediaShutdownTape(Device *dev);
736261991Sdim
737221345Sdim/* tcpip.c */
738218885Sdimextern int	tcpOpenDialog(Device *dev);
739261991Sdimextern int	tcpMenuSelect(dialogMenuItem *self);
740261991Sdimextern Device	*tcpDeviceSelect(void);
741261991Sdim
742218885Sdim/* termcap.c */
743276479Sdimextern int	set_termcap(void);
744261991Sdim
745218885Sdim/* ufs.c */
746261991Sdimextern void	mediaShutdownUFS(Device *dev);
747261991Sdimextern Boolean	mediaInitUFS(Device *dev);
748261991Sdimextern FILE	*mediaGetUFS(Device *dev, char *file, Boolean probe);
749288943Sdim
750261991Sdim/* usb.c */
751218885Sdimextern void	usbInitialize(void);
752261991Sdim
753276479Sdim/* user.c */
754218885Sdimextern int	userAddGroup(dialogMenuItem *self);
755261991Sdimextern int	userAddUser(dialogMenuItem *self);
756218885Sdim
757276479Sdim/* variable.c */
758296417Sdimextern void	variable_set(char *var, int dirty);
759296417Sdimextern void	variable_set2(char *name, char *value, int dirty);
760296417Sdimextern char 	*variable_get(char *var);
761296417Sdimextern int 	variable_cmp(char *var, char *value);
762276479Sdimextern void	variable_unset(char *var);
763276479Sdimextern char	*variable_get_value(char *var, char *prompt, int dirty);
764296417Sdimextern int 	variable_check(char *data);
765296417Sdimextern int	dump_variables(dialogMenuItem *self);
766296417Sdim
767296417Sdim/* wizard.c */
768276479Sdimextern void	slice_wizard(Disk *d);
769296417Sdim
770296417Sdim#endif
771276479Sdim/* _SYSINSTALL_H_INCLUDE */
772276479Sdim