home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
001-099
/
ff005.lzh
/
keyboard
/
keyboard.c
< prev
Wrap
C/C++ Source or Header
|
1986-01-11
|
4KB
|
127 lines
/*
*
* DISCLAIMER:
*
* This program is provided as a service to the programmer
* community to demonstrate one or more features of the Amiga
* personal computer. These code samples may be freely used
* for commercial or noncommercial purposes.
*
* Commodore Electronics, Ltd ("Commodore") makes no
* warranties, either expressed or implied, with respect
* to the program described herein, its quality, performance,
* merchantability, or fitness for any particular purpose.
* This program is provided "as is" and the entire risk
* as to its quality and performance is with the user.
* Should the program prove defective following its
* purchase, the user (and not the creator of the program,
* Commodore, their distributors or their retailers)
* assumes the entire cost of all necessary damages. In
* no event will Commodore be liable for direct, indirect,
* incidental or consequential damages resulting from any
* defect in the program even if it has been advised of the
* possibility of such damages. Some laws do not allow
* the exclusion or limitation of implied warranties or
* liabilities for incidental or consequential damages,
* so the above limitation or exclusion may not apply.
*
*/
/* keyboard.c */
/* sample program to demonstrate direct communications with the keyboard,
* won't work unless input device is disabled, so that keyboard can
* be accessed individually. (It will compile and it will run, but
* this program will get some of the keyboard's inputs, and the input
* device will steal the rest... no guarantee that F1 Key can break it out.
*
* To try the program, if run under the AmigaDOS CLI, strike any key, then
* hit return. (You won't see any responses until each return key... DOS
* is sitting on the input stream with its input editor as well as the
* input device.) By rapidly hitting F1 then Return several times,
* eventually you can generate a hex 50 that exits the program. This
* program is provided for those who are taking over the machine. It
* is not intended as a general purpose keyboard interface under DOS.
*
* Demo is more effective if you make the CLI window smaller, then
* click the select button in the (Workbench) space below the CLI
* window. Then no console will be receiving the keystrokes and
* more of them will be reported to the startup CLI window. Most
* users will leave the keyboard device attached to the input device
* and install a handler in the input stream instead of doing it
* this way.
*
* Author: Rob Peck, 12/1/85
*
* This code may be freely utilized in the creation of programs for the Amiga.
*/
#include <exec/types.h>
#include <exec/io.h>
#include <exec/devices.h>
#include <devices/keyboard.h>
#include <devices/inputevent.h>
#define F1KEY 0x50
extern struct MsgPort *CreatePort();
extern struct IOStdReq *CreateStdIO();
SHORT error;
struct IOStdReq *keyreq;
struct MsgPort *keyport;
struct InputEvent *keydata; /* pointer into the returned data area
where an input event has been sent */
BYTE keybuffer[sizeof( struct InputEvent )];
main()
{
keyport = CreatePort(0,0);
if(keyport == 0) { printf("\nError during CreatePort");
exit(-1);
}
keyreq = CreateStdIO(keyport);
/* make an io request block for
* communicating with the keyboard */
if(keyreq == 0) { printf("\nError during CreateStdIO");
DeletePort(keyport);
exit(-2);
}
error = OpenDevice("keyboard.device",0,keyreq,0);
/* open the device for access */
if (error != 0) { printf("\nCan't open keyboard!");
ReturnMemoryToSystem();
exit(-100);
}
keyreq->io_Length = sizeof(struct InputEvent);
/* read one event each time we go back to the keyboard */
keyreq->io_Data = (APTR)keybuffer;
/* show where to put the data when read */
keydata = (struct InputEvent *)keybuffer;
keyreq->io_Command = KBD_READEVENT; /* get an event!! */
for(;;) /* FOREVER */
{
printf("\n Ready to retrieve another key\n");
DoIO( keyreq );
if(keydata->ie_Code == F1KEY) break;
printf("\n Raw key found this time was %lx",keydata->ie_Code);
}
printf("\nFINALLY found an F1 key!!! Exiting...");
ReturnMemoryToSystem(); /* can't get here because of FOREVER,
* but if user provides an exit..... */
}
ReturnMemoryToSystem()
{
DeleteStdIO(keyreq);
DeletePort(keyport);
return(0);
}