/*
     File:       SpeechRecognition.h
 
     Contains:   Apple Speech Recognition Toolbox Interfaces.
 
     Version:    Technology: PlainTalk 1.5
                 Release:    Universal Interfaces 3.4
 
     Copyright:  © 1992-2001 by Apple Computer, Inc., all rights reserved.
 
     Bugs?:      For bug reports, consult the following page on
                 the World Wide Web:
 
                     http://developer.apple.com/bugreporter/
 
*/
#ifndef __SPEECHRECOGNITION__
#define __SPEECHRECOGNITION__

#ifndef __MACTYPES__
#include <MacTypes.h>
#endif

#ifndef __MIXEDMODE__
#include <MixedMode.h>
#endif



#if PRAGMA_ONCE
#pragma once
#endif

#ifdef __cplusplus
extern "C" {
#endif

#if PRAGMA_IMPORT
#pragma import on
#endif

#if PRAGMA_STRUCT_ALIGN
    #pragma options align=mac68k
#elif PRAGMA_STRUCT_PACKPUSH
    #pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
    #pragma pack(2)
#endif

/* Error Codes [Speech recognition gets -5100 through -5199] */
enum {
  kSRNotAvailable               = -5100, /* the service requested is not avail or applicable */
  kSRInternalError              = -5101, /* a system internal or hardware error condition */
  kSRComponentNotFound          = -5102, /* a needed system resource was not located */
  kSROutOfMemory                = -5103, /* an out of memory error occurred in the toolbox memory space */
  kSRNotASpeechObject           = -5104, /* the object specified is no longer or never was valid */
  kSRBadParameter               = -5105, /* an invalid parameter was specified */
  kSRParamOutOfRange            = -5106, /* when we say 0-100, don't pass in 101. */
  kSRBadSelector                = -5107, /* an unrecognized selector was specified */
  kSRBufferTooSmall             = -5108, /* returned from attribute access functions */
  kSRNotARecSystem              = -5109, /* the object used was not a SRRecognitionSystem */
  kSRFeedbackNotAvail           = -5110, /* there is no feedback window associated with SRRecognizer */
  kSRCantSetProperty            = -5111, /* a non-settable property was specified */
  kSRCantGetProperty            = -5112, /* a non-gettable property was specified */
  kSRCantSetDuringRecognition   = -5113, /* the property can't be set while recognition is in progress -- do before or between utterances. */
  kSRAlreadyListening           = -5114, /* in response to SRStartListening */
  kSRNotListeningState          = -5115, /* in response to SRStopListening */
  kSRModelMismatch              = -5116, /* no acoustical models are avail to match request */
  kSRNoClientLanguageModel      = -5117, /* trying to access a non-specified SRLanguageModel */
  kSRNoPendingUtterances        = -5118, /* nothing to continue search on */
  kSRRecognitionCanceled        = -5119, /* an abort error occurred during search */
  kSRRecognitionDone            = -5120, /* search has finished, but nothing was recognized */
  kSROtherRecAlreadyModal       = -5121, /* another recognizer is modal at the moment, so can't set this recognizer's kSRBlockModally property right now */
  kSRHasNoSubItems              = -5122, /* SRCountItems or related routine was called on an object without subelements -- e.g. a word -- rather than phrase, path, or LM. */
  kSRSubItemNotFound            = -5123, /* returned when accessing a non-existent sub item of a container */
  kSRLanguageModelTooBig        = -5124, /* Cant build language models so big */
  kSRAlreadyReleased            = -5125, /* this object has already been released before */
  kSRAlreadyFinished            = -5126, /* the language model can't be finished twice */
  kSRWordNotFound               = -5127, /* the spelling couldn't be found in lookup(s) */
  kSRNotFinishedWithRejection   = -5128, /* property not found because the LMObj is not finished with rejection */
  kSRExpansionTooDeep           = -5129, /* Language model is left recursive or is embedded too many levels */
  kSRTooManyElements            = -5130, /* Too many elements added to phrase or path or other langauge model object */
  kSRCantAdd                    = -5131, /* Can't add given type of object to the base SRLanguageObject (e.g.in SRAddLanguageObject)   */
  kSRSndInSourceDisconnected    = -5132, /* Sound input source is disconnected */
  kSRCantReadLanguageObject     = -5133, /* An error while trying to create new Language object from file or pointer -- possibly bad format */
                                        /* non-release debugging error codes are included here */
  kSRNotImplementedYet          = -5199 /* you'd better wait for this feature in a future release */
};


/* Type Definitions */
typedef struct OpaqueSRSpeechObject*    SRSpeechObject;
typedef SRSpeechObject                  SRRecognitionSystem;
typedef SRSpeechObject                  SRRecognizer;
typedef SRSpeechObject                  SRSpeechSource;
typedef SRSpeechSource                  SRRecognitionResult;
typedef SRSpeechObject                  SRLanguageObject;
typedef SRLanguageObject                SRLanguageModel;
typedef SRLanguageObject                SRPath;
typedef SRLanguageObject                SRPhrase;
typedef SRLanguageObject                SRWord;
/* between 0 and 100 */
typedef unsigned short                  SRSpeedSetting;
/* between 0 and 100 */
typedef unsigned short                  SRRejectionLevel;
/* When an event occurs, the user supplied proc will be called with a pointer   */
/*  to the param passed in and a flag to indicate conditions such               */
/*  as interrupt time or system background time.                                */
struct SRCallBackStruct {
  long                what;                   /* one of notification flags */
  long                message;                /* contains SRRecognitionResult id */
  SRRecognizer        instance;               /* ID of recognizer being notified */
  OSErr               status;                 /* result status of last search */
  short               flags;                  /* non-zero if occurs during interrupt */
  long                refCon;                 /* user defined - set from SRCallBackParam */
};
typedef struct SRCallBackStruct         SRCallBackStruct;
/* Call back procedure definition */
typedef CALLBACK_API( void , SRCallBackProcPtr )(SRCallBackStruct * param);
typedef STACK_UPP_TYPE(SRCallBackProcPtr)                       SRCallBackUPP;
/*
 *  NewSRCallBackUPP()
 *  
 *  Availability:
 *    Non-Carbon CFM:   available as macro/inline
 *    CarbonLib:        in CarbonLib 1.0.2 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API_C( SRCallBackUPP )
NewSRCallBackUPP(SRCallBackProcPtr userRoutine);
#if !OPAQUE_UPP_TYPES
  enum { uppSRCallBackProcInfo = 0x000000C0 };  /* pascal no_return_value Func(4_bytes) */
  #ifdef __cplusplus
    inline SRCallBackUPP NewSRCallBackUPP(SRCallBackProcPtr userRoutine) { return (SRCallBackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppSRCallBackProcInfo, GetCurrentArchitecture()); }
  #else
    #define NewSRCallBackUPP(userRoutine) (SRCallBackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppSRCallBackProcInfo, GetCurrentArchitecture())
  #endif
#endif

/*
 *  DisposeSRCallBackUPP()
 *  
 *  Availability:
 *    Non-Carbon CFM:   available as macro/inline
 *    CarbonLib:        in CarbonLib 1.0.2 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API_C( void )
DisposeSRCallBackUPP(SRCallBackUPP userUPP);
#if !OPAQUE_UPP_TYPES
  #ifdef __cplusplus
    inline void DisposeSRCallBackUPP(SRCallBackUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); }
  #else
    #define DisposeSRCallBackUPP(userUPP) DisposeRoutineDescriptor(userUPP)
  #endif
#endif

/*
 *  InvokeSRCallBackUPP()
 *  
 *  Availability:
 *    Non-Carbon CFM:   available as macro/inline
 *    CarbonLib:        in CarbonLib 1.0.2 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API_C( void )
InvokeSRCallBackUPP(
  SRCallBackStruct *  param,
  SRCallBackUPP       userUPP);
#if !OPAQUE_UPP_TYPES
  #ifdef __cplusplus
    inline void InvokeSRCallBackUPP(SRCallBackStruct * param, SRCallBackUPP userUPP) { CALL_ONE_PARAMETER_UPP(userUPP, uppSRCallBackProcInfo, param); }
  #else
    #define InvokeSRCallBackUPP(param, userUPP) CALL_ONE_PARAMETER_UPP((userUPP), uppSRCallBackProcInfo, (param))
  #endif
#endif

#if CALL_NOT_IN_CARBON || OLDROUTINENAMES
    /* support for pre-Carbon UPP routines: New...Proc and Call...Proc */
    #define NewSRCallBackProc(userRoutine)                      NewSRCallBackUPP(userRoutine)
    #define CallSRCallBackProc(userRoutine, param)              InvokeSRCallBackUPP(param, userRoutine)
#endif /* CALL_NOT_IN_CARBON */

struct SRCallBackParam {
  SRCallBackUPP       callBack;
  long                refCon;
};
typedef struct SRCallBackParam          SRCallBackParam;
/* Recognition System Types */
enum {
  kSRDefaultRecognitionSystemID = 0
};

/* Recognition System Properties */
enum {
  kSRFeedbackAndListeningModes  = FOUR_CHAR_CODE('fbwn'), /* short: one of kSRNoFeedbackHasListenModes, kSRHasFeedbackHasListenModes, kSRNoFeedbackNoListenModes */
  kSRRejectedWord               = FOUR_CHAR_CODE('rejq'), /* the SRWord used to represent a rejection */
  kSRCleanupOnClientExit        = FOUR_CHAR_CODE('clup') /* Boolean: Default is true. The rec system and everything it owns is disposed when the client application quits */
};

enum {
  kSRNoFeedbackNoListenModes    = 0,    /* next allocated recognizer has no feedback window and doesn't use listening modes   */
  kSRHasFeedbackHasListenModes  = 1,    /* next allocated recognizer has feedback window and uses listening modes          */
  kSRNoFeedbackHasListenModes   = 2     /* next allocated recognizer has no feedback window but does use listening modes  */
};

/* Speech Source Types */
enum {
  kSRDefaultSpeechSource        = 0,
  kSRLiveDesktopSpeechSource    = FOUR_CHAR_CODE('dklv'), /* live desktop sound input */
  kSRCanned22kHzSpeechSource    = FOUR_CHAR_CODE('ca22') /* AIFF file based 16 bit, 22.050 KHz sound input */
};

/* Notification via Apple Event or Callback */
/* Notification Flags */
enum {
  kSRNotifyRecognitionBeginning = 1L << 0, /* recognition can begin. client must now call SRContinueRecognition or SRCancelRecognition */
  kSRNotifyRecognitionDone      = 1L << 1 /* recognition has terminated. result (if any) is available. */
};

/* Apple Event selectors */
/* AppleEvent message class  */
enum {
  kAESpeechSuite                = FOUR_CHAR_CODE('sprc')
};

/* AppleEvent message event ids */
enum {
  kAESpeechDone                 = FOUR_CHAR_CODE('srsd'),
  kAESpeechDetected             = FOUR_CHAR_CODE('srbd')
};

/* AppleEvent Parameter ids */
enum {
  keySRRecognizer               = FOUR_CHAR_CODE('krec'),
  keySRSpeechResult             = FOUR_CHAR_CODE('kspr'),
  keySRSpeechStatus             = FOUR_CHAR_CODE('ksst')
};

/* AppleEvent Parameter types */
enum {
  typeSRRecognizer              = FOUR_CHAR_CODE('trec'),
  typeSRSpeechResult            = FOUR_CHAR_CODE('tspr')
};


/* SRRecognizer Properties */
enum {
  kSRNotificationParam          = FOUR_CHAR_CODE('noti'), /* see notification flags below */
  kSRCallBackParam              = FOUR_CHAR_CODE('call'), /* type SRCallBackParam */
  kSRSearchStatusParam          = FOUR_CHAR_CODE('stat'), /* see status flags below */
  kSRAutoFinishingParam         = FOUR_CHAR_CODE('afin'), /* automatic finishing applied on LM for search */
  kSRForegroundOnly             = FOUR_CHAR_CODE('fgon'), /* Boolean. Default is true. If true, client recognizer only active when in foreground.   */
  kSRBlockBackground            = FOUR_CHAR_CODE('blbg'), /* Boolean. Default is false. If true, when client recognizer in foreground, rest of LMs are inactive.    */
  kSRBlockModally               = FOUR_CHAR_CODE('blmd'), /* Boolean. Default is false. When true, this client's LM is only active LM; all other LMs are inactive. Be nice, don't be modal for long periods! */
  kSRWantsResultTextDrawn       = FOUR_CHAR_CODE('txfb'), /* Boolean. Default is true. If true, search results are posted to Feedback window */
  kSRWantsAutoFBGestures        = FOUR_CHAR_CODE('dfbr'), /* Boolean. Default is true. If true, client needn't call SRProcessBegin/End to get default feedback behavior */
  kSRSoundInVolume              = FOUR_CHAR_CODE('volu'), /* short in [0..100] log scaled sound input power. Can't set this property */
  kSRReadAudioFSSpec            = FOUR_CHAR_CODE('aurd'), /* *FSSpec. Specify FSSpec where raw audio is to be read (AIFF format) using kSRCanned22kHzSpeechSource. Reads until EOF */
  kSRCancelOnSoundOut           = FOUR_CHAR_CODE('caso'), /* Boolean: Default is true.  If any sound is played out during utterance, recognition is aborted. */
  kSRSpeedVsAccuracyParam       = FOUR_CHAR_CODE('sped') /* SRSpeedSetting between 0 and 100 */
};

/* 0 means more accurate but slower. */
/* 100 means (much) less accurate but faster. */
enum {
  kSRUseToggleListen            = 0,    /* listen key modes */
  kSRUsePushToTalk              = 1
};

enum {
  kSRListenKeyMode              = FOUR_CHAR_CODE('lkmd'), /* short: either kSRUseToggleListen or kSRUsePushToTalk */
  kSRListenKeyCombo             = FOUR_CHAR_CODE('lkey'), /* short: Push-To-Talk key combination; high byte is high byte of event->modifiers, the low byte is the keycode from event->message */
  kSRListenKeyName              = FOUR_CHAR_CODE('lnam'), /* Str63: string representing ListenKeyCombo */
  kSRKeyWord                    = FOUR_CHAR_CODE('kwrd'), /* Str255: keyword preceding spoken commands in kSRUseToggleListen mode */
  kSRKeyExpected                = FOUR_CHAR_CODE('kexp') /* Boolean: Must the PTT key be depressed or the key word spoken before recognition can occur? */
};

/* Operational Status Flags */
enum {
  kSRIdleRecognizer             = 1L << 0, /* engine is not active */
  kSRSearchInProgress           = 1L << 1, /* search is in progress */
  kSRSearchWaitForAllClients    = 1L << 2, /* search is suspended waiting on all clients' input */
  kSRMustCancelSearch           = 1L << 3, /* something has occurred (sound played, non-speech detected) requiring the search to abort */
  kSRPendingSearch              = 1L << 4 /* we're about to start searching */
};

/* Recognition Result Properties */
enum {
  kSRTEXTFormat                 = FOUR_CHAR_CODE('TEXT'), /* raw text in user supplied memory */
  kSRPhraseFormat               = FOUR_CHAR_CODE('lmph'), /* SRPhrase containing result words */
  kSRPathFormat                 = FOUR_CHAR_CODE('lmpt'), /* SRPath containing result phrases or words */
  kSRLanguageModelFormat        = FOUR_CHAR_CODE('lmfm') /* top level SRLanguageModel for post parse */
};

/* SRLanguageObject Family Properties */
enum {
  kSRSpelling                   = FOUR_CHAR_CODE('spel'), /* spelling of a SRWord or SRPhrase or SRPath, or name of a SRLanguageModel */
  kSRLMObjType                  = FOUR_CHAR_CODE('lmtp'), /* Returns one of SRLanguageObject Types listed below */
  kSRRefCon                     = FOUR_CHAR_CODE('refc'), /* 4 bytes of user storage */
  kSROptional                   = FOUR_CHAR_CODE('optl'), /* Boolean -- true if SRLanguageObject is optional    */
  kSREnabled                    = FOUR_CHAR_CODE('enbl'), /* Boolean -- true if SRLanguageObject enabled */
  kSRRepeatable                 = FOUR_CHAR_CODE('rptb'), /* Boolean -- true if SRLanguageObject is repeatable */
  kSRRejectable                 = FOUR_CHAR_CODE('rjbl'), /* Boolean -- true if SRLanguageObject is rejectable (Recognition System's kSRRejectedWord */
                                        /*       object can be returned in place of SRLanguageObject with this property)   */
  kSRRejectionLevel             = FOUR_CHAR_CODE('rjct') /* SRRejectionLevel between 0 and 100 */
};

/* LM Object Types -- returned as kSRLMObjType property of language model objects */
enum {
  kSRLanguageModelType          = FOUR_CHAR_CODE('lmob'), /* SRLanguageModel */
  kSRPathType                   = FOUR_CHAR_CODE('path'), /* SRPath */
  kSRPhraseType                 = FOUR_CHAR_CODE('phra'), /* SRPhrase */
  kSRWordType                   = FOUR_CHAR_CODE('word') /* SRWord */
};

/* a normal and reasonable rejection level */
enum {
  kSRDefaultRejectionLevel      = 50
};

/********************************************************************************/
/*                      NOTES ON USING THE API                                  */
/*                                                                              */
/*      All operations (with the exception of SRGetRecognitionSystem) are       */
/*      directed toward an object allocated or begot from New, Get and Read     */
/*      type calls.                                                             */
/*                                                                              */
/*      There is a simple rule in dealing with allocation and disposal:         */
/*                                                                              */
/*      *   all toolbox allocations are obtained from a SRRecognitionSystem     */
/*                                                                              */
/*      *   if you obtain an object via New or Get, then you own a reference    */
/*          to that object and it must be released via SRReleaseObject when     */
/*          you no longer need it                                               */
/*                                                                              */
/*      *   when you receive a SRRecognitionResult object via AppleEvent or     */
/*          callback, it has essentially been created on your behalf and so     */
/*          you are responsible for releasing it as above                       */
/*                                                                              */
/*      *   when you close a SRRecognitionSystem, all remaining objects which       */
/*          were allocated with it will be forcefully released and any          */
/*          remaining references to those objects will be invalid.              */
/*                                                                              */
/*      This translates into a very simple guideline:                           */
/*          If you allocate it or have it allocated for you, you must release   */
/*          it.  If you are only peeking at it, then don't release it.          */
/*                                                                              */
/********************************************************************************/
/* Opening and Closing of the SRRecognitionSystem */
/*
 *  SROpenRecognitionSystem()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SROpenRecognitionSystem(
  SRRecognitionSystem *  system,
  OSType                 systemID)                            THREEWORDINLINE(0x303C, 0x0400, 0xAA56);


/*
 *  SRCloseRecognitionSystem()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRCloseRecognitionSystem(SRRecognitionSystem system)          THREEWORDINLINE(0x303C, 0x0201, 0xAA56);


/* Accessing Properties of any Speech Object */
/*
 *  SRSetProperty()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRSetProperty(
  SRSpeechObject   srObject,
  OSType           selector,
  const void *     property,
  Size             propertyLen)                               THREEWORDINLINE(0x303C, 0x0802, 0xAA56);


/*
 *  SRGetProperty()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRGetProperty(
  SRSpeechObject   srObject,
  OSType           selector,
  void *           property,
  Size *           propertyLen)                               THREEWORDINLINE(0x303C, 0x0803, 0xAA56);


/* Any object obtained via New or Get type calls must be released */
/*
 *  SRReleaseObject()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRReleaseObject(SRSpeechObject srObject)                      THREEWORDINLINE(0x303C, 0x0204, 0xAA56);


/*
 *  SRGetReference()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRGetReference(
  SRSpeechObject    srObject,
  SRSpeechObject *  newObjectRef)                             THREEWORDINLINE(0x303C, 0x0425, 0xAA56);


/* SRRecognizer Instance Functions */
/*
 *  SRNewRecognizer()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRNewRecognizer(
  SRRecognitionSystem   system,
  SRRecognizer *        recognizer,
  OSType                sourceID)                             THREEWORDINLINE(0x303C, 0x060A, 0xAA56);


/*
 *  SRStartListening()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRStartListening(SRRecognizer recognizer)                     THREEWORDINLINE(0x303C, 0x020C, 0xAA56);


/*
 *  SRStopListening()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRStopListening(SRRecognizer recognizer)                      THREEWORDINLINE(0x303C, 0x020D, 0xAA56);


/*
 *  SRSetLanguageModel()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRSetLanguageModel(
  SRRecognizer      recognizer,
  SRLanguageModel   languageModel)                            THREEWORDINLINE(0x303C, 0x040E, 0xAA56);


/*
 *  SRGetLanguageModel()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRGetLanguageModel(
  SRRecognizer       recognizer,
  SRLanguageModel *  languageModel)                           THREEWORDINLINE(0x303C, 0x040F, 0xAA56);


/*
 *  SRContinueRecognition()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRContinueRecognition(SRRecognizer recognizer)                THREEWORDINLINE(0x303C, 0x0210, 0xAA56);


/*
 *  SRCancelRecognition()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRCancelRecognition(SRRecognizer recognizer)                  THREEWORDINLINE(0x303C, 0x0211, 0xAA56);


/*
 *  SRIdle()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRIdle(void)                                                  THREEWORDINLINE(0x303C, 0x0028, 0xAA56);


/* Language Model Building and Manipulation Functions */
/*
 *  SRNewLanguageModel()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRNewLanguageModel(
  SRRecognitionSystem   system,
  SRLanguageModel *     model,
  const void *          name,
  Size                  nameLength)                           THREEWORDINLINE(0x303C, 0x0812, 0xAA56);


/*
 *  SRNewPath()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRNewPath(
  SRRecognitionSystem   system,
  SRPath *              path)                                 THREEWORDINLINE(0x303C, 0x0413, 0xAA56);


/*
 *  SRNewPhrase()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRNewPhrase(
  SRRecognitionSystem   system,
  SRPhrase *            phrase,
  const void *          text,
  Size                  textLength)                           THREEWORDINLINE(0x303C, 0x0814, 0xAA56);


/*
 *  SRNewWord()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRNewWord(
  SRRecognitionSystem   system,
  SRWord *              word,
  const void *          text,
  Size                  textLength)                           THREEWORDINLINE(0x303C, 0x0815, 0xAA56);


/* Operations on any object of the SRLanguageObject family */
/*
 *  SRPutLanguageObjectIntoHandle()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRPutLanguageObjectIntoHandle(
  SRLanguageObject   languageObject,
  Handle             lobjHandle)                              THREEWORDINLINE(0x303C, 0x0416, 0xAA56);


/*
 *  SRPutLanguageObjectIntoDataFile()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRPutLanguageObjectIntoDataFile(
  SRLanguageObject   languageObject,
  short              fRefNum)                                 THREEWORDINLINE(0x303C, 0x0328, 0xAA56);


/*
 *  SRNewLanguageObjectFromHandle()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRNewLanguageObjectFromHandle(
  SRRecognitionSystem   system,
  SRLanguageObject *    languageObject,
  Handle                lObjHandle)                           THREEWORDINLINE(0x303C, 0x0417, 0xAA56);


/*
 *  SRNewLanguageObjectFromDataFile()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRNewLanguageObjectFromDataFile(
  SRRecognitionSystem   system,
  SRLanguageObject *    languageObject,
  short                 fRefNum)                              THREEWORDINLINE(0x303C, 0x0427, 0xAA56);


/*
 *  SREmptyLanguageObject()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SREmptyLanguageObject(SRLanguageObject languageObject)        THREEWORDINLINE(0x303C, 0x0218, 0xAA56);


/*
 *  SRChangeLanguageObject()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRChangeLanguageObject(
  SRLanguageObject   languageObject,
  const void *       text,
  Size               textLength)                              THREEWORDINLINE(0x303C, 0x0619, 0xAA56);


/*
 *  SRAddLanguageObject()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRAddLanguageObject(
  SRLanguageObject   base,
  SRLanguageObject   addon)                                   THREEWORDINLINE(0x303C, 0x041A, 0xAA56);


/*
 *  SRAddText()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRAddText(
  SRLanguageObject   base,
  const void *       text,
  Size               textLength,
  long               refCon)                                  THREEWORDINLINE(0x303C, 0x081B, 0xAA56);


/*
 *  SRRemoveLanguageObject()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRRemoveLanguageObject(
  SRLanguageObject   base,
  SRLanguageObject   toRemove)                                THREEWORDINLINE(0x303C, 0x041C, 0xAA56);


/* Traversing SRRecognitionResults or SRLanguageObjects */
/*
 *  SRCountItems()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRCountItems(
  SRSpeechObject   container,
  long *           count)                                     THREEWORDINLINE(0x303C, 0x0405, 0xAA56);


/*
 *  SRGetIndexedItem()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRGetIndexedItem(
  SRSpeechObject    container,
  SRSpeechObject *  item,
  long              index)                                    THREEWORDINLINE(0x303C, 0x0606, 0xAA56);


/*
 *  SRSetIndexedItem()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRSetIndexedItem(
  SRSpeechObject   container,
  SRSpeechObject   item,
  long             index)                                     THREEWORDINLINE(0x303C, 0x0607, 0xAA56);


/*
 *  SRRemoveIndexedItem()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRRemoveIndexedItem(
  SRSpeechObject   container,
  long             index)                                     THREEWORDINLINE(0x303C, 0x0408, 0xAA56);


/* Utilizing the System Feedback Window */
/*
 *  SRDrawText()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRDrawText(
  SRRecognizer   recognizer,
  const void *   dispText,
  Size           dispLength)                                  THREEWORDINLINE(0x303C, 0x0621, 0xAA56);


/*
 *  SRDrawRecognizedText()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRDrawRecognizedText(
  SRRecognizer   recognizer,
  const void *   dispText,
  Size           dispLength)                                  THREEWORDINLINE(0x303C, 0x0622, 0xAA56);


/*
 *  SRSpeakText()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRSpeakText(
  SRRecognizer   recognizer,
  const void *   speakText,
  Size           speakLength)                                 THREEWORDINLINE(0x303C, 0x0620, 0xAA56);


/*
 *  SRSpeakAndDrawText()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRSpeakAndDrawText(
  SRRecognizer   recognizer,
  const void *   text,
  Size           textLength)                                  THREEWORDINLINE(0x303C, 0x061F, 0xAA56);


/*
 *  SRStopSpeech()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRStopSpeech(SRRecognizer recognizer)                         THREEWORDINLINE(0x303C, 0x0223, 0xAA56);


/*
 *  SRSpeechBusy()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( Boolean )
SRSpeechBusy(SRRecognizer recognizer)                         THREEWORDINLINE(0x303C, 0x0224, 0xAA56);


/*
 *  SRProcessBegin()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRProcessBegin(
  SRRecognizer   recognizer,
  Boolean        failed)                                      THREEWORDINLINE(0x303C, 0x031D, 0xAA56);


/*
 *  SRProcessEnd()
 *  
 *  Availability:
 *    Non-Carbon CFM:   in SpeechRecognitionLib 1.0 and later
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Mac OS X:         in version 10.0 or later
 */
EXTERN_API( OSErr )
SRProcessEnd(
  SRRecognizer   recognizer,
  Boolean        failed)                                      THREEWORDINLINE(0x303C, 0x031E, 0xAA56);





#if PRAGMA_STRUCT_ALIGN
    #pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
    #pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
    #pragma pack()
#endif

#ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
#endif

#ifdef __cplusplus
}
#endif

#endif /* __SPEECHRECOGNITION__ */

