aboutsummaryrefslogtreecommitdiffstats
path: root/com32/rosh/rosh.h
diff options
context:
space:
mode:
authorGene Cumm <gene.cumm@gmail.com>2009-02-15 17:26:37 -0500
committerH. Peter Anvin <hpa@zytor.com>2009-02-15 16:39:47 -0800
commit53daea0916af7b874f830bd0428da2be4e1bc3b3 (patch)
tree57fc86fab2a6eb34583be7fce89d4f71bf4ea128 /com32/rosh/rosh.h
parent3eee66c2495c524007a1aff64d5b4813a0f159cf (diff)
downloadsyslinux-53daea0916af7b874f830bd0428da2be4e1bc3b3.tar.gz
syslinux-53daea0916af7b874f830bd0428da2be4e1bc3b3.tar.xz
syslinux-53daea0916af7b874f830bd0428da2be4e1bc3b3.zip
COM32 module: Read-Only shell
Well, here's the read-only shell (rosh) that I've been working on. It's functional but still quite rough. My primary intention of posting it at this time is such that people have an easy way to demonstrate to themselves that the library calls I made work. This should apply as a patch to the head of the "dir" branch and the patch for c_cflag/c_lflag. The patch is only needed for Linux(without it, segfaults will occur). I've designed it to compile as a COM32 module and Linux binary when using GNU C (as Syslinux currently requires GNU C, if I read the Makefiles correctly).
Diffstat (limited to 'com32/rosh/rosh.h')
-rw-r--r--com32/rosh/rosh.h148
1 files changed, 148 insertions, 0 deletions
diff --git a/com32/rosh/rosh.h b/com32/rosh/rosh.h
new file mode 100644
index 00000000..d7296e1a
--- /dev/null
+++ b/com32/rosh/rosh.h
@@ -0,0 +1,148 @@
+/* ----------------------------------------------------------------------- *
+ *
+ * Copyright 2008 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
+ * 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 <getkey.h>
+#include <consoles.h>
+
+/* A GNUC extension to void out unused functions are used */
+/* Plus, there seem to be other references for SYSLINUX to __GNUC__ */
+#ifndef __GNUC__
+#error SYSLINUX (I believe) requires __GNUC__
+#endif /* __GNUC__ */
+
+#ifdef DO_DEBUG
+#define ROSH_DEBUG(f, ...) printf (f, ## __VA_ARGS__)
+#ifdef DO_DEBUG2
+#define ROSH_DEBUG2(f, ...) printf (f, ## __VA_ARGS__)
+#else /* DO_DEBUG2 */
+#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() */
+#define ROSH_COM32(f, ...) printf (f, ## __VA_ARGS__)
+#else
+#include <termios.h>
+#define ROSH_IS_COM32 0
+static inline char *syslinux_config_file()
+{
+ return "";
+}
+static inline int getscreensize(int fd, int *rows, int *cols)
+{
+ char *str;
+ int rv;
+ *rows = 0;
+ *cols = 0;
+ 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;
+}
+#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) */
+#define ROSH_SBUF_SZ 1200
+
+/* Size of command buffer string */
+#ifdef MAX_CMDLINE_LEN
+#define ROSH_CMD_SZ MAX_CMDLINE_LEN
+#else
+#ifdef COMMAND_LINE_SIZE
+#define ROSH_CMD_SZ COMMAND_LINE_SIZE
+#else
+#define ROSH_CMD_SZ 2048
+#endif /* COMMAND_LINE_SIZE */
+#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
+#else
+#define ROSH_PATH_SZ 255
+#endif /* NAME_MAX */
+
+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: (some 1-letter abreviations also allowed)\n\
+ h HELP\n ALSO ? help man\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 dir\n\
+ more Page a file\n\
+ pwd display Present Working Directory\n\
+ run Run a program/kernel with options\n\
+ exit Exit to previous environment\n ALSO quit";
+
+#endif /* Not ROSH_H */