vceDefineMessages

Defines messages in a flat (unformatted) file or memory block.

Prototype

DWORD vceDefineMessages ( VCEHD vh, VCE_SEGMENT *segments[], unsigned msgcount)

Argument

Description

vh

Handle of an open voice object.

segments

Pointer to an array of VCE_SEGMENT structures. Each element defines the corresponding message number. The VCE_SEGMENT structure is:

typedef struct
{
   unsigned offset;
   unsigned size; 
} VCE_SEGMENT;

Refer to the Details section for a description of these fields.

msgcount

Number of elements in the segments array.


Return values

Return value

Description

SUCCESS

 

CTAERR_BAD_ARGUMENT

segments is NULL or msgcount is zero (0).

CTAERR_INVALID_HANDLE

vh is not a valid handle to an open voice object.

CTAERR_SVR_COMM

Server communication error.

VCEERR_INVALID_MESSAGE

Messages overlap or extend beyond the end of the file or memory block.


Details

vceDefineMessages defines multiple messages in the file or memory block that vh specified. This function tells the Voice Message service how the file or memory is partitioned.

The VCE_SEGMENT structure contains the following fields:

Field

Description

offset

Starting offset in bytes from the beginning of the file or memory block.

size

Number of bytes in the message.


To skip a message number, set both offset and size to zero (0) in the element of the segments array that the message number indexed.

Messages must not overlap one another or extend beyond the size of the file or memory block.

See also

vceCreateMemory, vceOpenFile, vceOpenMemory

Example

/*
* Open a file that contains a simple header, then assign message numbers to
 * segments of the file.
 *
 * Assume the file's header structure is:
 *     unsigned count          = number of messages
 *     unsigned encoding       = voice encoding of all messages
 *     VCE_SEGMENT msg[count]  = array of "count" structures
 *                               containing offset and size
 */

extern CTAHD  CtaHd;

void myOpen (char *filename, VCEHD *returnedvh)
{
    FILE        *filep;
    unsigned     msgcount;
    unsigned     encoding;
    VCE_SEGMENT *segments;
    VCEHD        vh;

    /* Read the count, allocate a buffer, read the msg list */
    filep = fopen (filename, "rb");
    fread (&msgcount, sizeof msgcount, 1, filep);
    fread (&encoding, sizeof encoding, 1, filep);
    segments = malloc (msgcount * sizeof (VCE_SEGMENT));
    fread (segments,  sizeof (VCE_SEGMENT), msgcount, filep);
    fclose (filep);

    /* Re-open the file with VCE and define the messages */
    vceOpenFile (CtaHd, filename, VCE_FILETYPE_FLAT, VCE_PLAY_ONLY,
                                              encoding, &vh);
    vceDefineMessages (vh, segments, msgcount);
    *returnedvh = vh;
}