blob: a2c655b4a35b57e83d0de900981c6fc9aff98264 [file] [log] [blame]
/****************************************************************************
*
* SciTech OS Portability Manager Library
*
* ========================================================================
*
* The contents of this file are subject to the SciTech MGL Public
* License Version 1.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.scitechsoft.com/mgl-license.txt
*
* Software distributed under the License is distributed on an
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
*
* The Initial Developer of the Original Code is SciTech Software, Inc.
* All Rights Reserved.
*
* ========================================================================
*
*
* Language: ANSI C
* Environment: any
*
* Description: Test program to determine just how much memory can be
* allocated with the compiler in use. Compile and link
* with the appropriate command line for your DOS extender.
*
* Functions tested: PM_malloc()
* PM_availableMemory()
*
*
****************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "pmapi.h"
#ifdef __16BIT__
#define MAXALLOC 64
#else
#define MAXALLOC 2000
#endif
int main(void)
{
int i;
ulong allocs;
ulong physical,total;
char *p,*pa[MAXALLOC];
printf("Program running in ");
switch (PM_getModeType()) {
case PM_realMode:
printf("real mode.\n\n");
break;
case PM_286:
printf("16 bit protected mode.\n\n");
break;
case PM_386:
printf("32 bit protected mode.\n\n");
break;
}
printf("Memory available at start:\n");
PM_availableMemory(&physical,&total);
printf(" Physical memory: %ld Kb\n", physical / 1024);
printf(" Total (including virtual): %ld Kb\n", total / 1024);
printf("\n");
for (allocs = i = 0; i < MAXALLOC; i++) {
if ((pa[i] = PM_malloc(10*1024)) != 0) { /* in 10k blocks */
p = pa[allocs];
memset(p, 0, 10*1024); /* touch every byte */
*p = 'x'; /* do something, anything with */
p[1023] = 'y'; /* the allocated memory */
allocs++;
printf("Allocated %lu bytes\r", 10*(allocs << 10));
}
else break;
if (PM_kbhit() && (PM_getch() == 0x1B))
break;
}
printf("\n\nAllocated total of %lu bytes\n", 10 * (allocs << 10));
printf("\nMemory available at end:\n");
PM_availableMemory(&physical,&total);
printf(" Physical memory: %ld Kb\n", physical / 1024);
printf(" Total (including virtual): %ld Kb\n", total / 1024);
for (i = allocs-1; i >= 0; i--)
PM_free(pa[i]);
printf("\nMemory available after freeing all blocks (note that under protected mode\n");
printf("this will most likely not be correct after freeing blocks):\n\n");
PM_availableMemory(&physical,&total);
printf(" Physical memory: %ld Kb\n", physical / 1024);
printf(" Total (including virtual): %ld Kb\n", total / 1024);
return 0;
}