18097Sjkh/*
28097Sjkh * Copyright (c) 1995
38097Sjkh *	Jordan Hubbard.  All rights reserved.
48097Sjkh *
58097Sjkh * Redistribution and use in source and binary forms, with or without
68097Sjkh * modification, are permitted provided that the following conditions
78097Sjkh * are met:
88097Sjkh * 1. Redistributions of source code must retain the above copyright
98881Srgrimes *    notice, this list of conditions and the following disclaimer,
108881Srgrimes *    verbatim and that no modifications are made prior to this
118097Sjkh *    point in the file.
128097Sjkh * 2. Redistributions in binary form must reproduce the above copyright
138097Sjkh *    notice, this list of conditions and the following disclaimer in the
148097Sjkh *    documentation and/or other materials provided with the distribution.
158097Sjkh *
168097Sjkh * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND
178097Sjkh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
188097Sjkh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
198097Sjkh * ARE DISCLAIMED.  IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE
208097Sjkh * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
218097Sjkh * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
228097Sjkh * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION)
238097Sjkh * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
248097Sjkh * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
258097Sjkh * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
268097Sjkh * SUCH DAMAGE.
278097Sjkh *
28124067Sobrien * $FreeBSD$
298097Sjkh */
308097Sjkh
31161060Snetchild#ifndef _SADE_H_INCLUDE
32161060Snetchild#define _SADE_H_INCLUDE
338097Sjkh
3421243Sjkh#include <sys/types.h>
3521243Sjkh#include <sys/wait.h>
3637735Sjkh#include <errno.h>
3725052Sjkh#include <setjmp.h>
388097Sjkh#include <stdio.h>
398097Sjkh#include <stdlib.h>
408097Sjkh#include <string.h>
418097Sjkh#include <unistd.h>
428097Sjkh#include <dialog.h>
4321243Sjkh#include "ui_objects.h"
4421243Sjkh#include "dir.h"
4521243Sjkh#include "colors.h"
468097Sjkh
478208Sjkh/*** Defines ***/
488208Sjkh
49161060Snetchild#if defined(__i386__) || defined(__amd64__)
50107336Sjhb#define	WITH_SYSCONS
51107336Sjhb#define	WITH_MICE
52107336Sjhb#endif
53107336Sjhb
54121865Smarcel#if defined(__i386__) || defined(__amd64__)
55107336Sjhb#define	WITH_SLICES
56107336Sjhb#endif
57107336Sjhb
58158408Sjhb#if defined(__i386__)
59107336Sjhb#define	WITH_LINUX
60107336Sjhb#endif
61107336Sjhb
628208Sjkh/* device limits */
63111592Sjwd#define DEV_NAME_MAX		128	/* The maximum length of a device name	*/
6412661Speter#define DEV_MAX			100	/* The maximum number of devices we'll deal with */
6517007Sjkh#define IO_ERROR		-2	/* Status code for I/O error rather than normal EOF */
668208Sjkh
678705Sjkh/*
688705Sjkh * I make some pretty gross assumptions about having a max of 50 chunks
698705Sjkh * total - 8 slices and 42 partitions.  I can't easily display many more
708705Sjkh * than that on the screen at once!
718705Sjkh *
728705Sjkh * For 2.1 I'll revisit this and try to make it more dynamic, but since
738705Sjkh * this will catch 99.99% of all possible cases, I'm not too worried.
748705Sjkh */
7512661Speter#define MAX_CHUNKS	40
768208Sjkh
7712661Speter/* Internal environment variable names */
7815788Sjkh#define DISK_PARTITIONED		"_diskPartitioned"
7915788Sjkh#define DISK_LABELLED			"_diskLabelled"
8015788Sjkh#define DISK_SELECTED			"_diskSelected"
8115788Sjkh#define SYSTEM_STATE			"_systemState"
8215788Sjkh#define RUNNING_ON_ROOT			"_runningOnRoot"
838549Sjkh
8412661Speter/* Ones that can be tweaked from config files */
8512661Speter#define VAR_BLANKTIME			"blanktime"
8612661Speter#define VAR_BOOTMGR			"bootManager"
8712661Speter#define VAR_DEBUG			"debug"
8812661Speter#define VAR_DISK			"disk"
8997667Sjhb#define VAR_DISKINTERACTIVE		"diskInteractive"
9025473Spst#define VAR_DEDICATE_DISK		"dedicateDisk"
9129539Spst#define VAR_COMMAND			"command"
9229539Spst#define VAR_CONFIG_FILE			"configFile"
9312661Speter#define VAR_GEOMETRY			"geometry"
9424038Sjkh#define VAR_INSTALL_CFG			"installConfig"
9517034Sjkh#define VAR_INSTALL_ROOT		"installRoot"
9612661Speter#define VAR_LABEL			"label"
9712661Speter#define VAR_LABEL_COUNT			"labelCount"
9849441Sphk#define VAR_NEWFS_ARGS			"newfsArgs"
9912661Speter#define VAR_NO_CONFIRM			"noConfirm"
10026795Sjkh#define VAR_NO_ERROR			"noError"
10126717Sjkh#define VAR_NO_WARN			"noWarn"
10237735Sjkh#define VAR_NO_USR			"noUsr"
10387583Sdillon#define VAR_NO_TMP			"noTmp"
10487557Sdillon#define VAR_NO_HOME			"noHome"
10526456Sjkh#define VAR_NONINTERACTIVE		"nonInteractive"
10626456Sjkh#define VAR_PARTITION			"partition"
10712661Speter#define VAR_RELNAME			"releaseName"
10812661Speter#define VAR_ROOT_SIZE			"rootSize"
10912661Speter#define VAR_SWAP_SIZE			"swapSize"
11012661Speter#define VAR_TAPE_BLOCKSIZE		"tapeBlocksize"
11112661Speter#define VAR_UFS_PATH			"ufs"
11212661Speter#define VAR_USR_SIZE			"usrSize"
11312661Speter#define VAR_VAR_SIZE			"varSize"
11487583Sdillon#define VAR_TMP_SIZE			"tmpSize"
11578160Solgeni#define VAR_TERM			"TERM"
11679813Sache#define VAR_CONSTERM                    "_consterm"
1179202Srgrimes
11812661Speter#define DEFAULT_TAPE_BLOCKSIZE	"20"
1199202Srgrimes
12012661Speter/* One MB worth of blocks */
12112661Speter#define ONE_MEG				2048
12257617Sjkh#define ONE_GIG				(ONE_MEG * 1024)
1238549Sjkh
12416208Sjkh/* Which selection attributes to use */
12516294Sjkh#define ATTR_SELECTED			(ColorDisplay ? item_selected_attr : item_attr)
12616366Sjkh#define ATTR_TITLE	button_active_attr
12716208Sjkh
12820247Sjkh/* Handy strncpy() macro */
12920569Sjkh#define SAFE_STRCPY(to, from)	sstrncpy((to), (from), sizeof (to) - 1)
13016366Sjkh
1318208Sjkh/*** Types ***/
13276402Sjkhtypedef int Boolean;
1338549Sjkhtypedef struct disk Disk;
1348549Sjkhtypedef struct chunk Chunk;
1358097Sjkh
13615242Sjkh/* Bitfields for menu options */
13715242Sjkh#define DMENU_NORMAL_TYPE	0x1     /* Normal dialog menu           */
13815242Sjkh#define DMENU_RADIO_TYPE	0x2     /* Radio dialog menu            */
13915242Sjkh#define DMENU_CHECKLIST_TYPE	0x4     /* Multiple choice menu         */
14015242Sjkh#define DMENU_SELECTION_RETURNS 0x8     /* Immediate return on item selection */
1418097Sjkh
1428097Sjkhtypedef struct _dmenu {
14315242Sjkh    int type;				/* What sort of menu we are	*/
1448174Sjkh    char *title;			/* Our title			*/
1458174Sjkh    char *prompt;			/* Our prompt			*/
1468174Sjkh    char *helpline;			/* Line of help at bottom	*/
1478174Sjkh    char *helpfile;			/* Help file for "F1"		*/
14894056Smurray    dialogMenuItem items[];		/* Array of menu items		*/
1498097Sjkh} DMenu;
1508097Sjkh
15125251Sjkh/* An rc.conf variable */
1528097Sjkhtypedef struct _variable {
1538097Sjkh    struct _variable *next;
15420331Sjkh    char *name;
15520331Sjkh    char *value;
15643685Sjkh    int dirty;
1578097Sjkh} Variable;
1588097Sjkh
15922099Sjkh#define NO_ECHO_OBJ(type)	((type) | (DITEM_NO_ECHO << 16))
16022099Sjkh#define TYPE_OF_OBJ(type)	((type) & 0xff)
16122099Sjkh#define ATTR_OF_OBJ(type)	((type) >> 16)
16222099Sjkh
16321243Sjkh/* A screen layout structure */
16421243Sjkhtypedef struct _layout {
16521243Sjkh    int         y;              /* x & Y co-ordinates */
16621243Sjkh    int         x;
16721243Sjkh    int         len;            /* The size of the dialog on the screen */
16821243Sjkh    int         maxlen;         /* How much the user can type in ... */
16921243Sjkh    char        *prompt;        /* The string for the prompt */
17021243Sjkh    char        *help;          /* The display for the help line */
17121243Sjkh    void        *var;           /* The var to set when this changes */
17221243Sjkh    int         type;           /* The type of the dialog to create */
17321243Sjkh    void        *obj;           /* The obj pointer returned by libdialog */
17421243Sjkh} Layout;
17521243Sjkh
1768208Sjkhtypedef enum {
1778363Sjkh    DEVICE_TYPE_NONE,
1788208Sjkh    DEVICE_TYPE_DISK,
1798642Sjkh    DEVICE_TYPE_DOS,
1808837Sjkh    DEVICE_TYPE_UFS,
1818363Sjkh    DEVICE_TYPE_ANY,
1828208Sjkh} DeviceType;
1838097Sjkh
184161060Snetchild/* A "device" from sade's point of view */
1858208Sjkhtypedef struct _device {
1868208Sjkh    char name[DEV_NAME_MAX];
1878556Sjkh    char *description;
1888636Sjkh    char *devname;
1898208Sjkh    DeviceType type;
1908549Sjkh    Boolean enabled;
1919202Srgrimes    Boolean (*init)(struct _device *dev);
19220315Sjkh    FILE * (*get)(struct _device *dev, char *file, Boolean probe);
1939202Srgrimes    void (*shutdown)(struct _device *dev);
1948556Sjkh    void *private;
1959202Srgrimes    unsigned int flags;
19694597Smurray    unsigned int volume;
1978208Sjkh} Device;
1988208Sjkh
1998307Sjkh/* Some internal representations of partitions */
2008307Sjkhtypedef enum {
2018307Sjkh    PART_NONE,
2028307Sjkh    PART_SLICE,
2038307Sjkh    PART_SWAP,
2048549Sjkh    PART_FILESYSTEM,
2058549Sjkh    PART_FAT,
206121890Smarcel    PART_EFI
2078307Sjkh} PartType;
2088208Sjkh
209107565Srwatson#define	NEWFS_UFS_CMD		"newfs"
210107565Srwatson#define	NEWFS_MSDOS_CMD		"newfs_msdos"
2118336Sjkh
212107565Srwatsonenum newfs_type { NEWFS_UFS, NEWFS_MSDOS, NEWFS_CUSTOM };
213107565Srwatson#define	NEWFS_UFS_STRING	"UFS"
214107565Srwatson#define	NEWFS_MSDOS_STRING	"FAT"
215107565Srwatson#define	NEWFS_CUSTOM_STRING	"CST"
216107565Srwatson
217107565Srwatson/* The longest set of custom command line arguments we'll pass. */
218107565Srwatson#define NEWFS_CMD_ARGS_MAX	256
219107565Srwatson
2208307Sjkhtypedef struct _part_info {
221107565Srwatson	char mountpoint[FILENAME_MAX];
222107565Srwatson
223107565Srwatson	/* Is invocation of newfs desired? */
224107565Srwatson	Boolean do_newfs;
225107565Srwatson
226107565Srwatson	enum newfs_type newfs_type;
227107565Srwatson	union {
228107565Srwatson		struct {
229107565Srwatson			char user_options[NEWFS_CMD_ARGS_MAX];
230107565Srwatson			Boolean acls;		/* unused */
231107565Srwatson			Boolean multilabel;	/* unused */
232107565Srwatson			Boolean softupdates;
233113751Srwatson			Boolean ufs1;
234107565Srwatson		} newfs_ufs;
235107565Srwatson		struct {
236107565Srwatson			/* unused */
237107565Srwatson		} newfs_msdos;
238107565Srwatson		struct {
239107565Srwatson			char command[NEWFS_CMD_ARGS_MAX];
240107565Srwatson		} newfs_custom;
241107565Srwatson	} newfs_data;
2428307Sjkh} PartInfo;
2438307Sjkh
24412661Speter/* An option */
24512661Spetertypedef struct _opt {
24612661Speter    char *name;
24712661Speter    char *desc;
24812661Speter    enum { OPT_IS_STRING, OPT_IS_INT, OPT_IS_FUNC, OPT_IS_VAR } type;
24912661Speter    void *data;
25012661Speter    void *aux;
251161099Sdelphij    char *(*check)(void);
25212661Speter} Option;
25312661Speter
2548549Sjkhtypedef int (*commandFunc)(char *key, void *data);
2558307Sjkh
25612661Speter#define EXTRAS_FIELD_LEN	128
2578549Sjkh
2588208Sjkh/*** Externs ***/
25925052Sjkhextern jmp_buf		BailOut;		/* Used to get the heck out */
2608576Sjkhextern int		DebugFD;		/* Where diagnostic output goes			*/
26115439Sjkhextern Boolean		Fake;			/* Don't actually modify anything - testing	*/
26284831Sjkhextern Boolean		Restarting;		/* Are we restarting sysinstall?		*/
2638881Srgrimesextern Boolean		SystemWasInstalled;	/* Did we install it?				*/
2648735Sjkhextern Boolean		RunningAsInit;		/* Are we running stand-alone?			*/
2658576Sjkhextern Boolean		DialogActive;		/* Is the dialog() stuff up?			*/
2668576Sjkhextern Boolean		ColorDisplay;		/* Are we on a color display?			*/
2678576Sjkhextern Boolean		OnVTY;			/* On a syscons VTY?				*/
2688576Sjkhextern Variable		*VarHead;		/* The head of the variable chain		*/
2699202Srgrimesextern int		BootMgr;		/* Which boot manager to use 			*/
27017375Sjkhextern int		StatusLine;		/* Where to print our status messages		*/
271115293Speter#if defined(__i386__) || defined(__amd64__)
272106374Snyan#ifdef PC98
273106374Snyanextern DMenu		MenuIPLType;		/* Type of IPL to write on the disk		*/
274106374Snyan#else
2758660Sjkhextern DMenu		MenuMBRType;		/* Type of MBR to write on the disk		*/
276106374Snyan#endif
277107350Sjhb#endif
278161060Snetchildextern DMenu		MenuMain;       /* New main menu */
279161060Snetchildextern DMenu    MenuDiskDevices;        /* Disk type devices                            */
28067862Seivindextern const char *	StartName;		/* Which name we were started as */
281178946Sobrienextern const char *	ProgName;		/* Program's proper name */
2828576Sjkh
283133241Smarcel/* Important chunks. */
284133241Smarcelextern Chunk *HomeChunk;
285133241Smarcelextern Chunk *RootChunk;
286133241Smarcelextern Chunk *SwapChunk;
287133241Smarcelextern Chunk *TmpChunk;
288133241Smarcelextern Chunk *UsrChunk;
289133241Smarcelextern Chunk *VarChunk;
290133241Smarcel#ifdef __ia64__
291133241Smarcelextern Chunk *EfiChunk;
292133241Smarcel#endif
293133241Smarcel
29421243Sjkh/* Stuff from libdialog which isn't properly declared outside */
29521243Sjkhextern void display_helpfile(void);
29621243Sjkhextern void display_helpline(WINDOW *w, int y, int width);
2978576Sjkh
2988208Sjkh/*** Prototypes ***/
2998107Sjkh
3008347Sjkh/* command.c */
3018347Sjkhextern void	command_clear(void);
3028347Sjkhextern void	command_sort(void);
3038347Sjkhextern void	command_execute(void);
304161099Sdelphijextern void	command_shell_add(char *key, const char *fmt, ...) __printflike(2, 3);
3058549Sjkhextern void	command_func_add(char *key, commandFunc func, void *data);
3068347Sjkh
3078705Sjkh/* config.c */
30843255Sjkhextern void	configEnvironmentRC_conf(void);
30943811Sjkhextern void	configRC_conf(void);
31041162Sjkhextern int	configFstab(dialogMenuItem *self);
31126456Sjkhextern int	configRC(dialogMenuItem *self);
31225251Sjkhextern int	configWriteRC_conf(dialogMenuItem *self);
3138705Sjkh
3148351Sjkh/* devices.c */
31515242Sjkhextern DMenu	*deviceCreateMenu(DMenu *menu, DeviceType type, int (*hook)(dialogMenuItem *d),
31615242Sjkh				  int (*check)(dialogMenuItem *d));
3178556Sjkhextern void	deviceGetAll(void);
31845371Sjkhextern void	deviceReset(void);
31945371Sjkhextern void	deviceRescan(void);
3208556Sjkhextern Device	**deviceFind(char *name, DeviceType type);
32121730Sjkhextern Device	**deviceFindDescr(char *name, char *desc, DeviceType class);
3228636Sjkhextern int	deviceCount(Device **devs);
3238641Sjkhextern Device	*new_device(char *name);
324161099Sdelphijextern Device	*deviceRegister(char *name, char *desc, char *devicename, DeviceType type, Boolean enabled,
32520315Sjkh				Boolean (*init)(Device *mediadev),
32620315Sjkh				FILE * (*get)(Device *dev, char *file, Boolean probe),
32720315Sjkh				void (*shutDown)(Device *mediadev),
3288722Sjkh				void *private);
3299202Srgrimesextern Boolean	dummyInit(Device *dev);
33020315Sjkhextern FILE	*dummyGet(Device *dev, char *dist, Boolean probe);
3319202Srgrimesextern void	dummyShutdown(Device *dev);
3328097Sjkh
3338351Sjkh/* disks.c */
334107350Sjhb#ifdef WITH_SLICES
335107350Sjhbextern void	diskPartition(Device *dev);
33615091Sjkhextern int	diskPartitionEditor(dialogMenuItem *self);
337107350Sjhb#endif
33815091Sjkhextern int	diskPartitionWrite(dialogMenuItem *self);
33930345Sjkhextern int	diskGetSelectCount(Device ***devs);
3408097Sjkh
34115788Sjkh/* dispatch.c */
34215788Sjkhextern int	dispatchCommand(char *command);
34329517Sjkhextern int	dispatch_load_floppy(dialogMenuItem *self);
34429517Sjkhextern int	dispatch_load_file_int(int);
34529517Sjkhextern int	dispatch_load_file(dialogMenuItem *self);
34615788Sjkh
3478107Sjkh/* dmenu.c */
34815091Sjkhextern int	dmenuDisplayFile(dialogMenuItem *tmp);
34915091Sjkhextern int	dmenuSubmenu(dialogMenuItem *tmp);
35015091Sjkhextern int	dmenuSystemCommand(dialogMenuItem *tmp);
35115091Sjkhextern int	dmenuSystemCommandBox(dialogMenuItem *tmp);
35215416Sjkhextern int	dmenuExit(dialogMenuItem *tmp);
35330414Sjkhextern int	dmenuISetVariable(dialogMenuItem *tmp);
35415091Sjkhextern int	dmenuSetVariable(dialogMenuItem *tmp);
35519488Sjkhextern int	dmenuSetVariables(dialogMenuItem *tmp);
35616327Sjkhextern int	dmenuToggleVariable(dialogMenuItem *tmp);
35715091Sjkhextern int	dmenuSetFlag(dialogMenuItem *tmp);
35815091Sjkhextern int	dmenuSetValue(dialogMenuItem *tmp);
359161099Sdelphijextern Boolean	dmenuOpen(DMenu *menu, int *choice, int *bscroll, int *curr, int *max, Boolean buttons);
36016887Sjkhextern Boolean	dmenuOpenSimple(DMenu *menu, Boolean buttons);
36115091Sjkhextern int	dmenuVarCheck(dialogMenuItem *item);
36226610Sjkhextern int	dmenuVarsCheck(dialogMenuItem *item);
36315091Sjkhextern int	dmenuFlagCheck(dialogMenuItem *item);
36415091Sjkhextern int	dmenuRadioCheck(dialogMenuItem *item);
3658097Sjkh
3668792Sjkh/* dos.c */
367161060Snetchildextern Boolean mediaCloseDOS(Device *dev, FILE *fp);
368161060Snetchildextern Boolean mediaInitDOS(Device *dev);
369161060Snetchildextern FILE    *mediaGetDOS(Device *dev, char *file, Boolean probe);
370161060Snetchildextern void    mediaShutdownDOS(Device *dev);
3718792Sjkh
3728351Sjkh/* globals.c */
3738351Sjkhextern void	globalsInit(void);
3748351Sjkh
3758351Sjkh/* install.c */
376133241Smarcelextern Boolean	checkLabels(Boolean whinge);
37715091Sjkhextern int	installCommit(dialogMenuItem *self);
37815788Sjkhextern int	installCustomCommit(dialogMenuItem *self);
37915091Sjkhextern int	installFilesystems(dialogMenuItem *self);
38015091Sjkhextern int	installVarDefaults(dialogMenuItem *self);
38122756Sjkhextern void	installEnvironment(void);
38212661Speterextern Boolean	copySelf(void);
3838351Sjkh
38442898Sjkh/* kget.c */
38542898Sjkhextern int	kget(char *out);
38642898Sjkh
3878549Sjkh/* label.c */
38815091Sjkhextern int	diskLabelEditor(dialogMenuItem *self);
38915091Sjkhextern int	diskLabelCommit(dialogMenuItem *self);
3908549Sjkh
3918107Sjkh/* misc.c */
3928097Sjkhextern Boolean	file_readable(char *fname);
3938097Sjkhextern Boolean	file_executable(char *fname);
39414670Sjkhextern Boolean	directory_exists(const char *dirname);
39517034Sjkhextern char	*root_bias(char *path);
39616462Sjkhextern char	*itoa(int value);
3978097Sjkhextern char	*string_concat(char *p1, char *p2);
39812661Speterextern char	*string_concat3(char *p1, char *p2, char *p3);
3998097Sjkhextern char	*string_prune(char *str);
4008097Sjkhextern char	*string_skipwhite(char *str);
40112661Speterextern char	*string_copy(char *s1, char *s2);
40212661Speterextern char	*pathBaseName(const char *path);
4038097Sjkhextern void	safe_free(void *ptr);
4048208Sjkhextern void	*safe_malloc(size_t size);
4058363Sjkhextern void	*safe_realloc(void *orig, size_t size);
40615242Sjkhextern dialogMenuItem *item_add(dialogMenuItem *list, char *prompt, char *title,
40715242Sjkh				int (*checked)(dialogMenuItem *self),
40815242Sjkh				int (*fire)(dialogMenuItem *self),
40915242Sjkh				void (*selected)(dialogMenuItem *self, int is_selected),
41083842Smurray				void *data, int *aux, int *curr, int *max);
41115242Sjkhextern void	items_free(dialogMenuItem *list, int *curr, int *max);
41217005Sjkhextern int	Mkdir(char *);
413107525Smarcelextern int	Mkdir_command(char *key, void *data);
4148556Sjkhextern int	Mount(char *, void *data);
41521243Sjkhextern WINDOW	*openLayoutDialog(char *helpfile, char *title, int x, int y, int width, int height);
41621243Sjkhextern ComposeObj *initLayoutDialog(WINDOW *win, Layout *layout, int x, int y, int *max);
41721243Sjkhextern int	layoutDialogLoop(WINDOW *win, Layout *layout, ComposeObj **obj,
41821243Sjkh				 int *n, int max, int *cbutton, int *cancel);
41921243Sjkh
42015242Sjkhextern WINDOW	*savescr(void);
42115242Sjkhextern void	restorescr(WINDOW *w);
42220247Sjkhextern char	*sstrncpy(char *dst, const char *src, int size);
4238097Sjkh
4248107Sjkh/* msg.c */
4258837Sjkhextern Boolean	isDebug(void);
426161099Sdelphijextern void	msgInfo(const char *fmt, ...) __printf0like(1, 2);
427161099Sdelphijextern void	msgYap(const char *fmt, ...) __printflike(1, 2);
428161099Sdelphijextern void	msgWarn(const char *fmt, ...) __printflike(1, 2);
429161099Sdelphijextern void	msgDebug(const char *fmt, ...) __printflike(1, 2);
430161099Sdelphijextern void	msgError(const char *fmt, ...) __printflike(1, 2);
431161099Sdelphijextern void	msgFatal(const char *fmt, ...) __printflike(1, 2);
432161099Sdelphijextern void	msgConfirm(const char *fmt, ...) __printflike(1, 2);
433161099Sdelphijextern void	msgNotify(const char *fmt, ...) __printflike(1, 2);
434161099Sdelphijextern void	msgWeHaveOutput(const char *fmt, ...) __printflike(1, 2);
435161099Sdelphijextern int	msgYesNo(const char *fmt, ...) __printflike(1, 2);
436161099Sdelphijextern int	msgNoYes(const char *fmt, ...) __printflike(1, 2);
437161099Sdelphijextern char	*msgGetInput(char *buf, const char *fmt, ...) __printflike(2, 3);
438161099Sdelphijextern int	msgSimpleConfirm(const char *);
439161099Sdelphijextern int	msgSimpleNotify(const char *);
4408097Sjkh
44155942Shosokawa/* pccard.c */
44255942Shosokawaextern void	pccardInitialize(void);
44355942Shosokawa
4448351Sjkh/* system.c */
4458351Sjkhextern void	systemInitialize(int argc, char **argv);
44615788Sjkhextern void	systemShutdown(int status);
44712661Speterextern int	execExecute(char *cmd, char *name);
4488351Sjkhextern int	systemExecute(char *cmd);
44963404Sobrienextern void	systemSuspendDialog(void);
45063404Sobrienextern void	systemResumeDialog(void);
45112661Speterextern int	systemDisplayHelp(char *file);
4528351Sjkhextern char	*systemHelpFile(char *file, char *buf);
4538351Sjkhextern void	systemChangeFont(const u_char font[]);
4548351Sjkhextern void	systemChangeLang(char *lang);
45512661Speterextern void	systemChangeTerminal(char *color, const u_char c_termcap[], char *mono, const u_char m_termcap[]);
4568351Sjkhextern void	systemChangeScreenmap(const u_char newmap[]);
457161099Sdelphijextern int	vsystem(const char *fmt, ...) __printflike(1, 2);
4588107Sjkh
4598351Sjkh/* termcap.c */
4608351Sjkhextern int	set_termcap(void);
4618208Sjkh
46212661Speter/* variable.c */
46343685Sjkhextern void	variable_set(char *var, int dirty);
46443685Sjkhextern void	variable_set2(char *name, char *value, int dirty);
46512661Speterextern char 	*variable_get(char *var);
46630345Sjkhextern int 	variable_cmp(char *var, char *value);
46712661Speterextern void	variable_unset(char *var);
46843685Sjkhextern char	*variable_get_value(char *var, char *prompt, int dirty);
46926610Sjkhextern int 	variable_check(char *data);
470117475Strhodesextern int 	variable_check2(char *data);
47137735Sjkhextern int	dump_variables(dialogMenuItem *self);
47283820Smurrayextern void	free_variables(void);
47383880Smurrayextern void     pvariable_set(char *var);
47483880Smurrayextern char     *pvariable_get(char *var);
4758208Sjkh
4768281Sjkh/* wizard.c */
4778549Sjkhextern void	slice_wizard(Disk *d);
4788281Sjkh
47979065Sdd/*
48079065Sdd * Macros.  Please find a better place for us!
48179065Sdd */
482126844Sbde#define DEVICE_INIT(d)		((d) != NULL ? (d)->init((d)) : (Boolean)0)
48379065Sdd#define DEVICE_GET(d, b, f)	((d) != NULL ? (d)->get((d), (b), (f)) : NULL)
48479065Sdd#define DEVICE_SHUTDOWN(d)	((d) != NULL ? (d)->shutdown((d)) : (void)0)
48579065Sdd
4868097Sjkh#endif
4878097Sjkh/* _SYSINSTALL_H_INCLUDE */
488