void WriteThumbnailToResourceFork(FSRef *ref, int destWidth, int destHeight) { OSStatus err; PicHandle pict; HFSUniStr255 fork; SInt16 resf; err = FSGetResourceForkName(&fork); if (err == noErr) { err = FSCreateResourceFork(ref, fork.length, fork.unicode, 0); if ((err == noErr) || (err == errFSForkExists)) { err = FSOpenResourceFile(ref, fork.length, fork.unicode, fsWrPerm, &resf); if (err == noErr) { pict = GetScreenAsPicHandle(IPPU.RenderedScreenWidth, IPPU.RenderedScreenHeight, destWidth, destHeight); if (pict) { AddResource((Handle) pict, 'PICT', 128, "\p"); WriteResource((Handle) pict); ReleaseResource((Handle) pict); } CloseResFile(resf); }
static OSErr myFSCreateResFile(const char *path, OSType creator, OSType fileType, FSRef *outRef) { int fd = open(path, O_CREAT | O_WRONLY, 0666); if (fd == -1) { perror("opening destination:"); return bdNamErr; } close(fd); FSRef ref; OSErr err = FSPathMakeRef((const UInt8*)path, &ref, NULL); if (err != noErr) return err; HFSUniStr255 rname; FSGetResourceForkName(&rname); err = FSCreateResourceFork(&ref, rname.length, rname.unicode, 0); if (err != noErr) return err; FInfo finfo; err = FSGetFInfo(&ref, &finfo); if (err != noErr) return err; finfo.fdCreator = creator; finfo.fdType = fileType; err = FSSetFInfo(&ref, &finfo); if (err != noErr) return err; *outRef = ref; return noErr; }