/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2003 Robert Osfield * * This application is open source and may be redistributed and/or modified * freely and without restriction, both in commericial and non commericial applications, * as long as this copyright notice is maintained. * * This application is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include #include #include #include template > class proxy_basic_streambuf : public std::basic_streambuf<_CharT, _Traits> { public: typedef _CharT char_type; typedef _Traits traits_type; typedef typename traits_type::int_type int_type; typedef typename traits_type::pos_type pos_type; typedef typename traits_type::off_type off_type; proxy_basic_streambuf(unsigned int numChars): _numChars(numChars) {} /// Destructor deallocates no buffer space. virtual ~proxy_basic_streambuf() {} unsigned int _numChars; protected: virtual int_type overflow (int_type __c = traits_type::eof()) { if (_numChars==0) { putchar('E'); return traits_type::eof(); } if (__c == traits_type::eof()) return '\n'; traits_type::not_eof(__c); //putchar(''); --_numChars; return putchar(__c); } }; typedef proxy_basic_streambuf proxy_streambuf; int main( int argc, char **argv ) { std::ifstream fin("GNUmakefile"); std::istream& ins = fin; proxy_streambuf mystreambuf(100); std::cout.rdbuf(&mystreambuf); while (!fin.eof()) { std::cout.put(fin.get()); } std::cout<<"Exiting normally "<setApplicationName(arguments.getApplicationName()); arguments.getApplicationUsage()->setDescription(arguments.getApplicationName()+" is the standard OpenSceneGraph example which loads and visualises 3d models."); arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] filename ..."); // create DataSet. osgDB::Archive::Status status; // if user request help write it out to cout. if (arguments.read("-h") || arguments.read("--help")) { arguments.getApplicationUsage()->write(std::cout); return 1; } std::string archiveFilename; while (arguments.read("-a",archiveFilename) || arguments.read("--archive",archiveFilename)) { } bool insert = false; while (arguments.read("-i") || arguments.read("--insert")) { insert = true; } bool extract = false; while (arguments.read("-e") || arguments.read("--extract")) { extract = true; } bool list = false; while (arguments.read("-l") || arguments.read("--list")) { list = true; } typedef std::vector FileNameList; FileNameList files; for(int pos=1;pos obj = osgDB::readObjectFile(*itr); if (obj.valid()) { archive.writeObject(*obj, *itr); } } } else { archive.open(archiveFilename,osgDB::Archive::READ); if (extract) { for (FileNameList::iterator itr=files.begin(); itr!=files.end(); ++itr) { osgDB::ReaderWriter::ReadResult result = archive.readObject(*itr); osg::ref_ptr obj = result.getObject(); if (obj.valid()) { if (obj.valid()) osgDB::writeObjectFile(*obj, *itr); } } } } if (list) { std::cout<<"List of files in archive:"<first<<"\t"<second<