00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "lwoSurfaceBlockHeader.h"
00020 #include "lwoInputFile.h"
00021 #include "lwoSurfaceBlockChannel.h"
00022 #include "lwoSurfaceBlockEnabled.h"
00023 #include "lwoSurfaceBlockOpacity.h"
00024 #include "lwoSurfaceBlockAxis.h"
00025
00026 #include "dcast.h"
00027 #include "indent.h"
00028
00029 TypeHandle LwoSurfaceBlockHeader::_type_handle;
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 bool LwoSurfaceBlockHeader::
00042 read_iff(IffInputFile *in, size_t stop_at) {
00043 LwoInputFile *lin = DCAST(LwoInputFile, in);
00044
00045 _ordinal = lin->get_string();
00046 read_subchunks_iff(lin, stop_at);
00047
00048 return true;
00049 }
00050
00051
00052
00053
00054
00055
00056 void LwoSurfaceBlockHeader::
00057 write(ostream &out, int indent_level) const {
00058 indent(out, indent_level)
00059 << get_id() << " {\n";
00060 indent(out, indent_level + 2)
00061 << "ordinal = 0x" << hex << setfill('0');
00062
00063 string::const_iterator si;
00064 for (si = _ordinal.begin(); si != _ordinal.end(); ++si) {
00065 out << setw(2) << (int)(unsigned char)(*si);
00066 }
00067
00068 out << dec << setfill(' ') << "\n";
00069
00070 write_chunks(out, indent_level + 2);
00071 indent(out, indent_level)
00072 << "}\n";
00073 }
00074
00075
00076
00077
00078
00079
00080
00081
00082 IffChunk *LwoSurfaceBlockHeader::
00083 make_new_chunk(IffInputFile *in, IffId id) {
00084 if (id == IffId("CHAN")) {
00085 return new LwoSurfaceBlockChannel;
00086
00087 } else if (id == IffId("ENAB")) {
00088 return new LwoSurfaceBlockEnabled;
00089
00090 } else if (id == IffId("OPAC")) {
00091 return new LwoSurfaceBlockOpacity;
00092
00093 } else if (id == IffId("AXIS")) {
00094 return new LwoSurfaceBlockAxis;
00095
00096 } else {
00097 return IffChunk::make_new_chunk(in, id);
00098 }
00099 }
00100