home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / dirs / stv_427.lzh / STV / source / input.c < prev    next >
C/C++ Source or Header  |  1991-01-09  |  4KB  |  138 lines

  1. /*********************************
  2. *  INPUT  09/29/90
  3. *  Source file for STV
  4. *  © Copyright 1990 Timm Martin
  5. *  All Rights Reserved Worldwide
  6. **********************************/
  7.  
  8. #include <exec/types.h>
  9. #include <functions.h>
  10. #include <intuition/intuition.h>
  11. #include "func.h"
  12. #include "main.h"
  13.  
  14. /**************
  15. *  INPUT KEYS
  16. ***************/
  17.  
  18. /*
  19. This procedure handles keypresses.  It returns SELECT_PREV, SELECT_NEXT,
  20. SELECT_STOP, or SELECT_SOME based on the key that was pressed.
  21. */
  22.  
  23. SELECT input_keys( struct IntuiMessage *imessage )
  24. {
  25.   SELECT file = SELECT_SOME;
  26.  
  27.   if (imessage->Qualifier & IEQUALIFIER_LSHIFT ||
  28.       imessage->Qualifier & IEQUALIFIER_RSHIFT)
  29.   {
  30.     switch (imessage->Code)
  31.     {
  32.       case /* CursorUp    */ 0x4C: end_up();    break;
  33.       case /* CursorDown  */ 0x4D: end_down();  break;
  34.     }
  35.   }
  36.   else if (imessage->Qualifier & IEQUALIFIER_LALT ||
  37.            imessage->Qualifier & IEQUALIFIER_RALT)
  38.   {
  39.     switch (imessage->Code)
  40.     {
  41.       case /* CursorUp    */ 0x4C: page_up();    break;
  42.       case /* CursorDown  */ 0x4D: page_down();  break;
  43.     }
  44.   }
  45.   else
  46.   {
  47.     switch (imessage->Code)
  48.     {
  49.       case /* CursorUp    */ 0x4C: line_up( YES );     break;
  50.       case /* CursorDown  */ 0x4D: line_down( YES );   break;
  51.       case /* SpaceBar    */ 0x40: page_down();        break;
  52.       case /* 'S' key     */ 0x21: search();           break;
  53.       case /* 'A' key     */ 0x20:
  54.       case /* RETURN      */ 0x44:
  55.       case /* ENTER       */ 0x43: search_again();     break;
  56.       case /* 'N' key     */ 0x36: file = SELECT_NEXT; break;
  57.       case /* 'P' key     */ 0x19: file = SELECT_PREV; break;
  58.       case /* 'Q' key     */ 0x10:
  59.       case /* ESCape      */ 0x45: file = SELECT_STOP; break;
  60.     }
  61.   }
  62.   return (file);
  63. }
  64.  
  65. /****************
  66. *  INPUT WINDOW
  67. *****************/
  68.  
  69. /*
  70. This function handles all user input while the window is up, returning either
  71. SELECT_PREV, SELECT_NEXT, or SELECT_STOP if the user wants to view the
  72. previous file, the next file, or end the program.
  73. */
  74.  
  75. SELECT input_window( SELECT prev, SELECT next )
  76. {
  77.   SELECT file = SELECT_SOME;
  78.   struct IntuiMessage *imessage;
  79.  
  80.   CLEAR_POINTER;
  81.  
  82.   while (file == SELECT_SOME)
  83.   {
  84.     WAIT_FOR_INPUT;
  85.     while (WINDOW_INPUT || SCROLLING || PROPPING)
  86.     {
  87.       if (imessage)
  88.       {
  89.         /* only do this file the file hasn't already been selected */
  90.         if (file == SELECT_SOME)
  91.         {
  92.           switch (imessage->Class)
  93.           {
  94.             case RAWKEY:
  95.               file = input_keys( imessage );
  96.               break;
  97.             case MOUSEBUTTONS:
  98.               SCROLLING = imessage->Code == SELECTDOWN;
  99.               break;
  100.             case MENUPICK:
  101.               file = menu_pick( MENUNUM( imessage->Code ),
  102.                                 ITEMNUM( imessage->Code ) );
  103.               break;
  104.             case GADGETDOWN:
  105.               PROPPING = YES;
  106.               break;
  107.             case CLOSEWINDOW:
  108.               file = SELECT_STOP;
  109.               break;
  110.             case REFRESHWINDOW:
  111.               refresh_display();
  112.               break;
  113.           } /* switch message class*/
  114.         }
  115.         ReplyMsg( (struct Message *)imessage );
  116.       } /* if window input */
  117.  
  118.       else if (SCROLLING)
  119.         scroll_display();
  120.  
  121.       else /* PROPPING */
  122.         gadget_current();
  123.  
  124.     } /* while window input */
  125.  
  126.     /* check to make sure there is a previous or next file */
  127.     if ((file == SELECT_PREV && prev == SELECT_NONE) ||
  128.         (file == SELECT_NEXT && next == SELECT_NONE))
  129.       file = SELECT_SOME;
  130.  
  131.   } /* while continue inputs */
  132.  
  133.   SET_POINTER;
  134.  
  135.   /* return which file want to read next */
  136.   return (file);
  137. }
  138.