This is ADSlave.m in view mode; [Download] [Up]
#import "ADSlave.h" #import "../ADController.h" #import "../TVController.h" #import "../ToyWin.h" #import "../common.h" #import "../strfunc.h" #define WinBufSIZE 4 static id windowBuffer[WinBufSIZE]; static int wbp = 0; @implementation ADSlave - init:sender with:controller dir:(const char *)path { adCtrl = sender; tvCtrl = controller; directory = str_dup(path); return self; } - free { free((void *)directory); [super free]; return nil; } /* Local Method */ - doNextImage: sender { const char *nextfile; char fn[MAXFILENAMELEN]; id tw, oldtw, win; int n; BOOL fixpos, oldflag = NO; if ((nextfile = [adCtrl nextFilename]) == NULL) return nil; sprintf(fn, "%s/%s", directory, nextfile); if ([tvCtrl isOpened: fn]) /* already opened */ return self; n = getExtension(nextfile); fixpos = [adCtrl scanFixPosition]; if (fixpos) oldflag = [ToyWin displayOverKeyWindow: YES]; tw = [tvCtrl drawFile: fn : &nextfile[n]]; if (fixpos) (void)[ToyWin displayOverKeyWindow: oldflag]; if (tw) { oldtw = windowBuffer[wbp]; if (tw != oldtw /* coincidental */ && oldtw != nil && [tvCtrl checkWindow:oldtw delete:NO]) { win = [oldtw window]; if ([win counterpart] == nil) /* has not been miniaturized */ [win performClose: self]; } windowBuffer[wbp] = tw; wbp = (wbp + 1) % WinBufSIZE; } return self; } - donext: sender { id r = [self doNextImage: sender]; [adCtrl continueLoop:(r != nil)]; return r; } - dostep: sender { id r = [self doNextImage: sender]; [adCtrl continueLoop: NO]; return r; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.