home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-04-21 | 3.6 KB | 129 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: FWPriTas.cpp
- // Release Version: $ 1.0d1 $
- //
- // Creation Date: 3/25/94
- //
- // Copyright: © 1994 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #ifndef FWPRITAS_H
- #include "FWPriTas.h"
- #endif
-
- #ifndef FWPRIMEM_H
- #include "FWPriMem.h"
- #endif
-
- #ifdef FW_HAS_INSTANCE_DATA
- void* FW_CPrivTaskGlobals::gTaskGlobalData = 0;
- #endif
-
- #ifdef FW_BUILD_WIN
- #include <Windows.h>
- #endif
-
- #ifdef FW_BUILD_MAC
- #include <SegLoad.h>
- #endif
-
- //----------------------------------------------------------------------------------------
- // FW_CPrivTaskGlobals::Initialize
- //----------------------------------------------------------------------------------------
-
- void FW_CPrivTaskGlobals::Initialize()
- {
- // Nothing to do here, the two globals for this unit are initialized when the
- // entire task globals block is allocated or reallocated.
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPrivTaskGlobals::Terminate
- //----------------------------------------------------------------------------------------
-
- void FW_CPrivTaskGlobals::Terminate()
- {
- FW_PrimitiveFreeBlock(GetTaskGlobals());
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPrivTaskGlobals::GetTaskGlobals
- //----------------------------------------------------------------------------------------
-
- void* FW_CPrivTaskGlobals::GetTaskGlobals()
- {
- register void* p = PrivGetTaskGlobals();
- if (p == 0)
- p = AllocateTaskGlobals();
- if (p == 0)
- FatalExit();
- return p;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPrivTaskGlobals::AllocateTaskGlobals
- //----------------------------------------------------------------------------------------
-
- void* FW_CPrivTaskGlobals::AllocateTaskGlobals()
- {
- char *p = (char *) FW_PrimitiveAllocateBlock(kDefaultGlobalsBlockSize);
- if (p == 0)
- FatalExit();
- for (int i=0; i<kDefaultGlobalsBlockSize; i++)
- p[i] = 0;
- PrivSetTaskGlobals((void *) p);
- ((FW_SPrivTaskGlobalsHeader*)p)->gPrivTaskGlobalsSize = kDefaultGlobalsBlockSize;
- ((FW_SPrivTaskGlobalsHeader*)p)->gThisBlock = p;
- return p;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPrivTaskGlobals::ResizeTaskGlobals
- //----------------------------------------------------------------------------------------
-
- void FW_CPrivTaskGlobals::ResizeTaskGlobals(unsigned short size)
- {
- unsigned short oldSize, i;
-
- char *oldBlock = (char *) GetTaskGlobals();
- if (oldBlock == 0)
- oldSize = 0;
- else
- oldSize = GetTaskGlobalsHeader().gPrivTaskGlobalsSize;
-
- if (oldSize < size)
- {
- char *newBlock = (char *) FW_PrimitiveAllocateBlock(size);
- if (newBlock == 0)
- FatalExit();
- for (i=0; i<oldSize; i++)
- newBlock[i] = oldBlock[i];
- for (; i < size; i++)
- newBlock[i] = 0;
- PrivSetTaskGlobals(newBlock);
- ((FW_SPrivTaskGlobalsHeader*)newBlock)->gPrivTaskGlobalsSize = size;
- ((FW_SPrivTaskGlobalsHeader*)newBlock)->gThisBlock = newBlock;
- }
-
- FW_PrimitiveFreeBlock(oldBlock);
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPrivTaskGlobals::FatalExit
- //----------------------------------------------------------------------------------------
-
- void FW_CPrivTaskGlobals::FatalExit()
- {
- #if defined FW_BUILD_MAC
- ::Debugger();
- ::ExitToShell();
- #elif defined FW_BUILD_WIN
- #ifndef FW_BUILD_DOS
- ::DebugBreak();
- ::FatalAppExit(0, "Unable to initialize task globals");
- #endif
- #endif
- }
-