home *** CD-ROM | disk | FTP | other *** search
/ Internet MPEG Audio Archive / IMAA.mdf / util / dos / l3v100n / rsx / source / dpmiutil.c < prev    next >
C/C++ Source or Header  |  1994-01-19  |  4KB  |  118 lines

  1. /* This file is DPMIUTIL.C
  2. **
  3. **    - utils for dpmi
  4. **
  5. ** Copyright (c) Rainer Schnitker 91,92,93
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include "DPMI.H"
  12. #include "DPMIDOS.H"
  13.  
  14. int FreeManyLDT(WORD sel, WORD n)
  15. {
  16.     WORD i, inc;
  17.  
  18.     inc = SelInc();
  19.     for (i = 1; i <= n; i++) {
  20.     if (FreeLDT(sel))
  21.         return -1;
  22.     sel += inc;
  23.     }
  24.     return 0;
  25. }
  26.  
  27. void PrintFreeMemInfo(NPFREEMEMINFO fm)
  28. {
  29.     printf("Largest available block           : %lu Bytes = %lu KB\n",
  30.        fm->LargestFree, fm->LargestFree >> 10);
  31.     printf("Number free pages                 : %4lu = %4lu KB\n"
  32.        ,fm->MaxUnlockedPages, fm->MaxUnlockedPages * 4);
  33.     printf("Number free pages to lock         : %4lu = %4lu KB\n"
  34.        ,fm->MaxLockedPages, fm->MaxLockedPages * 4);
  35.     printf("Number pages of linear addr space : %4lu = %4lu KB\n"
  36.        ,fm->AddressSpacePages, fm->AddressSpacePages * 4);
  37.     printf("Number pages not locked           : %4lu = %4lu KB\n"
  38.        ,fm->UnlockedPages, fm->UnlockedPages * 4);
  39.     printf("Number pages not used             : %4lu = %4lu KB\n"
  40.        ,fm->UnusedPages, fm->UnusedPages * 4);
  41.     printf("Number pages managed by the Dpmi  : %4lu = %4lu KB\n"
  42.        ,fm->PhysicalPages, fm->PhysicalPages * 4);
  43.     printf("Number pages free addr space      : %4lu = %4lu KB\n"
  44.        ,fm->FreeAddressSpacePages, fm->FreeAddressSpacePages * 4);
  45.  
  46.     if (fm->PagingFilePages <= 0xFFFFFL)
  47.     printf("Number pages in swapfile          : %4lu = %4lu KB\n"
  48.            ,fm->PagingFilePages, fm->PagingFilePages * 4);
  49.     else
  50.     printf("DPMI host paging partition        : %lu Bytes = %lu MB\n"
  51.            ,fm->PagingFilePages, fm->PagingFilePages >> 20);
  52. }
  53.  
  54. void PrintDescriptor(LPDESCRIPTOR d)
  55. {
  56.     BYTE flag;
  57.  
  58.     if (!(d->access & PRESENT_BIT)) {
  59.     printf("Not Present\n");
  60.     return;
  61.     }
  62.     if (d->access & SEGMENT_BIT)/* code or data selector */
  63.     printf("Base=%02X%02X%04X Limit=%01X%04X %s DPL=%u %s %s %s %s\n",
  64.            d->base_hi, d->base_mi, d->base_lo,
  65.            d->lim_hi & LIMIT_HI_MASK, d->lim_lo,
  66.            (d->lim_hi & GRANULAR_BIT) ? "Pages" : "Bytes",
  67.            (d->access & DPL_MASK) >> 5,
  68.            (d->lim_hi & DEFAULT_BIT) ? "32bit" : "16bit",
  69.            (d->access & CODE_BIT) ?
  70.            (d->access & CONFIRMING_BIT) ? "CONF" : "CODE" :
  71.            (d->access & EXPAND_BIT) ? "EXPD" : "DATA",
  72.            (d->access & WRITE_BIT) ?
  73.            (d->access & CODE_BIT) ? "R" : "W" : "-",
  74.            (d->access & ACCESS_BIT) ? "ACC" : " ");
  75.  
  76.     else {            /* system selector */
  77.     flag = d->access & (BYTE) 7;
  78.     switch (flag) {
  79.     case 0:
  80.         break;
  81.     case 1:
  82.         printf("TSS%s ", (d->access & 8) ? "386" : "286");
  83.         break;
  84.     case 2:
  85.         printf("LDT ");
  86.         break;
  87.     case 3:
  88.         printf("BUSYTSS%s ", (d->access & 8) ? "386" : "286");
  89.         break;
  90.     case 4:
  91.         printf("CALLGATE%s ", (d->access & 8) ? "386" : "286");
  92.         break;
  93.     case 5:
  94.         printf("TASKGATE ");
  95.         break;
  96.     case 6:
  97.         printf("INT_GATE%s ", (d->access & 8) ? "386" : "286");
  98.         break;
  99.     case 7:
  100.         printf("TRAPGATE%s ", (d->access & 8) ? "386" : "286");
  101.         break;
  102.     }
  103.  
  104.  
  105.     if (flag <= 3) {
  106.         printf("Base=%02X%02X%04X Limit=%01X%04X DPL=%u\n",
  107.            d->base_hi, d->base_mi, d->base_lo,
  108.            d->lim_hi & LIMIT_HI_MASK, d->lim_lo,
  109.            (d->access & DPL_MASK) >> 5);
  110.     } else {
  111.         printf("Sel=%04X Offset=%02X%02X%04X DPL=%u\n",
  112.            d->base_lo,
  113.            d->base_hi, d->lim_hi, d->lim_lo,
  114.            (d->access & DPL_MASK) >> 5);
  115.     }
  116.     }                /* else system descriptor */
  117. }
  118.