program RunTime213; { Written by: Michele Mottini TERA S.r.l. CIS 100040,615 } uses WinCrt, WinTypes, WinProcs, Objects; {-------------------- Class TErrCollection : collection with error management } { You can freely descend your own collection from TErrCollection getting automatically enhanced run time error management. } type PErrCollection = ^TErrCollection; TErrCollection = object(TCollection) procedure Error(Code,Info : integer); virtual; end; procedure TErrCollection.Error(Code,Info : integer); var ErrDesc : record ErrCode : integer; ErrPosHi : word; ErrPosLo : word; ErrIndex : integer; ErrCount : integer; end; Buffer : array[0..80] of char; begin asm mov cx,[BP+20] mov bx,[BP+22] verr bx je @1 mov bx,$FFFF mov cx,bx jmp @2 @1: mov es,bx mov bx,word ptr es:0 @2: mov ErrDesc.ErrPosLo,cx mov ErrDesc.ErrPosHi,bx end; ErrDesc.ErrCode := 212-Code; ErrDesc.ErrIndex := Info; ErrDesc.ErrCount := Count; WVSPrintF(Buffer,'Runtime error %d at %04X:%04X with index %d; Count=%d',ErrDesc); MessageBox(0,Buffer,nil,mb_Ok or mb_SystemModal); halt(0); end; { Error } {----------------------------------------------------------------------- Main } var TestColl : TErrCollection; begin TestColl.Init(16,8); writeln('Now the program call the At() function with an invalid index'); writeln('causing a R/Time error 213'); writeln; writeln('If you try to find the error position from the address you will'); writeln('go to the correct line!'); TestColl.At(1); { Wrong index: we will get a 213 R/Time error } TestColl.Done; end.