Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

365 lines
8.7 KiB
C++

//===========================================================================//
// File: storage.cpp
// Project: LabRat
// Contents:
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 07/9/96 JSE Initial coding.
//---------------------------------------------------------------------------//
// Copyright (C) 1996, Virtual World Entertainment, Inc. //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#include "stdafx.h"
#include "storage.hpp"
#include "new.h"
#include "math.h"
//#ifdef _DEBUG
//#define new DEBUG_NEW
//#undef THIS_FILE
//static char THIS_FILE[] = __FILE__;
//#endif
//
// All new types must be registered in these functions.
//
/////////////////////////////////////////////////////////////////////////////
TraceStorage *
TraceStorage::FindElement(CObarrayHolder *data_holder, int element)
{
TraceStorage *trace_str;
switch (data_holder->traceType)
{
case CLabRatDoc::LogicalTraceType:
trace_str = data_holder->data;
*((char **)(&trace_str)) += (sizeof(ToggleTraceStorage)*element);
break;
case CLabRatDoc::IntegerTraceType:
trace_str = data_holder->data;
*((char **)(&trace_str)) += (sizeof(IntegerTraceStorage)*element);
break;
case CLabRatDoc::ScalarTraceType:
trace_str = data_holder->data;
*((char **)(&trace_str)) += (sizeof(ScalarTraceStorage)*element);
break;
case CLabRatDoc::MarkerTraceType:
trace_str = data_holder->data;
*((char **)(&trace_str)) += (sizeof(MarkerTraceStorage)*element);
break;
case CLabRatDoc::ReceiverMessageTraceType:
trace_str = data_holder->data;
*((char **)(&trace_str)) += (sizeof(ReceiverMessageTraceStorage)*element);
break;
default:
trace_str = data_holder->data;
*((char **)(&trace_str)) += (sizeof(TraceStorage)*element);
break;
}
return trace_str;
}
/////////////////////////////////////////////////////////////////////////////
TraceLine *
TraceStorage::CreateTraceLine(int trace_type)
{
TraceLine *trace_line;
switch (trace_type)
{
case CLabRatDoc::LogicalTraceType:
trace_line =
(TraceLine*)new ToggleTraceLine;
break;
case CLabRatDoc::IntegerTraceType:
trace_line =
(TraceLine*)new IntegerTraceLine;
break;
case CLabRatDoc::ScalarTraceType:
trace_line =
(TraceLine*)new ScalarTraceLine;
break;
case CLabRatDoc::MarkerTraceType:
trace_line =
(TraceLine*)new MarkerTraceLine;
break;
case CLabRatDoc::ReceiverMessageTraceType:
trace_line =
(TraceLine*)new ReceiverMessageTraceLine;
break;
default:
trace_line =
new TraceLine;
}
return trace_line;
}
/////////////////////////////////////////////////////////////////////////////
void
TraceStorage::AllocateStorage(CObarrayHolder *data_holder)
{
if (data_holder->traceEntryCount == 0)
{
data_holder->size = 0;
return;
}
LPVOID mem_pointer;
int i;
TraceStorage *init_mem;
switch (data_holder->traceType)
{
case CLabRatDoc::LogicalTraceType:
data_holder->size = sizeof(ToggleTraceStorage) * data_holder->traceEntryCount;
mem_pointer =
VirtualAlloc(NULL, data_holder->size,
MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, PAGE_READWRITE);
init_mem = (TraceStorage *)mem_pointer;
for ( i = 0; i < data_holder->traceEntryCount; ++i)
{
init_mem = (TraceStorage *)new(init_mem) ToggleTraceStorage;
*((char **)(&init_mem)) += sizeof(ToggleTraceStorage);
}
data_holder->data = (TraceStorage *)mem_pointer;
break;
case CLabRatDoc::IntegerTraceType:
data_holder->size = sizeof(IntegerTraceStorage) * data_holder->traceEntryCount;
mem_pointer =
VirtualAlloc(NULL, data_holder->size,
MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, PAGE_READWRITE);
init_mem = (TraceStorage *)mem_pointer;
for ( i = 0; i < data_holder->traceEntryCount; ++i)
{
init_mem = (TraceStorage *)new(init_mem) IntegerTraceStorage;
*((char **)(&init_mem)) += sizeof(IntegerTraceStorage);
}
data_holder->data = (TraceStorage *)mem_pointer;
break;
case CLabRatDoc::ScalarTraceType:
data_holder->size = sizeof(ScalarTraceStorage) * data_holder->traceEntryCount;
mem_pointer =
VirtualAlloc(NULL, data_holder->size,
MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, PAGE_READWRITE);
init_mem = (TraceStorage *)mem_pointer;
for ( i = 0; i < data_holder->traceEntryCount; ++i)
{
init_mem = (TraceStorage *)new(init_mem) ScalarTraceStorage;
*((char **)(&init_mem)) += sizeof(ScalarTraceStorage);
}
data_holder->data = (TraceStorage *)mem_pointer;
break;
case CLabRatDoc::MarkerTraceType:
data_holder->size = sizeof(MarkerTraceStorage) * data_holder->traceEntryCount;
mem_pointer =
VirtualAlloc(NULL, data_holder->size,
MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, PAGE_READWRITE);
init_mem = (TraceStorage *)mem_pointer;
for ( i = 0; i < data_holder->traceEntryCount; ++i)
{
init_mem = (TraceStorage *)new(init_mem) MarkerTraceStorage;
*((char **)(&init_mem)) += sizeof(MarkerTraceStorage);
}
data_holder->data = (TraceStorage *)mem_pointer;
break;
case CLabRatDoc::ReceiverMessageTraceType:
data_holder->size = sizeof(ReceiverMessageTraceStorage) * data_holder->traceEntryCount;
mem_pointer =
VirtualAlloc(NULL, data_holder->size,
MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, PAGE_READWRITE);
init_mem = (TraceStorage *)mem_pointer;
for ( i = 0; i < data_holder->traceEntryCount; ++i)
{
init_mem = (TraceStorage *)new(init_mem) ReceiverMessageTraceStorage;
*((char **)(&init_mem)) += sizeof(ReceiverMessageTraceStorage);
}
data_holder->data = (TraceStorage *)mem_pointer;
break;
default:
data_holder->size = sizeof(TraceStorage) * data_holder->traceEntryCount;
mem_pointer =
VirtualAlloc(NULL, data_holder->size,
MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, PAGE_READWRITE);
init_mem = (TraceStorage *)mem_pointer;
for ( i = 0; i < data_holder->traceEntryCount; ++i)
{
init_mem = (TraceStorage *)new(init_mem) TraceStorage;
*((char **)(&init_mem)) += sizeof(TraceStorage);
}
data_holder->data = (TraceStorage *)mem_pointer;
break;
}
}
/////////////////////////////////////////////////////////////////////////////
void
TraceStorage::LoadData(
CArchive& /*ar*/, CObarrayHolder * /*data_holder*/, BYTE /*edge_flag*/)
{
}
/////////////////////////////////////////////////////////////////////////////
void
ToggleTraceStorage::LoadData(
CArchive& /*ar*/, CObarrayHolder * /*data_holder*/ , BYTE edge_flag)
{
if (edge_flag == CLabRatDoc::GoingDownFlag)
{
SetPosition(FALSE);
}
else
{
SetPosition(TRUE);
}
}
/////////////////////////////////////////////////////////////////////////////
void
IntegerTraceStorage::LoadData(
CArchive& ar, CObarrayHolder * /*data_holder*/, BYTE /*edge_flag*/)
{
ar >> position;
BigEndianConvert(position);
}
/////////////////////////////////////////////////////////////////////////////
void
ScalarTraceStorage::LoadData(
CArchive& ar, CObarrayHolder * /*data_holder*/, BYTE /*edge_flag*/)
{
ar >> position;
BigEndianConvert(position);
}
/////////////////////////////////////////////////////////////////////////////
void
ReceiverMessageTraceStorage::LoadData(
CArchive& ar, CObarrayHolder *data_holder, BYTE edge_flag)
{
ScalarTraceStorage::LoadData(ar, data_holder, edge_flag);
if (edge_flag == CLabRatDoc::Queing)
{
edgeFlag = messageQue;
}
else if (edge_flag == CLabRatDoc::Dispatching)
{
edgeFlag = messageDispatch;
}
ar >> messagePriority;
BYTE throwaway;
if (BigEndian)
{
ar >> throwaway;
ar >> throwaway;
ar >> throwaway;
ar >> throwaway;
}
ar >> classID;
if (BigEndian)
{
ar >> throwaway;
ar >> throwaway;
ar >> throwaway;
ar >> throwaway;
}
ar >> messageID;
BigEndianConvert(messagePriority);
BigEndianConvert(classID);
BigEndianConvert(messageID);
}