diff options
Diffstat (limited to 'src/osd/modules/debugger/osx/debugcommandhistory.mm')
-rw-r--r-- | src/osd/modules/debugger/osx/debugcommandhistory.mm | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/src/osd/modules/debugger/osx/debugcommandhistory.mm b/src/osd/modules/debugger/osx/debugcommandhistory.mm new file mode 100644 index 00000000000..74a34904ae7 --- /dev/null +++ b/src/osd/modules/debugger/osx/debugcommandhistory.mm @@ -0,0 +1,113 @@ +// license:BSD-3-Clause +// copyright-holders:Vas Crabb +//============================================================ +// +// debugcommandhistory.m - MacOS X Cocoa debug window handling +// +//============================================================ + +//============================================================ +// MAMEDebugView class +//============================================================ + +#import "debugcommandhistory.h" + + +@implementation MAMEDebugCommandHistory + ++ (NSInteger)defaultLength { + return 100; +} + + +- (id)init { + if (!(self = [super init])) + return nil; + length = [[self class] defaultLength]; + position = -1; + current = nil; + history = [[NSMutableArray alloc] initWithCapacity:length]; + return self; +} + + +- (void)dealloc { + if (current != nil) + [current release]; + if (history != nil) + [history release]; + [super dealloc]; +} + + +- (NSInteger)length { + return length; +} + + +- (void)setLength:(NSInteger)l { + length = l; + if ([history count] > length) + [history removeObjectsInRange:NSMakeRange(length, [history count] - length)]; +} + + +- (void)add:(NSString *)entry { + if (([history count] == 0) || ![[history objectAtIndex:0] isEqualToString:entry]) { + [history insertObject:entry atIndex:0]; + while ([history count] > length) + [history removeLastObject]; + } + position = 0; +} + + +- (NSString *)previous:(NSString *)cur { + if ((position + 1) < [history count]) { + if (position < 0) { + [current autorelease]; + current = [cur copy]; + } + return [history objectAtIndex:++position]; + } else { + return nil; + } +} + + +- (NSString *)next:(NSString *)cur { + if (position > 0) { + return [history objectAtIndex:--position]; + } else if ((position == 0) && (current != nil) && ![current isEqualToString:[history objectAtIndex:0]]) { + position--; + return [[current retain] autorelease]; + } else { + return nil; + } +} + + +- (void)edit { + if (position == 0) + position--; +} + +- (void)reset { + position = -1; + if (current != nil) { + [current release]; + current = nil; + } +} + + +- (void)clear { + position = -1; + if (current != nil) { + [current release]; + current = nil; + } + [history removeAllObjects]; +} + +@end |