Figure 4: ParseCmdline member function of CConsoleApp (from conapp.cpp)

void CConsoleApp::ParseCmdline() {
   LPTSTR pCmd = GetCommandLine();
   tstring cmdline = pCmd;
   tstring cmdarg;
   bool bFirstArg = true;

   tstring::size_type pos = 0;
   tstring::size_type pos_start = 0;
   tstring::size_type pos_end = cmdline.size();
    
   while( pos < pos_end ) {
      if ( cmdline[pos] == _T(' ') || 
         cmdline[pos] == _T('\t')  ) {
         cmdarg = cmdline.substr( pos_start, pos-pos_start );

         if ( bFirstArg ) bFirstArg = false;
         else AddToArglist( cmdarg );

         pos = pos_start = SkipWhitespace( cmdline, pos );
         continue;
      }

      else if ( cmdline[pos] == _T('\"') ) {
         tstring::size_type look_ahead;
         look_ahead = cmdline.find_first_of( _T("\""), pos+1 );
         if ( look_ahead != tstring::npos && !bFirstArg ) {
            cmdarg = cmdline.substr( pos_start, 
                        look_ahead-pos_start+1 );
            AddToArglist( cmdarg );
            pos = pos_start = SkipWhitespace( cmdline, 
                                 ++look_ahead );
            continue;
         }
      }

      pos++;
   }

   if ( pos > pos_start && !bFirstArg ) {
      cmdarg = cmdline.substr( pos_start, pos-pos_start );
      AddToArglist( cmdarg );
   }
}