Some interrupt enhancements.

This commit is contained in:
Andreas Mohr 1999-01-30 13:39:21 +00:00 committed by Alexandre Julliard
parent 935ccabe08
commit a63458d87c
4 changed files with 27 additions and 4 deletions

View File

@ -55,9 +55,15 @@ extern void WINAPI INT_Int10Handler(CONTEXT*);
/* msdos/int11.c */
extern void WINAPI INT_Int11Handler(CONTEXT*);
/* msdos/int12.c */
extern void WINAPI INT_Int12Handler(CONTEXT*);
/* msdos/int13.c */
extern void WINAPI INT_Int13Handler(CONTEXT*);
/* msdos/int15.c */
extern void WINAPI INT_Int15Handler(CONTEXT*);
/* msdos/int16.c */
extern void WINAPI INT_Int16Handler(CONTEXT*);

View File

@ -18,6 +18,8 @@ static void scroll_window(int direction, char lines, char row1,
static int color_pallet[16];
static char dummy; /* dummy var used for unneeded CONSOLE function parameter */
#define SCROLL_UP 1
#define SCROLL_DOWN 2
@ -188,8 +190,13 @@ void WINAPI INT_Int10Handler( CONTEXT *context )
break;
case 0x08: /* READ CHARACTER AND ATTRIBUTE AT CURSOR POSITION */
FIXME(int10,
"Read Character and Attribute at Cursor Position - Not Supported\n");
{
CHAR ch, attr;
TRACE(int10, "Read Character and Attribute at Cursor Position\n");
CONSOLE_GetCharacterAtCursor(&ch, &dummy, &dummy, &attr);
AL_reg(context) = ch;
AH_reg(context) = attr;
}
break;
case 0x09: /* WRITE CHARACTER AND ATTRIBUTE AT CURSOR POSITION */

View File

@ -1155,8 +1155,12 @@ void WINAPI DOS3Call( CONTEXT *context )
DS_reg(context),DX_reg(context) );
{
LPSTR data = CTX_SEG_OFF_TO_LIN(context,DS_reg(context),EDX_reg(context));
LONG length = strchr(data,'$')-data;
_hwrite16( 1, data, length);
LPSTR p = data;
/* do NOT use strchr() to calculate the string length,
as '\0' is valid string content, too !
Maybe we should check for non-'$' strings, but DOS doesn't. */
while (*p != '$') p++;
_hwrite16( 1, data, (int)p - (int)data);
AL_reg(context) = '$'; /* yes, '$' (0x24) gets returned in AL */
}
break;

View File

@ -111,9 +111,15 @@ int INT_RealModeInterrupt( BYTE intnum, PCONTEXT context )
case 0x11:
INT_Int11Handler(context);
break;
case 0x12:
INT_Int12Handler(context);
break;
case 0x13:
INT_Int13Handler(context);
break;
case 0x15:
INT_Int15Handler(context);
break;
case 0x16:
INT_Int16Handler(context);
break;