diff --git a/tcl/makehmskel b/tcl/makehmskel new file mode 100755 index 00000000..5947adae --- /dev/null +++ b/tcl/makehmskel @@ -0,0 +1,252 @@ +#!/usr/bin/tclsh +#----------------------------------------------------------------------- +# script which creates the skeleton of a histogram memory driver +# +# Mark Koennecke, October 2005 +#----------------------------------------------------------------------- + +if { [llength $argv] < 2} { + puts stdout "Usage:\n\tmakehmskel prefix datastruct\n" + exit 1 +} + +set prefix [lindex $argv 0] +set ds [lindex $argv 1] + +#------------------ preamble +puts stdout "#include " +puts stdout "#include " +puts stdout "#include " +puts stdout "#include " +puts stdout "#include " +puts stdout "#include " +puts stdout "" +puts stdout "typedef struct { }*${ds};" +puts stdout "" +#-------------------Configure +puts stdout "/*-------------------------------------------------------------------" +puts stdout " Configures the HM from the options in pOpt and the HM data structure" +puts stdout " Returns 1 on success, 0 on failure" +puts stdout "---------------------------------------------------------------------*/" +puts stdout "static int ${prefix}Configure(pHistDriver self, SConnection *pCon," +puts stdout " pStringDict pOpt, SicsInterp *pSics){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return 1;" +puts stdout "}" + +#----------------Start +puts stdout "/*--------------------------------------------------------------------" +puts stdout " Start histogramming, Returns HWFault on failure, 1 on success" +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static int ${prefix}Start(pHistDriver self,SConnection *pCon){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return 1;" +puts stdout "}" + +#--------------- Halt +puts stdout "/*--------------------------------------------------------------------" +puts stdout " Stops histogramming, Returns HWFault on failure, 1 on success" +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static int ${prefix}Halt(pHistDriver self){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return 1;" +puts stdout "}" + +#--------------- Status +puts stdout "/*--------------------------------------------------------------------" +puts stdout " Checks histogramming status, Returns HWFault on failure, " +puts stdout " HWIdle when finished, HWBusy when counting " +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static int ${prefix}CountStatus(pHistDriver self,SConnection *pCon){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return HWIdle;" +puts stdout "}" + + +#------------ GetError +puts stdout "/*--------------------------------------------------------------------" +puts stdout " Get info on error after last HWFault, returns 1 always." +puts stdout " Puts an int error code into *code and errLen chars of" +puts stdout " error description into error" +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static int ${prefix}GetError(pHistDriver self,int *code, " +puts stdout " char *error, int errLen){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return 1;" +puts stdout "}" + + +#-------- FixIt +puts stdout "/*--------------------------------------------------------------------" +puts stdout " Try to fix the HM error in code. Returns COREDO when the last" +puts stdout " operation needs to be redone, COTERM when the error cannot be" +puts stdout " fixed." +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static int ${prefix}FixIt(pHistDriver self,int code){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return COTERM;" +puts stdout "}" + + +#------------- GetData +puts stdout "/*--------------------------------------------------------------------" +puts stdout " GetData reads updates the internal cache of monitor values" +puts stdout " from the hardware, Returns 1 or HWFault" +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static int ${prefix}GetData(pHistDriver self,SConnection *pCon){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return 1;" +puts stdout "}" + +#------------- GetMonitor +puts stdout "/*--------------------------------------------------------------------" +puts stdout " GetMonitor reads the monitor value i. Returns either the monitor " +puts stdout " value or -9999 if no such monitor exists or an error occurred" +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static long ${prefix}GetMonitor(pHistDriver self,int i, SConnection *pCon){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return -9999;" +puts stdout "}" + +#------------- GetTime +puts stdout "/*--------------------------------------------------------------------" +puts stdout " GetTime reads the total counting time. Returns either the " +puts stdout " value or -9999.99 if no such value exists or an error occurred" +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static float ${prefix}GetTime(pHistDriver self,SConnection *pCon){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return -9999.99;" +puts stdout "}" + + +#--------------- Pause +puts stdout "/*--------------------------------------------------------------------" +puts stdout " Pause histogramming, Returns HWFault on failure, 1 on success" +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static int ${prefix}Pause(pHistDriver self,SConnection *pCon){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return 1;" +puts stdout "}" + +#--------------- Continue +puts stdout "/*--------------------------------------------------------------------" +puts stdout " Continue histogramming, Returns HWFault on failure, 1 on success" +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static int ${prefix}Continue(pHistDriver self,SConnection *pCon){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return 1;" +puts stdout "}" + + +#--------------- Free +puts stdout "/*--------------------------------------------------------------------" +puts stdout " Free the data associated with the private data structure of the driver" +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static int ${prefix}Free(pHistDriver self){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout "}" + +#------------ SetHistogram +puts stdout "/*--------------------------------------------------------------------" +puts stdout " Set The HM data or a subset of it. Returns HWFault or 1" +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static int ${prefix}SetHistogram(pHistDriver self," +puts stdout " SConnection *pCon," +puts stdout " int i, int iStart, int iEnd, HistInt *pData){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return 1;" +puts stdout "}" + + +#--------------- Preset +puts stdout "/*--------------------------------------------------------------------" +puts stdout " Set HM to a preset value, Returns HWFault on failure, 1 on success" +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static int ${prefix}Preset(pHistDriver self,SConnection *pCon," +puts stdout " HistInt value){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return 1;" +puts stdout "}" + +#------------ GetHistogram +puts stdout "/*--------------------------------------------------------------------" +puts stdout " get The HM data or a subset of it. Returns HWFault or 1" +puts stdout "----------------------------------------------------------------------*/" +puts stdout "static int ${prefix}GetHistogram(pHistDriver self," +puts stdout " SConnection *pCon," +puts stdout " int i, int iStart, int iEnd, HistInt *pData){" +puts stdout " $ds pPriv = NULL;" +puts stdout " " +puts stdout " pPriv =($ds)self->pPriv;" +puts stdout " return 1;" +puts stdout "}" + +#-------------- MkeHM +puts stdout "/*--------------------------------------------------------------------" +puts stdout " Make the HMDriver, returns a driver or NULL on failure" +puts stdout "----------------------------------------------------------------------*/" +puts stdout "pHistDriver Make${prefix}HM(pStringDict pOption){" +puts stdout " pHistDriver pNew = NULL;" +puts stdout " $ds pPriv = NULL;" +puts stdout "" +puts stdout " /* create the general driver */" +puts stdout " pNew = CreateHistDriver(pOption);" +puts stdout " if(!pNew){" +puts stdout " return NULL;" +puts stdout " }" +puts stdout "" +puts stdout " /*Create private data structure*/" +puts stdout " pPriv = NULL; " +puts stdout " pNew->pPriv = pPriv;" +puts stdout " " +puts stdout " /* add our options */" +puts stdout " StringDictAddPair(pOption,\"example\",\"example\");" +puts stdout "" +puts stdout " /* configure all those functions */" +puts stdout " pNew->Configure = ${prefix}Configure;" +puts stdout " pNew->Start = ${prefix}Start;" +puts stdout " pNew->Halt = ${prefix}Halt;" +puts stdout " pNew->GetCountStatus = ${prefix}CountStatus;" +puts stdout " pNew->GetError = ${prefix}GetError;" +puts stdout " pNew->TryAndFixIt = ${prefix}FixIt;" +puts stdout " pNew->GetData = ${prefix}GetData;" +puts stdout " pNew->GetHistogram = ${prefix}GetHistogram;" +puts stdout " pNew->SetHistogram = ${prefix}SetHistogram;" +puts stdout " pNew->GetMonitor = ${prefix}GetMonitor;" +puts stdout " pNew->GetTime = ${prefix}GetTime;" +puts stdout " pNew->Preset = ${prefix}Preset; " +puts stdout " pNew->FreePrivate = ${prefix}Free;" +puts stdout " pNew->Pause = ${prefix}Pause;" +puts stdout " pNew->Continue = ${prefix}Continue;" +puts stdout "" +puts stdout " return pNew;" +puts stdout "}" +