home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-10-03 | 3.0 KB | 102 lines | [TEXT/CWIE] |
- unit MyHandles;
-
- interface
-
- uses
- Memory;
-
- type
- HandleArray = ^Ptr;
-
- function HandleArrayCreate (var hhhh: HandleArray; size: longint): OSErr;
- procedure HandleArrayDestroy (var hhhh: HandleArray);
- function HandleArrayCount (hhhh: HandleArray): longint;
- function HandleArrayGetSize (hhhh: HandleArray): longint;
- function HandleArrayAppend (hhhh: HandleArray; data: ptr): OSErr;
- function HandleArrayInsert (hhhh: HandleArray; index: longint; data: ptr): OSErr;
- procedure HandleArrayGet (hhhh: HandleArray; index: longint; data: ptr);
- procedure HandleArraySet (hhhh: HandleArray; index: longint; data: ptr);
- procedure HandleArrayDelete (hhhh: HandleArray; index: longint);
- procedure HandleArrayReset (hhhh: HandleArray);
-
- implementation
-
- uses
- OSUtils, ToolUtils, MyAssertions, MyTypes, MyMemory;
-
- function HandleArrayCreate (var hhhh: HandleArray; size: longint): OSErr;
- var
- err: OSErr;
- begin
- err := MNewHandle(hhhh, SizeOf(longint));
- if err = noErr then begin
- longIntH(hhhh)^^ := size;
- end;
- HandleArrayCreate := err;
- end;
-
- procedure HandleArrayDestroy (var hhhh: HandleArray);
- begin
- DisposeHandle(Handle(hhhh));
- hhhh := nil;
- end;
-
- procedure HandleArrayReset (hhhh: HandleArray);
- begin
- Assert(hhhh <> nil);
- SetHandleSize(Handle(hhhh), SizeOf(longint));
- end;
-
- function HandleArrayCount (hhhh: HandleArray): longint;
- begin
- Assert(hhhh <> nil);
- HandleArrayCount := (GetHandleSize(Handle(hhhh)) - SizeOf(longint)) div longIntH(hhhh)^^;
- end;
-
- function HandleArrayGetSize (hhhh: HandleArray): longint;
- begin
- Assert(hhhh <> nil);
- if GetHandleSize(Handle(hhhh)) > SizeOf(longint) then begin
- HandleArrayGetSize := longIntH(hhhh)^^;
- end
- else begin
- HandleArrayGetSize := -1;
- end;
- end;
-
- function HandleArrayAppend (hhhh: HandleArray; data: ptr): OSErr;
- begin
- Assert(hhhh <> nil);
- HandleArrayAppend := PtrAndHand(data, Handle(hhhh), longIntH(hhhh)^^);
- end;
-
- function HandleArrayInsert (hhhh: HandleArray; index: longint; data: ptr): OSErr;
- var
- pos: longint;
- begin
- Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh) + 1));
- pos := Munger(Handle(hhhh), SizeOf(longint) + (index - 1) * longIntH(hhhh)^^, nil, 0, data, longIntH(hhhh)^^);
- HandleArrayInsert := MemError;
- end;
-
- procedure HandleArrayGet (hhhh: HandleArray; index: longint; data: ptr);
- begin
- Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
- BlockMoveData(ptr(ord(hhhh^) + SizeOf(longint) + (index - 1) * longIntH(hhhh)^^), data, longIntH(hhhh)^^);
- end;
-
- procedure HandleArraySet (hhhh: HandleArray; index: longint; data: ptr);
- begin
- Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
- BlockMoveData(data, ptr(ord(hhhh^) + SizeOf(longint) + (index - 1) * longIntH(hhhh)^^), longIntH(hhhh)^^);
- end;
-
- procedure HandleArrayDelete (hhhh: HandleArray; index: longint);
- var
- pos: longint;
- begin
- Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
- pos := Munger(Handle(hhhh), SizeOf(longint) + (index - 1) * longIntH(hhhh)^^, nil, longIntH(hhhh)^^, @hhhh, 0);
- end;
-
- end.