/*-- AutoRev header do NOT edit! * * Program : event.c * Copyright : Copyright © 1991-92 Jaba Development * Author : Jan van den Baard * Creation Date : 04-Apr-1992 * Current version : 2.0 * Translator : Dice v2.06.40 * * REVISION HISTORY * * Date Version Comment * --------- ------- ------------------------------------------ * 04-Apr-92 2.0 View keyboard event-handler. (rewrite) * *-- REV_END --*/ #include "view.h" /* * All kinds of qualifier-key combinations. */ #define MOUSE IEQUALIFIER_RELATIVEMOUSE #define REPEAT IEQUALIFIER_REPEAT #define LOCK IEQUALIFIER_CAPSLOCK #define NUMPAD IEQUALIFIER_NUMERICPAD #define LSHIFT IEQUALIFIER_LSHIFT #define RSHIFT IEQUALIFIER_RSHIFT #define CONTROL IEQUALIFIER_CONTROL #define ALT IEQUALIFIER_LALT #define NORM1 MOUSE #define NORM2 NORM1+REPEAT #define NORM3 NORM1+LOCK #define NORM4 NORM2+LOCK #define LALT1 MOUSE+ALT #define LALT2 LALT1+REPEAT #define LALT3 LALT1+LOCK #define LALT4 LALT2+LOCK #define NUMP1 MOUSE+NUMPAD #define NUMP2 NUMP1+REPEAT #define NUMP3 NUMP1+LOCK #define NUMP4 NUMP2+LOCK #define CTRL1 MOUSE+CONTROL #define CTRL2 CTRL1+REPEAT #define CTRL3 CTRL1+LOCK #define CTRL4 CTRL2+LOCK #define PRIN1 CTRL1+LSHIFT #define PRIN2 CTRL3+LSHIFT #define SHIF1 MOUSE+LSHIFT #define SHIF2 MOUSE+RSHIFT #define SHIF3 SHIF1+REPEAT #define SHIF4 SHIF2+REPEAT #define SHIF5 SHIF1+LOCK #define SHIF6 SHIF2+LOCK #define SHIF7 SHIF3+LOCK #define SHIF8 SHIF4+LOCK /* * hot-keys to be pressed together with LALT+LAMIGA * when view is taking a nap. */ #define VIEW 0x34 #define QUIT 0x10 #define FLUSH 0x23 /* * some external referenced globals. */ #ifndef __DETACH extern ULONG vwArgs[]; #else extern ULONG *vwArgs; #endif extern UWORD vwPMark; extern UWORD vwMode, vwPMode; extern UBYTE vwPrinting, vwErr; extern UBYTE ClearStr[]; extern struct Screen *vwScreen; extern UBYTE vwFound; extern struct AsciiText *vwText; extern UBYTE KeyTable[]; extern UBYTE SKeyTable[]; extern __far struct Custom custom; Prototype void HandleKeyboard( UWORD, UWORD ); /* * Handle all incoming RAWKEY messages. */ void HandleKeyboard( code, qualifier ) UWORD code, qualifier; { if(( code & IECODE_UP_PREFIX) != IECODE_UP_PREFIX ) { if ( vwErr ) InfoLine(); switch( qualifier ) { case NORM1: case NORM2: case NORM3: case NORM4: if ( code < 64 ) { switch( KeyTable[ code ] ) { case 'm': if ( vwArgs[ 11 ] ) { vwArgs[ 11 ] = NULL; ON_SPRITE; } else { vwArgs[ 11 ] = ~0; OFF_SPRITE; } break; case 'c': if ( vwArgs[ 12 ] ) vwArgs[ 12 ] = NULL; else vwArgs[ 12 ] = ~0; break; case 'h': Help(); break; case 'q': if ( ! vwPrinting ) Quit( RETURN_OK ); break; case '/': case 'f': vwMode = TRUE; Find(); break; case '.': case 's': vwMode = FALSE; Find(); break; case 'n': vwMode = TRUE; FindNP( SR_FORWARD ); break; case 'p': vwMode = TRUE; FindNP( SR_BACKWARD ); break; case 'r': Inform( ClearStr ); DisplayText(); break; #ifndef __DETACH case 'e': EditFile(); break; #endif case 'l': if ( ! vwPrinting ) LoadFile( TRUE ); break; case 'j': if ( vwFound ) DoFound(); break; case 'b': if ( ! vwPrinting ) { if ( vwText ) FreeAscii( vwText ); vwText = NULL; CloseDisplay(); } break; case '<': Top(); break; default: break; } } else if ( code >= 0x50 && code <= 0x59 ) { SetMark(( UWORD )( code - 0x50 )); break; } else { switch( code ) { case 0x40: PageDown(); break; case 0x41: PageUp(); break; case 0x4d: case 0x44: LineDown(); break; case 0x4c: LineUp(); break; case 0x5f: Help(); break; case 0x45: if ( ! vwPrinting) Quit( RETURN_OK ); break; default: break; } } break; case NUMP1: case NUMP2: case NUMP3: case NUMP4: if ( code < 64 ) { switch( KeyTable[ code ] ) { case '7': case '4': Top(); break; case '1': case '6': Bottom(); break; case '8': LineUp(); break; case '2': LineDown(); break; case '9': PageUp(); break; case '3': PageDown(); break; case '5': if ( ! vwPrinting ) Quit( RETURN_OK ); break; default: break; } } else if ( code == 0x43 ) { LineUp(); break; } break; case CTRL1: case CTRL2: case CTRL3: case CTRL4: if ( code < 64 ) { switch( KeyTable[ code ] ) { case 'c': if ( ! vwPrinting ) Quit( RETURN_OK ); break; case 'n': vwMode = FALSE; FindNP( SR_FORWARD ); break; case 'p': vwMode = FALSE; FindNP( SR_BACKWARD ); break; case 'l': Inform( ClearStr ); DisplayText(); break; case 'b': if ( ! vwPrinting ) CloseDisplay(); break; case 's': SaveBlock( -1 ); break; default: break; } } else if ( code >= 0x50 && code <= 0x59 ) { JumpMark(( UWORD )( code - 0x50 )); break; } break; case PRIN1: case PRIN2: if ( code < 64 ) { switch( KeyTable[ code ] ) { case 'd': if ( ! vwPrinting ) { vwPMode = PRT_PAGE; PrintFile(); } break; case 'p': if ( ! vwPrinting ) { vwPMode = PRT_FILE; PrintFile(); } break; default: break; } } else if ( code >= 0x50 && code <= 0x59 ) { vwPMode = PRT_BLOCK; vwPMark = ( UWORD )( code - 0x50 ); PrintFile(); break; } break; case SHIF1: case SHIF2: case SHIF3: case SHIF4: case SHIF5: case SHIF6: case SHIF7: case SHIF8: if ( code < 64 ) { switch( SKeyTable[ code ] ) { case '<': Top(); break; case '>': Bottom(); break; case '%': Goto( GT_PERC ); break; case 'N': Goto( GT_LINE ); break; default: break; } } else if ( code >= 0x50 && code <= 0x59 ) { UnSetMark(( UWORD )( code - 0x50 )); break; } break; case LALT1: case LALT2: case LALT3: case LALT4: if ( code >= 0x50 && code <= 0x59 ) { SaveBlock(( WORD )( code - 0x50 )); break; } break; default: break; } } }