/*
* Jerzy Tomasik, 09-Jun-1991
*
* Utility functions for determining unused stack space.
* Supports Microsoft and Turbo C
*/
#include <stdlib.h>
#include <stdio.h>
#if defined( _MSC_VER )
#include <malloc.h>
extern char end; /* bottom of Microsoft stack */
static char marker = 'J'; /* "signature" byte */
/* determine unused stack space, normally this function
* is called at program termination, but it can be
* called at other times.
* Microsoft version
*/
unsigned short unused_stack(void)
{
unsigned short unused = 0;
char *ptr;
ptr = &end;
while(*ptr++ == marker)
unused++;
return(unused);
}
/* "paint" the stack with the signature byte */
void spray_stack(void)
{
char *ptr, *stack_top;
stack_top = &end + stackavail();
ptr = &end;
do
{
*ptr++ = marker;
} while( ptr < stack_top);
}
#elif defined ( _TURBOC_ )
#include <dos.h>
static char marker = 'J'; /* "signature" byte */
static char far *bottom;
/* determine unused stack space, normally this function
* is called at program termination, but it can be
* called at other times.
* Turbo C version
*/
void spray_stack(void)
{
char far *ptr;
#if defined ( _SMALL_ ) || defined ( _MEDIUM_ )
extern unsigned int _stklen;
ptr = (char *) MK_FP ( _DS, (_SP - 0x100));
bottom = (char *) MK_FP( _DS, (0xFFFF - _stklen));
#elif defined ( _COMPACT_ ) || defined ( _LARGE_ )
ptr = (char *) MK_FP( _SS, (_SP - 0x100));
bottom = (char *) MK_FP( _ SS, 0x00 );
#endif
for( ; ptr > bottom; *ptr-- = marker )
;
}
unsigned short unused_stack(void)
{
unsigned short unused = 0;
char far *ptr;
ptr = bottom + 1;
while (*ptr++ == marker)
unused++;
return(unused);
}
#endif
/* End of File */