14.4.6 Macpas: UNIV typed parameters

In Macpas mode, you can specify a UNIV (universal) parameter. This signifies that any parameter with the exact same byte size as the declared parameter can be passed as the value of the parameter: Given the following procedure declaration:

procedure HDispose( var theHandle: univ Handle);

You can pass value of any type that has the same size as Handle.

This comes in especially handy for typed procedures. Given the following definition:

Type
  TComparer = function (theIndex: Int32; theValuePtr : univ Pointer): boolean;

function Find(
      theValuePtr    : univ UnivPtr;
      theFirstIndex  : Int32;
      theLastIndex   : Int32;
      SmallerThan    : TComparer;
      EqualTo        : TComparer;
      var theFoundIndex   : Int32): boolean;

You can call Find as follows

 Result:=Find(@theCmdID,1,kCmdCount,IsSmallerThan, IsEqualTo,aIndex):

Where the two functions IsSmallerThan and IsEqualTo are defined as:

function IsSmallerThan(theIndex : Int32; aPtr : PtrInt): boolean;
function IsEqualTo(theIndex : Int32; aPtr  : PtrInt): boolean

Because PtrInt has the same size as Pointer, this will compile.