LibGGIMisc Functions
====================


Find out where the raster beam is
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. manpage:: 3 ggiGetRayPos


Synopsis
--------

::

  #include <ggi/misc.h>

  int ggiGetRayPos(ggi_visual_t vis, int32_t* x, int32_t* y);


Description
-----------

Though currently only implemented via matroxfb, this function will
retrieve the current position of the raster beam on a display that
uses a cathode ray tube, or resembles such internally.  Because it has
not been implemented and put into widespread use, there may be API
fluctuation as to exactly what units :p:`x`, :p:`y` are in, especially
on displays using doublescanning modes.  In addition to numerical
values, the following values can be returned in either dimension:
`GGI_RP_BORDER` means the raster is in the border of the screen;
`GGI_RP_BLANK` means the raster is past the border and is turned off;
`GGI_RP_SYNC` means the raster is retracing to the top of the screen.


Return value
------------

`0` for OK, otherwise an :man:`ggi-error(3)` code.


See Also
--------

:man:`ggiWaitRayPos(3)`



Wait for the raster to reach a point
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. manpage:: 3 ggiWaitRayPos


Synopsis
--------

::

  #include <ggi/misc.h>

  int ggiWaitRayPos(ggi_visual_t src, int32_t* x, int32_t* y);


Description
-----------


`ggiWaitRayPos` will wait, as best supported by the target, until the
raster reaches a certain point on the screen.  Actual integer
coordinates don't mean anything under current implementations, and the
units the coordinates are provided in haven't been firmly
decided. Instead, use one of the following macros: `GGI_RP_BORDER`
means the raster is in the border of the screen; `GGI_RP_BLANK` means
the raster is past the border and is turned off; `GGI_RP_SYNC` means
the raster is retracing to the top of the screen; `GGI_RP_DONTCARE`
means you don't care where the raster is in this direction.


Return value
------------


`0` for OK, otherwise an :man:`ggi-error(3)` code.  In the event that
there is an error, it is most likely that the implementation on the
given target is limited.  In this case, the parameters :p:`x`, :p:`y`
will be assigned values equal to one of the above macros, which should
work on the target, supposing using those values actually accomplishes
what you want to do.


See Also
--------

:man:`ggiGetRayPos(3)`



Set the hardware split line feature
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. manpage:: 3 ggiSetSplitline


Synopsis
--------

::

  #include <ggi/misc.h>

  int ggiSetSplitline(ggi_visual_t vis, int y);


Description
-----------

Original VGA adaptors in order to be efficient when displaying
vertically scrolling scenery implemented a feature that, when used in
combination with the display origin, could cause the screen to wrap.
This essentially means you can take the framebuffer and seamlessly
join the top edge to the bottom edge, creating a cylinder of data that
you could scroll up or down without actually performing memory move
operations.  This functions sets the :p:`y` coordinate at which the
screen wraps back.


Return value
------------

`0` for OK, otherwise an :man:`ggi-error(3)` code.
