/*  This file is part of the Pablo Performance Analysis Environment
// 
//           (R)
//  The Pablo    Performance Analysis Environment software is NOT in
//  the public domain.  However, it is freely available without fee for
//  education, research, and non-profit purposes.  By obtaining copies
//  of this and other files that comprise the Pablo Performance Analysis
//  Environment, you, the Licensee, agree to abide by the following
//  conditions and understandings with respect to the copyrighted software:
//  
//  1.  The software is copyrighted in the name of the Board of Trustees
//      of the University of Illinois (UI), and ownership of the software
//      remains with the UI. 
// 
//  2.  Permission to use, copy, and modify this software and its documentation
//      for education, research, and non-profit purposes is hereby granted
//      to Licensee, provided that the copyright notice, the original author's
//      names and unit identification, and this permission notice appear on
//      all such copies, and that no charge be made for such copies.  Any
//      entity desiring permission to incorporate this software into commercial
//      products should contact:
// 
//           Professor Daniel A. Reed                 reed@cs.uiuc.edu
//           University of Illinois
//           Department of Computer Science
//           2413 Digital Computer Laboratory
//           1304 West Springfield Avenue
//           Urbana, Illinois  61801
//           USA
// 
//  3.  Licensee may not use the name, logo, or any other symbol of the UI
//      nor the names of any of its employees nor any adaptation thereof in
//      advertizing or publicity pertaining to the software without specific
//      prior written approval of the UI.
// 
//  4.  THE UI MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE
//      SOFTWARE FOR ANY PURPOSE.  IT IS PROVIDED "AS IS" WITHOUT EXPRESS
//      OR IMPLIED WARRANTY.
// 
//  5.  The UI shall not be liable for any damages suffered by Licensee from
//      the use of this software.
// 
//  6.  The software was developed under agreements between the UI and the
//      Federal Government which entitle the Government to certain rights.
// 
// *************************************************************************
// 
//  Developed by: The Pablo Research Group
//                University of Illinois at Urbana-Champaign
//                Department of Computer Science
//                1304 W. Springfield Avenue
//                Urbana, IL     61801
// 
//                http://www-pablo.cs.uiuc.edu
// 
//  Send comments to: pablo-feedback@guitar.cs.uiuc.edu
// 
//  Copyright (c) 1987-1998
//  The University of Illinois Board of Trustees.
//       All Rights Reserved.
// 
//  PABLO is a registered trademark of
//  The Board of Trustees of the University of Illinois
//  registered in the U.S. Patent and Trademark Office.
// 
//  Project Manager and Principal Investigator:
//       Daniel A. Reed (reed@cs.uiuc.edu)
// 
// Funded in part by the Defense Advanced Research Projects Agency under 
// DARPA contracts DABT63-94-C0049 (SIO Initiative), F30602-96-C-0161,
// and DABT63-96-C-0027 by the National Science Foundation under the PACI 
// program and grants NSF CDA 94-01124 and ASC 97-20202, and by the 
// Department of Energy under contracts DOE B-341494, W-7405-ENG-48, and 
// 1-B-333164.
//======================================================================*/
#ifndef HDFTRACE_H
#define HDFTRACE_H
/************************************************************************/
/* A shared char * pointer (defined in HDF_Descriptors.c) and Macro 	*/
/* definitions								*/
/************************************************************************/
extern char *hdfRecordPointer;
/************************************************************************/
/* The following are used in tagging HDF packets.  Avoid using FAMILY   */
/* tags in the range 0100000 to 0200000					*/
/************************************************************************/
#define HDF_FAMILY 	 	0100000
#define HDF_SUMMARY_FAMILY  	0140000
/************************************************************************/
/* Number of fields in the packets.					*/
/************************************************************************/
#define NUM_FIELDS	17
/* 
 * "WRITE_HDF_ATTR" macro to output an attribute pair. 
 */
#ifndef WRITE_HDF_ATTR
#define WRITE_HDF_ATTR( attrKey, attrValue ) \
    sddfWriteString( &hdfRecordPointer, attrKey ); \
    sddfWriteString( &hdfRecordPointer, attrValue ); 
#endif /* WRITE_HDF_ATTR */

/* 
 * "WRITE_HDF_FIELD" macro to output a field with a single attribute pair. 
 */
#ifndef WRITE_HDF_FIELD
#define WRITE_HDF_FIELD( name, attrKey, attrValue, type, dimension ) \
    sddfWriteString( &hdfRecordPointer, name ); \
    sddfWriteInteger( &hdfRecordPointer, 1 ); \
    sddfWriteString( &hdfRecordPointer, attrKey ); \
    sddfWriteString( &hdfRecordPointer, attrValue ); \
    sddfWriteInteger( &hdfRecordPointer, type ); \
    sddfWriteInteger( &hdfRecordPointer, dimension ); 
#endif /* WRITE_HDF_FIELD */

/* 
 * "WRITE_HDF_FIELD2" to output a field with two attribute pairs. 
 */
#ifndef WRITE_HDF_FIELD2
#define WRITE_HDF_FIELD2( name, aKey1, aValue1, aKey2, aValue2, type, dimension ) \
    sddfWriteString( &hdfRecordPointer, name ); \
    sddfWriteInteger( &hdfRecordPointer, 2 ); \
    sddfWriteString( &hdfRecordPointer, aKey1 ); \
    sddfWriteString( &hdfRecordPointer, aValue1 ); \
    sddfWriteString( &hdfRecordPointer, aKey2 ); \
    sddfWriteString( &hdfRecordPointer, aValue2 ); \
    sddfWriteInteger( &hdfRecordPointer, type ); \
    sddfWriteInteger( &hdfRecordPointer, dimension ); 
#endif /* WRITE_HDF_FIELD2*/

#define FAMILY_NAME         	0260            /* Data Set Name Record */
#define FAMILY_MISC      	0270
#define FAMILY_HDFPROCNAME     	0300

#define mpiOpenBeginID             900800
#define mpiOpenEndID               900801

#define mpiCloseBeginID            900802
#define mpiCloseEndID              900803

#define mpiSetSizeBeginID          900806
#define mpiSetSizeEndID            900807

#define mpiGetSizeBeginID          900810
#define mpiGetSizeEndID            900811

#define mpiSetViewBeginID          900816
#define mpiSetViewEndID            900817

#define mpiGetViewBeginID          900818
#define mpiGetViewEndID            900819

#define mpiReadAtBeginID           900820
#define mpiReadAtEndID             900821

#define mpiReadAtAllBeginID        900822
#define mpiReadAtAllEndID          900823

#define mpiWriteAtBeginID          900824
#define mpiWriteAtEndID            900825

#define mpiWriteAtAllBeginID       900826
#define mpiWriteAtAllEndID         900827

#define mpiSyncBeginID             900856
#define mpiSyncEndID               900857

typedef struct {
        long numBytes;
        long setID;
        char *setName;
} HDFsetInfo ;

#endif /* HDFTRACE_H */