mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-02-05 10:34:54 +00:00
d2edcad66e
Thanks to Phil Zimmermann for the code and for the license exception we needed to include it. There remains some build system integration work to be done before this code will build properly in the FreeSWITCH tree.
76 lines
1.4 KiB
C
76 lines
1.4 KiB
C
/*
|
|
* Copyright (c) 1993 Colin Plumb. All rights reserved.
|
|
* For licensing and other legal details, see the file legal.c.
|
|
*
|
|
* MS-DOS non-echoing keyboard routines.
|
|
*/
|
|
|
|
#include <conio.h> /* For getch() and kbhit() */
|
|
#include <signal.h> /* For raise() */
|
|
#ifdef _MSC_VER
|
|
#include <time.h> /* For clock() */
|
|
#else
|
|
#include <dos.h> /* For sleep() */
|
|
#endif
|
|
|
|
#include "kb.h"
|
|
#include "random.h" /* For randEvent() */
|
|
|
|
/* These are pretty boring */
|
|
void kbCbreak(void) { }
|
|
void kbNorm(void) { }
|
|
|
|
int kbGet(void)
|
|
{
|
|
int c;
|
|
|
|
c = getch();
|
|
if (c == 0)
|
|
c = 0x100 + getch();
|
|
|
|
/*
|
|
* Borland C's getch() uses int 0x21 function 0x7,
|
|
* which does not detect break. So we do it explicitly.
|
|
*/
|
|
if (c == 3)
|
|
raise(SIGINT);
|
|
|
|
randEvent(c);
|
|
|
|
return c;
|
|
}
|
|
|
|
#ifdef _MSC_VER
|
|
/*
|
|
* Microsoft Visual C 1.5 (at least) does not have sleep() in the
|
|
* library. So we use this crude approximation. ("crude" because,
|
|
* assuming CLOCKS_PER_SEC is 18.2, it rounds to 18 to avoid floating
|
|
* point math.)
|
|
*/
|
|
#ifndef CLOCKS_PER_SEC
|
|
#define CLOCKS_PER_SEC CLK_TCK
|
|
#endif
|
|
static unsigned
|
|
sleep(unsigned t)
|
|
{
|
|
clock_t target;
|
|
|
|
target = clock() + t * (unsigned)CLOCKS_PER_SEC;
|
|
while (clock() < target)
|
|
;
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
void kbFlush(int thorough)
|
|
{
|
|
do {
|
|
while(kbhit())
|
|
(void)getch();
|
|
if (!thorough)
|
|
break;
|
|
/* Extra thorough: wait for one second of quiet */
|
|
sleep(1);
|
|
} while (kbhit());
|
|
}
|