home *** CD-ROM | disk | FTP | other *** search
- /*-- AutoRev header do NOT edit!
- *
- * Program : event.c
- * Copyright : © 1991 Jaba Development
- * Author : Jan van den Baard
- * Creation Date : 21-Apr-91
- * Current version : 1.5
- * Translator : DICE v2.6
- *
- * REVISION HISTORY
- *
- * Date Version Comment
- * --------- ------- ------------------------------------------
- * 18-Sep-91 1.5 Removed SteadyRepeat() routine.
- * 17-Sep-91 1.5 See main.c!
- * 16-Sep-91 1.4 See main.c!
- * 23-Aug-91 1.3 See main.c!
- * 12-Aug-91 1.2 See main.c!
- * 03-Jul-91 1.1 See main.c!
- * 21-Apr-91 1.0 View keyboard event-handler + subs.
- *
- *-- 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.
- */
- extern APTR ConsoleDevice;
- extern ULONG VW_class;
- extern UWORD VW_qual, VW_code, VW_pmark;
- extern UWORD VW_mode, VW_pmode, VW_printing, VW_err;
- extern UBYTE ClearStr[];
- extern struct Screen *VW_scr;
- extern BOOL VW_found;
-
- /*
- * some external referenced function proto-types.
- */
- extern void Quit( long );
- extern void Inform( char *);
- extern void LineUp( void );
- extern void LineDown( void );
- extern void DisplayText( void );
- extern void Top( void );
- extern void Bottom( void );
- extern void PageUp( void );
- extern void PageDown( void );
- extern void LoadFile( long );
- extern void Help( void );
- extern void DoFound( void );
- extern void GetSomething( ULONG );
- extern void FindN( void );
- extern void FindP( void );
- extern void PrintFile( void );
- extern void InfoLine( void );
- extern void EditFile( void );
- extern void SetMark( UWORD );
- extern void UnSetMark( UWORD );
- extern void JumpMark( UWORD );
- extern void SaveBlock( WORD );
- extern void EditLine( void );
- extern void CloseDisplay( void );
-
- /*
- * some local proto-types.
- */
- void ConvertKeyTab( void );
- void HandleKeyboard( UWORD, UWORD );
- long HandleMsg( struct MsgPort * );
- void ClearMsg( struct MsgPort * );
-
- /*
- * Vanilla key-codes normal and shifted.
- */
- UBYTE KeyTable[64];
- UBYTE SKeyTable[64];
-
- /*
- * Setup a key-table for normal and shifted key codes so
- * View will work with all kinds of foreigh key-mappings.
- */
- void ConvertKeyTab()
- {
- struct InputEvent ievent;
- UWORD i;
-
- setmem(&ievent,sizeof(struct InputEvent),0);
-
- ievent.ie_Class = IECLASS_RAWKEY;
-
- for(i=0;i<64;i++) { /* build normal key-table */
- ievent.ie_Code = i;
- RawKeyConvert(&ievent,&KeyTable[i],1,NULL);
- }
-
- ievent.ie_Qualifier = LSHIFT;
-
- for(i=0;i<64;i++) { /* build shifted key-table */
- ievent.ie_Code = i;
- RawKeyConvert(&ievent,&SKeyTable[i],1,NULL);
- }
- }
-
- /*
- * Get and interpred a message from the port.
- * return TRUE if there was a message received
- * or FALSE if not.
- */
- long HandleMsg( struct MsgPort *port )
- {
- struct IntuiMessage *msg;
-
- if((msg = GT_GetIMsg(port))) { /* gotten a message! */
- VW_class = msg->Class;
- VW_code = msg->Code;
- VW_qual = msg->Qualifier;
- GT_ReplyIMsg(msg); /* gadtools is open so why not... */
- return TRUE;
- }
- return FALSE;
- }
-
- /*
- * Reply all pending messages on the msgport
- * without doing something with them.
- */
- void ClearMsg( struct MsgPort *port )
- {
- struct IntuiMessage *msg;
-
- Forbid(); /* don't race intuition. */
- while(msg = GT_GetIMsg(port)) GT_ReplyIMsg(msg);
- Permit();
- }
-
- extern struct AsciiText *VW_text;
-
- /*
- * Handle all incoming RAWKEY messages.
- */
- void HandleKeyboard( code, qualifier )
- UWORD code, qualifier;
- {
- if((code & IECODE_UP_PREFIX) != IECODE_UP_PREFIX) { /* only key-down */
- if(VW_err) InfoLine(); /* refresh info line if needed */
- switch(qualifier) {
-
- case NORM1:
- case NORM2:
- case NORM3:
- case NORM4: /* normal key without qualifier keys */
- if(code < 64) {
- switch(KeyTable[code]) { /* keymap keys */
-
- case 'h':
- Help();
- break;
- case 'q':
- if(!VW_printing) Quit( RETURN_OK );
- break;
- case '/':
- case 'f':
- VW_mode = TRUE;
- GetSomething(STRING_KIND);
- break;
- case '.':
- case 's':
- VW_mode = FALSE;
- GetSomething(STRING_KIND);
- break;
- case 'n':
- VW_mode = TRUE;
- FindN();
- break;
- case 'p':
- VW_mode = TRUE;
- FindP();
- break;
- case 'r':
- Inform(ClearStr);
- DisplayText();
- break;
- case 'e':
- EditFile();
- break;
- case 'l':
- if(!VW_printing) LoadFile(TRUE);
- break;
- case 'j':
- if ( VW_found )
- DoFound();
- break;
- case 'b':
- if(!VW_printing) {
- if(VW_text) FreeAscii(VW_text);
- VW_text = NULL;
- CloseDisplay();
- }
- break;
- default:
- break;
- }
- } else if(code >= 0x50 && code <= 0x59) { /* function keys */
- SetMark((UWORD)(code - 0x50));
- break;
- } else {
- switch(code) { /* RAW keys (the same on any Amiga..?) */
- case 0x40: /* Space bar */
- PageDown();
- break;
- case 0x41: /* BackSpace */
- PageUp();
- break;
- case 0x4d: /* Down arrow */
- case 0x44: /* Return */
- LineDown();
- break;
- case 0x4c: /* Up arrow */
- LineUp();
- break;
- case 0x5f: /* Help */
- Help();
- break;
- case 0x45: /* Esc */
- if(!VW_printing) Quit( RETURN_OK );
- break;
- default:
- break;
- }
- }
- break;
- case NUMP1:
- case NUMP2:
- case NUMP3:
- case NUMP4: /* Numeric key-pad */
- if(code < 64) { /* keymap keys */
- 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;
- default:
- break;
- }
- } else if(code == 0x43) { /* Enter */
- LineUp();
- break;
- }
- break;
- case CTRL1:
- case CTRL2:
- case CTRL3:
- case CTRL4: /* key with CTRL */
- if(code < 64) { /* keymap keys */
- switch(KeyTable[code]) {
-
- case 'c':
- if(!VW_printing) Quit( RETURN_OK );
- break;
- case 'n':
- VW_mode = FALSE;
- FindN();
- break;
- case 'p':
- VW_mode = FALSE;
- FindP();
- break;
- case 'l':
- Inform(ClearStr);
- DisplayText();
- break;
- case 'b':
- if(!VW_printing)
- CloseDisplay();
- break;
- case 's':
- SaveBlock(-1);
- break;
- default:
- break;
- }
- } else if(code >= 0x50 && code <= 0x59) { /* Function keys */
- JumpMark((UWORD)(code - 0x50));
- break;
- }
- break;
- case PRIN1:
- case PRIN2: /* LEFT_SHIFT + CONTROL + key */
- if(code < 64) { /* keymap keys */
- switch(KeyTable[code]) {
-
- case 'd':
- if(!VW_printing) {
- VW_pmode = PRT_PAGE;
- PrintFile();
- }
- break;
- case 'p':
- if(!VW_printing) {
- VW_pmode = PRT_FILE;
- PrintFile();
- }
- break;
- default:
- break;
- }
- } else if(code >= 0x50 && code <= 0x59) { /* Function keys */
- VW_pmode = PRT_BLOCK;
- VW_pmark = (UWORD)(code - 0x50);
- PrintFile();
- break;
- }
- break;
- case SHIF1:
- case SHIF2:
- case SHIF3:
- case SHIF4:
- case SHIF5:
- case SHIF6:
- case SHIF7:
- case SHIF8: /* SHIFT + key */
- if(code < 64) { /* keymap key */
- switch(SKeyTable[code]) {
-
- case '<':
- Top();
- break;
- case '>':
- Bottom();
- break;
- case '%':
- GetSomething(INTEGER_KIND);
- break;
- case 'E':
- EditLine();
- break;
- default:
- break;
- }
- } else if(code >= 0x50 && code <= 0x59) { /* Function keys */
- UnSetMark((UWORD)(code - 0x50));
- break;
- }
- case LALT1:
- case LALT2:
- case LALT3:
- case LALT4:
- if(code >= 0x50 && code <= 0x59) {
- SaveBlock((UWORD)(code - 0x50));
- break;
- }
- break;
-
- default:
- break;
- }
- }
- }
- }
-