home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l440 / 2.ddi / CHAP4 / BUFFERS.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-09-25  |  1.2 KB  |  58 lines

  1. /* BUFFERS.C -- value of BUFFERS= */
  2. /* also see COUNTF.C to determine value of FILES= */
  3.  
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <dos.h>
  7.  
  8. #pragma pack(1)
  9.  
  10. #ifdef __TURBOC__
  11. #define ASM asm
  12. #else
  13. #define ASM _asm
  14. #endif
  15.  
  16. typedef unsigned char BYTE;
  17.  
  18. typedef struct dskbuf {
  19.     struct dskbuf far *next;
  20.     BYTE drive;
  21.     BYTE flags;
  22.     } DSKBUF;
  23.     
  24. unsigned buffers(void)
  25. {
  26.     BYTE far *doslist;
  27.     
  28.     ASM mov ah, 52h
  29.     ASM int 21h
  30.     ASM mov doslist+2, es
  31.     ASM mov doslist, bx
  32.     
  33.     if (_osmajor < 4)
  34.     {
  35.         DSKBUF far *diskbuff;
  36.         unsigned buffers;
  37.  
  38.         /* pointer to first disk buffer in List of Lists */
  39.         if ((_osmajor==2) || ((_osmajor==3) && (_osminor==0)))
  40.             diskbuff = *((void far * far *) (doslist + 0x13));
  41.         else 
  42.             diskbuff = *((void far * far *) (doslist + 0x12));
  43.  
  44.         for (buffers=1; ; buffers++)
  45.             if ((diskbuff = diskbuff->next) == -1L)
  46.                 break;
  47.         return buffers;
  48.     }
  49.     else
  50.         /* BUFFERS= value kept directly in List of Lists */
  51.         return *(doslist+0x3F);
  52. }
  53.  
  54. main()
  55.     printf("BUFFERS=%d\n", buffers());
  56. }
  57.