/* ----------------------------------------------------------------------- * * * 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 #include #include /* macro: true false */ #include /* strcpy() strlen() memcpy() strchr() */ #include #include /* fstat() */ #include /* open(); open mode macros */ #include /* fdopendir() opendir() readdir() closedir() DIR */ #include /* getcwd() */ #include /* errno; error macros */ #include /* For htonl/ntohl/htons/ntohs */ #include /* isspace() */ #include #include #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 /* openconsole() */ #include /* Has info on the SYSLINUX variant */ #include /* syslinux_run_command() */ #include #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 # 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 \n\ cat Concatenate file to console\n cat \n\ cd Change to directory \n cd \n\ less Page a file with rewind\n\ ls List contents of current directory\n ls \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 */