

	include	"baselibs.i"
	include	"baselibs1.i"
	include	"baseio.i"
	include	"baseexec.i"
	include	"exec/nodes.i
	include	"exec/libraries.i"
	include "exec/io.i"
	include "exec/ports.i"
	include "exec/memory.i"
	include "devices/inputevent.i"
	include "devices/keyboard.i"

	#define	NULL,0
	#define	LF,10

	main()

	CPTR	keyRequest	;IOStdReq
	CPTR	keyPort;
	CPTR	keyEvent;
	int	error
      	int      loop;

	{
    	func	keyPort,=,CreatePort,NULL,NULL
	if	keyPort,==,0,1
    	  {
	  printf	<" no create port",LF>
	  exit	0
	  }
		ifend	1
        func	keyRequest,=,CreateExtIO,keyPort,IOSTD_SIZE;
	  if 	keyRequest,==,0,2
	        {
		printf	<"no create keyRequest",LF>;
		deleteport	keyPort;
		exit	0;
		}
		ifend	2; 	

        func	error,=,OpenDevice,"keyboard.device",NULL,keyRequest,NULL;
	   if	error,!=,0,3
            	{
		printf	<"no open device",LF>;
		deleteExtIO	keyRequest;
		deleteport	keyPort;
		exit	0;
		}
		ifend	3;

         func	keyEvent,=,AllocMem,ie_SIZEOF,PUBLIC|CLEAR;
           if	keyEvent,==,0,4
		{
		printf	<"no memory for keyEvent",LF>
		closedevice	keyRequest
		deleteExtIO	keyRequest
		deleteport	keyPort
		exit	0
		}
		ifend	4;

		calc	loop,=,0;
                    while	loop,!=,4,5
                    {
                     structput   keyRequest,->,IO_COMMAND,=,KBD_READEVENT;
                     structput   keyRequest,->,IO_DATA,=,keyEvent;

                        ;*
                         ; We want 1 event, so we just set the
                         ; length field to the size, in bytes
                         ; of the event.  For multiple events,
                         ; set this to a multiple of that size.
                         ; The keyboard device NEVER fills partial
                         ; events...
                         ;/
                      structput	  keyRequest,->,IO_LENGTH,=,ie_SIZEOF;
                        DoIO	keyRequest

                           ;* Check for CLI startup... ;/
                        if Argc,!=,0,6
				{
				ROUTINE	Display_Event,keyEvent;
				}
				ifend	6
			calc	loop,++
                    }	5
              FreeMem	keyEvent,ie_SIZEOF;
                
              CloseDevice	keyRequest;
            
              DeleteExtIO	keyRequest;
        
              DeletePort	keyPort;
    }


	VOID Display_Event,keyEvent
	CPTR	keyEvent
	short	code,qualifier
	{
	structput	code,=,keyEvent,->,ie_Code;
	structput	qualifier,=,keyEvent,->,ie_Qualifier;
    	printf	<"Got key event: KeyCode: %2lx  Quailifiers: %4lx",LF>,code,qualifier;
        
	}
	end