home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d1xx / d150 / dc10.lha / DC10 / KBD.bas (.txt) < prev    next >
AmigaBASIC Source Code  |  1987-06-15  |  2KB  |  61 lines

  1. REM  KBD_READMATRIX.BAS     (annex to DC10 V 0.1f)
  2. REM  Because 'exec.library' is used from Basic, the file
  3. REM  'exec.bmap' must be available in the 'Libs' directory
  4. REM  Run it, click left mouse button outside any window and
  5. REM  press any key combination
  6. REM  From : Jan Arkesteijn and Paul de Vries  (1 feb 1988)
  7.  
  8. DECLARE FUNCTION AllocMem& LIBRARY
  9. DECLARE FUNCTION DoIO% LIBRARY
  10. DECLARE FUNCTION OpenDevice% LIBRARY
  11. DECLARE FUNCTION AllocSignal% LIBRARY
  12. DECLARE FUNCTION FindTask& LIBRARY
  13.  
  14. LIBRARY "exec.library"
  15.  
  16. mem.opt&=2^0+2^16
  17. keyport&=AllocMem&(33,mem.opt&)
  18. IF keyport&=0 THEN PRINT"ALLOC_MEM_TROUBLE_1"
  19. key.sigBit%=AllocSignal%(-1)
  20. IF key.sigBit%=-1 THEN PRINT"NO_SIGBIT_FREE"
  21. key.sigTask&=FindTask&(0)
  22. portname$="kbdPort"+CHR$(0)
  23.  
  24. POKE  keyport&+ 8, 4          :REM  type=Message Port
  25. POKE  keyport&+ 9, 0
  26. POKEL keyport&+10, SADD(portname$)
  27. POKE  keyport&+14, 0
  28. POKE  keyport&+15, key.sigBit%
  29. POKEL keyport&+16, key.sigTask&
  30. POKEL keyport&+20, keyport&+24
  31. POKEL keyport&+28, keyport&+20
  32.  
  33. CALL AddPort(keyport&)
  34.  
  35. keyreq&=AllocMem&(48,mem.opt&)
  36. IF keyreq&=0 THEN PRINT"ALLOC_MEM_TROUBLE_2"
  37. keymap&=AllocMem&(13,mem.opt&)
  38. IF keymap&=0 THEN PRINT"ALLOC_MEM_TROUBLE_3"
  39.  
  40. POKE  keyreq&+ 8, 5           :REM  type=Message
  41. POKE  keyreq&+ 9, 0
  42. POKEL keyreq&+14, keyport&
  43. POKEW keyreq&+28, 10          :REM  I/O command KBD_READMATRIX
  44. POKE  keyreq&+30, 1
  45. POKEL keyreq&+36, 13          :REM  io_Length, NOT 16 !!!!!!!!
  46. POKEL keyreq&+40, keymap&
  47.  
  48. dev$="keyboard.device"+CHR$(0)
  49. fout%=OpenDevice%(SADD(dev$),0,keyreq&,0)
  50. IF fout%<>0 THEN PRINT"OPEN_DEVICE_TROUBLE"
  51.  
  52. kbd.rm:
  53.   result%=DoIO%(keyreq&)
  54.   IF result%<>0 THEN PRINT"DoIO_TROUBLE";
  55.   FOR x=0 TO 12
  56.      PRINT USING"####";PEEK (keymap&+x);
  57.   NEXT
  58.   PRINT  
  59.   GOTO kbd.rm
  60.   
  61.