summaryrefslogtreecommitdiff
path: root/com32/sysdump/ctime.c
diff options
context:
space:
mode:
Diffstat (limited to 'com32/sysdump/ctime.c')
-rw-r--r--com32/sysdump/ctime.c77
1 files changed, 0 insertions, 77 deletions
diff --git a/com32/sysdump/ctime.c b/com32/sysdump/ctime.c
deleted file mode 100644
index 56c8efb6..00000000
--- a/com32/sysdump/ctime.c
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <com32.h>
-#include <string.h>
-#include "ctime.h"
-
-static uint8_t frombcd(uint8_t v)
-{
- uint8_t a = v & 0x0f;
- uint8_t b = v >> 4;
-
- return a + b*10;
-}
-
-uint32_t posix_time(void)
-{
- /* Days from March 1 for a specific month, starting in March */
- static const unsigned int yday[12] =
- { 0, 31, 61, 92, 122, 153, 184, 214, 245, 275, 306, 337 };
- com32sys_t ir, d0, d1, t0;
- unsigned int c, y, mo, d, h, m, s;
- uint32_t t;
-
- memset(&ir, 0, sizeof ir);
-
- ir.eax.b[1] = 0x04;
- __intcall(0x1A, &ir, &d0);
-
- ir.eax.b[1] = 0x02;
- __intcall(0x1A, &ir, &t0);
-
- ir.eax.b[1] = 0x04;
- __intcall(0x1A, &ir, &d1);
-
- if (t0.ecx.b[1] < 0x12)
- d0 = d1;
-
- c = frombcd(d0.ecx.b[1]);
- y = frombcd(d0.ecx.b[0]);
- mo = frombcd(d0.edx.b[1]);
- d = frombcd(d0.edx.b[0]);
-
- h = frombcd(t0.ecx.b[1]);
- m = frombcd(t0.ecx.b[0]);
- s = frombcd(t0.edx.b[1]);
-
- /* We of course have no idea about the timezone, so ignore it */
-
- /*
- * Look for impossible dates... this code was written in 2010, so
- * assume any century less than 20 is just broken.
- */
- if (c < 20)
- c = 20;
- y += c*100;
-
- /* Consider Jan and Feb as the last months of the previous year */
- if (mo < 3) {
- y--;
- mo += 12;
- }
-
- /*
- * Just in case: if the month is nonsense, don't read off the end
- * of the table...
- */
- if (mo-3 > 11)
- return 0;
-
- t = y*365 + y/4 - y/100 + y/400 + yday[mo-3] + d - 719469;
- t *= 24;
- t += h;
- t *= 60;
- t += m;
- t *= 60;
- t += s;
-
- return t;
-}