106 lines
3.1 KiB
C++
106 lines
3.1 KiB
C++
// Filename: interrogate_datafile.cxx
|
|
// Created by: drose (09Aug00)
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
// PANDA 3D SOFTWARE
|
|
// Copyright (c) 2001, Disney Enterprises, Inc. All rights reserved
|
|
//
|
|
// All use of this software is subject to the terms of the Panda 3d
|
|
// Software license. You should have received a copy of this license
|
|
// along with this source code; you will also find a current copy of
|
|
// the license at http://www.panda3d.org/license.txt .
|
|
//
|
|
// To contact the maintainers of this program write to
|
|
// panda3d@yahoogroups.com .
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
#include "interrogate_datafile.h"
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: idf_output_string
|
|
// Description: Writes the indicated string to the output file. Uses
|
|
// the given whitespace character to separate the
|
|
// string's length and its contents.
|
|
////////////////////////////////////////////////////////////////////
|
|
void
|
|
idf_output_string(ostream &out, const string &str, char whitespace) {
|
|
out << str.length() << whitespace;
|
|
if (!str.empty()) {
|
|
out << str << whitespace;
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: idf_input_string
|
|
// Description: Reads the given string from the input file, as
|
|
// previously written by output_string().
|
|
////////////////////////////////////////////////////////////////////
|
|
void
|
|
idf_input_string(istream &in, string &str) {
|
|
int length;
|
|
in >> length;
|
|
if (in.fail()) {
|
|
return;
|
|
}
|
|
|
|
// Skip one character of whitespace, and then read the string.
|
|
in.get();
|
|
str = "";
|
|
while (length > 0) {
|
|
str += in.get();
|
|
length--;
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: idf_output_string
|
|
// Description: Writes the indicated string to the output file. Uses
|
|
// the given whitespace character to separate the
|
|
// string's length and its contents.
|
|
////////////////////////////////////////////////////////////////////
|
|
void
|
|
idf_output_string(ostream &out, const char *str, char whitespace) {
|
|
if (str == (const char *)NULL) {
|
|
out << "0 ";
|
|
} else {
|
|
out << strlen(str) << whitespace;
|
|
if (str[0] != '\0') {
|
|
out << str << whitespace;
|
|
}
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: idf_input_string
|
|
// Description: Reads the given string from the input file, as
|
|
// previously written by output_string().
|
|
////////////////////////////////////////////////////////////////////
|
|
void
|
|
idf_input_string(istream &in, const char *&str) {
|
|
int length;
|
|
in >> length;
|
|
if (in.fail()) {
|
|
return;
|
|
}
|
|
|
|
if (length == 0) {
|
|
// Don't change the string if the input length is zero.
|
|
return;
|
|
}
|
|
|
|
// Skip one character of whitespace, and then read the string.
|
|
in.get();
|
|
char *readstr = new char[length + 1];
|
|
int p = 0;
|
|
while (p < length) {
|
|
readstr[p] = in.get();
|
|
p++;
|
|
}
|
|
readstr[p] = '\0';
|
|
|
|
str = readstr;
|
|
}
|