#pragma option w32c
#jumptomain NONE

#define  usememcheck    //эту строчку можно поставить в #ifndef release

#include "memcheck.hmm"
//memcheck включать обязательно до windows.h--!!!

#define  _WINBASE_
#include "windows.h--"

#define  useregcheck
#include "regcheck.hmm"


testregisters()
dword somevar;
{
  CHECKREGSINIT("testregisters",CHECKREGSESI);//проверяем всё кроме ESI
  //этот макрос создаёт в стеке класс CheckRegistersClass и вызывает конструктор

  EBX++;
  ESI++;
  $push EBX

  //деструктор автоматически вызывается и сравнивает регистры с сохранёнными.
  //причём даже если функция вызывается многократно и каждый раз регистр
  //портится, вывод на экран всё равно происходит один раз
}

main()
{
  dword h1;
  dword h2;

  gmeminit();
  //этот вызов при подключённом модуле memcheck должен быть обязательно.

  h1=GlobalAlloc(GMEM_FIXED,1024);
  h2=LocalAlloc(GMEM_FIXED,1024);

  testregisters();

  GlobalFree(h1);
  GlobalFree(h1);       //попытка повторного освобождения блока
  LocalFree(0);         //освобождение фигни

  //у нас остался неосвобождённым h2
  gmemdone();
}