Annotation of 43BSDTahoe/new/jove/getch.c, revision 1.1.1.1

1.1       root        1: /***************************************************************************
                      2:  * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne.  JOVE *
                      3:  * is provided to you without charge, and with no warranty.  You may give  *
                      4:  * away copies of JOVE, including sources, provided that this notice is    *
                      5:  * included in all the files.                                              *
                      6:  ***************************************************************************/
                      7: 
                      8: #include "tune.h"
                      9: 
                     10: #ifdef MSDOS
                     11: 
                     12: #include <bios.h>
                     13: #include <dos.h>
                     14: 
                     15: #include "jove.h"
                     16: 
                     17: #ifdef LINT_ARGS
                     18: private void waitfun(void);
                     19: #else
                     20: private void waitfun();
                     21: #endif
                     22: 
                     23: extern int UpdModLine;
                     24: #ifdef IBMPC
                     25: static char last = 0;
                     26: extern int specialkey;
                     27: #endif
                     28: 
                     29: getrawinchar()
                     30: {
                     31: #ifdef RAINBOW
                     32:        union REGS regs;
                     33: #endif /* RAINBOW */
                     34: #ifdef IBMPC
                     35:        unsigned scan;
                     36:        
                     37:        if (specialkey = last) {
                     38:                scan = last;
                     39:                last = 0;
                     40:                return scan;
                     41:        }
                     42: #endif /* IBMPC */
                     43: 
                     44:        while (!rawkey_ready())
                     45:                waitfun();
                     46: 
                     47: #ifdef IBMPC
                     48:        scan = _bios_keybrd(_KEYBRD_READ);
                     49:        if ((scan&0xff) == 0) {
                     50:                last = (char) (scan >> 8);
                     51:                return 0xff;
                     52:        }
                     53:        return scan&0xff;
                     54: #else /* IBMPC */
                     55: #ifdef RAINBOW
                     56: waitloop:
                     57:        regs.x.di = 2;
                     58:        int86(0x18, &regs, &regs);
                     59:        if (regs.h.al != 0)     /* should never happen, but who knows */
                     60:                return regs.h.al;
                     61:        else
                     62:                goto waitloop;
                     63: #else /* RAINBOW */
                     64:        return bdos(0x06, 0x00ff, 0xff) & 0xff;
                     65: #endif /* RAINBOW */
                     66: #endif /* IBMPC */
                     67: }
                     68: 
                     69: static int waiting = 0;
                     70: 
                     71: rawkey_ready()
                     72: {
                     73: #ifndef IBMPC
                     74:        union REGS regs;
                     75: #endif
                     76: 
                     77:        if (waiting)
                     78:                return 0;
                     79: #ifdef IBMPC
                     80:        if (last) 
                     81:                return 1;
                     82: 
                     83:        return _bios_keybrd(_KEYBRD_READY);
                     84: #else /* IBMPC */
                     85: #ifdef RAINBOW
                     86:        regs.x.di = 4;
                     87:        int86(0x18, &regs, &regs);
                     88:        return regs.h.cl != 0;
                     89: #else /* RAINBOW */
                     90:        regs.h.ah = 0x44;               /* ioctl call */
                     91:        regs.x.bx = 0;                  /* stdin file handle */
                     92:        regs.h.al = 0x06;               /* get input status */
                     93:        intdos(&regs, &regs);
                     94:        return regs.h.al & 1;
                     95: #endif /* RAINBOW */
                     96: #endif /* IBMPC */
                     97: }
                     98: 
                     99: #ifdef IBMPC
                    100: static long timecount, lastcount = 0;
                    101: #else
                    102: static char lastmin = 0;
                    103: #endif
                    104: 
                    105: 
                    106: private void
                    107: waitfun()
                    108: {
                    109: #ifndef IBMPC
                    110:        struct dostime_t tc;
                    111: #endif
                    112: 
                    113:        if (UpdModLine) {
                    114:                waiting = 1;
                    115:                redisplay();
                    116:                waiting = 0;
                    117:                return;
                    118:        }
                    119: #ifdef IBMPC
                    120:        if (_bios_timeofday(_TIME_GETCLOCK, &timecount) ||  /* after midnight */
                    121:             (timecount > lastcount + 0x444) ) {
                    122:                lastcount = timecount;
                    123:                UpdModLine = 1;
                    124:        }
                    125: #else
                    126:        _dos_gettime(&tc);
                    127:        if (tc.minute != lastmin) {
                    128:                UpdModLine = 1;
                    129:                lastmin = tc.minute;
                    130:        }
                    131: #endif
                    132: }
                    133: 
                    134: #endif /* MSDOS */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.