/**
* VTF3 - Vampir Trace Format handling 3.
*
* Copyright (c) 1999-2004 TU Dresden
* Center for High Performance Computing (ZHR)
*
* @name vtf3showtfwin.c
*
* @version $Revision: 1.2 $
* $Date: 2005/10/22 00:57:03 $
* $Author: sameer $
*
* @author Stephan Seidl (ZHR)
*/
/*****************************************************************************/
#include
#include
#include
/* This is for `size_t'. */
#include
#include "vtf3.h"
/*****************************************************************************/
/* Note for VAMPIR, VPTMERGE and other applications.
On memory allocation failures, VTF3 executes a statement
sequence, which is defined by the following macro.
After that, VTF3 does unconditionally exit with 127. */
#if (1)
#ifndef VTF3_NOMEM_GOOD_BYE_INFO
#define VTF3_NOMEM_GOOD_BYE_INFO \
{ \
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): " \
"No more memory\n"); \
(void) fflush (stderr); \
}
#endif
#endif
/* Another example could be the following one, but, of course,
suppress `-Wnested-externs' warning types when using the GCC. */
#if (0)
#ifndef VTF3_NOMEM_GOOD_BYE_INFO
#define VTF3_NOMEM_GOOD_BYE_INFO \
{ \
extern void vampir_nomem_good_bye_info (void); \
(void) vampir_nomem_good_bye_info (); \
}
#endif
#endif
/*****************************************************************************/
static const char rcsid[]
= "@(#) $Id: vtf3showtfwin.c,v 1.2 2005/10/22 00:57:03 sameer Exp $";
/*****************************************************************************/
/* The handler prototypes. */
VTF3_DCL_CLSTRREGVAL (static, AppendClstrregval );
VTF3_DCL_COMMENT (static, AppendComment );
VTF3_DCL_CPUREGVAL (static, AppendCpuregval );
VTF3_DCL_DEFACT (static, AppendDefact );
VTF3_DCL_DEFACT_OBSOL (static, AppendDefact_obsol );
VTF3_DCL_DEFCLKPERIOD (static, AppendDefclkperiod );
VTF3_DCL_DEFCLSTR (static, AppendDefclstr );
VTF3_DCL_DEFCLSTRREG (static, AppendDefclstrreg );
VTF3_DCL_DEFCLSTRREGCLASS (static, AppendDefclstrregclass);
VTF3_DCL_DEFCOMMUNICATOR (static, AppendDefcommunicator );
VTF3_DCL_DEFCPUGRP (static, AppendDefcpugrp );
VTF3_DCL_DEFCPUNAME (static, AppendDefcpuname );
VTF3_DCL_DEFCPUREG (static, AppendDefcpureg );
VTF3_DCL_DEFCPUREGCLASS (static, AppendDefcpuregclass );
VTF3_DCL_DEFCREATOR (static, AppendDefcreator );
VTF3_DCL_DEFGLOBALOP (static, AppendDefglobalop );
VTF3_DCL_DEFIOFILE (static, AppendDefiofile );
VTF3_DCL_DEFKPARREG (static, AppendDefkparreg );
VTF3_DCL_DEFMSGNAME (static, AppendDefmsgname );
VTF3_DCL_DEFOPENMPNAME (static, AppendDefopenmpname );
VTF3_DCL_DEFOPENMPTYPE (static, AppendDefopenmptype );
VTF3_DCL_DEFPATTERN (static, AppendDefpattern );
VTF3_DCL_DEFPATTERNSHAPE (static, AppendDefpatternshape );
VTF3_DCL_DEFREDFUNC_OBSOL (static, AppendDefredfunc_obsol);
VTF3_DCL_DEFSAMP (static, AppendDefsamp );
VTF3_DCL_DEFSAMPCLASS (static, AppendDefsampclass );
VTF3_DCL_DEFSCL (static, AppendDefscl );
VTF3_DCL_DEFSCLFILE (static, AppendDefsclfile );
VTF3_DCL_DEFSTATE (static, AppendDefstate );
VTF3_DCL_DEFSTATE_OBSOL (static, AppendDefstate_obsol );
VTF3_DCL_DEFSYSCPUNAMES (static, AppendDefsyscpunames );
VTF3_DCL_DEFSYSCPUNUMS (static, AppendDefsyscpunums );
VTF3_DCL_DEFTHREADNUMS (static, AppendDefthreadnums );
VTF3_DCL_DEFTIMEOFFSET (static, AppendDeftimeoffset );
VTF3_DCL_DEFUNMERGED (static, AppendDefunmerged );
VTF3_DCL_DEFVERSION (static, AppendDefversion );
VTF3_DCL_DOWNTO (static, AppendDownto );
VTF3_DCL_EXCHANGE (static, AppendExchange );
VTF3_DCL_EXCHANGE_OBSOL (static, AppendExchange_obsol );
VTF3_DCL_FILEIOBEGIN (static, AppendFileiobegin );
VTF3_DCL_FILEIOEND (static, AppendFileioend );
VTF3_DCL_GLOBALOP (static, AppendGlobalop );
VTF3_DCL_KPARREGBARSUM (static, AppendKparregbarsum );
VTF3_DCL_KPARREGBEGIN (static, AppendKparregbegin );
VTF3_DCL_KPARREGEND (static, AppendKparregend );
VTF3_DCL_MUTEXACQUIRE (static, AppendMutexacquire );
VTF3_DCL_MUTEXRELEASE (static, AppendMutexrelease );
VTF3_DCL_OPENMPENTER (static, AppendOpenmpenter );
VTF3_DCL_OPENMPLEAVE (static, AppendOpenmpleave );
VTF3_DCL_PARREG (static, AppendParreg );
VTF3_DCL_PATTERN (static, AppendPattern );
VTF3_DCL_RECVMSG (static, AppendRecvmsg );
VTF3_DCL_SAMP (static, AppendSamp );
VTF3_DCL_SENDMSG (static, AppendSendmsg );
VTF3_DCL_SRCINFO_OBSOL (static, AppendSrcinfo_obsol );
VTF3_DCL_UNRECOGNIZABLE (static, AppendUnrecognizable );
VTF3_DCL_UPFROM (static, AppendUpfrom );
VTF3_DCL_UPTO (static, AppendUpto );
/*****************************************************************************/
/* The handler communication control block. */
typedef struct {
void *fcboutmemory;
void *fcbin;
char *outputbufferpos;
char *outputbufferbeyond;
char **activitynamevector1;
char **activitynamevector2;
int *activitytokenvector1;
int *activitytokenvector2;
int activityvectordim1;
int activityvectordim2;
int numactivities1;
int numactivities2;
double timestampmax;
double timestampminin;
double timestampmaxin;
double timestampminout;
double timestampmaxout;
} ccb_t;
/*****************************************************************************/
char *
VTF3_ShowTraceFileWindow (const char *inputfilename, double *timestampmin,
double *timestampmax, char *outputbuffer,
size_t outputbuffersize)
{
static const unsigned char stdasciiheader [] = VTF3_HEADER_STD_ASCII;
ccb_t ccb;
int nrectypes, *recordtypes, i, numchars;
VTF3_handler_t *handlers;
void **firsthandlerargs;
char *p1, *p2;
char headbuf [sizeof (stdasciiheader) / sizeof (stdasciiheader[0]) +
sizeof (rcsid ) / sizeof (rcsid[0] ) +
100];
size_t l1, bytesread;
const char *constp1, *constp2;
(void) memset (&ccb, 0, sizeof (ccb));
(void) VTF3_InitTables ();
ccb.fcboutmemory = VTF3_OpenMemoryOutput (VTF3_FILEFORMAT_STD_ASCII);
if (ccb.fcboutmemory == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
nrectypes = VTF3_GetRecTypeArrayDim ();
recordtypes = (int *) malloc ((size_t) nrectypes * sizeof (int));
if (recordtypes == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
handlers = (VTF3_handler_t *) malloc ((size_t) nrectypes *
sizeof (VTF3_handler_t));
if (handlers == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
firsthandlerargs = (void **) malloc ((size_t) nrectypes * sizeof (void *));
if (firsthandlerargs == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
(void) VTF3_GetRecTypeArray (recordtypes);
for (i = 0; i < nrectypes; i++) {
*(handlers + i) = 0;
if (*(recordtypes + i) == VTF3_RECTYPE_CLSTRREGVAL)
*(handlers + i) = (VTF3_handler_t) AppendClstrregval;
if (*(recordtypes + i) == VTF3_RECTYPE_COMMENT)
*(handlers + i) = (VTF3_handler_t) AppendComment;
if (*(recordtypes + i) == VTF3_RECTYPE_CPUREGVAL)
*(handlers + i) = (VTF3_handler_t) AppendCpuregval;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFACT)
*(handlers + i) = (VTF3_handler_t) AppendDefact;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFACT_OBSOL)
*(handlers + i) = (VTF3_handler_t) AppendDefact_obsol;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFCLKPERIOD)
*(handlers + i) = (VTF3_handler_t) AppendDefclkperiod;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFCLSTR)
*(handlers + i) = (VTF3_handler_t) AppendDefclstr;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFCLSTRREG)
*(handlers + i) = (VTF3_handler_t) AppendDefclstrreg;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFCLSTRREGCLASS)
*(handlers + i) = (VTF3_handler_t) AppendDefclstrregclass;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFCOMMUNICATOR)
*(handlers + i) = (VTF3_handler_t) AppendDefcommunicator;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFCPUGRP)
*(handlers + i) = (VTF3_handler_t) AppendDefcpugrp;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFCPUNAME)
*(handlers + i) = (VTF3_handler_t) AppendDefcpuname;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFCPUREG)
*(handlers + i) = (VTF3_handler_t) AppendDefcpureg;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFCPUREGCLASS)
*(handlers + i) = (VTF3_handler_t) AppendDefcpuregclass;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFCREATOR)
*(handlers + i) = (VTF3_handler_t) AppendDefcreator;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFGLOBALOP)
*(handlers + i) = (VTF3_handler_t) AppendDefglobalop;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFIOFILE)
*(handlers + i) = (VTF3_handler_t) AppendDefiofile;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFKPARREG)
*(handlers + i) = (VTF3_handler_t) AppendDefkparreg;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFMSGNAME)
*(handlers + i) = (VTF3_handler_t) AppendDefmsgname;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFOPENMPNAME)
*(handlers + i) = (VTF3_handler_t) AppendDefopenmpname;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFOPENMPTYPE)
*(handlers + i) = (VTF3_handler_t) AppendDefopenmptype;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFPATTERN)
*(handlers + i) = (VTF3_handler_t) AppendDefpattern;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFPATTERNSHAPE)
*(handlers + i) = (VTF3_handler_t) AppendDefpatternshape;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFREDFUNC_OBSOL)
*(handlers + i) = (VTF3_handler_t) AppendDefredfunc_obsol;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFSAMP)
*(handlers + i) = (VTF3_handler_t) AppendDefsamp;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFSAMPCLASS)
*(handlers + i) = (VTF3_handler_t) AppendDefsampclass;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFSCL)
*(handlers + i) = (VTF3_handler_t) AppendDefscl;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFSCLFILE)
*(handlers + i) = (VTF3_handler_t) AppendDefsclfile;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFSTATE)
*(handlers + i) = (VTF3_handler_t) AppendDefstate;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFSTATE_OBSOL)
*(handlers + i) = (VTF3_handler_t) AppendDefstate_obsol;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFSYSCPUNAMES)
*(handlers + i) = (VTF3_handler_t) AppendDefsyscpunames;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFSYSCPUNUMS)
*(handlers + i) = (VTF3_handler_t) AppendDefsyscpunums;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFTHREADNUMS)
*(handlers + i) = (VTF3_handler_t) AppendDefthreadnums;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFTIMEOFFSET)
*(handlers + i) = (VTF3_handler_t) AppendDeftimeoffset;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFUNMERGED)
*(handlers + i) = (VTF3_handler_t) AppendDefunmerged;
if (*(recordtypes + i) == VTF3_RECTYPE_DEFVERSION)
*(handlers + i) = (VTF3_handler_t) AppendDefversion;
if (*(recordtypes + i) == VTF3_RECTYPE_DOWNTO)
*(handlers + i) = (VTF3_handler_t) AppendDownto;
if (*(recordtypes + i) == VTF3_RECTYPE_EXCHANGE)
*(handlers + i) = (VTF3_handler_t) AppendExchange;
if (*(recordtypes + i) == VTF3_RECTYPE_EXCHANGE_OBSOL)
*(handlers + i) = (VTF3_handler_t) AppendExchange_obsol;
if (*(recordtypes + i) == VTF3_RECTYPE_FILEIOBEGIN)
*(handlers + i) = (VTF3_handler_t) AppendFileiobegin;
if (*(recordtypes + i) == VTF3_RECTYPE_FILEIOEND)
*(handlers + i) = (VTF3_handler_t) AppendFileioend;
if (*(recordtypes + i) == VTF3_RECTYPE_GLOBALOP)
*(handlers + i) = (VTF3_handler_t) AppendGlobalop;
if (*(recordtypes + i) == VTF3_RECTYPE_KPARREGBARSUM)
*(handlers + i) = (VTF3_handler_t) AppendKparregbarsum;
if (*(recordtypes + i) == VTF3_RECTYPE_KPARREGBEGIN)
*(handlers + i) = (VTF3_handler_t) AppendKparregbegin;
if (*(recordtypes + i) == VTF3_RECTYPE_KPARREGEND)
*(handlers + i) = (VTF3_handler_t) AppendKparregend;
if (*(recordtypes + i) == VTF3_RECTYPE_MUTEXACQUIRE)
*(handlers + i) = (VTF3_handler_t) AppendMutexacquire;
if (*(recordtypes + i) == VTF3_RECTYPE_MUTEXRELEASE)
*(handlers + i) = (VTF3_handler_t) AppendMutexrelease;
if (*(recordtypes + i) == VTF3_RECTYPE_OPENMPENTER)
*(handlers + i) = (VTF3_handler_t) AppendOpenmpenter;
if (*(recordtypes + i) == VTF3_RECTYPE_OPENMPLEAVE)
*(handlers + i) = (VTF3_handler_t) AppendOpenmpleave;
if (*(recordtypes + i) == VTF3_RECTYPE_PARREG)
*(handlers + i) = (VTF3_handler_t) AppendParreg;
if (*(recordtypes + i) == VTF3_RECTYPE_PATTERN)
*(handlers + i) = (VTF3_handler_t) AppendPattern;
if (*(recordtypes + i) == VTF3_RECTYPE_RECVMSG)
*(handlers + i) = (VTF3_handler_t) AppendRecvmsg;
if (*(recordtypes + i) == VTF3_RECTYPE_SAMP)
*(handlers + i) = (VTF3_handler_t) AppendSamp;
if (*(recordtypes + i) == VTF3_RECTYPE_SENDMSG)
*(handlers + i) = (VTF3_handler_t) AppendSendmsg;
if (*(recordtypes + i) == VTF3_RECTYPE_SRCINFO_OBSOL)
*(handlers + i) = (VTF3_handler_t) AppendSrcinfo_obsol;
if (*(recordtypes + i) == VTF3_RECTYPE_UNRECOGNIZABLE)
*(handlers + i) = (VTF3_handler_t) AppendUnrecognizable;
if (*(recordtypes + i) == VTF3_RECTYPE_UPFROM)
*(handlers + i) = (VTF3_handler_t) AppendUpfrom;
if (*(recordtypes + i) == VTF3_RECTYPE_UPTO)
*(handlers + i) = (VTF3_handler_t) AppendUpto;
*(firsthandlerargs + i) = &ccb;
}
if (inputfilename == 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"NULL as input file name\n");
(void) fflush (stderr);
(void) exit (127);
}
ccb.fcbin = VTF3_OpenFileInput (inputfilename, handlers, firsthandlerargs,
0);
(void) free (firsthandlerargs);
(void) free (handlers);
(void) free (recordtypes);
if (ccb.fcbin == 0) {
(void) VTF3_Close (ccb.fcboutmemory);
return (0);
}
if (timestampmin == 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"NULL as `timestampmin' address\n");
(void) fflush (stderr);
(void) exit (127);
}
if (timestampmax == 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"NULL as `timestampmax' address\n");
(void) fflush (stderr);
(void) exit (127);
}
if (outputbuffer == 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"NULL as output buffer address\n");
(void) fflush (stderr);
(void) exit (127);
}
ccb.outputbufferpos = outputbuffer + 0;
ccb.outputbufferbeyond = outputbuffer + outputbuffersize / sizeof (char);
*(ccb.outputbufferpos + 0) = '\0';
ccb.timestampmax = *timestampmin - 1.0e+0;
ccb.timestampminin = *timestampmin;
ccb.timestampmaxin = *timestampmax;
ccb.timestampminout = 1.0e+0;
ccb.timestampmaxout = 0.0e+0;
p1 = (char *) &stdasciiheader[0];
p2 = &headbuf[0];
(void) memcpy (p2, p1, sizeof (stdasciiheader));
p1 = (char *) "C TUD/ZHR ";
l1 = strlen (p1);
p2 += sizeof (stdasciiheader) / sizeof (stdasciiheader[0]);
(void) memcpy (p2, p1, l1 * sizeof (char));
p1 = (char *) &rcsid[0];
p2 += l1;
while (*p1 != ':' && *p1 != '\0')
p1++;
while (*p1 == ':')
p1++;
while (*p1 == ' ')
p1++;
while (*p1 != '.' && *p1 != '\0')
*p2++ = *p1++;
*p2++ = ' ';
while (*p1 != ' ' && *p1 != '\0')
p1++;
while (*p1 == ' ')
p1++;
while (*p1 != ' ' && *p1 != '\0')
*p2++ = *p1++;
*p2++ = ' ';
while (*p1 == ' ')
p1++;
while (*p1 != '2' && *p1 != '\0')
p1++;
while (*p1 != ' ' && *p1 != '\0')
*p2++ = *p1++;
*p2++ = ' ';
while (*p1 == ' ')
p1++;
while (*p1 != ' ' && *p1 != '\0')
*p2++ = *p1++;
*p2 = '\0';
constp1 = " with\nC ";
constp2 = VTF3_GetVersion ();
l1 = strlen (&headbuf[0]) + strlen (constp1) + strlen (constp2);
if (l1 < sizeof (headbuf) / sizeof (headbuf[0])) {
(void) strcat (&headbuf[0], constp1);
(void) strcat (&headbuf[0], constp2);
}
numchars = (int) strlen (&headbuf[0]) + 1;
if (ccb.outputbufferpos + numchars + 1 > ccb.outputbufferbeyond) {
while (ccb.outputbufferpos < ccb.outputbufferbeyond)
*ccb.outputbufferpos++ = '\0';
return (outputbuffer);
}
for (i = 0; i < numchars - 1; i++)
*(ccb.outputbufferpos + i) = headbuf[i];
ccb.outputbufferpos += numchars - 1;
*ccb.outputbufferpos++ = '\n';
*ccb.outputbufferpos = '\0';
for (;;) {
bytesread = VTF3_ReadFileInputLtdBytes (ccb.fcbin, 1000000);
if (bytesread == 0)
break;
if (ccb.timestampminout > ccb.timestampmaxout)
continue;
if (ccb.timestampmax > ccb.timestampmaxin)
break;
}
(void) VTF3_Close (ccb.fcbin);
(void) VTF3_Close (ccb.fcboutmemory);
if (ccb.activitynamevector1 != 0) {
for (i = 0; i < ccb.numactivities1; i++)
(void) free (*(ccb.activitynamevector1 + i));
(void) free (ccb.activitynamevector1);
}
if (ccb.activitynamevector2 != 0) {
for (i = 0; i < ccb.numactivities2; i++)
(void) free (*(ccb.activitynamevector2 + i));
(void) free (ccb.activitynamevector2);
}
if (ccb.activitytokenvector1 != 0)
(void) free (ccb.activitytokenvector1);
if (ccb.activitytokenvector2 != 0)
(void) free (ccb.activitytokenvector2);
if (ccb.timestampminout > ccb.timestampmaxout) {
ccb.timestampminout = *timestampmin;
ccb.timestampmaxout = *timestampmax;
}
*timestampmin = ccb.timestampminout;
*timestampmax = ccb.timestampmaxout;
return (outputbuffer);
}
/*****************************************************************************/
/* Internal prototypes. */
static const char *ActNameByToken (ccb_t *, int, const char *);
static int ActTokenByName (ccb_t *, const char *, int);
static void QuickSortActByName (char **, int *, unsigned int, unsigned int);
static void QuickSortActByToken (int *, char **, unsigned int, unsigned int);
static char *StrDup (const char *);
/*****************************************************************************/
/* Some macro stuff. */
#define VTF3_STRCMP(s1,s2,d) \
{ \
const char *macro_p1, *macro_p2; \
int macro_k1, macro_k2, macro_dk; \
macro_p1 = (s1); \
macro_p2 = (s2); \
macro_k1 = (int) (char) *macro_p1++; \
macro_k2 = (int) (char) *macro_p2++; \
macro_dk = macro_k1 - macro_k2; \
while (macro_dk == 0 && macro_k1 != 0) { \
macro_k1 = (int) (char) *macro_p1++; \
macro_k2 = (int) (char) *macro_p2++; \
macro_dk = macro_k1 - macro_k2; \
} \
(d) = macro_dk; \
}
#define VTF3_COMPOSER_CALL_DCL_DEFINITION \
ccb_t *ccb = (ccb_t *) ccbcaller; \
VTF3_rec_t *rec; \
int numchars, i
#define VTF3_COMPOSER_CALL_DCL_EVENT \
ccb_t *ccb = (ccb_t *) ccbcaller; \
VTF3_rec_t *rec; \
int numchars, i
#define VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION \
if (ccb->timestampminin > (-1.5e+0)) \
return (0)
#define VTF3_COMPOSER_CALL_PROLOGUE_EVENT \
if (ccb->timestampmax < time) \
ccb->timestampmax = time; \
if (time < ccb->timestampminin) \
return (0); \
if (time > ccb->timestampmaxin) \
return (0); \
if (ccb->timestampminout > ccb->timestampmaxout) { \
ccb->timestampminout = time; \
ccb->timestampmaxout = time; \
} \
if (ccb->timestampminout > time) \
ccb->timestampminout = time; \
if (ccb->timestampmaxout < time) \
ccb->timestampmaxout = time
#define VTF3_COMPOSER_CALL_EPILOGUE \
numchars = rec->numchars; \
if (ccb->outputbufferpos + numchars + 1 > ccb->outputbufferbeyond) { \
while (ccb->outputbufferpos < ccb->outputbufferbeyond) \
*ccb->outputbufferpos++ = '\0'; \
return (0); \
} \
for (i = 0; i < numchars - 1; i++) \
*(ccb->outputbufferpos + i) = *(rec->record + i); \
ccb->outputbufferpos += numchars - 1; \
*ccb->outputbufferpos++ = '\n'; \
*ccb->outputbufferpos = '\0'
/*****************************************************************************/
static const char *
ActNameByToken (ccb_t *ccb, int activitytoken, const char *dfltactivityname)
{
static const char *noact = "NOACT";
unsigned int isnoact, i, i1, i2;
size_t size;
char *activityname;
int n;
if (activitytoken == VTF3_NOACT)
return (noact);
isnoact = 1;
for (i = 0; i < 6; i++)
if (*(dfltactivityname + i) != *(noact + i)) {
isnoact = 0;
break;
}
if (ccb->activityvectordim1 == 0) {
if (isnoact != 0)
return (noact);
ccb->activityvectordim1 = 10;
size = (size_t) ccb->activityvectordim1 * sizeof (char *);
ccb->activitynamevector1 = (char **) malloc (size);
if (ccb->activitynamevector1 == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
size = (size_t) ccb->activityvectordim1 * sizeof (int);
ccb->activitytokenvector1 = (int *) malloc (size);
if (ccb->activitytokenvector1 == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
activityname = StrDup (dfltactivityname);
if ((*(ccb->activitynamevector1 + 0) = activityname) == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
*(ccb->activitytokenvector1 + 0) = activitytoken;
ccb->numactivities1 = 1;
(void) ActTokenByName (ccb, activityname, activitytoken);
return (activityname);
}
i1 = 0;
i2 = (unsigned int) ccb->numactivities1 - 1;
while (i1 != i2) {
i = (i1 + i2) >> 1;
if (*(ccb->activitytokenvector1 + i) < activitytoken)
i1 = i + 1;
else
i2 = i;
}
i = i1;
if (*(ccb->activitytokenvector1 + i) == activitytoken)
return (*(ccb->activitynamevector1 + i));
if (isnoact != 0)
return (noact);
if (ccb->numactivities1 == ccb->activityvectordim1) {
ccb->activityvectordim1 += 10;
size = (size_t) ccb->activityvectordim1 * sizeof (char *);
ccb->activitynamevector1 = (char **) realloc (ccb->activitynamevector1,
size);
if (ccb->activitynamevector1 == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
size = (size_t) ccb->activityvectordim1 * sizeof (int);
ccb->activitytokenvector1 = (int *) realloc (ccb->activitytokenvector1,
size);
if (ccb->activitytokenvector1 == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
}
activityname = StrDup (dfltactivityname);
n = ccb->numactivities1;
if ((*(ccb->activitynamevector1 + n) = activityname) == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
*(ccb->activitytokenvector1 + n) = activitytoken;
ccb->numactivities1++;
(void) QuickSortActByToken (ccb->activitytokenvector1,
ccb->activitynamevector1, 0, (unsigned int) n);
(void) ActTokenByName (ccb, activityname, activitytoken);
return (activityname);
}
static int
ActTokenByName (ccb_t *ccb, const char *activityname, int dfltactivitytoken)
{
static const char *noact = "NOACT";
unsigned int isnoact, i, i1, i2, found;
size_t size;
int activitytoken, k, n;
isnoact = 1;
for (i = 0; i < 6; i++)
if (*(activityname + i) != *(noact + i)) {
isnoact = 0;
break;
}
if (isnoact != 0)
return (VTF3_NOACT);
if (ccb->activityvectordim2 == 0) {
ccb->activityvectordim2 = 10;
size = (size_t) ccb->activityvectordim2 * sizeof (char *);
ccb->activitynamevector2 = (char **) malloc (size);
if (ccb->activitynamevector2 == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
size = (size_t) ccb->activityvectordim2 * sizeof (int);
ccb->activitytokenvector2 = (int *) malloc (size);
if (ccb->activitytokenvector2 == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
*(ccb->activitynamevector2 + 0) = StrDup (activityname);
if (*(ccb->activitynamevector2 + 0) == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
activitytoken = dfltactivitytoken != VTF3_NOACT
? dfltactivitytoken
: VTF3_NOACT + 1;
*(ccb->activitytokenvector2 + 0) = activitytoken;
ccb->numactivities2 = 1;
(void) ActNameByToken (ccb, activitytoken, activityname);
return (activitytoken);
}
i1 = 0;
i2 = (unsigned int) ccb->numactivities2 - 1;
while (i1 != i2) {
i = (i1 + i2) >> 1;
VTF3_STRCMP (*(ccb->activitynamevector2 + i), activityname, k);
if (k < 0)
i1 = i + 1;
else
i2 = i;
}
i = i1;
VTF3_STRCMP (*(ccb->activitynamevector2 + i), activityname, k);
if (k == 0)
return (*(ccb->activitytokenvector2 + i));
activitytoken = dfltactivitytoken;
if (activitytoken == VTF3_NOACT) {
found = 1;
while (found != 0) {
activitytoken++;
i1 = 0;
i2 = (unsigned int) ccb->numactivities1 - 1;
while (i1 != i2) {
i = (i1 + i2) >> 1;
if (*(ccb->activitytokenvector1 + i) < activitytoken)
i1 = i + 1;
else
i2 = i;
}
i = i1;
if (*(ccb->activitytokenvector1 + i) != activitytoken)
found = 0;
}
}
if (ccb->numactivities2 == ccb->activityvectordim2) {
ccb->activityvectordim2 += 10;
size = (size_t) ccb->activityvectordim2 * sizeof (char *);
ccb->activitynamevector2 = (char **) realloc (ccb->activitynamevector2,
size);
if (ccb->activitynamevector2 == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
size = (size_t) ccb->activityvectordim2 * sizeof (int);
ccb->activitytokenvector2 = (int *) realloc (ccb->activitytokenvector2,
size);
if (ccb->activitytokenvector2 == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
}
n = ccb->numactivities2;
*(ccb->activitynamevector2 + n) = StrDup (activityname);
if (*(ccb->activitynamevector2 + n) == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
*(ccb->activitytokenvector2 + n) = activitytoken;
ccb->numactivities2++;
(void) QuickSortActByName (ccb->activitynamevector2,
ccb->activitytokenvector2, 0, (unsigned int) n);
(void) ActNameByToken (ccb, activitytoken, activityname);
return (activitytoken);
}
static void
QuickSortActByName (char **names, int *tokens, unsigned int left,
unsigned int right)
{
unsigned int l1, r1, c1;
char *nameref, *nameaux;
int k, tokenaux;
l1 = left + 1;
r1 = right + 1;
c1 = (l1 + r1) >> 1;
nameref = *(names + c1 - 1);
while (l1 <= r1) {
VTF3_STRCMP (*(names + l1 - 1), nameref, k);
while (k < 0) {
l1++;
VTF3_STRCMP (*(names + l1 - 1), nameref, k);
}
VTF3_STRCMP (nameref, *(names + r1 - 1), k);
while (k < 0) {
r1--;
VTF3_STRCMP (nameref, *(names + r1 - 1), k);
}
if (l1 < r1) {
nameaux = *(names + l1 - 1);
*(names + l1 - 1) = *(names + r1 - 1);
*(names + r1 - 1) = nameaux;
tokenaux = *(tokens + l1 - 1);
*(tokens + l1 - 1) = *(tokens + r1 - 1);
*(tokens + r1 - 1) = tokenaux;
}
if (l1 <= r1) {
l1++;
r1--;
}
}
if (left + 1 < r1)
(void) QuickSortActByName (names, tokens, left, r1 - 1);
if (l1 < right + 1)
(void) QuickSortActByName (names, tokens, l1 - 1, right);
return;
}
static void
QuickSortActByToken (int *tokens, char **names, unsigned int left,
unsigned int right)
{
unsigned int l1, r1, c1;
int tokenref, tokenaux;
char *nameaux;
l1 = left + 1;
r1 = right + 1;
c1 = (l1 + r1) >> 1;
tokenref = *(tokens + c1 - 1);
while (l1 <= r1) {
while (*(tokens + l1 - 1) < tokenref)
l1++;
while (tokenref < *(tokens + r1 - 1))
r1--;
if (l1 < r1) {
tokenaux = *(tokens + l1 - 1);
*(tokens + l1 - 1) = *(tokens + r1 - 1);
*(tokens + r1 - 1) = tokenaux;
nameaux = *(names + l1 - 1);
*(names + l1 - 1) = *(names + r1 - 1);
*(names + r1 - 1) = nameaux;
}
if (l1 <= r1) {
l1++;
r1--;
}
}
if (left + 1 < r1)
(void) QuickSortActByToken (tokens, names, left, r1 - 1);
if (l1 < right + 1)
(void) QuickSortActByToken (tokens, names, l1 - 1, right);
return;
}
static char *
StrDup (const char *si)
{
const char *pi;
char *so, *po;
if (si == 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"StrDup(): NULL as argument\n");
(void) fflush (stderr);
(void) exit (127);
}
pi = si;
while (*pi != '\0')
pi++;
so = (char *) malloc ((size_t) (pi + 1 - si) * sizeof (char));
if (so == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
pi = si;
po = so;
while (*pi != '\0')
*po++ = *pi++;
*po = *pi;
return (so);
}
/*****************************************************************************/
static int
AppendClstrregval (void *ccbcaller, double time, int clstrtoken,
int clstrregarraydim, const int *clstrregtokenarray,
const int *clstrregvaluetypearray,
const void *clstrregvaluearray)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeClstrregval (ccb->fcboutmemory, time, clstrtoken,
clstrregarraydim, clstrregtokenarray,
clstrregvaluetypearray, clstrregvaluearray);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendComment (void *ccbcaller, double time, const char *comment)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeComment (ccb->fcboutmemory, time, comment);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendCpuregval (void *ccbcaller, double time, unsigned int cpuid,
int cpuregarraydim, const int *cpuregtokenarray,
const int *cpuregvaluetypearray,
const void *cpuregvaluearray)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeCpuregval (ccb->fcboutmemory, time, cpuid, cpuregarraydim,
cpuregtokenarray, cpuregvaluetypearray,
cpuregvaluearray);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefact (void *ccbcaller, int activitytoken, const char *activityname)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefact (ccb->fcboutmemory, activitytoken, activityname);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefact_obsol (void *ccbcaller, int activitytoken,
const char *activityname)
{
static const char *noact = "NOACT";
int isnoact;
VTF3_COMPOSER_CALL_DCL_DEFINITION;
if (activityname == 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"AppendDefact_obsol(): "
"NULL as activity name\n");
(void) fflush (stderr);
(void) exit (127);
}
if (activitytoken == VTF3_NOACT)
return (0);
isnoact = 1;
for (i = 0; i < 6; i++)
if (*(activityname + i) != *(noact + i)) {
isnoact = 0;
break;
}
if (isnoact != 0)
return (0);
(void) ActNameByToken (ccb, activitytoken, activityname);
(void) ActTokenByName (ccb, activityname, activitytoken);
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefact_obsol (ccb->fcboutmemory, activitytoken,
activityname);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefclkperiod (void *ccbcaller, double clkperiod)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefclkperiod (ccb->fcboutmemory, clkperiod);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefclstr (void *ccbcaller, int clstrtoken, const char *clstrname,
int cpuidarraydim, const unsigned int *cpuidarray)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefclstr (ccb->fcboutmemory, clstrtoken, clstrname,
cpuidarraydim, cpuidarray);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefclstrreg (void *ccbcaller, int clstrregtoken, int clstrregclasstoken,
int valuetype, const void *valuebounds,
const char *clstrregname, const char *clstrregunit)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefclstrreg (ccb->fcboutmemory, clstrregtoken,
clstrregclasstoken, valuetype, valuebounds,
clstrregname, clstrregunit);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefclstrregclass (void *ccbcaller, int clstrregclasstoken,
const char *clstrregclassname)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefclstrregclass (ccb->fcboutmemory, clstrregclasstoken,
clstrregclassname);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefcommunicator (void *ccbcaller, int communicator,
int communicatorsize, int tripletarraydim,
const unsigned int *tripletarray)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefcommunicator (ccb->fcboutmemory, communicator,
communicatorsize, tripletarraydim,
tripletarray);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefcpugrp (void *ccbcaller, unsigned int cpugrpid,
int cpuorcpugrpidarraydim,
const unsigned int *cpuorcpugrpidarray,
const char *cpugrpname)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefcpugrp (ccb->fcboutmemory, cpugrpid,
cpuorcpugrpidarraydim, cpuorcpugrpidarray,
cpugrpname);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefcpuname (void *ccbcaller, unsigned int cpuid, const char *cpuname)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefcpuname (ccb->fcboutmemory, cpuid, cpuname);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefcpureg (void *ccbcaller, int cpuregtoken, int cpuregclasstoken,
int valuetype, const void *valuebounds,
const char *cpuregname, const char *cpuregunit)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefcpureg (ccb->fcboutmemory, cpuregtoken,
cpuregclasstoken, valuetype, valuebounds,
cpuregname, cpuregunit);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefcpuregclass (void *ccbcaller, int cpuregclasstoken,
const char *cpuregclassname)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefcpuregclass (ccb->fcboutmemory, cpuregclasstoken,
cpuregclassname);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefcreator (void *ccbcaller, const char *creator)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefcreator (ccb->fcboutmemory, creator);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefglobalop (void *ccbcaller, int globaloptoken,
const char *globalopname)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefglobalop (ccb->fcboutmemory, globaloptoken,
globalopname);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefiofile (void *ccbcaller, int iofiletoken, int communicator,
const char *iofilename)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefiofile (ccb->fcboutmemory, iofiletoken, communicator,
iofilename);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefkparreg (void *ccbcaller, int kparregtoken, const char *kparregname)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefkparreg (ccb->fcboutmemory, kparregtoken, kparregname);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefmsgname (void *ccbcaller, int msgtype, int communicator,
const char *msgname)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefmsgname (ccb->fcboutmemory, msgtype, communicator,
msgname);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefopenmpname (void *ccbcaller, unsigned int nametoken,
const char *openmpname)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefopenmpname (ccb->fcboutmemory, nametoken, openmpname);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefopenmptype (void *ccbcaller, unsigned int constructtypetoken,
const char *constructtypename)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefopenmptype (ccb->fcboutmemory, constructtypetoken,
constructtypename);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefpattern (void *ccbcaller, int activitytoken, int pattoken,
int patshptoken, double radius, int ratio,
int timesteparraydim, const double *timesteparray)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefpattern (ccb->fcboutmemory, activitytoken, pattoken,
patshptoken, radius, ratio, timesteparraydim,
timesteparray);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefpatternshape (void *ccbcaller, int activitytoken, int patshptoken,
int patterntype, int patshptokenbref1,
int patshptokenbref2)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefpatternshape (ccb->fcboutmemory, activitytoken,
patshptoken, patterntype,
patshptokenbref1, patshptokenbref2);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefredfunc_obsol (void *ccbcaller, int redfunctoken,
const char *redfuncname)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefredfunc_obsol (ccb->fcboutmemory, redfunctoken,
redfuncname);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefsamp (void *ccbcaller, int sampletoken, int sampleclasstoken,
int iscpugrpsamp, unsigned int cpuorcpugrpid, int valuetype,
const void *valuebounds, int dodifferentiation,
int datarephint, const char *samplename,
const char *sampleunit)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefsamp (ccb->fcboutmemory, sampletoken, sampleclasstoken,
iscpugrpsamp, cpuorcpugrpid, valuetype,
valuebounds, dodifferentiation, datarephint,
samplename, sampleunit);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefsampclass (void *ccbcaller, int sampleclasstoken,
const char *sampleclassname)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefsampclass (ccb->fcboutmemory, sampleclasstoken,
sampleclassname);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefscl (void *ccbcaller, int scltoken, int sclarraydim,
const int *sclfiletokenarray, const int *scllinepositionarray)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefscl (ccb->fcboutmemory, scltoken, sclarraydim,
sclfiletokenarray, scllinepositionarray);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefsclfile (void *ccbcaller, int sclfiletoken, const char *sclfilename)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefsclfile (ccb->fcboutmemory, sclfiletoken, sclfilename);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefstate (void *ccbcaller, int activitytoken, int statetoken,
const char *statename, int scltoken)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefstate (ccb->fcboutmemory, activitytoken, statetoken,
statename, scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefstate_obsol (void *ccbcaller, int activitytoken,
const char *activityname,
unsigned int activityvalidity, int statetoken,
const char *statename)
{
static const char *noact = "NOACT";
int isnoact;
VTF3_COMPOSER_CALL_DCL_DEFINITION;
if ((activityvalidity & VTF3_OLDACT_VALID_TOKEN) != 0 &&
(activityvalidity & VTF3_OLDACT_VALID_NAME ) != 0) {
if (activityname == 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"AppendDefstate_obsol(): "
"NULL as activity name\n");
(void) fflush (stderr);
(void) exit (127);
}
if (activitytoken == VTF3_NOACT)
return (0);
isnoact = 1;
for (i = 0; i < 6; i++)
if (*(activityname + i) != *(noact + i)) {
isnoact = 0;
break;
}
if (isnoact != 0)
return (0);
}
else if ((activityvalidity & VTF3_OLDACT_VALID_TOKEN) != 0) {
if (activitytoken == VTF3_NOACT)
return (0);
activityname = ActNameByToken (ccb, activitytoken, noact);
if (activityname == 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"AppendDefstate_obsol(): "
"Unrecoverable error\n");
(void) fflush (stderr);
(void) exit (127);
}
isnoact = 1;
for (i = 0; i < 6; i++)
if (*(activityname + i) != *(noact + i)) {
isnoact = 0;
break;
}
if (isnoact != 0)
return (0);
}
else if ((activityvalidity & VTF3_OLDACT_VALID_NAME) != 0) {
if (activityname == 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"AppendDefstate_obsol(): "
"NULL as activity name\n");
(void) fflush (stderr);
(void) exit (127);
}
isnoact = 1;
for (i = 0; i < 6; i++)
if (*(activityname + i) != *(noact + i)) {
isnoact = 0;
break;
}
if (isnoact != 0)
return (0);
activitytoken = ActTokenByName (ccb, activityname, VTF3_NOACT);
if (activitytoken == VTF3_NOACT) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"AppendDefstate_obsol(): "
"Unrecoverable error\n");
(void) fflush (stderr);
(void) exit (127);
}
}
else
return (0);
activityvalidity = VTF3_OLDACT_VALID_TOKEN | VTF3_OLDACT_VALID_NAME;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefstate_obsol (ccb->fcboutmemory, activitytoken,
activityname, activityvalidity,
statetoken, statename);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefsyscpunames (void *ccbcaller, int systemcpunamearraydim,
char * const *systemcpunamearray)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefsyscpunames (ccb->fcboutmemory, systemcpunamearraydim,
systemcpunamearray);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefsyscpunums (void *ccbcaller, int systemcpunumberarraydim,
const int *systemcpunumberarray)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefsyscpunums (ccb->fcboutmemory, systemcpunumberarraydim,
systemcpunumberarray);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefthreadnums (void *ccbcaller, int threadnumarraydim,
const int *threadnumarray)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefthreadnums (ccb->fcboutmemory, threadnumarraydim,
threadnumarray);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDeftimeoffset (void *ccbcaller, double timeoffset)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDeftimeoffset (ccb->fcboutmemory, timeoffset);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefunmerged (void *ccbcaller)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefunmerged (ccb->fcboutmemory);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDefversion (void *ccbcaller, int versionnumber)
{
VTF3_COMPOSER_CALL_DCL_DEFINITION;
VTF3_COMPOSER_CALL_PROLOGUE_DEFINITION;
rec = VTF3_ComposeDefversion (ccb->fcboutmemory, versionnumber);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendDownto (void *ccbcaller, double time, int statetoken,
unsigned int cpuid, int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeDownto (ccb->fcboutmemory, time, statetoken, cpuid,
scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendExchange (void *ccbcaller, double time, unsigned int cpuid,
int exchangetype, int statetoken, int job, int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeExchange (ccb->fcboutmemory, time, cpuid, exchangetype,
statetoken, job, scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendExchange_obsol (void *ccbcaller, double time, unsigned int cpuid,
int exchangetype, int statetoken, int activitytoken,
const char *activityname,
unsigned int activityvalidity, int job)
{
static const char *noact = "NOACT";
int isnoact;
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
if ((activityvalidity & VTF3_OLDACT_VALID_TOKEN) != 0 &&
(activityvalidity & VTF3_OLDACT_VALID_NAME ) != 0) {
if (activityname == 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"AppendExchange_obsol(): "
"NULL as activity name\n");
(void) fflush (stderr);
(void) exit (127);
}
isnoact = 1;
for (i = 0; i < 6; i++)
if (*(activityname + i) != *(noact + i)) {
isnoact = 0;
break;
}
if (activitytoken == VTF3_NOACT && isnoact == 0)
return (0);
if (activitytoken != VTF3_NOACT && isnoact != 0)
return (0);
}
else if ((activityvalidity & VTF3_OLDACT_VALID_TOKEN) != 0) {
if (activitytoken == VTF3_NOACT)
activityname = noact;
else {
activityname = ActNameByToken (ccb, activitytoken, noact);
if (activityname == 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"AppendExchange_obsol(): "
"Unrecoverable error\n");
(void) fflush (stderr);
(void) exit (127);
}
isnoact = 1;
for (i = 0; i < 6; i++)
if (*(activityname + i) != *(noact + i)) {
isnoact = 0;
break;
}
if (isnoact != 0)
/* Not found. */
return (0);
}
}
else if ((activityvalidity & VTF3_OLDACT_VALID_NAME) != 0) {
if (activityname == 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"AppendExchange_obsol(): "
"NULL as activity name\n");
(void) fflush (stderr);
(void) exit (127);
}
isnoact = 1;
for (i = 0; i < 6; i++)
if (*(activityname + i) != *(noact + i)) {
isnoact = 0;
break;
}
if (isnoact != 0)
activitytoken = VTF3_NOACT;
else {
activitytoken = ActTokenByName (ccb, activityname, VTF3_NOACT);
if (activitytoken == VTF3_NOACT) {
/* Error in `ActTokenByName()' .*/
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"AppendExchange_obsol(): "
"Unrecoverable error\n");
(void) fflush (stderr);
(void) exit (127);
}
}
}
else
return (0);
if (exchangetype == VTF3_EXCHANGETYPE_UPFROM)
return (0);
if (exchangetype == VTF3_EXCHANGETYPE_DOWNTO && activitytoken == VTF3_NOACT)
return (0);
if (statetoken == VTF3_NOSTATE || activitytoken == VTF3_NOACT)
if (statetoken != VTF3_NOSTATE || activitytoken != VTF3_NOACT)
return (0);
activityvalidity = VTF3_OLDACT_VALID_TOKEN | VTF3_OLDACT_VALID_NAME;
rec = VTF3_ComposeExchange_obsol (ccb->fcboutmemory, time, cpuid,
exchangetype, statetoken, activitytoken,
activityname, activityvalidity, job);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendFileiobegin (void *ccbcaller, double time, unsigned int cpuid,
int fileiotype, int iofiletoken, int bytescopied,
int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeFileiobegin (ccb->fcboutmemory, time, cpuid, fileiotype,
iofiletoken, bytescopied, scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendFileioend (void *ccbcaller, double time, unsigned int cpuid,
int fileiotype, int iofiletoken, int bytescopied,
int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeFileioend (ccb->fcboutmemory, time, cpuid, fileiotype,
iofiletoken, bytescopied, scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendGlobalop (void *ccbcaller, double time, int globaloptoken,
unsigned int cpuid, int communicator, unsigned int rootcpuid,
int bytessent, int bytesreceived, double durationtimesteps,
int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeGlobalop (ccb->fcboutmemory, time, globaloptoken, cpuid,
communicator, rootcpuid, bytessent,
bytesreceived, durationtimesteps, scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendKparregbarsum (void *ccbcaller, double time, unsigned int cpuid,
int kparregtoken, int seqn, int opasize,
const void *opastream, int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeKparregbarsum (ccb->fcboutmemory, time, cpuid,
kparregtoken, seqn, opasize, opastream,
scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendKparregbegin (void *ccbcaller, double time, unsigned int cpuid,
int kparregtoken, int seqn, int numthreads, int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeKparregbegin (ccb->fcboutmemory, time, cpuid,
kparregtoken, seqn, numthreads, scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendKparregend (void *ccbcaller, double time, unsigned int cpuid,
int kparregtoken, int seqn, int opasize,
const void *opastream, int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeKparregend (ccb->fcboutmemory, time, cpuid, kparregtoken,
seqn, opasize, opastream, scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendMutexacquire (void *ccbcaller, double time, unsigned int cpuid,
int enterstatetoken, int leavestatetoken,
int leavestatetokenisupfrom, double durationtimesteps,
int mutexsize, const void *mutex, int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeMutexacquire (ccb->fcboutmemory, time, cpuid,
enterstatetoken, leavestatetoken,
leavestatetokenisupfrom, durationtimesteps,
mutexsize, mutex, scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendMutexrelease (void *ccbcaller, double time, unsigned int cpuid,
int enterstatetoken, int leavestatetoken,
int leavestatetokenisupfrom, double durationtimesteps,
int mutexsize, const void *mutex, int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeMutexrelease (ccb->fcboutmemory, time, cpuid,
enterstatetoken, leavestatetoken,
leavestatetokenisupfrom, durationtimesteps,
mutexsize, mutex, scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendOpenmpenter (void *ccbcaller, double time, unsigned int cpuid,
unsigned int constructtypetoken, unsigned int nametoken,
int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeOpenmpenter (ccb->fcboutmemory, time, cpuid,
constructtypetoken, nametoken, scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendOpenmpleave (void *ccbcaller, double time, unsigned int cpuid,
int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeOpenmpleave (ccb->fcboutmemory, time, cpuid, scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendParreg (void *ccbcaller, double time, unsigned int cpugrpid,
unsigned int nametoken, int sclstarttoken, int sclendtoken,
int timearraydim, const double *timeoffsetanddurationarray)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeParreg (ccb->fcboutmemory, time, cpugrpid, nametoken,
sclstarttoken, sclendtoken, timearraydim,
timeoffsetanddurationarray);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendPattern (void *ccbcaller, double time, unsigned int cpuid,
int patorpatshptoken, double durationtimesteps,
int timesteparraydim, const double *timesteparray,
const int *patchindexarray)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposePattern (ccb->fcboutmemory, time, cpuid, patorpatshptoken,
durationtimesteps, timesteparraydim,
timesteparray, patchindexarray);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendRecvmsg (void *ccbcaller, double time, unsigned int receiver,
unsigned int sender, int communicator, int msgtype,
int msglength, int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeRecvmsg (ccb->fcboutmemory, time, receiver, sender,
communicator, msgtype, msglength, scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendSamp (void *ccbcaller, double time, unsigned int cpuorcpugrpid,
int samplearraydim, const int *sampletokenarray,
const int *samplevaluetypearray, const void *samplevaluearray)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeSamp (ccb->fcboutmemory, time, cpuorcpugrpid,
samplearraydim, sampletokenarray,
samplevaluetypearray, samplevaluearray);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendSendmsg (void *ccbcaller, double time, unsigned int sender,
unsigned int receiver, int communicator, int msgtype,
int msglength, int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeSendmsg (ccb->fcboutmemory, time, sender, receiver,
communicator, msgtype, msglength, scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendSrcinfo_obsol (void *ccbcaller, double time, int activitytoken,
int statetoken, int scllineposition)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeSrcinfo_obsol (ccb->fcboutmemory, time, activitytoken,
statetoken, scllineposition);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendUnrecognizable (void *ccbcaller, double lastvalidtime,
int numberofunrecognizablechars,
int typeofunrecognizablerecord,
const char *unrecognizablerecord)
{
double time;
VTF3_COMPOSER_CALL_DCL_EVENT;
time = lastvalidtime;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeUnrecognizable (ccb->fcboutmemory, lastvalidtime,
numberofunrecognizablechars,
typeofunrecognizablerecord,
unrecognizablerecord);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendUpfrom (void *ccbcaller, double time, int statetoken,
unsigned int cpuid, int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeUpfrom (ccb->fcboutmemory, time, statetoken, cpuid,
scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
static int
AppendUpto (void *ccbcaller, double time, int statetoken, unsigned int cpuid,
int scltoken)
{
VTF3_COMPOSER_CALL_DCL_EVENT;
VTF3_COMPOSER_CALL_PROLOGUE_EVENT;
rec = VTF3_ComposeUpto (ccb->fcboutmemory, time, statetoken, cpuid,
scltoken);
VTF3_COMPOSER_CALL_EPILOGUE;
return (0);
}
/*****************************************************************************/
#if (defined (VTF3_MAIN_SHOWTFWIN))
int
main (void)
{
const char *inputfilename = "input.vpt";
const char *outputfilename = "showlog.vpt";
double timestampmin = -2.0e+00;
double timestampmax = 1.1e+30;
size_t outputbuffersize = 100000000;
char *outputbuffer;
FILE *pfile;
size_t rc;
(void) VTF3_InitTables ();
(void) fprintf (stdout, "%s\n", VTF3_GetVersion ());
(void) fprintf (stdout, "%d\n", VTF3_GetVersionNumber ());
if ((outputbuffer = (char *) malloc (outputbuffersize)) == 0) {
VTF3_NOMEM_GOOD_BYE_INFO;
(void) exit (127);
}
if (VTF3_ShowTraceFileWindow (inputfilename, ×tampmin, ×tampmax,
outputbuffer,
outputbuffersize) != outputbuffer) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"Can't open `%s' for input\n", inputfilename);
(void) fflush (stderr);
(void) exit (127);
}
if ((pfile = fopen (outputfilename, "wb")) == 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"Can't open `%s' for output\n", outputfilename);
(void) fflush (stderr);
(void) exit (127);
}
rc = fwrite (outputbuffer, sizeof (char), (size_t) strlen (outputbuffer),
pfile);
if (rc != (size_t) strlen (outputbuffer)) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"I/O error on output\n");
(void) fflush (stderr);
(void) exit (127);
}
if (fclose (pfile) != 0) {
(void) fprintf (stderr, "VTF3_ShowTraceFileWindow(): "
"Error while closing output\n");
(void) fflush (stderr);
(void) exit (127);
}
(void) free (outputbuffer);
return (0);
}
#endif
/*****************************************************************************/
/* {{{ HISTORY */
/*
*
* $Log: vtf3showtfwin.c,v $
* Revision 1.2 2005/10/22 00:57:03 sameer
* committing source of vtf3 1.43.
*
* Revision 1.16 2004/03/01 22:54:26 seidl
* Added missing OpenMP stuff.
*
* Revision 1.15 2003/11/24 00:16:04 seidl
* Code should be in "Clean C" now.
*
* Revision 1.14 2002/09/09 15:56:53 seidl
* DEFPATTERN got an additional argument.
*
* Revision 1.13 2002/05/03 07:55:35 seidl
* Tokenization canonicalized.
*
* Revision 1.12 2002/05/01 12:45:01 seidl
* Cosmetic change.
*
* Revision 1.11 2002/04/19 01:29:30 seidl
* Cosmetic changes.
*
* Revision 1.10 2002/04/11 12:59:31 seidl
* Records and interfaces of DEFPATTERN and PATTERN changed.
*
* Revision 1.9 2002/03/07 11:10:07 seidl
* `strdup()' replaced by local code.
*
* Revision 1.8 2002/03/06 10:25:32 seidl
* Work around a problem with respect to the `strdup()' declaration.
*
* Revision 1.7 2002/03/02 23:42:03 seidl
* Improvement in practical speed.
*
* Revision 1.6 2002/03/02 23:13:16 seidl
* Last quick-sort argument casted.
*
* Revision 1.5 2002/03/02 22:06:52 seidl
* Final implementation.
*
* Revision 1.4 2002/03/01 19:01:55 seidl
* Changes to simplify debugging.
*
* Revision 1.3 2002/02/28 16:55:41 seidl
* Prototype went from here to `vtf3.h', not
* to `vtf3.c', of course.
*
* Revision 1.2 2002/02/28 16:52:00 seidl
* Declaration of VTF3_ShowTraceFileWindow() changed.
* Prototype went from here to `vtf3.h'.
* DEFPATTERN, DEFPATTERNSHAPE, PATTERN,
* MUTEXACQUIRE and MUTEXRELEASE implemented.
* DOWNTO, UPFROM and UPTO got SCL.
* Window selection management rewritten.
* What keeps to do is the (re)tokenization.
*
* Revision 1.1 2001/09/25 23:23:42 seidl
* Initial version.
*
* Revision 1.0 2000/00/00 00:00:00 seidl
* Initial version.
*
*/
/* }}} */
/*****************************************************************************/