visible difference for sics and sea
This commit is contained in:
227
tecs/six.c
227
tecs/six.c
@ -1,3 +1,10 @@
|
||||
/* a simple commandline client for SICS and sea
|
||||
|
||||
Markus Zolliker
|
||||
Mar. 2003 first version
|
||||
Aug. 2005 visible difference between client for SICS and sea
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/socket.h>
|
||||
@ -15,6 +22,8 @@ typedef enum { NORMAL, SPY, CLIENT, NMODE } Mode;
|
||||
|
||||
#define MAXMSG 256
|
||||
|
||||
static char *clcname="six", *servername="SICS";
|
||||
static int clclen=3;
|
||||
static char *host;
|
||||
static char instr[32];
|
||||
static char savedHost[128];
|
||||
@ -71,14 +80,17 @@ void PutClear(void) {
|
||||
}
|
||||
|
||||
void UsageNote(void) {
|
||||
PutC(" (for usage type: six help)\n");
|
||||
PutC(" (for usage type: ");
|
||||
PutC(clcname);
|
||||
PutC(" help)\n");
|
||||
}
|
||||
|
||||
void Usage(int cmds_only) {
|
||||
if (!cmds_only) {
|
||||
PutC(" \n ");
|
||||
PutC(clcname);
|
||||
PutC(
|
||||
" \n"
|
||||
" six commandline options:\n"
|
||||
" commandline options:\n"
|
||||
" -x login as spy\n"
|
||||
" -u login as user\n"
|
||||
" -m login as manager\n"
|
||||
@ -86,33 +98,39 @@ void Usage(int cmds_only) {
|
||||
" -a or a ask always for username/password, forget passwords\n"
|
||||
" -c or c use background color instead of # and |\n"
|
||||
" -s or s simulation mode (on some instruments)\n"
|
||||
" \"host\" connect to a SICServer on a different host\n"
|
||||
" -p \"port\" connect to a SICServer on a different port\n"
|
||||
" \"host\" connect to a server on a different host\n"
|
||||
" -p \"port\" connect to a server on a different port\n"
|
||||
" -n do only a minimal login (no check of instrument)\n"
|
||||
" no option login with default privilege\n"
|
||||
);
|
||||
}
|
||||
PutC(
|
||||
"\n"
|
||||
" Special commands treated by six (these are no SICS commands!)\n"
|
||||
" Special commands treated by ");
|
||||
PutC(clcname); PutC(" (these are no "); PutC(servername); PutC(" commands!)\n"
|
||||
"\n"
|
||||
" quit exit six\n"
|
||||
" exit exit six\n"
|
||||
" stop interrupt SICS\n"
|
||||
" six help show this help text\n"
|
||||
" six def stop define a key for stop command\n"
|
||||
" six save save stop key and connection (host/port/access)\n"
|
||||
" quit return to unix prompt\n"
|
||||
" exit return to unix prompt\n"
|
||||
" stop interrupt driving\n"
|
||||
" "); PutC(clcname);
|
||||
PutC(" help show this help text\n"
|
||||
" "); PutC(clcname);
|
||||
PutC(" def stop define a key for stop command\n"
|
||||
" "); PutC(clcname);
|
||||
PutC(" save save stop key and connection (host/port/access)\n"
|
||||
" + increase privilege\n"
|
||||
" - decrease privilege\n"
|
||||
"\n"
|
||||
" The SICS status is shown, if it is not 'Eager to execute commands'.\n"
|
||||
" The "); PutC(servername);
|
||||
PutC(" status is shown, if it is not 'Eager to execute commands'.\n"
|
||||
" A shown status does not prohibit to enter commands.\n"
|
||||
"\n"
|
||||
" When SICS is busy, an vertical bar '|' is shown at the left of the line.\n"
|
||||
" When "); PutC(servername);
|
||||
PutC(" is busy, a vertical bar '|' is shown at the left of the line.\n"
|
||||
" You may then enter more commands, but only under Spy privilege.\n"
|
||||
" All messages from the six client are prefixed with a hash symbol '#'.\n"
|
||||
" All messages from the client are prefixed with a hash symbol '#'.\n"
|
||||
"\n"
|
||||
" Markus Zolliker, Mar. 2005\n"
|
||||
" Markus Zolliker, Aug. 2005\n"
|
||||
"\n"
|
||||
);
|
||||
Put(-1, ""); /* clear colors */
|
||||
@ -328,7 +346,9 @@ int setrights(int gotolevel) {
|
||||
int savepw;
|
||||
|
||||
if (pw == NULL) pw=pswd;
|
||||
str_copy(prefhead, ".six.");
|
||||
str_copy(prefhead, ".");
|
||||
str_append(prefhead, clcname);
|
||||
str_append(prefhead, ".");
|
||||
str_append(prefhead, instr);
|
||||
|
||||
if (remember) {
|
||||
@ -353,15 +373,25 @@ int setrights(int gotolevel) {
|
||||
if (level != gotolevel) {
|
||||
if (gotolevel==1) {
|
||||
if (user1[0]=='\0') {
|
||||
str_copy(user1, "lnsmanager");
|
||||
if (strcmp(clcname, "six") == 0) {
|
||||
str_copy(user1, "lnsmanager");
|
||||
} else {
|
||||
str_copy(user2, servername);
|
||||
str_append(user2, "manager");
|
||||
}
|
||||
}
|
||||
us=user1;
|
||||
pw=pswd1;
|
||||
} else if (gotolevel==2) {
|
||||
if (user2[0]=='\0') {
|
||||
str_copy(user2, instr);
|
||||
str_lowcase(user2, user2);
|
||||
str_append(user2, "user");
|
||||
if (strcmp(clcname, "six") == 0) {
|
||||
str_copy(user2, instr);
|
||||
str_lowcase(user2, user2);
|
||||
str_append(user2, "user");
|
||||
} else {
|
||||
str_copy(user2, servername);
|
||||
str_append(user2, "user");
|
||||
}
|
||||
}
|
||||
us=user2;
|
||||
pw=pswd2;
|
||||
@ -390,7 +420,8 @@ int setrights(int gotolevel) {
|
||||
}
|
||||
}
|
||||
if (ask) {
|
||||
PutC("SICS username");
|
||||
PutC(servername);
|
||||
PutC(" username");
|
||||
if (us[0]!='\0') {
|
||||
PutC(" [");
|
||||
PutC(us);
|
||||
@ -488,7 +519,9 @@ int SavePrefs(void) {
|
||||
char *p;
|
||||
|
||||
ERR_SI(gethostname(name, sizeof name)); /* get ip name of this host */
|
||||
str_copy(prefhead, ".six_");
|
||||
str_copy(prefhead, ".");
|
||||
str_append(prefhead, clcname);
|
||||
str_append(prefhead, "_");
|
||||
str_append(prefhead, sim);
|
||||
str_append(prefhead, name);
|
||||
|
||||
@ -500,7 +533,7 @@ int SavePrefs(void) {
|
||||
if (p != NULL) {
|
||||
ent = gethostbyname(p); /* get ip name of "Instrument" translation */
|
||||
if (ent !=NULL && strcmp(ent->h_name, name) == 0) { /* we are on an instrument computer */
|
||||
ent = gethostbyname(instr); /* get host name of SICServer */
|
||||
ent = gethostbyname(instr); /* get host name of server */
|
||||
iret = (ent != NULL && strcmp(ent->h_name, name) != 0);
|
||||
strcpy(savedHost, "localhost");
|
||||
}
|
||||
@ -520,7 +553,10 @@ int LoadPrefs(void) {
|
||||
FILE *fil;
|
||||
|
||||
ERR_SI(gethostname(name, sizeof name)); /* get ip name of this host */
|
||||
str_copy(prefhead, ".six_");
|
||||
str_copy(prefhead, ".");
|
||||
str_append(prefhead, clcname);
|
||||
str_append(prefhead, "_");
|
||||
str_append(prefhead, sim);
|
||||
str_append(prefhead, name);
|
||||
fil=term_open_pref(0, prefhead, "r");
|
||||
if (fil) {
|
||||
@ -588,6 +624,7 @@ int main (int argc, char *argv[]) {
|
||||
char *bar;
|
||||
char *pnam[4]={"0", "MANAGER", "user", "spy"};
|
||||
char hostArg[128];
|
||||
char *subcmd;
|
||||
|
||||
atexit(term_off);
|
||||
port=-1;
|
||||
@ -599,6 +636,10 @@ int main (int argc, char *argv[]) {
|
||||
for (i=1; i<argc; i++) {
|
||||
if (0==strcmp(argv[i], "-s") || 0==strcmp(argv[i], "s")) {
|
||||
sim="sim-";
|
||||
} else if (0==strcmp(argv[i], "-sea") || 0==strcmp(argv[i], "sea")) {
|
||||
clcname="seacmd";
|
||||
servername="sea";
|
||||
clclen=strlen(clcname);
|
||||
} else if (0==strcmp(argv[i], "-a") || 0==strcmp(argv[i], "a")) {
|
||||
remember=0;
|
||||
} else if (0==strcmp(argv[i], "-c") || 0==strcmp(argv[i], "c")) {
|
||||
@ -669,17 +710,25 @@ int main (int argc, char *argv[]) {
|
||||
snprintf(hostArg, sizeof hostArg, "%s", ent->h_name);
|
||||
host = hostArg;
|
||||
}
|
||||
PutC("---------------------------------------------------\n");
|
||||
PutC("six, a fast SICS commandline client (doc: six help)\n");
|
||||
PutC("---------------------------------------------------\n");
|
||||
LoadPrefs();
|
||||
if (port == -1) {
|
||||
if (*sim == '\0') {
|
||||
port = 2911;
|
||||
} else {
|
||||
port = 2927;
|
||||
|
||||
PutC( "---------------------------------------------------\n");
|
||||
if (strcmp(clcname, "six") == 0) {
|
||||
PutC("six, a fast SICS commandline client (doc: six help)\n");
|
||||
if (port == -1) {
|
||||
if (*sim == '\0') {
|
||||
port = 2911;
|
||||
} else {
|
||||
port = 2927;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
PutC("seacmd, a sea commandline client (doc: seacmd help)\n");
|
||||
if (port == -1) {
|
||||
port = 22911;
|
||||
}
|
||||
}
|
||||
PutC( "---------------------------------------------------\n");
|
||||
ERR_I(sock[0]=Connect());
|
||||
if (sock[0] == 0) return 0;
|
||||
if (sicslogin) {
|
||||
@ -698,13 +747,13 @@ int main (int argc, char *argv[]) {
|
||||
str_copy(instr, "SANS2");
|
||||
}
|
||||
ERR_I(i=setrights(gotolevel));
|
||||
PutC("\rlogged in to SICS as ");
|
||||
PutC("\rlogged in to "); PutC(servername); PutC(" as ");
|
||||
PutC(pnam[level]);
|
||||
PutC(" on ");
|
||||
PutC(instr);
|
||||
PutC("\n");
|
||||
|
||||
sprintf(stdPrompt, "six[%s] ", instr);
|
||||
sprintf(stdPrompt, "%s[%s] ", clcname, instr);
|
||||
|
||||
ERR_I(sendCmd(sock[0], "status interest"));
|
||||
ERR_P(readWrite(12000,0,"OK"));
|
||||
@ -713,7 +762,7 @@ int main (int argc, char *argv[]) {
|
||||
ERR_P(readWrite(12000,0,NULL));
|
||||
|
||||
} else {
|
||||
sprintf(stdPrompt, "six[%s] ", host);
|
||||
sprintf(stdPrompt, "%s[%s] ", clcname, host);
|
||||
status[0]='E'; status[1]='\0';
|
||||
}
|
||||
|
||||
@ -721,7 +770,7 @@ int main (int argc, char *argv[]) {
|
||||
buf[0]='\0';
|
||||
pos=0;
|
||||
|
||||
term_read_hist("six");
|
||||
term_read_hist(clcname);
|
||||
savehist = 1;
|
||||
|
||||
while (1) {
|
||||
@ -778,58 +827,65 @@ int main (int argc, char *argv[]) {
|
||||
PutC(pnam[level]);
|
||||
PutC(" privilege\n");
|
||||
buf[0]='\0';
|
||||
} else if (0==strcmp(buf, "help six")) {
|
||||
} else if (0==strncmp(buf, "help ", 5) && 0==strcmp(buf+5, clcname)) {
|
||||
PrintCmd(buf, CLIENT);
|
||||
Usage(1);
|
||||
buf[0]='\0';
|
||||
} else if (0==strcmp(buf, "six help")) {
|
||||
PrintCmd(buf, CLIENT);
|
||||
Usage(0);
|
||||
buf[0]='\0';
|
||||
} else if (0==strncmp(buf, "six def ", 8)) {
|
||||
PrintCmd(buf, CLIENT);
|
||||
term_define_key(buf+8, 0);
|
||||
buf[0]='\0';
|
||||
} else if (0==strcmp(buf, "six def")) {
|
||||
PrintCmd(buf, CLIENT);
|
||||
term_define_key("", 0);
|
||||
buf[0]='\0';
|
||||
} else if (0==strcmp(buf, "six save")) {
|
||||
PrintCmd(buf, CLIENT);
|
||||
PutC("defaults for next calls to six:\n");
|
||||
ERR_I(i=SavePrefs());
|
||||
if (level == 0) {
|
||||
gotolevel = 3;
|
||||
} else {
|
||||
gotolevel = level;
|
||||
} else if (0==strncmp(buf, clcname, clclen) && buf[clclen] == ' ') {
|
||||
subcmd = buf + clclen;
|
||||
while (*subcmd <= ' ' && *subcmd != 0) {
|
||||
subcmd++;
|
||||
}
|
||||
PutC(" connect to ");
|
||||
if (i == 1) {
|
||||
PutC(getenv("Instrument"));
|
||||
PutC(" (on ");
|
||||
PutC(savedHost);
|
||||
PutC(", this default can not be changed)\n");
|
||||
} else {
|
||||
deflevel = gotolevel;
|
||||
ERR_I(setrights(gotolevel));
|
||||
PutC(instr);
|
||||
PutC(" (");
|
||||
PutC(savedHost);
|
||||
if (port != 2911 && port !=2927) {
|
||||
snprintf(buf, sizeof buf, ":%d", port);
|
||||
PutC(buf);
|
||||
if (0==strcmp(subcmd, "help")) {
|
||||
PrintCmd(buf, CLIENT);
|
||||
Usage(0);
|
||||
buf[0]='\0';
|
||||
} else if (0==strncmp(subcmd, "def ", 4)) {
|
||||
PrintCmd(buf, CLIENT);
|
||||
term_define_key(subcmd+4, 0);
|
||||
buf[0]='\0';
|
||||
} else if (0==strcmp(subcmd, "def")) {
|
||||
PrintCmd(buf, CLIENT);
|
||||
term_define_key("", 0);
|
||||
buf[0]='\0';
|
||||
} else if (0==strcmp(subcmd, "save")) {
|
||||
PrintCmd(buf, CLIENT);
|
||||
PutC("defaults for next calls to ");
|
||||
PutC(clcname); PutC(":\n");
|
||||
ERR_I(i=SavePrefs());
|
||||
if (level == 0) {
|
||||
gotolevel = 3;
|
||||
} else {
|
||||
gotolevel = level;
|
||||
}
|
||||
PutC(")\n login as ");
|
||||
PutC(us);
|
||||
PutC(" with ");
|
||||
PutC(pnam[level]);
|
||||
PutC(" privilege\n");
|
||||
PutC(" connect to ");
|
||||
if (i == 1) {
|
||||
PutC(getenv("Instrument"));
|
||||
PutC(" (on ");
|
||||
PutC(savedHost);
|
||||
PutC(", this default can not be changed)\n");
|
||||
} else {
|
||||
deflevel = gotolevel;
|
||||
ERR_I(setrights(gotolevel));
|
||||
PutC(instr);
|
||||
PutC(" (");
|
||||
PutC(savedHost);
|
||||
if (port != 2911 && port !=2927) {
|
||||
snprintf(buf, sizeof buf, ":%d", port);
|
||||
PutC(buf);
|
||||
}
|
||||
PutC(")\n login as ");
|
||||
PutC(us);
|
||||
PutC(" with ");
|
||||
PutC(pnam[level]);
|
||||
PutC(" privilege\n");
|
||||
}
|
||||
buf[0]='\0';
|
||||
} else {
|
||||
PrintCmd(buf, CLIENT);
|
||||
PutC("ERROR: unknown command\n");
|
||||
buf[0]='\0';
|
||||
}
|
||||
buf[0]='\0';
|
||||
} else if (0==strncmp(buf, "six ", 4)) {
|
||||
PrintCmd(buf, CLIENT);
|
||||
PutC("ERROR: unknown command\n");
|
||||
buf[0]='\0';
|
||||
} else if (buf[0] == '\0') { /* empty command */
|
||||
PrintCmd(buf, CLIENT);
|
||||
ERR_P(p=readWrite(200,0,NULL)); /* just wait a little */
|
||||
@ -865,8 +921,9 @@ int main (int argc, char *argv[]) {
|
||||
buf[0]='\0';
|
||||
pos=0;
|
||||
} else if (iret>0) { /* something arrived from sockets */
|
||||
assert(iret == sock[0] || iret == sock[1]);
|
||||
ERR_P(p=readWrite(500,0,NULL));
|
||||
if (iret == sock[0] || iret == sock[1]) {
|
||||
ERR_P(p=readWrite(500,0,NULL));
|
||||
}
|
||||
}
|
||||
if (strcmp(p, "0") == 0) {
|
||||
term_clear();
|
||||
|
Reference in New Issue
Block a user