1/* $NetBSD: menus.mi,v 1.13 2018/06/03 13:23:58 martin Exp $ */ 2 3/*- 4 * Copyright (c) 2003 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by David Laight. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32/* 33 * Menu system definitions -- machine and language independent 34 * 35 * Some menus may be called directly in the code rather than via the 36 * menu system. 37 * 38 * This file must be first in the sed command line. 39 * 40 */ 41 42{ 43#include <stdio.h> 44#include <time.h> 45#include <curses.h> 46#include "defs.h" 47#include "md.h" 48#include "msg_defs.h" 49#include "menu_defs.h" 50 51static menudesc menu_def[]; 52 53static void 54src_legend(menudesc *menu, const char *legend, const char *text) 55{ 56 wprintw(menu->mw, "%-25s %.50s", MSG_XLAT(legend), MSG_XLAT(text)); 57} 58 59static void 60src_prompt(const char *prompt, char *buf, size_t size) 61{ 62 msg_prompt_win(prompt, -1, 12, 0, 0, buf, buf, size); 63} 64 65static void 66remove_sub_menu(int menuID) 67{ 68 69 for (size_t i = 0; i < DYN_MENU_START; i++) { 70 for (int j = 0; j < menu_def[i].numopts; j++) { 71 if ((menu_def[i].opts[j].opt_flags & OPT_SUB) 72 && menu_def[i].opts[j].opt_menu == menuID) { 73 74 for (int k = j + 1; k < menu_def[i].numopts; 75 k++) { 76 menu_def[i].opts[k-1] = 77 menu_def[i].opts[k]; 78 } 79 menu_def[i].numopts--; 80 return; 81 82 } 83 } 84 } 85} 86 87static void 88remove_menu_option(int menuID, const char *option) 89{ 90 91 for (int j = 0; j < menu_def[menuID].numopts; j++) { 92 if (menu_def[menuID].opts[j].opt_name == option) { 93 for (int k = j + 1; k < menu_def[menuID].numopts; 94 k++) { 95 menu_def[menuID].opts[k-1] = 96 menu_def[menuID].opts[k]; 97 } 98 menu_def[menuID].numopts--; 99 return; 100 101 } 102 } 103} 104 105void 106remove_color_options() 107{ 108 /* 109 * Current terminal type does not support colors, so remove all 110 * menu entries (actually that is: Utils/Color Scheme) that do not 111 * make any sense in this case. 112 */ 113 remove_sub_menu(MENU_colors); 114} 115 116void 117remove_raid_options() 118{ 119 /* 120 * No raidframe available, remove the following menu entries: 121 */ 122 remove_menu_option(MENU_pmdiskentry, MSG_fmtasraid); 123 remove_menu_option(MENU_pmpartentry, MSG_fmtasraid); 124} 125 126void 127remove_lvm_options() 128{ 129 /* 130 * No LVM available, remove the following menu entries: 131 */ 132 remove_menu_option(MENU_pmdiskentry, MSG_fmtaslvm); 133 remove_menu_option(MENU_pmpartentry, MSG_fmtaslvm); 134} 135 136void 137remove_gpt_options() 138{ 139 /* 140 * No GPT available, remove the following menu entries: 141 */ 142 remove_menu_option(MENU_pmdiskentry, MSG_switchgpt); 143 remove_menu_option(MENU_pmpartentry, MSG_switchgpt); 144} 145 146void 147remove_cgd_options() 148{ 149 /* 150 * No CGD available, remove the following menu entries: 151 */ 152 remove_menu_option(MENU_pmdiskentry, MSG_encrypt); 153 remove_menu_option(MENU_pmpartentry, MSG_encrypt); 154} 155 156} 157 158default y=12, no exit, scrollable; 159 160allow dynamic menus; 161allow dynamic messages; 162error action { 163 fprintf (stderr, "Could not initialize menu system, please check " 164 "your terminal type.\n"); 165 exit(4); 166}; 167 168menu selfskind, title MSG_Select_the_type, exitstring MSG_unchanged, y=6, x=30; 169 display action { 170 partinfo *p = arg; 171 switch (p->pi_fstype) { 172 case FS_UNUSED: menu->cursel = 0; break; 173 case FS_BSDFFS: 174 menu->cursel = p->pi_flags & PIF_FFSv2 ? 2 : 1; 175 break; 176 case FS_SWAP: menu->cursel = 3; break; 177 case FS_MSDOS: menu->cursel = 4; break; 178 case FS_BSDLFS: menu->cursel = 5; break; 179 default : menu->cursel = 6; break; 180 }; 181 }; 182 option "unused", exit, action 183 { memset(arg, 0, sizeof (partinfo)); }; 184 option "FFSv1", exit, action { set_ptype(arg, FS_BSDFFS, 0); }; 185 option "FFSv2", exit, action { set_ptype(arg, FS_BSDFFS, PIF_FFSv2); }; 186 option "swap", exit, action { set_ptype(arg, FS_SWAP, 0); }; 187 option "msdos", exit, action { set_ptype(arg, FS_MSDOS, 0); }; 188 option "LFS", exit, action { set_ptype(arg, FS_BSDLFS, 0); }; 189 option MSG_other_types, action 190 { extern int all_fstype_menu; 191 m->opts[m->cursel].opt_menu = all_fstype_menu; }; 192 193menu selbsize, title MSG_Select_file_system_block_size, y=10, x=40; 194 display action { 195 partinfo *pi = arg; 196 int b; 197 b = ffs(pi->pi_fsize * pi->pi_frag / 4096) - 1; 198 if (b < 0 || b >= menu->numopts) 199 b = 1; 200 menu->cursel = b; 201 }; 202 option "4096", exit, action { set_bsize(arg, 4096); }; 203 option "8192", exit, action { set_bsize(arg, 8192); }; 204 option "16384", exit, action { set_bsize(arg, 16384); }; 205 option "32768", exit, action { set_bsize(arg, 32768); }; 206 207menu selfsize, title MSG_Select_file_system_fragment_size, y=11, x=40; 208 display action { 209 partinfo *pi = arg; 210 int b; 211 b = ffs(pi->pi_fsize / 512) - 1; 212 if (b < 0 || b >= menu->numopts) 213 b = 1; 214 menu->cursel = b; 215 }; 216 option "512", exit, action { set_fsize(arg, 512); }; 217 option "1024", exit, action { set_fsize(arg, 1024); }; 218 option "2048", exit, action { set_fsize(arg, 2048); }; 219 option "4096", exit, action { set_fsize(arg, 4096); }; 220 option "8192", exit, action { set_fsize(arg, 8192); }; 221 option "16384", exit, action { set_fsize(arg, 16384); }; 222 option "32768", exit, action { set_fsize(arg, 32768); }; 223 224menu mountoptions, title MSG_toggle, y=5, x=30, exitstring MSG_unchanged; 225 display action { 226 static int actual_numopt; 227 if (!actual_numopt) 228 actual_numopt = menu->numopts; 229 menu->numopts = actual_numopt - 230 (((partinfo *)arg)->pi_fstype != FS_BSDFFS); 231 }; 232 option "log", exit, action 233 { ((partinfo *)arg)->pi_flags ^= PIF_LOG; }; 234 option "async", exit, action 235 { ((partinfo *)arg)->pi_flags ^= PIF_ASYNC; }; 236 option "noatime", exit, action 237 { ((partinfo *)arg)->pi_flags ^= PIF_NOATIME; }; 238 option "nodev", exit, action 239 { ((partinfo *)arg)->pi_flags ^= PIF_NODEV; }; 240 option "nodevmtime", exit, action 241 { ((partinfo *)arg)->pi_flags ^= PIF_NODEVMTIME; }; 242 option "noexec", exit, action 243 { ((partinfo *)arg)->pi_flags ^= PIF_NOEXEC; }; 244 option "nosuid", exit, action 245 { ((partinfo *)arg)->pi_flags ^= PIF_NOSUID; }; 246 247menu netbsd, title MSG_NetBSD_VERSION_Install_System, y=-1, 248 exit, exitstring MSG_Exit_Install_System; 249 display action { toplevel(); }; 250 option MSG_Install_NetBSD_to_hard_disk, 251 action { do_install(); }; 252 option MSG_Upgrade_NetBSD_on_a_hard_disk, 253 action { do_upgrade(); }; 254 option MSG_Re_install_sets_or_install_additional_sets, 255 action { do_reinstall_sets(); }; 256 option MSG_Reboot_the_computer, exit, 257 action (endwin) { system("/sbin/reboot -q"); }; 258 option MSG_Utility_menu, sub menu utility; 259 option MSG_Config_menu, action { do_configmenu(); }; 260 261menu utility, title MSG_NetBSD_VERSION_Utilities, exit, 262 exitstring MSG_exit_menu_generic; 263 display action { toplevel(); }; 264 option MSG_Run_bin_sh, 265 action (endwin) { system("/bin/sh"); }; 266 option MSG_Set_timezone, 267 action { set_timezone(); }; 268 option MSG_Configure_network, 269 action { 270 extern int network_up; 271 network_up = 0; 272 config_network(); 273 }; 274 option MSG_Partition_a_disk, action { partman_go = 1; partman(); }; 275 option MSG_Logging_functions, action { do_logging(); }; 276 option MSG_Color_scheme, sub menu colors; 277 option MSG_Halt_the_system, exit, 278 action (endwin) { system("/sbin/halt -q"); }; 279 280menu colors, title MSG_Color_scheme, exit, 281 exitstring MSG_exit_menu_generic; 282 option MSG_White_on_black, action { do_coloring(COLOR_WHITE,COLOR_BLACK); }; 283 option MSG_Black_on_white, action { do_coloring(COLOR_BLACK,COLOR_WHITE); }; 284 option MSG_White_on_blue, action { do_coloring(COLOR_WHITE,COLOR_BLUE); }; 285 option MSG_Green_on_black, action { do_coloring(COLOR_GREEN,COLOR_BLACK); }; 286 287 288menu yesno, y=-10; 289 display action { arg_rv *p = arg; 290 menu->title = p->arg ? p->arg : MSG_yes_or_no; }; 291 option MSG_Yes, exit, action { ((arg_rv*)arg)->rv = 1; }; 292 option MSG_No, exit, action { ((arg_rv*)arg)->rv = 0; }; 293 294menu noyes, y=-10; 295 display action { arg_rv *p = arg; 296 menu->title = p->arg ? p->arg : MSG_yes_or_no; }; 297 option MSG_No, exit, action { ((arg_rv*)arg)->rv = 0; }; 298 option MSG_Yes, exit, action { ((arg_rv*)arg)->rv = 1; }; 299 300menu ok, no shortcut, y=-10; 301 display action { menu->title = arg; }; 302 option MSG_Hit_enter_to_continue, exit; 303 304menu layout, sub menu, y=-1, title MSG_Choose_your_installation; 305 option MSG_Set_Sizes, exit, action { layoutkind = LY_SETNEW; }; 306 option MSG_Use_Existing, exit, action { layoutkind = LY_USEEXIST; }; 307 308menu sizechoice, sub menu, y=0, title MSG_Choose_your_size_specifier; 309 display action { 310 if (sizemult == pm->current_cylsize) 311 menu->cursel = 1; 312 else if (sizemult == 1) 313 menu->cursel = 2; 314 }; 315 option MSG_Megabytes, exit, action 316 { sizemult = MEG / pm->sectorsize; 317 multname = msg_string(MSG_megname); 318 }; 319 option MSG_Cylinders, exit, action 320 { sizemult = pm->current_cylsize; 321 multname = msg_string(MSG_cylname); 322 }; 323 option MSG_Sectors, exit, action 324 { sizemult = 1; 325 multname = msg_string(MSG_secname); 326 }; 327 328menu distmedium, title MSG_Select_medium, y=-5; 329 option MSG_cdrom, exit, action { *(int *)arg = get_via_cdrom(); }; 330 option MSG_http, exit, action { *(int *)arg = get_via_ftp("http"); }; 331 option MSG_ftp, exit, action { *(int *)arg = get_via_ftp("ftp"); }; 332 option MSG_nfs, exit, action { *(int *)arg = get_via_nfs(); }; 333 option MSG_floppy, exit, action { *(int *)arg = get_via_floppy(); }; 334 option MSG_local_fs, exit, action { *(int *)arg = get_via_localfs(); }; 335 option MSG_local_dir, exit, action { *(int *)arg = get_via_localdir();}; 336 option MSG_Skip_set, exit, action { *(int *)arg = SET_SKIP; }; 337 option MSG_Skip_group,exit, action { *(int *)arg = SET_SKIP_GROUP; }; 338 option MSG_Abandon, exit, action { *(int *)arg = SET_ABANDON; }; 339 340menu distset, title MSG_Select_your_distribution, exit, 341 no default exit, exitstring MSG_Abandon; 342 display action { msg_display (MSG_distset); }; 343 option MSG_Full_installation, exit, action { *(int *)arg = 1; init_set_status(0); }; 344 option MSG_Full_installation_nox, exit, action { *(int *)arg = 1; init_set_status(SFLAG_NOX); }; 345 option MSG_Minimal_installation, exit, action { *(int *)arg = 1; init_set_status(SFLAG_MINIMAL); }; 346 option MSG_Custom_installation, exit, action { *(int *)arg = 1; init_set_status(SFLAG_MINIMAL); customise_sets(); }; 347 348menu ftpsource, y=-4, x=0, w=70, no box, no clear, 349 exitstring MSG_Get_Distribution; 350 display action { msg_display(MSG_ftpsource, ((arg_rv*)arg)->arg); }; 351 option {src_legend(menu, MSG_Host, ftp.host);}, 352 action { src_prompt(MSG_Host, ftp.host, sizeof ftp.host); }; 353 option {src_legend(menu, MSG_Base_dir, ftp.dir);}, 354 action { src_prompt(MSG_Base_dir, ftp.dir, sizeof ftp.dir); }; 355 option {src_legend(menu, MSG_Set_dir_bin, set_dir_bin);}, 356 action { src_prompt(MSG_Set_dir_bin, set_dir_bin, sizeof set_dir_bin); }; 357 option {src_legend(menu, MSG_Set_dir_src, set_dir_src);}, 358 action { src_prompt(MSG_Set_dir_src, set_dir_src, sizeof set_dir_src); }; 359 option {src_legend(menu, MSG_User, ftp.user);}, 360 action { src_prompt(MSG_User, ftp.user, sizeof ftp.user); 361 ftp.pass[0] = 0; 362 }; 363 option {src_legend(menu, MSG_Password, 364 strcmp(ftp.user, "ftp") == 0 || ftp.pass[0] == 0 365 ? ftp.pass : msg_string(MSG_hidden));}, 366 action { if (strcmp(ftp.user, "ftp") == 0) 367 src_prompt(MSG_email, ftp.pass, sizeof ftp.pass); 368 else { 369 msg_prompt_noecho(MSG_Password, "", 370 ftp.pass, sizeof ftp.pass); 371 } 372 }; 373 option {src_legend(menu, MSG_Proxy, ftp.proxy);}, 374 action { src_prompt(MSG_Proxy, ftp.proxy, sizeof ftp.proxy); 375 if (strcmp(ftp.proxy, "") == 0) { 376 unsetenv("ftp_proxy"); 377 unsetenv("http_proxy"); 378 } else { 379 setenv("ftp_proxy", ftp.proxy, 1); 380 setenv("http_proxy", ftp.proxy, 1); 381 } 382 }; 383 option {src_legend(menu, MSG_Xfer_dir, xfer_dir);}, 384 action { src_prompt(MSG_Xfer_dir, xfer_dir, sizeof xfer_dir); }; 385 option {src_legend(menu, MSG_delete_xfer_file, 386 clean_xfer_dir ? MSG_Yes : MSG_No);}, 387 action {clean_xfer_dir = ask_yesno(MSG_delete_xfer_file); }; 388 option MSG_Configure_network, 389 action { 390 extern int network_up; 391 network_up = 0; 392 config_network(); 393 }; 394 option MSG_exit_menu_generic, exit, action { ((arg_rv*)arg)->rv = SET_RETRY; }; 395 396 397menu nfssource, y=-4, x=0, w=70, no box, no clear, 398 exitstring MSG_Get_Distribution; 399 display action { msg_display(MSG_nfssource); }; 400 option {src_legend(menu, MSG_Host, nfs_host);}, 401 action { src_prompt(MSG_Host, nfs_host, sizeof nfs_host); }; 402 option {src_legend(menu, MSG_Base_dir, nfs_dir);}, 403 action { src_prompt(MSG_Base_dir, nfs_dir, sizeof nfs_dir); }; 404 option {src_legend(menu, MSG_Set_dir_bin, set_dir_bin);}, 405 action { src_prompt(MSG_Set_dir_bin, set_dir_bin, sizeof set_dir_bin); }; 406 option {src_legend(menu, MSG_Set_dir_src, set_dir_src);}, 407 action { src_prompt(MSG_Set_dir_src, set_dir_src, sizeof set_dir_src); }; 408 option MSG_Configure_network, 409 action { 410 extern int network_up; 411 network_up = 0; 412 config_network(); 413 }; 414 option MSG_exit_menu_generic, exit, action { *((int*)arg) = SET_RETRY; }; 415 416menu fdremount, title MSG_What_do_you_want_to_do; 417 option MSG_Try_again, exit, action { *(int *)arg = SET_CONTINUE; }; 418 option MSG_Set_finished, exit, action { *(int *)arg = SET_OK; }; 419 option MSG_Abort_fetch, exit, action { *(int *)arg = SET_RETRY; }; 420 421menu fdok, title MSG_What_do_you_want_to_do; 422 option MSG_OK, exit, action { *(int *)arg = SET_CONTINUE; }; 423 option MSG_Set_finished, exit, action { *(int *)arg = SET_OK; }; 424 option MSG_Abort_fetch, exit, action { *(int *)arg = SET_RETRY; }; 425 426menu fd_type, title MSG_fd_type, y=16; 427 option "msdos", exit, action { fd_type = "msdos"; }; 428 option "ffs", exit, action { fd_type = "ffs"; }; 429.if ADOS_FLOPPY 430 option "ados", exit, action { fd_type = "ados"; }; 431.endif 432 433menu floppysource, y=-4, x=0, w=70, no box, no clear, exitstring MSG_Continue; 434 display action { msg_display(MSG_floppysource); }; 435 option {src_legend(menu, MSG_Device, fd_dev);}, 436 action { src_prompt(MSG_dev, fd_dev, sizeof fd_dev); }; 437 option {src_legend(menu, MSG_fd_type, fd_type);}, sub menu fd_type; 438 option {src_legend(menu, MSG_Xfer_dir, xfer_dir);}, 439 action { src_prompt(MSG_Xfer_dir, xfer_dir, sizeof xfer_dir); }; 440 option {src_legend(menu, MSG_delete_xfer_file, 441 clean_xfer_dir ? MSG_Yes : MSG_No);}, 442 action {clean_xfer_dir = ask_yesno(MSG_delete_xfer_file); }; 443 option MSG_exit_menu_generic, exit, action { *((int*)arg) = SET_RETRY; }; 444 445menu cdromsource, y=-4, x=0, w=70, no box, no clear, exitstring MSG_Continue; 446 display action { msg_display(MSG_cdromsource); }; 447 option {src_legend(menu, MSG_Device, cdrom_dev);}, 448 action { src_prompt(MSG_dev, cdrom_dev, sizeof cdrom_dev); }; 449 option {src_legend(menu, MSG_Set_dir_bin, set_dir_bin);}, 450 action { src_prompt(MSG_Set_dir_bin, set_dir_bin, sizeof set_dir_bin); }; 451 option {src_legend(menu, MSG_Set_dir_src, set_dir_src);}, 452 action { src_prompt(MSG_Set_dir_src, set_dir_src, sizeof set_dir_src); }; 453 option MSG_exit_menu_generic, exit, action { *((int*)arg) = SET_RETRY; }; 454 455menu localfssource, y=-4, x=0, w=70, no box, no clear, exitstring MSG_Continue; 456 display action { msg_display(MSG_localfssource); }; 457 option {src_legend(menu, MSG_Device, localfs_dev);}, 458 action { src_prompt(MSG_dev, localfs_dev, sizeof localfs_dev);}; 459 option {src_legend(menu, MSG_File_system, localfs_fs);}, 460 action { src_prompt(MSG_filesys, localfs_fs, sizeof localfs_fs); }; 461 option {src_legend(menu, MSG_Base_dir, localfs_dir);}, 462 action { src_prompt(MSG_Base_dir, localfs_dir, sizeof localfs_dir);}; 463 option {src_legend(menu, MSG_Set_dir_bin, set_dir_bin);}, 464 action { src_prompt(MSG_Set_dir_bin, set_dir_bin, sizeof set_dir_bin); }; 465 option {src_legend(menu, MSG_Set_dir_src, set_dir_src);}, 466 action { src_prompt(MSG_Set_dir_src, set_dir_src, sizeof set_dir_src); }; 467 option MSG_exit_menu_generic, exit, action { *((int*)arg) = SET_RETRY; }; 468 469menu localdirsource, y=-4, x=0, w=70, no box, no clear, exitstring MSG_Continue; 470 display action { msg_display(MSG_localdir); }; 471 option {src_legend(menu, MSG_Base_dir, localfs_dir);}, 472 action { src_prompt(MSG_Base_dir, localfs_dir, 60); }; 473 option {src_legend(menu, MSG_Set_dir_bin, set_dir_bin);}, 474 action { src_prompt(MSG_Set_dir_bin, set_dir_bin, 60); }; 475 option {src_legend(menu, MSG_Set_dir_src, set_dir_src);}, 476 action { src_prompt(MSG_Set_dir_src, set_dir_src, 60); }; 477 option MSG_exit_menu_generic, exit, action { *((int*)arg) = SET_RETRY; }; 478 479menu namesrv6, title MSG_Select_DNS_server; 480 option "google-public-dns-a.google.com (IPv4)", exit, action 481 { 482#ifdef INET6 483 strlcpy(net_namesvr, "8.8.8.8", 484 sizeof(net_namesvr)); 485 *((int*)arg) = 1; 486#else 487 *((int*)arg) = 0; 488#endif 489 }; 490 option "google-public-dns-b.google.com (IPv4)", exit, action 491 { 492#ifdef INET6 493 strlcpy(net_namesvr, "8.8.4.4", 494 sizeof(net_namesvr)); 495 *((int*)arg) = 1; 496#else 497 *((int*)arg) = 0; 498#endif 499 }; 500 option "google-public-dns-a.google.com (IPv6)", exit, action 501 { 502#ifdef INET6 503 strlcpy(net_namesvr, "2001:4860:4860::8888", 504 sizeof(net_namesvr)); 505 *((int*)arg) = 1; 506#else 507 *((int*)arg) = 0; 508#endif 509 }; 510 option "google-public-dns-b.google.com (IPv6)", exit, action 511 { 512#ifdef INET6 513 strlcpy(net_namesvr, "2001:4860:4860::8844", 514 sizeof(net_namesvr)); 515 *((int*)arg) = 1; 516#else 517 *((int*)arg) = 0; 518#endif 519 }; 520 option MSG_other, exit, action 521 { *((int*)arg) = 0; }; 522 523menu rootsh, title MSG_Root_shell, no clear; 524 option "/bin/sh", exit, action {*(const char **)arg = "/bin/sh";}; 525 option "/bin/ksh", exit, action {*(const char **)arg = "/bin/ksh";}; 526 option "/bin/csh", exit, action {*(const char **)arg = "/bin/csh";}; 527 528menu zeroconf, title "Zeroconf", no clear; 529 option "run mdnsd only", exit, action {*(const char **)arg = "mdnsd";}; 530 option "run mdnsd and resolve local names", exit, action {*(const char **) arg = "mdnsd+nsswitch";}; 531 option "do not run mdnsd", exit, action {*(const char **)arg = "No";}; 532 533menu binpkg, y=-4, x=0, w=70, no box, no clear, 534 exitstring MSG_Install_pkgin; 535 display action { msg_display(MSG_pkgpath); }; 536 option {src_legend(menu, MSG_Host, pkg.host);}, 537 action { src_prompt(MSG_Host, pkg.host, sizeof pkg.host); }; 538 option {src_legend(menu, MSG_Base_dir, pkg.dir);}, 539 action { src_prompt(MSG_Base_dir, pkg.dir, sizeof pkg.dir); }; 540 option {src_legend(menu, MSG_Pkg_dir, pkg_dir);}, 541 action { src_prompt(MSG_Pkg_dir, pkg_dir, sizeof pkg_dir); }; 542 option {src_legend(menu, MSG_User, pkg.user);}, 543 action { src_prompt(MSG_User, pkg.user, sizeof pkg.user); 544 pkg.pass[0] = 0; 545 }; 546 option {src_legend(menu, MSG_Password, 547 strcmp(pkg.user, "ftp") == 0 || pkg.pass[0] == 0 548 ? pkg.pass : msg_string(MSG_hidden));}, 549 action { if (strcmp(pkg.user, "ftp") == 0) 550 src_prompt(MSG_email, pkg.pass, sizeof pkg.pass); 551 else { 552 msg_prompt_noecho(MSG_Password, "", 553 pkg.pass, sizeof pkg.pass); 554 } 555 }; 556 option {src_legend(menu, MSG_Proxy, pkg.proxy);}, 557 action { src_prompt(MSG_Proxy, pkg.proxy, sizeof pkg.proxy); 558 if (strcmp(pkg.proxy, "") == 0) { 559 unsetenv("ftp_proxy"); 560 unsetenv("http_proxy"); 561 } else { 562 setenv("ftp_proxy", pkg.proxy, 1); 563 setenv("http_proxy", pkg.proxy, 1); 564 } 565 }; 566 option {src_legend(menu, "Additional packages", (char*)(((arg_rv*)arg)->arg)); }, /*TODO*/ 567 action { src_prompt("Additional packages", (char*)(((arg_rv*)arg)->arg), 568 sizeof(char) * STRSIZE); }; 569 option MSG_Configure_network, 570 action { 571 extern int network_up; 572 network_up = 0; 573 config_network(); 574 mnt_net_config(); 575 }; 576 option MSG_quit_pkgs_install, exit, action { ((arg_rv*)arg)->rv = SET_SKIP; }; 577 578menu pkgsrc, y=-4, x=0, w=70, no box, no clear, 579 exit, exitstring MSG_Install_pkgsrc; 580 display action { msg_display(MSG_pkgsrc); }; 581 option {src_legend(menu, MSG_Host, pkgsrc.host);}, 582 action { src_prompt(MSG_Host, pkgsrc.host, 583 sizeof pkgsrc.host); }; 584 option {src_legend(menu, MSG_Pkgsrc_dir, pkgsrc_dir);}, 585 action { src_prompt(MSG_Pkgsrc_dir, pkgsrc_dir, sizeof pkgsrc_dir); }; 586 option {src_legend(menu, MSG_User, pkgsrc.user);}, 587 action { src_prompt(MSG_User, pkgsrc.user, sizeof pkgsrc.user); 588 pkgsrc.pass[0] = 0; 589 }; 590 option {src_legend(menu, MSG_Password, 591 strcmp(pkgsrc.user, "ftp") == 0 || pkgsrc.pass[0] == 0 592 ? pkgsrc.pass : msg_string(MSG_hidden));}, 593 action { if (strcmp(pkgsrc.user, "ftp") == 0) 594 src_prompt(MSG_email, pkgsrc.pass, sizeof pkgsrc.pass); 595 else { 596 msg_prompt_noecho(MSG_Password, "", 597 pkgsrc.pass, sizeof pkgsrc.pass); 598 } 599 }; 600 option {src_legend(menu, MSG_Proxy, pkgsrc.proxy);}, 601 action { src_prompt(MSG_Proxy, pkgsrc.proxy, sizeof pkgsrc.proxy); 602 if (strcmp(pkgsrc.proxy, "") == 0) { 603 unsetenv("ftp_proxy"); 604 unsetenv("http_proxy"); 605 } else { 606 setenv("ftp_proxy", pkgsrc.proxy, 1); 607 setenv("http_proxy", pkgsrc.proxy, 1); 608 } 609 }; 610 option {src_legend(menu, MSG_Xfer_dir, xfer_dir);}, 611 action { src_prompt(MSG_Xfer_dir, xfer_dir, sizeof xfer_dir); }; 612 option {src_legend(menu, MSG_delete_xfer_file, 613 clean_xfer_dir ? MSG_Yes : MSG_No);}, 614 action {clean_xfer_dir = ask_yesno(MSG_delete_xfer_file); }; 615 option MSG_quit_pkgsrc, exit, action { *((int*)arg) = SET_SKIP;}; 616 617menu usersh, title MSG_User_shell, no clear; 618 option "/bin/sh", exit, action { ushell = "/bin/sh";}; 619 option "/bin/ksh", exit, action { ushell = "/bin/ksh";}; 620 option "/bin/csh", exit, action { ushell = "/bin/csh";}; 621 622 623menu pmdiskentry, x=50, y=5, exit, default exit; 624 option MSG_editbsdpart, exit, action { pm_make_bsd_partitions(pm); }; 625 option MSG_editmbr, exit, action { md_get_info(); 626 md_pre_disklabel(); 627 memset(&pm->bsdlabel, 0, sizeof pm->bsdlabel);}; 628 option MSG_switchgpt, exit, action { if (pm_gpt_convert(pm) == 0) 629 pm_partusage(pm, -1, 1); }; 630 option MSG_renamedisk, exit, action { pm->unsaved = 1; pm_rename(pm); }; 631 option MSG_fmtasraid, exit, action { pm->unsaved = 1; 632 pm_partusage(pm, -1, 1); 633 layoutkind = LY_NEWRAID; 634 md_make_bsd_partitions();}; 635 option MSG_fmtaslvm, exit, action { pm->unsaved = 1; 636 pm_partusage(pm, -1, 1); 637 layoutkind = LY_NEWLVM; 638 md_make_bsd_partitions(); }; 639 option MSG_encrypt, exit, action { pm->unsaved = 1; 640 pm_partusage(pm, -1, 1); 641 layoutkind = LY_NEWCGD; 642 md_make_bsd_partitions(); 643 pm_cgd_edit(0, &(part_entry_t) 644 {.dev_ptr = pm, .dev_num = PART_E} 645 ); }; 646 option MSG_setbootable, exit, action { pm->unsaved = 1; 647 pm->bootable = !pm->bootable; }; 648 option MSG_erase, next menu shred_modes; 649 option MSG_undo, exit, action { label_read(); pm->unsaved = 0; 650 pm_partusage(pm, -1, 1); }; 651 option MSG_unconfig, exit, action { if (pm_unconfigure(pm) == 0) 652 pm_partusage(pm, -1, 1); }; 653 654menu pmpartentry, x=50, y=5, exit, default exit; 655 option MSG_edit, exit, action { 656 pm->unsaved = 1; 657 int tpfs = pm->bsdlabel[*(int*)arg].pi_fstype; 658 int tplvm = pm->bsdlabel[*(int*)arg].lvmpv; 659 pm_editpart(*(int*)arg); 660 if (tpfs != pm->bsdlabel[*(int*)arg].pi_fstype || 661 tplvm != pm->bsdlabel[*(int*)arg].lvmpv) 662 /* Oops, partition type changed */ 663 pm_partusage(pm, *(int*)arg, 1); 664 }; 665 option MSG_fmtasraid, exit, action { 666 if (pm->gpt || pm->isspecial) { 667 process_menu(MENU_ok, __UNCONST(MSG_notsupported)); 668 return -1; 669 } 670 pm->unsaved = 1; 671 pm_partusage(pm, *(int*)arg, 1); 672 pm_setfstype(pm, *(int*)arg, FS_RAID); 673 }; 674 option MSG_fmtaslvm, exit, action { 675 if (pm->gpt || pm->isspecial) { 676 process_menu(MENU_ok, __UNCONST(MSG_notsupported)); 677 return -1; 678 } 679 pm->unsaved = 1; 680 pm_partusage(pm, *(int*)arg, 1); 681 pm_setfstype(pm, *(int*)arg, FS_BSDFFS); 682 pm->bsdlabel[*(int*)arg].lvmpv = 1; 683 }; 684 option MSG_encrypt, exit, action { 685 if (pm->gpt || pm->isspecial) { 686 process_menu(MENU_ok, __UNCONST(MSG_notsupported)); 687 return -1; 688 } 689 pm->unsaved = 1; 690 pm_partusage(pm, *(int*)arg, 1); 691 pm_setfstype(pm, *(int*)arg, FS_CGD); 692 pm_cgd_edit(0, 693 &(part_entry_t){.dev_ptr = pm, 694 .dev_num = *(int*)arg}); 695 }; 696 option MSG_erase, next menu shred_modes; 697 option MSG_doumount, exit, action { pm_umount(pm, *(int*)arg); }; 698 option MSG_Delete_partition, exit, action { 699 pm->unsaved = 1; 700 pm_partusage(pm, *(int*)arg, 1); 701 if (pm->isspecial) 702 pm_unconfigure(pm); 703 else 704 pm->bsdlabel[*(int*)arg].pi_fstype = FS_UNUSED; 705 }; 706 707menu pmgptentry, x=50, y=8, exit, default exit; 708 option MSG_editbsdpart, exit, action { pm_make_bsd_partitions(pm); }; 709 option MSG_switchmbr, exit, action { if (pm_gpt_convert(pm) == 0) 710 pm_partusage(pm, -1, 1); }; 711 option MSG_setbootable, exit, action { pm->unsaved = 1; 712 pm->bootable = !pm->bootable; }; 713 option MSG_erase, next menu shred_modes; 714 option MSG_undo, exit, action { label_read(); pm->unsaved = 0; 715 pm_partusage(pm, -1, 1); }; 716 option MSG_unconfig, exit, action { if (pm_unconfigure(pm) == 0) 717 pm_partusage(pm, -1, 1); }; 718 719menu shred_modes, x=50, y=5, exit, default exit; 720 option MSG_fillzeros, exit, 721 action { pm_shred(pm, *(int*)arg, SHRED_ZEROS); }; 722 option MSG_fillrandom, exit, 723 action { pm_shred(pm, *(int*)arg, SHRED_RANDOM); }; 724 option MSG_fillcrypto, exit, 725 action { pm_shred(pm, *(int*)arg, SHRED_CRYPTO); }; 726 727menu raidlevel; 728 option MSG_raid0, exit, action { *(int *)arg = 0; }; 729 option MSG_raid1, exit, action { *(int *)arg = 1; }; 730 option MSG_raid4, exit, action { *(int *)arg = 4; }; 731 option MSG_raid5, exit, action { *(int *)arg = 5; }; 732 733menu cgd_enctype; 734 option "aes-xts", exit, action { *(const char**)arg = "aes-xts"; }; 735 option "aes-cbc", exit, action { *(const char**)arg = "aes-cbc"; }; 736 option "3des-cbc", exit, action { *(const char**)arg = "3des-cbc"; }; 737 option "blowfish-cbc", exit, action { *(const char**)arg = "blowfish-cbc"; }; 738 739menu cgd_ivtype; 740 option "encblkno1", exit, action { *(const char**)arg = "encblkno1"; }; 741 option "encblkno8", exit, action { *(const char**)arg = "encblkno8"; }; 742 743menu cgd_keygentype; 744 option "pkcs5_pbkdf2/sha1", exit, action { *(const char**)arg = "pkcs5_pbkdf2/sha1"; }; 745 option "pkcs5_pbkdf2", exit, action { *(const char**)arg = "pkcs5_pbkdf2"; }; 746 option "storedkey", exit, action { *(const char**)arg = "storedkey"; }; 747 option "randomkey", exit, action { *(const char**)arg = "randomkey"; }; 748 option "urandomkey", exit, action { *(const char**)arg = "urandomkey"; }; 749 option "shell_cmd", exit, action { *(const char**)arg = "shell_cmd"; }; 750 751menu cgd_verifytype; 752 option "none", exit, action { *(const char**)arg = "none"; }; 753 option "disklabel", exit, action { *(const char**)arg = "disklabel"; }; 754 option "ffs", exit, action { *(const char**)arg = "ffs"; }; 755 option "re-enter", exit, action { *(const char**)arg = "re-enter"; }; 756