/************************************************/ /* */ /* File : dmap2html.c */ /* Description : html document creator */ /* */ /* Author: Sfiligoi Igor */ /* */ /* Created : 07.04.1997 */ /* Last modified: 11.07.1997 */ /* */ /************************************************/ #include <stdio.h> #include <stdlib.h> #include <Error.h> #include <GeoVme.h> #include <dmap.h> /* write the map as a html file */ int dmap_write_html(char *file_prefix, char *dir_name, char *system_name) { char tmpstr[16*1024]; int dir_ok; /* if true(1), dir_name end in / */ if ((dir_name==NULL)||(strlen(dir_name)==0)) { ErrorSet(DMAP_ERROR_UNKNOWN,"dmap_write_html","Dir_name empty!"); return DMAP_ERROR_UNKNOWN; } dir_ok = (dir_name[strlen(dir_name)-1]=='/'); { FILE *fmain; int chain_nr; if (dir_ok) sprintf(tmpstr,"%s%s.html",dir_name,file_prefix); else sprintf(tmpstr,"%s/%s.html",dir_name,file_prefix); fmain = fopen(tmpstr,"w"); if (fmain==NULL) { ErrorSetF(DMAP_ERROR_UNKNOWN,"dmap_write_html","Error creating file %s.",tmpstr); return DMAP_ERROR_UNKNOWN; } fprintf(fmain,"<HTML>\n\n<HEAD>\n<TITLE>%s</TITLE>\n</HEAD>\n\n<BODY>\n",system_name); fprintf(fmain,"\n<H1>%s</H1>\n\n",system_name); fprintf(fmain,"<UL>\n"); for (chain_nr=1; chain_nr<=dmap_query_nr_chains(); chain_nr++) { int crate_nr; /* write in the previous level file */ fprintf(fmain,"<LI>Chain %i\n\t<UL>\n",chain_nr); for (crate_nr=1; crate_nr<dmap_query_nr_crates(chain_nr); crate_nr++) { int board_nr; FILE *fcrate; sprintf(tmpstr,"%s_%i_%i.html",file_prefix,chain_nr,crate_nr); /* write in the previous level file */ fprintf(fmain,"\t<LI><A HREF=\"%s\">Crate %i</A>\n",tmpstr,crate_nr); if (dir_ok) sprintf(tmpstr,"%s%s_%i_%i.html",dir_name,file_prefix,chain_nr,crate_nr); else sprintf(tmpstr,"%s/%s_%i_%i.html",dir_name,file_prefix,chain_nr,crate_nr); fcrate = fopen(tmpstr,"w"); if (fcrate==NULL) { ErrorSetF(DMAP_ERROR_UNKNOWN,"dmap_write_html","Error creating file %s.",tmpstr); return DMAP_ERROR_UNKNOWN; } fprintf(fcrate,"<HTML>\n\n<HEAD>\n<TITLE>%s Chain %i Crate %i</TITLE>\n</HEAD>\n\n<BODY>\n",system_name,chain_nr,crate_nr); fprintf(fcrate,"\n<H1>%s Chain %i Crate %i</H1>\n\n",system_name,chain_nr,crate_nr); /* write the internal links */ fprintf(fcrate,"<UL>\n"); for (board_nr=0; board_nr<dmap_query_nr_slots(chain_nr,crate_nr); board_nr++) if (dmap_query_btype(chain_nr,crate_nr,board_nr)!=DMAP_ERROR_EMPTY) fprintf(fcrate,"<LI><A HREF=\"#slot_%i\">Slot %i</A>\n",board_nr,board_nr); fprintf(fcrate,"</UL>\n"); /* write the data */ for (board_nr=0; board_nr<dmap_query_nr_slots(chain_nr,crate_nr); board_nr++) { int btype = dmap_query_btype(chain_nr,crate_nr,board_nr); if (btype!=DMAP_ERROR_EMPTY) { fprintf(fcrate,"<P>\n<HR>\n<A NAME=\"slot_%i\">\n<H2>%s Chain %i Crate %i Slot %i</H2>\n\n",board_nr,system_name,chain_nr,crate_nr,board_nr); /* write the board type */ fprintf(fcrate,"Board type: "); switch (btype) { case DMAP_BTYPE_CALTDC: fprintf(fcrate,"Calorimeter TDC"); break; case DMAP_BTYPE_CALADC: fprintf(fcrate,"Calorimeter ADC"); break; case DMAP_BTYPE_CHATDC: fprintf(fcrate,"Chamber TDC"); break; case DMAP_BTYPE_QCALTDC: fprintf(fcrate,"QCAL TDC"); break; case DMAP_BTYPE_QCALADC: fprintf(fcrate,"QCAL ADC"); break; } fprintf(fcrate,"\n\n<P>\n\n"); /* write the board content */ switch (btype) { case DMAP_BTYPE_CALTDC: case DMAP_BTYPE_CALADC: { int chan_nr; fprintf(fcrate,"<TABLE BORDER>\n"); fprintf(fcrate,"<TR><TH>Channel</TH><TH>Detector</TH><TH>Module</TH><TH>Plane</TH><TH>Column</TH><TH>Side</TH></TR>\n"); for (chan_nr=0; chan_nr<dmap_query_nr_chans(chain_nr,crate_nr,board_nr); chan_nr++) { DMAP_CHAN_EL chan_el; if (dmap_get(chain_nr,crate_nr,board_nr,chan_nr,&chan_el)!=DMAP_ERROR_EMPTY) { int amodule,aplane,acolumn,aside; char adetector[64]; DMAP_CAL_EL *el; el = &(chan_el.data.cal); if (el->detector == DMAP_DET_ECAPA) strcpy(adetector,"ECAPA"); else if (el->detector == DMAP_DET_ECAPB) strcpy(adetector,"ECAPB"); else if (el->detector == DMAP_DET_BARREL) strcpy(adetector,"BARR"); amodule = el->module; aplane = el->plane; acolumn = el->column; aside = el->side; fprintf(fcrate,"<TR><TD>%i</TD><TD>%s</TD><TD>%i</TD><TD>%i</TD><TD>%i</TD><TD>%i</TD></TR>\n", chan_nr,adetector,amodule,aplane,acolumn,aside); } } fprintf(fcrate,"</TABLE>\n\n"); } break; case DMAP_BTYPE_CHATDC: { int chan_nr; fprintf(fcrate,"<TABLE BORDER>\n"); fprintf(fcrate,"<TR><TH>Channel</TH><TH>Layer</TH><TH>Wire</TH></TR>\n"); for (chan_nr=0; chan_nr<dmap_query_nr_chans(chain_nr,crate_nr,board_nr); chan_nr++) { DMAP_CHAN_EL chan_el; if (dmap_get(chain_nr,crate_nr,board_nr,chan_nr,&chan_el)!=DMAP_ERROR_EMPTY) { int alayer,awire; DMAP_CHAMBER_EL *el; el = &(chan_el.data.chamber); alayer = el->layer; awire = el->wire; fprintf(fcrate,"<TR><TD>%i</TD><TD>%i</TD><TD>%i</TD></TR>\n", chan_nr,alayer,awire); } } fprintf(fcrate,"</TABLE>\n\n"); } break; case DMAP_BTYPE_QCALTDC: case DMAP_BTYPE_QCALADC: { int chan_nr; fprintf(fcrate,"<TABLE BORDER>\n"); fprintf(fcrate,"<TR><TH>Channel</TH><TH>Detector</TH><TH>Module</TH></TR>\n"); for (chan_nr=0; chan_nr<dmap_query_nr_chans(chain_nr,crate_nr,board_nr); chan_nr++) { DMAP_CHAN_EL chan_el; if (dmap_get(chain_nr,crate_nr,board_nr,chan_nr,&chan_el)!=DMAP_ERROR_EMPTY) { int amodule; char adetector[64]; DMAP_QCAL_EL *el; el = &(chan_el.data.qcal); if (el->detector == DMAP_DET_QCALA) strcpy(adetector,"QCALA"); else if (el->detector == DMAP_DET_QCALB) strcpy(adetector,"QCALB"); amodule = el->module; fprintf(fcrate,"<TR><TD>%i</TD><TD>%s</TD><TD>%i</TD></TR>\n", chan_nr,adetector,amodule); } } fprintf(fcrate,"</TABLE>\n\n"); } break; } } } } fprintf(fmain,"\t</UL>\n"); } fprintf(fmain,"</UL>\n"); fprintf(fmain,"</BODY>\n\n</HTML>\n"); fclose(fmain); } return DMAP_ERROR_OK; } int main(int argc, char *argv[]) { int res; DMAP_CHAN_EL data; if (argc!=6) { printf("Use: dmap2html GeoVmeMap dmap file_prefix outdir title\n"); return 1; } GeoVmeLoadMap(argv[1]); if (dmap_load(argv[2])!=DMAP_ERROR_OK) { printf("Error in dmap_load\n"); return 2; } if (dmap_write_html(argv[3],argv[4],argv[5])!=DMAP_ERROR_OK) { printf("Error in dmap_write_html\n"); return 3; } return 0; }