Conerting GammaMOO database into Stunt

7 views
Skip to first unread message

The Prometheus MOO

unread,
Sep 6, 2015, 11:12:29 AM9/6/15
to moo-...@googlegroups.com
Greetings from a new group member!

I'm the arch wizard of a MOO that currently uses GammaMOO 1.8.3.
I've been looking at Stunt and would love to use its features, such as
the map datatype, JSON, multiple inheritance, etc etc.
I also use a lot of sub-second suspending/forking so would love a patch
for that for Stunt.
Anyway, my original question is this: How hard would it be to convert a
GammaMOO database to Stunt? Or is it doable at all?
Additionally, if it's not doable, can you guys please show me a good way
of porting things over? What I also love in Stut is its hashing, I've
tested it and it would fit my needs perfectly.

Thanks in advance!

--
Con

Tim van Dijen

unread,
Sep 6, 2015, 12:06:56 PM9/6/15
to MOO-...@googlegroups.com
From what I remember, GammaMOO doesn't change much to the database
format..
Stunt can be used with a default Lambdamoo database-format, so it should
be doable with perhaps a few minor adjustments.. Be prepared to manually
edit your database-file tough.
Some things I can think of that can potentially cause you trouble:
- Scattering-for statements - GammaMOO supports them, Stunt doesn't (but
can be easily patched to do so)
- Bit-wise operands - I don't think Stunt allows these
- Handle_uncaught_error and handle_task_timeout have an extra argument
in GammaMOO... Stunt can be patched to do the same
- subsecond fork/suspend - Stunt doesn't support this, but again can be
easily patched to do so
- Some builtins might have different names, or even different parameters

I guess the one way to find out how hard it is, is to go for it!

Op 6-9-2015 om 17:07 schreef The Prometheus MOO:

Prometheus MOO

unread,
Sep 6, 2015, 12:31:17 PM9/6/15
to MOO Talk
Hello!

Do you have an idea of from where I might get the patches for Stunt?

-- 
Con

Tim van Dijen

unread,
Sep 6, 2015, 12:38:17 PM9/6/15
to MOO-...@googlegroups.com
Hey,

I've attached the ones I think you need to this email..

Regards,

Tim

Op 6-9-2015 om 18:15 schreef Prometheus MOO:
--
You received this message because you are subscribed to the Google Groups "MOO Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to MOO-talk+u...@googlegroups.com.
To post to this group, send email to MOO-...@googlegroups.com.
Visit this group at http://groups.google.com/group/MOO-talk.
For more options, visit https://groups.google.com/d/optout.

scattered_for.patch
sub-second_fork_suspend.diff
handle_argstr.diff

The Prometheus MOO

unread,
Sep 7, 2015, 12:36:47 PM9/7/15
to moo-...@googlegroups.com
Greetings!
This might be a stupid question, but don't I need to change something in
the patches to make them work, too?
For instance, when it says:
Modified file 'execute.c'
the actual files is called 'execute.cc'
Either I'm not getting something here, or I am using, without knowing,
an out-of-date version of Stunt.

--
Con

Tim van Dijen

unread,
Sep 7, 2015, 1:00:15 PM9/7/15
to MOO-...@googlegroups.com
The patches were writen for LambdaMOO originally, so that's why they
refer to execute.c instead of .cc
Probably the best way is to go through the patch-files and manually
apply the changes to Stunt..

Op 7-9-2015 om 13:06 schreef The Prometheus MOO:

The Prometheus MOO

unread,
Sep 7, 2015, 2:06:21 PM9/7/15
to moo-...@googlegroups.com
Hey again...

I seem to be stuck trying to apply the patches. I tried manually and got
a bunch of errors even though I checked everything quite a few times.
Does anybody have an idea of why this could be? Execute.cc and fileio.cc
don't want to compile at all, and stop the compiling right there, even
though I didn't even modify fileio.cc.

Maybe I haven't looked at everything (despite of all the looking I did),
but this is starting to get annoying as I really want those Stunt
features on my MOO.

Tim van Dijen

unread,
Sep 7, 2015, 4:08:59 PM9/7/15
to MOO-...@googlegroups.com
Well, I'm not sure if that is something I can help you with over a
mailinglist...
With a little bit of C-programming skills you should be able to get it
running.

Op 7-9-2015 om 20:06 schreef The Prometheus MOO:

Tristan

unread,
Sep 8, 2015, 10:42:15 AM9/8/15
to The Prometheus MOO, moo-...@googlegroups.com
GammaMOO's code syntax is also significantly different compared to LambdaMOO, and by extension, Stunt. For example:

Var = var + 1;
Becomes...
++var;

Keep this in mind when trying to convert your database!

Also, it would be much more helpful if we could see the errors that you're running into when making the executable.

The Prometheus MOO

unread,
Sep 12, 2015, 8:38:11 AM9/12/15
to moo-...@googlegroups.com
Hello!

I applied all the patches, including the scattered_for.patch, that one I
had to do manually, though...

Well, after I applied it, compiling returned this:

decompile.cc: In function ‘Stmt* program_to_tree(Program*, int, int,
int)’: decompile.cc:1004:17: warning: comparison between signed and
unsigned integer expressions [-Wsign-compare]
else if (pc < bc.size)
^
decompile.cc:1010:24:
warning: comparison between signed and unsigned integer expressions
[-Wsign-compare]
hot_position = (pc == bc.size - 1 ? DONE : TOP);
^
decompile.cc:1013:19: warning: comparison between signed
and unsigned integer expressions [-Wsign-compare]
for (i = 0; i <
program->fork_vectors_size; i++)
^
<builtin>: recipe for target 'decompile.o' failed
make: *** [decompile.o] Error 1


Maybe I'm missing something that should be obvious here...

Tim van Dijen

unread,
Sep 12, 2015, 10:37:24 AM9/12/15
to MOO-...@googlegroups.com
Those warnings can be ignored, but I'm missing why it fails to compile..
Can you paste the complete output of the make-command?

Op 12-9-2015 om 14:38 schreef The Prometheus MOO:

The Prometheus MOO

unread,
Sep 12, 2015, 11:57:11 AM9/12/15
to moo-...@googlegroups.com
Log of make
Sat Sep 12 17:54:45 2015

gcc -g -std=gnu99 -g -O -Wall -c -o http_parser.o http_parser.c
gcc -g -std=gnu99 -g -O -Wall -c -o regexpr.o regexpr.c
gcc -g -std=gnu99 -g -O -Wall -c -o yajl.o yajl.c
gcc -g -std=gnu99 -g -O -Wall -c -o yajl_alloc.o yajl_alloc.c
gcc -g -std=gnu99 -g -O -Wall -c -o yajl_buf.o yajl_buf.c
gcc -g -std=gnu99 -g -O -Wall -c -o yajl_encode.o yajl_encode.c
gcc -g -std=gnu99 -g -O -Wall -c -o yajl_gen.o yajl_gen.c
gcc -g -std=gnu99 -g -O -Wall -c -o yajl_lex.o yajl_lex.c
gcc -g -std=gnu99 -g -O -Wall -c -o yajl_parser.o yajl_parser.c
gcc -g -std=gnu99 -g -O -Wall -c -o yajl_version.o yajl_version.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/hmac.o nettle/hmac.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/hmac-md5.o nettle/hmac-md5.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/hmac-ripemd160.o
nettle/hmac-ripemd160.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/hmac-sha1.o nettle/hmac-sha1.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/hmac-sha224.o
nettle/hmac-sha224.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/hmac-sha256.o
nettle/hmac-sha256.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/hmac-sha384.o
nettle/hmac-sha384.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/hmac-sha512.o
nettle/hmac-sha512.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/md5.o nettle/md5.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/md5-compress.o
nettle/md5-compress.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/md5-meta.o nettle/md5-meta.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/memxor.o nettle/memxor.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/ripemd160.o nettle/ripemd160.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/ripemd160-compress.o
nettle/ripemd160-compress.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/ripemd160-meta.o
nettle/ripemd160-meta.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/sha1.o nettle/sha1.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/sha1-compress.o
nettle/sha1-compress.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/sha1-meta.o nettle/sha1-meta.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/sha224-meta.o
nettle/sha224-meta.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/sha256.o nettle/sha256.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/sha256-compress.o
nettle/sha256-compress.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/sha256-meta.o
nettle/sha256-meta.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/sha384-meta.o
nettle/sha384-meta.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/sha512.o nettle/sha512.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/sha512-compress.o
nettle/sha512-compress.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/sha512-meta.o
nettle/sha512-meta.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/write-be32.o nettle/write-be32.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/write-le32.o nettle/write-le32.c
gcc -g -std=gnu99 -g -O -Wall -c -o nettle/write-le64.o nettle/write-le64.c
gcc -g -std=gnu99 -g -O -Wall -c -o crypt_blowfish.o crypt_blowfish.c
gcc -g -std=gnu99 -g -O -Wall -c -o crypt_gensalt.o crypt_gensalt.c
gcc -g -std=gnu99 -g -O -Wall -c -o sosemanuk.o sosemanuk.c
sosemanuk.c: In function ‘xorbuf’:
sosemanuk.c:1022:9: warning: cast from pointer to integer of different
size [-Wpointer-to-int-cast]
if (!(((unsigned)in1 | (unsigned)in2 | (unsigned)out) & 0x03)) {
^
sosemanuk.c:1022:25: warning: cast from pointer to integer of different
size [-Wpointer-to-int-cast]
if (!(((unsigned)in1 | (unsigned)in2 | (unsigned)out) & 0x03)) {
^
sosemanuk.c:1022:41: warning: cast from pointer to integer of different
size [-Wpointer-to-int-cast]
if (!(((unsigned)in1 | (unsigned)in2 | (unsigned)out) & 0x03)) {
^
gcc -g -std=gnu99 -g -O -Wall -c -o linenoise.o linenoise.c
g++ -g -O -Wall -c -o ast.o ast.cc
g++ -g -O -Wall -c -o base64.o base64.cc
g++ -g -O -Wall -c -o code_gen.o code_gen.cc
code_gen.cc: In function ‘Bytecodes stmt_to_code(Stmt*, GState*)’:
code_gen.cc:1351:49: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
for (fixup = state.fixups, fix_i = 0; fix_i < state.num_fixups;
++fix_i, ++fixup)
^
code_gen.cc:1405:35: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
for (old_i = new_i = 0; old_i < state.num_bytes; old_i++) {
^
code_gen.cc:1406:12: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
if (fix_i < state.num_fixups && fixup->pc == old_i) {
^
code_gen.cc:1406:44: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
if (fix_i < state.num_fixups && fixup->pc == old_i) {
^
g++ -g -O -Wall -c -o collection.o collection.cc
In file included from my-stdio.h:21:0,
from structures.h:24,
from collection.h:18,
from collection.cc:19:
config.h:270:0: warning: "INT32_MAX" redefined
# define INT32_MAX INT_MAX
^
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdint.h:9:0,
from structures.h:22,
from collection.h:18,
from collection.cc:19:
/usr/include/stdint.h:162:0: note: this is the location of the previous
definition
# define INT32_MAX (2147483647)
^
g++ -g -O -Wall -c -o crypto.o crypto.cc
crypto.cc: In function ‘package bf_salt(Var, Byte, void*, Objid)’:
crypto.cc:237:12: warning: unused variable ‘input_length’
[-Wunused-variable]
size_t input_length = memo_strlen(input);
^
g++ -g -O -Wall -c -o db_file.o db_file.cc
db_file.cc:381:1: warning: ‘void v4_write_object(Objid)’ defined but not
used [-Wunused-function]
v4_write_object(Objid oid)
^
g++ -g -O -Wall -c -o db_io.o db_io.cc
g++ -g -O -Wall -c -o db_objects.o db_objects.cc
db_objects.cc: In function ‘void extend(unsigned int)’:
db_objects.cc:91:27: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
for (size = 128; size <= new_objects; size *= 2)
^
db_objects.cc:108:28: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
for (size = 4096; size <= new_objects; size *= 2)
^
db_objects.cc:115:14: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
if (size > array_size) {
^
db_objects.cc: In function ‘void db_destroy_anonymous_object(void*)’:
db_objects.cc:381:19: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
for (i = 0; i < o->nval; i++)
^
g++ -g -O -Wall -c -o db_properties.o db_properties.cc
In file included from my-stdio.h:21:0,
from structures.h:24,
from collection.h:18,
from db_properties.cc:24:
config.h:270:0: warning: "INT32_MAX" redefined
# define INT32_MAX INT_MAX
^
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdint.h:9:0,
from structures.h:22,
from collection.h:18,
from db_properties.cc:24:
/usr/include/stdint.h:162:0: note: this is the location of the previous
definition
# define INT32_MAX (2147483647)
^
db_properties.cc: In function ‘db_prop_handle db_find_property(Var,
const char*, Var*)’:
db_properties.cc:473:16: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
for (i = 0; i < Arraysize(ptable); i++)
^
db_properties.cc:481:19: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
for (i = 0; i < Arraysize(ptable); i++) {
^
In file included from db_properties.cc:22:0:
db_properties.cc: In function ‘void
dbpriv_fix_properties_after_chparent(Var, Var, Var, Var)’:
db_properties.cc:903:22: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
assert(old_count == me->nval);
^
db_properties.cc: At global scope:
db_properties.cc:392:1: warning: ‘int add_to_list(void*, Objid)’ defined
but not used [-Wunused-function]
add_to_list(void *data, Objid c)
^
g++ -g -O -Wall -c -o db_verbs.o db_verbs.cc
db_verbs.cc: In function ‘void dbpriv_build_prep_table()’:
db_verbs.cc:89:19: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
for (i = 0; i < NPREPS; i++) {
^
db_verbs.cc: In function ‘db_prep_spec db_find_prep(int, char**, int*,
int*)’:
db_verbs.cc:127:16: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
for (j = 0; j < NPREPS; j++) {
^
db_verbs.cc: In function ‘db_prep_spec db_match_prep(const char*)’:
db_verbs.cc:167:30: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
if (!isdigit(first) || prep >= NPREPS)
^
db_verbs.cc: In function ‘db_verb_handle db_find_command_verb(Objid,
const char*, db_arg_spec, unsigned int, db_arg_spec)’:
db_verbs.cc:325:38: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
&& (v->prep == PREP_ANY || v->prep == prep)
^
g++ -g -O -Wall -c -o decompile.o decompile.cc
decompile.cc: In function ‘Byte* decompile(Bytecodes, Byte*, Byte*,
Stmt**, Cond_Arm**)’:
decompile.cc:106:69: error: invalid conversion from ‘void*’ to ‘Stmt*’
[-fpermissive]
#define HOT(is_hot, n) (node = n, is_hot ? (hot_node = node) : node)
^
decompile.cc:54:18: note: in definition of macro ‘ADD_STMT’
Stmt *temp = stmt; \
^
decompile.cc:107:30: note: in expansion of macro ‘HOT’
#define HOT1(is_hot, kid, n) HOT(is_hot || hot_node == kid, n)
^
decompile.cc:109:5: note: in expansion of macro ‘HOT1’
HOT1(is_hot || hot_node == kid1, kid2, n)
^
decompile.cc:117:32: note: in expansion of macro ‘HOT2’
#define HOT_OP2(kid1, kid2, n) HOT2(op_hot, kid1, kid2, n)
^
decompile.cc:876:13: note: in expansion of macro ‘HOT_OP2’
ADD_STMT(HOT_OP2(one, list, s));
^
decompile.cc: In function ‘Stmt* program_to_tree(Program*, int, int, int)’:
decompile.cc:1004:17: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
else if (pc < bc.size)
^
decompile.cc:1010:24: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
hot_position = (pc == bc.size - 1 ? DONE : TOP);
^
decompile.cc:1013:19: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
for (i = 0; i < program->fork_vectors_size; i++)
^
<builtin>: recipe for target 'decompile.o' failed
make: *** [decompile.o] Error 1
make exited with status code 2

Sat Sep 12 17:55:06 2015
----------------

The Prometheus MOO

unread,
Sep 12, 2015, 2:04:50 PM9/12/15
to moo-...@googlegroups.com
Oh, and...

I was able to compile successfully without adding the
scattered_for.patch. The compiling stops at decompile.cc after adding that.
I added only the handle_argstr.patch, and it compiled fine.

I have not tried running a database yet, though...
And am still looking at patching the scattered thinggy into it.

The Prometheus MOO

unread,
Sep 12, 2015, 4:52:01 PM9/12/15
to moo-...@googlegroups.com
I got it to load a GammaMOO database by doing

sed -e '1s/Version 5/Version 4/' <in.db >out.db

No errors occurred while loading, although I didn't manage to get the
built-in
us_time()
properly entered into the source.

What I really would love to have the most in Stunt that I currently
don't have is the map datatype. I have a heartbeat system in place that
would benefit a lot of it in the long run, just to mention one thing.

I looked at the map.c file in the older Stunt, and the map.cc file in
the current one. I might one day see about inserting maps into my
running server source.

Of course it would be extremely useful if maps could be applied as
patches, but I read from somewhere that it was never released as such.

Luke Dashjr

unread,
Sep 13, 2015, 12:09:35 AM9/13/15
to MOO-...@googlegroups.com
If you would prefer to stick to GammaMOO, I could conceivably look into
adding maps in about a week. Let me know if so,

Luke

The Prometheus MOO

unread,
Sep 13, 2015, 6:55:02 AM9/13/15
to moo-...@googlegroups.com
Hello!

Luke, I would appreciate that very much. GammaMOO would fit my needs
perfectly with maps.

The Prometheus MOO

unread,
Sep 15, 2015, 4:57:32 PM9/15/15
to moo-...@googlegroups.com
Greetings!

I got a problem running a database of Stunt.
Most of it runs fine without any problems, but... Well, matching on
verbs seems to be broken.
The database is derived from LambdaCore, and I did disable the
PLAYER_HUH in options.h.

Looking at objects with my current matching verbs is fine, but if I want
to type, for instance:
tune 2.comm
to tune the object that matches to 2.comm, I get:
I don't understand that.
Even though look 2.comm works fine, and the parent of 2.comm has the
tuen verb with arguments this none none.

Any advice as to how I should go with looking at how verbs are matched?

Thanks!

-- Con

The Prometheus MOO

unread,
Sep 15, 2015, 8:54:31 PM9/15/15
to moo-...@googlegroups.com
Oh, I found out what it was.
GammaMOO called #0:do_match in DB matching, while Stunt doesn't do this.

Wonder if there happens to be a fix for the match.cc file floating
somewhere? I've put in a cruel, in -DB hackage version of a fix for now.

This made me curious. I'll see if I can merge Gamma's match.c into Stunt.

-- Con

Tim van Dijen

unread,
Sep 16, 2015, 12:35:54 AM9/16/15
to MOO-...@googlegroups.com
I think you're looking for this:
https://gitlab.com/mudmoo/gammamoo/commits/match_object

Op 16-9-2015 om 02:54 schreef The Prometheus MOO:

The Prometheus MOO

unread,
Sep 16, 2015, 8:13:15 AM9/16/15
to MOO-...@googlegroups.com
Hey!

I get this while compiling:
match.cc: In function ‘Objid match_object(Objid, const char*)’:
match.cc:131:61: error: could not convert ‘0’ from ‘int’ to
‘Var’ match_object_args, name,
&matched_object);
^ <builtin>: recipe for target
'match.o' failed make: *** [match.o]
Error 1

Wonder if I haven't declared something I should've...

The Prometheus MOO

unread,
Sep 16, 2015, 9:12:12 AM9/16/15
to moo-...@googlegroups.com
Objid
match_object(Objid player, const char *name)
{
Var matched_object;
Var match_object_args;

match_object_args = new_list(1);
match_object_args.v.list[1].type = TYPE_STR;
match_object_args.v.list[1].v.str = str_dup(name);

run_server_task(player, SYSTEM_OBJECT, "match_object",
match_object_args, name, &matched_object);
if (matched_object.type == TYPE_OBJ) {
Objid o = matched_object.v.obj;

free_var(matched_object);
return o;
}
free_var(matched_object);

if (name[0] == '\0')
return NOTHING;
if (name[0] == '#') {
char *p;
Objid r = strtol(name + 1, &p, 10);

if (*p != '\0' || !valid(r))
return FAILED_MATCH;
return r;
}
if (!valid(player))
return FAILED_MATCH;
if (!mystrcasecmp(name, "me"))
return player;
if (!mystrcasecmp(name, "here"))
return db_object_location(player);
return match_contents(player, name);
}

The Prometheus MOO

unread,
Sep 16, 2015, 11:27:45 AM9/16/15
to moo-...@googlegroups.com
Thanks, it works!

I have a quick question about Stunt's builtins.

The
mapkeys()
mapvalues()
and mapdelete()
ones, how would I go about creating a new map, and adding keys/values to it?

Thanks for all the help!

-- Con

Tim van Dijen

unread,
Sep 16, 2015, 4:08:39 PM9/16/15
to MOO-...@googlegroups.com
Con,

You should read more on this list.. Your questions have been answered
before...
Quick paste:
for key -> value in (this.otpions)
Then I'd have like:
["city" -> "london", "country" -> "england"]
And my loop would give me:
key => London
value => "England"

Goblin

Op 16-9-2015 om 17:27 schreef The Prometheus MOO:

The Prometheus MOO

unread,
Sep 16, 2015, 5:16:19 PM9/16/15
to moo-...@googlegroups.com
Oh thanks for that!

Apparently, Stunt has surprised me with something pretty weird. I have
tested this with a few databases, everywhere the same result.

If I do
;suspend(1); player:tell("Test.");
the code suspends, and then returns
>= 0
without executing the :tell verb.

But if I do something like:
;me:tell("Test."); suspend(1); me:tell("Pass.");
the MOO returns:
Test.
>= 0
without suspension.
Suspending itself works no problem, though, sub-seconds at all.

Is this a known problem with Stunt, or could it be something with my server?

Thanks!

-- Con

Tim van Dijen

unread,
Sep 16, 2015, 5:30:45 PM9/16/15
to MOO-...@googlegroups.com
Obviously you need to start with a double semi-colon to execute
multi-line evals..

;;suspend(1); player:tell("Test.");

Honestly Con, you need to start reading some documentation on MOO,
Stunt, Lambdamoo and C(++)..
The questions you're asking are mostly answered in docs, or on this list..

Op 16-9-2015 om 23:16 schreef The Prometheus MOO:

The Prometheus MOO

unread,
Sep 20, 2015, 8:12:23 AM9/20/15
to moo-...@googlegroups.com
Hey!

Is it safe to
@dump $composed
and
@dump $shapes
from a Stunt.db database and then put the dumps into a legacy core one?
I ask because I tried to see the dumps from the stunt website, the
packages page, but those gave me a 400 invalid error.
I also think that the kernel package needs to be somehow installed
first, otherwise the $composed is going to error... These are my
thoughts based on the things I've read, though.

Thanks!

-- Con

Tim van Dijen

unread,
Sep 20, 2015, 8:58:15 AM9/20/15
to MOO-...@googlegroups.com
Both packages should be able to run without the kernel package...
You should be fine if you @dump them..

Op 20-9-2015 om 14:12 schreef The Prometheus MOO:

The Prometheus MOO

unread,
Sep 20, 2015, 4:27:42 PM9/20/15
to MOO-...@googlegroups.com
Hey!

I got $composed and $shapes imported, and I also ported the kernel
package over.
However, when I do
@install unit with $composed
I get this:
#67963:_parse_operation (this == #67963), line 10: Invalid operation:
kernel
... called from #67963:_match match (this == #67963), line 18
... called from #67963:_generate_global_mapping_keyed_on_identifier
(this == #67963), line 6
... called from #67963:import (this == #67963), line 18
... called from #67963:import_package_from_archive (this == #67963), line 5
... called from #67963:@install (this == #67963), line 57
(End of traceback)

I am not sure what I'm doing wrong, as I aded the identifier property
correctly to the kernel package, as well as the version, manifest and
relocation information.

Luke Dashjr

unread,
Sep 20, 2015, 5:59:26 PM9/20/15
to MOO-...@googlegroups.com, The Prometheus MOO
On Sunday, September 13, 2015 10:55:00 AM The Prometheus MOO wrote:
> Luke, I would appreciate that very much. GammaMOO would fit my needs
> perfectly with maps.

Ok, back home. Are you still interested in this?

Also: does anyone here know the best patch(es) for map support out there?
I don't care what codebase/forks they're for (I can adapt).

Luke

The Prometheus MOO

unread,
Sep 20, 2015, 10:29:41 PM9/20/15
to MOO-...@googlegroups.com
As an update to the previous post, I gave it another try using the dumps
of $composed and $shapes, the links to which can be found at the Stunt
questions thread.

I got the objects installed no problem, but I wonder if the archive
source URL is correct, it says:
@list packages with $composed
Updating...
#67963:_fetch_from_archive (this == #67963), line 11: Invalid argument
... called from #67963:fetch_index (this == #67963), line 2
... called from #67963:list (this == #67963), line 13
(End of traceback)

This is taken from the composed.moo, found at the dump:

@prop #102."archive_host" "207.210.101.162" ""
@prop #102."archive_port" 80 ""
@prop #102."archive_base_uri" "/v1" ""

Of course in my case #102 is not the right object ID, but that's what
the dump reads. That invalid argument traceback, far as I know, could
indicate that the URL is not functional. At least it's not one of a type
that can be accessed directly from a web browser.

-- Con

Tim van Dijen

unread,
Sep 21, 2015, 12:29:05 AM9/21/15
to MOO-...@googlegroups.com
You need to download the latest Improvise.db and pull the objects from
there..
The ones you got are old.

Op 21-9-2015 om 04:29 schreef The Prometheus MOO:

Michael Forzano

unread,
Sep 24, 2015, 7:07:03 PM9/24/15
to Tim van Dijen, MOO-...@googlegroups.com
Hi Luke,

I may be interested in maps in GammaMOO, assuming it also has MySQL
support, and the memory leaks and crash bug related to unicode
characters are fixed.

Mike

Luke Dashjr

unread,
Sep 24, 2015, 8:42:31 PM9/24/15
to MOO-...@googlegroups.com, Michael Forzano, Tim van Dijen
I don't recall what is currently supported, nor any outstanding bugs. Let me
know for sure if you want it, and which "maps" code is best...

Tristan

unread,
Sep 24, 2015, 9:31:20 PM9/24/15
to MOO-...@googlegroups.com
Hello,

As far as I know, there are no patch files for maps. There are, however, two MOO servers with map/hash support that you could use as a guideline. The first is Stunt, which is pretty much compatible with any database that works with LambdaCore. I have little to no experience with this, but from the brief tests I ran it seemed fairly stable and did not have any memory leaks. Keep in mind that the database I tested it was a fresh copy of LambdaCore, not an active game with players.

Link: http://stunt.io/

The second server, which I have more experience with, is the Hell server. It seems fairly reliable and has gone through rigorous testing on the live instance of HellMOO to make sure there are no leaks or errors that would result in a server panic.

Link: http://hellmoo.org/wiki/index.php/HellCore

HellMOO calls maps "hashes," where Stunt calls them "maps." Besides the change in reference to the datatype itself, they are identical in function.

I haven't used GammaMOO in many years, but if it doesn't have MySQL functions, it can probably be baked into the current release using the mOOSQL patch on http://lisdude.com/moo.

-----Original Message-----
From: MOO-...@googlegroups.com [mailto:MOO-...@googlegroups.com] On Behalf Of Luke Dashjr
Sent: Thursday, September 24, 2015 8:42 PM
To: MOO-...@googlegroups.com
Cc: Michael Forzano; Tim van Dijen
Subject: Re: [MOO-talk] Conerting GammaMOO database into Stunt

Tim van Dijen

unread,
Sep 25, 2015, 4:26:35 AM9/25/15
to MOO-...@googlegroups.com
From what I remember, that moosql patch on lisdude.com had some serious
issues regarding memleaks and crashes.. Also problems with multi-line
queries
There is however a fork of Stunt that introduced sql for MOO;
https://github.com/SpiraMirabilis/stunt
I think the author, Michael Munson, is on this list too.. Maybe he can
tell us how well this code is, or perhaps Todd knows..

Regarding unicode in GammaMoo, I remember it had some issues with
length()/match()/rmatch()/index() in very specific cases.. I think it
returned the wrong result when a line starts with a unicode character,
but I'm not sure.. Pretty sure I reported it on this list back then though..

Tim


Op 25-9-2015 om 03:05 schreef Tristan:
Reply all
Reply to author
Forward
0 new messages