home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 199.lha / GimmeLib / screen.c < prev    next >
C/C++ Source or Header  |  1988-12-27  |  3KB  |  165 lines

  1. /*
  2.  *  FILE: screen.c
  3.  *  Support for Intuition screen stuff.
  4.  *
  5.  *  Public Domain, but keep our names in it as the original authors.
  6.  *  31-Aug-88    Jan Sven Trabandt   first release version
  7.  *  30-Sep-88    Jan Sven Trabandt   gimmeNewScreen checks width more closely
  8.  */
  9.  
  10.  
  11. #define I_AM_SCREEN
  12. #include "gimmelib/gimmefuncs.h"
  13. #include "gimmelib/window.h"
  14. #include "gimmelib/globals.h"
  15.  
  16. extern struct GfxBase *GfxBase;
  17.  
  18.  
  19. struct NewScreen *gimmeNewScreen( modes, type, depth, title, textattr )
  20.     ULONG        modes, type;
  21.     SHORT        depth;
  22.     UBYTE        *title;
  23.     struct TextAttr *textattr;
  24. {
  25.     register struct NewScreen    *ns;
  26.  
  27. #ifdef GIMME_WIMPY
  28.     if( depth < 1 || depth > 8 ) {
  29.     return( NULL );
  30.     }
  31. #endif
  32.     ns = (struct NewScreen *) AllocMem( (ULONG)sizeof(struct NewScreen),
  33.                         MEMF_PUBLIC | MEMF_CLEAR );
  34.     if( ns ) {
  35.     ns->Width = GfxBase->NormalDisplayColumns;
  36.     if( modes & HIRES ) {
  37.         if( ns->Width <= 350 ) {
  38.         ns->Width <<= 1;
  39.         }
  40.     } else {
  41.         if( ns->Width > 350 ) {
  42.         ns->Width >>= 1;
  43.         }
  44.     }
  45.     ns->Height = STDSCREENHEIGHT;
  46.     ns->Depth = depth;
  47.     ns->BlockPen = 1;
  48.     ns->ViewModes = modes;
  49.     ns->Type = type;
  50.     ns->Font = textattr;
  51.     ns->DefaultTitle = title;
  52.     }
  53.     return( ns );
  54. } /* gimmeNewScreen */
  55.  
  56.  
  57. short getRidOfNewScreen( ns )
  58.     struct NewScreen    *ns;
  59. {
  60. #ifdef GIMME_WIMPY
  61.     if( !ns ) {
  62.     return( -1 );
  63.     }
  64. #endif
  65.     FreeMem( ns, (ULONG)sizeof(struct NewScreen) );
  66.     return( 0 );
  67. } /* getRidOfNewScreen */
  68.  
  69.  
  70. struct Screen *gimmeScreen( ns, winptr, depth, IDCMPflags, winflags )
  71.     struct NewScreen    *ns;
  72.     struct Window    **winptr;
  73.     SHORT        depth;
  74.     ULONG        IDCMPflags, winflags;
  75. {
  76.     struct Screen    *screen;
  77.     struct NewWindow    *nw;
  78.     struct NewScreen    *myns;
  79.  
  80.     if( !(myns = ns) ) {
  81.     ns = gimmeNewScreen( HIRES, CUSTOMSCREEN, depth, NULL, &gimMyFont );
  82.     }
  83.     if( ns ) {
  84.     screen = OpenScreen( ns );
  85.     if( screen && winptr ) {
  86.         nw = gimmeNewWindow( NULL, screen, 0, 1, IDCMPflags, winflags );
  87.         if( !nw ) {
  88.         *winptr = NULL;
  89.         } else {
  90.         *winptr = gimmeWindow( nw, 0, 0, 0 );
  91.         getRidOfNewWindow( nw );
  92.         if( !*winptr ) {
  93.             getRidOfScreen( screen, NULL );
  94.             screen = NULL;
  95.         } else {
  96.             ShowTitle( screen, FALSE );     /* hide screen title */
  97.         }
  98.         }
  99.     }
  100.     }
  101.     if( !myns && ns ) {
  102.     getRidOfNewScreen( ns );
  103.     }
  104.     return( screen );
  105. } /* gimmeScreen */
  106.  
  107.  
  108. struct Screen *gimmeScreenLazy( ns, winptr, depth )
  109.     struct NewScreen    *ns;
  110.     struct Window    **winptr;
  111.     SHORT        depth;
  112. {
  113.     return( gimmeScreen(ns, winptr, depth, IDCMP_DEFAULT, FLAGS_DEFAULT) );
  114. } /* gimmeScreenLazy */
  115.  
  116.  
  117. short getRidOfScreen( screen, window )
  118.     struct Screen   *screen;
  119.     struct Window   *window;
  120. {
  121.     if( window ) {
  122.     getRidOfWindow( window );
  123.     }
  124.     if( screen ) {
  125.     CloseScreen( screen );
  126.     }
  127.     return( 0 );
  128. } /* getRidOfScreen */
  129.  
  130.  
  131. short lowerScreen( screen, toheight )
  132.     struct Screen   *screen;
  133.     SHORT        toheight;
  134. {
  135.     register SHORT  i;
  136.  
  137. #ifdef GIMME_WIMPY
  138.     if( !screen ) {
  139.     return( -1 );
  140.     }
  141. #endif
  142.     for( i = screen->TopEdge | 1; i < toheight; i += 2 ) {
  143.     MoveScreen( screen, 0L, 2L );
  144.     } /* for */
  145.     return( 0 );
  146. } /* lowerScreen */
  147.  
  148.  
  149. short raiseScreen( screen, toheight )
  150.     struct Screen   *screen;
  151.     SHORT        toheight;
  152. {
  153.     register SHORT  i;
  154.  
  155. #ifdef GIMME_WIMPY
  156.     if( !screen ) {
  157.     return( -1 );
  158.     }
  159. #endif
  160.     for( i = screen->TopEdge & (~1); i >= toheight; i -= 2 ) {
  161.     MoveScreen( screen, 0L, -2L );
  162.     } /* for */
  163.     return( 0 );
  164. } /* raiseScreen */
  165.