diff options
Diffstat (limited to 'contrib/syslinux-4.02/com32/rosh/rosh.h')
-rw-r--r-- | contrib/syslinux-4.02/com32/rosh/rosh.h | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/contrib/syslinux-4.02/com32/rosh/rosh.h b/contrib/syslinux-4.02/com32/rosh/rosh.h new file mode 100644 index 0000000..a8edda6 --- /dev/null +++ b/contrib/syslinux-4.02/com32/rosh/rosh.h @@ -0,0 +1,228 @@ +/* ----------------------------------------------------------------------- * + * + * Copyright 2008-2009 Gene Cumm - All Rights Reserved + * + * 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, Inc., 53 Temple Place Ste 330, + * Boston MA 02111-1307, USA; either version 2 of the License, or + * (at your option) any later version; incorporated herein by reference. + * + * ----------------------------------------------------------------------- */ + +/* + * rosh.h + * + * Read-Only shell; Header + */ + +/* + * History + * b034 Improve debug functions to simpler code + * b021 Move much PreProcessing stuff to rosh.h + * b018 Create rosh_debug() macro + * b012 Version of rosh.c at time of creating this file. + */ + +#ifndef ROSH_H +#define ROSH_H + +#include <stdio.h> +#include <stdlib.h> +#include <stdbool.h> /* macro: true false */ +#include <string.h> /* strcpy() strlen() memcpy() strchr() */ +#include <sys/types.h> +#include <sys/stat.h> /* fstat() */ +#include <fcntl.h> /* open(); open mode macros */ +#include <dirent.h> /* fdopendir() opendir() readdir() closedir() DIR */ +#include <unistd.h> /* getcwd() */ +#include <errno.h> /* errno; error macros */ +#include <netinet/in.h> /* For htonl/ntohl/htons/ntohs */ +#include <ctype.h> /* isspace() */ + +#include <getkey.h> +#include <consoles.h> + +#ifdef DO_DEBUG +# define ROSH_DEBUG printf +/* define ROSH_DEBUG(f, ...) printf (f, ## __VA_ARGS__) */ +# ifdef DO_DEBUG2 +# define ROSH_DEBUG2 printf +# else /* DO_DEBUG2 */ + /* This forces a format argument into the function call */ +# define ROSH_DEBUG2(f, ...) ((void)0) +# endif /* DO_DEBUG2 */ +#else /* DO_DEBUG */ +# define ROSH_DEBUG(f, ...) ((void)0) +# define ROSH_DEBUG2(f, ...) ((void)0) +#endif /* DO_DEBUG */ + +#ifdef __COM32__ +#define ROSH_IS_COM32 1 +#include <console.h> /* openconsole() */ +#include <syslinux/config.h> /* Has info on the SYSLINUX variant */ +#include <syslinux/boot.h> /* syslinux_run_command() */ +#include <syslinux/reboot.h> +#define ROSH_COM32(f, ...) printf (f, ## __VA_ARGS__) +#define rosh_console_std() console_ansi_std() +#define rosh_console_raw() console_ansi_raw() + +int stat(const char *pathname, struct stat *buf) +{ + int fd, status, ret = -1; + DIR *d; + + d = opendir(pathname); + if (d != NULL) { + closedir(d); + ret = 0; + buf->st_mode = S_IFDIR | 0555; + buf->st_size = 0; + } else if ((errno == 0) || (errno == ENOENT) || (errno == ENOTDIR)) { + fd = open(pathname, O_RDONLY); + if (fd != 1) { + status = fstat(fd, buf); + close(fd); + ret = 0; + } + } + return ret; +} + +#else +# include <termios.h> +# define ROSH_IS_COM32 0 + +static inline char *syslinux_config_file(void) +{ + return ""; +} + +static inline int getscreensize(int fd, int *rows, int *cols) +{ + char *str; + int rv; + *rows = 0; + *cols = 0; + if (fd == 1) { + if (rows) { + str = getenv("LINES"); + if (str) + *rows = atoi(str); + } + if (cols) { + str = getenv("COLUMNS"); + if (str) + *cols = atoi(str); + } + } + if (!rows || !cols) + rv = -1; + else if (!*rows || !*cols) + rv = -2; + else + rv = 0; + return rv; +} + +/* + * Switches console over to raw input mode. Allows get_key to get just + * 1 key sequence (without delay or display) + */ +void rosh_console_raw(void) +{ + struct termios tio; + + console_ansi_raw(); /* Allows get_key to get just 1 key sequence + (w/o delay or display */ + /* Deal with the changes that haven't been replicated to ansiraw.c */ + tcgetattr(0, &tio); + tio.c_iflag &= ~IGNCR; + tcsetattr(0, TCSAFLUSH, &tio); +} + +/* + * Switches back to standard getline mode. + */ +void rosh_console_std(void) +{ + struct termios tio; + + console_ansi_std(); + tcgetattr(0, &tio); + tio.c_iflag |= ICRNL; + tio.c_iflag &= ~IGNCR; + tcsetattr(0, TCSANOW, &tio); +} + +void syslinux_reboot(int warm) +{ + printf("Test Reboot(%d)\n", warm); +} + +#define ROSH_COM32(f, ...) ((void)0) +#define syslinux_run_command(f) ((void)0) +#endif /* __COM32__ */ + +#define SEP '/' + +/* Size of buffer string */ +#define ROSH_BUF_SZ 16384 +/* Size of screen output buffer (80*40) //HERE */ +#define ROSH_SBUF_SZ ((80 + 2) * 40) + +/* Size of command buffer string */ +#ifdef MAX_CMDLINE_LEN +# define ROSH_CMD_SZ MAX_CMDLINE_LEN +#elif COMMAND_LINE_SIZE +# define ROSH_CMD_SZ COMMAND_LINE_SIZE +#else +# define ROSH_CMD_SZ_LG2 12 +# define ROSH_CMD_SZ (1 << ROSH_CMD_SZ_LG2) +#endif /* MAX_CMDLINE_LEN */ + +/* Size of path buffer string */ +#ifdef PATH_MAX +# define ROSH_PATH_SZ PATH_MAX +#elif NAME_MAX +# define ROSH_PATH_SZ NAME_MAX +#elif FILENAME_MAX +# define ROSH_PATH_SZ FILENAME_MAX +#else +# define ROSH_PATH_SZ_LG2 8 +# define ROSH_PATH_SZ (1 << ROSH_PATH_SZ_LG2) +#endif /* PATH_MAX */ + +#define ROSH_OPT_SZ 8 + +const char rosh_beta_str[] = + " ROSH is currently beta. Constructive feedback is appreciated"; + +const char rosh_cd_norun_str[] = + " -- cd (Change Directory) not implemented for use with run and exit.\n"; + +const char rosh_help_ls_str[] = "ls List contents of current directory\n\ + -l Long format\n\ + -i Inode; print Inode of file\n\ + -F Classify; Add a 1-character suffix to classify files"; + +const char rosh_help_str1[] = + "Commands: ? cat cd cfg dir exit help less ls man more pwd run quit ver"; + +const char rosh_help_str2[] = + "Commands: (short generally non-ambiguous abreviations are also allowed)\n\ + h HELP\n ALSO ? help man\n ALSO help <command>\n\ + cat Concatenate file to console\n cat <file>\n\ + cd Change to directory <dir>\n cd <dir>\n\ + less Page a file with rewind\n\ + ls List contents of current directory\n ls <dir>\n\ + ALSO l dir\n\ + more Page a file\n\ + pwd display Present Working Directory\n\ + run Run a program/kernel with options\n\ + r Reboot (if COM32)\n Also reboot\n\ + exit Exit to previous environment\n ALSO quit"; + +const char rosh_help_str_adv[] = "No additional help available for '%s'"; + +#endif /* Not ROSH_H */ |