/************************************************/ /* */ /* File : dmap2tcl.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) { fprintf(fmain," if {[window_exist $win]} {\n\treturn 1;\n }\n\n"); fprintf(fmain," toplevel $win\n"); fprintf(fmain," wm title $win \"$title Chain $chain_nr Crate $crate_nr Slot $slot_nr Type $btype\"\n\n"); 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: $chain_nr\"\n"); fprintf(fmain," label $ftitle.lcrate -text \"Crate: $crate_nr\"\n"); fprintf(fmain," label $ftitle.lslot -text \"Slot: $slot_nr\"\n"); 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,"set dmap_title \"%s\"\n\n",system_name); fprintf(fmain,"set dmap_data {\n"); for (chain_nr=1; chain_nr<=dmap_query_nr_chains(); chain_nr++) { int crate_nr; fprintf(fmain,"{\n"); for (crate_nr=1; crate_nr<dmap_query_nr_crates(chain_nr); crate_nr++) { int board_nr; fprintf(fmain,"{\n"); 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); fprintf(fmain,"{"); if (btype!=DMAP_ERROR_EMPTY) { switch (btype) { case DMAP_BTYPE_CALTDC: case DMAP_BTYPE_CALADC: { int chan_nr; char acard[16]; fprintf(fmain,"cal "); if (btype==DMAP_BTYPE_CALADC) fprintf(fmain,"CALADC"); else fprintf(fmain,"CALTDC"); fprintf(fmain," {"); for (chan_nr=0; chan_nr<dmap_query_nr_chans(chain_nr,crate_nr,board_nr); chan_nr++) { DMAP_CHAN_EL el; fprintf(fmain,"{"); 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,"%s %i %i %i %i", adetector,amodule,aplane,acolumn,aside); } fprintf(fmain,"} "); } fprintf(fmain,"} "); } break; case DMAP_BTYPE_CHATDC: { int chan_nr; fprintf(fmain,"chamb {"); for (chan_nr=0; chan_nr<dmap_query_nr_chans(chain_nr,crate_nr,board_nr); chan_nr++) { DMAP_CHAN_EL el; fprintf(fmain,"{"); 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,"%i %i", alayer,awire); } fprintf(fmain,"} "); } fprintf(fmain,"} "); } break; case DMAP_BTYPE_QCALTDC: case DMAP_BTYPE_QCALADC: { int chan_nr; char acard[16]; fprintf(fmain,"qcal "); if (btype==DMAP_BTYPE_QCALADC) fprintf(fmain,"QCALADC"); else fprintf(fmain,"QCALTDC"); fprintf(fmain," {"); for (chan_nr=0; chan_nr<dmap_query_nr_chans(chain_nr,crate_nr,board_nr); chan_nr++) { DMAP_CHAN_EL el; fprintf(fmain,"{"); 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,"%s %i", adetector,amodule); } fprintf(fmain,"} "); } fprintf(fmain,"} "); } break; } } fprintf(fmain,"}\n"); } fprintf(fmain,"}\n"); } fprintf(fmain,"}\n"); } fprintf(fmain,"}\n\n"); fprintf(fmain,"#####################################\n"); fprintf(fmain,"# #\n"); fprintf(fmain,"# Slot window #\n"); fprintf(fmain,"# #\n"); fprintf(fmain,"#####################################\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_cal {basewin chain_nr crate_nr slot_nr title slot_data} {\n"); fprintf(fmain," set btype [lindex $slot_data 1]\n\n"); fprintf(fmain," set win $basewin.wslot$slot_nr\n\n"); dmap_write_tcl_title_slot(fmain); 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); fprintf(fmain," set i 0\n"); fprintf(fmain," foreach {chan_data} [lindex $slot_data 2] {\n"); fprintf(fmain," if {$chan_data!=\"\"} {\n"); fprintf(fmain," $fchan.ldata insert end $i\n"); fprintf(fmain," $fdet.ldata insert end [lindex $chan_data 0]\n"); fprintf(fmain," $fmodule.ldata insert end [lindex $chan_data 1]\n"); fprintf(fmain," $fplane.ldata insert end [lindex $chan_data 2]\n"); fprintf(fmain," $fcolumn.ldata insert end [lindex $chan_data 3]\n"); fprintf(fmain," $fside.ldata insert end [lindex $chan_data 4]\n"); fprintf(fmain," }\n\n"); fprintf(fmain," incr i\n"); fprintf(fmain," }; #end for\n"); fprintf(fmain,"}; #end dmap_slot_cal\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_chamb {basewin chain_nr crate_nr slot_nr title slot_data} {\n"); fprintf(fmain," set btype \"CHATDC\"\n\n"); fprintf(fmain," set win $basewin.wslot$slot_nr\n\n"); fprintf(fmain," if {[window_exist $win]} {\n\treturn 1;\n}\n\n"); fprintf(fmain," toplevel $win\n"); fprintf(fmain," wm title $win \"$title Chain $chain_nr Crate $crate_nr Slot $slot_nr Type $btype\"\n\n"); dmap_write_tcl_title_slot(fmain); 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); fprintf(fmain," set i 0\n"); fprintf(fmain," foreach {chan_data} [lindex $slot_data 2] {\n"); fprintf(fmain," if {$chan_data!=\"\"} {\n"); fprintf(fmain," $fchan.ldata insert end $i\n"); fprintf(fmain," $flayer.ldata insert end [lindex $chan_data 0]\n"); fprintf(fmain," $fwire.ldata insert end [lindex $chan_data 1]\n"); fprintf(fmain," }\n\n"); fprintf(fmain," incr i\n"); fprintf(fmain," }; #end for\n"); fprintf(fmain,"}; #end dmap_slot_chamb\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"); fprintf(fmain,"proc dmap_slot_qcal {basewin chain_nr crate_nr slot_nr title slot_data} {\n"); fprintf(fmain," set btype [lindex $slot_data 1]\n\n"); fprintf(fmain," set win $basewin.wslot$slot_nr\n\n"); dmap_write_tcl_title_slot(fmain); 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); fprintf(fmain," set i 0\n"); fprintf(fmain," foreach {chan_data} [lindex $slot_data 2] {\n"); fprintf(fmain," if {$chan_data!=\"\"} {\n"); fprintf(fmain," $fchan.ldata insert end $i\n"); fprintf(fmain," $fdet.ldata insert end [lindex $chan_data 0]\n"); fprintf(fmain," $fmodule.ldata insert end [lindex $chan_data 1]\n"); fprintf(fmain," }\n\n"); fprintf(fmain," incr i\n"); fprintf(fmain," }; #end for\n"); fprintf(fmain,"}; #end dmap_slot_qcal\n"); fprintf(fmain,"#####################################\n"); fprintf(fmain,"# #\n"); fprintf(fmain,"# Crate window #\n"); fprintf(fmain,"# #\n"); fprintf(fmain,"#####################################\n\n"); fprintf(fmain,"proc dmap_crate {basewin chain_nr crate_nr title crate_data} {\n"); fprintf(fmain," set win $basewin.wcrate$crate_nr\n\n"); fprintf(fmain," if {[window_exist $win]} {\n\treturn 1;\n }\n\n"); fprintf(fmain," toplevel $win\n"); fprintf(fmain," wm title $win \"$title Chain $chain_nr Crate $crate_nr\"\n\n"); 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: $chain_nr\"\n"); fprintf(fmain," label $ftitle.lcrate -text \"Crate: $crate_nr\"\n\n"); 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"); fprintf(fmain," set i 0\n"); fprintf(fmain," foreach {slot_data} $crate_data {\n"); fprintf(fmain," if {$slot_data!=\"\"} {\n"); fprintf(fmain," button $fbut.b$i -text \"Slot $i\" -command \"dmap_slot_[lindex $slot_data 0] $win $chain_nr $crate_nr $i \\\"$title\\\" \\\"$slot_data\\\"\"\n"); fprintf(fmain," pack $fbut.b$i -side top -fill x -expand 1\n"); fprintf(fmain," }\n\n"); fprintf(fmain," incr i\n"); fprintf(fmain," }; #end for\n\n"); 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 window #\n"); fprintf(fmain,"# #\n"); fprintf(fmain,"#####################################\n\n"); fprintf(fmain,"proc dmap_chain {chain_nr title chain_data} {\n"); fprintf(fmain," set basewin .\n"); fprintf(fmain," set win .wchain$chain_nr\n\n"); fprintf(fmain," if {[window_exist $win]} {\n\treturn 1;\n }\n\n"); fprintf(fmain," toplevel $win\n"); fprintf(fmain," wm title $win \"$title Chain $chain_nr\"\n\n"); 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: $chain_nr\"\n"); 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"); fprintf(fmain," set i 1\n"); fprintf(fmain," foreach {crate_data} $chain_data {\n"); fprintf(fmain," button $fbut.b$i -text \"Crate $i\" -command \"dmap_crate $win $chain_nr $i \\\"$title\\\" \\\"$crate_data\\\"\"\n\n"); fprintf(fmain," pack $fbut.b$i -side top -fill x -expand 1\n"); fprintf(fmain," incr i\n"); fprintf(fmain," }; #end for\n\n"); 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 . $dmap_title\n\n"); 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," set chain_data [lindex $dmap_data [expr $k-1]]\n"); fprintf(fmain," button $fbut.b$i -text \"Chain $k\" -command \"dmap_chain $k \\\"$dmap_title\\\" \\\"$chain_data\\\"\"\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: dmap2tcl 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; }