From 3fe24df1237a77549ba64c6331383a9a40aed1de Mon Sep 17 00:00:00 2001 From: emkael Date: Sat, 25 Nov 2017 16:15:54 +0100 Subject: Initial BigDeal sources --- mingw.c | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 mingw.c (limited to 'mingw.c') diff --git a/mingw.c b/mingw.c new file mode 100644 index 0000000..dbea580 --- /dev/null +++ b/mingw.c @@ -0,0 +1,171 @@ + +static char rcsid[] = "$Header: /home/sater/bridge/bigdeal/RCS/dos.c,v 1.9 2000/08/26 14:15:22 sater Exp $"; + +#include +#include +#include +#include +#include +#include "types.h" +#include "bigdeal.h" +#include "collect.h" + +extern FILE *flog; + +static int highfreqclock; +static LARGE_INTEGER frequency, epoch; + +void +os_start() +{ + + /* + * Start the clock running + */ + if (QueryPerformanceFrequency(&frequency) == 0) { + highfreqclock = 0; + } else { + highfreqclock = 1; + QueryPerformanceCounter(&epoch); + if (flog) + fprintf(flog, "Clock frequency %I64d, epoch %I64d\n", + frequency.QuadPart, epoch.QuadPart); + } +} + +void +os_finish() +{ + +} + +int bestclock() +{ + LARGE_INTEGER t; + + if (highfreqclock) { + QueryPerformanceCounter(&t); + /* compute the elapsed time in ticks */ + return (t.QuadPart - epoch.QuadPart); + } +#ifdef UCLOCKS_PER_SEC + return (int) uclock(); +#else +#ifdef CLOCKS_PER_SEC + return (int) clock(); +#else +There is no clock, this program needs it, so do not compile +#endif +#endif +} + +#define MAX_INTERVAL_ENTROPY 6 + +int +getchtm(int *nbits) +/* + * Read one character from standard input + * Time the wait, and use bits for random + * MUST be in cbreak mode for this to work + */ +{ + int t1, t2; + int tdiff; + int c; + int shift; + int b; + + /* + * First get the best clock we have + */ + t1 = bestclock(); + /* + * Now get one character + */ + c = getch(); + /* + * If it is zero, which can happen with getch() under DOS + * we have a two character sequence(function key probably) + * and we make one character out of it by appending the next + */ + if (c == 0) + c = getch() + 256; + /* + * and get the clock after the keypress + */ + t2 = bestclock(); + /* + * Number of ticks we waited goes to tdiff + */ + tdiff = t2 - t1; + /* + * Now we are going to believe half the bits we get + */ + for (shift = tdiff, b = 0; shift>2 ; shift >>= 2, b++) + ; + if (b < MAX_INTERVAL_ENTROPY) + *nbits = b; + else + *nbits = MAX_INTERVAL_ENTROPY; + /* + * We send all the bits to the collect pool + * but do not count the bits yet (parameter 0) + * because higher layers might decide not to believe this + * character, and its associated timing + */ + collect_more((byte *) &t1, sizeof(t1), 0); + collect_more((byte *) &t2, sizeof(t2), 0); + + if (flog) + fprintf(flog, "Collected character %d, timediff %d, timebits %d\n", + c, tdiff, b); + return c; +} + +void +os_collect() { + int pid; + FILETIME systime; + + collect_more((byte *) &frequency, sizeof(frequency), 0); + collect_more((byte *) &epoch, sizeof(epoch), 8); + pid = getpid(); + collect_more((byte *) &pid, sizeof(pid), 3); +} + +void +cbreak() +{ + +} + +void +cooked() +{ + +} + +int +legal_filename_prefix(char *s) +/* + * Legal prefix to make legal name when three letter suffix added + */ +{ + + if (*s == 0) /* Too short */ + return 0; + if (strlen(s) > 50) + return 0; + while (*s) { + if (!isalnum(*s) && *s != '-' && *s != '_') + return 0; + s++; + } + return 1; +} + +char *os_init_file_name() +{ + + return "bigdeal.ini"; +} -- cgit v1.2.3