IMPLEMENTATION MODULE MemUtils ;
FROM SYSTEM IMPORT WORD, BYTE, TSIZE ;
PROCEDURE MemCopy (from: ADDRESS; length: CARDINAL; to: ADDRESS) ;
VAR
pwb, pwa: POINTER TO WORD ;
pbb, pba: POINTER TO BYTE ;
BEGIN
WHILE length>=TSIZE(WORD) DO
pwa := from ;
pwb := to ;
pwb^ := pwa^ ;
INC(from , TSIZE(WORD)) ;
INC(to , TSIZE(WORD)) ;
DEC(length, TSIZE(WORD))
END ;
WHILE length>0 DO
pba := from ;
pbb := to ;
pbb^ := pba^ ;
INC(from , TSIZE(BYTE)) ;
INC(to , TSIZE(BYTE)) ;
DEC(length, TSIZE(BYTE))
END
END MemCopy ;
PROCEDURE MemZero (a: ADDRESS; length: CARDINAL) ;
VAR
pwa: POINTER TO WORD ;
pba: POINTER TO BYTE ;
BEGIN
pwa := a ;
WHILE length>=TSIZE(WORD) DO
pwa^ := WORD(0) ;
INC(pwa, TSIZE(WORD)) ;
DEC(length, TSIZE(WORD))
END ;
pba := ADDRESS(pwa) ;
WHILE length>=TSIZE(BYTE) DO
pba^ := BYTE(0) ;
INC(pba, TSIZE(BYTE)) ;
DEC(length, TSIZE(BYTE))
END
END MemZero ;
END MemUtils.