home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / PNL Libraries / MyHandles.p < prev    next >
Encoding:
Text File  |  1995-10-03  |  3.0 KB  |  102 lines  |  [TEXT/CWIE]

  1. unit MyHandles;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Memory;
  7.  
  8.     type
  9.         HandleArray = ^Ptr;
  10.  
  11.     function HandleArrayCreate (var hhhh: HandleArray; size: longint): OSErr;
  12.     procedure HandleArrayDestroy (var hhhh: HandleArray);
  13.     function HandleArrayCount (hhhh: HandleArray): longint;
  14.     function HandleArrayGetSize (hhhh: HandleArray): longint;
  15.     function HandleArrayAppend (hhhh: HandleArray; data: ptr): OSErr;
  16.     function HandleArrayInsert (hhhh: HandleArray; index: longint; data: ptr): OSErr;
  17.     procedure HandleArrayGet (hhhh: HandleArray; index: longint; data: ptr);
  18.     procedure HandleArraySet (hhhh: HandleArray; index: longint; data: ptr);
  19.     procedure HandleArrayDelete (hhhh: HandleArray; index: longint);
  20.     procedure HandleArrayReset (hhhh: HandleArray);
  21.  
  22. implementation
  23.  
  24.     uses
  25.         OSUtils, ToolUtils, MyAssertions, MyTypes, MyMemory;
  26.  
  27.     function HandleArrayCreate (var hhhh: HandleArray; size: longint): OSErr;
  28.         var
  29.             err: OSErr;
  30.     begin
  31.         err := MNewHandle(hhhh, SizeOf(longint));
  32.         if err = noErr then begin
  33.             longIntH(hhhh)^^ := size;
  34.         end;
  35.         HandleArrayCreate := err;
  36.     end;
  37.  
  38.     procedure HandleArrayDestroy (var hhhh: HandleArray);
  39.     begin
  40.         DisposeHandle(Handle(hhhh));
  41.         hhhh := nil;
  42.     end;
  43.  
  44.     procedure HandleArrayReset (hhhh: HandleArray);
  45.     begin
  46.         Assert(hhhh <> nil);
  47.         SetHandleSize(Handle(hhhh), SizeOf(longint));
  48.     end;
  49.  
  50.     function HandleArrayCount (hhhh: HandleArray): longint;
  51.     begin
  52.         Assert(hhhh <> nil);
  53.         HandleArrayCount := (GetHandleSize(Handle(hhhh)) - SizeOf(longint)) div longIntH(hhhh)^^;
  54.     end;
  55.  
  56.     function HandleArrayGetSize (hhhh: HandleArray): longint;
  57.     begin
  58.         Assert(hhhh <> nil);
  59.         if GetHandleSize(Handle(hhhh)) > SizeOf(longint) then begin
  60.             HandleArrayGetSize := longIntH(hhhh)^^;
  61.         end
  62.         else begin
  63.             HandleArrayGetSize := -1;
  64.         end;
  65.     end;
  66.  
  67.     function HandleArrayAppend (hhhh: HandleArray; data: ptr): OSErr;
  68.     begin
  69.         Assert(hhhh <> nil);
  70.         HandleArrayAppend := PtrAndHand(data, Handle(hhhh), longIntH(hhhh)^^);
  71.     end;
  72.  
  73.     function HandleArrayInsert (hhhh: HandleArray; index: longint; data: ptr): OSErr;
  74.         var
  75.             pos: longint;
  76.     begin
  77.         Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh) + 1));
  78.         pos := Munger(Handle(hhhh), SizeOf(longint) + (index - 1) * longIntH(hhhh)^^, nil, 0, data, longIntH(hhhh)^^);
  79.         HandleArrayInsert := MemError;
  80.     end;
  81.  
  82.     procedure HandleArrayGet (hhhh: HandleArray; index: longint; data: ptr);
  83.     begin
  84.         Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
  85.         BlockMoveData(ptr(ord(hhhh^) + SizeOf(longint) + (index - 1) * longIntH(hhhh)^^), data, longIntH(hhhh)^^);
  86.     end;
  87.  
  88.     procedure HandleArraySet (hhhh: HandleArray; index: longint; data: ptr);
  89.     begin
  90.         Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
  91.         BlockMoveData(data, ptr(ord(hhhh^) + SizeOf(longint) + (index - 1) * longIntH(hhhh)^^), longIntH(hhhh)^^);
  92.     end;
  93.  
  94.     procedure HandleArrayDelete (hhhh: HandleArray; index: longint);
  95.         var
  96.             pos: longint;
  97.     begin
  98.         Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
  99.         pos := Munger(Handle(hhhh), SizeOf(longint) + (index - 1) * longIntH(hhhh)^^, nil, longIntH(hhhh)^^, @hhhh, 0);
  100.     end;
  101.  
  102. end.