This is FaxView.m in view mode; [Download] [Up]
/* Generated by tgr */ #import "FaxView.h" #include <string.h> @implementation FaxView extern char *faxname ; static int maxpage ; + new { static NXRect fr = { { 0.0, 0.0 } , { 10.0, 400.0 } } ; self = [[super new] initFrame:&fr] ; return self ; } - faxPSCode:sender { return [super faxPSCode:sender] ; } static FILE *f ; #define LINELEN (400) static char line[LINELEN] ; - beginPrologueBBox:(const NXRect *)boundingBox creationDate:(const char *)date createdBy:(const char *)anApplication fonts:(const char *)fontNames forWhom:(const char *)user pages:(int)numPages title:(const char *)aTitle { int i ; int numtopass = 0 ; char *tp ; char tbuf[20000] ; char *ignored[100] ; extern void error() ; extern char *strcpy() ; NXRect bb ; tp = tbuf ; if (boundingBox) bb = *boundingBox ; f = fopen(faxname, "r") ; if (f == 0) { [super beginPrologueBBox:boundingBox creationDate:date createdBy:anApplication fonts:fontNames forWhom:user pages:numPages title:aTitle] ; return self ; } fgets(line, LINELEN, f) ; while (fgets(line, LINELEN, f)) { if (strncmp(line, "%%EndComments", 13)==0) break ; if (strlen(line) + tp > tbuf + 19990) error("! too many header comments?") ; strcpy(tp, line) ; if (strncmp(line, "%%Creator: ", 11) == 0) { anApplication = tp + 11 ; } else if (strncmp(line, "%%Title: ", 9) == 0) { aTitle = tp + 9 ; } else if (strncmp(line, "%%CreationDate: ", 16) == 0) { date = tp + 16 ; } else if (strncmp(line, "%%For: ", 7) == 0) { user = tp + 7 ; } else if (strncmp(line, "%%Pages: ", 9) == 0) { int nump ; sscanf(tp + 9, "%d", &nump) ; numPages = nump ; maxpage = nump ; } else if (strncmp(line, "%%BoundingBox: ", 15) == 0) { int llx, lly, urx, ury ; sscanf(tp + 15, "%d %d %d %d", &llx, &lly, &urx, &ury) ; bb.origin.x = llx ; bb.origin.y = lly ; bb.size.width = urx - llx ; bb.size.height = ury - lly ; boundingBox = &bb ; } else { ignored[numtopass++] = tp ; } tp = tp + strlen(tp) - 1 ; *tp++ = 0 ; } [super beginPrologueBBox:boundingBox creationDate:date createdBy:anApplication fonts:(const char *)"" forWhom:user pages:numPages title:aTitle] ; [super endHeaderComments] ; for (i=0; i<numtopass; i++) DPSPrintf(DPSGetCurrentContext(), "%s\n", ignored[i]) ; while (fgets(line, LINELEN, f)) { /* we're at the `real' trailer if we hit the %%Trailer comment with less than 100 bytes to go. This is a kludge but it works for dvips output, which is the only output we care about. Note that this code will seek for every %%Trailer seen, but that shouldn't be too often. */ if (strncmp(line, "%%Trailer", 9) == 0) { char dummy[100] ; long t = ftell(f) ; if (fread(dummy, 1, 100, f) < 100) { fseek(f, t, 0) ; break ; } fseek(f, t, 0) ; } DPSPrintf(DPSGetCurrentContext(), "%s", line) ; } /* * Now we disable the coversheet page number, after printing our own. * Serious kludge! DPSPrintf(DPSGetCurrentContext(), "%%%%Page: Coversheet %d\n%%%%%%", numPages+1) ; */ return self ; } - endHeaderComments { return self ; } - endPrologue { return self ; } - beginSetup { return self ; } - endSetup { return self ; } - beginPageSetupRect:(const NXRect *)ar placement:(const NXPoint *)loc { return self ; } - endPageSetup { return self ; } - beginPage:(int)ord label:(const char *)as bBox:(const NXRect *)pr fonts:(const char *)fn { return self ; } - endPage { return self ; } - beginTrailer { if (f) { DPSPrintf(DPSGetCurrentContext(), "%s", line) ; while (fgets(line, LINELEN, f)) DPSPrintf(DPSGetCurrentContext(), "%s", line) ; fclose(f) ; f = 0 ; } return self ; } - endTrailer { return self ; } - copyPSCodeInside:(const NXRect *)rect to:(NXStream *)stream { return self ; } - (BOOL)knowsPagesFirst:(int *)fpn last:(int *)lpn { return YES ; } - (BOOL)getRect:(NXRect *)theRect forPage:(int)page { if (page > maxpage) return NO ; theRect->origin.x = 0 ; theRect->size.width = 10.0 ; theRect->origin.y = 400.0 * (page - 1) / (maxpage + 1) ; theRect->size.height = 400.0 / (maxpage + 1) ; return YES ; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.