1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-11 14:41:06 +02:00
2010-01-24 09:19:39 +00:00

108 lines
2.6 KiB
C

/****************************************************************************
cext.c
Copyright 1989 Carnegie Mellon University
August 3, 1987
Author: Frits Habermann
----------------------------------------------------------------------------
02-May-1988 | JCD : portable & AMIGA version.
17-Oct-1988 | JCD : more portability (FREE).
28-Apr-2003 | DM : changed includes for portability
****************************************************************************/
#include "switches.h"
#include <stdio.h>
#include <stdlib.h>
#include "cext.h"
#include "userio.h"
#define calc_middle(top, bot) (((top - bot) / 2 ) + bottom )
#define kbyte 1000
#define outof_mem(blocksize) (blocksize == 0 )
#define done_search(top, bot, middle) ( (( (top - bot) < kbyte ) && \
( !toomuch_mem(middle)) ) || \
( outof_mem( middle )) )
private boolean toomuch_mem(ushort maximum)
{
char *test;
boolean istoo_much;
istoo_much = ( (test = (char *) MALLOC(maximum)) == NULL );
if (test) FREE(test);
return( istoo_much );
}
private boolean toolittle_mem(maximum)
ushort maximum;
{
char *test;
boolean istoo_little;
istoo_little = !( (test = (char *) MALLOC(maximum)) == NULL );
if (test) FREE( test );
return(istoo_little);
}
private ushort get_biggest_block( maximum )
ushort maximum;
{
ushort maxblock;
ushort top = maximum;
ushort bottom = 0;
if (!toomuch_mem(maximum)) return(maximum); /* If there's enough memory */
else {
gprintf(ERROR, "Running out of memory...\n");
maxblock = calc_middle( top, bottom );
while( !done_search(top, bottom, maxblock) ) {
if( toomuch_mem(maxblock) ) {
top = maxblock;
maxblock = calc_middle(top,bottom);
}
else if (toolittle_mem(maxblock)) {
bottom = maxblock;
maxblock = calc_middle(top,bottom);
}
}
}
return( maxblock );
}
public ulong MyMaxMem(ushort *growbytes)
{
ulong x;
if( growbytes != NULL ) *growbytes = 0;
x=( (ulong)get_biggest_block((ushort)BIGGEST_BLOCK));
/* gprintf(TRANS,"cext: MyMaxMem %ld\n",x); */
return x;
}
/* note: EXIT is defined to be cmt_exit */
void cmt_exit(n)
int n;
{
cu_cleanup();
/* For protection, exit is #defined to hide it. Expose it and call it. */
#undef exit
exit(n);
}
#ifdef AMIGA
#ifdef LATTICE
/* for some reason, these don't seem to be defined
anywhere in the standard libraries
*/
#include "signal.h"
int _FPERR;
int (*_SIGFPE)(int) = SIG_DFL;
int _oserr;
#endif
#endif