home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1999 / MacHack 1999.toast / The Hacks / MACtive Desktop / Source / Sources / Version.c < prev   
Encoding:
C/C++ Source or Header  |  1998-05-14  |  2.2 KB  |  154 lines  |  [TEXT/CWIE]

  1. #include <Errors.h>
  2. #include <Resources.h>
  3. #include "DCon.h"
  4. #include "StringUtils.h"
  5. #include "Version.h"
  6.  
  7.  
  8.  
  9.  
  10.  
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14.  
  15. static OSStatus GetVersResource(Handle *vers);
  16.  
  17. #ifdef __cplusplus
  18. }
  19. #endif
  20.  
  21.  
  22.  
  23.  
  24.  
  25. OSStatus GetNumVersion(NumVersion *vers)
  26. {
  27.     Handle        rez;
  28.     OSStatus    err;
  29.     
  30.     
  31.     // Sanity check input parameters.
  32.     if_dAssertIfTrue(!vers)
  33.         return paramErr;
  34.     
  35.     err = GetVersResource(&rez);
  36.     if (err != noErr)
  37.         return err;
  38.     
  39.     *vers = *(NumVersion*)(*rez);
  40.     DisposeHandle(rez);
  41.     return noErr;
  42. }
  43.  
  44.  
  45.  
  46.  
  47.  
  48. OSStatus GetNumVersionCString(char *vers)
  49. {
  50.     OSStatus    err;
  51.     
  52.     
  53.     // Sanity check input parameters.
  54.     if_dAssertIfTrue(!vers)
  55.         return paramErr;
  56.     
  57.     err = GetNumVersionPString((StringPtr)vers);
  58.     if (err != noErr)
  59.         return err;
  60.     
  61.     ptocstr(vers,(StringPtr)vers);
  62.     return noErr;
  63. }
  64.  
  65.  
  66.  
  67.  
  68.  
  69. OSStatus GetNumVersionPString(StringPtr vers)
  70. {
  71.     NumVersion    num;
  72.     OSStatus    err;
  73.     
  74.     
  75.     // Sanity check input parameters.
  76.     if_dAssertIfTrue(!vers)
  77.         return paramErr;
  78.     
  79.     err = GetNumVersion(&num);
  80.     if (err != noErr)
  81.         return err;
  82.     
  83.     vers[0] = 0;
  84.     if (num.majorRev & 0xF0)
  85.         vers[++vers[0]] = '0' + ((num.majorRev & 0xF0) >> 4);
  86.     if (num.majorRev & 0x0F)
  87.         vers[++vers[0]] = '0' + (num.majorRev & 0x0F);
  88.     
  89.     vers[++vers[0]] = '.';
  90.     vers[++vers[0]] = '0' + ((num.minorAndBugRev & 0xF0) >> 4);
  91.     if (num.minorAndBugRev & 0x0F)
  92.     {
  93.         vers[++vers[0]] = '.';
  94.         vers[++vers[0]] = '0' + (num.minorAndBugRev & 0x0F);
  95.     }
  96.     
  97.     switch(num.stage)
  98.     {
  99.         case 0x20:        // developStage
  100.             vers[++vers[0]] = 'd';
  101.             break;
  102.         
  103.         case 0x40:        // alphaStage
  104.             vers[++vers[0]] = 'a';
  105.             break;
  106.         
  107.         case 0x60:        // betaStage
  108.             vers[++vers[0]] = 'b';
  109.             break;
  110.         
  111.         case 0x80:        // finalStage
  112.             if (num.nonRelRev)
  113.                 vers[++vers[0]] = 'f';
  114.             break;
  115.     }
  116.     
  117.     if (num.nonRelRev & 0xF0)
  118.         vers[++vers[0]] = '0' + ((num.nonRelRev & 0xF0) >> 4);
  119.     if (num.nonRelRev & 0x0F)
  120.         vers[++vers[0]] = '0' + (num.nonRelRev & 0x0F);
  121.     
  122.     return noErr;
  123. }
  124.  
  125.  
  126. #if 0
  127. #pragma mark -
  128. #endif
  129.  
  130.  
  131. OSStatus GetVersResource(Handle *vers)
  132. {
  133.     OSStatus    err;
  134.     
  135.     
  136.     // Sanity check input parameters.
  137.     if_dAssertIfTrue(!vers)
  138.         return paramErr;
  139.     
  140.     *vers = Get1Resource('vers',1);
  141.     if (*vers == NULL)
  142.     {
  143.         err = ResError();
  144.         if (err == noErr)
  145.             err = resNotFound;
  146.         
  147.         return err;
  148.     }
  149.     
  150.     DetachResource(*vers);
  151.     HLock(*vers);
  152.     return noErr;
  153. }
  154.