ea0ad88f01a61530d977074691434bfffdd07d57
2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
5 * PURPOSE: VDM DOS Kernel (header file)
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
12 /* INCLUDES *******************************************************************/
16 /* DEFINES ********************************************************************/
21 #define DOS_VERSION MAKEWORD(6, 0)
23 #define DOS_CONFIG_PATH L"%SystemRoot%\\system32\\CONFIG.NT"
24 #define DOS_COMMAND_INTERPRETER L"%SystemRoot%\\system32\\COMMAND.COM /k %SystemRoot%\\system32\\AUTOEXEC.NT"
25 #define FIRST_MCB_SEGMENT 0x1000
26 #define USER_MEMORY_SIZE 0x8FFE
27 #define SYSTEM_PSP 0x08
28 #define SYSTEM_ENV_BLOCK 0x800
29 #define INVALID_DOS_HANDLE 0xFFFF
30 #define DOS_INPUT_HANDLE 0
31 #define DOS_OUTPUT_HANDLE 1
32 #define DOS_ERROR_HANDLE 2
33 #define DOS_SFT_SIZE 255
34 #define SEGMENT_TO_MCB(seg) ((PDOS_MCB)((ULONG_PTR)BaseAddress + TO_LINEAR((seg), 0)))
35 #define SEGMENT_TO_PSP(seg) ((PDOS_PSP)((ULONG_PTR)BaseAddress + TO_LINEAR((seg), 0)))
36 #define UMB_START_SEGMENT 0xC000
37 #define UMB_END_SEGMENT 0xDFFF
38 #define DOS_ALLOC_HIGH 0x40
39 #define DOS_ALLOC_HIGH_LOW 0x80
40 #define DOS_CMDLINE_LENGTH 127
41 #define DOS_DIR_LENGTH 64
42 #define NUM_DRIVES ('Z' - 'A' + 1)
43 #define DOS_CHAR_ATTRIBUTE 0x07
45 enum DOS_ALLOC_STRATEGY
54 typedef struct _DOS_MCB
63 typedef struct _DOS_FCB
78 typedef struct _DOS_PSP
83 DWORD TerminateAddress
;
85 DWORD CriticalAddress
;
100 CHAR CommandLine
[DOS_CMDLINE_LENGTH
];
101 } DOS_PSP
, *PDOS_PSP
;
103 typedef struct _DOS_INPUT_BUFFER
105 BYTE MaxLength
, Length
;
106 CHAR Buffer
[ANYSIZE_ARRAY
];
107 } DOS_INPUT_BUFFER
, *PDOS_INPUT_BUFFER
;
109 typedef struct _DOS_DRIVER_HEADER
116 } DOS_DRIVER_HEADER
, *PDOS_DRIVER_HEADER
;
120 /* FUNCTIONS ******************************************************************/
122 WORD
DosAllocateMemory(WORD Size
, WORD
*MaxAvailable
);
123 BOOLEAN
DosResizeMemory(WORD BlockData
, WORD NewSize
, WORD
*MaxAvailable
);
124 BOOLEAN
DosFreeMemory(WORD BlockData
);
125 WORD
DosCreateFile(LPWORD Handle
, LPCSTR FilePath
, WORD Attributes
);
126 WORD
DosOpenFile(LPWORD Handle
, LPCSTR FilePath
, BYTE AccessMode
);
127 WORD
DosReadFile(WORD FileHandle
, LPVOID Buffer
, WORD Count
, LPWORD BytesRead
);
128 WORD
DosWriteFile(WORD FileHandle
, LPVOID Buffer
, WORD Count
, LPWORD BytesWritten
);
129 WORD
DosSeekFile(WORD FileHandle
, LONG Offset
, BYTE Origin
, LPDWORD NewOffset
);
130 BOOLEAN
DosDuplicateHandle(WORD OldHandle
, WORD NewHandle
);
131 BOOLEAN
DosCloseHandle(WORD DosHandle
);
132 VOID
DosInitializePsp(WORD PspSegment
, LPCSTR CommandLine
, WORD ProgramSize
, WORD Environment
);
133 BOOLEAN
DosCreateProcess(LPCSTR CommandLine
, WORD EnvBlock
);
134 VOID
DosTerminateProcess(WORD Psp
, BYTE ReturnCode
);
135 CHAR
DosReadCharacter(VOID
);
136 VOID
DosPrintCharacter(CHAR Character
);
137 BOOLEAN
DosHandleIoctl(BYTE ControlCode
, WORD FileHandle
);
138 VOID
DosInt20h(LPWORD Stack
);
139 VOID
DosInt21h(LPWORD Stack
);
140 VOID
DosBreakInterrupt(LPWORD Stack
);
141 BOOLEAN
DosInitialize(VOID
);