/* DEFINES ********************************************************************/
+//
+// We are DOS 6.00
+//
#define DOS_VERSION MAKEWORD(6, 0)
+
#define DOS_CONFIG_PATH L"%SystemRoot%\\system32\\CONFIG.NT"
#define DOS_COMMAND_INTERPRETER L"%SystemRoot%\\system32\\COMMAND.COM /k %SystemRoot%\\system32\\AUTOEXEC.NT"
#define FIRST_MCB_SEGMENT 0x1000
#define SEGMENT_TO_PSP(seg) ((PDOS_PSP)((ULONG_PTR)BaseAddress + TO_LINEAR((seg), 0)))
#define UMB_START_SEGMENT 0xC000
#define UMB_END_SEGMENT 0xDFFF
+#define DOS_ALLOC_HIGH 0x40
+#define DOS_ALLOC_HIGH_LOW 0x80
+#define DOS_CMDLINE_LENGTH 127
+#define DOS_DIR_LENGTH 64
+#define NUM_DRIVES ('Z' - 'A' + 1)
+#define DOS_CHAR_ATTRIBUTE 0x07
+
+enum DOS_ALLOC_STRATEGY
+{
+ DOS_ALLOC_FIRST_FIT,
+ DOS_ALLOC_BEST_FIT,
+ DOS_ALLOC_LAST_FIT
+};
#pragma pack(push, 1)
BYTE Reserved3[9];
DOS_FCB Fcb;
BYTE CommandLineSize;
- CHAR CommandLine[127];
+ CHAR CommandLine[DOS_CMDLINE_LENGTH];
} DOS_PSP, *PDOS_PSP;
typedef struct _DOS_INPUT_BUFFER
{
- BYTE MaxLength, Length;
+ BYTE MaxLength;
+ BYTE Length;
CHAR Buffer[ANYSIZE_ARRAY];
} DOS_INPUT_BUFFER, *PDOS_INPUT_BUFFER;
+typedef struct _DOS_DRIVER_HEADER
+{
+ DWORD NextDriver;
+ WORD Attributes;
+ WORD StrategyEntry;
+ WORD InterruptEntry;
+ CHAR DeviceName[8];
+} DOS_DRIVER_HEADER, *PDOS_DRIVER_HEADER;
+
#pragma pack(pop)
/* FUNCTIONS ******************************************************************/
WORD DosOpenFile(LPWORD Handle, LPCSTR FilePath, BYTE AccessMode);
WORD DosReadFile(WORD FileHandle, LPVOID Buffer, WORD Count, LPWORD BytesRead);
WORD DosWriteFile(WORD FileHandle, LPVOID Buffer, WORD Count, LPWORD BytesWritten);
+WORD DosSeekFile(WORD FileHandle, LONG Offset, BYTE Origin, LPDWORD NewOffset);
+BOOLEAN DosDuplicateHandle(WORD OldHandle, WORD NewHandle);
+BOOLEAN DosCloseHandle(WORD DosHandle);
VOID DosInitializePsp(WORD PspSegment, LPCSTR CommandLine, WORD ProgramSize, WORD Environment);
BOOLEAN DosCreateProcess(LPCSTR CommandLine, WORD EnvBlock);
VOID DosTerminateProcess(WORD Psp, BYTE ReturnCode);
CHAR DosReadCharacter(VOID);
VOID DosPrintCharacter(CHAR Character);
-VOID DosInt20h(WORD CodeSegment);
-VOID DosInt21h(WORD CodeSegment);
-VOID DosBreakInterrupt(VOID);
+BOOLEAN DosHandleIoctl(BYTE ControlCode, WORD FileHandle);
+VOID DosInt20h(LPWORD Stack);
+VOID DosInt21h(LPWORD Stack);
+VOID DosBreakInterrupt(LPWORD Stack);
BOOLEAN DosInitialize(VOID);
-#endif
+#endif // _DOS_H_
/* EOF */
-