[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]

    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.

[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]