home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 568b.lha / PowerSource_v3.0 / source.lzh / source / func1.c < prev    next >
C/C++ Source or Header  |  1991-09-15  |  3KB  |  123 lines

  1. /*----------------------------------------------------------------------*
  2.   func1.c Version 3.0 -  © Copyright 1990-91 Jaba Development
  3.  
  4.   Author : Jan van den Baard
  5.   Purpose: Some subroutines for the program
  6.  *----------------------------------------------------------------------*/
  7.  
  8. extern struct Gadget     *Gadget;
  9. extern struct Window     *MainWindow;
  10. extern struct GadgetList  Gadgets;
  11. extern ULONG              Class;
  12. extern USHORT             Code, Qualifier;
  13. extern SHORT              MainX, MainY;
  14.  
  15. /*
  16.  * read the mouse coordinates
  17.  */
  18. VOID get_xy(x,y)
  19.     SHORT *x, *y;
  20. {
  21.     if(TestBits(MainWindow->Flags,GIMMEZEROZERO)) {
  22.       *x = MainWindow->GZZMouseX;
  23.       *y = MainWindow->GZZMouseY;
  24.     } else {
  25.       *x = MainWindow->MouseX;
  26.       *y = MainWindow->MouseY;
  27.     }
  28. }
  29.  
  30. /*
  31.  * read a message from the window 'w' user port
  32.  */
  33. LONG read_msg(w)
  34.     struct Window *w;
  35. {
  36.     struct IntuiMessage *msg;
  37.  
  38.     if((msg = (struct IntuiMessage *)GetMsg(w->UserPort))) {
  39.         Class     = msg->Class;
  40.         Code      = msg->Code;
  41.         Qualifier = msg->Qualifier;
  42.         Gadget    = (struct Gadget *)msg->IAddress;
  43.  
  44.         ReplyMsg((struct Message *)msg);
  45.         return(TRUE);
  46.     }
  47.     return(FALSE);
  48. }
  49.  
  50. /*
  51.  * wait for the user to select a gadget or
  52.  * press the 'ESC' key
  53.  */
  54. struct Gadget *wait_for_gadget(w)
  55.     struct Window *w;
  56. {
  57.     struct Gadget *g;
  58.  
  59.     Forbid();
  60.     while(read_msg(w));
  61.     Permit();
  62.  
  63.     switch_coords(FALSE);
  64.     while((Class != GADGETUP) AND (Class != GADGETDOWN)) {
  65.         Wait(1 << w->UserPort->mp_SigBit);
  66.         while(read_msg(w)) {
  67.             g = Gadget;
  68.             if((Class == RAWKEY) && (Code == ESC)) {
  69.                 Forbid();
  70.                 while(read_msg(w));
  71.                 Permit();
  72.                 refresh();
  73.                 return(NULL);
  74.             }
  75.             get_xy(&MainX,&MainY);
  76.         }
  77.     }
  78.     if(Class == GADGETDOWN) {
  79.         Wait(1 << w->UserPort->mp_SigBit);
  80.         while(read_msg(w)) {
  81.             if((Code == SELECTUP) AND (Class == GADGETUP)) break;
  82.         }
  83.     }
  84.     Forbid();
  85.     while(read_msg(w));
  86.     Permit();
  87.     switch_coords(TRUE);
  88.     return(g);
  89. }
  90.  
  91. /*
  92.  * draw a box
  93.  */
  94. VOID draw_box(w,x,y,x1,y1)
  95.     struct Window  *w;
  96.     register SHORT x,y,x1,y1;
  97. {
  98.     register SHORT tmp;
  99.     struct RastPort *rp;
  100.  
  101.     if(x > x1) { tmp = x; x = x1; x1 = tmp; }
  102.     if(y > y1) { tmp = y; y = y1; y1 = tmp; }
  103.     rp = w->RPort;
  104.     SetDrMd(rp,JAM1+COMPLEMENT);
  105.     Move(rp,x+1,y);
  106.     Draw(rp,x1,y);
  107.     Draw(rp,x1,y1);
  108.     Draw(rp,x,y1);
  109.     Draw(rp,x,y);
  110. }
  111.  
  112. /*
  113.  * reset a string gadget display position.
  114.  */
  115. void redisplay( struct Gadget *g )
  116. {
  117.     struct StringInfo   *sinfo = (struct StringInfo *)g->SpecialInfo;
  118.  
  119.     sinfo->BufferPos = 0;
  120.     sinfo->DispPos   = 0;
  121.     sinfo->UndoPos   = 0;
  122. }
  123.