[Contents] [Index] [Help] [Retrace] [browse <] [Browse >]

TABLE OF CONTENTS

clipboard.device/CBD_CHANGEHOOK
clipboard.device/CBD_CURRENTREADID
clipboard.device/CBD_CURRENTWRITEID
clipboard.device/CBD_POST
clipboard.device/CMD_READ
clipboard.device/CMD_UPDATE
clipboard.device/CMD_WRITE
clipboard.device/CBD_CHANGEHOOK               clipboard.device/CBD_CHANGEHOOK

   NAME
        CBD_CHANGEHOOK -- Add or remove a clip change hook

   FUNCTION
        CBD_CHANGEHOOK allows specification of a hook to be called
        when the data on the clipboard has changed.

   IO REQUEST
        io_Message      mn_ReplyPort set up
        io_Device       preset by OpenDevice
        io_Unit         preset by OpenDevice
        io_Command      CBD_CHANGEHOOK
        io_Length -     0 to remove, 1 to install this hook
        io_Data -       struct Hook *, the clip change hook

   HOOK ENVIRONMENT
       hook message - a ClipHookMsg, as defined in devices/clipboard.h
           chm_Type - 0, indicating that the message has the
               following fields:
           chm_ClipID - the clip ID of the clip triggering the change
       hook object - io_Unit

clipboard.device/CBD_CURRENTREADID         clipboard.device/CBD_CURRENTREADID

   NAME
        CBD_CURRENTREADID - Determine the current read identifier.

   FUNCTION
        CBD_CURRENTREADID fills the io_ClipID with a clip identifier that
        can be compared with that of a post command: if greater than
        the post identifier then the post data held privately by an
        application is not valid for its own pasting.

   IO REQUEST
        io_Message      mn_ReplyPort set up
        io_Device       preset by OpenDevice
        io_Unit         preset by OpenDevice
        io_Command      CBD_CURRENTREADID

   RESULTS
        io_ClipID       the ClipID of the current write is set

clipboard.device/CBD_CURRENTWRITEID       clipboard.device/CBD_CURRENTWRITEID

   NAME
        CBD_CURRENTWRITEID -- Determine the current write identifier.

   FUNCTION
        CBD_CURRENTWRITEID fills the io_ClipID with a clip identifier that
        can be compared with that of a post command: if greater than
        the post identifier then the post is obsolete and need never
        be satisfied.

   IO REQUEST
        io_Message      mn_ReplyPort set up
        io_Device       preset by OpenDevice
        io_Unit         preset by OpenDevice
        io_Command      CBD_CURRENTWRITEID

   RESULTS
        io_ClipID       the ClipID of the current write is set

clipboard.device/CBD_POST                           clipboard.device/CBD_POST

   NAME
        CBD_POST -- Post availability of a clip to the clipboard.

   FUNCTION
        Indicate to the clipboard device that data is available for
        use by accessors of the clipboard.  This is intended to be
        used when a cut is large, in a private data format, and/or
        changing frequently, and it thus makes sense to avoid
        converting it to an IFF form and writing it to the clipboard
        unless another application wants it.  The post provides a
        message port to which the clipboard device will send a satisfy
        message if the data is required.

        If the satisfy message is received, the write associated with
        the post must be performed.  The act of writing the clip
        indicates that the message has been received: it may then be
        re-used by the clipboard device, and so must actually be
        removed from the satisfy message port so that the port is not
        corrupted.

        If the application wishes to determine if a post it has
        performed is still the current clip, it should check the
        post's io_ClipID with that returned by the CBD_CURRENTREADID
        command.  If the current read io_ClipID is greater, the clip
        is not still current.

        If an application has a pending post and wishes to determine
        if it should satisfy it (e.g. before it exits), it should
        check the post's io_ClipID with that returned by the
        CBD_CURRENTWRITEID command.  If the current write io_ClipID is
        greater, there is no need to satisfy the post.

   IO REQUEST
        io_Message      mn_ReplyPort set up
        io_Device       preset by OpenDevice
        io_Unit         preset by OpenDevice
        io_Command      CBD_POST
        io_Data         pointer to satisfy message port
        io_ClipID       zero

   RESULTS
        io_Error        non-zero if an error occurred
        io_ClipID       the clip ID assigned to this post, to be used
                        in the write command if this is satisfied


clipboard.device/CMD_READ                           clipboard.device/CMD_READ

   NAME
        CMD_READ -- Read from a clip on the clipboard.

   FUNCTION
        The read function serves two purposes.

        When io_Offset is within the clip, this acts as a normal read
        request, and io_Data is filled with data from the clipboard.
        The first read request should have a zero io_ClipID, which
        will be filled with the ID assigned for this read.  Normal
        sequential access from the beginning of the clip is achieved
        by setting io_Offset to zero for the first read, then leaving
        it untouched for subsequent reads.  If io_Data is null, then
        io_Offset is incremented by io_Actual as if io_Length bytes
        had been read: this is useful to skip to the end of file
        by using a huge io_Length.

        When io_Offset is beyond the end of the clip, this acts as a
        signal to the clipboard device that the application is
        through reading this clip.  Realize that while an application
        is in the middle of reading a clip, any attempts to write new
        data to the clipboard are held off.  This read past the end
        of file indicates that those operations may now be initiated.

   IO REQUEST
        io_Message      mn_ReplyPort set up
        io_Device       preset by OpenDevice
        io_Unit         preset by OpenDevice
        io_Command      CMD_READ
        io_Length       number of bytes to put in data buffer
        io_Data         pointer to buffer of data to fill, or null to
                        skip over data
        io_Offset       byte offset of data to read
        io_ClipID       zero if this is the initial read

   RESULTS
        io_Error        non-zero if an error occurred
        io_Actual       filled with the actual number of bytes read
        io_Data         (the buffer now has io_Actual bytes of data)
        io_Offset       updated to next read position, which is
                        beyond EOF if io_Actual != io_Length
        io_ClipID       the clip ID assigned to this read: do not
                        alter for subsequent reads

clipboard.device/CMD_UPDATE                       clipboard.device/CMD_UPDATE

   NAME
        CMD_UPDATE -- Terminate the writing of a clip to the clipboard.

   FUNCTION
        Indicate to the clipboard that the previous write commands are
        complete and can be used for any pending pastes (reads).  This
        command cannot be issued while any of the write commands are
        pending.

   IO REQUEST
        io_Message      mn_ReplyPort set up
        io_Device       preset by OpenDevice
        io_Unit         preset by OpenDevice
        io_Command      CMD_UPDATE
        io_ClipID       the ClipID of the write

   RESULTS
        io_Error        non-zero if an error occurred

clipboard.device/CMD_WRITE                         clipboard.device/CMD_WRITE

   NAME
        CMD_WRITE -- Write to a clip on the clipboard.

   FUNCTION
        This command writes data to the clipboard.  This data can be
        provided sequentially by clearing io_Offset for the initial
        write, and using the incremented value unaltered for
        subsequent writes.  If io_Offset is ever beyond the current
        clip size, the clip is padded with zeros.

        If this write is in response to a SatisfyMsg for a pending
        post, then the io_ClipID returned by the CBD_POST command must
        be used.  Otherwise, a new ID is obtained by clearing the
        io_ClipID for the first write.  Subsequent writes must not
        alter the io_ClipID.

   IO REQUEST
        io_Message      mn_ReplyPort set up
        io_Device       preset by OpenDevice
        io_Unit         preset by OpenDevice
        io_Command      CMD_WRITE
        io_Length       number of bytes from io_Data to write
        io_Data         pointer to block of data to write
        io_Offset       usually zero if this is the initial write
        io_ClipID       zero if this is the initial write, ClipID of
                        the Post if this is to satisfy a post

   RESULTS
        io_Error        non-zero if an error occurred
        io_Actual       filled with the actual number of bytes written
        io_Offset       updated to next write position
        io_ClipID       the clip ID assigned to this write: do not
                        alter for subsequent writes