00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#ifndef COIN_SOINPUT_H
00021
#define COIN_SOINPUT_H
00022
00023
#include <Inventor/system/inttypes.h>
00024
#include <Inventor/SbBasic.h>
00025
#include <Inventor/SbDict.h>
00026
#include <Inventor/lists/SbList.h>
00027
#include <stdio.h>
00028
#ifndef COIN_INTERNAL
00029
00030
#include <Inventor/SoDB.h>
00031
#endif // COIN_INTERNAL
00032
00033
class SoBase;
00034
class SbString;
00035
class SbTime;
00036
class SbName;
00037
class SbStringList;
00038
class SoInput_FileInfo;
00039
00040
00041 class COIN_DLL_API SoInput {
00042
public:
00043 SoInput(
void);
00044 SoInput(SoInput * dictIn);
00045
virtual ~SoInput(
void);
00046
00047
virtual void setFilePointer(FILE * newFP);
00048
virtual SbBool openFile(
const char * fileName, SbBool okIfNotFound = FALSE);
00049
virtual SbBool pushFile(
const char * fileName);
00050
virtual void closeFile(
void);
00051
virtual SbBool isValidFile(
void);
00052
virtual SbBool isValidBuffer(
void);
00053
virtual FILE * getCurFile(
void)
const;
00054
virtual const char * getCurFileName(
void)
const;
00055
virtual void setBuffer(
void * bufpointer, size_t bufsize);
00056
virtual size_t getNumBytesRead(
void)
const;
00057
virtual SbString getHeader(
void);
00058
virtual float getIVVersion(
void);
00059
virtual SbBool isBinary(
void);
00060
00061
virtual SbBool get(
char & c);
00062
virtual SbBool getASCIIBuffer(
char & c);
00063
virtual SbBool getASCIIFile(
char & c);
00064
virtual SbBool readHex(uint32_t & l);
00065
virtual SbBool read(
char & c);
00066
virtual SbBool read(
char & c, SbBool skip);
00067
virtual SbBool read(
SbString & s);
00068
virtual SbBool read(
SbName & n, SbBool validIdent = FALSE);
00069
virtual SbBool read(
int & i);
00070
virtual SbBool read(
unsigned int & i);
00071
virtual SbBool read(
short & s);
00072
virtual SbBool read(
unsigned short & s);
00073
virtual SbBool read(
float & f);
00074
virtual SbBool read(
double & d);
00075
virtual SbBool readBinaryArray(
unsigned char * c,
int length);
00076
virtual SbBool readBinaryArray(int32_t * l,
int length);
00077
virtual SbBool readBinaryArray(
float * f,
int length);
00078
virtual SbBool readBinaryArray(
double * d,
int length);
00079
virtual SbBool eof(
void)
const;
00080
00081 SbBool isFileVRML1(
void);
00082 SbBool isFileVRML2(
void);
00083
virtual void resetFilePointer(FILE * fptr);
00084
00085
virtual void getLocationString(
SbString & string)
const;
00086
virtual void putBack(
const char c);
00087
virtual void putBack(
const char * str);
00088
virtual void addReference(
const SbName & name,
SoBase * base,
00089 SbBool addToGlobalDict = TRUE);
00090
virtual void removeReference(
const SbName & name);
00091
virtual SoBase * findReference(
const SbName & name)
const;
00092
00093
static void addDirectoryFirst(
const char * dirName);
00094
static void addDirectoryLast(
const char * dirName);
00095
static void addEnvDirectoriesFirst(
const char * envVarName,
00096
const char * separator =
":\t ");
00097
static void addEnvDirectoriesLast(
const char * envVarName,
00098
const char * separator =
":\t ");
00099
static void removeDirectory(
const char * dirName);
00100
static void clearDirectories(
void);
00101
static const SbStringList & getDirectories(
void);
00102
00103
static void init(
void);
00104
00105
static SbString getPathname(
const char *
const filename);
00106
static SbString getPathname(
const SbString & s);
00107
static SbString getBasename(
const char *
const filename);
00108
static SbString getBasename(
const SbString & s);
00109
00110
static SbString searchForFile(
const SbString & basename,
00111
const SbStringList & directories,
00112
const SbStringList & subdirectories);
00113
00114
00115
protected:
00116
virtual SbBool popFile(
void);
00117
void setIVVersion(
float version);
00118 FILE * findFile(
const char * fileName,
SbString & fullName);
00119
void initFile(FILE * newFP,
const char * fileName,
SbString * fullName,
00120 SbBool openedHere,
SbDict * refDict = (
SbDict *) NULL);
00121 SbBool checkHeader(SbBool bValidateBufferHeader = FALSE);
00122 SbBool fromBuffer(
void)
const;
00123 SbBool skipWhiteSpace(
void);
00124 size_t freeBytesInBuf(
void)
const;
00125 SbBool readInteger(int32_t & l);
00126 SbBool readUnsignedInteger(uint32_t & l);
00127 SbBool readReal(
double & d);
00128 SbBool readUnsignedIntegerString(
char * str);
00129
int readDigits(
char * str);
00130
int readHexDigits(
char * str);
00131
int readChar(
char * str,
char charToRead);
00132
00133 SbBool makeRoomInBuf(size_t nBytes);
00134
void convertShort(
char * from,
short * s);
00135
void convertInt32(
char * from, int32_t * l);
00136
void convertFloat(
char * from,
float * f);
00137
void convertDouble(
char * from,
double * d);
00138
void convertShortArray(
char * from,
short * to,
int len);
00139
void convertInt32Array(
char * from, int32_t * to,
int len);
00140
void convertFloatArray(
char * from,
float * to,
int len);
00141
void convertDoubleArray(
char * from,
double * to,
int len);
00142 SbBool isFileURL(
const char * url);
00143
char * URLToFile(
char * out_buf,
const char * in_buf);
00144 SbBool IsURL(
const char * c_strng);
00145
00146
static void setDirectories(
SbStringList * dirs);
00147
00148
private:
00149
friend class SoDB;
00150
00151
static void clean(
void);
00152
void constructorsCommon(
void);
00153
00154
static void addDirectoryIdx(
const int idx,
const char * dirName);
00155
static void addEnvDirectoriesIdx(
int startidx,
const char * envVarName,
00156
const char * separator);
00157
static SbStringList * dirsearchlist;
00158
00159
SbList<SoInput_FileInfo *> filestack;
00160 SoInput_FileInfo * getTopOfStack(
void)
const;
00161
00162 SbDict refdict;
00163 };
00164
00165
#endif // !COIN_SOINPUT_H