Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
versionsTest.c
/* |
* Tests for the various ways to test the QuickDraw 3D versions. |
* |
* Nick Thompson, March 1997. |
* Robert Dierkes, February 1998. |
* Added support for Q3GetReleaseVersion, Q3GetVersion, |
* Q3ViewerGetReleaseVersion, and Q3ViewerGetVersion. |
*/ |
/*-----------------------------------------------------------*\ |
* * |
* VIEWER_VERSION should be non-zero to test Viewer gestalt * |
* * |
* Also WEAK LINK against QuickDraw3DViewerLib stub library * |
* * |
\*-----------------------------------------------------------*/ |
#define VIEWER_VERSION 1 |
/*#define OLDROUTINENAMES 1 /* Use this until Gestalt.h is updated */ |
#include <stdio.h> |
#include <QD3D.h> |
#include <Gestalt.h> |
#if OLDROUTINENAMES |
#include <QD3DGestalt.h> |
#else |
#endif /* OLDROUTINENAMES */ |
#if defined(VIEWER_VERSION) || defined(VIEWER_VERSION) |
#if OLDROUTINENAMES |
#include <QD3DViewerGestalt.h> |
#endif /* OLDROUTINENAMES */ |
#include <QD3DViewer.h> |
#endif /* VIEWER_VERSION */ |
/*-----------------------------------------------------------*\ |
* * |
* Define these values for the current version * |
* * |
\*-----------------------------------------------------------*/ |
#define kQD3DCurrentGestaltValue 0x00010504 |
#define kQD3DCurrentMajorRevision 1L |
#define kQD3DCurrentMinorRevision 5L |
#if defined(VIEWER_VERSION) || defined(VIEWER_VERSION) |
#define kQD3DViewerCurrentGestaltValue 0x00010504 |
#define kQD3DViewerCurrentMajorRevision 1L |
#define kQD3DViewerCurrentMinorRevision 5L |
#endif /* VIEWER_VERSION */ |
/*-----------------------------------------------------------*\ |
* "Release Version" - based on format of the 'vers' resource* |
\*-----------------------------------------------------------*/ |
#define kMajorPosition 24 /* bit position of major release number */ |
#define kMinorPosition 20 /* bit position of minor release number */ |
#define kDotPosition 16 /* bit position of dot release number */ |
#define kMajorMask (0xFF << kMajorPosition) |
#define kMinorMask (0x0F << kMinorPosition) |
#define kDotMask (0x0F << kDotPosition) |
#define RELEASE_TO_MAJOR_MINOR_DOT(_release,_major,_minor,_dot) \ |
_major = (_release & kMajorMask) >> kMajorPosition; \ |
_minor = (_release & kMinorMask) >> kMinorPosition; \ |
_dot = (_release & kDotMask) >> kDotPosition; |
/*-----------------------------------------------------------*\ |
* Gestalt Version number * |
\*-----------------------------------------------------------*/ |
#define kGestaltMajorPosition 16 /* bit position of major release number */ |
#define kGestaltMinorPosition 8 /* bit position of minor release number */ |
#define kGestaltDotPosition 0 /* bit position of dot release number */ |
#define kGestaltMajorMask (0xFF << kGestaltMajorPosition) |
#define kGestaltMinorMask (0xFF << kGestaltMinorPosition) |
#define kGestaltDotMask (0xFF << kGestaltDotPosition) |
#define GESTALT_TO_MAJOR_MINOR_DOT(_gestalt,_major,_minor,_dot) \ |
_major = (((unsigned long) _gestalt) & kGestaltMajorMask) >> kGestaltMajorPosition; \ |
_minor = (((unsigned long) _gestalt) & kGestaltMinorMask) >> kGestaltMinorPosition; \ |
_dot = (((unsigned long) _gestalt) & kGestaltDotMask) >> kGestaltDotPosition; |
/* |
* Main |
*/ |
void main(void) |
{ |
TQ3Status status = kQ3Failure, |
initStatus = kQ3Failure; |
OSErr osError; |
long gestaltValue; |
unsigned long releaseQd3dValue, |
releaseQd3dMajor, |
releaseQd3dMinor, |
releaseQd3dDot; |
unsigned long releaseViewer, |
releaseViewerMajor, |
releaseViewerMinor, |
releaseViewerDot; |
unsigned long gestaltMajor, |
gestaltMinor, |
gestaltDot; |
unsigned long majorRevision, |
minorRevision; |
/*---------------* |
* QuickDraw 3D * |
*---------------*/ |
/* Query Gestalt for presence of QuickDraw 3D */ |
gestaltValue = ~0; |
osError = Gestalt(gestaltQD3D, &gestaltValue); |
if (osError != noErr) { |
printf("Error: Gestalt check for QuickDraw 3D extension failed; \n", osError); |
goto Exit_VersionTest; |
} else { |
if (gestaltValue == gestaltQD3DNotPresent) { |
printf("Error: QuickDraw 3D extension isn't installed.\n"); |
goto Exit_VersionTest; |
} |
printf("QuickDraw 3D extension is installed.\n"); |
} |
/* Query Gestalt for QuickDraw 3D version */ |
gestaltValue = ~0; |
osError = Gestalt(gestaltQD3DVersion, &gestaltValue); |
if (osError != noErr) { |
printf("Error: Check for Gestalt gestaltQD3DVersion failed; %d;", osError); |
goto Exit_VersionTest; |
} else { |
if (gestaltValue != kQD3DCurrentGestaltValue) { |
printf("Error: Check for Gestalt gestaltQD3DVersion returned unexpected version 0x%08X\n", gestaltValue); |
goto Exit_VersionTest; |
} |
GESTALT_TO_MAJOR_MINOR_DOT( gestaltValue, |
gestaltMajor, |
gestaltMinor, |
gestaltDot); |
printf("Gestalt gestaltQD3DVersion returns %d.%d.%d\n", |
gestaltMajor, gestaltMinor, gestaltDot); |
} |
/* Initialize QuickDraw 3D */ |
initStatus = Q3Initialize(); |
if (initStatus == kQ3Failure) { |
printf("Error: Q3Initialize failed.\n"); |
goto Exit_VersionTest; |
} |
/* |
* Q3GetReleaseVersion |
*/ |
releaseQd3dValue = ~0; |
status = Q3GetReleaseVersion(&releaseQd3dValue); |
if (status == kQ3Failure) { |
printf("Error: Q3GetReleaseVersion failed.\n"); |
goto Exit_VersionTest; |
} else { |
RELEASE_TO_MAJOR_MINOR_DOT( releaseQd3dValue, |
releaseQd3dMajor, |
releaseQd3dMinor, |
releaseQd3dDot); |
if ( (gestaltMajor != releaseQd3dMajor) || |
(gestaltMinor != releaseQd3dMinor) || |
(gestaltDot != releaseQd3dDot) ) |
{ |
printf("Error: Inconsistent version numbers - Gestalt returns %d.%d.%d" |
" while Q3GetReleaseVersion returns %d.%d.%d\n", |
gestaltMajor, gestaltMinor, gestaltDot, |
releaseQd3dMajor, releaseQd3dMinor, releaseQd3dDot); |
goto Exit_VersionTest; |
} |
printf("Q3GetReleaseVersion returns %d.%d.%d\n", |
releaseQd3dMajor, releaseQd3dMinor, releaseQd3dDot); |
} |
/* |
* Q3GetVersion |
*/ |
majorRevision = ~0; |
minorRevision = ~0; |
status = Q3GetVersion(&majorRevision, &minorRevision); |
if (status == kQ3Failure) { |
printf("Error: Q3GetVersion failed.\n"); |
goto Exit_VersionTest; |
} else { |
if ( (majorRevision != kQD3DCurrentMajorRevision) || |
(minorRevision != kQD3DCurrentMinorRevision) ) |
{ |
printf("Error: Incorrect version number - Q3GetVersion returns %d.%d\n", |
majorRevision, minorRevision); |
goto Exit_VersionTest; |
} |
printf("Q3GetVersion returns %d.%d\n", |
majorRevision, minorRevision); |
} |
#if defined(VIEWER_VERSION) || defined(VIEWER_VERSION) |
printf("\n"); |
/*----------------------* |
* QuickDraw 3D Viewer * |
*----------------------*/ |
/* Gestalt for presence of QuickDraw 3D Viewer */ |
gestaltValue = ~0; |
osError = Gestalt(gestaltQD3DViewer, &gestaltValue); |
if (osError != noErr ) { |
printf("Error: Check for Gestalt gestaltQD3DViewer failed; \n", osError); |
goto Exit_VersionTest; |
} else { |
if ((gestaltValue & (1 << gestaltQD3DViewerPresent)) == 0) { |
printf("Error: QuickDraw 3D Viewer isn't installed.\n"); |
goto Exit_VersionTest; |
} |
printf("QuickDraw 3D Viewer is installed.\n"); |
} |
/* (No Gestalt for QuickDraw 3D Viewer version) */ |
/* |
* Q3ViewerGetReleaseVersion |
*/ |
releaseViewer = ~0; |
osError = Q3ViewerGetReleaseVersion(&releaseViewer); |
if (osError != noErr ) { |
printf("Error: Q3ViewerGetReleaseVersion failed.\n"); |
goto Exit_VersionTest; |
} else { |
RELEASE_TO_MAJOR_MINOR_DOT( releaseViewer, |
releaseViewerMajor, |
releaseViewerMinor, |
releaseViewerDot); |
/* Compare Viewer release version with QD3D release version */ |
if ( (releaseViewerMajor != releaseQd3dMajor) || |
(releaseViewerMinor != releaseQd3dMinor) || |
(releaseViewerDot != releaseQd3dDot) ) |
{ |
printf("Error: Unexpected version number from Q3ViewerGetReleaseVersion - returned %d.%d.%d", |
releaseViewerMajor, releaseViewerMinor, releaseViewerDot); |
goto Exit_VersionTest; |
} |
printf("Q3ViewerGetReleaseVersion returns %d.%d.%d\n", |
releaseViewerMajor, releaseViewerMinor, releaseViewerDot); |
} |
/* |
* Q3ViewerGetVersion |
*/ |
majorRevision = ~0; |
minorRevision = ~0; |
osError = Q3ViewerGetVersion(&majorRevision, &minorRevision); |
if (osError != noErr) { |
printf("Error: Q3GetVersion failed.\n"); |
goto Exit_VersionTest; |
} else { |
if ( (majorRevision != kQD3DViewerCurrentMajorRevision) || |
(minorRevision != kQD3DViewerCurrentMinorRevision) ) |
{ |
printf("Error: Incorrect version number - Q3ViewerGetVersion returns %d.%d", |
majorRevision, minorRevision); |
goto Exit_VersionTest; |
} |
printf("Q3ViewerGetVersion returns %d.%d\n", |
majorRevision, minorRevision); |
} |
#endif /* VIEWER_VERSION */ |
Exit_VersionTest: |
if (initStatus == kQ3Success) { |
status = Q3Exit(); |
if (status == kQ3Failure) { |
printf("Error: Q3Exit failed.\n"); |
} |
} |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14