Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static meUShort
- tgetc(void)
- {
- meUShort cc ; /* fetched character */
- /* if we are playing a keyboard macro back, */
- if (kbdmode == mePLAY)
- {
- kbd_rep:
- /* if there is some left... */
- if(kbdoff < kbdlen)
- {
- cc = (meUShort) kbdptr[kbdoff++] ;
- if(cc == meCHAR_LEADER)
- {
- cc = kbdptr[kbdoff++] ;
- if(cc == meCHAR_TRAIL_SPECIAL)
- {
- meUByte dd ; /* fetched character */
- cc = ((meUShort) kbdptr[kbdoff++]) << 8 ;
- if(((dd = kbdptr[kbdoff++]) != meCHAR_LEADER) ||
- ((dd = kbdptr[kbdoff++]) != meCHAR_TRAIL_NULL))
- cc |= dd ;
- }
- else if(cc == meCHAR_TRAIL_NULL)
- cc = 0 ;
- else if(cc == meCHAR_TRAIL_LEADER)
- /* special '\?' key (e.g. OSD hot key) - ignore */
- goto kbd_rep ;
- }
- return cc ;
- }
- /* at the end of last repitition? */
- if (--kbdrep > 0)
- {
- /* reset the macro to the begining for the next rep */
- kbdoff = 0 ;
- goto kbd_rep ;
- }
- kbdmode = meSTOP;
- #if MEOPT_UNDO
- undoContFlag++ ;
- #endif
- /* force a screen update after all is done */
- update(meFALSE);
- }
- if(kbdmode == meRECORD)
- {
- #if MEOPT_MOUSE
- /* get and save a key */
- /* ignore mouse keys while recording a macro - get another */
- do {
- /* fetch a character from the terminal driver */
- cc = TTgetc();
- } while(((cc & (ME_SPECIAL|0x00ff)) >= (ME_SPECIAL|SKEY_mouse_drop_1)) &&
- ((cc & (ME_SPECIAL|0x00ff)) <= (ME_SPECIAL|SKEY_mouse_time_3))) ;
- #else
- cc = TTgetc();
- #endif
- /* Each 'key' could take 5 chars to store - if we haven't got room
- * stop so we don't overrun the buffer */
- if(kbdlen > meBUF_SIZE_MAX - 5)
- {
- kbdmode = meSTOP;
- TTbell();
- }
- else
- {
- meUByte dd ;
- /* must store 0xaabb as ff,2,aa,bb
- * also must store 0x00ff as ff,ff & 0x0000 as 0xff01
- * Also 0x??00 stored as ff,2,??,ff,01
- */
- if(cc > 0xff)
- {
- kbdptr[kbdlen++] = meCHAR_LEADER ;
- kbdptr[kbdlen++] = meCHAR_TRAIL_SPECIAL ;
- kbdptr[kbdlen++] = cc >> 8 ;
- }
- dd = (cc & 0xff) ;
- if(dd == meCHAR_LEADER)
- {
- kbdptr[kbdlen++] = meCHAR_LEADER ;
- kbdptr[kbdlen++] = meCHAR_TRAIL_LEADER ;
- }
- else if(dd == 0x0)
- {
- kbdptr[kbdlen++] = meCHAR_LEADER ;
- kbdptr[kbdlen++] = meCHAR_TRAIL_NULL ;
- }
- else
- kbdptr[kbdlen++] = dd ;
- }
- }
- else
- cc = TTgetc();
- /* and finally give the char back */
- return cc ;
- }
Add Comment
Please, Sign In to add comment