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 / brcSuspScr.c < prev    next >
C/C++ Source or Header  |  1991-09-20  |  7KB  |  253 lines

  1. /*
  2.  * $Id: brcSuspScr.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 "X.h"
  37. #include "windowstr.h"
  38. #include "window.h"
  39. #include "pixmapstr.h"
  40. #include "scrnintstr.h"
  41. #include "gcstruct.h"
  42. #include "cursorstr.h"
  43.  
  44. #include "OScompiler.h"
  45.  
  46. #include "ibmIOArch.h"
  47. #include "ibmScreen.h"
  48.  
  49. #include "ppcGCstr.h"
  50. #include "ppcScrn.h"
  51.  
  52. #include "x8514.h"
  53.  
  54. #define CURSOR_ONLY
  55. #include "brcProcs.h"
  56.  
  57. #if defined(ibm032) && defined(BSDrt)
  58. #define ATR
  59. #include <sys/ioctl.h>
  60. #include <machinecons/buf_emul.h>
  61. #else
  62. #ifdef i386
  63.         /* Nothing Yet */
  64. #else
  65.         ******** ERROR ********
  66. #endif
  67. #endif
  68.  
  69. #if defined(IBM_OS_HAS_HFT) && !defined(IBM_OS_HAS_X_QUEUE)
  70. #define HFT_HACKS "Oh no. The hack is here!"
  71. #endif
  72.  
  73. #if !defined(HFT_HACKS)
  74. extern WindowPtr ObscureEntireScreen() ;
  75. #else
  76. extern void ibmSaveScreenData() ;
  77. extern void ibmRestoreScreenData() ;
  78. extern void ppcSaveAreas() ;
  79. extern void ppcRestoreAreas() ;
  80. #endif
  81.  
  82. /* Data from brcScrInfo.c */
  83. extern ibmPerScreenInfo ibm8514ScreenInfoStruct ;
  84.  
  85. /* Data from brcData.c */
  86. extern ppcScrnPriv ibm8514ScrnPriv ;
  87.  
  88. /* Procedures from brcCurs.c */
  89. extern void ibm8514RemoveCursor() ;
  90. extern void ibm8514ShowCursor() ;
  91.  
  92. /* Procedures from brcutils.c */
  93. extern void ibm8514InitializeHardwareState() ;
  94. extern int ibm8514FD ;
  95.  
  96. /* ************************************************************************** */
  97.  
  98. int ibm8514Disabled = 0 ;
  99.  
  100. /* Private State Variables */
  101. static int CursorWasActive = 0 ;
  102. static ppcScrnPriv savedibm8514ScrnPriv ;
  103. static WindowPtr coveringWindow = (WindowPtr) 0 ;
  104.  
  105.  
  106. #if !defined(HFT_HACKS)
  107. void
  108. ibm8514SuspendScreenAndSave( index )
  109.      int index ;
  110. #else /* erik's hft hack */
  111. void
  112. ibm8514SuspendScreenAndSave( pScreen, saveBits )
  113.      ScreenPtr pScreen ;
  114.      int saveBits ;
  115. #endif
  116. {
  117.     if ( ibm8514ScreenInfoStruct.ibm_ScreenState == SCREEN_ACTIVE )
  118.     {
  119.     /* Now Disable any further screen writes
  120.      * by preventing call though the screen-priv
  121.      */
  122.     MOVE( &ibm8514ScrnPriv, &savedibm8514ScrnPriv,
  123.          sizeof( ibm8514ScrnPriv ) );
  124.     CursorWasActive = !ibm8514cursorSemaphore
  125.         && ibm8514CheckCursor( 0, 0, _8514_SCREENWIDTH,
  126.                   _8514_SCREENHEIGHT ) ;
  127.     ibm8514cursorSemaphore++ ;
  128.  
  129.     /* Fields in the ibmPerScreenInfo Structure */
  130.     ibm8514ScreenInfoStruct.ibm_HideCursor = (void (*)()) NoopDDA ;
  131.     ibm8514ScreenInfoStruct.ibm_CursorShow = (void (*)()) NoopDDA ;
  132.  
  133. #if !defined(HFT_HACKS)
  134.     coveringWindow =
  135.         ObscureEntireScreen( ibm8514ScreenInfoStruct.ibm_Screen ) ;
  136. #else                /* erik's hft hack */
  137.     if ( saveBits )
  138.         ibmSaveScreenData( pScreen, ppcSaveAreas ) ;
  139. #endif
  140.  
  141.     /* Fields in the ppcScrnPriv Structure */
  142.     ibm8514ScrnPriv.blit        = (void (*)()) NoopDDA ;
  143.     ibm8514ScrnPriv.solidFill    = (void (*)()) NoopDDA ;
  144.     ibm8514ScrnPriv.tileFill    = (void (*)()) NoopDDA ;
  145.     ibm8514ScrnPriv.stipFill    = (void (*)()) NoopDDA ;
  146.     ibm8514ScrnPriv.opstipFill    = (void (*)()) NoopDDA ;
  147.     ibm8514ScrnPriv.imageFill    = (void (*)()) NoopDDA ;
  148.     ibm8514ScrnPriv.imageRead    = (void (*)()) NoopDDA ;
  149.     ibm8514ScrnPriv.lineBres    = (void (*)()) NoopDDA ;
  150.     ibm8514ScrnPriv.lineHorz    = (void (*)()) NoopDDA ;
  151.     ibm8514ScrnPriv.lineVert    = (void (*)()) NoopDDA ;
  152.     ibm8514ScrnPriv.setColor    = (void (*)()) NoopDDA ;
  153.     ibm8514ScrnPriv.RecolorCursor    = (void (*)()) NoopDDA ;
  154.     ibm8514ScrnPriv.monoFill    = (void (*)()) NoopDDA ;
  155.     ibm8514ScrnPriv.glyphFill    = (void (*)()) NoopDDA ;
  156.     ibm8514ScrnPriv.planeRead    = (unsigned long int *(*)()) NoopDDA ;
  157.     ibm8514ScrnPriv.replicateArea    = (void (*)()) NoopDDA ;
  158.     ibm8514ScrnPriv.DestroyGCPriv    = (void (*)()) NoopDDA ;
  159.     ibm8514ScrnPriv.CheckCursor    = (int (*)()) NoopDDA ;
  160.     ibm8514ScrnPriv.ReplaceCursor    = (void (*)()) NoopDDA ;
  161.  
  162.     /* Make the list of cached fonts */
  163.     ibm8514CreateSavedFontList() ;
  164.  
  165.     ibm8514ScreenInfoStruct.ibm_ScreenState = SCREEN_INACTIVE ;
  166.     ibm8514Disabled = 1 ;
  167.     }
  168.     else if ( ibm8514ScreenInfoStruct.ibm_ScreenState == SCREEN_INACTIVE )
  169.     {
  170.     ErrorF(
  171.       "ibm8514SuspendScreenAndSave: ibm8514 State Is Already Inactive!" ) ;
  172.     }
  173.     else if ( ibm8514ScreenInfoStruct.ibm_ScreenState == SCREEN_UNINITIALIZED )
  174.     {
  175.     ErrorF( "ibm8514SuspendScreenAndSave: ibm8514 Still uninitialized!" ) ;
  176.     }
  177.  
  178.     return ;
  179. }
  180.  
  181. #if !defined(HFT_HACKS)
  182. void
  183. ibm8514RestoreScreenAndActivate( index )
  184.      int index ;
  185. #else /* erik's hft hack */
  186. ibm8514RestoreScreenAndActivate( pScreen, restoreBits )
  187.      ScreenPtr pScreen ;
  188.      int restoreBits ;
  189. #endif
  190. {
  191.     ColormapPtr currentColormap ;
  192.  
  193.     if ( ibm8514ScreenInfoStruct.ibm_ScreenState == SCREEN_INACTIVE ) {
  194.  
  195. #if defined(ibm032) && defined(BSDrt)
  196.     (void) ioctl( ibm8514FD, BUFINIT8514, 0 ) ;
  197. #else
  198. #ifdef i386
  199.         /* Nothing Yet */
  200. #else
  201.     ********* ERROR ********
  202. #endif
  203. #endif
  204.         ibm8514InitializeHardwareState() ;
  205.     /* Magic Hardware Initialization */
  206.     ibm8514outw( ibm8514_MiscIO, 0x0005 ) ;
  207.  
  208.     /* Re-enable Cursor Fields in the ibmPerScreenInfo Structure */
  209.     ibm8514ScreenInfoStruct.ibm_HideCursor = ibm8514RemoveCursor ;
  210.     ibm8514ScreenInfoStruct.ibm_CursorShow = ibm8514ShowCursor ;
  211.  
  212.     /* Now Re-Enable any screen writes by restoring the screen-priv */
  213.     currentColormap = ibm8514ScrnPriv.InstalledColormap ;
  214.     MOVE( &savedibm8514ScrnPriv, &ibm8514ScrnPriv,
  215.          sizeof( ibm8514ScrnPriv ) );
  216.     /* Now Re-Realize any Cache-able Fonts !! */
  217.  
  218.     /* Now We Are Free to Draw Again !! */
  219.     ibm8514Disabled = 0 ;
  220. #if !defined(HFT_HACKS)
  221.     FreeResource( coveringWindow->drawable.id, RT_NONE ) ;
  222.     coveringWindow = (WindowPtr) 0 ;
  223. #else                /* erik's hft hack */
  224.     if ( restoreBits )
  225.         ibmRestoreScreenData( pScreen, ppcRestoreAreas ) ;
  226. #endif
  227.  
  228.     /* Now Reinstall the current Colormap !! */
  229.     ppcInstallColormap( currentColormap ) ;
  230.  
  231.     if ( !--ibm8514cursorSemaphore && CursorWasActive )
  232.         ibm8514ReplaceCursor() ;
  233.  
  234.     ibm8514ScreenInfoStruct.ibm_ScreenState = SCREEN_ACTIVE ;
  235. #if !defined(HFT_HACKS)
  236.     ibm8514RestoreOffScreenFonts( ibmScreen( index ) ) ;
  237. #else                /* erik's hft hack */
  238.     ibm8514RestoreOffScreenFonts( pScreen ) ;
  239. #endif
  240.     }
  241.     else if ( ibm8514ScreenInfoStruct.ibm_ScreenState == SCREEN_ACTIVE )
  242.     {
  243.     ErrorF(
  244.           "ibm8514SuspendScreenAndSave: ibm8514 State Is Still Active!" ) ;
  245.     }
  246.     else if ( ibm8514ScreenInfoStruct.ibm_ScreenState == SCREEN_UNINITIALIZED )
  247.     {
  248.     ErrorF( "ibm8514SuspendScreenAndSave: ibm8514 Still uninitialized!" ) ;
  249.     }
  250.  
  251.     return ;
  252. }
  253.