Release 0.4.10
[wine] / misc / dos.c
1 static char RCSId[] = "$Id$";
2 static char Copyright[] = "Copyright  Robert J. Amstadt, 1993";
3
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <time.h>
7 #include "prototypes.h"
8 #include "regfunc.h"
9
10 static void
11 GetTimeDate(int time_flag)
12 {
13     struct tm *now;
14     time_t ltime;
15     
16     ltime = time(NULL);
17     now = localtime(&ltime);
18     if (time_flag)
19     {
20         _CX = (now->tm_hour << 8) | now->tm_min;
21         _DX = now->tm_sec << 8;
22     }
23     else
24     {
25         _CX = now->tm_year + 1900;
26         _DX = ((now->tm_mon + 1) << 8) | now->tm_mday;
27         _AX &= 0xff00;
28         _AX |= now->tm_wday;
29     }
30 #ifdef DEBUG_DOS
31     printf("GetTimeDate: AX = %04x, CX = %04x, DX = %04x\n", _AX, _CX, _DX);
32 #endif
33     
34     ReturnFromRegisterFunc();
35     /* Function does not return */
36 }
37
38 /**********************************************************************
39  *                                      KERNEL_DOS3Call
40  */
41 int
42 KERNEL_DOS3Call()
43 {
44     switch ((_AX >> 8) & 0xff)
45     {
46       case 0x30:
47         _AX = 0x0303;
48         ReturnFromRegisterFunc();
49         /* Function does not return */
50         
51       case 0x25:
52       case 0x35:
53         return 0;
54
55       case 0x2a:
56         GetTimeDate(0);
57         /* Function does not return */
58         
59       case 0x2c:
60         GetTimeDate(1);
61         /* Function does not return */
62
63       case 0x4c:
64         exit(_AX & 0xff);
65
66       default:
67         fprintf(stderr, "DOS: AX %04x, BX %04x, CX %04x, DX %04x\n",
68                 _AX, _BX, _CX, _DX);
69         fprintf(stderr, "     SP %04x, BP %04x, SI %04x, DI %04x\n",
70                 _SP, _BP, _SI, _DI);
71         fprintf(stderr, "     DS %04x, ES %04x\n",
72                 _DS, _ES);
73     }
74     
75     return 0;
76 }