#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); }  .