home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-06-05 | 2.7 KB | 120 lines | [TEXT/CWIE] |
- unit MyResources;
-
- interface
-
- uses
- Types, Quickdraw;
-
- const
- kResChain = -13001;
- kCurrentResFile = -13002;
-
- function MGetResource( resfile: integer; typ: OSType; id: integer; var data: univ Handle ): OSErr;
- function MGetDetachedResource( resfile: integer; typ: OSType; id: integer; var data: univ Handle ): OSErr;
- function MGetPicture( id: integer; var ph: PicHandle ): OSErr;
- function MReplaceResource( resfile: integer; typ: OSType; id: integer; const name: Str255; data: univ Handle ): OSErr;
-
- implementation
-
- uses
- Errors, Memory, Resources,
- MyAssertions, MyUtils;
-
- { Damn Resource Manager is so broken! }
- function MGetResError( data: Handle ): OSErr;
- var
- err: OSErr;
- begin
- if data <> nil then begin
- err := noErr;
- end else begin
- err := ResError;
- if err = noErr then begin
- err := -1;
- end;
- end;
- MGetResError := err;
- end;
-
- function MGetPicture( id: integer; var ph: PicHandle ): OSErr;
- var
- err: OSErr;
- begin
- err := noErr;
- ph := GetPicture( id );
- if (ph = nil) | (ph^ = nil) then begin
- err := MemError;
- if err = noErr then begin
- err := resNotFound;
- end;
- ph := nil;
- end;
- MGetPicture := err;
- end;
-
- function MGetResource( resfile: integer; typ: OSType; id: integer; var data: univ Handle ): OSErr;
- var
- err: OSErr;
- saved: integer;
- begin
- case resfile of
- kResChain: begin
- data := GetResource( typ, id );
- err := MGetResError( data );
- end;
- kCurrentResFile: begin
- data := Get1Resource( typ, id );
- err := MGetResError( data );
- end;
- otherwise begin
- saved := CurResFile;
- UseResFile( resfile );
- data := Get1Resource( typ, id );
- err := MGetResError( data );
- UseResFile( saved );
- end;
- end;
- MGetResource := err;
- end;
-
- function MGetDetachedResource( resfile: integer; typ: OSType; id: integer; var data: univ Handle ): OSErr;
- var
- err: OSErr;
- begin
- err := MGetResource( resfile, typ, id, data );
- if err = noErr then begin
- HNoPurge( data );
- DetachResource( data );
- end;
- MGetDetachedResource := err;
- end;
-
- function MReplaceResource( resfile: integer; typ: OSType; id: integer; const name: Str255; data: univ Handle ): OSErr;
- var
- err: OSErr;
- saved: integer;
- old: Handle;
- begin
- Assert( resfile <> kResChain );
- saved := CurResFile;
- if resfile <> kCurrentResFile then begin
- UseResFile( resfile );
- end;
- old := Get1Resource( typ, id );
- if old <> nil then begin
- RemoveResource( old );
- DisposeHandle( old );
- end;
- AddResource( data, typ, id, name );
- err := ResError;
- ChangedResource( data );
- AddOSErr( err, ResError );
- WriteResource( data );
- AddOSErr( err, ResError );
- DetachResource( data );
- UseResFile( saved );
- MReplaceResource := err;
- end;
-
- end.
-