This is RASF.m in view mode; [Download] [Up]
#import "RASF.h" #import <stdio.h> #import <stdlib.h> #import <libc.h> #import <zone.h> #import <mach.h> #import <appkit/Window.h> #import <appkit/Panel.h> #import <appkit/tiff.h> // RASF.m // // Written by Vince DeMarco // demarco@cpsc.ucalgary.ca // // This program is In the Public Domain. If you make any improvements to this // program please let me know // @implementation RASF:Image - init { self = [super init]; strncpy(windowIconName,"rasf.icon.tiff",14); return(self); } // The open method written below is // Based on code Written By Thomas Orth // orth@cpsc.ucalgary.ca // // Acually almost completely copied from Tom, I just changed a few variables // and other meaningless stuff like that. // -open:(char *)filename { NXStream *fp; int x,y; int i; unsigned char red,green,blue,n; unsigned char buf[80]; int count = 0; thisview = self; rmap = 0; strncpy(fileName,filename,1024); if ((fp = NXMapFile(fileName,NX_READONLY)) == NULL) { NXRunAlertPanel("RASF ERROR", "Can't open %s", NULL, NULL, NULL, fileName); return(self); } //Read in the header from the RASF file NXRead(fp,buf,sizeof(char)*8); if(strncmp((char *)buf,"gl RASF",8)){ NXRunAlertPanel("RASF ERROR", "%s Not an RASF file ", NULL, NULL, NULL, fileName); return(self); } // Read in the size of the raster file from the header for (i=0;i<2;i++){ NXRead(fp,&red,sizeof(char)); } NXRead(fp,&red,sizeof(char)); NXRead(fp,&green,sizeof(char)); xsize=red*256+green; for (i=0;i<2;i++){ NXRead(fp,&red,sizeof(char)); } NXRead(fp,&red,sizeof(char)); NXRead(fp,&green,sizeof(char)); ysize=red*256+green; // Now comes the erase values which we will just ignore for (i=0;i<64;i++){ NXRead(fp,&red,sizeof(char)); } // Allocate three buffers to store the R,G,B Triplets r = (unsigned char *)NXZoneMalloc(newZone,ysize*xsize*(sizeof(unsigned char))); g = (unsigned char *)NXZoneMalloc(newZone,ysize*xsize*(sizeof(unsigned char))); b = (unsigned char *)NXZoneMalloc(newZone,ysize*xsize*(sizeof(unsigned char))); i = 0; for (y=(ysize-1);y>=0;y--){ for (x=0;x<xsize;x++){ if (count == 0){ NXRead(fp,&red,sizeof(char)); NXRead(fp,&green,sizeof(char)); NXRead(fp,&blue,sizeof(char)); NXRead(fp,&n,sizeof(char)); r[i] = red; g[i] = green; b[i] = blue; i++; count=n; }else{ count--; r[i] = red; g[i] = green; b[i] = blue; i++; } } } numColors = 3; [self displayImage]; NXCloseMemory(fp,NX_FREEBUFFER); return(self); } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.