This is JournalerApp.m in view mode; [Download] [Up]
#import "JournalerApp.h" // Written by Gideon King // Gideon@otago.ac.nz // Freeware - but I'd be interested to know if anyone finds it useful // This is a small program using NXJournals to record events in another application, // then play them back at some later stage. @implementation JournalerApp static char *filetype[] = { "journal", NULL }; - appDidInit { [NXApp setJournalable:NO]; [stopButton setEnabled:NO]; return self; } - begin:sender { stream = NXOpenMemory(NULL, 0, NX_WRITEONLY); [stopButton setEnabled:YES]; [stopButton setIcon:"Stop"]; [goButton setEnabled:NO]; [goButton setIcon:"RecordD"]; [playButton setEnabled:NO]; [playButton setIcon:"PlayD"]; theJournal = [[NXJournaler alloc] init]; [theJournal setEventStatus:NX_RECORDING soundStatus:NX_STOPPED eventStream:stream soundfile:NULL]; return self; } - end:sender { id savePanel = [SavePanel new]; [theJournal setEventStatus:NX_STOPPED soundStatus:NX_STOPPED eventStream:stream soundfile:NULL]; [savePanel setTitle:"New Journal"]; [savePanel setRequiredFileType:"journal"]; if([savePanel runModal]) if([savePanel filename]) { errno = 0; remove([savePanel filename]); // Removes the file if it's there switch(errno) { case 0: // No problem deleting the file case ENOENT: // Doesn't exist - Ok as well break; case EACCES: // Permission denied NXRunAlertPanel("","Overwrite Permission Denied", NULL, NULL, NULL); [theJournal free]; NXCloseMemory(stream, NX_FREEBUFFER); return self; break; default: NXRunAlertPanel("Error:", "Unable to overwrite file with the name %s. Error #%d.", NULL, NULL, NULL, [savePanel filename], errno); [theJournal free]; NXCloseMemory(stream, NX_FREEBUFFER); return self; break; } if(NXSaveToFile(stream, [savePanel filename]) == -1) NXRunAlertPanel("Error:", "Unable to save file with the name %s.", NULL, NULL, NULL, [savePanel filename]); } NXCloseMemory(stream, NX_FREEBUFFER); [theJournal free]; [stopButton setEnabled:NO]; [stopButton setIcon:"StopD"]; [goButton setEnabled:YES]; [goButton setIcon:"Record"]; [playButton setEnabled:YES]; [playButton setIcon:"Play"]; return self; } - playBack:sender { id openPanel = [OpenPanel new]; [openPanel setTitle:"Play a journal file"]; if ([openPanel runModalForTypes:filetype]) if([openPanel filename]) { if ((stream = NXMapFile([openPanel filename], NX_READONLY)) == NULL) { NXRunAlertPanel("Error:", "Unable to open file with the name %s.", NULL, NULL, NULL, [openPanel filename]); return self; } [stopButton setEnabled:NO]; [stopButton setIcon:"StopD"]; [goButton setEnabled:NO]; [goButton setIcon:"RecordD"]; [playButton setEnabled:NO]; [playButton setIcon:"PlayD"]; theJournal = [[NXJournaler alloc] init]; [theJournal setDelegate:self]; [theJournal setEventStatus:(NX_PLAYING || NX_NONABORTABLEMASK) soundStatus:NX_STOPPED eventStream:stream soundfile:NULL]; } return self; } - journalerDidEnd:sender { NXCloseMemory(stream, NX_FREEBUFFER); [theJournal free]; [stopButton setEnabled:NO]; [stopButton setIcon:"StopD"]; [goButton setEnabled:YES]; [goButton setIcon:"Record"]; [playButton setEnabled:YES]; [playButton setIcon:"Play"]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.