SYNOPSIS
        int    save_object(string name [, int format])
        string save_object([int format])

DESCRIPTION
        Encode the saveable variables of the current object into a string.

        In the first form, the string is written to the file <name>.
        A suffix ".c" will be stripped from the name, the suffix ".o"
        may be added by the master object during the check in
        valid_read(). Result is 0 if the save file could be created,
        and non-zero on a non-fatal error (file could not be written,
        or current object is destructed).

        In the second form the string is returned directly. If the
        object is destructed, the result is 0.

        In both forms, the optional <format> argument determines the
        format of the savefile to be written:

           -1: use the driver's native format (default).
            0: original format, used by Amylaar LPMud and LDMud <= 3.2.8 .
            1: LDMud >= 3.2.9: non-lambda closures, symbols, quoted arrays
                 can be saved.
            2: LDMud >= 3.5.0: floats are stored in a different way, which is
                 more compact and can store the new float losslessly.
	    3: LDMud >= 3.5.0: can also save lvalues references (without it,
	         the plain rvalue will be saved).

        It is recommended to use version 3 or higher.

        A variable is considered 'saveable' if it is not declared
        as 'nosave' or 'static'.

        Only lfuns bound to the current object can be saved.

HISTORY
        Since LDMud 3.2.8, save_object() returns a success value.
          The direct encoding into a string was added in LDMud 3.2.8, but
          may be moved into a different efun in future.
        LDMud 3.2.9 added the saving of non-lambda closures, symbols,
          and quoted arrays, using the new savefile format version 1.
        LDMud 3.2.10 added the <format> argument.
        LDMud 3.5.0 added savefile format version 2 and 3.

SEE ALSO
        restore_object(E), save_value(E)
