This is Controller.m in view mode; [Download] [Up]
/* Generated by Interface Builder */
#import "Controller.h"
#import <appkit/Application.h>
#import <objc/typedstream.h>
#import <objc/NXStringTable.h>
#import <appkit/FontManager.h>
#import <appkit/Listener.h>
#import <defaults.h>
#define GETD(XX) ((strcmp(NXGetDefaultValue([NXApp appName],XX),"on")==0) ? 1 : 0)
#define STATE(XX) ([XX state] ? "on" : "off")
@implementation Controller
- init
{
[super init];
// get instances of support objects
openReq = [OpenPanel new];
archiveReq = [OpenPanel new];
/*[archiveReq allowBranchSel:YES];*/
return self;
}
- updateFileViewer
{
id speaker;
speaker = [NXApp appSpeaker];
[speaker setSendPort:NXPortFromName(NX_WORKSPACEREQUEST, NULL)];
[speaker performRemoteMethod:"updateViewers"];
return self;
}
- showError: (const char *)errorMessage
{
NXRunAlertPanel(NULL, errorMessage,
[stringSet valueForStringKey:"OK"], NULL, NULL);
return self;
}
- openRequest:sender
{
const char *fileName;
const char *const types[5] = {"lha", "lzh", "Z", "tar", NULL};
if ([openReq runModalForTypes:types] && (fileName = [openReq filename])) {
[self openFile:fileName];
}
else
[self showError:[stringSet valueForStringKey:"errorOnOpenRequest"]];
return self;
}
-(BOOL) appAcceptsAnotherFile:sender
{
return (YES);
}
-(int) appOpenFile:(char *)fileName type:(char *)fileType
{
return [self openFile:fileName];
}
static int
compare_postfix(char *str1, char *str2) {
int l1, l2;
l1 = strlen(str1);
l2 = strlen(str2);
if (l2>l1)
return 0;
if (strcmp(str1 + l1 - l2, str2)==0)
return 1;
return 0;
}
-(int) openFile:(const char *)fileName
{
char buff[256], fname[256], *p;
int done=0;
strcpy (fname, fileName);
p = strrchr (fname,'/');
if (!p) return NO;
*p = '\0';
while (!done) {
if (compare_postfix(p+1,".Z"))
sprintf (buff, "(cd %s; uncompress %s)", fname, p+1);
else if (compare_postfix(p+1,".lzh") || compare_postfix(p+1,".lha")) {
if ( [boxRemoveLha state] )
sprintf (buff, "(cd %s; lha xq %s; rm %s)", fname, p+1, p+1);
else
sprintf (buff, "(cd %s; lha xq %s)", fname, p+1);
}
else if (compare_postfix(p+1,".tar")) {
if ( [boxRemoveTar state] )
sprintf (buff, "(cd %s; tar -xf %s; rm %s)", fname, p+1, p+1);
else
sprintf (buff, "(cd %s; tar -xf %s)", fname, p+1);
}
else if (compare_postfix(p+1,".zip")) {
if ( [boxRemoveZip state] )
sprintf (buff, "(cd %s; unzip %s; rm %s)", fname, p+1, p+1);
else
sprintf (buff, "(cd %s; unzip %s)", fname, p+1);
}
else {
[self showError:[stringSet valueForStringKey:"errorOnOpen"]];
return NO;
}
system (buff);
done = 1;
if ( compare_postfix(p+1,".tar.Z") && [boxAutoUntar state] ) {
*strrchr (p+1, '.') = '\0';
done = 0;
}
}
[self updateFileViewer];
return YES;
}
- archiveRequest:sender
{
const char *fileName;
const char *const types[1] = {NULL};
if ([archiveReq runModalForTypes:types] && (fileName = [openReq filename]))
{
[self openFile:fileName];
}
else
[self showError:[stringSet valueForStringKey:"errorOnOpenRequest"]];
return self;
}
- appDidInit:sender
{
static NXDefaultsVector ArchiveDefaults = {
{"boxRemoveTar", "on"},
{"boxRemoveLha", "off"},
{"boxRemoveZip", "off"},
{"boxAutoQuit", "on"},
{"boxAutoUntar", "on"},
{"boxQueryScheme", "off"},
{"boxQueryRemove", "off"},
{NULL, NULL}
};
NXRegisterDefaults([NXApp appName], ArchiveDefaults);
[boxRemoveTar setState:GETD("boxRemoveTar")];
[boxRemoveLha setState:GETD("boxRemoveLha")];
[boxRemoveZip setState:GETD("boxRemoveZip")];
[boxAutoQuit setState:GETD("boxAutoQuit")];
[boxAutoUntar setState:GETD("boxAutoUntar")];
[boxQueryScheme setState:GETD("boxQueryScheme")];
[boxQueryRemove setState:GETD("boxQueryRemove")];
/*
myListener = [NXApp appListener];
[myListener setServicesDelegate: self];
*/
return self;
}
- appWillTerminate:sender
{
NXDefaultsVector ArchiveDefaults = {
{"boxRemoveTar", STATE(boxRemoveTar)},
{"boxRemoveLha", STATE(boxRemoveLha)},
{"boxRemoveZip", STATE(boxRemoveZip)},
{"boxAutoQuit", /*STATE(boxAutoQuit)*/ "off"},
{"boxAutoUntar", STATE(boxAutoUntar)},
{"boxQueryScheme", /*STATE(boxQueryScheme)*/ "off"},
{"boxQueryRemove", /*STATE(boxQueryRemove)*/ "off"},
{NULL, NULL}
};
printf("%s\n", STATE(boxRemoveTar));
NXWriteDefaults([NXApp appName], ArchiveDefaults);
return self;
}
- appDidResignActive:sender
{
return self;
}
- appDidBecomeActive:sender
{
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.