[Scummvm-git-logs] scummvm master -> 3f5479fd1d611418f8818929853efe55bdac7d8c

ysj1173886760 42030331+ysj1173886760 at users.noreply.github.com
Tue Jul 27 12:56:21 UTC 2021


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

Summary:
41d11e05b9 DIRECTOR: implement b_sort
3f5479fd1d DIRECTOR: add comment for b_sort


Commit: 41d11e05b9cdd2d573f3b91ce276d71b0ec298f5
    https://github.com/scummvm/scummvm/commit/41d11e05b9cdd2d573f3b91ce276d71b0ec298f5
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-27T20:55:59+08:00

Commit Message:
DIRECTOR: implement b_sort

Changed paths:
    engines/director/lingo/lingo-builtins.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index a12cb971e2..fd92415bcd 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -959,9 +959,26 @@ void LB::b_setProp(int nargs) {
 	}
 }
 
+static bool sortArrayHelper(const Datum &lhs, const Datum &rhs) {
+	return lhs.asInt() < rhs.asInt();
+}
+
+static bool sortPArrayHelper(const PCell &lhs, const PCell &rhs) {
+	return lhs.p.asString() < rhs.p.asString();
+}
+
 void LB::b_sort(int nargs) {
-	g_lingo->printSTUBWithArglist("b_sort", nargs);
-	g_lingo->dropStack(nargs);
+	Datum list = g_lingo->pop();
+
+	if (list.type == ARRAY) {
+		Common::sort(list.u.farr->begin(), list.u.farr->end(), sortArrayHelper);
+
+	} else if (list.type == PARRAY) {
+		Common::sort(list.u.parr->begin(), list.u.parr->end(), sortPArrayHelper);
+
+	} else {
+		warning("LB::b_sort can not handle argument of type %s", list.type2str());
+	}
 }
 
 


Commit: 3f5479fd1d611418f8818929853efe55bdac7d8c
    https://github.com/scummvm/scummvm/commit/3f5479fd1d611418f8818929853efe55bdac7d8c
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-27T20:55:59+08:00

Commit Message:
DIRECTOR: add comment for b_sort

Changed paths:
    engines/director/lingo/lingo-builtins.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index fd92415bcd..666c1279ff 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -968,6 +968,10 @@ static bool sortPArrayHelper(const PCell &lhs, const PCell &rhs) {
 }
 
 void LB::b_sort(int nargs) {
+	// in D4 manual, p266. linear list is sorted by values
+	// property list is sorted alphabetically by properties
+	// once the list is sorted, it maintains it's sort order even when we add new variables using add command
+	// see b_append to get more details.
 	Datum list = g_lingo->pop();
 
 	if (list.type == ARRAY) {




More information about the Scummvm-git-logs mailing list