[NTVDM]
[reactos.git] / subsystems / ntvdm / dos / dem.c
1 /*
2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
4 * FILE: dem.c
5 * PURPOSE: DOS 32-bit Emulation Support Library -
6 * This library is used by the built-in NTVDM DOS32 and by
7 * the NT 16-bit DOS in Windows (via BOPs). It also exposes
8 * exported functions that can be used by VDDs.
9 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
10 * Hermes Belusca-Maito (hermes.belusca@sfr.fr)
11 */
12
13 /* INCLUDES *******************************************************************/
14
15 #define NDEBUG
16
17 #include "dem.h"
18
19 /* Extra PSDK/NDK Headers */
20 #include <ndk/obtypes.h>
21
22 /**/extern BYTE CurrentDrive;/**/
23
24 /* PUBLIC FUNCTIONS ***********************************************************/
25
26 BOOLEAN DosInitialize(IN LPCSTR DosKernelFileNames)
27 {
28 if (DosKernelFileNames)
29 {
30 DisplayMessage(L"NTVDM: Loading DOS kernel from external files is currently unsupported");
31 return FALSE;
32 }
33 else
34 {
35 BOOLEAN Result;
36
37 Result = DosBIOSInitialize();
38 Result &= DosKRNLInitialize();
39
40 return Result;
41 }
42 }
43
44 /* PUBLIC EXPORTED APIS *******************************************************/
45
46 // demLFNCleanup
47 // demLFNGetCurrentDirectory
48
49 // demGetFileTimeByHandle_WOW
50 // demWOWLFNAllocateSearchHandle
51 // demWOWLFNCloseSearchHandle
52 // demWOWLFNEntry
53 // demWOWLFNGetSearchHandle
54 // demWOWLFNInit
55
56 DWORD
57 WINAPI
58 demClientErrorEx(IN HANDLE FileHandle,
59 IN CHAR Unknown,
60 IN BOOL Flag)
61 {
62 UNIMPLEMENTED;
63 return GetLastError();
64 }
65
66 DWORD
67 WINAPI
68 demFileDelete(IN LPCSTR FileName)
69 {
70 if (DeleteFileA(FileName)) SetLastError(ERROR_SUCCESS);
71
72 return GetLastError();
73 }
74
75 DWORD
76 WINAPI
77 demFileFindFirst(OUT PVOID lpFindFileData,
78 IN LPCSTR FileName,
79 IN WORD AttribMask)
80 {
81 BOOLEAN Success = TRUE;
82 WIN32_FIND_DATAA FindData;
83 PDOS_FIND_FILE_BLOCK FindFileBlock = (PDOS_FIND_FILE_BLOCK)lpFindFileData;
84
85 /* Fill the block */
86 FindFileBlock->DriveLetter = CurrentDrive + 'A';
87 FindFileBlock->AttribMask = AttribMask;
88 FindFileBlock->SearchHandle = FindFirstFileA(FileName, &FindData);
89 if (FindFileBlock->SearchHandle == INVALID_HANDLE_VALUE) return GetLastError();
90
91 do
92 {
93 /* Check the attributes */
94 if (!((FindData.dwFileAttributes & (FILE_ATTRIBUTE_HIDDEN |
95 FILE_ATTRIBUTE_SYSTEM |
96 FILE_ATTRIBUTE_DIRECTORY))
97 & ~AttribMask))
98 {
99 break;
100 }
101 }
102 while ((Success = FindNextFileA(FindFileBlock->SearchHandle, &FindData)));
103
104 if (!Success) return GetLastError();
105
106 FindFileBlock->Attributes = LOBYTE(FindData.dwFileAttributes);
107 FileTimeToDosDateTime(&FindData.ftLastWriteTime,
108 &FindFileBlock->FileDate,
109 &FindFileBlock->FileTime);
110 FindFileBlock->FileSize = FindData.nFileSizeHigh ? 0xFFFFFFFF
111 : FindData.nFileSizeLow;
112 strcpy(FindFileBlock->FileName, FindData.cAlternateFileName);
113
114 return ERROR_SUCCESS;
115 }
116
117 DWORD
118 WINAPI
119 demFileFindNext(OUT PVOID lpFindFileData)
120 {
121 WIN32_FIND_DATAA FindData;
122 PDOS_FIND_FILE_BLOCK FindFileBlock = (PDOS_FIND_FILE_BLOCK)lpFindFileData;
123
124 do
125 {
126 if (!FindNextFileA(FindFileBlock->SearchHandle, &FindData))
127 return GetLastError();
128
129 /* Update the block */
130 FindFileBlock->Attributes = LOBYTE(FindData.dwFileAttributes);
131 FileTimeToDosDateTime(&FindData.ftLastWriteTime,
132 &FindFileBlock->FileDate,
133 &FindFileBlock->FileTime);
134 FindFileBlock->FileSize = FindData.nFileSizeHigh ? 0xFFFFFFFF
135 : FindData.nFileSizeLow;
136 strcpy(FindFileBlock->FileName, FindData.cAlternateFileName);
137 }
138 while((FindData.dwFileAttributes & (FILE_ATTRIBUTE_HIDDEN |
139 FILE_ATTRIBUTE_SYSTEM |
140 FILE_ATTRIBUTE_DIRECTORY))
141 & ~FindFileBlock->AttribMask);
142
143 return ERROR_SUCCESS;
144 }
145
146 UCHAR
147 WINAPI
148 demGetPhysicalDriveType(IN UCHAR DriveNumber)
149 {
150 UNIMPLEMENTED;
151 return DOSDEVICE_DRIVE_UNKNOWN;
152 }
153
154 BOOL
155 WINAPI
156 demIsShortPathName(IN LPCSTR Path,
157 IN BOOL Unknown)
158 {
159 UNIMPLEMENTED;
160 return FALSE;
161 }
162
163 DWORD
164 WINAPI
165 demSetCurrentDirectoryGetDrive(IN LPCSTR CurrentDirectory,
166 OUT PUCHAR DriveNumber)
167 {
168 UNIMPLEMENTED;
169 return ERROR_SUCCESS;
170 }
171
172 /* EOF */