home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR2 / 4DEMS.ZIP / EMSTEST.C < prev    next >
Text File  |  1993-11-13  |  7KB  |  156 lines

  1. /*--------------------------------------------------------------------------+
  2. | Module: EMSTEST                                                           |
  3. | Project: TOOLS                                                            |
  4. | Author: Paul A. Penrose                                                   |
  5. |         (c) 1992, 4D Interactive Systems, Inc.  All rights reserved.      |
  6. | Start Date: 01 Nov 92                                                     |
  7. | Last Revised: 29 Nov 92                                                   |
  8. | Purpose:                                                                  |
  9. |   This module contains code to test the EMS support in a DOS environment. |
  10. +--------------------------------------------------------------------------*/
  11.  
  12. #include <dos.h>
  13. #include <stdio.h>
  14. #include <string.h>
  15. #include <stdlib.h>
  16. #include <alloc.h>
  17. #include "ems.h"
  18.  
  19. char copyright[] = "(c) 1992 4D Interactive Systems, Inc.  All rights reserved.";
  20.  
  21. int memverify(char *mem, int val, unsigned int len);
  22.  
  23. int main()
  24. {
  25.    int ret_value = 1;
  26.    int handle, x, num_physical, i, num_handles;
  27.    unsigned int free_pages;
  28.    char *memptr;
  29.    handle_directory_struct *hdir;
  30.  
  31.    printf("+---------------------------------------+\n");
  32.    printf("| EMS Test Program  Ver 1.0             |\n");
  33.    printf("| (c) 1992 4D Interactive Systems, Inc. |\n");
  34.    printf("+---------------------------------------+\n");
  35.    if (ems_init()) {
  36.       printf("An EMS Version %i.%i driver has been detected.\n",ems_version/16,ems_version & 15);
  37.       num_physical = ems_num_physical_pages();
  38.       if (ems_errnum != 0) {
  39.          printf("ERROR Getting number of physical pages, error number = %X\n",ems_errnum);
  40.          num_physical = 1;
  41.       }
  42.       printf("Page Frame = %X, consisting of %i pages.\n",ems_pageframe,num_physical);
  43.       free_pages = ems_num_free_pages(0);
  44.       if (ems_errnum != 0) {
  45.          printf("ERROR Getting EMS Number of fee pages, error number = %X.\n",ems_errnum);
  46.          ret_value = 0;
  47.       }
  48.       else {
  49.          printf("Number of apparent Free Pages = %u.\n",free_pages);
  50.          free_pages = ems_num_free_pages(1);
  51.          printf("Number of actual Free Pages = %u.\n",free_pages);
  52.          if (free_pages > 0) {
  53.             handle = ems_alloc(1,"EMSTEST");
  54.             if (handle < 0) {
  55.                printf("ERROR Allocating 1 page, error number = %X\n",ems_errnum);
  56.                ret_value = 0;
  57.             }
  58.             else {
  59.                printf("Sucessfully allocated 1 page.\n");
  60.                if (ems_save_mapping_context(handle) != 0) {
  61.                   printf("ERROR Saving the mapping context, error number = %X\n",ems_errnum);
  62.                }
  63.                else {
  64.                   printf("Sucessfully saved the mapping context.\n");
  65.                   for (i=0; i<num_physical; i++) {
  66.                      if (ems_map_page(handle,0,i) != 0) {
  67.                         printf("ERROR Mapping page %i, error number = %X\n",i,ems_errnum);
  68.                         ret_value = 0;
  69.                      }
  70.                      else {
  71.                         printf("Sucessfully mapped to physical page %i, testing memory now...",i);
  72.                         memptr = MK_FP(ems_pageframe+i*0x400,0);
  73.                         memset(memptr,0,0x4000);
  74.                         x = memverify(memptr,0,0x4000);
  75.                         if (x != 0) {
  76.                            memset(memptr,0xFF,0x4000);
  77.                            x = memverify(memptr,0,0x4000);
  78.                         }
  79.                         if (x != 0) {
  80.                            memset(memptr,0x55,0x4000);
  81.                            x = memverify(memptr,0x55,0x4000);
  82.                         }
  83.                         if (x != 0) {
  84.                            printf("FAILED!\n");
  85.                            ret_value = 0;
  86.                         }
  87.                         else {
  88.                            printf("Good.\n");
  89.                         }
  90.                         ems_unmap_page(handle,i);
  91.                         if (ems_errnum != 0) {
  92.                            printf("ERROR Unmaping page %i, error number = %X\n",i,ems_errnum);
  93.                            ret_value = 0;
  94.                         }
  95.                      }
  96.                   }
  97.                   if (ems_restore_mapping_context(handle) != 0) {
  98.                      printf("ERROR Restoring the mapping context, error number = %X\n",ems_errnum);
  99.                   }
  100.                   else {
  101.                      printf("Sucessfully restored the mapping context.\n");
  102.                   }
  103.                }
  104.                num_handles = ems_num_open_handles();
  105.                if (ems_errnum != 0) {
  106.                   printf("ERROR Getting number of open handles, error number = %X\n",ems_errnum);
  107.                   ret_value = 0;
  108.                }
  109.                else {
  110.                   printf("Number of EMS open handles = %i\n",num_handles);
  111.                   hdir = (handle_directory_struct *) malloc(num_handles * sizeof(handle_directory_struct));
  112.                   if (ems_get_handle_directory(hdir) != 0) {
  113.                      printf("ERROR Getting handle directory, function = %X, error number = %X\n",ems_function,ems_errnum);
  114.                      ret_value = 0;
  115.                   }
  116.                   else {
  117.                      printf("EMS Handle Directory:\n    Handle Size Name\n");
  118.                      for (i=0; i<num_handles; i++) {
  119.                         printf("    %6u %4u %s\n",(hdir+i)->handle,(hdir+i)->num_pages,(hdir+i)->handle_name);
  120.                      }
  121.                   }
  122.                   free(hdir);
  123.                }
  124.                if (ems_free(handle) != 0) {
  125.                   printf("ERROR Freeing 1 page, error number = %X\n",ems_errnum);
  126.                   ret_value = 0;
  127.                }
  128.                else {
  129.                   printf("Sucessfully freed 1 page.\n");
  130.                }
  131.             }
  132.          }
  133.       }
  134.    }
  135.    else {
  136.       ret_value = 0;
  137.       if (ems_function < 3) {
  138.          printf("No EMS driver detected.\n");
  139.       }
  140.       else {
  141.          printf("EMS Error %X calling function %X\n",ems_errnum,ems_function);
  142.       }
  143.    }
  144.    return ret_value;
  145. }
  146.  
  147. int memverify(char *mem, int val, unsigned int len)
  148. {
  149.    do {
  150.       if (*(mem++) != val) {
  151.          break;
  152.       }
  153.    } while (--len > 0);
  154.    return len;
  155. }
  156.