Select Git revision
dshlib.h 2.55 KiB
#ifndef __DSHLIB_H__
#define __DSHLIB_H__
//Constants for command structure sizes
#define EXE_MAX 64
#define ARG_MAX 256
#define CMD_MAX 8
#define CMD_ARGV_MAX (CMD_MAX + 1)
// Longest command that can be read from the shell
#define SH_CMD_MAX EXE_MAX + ARG_MAX
typedef struct command
{
char exe[EXE_MAX];
char args[ARG_MAX];
} command_t;
typedef struct cmd_buff
{
int argc; // up to CMD_MAX
char **argv; // CMD_ARG_MAX
char *_cmd_buffer; // SCH_CMD_MAX
} cmd_buff_t;
typedef struct command_list{
int num;
cmd_buff_t **commands; // CMD_MAX
} command_list_t;
/* WIP - Move to next assignment
#define N_ARG_MAX 15 //MAX number of args for a command
typedef struct command{
char exe [EXE_MAX];
char args[ARG_MAX];
int argc;
char *argv[N_ARG_MAX + 1]; //last argv[LAST] must be \0
}command_t;
*/
//Special character #defines
#define SPACE_CHAR ' '
#define SPACE_STRING " "
#define PIPE_CHAR '|'
#define PIPE_STRING "|"
#define DOUBLE_QUOTE_CHAR '"'
#define SH_PROMPT "dsh3> "
#define EXIT_CMD "exit"
#define EXIT_SC 99
//Standard Return Codes
#define OK 0
#define WARN_NO_CMDS -1
#define ERR_TOO_MANY_COMMANDS -2
#define ERR_CMD_OR_ARGS_TOO_BIG -3
#define ERR_CMD_ARGS_BAD -4 //for extra credit
#define ERR_MEMORY -5
#define ERR_EXEC_CMD -6
#define OK_EXIT -7
//prototypes
int numInstanceOf(char *, const char);
char *trim_whitespace(char *str);
extern void print_dragon();
//cmd_buff
int alloc_cmd_buff(cmd_buff_t *cmd_buff);
void free_cmd_buff(cmd_buff_t *cmd_buff);
void clear_cmd_buff(cmd_buff_t *cmd_buff);
int build_cmd_buff(char *cmd_line, cmd_buff_t *cmd_buff);
//command_list_t
int alloc_cmd_list(command_list_t *clist, int rc);
int build_cmd_list(char *cmd_line, command_list_t *clist, int rc);
void free_cmd_list(command_list_t *clist);
void clear_cmd_list(command_list_t *clist);
//main execution context
int exec_local_cmd_loop();
int exec_pipeline(command_list_t *clist);
int exec_cd(cmd_buff_t *cmd_buff, int rc);
int exec_cmd(command_list_t *clist, int rc);
//built in command stuff
typedef enum {
BI_CMD_EXIT,
BI_CMD_DRAGON,
BI_CMD_CD,
BI_NOT_BI,
BI_EXECUTED,
} Built_In_Cmds;
Built_In_Cmds match_command(const char *input);
Built_In_Cmds exec_built_in_cmd(cmd_buff_t *cmd);
//output constants
#define CMD_OK_HEADER "PARSED COMMAND LINE - TOTAL COMMANDS %d\n"
#define CMD_WARN_NO_CMD "warning: no commands provided\n"
#define CMD_ERR_PIPE_LIMIT "error: piping limited to %d commands\n"
#endif