Beispiel #1
0
//-------------------------------------
// helper methods
//-------------------------------------
static void ExpandVariables(wxString &content, const NewWxProjectInfo &info)
{
    content.Replace(wxT("$(ProjectName)"), info.GetName());
    wxString projname = info.GetName();
    projname.MakeLower();

    wxString appfilename = projname + wxT("_app");
    wxString framefilename = projname + wxT("_frame");

    content.Replace(wxT("$(MainFile)"),      projname);
    content.Replace(wxT("$(AppFile)"),       appfilename);
    content.Replace(wxT("$(MainFrameFile)"), framefilename);
    content.Replace(wxT("$(Unicode)"),       info.GetFlags() & wxWidgetsUnicode ? wxT("yes") : wxT("no"));
    content.Replace(wxT("$(Static)"),        info.GetFlags() & wxWidgetsStatic ? wxT("yes") : wxT("no"));
    content.Replace(wxT("$(Universal)"),     info.GetFlags() & wxWidgetsUniversal ? wxT("yes") : wxT("no"));
    content.Replace(wxT("$(WinResFlag)"),    info.GetFlags() & wxWidgetsWinRes ? wxT("yes") : wxT("no"));
    content.Replace(wxT("$(MWindowsFlag)"),  info.GetFlags() & wxWidgetsSetMWindows ? wxT("-mwindows") : wxEmptyString);
    content.Replace(wxT("$(PCHFlag)"),       info.GetFlags() & wxWidgetsPCH ? wxT("WX_PRECOMP") : wxEmptyString);
    content.Replace(wxT("$(PCHCmpOptions)"), info.GetFlags() & wxWidgetsPCH ? wxT("-Winvalid-pch;-include wx_pch.h") : wxEmptyString);
    content.Replace(wxT("$(PCHFileName)"),   info.GetFlags() & wxWidgetsPCH ? wxT("wx_pch.h") : wxEmptyString);

    if( info.GetFlags() & wxWidgetsWinRes ) content.Replace(wxT("$(WinResFile)"), wxT("<File Name=\"resources.rc\" />") );
    if( info.GetFlags() & wxWidgetsPCH )content.Replace(wxT("$(PCHFile)"), wxT("<File Name=\"wx_pch.h\" />") );

    wxString othersettings;
    if( info.GetVersion() != wxT("Default") ) othersettings << wxT("--version=") << info.GetVersion();
    if( !info.GetPrefix().IsEmpty() ) othersettings << wxT(" --prefix=") << info.GetPrefix();
    content.Replace(wxT("$(Other)"), othersettings);

    //create the application class name
    wxString initial = appfilename.Mid(0, 1);
    initial.MakeUpper();
    appfilename.SetChar(0, initial.GetChar(0));

    //create the main frame class name
    wxString framename(projname);
    wxString appname(projname);

    framename << wxT("Frame");
    appname << wxT("App");

    initial = framename.Mid(0, 1);
    initial.MakeUpper();
    framename.SetChar(0, initial.GetChar(0));

    initial = appname.Mid(0, 1);
    initial.MakeUpper();
    appname.SetChar(0, initial.GetChar(0));

    content.Replace(wxT("$(AppName)"), appname);
    content.Replace(wxT("$(MainFrameName)"), framename);
}
Beispiel #2
0
/**
   @params filename_ptr - the name of mp3-file, mp3tags - tags to be written
   @return errorcode: 0 - no error
   @brief parses an mp3-file for id3v2-tags and writes some in a tags-object
 */
int get_mp3tags_v2(char *filename_ptr, tags *mp3tags)
{
  std::ifstream mp3_datei;
  int tagsize = 0, version = 0;
  char *mp3header_buffer;
  bool synch_bool = 0, ext_header_bool = 0, experimental_bool = 0;

  // open mp3
  mp3_datei.open(filename_ptr, std::ios::in);
  if(!mp3_datei)
  {
    std::cerr << "error: could not open '" << filename_ptr
	      << "' to read tags!" << std::endl;
    return -1;
  }
  // wanna start at the beginning, with no offset
  mp3_datei.seekg(0, std::ios::beg);

  /////////////////////////
  //// mp3header START ////
  /////////////////////////

  // check for id3v2-tag in beginning of the file (no support for
  // tag at another position yet)
  mp3header_buffer = new char[10];
  for(int i=0; i<=9; i++)
  {
    mp3_datei.get(mp3header_buffer[i]);
  }

  // read 'ID3' at begin, otherwise leave
  if(DEBUG_IT)std::cout << mp3header_buffer[0] << mp3header_buffer[2]
			<< mp3header_buffer[2] << std::endl;
  if(mp3header_buffer[0] != 'I' || mp3header_buffer[1] != 'D' ||
     mp3header_buffer[2] != '3'){
    mp3_datei.close();
   std::cout << std::endl << "no mp3v2-TAGS found in "
	      << filename_ptr << "." << std::endl;
   return -2;
  }

  // Version checking, just 1-4 supported, just major version
  // is checked, minor version is in mp3header_buffer[4]
  // version is also later used
  version = mp3header_buffer[3];
  if(DEBUG_IT)std::cout << "ver: "<< version << std::endl;

  if(mp3header_buffer[3] < 0 || mp3header_buffer[3] > 4){
    mp3_datei.close();
   std::cout << std::endl << "id3v2-version not supported (file "
	      << filename_ptr << ")." << std::endl;
   return -3;
  }

  // retrieve tag size
  // ID3v2 size              4 * %0xxxxxxx
  // most significant bit of each byte is ignored - is zero
  // 7-shift equals *128
  // tagsize includes header, so for add a 10
  tagsize = (mp3header_buffer[6] << 21) + (mp3header_buffer[7] << 14)
    + (mp3header_buffer[8] << 7) + (mp3header_buffer[9]) + 10;

  if(DEBUG_IT)std::cout << "tagsize: " << tagsize << std::endl;

  // get tags
  if(mp3header_buffer[5] & 0x80) synch_bool = 1;
  if(mp3header_buffer[5] & 0x40) ext_header_bool = 1;
  if(mp3header_buffer[5] & 0x20) experimental_bool = 1;
  if(DEBUG_IT)std::cout << "Unsynchronisation: " << synch_bool << std::endl;
  if(DEBUG_IT)std::cout << "Extended header: " << ext_header_bool << std::endl;
  if(DEBUG_IT)std::cout << "Experimental: " << experimental_bool << std::endl;

  delete(mp3header_buffer);

  /////////////////////////
  //// mp3header END //////
  /////////////////////////

  // if there is an extended header, we wanna skip it
  if(ext_header_bool){
    // first read header-length
    char *header_len = new char[4];
  for(int i = 0; i <= 3; i++)mp3_datei.get(header_len[i]);

  // headerlength -4 - the four bytes of headersize
  int header_length = (header_len[0] << 21) + (header_len[1] << 14)
    + (header_len[2] << 7) + header_len[3] - 4;
  // skipping
  for(int i = 0; i < header_length; i++)mp3_datei.get(header_len[i]);
  }


  // Now we read in the whole tag
  char * buff = new char[tagsize];
  char* charpointer = 0;
  int length = tagsize;
  int pos = 0;
  int bytes_left = 0;
  int framesize = 0;
  int size_frameheader = 0;
  std::string framename1;

  // if version is prior to 3, size_frameheader is 6, 10 otherwise
  if(version <= 2)size_frameheader = 6;
  else size_frameheader = 10;


  for(int i = 0; i < length; i++)mp3_datei.get(buff[i]);

  // now we are done with the file, we close it
  mp3_datei.close();

  /////////////////////////
  //// main-loop START ////
  /////////////////////////
  for(int i = 0;i <= 65000;i++){

    bytes_left = length - pos;
    if(bytes_left < 1){
      if(DEBUG_IT)std::cout << "No bytes left" << std::endl;
      break;
    }

    // are we having a frame?
    if(buff[pos] < 'A' || buff[pos] > 'Z'){
      if(DEBUG_IT)std::cout << "We have no frame" << std::endl;
      break;
    }


    /* Layout of frameheader: (id3v2 ver. 3 and above)
       Frame ID       $xx xx xx xx (four characters)
       Size           $xx xx xx xx
       Flags          $xx xx
    */
    // retrieving framename and framesize
    // framename: 3 bytes vor version 1,2; 4 bytes for version 3,4
    if(version <= 2){
      framesize = (buff[pos+3] << 16) + (buff[pos+4] << 8)
	+ (buff[pos+5]);

      charpointer = &buff[pos];
      std::string framename( reinterpret_cast<const char*>(charpointer), 3);
      framename1 = framename;
      if(DEBUG_IT)std::cout << framename << std::endl;
    }else{
      framesize = (buff[pos+4] << 24) + (buff[pos+5] << 16)
	+ (buff[pos+6] << 8) + buff[pos+7];

      charpointer = &buff[pos];
      std::string framename( reinterpret_cast<const char*>(charpointer), 4);
      framename1 = framename;
      if(DEBUG_IT)std::cout << framename << std::endl;
    }

    if(framesize < 1){
      std::cout << "framesize less 1" << std::endl; return -1;
    }

    if(DEBUG_IT)std::cout << "framesize: " << framesize << std::endl;

    // now comes the part, where we find the stuff

    // TPE1: lead performer(s)/solois TPE2: Band/orchestra/accompaniment
    // TPE3: conductor/performer/refinement TPE4: interpreted, remixed
    // TP1 .. TP2 for versions prior to 3
    if(   framename1 == "TPE1" || framename1 == "TPE2"
       || framename1 == "TPE3" || framename1 == "TPE4"
       || framename1 == "TP1" || framename1 == "TP2"
       || framename1 == "TP3" || framename1 == "TP4" ){

      charpointer = &buff[pos+size_frameheader];

      read_frame(charpointer, framesize, mp3tags->artist, 29);
      tag_kuerzen_v2(mp3tags->artist, 29);
      if(DEBUG_IT)std::cout << "mp3tags->artist: " << mp3tags->artist << std::endl;

      // for(int i = pos+size_frameheader; i <= pos+size_frameheader+framesize;i++)
      // printf("%d: %d\n", i-(pos+size_frameheader), buff[i]);
    }

    // version <= 2: TT2 - Title/Songname/Content description
    // versopm >= 3: TIT2 - Title/Songname/Content description
    if(   framename1 == "TT2" || framename1 == "TIT2"){

      charpointer = &buff[pos+size_frameheader];

      read_frame(charpointer, framesize, mp3tags->title, 29);
      tag_kuerzen_v2(mp3tags->title, 29);
      if(DEBUG_IT)std::cout << "mp3tags->title: " << mp3tags->title << std::endl;
    }

    // version <= 2: TAL - Album/Movie/Show title
    // versopm >= 3: TALB - Album/Movie/Show title
    if(   framename1 == "TAL" || framename1 == "TALB"){

      charpointer = &buff[pos+size_frameheader];

      read_frame(charpointer, framesize, mp3tags->album, 29);
      tag_kuerzen_v2(mp3tags->album, 29);      tag_kuerzen_v2(mp3tags->title, 29);
      if(DEBUG_IT)std::cout << "mp3tags->album: " << mp3tags->album << std::endl;
    }

    // version <= 2: TOR - Original release year, TYE - Year
    // versopm >= 3: TORY - Original release year
    if(   framename1 == "TOR" || framename1 == "TORY" || framename1 == "TYE"){

      charpointer = &buff[pos+size_frameheader];

      read_frame(charpointer, framesize, mp3tags->year, 4);
      tag_kuerzen_v2(mp3tags->year, 4);
      if(DEBUG_IT)std::cout << "mp3tags->year: " << mp3tags->year << std::endl;
    }


    // version <= 2: COM - Original release year
    // versopm >= 3: COMM - Comments
    if(   framename1 == "COM" || framename1 == "COMM"){

      charpointer = &buff[pos+size_frameheader];

      read_frame(charpointer, framesize, mp3tags->comment, 27);
      tag_kuerzen_v2(mp3tags->comment, 27);
      if(DEBUG_IT)std::cout << "mp3tags->comment: " << mp3tags->comment << std::endl;
    }


    // version <= 2: TRK - Tracknumber
    // versopm >= 3: TRCK - Track number/Position in set
    if(   framename1 == "TRK" || framename1 == "TRCK"){

      charpointer = &buff[pos+size_frameheader];

      read_frame(charpointer, framesize, mp3tags->year, 1);
      //tag_kuerzen_v2(mp3tags->trackno, 1);
      if(DEBUG_IT)std::cout << "mp3tags->trackno: " << mp3tags->year << std::endl;
      if(DEBUG_IT)printf("trackno: %d\n", mp3tags->trackno);
    }



    pos += framesize + size_frameheader;
  }

  ///////////////////////
  //// main-loop END ////
  ///////////////////////

  return 0;
}