560 lines
20 KiB
C++
560 lines
20 KiB
C++
|
/*
|
||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||
|
*
|
||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||
|
*
|
||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||
|
* purpose of maintaining the converter. However, no authority is granted
|
||
|
* to alter the TecIO source code in any form or manner.
|
||
|
*
|
||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||
|
*
|
||
|
* Tecplot, Inc.
|
||
|
* 3535 Factoria Blvd, Ste. 550
|
||
|
* Bellevue, WA 98006, USA
|
||
|
* Phone: +1 425 653 1200
|
||
|
* http://www.tecplot.com/
|
||
|
*
|
||
|
*/
|
||
|
/*
|
||
|
*****************************************************************
|
||
|
*****************************************************************
|
||
|
******* ********
|
||
|
****** (C) Copyright 2004-2006 by Tecplot, Inc. ********
|
||
|
****** (C) Copyright 1989-2003 by AMTEC ENGINEERING INC.********
|
||
|
******* All Rights Reserved. ********
|
||
|
******* ********
|
||
|
*****************************************************************
|
||
|
*****************************************************************
|
||
|
*/
|
||
|
|
||
|
|
||
|
/*
|
||
|
****************************************************************
|
||
|
****************** BEGIN DEVELOPMENT NOTES *********************
|
||
|
****************************************************************
|
||
|
|
||
|
BEGIN CODELOG PLTVIEW
|
||
|
V 09/04/98
|
||
|
V ****************************************************************
|
||
|
V * Build 1.0 9-04-98 *
|
||
|
V ****************************************************************
|
||
|
END CODELOG
|
||
|
|
||
|
*********************************************************************
|
||
|
* IMPORTANT NOTE: Only development notes for "pltview" stand-alone *
|
||
|
* belong in this file. See "ADDONVER.h" for changes *
|
||
|
* related to the add-on. *
|
||
|
*********************************************************************
|
||
|
|
||
|
****************************************************************
|
||
|
* V in column 1 marks date information. *
|
||
|
* C in column 1 marks notes on new changes. *
|
||
|
* B in column 1 marks notes on bug fixes. *
|
||
|
****************************************************************
|
||
|
|
||
|
****************************************************************
|
||
|
****************** END DEVELOPMENT NOTES ***********************
|
||
|
****************************************************************
|
||
|
*/
|
||
|
|
||
|
#if defined ADDON
|
||
|
#include "TECADDON.h"
|
||
|
#include "GUIDEFS.h"
|
||
|
#include "GUI.h"
|
||
|
#define READTEC TecUtilReadBinaryData
|
||
|
#define SHOWINFO(S) TecGUITextAppendString(Output_T_D1,S);
|
||
|
#define ERRMSG(S) TecUtilDialogErrMsg(S)
|
||
|
#define ALLOC_ARRAY(N,Type,S) (Type *)TecUtilStringAlloc((N)*sizeof(Type),"debug info")
|
||
|
#define FREE_ARRAY(N,S) TecUtilStringDealloc((char **)&N)
|
||
|
#define STRINGLISTGETSTRING(S,N) TecUtilStringListGetString(S,N)
|
||
|
#define STRINGLISTGETCOUNT(S) TecUtilStringListGetCount(S)
|
||
|
#define STRINGLISTDEALLOC(S) TecUtilStringListDealloc(S)
|
||
|
#else
|
||
|
#include "MASTER.h"
|
||
|
#include "GLOBAL.h"
|
||
|
#include "TASSERT.h"
|
||
|
#define ALLOC_ARRAY(N,Type,S) (Type *)TecAlloc((N)*sizeof(Type))
|
||
|
#define FREE_ARRAY(N,S) TecFree((void *)N)
|
||
|
#include "ARRLIST.h"
|
||
|
#include "STRLIST.h"
|
||
|
#include "DATAUTIL.h"
|
||
|
|
||
|
/*
|
||
|
#include "TECADDON.h"
|
||
|
#include "TECXXX.h"
|
||
|
#include "DATAUTIL.h"
|
||
|
#include "STRLIST.h"
|
||
|
*/
|
||
|
|
||
|
#define READTEC ReadTec
|
||
|
#define SHOWINFO(S) printf("%s",S);
|
||
|
#define ERRMSG(S) printf("Err: %s\n",S);
|
||
|
#define STRINGLISTGETSTRING(S,N) StringListGetString(S,(N)-1)
|
||
|
#define STRINGLISTGETCOUNT(S) StringListCount(S)
|
||
|
#define STRINGLISTDEALLOC(S) StringListDealloc(S)
|
||
|
#define MaxCharsUserRec 500
|
||
|
#endif
|
||
|
|
||
|
|
||
|
static int GetNumPtsPerCell(ZoneType_e ZoneType)
|
||
|
{
|
||
|
int NumPts = 0;
|
||
|
switch (ZoneType)
|
||
|
{
|
||
|
case ZoneType_FETriangle : NumPts = 3; break;
|
||
|
case ZoneType_FEQuad : NumPts = 4; break;
|
||
|
case ZoneType_FETetra : NumPts = 4; break;
|
||
|
case ZoneType_FEBrick : NumPts = 8; break;
|
||
|
default : NumPts = 0;
|
||
|
}
|
||
|
return (NumPts);
|
||
|
}
|
||
|
|
||
|
static int GetNumPts(ZoneType_e ZoneType,
|
||
|
LgIndex_t NumPtsI,
|
||
|
LgIndex_t NumPtsJ,
|
||
|
LgIndex_t NumPtsK)
|
||
|
{
|
||
|
int NumPts = 0;
|
||
|
switch (ZoneType)
|
||
|
{
|
||
|
case ZoneType_FETriangle :
|
||
|
case ZoneType_FEQuad :
|
||
|
case ZoneType_FETetra :
|
||
|
case ZoneType_FEBrick :
|
||
|
case ZoneType_FEPolygon :
|
||
|
case ZoneType_FEPolyhedron: NumPts = NumPtsI; break;
|
||
|
default : NumPts = NumPtsI*NumPtsJ*NumPtsK;
|
||
|
}
|
||
|
return (NumPts);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
static void DeallocHeaderInfo(char **DataSetTitle,
|
||
|
StringList_pa *VarNames,
|
||
|
StringList_pa *ZoneNames,
|
||
|
LgIndex_t **NumPtsI,
|
||
|
LgIndex_t **NumPtsJ,
|
||
|
LgIndex_t **NumPtsK,
|
||
|
ZoneType_e **ZoneType,
|
||
|
StringList_pa *UserRec)
|
||
|
{
|
||
|
if (*DataSetTitle)
|
||
|
FREE_ARRAY(*DataSetTitle, "data set title");
|
||
|
if (*VarNames)
|
||
|
STRINGLISTDEALLOC(VarNames);
|
||
|
if (*ZoneNames)
|
||
|
STRINGLISTDEALLOC(ZoneNames);
|
||
|
if (*NumPtsI)
|
||
|
FREE_ARRAY(*NumPtsI, "NumPtsI Array");
|
||
|
if (*NumPtsJ)
|
||
|
FREE_ARRAY(*NumPtsJ, "NumPtsJ Array");
|
||
|
if (*NumPtsK)
|
||
|
FREE_ARRAY(*NumPtsK, "NumPtsK Array");
|
||
|
if (*ZoneType)
|
||
|
FREE_ARRAY(*ZoneType, "ZoneType Array");
|
||
|
if (*UserRec)
|
||
|
STRINGLISTDEALLOC(UserRec);
|
||
|
|
||
|
*DataSetTitle = NULL;
|
||
|
*VarNames = NULL;
|
||
|
*ZoneNames = NULL;
|
||
|
*NumPtsI = NULL;
|
||
|
*NumPtsJ = NULL;
|
||
|
*NumPtsK = NULL;
|
||
|
*ZoneType = NULL;
|
||
|
*UserRec = NULL;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#define MAXCHARSINFOLINE 5000
|
||
|
|
||
|
|
||
|
void ReportFileInfo(char *FName,
|
||
|
Boolean_t LoadRawData,
|
||
|
Boolean_t AllocateRawDataSpaceLocally)
|
||
|
{
|
||
|
short IVersion;
|
||
|
EntIndex_t NumZones;
|
||
|
EntIndex_t NumVars;
|
||
|
char *DataSetTitle = NULL;
|
||
|
StringList_pa VarNames = NULL;
|
||
|
StringList_pa ZoneNames = NULL;
|
||
|
LgIndex_t *NumPtsI = NULL;
|
||
|
LgIndex_t *NumPtsJ = NULL;
|
||
|
LgIndex_t *NumPtsK = NULL;
|
||
|
ZoneType_e *ZoneType = NULL;
|
||
|
StringList_pa UserRec = NULL;
|
||
|
int CZ, CV;
|
||
|
char InfoLine[MAXCHARSINFOLINE+1];
|
||
|
double **VDataBase = NULL;
|
||
|
NodeMap_t **NodeMap = NULL;
|
||
|
|
||
|
/*
|
||
|
* Load in the header information only.
|
||
|
*/
|
||
|
|
||
|
if (!READTEC(TRUE,
|
||
|
FName,
|
||
|
&IVersion,
|
||
|
&DataSetTitle,
|
||
|
&NumZones,
|
||
|
&NumVars,
|
||
|
&VarNames,
|
||
|
&ZoneNames,
|
||
|
&NumPtsI,
|
||
|
&NumPtsJ,
|
||
|
&NumPtsK,
|
||
|
&ZoneType,
|
||
|
&UserRec,
|
||
|
FALSE,
|
||
|
(NodeMap_t ***)NULL,
|
||
|
(double ***)NULL))
|
||
|
{
|
||
|
sprintf(InfoLine, "Cannot read file \"%s\"\nor file is not a Tecplot binary data file.\n", FName);
|
||
|
ERRMSG(InfoLine);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Boolean_t IsOk = TRUE;
|
||
|
if (LoadRawData)
|
||
|
{
|
||
|
if (AllocateRawDataSpaceLocally)
|
||
|
{
|
||
|
int NumPts;
|
||
|
VDataBase = ALLOC_ARRAY(NumZones * NumVars, double *, "vdatabase array");
|
||
|
for (CZ = 0; CZ < NumZones; CZ++)
|
||
|
for (CV = 0; CV < NumVars; CV++)
|
||
|
{
|
||
|
NumPts = GetNumPts(ZoneType[CZ], NumPtsI[CZ], NumPtsJ[CZ], NumPtsK[CZ]);
|
||
|
if (NumPts >= 1)
|
||
|
VDataBase[CZ*NumVars+CV] = ALLOC_ARRAY(NumPts, double, "vdatabase array");
|
||
|
else
|
||
|
VDataBase[CZ*NumVars+CV] = NULL;
|
||
|
}
|
||
|
|
||
|
NodeMap = ALLOC_ARRAY(NumZones, NodeMap_t *, "nodemap array");
|
||
|
for (CZ = 0; CZ < NumZones; CZ++)
|
||
|
{
|
||
|
if (ZoneType[CZ] == ZoneType_Ordered)
|
||
|
NodeMap[CZ] = NULL;
|
||
|
else
|
||
|
{
|
||
|
int PtsPerCell = GetNumPtsPerCell(ZoneType[CZ]);
|
||
|
NodeMap[CZ] = ALLOC_ARRAY(PtsPerCell * NumPtsJ[CZ],
|
||
|
NodeMap_t, "zone nodemap");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
VDataBase = NULL;
|
||
|
NodeMap = NULL;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* NOTE: If any of the above alloc's failed then no big deal. ReadTec
|
||
|
* itself "skips" vars if memory was not allocated for it.
|
||
|
*/
|
||
|
|
||
|
DeallocHeaderInfo(&DataSetTitle,
|
||
|
&VarNames,
|
||
|
&ZoneNames,
|
||
|
&NumPtsI,
|
||
|
&NumPtsJ,
|
||
|
&NumPtsK,
|
||
|
&ZoneType,
|
||
|
&UserRec);
|
||
|
|
||
|
/*
|
||
|
* Reread the datafile. This time load in the header AND the raw data
|
||
|
* Note that VDataBase may be preallocated or may be left up to ReadTec
|
||
|
* to allocate (See AllocateRawDataSpaceLocally above).
|
||
|
*/
|
||
|
if (!READTEC(FALSE,
|
||
|
FName,
|
||
|
&IVersion,
|
||
|
&DataSetTitle,
|
||
|
&NumZones,
|
||
|
&NumVars,
|
||
|
&VarNames,
|
||
|
&ZoneNames,
|
||
|
&NumPtsI,
|
||
|
&NumPtsJ,
|
||
|
&NumPtsK,
|
||
|
&ZoneType,
|
||
|
&UserRec,
|
||
|
AllocateRawDataSpaceLocally,
|
||
|
&NodeMap,
|
||
|
&VDataBase))
|
||
|
{
|
||
|
if (IVersion > 99)
|
||
|
{
|
||
|
sprintf(InfoLine,
|
||
|
"Error: ***\n"
|
||
|
" This add-on can only display raw nodal data\n"
|
||
|
" and it appears to contain cell centered data.\n");
|
||
|
SHOWINFO(InfoLine);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprintf(InfoLine,
|
||
|
"Cannot Read File, %s.\n"
|
||
|
"File may not be a tecplot binary data file.",
|
||
|
FName);
|
||
|
ERRMSG(InfoLine);
|
||
|
}
|
||
|
IsOk = FALSE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
SHOWINFO("\n");
|
||
|
sprintf(InfoLine, "FileName : %s\n", FName);
|
||
|
SHOWINFO(InfoLine);
|
||
|
sprintf(InfoLine, "File Version: %3.1f\n", IVersion / 10.0);
|
||
|
SHOWINFO(InfoLine);
|
||
|
|
||
|
/* if the file contains filetype, then retrieve that separately since ReadTec should not be changed */
|
||
|
if (IVersion >= 109)
|
||
|
{
|
||
|
DataFileType_e FileType = DataFileType_Full;
|
||
|
char FileTypeStr[32];
|
||
|
FILE *F = NULL;
|
||
|
|
||
|
/* open the file and get the filetype */
|
||
|
F = fopen(FName, "rb");
|
||
|
if (F)
|
||
|
{
|
||
|
char Buffer[8];
|
||
|
Int32_t One;
|
||
|
Int32_t FileTypeInt;
|
||
|
|
||
|
/* 8 bytes for magic# and version and 4 bytes for Int32 */
|
||
|
fread(Buffer, sizeof(Buffer[0]), 8, F);
|
||
|
fread(&One, sizeof(One), 1, F);
|
||
|
fread(&FileTypeInt, sizeof(FileTypeInt), 1, F);
|
||
|
FileType = (DataFileType_e)FileTypeInt;
|
||
|
fclose(F);
|
||
|
F = NULL;
|
||
|
}
|
||
|
/* map the filetype */
|
||
|
switch (FileType)
|
||
|
{
|
||
|
case DataFileType_Full:
|
||
|
strcpy(FileTypeStr, "Full");
|
||
|
break;
|
||
|
case DataFileType_Grid:
|
||
|
strcpy(FileTypeStr, "Grid");
|
||
|
break;
|
||
|
case DataFileType_Solution:
|
||
|
strcpy(FileTypeStr, "Solution");
|
||
|
break;
|
||
|
default:
|
||
|
IsOk = FALSE;
|
||
|
CHECK(FALSE);
|
||
|
break;
|
||
|
}
|
||
|
sprintf(InfoLine, "File Type : %s\n", FileTypeStr);
|
||
|
SHOWINFO(InfoLine);
|
||
|
}
|
||
|
|
||
|
sprintf(InfoLine, "DataSetTitle: %s\n", DataSetTitle ? DataSetTitle : " ");
|
||
|
SHOWINFO(InfoLine);
|
||
|
sprintf(InfoLine, "NumZones : %d\n", (int)NumZones);
|
||
|
SHOWINFO(InfoLine);
|
||
|
sprintf(InfoLine, "NumVars : %d\n", (int)NumVars);
|
||
|
SHOWINFO(InfoLine);
|
||
|
if (IsOk && (NumZones > 0))
|
||
|
{
|
||
|
SHOWINFO("Var Names : ");
|
||
|
for (CZ = 0; CZ < NumVars; CZ++)
|
||
|
{
|
||
|
char *VarName = STRINGLISTGETSTRING(VarNames, CZ + 1);
|
||
|
sprintf(InfoLine, "%s", VarName ? VarName : "NULL");
|
||
|
if (CZ < NumVars - 1)
|
||
|
strcat(InfoLine, ",");
|
||
|
else
|
||
|
strcat(InfoLine, "\n\n");
|
||
|
SHOWINFO(InfoLine);
|
||
|
if (VarName)
|
||
|
FREE_ARRAY(VarName, "VarName array");
|
||
|
}
|
||
|
SHOWINFO("ZoneName IMax JMax KMax Node Face Elmt EType\n");
|
||
|
SHOWINFO("-------------------------------------------------------------------------------\n");
|
||
|
|
||
|
for (CZ = 0; CZ < NumZones; CZ++)
|
||
|
{
|
||
|
char *ZoneName = STRINGLISTGETSTRING(ZoneNames, CZ + 1);
|
||
|
if (ZoneType[CZ] != ZoneType_Ordered)
|
||
|
{
|
||
|
if (ZoneType[CZ] == ZoneType_FEPolygon ||
|
||
|
ZoneType[CZ] == ZoneType_FEPolyhedron)
|
||
|
sprintf(InfoLine, "%-20s --- --- --- %-8ld %-8ld %-8ld ",
|
||
|
(ZoneName ? ZoneName : "NULL"),
|
||
|
(long)NumPtsI[CZ],
|
||
|
(long)NumPtsK[CZ],
|
||
|
(long)NumPtsJ[CZ]);
|
||
|
else
|
||
|
sprintf(InfoLine, "%-20s --- --- --- %-8ld --- %-8ld ",
|
||
|
(ZoneName ? ZoneName : "NULL"),
|
||
|
(long)NumPtsI[CZ],
|
||
|
(long)NumPtsJ[CZ]);
|
||
|
SHOWINFO(InfoLine);
|
||
|
switch (ZoneType[CZ])
|
||
|
{
|
||
|
case ZoneType_FETriangle : SHOWINFO("Tri\n"); break;
|
||
|
case ZoneType_FEQuad : SHOWINFO("Quad\n"); break;
|
||
|
case ZoneType_FETetra : SHOWINFO("Tetra\n"); break;
|
||
|
case ZoneType_FEBrick : SHOWINFO("Brick\n"); break;
|
||
|
case ZoneType_FELineSeg : SHOWINFO("LineSeg\n"); break;
|
||
|
case ZoneType_FEPolygon : SHOWINFO("Polygon\n"); break;
|
||
|
case ZoneType_FEPolyhedron: SHOWINFO("Polyhed\n"); break;
|
||
|
default: CHECK(FALSE); break;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprintf(InfoLine, "%-20s %-7ld %-7ld %-7ld --- --- --- ---\n",
|
||
|
(ZoneName ? ZoneName : "NULL"),
|
||
|
(long)NumPtsI[CZ],
|
||
|
(long)NumPtsJ[CZ],
|
||
|
(long)NumPtsK[CZ]);
|
||
|
SHOWINFO(InfoLine);
|
||
|
}
|
||
|
if (ZoneName)
|
||
|
FREE_ARRAY(ZoneName, "ZoneName Array");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (IsOk)
|
||
|
{
|
||
|
for (CZ = 1; CZ <= STRINGLISTGETCOUNT(UserRec); CZ++)
|
||
|
{
|
||
|
char *S = STRINGLISTGETSTRING(UserRec, CZ);
|
||
|
if (S)
|
||
|
{
|
||
|
int L;
|
||
|
strcpy(InfoLine, "UserRec: ");
|
||
|
L = (int)strlen(InfoLine);
|
||
|
strncat(&InfoLine[L], S, MAXCHARSINFOLINE - L - 2);
|
||
|
strcat(&InfoLine[strlen(InfoLine)], "\n");
|
||
|
SHOWINFO(InfoLine);
|
||
|
FREE_ARRAY(S, "temp string");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
if (LoadRawData)
|
||
|
{
|
||
|
for (CZ = 0; CZ < NumZones; CZ++)
|
||
|
{
|
||
|
int CV;
|
||
|
for (CV = 0; CV < NumVars; CV++)
|
||
|
if (VDataBase[CZ*NumVars+CV])
|
||
|
{
|
||
|
int I;
|
||
|
int NumPts = GetNumPts(ZoneType[CZ], NumPtsI[CZ], NumPtsJ[CZ], NumPtsK[CZ]);
|
||
|
int SLen = 0;
|
||
|
sprintf(InfoLine, "\n\nVariable data for zone %d, Var %d\n", CZ + 1, CV + 1);
|
||
|
SHOWINFO(InfoLine);
|
||
|
InfoLine[0] = '\0';
|
||
|
for (I = 0; I < NumPts; I++)
|
||
|
{
|
||
|
char PString[50];
|
||
|
if (SLen + 50 > MAXCHARSINFOLINE)
|
||
|
{
|
||
|
SHOWINFO(InfoLine);
|
||
|
InfoLine[0] = '\0';
|
||
|
SLen = 0;
|
||
|
}
|
||
|
|
||
|
sprintf(PString, "%lG ", VDataBase[CZ*NumVars+CV][I]);
|
||
|
strcat(InfoLine, PString);
|
||
|
SLen += (int)strlen(PString);
|
||
|
|
||
|
if ((I % 5) == 4)
|
||
|
{
|
||
|
strcat(InfoLine, "\n");
|
||
|
SLen++;
|
||
|
}
|
||
|
}
|
||
|
if (*InfoLine)
|
||
|
SHOWINFO(InfoLine);
|
||
|
FREE_ARRAY(VDataBase[CZ*NumVars+CV], "vdatabase double");
|
||
|
}
|
||
|
if (NodeMap[CZ])
|
||
|
{
|
||
|
int I, J;
|
||
|
int PtsPerCell = GetNumPtsPerCell(ZoneType[CZ]);
|
||
|
int SLen = 0;
|
||
|
SHOWINFO("\nConnectivity list:\n");
|
||
|
InfoLine[0] = '\0';
|
||
|
for (J = 0; J < NumPtsJ[CZ]; J++)
|
||
|
{
|
||
|
if (SLen + 200 > MAXCHARSINFOLINE)
|
||
|
{
|
||
|
SHOWINFO(InfoLine);
|
||
|
InfoLine[0] = '\0';
|
||
|
SLen = 0;
|
||
|
}
|
||
|
for (I = 0; I < PtsPerCell; I++)
|
||
|
{
|
||
|
char NString[20];
|
||
|
sprintf(NString, "%u ", (unsigned int)NodeMap[CZ][J*PtsPerCell+I] + 1);
|
||
|
strcat(InfoLine, NString);
|
||
|
SLen += (int)strlen(NString);
|
||
|
}
|
||
|
strcat(InfoLine, "\n");
|
||
|
SLen++;
|
||
|
}
|
||
|
if (*InfoLine)
|
||
|
SHOWINFO(InfoLine);
|
||
|
FREE_ARRAY(NodeMap[CZ], "nodemap");
|
||
|
}
|
||
|
}
|
||
|
FREE_ARRAY(NodeMap, "Nodemap base array");
|
||
|
FREE_ARRAY(VDataBase, "vdatabase base array");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
SHOWINFO("\n\n");
|
||
|
|
||
|
DeallocHeaderInfo(&DataSetTitle,
|
||
|
&VarNames,
|
||
|
&ZoneNames,
|
||
|
&NumPtsI,
|
||
|
&NumPtsJ,
|
||
|
&NumPtsK,
|
||
|
&ZoneType,
|
||
|
&UserRec);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#if !defined ADDON
|
||
|
int main(int argc, char *(argv[]))
|
||
|
{
|
||
|
short CurFile;
|
||
|
|
||
|
if (argc == 1)
|
||
|
{
|
||
|
printf("Err: Need: pltview file1 [file2] ...\n");
|
||
|
exit(-1);
|
||
|
}
|
||
|
|
||
|
for (CurFile = 1; CurFile < argc; CurFile++)
|
||
|
ReportFileInfo(argv[CurFile], FALSE, FALSE);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
#endif
|