home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d0xx / d034 / requester.lha / Requester / screen.c < prev    next >
Encoding:
C/C++ Source or Header  |  1986-09-03  |  6.5 KB  |  256 lines

  1. /****************************************************************************
  2.  *
  3.  *  Screen - Screen Configurator (almost useless example of FileRequest use)
  4.  *
  5.  *  By Kevin Lee Clague
  6.  *     408 Tortolla Way
  7.  *     San Jose, Ca 95033
  8.  *     408-258-9891       work 408-737-5481
  9.  *
  10.  *  Copyright (C) 1986. All rights reserved.
  11.  *
  12.  *  This program is freely distributable as long as this copyright notice
  13.  *  is retained. It intended for personal, non-commercial use.  
  14.  *
  15.  ***************************************************************************/
  16.    
  17. #include "screen.h"
  18.  
  19. struct GfxBase       *GfxBase;
  20. struct IntuitionBase *IntuitionBase;
  21.  
  22. struct Window       *window = NULL;
  23. struct Screen       *screen = NULL;
  24. struct IntuiMessage *message;
  25. struct RastPort     *rp;
  26. struct ViewPort     *vp;
  27.  
  28. UBYTE  QuitScreen = FALSE;
  29.  
  30. extern struct Menu   Menu;
  31.  
  32. struct NewScreen NewScreen = {
  33.    0,0,                      /* start position           */
  34.    320, 200, 6,              /* width, height, depth     */
  35.    0,1,                      /* detail pen, block pen    */
  36.    NULL,                     /* HIRES, INTERLACE, SPRITES, DUAL, HAM */
  37.    CUSTOMSCREEN,             /* screen type              */
  38.    NULL,                     /* font to use              */
  39.    (UBYTE *) "Screen Configurator", /* default title for screen */
  40.    NULL                      /* pointer to extra gadgets */
  41.    };
  42.  
  43. struct NewWindow NewWindow = {
  44.    0,0,                      /* start position           */
  45.    320,200,                  /* width, height            */
  46.    0,1,                      /* detail pen, block pen    */
  47.    MENUPICK|GADGETDOWN|GADGETUP|REQCLEAR, /* IDCMP flags */
  48.    ACTIVATE|BORDERLESS|BACKDROP, /* window flags */
  49.    NULL,                     /* first gadget             */
  50.    NULL,                     /* user checkmark           */
  51.    NULL,                     /* window title             */
  52.    NULL,                     /* pointer to screen        */
  53.    NULL,                     /* pointer to superbitmap   */
  54.    0,0,320,200,              /* sizing                   */
  55.    CUSTOMSCREEN              /* type of screen           */
  56.    };
  57.  
  58. UBYTE ScreenName[80] = "df0:";
  59. BOOL  FileRequest();
  60.  
  61. main () {
  62.   if (OpenLibs() | OpenDisp())
  63.     CleanUp();
  64.   else {
  65.     ConfScreen();
  66.     CleanUp();
  67.   }
  68. } /* main */ 
  69.  
  70. CleanUp() {
  71.   CloseDisp();
  72.   CloseLibs();
  73. } /* CleanUp */
  74.  
  75. OpenLibs() {
  76.   IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library",0);
  77.   if (IntuitionBase == NULL) {
  78.      printf("Couldn't get Intuition\n");
  79.      return(100);
  80.      }
  81.   GfxBase = (struct GfxBase *) OpenLibrary("graphics.library",0);
  82.   if (GfxBase == NULL) {
  83.      printf("Couldn't get Graphics\n");
  84.      return(100);
  85.      }
  86.   return(0);
  87. } /* OpenLibs */
  88.  
  89. CloseLibs() {
  90.   if (IntuitionBase != NULL) CloseLibrary(IntuitionBase);
  91.   if (GfxBase       != NULL) CloseLibrary(GfxBase);
  92. } /* CloseLibs */ 
  93.  
  94. OpenDisp() {
  95.   screen = (struct Screen *) OpenScreen(&NewScreen);
  96.   if (screen == NULL) {
  97.      printf("Can't open new screen!\n");
  98.      exit(200);
  99.      }
  100.  
  101.   NewWindow.Screen = screen;
  102.  
  103.   window = (struct Window *) OpenWindow(&NewWindow);
  104.   if (window == NULL) {
  105.      CloseScreen(screen);
  106.      printf("Can't open backdrop window\n");
  107.      exit(201);
  108.      }
  109.   SetMenuStrip(window, &Menu);
  110.  
  111.   rp = window->RPort;
  112.   vp = &screen->ViewPort;
  113.  
  114.   InitFNR();
  115.  
  116.   return(0);
  117. } /* opendisp */
  118.  
  119. CloseDisp() {
  120.   if (window)
  121.     {
  122.      ClearMenuStrip(window);
  123.      CloseWindow(window);
  124.     }
  125.   if (screen)   CloseScreen(screen);
  126. } /* CloseDisp */
  127.  
  128. ConfScreen()
  129. {
  130.   ULONG   class;
  131.   USHORT  code = 0;
  132.   struct  MenuItem *Item;
  133.  
  134.   while (QuitScreen == FALSE) {
  135.     if ((message=(struct IntuiMessage *) GetMsg(window->UserPort)) == 0L) {
  136.        Wait(1L<<window->UserPort->mp_SigBit);
  137.        continue;
  138.       }
  139.       class  = message->Class;
  140.       code   = message->Code;
  141.       ReplyMsg(message);
  142.       if (class == MENUPICK)
  143.         while (code != MENUNULL)
  144.           {
  145.           switch (MENUNUM(code))
  146.             {
  147.             case PROJECTMENU:
  148.                  ScreenProject(code);
  149.                  break;
  150.             case EDITMENU: 
  151.                  EditScreen(code);
  152.                  break;
  153.             } 
  154.           Item = ItemAddress(&Menu,code);
  155.           code = Item->NextSelect; 
  156.           }
  157.   }
  158. } /* ConfScreen */
  159.  
  160. ScreenProject(code)
  161.   USHORT code;
  162. {
  163.   switch (ITEMNUM(code))
  164.     {
  165.     case LOADITEM:
  166.          if (FileRequest("Load NewScreen","Load",&ScreenName,window))
  167.            printf("You picked %s\n",&ScreenName);
  168.          else
  169.            printf("You punted\n");
  170.          break;
  171.     case SAVEITEM:
  172.          if (FileRequest("Save NewScreen","Save",&ScreenName,window))
  173.            printf("You picked %s\n",&ScreenName);
  174.          else
  175.            printf("You punted\n");
  176.          break;
  177.     case USEITEM:
  178.          CloseDisp();
  179.          OpenDisp();
  180.          break;
  181.     case QUITITEM:
  182.          QuitScreen = TRUE;
  183.     }
  184. } /* DoProjectScreen */
  185.  
  186. EditScreen(code)
  187.   USHORT code;
  188. {
  189.   switch (ITEMNUM(code))
  190.     {
  191.     case DEPTHITEM:
  192.          NewScreen.Depth = SUBNUM(code) + 1;
  193.          AdjustScreenDepth();
  194.          break;
  195.     case VIEWMODEITEM:
  196.          EditScreenViewModes(code);
  197.          break;
  198.     }
  199. } /* EditScreen */
  200.  
  201. EditScreenViewModes(code)
  202.   USHORT code;
  203. {
  204.   struct MenuItem *Item;
  205.  
  206.   Item = ItemAddress((struct Menu *) &Menu,code);
  207.   if (Item->Flags & TOGGLED11)
  208.      Item->Flags ^= CHECKED;
  209.   Item->Flags = Item->Flags ^ TOGGLED11;
  210.  
  211.   switch (SUBNUM(code))
  212.     {
  213.     case HIRESSUB:
  214.          if (!((NewScreen.ViewModes ^= HIRES) & HIRES))
  215.             NewScreen.Width = 320;
  216.          else
  217.             {
  218.             NewScreen.Width = 640;
  219.             AdjustScreenDepth();
  220.             }
  221.          break;
  222.     case INTERLACESUB:
  223.          if ((NewScreen.ViewModes ^= INTERLACE) & INTERLACE)
  224.             NewScreen.Height = 400;
  225.          else
  226.             NewScreen.Height = 200;
  227.          break;
  228.     case SPRITESSUB:
  229.          NewScreen.ViewModes ^= SPRITES;
  230.          break;
  231.     case DUALPFSUB:
  232.          NewScreen.ViewModes ^= DUALPF;
  233.          break;
  234.     case HAMSUB:
  235.          NewScreen.ViewModes ^= HAM;
  236.     }
  237. } /* EditScreenViewMode */
  238.  
  239. AdjustScreenDepth()
  240. { /* Adjust the Number of bit planes to a sane number */
  241.   USHORT code;
  242.   struct MenuItem *Item;
  243.  
  244.   if (NewScreen.Depth > 4 && NewScreen.ViewModes & HIRES)
  245.     {
  246.     code = SHIFTMENU(EDITMENU)|SHIFTITEM(DEPTHITEM)|SHIFTSUB((NewScreen.Depth - 1));
  247.     Item = ItemAddress((struct Menu *) &Menu,code);
  248.     Item->Flags ^= CHECKED;
  249.  
  250.     NewScreen.Depth = 4;
  251.     code = SHIFTMENU(EDITMENU)|SHIFTITEM(DEPTHITEM)|SHIFTSUB((NewScreen.Depth - 1));
  252.     Item = ItemAddress((struct Menu *) &Menu,code);
  253.     Item->Flags ^= CHECKED;
  254.     }
  255. } /* AdjustScreenDepth */
  256.