PVOID __KernelAllocateMemory ( ULONG ulSize, PCSTR pFileName, ULONG LineNumber ) { PAL_MEM_PREHEADER pHeader; if ( !gMemAllocMonitorInitialized ) { __KernelInitializeMemAllocMonitor(); } pHeader = RealKernelAllocateMemory(ulSize + sizeof(AL_MEM_PREHEADER) + AL_MEM_POST_PAD_SIZE); if ( pHeader ) { if ( GlobalDebugLevel >= 8 ) { KernelTrace("__KernelAllocateMemory -- %s:%lu, allocated pMem = 0x%x ...\n", pFileName, LineNumber, ACCESS_MEM_FROM_PREHEADER(pHeader)); } KernelZeroMemory(pHeader, ulSize + sizeof(AL_MEM_PREHEADER) + AL_MEM_POST_PAD_SIZE); pHeader->MemTrueSize = ulSize; KernelAcquireLock(&gMemAllocMonitorLock); gMemAllocTotalSize += ulSize; gNumberMemAllocated ++; KernelReleaseLock(&gMemAllocMonitorLock); return ACCESS_MEM_FROM_PREHEADER(pHeader); } else { KernelTrace("KernelAllocateMemory -- insufficient resources for %lu bytes -- %s:%lu!!!\n", ulSize, pFileName, LineNumber); KernelTrace("KernelAllocateMemory -- current number of allocated = %lu, size = %lu.\n", gNumberMemAllocated, gMemAllocTotalSize); /*DH DEBUG*/ memShow(0); taskShow(taskIdSelf(), 1); checkStack(0); /*force an exception*/ *(PULONG)0 = 0; return NULL; } }
int main (void) { int gameMode = MODE_INIT; int playerHand; int enemyHand; int records[RECORD_MAX][2]; int recordHeadIndex = 0; init(records, RECORD_MAX); while (1) { switch (gameMode) { case MODE_INIT: gameMode = taskInit(); break; case MODE_OP: gameMode = taskOp(&playerHand); break; case MODE_CHOICE: gameMode = taskChoiceHand(&enemyHand); saveHands(records, &recordHeadIndex, playerHand, enemyHand); break; case MODE_SHOW: gameMode = taskShow(playerHand, enemyHand); break; case MODE_SELECT: gameMode = taskSelect(); break; case MODE_RECORD: gameMode = taskRecord(records, recordHeadIndex, RECORD_MAX); break; case MODE_ED: gameMode = taskEd(records, recordHeadIndex, RECORD_MAX); return gameMode; } } }