;/* maprawkey.c - Execute me to compile me with SAS C 5.10 LC -b1 -cfistq -v -y -j73 maprawkey.c Blink FROM LIB:c.o,maprawkey.o TO maprawkey LIBRARY LIB:LC.lib,LIB:Amiga.lib quit * maprawkey.c - Map Intuition RAWKEY events to ANSI with MapRawKey(); */ #include <exec/types.h> #include <exec/memory.h> #include <dos/dos.h> #include <intuition/intuition.h> #include <devices/inputevent.h> #include <clib/exec_protos.h> #include <clib/dos_protos.h> #include <clib/keymap_protos.h> #include <clib/intuition_protos.h> #include <stdio.h> #include <stdlib.h> #ifdef LATTICE int CXBRK(void) { return(0); } /* Disable Lattice CTRL/C handling */ void chkabort(void) { return; } /* really */ #endif /* our function prototypes */ void openall(void); void closeall(void); void closeout(UBYTE *errstring, LONG rc); struct Library *IntuitionBase = NULL; struct Library *KeymapBase = NULL; struct Window *window = NULL; void main(int argc, char **argv) { struct IntuiMessage *imsg; APTR *eventptr; struct InputEvent inputevent = {0}; LONG windowsignal; UBYTE buffer[8]; COUNT i; BOOL Done = FALSE; openall(); window = OpenWindowTags(NULL, WA_Width, 500, WA_Height, 60, WA_Title, "MapRawKey - Press Keys", WA_Flags, WFLG_CLOSEGADGET | WFLG_ACTIVATE, WA_IDCMP, IDCMP_RAWKEY | IDCMP_CLOSEWINDOW, TAG_DONE); if(window == NULL) closeout("Can't open window",RETURN_FAIL); windowsignal = 1L << window->UserPort->mp_SigBit; /* Initialize InputEvent structure (already cleared to 0) */ inputevent.ie_Class = IECLASS_RAWKEY; while(!Done) { Wait(windowsignal); while (imsg = (struct IntuiMessage *)GetMsg(window->UserPort)) { switch(imsg->Class) { case IDCMP_CLOSEWINDOW: Done = TRUE; break; case IDCMP_RAWKEY: inputevent.ie_Code = imsg->Code; inputevent.ie_Qualifier = imsg->Qualifier; printf("RAWKEY: Code=$%04x Qualifier=$%04lx\n", imsg->Code, imsg->Qualifier); /* Make sure deadkeys and qualifiers are taken * into account. */ eventptr = imsg->IAddress; inputevent.ie_EventAddress = *eventptr; /* Map RAWKEY to ANSI */ i = MapRawKey(&inputevent, buffer, 8, NULL); if (i == -1) Write(Output(),"*Overflow*",10); else if (i) { /* This key or key combination mapped to something */ printf("MAPS TO: "); Write(Output(),buffer,i); printf("\n"); } break; } ReplyMsg((struct Message *)imsg); } } CloseWindow(window); closeall(); exit(RETURN_OK); } void openall(void) { KeymapBase = OpenLibrary("keymap.library", 37); if (KeymapBase == NULL) closeout("Kickstart 2.0 required",RETURN_FAIL); IntuitionBase = OpenLibrary("intuition.library", 37); if (IntuitionBase == NULL) closeout("Can't open intuition",RETURN_FAIL); } void closeall(void) { if (IntuitionBase) CloseLibrary(IntuitionBase); if (KeymapBase) CloseLibrary(KeymapBase); } void closeout(UBYTE *errstring, LONG rc) { if (*errstring) printf("%s\n",errstring); closeall(); exit(rc); }