From 8a9fd3f93bb3db2d969126913eedab023dba013f Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Thu, 13 Nov 2008 22:07:24 +0000 Subject: Remove AllocateMemory, FreeMemory, MoveMemory, ErrorExit, and ReportError functions git-svn-id: svn://mattst88.com/svn/cleanbench/trunk@17 0d43b9a7-5ab2-4d7b-af9d-f64450cef757 --- sysspec.c | 363 -------------------------------------------------------------- 1 file changed, 363 deletions(-) (limited to 'sysspec.c') diff --git a/sysspec.c b/sysspec.c index 0f4e580..402294d 100644 --- a/sysspec.c +++ b/sysspec.c @@ -36,320 +36,6 @@ */ #include "sysspec.h" -#ifdef DOS16 -#include -#include -#include -#endif -/********************************* -** MEMORY MANAGEMENT ROUTINES ** -*********************************/ - - -/**************************** -** AllocateMemory -** This routine returns a void pointer to a memory -** block. The size of the memory block is given in bytes -** as the first argument. This routine also returns an -** error code in the second argument. -** 10/95 Update: -** Added an associative array for memory alignment reasons. -** mem_array[2][MEM_ARRAY_SIZE] -** mem_array[0][n] = Actual address (from malloc) -** mem_array[1][n] = Aligned address -** Currently, mem_array[][] is only used if you use malloc; -** it is not used for the 16-bit DOS and MAC versions. -*/ -void *AllocateMemory(unsigned long nbytes, /* # of bytes to alloc */ - int *errorcode) /* Returned error code */ -{ -#ifdef DOS16MEM -union REGS registers; -unsigned short nparas; /* # of paragraphs */ - -/* -** Set # of paragraphs to nbytes/16 +1. The +1 is a -** slop factor. -*/ -nparas=(unsigned short)(nbytes/16L) + 1; - -/* -** Set incoming registers. -*/ -registers.h.ah=0x48; /* Allocate memory */ -registers.x.bx=nparas; /* # of paragraphs */ - - -intdos(®isters,®isters); /* Call DOS */ - -/* -** See if things succeeded. -*/ -if(registers.x.cflag) -{ printf("error: %d Lgst: %d\n",registers.x.ax,registers.x.bx); - *errorcode=ERROR_MEMORY; - return((void *)NULL); -} - -/* -** Create a void pointer to return. -*/ -*errorcode=0; -return((void *)MK_FP(registers.x.ax,0)); - -#endif - -#ifdef MACMEM -/* -** For MAC CodeWarrior, we'll use the MacOS NewPtr call -*/ -void *returnval; -returnval=(void *)NewPtr((Size)nbytes); -if(returnval==(void *)NULL) - *errorcode=ERROR_MEMORY; -else - *errorcode=0; -return(returnval); -#endif - -#ifdef MALLOCMEM -/* -** Everyone else, its pretty straightforward, given -** that you use a 32-bit compiler which treats size_t as -** a 4-byte entity. -*/ -void *returnval; /* Return value */ -ulong true_addr; /* True address */ -ulong adj_addr; /* Adjusted address */ - -returnval=(void *)malloc((size_t)(nbytes+2L*(long)global_align)); -if(returnval==(void *)NULL) - *errorcode=ERROR_MEMORY; -else - *errorcode=0; - -/* -** Check for alignment -*/ -adj_addr=true_addr=(ulong)returnval; -if(global_align==0) -{ - if(AddMemArray(true_addr, adj_addr)) - *errorcode=ERROR_MEMARRAY_FULL; - return(returnval); -} - -if(global_align==1) -{ - if(true_addr%2==0) adj_addr++; -} -else -{ - while(adj_addr%global_align!=0) ++adj_addr; - if(adj_addr%(global_align*2)==0) adj_addr+=global_align; -} -returnval=(void *)adj_addr; -if(AddMemArray(true_addr,adj_addr)) - *errorcode=ERROR_MEMARRAY_FULL; -return(returnval); -#endif - -} - - -/**************************** -** FreeMemory -** This is the reverse of AllocateMemory. The memory -** block passed in is freed. Should an error occur, -** that error is returned in errorcode. -*/ -void FreeMemory(void *mempointer, /* Pointer to memory block */ - int *errorcode) -{ -#ifdef DOS16MEM -/* -** 16-bit DOS VERSION!! -*/ -unsigned int segment; -unsigned int offset; -union REGS registers; -struct SREGS sregisters; - -/* -** First get the segment/offset of the void pointer. -*/ -segment=FP_SEG(mempointer); -offset=FP_OFF(mempointer); - -/* -** Align the segment properly. For as long as offset > 16, -** subtract 16 from offset and add 1 to segment. -*/ -while(offset>=16) -{ offset-=16; - segment++; -} - -/* -** Build the call to DOS -*/ -registers.h.ah=0x49; /* Free memory */ -sregisters.es=segment; - -intdosx(®isters,®isters,&sregisters); - -/* -** Check for error -*/ -if(registers.x.cflag) -{ *errorcode=ERROR_MEMORY; - return; -} - -*errorcode=0; -return; -#endif - -#ifdef MACMEM -DisposPtr((Ptr)mempointer); -*errorcode=0; -return; -#endif - -#ifdef MALLOCMEM -ulong adj_addr, true_addr; - -/* Locate item in memory array */ -adj_addr=(ulong)mempointer; -if(RemoveMemArray(adj_addr, &true_addr)) -{ *errorcode=ERROR_MEMARRAY_NFOUND; - return; -} -mempointer=(void *)true_addr; -free(mempointer); -*errorcode=0; -return; -#endif -} - -/**************************** -** MoveMemory -** Moves n bytes from a to b. Handles overlap. -** In most cases, this is just a memmove operation. -** But, not in DOS....noooo.... -*/ -void MoveMemory( void *destination, /* Destination address */ - void *source, /* Source address */ - unsigned long nbytes) -{ - -/* +++16-bit DOS VERSION+++ */ -#ifdef DOS16MEM - - FarDOSmemmove( destination, source, nbytes); - -#else - -memmove(destination, source, nbytes); - -#endif -} - -#ifdef DOS16MEM - -/**************************** -** FarDOSmemmove -** Performs the same function as memmove for DOS when -** the arrays are defined with far pointers. -*/ -void FarDOSmemmove(void *destination, /* Destination pointer */ - void *source, /* Source pointer */ - unsigned long nbytes) /* # of bytes to move */ -{ -unsigned char huge *uchsource; /* Temp source */ -unsigned char huge *uchdest; /* Temp destination */ -unsigned long saddr; /* Source "true" address */ -unsigned long daddr; /* Destination "true" address */ - - -/* -** Get unsigned char pointer equivalents -*/ -uchsource=(unsigned char huge *)source; -uchdest=(unsigned char huge *)destination; - -/* -** Calculate true address of source and destination and -** compare. -*/ -saddr=(unsigned long)(FP_SEG(source)*16 + FP_OFF(source)); -daddr=(unsigned long)(FP_SEG(destination)*16 + FP_OFF(destination)); - -if(saddr > daddr) -{ - /* - ** Source is greater than destination. - ** Use a series of standard move operations. - ** We'll move 65535 bytes at a time. - */ - while(nbytes>=65535L) - { _fmemmove((void *)uchdest, - (void *)uchsource, - (size_t) 65535); - uchsource+=65535; /* Advance pointers */ - uchdest+=65535; - nbytes-=65535; - } - - /* - ** Move remaining bytes - */ - if(nbytes!=0L) - _fmemmove((void *)uchdest, - (void *)uchsource, - (size_t)(nbytes & 0xFFFF)); - -} -else -{ - /* - ** Destination is greater than source. - ** Advance pointers to the end of their - ** respective blocks. - */ - uchsource+=nbytes; - uchdest+=nbytes; - - /* - ** Again, move 65535 bytes at a time. However, - ** "back" the pointers up before doing the - ** move. - */ - while(nbytes>=65535L) - { - uchsource-=65535; - uchdest-=65535; - _fmemmove((void *)uchdest, - (void *)uchsource, - (size_t) 65535); - nbytes-=65535; - } - - /* - ** Move remaining bytes. - */ - if(nbytes!=0L) - { uchsource-=nbytes; - uchdest-=nbytes; - _fmemmove((void *)uchdest, - (void *)uchsource, - (size_t)(nbytes & 0xFFFF)); - } -} -return; -} -#endif - /*********************************** ** MEMORY ARRAY HANDLING ROUTINES ** ***********************************/ @@ -721,55 +407,6 @@ return; } #endif - -/******************************** -** ERROR HANDLING ROUTINES ** -********************************/ - -/**************************** -** ReportError -** Report error message condition. -*/ -void ReportError(const char *errorcontext, /* Error context string */ - int errorcode) /* Error code number */ -{ - -/* -** Display error context -*/ -printf("ERROR CONDITION\nContext: %s\n",errorcontext); - -/* -** Display code -*/ -printf("Code: %d",errorcode); - -return; -} - -/**************************** -** ErrorExit -** Peforms an exit from an error condition. -*/ -void ErrorExit() -{ - -/* -** For profiling on the Mac with MetroWerks -- 11/17/94 RG -** Have to do this to turn off profiler. -*/ -#ifdef MACCWPROF -#if __profile__ -ProfilerTerm(); -#endif -#endif - -/* -** FOR NOW...SIMPLE EXIT -*/ -exit(1); -} - /***************************** ** STOPWATCH ROUTINES ** *****************************/ -- cgit v1.2.3