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