Hi!

Changes:

- "rc != SUCCESS" after DosDevIOctl() replaced by "rc < SUCCESS".

Cleanups:

- some zeros replaced by SUCCESS.
- used -DE_INVLDDRV expression instead 0x0f value.
- instead "((lr.AX & 0xff) != 0))" used nicer "lr.AL ? 1 : 0".

Optimizations:

- removed extraneous assignments to `rc'.
- removed extraneous "if (rc >= SUCCESS)" checks before assignments to lr.AX.
- reused "goto short_check" whenever possible instead "if (rc < SUCCESS)".

TGROUP reduced from 0e131h (01e41h before previous bigfixes) to 0e111h,
HMA_TEXT reduced from 0a614h (0a623h) to 0a5f8h.

--- Begin Message ---
diff -ruNp old/kernel/inthndlr.c new/kernel/inthndlr.c
--- old/kernel/inthndlr.c       2004-05-13 05:42:04.000000000 +0000
+++ new/kernel/inthndlr.c       2004-05-13 06:33:08.000000000 +0000
@@ -382,7 +382,7 @@ int int21_fat32(lregs *r)
 
 VOID ASMCFUNC int21_service(iregs FAR * r)
 {
-  COUNT rc = 0;
+  COUNT rc;
   long lrc;
   lregs lr; /* 8 local registers (ax, bx, cx, dx, si, di, ds, es) */
 
@@ -765,8 +765,8 @@ dispatch:
         
         if (dpb == NULL)
         {
+          CritErrCode = -DE_INVLDDRV;
           lr.AL = 0xFF;
-          CritErrCode = 0x0f;
           break;
         }
         /* hazard: no error checking! */        
@@ -779,8 +779,8 @@ dispatch:
         if (media_check(dpb) < 0)
 #endif
         {
+          CritErrCode = -DE_INVLDDRV;
           lr.AL = 0xff;
-          CritErrCode = 0x0f;
           break;
         }
         lr.DS = FP_SEG(dpb);
@@ -839,7 +839,7 @@ dispatch:
         if (0xffff == lr.DX)
         {
           /* Set Country Code */
-          if ((rc = DosSetCountry(cntry)) < 0)
+          if (DosSetCountry(cntry) < 0)
             goto error_invalid;
         }
         else
@@ -847,7 +847,7 @@ dispatch:
           if (cntry == 0)
             cntry--;
           /* Get Country Information */
-          if ((rc = DosGetCountryInformation(cntry, FP_DS_DX)) < 0)
+          if (DosGetCountryInformation(cntry, FP_DS_DX) < 0)
             goto error_invalid;
           /* HACK FIXME */
           if (cntry == (UWORD) - 1)
@@ -927,7 +927,6 @@ dispatch:
 
         case 0x01:
           rc = DosSetFattr((BYTE FAR *) FP_DS_DX, lr.CX);
-          if (rc >= SUCCESS)
             lr.AX = lr.CX;
           break;
 
@@ -939,12 +938,11 @@ dispatch:
       /* Device I/O Control                                           */
     case 0x44:
       rc = DosDevIOctl(&lr);      /* can set critical error code! */
-
-      if (rc != SUCCESS)
+      if (rc < SUCCESS)
       {
         lr.AX = -rc;
         if (rc != DE_DEVICE && rc != DE_ACCESS)
-          CritErrCode = -rc;
+          CritErrCode = lr.AX;
         goto error_carry;
       }
       break;
@@ -962,52 +960,40 @@ dispatch:
       /* Get Current Directory                                        */
     case 0x47:
       rc = DosGetCuDir(lr.DL, MK_FP(lr.DS, lr.SI));
-      if (rc >= SUCCESS)
         lr.AX = 0x0100;         /*jpp: from interrupt list */
       goto short_check;
 
       /* Allocate memory */
     case 0x48:
-      if ((rc =
-           DosMemAlloc(lr.BX, mem_access_mode, &(lr.AX), &(lr.BX))) < 0)
+      if ((rc = DosMemAlloc(lr.BX, mem_access_mode, &lr.AX, &lr.BX)) < SUCCESS)
       {
-        DosMemLargest(&(lr.BX));
-        {
+        DosMemLargest(&lr.BX);
                         if (DosMemCheck() != SUCCESS)
                                 panic("MCB chain corrupted");
-        }
         goto error_exit;
       }
-      else
-        ++(lr.AX);              /* DosMemAlloc() returns seg of MCB rather than data 
*/
+      lr.AX++; /* DosMemAlloc() returns seg of MCB rather than data */
       break;
 
       /* Free memory */
     case 0x49:
-      if ((rc = DosMemFree((lr.ES) - 1)) < 0)
-        {
+      if ((rc = DosMemFree(lr.ES - 1)) < SUCCESS)
+      {
                         if (DosMemCheck() != SUCCESS)
                                 panic("MCB chain corrupted");
-                        goto error_exit;
-        }
+        goto error_exit;
+      }
       break;
 
       /* Set memory block size */
     case 0x4a:
-        if (DosMemCheck() != SUCCESS)
-          panic("before 4a: MCB chain corrupted");
-
-      if ((rc = DosMemChange(lr.ES, lr.BX, &lr.BX)) < 0)
+      if (DosMemCheck() != SUCCESS)
+        panic("before 4a: MCB chain corrupted");
+      if ((rc = DosMemChange(lr.ES, lr.BX, &lr.BX)) < SUCCESS)
       {
 #if 0
         if (cu_psp == lr.ES)
-        {
-
-          psp FAR *p;
-          
-          p = MK_FP(cu_psp, 0);
-          p->ps_size = lr.BX + cu_psp;
-        }
+          ((psp FAR*)MK_FP(cu_psp, 0))->ps_size = lr.BX + cu_psp;
 #endif
         if (DosMemCheck() != SUCCESS)
           panic("after 4a: MCB chain corrupted");
@@ -1031,21 +1017,17 @@ dispatch:
       if (((psp FAR *)MK_FP(cu_psp, 0))->ps_parent == cu_psp)
         break;
       tsr = FALSE;
+      return_code = lr.AL;
       if (ErrorMode)
       {
         ErrorMode = FALSE;
-        rc = 2;
+        return_code |= 0x200;
       }
       else if (break_flg)
       {
         break_flg = FALSE;
-        rc = 1;
+        return_code |= 0x100;
       }
-      else
-      {
-        rc = 0;
-      }
-      return_code = lr.AL | (rc << 8);
       if (DosMemCheck() != SUCCESS)
         panic("MCB chain corrupted");
 #ifdef TSC
@@ -1066,7 +1048,6 @@ dispatch:
       /* dta for this call is set on entry.  This     */
       /* needs to be changed for new versions.        */
       rc = DosFindFirst(lr.CX, FP_DS_DX);
-      if (rc >= SUCCESS)
         lr.AX = 0;
       goto short_check;
 
@@ -1075,7 +1056,6 @@ dispatch:
       /* dta for this call is set on entry.  This     */
       /* needs to be changed for new versions.        */
       rc = DosFindNext();
-      if (rc >= SUCCESS)
         lr.AX = 0;
       goto short_check;
 /*
@@ -1188,10 +1168,8 @@ dispatch:
 
       /* Create Temporary File */
     case 0x5a:
-      if ((rc = DosMkTmp(FP_DS_DX, lr.CX)) < 0)
-        goto error_exit;
-      lr.AX = rc;
-      break;
+      lr.AX = rc = DosMkTmp(FP_DS_DX, lr.CX);
+      goto short_check;
 
       /* Create New File */
     case 0x5b:
@@ -1201,11 +1179,9 @@ dispatch:
 /* /// Added for SHARE.  - Ron Cemer */
       /* Lock/unlock file access */
     case 0x5c:
-      if ((rc = DosLockUnlock
-           (lr.BX,
-            (((unsigned long)lr.CX) << 16) | (((unsigned long)lr.DX) ),
-            (((unsigned long)lr.SI) << 16) | (((unsigned long)lr.DI) ),
-            ((lr.AX & 0xff) != 0))) != 0)
+      rc = DosLockUnlock(lr.BX, ((ULONG)lr.CX << 16) | lr.DX,
+                                ((ULONG)lr.SI << 16) | lr.DI, lr.AL ? 1 : 0);
+      if (rc != SUCCESS)
         goto error_exit;
       break;
 /* /// End of additions for SHARE.  - Ron Cemer */
@@ -1231,10 +1207,11 @@ dispatch:
         case 0x08:
         case 0x09:
           rc = remote_printredir(lr.DX, Int21AX);
+          CLEAR_CARRY_FLAG();
           if (rc != SUCCESS)
             goto error_exit;
-          CLEAR_CARRY_FLAG();
           break;
+
         default:
           CritErrCode = SUCCESS;
           goto error_invalid;
@@ -1496,21 +1473,19 @@ dispatch:
             goto error_invalid;
         }
         lr.AX = rc;
-        if (rc < 0) goto error_exit;
-        else CLEAR_CARRY_FLAG();
-        break;
+        CLEAR_CARRY_FLAG();
+        goto short_check;
       }
 #endif
   }
   goto exit_dispatch;
 long_check:
-  if (lrc < SUCCESS)
+  if (lrc >= SUCCESS)
   {
-    rc = (int)lrc;
-    goto error_exit;
+    lr.AX = (UWORD)lrc;
+    goto exit_dispatch;
   }
-  lr.AX = (UWORD)lrc;
-  goto exit_dispatch;
+  rc = (int)lrc;
 short_check:
   if (rc < SUCCESS)
     goto error_exit;
@@ -1925,9 +1900,3 @@ VOID ASMCFUNC int2F_12_handler(struct in
       }
   }
 }
-
-/*
- * 2000/09/04  Brian Reifsnyder
- * Modified interrupts 0x25 & 0x26 to return more accurate error codes.
- */
-

--- End Message ---

Reply via email to