/**
* 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 ;
	}
}