Index: class-dump/src/formatType.m |
=================================================================== |
--- class-dump/src/formatType.m (revision 0) |
+++ class-dump/src/formatType.m (revision 0) |
@@ -0,0 +1,168 @@ |
+// -*- mode: ObjC -*- |
+ |
+// This file is part of class-dump, a utility for examining the Objective-C segment of Mach-O files. |
+// Copyright (C) 1997-1998, 2000-2001, 2004-2010 Steve Nygard. |
+ |
+#include <stdio.h> |
+#include <libc.h> |
+#include <unistd.h> |
+#include <getopt.h> |
+#include <stdlib.h> |
+ |
+#import <Foundation/Foundation.h> |
+#import "NSString-Extensions.h" |
+ |
+#import "CDClassDump.h" |
+#import "CDTypeFormatter.h" |
+#import "CDSymbolReferences.h" |
+#import "CDBalanceFormatter.h" |
+ |
+void print_usage(void) |
+{ |
+ fprintf(stderr, |
+ "formatType %s\n" |
+ "Usage: formatType [options] <input file>\n" |
+ "\n" |
+ " where options are:\n" |
+ " -m format method (default is to format ivars)\n" |
+ , |
+ CLASS_DUMP_VERSION |
+ ); |
+} |
+ |
+enum { |
+ CDFormatIvar = 0, |
+ CDFormatMethod = 1, |
+ CDFormatBalance = 2, |
+}; |
+ |
+int main(int argc, char *argv[]) |
+{ |
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; |
+ NSUInteger formatType = CDFormatIvar; |
+ |
+ int ch; |
+ BOOL errorFlag = NO; |
+ |
+ CDTypeFormatter *ivarTypeFormatter; |
+ CDTypeFormatter *methodTypeFormatter; |
+ NSUInteger index; |
+ |
+ ivarTypeFormatter = [[CDTypeFormatter alloc] init]; |
+ [ivarTypeFormatter setShouldExpand:YES]; |
+ [ivarTypeFormatter setShouldAutoExpand:YES]; |
+ [ivarTypeFormatter setBaseLevel:0]; |
+ //[ivarTypeFormatter setDelegate:self]; |
+ |
+ methodTypeFormatter = [[CDTypeFormatter alloc] init]; |
+ [methodTypeFormatter setShouldExpand:NO]; |
+ [methodTypeFormatter setShouldAutoExpand:NO]; |
+ [methodTypeFormatter setBaseLevel:0]; |
+ //[methodTypeFormatter setDelegate:self]; |
+ |
+ struct option longopts[] = { |
+ { "balance", no_argument, NULL, 'b' }, |
+ { "method", no_argument, NULL, 'm' }, |
+ { NULL, 0, NULL, 0 }, |
+ }; |
+ |
+ if (argc == 1) { |
+ print_usage(); |
+ exit(0); |
+ } |
+ |
+ while ( (ch = getopt_long(argc, argv, "bm", longopts, NULL)) != -1) { |
+ switch (ch) { |
+ case 'b': |
+ formatType = CDFormatBalance; |
+ break; |
+ |
+ case 'm': |
+ formatType = CDFormatMethod; |
+ break; |
+ |
+ case '?': |
+ default: |
+ errorFlag = YES; |
+ break; |
+ } |
+ } |
+ |
+ if (errorFlag) { |
+ print_usage(); |
+ exit(2); |
+ } |
+ |
+ switch (formatType) { |
+ case CDFormatIvar: printf("Format as ivars\n"); break; |
+ case CDFormatMethod: printf("Format as methods\n"); break; |
+ case CDFormatBalance: printf("Format as balance\n"); break; |
+ } |
+ |
+ for (index = optind; index < argc; index++) { |
+ NSString *arg; |
+ NSString *input; |
+ NSError *error; |
+ NSArray *lines; |
+ CDTypeFormatter *formatter; |
+ NSString *name, *type; |
+ |
+ arg = [NSString stringWithFileSystemRepresentation:argv[index]]; |
+ printf("======================================================================\n"); |
+ printf("File: %s\n", argv[index]); |
+ |
+ input = [[NSString alloc] initWithContentsOfFile:arg encoding:NSUTF8StringEncoding error:&error]; |
+ lines = [input componentsSeparatedByString:@"\n"]; |
+ |
+ name = type = nil; |
+ for (NSString *line in lines) { |
+ if ([line hasPrefix:@"//"] || [line length] == 0) { |
+ printf("%s\n", [line UTF8String]); |
+ continue; |
+ } |
+ |
+ if (name == nil) |
+ name = line; |
+ else if (type == nil) { |
+ NSString *str; |
+ |
+ type = line; |
+ |
+ switch (formatType) { |
+ case CDFormatIvar: |
+ str = [ivarTypeFormatter formatVariable:name type:type symbolReferences:nil]; |
+ break; |
+ |
+ case CDFormatMethod: |
+ str = [methodTypeFormatter formatMethodName:name type:type symbolReferences:nil]; |
+ break; |
+ |
+ case CDFormatBalance: { |
+ CDBalanceFormatter *balance; |
+ |
+ balance = [[CDBalanceFormatter alloc] initWithString:type]; |
+ str = [balance format]; |
+ [balance release]; |
+ } |
+ } |
+ if (str == nil) |
+ printf("Error formatting type.\n"); |
+ else |
+ printf("%s\n", [str UTF8String]); |
+ printf("----------------------------------------------------------------------\n"); |
+ |
+ name = type = nil; |
+ } |
+ |
+ } |
+ |
+ [input release]; |
+ } |
+ |
+ [ivarTypeFormatter release]; |
+ [methodTypeFormatter release]; |
+ |
+ [pool release]; |
+ |
+ return 0; |
+} |
Property changes on: class-dump/src/formatType.m |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |