This is EnhanceMail.m in view mode; [Download] [Up]
/* -*-C-*-
*******************************************************************************
*
* File: EnhanceMail.m
* RCS: $Header: /usr/local/lib/cvs/EnhanceMail/EnhanceMail.m,v 1.1.1.16 1996/06/25 13:44:09 cedman Exp $
* Description:
* Author: Carl Edman
* Created: Fri Oct 13 11:48:05 1995
* Modified: Tue Jun 25 09:20:02 1996 (Carl Edman) cedman@capitalist.princeton.edu
* Language: C
* Package: N/A
* Status: Experimental (Do Not Distribute)
*
* (C) Copyright 1995, but otherwise this file is perfect freeware.
*
*******************************************************************************
*/
#import "EnhanceMail.h"
#import "Preferences.h"
#import <ctype.h>
#import <sys/wait.h>
NXBundle *EnhanceBundle=0;
char *EnhanceVersion="X";
char *regerrval=0;
static const char *CVSName="$Name: release2_0b4 $";
static BOOL windowsOnUnhide=NO;
BOOL EnhanceControlP(void)
{
NXEvent *ev=[NXApp currentEvent];
return ev && (ev->flags & NX_CONTROLMASK);
}
BOOL EnhanceShiftP(void)
{
NXEvent *ev=[NXApp currentEvent];
return ev && (ev->flags & NX_SHIFTMASK);
}
BOOL EnhanceAlternateP(void)
{
NXEvent *ev=[NXApp currentEvent];
return ev && (ev->flags & NX_ALTERNATEMASK);
}
BOOL EnhancePaths(const char *paths[])
{
int i;
char path[MAXPATHLEN+1];
if (EnhanceBundle==0)
EnhanceBundle=[NXBundle bundleForClass:[EnhanceMail class]];
for(i=0;paths[i];i++)
{
if ((paths[i][0]=='~') && (paths[i][1]=='/'))
{
sprintf(path,"%s%s",NXHomeDirectory(),paths[i]+1);
paths[i]=NXUniqueString(path);
}
else if ((paths[i][0]=='#') && (paths[i][1]=='/'))
{
sprintf(path,"%s%s",[EnhanceBundle directory],paths[i]+1);
paths[i]=NXUniqueString(path);
}
}
return YES;
}
void regerror(char *s)
{
[NXApp logError:"regexp(3): %s",s];
}
@implementation EnhanceMail
+ finishLoading:(struct mach_header *)header
{
const char *beg=CVSName,*end=CVSName+strlen(CVSName);
[self poseAs:[self superclass]];
[NXApp changeClassTo:[self class]];
while((beg<=end) && !isdigit(*beg)) beg++;
while((beg<=end) && !isdigit(*end)) end--;
if (beg<end)
{
char *c;
end++;
EnhanceVersion=strncpy(malloc(end-beg+1),beg,end-beg);
EnhanceVersion[end-beg]='\0';
for(c=EnhanceVersion;*c;c++) if (*c=='_') *c='.';
}
return self;
}
- initialCheck:sender
{
if ([self isHidden])
{
windowsOnUnhide=YES;
}
else
{
if (EnhanceLaunchMailboxes) [(MailDriver *)NXApp mailboxes:self];
if (EnhanceLaunchAddresses) [(MailDriver *)NXApp address:self];
}
return [super initialCheck:sender];
}
- appDidUnhide:sender
{
if (windowsOnUnhide)
{
if (EnhanceLaunchMailboxes) [(MailDriver *)NXApp mailboxes:self];
if (EnhanceLaunchAddresses) [(MailDriver *)NXApp address:self];
windowsOnUnhide=NO;
}
return [super appDidUnhide:sender];
}
- (BOOL)updateCell:cell
{
return [super updateCell:cell];
}
@end
@implementation Menu(EnhanceMail)
- findCellWithTitle:(const char *)title
{
id cell=nil;
int x, y, rows, cols;
const char *c,*end;
if (title==0) return nil;
for(end=title;(*end) && (*end!='/');end++);
[matrix getNumRows:&rows numCols:&cols];
for(y=0;(y<rows) && (cell==nil);y++) for(x=0;(x<cols) && (cell==nil);x++)
{
if ((cell=[matrix cellAt:y:x])==nil) continue;
if (((c=[cell title])==0)||(strncmp(title,c,end-title)!=0)||(c[end-title]!='\0'))
cell=nil;
}
if (cell==nil)
return nil;
else if ((*end!='\0') && [cell hasSubmenu])
return [[cell target] findCellWithTitle:end+1];
else if (*end=='\0')
return cell;
else
return nil;
}
- addSlashItem:(const char *)title action:(SEL)sel keyEquivalent:(unsigned short)code
{
id cell=nil;
int x, y, rows, cols;
const char *c,*end;
if (title==0) return nil;
for(end=title;(*end) && (*end!='/');end++);
[matrix getNumRows:&rows numCols:&cols];
for(y=0;(y<rows) && (cell==nil);y++) for(x=0;(x<cols) && (cell==nil);x++)
{
if ((cell=[matrix cellAt:y:x])==nil) continue;
if (((c=[cell title])==0)||(strncmp(title,c,end-title)!=0)||(c[end-title]!='\0'))
cell=nil;
}
if ((cell==nil) && (*end=='\0'))
{
cell=[self addItem:title action:sel keyEquivalent:code];
[self display];
return cell;
}
else if (cell==nil)
{
char *d=alloca(end-title+1);
strncpy(d,title,end-title);
d[end-title]='\0';
cell=[self addItem:d action:0 keyEquivalent:0];
[self setSubmenu:[[Menu alloc] initTitle:d] forItem:cell];
[self display];
return [[cell target] addSlashItem:end+1 action:sel keyEquivalent:code];
}
else if ((*end!='\0') && [cell hasSubmenu])
return [[cell target] addSlashItem:end+1 action:sel keyEquivalent:code];
else if (*end=='\0')
return cell;
else
return nil;
}
@end
@implementation Object(EnhanceMail)
- changeClassTo:class
{
/* Don't try this at home, kids */
isa=class;
return self;
}
@end
@implementation ButtonCell(EnhanceMail)
- (int)state
{
return [self intValue];
}
- setState:(int)anInt
{
return [self setIntValue:anInt];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.