- A couple of small fixes for memory and initialization problems.
This is to make valgrind happy SKIPPED: psi/amorscan.c psi/el734hp.c psi/psi.c psi/tasscan.c
This commit is contained in:
344
scan.tex
344
scan.tex
@ -1,37 +1,46 @@
|
||||
\subsection{Scan}
|
||||
The first version of the scan command was implemented in Tcl. This prooved
|
||||
to be inefficient. Therefore the main loop for scan was reimplemented in
|
||||
C. A scan is in principle simple. However some complications are due to the
|
||||
fact that data files need to be written. Disk files need to be updated after
|
||||
each scan point. It must be possible to create derivations of the scan
|
||||
command which create other data formats or scan strategies. This
|
||||
configurability is catered for the function pointers in the ScanData
|
||||
structure. Individual functions can be exchanged and thus differently
|
||||
behaving scans created.
|
||||
to be inefficient. Therefore scan was reimplemented in C. Scanning
|
||||
seems to be simple but is not because of the many special cases
|
||||
involved:
|
||||
\begin{itemize}
|
||||
\item Scans must be interruptable and continuable
|
||||
\item Data files need to be written in different formats
|
||||
\item Different output has to be generated at various steps
|
||||
\item In polarization measurements, several points with different
|
||||
magnetic field orientations need to be measured at the same instrument
|
||||
position.
|
||||
\item Users might want to be specify complex scan paths or scan on
|
||||
logarithmic axis.
|
||||
\end{itemize}
|
||||
|
||||
I order to cope with all this, the scan module is modifiable in two
|
||||
ways: For each step of the scanning process there is an overloadable
|
||||
function in the scan data structure. The first way to modify scan
|
||||
behavious thus is to write new functions in C and to assign them to
|
||||
the scan module. In order to support scriptable scans another system
|
||||
is in place: Stored in a string dictioanary there are the names of
|
||||
SICS functions which will be called at each scan operation. The scan
|
||||
functions then invoke the functions specified. In order for this to
|
||||
work, the scan must be configured "newscan". These two schemes exits
|
||||
because the scan module is in transition to a refactoring towards the
|
||||
second scheme.
|
||||
|
||||
The principal setup thus is a central scan object which deals with
|
||||
all the scan management: storing variables, positions, counting
|
||||
results etc. and the configuration of the scan. This is augmented by
|
||||
libraries of scan functions which get invoked at the various
|
||||
steps. There is a standard scan library which is doumented here as well.
|
||||
|
||||
|
||||
Another complication is, that users might want to interrupt scans and
|
||||
restart from the last safe position. For this purpose
|
||||
there exists the recover option.
|
||||
|
||||
Scan also uses a scheme for creating scan data data files from a
|
||||
template. For more information about the template file see the SICS Managers
|
||||
documentation.
|
||||
|
||||
There are currently two schemes for modifying scans: The first works
|
||||
by implementing different scan handling functions and to assign them
|
||||
to the function pointers in the ScanData structure. The second works
|
||||
by defining a macro which will be called at each scan point and which
|
||||
has to return the a list with the counts and monitors collected.
|
||||
|
||||
This has grown to be overly complex. A path for a redesign might
|
||||
follow the idea of configurable functions to be called at various
|
||||
steps in scan processing which is already partly implemented.
|
||||
|
||||
|
||||
|
||||
\subsubsection{Scan Variables}
|
||||
Scan variables are held in this data structure:
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap1}
|
||||
$\langle$scandata {\footnotesize ?}$\rangle\equiv$
|
||||
$\langle$scanvar {\footnotesize ?}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
@ -42,7 +51,116 @@ $\langle$scandata {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ float fStart;@\\
|
||||
\mbox{}\verb@ float fStep;@\\
|
||||
\mbox{}\verb@ float *fData;@\\
|
||||
\mbox{}\verb@ int dataList;@\\
|
||||
\mbox{}\verb@ }VarEntry, *pVarEntry;@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
The VarEntry structure holds the data for each single scan variable.
|
||||
These are its name, its object data structures, the start and step
|
||||
values for the scan and in dataList the positions actually reached
|
||||
during the scan.
|
||||
|
||||
Scan variables have an interface:
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap2}
|
||||
$\langle$scanvarint {\footnotesize ?}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@/**@\\
|
||||
\mbox{}\verb@ * MakeScanVar creates a scan variable. All the necessary checks are @\\
|
||||
\mbox{}\verb@ * performed@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param pSics The interpreter in order to locate the variable.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param pCon A connection object for error reporting@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param name The name of the variable to scan@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param start The start position from which to scan@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param step The step width with which to scan.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@return A pointer to a new scan variable object on success, NULL@\\
|
||||
\mbox{}\verb@ * else@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ pVarEntry MakeScanVar(SicsInterp *pSics, SConnection *pCon, char@\\
|
||||
\mbox{}\verb@ *name, float start, float step);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * InitScanVar clears the list of scan points@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param pvar The scna variable to clear@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ void InitScanVar(pVarEntry pVar);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * DeleteVarEntry deletes a scan variable.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param pData The scan variable entry to delete.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ void DeleteVarEntry(void *pData);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * ScanVarName returns the name of the scan variable@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param pVar The scan variable to query.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@return The name of the scan variable. Do not delete pointer.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ char *ScanVarName(pVarEntry pVar);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * ScanVarStart returns the start value for the scan @\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param pVar The scan variable to query.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@return The start point for the scan.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ float ScanVarStart(pVarEntry pVar);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * ScanVarStep returns the start value for the scan @\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param pVar The scan variable to query.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@return The step width for the scan.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ float ScanVarStep(pVarEntry pVar);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * StartScanVar starts the scan variable to drive to the next@\\
|
||||
\mbox{}\verb@ * position.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param pVar The scan variable to start.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param pCon The connection to report errors to.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param i The position number to drive to@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@return 1 on success, 0 on failure@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ int StartScanVar(pVarEntry pVar, SConnection *pCon, int i);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * AppendScanVar appends a position to the list of positions@\\
|
||||
\mbox{}\verb@ * reached while scanning this variable.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param pVar The scan variable to append to.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param pos The position to append.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ void AppendScanVar(pVarEntry pVar, float pos);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * GetScanVarPos returns a position for an index.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param pVar The scan variable to append to.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param i The position number to retrieve@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@return The positiopn or -99999.99 for an error@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ float GetScanVarPos(pVarEntry pVar, int i);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * CopyScanVar copies the scan positions to the array given.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param pVar The scan variable to copy from@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param fData The array to copy to.@\\
|
||||
\mbox{}\verb@ * @{\tt @}\verb@param np The number of slots in fData.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ void CopyScanVar(pVarEntry pVar, float *fData, int np);@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
\subsubsection{The Scan Object}
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap3}
|
||||
$\langle$scandata {\footnotesize ?}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@/*--------------------------------------------------------------------------*/@\\
|
||||
\mbox{}\verb@ typedef struct {@\\
|
||||
\mbox{}\verb@ int i;@\\
|
||||
@ -55,6 +173,7 @@ $\langle$scandata {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ pObjectDescriptor pDes;@\\
|
||||
\mbox{}\verb@ pICallBack pCall;@\\
|
||||
\mbox{}\verb@ pDynar pScanVar;@\\
|
||||
\mbox{}\verb@ char objectName[132];@\\
|
||||
\mbox{}\verb@ int iScanVar;@\\
|
||||
\mbox{}\verb@ int iNP;@\\
|
||||
\mbox{}\verb@ int iMode;@\\
|
||||
@ -77,6 +196,7 @@ $\langle$scandata {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ int (*CollectScanData)@\\
|
||||
\mbox{}\verb@ (pScanData self,@\\
|
||||
\mbox{}\verb@ int iP);@\\
|
||||
\mbox{}\verb@ pStringDict scanFunctions;@\\
|
||||
\mbox{}\verb@ long lPos;@\\
|
||||
\mbox{}\verb@ int posSoft;@\\
|
||||
\mbox{}\verb@ void *pCounterData;@\\
|
||||
@ -98,11 +218,6 @@ $\langle$scandata {\footnotesize ?}$\rangle\equiv$
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
The VarEntry structure holds the data for each single scan variable.
|
||||
These are its name, its object data structures, the start and step
|
||||
values for the scan and in fData the positions actually reached during
|
||||
the scan.
|
||||
|
||||
The CountEntry structure holds the entries for one counting
|
||||
operations. These are the lCounts collected, up to 10 monitors and the
|
||||
time needed for counting. This is the time read from the counter box.
|
||||
@ -158,6 +273,8 @@ This function together with ScanDrive and the data writing functions allow for
|
||||
\item[CollectScanData] reads all the scan data into the scan's data
|
||||
structures after any scan point. Overload this if a different storage
|
||||
scheme is required especiallay for polarising scans.
|
||||
\item[scanFunctions] A string dictionary holding the names of the
|
||||
configured functions for the various steps of the scan.
|
||||
\item[posSoft] is a flag which is true if scan variable are stored with
|
||||
soft position, i.e. with zeropoints applied.
|
||||
\item[pCounterData] is a pointer to a counter structure. This defines the
|
||||
@ -184,14 +301,14 @@ The functional interface to the scan module includes the following
|
||||
functions:
|
||||
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap2}
|
||||
\begin{minipage}{\linewidth} \label{scrap4}
|
||||
$\langle$scaninter {\footnotesize ?}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@/*------------------------- live & death ----------------------------------*/@\\
|
||||
\mbox{}\verb@ pScanData CreateScanObject(char *pRecover, char *pHeader, @\\
|
||||
\mbox{}\verb@ pCounter pCount);@\\
|
||||
\mbox{}\verb@ pCounter pCount, char *objName);@\\
|
||||
\mbox{}\verb@ void DeleteScanObject(void *self);@\\
|
||||
\mbox{}\verb@/*-------------------------------------------------------------------------*/@\\
|
||||
\mbox{}\verb@ int AddScanVar(pScanData self, SicsInterp *pSics, SConnection *pCon, @\\
|
||||
@ -320,8 +437,125 @@ for the scan object.
|
||||
\item[ScanWrapper] is the SICS interpreter object function for
|
||||
interacting with the scan module.
|
||||
\end{description}
|
||||
|
||||
\subsubsection{The Standard Scan Library}
|
||||
The following functions constitute the standard scan library. Please
|
||||
note that the scan file data format is driven by a template. The
|
||||
format of this template is documented in the SICS managers
|
||||
documentation.
|
||||
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap3}
|
||||
\begin{minipage}{\linewidth} \label{scrap5}
|
||||
$\langle$stdscan {\footnotesize ?}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * write the header of the scan file@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ int WriteHeader(pScanData self);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * WriteScanPoints is called for each point to write the scan data@\\
|
||||
\mbox{}\verb@ * to screen and to file.@\\
|
||||
\mbox{}\verb@ */ @\\
|
||||
\mbox{}\verb@ int WriteScanPoints(pScanData self, int iPoint);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * Called before the scan to prepare. The default implementation@\\
|
||||
\mbox{}\verb@ * checks if all scan positions are available and configures the@\\
|
||||
\mbox{}\verb@ * counter.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ int PrepareScan(pScanData self);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * second version of PrepareScan which does not check scan limits@\\
|
||||
\mbox{}\verb@ */ @\\
|
||||
\mbox{}\verb@ int NonCheckPrepare(pScanData self);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * ScanDrive handles driving to the scan point iPoint.@\\
|
||||
\mbox{}\verb@ */ @\\
|
||||
\mbox{}\verb@ int ScanDrive(pScanData self, int iPoint);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * ScanCount is called at each scan step to do the counting.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ int ScanCount(pScanData self, int iPoint);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * CollectScanData stores the scans count results into @\\
|
||||
\mbox{}\verb@ * the scan data structure and prints the information about the@\\
|
||||
\mbox{}\verb@ * scan progress.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ int CollectScanData(pScanData self, int iPoint);@\\
|
||||
\mbox{}\verb@ int CollectScanDataJochen(pScanData self, int iPoint);@\\
|
||||
\mbox{}\verb@/*===================================================================*/@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * Script invocation for writing the scan header.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ int ScriptWriteHeader(pScanData self); @\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * Script writing each scan point@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ int ScriptWriteScanPoints(pScanData self, int iPoint);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * Script preparation of the scan.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ int ScriptPrepareScan(pScanData self);@\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * Script driving to a scan point@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ int ScriptScanDrive(pScanData self, int iPoint); @\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * Script counting a scan point@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ int ScriptScanCount(pScanData self, int iPoint); @\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * Script collecting scan data for each scan point@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ int ScriptScanCollect(pScanData self, int iPoint); @\\
|
||||
\mbox{}\verb@ /**@\\
|
||||
\mbox{}\verb@ * ConfigureScript assigns the script invocation functions for@\\
|
||||
\mbox{}\verb@ * scan@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ void ConfigureScript(pScanData self);@\\
|
||||
\mbox{}\verb@/*=====================================================================*/@\\
|
||||
\mbox{}\verb@ int StandardScanWrapper(SConnection *pCon, SicsInterp *pSics, void *pData,@\\
|
||||
\mbox{}\verb@ int argc, char *argv[]);@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap6}
|
||||
\verb@"scanvar.h"@ {\footnotesize ? }$\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@/*-----------------------------------------------------------------------@\\
|
||||
\mbox{}\verb@ Header file for the SICS ScanVariable. This is a support module for@\\
|
||||
\mbox{}\verb@ the SICS scan system.@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ Evolved during refactoring scan in November 2004@\\
|
||||
\mbox{}\verb@ @\\
|
||||
\mbox{}\verb@ copyright: see file COPYRIGHT@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ Mark Koennecke, November 2004@\\
|
||||
\mbox{}\verb@-------------------------------------------------------------------------*/@\\
|
||||
\mbox{}\verb@#ifndef SICSSCANVAR@\\
|
||||
\mbox{}\verb@#define SICSSCANVAR@\\
|
||||
\mbox{}\verb@#include "sics.h"@\\
|
||||
\mbox{}\verb@@$\langle$scanvar {\footnotesize ?}$\rangle$\verb@@\\
|
||||
\mbox{}\verb@/*---------------------------------------------------------------------*/@\\
|
||||
\mbox{}\verb@@$\langle$scanvarint {\footnotesize ?}$\rangle$\verb@@\\
|
||||
\mbox{}\verb@#endif@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-2ex}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap7}
|
||||
\verb@"scan.h"@ {\footnotesize ? }$\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
@ -333,6 +567,8 @@ interacting with the scan module.
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ Mark Koennecke, October 1997@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ Extracted scan variable: Mark Koennecke, November 2004@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ copyright: see copyright.h@\\
|
||||
\mbox{}\verb@-----------------------------------------------------------------------------*/@\\
|
||||
\mbox{}\verb@#ifndef SICSSCAN1@\\
|
||||
@ -348,7 +584,7 @@ interacting with the scan module.
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap4}
|
||||
\begin{minipage}{\linewidth} \label{scrap8}
|
||||
\verb@"scan.i"@ {\footnotesize ? }$\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
@ -360,7 +596,45 @@ interacting with the scan module.
|
||||
\mbox{}\verb@ Mark Koennecke, October 1997@\\
|
||||
\mbox{}\verb@----------------------------------------------------------------------------*/@\\
|
||||
\mbox{}\verb@#include "sdynar.h"@\\
|
||||
\mbox{}\verb@#include "scanvar.h"@\\
|
||||
\mbox{}\verb@#include "stringdict.h"@\\
|
||||
\mbox{}\verb@@$\langle$scandata {\footnotesize ?}$\rangle$\verb@@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@/*@\\
|
||||
\mbox{}\verb@ internal helper functions for scan implementations@\\
|
||||
\mbox{}\verb@*/@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@/*@\\
|
||||
\mbox{}\verb@ CollectCounterData collects all the data from the configured counter@\\
|
||||
\mbox{}\verb@ ans stows it away@\\
|
||||
\mbox{}\verb@*/@\\
|
||||
\mbox{}\verb@CountEntry CollectCounterData(pScanData self);@\\
|
||||
\mbox{}\verb@void InitCountEntry(pCountEntry pCount);@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-2ex}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap9}
|
||||
\verb@"stdscan.h"@ {\footnotesize ? }$\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@/*--------------------------------------------------------------------------@\\
|
||||
\mbox{}\verb@ S T A N D A R D S C A N@\\
|
||||
\mbox{}\verb@ @\\
|
||||
\mbox{}\verb@ This is a library of scan functions for the SICS standard scan. @\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ copyright: see copyright.h@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ Extracted from scan.c: Mark Koennecke, November 2004 @\\
|
||||
\mbox{}\verb@----------------------------------------------------------------------------*/@\\
|
||||
\mbox{}\verb@#ifndef SICSSTDSCAN@\\
|
||||
\mbox{}\verb@#define SICSSTDSCAN@\\
|
||||
\mbox{}\verb@@$\langle$stdscan {\footnotesize ?}$\rangle$\verb@@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@#endif@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-2ex}
|
||||
|
Reference in New Issue
Block a user