This is Text.m in view mode; [Download] [Up]
/* File: Text.m - (Interactive) Unix shell version of Text * * By: Gerben Wierda (gerben@rna.indiv.nluug.nl) * As inspired by Christopher Lane (lane@sumex-aim.stanford.edu) * * Date: 2 may 1993 * * Copyright: 1993 by R&A * * This program may be distributed without restriction. */ // A very long line to see if everyhting is displayed OK. A very long line to see if everyhting is displayed OK. A very long line to see if everyhting is displayed OK. #import <stdlib.h> #import "getopt.h" #import <appkit/appkit.h> #define SELECTOR @selector(stop:) #define TIMEOUT (30) #define DEFAULTWIDTH 400.0 #define DEFAULTHEIGHT 400.0 #define DEFAULTX 150.0 #define DEFAULTY 750.0 #define USAGE "usage: %s [-t title] [-x xpos -y ypos] [-T seconds] [file]\n" #define EXIT_USAGE (2) @interface TextApp : Application { id window; int startcount; } - initWindow; - appDidInit:sender; @end @implementation TextApp : Application - initWindow { NXRect windowrect; NXSetRect( &windowrect, DEFAULTX, DEFAULTY, DEFAULTWIDTH, DEFAULTHEIGHT); window = [[Window alloc] initContent: &windowrect style: NX_RESIZEBARSTYLE backing: NX_BUFFERED buttonMask: NX_CLOSEBUTTONMASK defer: NO]; [window setContentView:[[ScrollView alloc] initFrame:&windowrect]]; [[window contentView] setDocView:[[Text alloc] initFrame:&windowrect]]; return window; } - appDidInit:sender { [[self appIcon] orderOut:self]; return self; } @end void timer(DPSTimedEntry teNumber, double now, int status) { exit(status); } void main(int argc, char *argv[]) { BOOL orderFront = NO; const char *title = NULL; double timeout = TIMEOUT; int option, status = EXIT_SUCCESS; NXPoint topleft = { DEFAULTX, DEFAULTY }; NXSize size = { DEFAULTWIDTH, DEFAULTHEIGHT }; DPSTimedEntry teNumber = NULL; NXStream *stream = NULL; while ((option = getopt(argc, argv, "Fc:t:x:y:X:Y:T:")) != EOF) switch (option) { case 'F': orderFront = YES; break; case 't': title = optarg; break; case 'x': topleft.x = atof(optarg); break; case 'y': topleft.y = atof(optarg); break; case 'X': size.width = atof(optarg); break; case 'Y': size.height = atof(optarg); break; case 'T': timeout = atol(optarg); break; default : status = EXIT_USAGE; } NXApp = [TextApp new]; if (status == EXIT_USAGE) { (void) fprintf(stderr, USAGE, [NXApp appName]); } else { float xdisplacement = 0.0; float ydisplacement = 0.0; for (; optind < argc; optind++) { if (stream = (strcmp( argv[optind], "-") ? NXMapFile( argv[optind], NX_READWRITE) : NXOpenFile(fileno( stdin), NX_READONLY))) { NXRect windowrect, textrect; id window; id scrollview; id text; window = [NXApp initWindow]; [window setDelegate:NXApp]; scrollview = [window contentView]; text = [scrollview docView]; [window setTitle:(title == NULL ? (strcmp( argv[optind], "-") ? argv[optind]: "<<stdin>>") : title)]; [window displayBorder]; [window setBackgroundGray:NX_LTGRAY]; [window sizeWindow:size.width :size.height]; [window moveTopLeftTo:topleft.x :topleft.y]; if (xdisplacement != 0.0 || ydisplacement != 0.0) { [window getFrame:&windowrect]; windowrect.origin.x += xdisplacement; windowrect.origin.y += ydisplacement; [window moveTo:windowrect.origin.x :windowrect.origin.y]; } xdisplacement += 18.0; ydisplacement -= 18.0; [scrollview setVertScrollerRequired:YES]; [scrollview setHorizScrollerRequired:NO]; [scrollview getContentSize:&textrect.size]; [text setHorizResizable:NO]; [text setVertResizable:YES]; [text setMinSize:&textrect.size]; [text sizeTo:textrect.size.width :textrect.size.height]; [text setOpaque:YES]; [text setEditable:NO]; [text readText:stream]; [text sizeToFit]; if (orderFront) { [window orderFrontRegardless]; } else { [window orderFront:nil]; } [window display]; NXClose( stream); } } if (timeout) { teNumber = DPSAddTimedEntry( timeout, (DPSTimedEntryProc) &timer, (void *) EXIT_FAILURE, NX_BASETHRESHOLD); } [NXApp run]; if(timeout) DPSRemoveTimedEntry(teNumber); } [NXApp free]; exit(status); } @interface TextApp(WindowDelegate) - windowWillClose:sender; - windowDidResize:sender; @end @implementation TextApp(WindowDelegate) - windowWillClose:sender { if ([[NXApp windowList] count] <= 4) { [NXApp terminate:nil]; } return self; } - windowDidResize:sender { NXRect textrect; [[sender contentView] getContentSize:&textrect.size]; [[[sender contentView] docView] setMinSize:&textrect.size]; [[[sender contentView] docView] sizeTo:textrect.size.width :textrect.size.height]; [[[sender contentView] docView] sizeToFit]; // [sender display]; return self; } @end @interface TextApp(TextDelegate) @end @implementation TextApp(TextDelegate) @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.