sade.h revision 10882
1/* 2 * The new sysinstall program. 3 * 4 * This is probably the last attempt in the `sysinstall' line, the next 5 * generation being slated to essentially a complete rewrite. 6 * 7 * $Id: sysinstall.h,v 1.42.2.1 1995/07/21 10:54:06 rgrimes Exp $ 8 * 9 * Copyright (c) 1995 10 * Jordan Hubbard. All rights reserved. 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions 14 * are met: 15 * 1. Redistributions of source code must retain the above copyright 16 * notice, this list of conditions and the following disclaimer, 17 * verbatim and that no modifications are made prior to this 18 * point in the file. 19 * 2. Redistributions in binary form must reproduce the above copyright 20 * notice, this list of conditions and the following disclaimer in the 21 * documentation and/or other materials provided with the distribution. 22 * 3. All advertising materials mentioning features or use of this software 23 * must display the following acknowledgement: 24 * This product includes software developed by Jordan Hubbard 25 * for the FreeBSD Project. 26 * 4. The name of Jordan Hubbard or the FreeBSD project may not be used to 27 * endorse or promote products derived from this software without specific 28 * prior written permission. 29 * 30 * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND 31 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 32 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 33 * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE 34 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 35 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 36 * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) 37 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 38 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 39 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 40 * SUCH DAMAGE. 41 * 42 */ 43 44#ifndef _SYSINSTALL_H_INCLUDE 45#define _SYSINSTALL_H_INCLUDE 46 47#include <stdio.h> 48#include <stdlib.h> 49#include <string.h> 50#include <unistd.h> 51#include <dialog.h> 52#include "libdisk.h" 53#include "dist.h" 54 55/*** Defines ***/ 56 57/* Bitfields for menu options */ 58#define DMENU_NORMAL_TYPE 0x1 /* Normal dialog menu */ 59#define DMENU_RADIO_TYPE 0x2 /* Radio dialog menu */ 60#define DMENU_MULTIPLE_TYPE 0x4 /* Multiple choice menu */ 61#define DMENU_SELECTION_RETURNS 0x8 /* Select item then exit */ 62#define DMENU_CALL_FIRST 0x10 /* In multiple, use one handler */ 63 64/* variable limits */ 65#define VAR_NAME_MAX 128 66#define VAR_VALUE_MAX 1024 67 68/* device limits */ 69#define DEV_NAME_MAX 128 /* The maximum length of a device name */ 70#define DEV_MAX 200 /* The maximum number of devices we'll deal with */ 71#define INTERFACE_MAX 50 /* Maximum number of network interfaces we'll deal with */ 72#define MAX_FTP_RETRIES 3 /* How many times to beat our heads against the wall */ 73 74/* 75 * I make some pretty gross assumptions about having a max of 50 chunks 76 * total - 8 slices and 42 partitions. I can't easily display many more 77 * than that on the screen at once! 78 * 79 * For 2.1 I'll revisit this and try to make it more dynamic, but since 80 * this will catch 99.99% of all possible cases, I'm not too worried. 81 */ 82#define MAX_CHUNKS 50 83 84/* Internal flag variables */ 85#define DISK_PARTITIONED "_diskPartitioned" 86#define DISK_LABELLED "_diskLabelled" 87#define RUNNING_ON_ROOT "_runningOnRoot" 88#define TCP_CONFIGURED "_tcpConfigured" 89 90#define FTP_USER "_ftpUser" 91#define FTP_PASS "_ftpPass" 92 93#define OPT_NO_CONFIRM 0x0001 94#define OPT_NFS_SECURE 0x0002 95#define OPT_DEBUG 0x0004 96#define OPT_FTP_ACTIVE 0x0008 97#define OPT_FTP_PASSIVE 0x0010 98#define OPT_FTP_RESELECT 0x0020 99#define OPT_FTP_ABORT 0x0040 100#define OPT_SLOW_ETHER 0x0080 101#define OPT_EXPLORATORY_GET 0x0100 102#define OPT_LEAVE_NETWORK_UP 0x0200 103 104#define VAR_HOSTNAME "hostname" 105#define VAR_DOMAINNAME "domainname" 106#define VAR_NAMESERVER "nameserver" 107#define VAR_GATEWAY "defaultrouter" 108#define VAR_IPADDR "ipaddr" 109 110#define VAR_IFCONFIG "ifconfig_" 111#define VAR_INTERFACES "network_interfaces" 112 113/* The help file for the TCP/IP setup screen */ 114#define TCP_HELPFILE "tcp" 115 116/*** Types ***/ 117typedef unsigned int Boolean; 118typedef struct disk Disk; 119typedef struct chunk Chunk; 120 121typedef enum { 122 DMENU_DISPLAY_FILE, /* Display a file's contents */ 123 DMENU_SUBMENU, /* Recurse into another menu */ 124 DMENU_SYSTEM_COMMAND, /* Run shell commmand */ 125 DMENU_SYSTEM_COMMAND_BOX, /* Same as above, but in prgbox */ 126 DMENU_SET_VARIABLE, /* Set an environment/system var */ 127 DMENU_SET_FLAG, /* Set flag in an unsigned int */ 128 DMENU_SET_VALUE, /* Set unsigned int to value */ 129 DMENU_CALL, /* Call back a C function */ 130 DMENU_CANCEL, /* Cancel out of this menu */ 131 DMENU_NOP, /* Do nothing special for item */ 132} DMenuItemType; 133 134typedef struct _dmenuItem { 135 char *title; /* Our title */ 136 char *prompt; /* Our prompt */ 137 DMenuItemType type; /* What type of item we are */ 138 void *ptr; /* Generic data ptr */ 139 u_long parm; /* Parameter for above */ 140 Boolean disabled; /* Are we temporarily disabled? */ 141 char * (*check)(struct _dmenuItem *); /* Our state */ 142} DMenuItem; 143 144typedef struct _dmenu { 145 unsigned int options; /* What sort of menu we are */ 146 char *title; /* Our title */ 147 char *prompt; /* Our prompt */ 148 char *helpline; /* Line of help at bottom */ 149 char *helpfile; /* Help file for "F1" */ 150 DMenuItem items[0]; /* Array of menu items */ 151} DMenu; 152 153/* A sysconfig variable */ 154typedef struct _variable { 155 struct _variable *next; 156 char name[VAR_NAME_MAX]; 157 char value[VAR_VALUE_MAX]; 158} Variable; 159 160#define MAX_ATTRIBS 200 161#define MAX_NAME 511 162#define MAX_VALUE 4095 163 164typedef struct _attribs { 165 char *name; 166 char *value; 167} Attribs; 168 169typedef enum { 170 DEVICE_TYPE_NONE, 171 DEVICE_TYPE_DISK, 172 DEVICE_TYPE_FLOPPY, 173 DEVICE_TYPE_FTP, 174 DEVICE_TYPE_NETWORK, 175 DEVICE_TYPE_CDROM, 176 DEVICE_TYPE_TAPE, 177 DEVICE_TYPE_DOS, 178 DEVICE_TYPE_UFS, 179 DEVICE_TYPE_NFS, 180 DEVICE_TYPE_ANY, 181} DeviceType; 182 183/* A "device" from sysinstall's point of view */ 184typedef struct _device { 185 char name[DEV_NAME_MAX]; 186 char *description; 187 char *devname; 188 DeviceType type; 189 Boolean enabled; 190 Boolean (*init)(struct _device *dev); 191 int (*get)(struct _device *dev, char *file, Attribs *dist_attrs); 192 Boolean (*close)(struct _device *dev, int fd); 193 void (*shutdown)(struct _device *dev); 194 void *private; 195 unsigned int flags; 196} Device; 197 198/* Some internal representations of partitions */ 199typedef enum { 200 PART_NONE, 201 PART_SLICE, 202 PART_SWAP, 203 PART_FILESYSTEM, 204 PART_FAT, 205} PartType; 206 207/* The longest newfs command we'll hand to system() */ 208#define NEWFS_CMD_MAX 256 209 210typedef struct _part_info { 211 Boolean newfs; 212 char mountpoint[FILENAME_MAX]; 213 char newfs_cmd[NEWFS_CMD_MAX]; 214} PartInfo; 215 216typedef int (*commandFunc)(char *key, void *data); 217 218#define HOSTNAME_FIELD_LEN 256 219#define IPADDR_FIELD_LEN 16 220#define EXTRAS_FIELD_LEN 256 221 222/* This is the structure that Network devices carry around in their private, erm, structures */ 223typedef struct _devPriv { 224 char ipaddr[IPADDR_FIELD_LEN]; 225 char netmask[IPADDR_FIELD_LEN]; 226 char extras[EXTRAS_FIELD_LEN]; 227} DevInfo; 228 229 230/*** Externs ***/ 231extern int DebugFD; /* Where diagnostic output goes */ 232extern Boolean SystemWasInstalled; /* Did we install it? */ 233extern Boolean RunningAsInit; /* Are we running stand-alone? */ 234extern Boolean DialogActive; /* Is the dialog() stuff up? */ 235extern Boolean ColorDisplay; /* Are we on a color display? */ 236extern Boolean OnVTY; /* On a syscons VTY? */ 237extern Variable *VarHead; /* The head of the variable chain */ 238extern Device *mediaDevice; /* Where we're getting our distribution from */ 239extern unsigned int Dists; /* Which distributions we want */ 240extern unsigned int DESDists; /* Which naughty distributions we want */ 241extern unsigned int SrcDists; /* Which src distributions we want */ 242extern unsigned int XF86Dists; /* Which XFree86 dists we want */ 243extern unsigned int XF86ServerDists; /* The XFree86 servers we want */ 244extern unsigned int XF86FontDists; /* The XFree86 fonts we want */ 245extern unsigned int OptFlags; /* Global options */ 246extern int BootMgr; /* Which boot manager to use */ 247extern char *InstallPrefix; /* A location bias */ 248 249 250extern DMenu MenuInitial; /* Initial installation menu */ 251extern DMenu MenuMBRType; /* Type of MBR to write on the disk */ 252extern DMenu MenuConfigure; /* Final configuration menu */ 253extern DMenu MenuDocumentation; /* Documentation menu */ 254extern DMenu MenuFTPOptions; /* FTP Installation options */ 255extern DMenu MenuOptions; /* Installation options */ 256extern DMenu MenuOptionsLanguage; /* Language options menu */ 257extern DMenu MenuMedia; /* Media type menu */ 258extern DMenu MenuMediaCDROM; /* CDROM media menu */ 259extern DMenu MenuMediaDOS; /* DOS media menu */ 260extern DMenu MenuMediaFloppy; /* Floppy media menu */ 261extern DMenu MenuMediaFTP; /* FTP media menu */ 262extern DMenu MenuMediaTape; /* Tape media menu */ 263extern DMenu MenuNetworkDevice; /* Network device menu */ 264extern DMenu MenuNTP; /* NTP time server menu */ 265extern DMenu MenuSyscons; /* System console configuration menu */ 266extern DMenu MenuSysconsKeymap; /* System console keymap configuration menu */ 267extern DMenu MenuSysconsKeyrate; /* System console keyrate configuration menu */ 268extern DMenu MenuSysconsSaver; /* System console saver configuration menu */ 269extern DMenu MenuNetworking; /* Network configuration menu */ 270extern DMenu MenuInstallCustom; /* Custom Installation menu */ 271extern DMenu MenuInstallType; /* Installation type menu */ 272extern DMenu MenuDistributions; /* Distribution menu */ 273extern DMenu MenuDESDistributions; /* DES distribution menu */ 274extern DMenu MenuSrcDistributions; /* Source distribution menu */ 275extern DMenu MenuXF86; /* XFree86 main menu */ 276extern DMenu MenuXF86Select; /* XFree86 distribution selection menu */ 277extern DMenu MenuXF86SelectCore; /* XFree86 core distribution menu */ 278extern DMenu MenuXF86SelectServer; /* XFree86 server distribution menu */ 279extern DMenu MenuXF86SelectFonts; /* XFree86 font selection menu */ 280extern DMenu MenuDiskDevices; /* Disk devices menu */ 281 282 283/*** Prototypes ***/ 284 285/* attrs.c */ 286extern const char *attr_match(Attribs *attr, char *name); 287extern int attr_parse(Attribs **attr, char *file); 288 289/* cdrom.c */ 290extern Boolean mediaInitCDROM(Device *dev); 291extern int mediaGetCDROM(Device *dev, char *file, Attribs *dist_attrs); 292extern void mediaShutdownCDROM(Device *dev); 293 294/* command.c */ 295extern void command_clear(void); 296extern void command_sort(void); 297extern void command_execute(void); 298extern void command_shell_add(char *key, char *fmt, ...); 299extern void command_func_add(char *key, commandFunc func, void *data); 300 301/* config.c */ 302extern void configFstab(void); 303extern void configSysconfig(void); 304extern void configResolv(void); 305extern int configPorts(char *str); 306extern int configPackages(char *str); 307extern int configSaverTimeout(char *str); 308extern int configNTP(char *str); 309extern int configRoutedFlags(char *str); 310 311/* crc.c */ 312extern int crc(int, unsigned long *, unsigned long *); 313 314/* decode.c */ 315extern DMenuItem *decode(DMenu *menu, char *name); 316extern Boolean dispatch(DMenuItem *tmp, char *name); 317extern Boolean decode_and_dispatch_multiple(DMenu *menu, char *names); 318 319/* devices.c */ 320extern DMenu *deviceCreateMenu(DMenu *menu, DeviceType type, int (*hook)()); 321extern void deviceGetAll(void); 322extern Device **deviceFind(char *name, DeviceType type); 323extern int deviceCount(Device **devs); 324extern Device *new_device(char *name); 325extern Device *deviceRegister(char *name, char *desc, char *devname, DeviceType type, Boolean enabled, 326 Boolean (*init)(Device *mediadev), int (*get)(Device *dev, char *file, Attribs *dist_attrs), 327 Boolean (*close)(Device *mediadev, int fd), void (*shutDown)(Device *mediadev), 328 void *private); 329extern Boolean dummyInit(Device *dev); 330extern int dummyGet(Device *dev, char *dist, Attribs *dist_attrs); 331extern Boolean dummyClose(Device *dev, int fd); 332extern void dummyShutdown(Device *dev); 333 334/* disks.c */ 335extern int diskPartitionEditor(char *unused); 336extern int diskPartitionWrite(char *unused); 337 338/* dist.c */ 339extern int distReset(char *str); 340extern int distSetDeveloper(char *str); 341extern int distSetXDeveloper(char *str); 342extern int distSetKernDeveloper(char *str); 343extern int distSetUser(char *str); 344extern int distSetXUser(char *str); 345extern int distSetMinimum(char *str); 346extern int distSetEverything(char *str); 347extern int distSetDES(char *str); 348extern int distSetSrc(char *str); 349extern int distSetXF86(char *str); 350extern int distExtractAll(char *str); 351 352/* dmenu.c */ 353extern Boolean dmenuOpen(DMenu *menu, int *choice, int *scroll, int *curr, int *max); 354extern Boolean dmenuOpenSimple(DMenu *menu); 355extern char *dmenuVarCheck(DMenuItem *item); 356extern char *dmenuFlagCheck(DMenuItem *item); 357extern char *dmenuRadioCheck(DMenuItem *item); 358 359/* dos.c */ 360extern Boolean mediaInitDOS(Device *dev); 361extern int mediaGetDOS(Device *dev, char *file, Attribs *dist_attrs); 362extern void mediaShutdownDOS(Device *dev); 363 364/* floppy.c */ 365extern int getRootFloppy(void); 366extern Boolean mediaInitFloppy(Device *dev); 367extern int mediaGetFloppy(Device *dev, char *file, Attribs *dist_attrs); 368extern void mediaShutdownFloppy(Device *dev); 369 370/* ftp_strat.c */ 371extern Boolean mediaCloseFTP(Device *dev, int fd); 372extern Boolean mediaInitFTP(Device *dev); 373extern int mediaGetFTP(Device *dev, char *file, Attribs *dist_attrs); 374extern void mediaShutdownFTP(Device *dev); 375extern int mediaSetFtpUserPass(char *str); 376 377/* globals.c */ 378extern void globalsInit(void); 379 380/* install.c */ 381extern int installCommit(char *str); 382extern int installExpress(char *str); 383extern Boolean installFilesystems(void); 384 385/* lang.c */ 386extern void lang_set_Danish(char *str); 387extern void lang_set_Dutch(char *str); 388extern void lang_set_English(char *str); 389extern void lang_set_French(char *str); 390extern void lang_set_German(char *str); 391extern void lang_set_Italian(char *str); 392extern void lang_set_Japanese(char *str); 393extern void lang_set_Norwegian(char *str); 394extern void lang_set_Russian(char *str); 395extern void lang_set_Spanish(char *str); 396extern void lang_set_Swedish(char *str); 397 398/* label.c */ 399extern int diskLabelEditor(char *str); 400extern int diskLabelCommit(char *str); 401 402/* makedevs.c (auto-generated) */ 403extern const char termcap_vt100[]; 404extern const char termcap_cons25[]; 405extern const char termcap_cons25_m[]; 406extern const char termcap_cons25r[]; 407extern const char termcap_cons25r_m[]; 408extern const char termcap_cons25l1[]; 409extern const char termcap_cons25l1_m[]; 410extern const u_char font_iso_8x16[]; 411extern const u_char font_cp850_8x16[]; 412extern const u_char font_cp866_8x16[]; 413extern const u_char koi8_r2cp866[]; 414extern u_char default_scrnmap[]; 415 416/* media.c */ 417extern int mediaSetCDROM(char *str); 418extern int mediaSetFloppy(char *str); 419extern int mediaSetDOS(char *str); 420extern int mediaSetTape(char *str); 421extern int mediaSetFTP(char *str); 422extern int mediaSetFTPActive(char *str); 423extern int mediaSetFTPPassive(char *str); 424extern int mediaSetUFS(char *str); 425extern int mediaSetNFS(char *str); 426extern Boolean mediaGetType(void); 427extern Boolean mediaExtractDist(char *dir, int fd); 428extern Boolean mediaExtractDistBegin(char *dir, int *fd, int *zpid, int *cpic); 429extern Boolean mediaExtractDistEnd(int zpid, int cpid); 430extern Boolean mediaVerify(void); 431 432/* misc.c */ 433extern Boolean file_readable(char *fname); 434extern Boolean file_executable(char *fname); 435extern char *string_concat(char *p1, char *p2); 436extern char *string_prune(char *str); 437extern char *string_skipwhite(char *str); 438extern void safe_free(void *ptr); 439extern void *safe_malloc(size_t size); 440extern void *safe_realloc(void *orig, size_t size); 441extern char **item_add(char **list, char *item, int *curr, int *max); 442extern char **item_add_pair(char **list, char *item1, char *item2, 443 int *curr, int *max); 444extern void items_free(char **list, int *curr, int *max); 445extern int Mkdir(char *, void *data); 446extern int Mount(char *, void *data); 447 448/* msg.c */ 449extern Boolean isDebug(void); 450extern void msgInfo(char *fmt, ...); 451extern void msgYap(char *fmt, ...); 452extern void msgWarn(char *fmt, ...); 453extern void msgDebug(char *fmt, ...); 454extern void msgError(char *fmt, ...); 455extern void msgFatal(char *fmt, ...); 456extern void msgConfirm(char *fmt, ...); 457extern void msgNotify(char *fmt, ...); 458extern void msgWeHaveOutput(char *fmt, ...); 459extern int msgYesNo(char *fmt, ...); 460extern char *msgGetInput(char *buf, char *fmt, ...); 461 462/* network.c */ 463extern Boolean mediaInitNetwork(Device *dev); 464extern void mediaShutdownNetwork(Device *dev); 465 466/* nfs.c */ 467extern Boolean mediaInitNFS(Device *dev); 468extern int mediaGetNFS(Device *dev, char *file, Attribs *dist_attrs); 469extern void mediaShutdownNFS(Device *dev); 470 471/* system.c */ 472extern void systemInitialize(int argc, char **argv); 473extern void systemShutdown(void); 474extern int systemExecute(char *cmd); 475extern int systemDisplayFile(char *file); 476extern char *systemHelpFile(char *file, char *buf); 477extern void systemChangeFont(const u_char font[]); 478extern void systemChangeLang(char *lang); 479extern void systemChangeTerminal(char *color, const u_char c_termcap[], 480 char *mono, const u_char m_termcap[]); 481extern void systemChangeScreenmap(const u_char newmap[]); 482extern int vsystem(char *fmt, ...); 483 484/* tape.c */ 485extern Boolean mediaInitTape(Device *dev); 486extern int mediaGetTape(Device *dev, char *file, Attribs *dist_attrs); 487extern void mediaShutdownTape(Device *dev); 488 489/* tcpip.c */ 490extern int tcpOpenDialog(Device *dev); 491extern int tcpMenuSelect(char *str); 492extern Boolean tcpDeviceSelect(void); 493 494/* termcap.c */ 495extern int set_termcap(void); 496 497/* ufs.c */ 498extern void mediaShutdownUFS(Device *dev); 499extern Boolean mediaInitUFS(Device *dev); 500extern int mediaGetUFS(Device *dev, char *file, Attribs *dist_attrs); 501 502/* variables.c */ 503extern void variable_set(char *var); 504extern void variable_set2(char *name, char *value); 505 506/* wizard.c */ 507extern void slice_wizard(Disk *d); 508 509#endif 510/* _SYSINSTALL_H_INCLUDE */ 511