00001
00002
00003
00004
00005
00006
00007 #include <iostream>
00008 #include <vector>
00009
00010
00011 #include <saga/saga.hpp>
00012
00013
00014 #if SAGA_HAVE_READLINE == 1
00015 # include <readline/readline.h>
00016 # include <readline/history.h>
00017 #endif
00018
00019
00020 #include "joblist.hpp"
00021
00022
00023 #define SUCCESS 0
00024 #define FAILURE 1
00025
00026
00027 class props
00028 {
00029 public:
00030 props (std::string)
00031 {
00032 in = out = err = "";
00033 bg = false;
00034 piped = false;
00035 }
00036
00037 props (void)
00038 {
00039 in = out = err = "";
00040 bg = false;
00041 piped = false;
00042 }
00043
00044 std::string in;
00045 std::string out;
00046 std::string err;
00047 bool bg;
00048 bool piped;
00049 };
00050
00051 class shell
00052 {
00053 private:
00054
00055 saga::session session_;
00056
00057
00058 std::map <std::string,
00059 std::string> env_;
00060
00061
00062 saga::url home_;
00063 saga::name_space::directory cwd_;
00064
00065
00066 saga::url contact_;
00067 std::string host_;
00068 saga::job::service js_;
00069 std::string history_;
00070
00071
00072 joblist jobs_;
00073
00074
00075 std::string prompt_;
00076
00077
00078
00079 int c_pwd (std::vector <std::string> & args, props & p);
00080 int c_cd (std::vector <std::string> & args, props & p);
00081 int c_touch (std::vector <std::string> & args, props & p);
00082 int c_ls (std::vector <std::string> & args, props & p);
00083 int c_cp (std::vector <std::string> & args, props & p);
00084 int c_mv (std::vector <std::string> & args, props & p);
00085 int c_rm (std::vector <std::string> & args, props & p);
00086 int c_ln (std::vector <std::string> & args, props & p);
00087 int c_mkdir (std::vector <std::string> & args, props & p);
00088 int c_rmdir (std::vector <std::string> & args, props & p);
00089
00090
00091 int c_cat (std::vector <std::string> & args, props & p);
00092 int c_wc (std::vector <std::string> & args, props & p);
00093
00094
00095 int c_rep_find (std::vector <std::string> & args, props & p);
00096 int c_rep_list (std::vector <std::string> & args, props & p);
00097 int c_rep_add (std::vector <std::string> & args, props & p);
00098 int c_rep_remove (std::vector <std::string> & args, props & p);
00099 int c_rep_update (std::vector <std::string> & args, props & p);
00100 int c_rep_replicate (std::vector <std::string> & args, props & p);
00101
00102
00103
00104 int c_run (std::vector <std::string> & args, props & p);
00105 int c_run2 (std::vector <std::string> & args, props & p);
00106 int c_exec (std::vector <std::string> & args, props & p);
00107 int c_ps (std::vector <std::string> & args, props & p);
00108 int c_suspend (std::vector <std::string> & args, props & p);
00109 int c_resume (std::vector <std::string> & args, props & p);
00110 int c_kill (std::vector <std::string> & args, props & p);
00111 int c_status (std::vector <std::string> & args, props & p);
00112
00113
00114 int c_history (std::vector <std::string> & args, props & p);
00115 int c_echo (std::vector <std::string> & args, props & p);
00116 int c_env (std::vector <std::string> & args, props & p);
00117 int c_setenv (std::vector <std::string> & args, props & p);
00118 int c_getenv (std::vector <std::string> & args, props & p);
00119 int c_unsetenv (std::vector <std::string> & args, props & p);
00120 int c_source (std::vector <std::string> & args, props & p);
00121 int c_help (std::vector <std::string> & args, props & p);
00122 int c_add_proxy (std::vector <std::string> & args, props & p);
00123 int c_remove_proxy (std::vector <std::string> & args, props & p);
00124
00125
00126
00127 void set_prompt (void);
00128
00129
00130 void carp (std::string text,
00131 props & p,
00132 bool is_error = true);
00133 void carp (std::string text,
00134 bool is_error = true);
00135
00136
00137 void init (void);
00138
00139
00140 std::string state_to_string (saga::job::state state);
00141 void usleep (long int usec);
00142 template <typename T>
00143 std::string to_string (const T & in);
00144
00145
00146 std::string get_input (void);
00147 std::string get_input (std::string prompt);
00148 std::vector <std::string>
00149 split_input (std::string input,
00150 props & p,
00151 std::string delim = " \t\n");
00152 std::vector <std::string>
00153 split_input_str (std::string input,
00154 props & p,
00155 std::string delim = "&&");
00156
00157 std::string trim_whitespace (std::string in);
00158 std::string expand (std::string in, props & p);
00159 int execute (std::string input, props & p);
00160 int execute_ands (std::string input, props & p);
00161 int execute_ors (std::string input, props & p);
00162 int execute_pipes (std::string input, props & p);
00163 int execute_command (std::string input, props & p);
00164 int execute_command (std::vector <std::string> args, props & p);
00165
00166 std::string init_contact (void);
00167 std::string init_home (void);
00168 std::string init_host (const saga::url & url);
00169
00170 void init_history (void);
00171 void close_history (void);
00172
00173 public:
00174
00175 shell (void);
00176 ~shell (void);
00177
00178
00179 void run (int argc, char* argv[]);
00180 };
00181
00182