[NTVDM]
[reactos.git] / subsystems / ntvdm / dos.h
1 /*
2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
4 * FILE: dos.h
5 * PURPOSE: VDM DOS Kernel (header file)
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
7 */
8
9 #ifndef _DOS_H_
10 #define _DOS_H_
11
12 /* INCLUDES *******************************************************************/
13
14 #include "ntvdm.h"
15
16 /* DEFINES ********************************************************************/
17
18 #define DOS_VERSION MAKEWORD(6, 0)
19 #define DOS_CONFIG_PATH L"%SystemRoot%\\system32\\CONFIG.NT"
20 #define DOS_COMMAND_INTERPRETER L"%SystemRoot%\\system32\\COMMAND.COM /k %SystemRoot%\\system32\\AUTOEXEC.NT"
21 #define FIRST_MCB_SEGMENT 0x1000
22 #define USER_MEMORY_SIZE 0x8FFF
23 #define SYSTEM_PSP 0x08
24 #define SYSTEM_ENV_BLOCK 0x800
25 #define INVALID_DOS_HANDLE 0xFFFF
26 #define DOS_INPUT_HANDLE 0
27 #define DOS_OUTPUT_HANDLE 1
28 #define DOS_ERROR_HANDLE 2
29 #define DOS_SFT_SIZE 255
30 #define SEGMENT_TO_MCB(seg) ((PDOS_MCB)((ULONG_PTR)BaseAddress + TO_LINEAR((seg), 0)))
31 #define SEGMENT_TO_PSP(seg) ((PDOS_PSP)((ULONG_PTR)BaseAddress + TO_LINEAR((seg), 0)))
32
33 #pragma pack(push, 1)
34
35 typedef struct _DOS_MCB
36 {
37 CHAR BlockType;
38 WORD OwnerPsp;
39 WORD Size;
40 BYTE Unused[3];
41 CHAR Name[8];
42 } DOS_MCB, *PDOS_MCB;
43
44 typedef struct _DOS_FCB
45 {
46 BYTE DriveNumber;
47 CHAR FileName[8];
48 CHAR FileExt[3];
49 WORD BlockNumber;
50 WORD RecordSize;
51 DWORD FileSize;
52 WORD LastWriteDate;
53 WORD LastWriteTime;
54 BYTE Reserved[8];
55 BYTE BlockRecord;
56 BYTE RecordNumber[3];
57 } DOS_FCB, *PDOS_FCB;
58
59 typedef struct _DOS_PSP
60 {
61 BYTE Exit[2];
62 WORD LastParagraph;
63 BYTE Reserved0[6];
64 DWORD TerminateAddress;
65 DWORD BreakAddress;
66 DWORD CriticalAddress;
67 WORD ParentPsp;
68 BYTE HandleTable[20];
69 WORD EnvBlock;
70 DWORD LastStack;
71 WORD HandleTableSize;
72 DWORD HandleTablePtr;
73 DWORD PreviousPsp;
74 DWORD Reserved1;
75 WORD DosVersion;
76 BYTE Reserved2[14];
77 BYTE FarCall[3];
78 BYTE Reserved3[9];
79 DOS_FCB Fcb;
80 BYTE CommandLineSize;
81 CHAR CommandLine[127];
82 } DOS_PSP, *PDOS_PSP;
83
84 typedef struct _DOS_INPUT_BUFFER
85 {
86 BYTE MaxLength, Length;
87 CHAR Buffer[ANYSIZE_ARRAY];
88 } DOS_INPUT_BUFFER, *PDOS_INPUT_BUFFER;
89
90 #pragma pack(pop)
91
92 /* FUNCTIONS ******************************************************************/
93
94 WORD DosAllocateMemory(WORD Size, WORD *MaxAvailable);
95 BOOLEAN DosResizeMemory(WORD BlockData, WORD NewSize, WORD *MaxAvailable);
96 BOOLEAN DosFreeMemory(WORD BlockData);
97 WORD DosCreateFile(LPWORD Handle, LPCSTR FilePath, WORD Attributes);
98 WORD DosOpenFile(LPWORD Handle, LPCSTR FilePath, BYTE AccessMode);
99 WORD DosReadFile(WORD FileHandle, LPVOID Buffer, WORD Count, LPWORD BytesRead);
100 WORD DosWriteFile(WORD FileHandle, LPVOID Buffer, WORD Count, LPWORD BytesWritten);
101 VOID DosInitializePsp(WORD PspSegment, LPCSTR CommandLine, WORD ProgramSize, WORD Environment);
102 BOOLEAN DosCreateProcess(LPCSTR CommandLine, WORD EnvBlock);
103 VOID DosTerminateProcess(WORD Psp, BYTE ReturnCode);
104 CHAR DosReadCharacter();
105 VOID DosPrintCharacter(CHAR Character);
106 VOID DosInt20h(WORD CodeSegment);
107 VOID DosInt21h(WORD CodeSegment);
108 VOID DosBreakInterrupt();
109 BOOLEAN DosInitialize();
110
111 #endif
112
113 /* EOF */
114