Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C by Dhcmrlchtdj ( 17 years ago )
/*
 *			uti.c
 *
 *			Written by Marco Piovanelli, April 2008
 *			<mailto:[email protected]>
 *
 *			compile with:
 *			cc -framework Carbon -o uti uti.c
 */

#include <Carbon/Carbon.h>
#include <stdio.h>
#include <unistd.h>

static void usage()
{
	printf("usage: uti [-c uticlass] [-fmop] tag
");
	printf("
");
	printf("  c : UTI must conform to this UTI class (e.g., "public.image"
");
	printf("  f : tag is filename extension (this is the default)
");
	printf("  m : tag is MIME type
");
	printf("  n : tag is NSPasteboard type
");
	printf("  o : tag is OSType
");
}

static CFStringRef arg2cfstring(const char * arg)
{
	return CFStringCreateWithBytes(kCFAllocatorDefault, (const UInt8 *)arg, strlen(arg), kCFStringEncodingUTF8, false);
}

static void print_cfstring(const char * format, CFStringRef cfstring)
{
	UInt8						nameBuf[256];			//	truncate strings to 255 characters
	CFIndex						usedBufLen = 0;

	//	convert name to ASCII for printf
	CFStringGetBytes(cfstring, CFRangeMake(0, CFStringGetLength(cfstring)), kCFStringEncodingUTF8, 0, false, nameBuf, sizeof(nameBuf) - 1, &usedBufLen);
	nameBuf[usedBufLen] = 0;

	printf(format, nameBuf);
}

int main(int argc, char * argv[])
{
	int					ch;
	CFStringRef			tag = 0;
	CFStringRef			tagClass = kUTTagClassFilenameExtension;
	CFStringRef			conformingToUTI = 0;
	CFStringRef			uti = 0;
	CFURLRef			url = 0;
	CFDictionaryRef		dict = 0;
	CFArrayRef			array = 0;

	while((ch = getopt(argc, argv, "c:fmno")) != -1)
	{
		switch(ch)
		{
			case 'c':	conformingToUTI = arg2cfstring(optarg);		break;
			case 'f':	tagClass = kUTTagClassFilenameExtension;	break;
			case 'm':	tagClass = kUTTagClassMIMEType;				break;
			case 'n':	tagClass = kUTTagClassNSPboardType;			break;
			case 'o':	tagClass = kUTTagClassOSType;				break;
			case '?':
			default:
			{
				usage();
				return 1;
			}
		}
	}

	argc -= optind;
	argv += optind;

	if(argc != 1)
	{
		usage();
		return 1;
	}

	tag = arg2cfstring(argv[0]);
	uti = UTTypeCreatePreferredIdentifierForTag(tagClass, tag, conformingToUTI);
	CFRelease(tag);
	if(conformingToUTI)
	{
		CFRelease(conformingToUTI);
	}

	print_cfstring("Preferred UTI:                "%s";
", uti);
	if((tag = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension)))
	{
		print_cfstring("Preferred filename extension: "%s";
", tag);
		CFRelease(tag);
	}
	if((tag = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)))
	{
		print_cfstring("Preferred MIME type:          "%s";
", tag);
		CFRelease(tag);
	}
	if((tag = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassOSType)))
	{
		print_cfstring("Preferred OSType:             "%s";
", tag);
		CFRelease(tag);
	}
	if((tag = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassNSPboardType)))
	{
		print_cfstring("Preferred NSPasteboard type:  "%s";
", tag);
		CFRelease(tag);
	}
	if((tag = UTTypeCopyDescription(uti)))
	{
		print_cfstring("Description:                  "%s";
", tag);
		CFRelease(tag);
	}
	if((url = UTTypeCopyDeclaringBundleURL(uti)) && (tag = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle)))
	{
		print_cfstring("Declaring bundle:             "%s";
", tag);
		CFRelease(tag);
		CFRelease(url);
	}
	if((dict = UTTypeCopyDeclaration(uti)))
	{
		if((tag = CFDictionaryGetValue(dict, kUTTypeReferenceURLKey)) && (CFGetTypeID(tag) == CFStringGetTypeID()))
		{
			print_cfstring("Reference URL:                "%s";
", tag);
		}
		if((array = CFDictionaryGetValue(dict, kUTTypeConformsToKey)) && (CFGetTypeID(array) == CFArrayGetTypeID()))
		{
			CFIndex		utiCount = CFArrayGetCount(array);
			CFIndex		utiIndex;

			for(utiIndex = 0; utiIndex < utiCount; ++utiIndex)
			{
				tag = CFArrayGetValueAtIndex(array, utiIndex);
				if(tag && (CFGetTypeID(tag) == CFStringGetTypeID()))
				{
					print_cfstring("Conforms to:                  "%s";
", tag);
				}
			}
		}
		CFRelease(dict);
	}

	CFRelease(uti);

	return 0;
}

 

Revise this Paste

Your Name: Code Language: