⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aeegen.c

📁 this program is ubicontent example source using BREW thanks.
💻 C
字号:
//======================================================
//颇老:  aeegen.h
//
//林力: 葛碘苞 览侩橇肺弊伐 角青券版 包府 颇老  
//
//汲疙:
//   葛碘 棺 局敲复 备炼眉甫 扁馆栏肺 荤侩磊 裹困狼 览侩橇肺弊伐 
//   角青 券版 包府 窃荐 备泅
//
//累己磊:
//   2006.02. 冠蛮刮(eacs@paran.com)
//===== =================================================

#include "std.h"
#include "App.h"


//AEEModole 檬扁拳

static uint32     AEEMod_AddRef(IModule *po);
static uint32     AEEMod_Release(IModule *po);
static int        AEEMod_CreateInstance(IModule *po,IShell *pIShell,AEECLSID ClsId, void **ppObj);
static void       AEEMod_FreeResources(IModule *po, IHeap *ph, IFileMgr *pfm);

#ifdef AEE_SIMULATOR
AEEHelperFuncs *g_pvtAEEStdLibEntry;
#endif

#ifdef AEE_SIMULATOR
__declspec(dllexport) int AEEMod_Load(IShell *pIShell, void *ph, IModule **ppMod)
#else
#if defined(BREW_MODULE) || defined(FLAT_BREW)
extern int module_main(IShell *pIShell, void *ph, IModule **ppMod);
int module_main(IShell *pIShell, void *ph, IModule **ppMod)
#else
int AEEMod_Load(IShell *pIShell, void *ph, IModule **ppMod)
#endif
#endif
{
   return AEEStaticMod_New(sizeof(AEEMod),pIShell,ph,ppMod,NULL,NULL);
}

int AEEStaticMod_New(int16 nSize, IShell *pIShell, void *ph, IModule **ppMod,PFNMODCREATEINST pfnMC,PFNFREEMODDATA pfnMF)
{
   AEEMod *pMe = NULL;
   VTBL(IModule) *modFuncs;

   if (!ppMod || !pIShell) {
      return EFAILED;
   }

   if (nSize < 0) {
      return EBADPARM;
   }

   *ppMod = NULL;
  
#ifdef AEE_SIMULATOR
   if (!ph) {
      return EFAILED;
   } else {
      g_pvtAEEStdLibEntry = (AEEHelperFuncs *)ph;
   }
#endif

   if (nSize < sizeof(AEEMod)) {
      nSize += sizeof(AEEMod);
   }

   if (NULL == (pMe = (AEEMod *)MALLOC(nSize + sizeof(IModuleVtbl)))) {
      return ENOMEMORY;
   }
  
   modFuncs = (IModuleVtbl *)((byte *)pMe + nSize);

   modFuncs->AddRef         = AEEMod_AddRef;
   modFuncs->Release        = AEEMod_Release;
   modFuncs->CreateInstance = AEEMod_CreateInstance;
   modFuncs->FreeResources  = AEEMod_FreeResources;
   
   INIT_VTBL(pMe, IModule, *modFuncs);

   pMe->pfnModCrInst = pfnMC;

   pMe->pfnModFreeData = pfnMF;

   pMe->m_nRefs = 1;
   pMe->m_pIShell = pIShell;
   ISHELL_AddRef(pIShell);

   *ppMod = (IModule*)pMe;

   return SUCCESS;
}

static uint32 AEEMod_AddRef(IModule *po)
{
   return (++((AEEMod *)po)->m_nRefs);
}

static uint32 AEEMod_Release(IModule *po)
{
   AEEMod *pMe = (AEEMod *)po;

   if (--pMe->m_nRefs != 0) {
      return pMe->m_nRefs;
   }

   if (pMe->pfnModFreeData) {
      pMe->pfnModFreeData(po);
   }

   if (pMe->m_pIShell) {
      ISHELL_Release(pMe->m_pIShell);
      pMe->m_pIShell = NULL;
   }

   FREE_VTBL(pMe, IModule);
   FREE(pMe);
  
   return 0;
}

static int AEEMod_CreateInstance(IModule *pIModule,IShell *pIShell,
                                 AEECLSID ClsId,void **ppObj)
{
   AEEMod    *pMe = (AEEMod *)pIModule;
   int        nRet = EFAILED;

   if (pMe->pfnModCrInst) 
   {
      nRet = pMe->pfnModCrInst(ClsId, pIShell, pIModule, ppObj);
#if !defined(AEE_STATIC)
   } 
   else 
   {
      nRet = AEEClsCreateInstance(ClsId, pIShell, pIModule, ppObj);
#endif
   }

   return nRet;
}

static void AEEMod_FreeResources(IModule *po, IHeap *ph, IFileMgr *pfm)
{
   (void)po,(void)ph,(void)pfm; /* 荤侩登瘤 臼澜. */
}


//AEEApplet 檬扁拳

static uint32  AEEApplet_AddRef(IApplet * po);
static uint32  AEEApplet_Release(IApplet * po);
static boolean AEEApplet_HandleEvent(IApplet * po, AEEEvent evt, 
                                     uint16 wParam, uint32 dwParam);
static uint32  AEEApplet_AddRef(IApplet * po)
{
   return ++(((AEEApplet *)po)->m_nRefs);
}

static uint32 AEEApplet_Release(IApplet * po)
{
   IShell * pIShell = NULL;

   AEEApplet * pMe = (AEEApplet *)po;

   if (--pMe->m_nRefs)
      return(pMe->m_nRefs);

   if(pMe->pFreeAppData)
      pMe->pFreeAppData(po);

   if (pMe->m_pIDisplay)
      IDISPLAY_Release(pMe->m_pIDisplay);   


   IMODULE_Release(pMe->m_pIModule);

   pIShell = pMe->m_pIShell;

   FREE_VTBL(pMe, IApplet);
   FREE(pMe);   
   
   ISHELL_Release(pIShell);   //僵 力芭

   return 0;
}

boolean  AEEApplet_HandleEvent(IApplet * po, AEEEvent evt, uint16 wParam,uint32 dwParam)
{
   return ((AEEApplet *)po)->pAppHandleEvent(po, evt,wParam,dwParam);
}

boolean AEEApplet_New(int16 nIn,
                      AEECLSID clsID,
                      IShell * pIShell, 
                      IModule * pIModule, 
                      IApplet **ppobj, 
                      AEEHANDLER pAppHandleEvent,
                      PFNFREEAPPDATA pFreeAppData)
{
   AEEApplet *       pMe = NULL;
   VTBL(IApplet) *   appFuncs;
   int               nSize;

   if(nIn < 0)
      return(FALSE);

   nSize = (int)nIn;

   if(!ppobj)
      return(FALSE);

   *ppobj = NULL;

   if (!pIShell || !pIModule)
      return FALSE;

   if(nSize < sizeof(AEEApplet))
      nSize += sizeof(AEEApplet);

   if (NULL == (pMe = (AEEApplet*)MALLOC(nSize + sizeof(IAppletVtbl))))
      return FALSE;

   appFuncs = (IAppletVtbl *)((byte *)pMe + nSize);

   appFuncs->AddRef      = AEEApplet_AddRef;
   appFuncs->Release     = AEEApplet_Release;
   appFuncs->HandleEvent = AEEApplet_HandleEvent;


   INIT_VTBL(pMe, IApplet, *appFuncs);   //VTBL 檬扁拳

   pMe->m_nRefs      = 1;
   pMe->m_pIShell    = pIShell;
   pMe->m_pIModule   = pIModule;
   pMe->m_pIDisplay  = NULL;

   pMe->clsID        = clsID;

   pMe->pAppHandleEvent = pAppHandleEvent;
   pMe->pFreeAppData = pFreeAppData;

   ISHELL_CreateInstance(pIShell, AEECLSID_DISPLAY, 
                         (void **)&pMe->m_pIDisplay);

   if (!pMe->m_pIDisplay) 
   {
      FREE_VTBL(pMe, IApplet);
      FREE(pMe);
      return FALSE;
   }

   ISHELL_AddRef(pIShell);
   IMODULE_AddRef(pIModule);


   *ppobj = (IApplet*)pMe;
  
   return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -