home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / game / arachnid-1.1.lha / Arachnid / ReiheZeigen.c < prev    next >
C/C++ Source or Header  |  1993-12-27  |  3KB  |  124 lines

  1. #include <functions.h>
  2.  
  3. extern long   seconds,MRold;
  4. extern BOOL   MoveFlag;
  5. extern APTR   VisualInfo;
  6. extern BYTE   PlayStack[][10];
  7. extern UWORD *SpielKarten[];
  8. extern struct Screen *Scr;
  9. extern struct Window *Wnd;
  10. extern struct Image Image;
  11. extern struct TextAttr topaz8;
  12.  
  13. struct Window *ZKWnd = NULL;
  14. struct Gadget *ZKGList = NULL;
  15.  
  16. struct NewGadget ZKNGad = {
  17.         298, 110, 50, 20, (UBYTE *)"_OK", &topaz8, 0, PLACETEXT_IN, NULL, NULL};
  18.  
  19. void FehlerAus(long nr);
  20. long RowReq();
  21.  
  22. long OpenZKWindow(long WinHeight)
  23. {
  24.   struct Gadget *gad;
  25.  
  26.   gad = CreateContext(&ZKGList);
  27.  
  28.   ZKNGad.ng_VisualInfo = VisualInfo;
  29.   ZKNGad.ng_TopEdge = WinHeight-30;
  30.   gad = CreateGadget(BUTTON_KIND, gad, &ZKNGad, GT_Underscore, '_', TAG_DONE);
  31.  
  32.   if(!gad)
  33.   {
  34.     FehlerAus(9);
  35.     return(9);
  36.   }
  37.  
  38.   if(!(ZKWnd = OpenWindowTags(NULL,
  39.                    WA_Left,      10,
  40.                    WA_Top,       30,
  41.                    WA_Width,     620,
  42.                    WA_Height,    WinHeight,
  43.                    WA_IDCMP,     BUTTONIDCMP|IDCMP_INACTIVEWINDOW|IDCMP_VANILLAKEY,
  44.                    WA_Flags,     WFLG_DRAGBAR|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  45.                    WA_Gadgets,   ZKGList,
  46.                    WA_Title,     (UBYTE *)"Reihe Anzeigen",
  47.                    WA_PubScreen, Scr,
  48.                    TAG_DONE )))
  49.   {
  50.     FehlerAus(7);
  51.     return(7);
  52.   }
  53.  
  54.   GT_RefreshWindow(ZKWnd, NULL);
  55.  
  56.   return(0);
  57. }
  58.  
  59. void CloseZKWindow()
  60. {
  61.   if(ZKWnd)
  62.   {
  63.     CloseWindow(ZKWnd);
  64.     ZKWnd = NULL;
  65.   }
  66.  
  67.   if(ZKGList)
  68.   {
  69.     FreeGadgets(ZKGList);
  70.     ZKGList = NULL;
  71.   }
  72. }
  73.  
  74. void ReiheZeigen()
  75. {
  76.   long  i,class,code,FirstCard,EndCard,Cards,WinHeight;
  77.   BOOL ende = FALSE;
  78.   struct IntuiMessage *message;
  79.   struct RastPort     *RastPort;
  80.   struct MsgPort      *UserPort;
  81.   struct Gadget       *gad;
  82.  
  83.   if((!MoveFlag)||(!PlayStack[0][MRold]))
  84.   {
  85.     if((MRold = RowReq()) < 0) return;
  86.   }
  87.   EndCard = PlayStack[0][MRold]+1;
  88.   for(FirstCard=1;PlayStack[FirstCard][MRold]<0;FirstCard++);
  89.   Cards = EndCard - FirstCard;
  90.   WinHeight = (Cards-1)/9*76+136;
  91.  
  92.   if(OpenZKWindow(WinHeight)) return;
  93.   UserPort = ZKWnd->UserPort;
  94.   RastPort = ZKWnd->RPort;
  95.  
  96.   for(i=0;i<Cards;i++)
  97.   {
  98.     Image.ImageData = SpielKarten[PlayStack[i+FirstCard][MRold]];
  99.     DrawImage(RastPort, &Image, (i%9)*67+17, (i/9)*76+20);
  100.   }
  101.  
  102.   while(!ende)
  103.   {
  104.     Wait(1L << UserPort->mp_SigBit);
  105.     while(message = (struct IntuiMessage *) GT_GetIMsg(UserPort))
  106.     {
  107.       gad = (struct Gadget*)message->IAddress;
  108.       class = message->Class;
  109.       code  = message->Code;
  110.       GT_ReplyIMsg(message);
  111.       switch(class)
  112.       {
  113.         case IDCMP_INACTIVEWINDOW: ActivateWindow(ZKWnd);
  114.                                    break;
  115.         case IDCMP_GADGETUP:       ende = TRUE;
  116.                                    break;
  117.         case IDCMP_VANILLAKEY:     if((code == 'o') || (code == 'O')) ende = TRUE;
  118.                                    if(code == 13) ende = TRUE;
  119.       }
  120.     }
  121.   }
  122.   CloseZKWindow();
  123. }
  124.