topical media & game development

talk show tell print

lib-of-vs-libs-QTDevWin-CIncludes-DatabaseAccess.h / h



  /*
       File:       DatabaseAccess.h
   
       Contains:   Database Access Manager Interfaces.
   
       Version:    Technology: System 7.5
                   Release:    QuickTime 6.0.2
   
       Copyright:  (c) 1989-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 __DATABASEACCESS__
  define __DATABASEACCESS__
  
  ifndef __RESOURCES__
  include <Resources.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
  
  /* data type codes */
  enum {
      typeNone                    = FOUR_CHAR_CODE('none'),
      typeDate                    = FOUR_CHAR_CODE('date'),
      typeTime                    = FOUR_CHAR_CODE('time'),
      typeTimeStamp               = FOUR_CHAR_CODE('tims'),
      typeDecimal                 = FOUR_CHAR_CODE('deci'),
      typeMoney                   = FOUR_CHAR_CODE('mone'),
      typeVChar                   = FOUR_CHAR_CODE('vcha'),
      typeVBin                    = FOUR_CHAR_CODE('vbin'),
      typeLChar                   = FOUR_CHAR_CODE('lcha'),
      typeLBin                    = FOUR_CHAR_CODE('lbin'),
      typeDiscard                 = FOUR_CHAR_CODE('disc'),       /* "dummy" types for DBResultsToText */
      typeUnknown                 = FOUR_CHAR_CODE('unkn'),
      typeColBreak                = FOUR_CHAR_CODE('colb'),
      typeRowBreak                = FOUR_CHAR_CODE('rowb'),       /* pass this in to DBGetItem for any data type */
      typeAnyType                 = 0
  };
  
  /* infinite timeout value for DBGetItem */
  enum {
                                                                  /* messages for status functions for DBStartQuery */
      kDBUpdateWind               = 0,
      kDBAboutToInit              = 1,
      kDBInitComplete             = 2,
      kDBSendComplete             = 3,
      kDBExecComplete             = 4,
      kDBStartQueryComplete       = 5
  };
  
  enum {
                                                                  /* messages for status functions for DBGetQueryResults */
      kDBGetItemComplete          = 6,
      kDBGetQueryResultsComplete  = 7,
      kDBWaitForever              = -1
  };
  
  enum {
                                                                  /*  flags for DBGetItem  */
      kDBLastColFlag              = 0x0001,
      kDBNullFlag                 = 0x0004
  };
  
  typedef OSType                          DBType;
  typedef struct DBAsyncParamBlockRec     DBAsyncParamBlockRec;
  typedef DBAsyncParamBlockRec *          DBAsyncParmBlkPtr;
  typedef CALLBACK_API( void , DBCompletionProcPtr )(DBAsyncParmBlkPtr pb);
  /*
      WARNING: DBCompletionProcPtr uses register based parameters under classic 68k
               and cannot be written in a high-level language without 
               the help of mixed mode or assembly glue.
  */
  typedef REGISTER_UPP_TYPE(DBCompletionProcPtr)                  DBCompletionUPP;
  /* structure for asynchronous parameter block */
  
  struct DBAsyncParamBlockRec {
      DBCompletionUPP                 completionProc;             /* pointer to completion routine */
      OSErr                           result;                     /* result of call */
      long                            userRef;                    /* for application's use */
      long                            ddevRef;                    /* for ddev's use */
      long                            reserved;                   /* for internal use */
  };
  
  /* structure for resource list in QueryRecord */
  
  struct ResListElem {
      ResType                         theType;                    /* resource type */
      short                           id;                         /* resource id */
  };
  typedef struct ResListElem              ResListElem;
  
  typedef ResListElem *                   ResListPtr;
  typedef ResListPtr *                    ResListHandle;
  /* structure for query list in QueryRecord */
  typedef Handle                          QueryArray[256];
  typedef Handle *                        QueryListPtr;
  typedef QueryListPtr *                  QueryListHandle;
  
  struct QueryRecord {
      short                           version;                    /* version */
      short                           id;                         /* id of 'qrsc' this came from */
      Handle                          queryProc;                  /* handle to query def proc */
      Str63                           ddevName;                   /* ddev name */
      Str255                          host;                       /* host name */
      Str255                          user;                       /* user name */
      Str255                          password;                   /* password */
      Str255                          connStr;                    /* connection string */
      short                           currQuery;                  /* index of current query */
      short                           numQueries;                 /* number of queries in list */
      QueryListHandle                 queryList;                  /* handle to array of handles to text */
      short                           numRes;                     /* number of resources in list */
      ResListHandle                   resList;                    /* handle to array of resource list elements */
      Handle                          dataHandle;                 /* for use by query def proc */
      long                            refCon;                     /* for use by application */
  };
  typedef struct QueryRecord              QueryRecord;
  
  typedef QueryRecord *                   QueryPtr;
  typedef QueryPtr *                      QueryHandle;
  /* structure of column types array in ResultsRecord */
  typedef DBType                          ColTypesArray[256];
  typedef Handle                          ColTypesHandle;
  /* structure for column info in ResultsRecord */
  
  struct DBColInfoRecord {
      short                           len;
      short                           places;
      short                           flags;
  };
  typedef struct DBColInfoRecord          DBColInfoRecord;
  
  typedef DBColInfoRecord                 ColInfoArray[256];
  typedef Handle                          ColInfoHandle;
  /* structure of results returned by DBGetResults */
  
  struct ResultsRecord {
      short                           numRows;                    /* number of rows in result */
      short                           numCols;                    /* number of columns per row */
      ColTypesHandle                  colTypes;                   /* data type array */
      Handle                          colData;                    /* actual results */
      ColInfoHandle                   colInfo;                    /* DBColInfoRecord array */
  };
  typedef struct ResultsRecord            ResultsRecord;
  enum {
                                                                  /* messages sent to a 'ddev'*/
      kDBInit                     = 0,
      kDBEnd                      = 1,
      kDBGetConnInfo              = 2,
      kDBGetSessionNum            = 3,
      kDBSend                     = 4,
      kDBSendItem                 = 5,
      kDBExec                     = 6,
      kDBState                    = 7,
      kDBGetErr                   = 8,
      kDBBreak                    = 9,
      kDBGetItem                  = 10,
      kDBUngetItem                = 11,
      kDBKill                     = 12,
      kDBOpen                     = 100,
      kDBClose                    = 101,
      kDBIdle                     = 102
  };
  
  typedef CALLBACK_API( OSErr , DBQueryDefProcPtr )(long *sessID, QueryHandle query);
  typedef CALLBACK_API( Boolean , DBStatusProcPtr )(short message, OSErr result, short dataLen, short dataPlaces, short dataFlags, DBType dataType, Ptr dataPtr);
  typedef CALLBACK_API( OSErr , DBResultHandlerProcPtr )(DBType dataType, short theLen, short thePlaces, short theFlags, Ptr theData, Handle theText);
  typedef STACK_UPP_TYPE(DBQueryDefProcPtr)                       DBQueryDefUPP;
  typedef STACK_UPP_TYPE(DBStatusProcPtr)                         DBStatusUPP;
  typedef STACK_UPP_TYPE(DBResultHandlerProcPtr)                  DBResultHandlerUPP;
  if OPAQUE_UPP_TYPES
  if CALL_NOT_IN_CARBON
      EXTERN_API(DBCompletionUPP)
      NewDBCompletionUPP             (DBCompletionProcPtr     userRoutine);
  
      EXTERN_API(DBQueryDefUPP)
      NewDBQueryDefUPP               (DBQueryDefProcPtr       userRoutine);
  
      EXTERN_API(DBStatusUPP)
      NewDBStatusUPP                 (DBStatusProcPtr         userRoutine);
  
      EXTERN_API(DBResultHandlerUPP)
      NewDBResultHandlerUPP          (DBResultHandlerProcPtr  userRoutine);
  
      EXTERN_API(void)
      DisposeDBCompletionUPP         (DBCompletionUPP         userUPP);
  
      EXTERN_API(void)
      DisposeDBQueryDefUPP           (DBQueryDefUPP           userUPP);
  
      EXTERN_API(void)
      DisposeDBStatusUPP             (DBStatusUPP             userUPP);
  
      EXTERN_API(void)
      DisposeDBResultHandlerUPP      (DBResultHandlerUPP      userUPP);
  
      EXTERN_API(void)
      InvokeDBCompletionUPP          (DBAsyncParmBlkPtr       pb,
                                      DBCompletionUPP         userUPP);
  
      EXTERN_API(OSErr)
      InvokeDBQueryDefUPP            (long *                  sessID,
                                      QueryHandle             query,
                                      DBQueryDefUPP           userUPP);
  
      EXTERN_API(Boolean)
      InvokeDBStatusUPP              (short                   message,
                                      OSErr                   result,
                                      short                   dataLen,
                                      short                   dataPlaces,
                                      short                   dataFlags,
                                      DBType                  dataType,
                                      Ptr                     dataPtr,
                                      DBStatusUPP             userUPP);
  
      EXTERN_API(OSErr)
      InvokeDBResultHandlerUPP       (DBType                  dataType,
                                      short                   theLen,
                                      short                   thePlaces,
                                      short                   theFlags,
                                      Ptr                     theData,
                                      Handle                  theText,
                                      DBResultHandlerUPP      userUPP);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  else
      enum { uppDBCompletionProcInfo = 0x0000B802 };                  /* register no_return_value Func(4_bytes:A1) */
      enum { uppDBQueryDefProcInfo = 0x000003E0 };                    /* pascal 2_bytes Func(4_bytes, 4_bytes) */
      enum { uppDBStatusProcInfo = 0x000FAA90 };                      /* pascal 1_byte Func(2_bytes, 2_bytes, 2_bytes, 2_bytes, 2_bytes, 4_bytes, 4_bytes) */
      enum { uppDBResultHandlerProcInfo = 0x0003EAE0 };               /* pascal 2_bytes Func(4_bytes, 2_bytes, 2_bytes, 2_bytes, 4_bytes, 4_bytes) */
      #define NewDBCompletionUPP(userRoutine)                         (DBCompletionUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDBCompletionProcInfo, GetCurrentArchitecture())
      #define NewDBQueryDefUPP(userRoutine)                           (DBQueryDefUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDBQueryDefProcInfo, GetCurrentArchitecture())
      #define NewDBStatusUPP(userRoutine)                             (DBStatusUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDBStatusProcInfo, GetCurrentArchitecture())
      #define NewDBResultHandlerUPP(userRoutine)                      (DBResultHandlerUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDBResultHandlerProcInfo, GetCurrentArchitecture())
      #define DisposeDBCompletionUPP(userUPP)                         DisposeRoutineDescriptor(userUPP)
      #define DisposeDBQueryDefUPP(userUPP)                           DisposeRoutineDescriptor(userUPP)
      #define DisposeDBStatusUPP(userUPP)                             DisposeRoutineDescriptor(userUPP)
      #define DisposeDBResultHandlerUPP(userUPP)                      DisposeRoutineDescriptor(userUPP)
      #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
      #pragma parameter InvokeDBCompletionUPP(__A1, __A0)
      void InvokeDBCompletionUPP(DBAsyncParmBlkPtr pb, DBCompletionUPP userUPP) = 0x4E90;
      #else
          #define InvokeDBCompletionUPP(pb, userUPP)                      CALL_ONE_PARAMETER_UPP((userUPP), uppDBCompletionProcInfo, (pb))
      #endif
      #define InvokeDBQueryDefUPP(sessID, query, userUPP)             (OSErr)CALL_TWO_PARAMETER_UPP((userUPP), uppDBQueryDefProcInfo, (sessID), (query))
      #define InvokeDBStatusUPP(message, result, dataLen, dataPlaces, dataFlags, dataType, dataPtr, userUPP)  (Boolean)CALL_SEVEN_PARAMETER_UPP((userUPP), uppDBStatusProcInfo, (message), (result), (dataLen), (dataPlaces), (dataFlags), (dataType), (dataPtr))
      #define InvokeDBResultHandlerUPP(dataType, theLen, thePlaces, theFlags, theData, theText, userUPP)  (OSErr)CALL_SIX_PARAMETER_UPP((userUPP), uppDBResultHandlerProcInfo, (dataType), (theLen), (thePlaces), (theFlags), (theData), (theText))
  endif
  /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  define NewDBCompletionProc(userRoutine)                        NewDBCompletionUPP(userRoutine)
  define NewDBQueryDefProc(userRoutine)                          NewDBQueryDefUPP(userRoutine)
  define NewDBStatusProc(userRoutine)                            NewDBStatusUPP(userRoutine)
  define NewDBResultHandlerProc(userRoutine)                     NewDBResultHandlerUPP(userRoutine)
  define CallDBCompletionProc(userRoutine, pb)                   InvokeDBCompletionUPP(pb, userRoutine)
  define CallDBQueryDefProc(userRoutine, sessID, query)          InvokeDBQueryDefUPP(sessID, query, userRoutine)
  define CallDBStatusProc(userRoutine, message, result, dataLen, dataPlaces, dataFlags, dataType, dataPtr) InvokeDBStatusUPP(message, result, dataLen, dataPlaces, dataFlags, dataType, dataPtr, userRoutine)
  define CallDBResultHandlerProc(userRoutine, dataType, theLen, thePlaces, theFlags, theData, theText) InvokeDBResultHandlerUPP(dataType, theLen, thePlaces, theFlags, theData, theText, userRoutine)
  if CALL_NOT_IN_CARBON
  EXTERN_API( OSErr )
  InitDBPack                      (void)                                                      FIVEWORDINLINE(0x3F3C, 0x0004, 0x303C, 0x0100, 0xA82F);
  
  EXTERN_API( OSErr )
  DBInit                          (long *                 sessID,
                                   ConstStr63Param        ddevName,
                                   ConstStr255Param       host,
                                   ConstStr255Param       user,
                                   ConstStr255Param       passwd,
                                   ConstStr255Param       connStr,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x0E02, 0xA82F);
  
  EXTERN_API( OSErr )
  DBEnd                           (long                   sessID,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x0403, 0xA82F);
  
  EXTERN_API( OSErr )
  DBGetConnInfo                   (long                   sessID,
                                   short                  sessNum,
                                   long *                 returnedID,
                                   long *                 version,
                                   Str63                  ddevName,
                                   Str255                 host,
                                   Str255                 user,
                                   Str255                 network,
                                   Str255                 connStr,
                                   long *                 start,
                                   OSErr *                state,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x1704, 0xA82F);
  
  EXTERN_API( OSErr )
  DBGetSessionNum                 (long                   sessID,
                                   short *                sessNum,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x0605, 0xA82F);
  
  EXTERN_API( OSErr )
  DBSend                          (long                   sessID,
                                   Ptr                    text,
                                   short                  len,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x0706, 0xA82F);
  
  EXTERN_API( OSErr )
  DBSendItem                      (long                   sessID,
                                   DBType                 dataType,
                                   short                  len,
                                   short                  places,
                                   short                  flags,
                                   void *                 buffer,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x0B07, 0xA82F);
  
  EXTERN_API( OSErr )
  DBExec                          (long                   sessID,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x0408, 0xA82F);
  
  EXTERN_API( OSErr )
  DBState                         (long                   sessID,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x0409, 0xA82F);
  
  EXTERN_API( OSErr )
  DBGetErr                        (long                   sessID,
                                   long *                 err1,
                                   long *                 err2,
                                   Str255                 item1,
                                   Str255                 item2,
                                   Str255                 errorMsg,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x0E0A, 0xA82F);
  
  EXTERN_API( OSErr )
  DBBreak                         (long                   sessID,
                                   Boolean                abort,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x050B, 0xA82F);
  
  EXTERN_API( OSErr )
  DBGetItem                       (long                   sessID,
                                   long                   timeout,
                                   DBType *               dataType,
                                   short *                len,
                                   short *                places,
                                   short *                flags,
                                   void *                 buffer,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x100C, 0xA82F);
  
  EXTERN_API( OSErr )
  DBUnGetItem                     (long                   sessID,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x040D, 0xA82F);
  
  EXTERN_API( OSErr )
  DBKill                          (DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x020E, 0xA82F);
  
  EXTERN_API( OSErr )
  DBGetNewQuery                   (short                  queryID,
                                   QueryHandle *          query)                              THREEWORDINLINE(0x303C, 0x030F, 0xA82F);
  
  EXTERN_API( OSErr )
  DBDisposeQuery                  (QueryHandle            query)                              THREEWORDINLINE(0x303C, 0x0210, 0xA82F);
  
  EXTERN_API( OSErr )
  DBStartQuery                    (long *                 sessID,
                                   QueryHandle            query,
                                   DBStatusUPP            statusProc,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x0811, 0xA82F);
  
  EXTERN_API( OSErr )
  DBGetQueryResults               (long                   sessID,
                                   ResultsRecord *        results,
                                   long                   timeout,
                                   DBStatusUPP            statusProc,
                                   DBAsyncParmBlkPtr      asyncPB)                            THREEWORDINLINE(0x303C, 0x0A12, 0xA82F);
  
  EXTERN_API( OSErr )
  DBResultsToText                 (ResultsRecord *        results,
                                   Handle *               theText)                            THREEWORDINLINE(0x303C, 0x0413, 0xA82F);
  
  EXTERN_API( OSErr )
  DBInstallResultHandler          (DBType                 dataType,
                                   DBResultHandlerUPP     theHandler,
                                   Boolean                isSysHandler)                       THREEWORDINLINE(0x303C, 0x0514, 0xA82F);
  
  EXTERN_API( OSErr )
  DBRemoveResultHandler           (DBType                 dataType)                           THREEWORDINLINE(0x303C, 0x0215, 0xA82F);
  
  EXTERN_API( OSErr )
  DBGetResultHandler              (DBType                 dataType,
                                   DBResultHandlerUPP *   theHandler,
                                   Boolean                getSysHandler)                      THREEWORDINLINE(0x303C, 0x0516, 0xA82F);
  
  EXTERN_API( OSErr )
  DBIdle                          (void)                                                      THREEWORDINLINE(0x303C, 0x00FF, 0xA82F);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  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 /* __DATABASEACCESS__ */
  
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.