97 lines
2.9 KiB
C
97 lines
2.9 KiB
C
#include <time.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "myc_str.h"
|
|
#include "myc_fortran.h"
|
|
|
|
typedef struct { char *instr; char *host; int port; char *user; int cod; } Instrument;
|
|
static Instrument list[]={
|
|
{ "DMC", "pc4629.psi.ch", 9753, "DMC" , 1},
|
|
{ "MORPHEUS", "pc4120.psi.ch", 9753, "MORPHEUS" , 1},
|
|
{ "SANS", "pc3965.psi.ch", 9753, "SANS" , 1},
|
|
{ "SANS2", "sans2.psi.ch", 9753, "SANS2" , 1},
|
|
{ "HRPT", "pc4630.psi.ch", 9753, "HRPT" , 1},
|
|
{ "TRICS", "lnsa18.psi.ch", 9753, "TRICS" , 1},
|
|
{ "AMOR", "lnsa14.psi.ch", 9753, "AMOR" , 1},
|
|
{ "FOCUS", "lnsa16.psi.ch", 9753, "FOCUS" , 1},
|
|
{ "TASP", "pc4478.psi.ch", 9753, "TASP", 1},
|
|
{ "RITA", "pc4345.psi.ch", 9753, NULL , 0},
|
|
{ "PREP", "lns1se.psi.ch", 9753, "admin" , 0},
|
|
{ "AREA", "lns1se.psi.ch", 9751, "admin" , 0},
|
|
{ "PREP2", "lnsa15.psi.ch", 9756, "lnsg" , 2},
|
|
{ "TEST", "lnsa15.psi.ch", 9755, "lnslib", 2}
|
|
};
|
|
|
|
int InstrHost(char *input, char *instr, char *host, char *user, char *pcod
|
|
, int instr_len, int host_len, int user_len, int pcod_len) {
|
|
char buf[256], *lnscode;
|
|
int i, j;
|
|
struct tm tim;
|
|
time_t t;
|
|
|
|
j=-1;
|
|
str_upcase(buf, input);
|
|
for (i = 0; i < sizeof(list) / sizeof(list[0]); i++) {
|
|
if (0==strcmp(buf, list[i].instr)) {
|
|
j=i;
|
|
}
|
|
}
|
|
if (j<0) {
|
|
str_lowcase(buf, input);
|
|
for (i = 0; i < sizeof(list) / sizeof(list[0]); i++) {
|
|
if (list[i].host==strstr(list[i].host, buf)) {
|
|
if (j>=0) return 0;
|
|
j=i;
|
|
}
|
|
}
|
|
}
|
|
if (j<0) return 0;
|
|
str_ncpy(instr,list[j].instr, instr_len);
|
|
str_ncpy(host, list[j].host, host_len);
|
|
if (list[j].user != NULL) {
|
|
str_ncpy(user, list[j].user, user_len);
|
|
if (list[j].cod == 1) {
|
|
str_ncpy(pcod, instr, pcod_len);
|
|
str_ncat(pcod, "LNS", pcod_len);
|
|
} else if (list[j].cod == 2) {
|
|
time(&t);
|
|
tim=*localtime(&t);
|
|
lnscode=getenv("LNSCODE");
|
|
if (lnscode == NULL) {
|
|
sprintf(pcod, "%02dlns%d", tim.tm_year % 100, tim.tm_mon/6+1);
|
|
} else if (strlen(lnscode)==3) {
|
|
sprintf(pcod, "%c%clns%c", lnscode[0], lnscode[1], lnscode[2]);
|
|
} else {
|
|
sprintf(pcod, "%02dlns%s", tim.tm_year % 100, lnscode);
|
|
}
|
|
} else {
|
|
str_ncpy(pcod, " ", pcod_len);
|
|
}
|
|
}
|
|
return list[j].port;
|
|
}
|
|
|
|
|
|
#ifdef F_CHAR
|
|
/* compile only when fortran c interface stuff is defined */
|
|
|
|
int F_FUN(instr_host)(F_CHAR(input), F_CHAR(instr), F_CHAR(host), F_CHAR(user), F_CHAR(pcod)
|
|
, int input_len, int instr_len, int host_len, int user_len, int pcod_len) {
|
|
char buf[256], in[256], ho[256], us[256], pc[256];
|
|
int iRet;
|
|
|
|
STR_TO_C(buf, input);
|
|
iRet=InstrHost(buf, in, ho, us, pc, sizeof(in), sizeof(ho), sizeof(us), sizeof(pc));
|
|
if (iRet>0) {
|
|
STR_TO_F(instr, in);
|
|
STR_TO_F(host, ho);
|
|
STR_TO_F(user, us);
|
|
STR_TO_F(pcod, pc);
|
|
}
|
|
return iRet;
|
|
}
|
|
|
|
#endif
|