Hello Eduardo,

> I'm implementing NLSFUNC for FreeDOS and I've found that many (most) of
> the needed MUX functions are missing.

> This patch implements functions 2F1226h to 2F1229h. This, together with
> my previous nls.c patch, allowed me to make a first working
> implementation of NLSFUNC's int 2F1404h, but the patch looks so simple
> that I must have done something wrong :)  so, kernel guys, please, have
> a look at it. It is mainly cut'n'paste from int21_service()

a)
why do you need int2f/12 in the first first place ?
are you really executing this from inside KERNEL ?
do you really need to use internal functions ?

if YES, you will probably greatly overrun the kernels 384 byte stack,
which might become a problem.

if NO, why don't you use int21 functions ?


b) lseek(0x1ffff) will fail due to fall from locng_check into
shortcheck.

tom






> Eduardo.


> diff -uNrp ke2035.orig/kernel/inthndlr.c ke2035/kernel/inthndlr.c
> --- ke2035.orig/kernel/inthndlr.c     2004-06-24 22:41:20.000000000 +0200
> +++ ke2035/kernel/inthndlr.c  2004-06-24 22:41:09.000000000 +0200
> @@ -1656,6 +1656,9 @@ struct int2f12regs {
>   */
>  VOID ASMCFUNC int2F_12_handler(struct int2f12regs r)
>  {
> +  COUNT rc;
> +  long lrc;
> +
>    if (r.AH == 0x4a)
>    {
>      size_t size = 0, offs = 0xffff;
> @@ -1869,6 +1875,42 @@ VOID ASMCFUNC int2F_12_handler(struct in
>        r.CX = fstrlen(MK_FP(r.DS, r.SI)) + 1;
>        break;
 
> +    case 0x26:                 /* open file */
> +      r.FLAGS &= ~FLG_CARRY;
> +      CritErrCode = SUCCESS;
> +      lrc = DosOpen(MK_FP(r.DS, r.DX), O_LEGACY | O_OPEN | r.CL, 0);
> +      goto long_check;
> +
> +    case 0x27:                 /* close file */
> +      r.FLAGS &= ~FLG_CARRY;
> +      CritErrCode = SUCCESS;
> +      rc = DosClose(r.BX);
> +      goto short_check;
> +
> +    case 0x28:                 /* move file pointer */
> +      r.FLAGS &= ~FLG_CARRY;
> +      CritErrCode = SUCCESS;
> +      r.BP &= 0x00ff;
+      if (r.BP >> 2)
> +        goto error_invalid;
> +      lrc = DosSeek(r.BX, (LONG)((((ULONG) (r.CX)) << 16) | r.DX),
> r.BP);
> +      if (lrc == -1)
> +      {
> +        lrc = DE_INVLDHNDL;
> +      }
> +      else
> +      {
> +        r.DX = (UWORD)(lrc >> 16);
> +        lrc = (UWORD) lrc;
> +      }
> +      goto long_check;
> +
> +    case 0x29:                 /* read from file */
> +      r.FLAGS &= ~FLG_CARRY;
> +      CritErrCode = SUCCESS;
> +      lrc = DosRead(r.BX, r.CX, MK_FP(r.DS, r.DX));
> +      goto long_check;
> +
>      case 0x2a:                 /* Set FastOpen but does nothing. */
 
>        r.FLAGS &= ~FLG_CARRY;
> @@ -1897,6 +1939,26 @@ VOID ASMCFUNC int2F_12_handler(struct in
>          r.FLAGS |= FLG_CARRY;
>        }
>    }
> +  goto real_exit;
> +long_check:
+  if (lrc >>= SUCCESS)
> +  {
> +    r.AX = (UWORD)lrc;
> +    goto real_exit;
> +  }
> +  rc = (int)lrc;
> +short_check:
> +  if (rc < SUCCESS)
> +    goto error_exit;
> +  goto real_exit;
> +error_invalid:
> +  rc = DE_INVLDFUNC;
> +error_exit:
> +  r.AX = -rc;
> +  if (CritErrCode == SUCCESS)
> +    CritErrCode = r.AX;      /* Maybe set */
> +  r.FLAGS |= FLG_CARRY;
> +real_exit:;
>  }
 
>  /*




> -------------------------------------------------------
> This SF.Net email sponsored by Black Hat Briefings & Training.
> Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
> digital self defense, top technical experts, no vendor pitches, 
> unmatched networking opportunities. Visit www.blackhat.com
> _______________________________________________
> Freedos-kernel mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/freedos-kernel


-- 
Best regards,
Tom Ehlert
mailto:[EMAIL PROTECTED]
+49-241-79886



-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
digital self defense, top technical experts, no vendor pitches, 
unmatched networking opportunities. Visit www.blackhat.com
_______________________________________________
Freedos-kernel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freedos-kernel

Reply via email to