236 DPRINT(
"INT 21h, AH = 01h\n");
259 setAL(Character ==
'\t' ?
' ' : Character);
267 DPRINT1(
"INT 16h, 03h: Read character from STDAUX is HALFPLEMENTED\n");
276 DPRINT1(
"INT 16h, 04h: Write character to STDAUX is HALFPLEMENTED\n");
285 DPRINT1(
"INT 16h, 05h: Write character to printer is HALFPLEMENTED -\n\n");
287 DPRINT1(
"\n\n-----------\n\n");
298 if (Character != 0xFF)
332 DPRINT(
"Direct char input without echo\n");
340 DPRINT(
"Char input without echo\n");
374 DPRINT(
"Read Buffered Input\n");
407 if (InputFunction == 0x01 || InputFunction == 0x06 ||
408 InputFunction == 0x07 || InputFunction == 0x08 ||
409 InputFunction == 0x0A)
412 setAH(InputFunction);
424 DPRINT1(
"INT 21h, 0Dh is UNIMPLEMENTED\n");
511 DPRINT1(
"Setting interrupt 0x%02X to %04X:%04X ...\n",
548 else Fcb->DriveNumber = 0;
566 if ((FillChar !=
' ') || (
i != 0) || !(
Options & (1 << 2)))
568 for (;
i < 8;
i++)
Fcb->FileName[
i] = FillChar;
591 if ((FillChar !=
' ') || (
i != 0) || !(
Options & (1 << 3)))
593 for (;
i < 3;
i++)
Fcb->FileExt[
i] = FillChar;
701 DPRINT1(
"Process going resident: %u paragraphs kept\n",
getDX());
746 DPRINT1(
"INT 21h, AH = %02Xh, subfunction AL = %02Xh NOT IMPLEMENTED\n",
776 CHAR RootPath[] =
"?:\\";
777 DWORD SectorsPerCluster;
778 DWORD BytesPerSector;
779 DWORD NumberOfFreeClusters;
780 DWORD TotalNumberOfClusters;
785 RootPath[0] =
'A' +
getDL() - 1;
790 &NumberOfFreeClusters,
791 &TotalNumberOfClusters))
795 setBX(
min(NumberOfFreeClusters, 0xFFFF));
796 setDX(
min(TotalNumberOfClusters, 0xFFFF));
1117 if (
getAL() == 0x00)
1135 else if (
getAL() == 0x01)
1218 if (DriveNumber == 0)
1228 if (DriveNumber < SysVars->NumLocalDrives)
1250 WORD MaxAvailable = 0;
1262 setBX(MaxAvailable);
1333 else if (OrgAL == 0x05)
1336 DPRINT1(
"Set execution state is UNIMPLEMENTED\n");
1465 if (
MoveFileA(ExistingFileName, NewFileName))
1488 WORD FileDate, FileTime;
1515 &FileDate, &FileTime))
1574 DPRINT1(
"INT 21h, AH = %02Xh, subfunction AL = %02Xh NOT IMPLEMENTED\n",
1661 DPRINT1(
"INT 21h, AH = 59h, BX = %04Xh - Get Extended Error Information is UNIMPLEMENTED\n",
1735 if (
getAL() == 0x00)
1748 else if (
getAL() == 0x01)
1826 DPRINT1(
"INT 21h, AH = %02Xh, subfunction AL = %02Xh NOT IMPLEMENTED\n",
1839 case 0x01:
case 0x02:
case 0x03:
1840 case 0x04:
case 0x05:
case 0x06:
1911 DPRINT1(
"INT 21h, AH = %02Xh, subfunction AL = %02Xh NOT IMPLEMENTED\n",
1961 WORD CreationStatus;
1965 if (
getAL() != 0x00)
1989 setCX(CreationStatus);
2004 DPRINT1(
"INT 21h LFN Support, AH = %02Xh, AL = %02Xh NOT IMPLEMENTED!\n",
2015 DPRINT1(
"DOS Function INT 21h, AH = %02Xh, AL = %02Xh NOT IMPLEMENTED!\n",
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesWritten
#define ERROR_INVALID_PARAMETER
#define DOS_DATA_OFFSET(x)
BOOLEAN DosResizeMemory(WORD BlockData, WORD NewSize, WORD *MaxAvailable)
WORD DosDuplicateHandle(WORD DosHandle)
#define DOS_OUTPUT_HANDLE
USHORT WINAPI getBX(VOID)
#define INVALID_DOS_HANDLE
WORD DosCreateProcess(IN LPCSTR ProgramName, IN PDOS_EXEC_PARAM_BLOCK Parameters, IN DWORD ReturnAddress OPTIONAL)
VOID DosToUpperStrZ(PSTR DestStr, PSTR SrcStr)
WORD DosReadFile(WORD FileHandle, DWORD Buffer, WORD Count, LPWORD BytesRead)
_In_ NDIS_ERROR_CODE ErrorCode
_In_ ULONG _In_ ULONG _In_ ULONG Length
BOOL DosFlushFileBuffers(WORD FileHandle)
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
USHORT WINAPI getSI(VOID)
VOID DosToUpperStrN(PCHAR DestStr, PCHAR SrcStr, WORD Length)
#define ERROR_INVALID_FUNCTION
USHORT WINAPI getCX(VOID)
DWORD WINAPI demFileFindNext(_Inout_ PVOID pFindFileData)
DWORD WINAPI demFileFindFirst(_Out_ PVOID pFindFileData, _In_ PCSTR FileName, _In_ WORD AttribMask)
static BOOLEAN DosChangeDirectory(LPSTR Directory)
CHAR CurrentDirectories[NUM_DRIVES][DOS_DIR_LENGTH]
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
VOID WINAPI setAX(USHORT)
VOID WINAPI setDS(USHORT)
#define ERROR_INVALID_HANDLE
BOOLEAN DosFreeMemory(WORD BlockData)
VOID WINAPI DosInt21h(LPWORD Stack)
BOOL WINAPI MoveFileA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName)
IN PVOID IN PVOID IN USHORT IN USHORT Size
DWORD WINAPI GetLastError(VOID)
USHORT WINAPI getSS(VOID)
#define SEG_OFF_TO_PTR(seg, off)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
BOOL WINAPI SetFileTime(IN HANDLE hFile, CONST FILETIME *lpCreationTime OPTIONAL, CONST FILETIME *lpLastAccessTime OPTIONAL, CONST FILETIME *lpLastWriteTime OPTIONAL)
DWORD WINAPI GetFullPathNameA(IN LPCSTR lpFileName, IN DWORD nBufferLength, OUT LPSTR lpBuffer, OUT LPSTR *lpFilePart)
#define SEGMENT_TO_PSP(seg)
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
VOID WINAPI setES(USHORT)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
BOOLEAN DosCheckInput(VOID)
#define ERROR_ACCESS_DENIED
DWORD WINAPI GetFileAttributesA(LPCSTR lpFileName)
VOID DosPrintCharacter(WORD FileHandle, CHAR Character)
VOID WINAPI setSI(USHORT)
static BOOLEAN DosChangeDrive(BYTE Drive)
BOOL WINAPI CreateDirectoryA(IN LPCSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
WORD DosAllocateMemory(WORD Size, WORD *MaxAvailable)
BOOL WINAPI SetFileAttributesA(LPCSTR lpFileName, DWORD dwFileAttributes)
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
VOID DosSetProcessContext(WORD Segment)
CHAR DosToUpper(CHAR Char)
BOOLEAN DosControlBreak(VOID)
PDOS_FILE_DESCRIPTOR DosGetHandleFileDescriptor(WORD DosHandle)
struct _DOS_INPUT_BUFFER * PDOS_INPUT_BUFFER
BOOLEAN DosResizeHandleTable(WORD NewSize)
CHAR NTAPI RtlUpperChar(_In_ CHAR Source)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
WORD DosSeekFile(WORD FileHandle, LONG Offset, BYTE Origin, LPDWORD NewOffset)
BOOL WINAPI DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
struct _DOS_FCB * PDOS_FCB
USHORT WINAPI getES(VOID)
BOOLEAN DosUnlinkUmb(VOID)
#define INVALID_FILE_ATTRIBUTES
VOID WINAPI setDX(USHORT)
#define DOS_ALLOC_HIGH_LOW
VOID DosCreatePsp(WORD Segment, WORD ProgramSize)
WORD DosGetCountryInfo(IN OUT PWORD CountryId, OUT PDOS_COUNTRY_INFO CountryInfo)
CHAR DosReadCharacter(WORD FileHandle, BOOLEAN Echo)
static BOOLEAN DosIsFileOnCdRom(VOID)
#define ERROR_INVALID_DRIVE
USHORT WINAPI getDX(VOID)
VOID DosClonePsp(WORD DestSegment, WORD SourceSegment)
WORD DosGetCountryInfoEx(IN BYTE InfoId, IN WORD CodePage, IN WORD CountryId, OUT PDOS_COUNTRY_INFO_2 CountryInfo, IN OUT PWORD BufferSize)
VOID WINAPI setBX(USHORT)
WORD DosOpenFile(LPWORD Handle, LPCSTR FilePath, BYTE AccessShareModes)
WORD DosCreateFile(LPWORD Handle, LPCSTR FilePath, DWORD CreationDisposition, WORD Attributes)
BOOLEAN DosLockFile(WORD DosHandle, DWORD Offset, DWORD Size)
BOOL WINAPI FileTimeToDosDateTime(IN CONST FILETIME *lpFileTime, OUT LPWORD lpFatDate, OUT LPWORD lpFatTime)
VOID DosTerminateProcess(WORD Psp, BYTE ReturnCode, WORD KeepResident)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
BOOLEAN DosDeviceIoControl(WORD FileHandle, BYTE ControlCode, DWORD Buffer, PWORD Length)
WORD DosCreateFileEx(LPWORD Handle, LPWORD CreationStatus, LPCSTR FilePath, BYTE AccessShareModes, WORD CreateActionFlags, WORD Attributes)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
USHORT WINAPI getDI(VOID)
BOOL WINAPI RemoveDirectoryA(IN LPCSTR lpPathName)
#define FIELD_OFFSET(t, f)
BYTE DosReadLineBuffered(WORD FileHandle, DWORD Buffer, BYTE MaxSize)
VOID WINAPI setCX(USHORT)
DWORD DosLoadExecutable(IN DOS_EXEC_TYPE LoadType, IN LPCSTR ExecutablePath, IN PDOS_EXEC_PARAM_BLOCK Parameters, IN LPCSTR CommandLine OPTIONAL, IN LPCSTR Environment OPTIONAL, IN DWORD ReturnAddress OPTIONAL)
WORD DosWriteFile(WORD FileHandle, DWORD Buffer, WORD Count, LPWORD BytesWritten)
DWORD WINAPI demFileDelete(IN LPCSTR FileName)
USHORT WINAPI getDS(VOID)
#define ERROR_CALL_NOT_IMPLEMENTED
BOOL WINAPI GetDiskFreeSpaceA(IN LPCSTR lpRootPathName, OUT LPDWORD lpSectorsPerCluster, OUT LPDWORD lpBytesPerSector, OUT LPDWORD lpNumberOfFreeClusters, OUT LPDWORD lpTotalNumberOfClusters)
BOOLEAN DosForceDuplicateHandle(WORD OldHandle, WORD NewHandle)
USHORT WINAPI getSP(VOID)
BOOLEAN DosCloseHandle(WORD DosHandle)
BOOL WINAPI SetLocalTime(IN CONST SYSTEMTIME *lpSystemTime)
WORD DosIfCharYesNo(WORD Char)
BOOL WINAPI GetFileTime(IN HANDLE hFile, OUT LPFILETIME lpCreationTime OPTIONAL, OUT LPFILETIME lpLastAccessTime OPTIONAL, OUT LPFILETIME lpLastWriteTime OPTIONAL)
UINT WINAPI GetTempFileNameA(IN LPCSTR lpPathName, IN LPCSTR lpPrefixString, IN UINT uUnique, OUT LPSTR lpTempFileName)
BOOLEAN DosUnlockFile(WORD DosHandle, DWORD Offset, DWORD Size)
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes