mirror of https://github.com/ksherlock/rlint
111 lines
2.3 KiB
C
111 lines
2.3 KiB
C
#include <resources.h>
|
|
#include "rlint.h"
|
|
|
|
typedef struct BundleHeader {
|
|
Word version;
|
|
Word offset;
|
|
Ref iconID;
|
|
Ref bundleID;
|
|
LongWord reserved;
|
|
Word count;
|
|
} BundleHeader;
|
|
|
|
typedef struct OneDocHeader {
|
|
Word oneDocSize;
|
|
Word offsetToFlags;
|
|
Word numResults;
|
|
/*result 1 */
|
|
Word voting;
|
|
/*result 2 */
|
|
LongWord pathID;
|
|
LongWord reserved1;
|
|
/* result 3 */
|
|
Ref iconID;
|
|
LongWord reserved2;
|
|
/* result 4 */
|
|
Ref smallIconID;
|
|
LongWord reserved3;
|
|
/* result 5 */
|
|
char docString[1]; /* p string */
|
|
/* LongWord match flags, custom bits */
|
|
|
|
} OneDocHeader;
|
|
|
|
|
|
/* equates for rBundle */
|
|
|
|
#define LaunchThis 0x1
|
|
#define DontLaunch 0x0
|
|
|
|
#define reads 0x10
|
|
#define writes 0x20
|
|
#define native 0x40
|
|
#define creator 0x80
|
|
|
|
#define Filetype 0x1
|
|
#define AuxType 0x2
|
|
#define Filename 0x4
|
|
#define CreateDateTime 0x8
|
|
#define ModDateTime 0x10
|
|
#define LocalAccess 0x20
|
|
#define NetworkAccess 0x40
|
|
#define Where 0x80
|
|
#define HFSFileType 0x100
|
|
#define HFSCreator 0x200
|
|
#define OptionList 0x400
|
|
#define EOF 0x800
|
|
|
|
#define CompareAll 0x00FF // compareSpec operators
|
|
#define CompareSecond 0x0001
|
|
#define CompareMinute 0x0002
|
|
#define CompareHour 0x0004
|
|
#define CompareYear 0x0008
|
|
#define CompareDay 0x0010
|
|
#define CompareMonth 0x0020
|
|
#define CompareWeekday 0x0080
|
|
#define lessThan 0x0000
|
|
#define equal 0x0100
|
|
#define greater 0x0200
|
|
#define not 0x0400
|
|
|
|
void check_rBundle(Handle h){
|
|
|
|
BundleHeader *ptr;
|
|
OneDocHeader *doc;
|
|
Ref ref;
|
|
unsigned offset = 0;
|
|
unsigned i;
|
|
unsigned count;
|
|
|
|
ptr = *(BundleHeader **)h;
|
|
ref = ptr->iconID;
|
|
if (ref) check(rIcon, ref);
|
|
|
|
/* bundleID should match the current id, but that would be a recursive loop */
|
|
|
|
count = ptr->count;
|
|
offset = sizeof(BundleHeader);
|
|
for(i = 0; i < count; ++i) {
|
|
unsigned numResults;
|
|
doc = (OneDocHeader *)((byte *)ptr + offset);
|
|
|
|
switch(doc->numResults) {
|
|
case 5:
|
|
case 4:
|
|
ref = doc->smallIconID;
|
|
if (ref) check(rIcon, ref);
|
|
case 3:
|
|
ref = doc->iconID;
|
|
if (ref) check(rIcon, ref);
|
|
case 2:
|
|
ref = doc->pathID;
|
|
if (ref) check(rFinderPath, ref);
|
|
case 1:
|
|
case 0:
|
|
break;
|
|
}
|
|
|
|
offset += doc->oneDocSize;
|
|
}
|
|
|
|
} |