DEVPOINTER(2)                 (mux)                 DEVPOINTER(2)

     NAME
          devpointer - I/O interface for the pointer device

     SYNOPSIS
          include "draw.m";   # for Draw->Pointer
          include "devpointer.m";
          ptr := load Devpointer Devpointer->PATH;

          init:      fn();
          reader:    fn(file: string, posn: chan of ref Draw->Pointer,
                        pid: chan of (int, string));
          bytes2ptr: fn(buf: array of byte)    : ref Draw->Pointer;
          ptr2bytes: fn(ptr: ref Draw->Pointer): array of byte;

     DESCRIPTION
          Devpointer reads messages from pointer devices with the same
          data format as /dev/pointer, converting them to Pointer
          adts.

          Init must be called before any other operation of the mod-
          ule.

          Reader should be spawned by the caller.  It opens the
          pointer device specified by file, and sends a value
          (id, err) on channel pid. On success, id is the process ID
          of the spawned process and err is nil; on an error, err is a
          diagnostic, and id is undefined.  If the file was opened
          successfully, reader continually reads the pointer device
          and sends Pointer adts over the channel posn. If file is
          nil, the default device is /dev/pointer.

          Bytes2ptr converts the array of bytes buf to a Pointer and
          returns a reference to it.  Buf should consist of exactly
          Devpointer->Size bytes and be in the format returned by
          /dev/pointer.

          Ptr2bytes provides the inverse transformation of bytes2ptr:
          it packs the data into an array of bytes of appropriate for-
          mat, which it returns.

     FILES
          /dev/pointer

     SEE ALSO
          draw-intro(2), draw-pointer(2)

     Page 1                       Plan 9             (printed 10/2/22)