summaryrefslogtreecommitdiff
path: root/gpxe/src/hci
diff options
context:
space:
mode:
Diffstat (limited to 'gpxe/src/hci')
-rw-r--r--gpxe/src/hci/commands/autoboot_cmd.c27
-rw-r--r--gpxe/src/hci/commands/config_cmd.c39
-rw-r--r--gpxe/src/hci/commands/dhcp_cmd.c190
-rw-r--r--gpxe/src/hci/commands/digest_cmd.c120
-rw-r--r--gpxe/src/hci/commands/gdbstub_cmd.c105
-rw-r--r--gpxe/src/hci/commands/ifmgmt_cmd.c180
-rw-r--r--gpxe/src/hci/commands/image_cmd.c608
-rw-r--r--gpxe/src/hci/commands/iwmgmt_cmd.c69
-rw-r--r--gpxe/src/hci/commands/login_cmd.c29
-rw-r--r--gpxe/src/hci/commands/nvo_cmd.c79
-rw-r--r--gpxe/src/hci/commands/route_cmd.c87
-rw-r--r--gpxe/src/hci/commands/sanboot_cmd.c70
-rw-r--r--gpxe/src/hci/commands/time_cmd.c84
-rw-r--r--gpxe/src/hci/editstring.c192
-rw-r--r--gpxe/src/hci/mucurses/alert.c18
-rw-r--r--gpxe/src/hci/mucurses/ansi_screen.c74
-rw-r--r--gpxe/src/hci/mucurses/clear.c90
-rw-r--r--gpxe/src/hci/mucurses/colour.c66
-rw-r--r--gpxe/src/hci/mucurses/cursor.h37
-rw-r--r--gpxe/src/hci/mucurses/edging.c111
-rw-r--r--gpxe/src/hci/mucurses/kb.c143
-rw-r--r--gpxe/src/hci/mucurses/mucurses.c147
-rw-r--r--gpxe/src/hci/mucurses/mucurses.h23
-rw-r--r--gpxe/src/hci/mucurses/print.c86
-rw-r--r--gpxe/src/hci/mucurses/print_nadv.c26
-rw-r--r--gpxe/src/hci/mucurses/slk.c363
-rw-r--r--gpxe/src/hci/mucurses/widgets/editbox.c103
-rw-r--r--gpxe/src/hci/mucurses/winattrs.c133
-rw-r--r--gpxe/src/hci/mucurses/windows.c158
-rw-r--r--gpxe/src/hci/mucurses/wininit.c37
-rw-r--r--gpxe/src/hci/readline.c119
-rw-r--r--gpxe/src/hci/shell.c102
-rw-r--r--gpxe/src/hci/shell_banner.c64
-rw-r--r--gpxe/src/hci/strerror.c122
-rw-r--r--gpxe/src/hci/tui/login_ui.c137
-rw-r--r--gpxe/src/hci/tui/settings_ui.c427
-rw-r--r--gpxe/src/hci/wireless_errors.c118
37 files changed, 0 insertions, 4583 deletions
diff --git a/gpxe/src/hci/commands/autoboot_cmd.c b/gpxe/src/hci/commands/autoboot_cmd.c
deleted file mode 100644
index 95b172d1..00000000
--- a/gpxe/src/hci/commands/autoboot_cmd.c
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <stdio.h>
-#include <gpxe/command.h>
-#include <usr/autoboot.h>
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-static int autoboot_exec ( int argc, char **argv ) {
-
- if ( argc != 1 ) {
- printf ( "Usage:\n"
- " %s\n"
- "\n"
- "Attempts to boot the system\n",
- argv[0] );
- return 1;
- }
-
- autoboot();
-
- /* Can never return success by definition */
- return 1;
-}
-
-struct command autoboot_command __command = {
- .name = "autoboot",
- .exec = autoboot_exec,
-};
diff --git a/gpxe/src/hci/commands/config_cmd.c b/gpxe/src/hci/commands/config_cmd.c
deleted file mode 100644
index a9e1f169..00000000
--- a/gpxe/src/hci/commands/config_cmd.c
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <string.h>
-#include <stdio.h>
-#include <gpxe/command.h>
-#include <gpxe/settings.h>
-#include <gpxe/settings_ui.h>
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-static int config_exec ( int argc, char **argv ) {
- char *settings_name;
- struct settings *settings;
- int rc;
-
- if ( argc > 2 ) {
- printf ( "Usage: %s [scope]\n"
- "Opens the option configuration console\n", argv[0] );
- return 1;
- }
-
- settings_name = ( ( argc == 2 ) ? argv[1] : "" );
- settings = find_settings ( settings_name );
- if ( ! settings ) {
- printf ( "No such scope \"%s\"\n", settings_name );
- return 1;
- }
-
- if ( ( rc = settings_ui ( settings ) ) != 0 ) {
- printf ( "Could not save settings: %s\n",
- strerror ( rc ) );
- return 1;
- }
-
- return 0;
-}
-
-struct command config_command __command = {
- .name = "config",
- .exec = config_exec,
-};
diff --git a/gpxe/src/hci/commands/dhcp_cmd.c b/gpxe/src/hci/commands/dhcp_cmd.c
deleted file mode 100644
index 96aac8d4..00000000
--- a/gpxe/src/hci/commands/dhcp_cmd.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (C) 2007 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <stddef.h>
-#include <string.h>
-#include <assert.h>
-#include <getopt.h>
-#include <gpxe/netdevice.h>
-#include <gpxe/in.h>
-#include <gpxe/command.h>
-#include <usr/dhcpmgmt.h>
-
-/** @file
- *
- * DHCP management commands
- *
- */
-
-/**
- * "dhcp" command syntax message
- *
- * @v argv Argument list
- */
-static void dhcp_syntax ( char **argv ) {
- printf ( "Usage:\n"
- " %s <interface>\n"
- "\n"
- "Configure a network interface using DHCP\n",
- argv[0] );
-}
-
-/**
- * The "dhcp" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Exit code
- */
-static int dhcp_exec ( int argc, char **argv ) {
- static struct option longopts[] = {
- { "help", 0, NULL, 'h' },
- { NULL, 0, NULL, 0 },
- };
- const char *netdev_txt;
- struct net_device *netdev;
- int c;
- int rc;
-
- /* Parse options */
- while ( ( c = getopt_long ( argc, argv, "h", longopts, NULL ) ) >= 0 ){
- switch ( c ) {
- case 'h':
- /* Display help text */
- default:
- /* Unrecognised/invalid option */
- dhcp_syntax ( argv );
- return 1;
- }
- }
-
- /* Need exactly one interface name remaining after the options */
- if ( optind != ( argc - 1 ) ) {
- dhcp_syntax ( argv );
- return 1;
- }
- netdev_txt = argv[optind];
-
- /* Parse arguments */
- netdev = find_netdev ( netdev_txt );
- if ( ! netdev ) {
- printf ( "No such interface: %s\n", netdev_txt );
- return 1;
- }
-
- /* Perform DHCP */
- if ( ( rc = dhcp ( netdev ) ) != 0 ) {
- printf ( "Could not configure %s: %s\n", netdev->name,
- strerror ( rc ) );
- return 1;
- }
-
- return 0;
-}
-
-/**
- * "pxebs" command syntax message
- *
- * @v argv Argument list
- */
-static void pxebs_syntax ( char **argv ) {
- printf ( "Usage:\n"
- " %s <interface> <server_type>\n"
- "\n"
- "Perform PXE Boot Server discovery\n",
- argv[0] );
-}
-
-/**
- * The "pxebs" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Exit code
- */
-static int pxebs_exec ( int argc, char **argv ) {
- static struct option longopts[] = {
- { "help", 0, NULL, 'h' },
- { NULL, 0, NULL, 0 },
- };
- const char *netdev_txt;
- const char *pxe_type_txt;
- struct net_device *netdev;
- unsigned int pxe_type;
- char *end;
- int c;
- int rc;
-
- /* Parse options */
- while ( ( c = getopt_long ( argc, argv, "h", longopts, NULL ) ) >= 0 ){
- switch ( c ) {
- case 'h':
- /* Display help text */
- default:
- /* Unrecognised/invalid option */
- pxebs_syntax ( argv );
- return 1;
- }
- }
- if ( optind != ( argc - 2 ) ) {
- pxebs_syntax ( argv );
- return 1;
- }
- netdev_txt = argv[optind];
- pxe_type_txt = argv[ optind + 1 ];
-
- /* Parse arguments */
- netdev = find_netdev ( netdev_txt );
- if ( ! netdev ) {
- printf ( "No such interface: %s\n", netdev_txt );
- return 1;
- }
- pxe_type = strtoul ( pxe_type_txt, &end, 0 );
- if ( *end ) {
- printf ( "Bad server type: %s\n", pxe_type_txt );
- return 1;
- }
-
- /* Perform Boot Server Discovery */
- if ( ( rc = pxebs ( netdev, pxe_type ) ) != 0 ) {
- printf ( "Could not discover boot server on %s: %s\n",
- netdev->name, strerror ( rc ) );
- return 1;
- }
-
- return 0;
-}
-
-/** DHCP management commands */
-struct command dhcp_commands[] __command = {
- {
- .name = "dhcp",
- .exec = dhcp_exec,
- },
- {
- .name = "pxebs",
- .exec = pxebs_exec,
- },
-};
diff --git a/gpxe/src/hci/commands/digest_cmd.c b/gpxe/src/hci/commands/digest_cmd.c
deleted file mode 100644
index bc6e5516..00000000
--- a/gpxe/src/hci/commands/digest_cmd.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2009 Daniel Verkamp <daniel@drv.nu>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <gpxe/command.h>
-#include <gpxe/image.h>
-#include <gpxe/crypto.h>
-
-#include <gpxe/md5.h>
-#include <gpxe/sha1.h>
-
-/**
- * "digest" command syntax message
- *
- * @v argv Argument list
- */
-static void digest_syntax ( char **argv ) {
- printf ( "Usage:\n"
- " %s <image name>\n"
- "\n"
- "Calculate the %s of an image\n",
- argv[0], argv[0] );
-}
-
-/**
- * The "digest" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @v digest Digest algorithm
- * @ret rc Exit code
- */
-static int digest_exec ( int argc, char **argv,
- struct digest_algorithm *digest ) {
- const char *image_name;
- struct image *image;
- uint8_t digest_ctx[digest->ctxsize];
- uint8_t digest_out[digest->digestsize];
- uint8_t buf[128];
- size_t offset;
- size_t len;
- size_t frag_len;
- int i;
- unsigned j;
-
- if ( argc < 2 ||
- !strcmp ( argv[1], "--help" ) ||
- !strcmp ( argv[1], "-h" ) ) {
- digest_syntax ( argv );
- return 1;
- }
-
- for ( i = 1 ; i < argc ; i++ ) {
- image_name = argv[i];
-
- /* find image */
- image = find_image ( image_name );
- if ( ! image ) {
- printf ( "No such image: %s\n", image_name );
- continue;
- }
- offset = 0;
- len = image->len;
-
- /* calculate digest */
- digest_init ( digest, digest_ctx );
- while ( len ) {
- frag_len = len;
- if ( frag_len > sizeof ( buf ) )
- frag_len = sizeof ( buf );
- copy_from_user ( buf, image->data, offset, frag_len );
- digest_update ( digest, digest_ctx, buf, frag_len );
- len -= frag_len;
- offset += frag_len;
- }
- digest_final ( digest, digest_ctx, digest_out );
-
- for ( j = 0 ; j < sizeof ( digest_out ) ; j++ )
- printf ( "%02x", digest_out[j] );
-
- printf ( " %s\n", image->name );
- }
-
- return 0;
-}
-
-static int md5sum_exec ( int argc, char **argv ) {
- return digest_exec ( argc, argv, &md5_algorithm );
-}
-
-static int sha1sum_exec ( int argc, char **argv ) {
- return digest_exec ( argc, argv, &sha1_algorithm );
-}
-
-struct command md5sum_command __command = {
- .name = "md5sum",
- .exec = md5sum_exec,
-};
-
-struct command sha1sum_command __command = {
- .name = "sha1sum",
- .exec = sha1sum_exec,
-};
diff --git a/gpxe/src/hci/commands/gdbstub_cmd.c b/gpxe/src/hci/commands/gdbstub_cmd.c
deleted file mode 100644
index 74167525..00000000
--- a/gpxe/src/hci/commands/gdbstub_cmd.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2008 Stefan Hajnoczi <stefanha@gmail.com>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <stdio.h>
-#include <getopt.h>
-#include <gpxe/command.h>
-#include <gpxe/gdbstub.h>
-
-/** @file
- *
- * GDB stub command
- *
- */
-
-/**
- * "gdbstub" command syntax message
- *
- * @v argv Argument list
- */
-static void gdbstub_syntax ( char **argv ) {
- printf ( "Usage:\n"
- " %s <transport> [<options>...]\n"
- "\n"
- "Start remote debugging using one of the following transports:\n"
- " serial use serial port (if compiled in)\n"
- " udp <interface> use UDP over network interface (if compiled in)\n",
- argv[0] );
-}
-
-/**
- * The "gdbstub" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Exit code
- */
-static int gdbstub_exec ( int argc, char **argv ) {
- static struct option longopts[] = {
- { "help", 0, NULL, 'h' },
- { NULL, 0, NULL, 0 },
- };
- const char *trans_name;
- struct gdb_transport *trans;
- int c;
-
- /* Parse options */
- while ( ( c = getopt_long ( argc, argv, "h", longopts, NULL ) ) >= 0 ){
- switch ( c ) {
- case 'h':
- /* Display help text */
- default:
- /* Unrecognised/invalid option */
- gdbstub_syntax ( argv );
- return 1;
- }
- }
-
- /* At least one argument */
- if ( optind == argc ) {
- gdbstub_syntax ( argv );
- return 1;
- }
-
- trans_name = argv[optind++];
-
- /* Initialise transport */
- trans = find_gdb_transport ( trans_name );
- if ( !trans ) {
- printf ( "%s: no such transport (is it compiled in?)\n", trans_name );
- return 1;
- }
-
- if ( trans->init ) {
- if ( trans->init ( argc - optind, &argv[optind] ) != 0 ) {
- return 1;
- }
- }
-
- /* Enter GDB stub */
- gdbstub_start ( trans );
- return 0;
-}
-
-/** GDB stub commands */
-struct command gdbstub_commands[] __command = {
- {
- .name = "gdbstub",
- .exec = gdbstub_exec,
- },
-};
diff --git a/gpxe/src/hci/commands/ifmgmt_cmd.c b/gpxe/src/hci/commands/ifmgmt_cmd.c
deleted file mode 100644
index ad069f14..00000000
--- a/gpxe/src/hci/commands/ifmgmt_cmd.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (C) 2007 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#include <stdio.h>
-#include <getopt.h>
-#include <gpxe/netdevice.h>
-#include <gpxe/command.h>
-#include <usr/ifmgmt.h>
-#include <hci/ifmgmt_cmd.h>
-
-/** @file
- *
- * Network interface management commands
- *
- */
-
-/** Options shared by all if<xxx> commands */
-static struct option ifcommon_longopts[] = {
- { "help", 0, NULL, 'h' },
- { NULL, 0, NULL, 0 },
-};
-
-/**
- * Print syntax of if<xxx> command
- *
- * @v argv Command arguments
- * @v verb Verb describing the action of the command
- */
-static void ifcommon_syntax ( char **argv, const char *verb ) {
- printf ( "Usage:\n"
- " %s [<interface>] [<interface>...]\n"
- "\n"
- "%s the specified network interfaces\n",
- argv[0], verb );
-}
-
-/**
- * Execute if<xxx> command over all network devices
- *
- * @v payload Command to execute
- * @ret rc Exit code
- */
-static int ifcommon_do_all ( int ( * payload ) ( struct net_device * ) ) {
- struct net_device *netdev;
- int rc = 0;
-
- /* Execute payload for each network device */
- for_each_netdev ( netdev ) {
- if ( payload ( netdev ) != 0 )
- rc = 1;
- }
- return rc;
-}
-
-/**
- * Execute if<xxx> command over list of network devices
- *
- * @v payload Command to execute
- * @ret rc Exit code
- */
-static int ifcommon_do_list ( int ( * payload ) ( struct net_device * ),
- char **list, unsigned int count ) {
- const char *netdev_name;
- struct net_device *netdev;
- int rc = 0;
-
- while ( count-- ) {
- netdev_name = *(list++);
- netdev = find_netdev ( netdev_name );
- if ( ! netdev ) {
- printf ( "%s: no such interface\n", netdev_name );
- rc = 1;
- continue;
- }
- if ( payload ( netdev ) != 0 )
- rc = 1;
- }
- return rc;
-}
-
-/**
- * Execute if<xxx> command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @v payload Command to execute
- * @v verb Verb describing the action of the command
- * @ret rc Exit code
- */
-int ifcommon_exec ( int argc, char **argv,
- int ( * payload ) ( struct net_device * ),
- const char *verb ) {
- int c;
-
- /* Parse options */
- while ( ( c = getopt_long ( argc, argv, "h", ifcommon_longopts,
- NULL ) ) >= 0 ) {
- switch ( c ) {
- case 'h':
- /* Display help text */
- default:
- /* Unrecognised/invalid option */
- ifcommon_syntax ( argv, verb );
- return 1;
- }
- }
-
- if ( optind == argc ) {
- return ifcommon_do_all ( payload );
- } else {
- return ifcommon_do_list ( payload, &argv[optind],
- ( argc - optind ) );
- }
-}
-
-/* "ifopen" command */
-
-static int ifopen_payload ( struct net_device *netdev ) {
- return ifopen ( netdev );
-}
-
-static int ifopen_exec ( int argc, char **argv ) {
- return ifcommon_exec ( argc, argv, ifopen_payload, "Open" );
-}
-
-/* "ifclose" command */
-
-static int ifclose_payload ( struct net_device *netdev ) {
- ifclose ( netdev );
- return 0;
-}
-
-static int ifclose_exec ( int argc, char **argv ) {
- return ifcommon_exec ( argc, argv, ifclose_payload, "Close" );
-}
-
-/* "ifstat" command */
-
-static int ifstat_payload ( struct net_device *netdev ) {
- ifstat ( netdev );
- return 0;
-}
-
-static int ifstat_exec ( int argc, char **argv ) {
- return ifcommon_exec ( argc, argv,
- ifstat_payload, "Display status of" );
-}
-
-/** Interface management commands */
-struct command ifmgmt_commands[] __command = {
- {
- .name = "ifopen",
- .exec = ifopen_exec,
- },
- {
- .name = "ifclose",
- .exec = ifclose_exec,
- },
- {
- .name = "ifstat",
- .exec = ifstat_exec,
- },
-};
diff --git a/gpxe/src/hci/commands/image_cmd.c b/gpxe/src/hci/commands/image_cmd.c
deleted file mode 100644
index 33994b51..00000000
--- a/gpxe/src/hci/commands/image_cmd.c
+++ /dev/null
@@ -1,608 +0,0 @@
-/*
- * Copyright (C) 2007 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <libgen.h>
-#include <getopt.h>
-#include <gpxe/image.h>
-#include <gpxe/command.h>
-#include <usr/imgmgmt.h>
-
-/** @file
- *
- * Image management commands
- *
- */
-
-enum image_action {
- IMG_FETCH = 0,
- IMG_LOAD,
- IMG_EXEC,
-};
-
-/**
- * Fill in image command line
- *
- * @v image Image
- * @v nargs Argument count
- * @v args Argument list
- * @ret rc Return status code
- */
-static int imgfill_cmdline ( struct image *image, unsigned int nargs,
- char **args ) {
- size_t len;
- unsigned int i;
-
- /* Determine total length of command line */
- len = 1; /* NUL */
- for ( i = 0 ; i < nargs ; i++ )
- len += ( 1 /* possible space */ + strlen ( args[i] ) );
-
- {
- char buf[len];
- char *ptr = buf;
-
- /* Assemble command line */
- buf[0] = '\0';
- for ( i = 0 ; i < nargs ; i++ ) {
- ptr += sprintf ( ptr, "%s%s", ( i ? " " : "" ),
- args[i] );
- }
- assert ( ptr < ( buf + len ) );
-
- return image_set_cmdline ( image, buf );
- }
-}
-
-/**
- * "imgfetch"/"module"/"kernel" command syntax message
- *
- * @v argv Argument list
- */
-static void imgfetch_core_syntax ( char **argv, enum image_action action ) {
- static const char *actions[] = {
- [IMG_FETCH] = "Fetch",
- [IMG_LOAD] = "Fetch and load",
- [IMG_EXEC] = "Fetch and execute",
- };
-
- printf ( "Usage:\n"
- " %s [-n|--name <name>] filename [arguments...]\n"
- "\n"
- "%s executable/loadable image\n",
- argv[0], actions[action] );
-}
-
-/**
- * The "imgfetch"/"module"/"kernel" command body
- *
- * @v image_type Image type to assign (or NULL)
- * @v load Image will be automatically loaded after fetching
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Return status code
- */
-static int imgfetch_core_exec ( struct image_type *image_type,
- enum image_action action,
- int argc, char **argv ) {
- static struct option longopts[] = {
- { "help", 0, NULL, 'h' },
- { "name", required_argument, NULL, 'n' },
- { NULL, 0, NULL, 0 },
- };
- struct image *image;
- const char *name = NULL;
- char *filename;
- int ( * image_register ) ( struct image *image );
- int c;
- int rc;
-
- /* Parse options */
- while ( ( c = getopt_long ( argc, argv, "hn:",
- longopts, NULL ) ) >= 0 ) {
- switch ( c ) {
- case 'n':
- /* Set image name */
- name = optarg;
- break;
- case 'h':
- /* Display help text */
- default:
- /* Unrecognised/invalid option */
- imgfetch_core_syntax ( argv, action );
- return -EINVAL;
- }
- }
-
- /* Need at least a filename remaining after the options */
- if ( optind == argc ) {
- imgfetch_core_syntax ( argv, action );
- return -EINVAL;
- }
- filename = argv[optind++];
- if ( ! name )
- name = basename ( filename );
-
- /* Allocate image */
- image = alloc_image();
- if ( ! image ) {
- printf ( "%s\n", strerror ( -ENOMEM ) );
- return -ENOMEM;
- }
-
- /* Fill in image name */
- if ( name ) {
- if ( ( rc = image_set_name ( image, name ) ) != 0 )
- return rc;
- }
-
- /* Set image type (if specified) */
- image->type = image_type;
-
- /* Fill in command line */
- if ( ( rc = imgfill_cmdline ( image, ( argc - optind ),
- &argv[optind] ) ) != 0 )
- return rc;
-
- /* Fetch the image */
- switch ( action ) {
- case IMG_FETCH:
- image_register = register_image;
- break;
- case IMG_LOAD:
- image_register = register_and_autoload_image;
- break;
- case IMG_EXEC:
- image_register = register_and_autoexec_image;
- break;
- default:
- assert ( 0 );
- return -EINVAL;
- }
- if ( ( rc = imgfetch ( image, filename, image_register ) ) != 0 ) {
- printf ( "Could not fetch %s: %s\n",
- filename, strerror ( rc ) );
- image_put ( image );
- return rc;
- }
-
- image_put ( image );
- return 0;
-}
-
-/**
- * The "imgfetch"/"module" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Exit code
- */
-static int imgfetch_exec ( int argc, char **argv ) {
- int rc;
-
- if ( ( rc = imgfetch_core_exec ( NULL, IMG_FETCH,
- argc, argv ) ) != 0 )
- return rc;
-
- return 0;
-}
-
-/**
- * The "kernel" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Exit code
- */
-static int kernel_exec ( int argc, char **argv ) {
- int rc;
-
- if ( ( rc = imgfetch_core_exec ( NULL, IMG_LOAD, argc, argv ) ) != 0 )
- return rc;
-
- return 0;
-}
-
-/**
- * The "chain" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Exit code
- */
-static int chain_exec ( int argc, char **argv) {
- int rc;
-
- if ( ( rc = imgfetch_core_exec ( NULL, IMG_EXEC, argc, argv ) ) != 0 )
- return rc;
-
- return 0;
-}
-
-/**
- * "imgload" command syntax message
- *
- * @v argv Argument list
- */
-static void imgload_syntax ( char **argv ) {
- printf ( "Usage:\n"
- " %s <image name>\n"
- "\n"
- "Load executable/loadable image\n",
- argv[0] );
-}
-
-/**
- * The "imgload" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Exit code
- */
-static int imgload_exec ( int argc, char **argv ) {
- static struct option longopts[] = {
- { "help", 0, NULL, 'h' },
- { NULL, 0, NULL, 0 },
- };
- struct image *image;
- const char *name;
- int c;
- int rc;
-
- /* Parse options */
- while ( ( c = getopt_long ( argc, argv, "h", longopts, NULL ) ) >= 0 ){
- switch ( c ) {
- case 'h':
- /* Display help text */
- default:
- /* Unrecognised/invalid option */
- imgload_syntax ( argv );
- return 1;
- }
- }
-
- /* Need exactly one image name remaining after the options */
- if ( optind != ( argc - 1 ) ) {
- imgload_syntax ( argv );
- return 1;
- }
- name = argv[optind];
-
- /* Load all specified images */
- image = find_image ( name );
- if ( ! image ) {
- printf ( "No such image: %s\n", name );
- return 1;
- }
- if ( ( rc = imgload ( image ) ) != 0 ) {
- printf ( "Could not load %s: %s\n", name, strerror ( rc ) );
- return rc;
- }
-
- return 0;
-}
-
-/**
- * "imgargs" command syntax message
- *
- * @v argv Argument list
- */
-static void imgargs_syntax ( char **argv ) {
- printf ( "Usage:\n"
- " %s <image name> [<arguments>...]\n"
- "\n"
- "Set arguments for executable/loadable image\n",
- argv[0] );
-}
-
-/**
- * The "imgargs" command body
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Exit code
- */
-static int imgargs_exec ( int argc, char **argv ) {
- static struct option longopts[] = {
- { "help", 0, NULL, 'h' },
- { NULL, 0, NULL, 0 },
- };
- struct image *image;
- const char *name;
- int c;
- int rc;
-
- /* Parse options */
- while ( ( c = getopt_long ( argc, argv, "h", longopts, NULL ) ) >= 0 ){
- switch ( c ) {
- case 'h':
- /* Display help text */
- default:
- /* Unrecognised/invalid option */
- imgargs_syntax ( argv );
- return 1;
- }
- }
-
- /* Need at least an image name remaining after the options */
- if ( optind == argc ) {
- imgargs_syntax ( argv );
- return 1;
- }
- name = argv[optind++];
-
- /* Fill in command line */
- image = find_image ( name );
- if ( ! image ) {
- printf ( "No such image: %s\n", name );
- return 1;
- }
- if ( ( rc = imgfill_cmdline ( image, ( argc - optind ),
- &argv[optind] ) ) != 0 )
- return rc;
-
-
- return 0;
-}
-
-/**
- * "imgexec" command syntax message
- *
- * @v argv Argument list
- */
-static void imgexec_syntax ( char **argv ) {
- printf ( "Usage:\n"
- " %s <image name>\n"
- "\n"
- "Execute executable/loadable image\n",
- argv[0] );
-}
-
-/**
- * The "imgexec" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Exit code
- */
-static int imgexec_exec ( int argc, char **argv ) {
- static struct option longopts[] = {
- { "help", 0, NULL, 'h' },
- { NULL, 0, NULL, 0 },
- };
- struct image *image;
- const char *name = NULL;
- int c;
- int rc;
-
- /* Parse options */
- while ( ( c = getopt_long ( argc, argv, "h", longopts, NULL ) ) >= 0 ){
- switch ( c ) {
- case 'h':
- /* Display help text */
- default:
- /* Unrecognised/invalid option */
- imgexec_syntax ( argv );
- return 1;
- }
- }
-
- /* Need no more than one image name */
- if ( optind != argc )
- name = argv[optind++];
- if ( optind != argc ) {
- imgexec_syntax ( argv );
- return 1;
- }
-
- /* Execute specified image */
- if ( name ) {
- image = find_image ( name );
- if ( ! image ) {
- printf ( "No such image: %s\n", name );
- return 1;
- }
- } else {
- image = imgautoselect();
- if ( ! image ) {
- printf ( "No (unique) loaded image\n" );
- return 1;
- }
- }
-
- if ( ( rc = imgexec ( image ) ) != 0 ) {
- printf ( "Could not execute %s: %s\n",
- image->name, strerror ( rc ) );
- return 1;
- }
-
- return 0;
-}
-
-/**
- * "imgstat" command syntax message
- *
- * @v argv Argument list
- */
-static void imgstat_syntax ( char **argv ) {
- printf ( "Usage:\n"
- " %s\n"
- "\n"
- "List executable/loadable images\n",
- argv[0] );
-}
-
-/**
- * The "imgstat" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Exit code
- */
-static int imgstat_exec ( int argc, char **argv ) {
- static struct option longopts[] = {
- { "help", 0, NULL, 'h' },
- { NULL, 0, NULL, 0 },
- };
- struct image *image;
- int c;
-
- /* Parse options */
- while ( ( c = getopt_long ( argc, argv, "h", longopts, NULL ) ) >= 0 ){
- switch ( c ) {
- case 'h':
- /* Display help text */
- default:
- /* Unrecognised/invalid option */
- imgstat_syntax ( argv );
- return 1;
- }
- }
-
- /* No arguments */
- if ( optind != argc ) {
- imgstat_syntax ( argv );
- return 1;
- }
-
- /* Show status of all images */
- for_each_image ( image ) {
- imgstat ( image );
- }
- return 0;
-}
-
-/**
- * "imgstat" command syntax message
- *
- * @v argv Argument list
- */
-static void imgfree_syntax ( char **argv ) {
- printf ( "Usage:\n"
- " %s [<image name>]\n"
- "\n"
- "Free one or all executable/loadable images\n",
- argv[0] );
-}
-
-/**
- * The "imgfree" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Exit code
- */
-static int imgfree_exec ( int argc, char **argv ) {
- static struct option longopts[] = {
- { "help", 0, NULL, 'h' },
- { NULL, 0, NULL, 0 },
- };
- struct image *image;
- struct image *tmp;
- const char *name = NULL;
- int c;
-
- /* Parse options */
- while ( ( c = getopt_long ( argc, argv, "h", longopts, NULL ) ) >= 0 ){
- switch ( c ) {
- case 'h':
- /* Display help text */
- default:
- /* Unrecognised/invalid option */
- imgfree_syntax ( argv );
- return 1;
- }
- }
-
- /* Need no more than one image name */
- if ( optind != argc )
- name = argv[optind++];
- if ( optind != argc ) {
- imgfree_syntax ( argv );
- return 1;
- }
-
- if ( name ) {
- /* Free specified image (may leak) */
- image = find_image ( name );
- if ( ! image ) {
- printf ( "No such image: %s\n", name );
- return 1;
- }
- imgfree ( image );
- } else {
- /* Free all images */
- list_for_each_entry_safe ( image, tmp, &images, list ) {
- imgfree ( image );
- }
- }
- return 0;
-}
-
-/** Image management commands */
-struct command image_commands[] __command = {
- {
- .name = "imgfetch",
- .exec = imgfetch_exec,
- },
- {
- .name = "module",
- .exec = imgfetch_exec, /* synonym for "imgfetch" */
- },
- {
- .name = "initrd",
- .exec = imgfetch_exec, /* synonym for "imgfetch" */
- },
- {
- .name = "kernel",
- .exec = kernel_exec,
- },
- {
- .name = "chain",
- .exec = chain_exec,
- },
- {
- .name = "imgload",
- .exec = imgload_exec,
- },
- {
- .name = "imgargs",
- .exec = imgargs_exec,
- },
- {
- .name = "imgexec",
- .exec = imgexec_exec,
- },
- {
- .name = "boot", /* synonym for "imgexec" */
- .exec = imgexec_exec,
- },
- {
- .name = "imgstat",
- .exec = imgstat_exec,
- },
- {
- .name = "imgfree",
- .exec = imgfree_exec,
- },
-};
diff --git a/gpxe/src/hci/commands/iwmgmt_cmd.c b/gpxe/src/hci/commands/iwmgmt_cmd.c
deleted file mode 100644
index 006c9f1d..00000000
--- a/gpxe/src/hci/commands/iwmgmt_cmd.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2009 Joshua Oreman <oremanj@rwcr.net>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#include <gpxe/netdevice.h>
-#include <gpxe/net80211.h>
-#include <gpxe/command.h>
-#include <usr/iwmgmt.h>
-#include <hci/ifmgmt_cmd.h>
-
-/* "iwstat" command */
-
-static int iwstat_payload ( struct net_device *netdev ) {
- struct net80211_device *dev = net80211_get ( netdev );
-
- if ( dev )
- iwstat ( dev );
-
- return 0;
-}
-
-static int iwstat_exec ( int argc, char **argv ) {
- return ifcommon_exec ( argc, argv,
- iwstat_payload, "Display wireless status of" );
-}
-
-/* "iwlist" command */
-
-static int iwlist_payload ( struct net_device *netdev ) {
- struct net80211_device *dev = net80211_get ( netdev );
-
- if ( dev )
- return iwlist ( dev );
-
- return 0;
-}
-
-static int iwlist_exec ( int argc, char **argv ) {
- return ifcommon_exec ( argc, argv, iwlist_payload,
- "List wireless networks available via" );
-}
-
-/** Wireless interface management commands */
-struct command iwmgmt_commands[] __command = {
- {
- .name = "iwstat",
- .exec = iwstat_exec,
- },
- {
- .name = "iwlist",
- .exec = iwlist_exec,
- },
-};
diff --git a/gpxe/src/hci/commands/login_cmd.c b/gpxe/src/hci/commands/login_cmd.c
deleted file mode 100644
index 0da2497a..00000000
--- a/gpxe/src/hci/commands/login_cmd.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <string.h>
-#include <stdio.h>
-#include <gpxe/command.h>
-#include <gpxe/login_ui.h>
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-static int login_exec ( int argc, char **argv ) {
- int rc;
-
- if ( argc > 1 ) {
- printf ( "Usage: %s\n"
- "Prompt for login credentials\n", argv[0] );
- return 1;
- }
-
- if ( ( rc = login_ui() ) != 0 ) {
- printf ( "Could not set credentials: %s\n",
- strerror ( rc ) );
- return 1;
- }
-
- return 0;
-}
-
-struct command login_command __command = {
- .name = "login",
- .exec = login_exec,
-};
diff --git a/gpxe/src/hci/commands/nvo_cmd.c b/gpxe/src/hci/commands/nvo_cmd.c
deleted file mode 100644
index 5eb2f06f..00000000
--- a/gpxe/src/hci/commands/nvo_cmd.c
+++ /dev/null
@@ -1,79 +0,0 @@
-#include <stdint.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <getopt.h>
-#include <gpxe/settings.h>
-#include <gpxe/command.h>
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-static int show_exec ( int argc, char **argv ) {
- char buf[256];
- int rc;
-
- if ( argc != 2 ) {
- printf ( "Syntax: %s <identifier>\n", argv[0] );
- return 1;
- }
-
- if ( ( rc = fetchf_named_setting ( argv[1], buf,
- sizeof ( buf ) ) ) < 0 ){
- printf ( "Could not find \"%s\": %s\n",
- argv[1], strerror ( rc ) );
- return 1;
- }
-
- printf ( "%s = %s\n", argv[1], buf );
- return 0;
-}
-
-static int set_exec ( int argc, char **argv ) {
- int rc;
-
- if ( argc != 3 ) {
- printf ( "Syntax: %s <identifier> <value>\n", argv[0] );
- return 1;
- }
-
- if ( ( rc = storef_named_setting ( argv[1], argv[2] ) ) != 0 ) {
- printf ( "Could not set \"%s\"=\"%s\": %s\n",
- argv[1], argv[2], strerror ( rc ) );
- return 1;
- }
-
- return 0;
-}
-
-static int clear_exec ( int argc, char **argv ) {
- int rc;
-
- if ( argc != 2 ) {
- printf ( "Syntax: %s <identifier>\n", argv[0] );
- return 1;
- }
-
- if ( ( rc = delete_named_setting ( argv[1] ) ) != 0 ) {
- printf ( "Could not clear \"%s\": %s\n",
- argv[1], strerror ( rc ) );
- return 1;
- }
-
- return 0;
-}
-
-struct command nvo_commands[] __command = {
- {
- .name = "show",
- .exec = show_exec,
- },
- {
- .name = "set",
- .exec = set_exec,
- },
- {
- .name = "clear",
- .exec = clear_exec,
- },
-};
diff --git a/gpxe/src/hci/commands/route_cmd.c b/gpxe/src/hci/commands/route_cmd.c
deleted file mode 100644
index 4372e34f..00000000
--- a/gpxe/src/hci/commands/route_cmd.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2007 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#include <stdio.h>
-#include <getopt.h>
-#include <gpxe/command.h>
-#include <usr/route.h>
-
-/** @file
- *
- * Routing table management commands
- *
- */
-
-/**
- * "route" command syntax message
- *
- * @v argv Argument list
- */
-static void route_syntax ( char **argv ) {
- printf ( "Usage:\n"
- " %s\n"
- "\n"
- "Displays the routing table\n",
- argv[0] );
-}
-
-/**
- * The "route" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Exit code
- */
-static int route_exec ( int argc, char **argv ) {
- static struct option longopts[] = {
- { "help", 0, NULL, 'h' },
- { NULL, 0, NULL, 0 },
- };
-
- int c;
-
- /* Parse options */
- while ( ( c = getopt_long ( argc, argv, "h", longopts, NULL ) ) >= 0 ){
- switch ( c ) {
- case 'h':
- /* Display help text */
- default:
- /* Unrecognised/invalid option */
- route_syntax ( argv );
- return 1;
- }
- }
-
- if ( optind != argc ) {
- route_syntax ( argv );
- return 1;
- }
-
- route();
- return 0;
-}
-
-/** Routing table management commands */
-struct command route_commands[] __command = {
- {
- .name = "route",
- .exec = route_exec,
- },
-};
diff --git a/gpxe/src/hci/commands/sanboot_cmd.c b/gpxe/src/hci/commands/sanboot_cmd.c
deleted file mode 100644
index 783b747b..00000000
--- a/gpxe/src/hci/commands/sanboot_cmd.c
+++ /dev/null
@@ -1,70 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <getopt.h>
-#include <gpxe/command.h>
-#include <usr/autoboot.h>
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-/**
- * "sanboot" command syntax message
- *
- * @v argv Argument list
- */
-static void sanboot_syntax ( char **argv ) {
- printf ( "Usage:\n"
- " %s <root-path>\n"
- "\n"
- "Boot from SAN target\n",
- argv[0] );
-}
-
-/**
- * The "sanboot" command
- *
- * @v argc Argument count
- * @v argv Argument list
- * @ret rc Exit code
- */
-static int sanboot_exec ( int argc, char **argv ) {
- static struct option longopts[] = {
- { "help", 0, NULL, 'h' },
- { NULL, 0, NULL, 0 },
- };
- const char *root_path = NULL;
- int c;
- int rc;
-
- /* Parse options */
- while ( ( c = getopt_long ( argc, argv, "h", longopts, NULL ) ) >= 0 ){
- switch ( c ) {
- case 'h':
- /* Display help text */
- default:
- /* Unrecognised/invalid option */
- sanboot_syntax ( argv );
- return 1;
- }
- }
-
- /* Need exactly one image name remaining after the options */
- if ( optind != ( argc - 1 ) ) {
- sanboot_syntax ( argv );
- return 1;
- }
- root_path = argv[optind];
-
- /* Boot from root path */
- if ( ( rc = boot_root_path ( root_path ) ) != 0 ) {
- printf ( "Could not boot from %s: %s\n",
- root_path, strerror ( rc ) );
- return 1;
- }
-
- return 0;
-}
-
-struct command sanboot_command __command = {
- .name = "sanboot",
- .exec = sanboot_exec,
-};
diff --git a/gpxe/src/hci/commands/time_cmd.c b/gpxe/src/hci/commands/time_cmd.c
deleted file mode 100644
index 947410ec..00000000
--- a/gpxe/src/hci/commands/time_cmd.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2009 Daniel Verkamp <daniel@drv.nu>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * March-19-2009 @ 02:44: Added sleep command.
- * Shao Miller <shao.miller@yrdsb.edu.on.ca>.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <gpxe/command.h>
-#include <gpxe/nap.h>
-#include <gpxe/timer.h>
-
-static int time_exec ( int argc, char **argv ) {
- unsigned long start;
- int rc, secs;
-
- if ( argc == 1 ||
- !strcmp ( argv[1], "--help" ) ||
- !strcmp ( argv[1], "-h" ) )
- {
- printf ( "Usage:\n"
- " %s <command>\n"
- "\n"
- "Time a command\n",
- argv[0] );
- return 1;
- }
-
- start = currticks();
- rc = execv ( argv[1], argv + 1 );
- secs = (currticks() - start) / ticks_per_sec();
-
- printf ( "%s: %ds\n", argv[0], secs );
-
- return rc;
-}
-
-struct command time_command __command = {
- .name = "time",
- .exec = time_exec,
-};
-
-static int sleep_exec ( int argc, char **argv ) {
- unsigned long start, delay;
-
- if ( argc == 1 ||
- !strcmp ( argv[1], "--help" ) ||
- !strcmp ( argv[1], "-h" ))
- {
- printf ( "Usage:\n"
- " %s <seconds>\n"
- "\n"
- "Sleep for <seconds> seconds\n",
- argv[0] );
- return 1;
- }
- start = currticks();
- delay = strtoul ( argv[1], NULL, 0 ) * ticks_per_sec();
- while ( ( currticks() - start ) <= delay )
- cpu_nap();
- return 0;
-}
-
-struct command sleep_command __command = {
- .name = "sleep",
- .exec = sleep_exec,
-};
diff --git a/gpxe/src/hci/editstring.c b/gpxe/src/hci/editstring.c
deleted file mode 100644
index 648f3389..00000000
--- a/gpxe/src/hci/editstring.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (C) 2006 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#include <assert.h>
-#include <string.h>
-#include <gpxe/keys.h>
-#include <gpxe/editstring.h>
-
-/** @file
- *
- * Editable strings
- *
- */
-
-static void insert_delete ( struct edit_string *string, size_t delete_len,
- const char *insert_text )
- __attribute__ (( nonnull (1) ));
-static void insert_character ( struct edit_string *string,
- unsigned int character ) __nonnull;
-static void delete_character ( struct edit_string *string ) __nonnull;
-static void backspace ( struct edit_string *string ) __nonnull;
-static void kill_eol ( struct edit_string *string ) __nonnull;
-
-/**
- * Insert and/or delete text within an editable string
- *
- * @v string Editable string
- * @v delete_len Length of text to delete from current cursor position
- * @v insert_text Text to insert at current cursor position, or NULL
- */
-static void insert_delete ( struct edit_string *string, size_t delete_len,
- const char *insert_text ) {
- size_t old_len, max_delete_len, insert_len, max_insert_len, new_len;
-
- /* Calculate lengths */
- old_len = strlen ( string->buf );
- assert ( string->cursor <= old_len );
- max_delete_len = ( old_len - string->cursor );
- if ( delete_len > max_delete_len )
- delete_len = max_delete_len;
- insert_len = ( insert_text ? strlen ( insert_text ) : 0 );
- max_insert_len = ( ( string->len - 1 ) - ( old_len - delete_len ) );
- if ( insert_len > max_insert_len )
- insert_len = max_insert_len;
- new_len = ( old_len - delete_len + insert_len );
-
- /* Fill in edit history */
- string->mod_start = string->cursor;
- string->mod_end = ( ( new_len > old_len ) ? new_len : old_len );
-
- /* Move data following the cursor */
- memmove ( ( string->buf + string->cursor + insert_len ),
- ( string->buf + string->cursor + delete_len ),
- ( max_delete_len + 1 - delete_len ) );
-
- /* Copy inserted text to cursor position */
- memcpy ( ( string->buf + string->cursor ), insert_text, insert_len );
- string->cursor += insert_len;
-}
-
-/**
- * Insert character at current cursor position
- *
- * @v string Editable string
- * @v character Character to insert
- */
-static void insert_character ( struct edit_string *string,
- unsigned int character ) {
- char insert_text[2] = { character, '\0' };
- insert_delete ( string, 0, insert_text );
-}
-
-/**
- * Delete character at current cursor position
- *
- * @v string Editable string
- */
-static void delete_character ( struct edit_string *string ) {
- insert_delete ( string, 1, NULL );
-}
-
-/**
- * Delete character to left of current cursor position
- *
- * @v string Editable string
- */
-static void backspace ( struct edit_string *string ) {
- if ( string->cursor > 0 ) {
- string->cursor--;
- delete_character ( string );
- }
-}
-
-/**
- * Delete to end of line
- *
- * @v string Editable string
- */
-static void kill_eol ( struct edit_string *string ) {
- insert_delete ( string, ~( ( size_t ) 0 ), NULL );
-}
-
-/**
- * Edit editable string
- *
- * @v string Editable string
- * @v key Key pressed by user
- * @ret key Key returned to application, or zero
- *
- * Handles keypresses and updates the content of the editable string.
- * Basic line editing facilities (delete/insert/cursor) are supported.
- * If edit_string() understands and uses the keypress it will return
- * zero, otherwise it will return the original key.
- *
- * This function does not update the display in any way.
- *
- * The string's edit history will be updated to allow the caller to
- * efficiently bring the display into sync with the string content.
- */
-int edit_string ( struct edit_string *string, int key ) {
- int retval = 0;
- size_t len = strlen ( string->buf );
-
- /* Prepare edit history */
- string->last_cursor = string->cursor;
- string->mod_start = string->cursor;
- string->mod_end = string->cursor;
-
- /* Interpret key */
- if ( ( key >= 0x20 ) && ( key <= 0x7e ) ) {
- /* Printable character; insert at current position */
- insert_character ( string, key );
- } else switch ( key ) {
- case KEY_BACKSPACE:
- /* Backspace */
- backspace ( string );
- break;
- case KEY_DC:
- case CTRL_D:
- /* Delete character */
- delete_character ( string );
- break;
- case CTRL_K:
- /* Delete to end of line */
- kill_eol ( string );
- break;
- case KEY_HOME:
- case CTRL_A:
- /* Start of line */
- string->cursor = 0;
- break;
- case KEY_END:
- case CTRL_E:
- /* End of line */
- string->cursor = len;
- break;
- case KEY_LEFT:
- case CTRL_B:
- /* Cursor left */
- if ( string->cursor > 0 )
- string->cursor--;
- break;
- case KEY_RIGHT:
- case CTRL_F:
- /* Cursor right */
- if ( string->cursor < len )
- string->cursor++;
- break;
- default:
- retval = key;
- break;
- }
-
- return retval;
-}
diff --git a/gpxe/src/hci/mucurses/alert.c b/gpxe/src/hci/mucurses/alert.c
deleted file mode 100644
index 00e959a8..00000000
--- a/gpxe/src/hci/mucurses/alert.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <curses.h>
-#include <stdio.h>
-
-/** @file
- *
- * MuCurses alert functions
- *
- */
-
-/**
- * Audible signal
- *
- * @ret rc return status code
- */
-int beep ( void ) {
- printf("\a");
- return OK;
-}
diff --git a/gpxe/src/hci/mucurses/ansi_screen.c b/gpxe/src/hci/mucurses/ansi_screen.c
deleted file mode 100644
index 51fc7c90..00000000
--- a/gpxe/src/hci/mucurses/ansi_screen.c
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <stdio.h>
-#include <curses.h>
-#include <console.h>
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-static void ansiscr_reset(struct _curses_screen *scr) __nonnull;
-static void ansiscr_movetoyx(struct _curses_screen *scr,
- unsigned int y, unsigned int x) __nonnull;
-static void ansiscr_putc(struct _curses_screen *scr, chtype c) __nonnull;
-
-unsigned short _COLS = 80;
-unsigned short _LINES = 24;
-
-static void ansiscr_reset ( struct _curses_screen *scr ) {
- /* Reset terminal attributes and clear screen */
- scr->attrs = 0;
- scr->curs_x = 0;
- scr->curs_y = 0;
- printf ( "\033[0m" );
-}
-
-static void ansiscr_movetoyx ( struct _curses_screen *scr,
- unsigned int y, unsigned int x ) {
- if ( ( x != scr->curs_x ) || ( y != scr->curs_y ) ) {
- /* ANSI escape sequence to update cursor position */
- printf ( "\033[%d;%dH", ( y + 1 ), ( x + 1 ) );
- scr->curs_x = x;
- scr->curs_y = y;
- }
-}
-
-static void ansiscr_putc ( struct _curses_screen *scr, chtype c ) {
- unsigned int character = ( c & A_CHARTEXT );
- attr_t attrs = ( c & ( A_ATTRIBUTES | A_COLOR ) );
- int bold = ( attrs & A_BOLD );
- attr_t cpair = PAIR_NUMBER ( attrs );
- short fcol;
- short bcol;
-
- /* Update attributes if changed */
- if ( attrs != scr->attrs ) {
- scr->attrs = attrs;
- pair_content ( cpair, &fcol, &bcol );
- /* ANSI escape sequence to update character attributes */
- printf ( "\033[0;%d;3%d;4%dm", ( bold ? 1 : 22 ), fcol, bcol );
- }
-
- /* Print the actual character */
- putchar ( character );
-
- /* Update expected cursor position */
- if ( ++(scr->curs_x) == _COLS ) {
- scr->curs_x = 0;
- ++scr->curs_y;
- }
-}
-
-static int ansiscr_getc ( struct _curses_screen *scr __unused ) {
- return getchar();
-}
-
-static bool ansiscr_peek ( struct _curses_screen *scr __unused ) {
- return iskey();
-}
-
-SCREEN _ansi_screen = {
- .init = ansiscr_reset,
- .exit = ansiscr_reset,
- .movetoyx = ansiscr_movetoyx,
- .putc = ansiscr_putc,
- .getc = ansiscr_getc,
- .peek = ansiscr_peek,
-};
diff --git a/gpxe/src/hci/mucurses/clear.c b/gpxe/src/hci/mucurses/clear.c
deleted file mode 100644
index 79b296cf..00000000
--- a/gpxe/src/hci/mucurses/clear.c
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <curses.h>
-#include "mucurses.h"
-#include "cursor.h"
-
-/** @file
- *
- * MuCurses clearing functions
- *
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-/**
- * Clear a window to the bottom from current cursor position
- *
- * @v *win subject window
- * @ret rc return status code
- */
-int wclrtobot ( WINDOW *win ) {
- struct cursor_pos pos;
-
- _store_curs_pos( win, &pos );
- do {
- _wputc( win, ' ', WRAP );
- } while ( win->curs_y + win->curs_x );
- _restore_curs_pos( win, &pos );
-
- return OK;
-}
-
-/**
- * Clear a window to the end of the current line
- *
- * @v *win subject window
- * @ret rc return status code
- */
-int wclrtoeol ( WINDOW *win ) {
- struct cursor_pos pos;
-
- _store_curs_pos( win, &pos );
- while ( ( win->curs_y - pos.y ) == 0 ) {
- _wputc( win, ' ', WRAP );
- }
- _restore_curs_pos( win, &pos );
-
- return OK;
-}
-
-/**
- * Delete character under the cursor in a window
- *
- * @v *win subject window
- * @ret rc return status code
- */
-int wdelch ( WINDOW *win ) {
- _wputc( win, ' ', NOWRAP );
- _wcursback( win );
-
- return OK;
-}
-
-/**
- * Delete line under a window's cursor
- *
- * @v *win subject window
- * @ret rc return status code
- */
-int wdeleteln ( WINDOW *win ) {
- struct cursor_pos pos;
-
- _store_curs_pos( win, &pos );
- /* let's just set the cursor to the beginning of the line and
- let wclrtoeol do the work :) */
- wmove( win, win->curs_y, 0 );
- wclrtoeol( win );
- _restore_curs_pos( win, &pos );
- return OK;
-}
-
-/**
- * Completely clear a window
- *
- * @v *win subject window
- * @ret rc return status code
- */
-int werase ( WINDOW *win ) {
- wmove( win, 0, 0 );
- wclrtobot( win );
- return OK;
-}
diff --git a/gpxe/src/hci/mucurses/colour.c b/gpxe/src/hci/mucurses/colour.c
deleted file mode 100644
index c1359c86..00000000
--- a/gpxe/src/hci/mucurses/colour.c
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <curses.h>
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-struct colour_pair {
- short fcol;
- short bcol;
-};
-
-static struct colour_pair cpairs[COLOUR_PAIRS] = {
- [0] = { COLOUR_WHITE, COLOUR_BLACK },
-};
-
-/**
- * Identify the RGB components of a given colour value
- *
- * @v colour colour value
- * @v *red address to store red component
- * @v *green address to store green component
- * @v *blue address to store blue component
- * @ret rc return status code
- */
-int colour_content ( short colour, short *red, short *green, short *blue ) {
- *red = ( ( colour & COLOUR_RED ) ? 1 : 0 );
- *green = ( ( colour & COLOUR_GREEN ) ? 1 : 0 );
- *blue = ( ( colour & COLOUR_BLUE ) ? 1 : 0 );
- return OK;
-}
-
-/**
- * Initialise colour pair
- *
- * @v pair colour pair number
- * @v fcol foreground colour
- * @v bcol background colour
- */
-int init_pair ( short pair, short fcol, short bcol ) {
- struct colour_pair *cpair;
-
- if ( ( pair < 1 ) || ( pair >= COLOUR_PAIRS ) )
- return ERR;
-
- cpair = &cpairs[pair];
- cpair->fcol = fcol;
- cpair->bcol = bcol;
- return OK;
-}
-
-/**
- * Get colours of colour pair
- *
- * @v pair colour pair number
- * @ret fcol foreground colour
- * @ret bcol background colour
- */
-int pair_content ( short pair, short *fcol, short *bcol ) {
- struct colour_pair *cpair;
-
- if ( ( pair < 0 ) || ( pair >= COLOUR_PAIRS ) )
- return ERR;
-
- cpair = &cpairs[pair];
- *fcol = cpair->fcol;
- *bcol = cpair->bcol;
- return OK;
-}
diff --git a/gpxe/src/hci/mucurses/cursor.h b/gpxe/src/hci/mucurses/cursor.h
deleted file mode 100644
index 16b7d27c..00000000
--- a/gpxe/src/hci/mucurses/cursor.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef CURSOR_H
-#define CURSOR_H
-
-/** @file
- *
- * MuCurses cursor implementation specific header file
- *
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-struct cursor_pos {
- unsigned int y, x;
-};
-
-/**
- * Restore cursor position from encoded backup variable
- *
- * @v *win window on which to operate
- * @v *pos pointer to struct in which original cursor position is stored
- */
-static inline void _restore_curs_pos ( WINDOW *win, struct cursor_pos *pos ) {
- wmove ( win, pos->y, pos->x );
-}
-
-/**
- * Store cursor position for later restoration
- *
- * @v *win window on which to operate
- * @v *pos pointer to struct in which to store cursor position
- */
-static inline void _store_curs_pos ( WINDOW *win, struct cursor_pos *pos ) {
- pos->y = win->curs_y;
- pos->x = win->curs_x;
-}
-
-#endif /* CURSOR_H */
diff --git a/gpxe/src/hci/mucurses/edging.c b/gpxe/src/hci/mucurses/edging.c
deleted file mode 100644
index eccd3242..00000000
--- a/gpxe/src/hci/mucurses/edging.c
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <curses.h>
-#include "mucurses.h"
-#include "cursor.h"
-
-/** @file
- *
- * MuCurses edging functions
- *
- */
-
-/**
- * Draw borders from single-byte characters and renditions around a
- * window
- *
- * @v *win window to be bordered
- * @v verch vertical chtype
- * @v horch horizontal chtype
- * @ret rc return status code
- */
-int box ( WINDOW *win, chtype verch, chtype horch ) {
- chtype corner = '+' | win->attrs; /* default corner character */
- return wborder( win, verch, verch, horch, horch,
- corner, corner, corner, corner );
-}
-
-/**
- * Draw borders from single-byte characters and renditions around a
- * window
- *
- * @v *win window to be bordered
- * @v ls left side
- * @v rs right side
- * @v ts top
- * @v bs bottom
- * @v tl top left corner
- * @v tr top right corner
- * @v bl bottom left corner
- * @v br bottom right corner
- * @ret rc return status code
- */
-int wborder ( WINDOW *win, chtype ls, chtype rs,
- chtype ts, chtype bs, chtype tl,
- chtype tr, chtype bl, chtype br ) {
- struct cursor_pos pos;
-
- _store_curs_pos( win, &pos );
- wmove(win,0,0);
-
- _wputch(win,tl,WRAP);
- while ( ( win->width - 1 ) - win->curs_x ) {
- _wputch(win,ts,WRAP);
- }
- _wputch(win,tr,WRAP);
-
- while ( ( win->height - 1 ) - win->curs_y ) {
- _wputch(win,ls,WRAP);
- wmove(win,win->curs_y,(win->width)-1);
- _wputch(win,rs,WRAP);
- }
-
- _wputch(win,bl,WRAP);
- while ( ( win->width -1 ) - win->curs_x ) {
- _wputch(win,bs,WRAP);
- }
- _wputch(win,br,NOWRAP); /* do not wrap last char to leave
- cursor in last position */
- _restore_curs_pos( win, &pos );
-
- return OK;
-}
-
-/**
- * Create a horizontal line in a window
- *
- * @v *win subject window
- * @v ch rendition and character
- * @v n max number of chars (wide) to render
- * @ret rc return status code
- */
-int whline ( WINDOW *win, chtype ch, int n ) {
- struct cursor_pos pos;
-
- _store_curs_pos ( win, &pos );
- while ( ( win->curs_x - win->width ) && n-- ) {
- _wputch ( win, ch, NOWRAP );
- }
- _restore_curs_pos ( win, &pos );
-
- return OK;
-}
-
-/**
- * Create a vertical line in a window
- *
- * @v *win subject window
- * @v ch rendition and character
- * @v n max number of chars (high) to render
- * @ret rc return status code
- */
-int wvline ( WINDOW *win, chtype ch, int n ) {
- struct cursor_pos pos;
-
- _store_curs_pos ( win, &pos );
- while ( ( win->curs_y - win->height ) && n-- ) {
- _wputch ( win, ch, NOWRAP );
- wmove( win, ++(win->curs_y), pos.x);
- }
- _restore_curs_pos ( win, &pos );
-
- return OK;
-}
diff --git a/gpxe/src/hci/mucurses/kb.c b/gpxe/src/hci/mucurses/kb.c
deleted file mode 100644
index cada7291..00000000
--- a/gpxe/src/hci/mucurses/kb.c
+++ /dev/null
@@ -1,143 +0,0 @@
-#include <curses.h>
-#include <stddef.h>
-#include <unistd.h>
-#include "mucurses.h"
-
-/** @file
- *
- * MuCurses keyboard input handling functions
- */
-
-#define INPUT_DELAY 200 // half-blocking delay timer resolution (ms)
-#define INPUT_DELAY_TIMEOUT 1000 // half-blocking delay timeout
-
-int m_delay; /*
- < 0 : blocking read
- 0 : non-blocking read
- > 0 : timed blocking read
- */
-bool m_echo;
-bool m_cbreak;
-
-static int _wgetc ( WINDOW *win ) {
- int timer, c;
-
- if ( win == NULL )
- return ERR;
-
- timer = INPUT_DELAY_TIMEOUT;
- while ( ! win->scr->peek( win->scr ) ) {
- if ( m_delay == 0 ) // non-blocking read
- return ERR;
- if ( timer > 0 ) { // time-limited blocking read
- if ( m_delay > 0 )
- timer -= INPUT_DELAY;
- mdelay( INPUT_DELAY );
- } else { return ERR; } // non-blocking read
- }
-
- c = win->scr->getc( win->scr );
-
- if ( m_echo && ( c >= 32 && c <= 126 ) ) // printable ASCII characters
- _wputch( win, (chtype) ( c | win->attrs ), WRAP );
-
- return c;
-}
-
-/**
- * Pop a character from the FIFO into a window
- *
- * @v *win window in which to echo input
- * @ret c char from input stream
- */
-int wgetch ( WINDOW *win ) {
- int c;
-
- c = _wgetc( win );
-
- if ( m_echo ) {
- if ( c >= KEY_MIN ) {
- switch(c) {
- case KEY_LEFT :
- case KEY_BACKSPACE :
- _wcursback( win );
- wdelch( win );
- break;
- default :
- beep();
- break;
- }
- } else {
- _wputch( win, (chtype)( c | win->attrs ), WRAP );
- }
- }
-
- return c;
-}
-
-/**
- * Read at most n characters from the FIFO into a window
- *
- * @v *win window in which to echo input
- * @v *str pointer to string in which to store result
- * @v n maximum number of characters to read into string (inc. NUL)
- * @ret rc return status code
- */
-int wgetnstr ( WINDOW *win, char *str, int n ) {
- char *_str;
- int c;
-
- if ( n == 0 ) {
- str = '\0';
- return OK;
- }
-
- _str = str;
-
- while ( ( c = _wgetc( win ) ) != ERR ) {
- /* termination enforcement - don't let us go past the
- end of the allocated buffer... */
- if ( n == 0 && ( c >= 32 && c <= 126 ) ) {
- _wcursback( win );
- wdelch( win );
- } else {
- if ( c >= KEY_MIN ) {
- switch(c) {
- case KEY_LEFT :
- case KEY_BACKSPACE :
- _wcursback( win );
- wdelch( win );
- break;
- case KEY_ENTER :
- *_str = '\0';
- return OK;
- default :
- beep();
- break;
- }
- }
- if ( c >= 32 && c <= 126 ) {
- *(_str++) = c; n--;
- }
- }
- }
-
- return ERR;
-}
-
-
-/**
- *
- */
-int echo ( void ) {
- m_echo = TRUE;
- return OK;
-}
-
-/**
- *
- */
-int noecho ( void ) {
- m_echo = FALSE;
- return OK;
-}
diff --git a/gpxe/src/hci/mucurses/mucurses.c b/gpxe/src/hci/mucurses/mucurses.c
deleted file mode 100644
index 087ebcc3..00000000
--- a/gpxe/src/hci/mucurses/mucurses.c
+++ /dev/null
@@ -1,147 +0,0 @@
-#include <console.h>
-#include <curses.h>
-#include "mucurses.h"
-
-/** @file
- *
- * MuCurses core functions
- *
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-static void _wupdcurs ( WINDOW *win ) __nonnull;
-void _wputch ( WINDOW *win, chtype ch, int wrap ) __nonnull;
-void _wputc ( WINDOW *win, char c, int wrap ) __nonnull;
-void _wcursback ( WINDOW *win ) __nonnull;
-void _wputchstr ( WINDOW *win, const chtype *chstr, int wrap, int n ) __nonnull;
-void _wputstr ( WINDOW *win, const char *str, int wrap, int n ) __nonnull;
-int wmove ( WINDOW *win, int y, int x ) __nonnull;
-
-WINDOW _stdscr = {
- .attrs = A_DEFAULT,
- .ori_y = 0,
- .ori_x = 0,
- .curs_y = 0,
- .curs_x = 0,
- .scr = &_ansi_screen,
-};
-
-/*
- * Primitives
- */
-
-/**
- * Update cursor position
- *
- * @v *win window in which to update position
- */
-static void _wupdcurs ( WINDOW *win ) {
- win->scr->movetoyx ( win->scr, win->ori_y + win->curs_y,
- win->ori_x + win->curs_x );
-}
-
-/**
- * Write a single character rendition to a window
- *
- * @v *win window in which to write
- * @v ch character rendition to write
- * @v wrap wrap "switch"
- */
-void _wputch ( WINDOW *win, chtype ch, int wrap ) {
- /* make sure we set the screen cursor to the right position
- first! */
- _wupdcurs(win);
- win->scr->putc(win->scr, ch);
- if ( ++(win->curs_x) - win->width == 0 ) {
- if ( wrap == WRAP ) {
- win->curs_x = 0;
- /* specification says we should really scroll,
- but we have no buffer to scroll with, so we
- can only overwrite back at the beginning of
- the window */
- if ( ++(win->curs_y) - win->height == 0 )
- win->curs_y = 0;
- } else {
- (win->curs_x)--;
- }
- }
-}
-
-/**
- * Write a single character to a window
- *
- * @v *win window in which to write
- * @v c character rendition to write
- * @v wrap wrap "switch"
- */
-void _wputc ( WINDOW *win, char c, int wrap ) {
- _wputch ( win, ( c | win->attrs ), wrap );
-}
-
-/**
- * Retreat the cursor back one position (useful for a whole host of
- * ops)
- *
- * @v *win window in which to retreat
- */
-void _wcursback ( WINDOW *win ) {
- if ( win->curs_x == 0 ) {
- if ( win->curs_y == 0 )
- win->curs_y = win->height - 1;
- win->curs_x = win->width = 1;
- } else {
- win->curs_x--;
- }
-
- _wupdcurs(win);
-}
-
-/**
- * Write a chtype string to a window
- *
- * @v *win window in which to write
- * @v *chstr chtype string
- * @v wrap wrap "switch"
- * @v n write at most n chtypes
- */
-void _wputchstr ( WINDOW *win, const chtype *chstr, int wrap, int n ) {
- for ( ; *chstr && n-- ; chstr++ ) {
- _wputch(win,*chstr,wrap);
- }
-}
-
-/**
- * Write a standard c-style string to a window
- *
- * @v *win window in which to write
- * @v *str string
- * @v wrap wrap "switch"
- * @v n write at most n chars from *str
- */
-void _wputstr ( WINDOW *win, const char *str, int wrap, int n ) {
- for ( ; *str && n-- ; str++ ) {
- _wputc ( win, *str, wrap );
- }
-}
-
-/**
- * Move a window's cursor to the specified position
- *
- * @v *win window to be operated on
- * @v y Y position
- * @v x X position
- * @ret rc return status code
- */
-int wmove ( WINDOW *win, int y, int x ) {
- /* chech for out-of-bounds errors */
- if ( ( (unsigned)y >= win->height ) ||
- ( (unsigned)x >= win->width ) ) {
- return ERR;
- }
-
- win->curs_y = y;
- win->curs_x = x;
- _wupdcurs(win);
- return OK;
-}
diff --git a/gpxe/src/hci/mucurses/mucurses.h b/gpxe/src/hci/mucurses/mucurses.h
deleted file mode 100644
index 7ac1086a..00000000
--- a/gpxe/src/hci/mucurses/mucurses.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef _MUCURSES_H
-#define _MUCURSES_H
-
-/** @file
- *
- * MuCurses core implementation specific header file
- *
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#define WRAP 0
-#define NOWRAP 1
-
-extern SCREEN _ansi_screen;
-
-extern void _wputch ( WINDOW *win, chtype ch, int wrap ) __nonnull;
-extern void _wputc ( WINDOW *win, char c, int wrap ) __nonnull;
-extern void _wputchstr ( WINDOW *win, const chtype *chstr, int wrap, int n ) __nonnull;
-extern void _wputstr ( WINDOW *win, const char *str, int wrap, int n ) __nonnull;
-extern void _wcursback ( WINDOW *win ) __nonnull;
-
-#endif /* _MUCURSES_H */
diff --git a/gpxe/src/hci/mucurses/print.c b/gpxe/src/hci/mucurses/print.c
deleted file mode 100644
index 1608c0a7..00000000
--- a/gpxe/src/hci/mucurses/print.c
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <curses.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <gpxe/vsprintf.h>
-#include "mucurses.h"
-
-/** @file
- *
- * MuCurses printing functions
- *
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-/**
- * Add a single-byte character and rendition to a window and advance
- * the cursor
- *
- * @v *win window to be rendered in
- * @v ch character to be added at cursor
- * @ret rc return status code
- */
-int waddch ( WINDOW *win, const chtype ch ) {
- _wputch( win, ch, WRAP );
- return OK;
-}
-
-/**
- * Add string of single-byte characters to a window
- *
- * @v *win window to be rendered in
- * @v *str standard c-style string
- * @v n max number of chars from string to render
- * @ret rc return status code
- */
-int waddnstr ( WINDOW *win, const char *str, int n ) {
- _wputstr( win, str, WRAP, n );
- return OK;
-}
-
-struct printw_context {
- struct printf_context ctx;
- WINDOW *win;
-};
-
-static void _printw_handler ( struct printf_context *ctx, unsigned int c ) {
- struct printw_context *wctx =
- container_of ( ctx, struct printw_context, ctx );
-
- _wputch( wctx->win, c | wctx->win->attrs, WRAP );
-}
-
-/**
- * Print formatted output in a window
- *
- * @v *win subject window
- * @v *fmt formatted string
- * @v varglist argument list
- * @ret rc return status code
- */
-int vw_printw ( WINDOW *win, const char *fmt, va_list varglist ) {
- struct printw_context wctx;
-
- wctx.win = win;
- wctx.ctx.handler = _printw_handler;
- vcprintf ( &(wctx.ctx), fmt, varglist );
- return OK;
-}
-
-/**
- * Print formatted output to a window
- *
- * @v *win subject window
- * @v *fmt formatted string
- * @v ... string arguments
- * @ret rc return status code
- */
-int wprintw ( WINDOW *win, const char *fmt, ... ) {
- va_list args;
- int i;
-
- va_start ( args, fmt );
- i = vw_printw ( win, fmt, args );
- va_end ( args );
- return i;
-}
diff --git a/gpxe/src/hci/mucurses/print_nadv.c b/gpxe/src/hci/mucurses/print_nadv.c
deleted file mode 100644
index ee472e68..00000000
--- a/gpxe/src/hci/mucurses/print_nadv.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <curses.h>
-#include "mucurses.h"
-#include "cursor.h"
-
-/** @file
- *
- * MuCurses printing functions (no cursor advance)
- *
- */
-
-/**
- * Add string of single-byte characters and renditions to a window
- *
- * @v *win window to be rendered in
- * @v *chstr pointer to first chtype in "string"
- * @v n max number of chars from chstr to render
- * @ret rc return status code
- */
-int waddchnstr ( WINDOW *win, const chtype *chstr, int n ) {
- struct cursor_pos pos;
-
- _store_curs_pos( win, &pos );
- _wputchstr( win, chstr, NOWRAP, n );
- _restore_curs_pos( win, &pos );
- return OK;
-}
diff --git a/gpxe/src/hci/mucurses/slk.c b/gpxe/src/hci/mucurses/slk.c
deleted file mode 100644
index 600658e7..00000000
--- a/gpxe/src/hci/mucurses/slk.c
+++ /dev/null
@@ -1,363 +0,0 @@
-#include <curses.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "mucurses.h"
-#include "cursor.h"
-
-/** @file
- *
- * Soft label key functions
- */
-
-#define MIN_SPACE_SIZE 2
-
-#define SLK_MAX_LABEL_LEN 8
-
-#define SLK_MAX_NUM_LABELS 12
-
-#define SLK_MAX_NUM_SPACES 2
-
-struct _softlabel {
- // label string
- char label[SLK_MAX_LABEL_LEN];
- /* Format of soft label
- 0: left justify
- 1: centre justify
- 2: right justify
- */
- unsigned int fmt;
-};
-
-struct _softlabelkeys {
- struct _softlabel fkeys[SLK_MAX_NUM_LABELS];
- attr_t attrs;
- /* Soft label layout format
- 0: 3-2-3
- 1: 4-4
- 2: 4-4-4
- 3: 4-4-4 with index line
- */
- unsigned int fmt;
- unsigned int max_label_len;
- unsigned int maj_space_len;
- unsigned int num_labels;
- unsigned int num_spaces;
- unsigned int spaces[SLK_MAX_NUM_SPACES];
- struct cursor_pos saved_cursor;
- attr_t saved_attrs;
- short saved_pair;
-};
-
-static struct _softlabelkeys *slks;
-
-/*
- I either need to break the primitives here, or write a collection of
- functions specifically for SLKs that directly access the screen
- functions - since this technically isn't part of stdscr, I think
- this should be ok...
- */
-
-static void _enter_slk ( void ) {
- _store_curs_pos ( stdscr, &slks->saved_cursor );
- wattr_get ( stdscr, &slks->saved_attrs, &slks->saved_pair, NULL );
- LINES++;
- wmove ( stdscr, LINES, 0 );
- wattrset ( stdscr, slks->attrs );
-}
-
-static void _leave_slk ( void ) {
- LINES--;
- wattr_set ( stdscr, slks->saved_attrs, slks->saved_pair, NULL );
- _restore_curs_pos ( stdscr, &slks->saved_cursor );
-}
-
-static void _print_label ( struct _softlabel sl ) {
- int space_ch;
- char str[SLK_MAX_LABEL_LEN + 1];
-
- assert ( slks->max_label_len <= SLK_MAX_LABEL_LEN );
- space_ch = ' ';
-
- // protect against gaps in the soft label keys array
- if ( sl.label == NULL ) {
- memset( str, space_ch, (size_t)(slks->max_label_len) );
- } else {
- /* we need to pad the label with varying amounts of leading
- pad depending on the format of the label */
- if ( sl.fmt == 1 ) {
- memset( str, space_ch,
- (size_t)(slks->max_label_len
- - strlen(sl.label)) / 2 );
- }
- if ( sl.fmt == 2 ) {
- memset( str, space_ch,
- (size_t)(slks->max_label_len
- - strlen(sl.label)) );
- }
- strcat(str,sl.label);
-
- // post-padding
- memset(str+strlen(str), space_ch,
- (size_t)(slks->max_label_len - strlen(str)) );
- }
-
- // print the formatted label
- _wputstr ( stdscr, str, NOWRAP, slks->max_label_len );
-}
-
-/**
- * Return the attribute used for the soft function keys
- *
- * @ret attrs the current attributes of the soft function keys
- */
-attr_t slk_attr ( void ) {
- return ( slks == NULL ? 0 : slks->attrs );
-}
-
-/**
- * Turn off soft function key attributes
- *
- * @v attrs attribute bit mask
- * @ret rc return status code
- */
-int slk_attroff ( const chtype attrs ) {
- if ( slks == NULL )
- return ERR;
- slks->attrs &= ~( attrs & A_ATTRIBUTES );
- return OK;
-}
-
-/**
- * Turn on soft function key attributes
- *
- * @v attrs attribute bit mask
- * @ret rc return status code
- */
-int slk_attron ( const chtype attrs ) {
- if ( slks == NULL )
- return ERR;
- slks->attrs |= ( attrs & A_ATTRIBUTES );
- return OK;
-}
-
-/**
- * Set soft function key attributes
- *
- * @v attrs attribute bit mask
- * @ret rc return status code
- */
-int slk_attrset ( const chtype attrs ) {
- if ( slks == NULL )
- return ERR;
- slks->attrs = ( attrs & A_ATTRIBUTES );
- return OK;
-}
-
-/**
- * Turn off soft function key attributes
- *
- * @v attrs attribute bit mask
- * @v *opts undefined (for future implementation)
- * @ret rc return status code
- */
-int slk_attr_off ( const attr_t attrs, void *opts __unused ) {
- return slk_attroff( attrs );
-}
-
-/**
- * Turn on soft function key attributes
- *
- * @v attrs attribute bit mask
- * @v *opts undefined (for future implementation)
- * @ret rc return status code
- */
-int slk_attr_on ( attr_t attrs, void *opts __unused ) {
- return slk_attron( attrs );
-}
-
-/**
- * Set soft function key attributes
- *
- * @v attrs attribute bit mask
- * @v colour_pair_number colour pair integer
- * @v *opts undefined (for future implementation)
- * @ret rc return status code
- */
-int slk_attr_set ( const attr_t attrs, short colour_pair_number,
- void *opts __unused ) {
- if ( slks == NULL )
- return ERR;
-
- if ( ( unsigned short )colour_pair_number > COLORS )
- return ERR;
-
- slks->attrs = ( (unsigned short)colour_pair_number << CPAIR_SHIFT ) |
- ( attrs & A_ATTRIBUTES );
- return OK;
-}
-
-/**
- * Clear the soft function key labels from the screen
- *
- * @ret rc return status code
- */
-int slk_clear ( void ) {
- if ( slks == NULL )
- return ERR;
-
- _enter_slk();
- wclrtoeol ( stdscr );
- _leave_slk();
-
- return OK;
-}
-
-/**
- * Set soft label colour pair
- */
-int slk_colour ( short colour_pair_number ) {
- if ( slks == NULL )
- return ERR;
- if ( ( unsigned short )colour_pair_number > COLORS )
- return ERR;
-
- slks->attrs = ( (unsigned short)colour_pair_number << CPAIR_SHIFT )
- | ( slks->attrs & A_ATTRIBUTES );
-
- return OK;
-}
-
-/**
- * Initialise the soft function keys
- *
- * @v fmt format of keys
- * @ret rc return status code
- */
-int slk_init ( int fmt ) {
- unsigned short nmaj, nmin, nblocks, available_width;
-
- if ( (unsigned)fmt > 3 ) {
- return ERR;
- }
-
- /* There seems to be no API call to free this data structure... */
- if ( ! slks )
- slks = calloc(1,sizeof(*slks));
- if ( ! slks )
- return ERR;
-
- slks->attrs = A_DEFAULT;
- slks->fmt = fmt;
- switch(fmt) {
- case 0:
- nblocks = 8; nmaj = 2; nmin = 5;
- slks->spaces[0] = 2; slks->spaces[1] = 4;
- break;
- case 1:
- nblocks = 8; nmaj = 1; nmin = 6;
- slks->spaces[0] = 3;
- break;
- case 2:
- // same allocations as format 3
- case 3:
- nblocks = 12; nmaj = 2; nmin = 9;
- slks->spaces[0] = 3; slks->spaces[1] = 7;
- break;
- default:
- nblocks = 0; nmaj = 0; nmin = 0;
- break;
- }
-
- // determine maximum label length and major space size
- available_width = COLS - ( ( MIN_SPACE_SIZE * nmaj ) + nmin );
- slks->max_label_len = available_width / nblocks;
- slks->maj_space_len = MIN_SPACE_SIZE +
- ( available_width % nblocks ) / nmaj;
- slks->num_spaces = nmaj;
- slks->num_labels = nblocks;
-
- // strip a line from the screen
- LINES -= 1;
-
- return OK;
-}
-
-/**
- * Return the label for the specified soft key
- *
- * @v labnum soft key identifier
- * @ret label return label
- */
-char* slk_label ( int labnum ) {
- if ( slks == NULL )
- return NULL;
-
- return slks->fkeys[labnum].label;
-}
-
-/**
- * Restore soft function key labels to the screen
- *
- * @ret rc return status code
- */
-int slk_restore ( void ) {
- unsigned int i, j, pos_x,
- *next_space, *last_space;
- chtype space_ch;
-
- if ( slks == NULL )
- return ERR;
-
- pos_x = 0;
-
- _enter_slk();
-
- space_ch = (chtype)' ' | slks->attrs;
- next_space = &(slks->spaces[0]);
- last_space = &(slks->spaces[slks->num_spaces-1]);
-
- for ( i = 0; i < slks->num_labels ; i++ ) {
- _print_label( slks->fkeys[i] );
- pos_x += slks->max_label_len;
-
- if ( i == *next_space ) {
- for ( j = 0; j < slks->maj_space_len; j++, pos_x++ )
- _wputch ( stdscr, space_ch, NOWRAP );
- if ( next_space < last_space )
- next_space++;
- } else {
- if ( pos_x < COLS )
- _wputch ( stdscr, space_ch, NOWRAP );
- pos_x++;
- }
- }
-
- _leave_slk();
-
- return OK;
-}
-
-/**
- * Configure specified soft key
- *
- * @v labnum soft label position to configure
- * @v *label string to use as soft key label
- * @v fmt justification format of label
- * @ret rc return status code
- */
-int slk_set ( int labnum, const char *label, int fmt ) {
- if ( slks == NULL )
- return ERR;
- if ( (unsigned short)labnum >= slks->num_labels )
- return ERR;
- if ( (unsigned short)fmt >= 3 )
- return ERR;
-
- strncpy(slks->fkeys[labnum].label, label,
- sizeof(slks->fkeys[labnum].label));
- slks->fkeys[labnum].fmt = fmt;
-
- return OK;
-}
diff --git a/gpxe/src/hci/mucurses/widgets/editbox.c b/gpxe/src/hci/mucurses/widgets/editbox.c
deleted file mode 100644
index ee7d609d..00000000
--- a/gpxe/src/hci/mucurses/widgets/editbox.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2006 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#include <string.h>
-#include <assert.h>
-#include <gpxe/editbox.h>
-
-/** @file
- *
- * Editable text box widget
- *
- */
-
-#define EDITBOX_MIN_CHARS 3
-
-/**
- * Initialise text box widget
- *
- * @v box Editable text box widget
- * @v buf Text buffer
- * @v len Size of text buffer
- * @v win Containing window
- * @v row Row
- * @v col Starting column
- * @v width Width
- * @v flags Flags
- */
-void init_editbox ( struct edit_box *box, char *buf, size_t len,
- WINDOW *win, unsigned int row, unsigned int col,
- unsigned int width, unsigned int flags ) {
- memset ( box, 0, sizeof ( *box ) );
- box->string.buf = buf;
- box->string.len = len;
- box->string.cursor = strlen ( buf );
- box->win = ( win ? win : stdscr );
- box->row = row;
- box->col = col;
- box->width = width;
- box->flags = flags;
-}
-
-/**
- * Draw text box widget
- *
- * @v box Editable text box widget
- *
- */
-void draw_editbox ( struct edit_box *box ) {
- size_t width = box->width;
- char buf[ width + 1 ];
- signed int cursor_offset, underflow, overflow, first;
- size_t len;
-
- /* Adjust starting offset so that cursor remains within box */
- cursor_offset = ( box->string.cursor - box->first );
- underflow = ( EDITBOX_MIN_CHARS - cursor_offset );
- overflow = ( cursor_offset - ( width - 1 ) );
- first = box->first;
- if ( underflow > 0 ) {
- first -= underflow;
- if ( first < 0 )
- first = 0;
- } else if ( overflow > 0 ) {
- first += overflow;
- }
- box->first = first;
- cursor_offset = ( box->string.cursor - first );
-
- /* Construct underscore-padded string portion */
- memset ( buf, '_', width );
- buf[width] = '\0';
- len = ( strlen ( box->string.buf ) - first );
- if ( len > width )
- len = width;
- if ( box->flags & EDITBOX_STARS ) {
- memset ( buf, '*', len );
- } else {
- memcpy ( buf, ( box->string.buf + first ), len );
- }
-
- /* Print box content and move cursor */
- if ( ! box->win )
- box->win = stdscr;
- mvwprintw ( box->win, box->row, box->col, "%s", buf );
- wmove ( box->win, box->row, ( box->col + cursor_offset ) );
-}
diff --git a/gpxe/src/hci/mucurses/winattrs.c b/gpxe/src/hci/mucurses/winattrs.c
deleted file mode 100644
index f549d751..00000000
--- a/gpxe/src/hci/mucurses/winattrs.c
+++ /dev/null
@@ -1,133 +0,0 @@
-#include <curses.h>
-
-/** @file
- *
- * MuCurses window attribute functions
- *
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-/**
- * Get the background rendition attributes for a window
- *
- * @v *win subject window
- * @ret ch chtype rendition representation
- */
-inline chtype getbkgd ( WINDOW *win ) {
- return win->attrs;
-}
-
-/**
- * Turn off attributes in a window
- *
- * @v win subject window
- * @v attrs attributes to enable
- * @ret rc return status code
- */
-int wattroff ( WINDOW *win, int attrs ) {
- win->attrs &= ~attrs;
- return OK;
-}
-
-/**
- * Turn on attributes in a window
- *
- * @v win subject window
- * @v attrs attributes to enable
- * @ret rc return status code
- */
-int wattron ( WINDOW *win, int attrs ) {
- win->attrs |= attrs;
- return OK;
-}
-
-/**
- * Set attributes in a window
- *
- * @v win subject window
- * @v attrs attributes to enable
- * @ret rc return status code
- */
-int wattrset ( WINDOW *win, int attrs ) {
- win->attrs = ( attrs | ( win->attrs & A_COLOR ) );
- return OK;
-}
-
-/**
- * Get attributes and colour pair information
- *
- * @v *win window to obtain information from
- * @v *attrs address in which to store attributes
- * @v *pair address in which to store colour pair
- * @v *opts undefined (for future implementation)
- * @ret rc return status cude
- */
-int wattr_get ( WINDOW *win, attr_t *attrs, short *pair,
- void *opts __unused ) {
- *attrs = win->attrs & A_ATTRIBUTES;
- *pair = PAIR_NUMBER ( win->attrs );
- return OK;
-}
-
-/**
- * Turn off attributes in a window
- *
- * @v *win subject window
- * @v attrs attributes to toggle
- * @v *opts undefined (for future implementation)
- * @ret rc return status code
- */
-int wattr_off ( WINDOW *win, attr_t attrs,
- void *opts __unused ) {
- wattroff( win, attrs );
- return OK;
-}
-
-/**
- * Turn on attributes in a window
- *
- * @v *win subject window
- * @v attrs attributes to toggle
- * @v *opts undefined (for future implementation)
- * @ret rc return status code
- */
-int wattr_on ( WINDOW *win, attr_t attrs,
- void *opts __unused ) {
- wattron( win, attrs );
- return OK;
-}
-
-/**
- * Set attributes and colour pair information in a window
- *
- * @v *win subject window
- * @v attrs attributes to set
- * @v cpair colour pair to set
- * @v *opts undefined (for future implementation)
- * @ret rc return status code
- */
-int wattr_set ( WINDOW *win, attr_t attrs, short cpair,
- void *opts __unused ) {
- wattrset( win, attrs | COLOUR_PAIR ( cpair ) );
- return OK;
-}
-
-/**
- * Set colour pair for a window
- *
- * @v *win subject window
- * @v colour_pair_number colour pair integer
- * @v *opts undefined (for future implementation)
- * @ret rc return status code
- */
-int wcolour_set ( WINDOW *win, short colour_pair_number,
- void *opts __unused ) {
- if ( ( unsigned short )colour_pair_number > COLOUR_PAIRS )
- return ERR;
-
- win->attrs = ( ( win->attrs & A_ATTRIBUTES ) |
- COLOUR_PAIR ( colour_pair_number ) );
- return OK;
-}
-
diff --git a/gpxe/src/hci/mucurses/windows.c b/gpxe/src/hci/mucurses/windows.c
deleted file mode 100644
index 63d0af08..00000000
--- a/gpxe/src/hci/mucurses/windows.c
+++ /dev/null
@@ -1,158 +0,0 @@
-#include <curses.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include "mucurses.h"
-
-/** @file
- *
- * MuCurses windows instance functions
- *
- */
-
-/**
- * Delete a window
- *
- * @v *win pointer to window being deleted
- * @ret rc return status code
- */
-int delwin ( WINDOW *win ) {
- if ( win == NULL )
- return ERR;
-
- /* I think we should blank the region covered by the window -
- ncurses doesn't do this, but they have a buffer, so they
- may just be deleting from an offscreen context whereas we
- are guaranteed to be deleting something onscreen */
- wmove( win, 0, 0 );
- chtype killch = (chtype)' ';
- do {
- _wputch( win, killch, WRAP );
- } while ( win->curs_x + win->curs_y );
-
- free( win );
-
- wmove ( stdscr, 0, 0 );
-
- return OK;
-}
-
-/**
- * Create a new derived window
- *
- * @v parent parent window
- * @v nlines window height
- * @v ncols window width
- * @v begin_y window y origin (relative to parent)
- * @v begin_x window x origin (relative to parent)
- * @ret ptr return pointer to child window
- */
-WINDOW *derwin ( WINDOW *parent, int nlines, int ncols,
- int begin_y, int begin_x ) {
- WINDOW *child;
- if ( parent == NULL )
- return NULL;
- if ( ( child = malloc( sizeof( WINDOW ) ) ) == NULL )
- return NULL;
- if ( ( (unsigned)ncols > parent->width ) ||
- ( (unsigned)nlines > parent->height ) )
- return NULL;
- child->ori_y = parent->ori_y + begin_y;
- child->ori_x = parent->ori_x + begin_x;
- child->height = nlines;
- child->width = ncols;
- child->parent = parent;
- child->scr = parent->scr;
- return child;
-}
-
-/**
- * Create a duplicate of the specified window
- *
- * @v orig original window
- * @ret ptr pointer to duplicate window
- */
-WINDOW *dupwin ( WINDOW *orig ) {
- WINDOW *copy;
- if ( orig == NULL )
- return NULL;
- if ( ( copy = malloc( sizeof( WINDOW ) ) ) == NULL )
- return NULL;
- copy->scr = orig->scr;
- copy->attrs = orig->attrs;
- copy->ori_y = orig->ori_y;
- copy->ori_x = orig->ori_x;
- copy->curs_y = orig->curs_y;
- copy->curs_x = orig->curs_x;
- copy->height = orig->height;
- copy->width = orig->width;
- return copy;
-}
-
-/**
- * Move window origin to specified coordinates
- *
- * @v *win window to move
- * @v y Y position
- * @v x X position
- * @ret rc return status code
- */
-int mvwin ( WINDOW *win, int y, int x ) {
- if ( win == NULL )
- return ERR;
- if ( ( ( (unsigned)y + win->height ) > LINES ) ||
- ( ( (unsigned)x + win->width ) > COLS ) )
- return ERR;
-
- win->ori_y = y;
- win->ori_x = x;
-
- return OK;
-}
-
-/**
- * Create new WINDOW
- *
- * @v nlines number of lines
- * @v ncols number of columns
- * @v begin_y column origin
- * @v begin_x line origin
- * @ret *win return pointer to new window
- */
-WINDOW *newwin ( int nlines, int ncols, int begin_y, int begin_x ) {
- WINDOW *win;
- if ( ( win = malloc( sizeof(WINDOW) ) ) == NULL )
- return NULL;
- if ( ( (unsigned)( begin_y + nlines ) > stdscr->height ) &&
- ( (unsigned)( begin_x + ncols ) > stdscr->width ) )
- return NULL;
- win->ori_y = begin_y;
- win->ori_x = begin_x;
- win->height = nlines;
- win->width = ncols;
- win->scr = stdscr->scr;
- win->parent = stdscr;
- return win;
-}
-
-/**
- * Create a new sub-window
- *
- * @v orig parent window
- * @v nlines window height
- * @v ncols window width
- * @v begin_y window y origin (absolute)
- * @v begin_x window x origin (absolute)
- * @ret ptr return pointer to child window
- */
-WINDOW *subwin ( WINDOW *parent, int nlines, int ncols,
- int begin_y, int begin_x ) {
- WINDOW *child;
- if ( parent == NULL )
- return NULL;
- if ( ( child = malloc( sizeof( WINDOW ) ) ) == NULL )
- return NULL;
- child = newwin( nlines, ncols, begin_y, begin_x );
- child->parent = parent;
- child->scr = parent->scr;
- return child;
-}
diff --git a/gpxe/src/hci/mucurses/wininit.c b/gpxe/src/hci/mucurses/wininit.c
deleted file mode 100644
index 782e7b5c..00000000
--- a/gpxe/src/hci/mucurses/wininit.c
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <stddef.h>
-#include <curses.h>
-
-/** @file
- *
- * MuCurses initialisation functions
- *
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-/**
- * Initialise console environment
- *
- * @ret *win return pointer to stdscr
- */
-WINDOW *initscr ( void ) {
- /* determine console size */
- /* initialise screen */
- stdscr->scr->init( stdscr->scr );
- stdscr->height = LINES;
- stdscr->width = COLS;
- move ( 0, 0 );
- return stdscr;
-}
-
-/**
- * Finalise console environment
- *
- */
-int endwin ( void ) {
- attrset ( 0 );
- color_set ( 0, NULL );
- mvprintw ( ( LINES - 1 ), 0, "\n" );
- stdscr->scr->exit( stdscr->scr );
- return OK;
-}
diff --git a/gpxe/src/hci/readline.c b/gpxe/src/hci/readline.c
deleted file mode 100644
index e5699d51..00000000
--- a/gpxe/src/hci/readline.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2006 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <console.h>
-#include <gpxe/keys.h>
-#include <gpxe/editstring.h>
-#include <readline/readline.h>
-
-/** @file
- *
- * Minimal readline
- *
- */
-
-#define READLINE_MAX 256
-
-static void sync_console ( struct edit_string *string ) __nonnull;
-
-/**
- * Synchronise console with edited string
- *
- * @v string Editable string
- */
-static void sync_console ( struct edit_string *string ) {
- unsigned int mod_start = string->mod_start;
- unsigned int mod_end = string->mod_end;
- unsigned int cursor = string->last_cursor;
- size_t len = strlen ( string->buf );
-
- /* Expand region back to old cursor position if applicable */
- if ( mod_start > string->last_cursor )
- mod_start = string->last_cursor;
-
- /* Expand region forward to new cursor position if applicable */
- if ( mod_end < string->cursor )
- mod_end = string->cursor;
-
- /* Backspace to start of region */
- while ( cursor > mod_start ) {
- putchar ( '\b' );
- cursor--;
- }
-
- /* Print modified region */
- while ( cursor < mod_end ) {
- putchar ( ( cursor >= len ) ? ' ' : string->buf[cursor] );
- cursor++;
- }
-
- /* Backspace to new cursor position */
- while ( cursor > string->cursor ) {
- putchar ( '\b' );
- cursor--;
- }
-}
-
-/**
- * Read line from console
- *
- * @v prompt Prompt string
- * @ret line Line read from console (excluding terminating newline)
- *
- * The returned line is allocated with malloc(); the caller must
- * eventually call free() to release the storage.
- */
-char * readline ( const char *prompt ) {
- char buf[READLINE_MAX];
- struct edit_string string;
- int key;
- char *line;
-
- if ( prompt )
- printf ( "%s", prompt );
-
- memset ( &string, 0, sizeof ( string ) );
- string.buf = buf;
- string.len = sizeof ( buf );
- buf[0] = '\0';
-
- while ( 1 ) {
- key = edit_string ( &string, getkey() );
- sync_console ( &string );
- switch ( key ) {
- case CR:
- case LF:
- putchar ( '\n' );
- line = strdup ( buf );
- if ( ! line )
- printf ( "Out of memory\n" );
- return line;
- case CTRL_C:
- putchar ( '\n' );
- return NULL;
- default:
- /* Do nothing */
- break;
- }
- }
-}
diff --git a/gpxe/src/hci/shell.c b/gpxe/src/hci/shell.c
deleted file mode 100644
index 5bedbdc9..00000000
--- a/gpxe/src/hci/shell.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2006 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <readline/readline.h>
-#include <gpxe/command.h>
-#include <gpxe/shell.h>
-
-/** @file
- *
- * Minimal command shell
- *
- */
-
-/** The shell prompt string */
-static const char shell_prompt[] = "gPXE> ";
-
-/** Flag set in order to exit shell */
-static int exit_flag = 0;
-
-/** "exit" command body */
-static int exit_exec ( int argc, char **argv __unused ) {
-
- if ( argc == 1 ) {
- exit_flag = 1;
- } else {
- printf ( "Usage: exit\n"
- "Exits the command shell\n" );
- }
-
- return 0;
-}
-
-/** "exit" command definition */
-struct command exit_command __command = {
- .name = "exit",
- .exec = exit_exec,
-};
-
-/** "help" command body */
-static int help_exec ( int argc __unused, char **argv __unused ) {
- struct command *command;
- unsigned int hpos = 0;
-
- printf ( "\nAvailable commands:\n\n" );
- for_each_table_entry ( command, COMMANDS ) {
- hpos += printf ( " %s", command->name );
- if ( hpos > ( 16 * 4 ) ) {
- printf ( "\n" );
- hpos = 0;
- } else {
- while ( hpos % 16 ) {
- printf ( " " );
- hpos++;
- }
- }
- }
- printf ( "\n\nType \"<command> --help\" for further information\n\n" );
- return 0;
-}
-
-/** "help" command definition */
-struct command help_command __command = {
- .name = "help",
- .exec = help_exec,
-};
-
-/**
- * Start command shell
- *
- */
-void shell ( void ) {
- char *line;
-
- exit_flag = 0;
- while ( ! exit_flag ) {
- line = readline ( shell_prompt );
- if ( line ) {
- system ( line );
- free ( line );
- }
- }
-}
diff --git a/gpxe/src/hci/shell_banner.c b/gpxe/src/hci/shell_banner.c
deleted file mode 100644
index b92e08e3..00000000
--- a/gpxe/src/hci/shell_banner.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2006 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#include <stdio.h>
-#include <console.h>
-#include <unistd.h>
-#include <config/general.h>
-#include <gpxe/keys.h>
-#include <gpxe/shell_banner.h>
-
-/** @file
- *
- * Shell startup banner
- *
- */
-
-/**
- * Print shell banner and prompt for shell entry
- *
- * @ret enter_shell User wants to enter shell
- */
-int shell_banner ( void ) {
- int enter_shell = 0;
- int wait_count;
- int key;
-
- if ( BANNER_TIMEOUT <= 0 )
- return enter_shell;
-
- printf ( "\nPress Ctrl-B for the gPXE command line..." );
-
- /* Wait for key */
- for ( wait_count = 0 ; wait_count < BANNER_TIMEOUT ; wait_count++ ) {
- if ( iskey() ) {
- key = getchar();
- if ( key == CTRL_B )
- enter_shell = 1;
- break;
- }
- mdelay(100);
- }
-
- /* Clear the "Press Ctrl-B" line */
- printf ( "\r \r" );
-
- return enter_shell;
-}
diff --git a/gpxe/src/hci/strerror.c b/gpxe/src/hci/strerror.c
deleted file mode 100644
index 94547dd4..00000000
--- a/gpxe/src/hci/strerror.c
+++ /dev/null
@@ -1,122 +0,0 @@
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <gpxe/errortab.h>
-
-/** @file
- *
- * Error descriptions.
- *
- * The error numbers used by Etherboot are a superset of those defined
- * by the PXE specification version 2.1. See errno.h for a listing of
- * the error values.
- *
- * To save space in ROM images, error string tables are optional. Use
- * the ERRORMSG_XXX options in config.h to select which error string
- * tables you want to include. If an error string table is omitted,
- * strerror() will simply return the text "Error 0x<errno>".
- *
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-/**
- * Find error description
- *
- * @v errno Error number
- * @ret errortab Error description, or NULL
- */
-static struct errortab * find_error ( int errno ) {
- struct errortab *errortab;
-
- for_each_table_entry ( errortab, ERRORTAB ) {
- if ( errortab->errno == errno )
- return errortab;
- }
-
- return NULL;
-}
-
-/**
- * Find closest error description
- *
- * @v errno Error number
- * @ret errortab Error description, or NULL
- *
- *
- */
-static struct errortab * find_closest_error ( int errno ) {
- struct errortab *errortab;
-
- /* First, look for an exact match */
- if ( ( errortab = find_error ( errno ) ) != NULL )
- return errortab;
-
- /* Second, try masking off the gPXE-specific bit and seeing if
- * we have an entry for the generic POSIX error message.
- */
- if ( ( errortab = find_error ( errno & 0x7f0000ff ) ) != NULL )
- return errortab;
-
- return NULL;
-}
-
-/**
- * Retrieve string representation of error number.
- *
- * @v errno/rc Error number or return status code
- * @ret strerror Pointer to error text
- *
- * If the error is not found in the linked-in error tables, generates
- * a generic "Error 0x<errno>" message.
- *
- * The pointer returned by strerror() is valid only until the next
- * call to strerror().
- *
- */
-const char * strerror ( int errno ) {
- static char errbuf[64];
- struct errortab *errortab;
-
- /* Allow for strerror(rc) as well as strerror(errno) */
- if ( errno < 0 )
- errno = -errno;
-
- /* Find the error description, if one exists */
- errortab = find_closest_error ( errno );
-
- /* Construct the error message */
- if ( errortab ) {
- snprintf ( errbuf, sizeof ( errbuf ), "%s (%#08x)",
- errortab->text, errno );
- } else {
- snprintf ( errbuf, sizeof ( errbuf ), "Error %#08x", errno );
- }
-
- return errbuf;
-}
-
-/* Do not include ERRFILE portion in the numbers in the error table */
-#undef ERRFILE
-#define ERRFILE 0
-
-/** The most common errors */
-struct errortab common_errors[] __errortab = {
- { 0, "No error" },
- { EACCES, "Permission denied" },
- { ECANCELED, "Operation cancelled" },
- { ECONNRESET, "Connection reset" },
- { EINVAL, "Invalid argument" },
- { EIO, "Input/output error" },
- { ENETUNREACH, "Network unreachable" },
- { ENODEV, "No such device" },
- { ENOENT, "File not found" },
- { ENOEXEC, "Not an executable image" },
- { ENOMEM, "Out of memory" },
- { ENOSPC, "No space left on device" },
- { ENOTCONN, "Not connected" },
- { ENOTSUP, "Not supported" },
- { EPERM, "Operation not permitted" },
- { ERANGE, "Out of range" },
- { ETIMEDOUT, "Connection timed out" },
-};
diff --git a/gpxe/src/hci/tui/login_ui.c b/gpxe/src/hci/tui/login_ui.c
deleted file mode 100644
index b80bf27b..00000000
--- a/gpxe/src/hci/tui/login_ui.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2009 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-/** @file
- *
- * Login UI
- *
- */
-
-#include <string.h>
-#include <errno.h>
-#include <curses.h>
-#include <console.h>
-#include <gpxe/settings.h>
-#include <gpxe/editbox.h>
-#include <gpxe/keys.h>
-#include <gpxe/login_ui.h>
-
-/* Colour pairs */
-#define CPAIR_NORMAL 1
-#define CPAIR_LABEL 2
-#define CPAIR_EDITBOX 3
-
-/* Screen layout */
-#define USERNAME_LABEL_ROW 8
-#define USERNAME_ROW 10
-#define PASSWORD_LABEL_ROW 14
-#define PASSWORD_ROW 16
-#define LABEL_COL 36
-#define EDITBOX_COL 30
-#define EDITBOX_WIDTH 20
-
-int login_ui ( void ) {
- char username[64];
- char password[64];
- struct edit_box username_box;
- struct edit_box password_box;
- struct edit_box *current_box = &username_box;
- int key;
- int rc = -EINPROGRESS;
-
- /* Fetch current setting values */
- fetch_string_setting ( NULL, &username_setting, username,
- sizeof ( username ) );
- fetch_string_setting ( NULL, &password_setting, password,
- sizeof ( password ) );
-
- /* Initialise UI */
- initscr();
- start_color();
- init_pair ( CPAIR_NORMAL, COLOR_WHITE, COLOR_BLACK );
- init_pair ( CPAIR_LABEL, COLOR_WHITE, COLOR_BLACK );
- init_pair ( CPAIR_EDITBOX, COLOR_WHITE, COLOR_BLUE );
- init_editbox ( &username_box, username, sizeof ( username ), NULL,
- USERNAME_ROW, EDITBOX_COL, EDITBOX_WIDTH, 0 );
- init_editbox ( &password_box, password, sizeof ( password ), NULL,
- PASSWORD_ROW, EDITBOX_COL, EDITBOX_WIDTH,
- EDITBOX_STARS );
-
- /* Draw initial UI */
- erase();
- color_set ( CPAIR_LABEL, NULL );
- mvprintw ( USERNAME_LABEL_ROW, LABEL_COL, "Username:" );
- mvprintw ( PASSWORD_LABEL_ROW, LABEL_COL, "Password:" );
- color_set ( CPAIR_EDITBOX, NULL );
- draw_editbox ( &username_box );
- draw_editbox ( &password_box );
-
- /* Main loop */
- while ( rc == -EINPROGRESS ) {
-
- draw_editbox ( current_box );
-
- key = getkey();
- switch ( key ) {
- case KEY_DOWN:
- current_box = &password_box;
- break;
- case KEY_UP:
- current_box = &username_box;
- break;
- case TAB:
- current_box = ( ( current_box == &username_box ) ?
- &password_box : &username_box );
- break;
- case KEY_ENTER:
- if ( current_box == &username_box ) {
- current_box = &password_box;
- } else {
- rc = 0;
- }
- break;
- case CTRL_C:
- case ESC:
- rc = -ECANCELED;
- break;
- default:
- edit_editbox ( current_box, key );
- break;
- }
- }
-
- /* Terminate UI */
- color_set ( CPAIR_NORMAL, NULL );
- erase();
- endwin();
-
- if ( rc != 0 )
- return rc;
-
- /* Store settings */
- if ( ( rc = store_setting ( NULL, &username_setting, username,
- strlen ( username ) ) ) != 0 )
- return rc;
- if ( ( rc = store_setting ( NULL, &password_setting, password,
- strlen ( password ) ) ) != 0 )
- return rc;
-
- return 0;
-}
diff --git a/gpxe/src/hci/tui/settings_ui.c b/gpxe/src/hci/tui/settings_ui.c
deleted file mode 100644
index 74ce6afb..00000000
--- a/gpxe/src/hci/tui/settings_ui.c
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- * Copyright (C) 2006 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <string.h>
-#include <curses.h>
-#include <console.h>
-#include <gpxe/settings.h>
-#include <gpxe/editbox.h>
-#include <gpxe/keys.h>
-#include <gpxe/settings_ui.h>
-
-/** @file
- *
- * Option configuration console
- *
- */
-
-/* Colour pairs */
-#define CPAIR_NORMAL 1
-#define CPAIR_SELECT 2
-#define CPAIR_EDIT 3
-#define CPAIR_ALERT 4
-
-/* Screen layout */
-#define TITLE_ROW 1
-#define SETTINGS_LIST_ROW 3
-#define SETTINGS_LIST_COL 1
-#define INFO_ROW 20
-#define ALERT_ROW 20
-#define INSTRUCTION_ROW 22
-#define INSTRUCTION_PAD " "
-
-/** Layout of text within a setting widget */
-struct setting_row {
- char start[0];
- char pad1[1];
- char name[15];
- char pad2[1];
- char value[60];
- char pad3[1];
- char nul;
-} __attribute__ (( packed ));
-
-/** A setting widget */
-struct setting_widget {
- /** Settings block */
- struct settings *settings;
- /** Configuration setting */
- struct setting *setting;
- /** Screen row */
- unsigned int row;
- /** Screen column */
- unsigned int col;
- /** Edit box widget used for editing setting */
- struct edit_box editbox;
- /** Editing in progress flag */
- int editing;
- /** Buffer for setting's value */
- char value[256]; /* enough size for a DHCP string */
-};
-
-/** Number of registered configuration settings */
-#define NUM_SETTINGS table_num_entries ( SETTINGS )
-
-static void load_setting ( struct setting_widget *widget ) __nonnull;
-static int save_setting ( struct setting_widget *widget ) __nonnull;
-static void init_setting ( struct setting_widget *widget,
- struct settings *settings,
- struct setting *setting,
- unsigned int row, unsigned int col ) __nonnull;
-static void draw_setting ( struct setting_widget *widget ) __nonnull;
-static int edit_setting ( struct setting_widget *widget, int key ) __nonnull;
-static void init_setting_index ( struct setting_widget *widget,
- struct settings *settings,
- unsigned int index ) __nonnull;
-static void vmsg ( unsigned int row, const char *fmt, va_list args ) __nonnull;
-static void msg ( unsigned int row, const char *fmt, ... ) __nonnull;
-static void valert ( const char *fmt, va_list args ) __nonnull;
-static void alert ( const char *fmt, ... ) __nonnull;
-static void draw_info_row ( struct setting *setting ) __nonnull;
-static int main_loop ( struct settings *settings ) __nonnull;
-
-/**
- * Load setting widget value from configuration settings
- *
- * @v widget Setting widget
- *
- */
-static void load_setting ( struct setting_widget *widget ) {
-
- /* Mark as not editing */
- widget->editing = 0;
-
- /* Read current setting value */
- if ( fetchf_setting ( widget->settings, widget->setting,
- widget->value, sizeof ( widget->value ) ) < 0 ) {
- widget->value[0] = '\0';
- }
-
- /* Initialise edit box */
- init_editbox ( &widget->editbox, widget->value,
- sizeof ( widget->value ), NULL, widget->row,
- ( widget->col + offsetof ( struct setting_row, value )),
- sizeof ( ( ( struct setting_row * ) NULL )->value ), 0);
-}
-
-/**
- * Save setting widget value back to configuration settings
- *
- * @v widget Setting widget
- */
-static int save_setting ( struct setting_widget *widget ) {
- return storef_setting ( widget->settings, widget->setting,
- widget->value );
-}
-
-/**
- * Initialise setting widget
- *
- * @v widget Setting widget
- * @v settings Settings block
- * @v setting Configuration setting
- * @v row Screen row
- * @v col Screen column
- */
-static void init_setting ( struct setting_widget *widget,
- struct settings *settings,
- struct setting *setting,
- unsigned int row, unsigned int col ) {
-
- /* Initialise widget structure */
- memset ( widget, 0, sizeof ( *widget ) );
- widget->settings = settings;
- widget->setting = setting;
- widget->row = row;
- widget->col = col;
-
- /* Read current setting value */
- load_setting ( widget );
-}
-
-/**
- * Draw setting widget
- *
- * @v widget Setting widget
- */
-static void draw_setting ( struct setting_widget *widget ) {
- struct setting_row row;
- unsigned int len;
- unsigned int curs_col;
- char *value;
-
- /* Fill row with spaces */
- memset ( &row, ' ', sizeof ( row ) );
- row.nul = '\0';
-
- /* Construct dot-padded name */
- memset ( row.name, '.', sizeof ( row.name ) );
- len = strlen ( widget->setting->name );
- if ( len > sizeof ( row.name ) )
- len = sizeof ( row.name );
- memcpy ( row.name, widget->setting->name, len );
-
- /* Construct space-padded value */
- value = widget->value;
- if ( ! *value )
- value = "<not specified>";
- len = strlen ( value );
- if ( len > sizeof ( row.value ) )
- len = sizeof ( row.value );
- memcpy ( row.value, value, len );
- curs_col = ( widget->col + offsetof ( typeof ( row ), value )
- + len );
-
- /* Print row */
- mvprintw ( widget->row, widget->col, "%s", row.start );
- move ( widget->row, curs_col );
- if ( widget->editing )
- draw_editbox ( &widget->editbox );
-}
-
-/**
- * Edit setting widget
- *
- * @v widget Setting widget
- * @v key Key pressed by user
- * @ret key Key returned to application, or zero
- */
-static int edit_setting ( struct setting_widget *widget, int key ) {
- widget->editing = 1;
- return edit_editbox ( &widget->editbox, key );
-}
-
-/**
- * Initialise setting widget by index
- *
- * @v widget Setting widget
- * @v settings Settings block
- * @v index Index of setting with settings list
- */
-static void init_setting_index ( struct setting_widget *widget,
- struct settings *settings,
- unsigned int index ) {
- struct setting *all_settings = table_start ( SETTINGS );
-
- init_setting ( widget, settings, &all_settings[index],
- ( SETTINGS_LIST_ROW + index ), SETTINGS_LIST_COL );
-}
-
-/**
- * Print message centred on specified row
- *
- * @v row Row
- * @v fmt printf() format string
- * @v args printf() argument list
- */
-static void vmsg ( unsigned int row, const char *fmt, va_list args ) {
- char buf[COLS];
- size_t len;
-
- len = vsnprintf ( buf, sizeof ( buf ), fmt, args );
- mvprintw ( row, ( ( COLS - len ) / 2 ), "%s", buf );
-}
-
-/**
- * Print message centred on specified row
- *
- * @v row Row
- * @v fmt printf() format string
- * @v .. printf() arguments
- */
-static void msg ( unsigned int row, const char *fmt, ... ) {
- va_list args;
-
- va_start ( args, fmt );
- vmsg ( row, fmt, args );
- va_end ( args );
-}
-
-/**
- * Clear message on specified row
- *
- * @v row Row
- */
-static void clearmsg ( unsigned int row ) {
- move ( row, 0 );
- clrtoeol();
-}
-
-/**
- * Print alert message
- *
- * @v fmt printf() format string
- * @v args printf() argument list
- */
-static void valert ( const char *fmt, va_list args ) {
- clearmsg ( ALERT_ROW );
- color_set ( CPAIR_ALERT, NULL );
- vmsg ( ALERT_ROW, fmt, args );
- sleep ( 2 );
- color_set ( CPAIR_NORMAL, NULL );
- clearmsg ( ALERT_ROW );
-}
-
-/**
- * Print alert message
- *
- * @v fmt printf() format string
- * @v ... printf() arguments
- */
-static void alert ( const char *fmt, ... ) {
- va_list args;
-
- va_start ( args, fmt );
- valert ( fmt, args );
- va_end ( args );
-}
-
-/**
- * Draw title row
- */
-static void draw_title_row ( void ) {
- attron ( A_BOLD );
- msg ( TITLE_ROW, "gPXE option configuration console" );
- attroff ( A_BOLD );
-}
-
-/**
- * Draw information row
- *
- * @v setting Current configuration setting
- */
-static void draw_info_row ( struct setting *setting ) {
- clearmsg ( INFO_ROW );
- attron ( A_BOLD );
- msg ( INFO_ROW, "%s - %s", setting->name, setting->description );
- attroff ( A_BOLD );
-}
-
-/**
- * Draw instruction row
- *
- * @v editing Editing in progress flag
- */
-static void draw_instruction_row ( int editing ) {
- clearmsg ( INSTRUCTION_ROW );
- if ( editing ) {
- msg ( INSTRUCTION_ROW,
- "Enter - accept changes" INSTRUCTION_PAD
- "Ctrl-C - discard changes" );
- } else {
- msg ( INSTRUCTION_ROW,
- "Ctrl-X - exit configuration utility" );
- }
-}
-
-static int main_loop ( struct settings *settings ) {
- struct setting_widget widget;
- unsigned int current = 0;
- unsigned int next;
- int i;
- int key;
- int rc;
-
- /* Print initial screen content */
- draw_title_row();
- color_set ( CPAIR_NORMAL, NULL );
- for ( i = ( NUM_SETTINGS - 1 ) ; i >= 0 ; i-- ) {
- init_setting_index ( &widget, settings, i );
- draw_setting ( &widget );
- }
-
- while ( 1 ) {
- /* Redraw information and instruction rows */
- draw_info_row ( widget.setting );
- draw_instruction_row ( widget.editing );
-
- /* Redraw current setting */
- color_set ( ( widget.editing ? CPAIR_EDIT : CPAIR_SELECT ),
- NULL );
- draw_setting ( &widget );
- color_set ( CPAIR_NORMAL, NULL );
-
- key = getkey();
- if ( widget.editing ) {
- key = edit_setting ( &widget, key );
- switch ( key ) {
- case CR:
- case LF:
- if ( ( rc = save_setting ( &widget ) ) != 0 ) {
- alert ( " Could not set %s: %s ",
- widget.setting->name,
- strerror ( rc ) );
- }
- /* Fall through */
- case CTRL_C:
- load_setting ( &widget );
- break;
- default:
- /* Do nothing */
- break;
- }
- } else {
- next = current;
- switch ( key ) {
- case KEY_DOWN:
- if ( next < ( NUM_SETTINGS - 1 ) )
- next++;
- break;
- case KEY_UP:
- if ( next > 0 )
- next--;
- break;
- case CTRL_X:
- return 0;
- default:
- edit_setting ( &widget, key );
- break;
- }
- if ( next != current ) {
- draw_setting ( &widget );
- init_setting_index ( &widget, settings, next );
- current = next;
- }
- }
- }
-
-}
-
-int settings_ui ( struct settings *settings ) {
- int rc;
-
- initscr();
- start_color();
- init_pair ( CPAIR_NORMAL, COLOR_WHITE, COLOR_BLUE );
- init_pair ( CPAIR_SELECT, COLOR_WHITE, COLOR_RED );
- init_pair ( CPAIR_EDIT, COLOR_BLACK, COLOR_CYAN );
- init_pair ( CPAIR_ALERT, COLOR_WHITE, COLOR_RED );
- color_set ( CPAIR_NORMAL, NULL );
- erase();
-
- rc = main_loop ( settings );
-
- endwin();
-
- return rc;
-}
diff --git a/gpxe/src/hci/wireless_errors.c b/gpxe/src/hci/wireless_errors.c
deleted file mode 100644
index 46006f9e..00000000
--- a/gpxe/src/hci/wireless_errors.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2009 Joshua Oreman <oremanj@rwcr.net>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#include <errno.h>
-#include <gpxe/errortab.h>
-
-/* Record errors as though they come from the 802.11 stack */
-#undef ERRFILE
-#define ERRFILE ERRFILE_net80211
-
-/** All 802.11 errors
- *
- * These follow the 802.11 standard as much as is feasible, but most
- * have been abbreviated to fit the 50-character limit imposed by
- * strerror.
- */
-struct errortab wireless_errors[] __errortab = {
- /* gPXE 802.11 stack errors */
- { EINVAL | EUNIQ_01, "Packet too short" },
- { EINVAL | EUNIQ_02, "Packet 802.11 version not supported" },
- { EINVAL | EUNIQ_03, "Packet not a data packet" },
- { EINVAL | EUNIQ_04, "Packet not from an Access Point" },
- { EINVAL | EUNIQ_05, "Packet has invalid LLC header" },
- { EINVAL | EUNIQ_06, "Packet decryption error", },
- { EINVAL | EUNIQ_07, "Invalid active scan requested" },
-
- /* 802.11 status codes (IEEE Std 802.11-2007, Table 7-23) */
- /* Maximum error length: 50 chars | */
- { ECONNREFUSED | EUNIQ_01, "Unspecified failure" },
- { ECONNREFUSED | EUNIQ_0A, "Cannot support all requested capabilities" },
- { ECONNREFUSED | EUNIQ_0B, "Reassociation denied due to lack of association" },
- { ECONNREFUSED | EUNIQ_0C, "Association denied for another reason" },
- { ECONNREFUSED | EUNIQ_0D, "Authentication algorithm unsupported" },
- { ECONNREFUSED | EUNIQ_0E, "Authentication sequence number unexpected" },
- { ECONNREFUSED | EUNIQ_0F, "Authentication rejected due to challenge failure" },
- { ECONNREFUSED | EUNIQ_10, "Authentication rejected due to timeout" },
- { ECONNREFUSED | EUNIQ_11, "Association denied because AP is out of resources" },
- { ECONNREFUSED | EUNIQ_12, "Association denied; basic rate support required" },
- { ECONNREFUSED | EUNIQ_13, "Association denied; short preamble support req'd" },
- { ECONNREFUSED | EUNIQ_14, "Association denied; PBCC modulation support req'd" },
- { ECONNREFUSED | EUNIQ_15, "Association denied; Channel Agility support req'd" },
- { ECONNREFUSED | EUNIQ_16, "Association denied; Spectrum Management required" },
- { ECONNREFUSED | EUNIQ_17, "Association denied; Power Capability unacceptable" },
- { ECONNREFUSED | EUNIQ_18, "Association denied; Supported Channels unacceptable" },
- { ECONNREFUSED | EUNIQ_19, "Association denied; Short Slot Tume support req'd" },
- { ECONNREFUSED | EUNIQ_1A, "Association denied; DSSS-OFDM support required" },
- { EHOSTUNREACH, "Unspecified, QoS-related failure" },
- { EHOSTUNREACH | EUNIQ_01, "Association denied; QoS AP out of QoS resources" },
- { EHOSTUNREACH | EUNIQ_02, "Association denied due to excessively poor link" },
- { EHOSTUNREACH | EUNIQ_03, "Association denied; QoS support required" },
- { EHOSTUNREACH | EUNIQ_05, "The request has been declined" },
- { EHOSTUNREACH | EUNIQ_06, "Request unsuccessful due to invalid parameters" },
- { EHOSTUNREACH | EUNIQ_07, "TS not created due to bad specification" },
- { EHOSTUNREACH | EUNIQ_08, "Invalid information element" },
- { EHOSTUNREACH | EUNIQ_09, "Invalid group cipher" },
- { EHOSTUNREACH | EUNIQ_0A, "Invalid pairwise cipher" },
- { EHOSTUNREACH | EUNIQ_0B, "Invalid AKMP" },
- { EHOSTUNREACH | EUNIQ_0C, "Unsupported RSN information element version" },
- { EHOSTUNREACH | EUNIQ_0D, "Invalid RSN information element capabilities" },
- { EHOSTUNREACH | EUNIQ_0E, "Cipher suite rejected because of security policy" },
- { EHOSTUNREACH | EUNIQ_0F, "TS not created due to insufficient delay" },
- { EHOSTUNREACH | EUNIQ_10, "Direct link is not allowed in the BSS by policy" },
- { EHOSTUNREACH | EUNIQ_11, "The Destination STA is not present within the BSS" },
- { EHOSTUNREACH | EUNIQ_12, "The Destination STA is not a QoS STA" },
- { EHOSTUNREACH | EUNIQ_13, "Association denied; Listen Interval is too large" },
-
- /* 802.11 reason codes (IEEE Std 802.11-2007, Table 7-22) */
- /* Maximum error length: 50 chars | */
- { ECONNRESET | EUNIQ_01, "Unspecified reason" },
- { ECONNRESET | EUNIQ_02, "Previous authentication no longer valid" },
- { ECONNRESET | EUNIQ_03, "Deauthenticated due to leaving network" },
- { ECONNRESET | EUNIQ_04, "Disassociated due to inactivity" },
- { ECONNRESET | EUNIQ_05, "Disassociated because AP is out of resources" },
- { ECONNRESET | EUNIQ_06, "Class 2 frame received from nonauthenticated STA" },
- { ECONNRESET | EUNIQ_07, "Class 3 frame received from nonassociated STA" },
- { ECONNRESET | EUNIQ_08, "Disassociated due to roaming" },
- { ECONNRESET | EUNIQ_09, "STA requesting (re)association not authenticated" },
- { ECONNRESET | EUNIQ_0A, "Disassociated; Power Capability unacceptable" },
- { ECONNRESET | EUNIQ_0B, "Disassociated; Supported Channels unacceptable" },
- { ECONNRESET | EUNIQ_0D, "Invalid information element" },
- { ECONNRESET | EUNIQ_0E, "Message integrity code (MIC) failure" },
- { ECONNRESET | EUNIQ_0F, "4-Way Handshake timeout" },
- { ECONNRESET | EUNIQ_10, "Group Key Handshake timeout" },
- { ECONNRESET | EUNIQ_11, "4-Way Handshake information element changed unduly" },
- { ECONNRESET | EUNIQ_12, "Invalid group cipher" },
- { ECONNRESET | EUNIQ_13, "Invalid pairwise cipher" },
- { ECONNRESET | EUNIQ_14, "Invalid AKMP" },
- { ECONNRESET | EUNIQ_15, "Unsupported RSN information element version" },
- { ECONNRESET | EUNIQ_16, "Invalid RSN information element capabilities" },
- { ECONNRESET | EUNIQ_17, "IEEE 802.1X authentication failed" },
- { ECONNRESET | EUNIQ_18, "Cipher suite rejected because of security policy" },
- { ENETRESET, "Disassociated for unspecified, QoS-related reason" },
- { ENETRESET | EUNIQ_01, "Disassociated; QoS AP is out of QoS resources" },
- { ENETRESET | EUNIQ_02, "Disassociated due to excessively poor link" },
- { ENETRESET | EUNIQ_03, "Disassociated due to TXOP limit violation" },
- { ENETRESET | EUNIQ_04, "Requested; STA is leaving the BSS (or resetting)" },
- { ENETRESET | EUNIQ_05, "Requested; does not want to use the mechanism" },
- { ENETRESET | EUNIQ_06, "Requested; setup is required" },
- { ENETRESET | EUNIQ_07, "Requested from peer STA due to timeout" },
- { ENETRESET | EUNIQ_0D, "Peer STA does not support requested cipher suite" },
-};