Ignore:
Timestamp:
Jul 10, 2005, 11:22:30 PM (19 years ago)
Author:
darran
Message:
  • working towards functional playback of .swm files
  • not quite there yet ... still need to reconstitute the StateList?.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Swollen/swollen/customargumentparser.cpp

    r120 r121  
    11
    22#include "customargumentparser.h"
     3#include <fstream>
     4#include <iostream>
     5
     6
     7#define MAX_LINE_LENGTH 200
    38
    49using namespace osg;
     
    712CustomArgumentParser::CustomArgumentParser(int* argc, char **argv) : ArgumentParser(argc, argv)
    813{
     14
     15   // last argument is either .sww or .swm filename
     16   _filename = new std::string(argv[*argc-1]);
     17
     18   // ends in .swm?
     19   if( _filename->substr(_filename->size()-4,4).find(".swm",0) != -1 ) 
     20   {
     21      _isswm = true;
     22
     23      // attempt to open the macro file ...
     24      std::fstream f;
     25      f.open( _filename->c_str(), std::fstream::in );
     26      if( f.is_open() )
     27      {
     28         char str[MAX_LINE_LENGTH];
     29
     30         // FIXME: verify this really is the SWM header ...
     31         f.getline(str,MAX_LINE_LENGTH);
     32
     33         // read the stored argc count
     34         f.getline(str,MAX_LINE_LENGTH);
     35         sscanf( str, "# SWM CLP %d", &_nargs );
     36
     37         // we will modify the argv array to include the original
     38         // argv[1] ... argv[argc-1] (ie., ignore the final argument which is the swm
     39         // filename) extended by the stored arguments contained in the macro file.
     40         char** newargv = new char*[*argc-1+_nargs];
     41
     42         // current command line params (sans last entry, the .swm file)
     43         for( int i=0; i<*argc-1; i++ )
     44            newargv[i] = argv[i];
     45
     46         // now fill in the stored argv[] from the macro file
     47         for( int i=0; i<_nargs; i++ )
     48         {
     49            f.getline(str,MAX_LINE_LENGTH);
     50            char *s = new char[strlen(str)+1];
     51            strcpy(s,str);
     52            newargv[*argc-1+i] = s;
     53         }
     54
     55         // change baseclass private members to the extended argc/argv
     56         *_argc = *argc - 1 + _nargs;
     57         _argv = newargv;
     58
     59
     60         std::cout << "Modified argument list based on SWM contents" << std::endl;
     61         for( int i=0; i<*_argc; i++ )
     62            std::cout << "    " << i << ":  " << _argv[i] << std::endl;
     63
     64      }
     65      f.close();
     66
     67   }
     68
     69   else
     70
     71   {
     72      _isswm = false;
     73
     74      // local copies of current argc, argv[] as we may have to save them on '3' save.
     75      // note that we don't save argv[0] which is the program name.
     76      _nargs = *argc - 1;
     77      for( int i=1; i<*argc; i++ )
     78         _vargs.push_back( std::string(argv[i]) );
     79   }
     80
    981}
     82
     83
     84void CustomArgumentParser::write(std::ostream& s)
     85{
     86   s << "# SWM CLP " << _nargs << std::endl;
     87
     88   for( int i=0; i < _nargs; i++ )
     89      s << _vargs[i] << std::endl;
     90
     91}
Note: See TracChangeset for help on using the changeset viewer.