--- Begin Message ---
diff -ruNp OLD/kernel/config.c NEW/kernel/config.c
--- OLD/kernel/config.c 2004-01-31 15:06:36.000000000 +0000
+++ NEW/kernel/config.c 2004-03-25 00:42:36.000000000 +0000
@@ -922,12 +922,8 @@ STATIC void Config_Buffers(BYTE * pLine)
   COUNT nBuffers;
 
   /* Get the argument                                             */
-  if (GetNumArg(pLine, &nBuffers) == (BYTE *) 0)
-    return;
-
-  /* Got the value, assign either default or new value            */
-  Config.cfgBuffers =
-      (nBuffers < 0 ? nBuffers : max(Config.cfgBuffers, nBuffers));
+  if (GetNumArg(pLine, &nBuffers))
+    Config.cfgBuffers = nBuffers;
 }
 
 /**
@@ -1763,77 +1759,75 @@ STATIC COUNT strcasecmp(REG BYTE * d, RE
     that saves some relocation problems    
 */
 
-VOID config_init_buffers(COUNT anzBuffers)
+VOID config_init_buffers(int wantedbuffers)
 {
-  REG WORD i;
   struct buffer FAR *pbuffer;
-  unsigned wantedbuffers = anzBuffers;
+  unsigned buffers = 0;
 
-  if (anzBuffers < 0)
-  {
-    wantedbuffers = anzBuffers = -anzBuffers;
-  }
+  /* fill HMA with buffers if BUFFERS count >=0 and DOS in HMA         */
+  if (wantedbuffers < 0)
+      wantedbuffers = -wantedbuffers;
   else if (HMAState == HMA_DONE)
-  {
-    anzBuffers = (0xfff0 - HMAFree) / sizeof(struct buffer);
-  }
+    buffers = (0xFFF0 - HMAFree) / sizeof (struct buffer);
 
-  anzBuffers = max(anzBuffers, 6);
-  if (anzBuffers > 99)
+  if (wantedbuffers < 6)               /* min 6 buffers                */
+      wantedbuffers = 6;
+  if (wantedbuffers > 99)              /* max 99 buffers               */
   {
-    printf("BUFFERS=%u not supported, reducing to 99\n", anzBuffers);
-    anzBuffers = 99;
+    printf("BUFFERS=%u not supported, reducing to 99\n", wantedbuffers);
+    wantedbuffers = 99;
   }
-  LoL->nbuffers = anzBuffers;
-  
-  lpTop = lpOldTop;
 
+  if (buffers < wantedbuffers)         /* not less than requested      */
+      buffers = wantedbuffers;
+  LoL->nbuffers = buffers;
+
+  lpTop = lpOldTop;
   LoL->inforecptr = &LoL->firstbuf;
-  
-  {
-    size_t bytes = sizeof(struct buffer) * anzBuffers;
-    pbuffer = HMAalloc(bytes);
 
-    if (pbuffer == NULL)
+  {
+    size_t bytes = sizeof (struct buffer) * buffers;
+    if ((pbuffer = HMAalloc(bytes)) == NULL)
     {
       pbuffer = KernelAlloc(bytes, 'B', 0);
+      if (HMAState == HMA_DONE)
+        firstAvailableBuf = MK_FP (/*HMASEG*/0xFFFF, HMAFree);
     }
     else
     {
       LoL->bufloc = LOC_HMA;
       LoL->deblock_buf = KernelAlloc(SEC_SIZE, 'B', 0);
+
+      /* space in HMA beyond requested buffers available as user space */
+      firstAvailableBuf = pbuffer + wantedbuffers;
     }
   }
-
   LoL->firstbuf = pbuffer;
 
-  DebugPrintf(("init_buffers (size %u) at", sizeof(struct buffer)));
-  DebugPrintf((" (%p)", LoL->firstbuf));
+  DebugPrintf(("init_buffers (size %u) at (%p)",
+               sizeof(struct buffer), pbuffer));
 
-  pbuffer->b_prev = FP_OFF(pbuffer + (anzBuffers-1));
-  for (i = 1; i < anzBuffers; ++i)
+  buffers--;
+  pbuffer->b_prev = FP_OFF(pbuffer + buffers);
   {
-    if (i == wantedbuffers)
+    int i = buffers;
+    do
     {
-      firstAvailableBuf = pbuffer;
-    }      
-    pbuffer->b_next = FP_OFF(pbuffer + 1);
-    pbuffer++;
-    pbuffer->b_prev = FP_OFF(pbuffer - 1);
-  }
-  pbuffer->b_next = FP_OFF(pbuffer - (anzBuffers-1));
-
-    /* now, we can have quite some buffers in HMA
-       -- up to 50 for KE38616.
-       so we fill the HMA with buffers
-       but not if the BUFFERS count is negative ;-)
-     */
+      pbuffer->b_next = FP_OFF(pbuffer + 1);
+      pbuffer++;
+      pbuffer->b_prev = FP_OFF(pbuffer - 1);
+    } while (--i);
+  }
+  pbuffer->b_next = FP_OFF(pbuffer - buffers);
 
   DebugPrintf((" done\n"));
 
-  if (FP_SEG(pbuffer) == 0xffff)
+  if (FP_SEG(pbuffer) == /*HMASEG*/0xFFFF)
+  {
+    buffers++;
     printf("Kernel: allocated %d Diskbuffers = %u Bytes in HMA\n",
-           anzBuffers, anzBuffers * sizeof(struct buffer));
+           buffers, buffers * sizeof(struct buffer));
+  }
 }
 
 /*




-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
Freedos-kernel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freedos-kernel

--- End Message ---

Reply via email to