home *** CD-ROM | disk | FTP | other *** search
/ Amiga Dream 59 / CDDream59.ISO / BeOs / Sound / Intel / PPBeDevKit.ZIP / PLAYERPR.TAR / PlayerPRO / Source / Win-PlugImport.c < prev    next >
C/C++ Source or Header  |  1998-12-27  |  6KB  |  273 lines

  1. /********************                        ***********************/
  2. //
  3. //    Player PRO 5.0 - DRIVER SOURCE CODE -
  4. //
  5. //    Library Version 5.0
  6. //
  7. //    To use with MAD Library for Mac: Symantec, CodeWarrior and MPW
  8. //
  9. //    Antoine ROSSET
  10. //    16 Tranchees
  11. //    1206 GENEVA
  12. //    SWITZERLAND
  13. //
  14. //    COPYRIGHT ANTOINE ROSSET 1996, 1997, 1998
  15. //
  16. //    Thank you for your interest in PlayerPRO !
  17. //
  18. //    FAX:                (+41 22) 346 11 97
  19. //    PHONE:             (+41 79) 203 74 62
  20. //    Internet:     RossetAntoine@bluewin.ch
  21. //
  22. /********************                        ***********************/
  23.  
  24. #include "RDriver.h"
  25. #include "RDriverInt.h"
  26. #include "FileUtils.h"
  27.  
  28. #define RSRCNAME "\pRsrc Plug Sys##"
  29.  
  30. OSErr CheckMADFile( Ptr name)
  31. {
  32.     UNFILE            refNum;
  33.     char                charl[ 20];
  34.     OSErr                err;
  35.     
  36.     refNum = iFileOpen( name);
  37.     if( !refNum) return -1;
  38.     else
  39.     {
  40.         iRead( 10, charl, refNum);
  41.         
  42.         if( charl[ 0] == 'M' &&
  43.                 charl[ 1] == 'A' &&
  44.                 charl[ 2] == 'D' &&
  45.                 charl[ 3] == 'H') err = noErr;
  46.         else err = -1;
  47.         
  48.         iClose( refNum);
  49.     }
  50.     
  51.     return err;
  52. }
  53.  
  54. OSErr TESTmain( OSType order, Ptr AlienFileName, MADMusic *MadFile, PPInfoRec *info, MADDriverSettings *init);
  55.  
  56. OSErr CallImportPlug(    MADLibrary*                inMADDriver,
  57.                         short                    PlugNo,                // CODE ID
  58.                         OSType                    order,
  59.                         Ptr                        AlienFile,
  60.                         MADMusic                *theNewMAD,
  61.                         PPInfoRec                *info)
  62. {
  63. OSErr                myErr;
  64. MADDriverSettings     driverSettings;
  65.  
  66.     driverSettings.sysMemory = inMADDriver->sysMemory;
  67.     
  68.     myErr = noErr;
  69.     
  70.     myErr = (inMADDriver->ThePlug[ PlugNo].IOPlug) (order, AlienFile, theNewMAD, info, &driverSettings);
  71.     
  72.     return( myErr);
  73. }
  74.  
  75. OSErr    PPTestFile( MADLibrary* inMADDriver,char    *kindFile, Ptr AlienFile)
  76. {
  77.     short            i;
  78.     MADMusic    aMAD;
  79.     PPInfoRec        InfoRec;
  80.     
  81.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  82.     {
  83.         if( !strcmp( kindFile, inMADDriver->ThePlug[ i].type))
  84.         {
  85.             return( CallImportPlug( inMADDriver, i, 'TEST', AlienFile, &aMAD, &InfoRec));
  86.         }
  87.     }
  88.     return MADCannotFindPlug;
  89. }
  90.  
  91. OSErr    PPInfoFile( MADLibrary* inMADDriver, char    *kindFile, FSSpec    *AlienFile, PPInfoRec    *InfoRec)
  92. {
  93.     short            i;
  94.     MADMusic    aMAD;
  95.     
  96.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  97.     {
  98.         if( !strcmp( kindFile, inMADDriver->ThePlug[ i].type))
  99.         {
  100.             return( CallImportPlug( inMADDriver, i, 'INFO', AlienFile, &aMAD, InfoRec));
  101.         }
  102.     }
  103.     return MADCannotFindPlug;
  104. }
  105.  
  106. OSErr    PPExportFile( MADLibrary* inMADDriver, char    *kindFile, FSSpec    *AlienFile, MADMusic    *theNewMAD)
  107. {
  108.     short        i;
  109.     PPInfoRec    InfoRec;
  110.     
  111.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  112.     {
  113.         if( !strcmp( kindFile, inMADDriver->ThePlug[ i].type))
  114.         {
  115.             return( CallImportPlug( inMADDriver, i, 'EXPL', AlienFile, theNewMAD, &InfoRec));
  116.         }
  117.     }
  118.     return MADCannotFindPlug;
  119. }
  120.  
  121. OSErr    PPImportFile( MADLibrary* inMADDriver, char    *kindFile, FSSpec    *AlienFile, MADMusic    **theNewMAD)
  122. {
  123.     short        i;
  124.     PPInfoRec    InfoRec;
  125.     
  126.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  127.     {
  128.         if( !strcmp( kindFile, inMADDriver->ThePlug[ i].type))
  129.         {
  130.             *theNewMAD = (MADMusic*) MADNewPtrClear( sizeof( MADMusic), inMADDriver);
  131.             if( !*theNewMAD) return -1L;
  132.             
  133.             return( CallImportPlug( inMADDriver, i, 'IMPL', AlienFile, *theNewMAD, &InfoRec));
  134.         }
  135.     }
  136.     return MADCannotFindPlug;
  137. }
  138.  
  139. OSErr    PPIdentifyFile( MADLibrary* inMADDriver, char    *type, Ptr AlienFile)
  140. {
  141.     FILE*                refNum;
  142.     short                i;
  143.     PPInfoRec        InfoRec;
  144.     OSErr                iErr;
  145.     
  146.     strcpy( type, "!!!!");
  147.     
  148.     // Check if we have access to this file
  149.     refNum = iFileOpen( AlienFile);
  150.     if( !refNum) return -1;
  151.     iClose( refNum);
  152.     
  153.     // Is it a MAD file?
  154.     iErr = CheckMADFile( AlienFile);
  155.     if( iErr == noErr)
  156.     {
  157.         strcpy( type, "MADH");
  158.         return noErr;
  159.     }
  160.     
  161.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  162.     {
  163.         if( CallImportPlug( inMADDriver, i, 'TEST', AlienFile, 0L, &InfoRec) == noErr)
  164.         {
  165.             strcpy( type, inMADDriver->ThePlug[ i].type);
  166.             
  167.             return noErr;
  168.         }
  169.     }
  170.     
  171.     strcpy( type, "!!!!");
  172.     
  173.     return MADCannotFindPlug;
  174. }
  175.  
  176. Boolean    MADPlugAvailable( MADLibrary* inMADDriver, char    *kindFile)
  177. {
  178.     short        i;
  179.  
  180.     if( !strcmp( kindFile, "MADH")) return true;
  181.     
  182.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  183.     {
  184.         if( !strcmp( kindFile, inMADDriver->ThePlug[ i].type)) return true;
  185.     }
  186.     return false;
  187. }
  188.  
  189. typedef OSErr (*PLUGFILLDLLFUNC) ( PlugInfo*);
  190.  
  191. Boolean LoadPlugLib( Ptr name, PlugInfo* plug)
  192. {
  193.     PLUGFILLDLLFUNC        fpFuncAddress;
  194.     OSErr                            err;
  195.     
  196.     strcpy( plug->file, name);
  197.     
  198.     plug->hLibrary = LoadLibrary( name);
  199.     if( !plug->hLibrary) return false;
  200.     
  201.     plug->IOPlug = (PLUGDLLFUNC) GetProcAddress( plug->hLibrary, "mainPLUG");
  202.     if( !plug->IOPlug) return false;
  203.     
  204.     fpFuncAddress = (PLUGFILLDLLFUNC) GetProcAddress( plug->hLibrary, "FillPlug");
  205.     if( !fpFuncAddress) return false;
  206.     
  207.     err = (*fpFuncAddress)( plug);
  208.     
  209.     return true;
  210. }
  211.  
  212. void MInitImportPlug( MADLibrary* inMADDriver, char *PlugsFolderName)
  213. {
  214.     ///////////
  215.     inMADDriver->TotalPlug = 0;
  216.     ///////////
  217.     
  218.     {
  219.     HANDLE                hFind;
  220.     WIN32_FIND_DATA        fd;
  221.     BOOL                bRet = TRUE;
  222.     char                FindFolder[ 200], inPlugsFolderName[ 200];
  223.     
  224.     if( PlugsFolderName)
  225.     {
  226.         strcpy( inPlugsFolderName, PlugsFolderName);
  227.         strcat( inPlugsFolderName, "/");
  228.         
  229.         strcpy( FindFolder, inPlugsFolderName);
  230.     }
  231.     else
  232.     {
  233.         strcpy( inPlugsFolderName, "/");
  234.         strcpy( FindFolder, inPlugsFolderName);
  235.     }
  236.     strcat( FindFolder, "*.PLG");
  237.     
  238.     hFind = FindFirstFile( FindFolder, &fd);
  239.     
  240.     inMADDriver->ThePlug = (PlugInfo*) MADNewPtr( MAXPLUG * sizeof( PlugInfo), inMADDriver);
  241.     
  242.     while( hFind != INVALID_HANDLE_VALUE && bRet)
  243.     {
  244.         if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
  245.         {
  246.             if( inMADDriver->TotalPlug < MAXPLUG)
  247.             {
  248.                 char myCompleteFilename[ 200];
  249.                 
  250.                 strcpy( myCompleteFilename, inPlugsFolderName);
  251.                 strcat( myCompleteFilename, fd.cFileName);
  252.                 
  253.                 if( LoadPlugLib( myCompleteFilename, &inMADDriver->ThePlug[ inMADDriver->TotalPlug])) inMADDriver->TotalPlug++;
  254.             }
  255.         }
  256.         
  257.         bRet = FindNextFile( hFind, &fd);
  258.     }
  259.     
  260.     FindClose( hFind);
  261.     }
  262.     ///////////
  263. }
  264.  
  265. void CloseImportPlug( MADLibrary* inMADDriver)
  266. {
  267.     short i;
  268.     
  269.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  270.     {
  271.             FreeLibrary( inMADDriver->ThePlug[ i].hLibrary);
  272.     }
  273. }