home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / VOL8N11.ZIP / SHOWXMEM.C < prev    next >
Text File  |  1989-02-01  |  3KB  |  79 lines

  1. /*
  2.     SHOWXMEM.C  Demonstrates use of GETXM and PUTXM routines
  3.                 in EXTMEM.ASM.  Prompts for a physical (linear)
  4.                 memory address, then displays 64 bytes of memory
  5.                 beginning at that address in hex and ASCII.
  6.  
  7.     Compile:    MASM /Mx /Zi EXTMEM;
  8.                 CL /Zi SHOWXMEM.C EXTMEM
  9.  
  10.     Usage:      SHOWXMEM (press <Enter>, ^Break or ^C to exit)
  11.  
  12.     Copyright (C) 1989 Ziff Davis Communications
  13.     PC Magazine * Ray Duncan
  14. */
  15.  
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18.  
  19. #define BUFSIZE 64
  20.  
  21.                                     /* prototypes for EXTMEM.ASM */
  22. extern getxm(unsigned long, char far *, unsigned);
  23. extern putxm(char far *, unsigned long, unsigned);
  24.  
  25. main()
  26. {   
  27.     char buffer[BUFSIZE];           /* receives extended memory data */
  28.     char input[80];                 /* keyboard input buffer */
  29.     char *stopstr;                  /* receives pointer from strtoul */
  30.     unsigned long xmemaddr;         /* linear extended memory address */
  31.     int i;                          /* scratch variable */
  32.  
  33.     while(1)
  34.     {                               /* get & convert starting address */
  35.         printf("\n\nEnter extended memory address (hex): ");
  36.         gets(input);            
  37.         if(input[0] == 0) break;
  38.         xmemaddr = strtoul(input, &stopstr, 16);
  39.  
  40.         if(xmemaddr > 0xffffff) /* check if address too large */
  41.         {
  42.             printf("\nInvalid extended memory address!");
  43.             continue;
  44.         }
  45.  
  46.         xmemaddr &= 0xfffff0;       /* round down to paragraph boundary */
  47.  
  48.                                     /* fetch from extended memory */
  49.         if(getxm(xmemaddr, buffer, BUFSIZE))
  50.         {
  51.             printf("\nExtended memory read error!");
  52.             continue;
  53.         }
  54.                                     /* display heading and data */
  55.         printf("\n\t  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F");
  56.         for(i = 0; i < BUFSIZE; i += 16) dump16(buffer+i, xmemaddr+i);
  57.     }
  58. }
  59.  
  60. /*
  61.     Display 16 bytes from local buffer at specified starting address
  62. */
  63. dump16(char *buffer, unsigned long xmemaddr)
  64. {   
  65.     int i;                          /* index to local buffer */
  66.  
  67.     printf("\n%06lX\t", xmemaddr);  /* extended memory address */
  68.  
  69.     for(i = 0; i < 16; i++)         /* display hex for each byte */
  70.         printf(" %02X", (unsigned char) buffer[i]);
  71.  
  72.     printf("  ");                   
  73.     for(i = 0; i < 16; i++)         /* display ASCII for each byte */
  74.     {   
  75.         if(buffer[i] < 32 || buffer[i] > 126) putchar('.');
  76.         else putchar(buffer[i]);
  77.     }
  78.