home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d6xx / d658 / view.lha / View / Source / Event.c < prev    next >
C/C++ Source or Header  |  1992-05-15  |  12KB  |  400 lines

  1. /*-- AutoRev header do NOT edit!
  2. *
  3. *   Program         :   event.c
  4. *   Copyright       :   Copyright © 1991-92 Jaba Development
  5. *   Author          :   Jan van den Baard
  6. *   Creation Date   :   04-Apr-1992
  7. *   Current version :   2.0
  8. *   Translator      :   Dice v2.06.40
  9. *
  10. *   REVISION HISTORY
  11. *
  12. *   Date          Version         Comment
  13. *   ---------     -------         ------------------------------------------
  14. *   04-Apr-92     2.0             View keyboard event-handler. (rewrite)
  15. *
  16. *-- REV_END --*/
  17.  
  18. #include "view.h"
  19.  
  20. /*
  21.  * All kinds of qualifier-key combinations.
  22.  */
  23. #define MOUSE           IEQUALIFIER_RELATIVEMOUSE
  24. #define REPEAT          IEQUALIFIER_REPEAT
  25. #define LOCK            IEQUALIFIER_CAPSLOCK
  26. #define NUMPAD          IEQUALIFIER_NUMERICPAD
  27. #define LSHIFT          IEQUALIFIER_LSHIFT
  28. #define RSHIFT          IEQUALIFIER_RSHIFT
  29. #define CONTROL         IEQUALIFIER_CONTROL
  30. #define ALT             IEQUALIFIER_LALT
  31.  
  32. #define NORM1           MOUSE
  33. #define NORM2           NORM1+REPEAT
  34. #define NORM3           NORM1+LOCK
  35. #define NORM4           NORM2+LOCK
  36.  
  37. #define LALT1           MOUSE+ALT
  38. #define LALT2           LALT1+REPEAT
  39. #define LALT3           LALT1+LOCK
  40. #define LALT4           LALT2+LOCK
  41.  
  42. #define NUMP1           MOUSE+NUMPAD
  43. #define NUMP2           NUMP1+REPEAT
  44. #define NUMP3           NUMP1+LOCK
  45. #define NUMP4           NUMP2+LOCK
  46.  
  47. #define CTRL1           MOUSE+CONTROL
  48. #define CTRL2           CTRL1+REPEAT
  49. #define CTRL3           CTRL1+LOCK
  50. #define CTRL4           CTRL2+LOCK
  51.  
  52. #define PRIN1           CTRL1+LSHIFT
  53. #define PRIN2           CTRL3+LSHIFT
  54.  
  55. #define SHIF1           MOUSE+LSHIFT
  56. #define SHIF2           MOUSE+RSHIFT
  57. #define SHIF3           SHIF1+REPEAT
  58. #define SHIF4           SHIF2+REPEAT
  59. #define SHIF5           SHIF1+LOCK
  60. #define SHIF6           SHIF2+LOCK
  61. #define SHIF7           SHIF3+LOCK
  62. #define SHIF8           SHIF4+LOCK
  63.  
  64. /*
  65.  * hot-keys to be pressed together with LALT+LAMIGA
  66.  * when view is taking a nap.
  67.  */
  68. #define VIEW            0x34
  69. #define QUIT            0x10
  70. #define FLUSH           0x23
  71.  
  72. /*
  73.  * some external referenced globals.
  74.  */
  75. #ifndef __DETACH
  76. extern ULONG             vwArgs[];
  77. #else
  78. extern ULONG            *vwArgs;
  79. #endif
  80. extern UWORD             vwPMark;
  81. extern UWORD             vwMode, vwPMode;
  82. extern UBYTE             vwPrinting, vwErr;
  83. extern UBYTE             ClearStr[];
  84. extern struct Screen    *vwScreen;
  85. extern UBYTE             vwFound;
  86. extern struct AsciiText *vwText;
  87. extern UBYTE             KeyTable[];
  88. extern UBYTE             SKeyTable[];
  89.  
  90. extern __far struct Custom custom;
  91.  
  92. Prototype void HandleKeyboard( UWORD, UWORD );
  93.  
  94. /*
  95.  * Handle all incoming RAWKEY messages.
  96.  */
  97. void HandleKeyboard( code, qualifier )
  98.     UWORD           code, qualifier;
  99. {
  100.     if(( code & IECODE_UP_PREFIX) != IECODE_UP_PREFIX ) {
  101.         if ( vwErr )  InfoLine();
  102.  
  103.         switch( qualifier ) {
  104.  
  105.             case NORM1:
  106.             case NORM2:
  107.             case NORM3:
  108.             case NORM4:
  109.                 if ( code < 64 ) {
  110.                     switch( KeyTable[ code ] ) {
  111.  
  112.                         case 'm':
  113.                             if ( vwArgs[ 11 ] ) {
  114.                                 vwArgs[ 11 ] = NULL;
  115.                                 ON_SPRITE;
  116.                             } else {
  117.                                 vwArgs[ 11 ] = ~0;
  118.                                 OFF_SPRITE;
  119.                             }
  120.                             break;
  121.  
  122.                         case 'c':
  123.                             if ( vwArgs[ 12 ] )
  124.                                 vwArgs[ 12 ] = NULL;
  125.                             else
  126.                                 vwArgs[ 12 ]  = ~0;
  127.                             break;
  128.  
  129.                         case 'h':
  130.                             Help();
  131.                             break;
  132.  
  133.                         case 'q':
  134.                             if ( ! vwPrinting ) Quit( RETURN_OK );
  135.                             break;
  136.  
  137.                         case '/':
  138.                         case 'f':
  139.                             vwMode = TRUE;
  140.                             Find();
  141.                             break;
  142.  
  143.                         case '.':
  144.                         case 's':
  145.                             vwMode = FALSE;
  146.                             Find();
  147.                             break;
  148.  
  149.                         case 'n':
  150.                             vwMode = TRUE;
  151.                             FindNP( SR_FORWARD );
  152.                             break;
  153.  
  154.                         case 'p':
  155.                             vwMode = TRUE;
  156.                             FindNP( SR_BACKWARD );
  157.                             break;
  158.  
  159.                         case 'r':
  160.                             Inform( ClearStr );
  161.                             DisplayText();
  162.                             break;
  163. #ifndef __DETACH
  164.                         case 'e':
  165.                             EditFile();
  166.                             break;
  167. #endif
  168.                         case 'l':
  169.                             if ( ! vwPrinting ) LoadFile( TRUE );
  170.                             break;
  171.  
  172.                         case 'j':
  173.                             if ( vwFound )
  174.                                 DoFound();
  175.                             break;
  176.  
  177.                         case 'b':
  178.                             if ( ! vwPrinting ) {
  179.                                 if ( vwText ) FreeAscii( vwText );
  180.                                 vwText = NULL;
  181.                                 CloseDisplay();
  182.                             }
  183.                             break;
  184.  
  185.                         case '<':
  186.                             Top();
  187.                             break;
  188.  
  189.                         default:
  190.                             break;
  191.                     }
  192.                 } else if ( code >= 0x50 && code <= 0x59 ) {
  193.                     SetMark(( UWORD )( code - 0x50 ));
  194.                     break;
  195.                 } else {
  196.                     switch( code ) {
  197.  
  198.                         case 0x40:
  199.                             PageDown();
  200.                             break;
  201.  
  202.                         case 0x41:
  203.                             PageUp();
  204.                             break;
  205.  
  206.                         case 0x4d:
  207.                         case 0x44:
  208.                             LineDown();
  209.                             break;
  210.  
  211.                         case 0x4c:
  212.                             LineUp();
  213.                             break;
  214.  
  215.                         case 0x5f:
  216.                             Help();
  217.                             break;
  218.  
  219.                         case 0x45:
  220.                             if ( ! vwPrinting) Quit( RETURN_OK );
  221.                             break;
  222.  
  223.                         default:
  224.                             break;
  225.                     }
  226.                 }
  227.                 break;
  228.  
  229.             case NUMP1:
  230.             case NUMP2:
  231.             case NUMP3:
  232.             case NUMP4:
  233.                 if ( code < 64 ) {
  234.                     switch( KeyTable[ code ] ) {
  235.  
  236.                         case '7':
  237.                         case '4':
  238.                             Top();
  239.                             break;
  240.  
  241.                         case '1':
  242.                         case '6':
  243.                             Bottom();
  244.                             break;
  245.  
  246.                         case '8':
  247.                             LineUp();
  248.                             break;
  249.  
  250.                         case '2':
  251.                             LineDown();
  252.                             break;
  253.  
  254.                         case '9':
  255.                             PageUp();
  256.                             break;
  257.  
  258.                         case '3':
  259.                             PageDown();
  260.                             break;
  261.  
  262.                         case '5':
  263.                             if ( ! vwPrinting ) Quit( RETURN_OK );
  264.                             break;
  265.  
  266.                         default:
  267.                             break;
  268.                     }
  269.                 } else if ( code == 0x43 ) {
  270.                     LineUp();
  271.                     break;
  272.                 }
  273.                 break;
  274.  
  275.             case CTRL1:
  276.             case CTRL2:
  277.             case CTRL3:
  278.             case CTRL4:
  279.                 if ( code < 64 ) {
  280.                     switch( KeyTable[ code ] ) {
  281.  
  282.                         case 'c':
  283.                             if ( ! vwPrinting ) Quit( RETURN_OK );
  284.                             break;
  285.  
  286.                         case 'n':
  287.                             vwMode = FALSE;
  288.                             FindNP( SR_FORWARD );
  289.                             break;
  290.  
  291.                         case 'p':
  292.                             vwMode = FALSE;
  293.                             FindNP( SR_BACKWARD );
  294.                             break;
  295.  
  296.                         case 'l':
  297.                             Inform( ClearStr );
  298.                             DisplayText();
  299.                             break;
  300.  
  301.                         case 'b':
  302.                             if ( ! vwPrinting )
  303.                                 CloseDisplay();
  304.                             break;
  305.  
  306.                         case 's':
  307.                             SaveBlock( -1 );
  308.                             break;
  309.  
  310.                         default:
  311.                             break;
  312.                     }
  313.                 } else if ( code >= 0x50 && code <= 0x59 ) {
  314.                     JumpMark(( UWORD )( code - 0x50 ));
  315.                     break;
  316.                 }
  317.                 break;
  318.  
  319.             case PRIN1:
  320.             case PRIN2:
  321.                 if ( code < 64 ) {
  322.                     switch( KeyTable[ code ] ) {
  323.  
  324.                         case 'd':
  325.                             if ( ! vwPrinting ) {
  326.                                 vwPMode = PRT_PAGE;
  327.                                 PrintFile();
  328.                             }
  329.                             break;
  330.  
  331.                         case 'p':
  332.                             if ( ! vwPrinting ) {
  333.                                 vwPMode = PRT_FILE;
  334.                                 PrintFile();
  335.                             }
  336.                             break;
  337.  
  338.                         default:
  339.                             break;
  340.                     }
  341.                 } else if ( code >= 0x50 && code <= 0x59 ) {
  342.                     vwPMode = PRT_BLOCK;
  343.                     vwPMark = ( UWORD )( code - 0x50 );
  344.                     PrintFile();
  345.                     break;
  346.                 }
  347.                 break;
  348.  
  349.             case SHIF1:
  350.             case SHIF2:
  351.             case SHIF3:
  352.             case SHIF4:
  353.             case SHIF5:
  354.             case SHIF6:
  355.             case SHIF7:
  356.             case SHIF8:
  357.                 if ( code < 64 ) {
  358.                     switch( SKeyTable[ code ] ) {
  359.  
  360.                         case '<':
  361.                             Top();
  362.                             break;
  363.  
  364.                         case '>':
  365.                             Bottom();
  366.                             break;
  367.  
  368.                         case '%':
  369.                             Goto( GT_PERC );
  370.                             break;
  371.  
  372.                         case 'N':
  373.                             Goto( GT_LINE );
  374.                             break;
  375.  
  376.                         default:
  377.                             break;
  378.                     }
  379.                 } else if ( code >= 0x50 && code <= 0x59 ) {
  380.                     UnSetMark(( UWORD )( code - 0x50 ));
  381.                     break;
  382.                 }
  383.                 break;
  384.  
  385.             case LALT1:
  386.             case LALT2:
  387.             case LALT3:
  388.             case LALT4:
  389.                 if ( code >= 0x50 && code <= 0x59 ) {
  390.                     SaveBlock(( WORD )( code - 0x50 ));
  391.                     break;
  392.                 }
  393.                 break;
  394.  
  395.             default:
  396.                 break;
  397.         }
  398.     }
  399. }
  400.