home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / progmisc / nfsrc21.zip / VIDCUR.PRG < prev    next >
Text File  |  1991-08-16  |  4KB  |  143 lines

  1. /*
  2.  * File......: VIDCUR.PRG
  3.  * Author....: Glenn Scott
  4.  * CIS ID....: 71620,1521
  5.  * Date......: $Date:   15 Aug 1991 23:03:30  $
  6.  * Revision..: $Revision:   1.3  $
  7.  * Log file..: $Logfile:   E:/nanfor/src/vidcur.prv  $
  8.  * 
  9.  * This is an original work by Glenn Scott and is placed in the
  10.  * public domain.
  11.  *
  12.  * Modification history:
  13.  * ---------------------
  14.  *
  15.  * $Log:   E:/nanfor/src/vidcur.prv  $
  16.  * 
  17.  *    Rev 1.3   15 Aug 1991 23:03:30   GLENN
  18.  * Forest Belt proofread/edited/cleaned up doc
  19.  * 
  20.  *    Rev 1.2   14 Jun 1991 19:53:12   GLENN
  21.  * Minor edit to file header
  22.  * 
  23.  *    Rev 1.1   14 Jun 1991 17:59:18   GLENN
  24.  * Documentation change (minor), and checked for compatibility with new
  25.  * ft_int86().
  26.  * 
  27.  *    Rev 1.0   01 Apr 1991 01:02:28   GLENN
  28.  * Nanforum Toolkit
  29.  *
  30.  */
  31.  
  32. #include "FTINT86.CH"
  33.  
  34. #define VIDEO      16
  35.  
  36.  
  37. /*  $DOC$
  38.  *  $FUNCNAME$
  39.  *     FT_SETVCUR()
  40.  *  $CATEGORY$
  41.  *     Video
  42.  *  $ONELINER$
  43.  *     Set the cursor position on a specified video page
  44.  *  $SYNTAX$
  45.  *     FT_SETVCUR( [ <nPage> ], [ <nRow> ], [ <nCol> ] ) -> NIL
  46.  *  $ARGUMENTS$
  47.  *     <nPage> is the video page (defaults to current page, determined
  48.  *             by FT_GETVPG()
  49.  *
  50.  *     <nRow>  is the row coordinate (defaults to 0 )
  51.  *
  52.  *     <nCol>  is the column coordinate (defaults to 0 )
  53.  *  $RETURNS$
  54.  *     NIL
  55.  *  $DESCRIPTION$
  56.  *     FT_SETVCUR() sets the cursor position on a specific video page.
  57.  *     It uses FT_INT86() to invoke interrupt 10h, function 2.
  58.  *
  59.  *     For more information on graphics programming, cursors, and video
  60.  *     pages, refer to Richard Wilton's _Programmer's Guide to PC and 
  61.  *     PS/2 Video Systems_ (Microsoft Press).
  62.  *     
  63.  *  $EXAMPLES$
  64.  *
  65.  *     // Set the position to row 5, column 10 on video page 1:
  66.  *
  67.  *            FT_SETVCUR( 1, 5, 10 )
  68.  *  $END$
  69.  */
  70.  
  71.  
  72. FUNCTION FT_SETVCUR( nPage, nRow, nCol )
  73.   LOCAL aRegs[ INT86_MAX_REGS ]
  74.  
  75.   nPage := iif( nPage == nil, FT_GETVPG()  , nPage )
  76.   nRow  := iif( nRow  == nil, 0            , nRow  )
  77.   nCol  := iif( nCol  == nil, 0            , nCol  )
  78.  
  79.   aRegs[ AX ] := MAKEHI(  2    )
  80.   aRegs[ BX ] := MAKEHI( nPage )
  81.   aRegs[ DX ] := MAKEHI( nRow  ) + nCol
  82.  
  83.   FT_INT86( VIDEO, aRegs )
  84.  
  85. RETURN ( NIL )
  86.  
  87.  
  88.  
  89. /*  $DOC$
  90.  *  $FUNCNAME$
  91.  *     FT_GETVCUR()
  92.  *  $CATEGORY$
  93.  *     Video
  94.  *  $ONELINER$
  95.  *     Return info about the cursor on a specified video page
  96.  *  $SYNTAX$
  97.  *     FT_GETVCUR( [ <nPage> ] ) -> <aCurInfo>
  98.  *  $ARGUMENTS$
  99.  *    <nPage> is the video page to get the cursor information for.  
  100.  *    Defaults to the current page, as returned by FT_GETVPG().
  101.  *  $RETURNS$
  102.  *     A four-element array (<aCurInfo>), set up as follows:
  103.  *
  104.  *     aCurInfo[1] = Top line of cursor
  105.  *     aCurInfo[2] = Bottom line of cursor
  106.  *     aCurInfo[3] = Character row
  107.  *     aCurInfo[4] = Character column
  108.  *
  109.  *  $DESCRIPTION$
  110.  *
  111.  *    FT_GETVCUR() uses FT_INT86() to invoke interrupt 10h, function
  112.  *    3, to return the character cursor location for the specified 
  113.  *    video page.
  114.  *
  115.  *    The top line and bottom line of cursor are set depending on 
  116.  *    the current cursor mode, and are only meaningful in alphanumeric
  117.  *    video modes.
  118.  *
  119.  *    For more information on graphics programming, cursors, and 
  120.  *    cursor modes, refer to Richard Wilton's _Programmer's Guide to 
  121.  *    PC and PS/2 Video Systems_ (Microsoft Press).
  122.  *
  123.  *  $EXAMPLES$
  124.  *
  125.  *     aCurInfo := getVCur( 1 )    // Get info on cursor pos in page 1
  126.  *     QOut("Row: " + str( aCurInfo[3] ) + "  Col: " + str( aCurInfo[4] ) )
  127.  *
  128.  *    
  129.  *  $END$
  130.  */
  131.  
  132.  
  133. FUNCTION FT_GETVCUR( nPage )
  134.   LOCAL aRegs[ INT86_MAX_REGS ]
  135.  
  136.   nPage := iif( nPage == nil, FT_GETVPG(), nPage )
  137.   aRegs[ AX ] := MAKEHI( 3     )
  138.   aRegs[ BX ] := MAKEHI( nPage )
  139.   FT_INT86( VIDEO, aRegs )
  140.  
  141. RETURN ( { HIGHBYTE( aRegs[CX] ), LOWBYTE( aRegs[CX] ), HIGHBYTE( aRegs[DX] ), LOWBYTE( aRegs[DX] ) } )
  142.  
  143.