home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-10-15 | 2.4 KB | 112 lines | [TEXT/PJMM] |
- unit MyResources;
-
- interface
-
- const
- res_by_id = 0;
- res_by_name = -1;
-
- type
- ResourceObject = record
- data: handle;
- fs: FSSpec;
- typ: ResType;
- id: integer;
- name: str255;
- attributes: integer;
- readonly: boolean;
- end;
-
- function GetResourceObject (var res: ResourceObject; index: integer): OSErr;
- function PutResourceObject (var res: ResourceObject): OSErr;
- procedure DestroyResourceObject (var res: ResourceObject);
-
- implementation
-
- procedure DestroyResourceObject (var res: ResourceObject);
- begin
- DisposeHandle(res.data);
- res.data := nil;
- end;
-
- function GetResourceObject (var res: ResourceObject; index: integer): OSErr;
- var
- h: handle;
- err: OSErr;
- resfile: integer;
- begin
- res.data := nil;
- res.readonly := false;
- SetResLoad(false);
- resfile := FSpOpenResFile(res.fs, fsRdWrPerm);
- err := ResError;
- if err <> noErr then begin
- res.readonly := true;
- resfile := FSpOpenResFile(res.fs, fsRdPerm);
- err := ResError;
- end;
- if err = noErr then begin
- if index = res_by_id then begin
- h := Get1Resource(res.typ, res.id);
- end
- else if index = res_by_name then begin
- h := Get1NamedResource(res.typ, res.name);
- end
- else begin
- h := Get1IndResource(res.typ, index);
- end;
- if h = nil then begin
- if index > 0 then begin
- err := resNotFound;
- end
- else if res.readonly then begin
- err := wrPermErr;
- end;
- res.attributes := 0;
- end
- else begin
- GetResInfo(h, res.id, res.typ, res.name);
- res.attributes := GetResAttrs(h);
- SetResAttrs(h, 0);
- SetResLoad(true);
- h := Get1Resource(res.typ, res.id);
- SetResAttrs(h, res.attributes);
- DetachResource(h);
- res.data := h;
- end;
- CloseResFile(resfile);
- end;
- SetResLoad(true);
- GetResourceObject := err;
- end;
-
- function PutResourceObject (var res: ResourceObject): OSErr;
- var
- h: handle;
- err: OSErr;
- resfile: integer;
- begin
- SetResLoad(false);
- resfile := FSpOpenResFile(res.fs, fsRdWrPerm);
- err := ResError;
- if err = noErr then begin
- h := Get1Resource(res.typ, res.id);
- if h <> nil then begin
- { SetResInfo(h, -1, 'Backup');}
- RmveResource(h);
- end;
- AddResource(res.data, res.typ, res.id, res.name);
- err := ResError;
- if err = noErr then begin
- WriteResource(res.data);
- SetResAttrs(res.data, res.attributes);
- err := ResError;
- DetachResource(res.data);
- end;
- CloseResFile(resfile);
- end;
- SetResLoad(true);
- PutResourceObject := err;
- end;
-
- end.