sade.h revision 9202
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.41.2.20 1995/06/10 09:14:53 jkh 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.hlp" 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 MenuOptions; /* Installation options */ 255extern DMenu MenuOptionsLanguage; /* Language options menu */ 256extern DMenu MenuMedia; /* Media type menu */ 257extern DMenu MenuMediaCDROM; /* CDROM media menu */ 258extern DMenu MenuMediaDOS; /* DOS media menu */ 259extern DMenu MenuMediaFloppy; /* Floppy media menu */ 260extern DMenu MenuMediaFTP; /* FTP media menu */ 261extern DMenu MenuMediaTape; /* Tape media menu */ 262extern DMenu MenuNetworkDevice; /* Network device menu */ 263extern DMenu MenuNTP; /* NTP time server menu */ 264extern DMenu MenuSyscons; /* System console configuration menu */ 265extern DMenu MenuSysconsKeymap; /* System console keymap configuration menu */ 266extern DMenu MenuSysconsKeyrate; /* System console keyrate configuration menu */ 267extern DMenu MenuSysconsSaver; /* System console saver configuration menu */ 268extern DMenu MenuNetworking; /* Network configuration menu */ 269extern DMenu MenuInstall; /* Installation menu */ 270extern DMenu MenuInstallType; /* Installation type menu */ 271extern DMenu MenuDistributions; /* Distribution menu */ 272extern DMenu MenuDESDistributions; /* DES distribution menu */ 273extern DMenu MenuSrcDistributions; /* Source distribution menu */ 274extern DMenu MenuXF86; /* XFree86 main menu */ 275extern DMenu MenuXF86Select; /* XFree86 distribution selection menu */ 276extern DMenu MenuXF86SelectCore; /* XFree86 core distribution menu */ 277extern DMenu MenuXF86SelectServer; /* XFree86 server distribution menu */ 278extern DMenu MenuXF86SelectFonts; /* XFree86 font selection menu */ 279extern DMenu MenuDiskDevices; /* Disk devices menu */ 280 281 282/*** Prototypes ***/ 283 284/* attrs.c */ 285extern const char *attr_match(Attribs *attr, char *name); 286extern int attr_parse(Attribs **attr, char *file); 287 288/* cdrom.c */ 289extern Boolean mediaInitCDROM(Device *dev); 290extern int mediaGetCDROM(Device *dev, char *file, Attribs *dist_attrs); 291extern void mediaShutdownCDROM(Device *dev); 292 293/* command.c */ 294extern void command_clear(void); 295extern void command_sort(void); 296extern void command_execute(void); 297extern void command_shell_add(char *key, char *fmt, ...); 298extern void command_func_add(char *key, commandFunc func, void *data); 299 300/* config.c */ 301extern void configFstab(void); 302extern void configSysconfig(void); 303extern void configResolv(void); 304extern int configPorts(char *str); 305extern int configPackages(char *str); 306extern int configSaverTimeout(char *str); 307extern int configNTP(char *str); 308extern int configRoutedFlags(char *str); 309 310/* crc.c */ 311extern int crc(int, unsigned long *, unsigned long *); 312 313/* decode.c */ 314extern DMenuItem *decode(DMenu *menu, char *name); 315extern Boolean dispatch(DMenuItem *tmp, char *name); 316extern Boolean decode_and_dispatch_multiple(DMenu *menu, char *names); 317 318/* devices.c */ 319extern DMenu *deviceCreateMenu(DMenu *menu, DeviceType type, int (*hook)()); 320extern void deviceGetAll(void); 321extern Device **deviceFind(char *name, DeviceType type); 322extern int deviceCount(Device **devs); 323extern Device *new_device(char *name); 324extern Device *deviceRegister(char *name, char *desc, char *devname, DeviceType type, Boolean enabled, 325 Boolean (*init)(Device *mediadev), int (*get)(Device *dev, char *file, Attribs *dist_attrs), 326 Boolean (*close)(Device *mediadev, int fd), void (*shutDown)(Device *mediadev), 327 void *private); 328extern Boolean dummyInit(Device *dev); 329extern int dummyGet(Device *dev, char *dist, Attribs *dist_attrs); 330extern Boolean dummyClose(Device *dev, int fd); 331extern void dummyShutdown(Device *dev); 332 333/* disks.c */ 334extern int diskPartitionEditor(char *unused); 335 336/* dist.c */ 337extern int distReset(char *str); 338extern int distSetDeveloper(char *str); 339extern int distSetXDeveloper(char *str); 340extern int distSetKernDeveloper(char *str); 341extern int distSetUser(char *str); 342extern int distSetXUser(char *str); 343extern int distSetMinimum(char *str); 344extern int distSetEverything(char *str); 345extern int distSetDES(char *str); 346extern int distSetSrc(char *str); 347extern int distSetXF86(char *str); 348extern void distExtractAll(void); 349 350/* dmenu.c */ 351extern Boolean dmenuOpen(DMenu *menu, int *choice, int *scroll, int *curr, int *max); 352extern Boolean dmenuOpenSimple(DMenu *menu); 353extern char *dmenuVarCheck(DMenuItem *item); 354extern char *dmenuFlagCheck(DMenuItem *item); 355extern char *dmenuRadioCheck(DMenuItem *item); 356 357/* dos.c */ 358extern Boolean mediaInitDOS(Device *dev); 359extern int mediaGetDOS(Device *dev, char *file, Attribs *dist_attrs); 360extern void mediaShutdownDOS(Device *dev); 361 362/* floppy.c */ 363extern int getRootFloppy(void); 364extern Boolean mediaInitFloppy(Device *dev); 365extern int mediaGetFloppy(Device *dev, char *file, Attribs *dist_attrs); 366extern void mediaShutdownFloppy(Device *dev); 367 368/* ftp_strat.c */ 369extern Boolean mediaCloseFTP(Device *dev, int fd); 370extern Boolean mediaInitFTP(Device *dev); 371extern int mediaGetFTP(Device *dev, char *file, Attribs *dist_attrs); 372extern void mediaShutdownFTP(Device *dev); 373extern int mediaSetFtpUserPass(char *str); 374 375/* globals.c */ 376extern void globalsInit(void); 377 378/* install.c */ 379extern int installCommit(char *str); 380 381/* lang.c */ 382extern void lang_set_Danish(char *str); 383extern void lang_set_Dutch(char *str); 384extern void lang_set_English(char *str); 385extern void lang_set_French(char *str); 386extern void lang_set_German(char *str); 387extern void lang_set_Italian(char *str); 388extern void lang_set_Japanese(char *str); 389extern void lang_set_Norwegian(char *str); 390extern void lang_set_Russian(char *str); 391extern void lang_set_Spanish(char *str); 392extern void lang_set_Swedish(char *str); 393 394/* label.c */ 395extern int diskLabelEditor(char *str); 396 397/* makedevs.c (auto-generated) */ 398extern const char termcap_vt100[]; 399extern const char termcap_cons25[]; 400extern const char termcap_cons25_m[]; 401extern const char termcap_cons25r[]; 402extern const char termcap_cons25r_m[]; 403extern const char termcap_cons25l1[]; 404extern const char termcap_cons25l1_m[]; 405extern const u_char font_iso_8x16[]; 406extern const u_char font_cp850_8x16[]; 407extern const u_char font_cp866_8x16[]; 408extern const u_char koi8_r2cp866[]; 409extern u_char default_scrnmap[]; 410 411/* media.c */ 412extern int mediaSetCDROM(char *str); 413extern int mediaSetFloppy(char *str); 414extern int mediaSetDOS(char *str); 415extern int mediaSetTape(char *str); 416extern int mediaSetFTP(char *str); 417extern int mediaSetUFS(char *str); 418extern int mediaSetNFS(char *str); 419extern Boolean mediaGetType(void); 420extern Boolean mediaExtractDist(char *dir, int fd); 421extern Boolean mediaExtractDistBegin(char *dir, int *fd, int *zpid, int *cpic); 422extern Boolean mediaExtractDistEnd(int zpid, int cpid); 423extern Boolean mediaVerify(void); 424 425/* misc.c */ 426extern Boolean file_readable(char *fname); 427extern Boolean file_executable(char *fname); 428extern char *string_concat(char *p1, char *p2); 429extern char *string_prune(char *str); 430extern char *string_skipwhite(char *str); 431extern void safe_free(void *ptr); 432extern void *safe_malloc(size_t size); 433extern void *safe_realloc(void *orig, size_t size); 434extern char **item_add(char **list, char *item, int *curr, int *max); 435extern char **item_add_pair(char **list, char *item1, char *item2, 436 int *curr, int *max); 437extern void items_free(char **list, int *curr, int *max); 438extern int Mkdir(char *, void *data); 439extern int Mount(char *, void *data); 440 441/* msg.c */ 442extern Boolean isDebug(void); 443extern void msgInfo(char *fmt, ...); 444extern void msgYap(char *fmt, ...); 445extern void msgWarn(char *fmt, ...); 446extern void msgDebug(char *fmt, ...); 447extern void msgError(char *fmt, ...); 448extern void msgFatal(char *fmt, ...); 449extern void msgConfirm(char *fmt, ...); 450extern void msgNotify(char *fmt, ...); 451extern void msgWeHaveOutput(char *fmt, ...); 452extern int msgYesNo(char *fmt, ...); 453extern char *msgGetInput(char *buf, char *fmt, ...); 454 455/* network.c */ 456extern Boolean mediaInitNetwork(Device *dev); 457extern void mediaShutdownNetwork(Device *dev); 458 459/* nfs.c */ 460extern Boolean mediaInitNFS(Device *dev); 461extern int mediaGetNFS(Device *dev, char *file, Attribs *dist_attrs); 462extern void mediaShutdownNFS(Device *dev); 463 464/* system.c */ 465extern void systemInitialize(int argc, char **argv); 466extern void systemShutdown(void); 467extern int systemExecute(char *cmd); 468extern int systemDisplayFile(char *file); 469extern char *systemHelpFile(char *file, char *buf); 470extern void systemChangeFont(const u_char font[]); 471extern void systemChangeLang(char *lang); 472extern void systemChangeTerminal(char *color, const u_char c_termcap[], 473 char *mono, const u_char m_termcap[]); 474extern void systemChangeScreenmap(const u_char newmap[]); 475extern int vsystem(char *fmt, ...); 476 477/* tape.c */ 478extern Boolean mediaInitTape(Device *dev); 479extern int mediaGetTape(Device *dev, char *file, Attribs *dist_attrs); 480extern void mediaShutdownTape(Device *dev); 481 482/* tcpip.c */ 483extern int tcpOpenDialog(Device *dev); 484extern int tcpMenuSelect(char *str); 485extern Boolean tcpDeviceSelect(void); 486 487/* termcap.c */ 488extern int set_termcap(void); 489 490/* ufs.c */ 491extern void mediaShutdownUFS(Device *dev); 492extern Boolean mediaInitUFS(Device *dev); 493extern int mediaGetUFS(Device *dev, char *file, Attribs *dist_attrs); 494 495/* variables.c */ 496extern void variable_set(char *var); 497extern void variable_set2(char *name, char *value); 498 499/* wizard.c */ 500extern void slice_wizard(Disk *d); 501 502#endif 503/* _SYSINSTALL_H_INCLUDE */ 504