Utils_Util.cpp
上传用户:sz83729876
上传日期:2013-03-07
资源大小:4140k
文件大小:4k
源码类别:

OpenGL

开发平台:

Windows_Unix

  1. #ifndef __utils_util_h__
  2. #include "utils_util.h"
  3. #endif
  4. //#include <windows.h> // Header File For Windows
  5. // Mod player
  6. //#include "bassmod.h"
  7. #include "minifmod.h"
  8. FMUSIC_MODULE *mod=NULL;
  9. namespace mods2
  10. {
  11. /////////////////////////////
  12. //MINIFMOD CALLBACK FUNCTIONS
  13. /////////////////////////////
  14. unsigned int fileopen(char *name)
  15. {
  16. return (unsigned int)fopen(name, "rb");
  17. }
  18. void fileclose(unsigned int handle)
  19. {
  20. fclose((FILE *)handle);
  21. }
  22. int fileread(void *buffer, int size, unsigned int handle)
  23. {
  24. return fread(buffer, 1, size, (FILE *)handle);
  25. }
  26. void fileseek(unsigned int handle, int pos, signed char mode)
  27. {
  28. fseek((FILE *)handle, pos, mode);
  29. }
  30. int filetell(unsigned int handle)
  31. {
  32. return ftell((FILE *)handle);
  33. }
  34. bool Init() {
  35. FSOUND_File_SetCallbacks(fileopen, fileclose, fileread, fileseek, filetell);
  36. if (!FSOUND_Init(44100, 0)) return false;
  37. return true;
  38. }
  39. bool load(char *file) {
  40. mod = FMUSIC_LoadSong(file, NULL); //sampleloadcallback);
  41. if (!mod) return false;
  42. FMUSIC_PlaySong(mod);
  43. return true;
  44. }
  45. int GetTime() {
  46. return FMUSIC_GetTime(mod);
  47. }
  48. void Free() {
  49. FMUSIC_FreeSong(mod);
  50. FSOUND_Close();
  51. }
  52. void Play() {
  53. FMUSIC_PlaySong(mod);
  54. }
  55. void Stop() {
  56. FMUSIC_StopSong(mod);
  57. }
  58. }
  59. /*
  60. namespace mods
  61. {
  62.    bool Init() {
  63.      // setup output - default device, 44100hz, stereo, 16 bits 
  64.      if (!BASSMOD_Init(-1,44100,0))
  65. return false;
  66. return true;    
  67.    }
  68.     
  69.    bool load(char *file) {
  70. BASSMOD_MusicFree(); // free the current mod
  71. if (BASSMOD_MusicLoad(FALSE, file,0,0,BASS_MUSIC_RAMPS|
  72.             BASS_MUSIC_SURROUND|BASS_MUSIC_POSRESET)) {
  73. BASSMOD_MusicPlay();
  74. BASSMOD_SetVolume(60); // Set the volume to 60%
  75.        // because the default set is 100%....
  76. }
  77. else return false;
  78. return true;
  79.    }
  80.     
  81.    void Free() {
  82.     BASSMOD_Free();
  83.    }
  84.    
  85.    char *CGetTime() {
  86. char text[12];
  87. int pos = BASSMOD_MusicGetPosition();
  88. if (pos==-1) pos=0;
  89. sprintf(text,"%03d.%03d",LOWORD(pos),HIWORD(pos));
  90. return text;
  91.    }
  92.    DWORD DGetTime() {
  93. //char text[12];
  94. DWORD pos = BASSMOD_MusicGetPosition();
  95. if (pos==-1) pos=0;
  96. //sprintf(text,"%03d.%03d",LOWORD(pos),HIWORD(pos));
  97. return pos;
  98.    }
  99.    
  100.    float GetCPU() {
  101. return BASSMOD_GetCPU();
  102.    }
  103. }
  104. */
  105. namespace utils_util
  106. {
  107.     char *   g_search_path = 0;
  108.     char     g_default_search_path[]=
  109.             ".;"
  110.             "./images;"
  111.             "./textures;"
  112.             "./models;"
  113.             "./sounds;"
  114.             ;
  115.     const char *    set_search_path(const char * path)
  116.     {
  117.         if (g_search_path)
  118.         {
  119.             delete [] g_search_path;
  120.             g_search_path = 0;
  121.         }
  122.         if (path)
  123.         {
  124.             int len = strlen(path);
  125.             g_search_path = new char[len + 1];
  126.             strcpy(g_search_path,path);
  127.         }
  128.         return get_search_path();
  129.     }
  130.     const char *    get_search_path()
  131.     {
  132.         return g_search_path != 0 ? g_search_path : g_default_search_path;
  133.     }
  134.     bool findfile(const char * filename, int size, char * pathname)
  135.     {
  136.         static char curr_pathname[1024];
  137.         static char curr_path[1024];
  138.         const char * ptr = get_search_path();
  139.         char * idx = strchr(ptr,';');
  140.         while (idx)
  141.         {
  142.             if (idx - ptr <= 0)
  143.                 break;
  144.             memcpy( curr_path, ptr, idx - ptr);
  145.             curr_path[idx - ptr] = '';
  146.             sprintf(curr_pathname, "%s/%s",curr_path,filename);
  147.     FILE * fp = ::fopen(curr_pathname, "r" );
  148.     if(fp != 0)
  149.             {
  150.                 int len = strlen(curr_pathname) + 1;
  151.                 if (len > size)
  152.                     len = size;
  153.                 strncpy(pathname,curr_pathname, len);
  154.                 fclose(fp);
  155.     return true;
  156.             }
  157.             ptr = idx + 1;
  158.             idx = strchr(ptr,';');
  159.         }
  160.         fprintf(stderr,"file not found: %s .n",filename);
  161.         fprintf(stderr,"search path: %s .n",get_search_path());
  162.         return false;
  163.     }
  164. }