#include #include #include #include #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", "lnsa05.psi.ch", 9753, "DMC" , 1}, { "TOPSI", "pc4120.psi.ch", 9753, "TOPSI" , 1}, { "SANS", "lnsa10.psi.ch", 9753, "SANS" , 1}, { "HRPT", "lnsa11.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", "lnsa12.psi.ch", 9753, "TASP", 1}, { "TASP0", "lnsa09.psi.ch", 9753, NULL , 0}, { "RITA", "rita2.psi.ch", 9753, NULL , 0}, { "PREP", "lnsa01.psi.ch", 9753, NULL , 0}, { "AREA", "lnsa01.psi.ch", 9751, NULL , 0}, { "TEST", "lnsa15.psi.ch", 9753, "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]; 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); sprintf(pcod, "%02dlns%d", tim.tm_year % 100, tim.tm_mon/6+1); } 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