main.c

/*
    File:       main.c
    
    Contains:   Code to generate a QuickTime movie with a QuickTime video effect in it.
    
    Written by: Scott Kuechle
                (based heavily on QuickTime SDK QTShowEffect sample code by Tim Monroe)
 
    Copyright:  © 1999 by Apple Computer, Inc. All rights reserved
    
    Change History (most recent first)
    
        <1>     9/25/99     srk     first file
        <2>     10/19/99    srk     changed cross fade effect to explode effect
 
 
*/
 
 
#if TARGET_OS_WIN32
        // Windows headers
    #define STRICT
    #include <windows.h>
        // QTML stuff
    #include "QTML.h"
#endif
 
#ifndef __FONTS__
#include <Fonts.h>
#endif
 
#ifndef __IMAGECODEC__
#include <ImageCodec.h>
#endif
 
#ifndef __MOVIES__
#include <Movies.h>
#endif
 
#ifndef __MOVIESFORMAT__
#include <MoviesFormat.h>
#endif
 
#ifndef __MEDIAHANDLERS__
#include <MediaHandlers.h>
#endif
 
#ifndef __NUMBERFORMATTING__
#include <NumberFormatting.h>
#endif
 
#ifndef __QUICKTIMECOMPONENTS__
#include <QuickTimeComponents.h>
#endif
 
#ifndef __ENDIAN__
#include <Endian.h>
#endif
 
#ifndef __GESTALT__
#include <Gestalt.h>
#endif
 
#ifndef __FIXMATH__
#include <FixMath.h>
#endif
 
#ifndef __MACWINDOWS__
#include <MacWindows.h>
#endif
 
#ifndef __PRINTING__
#include <Printing.h>
#endif
 
#ifndef __SCRIPT__
#include <Script.h>
#endif
 
#ifndef __SOUND__
#include <Sound.h>
#endif
 
#ifndef _STRING_H
#include <string.h>
#endif
 
#ifndef _STDLIB_H
#include <stdlib.h>
#endif
 
#ifndef __TEXTUTILS__
#include <TextUtils.h>
#endif
 
#ifndef __TRAPS__
#include <Traps.h>
#endif
 
#ifndef __RESOURCES__
#include <Resources.h>
#endif
 
#ifndef __FILETYPESANDCREATORS__
#include <FileTypesAndCreators.h>
#endif
 
 
 
#include "Main.h"
#include "QTEffects.h"
 
 
// miscellaneous constants
#define kMsgDialogRsrcID                129
#define kMsgItemID                      3   
 
 
 
#if TARGET_OS_WIN32
 
    short  gAppResID;
 
#endif
 
#if TARGET_OS_MAC
 
 
 
////////////////////
//
// Main (Mac)
//
////////////////////
 
void main( void )
{
    Movie movie;
 
 
    InitMacToolbox ();
    QuickTimeInit();
        /* Create our effects movie */
    movie = QTEffects_CreateEffectsMovie ();
}
 
#else if TARGET_OS_WIN32
 
 
////////////////////
//
// Main (Windows)
//
////////////////////
 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpszCmdLine, int nCmdShow)
 
{
    Movie movie;
 
 
    QuickTimeInit();
 
        /* Create our effects movie */
    movie = QTEffects_CreateEffectsMovie ();
 
    #if TARGET_OS_WIN32
 
        if (gAppResID != -1)
            CloseResFile(gAppResID);
 
    #endif
 
 
    return 0;
}
 
#endif
 
 
#if TARGET_OS_MAC
 
////////////////////
//
// InitMacToolbox
// Standard Macintosh Toolbox Initialization
//
////////////////////
 
static void InitMacToolbox (void)
{
    InitGraf (&qd.thePort);
    InitFonts ();
    InitWindows ();
    InitMenus ();
    TEInit ();
    InitDialogs (nil);
}
 
#endif
 
////////////////////
//
// QuickTimeInit
// Initialize QuickTime here
//
////////////////////
 
static void QuickTimeInit (void)
{
    OSErr err;
 
    #if TARGET_OS_WIN32
 
    char   szAppPathName[256];
 
    FSSpec resFSSpec;
 
 
    err = InitializeQTML(0L);
    CheckError (err, "InitializeQTML error" );
    
    GetModuleFileName(0, szAppPathName, 256);
    NativePathNameToFSSpec(szAppPathName, &resFSSpec, kFullNativePath);
    gAppResID = FSpOpenResFile(&resFSSpec, fsRdWrPerm);
 
    #endif
 
    err = EnterMovies ();
    CheckError (err, "EnterMovies error" );
}
 
////////////////////
//
// Utils_Macintosh_DisplayMsg
// Displays error messages for Macintosh sample code.
//
////////////////////
 
#if TARGET_OS_MAC
static void Macintosh_DisplayMsg(char *msg)
{
    DialogPtr theDlog;
    Handle item = NULL;
    Rect box;
 
        theDlog = GetNewDialog(kMsgDialogRsrcID, NULL, (WindowPtr)-1);
        if (theDlog != NULL)
        {
            short itemType;
            
                GetDialogItem(theDlog, kMsgItemID, &itemType, &item, &box);
                if (item != NULL)
                {
                    short itemHit;
                    
                        SetDialogItemText(item, c2pstr(msg));
                        ModalDialog(NULL, &itemHit);
                        DisposeDialog(theDlog);
                        p2cstr((StringPtr)msg); /* restore C-string */
                }
        }
 
}
#endif
 
////////////////////
//
// Utils_Win32_DisplayMsg
// Displays error messages for Win95/NT sample code.
//
////////////////////
 
#if TARGET_OS_WIN32
static void Win32_DisplayMsg(char *msg)
{
 
    MessageBox(NULL, msg, "", MB_OK);
}
#endif
 
 
////////////////////
//
// CheckError
// Displays error message if an error occurred
//
////////////////////
 
void CheckError(OSErr error, char *msg)
{
    if (error == noErr)
    {
        return;
    }
    if (strlen(msg) > 0)
    {
        #if TARGET_OS_MAC
            Macintosh_DisplayMsg(msg);
        #else if TARGET_OS_WIN32
            Win32_DisplayMsg(msg);
        #endif
        
 
        ExitToShell();
 
    }
}