#define OWNER 1
#include        "metab.h"

FILE * kbdmf;
int kbdmstate;

getstroke()
{       /* get physical key from current source. */
       register int    c;

       if ( kbdmstate == 2 )
       {       /* execute "keyboard mac" or "exec file" */
               if (( c = getc( kbdmf )) == EOF || c == 26 )
               {       kbdmclose();
               }
       }
       if ( kbdmstate != 2 )
       {       c = conin();
               if ( kbdmstate == 1 )
               {       /* save keyboard mac */
                       if ( putc( c, kbdmf ) == EOF )
                       {       ctrlg();
                       }
               }
       }
       return ( c );
}
/*
kbdmget()
{       return( getc( kbdmf ));
}
*/
kbdmclose()
{       if ( kbdmf ) fclose( kbdmf );
       kbdmf = kbdmstate = 0;
}
conin()
{       return( bios( 3 ));
}

getkey()
{
       register int c;

       if ( ( c = getstroke()) == METACH )     /* Apply M- prefix */
       {       return (META | getstroke());
       }
#ifdef NEVER
       if ( c == CMINUSCH ) return ( c );
               /* negative parameter introducer. */
       if ( c <= 0x1F )                        /* C0 control -> C-     */
               c |= ( CTRL | '@' );
#endif
       return (c);
}

#ifdef NEVER
/*
* Get a key.
* Apply control modifications
* to the read key.
*/
getctl()
{
       register int    c;

       if ( ( c = getstroke()) <= 0x1f )
               c |= ( CTRL | '@' );
       if ( islower( c ))
               c -= 0x20;
       return (c);
}
#endif
/*
* Abort.
* Beep the beeper.
* Kill off any keyboard macro,
* etc., that is in progress.
* Sometimes called as a routine,
* to do general aborting of
* stuff.
*/

ctrlg()
{
       conout( 7 );
       kbdmclose();
       return (ABORT);
}