From 58a3d0102775a7c6b95f468a0d8392b1c96fab43 Mon Sep 17 00:00:00 2001 From: shenlei Date: Wed, 30 Sep 2026 16:10:32 +0900 Subject: [PATCH] port: ScriptLib Resource.cpp verbatim 40250; PythonUtils mapped (already verbatim) Co-Authored-By: Claude Opus 5.5 --- audit/history.jsonl | 2 + audit/port-map/ScriptLib/PythonUtils.cpp.json | 99 ++++++++++++--- audit/port-map/ScriptLib/Resource.cpp.json | 69 +++++++++++ .../PythonNetworkDatagramModule.cpp.json | 11 ++ .../PythonProfilerModule.cpp.json | 17 +++ src/platform/ScriptLib/Resource.cpp | 117 ++++++++++++++---- 6 files changed, 275 insertions(+), 40 deletions(-) create mode 100644 audit/port-map/ScriptLib/Resource.cpp.json create mode 100644 audit/port-map/UserInterface/PythonNetworkDatagramModule.cpp.json create mode 100644 audit/port-map/UserInterface/PythonProfilerModule.cpp.json diff --git a/audit/history.jsonl b/audit/history.jsonl index e9700854..7718e0cd 100644 --- a/audit/history.jsonl +++ b/audit/history.jsonl @@ -640,3 +640,5 @@ {"date": "2026-09-30", "unit": "EterLib/GrpDevice.cpp", "action": "port", "evidence": "verbatim except Create (recording device in place of Direct3DCreate8/detector/CreateDevice, EL3D_ConfirmDevice on its caps); RecordingDevice decodes declaration-only vertex shaders to stream-0 FVFs; GrpScreen Show uses the GrpDevice browser globals; port.app_loop (PT/PNT/PNT2 FVFs, max texture 4096), full ctest, live-client screenshot matches"} {"date": "2026-09-30", "unit": "EterLib/GrpDetector.cpp", "action": "port", "evidence": "verbatim; IDirect3D8 shim completed (adapter count/caps/format checks/CreateDevice) and implemented once as the host adapter behind Direct3DCreate8 (RecordingDevice.cpp), which CPythonGraphic::GetD3D also returns; GrpDevice::Create now verbatim but for the D3DX debug meshes; port.app_loop (800x600x32 HWVP D16 mode, ms_lpd3d, GetString), full ctest, live-client screenshot matches"} {"date": "2026-09-30", "unit": "UserInterface/UserInterface.cpp", "action": "port", "evidence": "ApplicationSetErrorString/ApplicationStringTable_Initialize verbatim + port.app_loop; Main ADAPTED to PythonBoot; Win32 entry/launcher options N_A"} +{"date": "2026-09-30", "unit": "ScriptLib/PythonUtils.cpp", "action": "port", "evidence": "already verbatim (udiff: MSVC cast + perf counters); mapped"} +{"date": "2026-09-30", "unit": "ScriptLib/Resource.cpp", "action": "port", "evidence": "verbatim 40250 (was a rewrite that also registered .png); ctest 29/29, screenshot unchanged"} diff --git a/audit/port-map/ScriptLib/PythonUtils.cpp.json b/audit/port-map/ScriptLib/PythonUtils.cpp.json index 723b9745..3dda8c36 100644 --- a/audit/port-map/ScriptLib/PythonUtils.cpp.json +++ b/audit/port-map/ScriptLib/PythonUtils.cpp.json @@ -5,61 +5,122 @@ "contracts": [], "functions": { "Py_BadArgument": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:Py_BadArgument" + ] }, "Py_BuildException": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:Py_BuildException" + ] }, "Py_BuildNone": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:Py_BuildNone" + ] }, "Py_ReleaseNone": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:Py_ReleaseNone" + ] }, "PyTuple_GetObject": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetObject" + ] }, "PyTuple_GetLong": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetLong" + ] }, "PyTuple_GetDouble": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetDouble" + ] }, "PyTuple_GetFloat": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetFloat" + ] }, "PyTuple_GetByte": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetByte" + ], + "note": "verbatim except `unsigned char(val)` (MSVC-only cast) written as `(unsigned char) val`." }, "PyTuple_GetInteger": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetInteger" + ] }, "PyTuple_GetUnsignedLong": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetUnsignedLong" + ] }, "PyTuple_GetUnsignedInteger": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetUnsignedInteger" + ] }, "PyTuple_GetString": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetString" + ] }, "PyTuple_GetBoolean": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetBoolean" + ] }, "PyCallClassMemberFunc": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:PyCallClassMemberFunc" + ] }, "PyCallClassMemberFunc_ByPyString": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:PyCallClassMemberFunc_ByPyString" + ] }, "__PyCallClassMemberFunc_ByCString": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:__PyCallClassMemberFunc_ByCString" + ], + "note": "verbatim plus the MtPerf::CPythonScope / CountPythonMissing perf counters (no behaviour change)." }, "__PyCallClassMemberFunc_ByPyString": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:__PyCallClassMemberFunc_ByPyString" + ], + "note": "verbatim plus the MtPerf::CPythonScope / CountPythonMissing perf counters (no behaviour change)." }, "__PyCallClassMemberFunc": { - "status": "TODO" + "status": "PORTED", + "impl": [ + "src/port/ScriptLib/PythonUtils.cpp:__PyCallClassMemberFunc" + ], + "note": "verbatim plus the MtPerf::CPythonScope / CountPythonMissing perf counters (no behaviour change)." } } } diff --git a/audit/port-map/ScriptLib/Resource.cpp.json b/audit/port-map/ScriptLib/Resource.cpp.json new file mode 100644 index 00000000..b43d57da --- /dev/null +++ b/audit/port-map/ScriptLib/Resource.cpp.json @@ -0,0 +1,69 @@ +{ + "reference": "ScriptLib/Resource.cpp", + "reference_sha256": "559339874da495b2e5fbeb78256a6ea9dfde2ea11f838d55c4f01b918a052c7f", + "priority": "P4", + "contracts": [], + "functions": { + "NewImage": { + "status": "PORTED", + "impl": [ + "src/platform/ScriptLib/Resource.cpp:NewImage" + ] + }, + "NewSubImage": { + "status": "PORTED", + "impl": [ + "src/platform/ScriptLib/Resource.cpp:NewSubImage" + ] + }, + "NewText": { + "status": "PORTED", + "impl": [ + "src/platform/ScriptLib/Resource.cpp:NewText" + ] + }, + "NewThing": { + "status": "PORTED", + "impl": [ + "src/platform/ScriptLib/Resource.cpp:NewThing" + ] + }, + "NewEffectMesh": { + "status": "PORTED", + "impl": [ + "src/platform/ScriptLib/Resource.cpp:NewEffectMesh" + ] + }, + "NewAttributeData": { + "status": "PORTED", + "impl": [ + "src/platform/ScriptLib/Resource.cpp:NewAttributeData" + ] + }, + "CPythonResource::DumpFileList": { + "status": "PORTED", + "impl": [ + "src/platform/ScriptLib/Resource.cpp:CPythonResource::DumpFileList" + ] + }, + "CPythonResource::Destroy": { + "status": "PORTED", + "impl": [ + "src/platform/ScriptLib/Resource.cpp:CPythonResource::Destroy" + ], + "note": "verbatim; like 40250 only CPythonApplication::Destroy calls it, which is DIVERGENT (host tears down via PythonBoot::Stop resets), so it does not run at shutdown yet." + }, + "CPythonResource::CPythonResource": { + "status": "PORTED", + "impl": [ + "src/platform/ScriptLib/Resource.cpp:CPythonResource::CPythonResource" + ] + }, + "CPythonResource::~CPythonResource": { + "status": "PORTED", + "impl": [ + "src/platform/ScriptLib/Resource.cpp:CPythonResource::~CPythonResource" + ] + } + } +} diff --git a/audit/port-map/UserInterface/PythonNetworkDatagramModule.cpp.json b/audit/port-map/UserInterface/PythonNetworkDatagramModule.cpp.json new file mode 100644 index 00000000..3e2a2010 --- /dev/null +++ b/audit/port-map/UserInterface/PythonNetworkDatagramModule.cpp.json @@ -0,0 +1,11 @@ +{ + "reference": "UserInterface/PythonNetworkDatagramModule.cpp", + "reference_sha256": "fc49120f237cee410aeb9d8d18dcda0eeeb8a244f541af878b8ebaf08858e9de", + "priority": "P4", + "contracts": [], + "functions": { + "initudp": { + "status": "TODO" + } + } +} diff --git a/audit/port-map/UserInterface/PythonProfilerModule.cpp.json b/audit/port-map/UserInterface/PythonProfilerModule.cpp.json new file mode 100644 index 00000000..082d7999 --- /dev/null +++ b/audit/port-map/UserInterface/PythonProfilerModule.cpp.json @@ -0,0 +1,17 @@ +{ + "reference": "UserInterface/PythonProfilerModule.cpp", + "reference_sha256": "6afa0c492e2ad88eea775c55ff3f6bd9c490abe91408772dae461e40a207b96c", + "priority": "P4", + "contracts": [], + "functions": { + "profilerPush": { + "status": "TODO" + }, + "profilerPop": { + "status": "TODO" + }, + "initProfiler": { + "status": "TODO" + } + } +} diff --git a/src/platform/ScriptLib/Resource.cpp b/src/platform/ScriptLib/Resource.cpp index 224b4dcc..733efc2c 100644 --- a/src/platform/ScriptLib/Resource.cpp +++ b/src/platform/ScriptLib/Resource.cpp @@ -1,31 +1,106 @@ +// 40250 ScriptLib/Resource.cpp, verbatim. #include "ScriptLib/StdAfx.h" -#include "ScriptLib/Resource.h" -#include "EterLib/GrpImage.h" +#include "EterLib/GrpExpandedImageInstance.h" +#include "EterLib/GrpTextInstance.h" +#include "EterLib/GrpMarkInstance.h" #include "EterLib/GrpSubImage.h" #include "EterLib/GrpText.h" #include "EterLib/AttributeData.h" #include "EterGrnLib/Thing.h" +#include "EterGrnLib/ThingInstance.h" #include "EffectLib/EffectMesh.h" +#include "EffectLib/EffectInstance.h" +#include "GameLib/WeaponTrace.h" +#include "GameLib/MapType.h" +#include "GameLib/GameType.h" +#include "GameLib/RaceData.h" +#include "GameLib/RaceMotionData.h" +#include "GameLib/ActorInstance.h" +#include "GameLib/Area.h" +#include "GameLib/ItemData.h" +#include "GameLib/FlyingData.h" +#include "GameLib/FlyTrace.h" +#include "GameLib/FlyingInstance.h" +#include "GameLib/FlyingData.h" -namespace { -CResource* NewUIImage(const char* name) { return new CGraphicImage(name); } -CResource* NewUISubImage(const char* name) { return new CGraphicSubImage(name); } -// 40250 UserInterface/PythonApplication.cpp NewText: a ":[i].fnt" name is a CGraphicText. -CResource* NewText(const char* name) { return new CGraphicText(name); } -CResource* NewThing(const char* name) { return new CGraphicThing(name); } -CResource* NewEffectMesh(const char* name) { return new CEffectMesh(name); } -CResource* NewAttributeData(const char* name) { return new CAttributeData(name); } +#include "ScriptLib/Resource.h" + +CResource * NewImage(const char* c_szFileName) +{ + return new CGraphicImage(c_szFileName); } -CPythonResource::CPythonResource() { - for (const char* ext : {"tga", "dds", "png", "jpg", "bmp"}) - m_resManager.RegisterResourceNewFunctionPointer(ext, NewUIImage); - m_resManager.RegisterResourceNewFunctionPointer("sub", NewUISubImage); - m_resManager.RegisterResourceNewFunctionPointer("fnt", NewText); - m_resManager.RegisterResourceNewFunctionPointer("gr2", NewThing); - m_resManager.RegisterResourceNewFunctionPointer("mde", NewEffectMesh); - m_resManager.RegisterResourceNewFunctionPointer("mdatr", NewAttributeData); +CResource * NewSubImage(const char* c_szFileName) +{ + return new CGraphicSubImage(c_szFileName); +} + +CResource * NewText(const char* c_szFileName) +{ + return new CGraphicText(c_szFileName); +} + +CResource * NewThing(const char* c_szFileName) +{ + return new CGraphicThing(c_szFileName); +} + +CResource * NewEffectMesh(const char* c_szFileName) +{ + return new CEffectMesh(c_szFileName); +} + +CResource * NewAttributeData(const char* c_szFileName) +{ + return new CAttributeData(c_szFileName); +} + +void CPythonResource::DumpFileList(const char * c_szFileName) +{ + m_resManager.DumpFileListToTextFile(c_szFileName); +} + +void CPythonResource::Destroy() +{ + CFlyingInstance::DestroySystem(); + CActorInstance::DestroySystem(); + CArea::DestroySystem(); + CGraphicExpandedImageInstance::DestroySystem(); + CGraphicImageInstance::DestroySystem(); + CGraphicMarkInstance::DestroySystem(); + CGraphicThingInstance::DestroySystem(); + CGrannyModelInstance::DestroySystem(); + CGraphicTextInstance::DestroySystem(); + CEffectInstance::DestroySystem(); + CWeaponTrace::DestroySystem(); + CFlyTrace::DestroySystem(); + + m_resManager.DestroyDeletingList(); + + CFlyingData::DestroySystem(); + CItemData::DestroySystem(); + CEffectData::DestroySystem(); + CEffectMesh::SEffectMeshData::DestroySystem(); + CRaceData::DestroySystem(); + NRaceData::DestroySystem(); + CRaceMotionData::DestroySystem(); + + m_resManager.Destroy(); +} + +CPythonResource::CPythonResource() +{ + m_resManager.RegisterResourceNewFunctionPointer("sub", NewSubImage); + m_resManager.RegisterResourceNewFunctionPointer("dds", NewImage); + m_resManager.RegisterResourceNewFunctionPointer("jpg", NewImage); + m_resManager.RegisterResourceNewFunctionPointer("tga", NewImage); + m_resManager.RegisterResourceNewFunctionPointer("bmp", NewImage); + m_resManager.RegisterResourceNewFunctionPointer("fnt", NewText); + m_resManager.RegisterResourceNewFunctionPointer("gr2", NewThing); + m_resManager.RegisterResourceNewFunctionPointer("mde", NewEffectMesh); + m_resManager.RegisterResourceNewFunctionPointer("mdatr", NewAttributeData); +} + +CPythonResource::~CPythonResource() +{ } -CPythonResource::~CPythonResource() { m_resManager.DestroyDeletingList(); } -void CPythonResource::Destroy() { m_resManager.DestroyDeletingList(); m_resManager.Destroy(); } -void CPythonResource::DumpFileList(const char* name) { m_resManager.DumpFileListToTextFile(name); }