This is TVpbService.m in view mode; [Download] [Up]
#import <appkit/publicWraps.h>
#import <appkit/Application.h>
#import <appkit/NXImage.h>
#import <appkit/Pasteboard.h>
#import <appkit/Listener.h>
#import <appkit/nextstd.h>
#import <appkit/errors.h>
#import <stdio.h>
#import <stdlib.h>
#import <string.h>
#import <libc.h>
#import <sys/types.h>
#import "TVController.h"
#import "ToyWin.h"
#import "strfunc.h"
#import "common.h"
/* Program by T. Ogihara
This code is based on:
GIFFilter.m, Graphics Interchange Format (GIF) image filter service.
Author: Michael McCulloch
*/
@implementation TVController (PBService)
extern const char **fileTypeBuffer;
extern short *fileTypeIDBuffer;
- convertToTIFF:pasteboard userData:(const char *)userData
error:(char **)errorMessage
{
int i;
NXAtom currentType;
char *data;
int dataLen;
char filename[MAXFILENAMELEN];
NXStream *tiffStream;
static int numTypes = 0;
static NXAtom *convTypes = NULL;
if(!numTypes){
for (i = 0; fileTypeBuffer[i]; i++) ;
convTypes = (NXAtom *)malloc(sizeof(NXAtom) * i);
for (i = 0, numTypes = 0; fileTypeBuffer[i]; i++) {
if (fileTypeIDBuffer[i] != Type_tiff
&& fileTypeIDBuffer[i] != Type_eps)
convTypes[numTypes++]
= NXCreateFilenamePboardType(fileTypeBuffer[i]);
}
convTypes[numTypes] = NULL;
}
currentType = [pasteboard findAvailableTypeFrom:convTypes num:numTypes];
if (!currentType)
return self;
[pasteboard readType:currentType data:&data length:&dataLen];
if(!data || dataLen <= 0)
return self;
/* Get the first name of the file list... */
for (i = 0; i < dataLen; i++) {
if (data[i] == 0 || data[i] == '\t') {
filename[i] = 0;
break;
}
filename[i] = data[i];
}
// Deallocate the file name list
[pasteboard deallocatePasteboardData:data length:dataLen];
if ((i = getExtension(filename)) == 0)
return self; /* No Extension */
if (access(filename, R_OK) != 0)
return self;
tiffStream = [self openStreamFromFile:filename : &filename[i]];
if (tiffStream == NULL)
return self;
NX_DURING
[pasteboard declareTypes:&NXTIFFPboardType num:1 owner:self];
[pasteboard writeType:NXTIFFPboardType fromStream:tiffStream];
NX_HANDLER
NXLogError("Error occurred while converting file %s:",filename);
NXReportError(&NXLocalHandler);
NX_ENDHANDLER
NXCloseMemory(tiffStream, 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.