/************************************************/ /* */ /* File : dmap2tcl2.c */ /* Description : tcl script 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> void dmap_write_tcl_title_slot(FILE *fmain,char *system_name, int chain_nr,int crate_nr, int board_nr) { fprintf(fmain," if {[window_exist $win]} {\n\treturn 1;\n }\n\n"); fprintf(fmain," toplevel $win\n"); fprintf(fmain," wm title $win \"%s Chain %i Crate %i Slot %i Type $btype\"\n\n",system_name,chain_nr,crate_nr,board_nr); fprintf(fmain," #title frame\n"); fprintf(fmain," set ftitle $win.ftitle\n"); fprintf(fmain," frame $ftitle -relief groove -borderwidth 1\n\n"); fprintf(fmain," global image_name\n"); fprintf(fmain," label $ftitle.limage -image [image create photo -file $image_name ]\n\n"); fprintf(fmain," label $ftitle.lchain -text \"Chain: %i\"\n",chain_nr); fprintf(fmain," label $ftitle.lcrate -text \"Crate: %i\"\n",crate_nr); fprintf(fmain," label $ftitle.lslot -text \"Slot: %i\"\n",board_nr); fprintf(fmain," label $ftitle.lbtype -text \"Board type: $btype\"\n\n"); fprintf(fmain," pack $ftitle.limage -side right\n"); fprintf(fmain," pack $ftitle.lchain -side top -anchor nw\n"); fprintf(fmain," pack $ftitle.lcrate -side top -anchor nw\n"); fprintf(fmain," pack $ftitle.lslot -side top -anchor nw\n"); fprintf(fmain," pack $ftitle.lbtype -side top -anchor nw\n\n"); fprintf(fmain," pack $ftitle -side top -padx 5 -pady 5 -fill x\n\n"); fprintf(fmain," #data frame\n"); fprintf(fmain," set fdata $win.fdata\n"); fprintf(fmain," frame $fdata\n\n"); } void dmap_write_tcl_row(FILE *fmain, char *framename, int width, char *textname) { fprintf(fmain," ##%s frame\n",framename); fprintf(fmain," set f%s $fdata.f%s\n",framename,framename); fprintf(fmain," frame $f%s\n\n",framename); fprintf(fmain," label $f%s.ltitle -text \"%s\"\n",framename,textname); fprintf(fmain," listbox $f%s.ldata -width %i -yscrollcommand \"$fdata.sy set\"\n\n",framename,width); fprintf(fmain," pack $f%s.ltitle -side top -anchor nw\n",framename); fprintf(fmain," pack $f%s.ldata -side top -fill both -expand 1 -anchor n\n\n",framename); fprintf(fmain," pack $f%s -side left -fill both -expand 1\n\n",framename); } void dmap_write_tcl_exit(FILE *fmain) { fprintf(fmain," #exit frame\n"); fprintf(fmain," set fexit $win.fexit\n"); fprintf(fmain," frame $fexit\n\n"); fprintf(fmain," button $fexit.bexit -text \"Exit\" -command \"destroy $win\"\n"); fprintf(fmain," button $fexit.bparent -text \"Parent\" -command \"window_show $basewin\"\n\n"); fprintf(fmain," pack $fexit.bexit -side left -padx 10\n"); fprintf(fmain," pack $fexit.bparent -side left -padx 10\n\n"); fprintf(fmain," pack $fexit -side top -pady 5\n\n"); } /* write the map as tcl script(to be used with tcldmap) */ int dmap_write_tcl(char *filename, /* i.e. "../data/dmap.dmap.tcl" */ char *system_name) /* i.e. "System Test" */ { { int chain_nr; FILE *fmain; fmain = fopen(filename,"w"); if (fmain==NULL) { ErrorSetF(DMAP_ERROR_UNKNOWN,"dmap_write_dmap","Error creating file %s.",filename); return DMAP_ERROR_UNKNOWN; } fprintf(fmain,"###################\n"); fprintf(fmain,"# tcl dmap script #\n"); fprintf(fmain,"###################\n\n"); fprintf(fmain,"#set working directory\n"); fprintf(fmain," set work_dir [lindex [array get env DMAPTCL] 1]\n"); fprintf(fmain," append work_dir \"/\"\n\n"); fprintf(fmain,"#set tclext library directory\n"); fprintf(fmain," set tclextlib_dir [lindex [array get env TCLEXTTCL] 1]\n"); fprintf(fmain," append tclextlib_dir \"/libs/\"\n\n"); fprintf(fmain,"#set image name\n"); fprintf(fmain," set image_name $work_dir\n"); fprintf(fmain," append image_name \"kloe_logo.gif\"\n\n"); fprintf(fmain,"#load windows library\n"); fprintf(fmain," set windows_lib_name $tclextlib_dir\n"); fprintf(fmain," append windows_lib_name \"windows.tcl\"\n"); fprintf(fmain," source $windows_lib_name\n"); fprintf(fmain," unset windows_lib_name\n\n"); fprintf(fmain,"proc dmap_slot_cal_scroll {win args} {\n"); fprintf(fmain," eval {$win.fchan.ldata yview} $args\n"); fprintf(fmain," eval {$win.fdet.ldata yview} $args\n"); fprintf(fmain," eval {$win.fmodule.ldata yview} $args\n"); fprintf(fmain," eval {$win.fplane.ldata yview} $args\n"); fprintf(fmain," eval {$win.fcolumn.ldata yview} $args\n"); fprintf(fmain," eval {$win.fside.ldata yview} $args\n"); fprintf(fmain,"}; #end dmap_slot_cal_scroll\n\n"); fprintf(fmain,"proc dmap_slot_chamb_scroll {win args} {\n"); fprintf(fmain," eval {$win.fchan.ldata yview} $args\n"); fprintf(fmain," eval {$win.flayer.ldata yview} $args\n"); fprintf(fmain," eval {$win.fwire.ldata yview} $args\n"); fprintf(fmain,"}; #end dmap_slot_chamb_scroll\n\n"); fprintf(fmain,"proc dmap_slot_qcal_scroll {win args} {\n"); fprintf(fmain," eval {$win.fchan.ldata yview} $args\n"); fprintf(fmain," eval {$win.fdet.ldata yview} $args\n"); fprintf(fmain," eval {$win.fmodule.ldata yview} $args\n"); fprintf(fmain,"}; #end dmap_slot_qcal_scroll\n\n"); for (chain_nr=1; chain_nr<=dmap_query_nr_chains(); chain_nr++) { int crate_nr; for (crate_nr=1; crate_nr<dmap_query_nr_crates(chain_nr); crate_nr++) { int board_nr; 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(fmain,"#####################################\n"); fprintf(fmain,"# #\n"); fprintf(fmain,"# Slot %02i@%02i@%02i window #\n",board_nr,crate_nr,chain_nr); fprintf(fmain,"# #\n"); fprintf(fmain,"#####################################\n\n"); switch (btype) { case DMAP_BTYPE_CALTDC: case DMAP_BTYPE_CALADC: { int chan_nr; char acard[16]; fprintf(fmain,"proc dmap_slot_%i_%i_%i {basewin} {\n",chain_nr,crate_nr,board_nr); if (btype==DMAP_BTYPE_CALADC) fprintf(fmain," set btype \"CALADC\"\n\n"); else fprintf(fmain," set btype \"CALTDC\"\n\n"); fprintf(fmain," set win $basewin.wslot%i\n\n",board_nr); dmap_write_tcl_title_slot(fmain,system_name,chain_nr,crate_nr,board_nr); dmap_write_tcl_row(fmain,"chan",6,"Chan"); dmap_write_tcl_row(fmain,"det",8,"Detector"); dmap_write_tcl_row(fmain,"module",8,"Module"); dmap_write_tcl_row(fmain,"plane",8,"Plane"); dmap_write_tcl_row(fmain,"column",8,"Column"); dmap_write_tcl_row(fmain,"side",8,"Side"); fprintf(fmain," ##scrolbar\n"); fprintf(fmain," scrollbar $fdata.sy -orient vertical -command \"dmap_slot_cal_scroll $fdata\"\n\n"); fprintf(fmain," pack $fdata.sy -side left -fill y\n\n"); fprintf(fmain," pack $fdata -side top -padx 5 -pady 5 -fill both -expand 1\n"); dmap_write_tcl_exit(fmain); for (chan_nr=0; chan_nr<dmap_query_nr_chans(chain_nr,crate_nr,board_nr); chan_nr++) { DMAP_CHAN_EL el; if (dmap_get(chain_nr,crate_nr,board_nr,chan_nr,&el)!=DMAP_ERROR_EMPTY) { int amodule,aplane,acolumn,aside; char adetector[16]; amodule = el.data.cal.module; aplane = el.data.cal.plane; acolumn = el.data.cal.column; aside = el.data.cal.side; if (el.data.cal.detector==DMAP_DET_ECAPA) strcpy(adetector,"ECAPA"); else if (el.data.cal.detector==DMAP_DET_ECAPB) strcpy(adetector,"ECAPB"); else strcpy(adetector,"BARR"); fprintf(fmain," $fchan.ldata insert end %i\n",chan_nr); fprintf(fmain," $fdet.ldata insert end \"%s\"\n",adetector); fprintf(fmain," $fmodule.ldata insert end %i\n",amodule); fprintf(fmain," $fplane.ldata insert end %i\n",aplane); fprintf(fmain," $fcolumn.ldata insert end %i\n",acolumn); fprintf(fmain," $fside.ldata insert end %i\n\n",aside); } } fprintf(fmain,"}; #end dmap_slot_cal\n"); } break; case DMAP_BTYPE_CHATDC: { int chan_nr; fprintf(fmain,"proc dmap_slot_%i_%i_%i {basewin} {\n",chain_nr,crate_nr,board_nr); fprintf(fmain," set btype \"CHATDC\"\n\n"); fprintf(fmain," set win $basewin.wslot%i\n\n",board_nr); dmap_write_tcl_title_slot(fmain,system_name,chain_nr,crate_nr,board_nr); dmap_write_tcl_row(fmain,"chan",6,"Chan"); dmap_write_tcl_row(fmain,"layer",8,"Layer"); dmap_write_tcl_row(fmain,"wire",8,"Wire"); fprintf(fmain," ##scrolbar\n"); fprintf(fmain," scrollbar $fdata.sy -orient vertical -command \"dmap_slot_chamb_scroll $fdata\"\n\n"); fprintf(fmain," pack $fdata.sy -side left -fill y\n\n"); fprintf(fmain," pack $fdata -side top -padx 5 -pady 5 -fill both -expand 1\n"); dmap_write_tcl_exit(fmain); for (chan_nr=0; chan_nr<dmap_query_nr_chans(chain_nr,crate_nr,board_nr); chan_nr++) { DMAP_CHAN_EL el; if (dmap_get(chain_nr,crate_nr,board_nr,chan_nr,&el)!=DMAP_ERROR_EMPTY) { int alayer,awire; alayer = el.data.chamber.layer; awire = el.data.chamber.wire; fprintf(fmain," $fchan.ldata insert end %i\n",chan_nr); fprintf(fmain," $flayer.ldata insert end %i\n",alayer); fprintf(fmain," $fwire.ldata insert end %i\n\n",awire); } } fprintf(fmain,"}; #end dmap_slot_chamb\n"); } break; case DMAP_BTYPE_QCALTDC: case DMAP_BTYPE_QCALADC: { int chan_nr; char acard[16]; fprintf(fmain,"proc dmap_slot_%i_%i_%i {basewin} {\n",chain_nr,crate_nr,board_nr); if (btype==DMAP_BTYPE_QCALADC) fprintf(fmain," set btype \"QCALADC\"\n\n"); else fprintf(fmain," set btype \"QCALTDC\"\n\n"); fprintf(fmain," set win $basewin.wslot%i\n\n",board_nr); dmap_write_tcl_title_slot(fmain,system_name,chain_nr,crate_nr,board_nr); dmap_write_tcl_row(fmain,"chan",6,"Chan"); dmap_write_tcl_row(fmain,"det",8,"Detector"); dmap_write_tcl_row(fmain,"module",8,"Module"); fprintf(fmain," ##scrolbar\n"); fprintf(fmain," scrollbar $fdata.sy -orient vertical -command \"dmap_slot_qcal_scroll $fdata\"\n\n"); fprintf(fmain," pack $fdata.sy -side left -fill y\n\n"); fprintf(fmain," pack $fdata -side top -padx 5 -pady 5 -fill both -expand 1\n"); dmap_write_tcl_exit(fmain); for (chan_nr=0; chan_nr<dmap_query_nr_chans(chain_nr,crate_nr,board_nr); chan_nr++) { DMAP_CHAN_EL el; if (dmap_get(chain_nr,crate_nr,board_nr,chan_nr,&el)!=DMAP_ERROR_EMPTY) { int amodule; char adetector[16]; amodule = el.data.qcal.module; if (el.data.qcal.detector==DMAP_DET_QCALA) strcpy(adetector,"QCALA"); else strcpy(adetector,"QCALB"); fprintf(fmain," $fchan.ldata insert end %i\n",chan_nr); fprintf(fmain," $fdet.ldata insert end \"%s\"\n",adetector); fprintf(fmain," $fmodule.ldata insert end %i\n",amodule); } } fprintf(fmain,"}; #end dmap_slot_qcal\n"); } break; } } } fprintf(fmain,"#####################################\n"); fprintf(fmain,"# #\n"); fprintf(fmain,"# Crate %02i@%02i window #\n",crate_nr,chain_nr); fprintf(fmain,"# #\n"); fprintf(fmain,"#####################################\n\n"); fprintf(fmain,"proc dmap_crate_%i_%i {basewin} {\n",chain_nr,crate_nr); fprintf(fmain," set win $basewin.wcrate%i\n\n",crate_nr); fprintf(fmain," if {[window_exist $win]} {\n\treturn 1;\n }\n\n"); fprintf(fmain," toplevel $win\n"); fprintf(fmain," wm title $win \"%s Chain %i Crate %i\"\n\n",system_name,chain_nr,crate_nr); fprintf(fmain," #title frame\n"); fprintf(fmain," set ftitle $win.ftitle\n"); fprintf(fmain," frame $ftitle -relief groove -borderwidth 1\n\n"); fprintf(fmain," label $ftitle.lchain -text \"Chain: %i\"\n",chain_nr); fprintf(fmain," label $ftitle.lcrate -text \"Crate: %i\"\n\n",crate_nr); fprintf(fmain," pack $ftitle.lchain -side top -anchor nw\n"); fprintf(fmain," pack $ftitle.lcrate -side top -anchor nw\n\n"); fprintf(fmain," pack $ftitle -side top -padx 5 -pady 5 -fill x\n\n"); fprintf(fmain," #buttons frame\n"); fprintf(fmain," set fbut $win.fbut\n"); fprintf(fmain," frame $fbut\n\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(fmain," button $fbut.b%i -text \"Slot %i\" -command \"dmap_slot_%i_%i_%i $win\"\n",board_nr,board_nr,chain_nr,crate_nr,board_nr); fprintf(fmain," pack $fbut.b%i -side top -fill x -expand 1\n",board_nr); } fprintf(fmain," pack $fbut -side top -padx 5 -pady 5 -fill x -expand 1\n\n"); dmap_write_tcl_exit(fmain); fprintf(fmain,"}; #end dmap_crate\n\n"); } fprintf(fmain,"#####################################\n"); fprintf(fmain,"# #\n"); fprintf(fmain,"# Chain %02i window #\n",chain_nr); fprintf(fmain,"# #\n"); fprintf(fmain,"#####################################\n\n"); fprintf(fmain,"proc dmap_chain_%i {} {\n",chain_nr); fprintf(fmain," set basewin .\n"); fprintf(fmain," set win .wchain%s\n\n",chain_nr); fprintf(fmain," if {[window_exist $win]} {\n\treturn 1;\n }\n\n"); fprintf(fmain," toplevel $win\n"); fprintf(fmain," wm title $win \"%s Chain %i\"\n\n",system_name,chain_nr); fprintf(fmain," #title frame\n"); fprintf(fmain," set ftitle $win.ftitle\n"); fprintf(fmain," frame $ftitle -relief groove -borderwidth 1\n\n"); fprintf(fmain," label $ftitle.lchain -text \"Chain: %i\"\n",chain_nr); fprintf(fmain," pack $ftitle.lchain -side top -anchor nw\n"); fprintf(fmain," pack $ftitle -side top -padx 5 -pady 5 -fill x\n\n"); fprintf(fmain," #buttons frame\n"); fprintf(fmain," set fbut $win.fbut\n"); fprintf(fmain," frame $fbut\n\n"); for (crate_nr=1; crate_nr<dmap_query_nr_crates(chain_nr); crate_nr++) { fprintf(fmain," button $fbut.b%i -text \"Crate %i\" -command \"dmap_crate_%i_%i $win\"\n\n",crate_nr,crate_nr,chain_nr,crate_nr); fprintf(fmain," pack $fbut.b%i -side top -fill x -expand 1\n",crate_nr); } fprintf(fmain," pack $fbut -side top -padx 5 -pady 5 -fill x -expand 1\n\n"); dmap_write_tcl_exit(fmain); fprintf(fmain,"}; #end dmap_chain\n\n"); } fprintf(fmain,"#####################################\n"); fprintf(fmain,"# #\n"); fprintf(fmain,"# Main window #\n"); fprintf(fmain,"# #\n"); fprintf(fmain,"#####################################\n\n"); fprintf(fmain,"wm title . \"%s\"\n\n",system_name); fprintf(fmain,"#all buttons frame\n"); fprintf(fmain,"set fabut .fabut\n"); fprintf(fmain,"frame $fabut\n\n"); fprintf(fmain,"for {set j 0} {$j<3} {incr j} {\n"); fprintf(fmain," #buttons frame\n"); fprintf(fmain," set fbut $fabut.fbut$j\n"); fprintf(fmain," frame $fbut\n\n"); fprintf(fmain," for {set i 1} {$i<=4} {incr i} {\n"); fprintf(fmain," set k [expr $j*4+$i]\n"); fprintf(fmain," button $fbut.b$i -text \"Chain $k\" -command \"dmap_chain_$k\"\n\n"); fprintf(fmain," pack $fbut.b$i -side top -fill x -expand 1\n"); fprintf(fmain," }; #end for\n\n"); fprintf(fmain," pack $fbut -side left -padx 2 -fill x -expand 1\n"); fprintf(fmain,"}\n\n"); fprintf(fmain,"pack $fabut -side top -padx 5 -pady 5 -fill x -expand 1\n\n"); fprintf(fmain,"#exit frame\n"); fprintf(fmain,"set fexit .fexit\n"); fprintf(fmain,"frame $fexit\n"); fprintf(fmain,"button $fexit.bexit -text \"Exit\" -command \"exit\"\n"); fprintf(fmain,"pack $fexit.bexit\n"); fprintf(fmain,"pack $fexit -side top -pady 5\n"); fclose(fmain); } return DMAP_ERROR_OK; } int main(int argc, char *argv[]) { int res; DMAP_CHAN_EL data; if (argc!=5) { printf("Use: dmap2tcl2 GeoVmeMap dmap filename 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_tcl(argv[3],argv[4])!=DMAP_ERROR_OK) { printf("Error in dmap_write_tcl\n"); return 3; } return 0; }