This is SurfTIFFDecoder.m in view mode; [Download] [Up]
/*
** Copyright (c) 1995 Netsurfer Inc. All Rights Reserved.
**
** Author: <bbum@friday.com>
*/
/* This object is included in the MiscKit by permission from the author
** and its use is governed by the MiscKit license, found in the file
** "LICENSE.rtf" in the MiscKit distribution. Please refer to that file
** for a list of all applicable permissions and restrictions.
*/
#import <appkit/appkit.h>
#import "../surfimage.h"
#import "SurfTIFFDecoder.h"
@implementation SurfTIFFDecoder
/*"
* Since TIFF is the native image type under NEXTSTEP, there is very little
* for this image decoder to do.
"*/
+ sharedInstance
/*"
* A convenience method for managing a single, shared instance of the
* decoder.
"*/
{
static id sharedInstance = nil;
if (!sharedInstance) {
sharedInstance = [self alloc];
[sharedInstance init];
}
return sharedInstance;
}
+ (const char *const *)imageUnfilteredFileTypes;
/*"
* Returns a NULL terminated array of file extensions that an instance of
* this decoder can decode.
"*/
{
static const char *const tiffTypes[] = {
"tif",
"TIF",
"tiff",
"TIFF",
NULL};
return tiffTypes;
}
+ (BOOL)canLoadFromStream:(NXStream *)stream
/*"
* Returns YES if an instance of this decoder can likely decode the
* contents of stream.
"*/
{
long startingPosition = NXTell(stream);
BOOL canRead = NO;
unsigned index;
unsigned char header[4];
unsigned short iiBuf[] = {0x49, // I
0x49, // I
0x2A, // arbitrary 42 (long)
0x00};// arbitrary 42 (long)
unsigned short mmBuf[] = {0x4D, // M
0x4D, // M
0x00, // arbitrary 42 (long)
0x2A};// arbitrary 42 (long)
if(!NXRead(stream, header, 4))
goto resetAndReturn;
for(index = 0;index<4;index++)
if(iiBuf[index] != header[index])
break;
canRead = (index == 4);
if(!canRead) {
for(index = 0;index<4;index++)
if(mmBuf[index] != header[index])
break;
canRead = (index == 4);
}
resetAndReturn:
/* Reset stream back to the starting postiion.
*/
NX_DURING
NXSeek(stream, startingPosition, NX_FROMSTART);
NX_HANDLER
NXLogError("Attempted to NXSeek() a stream that cannot be NXSeek()ed.");
canRead = NO;
NX_ENDHANDLER
return canRead;
}
- _decodeFromStream: (NXStream *) theStream
{
id bitmapIR = [[NXBitmapImageRep allocFromZone:[self zone]]
initFromStream: theStream];
if(bitmapIR) {
[returnImage useRepresentation: bitmapIR];
return returnImage;
} else {
return nil;
}
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.