home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / x / xibm.zip / ibm8514 / brcBlit.c < prev    next >
C/C++ Source or Header  |  1991-09-20  |  6KB  |  238 lines

  1. /*
  2.  * $Id: brcBlit.c,v 1.1 1991/09/20 19:10:24 mtranle Exp $
  3.  *
  4.  * Copyright IBM Corporation 1987,1990
  5.  *
  6.  * All Rights Reserved
  7.  *
  8.  * Permission to use, copy, modify, and distribute this software and its
  9.  * documentation for any purpose and without fee is hereby granted,
  10.  * provided that the above copyright notice appear in all copies and that 
  11.  * both that copyright notice and this permission notice appear in
  12.  * supporting documentation, and that the name of IBM not be
  13.  * used in advertising or publicity pertaining to distribution of the
  14.  * software without specific, written prior permission.
  15.  *
  16.  * IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  17.  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
  18.  * IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  19.  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  20.  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  21.  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  22.  * SOFTWARE.
  23.  *
  24. */
  25. /*
  26.  * PRPQ 5799-PFF (C) COPYRIGHT IBM CORPORATION 1987,1990
  27.  * LICENSED MATERIALS - PROPERTY OF IBM
  28.  * REFER TO COPYRIGHT INSTRUCTIONS FORM NUMBER G120-2083
  29.  */
  30. /*
  31.  *  Hardware interface routines for IBM 8514/A adapter for
  32.  *  X.11 server(s) on IBM equipment.
  33.  *
  34.  */
  35.  
  36. #include "x8514.h"
  37.  
  38. #include "ibmTrace.h"
  39.  
  40. extern int mergexlate[] ;
  41. extern int ibm8514cursorSemaphore ;
  42.  
  43. void
  44. ibm8514Bitblt( merge, rpm, wpm, x0, y0, x1, y1, lx, ly )
  45.      int merge ;
  46.      unsigned long int rpm, wpm ;
  47.      int x0, y0, x1, y1, lx, ly ;
  48. {
  49.     unsigned short command = 0xc0f3 ;
  50.     int CursorIsSaved ;
  51.  
  52.     TRACE( ( "ibm8514Bitblt:merge=%d,rpm=%02x,wpm=%02x,x0=%d,y0=%d,x1=%d,y1=%d,lx=%d,ly=%d\n",
  53.         merge, rpm, wpm, x0, y0, x1, y1, lx, ly ) ) ;
  54.  
  55.     if ( lx <= 0 || ly <= 0 )
  56.     return ;
  57.  
  58.     CursorIsSaved = !ibm8514cursorSemaphore
  59.     && ( ibm8514CheckCursor( x0, y0, lx, ly )
  60.         || ibm8514CheckCursor( x1, y1, lx, ly ) ) ;
  61.  
  62.     --lx ;
  63.     --ly ;
  64.     if ( x1 > x0 )
  65.     {
  66.     x0 += lx ;        /* start at right and go left */
  67.     x1 += lx ;
  68.     command &= 0xFFDF ;    /* turn off X cd bit */
  69.     }
  70.     if ( y1 > y0 )
  71.     {
  72.     y0 += ly ;        /* start at bottom and go up */
  73.     y1 += ly ;
  74.     command &= 0xFF7F ;    /* turn off Y cd bit */
  75.     }
  76.  
  77.     ibm8514ATRNotBusy ;
  78.     ibm8514CheckQueue( 5 ) ;
  79.     PLNRENBL( rpm ) ;
  80.     PLNWENBL( wpm ) ;
  81.     SETFN1( FNCPYRCT, mergexlate[merge] ) ;
  82.     SETX0( x0 ) ;
  83.     SETY0( y0 ) ;
  84.     ibm8514CheckQueue( 5 ) ;
  85.     SETX1( x1 ) ;
  86.     SETY1( y1 ) ;
  87.     SETLX( lx ) ;
  88.     SETLY( ly ) ;
  89.     COMMAND( command ) ;
  90.  
  91.     ibm8514CheckQueue( 3 ) ;
  92.     PLNRENBL( ibm8514ALLPLANES ) ;
  93.     PLNWENBL( ibm8514ALLPLANES ) ;
  94.     SETFN1( FNCOLOR1, FNREPLACE ) ; /* as expected elsewhere */
  95.  
  96.     if ( CursorIsSaved )
  97.     ibm8514ReplaceCursor() ;
  98.  
  99.     return ;
  100. }
  101.  
  102. void
  103. ibm8514BlitFG( rpm, wpm, fg, merge, x0, y0, x1, y1, lx, ly )
  104.      unsigned long int rpm ;
  105.      unsigned long int wpm ;
  106.      unsigned long int fg ;
  107.      int merge, x0, y0, x1, y1, lx, ly ;
  108. {
  109.     unsigned short command = 0xC0F3 ;
  110.     int CursorIsSaved ;
  111.  
  112.     TRACE( ( "ibm8514BlitFG:rpm,wpm,fg,mrg,x0,y0,x1,y1,lx,ly = %d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
  113.         rpm, wpm, fg, merge, x0, y0, x1, y1, lx, ly ) ) ;
  114.  
  115.     if ( lx <= 0 || ly <= 0 )
  116.     return ;
  117.  
  118.     CursorIsSaved = !ibm8514cursorSemaphore
  119.     && ( ibm8514CheckCursor( x0, y0, lx, ly )
  120.         || ibm8514CheckCursor( x1, y1, lx, ly ) ) ;
  121.  
  122.     lx-- ;
  123.     ly-- ;
  124.     if ( x1 > x0 )
  125.     {
  126.     x0 += lx ;        /* start at right and go left */
  127.     x1 += lx ;
  128.     command &= 0xFFDF ;    /* turn off X cd bit */
  129.     }
  130.     if ( y1 > y0 )
  131.     {
  132.     y0 += ly ;        /* start at bottom and go up */
  133.     y1 += ly ;
  134.     command &= 0xFF7F ;    /* turn off Y cd bit */
  135.     }
  136.  
  137.     ibm8514ATRNotBusy ;
  138.     ibm8514CheckQueue( 4 ) ;
  139.     SETFN0( FNCOLOR0, FNNOP ) ;
  140.     SETFN1( FNCOLOR1, mergexlate[merge] ) ;
  141.     PLNRENBL( rpm ) ;
  142.     PLNWENBL( wpm ) ;
  143.  
  144.     ibm8514CheckQueue( 4 ) ;
  145.     SETMODE( M_CPYRCT ) ;
  146.     SETCOL1( fg ) ;
  147.     SETX0( x0 ) ;
  148.     SETY0( y0 ) ;
  149.  
  150.     ibm8514CheckQueue( 5 ) ;
  151.     SETX1( x1 ) ;
  152.     SETY1( y1 ) ;
  153.     SETLX( lx ) ;
  154.     SETLY( ly ) ;
  155.     COMMAND( command ) ;
  156.  
  157.     ibm8514CheckQueue( 5 ) ;
  158.     PLNRENBL( RPLANES ) ;
  159.     PLNWENBL( WPLANES ) ;
  160.     SETFN0( FNCOLOR0, FNREPLACE ) ;
  161.     SETFN1( FNCOLOR1, FNREPLACE ) ;
  162.     SETMODE( M_ONES ) ;
  163.  
  164.     if ( CursorIsSaved )
  165.     ibm8514ReplaceCursor() ;
  166.  
  167.     return ;
  168. }
  169.  
  170. void
  171. ibm8514BlitFGBG( rpm, wpm, fg, bg, merge, x0, y0, x1, y1, lx, ly )
  172.      unsigned long int rpm ;
  173.      unsigned long int wpm ;
  174.      unsigned long int fg ;
  175.      unsigned long int bg ;
  176.      int merge, x0, y0, x1, y1, lx, ly ;
  177. {
  178.     unsigned short command = 0xC0F3 ;
  179.     int CursorIsSaved ;
  180.  
  181.     TRACE( ( "ibm8514BlitFGBG:plns,fg,bg,mrg,x0,y0,x1,y1,lx,ly = %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
  182.         rpm, wpm, fg, bg, merge, x0, y0, x1, y1, lx, ly ) ) ;
  183.  
  184.     if ( lx <= 0 || ly <= 0 )
  185.     return ;
  186.     CursorIsSaved = !ibm8514cursorSemaphore
  187.     && ( ibm8514CheckCursor( x0, y0, lx, ly )
  188.         || ibm8514CheckCursor( x1, y1, lx, ly ) ) ;
  189.  
  190.     ly-- ;
  191.     lx-- ;
  192.     if ( x1 > x0 )
  193.     {
  194.     x0 += lx ;        /* start at right and go left */
  195.     x1 += lx ;
  196.     command &= 0xFFDF ;    /* turn off X cd bit */
  197.     }
  198.     if ( y1 > y0 )
  199.     {
  200.     y0 += ly ;        /* start at bottom and go up */
  201.     y1 += ly ;
  202.     command &= 0xFF7F ;    /* turn off Y cd bit */
  203.     }
  204.  
  205.     ibm8514ATRNotBusy ;
  206.     ibm8514CheckQueue( 4 ) ;
  207.     SETFN0( FNCOLOR0, mergexlate[merge] ) ;
  208.     SETFN1( FNCOLOR1, mergexlate[merge] ) ;
  209.     SETCOL0( bg ) ;
  210.     SETCOL1( fg ) ;
  211.  
  212.     ibm8514CheckQueue( 5 ) ;
  213.     PLNRENBL( rpm ) ;
  214.     PLNWENBL( wpm ) ;
  215.     SETMODE( M_CPYRCT ) ;
  216.     SETX0( x0 ) ;
  217.     SETY0( y0 ) ;
  218.  
  219.     ibm8514CheckQueue( 5 ) ;
  220.     SETX1( x1 ) ;
  221.     SETY1( y1 ) ;
  222.     SETLX( lx ) ;
  223.     SETLY( ly ) ;
  224.     COMMAND( command ) ;
  225.  
  226.     ibm8514CheckQueue( 5 ) ;
  227.     PLNRENBL( RPLANES ) ;
  228.     PLNWENBL( WPLANES ) ;
  229.     SETFN0( FNCOLOR0, FNREPLACE ) ;
  230.     SETFN1( FNCOLOR1, FNREPLACE ) ;
  231.     SETMODE( M_ONES ) ;
  232.  
  233.     if ( CursorIsSaved )
  234.     ibm8514ReplaceCursor() ;
  235.  
  236.     return ;
  237. }
  238.