This is LDPlayer.m in view mode; [Download] [Up]
/* LDPlayer.m 15 February 1993 Eric Celeste / AppTech / 5 Exeter Street / Belmont, MA 02178 efc@mit.edu This object is next to useless as defined here. It is designed to be subclassed. Almost all the functions should be overridden to accomodate a particular brand of laserdisc player. It is often helpful to know whether a command actually worked or not. To make this error-checking possible, I've set up a standard method of reporting problems to the outside world. Any subclass you create will inherit, and should use, the reportProblem: method whenever it has a problem communicating with it's laserdisc player. I would enjoy seeing any improvements or subclasses you create. Please consider sharing them! ////////////////////////////////////////// History 930213 efc created this generic class from SonyLDP1450 and made that a subclass of this class 930215 efc switched to delegate method of error reporting */ #import "LDPlayer.h" @implementation LDPlayer ////////////////////////////////////////////// Housekeeping Methods - initDevice:(const char *)device baud:(int)rate { self = [super init]; port = [SerialPort new:(char *)device baud:rate]; if (!port) return [self free]; problem[0] = '\0'; return self; } - free { if (port) [port free]; return [super free]; } ////////////////////////////////////////////// Delegation Methods - setDelegate:anObject { delegate = anObject; return self; } - delegate { return delegate; } ////////////////////////////////////////////// Error Reporting Methods - reportProblem:(const char *)string { allOK = NO; strcpy(problem, [[self class] name]); strcat(problem, ": "); strcat(problem, string); /* splash an error report on the Console */ fprintf(stderr, "%s... %d chars waiting\n", problem, [port hasInput]); /* notify the delegate that there was a problem */ if (delegate && [delegate respondsTo:@selector(ldpProblem:)]) [delegate perform:@selector(ldpProblem:) with:self]; return self; } - (const char *)problemString { return ((const char *)problem); } ////////////////////////////////////////////// Override these Control Methods - searchForChapter:(int)chapter /* Searches through disc for given chapter. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - searchForFrame:(int)frame; /* Searches through disc for given frame. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - still /* Freezes the frame. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - halt /* Stops playing (usually ends up with blank video-screen). */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - eject /* Ejects the disk. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - playForward /* Plays forwards. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - playBack /* Plays backwards. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - fastForward /* Plays forwards quickly. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - fastBack /* Plays backwards quickly. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - slowForward /* Plays forwards slowly. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - slowBack /* Plays backwards slowly. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - scanForward /* Scans forwards very quickly. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - scanBack /* Scans backwards very quickly. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - frameForward /* Steps forward one frame. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - frameBack /* Steps back one frame. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - playFrom:(int)inFrame to:(int)outFrame repeating:(int)times; /* Plays a clip over and over. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - motor:(BOOL)on /* Turns motor on or off. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - index:(BOOL)on /* Turns on-video-screen index numbers on or off. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - channelOne:(BOOL)on /* Turns sound for channel 1 (analog left?) on or off. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - channelTwo:(BOOL)on /* Turns sound for channel 2 (analog right?) on or off. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - channelThree:(BOOL)on /* Turns sound for channel 3 (digital left?) on or off. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - channelFour:(BOOL)on /* Turns sound for channel 4 (digital right?) on or off. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - mute:(BOOL)on /* Turns player's muting on or off. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - noiseReduction:(BOOL)on /* Turns player's (CX) noise reduction on or off. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } - clearAll /* Resets the player so that it is ready to receive commands. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return self; } ////////////////////////////////////////////// Inquiry Methods - (int)currentFrame /* Returns the current frame. */ { char report[500]; strcpy(report, "does not implement "); strcat(report, sel_getName(_cmd)); [self reportProblem:report]; return 0; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.