/* @(#)app_xident.c 1.0.0.0 (ESO-La Silla) 10/08/91 12:00:00 */ /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .IDENT applic.c .MODULE subroutines -- gmidas.exe .LANGUAGE C .AUTHOR M.Peron- ESO .PURPOSE .KEYWORDS application routines, Midas related routines. .VERSION 1.0 1-Mar-1994 Implementation .ENVIRONMENT UNIX ------------------------------------------------------------*/ #include #include #include #include "UxLib.h" #include #include #include char *mode[] = {"IMAGING (RED)","IMAGING (BLUE)", "IMAGING (SUSI)", "GRISM SPECTROSCOPY","GRATING SPECTROSCOPY (RED)", "GRATING SPECTROSCOPY (BLUE)", "ECHELLE SPECTROSCOPY"}; char *all[] = {"EXPTIME","RA","DEC","DATE","EXPTYPE","OPATH"}; char *imar[] = {"R_FILTER_ID"}; char *imab[] = {"B_FILTER_ID"}; char *ech[] = {"R_FILTER_ID","GRISM_ID","R_GRATING_ID","R_GRATING_WLEN"}; char *gr[] = {"R_FILTER_ID","GRISM_ID"}; char *gtr[] = {"R_FILTER_ID","R_GRATING_ID","R_GRATING_WLEN"}; char *gtb[] = {"B_FILTER_ID","B_GRATING_ID","B_GRATING_WLEN"}; char *susi[] = {"S_FILTER_ID"}; char *osmmget(); /******************* Local variables *******************/ static LCTAB *Lc = NULL; /* Line catalog table */ static LCCOL *Lcc = NULL; static char * List[10240]; static int OstAllocated = FALSE; static int oldcbs; /********************************** application external variables **********************************/ extern char ostchoice[60]; /* OST table*/ extern char claschoice[60]; /* Clas table*/ extern char *rowtext[256]; /*Text Widget*/ extern Widget sb; int size; double atof(); float *fvector(); int *ivector(); char **cmatrix(); char *cvector(); extern int tidost,tidclas,colno,fno; extern char *colchoice; extern char *filechoice; void free_ost(); int read_ost_table() { if ( ! file_exists( ostchoice, ".tbl" ) ) { SCTPUT( "*** OST table doesn't exist ***" ); return(FALSE); } if ( Lc != NULL ) { /* deallocate space */ free_cmatrix(Lc->ident, 0, Lc->nrows - 1, 0, MAXION - 1); free_ivector(Lc->row,0,Lc->nrows-1); osmmfree((char *)Lc); } Lc = (LCTAB *)osmmget( sizeof(LCTAB) ); /* call to a library routine */ if( !read_ident( Lc,ostchoice) ) { Lc = NULL; return FALSE; } return TRUE; } void display_ident_table( wlist ) Widget wlist; { int i,j,k; Cardinal n = 0; char liste[500],mycomm[200]; XmStringTable str_list; XmString item; if ( OstAllocated ) free_ost(); OstAllocated = TRUE; for ( i = 0; i < Lc->nrows; i++ ) List[i] = (char *)osmmget( 80 ); List[Lc->nrows] = NULL; for ( i = 0; i < Lc->nrows; i++ ) strcpy( List[i], Lc->ident[i]); str_list = (XmStringTable)XtMalloc(Lc->nrows * sizeof(XmString *)); for ( i = 0; i < Lc->nrows; i++ ) { str_list[i] = XmStringCreateSimple(List[i]); } XmListSetPos(wlist, 1); XmListDeleteAllItems(wlist); XmListAddItems(wlist, str_list, Lc->nrows, 1); for ( i = 0; i nrows; i++ ) XmStringFree(str_list[i]); XtFree((char*)str_list); } void display_col_table( wlist ) Widget wlist; { extern swidget myerror; int i,j,k,dummy,mycol[256],len,mylen,nulls[256],pos; int top,visible; Cardinal n = 0; char liste[500]; char form[TBL_FORLEN+1]; char title[500],mylabel[TBL_LABLEN+1],mymess[60]; XmStringTable str_list; XmString item; Position x1,x2,y; if (Lcc != NULL ) { free_cmatrix(Lcc->value,0,Lcc->nrows-1,0,MAXVAL-1); osmmfree((char *)Lcc); Lcc = (LCCOL *)0; } for (i=0; i<500; i++) title[i] = '\0'; mylen = 1; k = 0; /* sprintf(mymess,"WRITE/OUT %s",colchoice); AppendDialogText(mymess);*/ for (i=0; inrows, &dummy, &dummy, &dummy ); Lcc->value = cmatrix(0,Lcc->nrows-1,0,mylen); str_list = (XmStringTable)XtMalloc(Lcc->nrows *sizeof(XmString *)); for (i=0; i< Lcc->nrows; i++) { TCRRDC(tidost,i+1,colno,mycol,Lcc->value[i],nulls); str_list[i] = XmStringCreateSimple(Lcc->value[i]); } XmListSetPos(wlist, 1); XmListDeleteAllItems(wlist); XmListAddItems(wlist, str_list, Lcc->nrows, 1); XtVaGetValues(UxGetWidget(UxFindSwidget("identlist")), XmNtopItemPosition,&top, XmNvisibleItemCount,&visible, NULL); XmListSetBottomPos(wlist,top+visible-1); for ( i = 0; i nrows; i++ ) XmStringFree(str_list[i]); XtFree((char *)str_list); XmTextSetString(UxGetWidget(UxFindSwidget("scrollabel")),title); XmTextShowPosition(UxGetWidget(UxFindSwidget("scrollabel")),(XmTextPosition) 0); pos = XmTextGetTopCharacter(UxGetWidget(UxFindSwidget("scrollabel"))); XmTextPosToXY(UxGetWidget(UxFindSwidget("scrollabel")),pos,&x1,&y); pos = pos+1; XmTextPosToXY(UxGetWidget(UxFindSwidget("scrollabel")),pos,&x2,&y); size = x2-x1; oldcbs = 0; } void free_ost() { int i; for ( i = 0; i < Lc->nrows; i++ ) osmmfree( List[i] ); } void myscrollv(scrollbar,client_data,cbs) Widget scrollbar; XtPointer client_data; XmScrollBarCallbackStruct *cbs; { int top,visible,height,count,item,slider_size,pos; XmListSetPos(UxGetWidget(UxFindSwidget("readtable")),cbs->value+1); XmListSetPos(UxGetWidget(UxFindSwidget("identlist")),cbs->value+1); /*else if (item >=top+visible) { XmListSetBottomPos(UxGetWidget(UxFindSwidget("readtable")),item); XmListSetBottomPos(UxGetWidget(UxFindSwidget("identlist")),item); }*/ } void myscrollh(scrollbar,client_data,cbs) Widget scrollbar; XtPointer client_data; XmScrollBarCallbackStruct *cbs; { int last,width; XmTextPosition pos; short int column; XtVaGetValues(UxGetWidget(UxFindSwidget("scrollabel")),XmNcolumns,&column,NULL); pos = cbs->value /size; if (cbs->value > oldcbs) { XmTextShowPosition(UxGetWidget(UxFindSwidget("scrollabel")),(XmTextPosition) (pos+column)); } else { XmTextShowPosition(UxGetWidget(UxFindSwidget("scrollabel")),(XmTextPosition) (pos)); } oldcbs = cbs->value; } void myscrollh2(scrollbar,client_data,cbs) Widget scrollbar; XtPointer client_data; XmScrollBarCallbackStruct *cbs; { /*XmListSetPos(UxGetWidget(UxFindSwidget("sl2")),cbs->pixel); */ } void my_select(list_w,client_data,cbs) Widget list_w; XtPointer client_data; XmListCallbackStruct *cbs; { int i, nbytes; char *choice ; if (filechoice) osmmfree(filechoice); nbytes = 200 * cbs->selected_item_count; fno = cbs->selected_item_count; filechoice = osmmget(nbytes); for (i=0; iselected_item_count ;i++) { XmStringGetLtoR(cbs->selected_items[i],XmSTRING_DEFAULT_CHARSET,&choice); strcat(filechoice,choice); filechoice[strlen(filechoice)] = ','; filechoice[strlen(filechoice)+1] = '\0'; } XtFree(choice); } void myrow(widget,client_data,cbs) Widget widget; XtPointer client_data; XmRowColumnCallbackStruct *cbs; { Widget pb = cbs->widget; } void never_called(text_w,i) Widget text_w; int i; { rowtext[i-1] = XmTextGetString(text_w); } void read_descr(mytext) Widget mytext; { int indx,status,lbuf,numbuf,comma,item_no,i; XmString *str; char buf[32]; char *descr[200]; lbuf = 32; item_no = 0; indx = 1; while (!(status = SCDINF(tidost,indx,4,buf,lbuf,&numbuf))){ if (buf[0] == ' ' ) break; comma = stuindex(buf,","); if (buf[comma+1] == 'C' && strncmp(buf,"TLABL",5) !=0 && strncmp(buf,"TSELT",5) !=0 && strncmp(buf,"HISTORY",7) !=0 ) { descr[item_no] = osmmget(16); strncpy(descr[item_no],buf,comma-1); comma = stuindex(descr[item_no]," ") ; if (*(descr[item_no]+comma)) *(descr[item_no]+comma) = '\0'; item_no++; } indx++; } str = (XmString *)XtMalloc(item_no * sizeof(XmString)); for (i=0; i="); else if (strncmp(descr,"GT",2) == 0) strcpy(op,">"); else { while (*descr == ' ') descr++ ; fin = 0; continue; } strcat(crit,op); descr = descr + 3; if (*descr == '"') { descr++; if (*descr == '"') descr +=2; else { i = strloc(descr,'"'); strncat(crit,descr,i); descr = descr+i+2; } if (!*descr) fin = 0; } else { i = stsnum(descr); strncat(crit,descr,i); descr = descr+i; if (!*descr) fin=0; else if (*descr == '.') descr++; } } } /* UxPutText(UxWidgetToSwidget(row[col-1]),crit); */ XmTextSetString(rowrule[col-1][1],crit); } descr = descr-len; } int read_clas_table() { extern Widget row1[40],row2[40],row3[40]; extern swidget myerror; extern int rowno; int cold,colo,cols,nrow,dummy,i,null; char mytext[8],descr[TBL_LABLEN+1],mystring[80]; if (tidclas !=-1) TCTCLO(tidclas); TCTOPN(claschoice,F_I_MODE,&tidclas); UxPutText(UxFindSwidget("sclas_t1"),claschoice); TCLSER(tidclas,"DESCR",&cold); if (cold == -1) { UxPutMessageString(UxFindSwidget("errorDialog1"),"Column DESCR missing"); UxPopupInterface(myerror,no_grab); return; } TCLSER(tidclas,"OUTCOL",&colo); if (colo == -1) { UxPutMessageString(UxFindSwidget("errorDialog1"),"Column OUTCOL missing"); UxPopupInterface(myerror,no_grab); return; } TCLSER(tidclas,"OUTCHAR",&cols); if (cols == -1) { UxPutMessageString(UxFindSwidget("errorDialog1"),"Column OUTCHAR missing"); UxPopupInterface(myerror,no_grab); return; } TCIGET(tidclas,&dummy,&nrow,&dummy,&dummy,&dummy); if (row1[0]) for (i=0; i5 && nrow > rowno ) XtVaSetValues(UxGetWidget(UxFindSwidget("rowproc")),XmNnumColumns,nrow,NULL); for (i=0; i5 && nrow > rowno) rowno=nrow; for (i=0; i5 && nrow > arowno) XtVaSetValues(UxGetWidget(UxFindSwidget("rowasso")),XmNnumColumns,nrow,NULL); if (arow1[0]) for (i=0; i5 && nrow > arowno) arowno=nrow; for (i=0; i upper) { TCLSER(tidost,"IDENT",&col_ident); TCERDC(tidost,nrow,col_ident,mident,&nul); item = XmStringCreateSimple(mident); XmListAddItemUnselected(wlist,item,0); item_no = upper+1; if (item_no >=top+visible) XmListSetBottomPos(wlist,item_no); XmStringFree(item); } } void add_col_table(wlist) Widget wlist; { int mylen,mycol[256],nulls[256],i,nrow, len,dummy,upper; int top,visible,item_no; char *myvalue,form[TBL_FORLEN+1],command[160]; XmString item; mylen = 0; XtVaGetValues(wlist,XmNitemCount,&upper, XmNvisibleItemCount,&visible, XmNtopItemPosition,&top, NULL); for (i=0; i upper) { myvalue = osmmget(mylen+1); TCRRDC(tidost,nrow,colno,mycol,myvalue,nulls); item = XmStringCreateSimple(myvalue); XmListAddItemUnselected(wlist,item,0); item_no = upper+1; if (item_no >=top+visible) XmListSetBottomPos(wlist,item_no); XmStringFree(item); osmmfree(myvalue); } } int initmytable() { extern int tidcomm; int col,pid,val; char cval[1]; TCTINI("TAB_COMM",F_TRANS,F_O_MODE,3,1,&tidcomm); TCCINI(tidcomm,D_I4_FORMAT,1,"I6"," ","PID",&col); TCCINI(tidcomm,D_C_FORMAT,60,"A20"," ","OST",&col); TCCINI(tidcomm,D_C_FORMAT,60,"A20"," ","DESCR",&col); TCCINI(tidcomm,D_I4_FORMAT,1,"I6"," ","OPFLAG",&col); pid = oshpid(); TCEWRI(tidcomm,1,1,&pid); strcpy(cval,"?"); TCEWRC(tidcomm,1,2,cval); val = 1; TCEWRI(tidcomm,1,4,&val); TCTCLO(tidcomm); } int populate(wlist) Widget wlist; { XmStringTable str_list; int i, item_no; char mycomm[200]; item_no = 7; str_list = (XmStringTable)XtMalloc(item_no * sizeof(XmString)); for (i=0; itext->ptr == NULL) return; for (len=0; lentext->length; len++) { if (isalpha(cbs->text->ptr[len])) { int i; for (i=len; (i+1) text->length; i++) cbs->text->ptr[i] = cbs->text->ptr[i+1]; cbs->text->length--; len--; } } } void checkchar(text_w,unused,cbs) Widget text_w; XtPointer unused; XmTextVerifyCallbackStruct *cbs; { int len; if (cbs->text->ptr == NULL) return; for (len=0; lentext->length; len++) { if (cbs->text->ptr[len] == '<' || cbs->text->ptr[len] == '>' ) { int i; for (i=len; (i+1) text->length; i++) cbs->text->ptr[i] = cbs->text->ptr[i+1]; cbs->text->length--; len--; } } }