[Scummvm-git-logs] scummvm master -> 126cba16cf6b3400ac5c612aa39d0ce418023e02

sev- noreply at scummvm.org
Tue May 14 16:28:18 UTC 2024


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
126cba16cf DIRECTOR: Factored out XPFloat reading


Commit: 126cba16cf6b3400ac5c612aa39d0ce418023e02
    https://github.com/scummvm/scummvm/commit/126cba16cf6b3400ac5c612aa39d0ce418023e02
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-05-14T18:27:58+02:00

Commit Message:
DIRECTOR: Factored out XPFloat reading

Changed paths:
    engines/director/lingo/lingo-bytecode.cpp
    engines/director/util.cpp
    engines/director/util.h


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index b341e87f3f0..452aef9d4fb 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -22,7 +22,6 @@
 #include "common/config-manager.h"
 #include "common/file.h"
 #include "common/substream.h"
-#include "common/xpfloat.h"
 
 #include "director/director.h"
 #include "director/cast.h"
@@ -1242,10 +1241,7 @@ ScriptContext *LingoCompiler::compileLingoV4(Common::SeekableReadStreamEndian &s
 					// Floats are stored as an "80 bit IEEE Standard 754 floating
 					// point number (Standard Apple Numeric Environment [SANE] data type
 					// Extended).
-					uint16 signAndExponent = READ_BE_UINT16(&constsStore[pointer]);
-					uint64 mantissa = READ_BE_UINT64(&constsStore[pointer+2]);
-
-					constant.u.f = Common::XPFloat(signAndExponent, mantissa).toDouble(Common::XPFloat::kSemanticsSANE);
+					constant.u.f = readAppleFloat80(&constsStore[pointer]);
 				} else if (length == 8) {
 					constant.u.f = READ_BE_FLOAT64(&constsStore[pointer]);
 				} else {
diff --git a/engines/director/util.cpp b/engines/director/util.cpp
index cab1244f49e..1d43798e6c4 100644
--- a/engines/director/util.cpp
+++ b/engines/director/util.cpp
@@ -26,6 +26,7 @@
 #include "common/punycode.h"
 #include "common/str-array.h"
 #include "common/tokenizer.h"
+#include "common/xpfloat.h"
 #include "common/compression/deflate.h"
 
 #include "director/types.h"
@@ -1650,4 +1651,15 @@ void DirectorEngine::delayMillis(uint32 delay) {
 	_system->delayMillis(delay);
 }
 
+double readAppleFloat80(byte *ptr) {
+	// Floats in an "80 bit IEEE Standard 754 floating
+	// point number (Standard Apple Numeric Environment [SANE] data type
+	// Extended).
+
+	uint16 signAndExponent = READ_BE_UINT16(&ptr[0]);
+	uint64 mantissa = READ_BE_UINT64(&ptr[2]);
+
+	return Common::XPFloat(signAndExponent, mantissa).toDouble(Common::XPFloat::kSemanticsSANE);
+}
+
 } // End of namespace Director
diff --git a/engines/director/util.h b/engines/director/util.h
index a9cb0d2a6bb..59f4f8d8e91 100644
--- a/engines/director/util.h
+++ b/engines/director/util.h
@@ -70,6 +70,8 @@ Common::Path dumpFactoryName(const char *prefix, const char *name, const char *e
 
 bool isButtonSprite(SpriteType spriteType);
 
+double readAppleFloat80(byte *ptr);
+
 class RandomState {
 public:
 	uint32 _seed;




More information about the Scummvm-git-logs mailing list