Skip to content

Commit

Permalink
calling scripts from prompt now possible
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@1091 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Peter Aronsson committed Feb 3, 2004
1 parent 836ba26 commit 64309f5
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 24 deletions.
65 changes: 44 additions & 21 deletions mosh/src/mosh.cpp
Expand Up @@ -56,8 +56,8 @@ char * check_moshhome(void);
void init_sockaddr (struct sockaddr_in *name,
const char *hostname,
int port);
void doCorbaCommunication(int argc, char **argv);
void doSocketCommunication(void);
void doCorbaCommunication(int argc, char **argv,const string *);
void doSocketCommunication(const string*);


/* Global variables */
Expand Down Expand Up @@ -88,57 +88,73 @@ int main(int argc, char* argv[])
bool corba_comm=false;
bool noserv=false;


char * moshhome=check_moshhome();

corba_comm = flagSet("corba",argc,argv);
if ((noserv=flagSet("noserv",argc,argv))){
const string *scriptname = getFlagValue("f",argc,argv);
if ((noserv=flagSet("noserv",argc,argv))&&!scriptname){
cout << "Skip starting server, assumed to be running" << endl;
}
if ((corba_comm=flagSet("corba",argc,argv))) {
if ((corba_comm=flagSet("corba",argc,argv))&& !scriptname) {

cout << "Using corba communication" << endl;
}

cout << "Open Source Modelica 0.1" << endl;
cout << "Copyright 2002, PELAB, Linkoping University" << endl;

if(!scriptname) {
cout << "Open Source Modelica 0.1" << endl;
cout << "Copyright 2002, PELAB, Linkoping University" << endl;
}
if (corba_comm) {
if (!noserv) {
// Starting background server using corba
char systemstr[255];
sprintf(systemstr,"%s/../modeq/modeq +d=interactiveCorba > %s/error.log 2>&1 &",
moshhome,moshhome);
int res = system(systemstr);
cout << "Started server using:"<< systemstr << "\n res = " << res << endl;
if (!scriptname)
cout << "Started server using:"<< systemstr << "\n res = " << res << endl;
}
doCorbaCommunication(argc,argv);
doCorbaCommunication(argc,argv,scriptname);
} else {
if (!noserv) {
// Starting background server using corba
char systemstr[255];
sprintf(systemstr,"%s/../modeq/modeq +d=interactive > %s/error.log 2>&1 &",
moshhome,moshhome);
int res = system(systemstr);
cout << "Started server using:"<< systemstr << "\n res = " << res << endl;
if (!scriptname)
cout << "Started server using:"<< systemstr << "\n res = " << res << endl;
}
doSocketCommunication();
doSocketCommunication(scriptname);
}

delete scriptname;
return EXIT_SUCCESS;
}

void doCorbaCommunication(int argc, char **argv)
void doCorbaCommunication(int argc, char **argv, const string *scriptname)
{
cerr << "doCorbaCommunication" << endl;
CORBA::ORB_var orb = CORBA::ORB_init(argc,argv);
cerr << "inited orb" << endl;

CORBA::ORB_var orb = CORBA::ORB_init(argc,argv);
char uri[300];
sprintf (uri, "file:///tmp/openmodelica.objid");


CORBA::Object_var obj = orb->string_to_object(uri);
cerr << "got obj" << endl;

ModeqCommunication_var client = ModeqCommunication::_narrow(obj);

char cd_buf[MAXPATHLEN];
char cd_cmd[MAXPATHLEN+6];
getcwd(cd_buf,MAXPATHLEN);
sprintf(cd_cmd,"cd(\"%s\")",cd_buf);
client ->sendExpression(cd_cmd);

if (scriptname) { // Execute script and output return value
const char * str=("runScript(\""+*scriptname+"\")").c_str();
char *res=client->sendExpression(str);
cout << res << endl;
return;
}

if (CORBA::is_nil(client)) {
cerr << "Could not locate modeq server." << endl;
exit(1);
Expand Down Expand Up @@ -171,7 +187,7 @@ void doCorbaCommunication(int argc, char **argv)
}


void doSocketCommunication(void)
void doSocketCommunication(const string * scriptname)
{
int port=29500;
char buf[40000];
Expand Down Expand Up @@ -218,6 +234,13 @@ void doSocketCommunication(void)
write(sock,cd_cmd,strlen(cd_cmd)+1);
read(sock,buf,40000);

if (scriptname) {
const char *str= ("runScript("+*scriptname+")").c_str();
int nbytes = write(sock,str,strlen(str)+1);
int recvbytes = read(sock,buf,40000);
cout << buf << endl;
return;
}
// initialize history usage
using_history();

Expand Down
18 changes: 16 additions & 2 deletions mosh/src/options.cpp
Expand Up @@ -11,8 +11,9 @@ bool flagSet(char *option, int argc, char** argv)
}
return false;
}

const string* getOption(char *option, int argc, char **argv)
/* returns the value of a flag on the form -flagname=value
*/
const string* getOption(const char *option, int argc, char **argv)
{
for (int i=0; i<argc;i++) {
string tmpStr=string(argv[i]);
Expand All @@ -23,3 +24,16 @@ const string* getOption(char *option, int argc, char **argv)
}
return NULL;
}
/* returns the value of a flag on the form -flagname value */
const string* getFlagValue(const char *option, int argc, char **argv)
{
for (int i=0; i<argc;i++) {
string tmpStr=string(argv[i]);
if (("-"+string(option))==string(argv[i])) {
if (argc >= i+1) {
return new string(argv[i+1]);
}
}
}
return NULL;
}
8 changes: 7 additions & 1 deletion mosh/src/options.h
Expand Up @@ -3,7 +3,13 @@

#include <string>

/* -f */
bool flagSet(char*, int, char**);
const std::string * getOption(char*, int, char **);

/* -f=value */
const std::string * getOption(const char*, int, char **);

/* -f value */
const std::string* getFlagValue(const char *, int , char **);

#endif

0 comments on commit 64309f5

Please sign in to comment.