Initial commit

This commit is contained in:
Gwen Gourevich
2021-10-27 10:34:18 +02:00
parent 43ad18eb04
commit c5f4f6ba25
199 changed files with 73169 additions and 0 deletions

175
LIB386/LIB_SYS/HQ_MEM.C Normal file
View File

@@ -0,0 +1,175 @@
#include <i86.h>
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include "\projet\lib386\lib_sys\adeline.h"
#include "\projet\lib386\lib_sys\lib_sys.h"
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
Û Û ÛßßßÛ ÛÜ ÜÛ Ûßßßß ÛÜ ÜÛ ÛßßßÛ ÛßßßÛ Û Üß
ÛÛßßÛ ÛÛ ÜÛ ÛÛß Û ÛÛßß ÛÛß Û ÛÛ Û ÛÛßÛß ÛÛß
ßß ß ßßßß ßßßßß ßß ß ßßßßß ßß ß ßßßßß ßß ß ßß
*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
ULONG Size_HQM_Memory = 0 ;
ULONG Size_HQM_Free = 0 ;
UBYTE *Ptr_HQM_Memory = 0 ;
UBYTE *Ptr_HQM_Next = 0 ;
typedef struct { ULONG Id ;
ULONG Size ;
void **Ptr ; } HQM_HEADER ;
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
// Init le buffer global
LONG HQM_Init_Memory( ULONG size )
{
if( !Ptr_HQM_Memory )
{
Ptr_HQM_Memory = Malloc( size + 500 ) ; // recover area
if( Ptr_HQM_Memory )
{
Size_HQM_Memory = size ;
Size_HQM_Free = size ;
Ptr_HQM_Next = Ptr_HQM_Memory ;
return TRUE ;
}
}
return FALSE ;
}
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
// free le buffer global
void HQM_Clear_Memory()
{
if( Ptr_HQM_Memory )
{
Free( Ptr_HQM_Memory ) ;
Size_HQM_Free = 0 ;
}
}
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
// alloue un bloc de memoire
LONG HQM_Alloc( ULONG size, void **ptr )
{
if( !Ptr_HQM_Memory )
{
*ptr = 0 ;
return FALSE ;
}
if( size <= (Size_HQM_Free + sizeof( HQM_HEADER )) )
{
*ptr = Ptr_HQM_Next + sizeof( HQM_HEADER ) ;
((HQM_HEADER*)Ptr_HQM_Next)->Id = 0x12345678 ;
((HQM_HEADER*)Ptr_HQM_Next)->Size = size ;
((HQM_HEADER*)Ptr_HQM_Next)->Ptr = ptr ;
Ptr_HQM_Next += size + sizeof( HQM_HEADER ) ;
Size_HQM_Free -= size + sizeof( HQM_HEADER ) ;
return TRUE ;
}
*ptr = 0 ;
return FALSE ; // pas assez de place
}
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
// free tous les blocs dans le buffer global
void HQM_Free_All()
{
if( Ptr_HQM_Memory )
{
Ptr_HQM_Next = Ptr_HQM_Memory ;
Size_HQM_Free = Size_HQM_Memory ;
}
}
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
// resize le dernier bloc de memoire
void HQM_Shrink_Last( void *ptr, ULONG newsize )
{
HQM_HEADER *ptrh ;
ULONG deltasize ;
if( !Ptr_HQM_Memory ) return ;
ptrh = (HQM_HEADER*)((UBYTE*)ptr - sizeof( HQM_HEADER )) ;
if( ptrh->Id != 0x12345678 ) return ; // erreur grave
deltasize = ptrh->Size - newsize ;
ptrh->Size -= deltasize ;
Ptr_HQM_Next -= deltasize ;
Size_HQM_Free += deltasize ;
}
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
// libere un bloc de memoire et bouche le trou (remap les ptrs)
void HQM_Free( void *ptr )
{
HQM_HEADER *ptrh ;
UBYTE *ptrs, *ptrd, *ptrm ;
ULONG delsize, movesize ;
if( !Ptr_HQM_Memory ) return ;
ptrs = ptrd = (UBYTE*)ptr - sizeof( HQM_HEADER ) ;
ptrh = (HQM_HEADER*)ptrd ;
if( ptrh->Id != 0x12345678 ) return ; // erreur grave
delsize = sizeof( HQM_HEADER ) + ptrh->Size ;
ptrs = ptrd + delsize ;
movesize = (ULONG)(Ptr_HQM_Next - ptrs) ;
ptrm = ptrs ;
while( ptrm < Ptr_HQM_Next )
{
ptrh = (HQM_HEADER*)ptrm ;
*(UBYTE*)(ptrh->Ptr) = *(UBYTE*)(ptrh->Ptr) - delsize ;
ptrm += ptrh->Size + sizeof( HQM_HEADER ) ;
}
memmove( ptrd, ptrs, movesize ) ;
Ptr_HQM_Next -= delsize ;
Size_HQM_Free += delsize ;
}
/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
// test la cohrence du buffer global
LONG HQM_Check()
{
HQM_HEADER *ptrh ;
UBYTE *ptr ;
if( !Ptr_HQM_Memory ) return FALSE ;
ptr = Ptr_HQM_Memory ;
while( ptr < Ptr_HQM_Next )
{
ptrh = (HQM_HEADER*)ptr ;
if( ptrh->Id != 0x12345678 ) return FALSE ;
ptr += ptrh->Size + sizeof( HQM_HEADER ) ;
}
return TRUE ;
}