annotate Mac/Python/getapplbycreator.c @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 97133996e22f
children d6b292a33cfe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4319
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
1 /*
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
2 ** FindApplicationFromCreator uses the Desktop Database to
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
3 ** locate the creator application for the given document
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
4 **
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
5 ** this routine will check the desktop database of all local
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
6 ** disks, then the desktop databases of all server volumes
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
7 ** (so up to two passes will be made)
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
8 **
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
9 ** This code was created from FindApplicationFromDocument
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
10 ** routine, origin unknown.
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
11 */
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
12
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
13 #include <Types.h>
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
14 #include <Files.h>
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
15 #include <Errors.h>
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
16 #include "getapplbycreator.h"
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
17
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
18
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
19 OSErr FindApplicationFromCreator(OSType creator,
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
20 FSSpecPtr applicationFSSpecPtr)
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
21 {
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
22 enum { localPass, remotePass, donePass } volumePass;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
23 DTPBRec desktopParams;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
24 HParamBlockRec hfsParams;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
25 short volumeIndex;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
26 Boolean foundFlag;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
27 GetVolParmsInfoBuffer volumeInfoBuffer;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
28 OSErr retCode;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
29
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
30 /* dkj 12/94 initialize flag to false (thanks to Peter Baral for pointing out this bug) */
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
31 foundFlag = false;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
32
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
33 volumePass = localPass;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
34 volumeIndex = 0;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
35
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
36 do {
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
37 /*
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
38 ** first, find the vRefNum of the volume whose Desktop Database
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
39 ** we're checking this time
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
40 */
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
41
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
42 volumeIndex++;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
43
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
44 /* convert the volumeIndex into a vRefNum */
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
45
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
46 hfsParams.volumeParam.ioNamePtr = nil;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
47 hfsParams.volumeParam.ioVRefNum = 0;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
48 hfsParams.volumeParam.ioVolIndex = volumeIndex;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
49 retCode = PBHGetVInfoSync(&hfsParams);
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
50
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
51 /* a nsvErr indicates that the current pass is over */
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
52 if (retCode == nsvErr) goto SkipThisVolume;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
53 if (retCode != noErr) goto Bail;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
54
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
55 /*
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
56 ** call GetVolParms to determine if this volume is a server
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
57 ** (a remote volume)
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
58 */
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
59
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
60 hfsParams.ioParam.ioBuffer = (Ptr) &volumeInfoBuffer;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
61 hfsParams.ioParam.ioReqCount = sizeof(GetVolParmsInfoBuffer);
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
62 retCode = PBHGetVolParmsSync(&hfsParams);
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
63 if (retCode != noErr) goto Bail;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
64
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
65 /*
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
66 ** if the vMServerAdr field of the volume information buffer
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
67 ** is zero, this is a local volume; skip this volume
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
68 ** if it's local on a remote pass or remote on a local pass
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
69 */
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
70
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
71 if ((volumeInfoBuffer.vMServerAdr != 0) !=
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
72 (volumePass == remotePass)) goto SkipThisVolume;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
73
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
74 /* okay, now we've found the vRefNum for our desktop database call */
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
75
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
76 desktopParams.ioVRefNum = hfsParams.volumeParam.ioVRefNum;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
77
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
78 /*
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
79 ** find the path refNum for the desktop database for
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
80 ** the volume we're interested in
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
81 */
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
82
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
83 desktopParams.ioNamePtr = nil;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
84
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
85 retCode = PBDTGetPath(&desktopParams);
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
86 if (retCode == noErr && desktopParams.ioDTRefNum != 0) {
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
87
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
88 /*
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
89 ** use the GetAPPL call to find the preferred application
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
90 ** for opening any document with this one's creator
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
91 */
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
92
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
93 desktopParams.ioIndex = 0;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
94 desktopParams.ioFileCreator = creator;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
95 desktopParams.ioNamePtr = applicationFSSpecPtr->name;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
96 retCode = PBDTGetAPPLSync(&desktopParams);
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
97
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
98 if (retCode == noErr) {
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
99 /*
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
100 ** okay, found it; fill in the application file spec
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
101 ** and set the flag indicating we're done
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
102 */
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
103
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
104 applicationFSSpecPtr->parID = desktopParams.ioAPPLParID;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
105 applicationFSSpecPtr->vRefNum = desktopParams.ioVRefNum;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
106 foundFlag = true;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
107
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
108 }
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
109 }
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
110
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
111 SkipThisVolume:
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
112 /*
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
113 ** if retCode indicates a no such volume error or if this
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
114 ** was the first pass, it's time to move on to the next pass
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
115 */
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
116
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
117 if (retCode == nsvErr) {
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
118 volumePass++;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
119 volumeIndex = 0;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
120 }
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
121
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
122 } while (foundFlag == false && volumePass != donePass);
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
123
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
124 Bail:
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
125 if (retCode == nsvErr)
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
126 return fnfErr; /* More logical than "No such volume" */
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
127 return retCode;
97133996e22f Added macfs.FindApplication() to find application FSSpec given signature.
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
128 }