This is FromHeaderController.m in view mode; [Download] [Up]
#import <appkit/appkit.h> #import <foundation/foundation.h> #import <pwd.h> #import "../Alexandra.h" #import "MailAddress.h" #import "FromHeaderController.h" #import "FromHeaderPanel.h" #import "askresolverfordomain.h" #define NO_ADDRESS_SET "You have not specified a `From' header in the preferences. Please check the default and correct it if necessary." #define MALFORMED_ADDRESS "The address you specified for the `From' header does not conform to Usenet standards. One of the allowed formats is: `Alexandra Info <alexandra-info@object-factory.com>'" @implementation FromHeaderController + new { static FromHeaderController *me=nil; if(!me) me=[[FromHeaderController alloc] init]; return me; } - (char *)computeAddress; { MailAddress *mailAddress; NSMutableString *realName; char *domain_name; struct passwd *pwent; const char *user_name; NSRange ampRange; user_name = NXUserName(); pwent = getpwnam(user_name); // These days it is more likely that the machine name is not part of the // mail address. Hence, we ignore it. if((domain_name = askresolverfordomain()) == NULL) domain_name = ""; mailAddress = [MailAddress mailAddressWithLocalPart:[NSString stringWithCString:user_name] domain:[NSString stringWithCString:domain_name]]; if(pwent != NULL) { realName = [NSMutableString stringWithCString:pwent->pw_gecos]; if((ampRange = [realName rangeOfString:@"&"]).length != 0) [realName replaceCharactersInRange:ampRange withString:[NSString stringWithCString:pwent->pw_name]]; [mailAddress setRealName:realName]; } return NXCopyStringBufferFromZone([[mailAddress stringRepresentation] cString],[self zone]); } - (char *)validFromAddress; { KVPair *pair; const char *d; char defname[200], defvalue[200],*fromAddress=NULL; int i,n=[NXApp defaultIntValue:DEFAULT_XHEADER_COUNT],ret; BOOL stopSearching=NO; for(i=0;i<n && !stopSearching;i++) { sprintf(defname,DEFAULT_XHEADERS,i+1); d=[NXApp defaultValue:defname]; if(d) { pair=[[KVPair alloc] init:d delimiter:':']; if([pair isNull]) stopSearching=YES; else if(!strcmp([pair key],"From")) { fromAddress=NXCopyStringBufferFromZone([pair value],[self zone]); stopSearching=YES; } pair=[pair free]; } } while((fromAddress == NULL) /*|| ([MailAddress isValidMailAddress: [NSString stringWithCString:fromAddress]] == NO)*/ ) { if(!thePanel) [NXApp loadNibSection:"FromHeader.nib" owner:self]; [thePanel makeKeyAndOrderFront:self]; if(fromAddress == NULL) { fromAddress=[self computeAddress]; ret=[thePanel runModalForAddress:fromAddress withExplanation:NO_ADDRESS_SET]; NXZoneFree([self zone],fromAddress); } else { ret=[thePanel runModalForAddress:fromAddress withExplanation:MALFORMED_ADDRESS]; } [thePanel orderOut:self]; if(ret == 0) return NULL; fromAddress=(char *)[thePanel fromAddress]; } if(i==n) [NXApp setDefault:DEFAULT_XHEADER_COUNT toInt:++i]; sprintf(defvalue, "From: %s",fromAddress); sprintf(defname,DEFAULT_XHEADERS,i); [NXApp setDefault:defname to:defvalue]; EM_ERROR(ENOTEPrefsChanged,self,NULL); return NXCopyStringBufferFromZone(fromAddress,[self zone]); } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.