[2447] | 1 | #include "machdefs.h"
|
---|
| 2 | #include <stdio.h>
|
---|
| 3 | #include <stdlib.h>
|
---|
| 4 | #include <math.h>
|
---|
| 5 | #include <iostream>
|
---|
| 6 | #include <fstream>
|
---|
| 7 | #include "sophyainit.h"
|
---|
| 8 | #include "timing.h"
|
---|
| 9 | #include "commander.h"
|
---|
| 10 |
|
---|
| 11 |
|
---|
| 12 | class TCmdExecutor : public CmdExecutor {
|
---|
| 13 | public:
|
---|
| 14 | TCmdExecutor(Commander& cmd);
|
---|
| 15 | virtual ~TCmdExecutor() { }
|
---|
| 16 |
|
---|
| 17 | virtual int Execute(string& keyw,vector<string>& args, string& toks);
|
---|
| 18 | };
|
---|
| 19 |
|
---|
| 20 | TCmdExecutor::TCmdExecutor(Commander& cmd)
|
---|
| 21 | {
|
---|
| 22 | string hgrp = "TCmdExecutor";
|
---|
| 23 | string usage,kw;
|
---|
| 24 |
|
---|
| 25 | kw = "ls";
|
---|
| 26 | usage = "ls: Execute /usr/bin/ls \n";
|
---|
| 27 | cmd.RegisterCommand(kw, usage, this, hgrp);
|
---|
| 28 | kw = "mv";
|
---|
| 29 | usage = "mv: Execute /usr/bin/mv \n";
|
---|
| 30 | cmd.RegisterCommand(kw, usage, this, hgrp);
|
---|
| 31 | kw = "cp";
|
---|
| 32 | usage = "cp: Execute /usr/bin/mv \n";
|
---|
| 33 | cmd.RegisterCommand(kw, usage, this, hgrp);
|
---|
| 34 | }
|
---|
| 35 |
|
---|
| 36 | int TCmdExecutor::Execute(string& kw, vector<string>& args, string& toks)
|
---|
| 37 | {
|
---|
| 38 | if ((kw!="ls")&&(kw!="mv")&&(kw!="cp")) return 99;
|
---|
| 39 | string cmd;
|
---|
| 40 | if (kw == "ls") cmd = "/usr/bin/ls " ;
|
---|
| 41 | else if (kw == "mv") cmd = "/usr/bin/mv " ;
|
---|
| 42 | else if (kw == "cp") cmd = "/usr/bin/cp " ;
|
---|
| 43 | else cmd = "/usr/bin/echo " ;
|
---|
| 44 | cout << "TCmdExecutor::Execute() : Executing " << cmd << endl;
|
---|
| 45 | return system(cmd.c_str());
|
---|
| 46 | }
|
---|
| 47 |
|
---|
| 48 | int InputLoop(Commander & cmd);
|
---|
| 49 |
|
---|
| 50 | /* --Main-- */
|
---|
| 51 | int main(int narg, char *arg[])
|
---|
| 52 | {
|
---|
| 53 |
|
---|
| 54 | SophyaInit();
|
---|
| 55 | InitTim();
|
---|
| 56 |
|
---|
| 57 | try {
|
---|
| 58 | Commander cmd;
|
---|
| 59 | TCmdExecutor cmdex(cmd);
|
---|
| 60 | InputLoop(cmd);
|
---|
| 61 | }
|
---|
| 62 |
|
---|
| 63 | catch (PThrowable & exc) {
|
---|
| 64 | cerr << " Catched Exception " << (string)typeid(exc).name()
|
---|
| 65 | << " - Msg= " << exc.Msg() << endl;
|
---|
| 66 | }
|
---|
| 67 | catch (...) {
|
---|
| 68 | cerr << " some other exception was caught ! " << endl;
|
---|
| 69 | }
|
---|
| 70 |
|
---|
| 71 | PrtTim(" End of tcmd ");
|
---|
| 72 | return(0);
|
---|
| 73 | }
|
---|
| 74 |
|
---|
| 75 | /* --Fonction-- */
|
---|
| 76 | int InputLoop(Commander & cmd)
|
---|
| 77 | {
|
---|
| 78 | cout << " tcmd/InputLoop() : Type in your commands, \n"
|
---|
| 79 | << " end with a blanck line OR <Cntl>D " << endl;
|
---|
| 80 | int line = 0;
|
---|
| 81 | bool fg = true;
|
---|
| 82 | char buff[1024];
|
---|
| 83 | char * ret;
|
---|
| 84 | while (fg) {
|
---|
| 85 | printf("%d-%s ", line+1, cmd.GetCurrentPrompt().c_str());
|
---|
| 86 | fflush(stdout);
|
---|
| 87 | buff[0] = '\0';
|
---|
| 88 | ret = fgets(buff, 1024, stdin);
|
---|
| 89 | buff[1023] = '\0';
|
---|
| 90 | if (ret && ( (buff[0] != '\0') && (buff[0] != '\n') && (buff[0] != '\r')) ) {
|
---|
| 91 | // buff[strlen(buff)-1] = '\0';
|
---|
| 92 | string cline = buff;
|
---|
| 93 | cmd.Interpret(cline);
|
---|
| 94 | line++;
|
---|
| 95 | }
|
---|
| 96 | else fg = false;
|
---|
| 97 | }
|
---|
| 98 | cout << " \n Total " << line << " lines from stdin -> Commander " << endl;
|
---|
| 99 | if (line > 0) return(0);
|
---|
| 100 | else return(1);
|
---|
| 101 | }
|
---|
| 102 |
|
---|
| 103 |
|
---|