/**
* This function calls a RAM application by passing it a database name via sysAppLaunchCmdOpenDB launch code.
*
* @param appCreatorID CreatorID of the application to be launched
* @param dbName DB name to be passed
*
* @return 0 if OK, dmErrCantFind, memErrNotEnoughSpace plus return values from SysUIAppSwitch
*
* P.S. This interface is based on (not existing anymore) http://www.kinoma.com/technote01.html
*/
int DBLaunch_WithCommand( UInt32 appCreatorID, const char* dbName )
{
// Find Application
LocalID appDbID ;
UInt16 cardNo ;
DmSearchStateType stateInfo ;
if( DmGetNextDatabaseByTypeCreator(true,&stateInfo,sysFileTApplication,appCreatorID,true,&cardNo,&appDbID) !=0 )
return dmErrCantFind ;
else
{
LocalID dbID = DmFindDatabase( 0, dbName ) ;
if( dbID )
{
typedef struct tagAppLaunchCmdOpenDBType
{
UInt16 cardNo ;
LocalID dbID ;
UInt32 creator ;
UInt32 type ;
Char dbName[dmDBNameLength] ;
}
AppLaunchCmdOpenDBType ;
// Allocate parameter block
AppLaunchCmdOpenDBType *cmdPBP = MemPtrNew(sizeof(AppLaunchCmdOpenDBType)) ;
if( cmdPBP==NULL )
return memErrNotEnoughSpace ;
// Fill it in
MemPtrSetOwner( cmdPBP, 0 ) ;
cmdPBP->cardNo = 0 ;
cmdPBP->dbID = dbID ;
DmDatabaseInfo( 0, dbID, cmdPBP->dbName, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,&cmdPBP->type, &cmdPBP->creator ) ;
// Call Application
return SysUIAppSwitch( 0, appDbID, sysAppLaunchCmdOpenDB, cmdPBP ) ;
}
else
return dmErrCantFind ;
}
}