home *** CD-ROM | disk | FTP | other *** search
- ;
- ; uLLRICH VON bASSEWITZ, 2003-02-01
- ;
- ; rETURN THE SIZE OF THE LARGEST FREE BLOCK ON THE HEAP.
- ;
- ; SIZE_T __FASTCALL__ _HEAPMAXAVAIL (VOID);
- ;
- ;
-
- .IMPORTZP PTR1, PTR2
- .IMPORT __HPTR, __HFIRST, __HLAST, __HEND
- .EXPORT __HEAPMAXAVAIL
-
- .INCLUDE "_HEAP.INC"
-
- .MACPACKGENERIC
-
- ;-----------------------------------------------------------------------------
- ; cODE
-
- __HEAPMAXAVAIL:
-
- ; SIZE_T sIZE = (_HEND - _HPTR) * SIZEOF (*_HEND);
-
- LDA __HEND
- SUB __HPTR
- STA PTR2
- LDA __HEND+1
- SBC __HPTR+1
- STA PTR2+1
-
- ; STRUCT FREEBLOCK* f = _HFIRST;
-
- LDA __HFIRST
- STA PTR1
- LDA __HFIRST+1
- @l1: STA PTR1+1
-
- ; WHILE (f) {$7b}
-
- ORA PTR1
- BEQ @l3 ; jUMP IF END OF FREE LIST REACHED
-
- ; IF (sIZE < f->SIZE) {$7b}
-
- LDY #FREEBLOCK_SIZE
- LDA PTR2
- SUB (PTR1),Y
- INY
- LDA PTR2+1
- SBC (PTR1),Y
- BCS @l2
-
- ; sIZE = f->SIZE;
-
- LDY #FREEBLOCK_SIZE
- LDA (PTR1),Y
- STA PTR2
- INY
- LDA (PTR1),Y
- STA PTR2+1
-
- ; f = f->NEXT;
-
- @l2: INY ; pOINTS TO f->NEXT
- LDA (PTR1),Y
- TAX
- INY
- LDA (PTR1),Y
- STX PTR1
- JMP @l1
-
- ; RETURN sIZE;
-
- @l3: LDA PTR2
- LDX PTR2+1
- RTS
-
-