[NTVDM]: DOS:
[reactos.git] / subsystems / ntvdm / dos.h
index fb577e7..880ac66 100644 (file)
 
 /* 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)
 
@@ -80,15 +97,25 @@ typedef struct _DOS_PSP
     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 ******************************************************************/
@@ -100,17 +127,20 @@ WORD DosCreateFile(LPWORD Handle, LPCSTR FilePath, WORD Attributes);
 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 */
-