This is NewsController.m in view mode; [Download] [Up]
// NewsController.m -
#import "NewsController.h"
@implementation NewsController
- run
{
[self setDelegate:self];
return [super run];
}
- appDidInit:sender;
{
NXSize contentSize;
NXRect matrixRect;
char serverName[BUFFER_SIZE];
static NXDefaultsVector myDefaults = {
{NEWS_HOST, NNTPSERVER},
{NULL}
};
if (getenv(NNTP_SERVER))
myDefaults[0].value = getenv(NNTP_SERVER);
NXRegisterDefaults([NXApp appName], myDefaults);
strcpy(serverName, NXGetDefaultValue([NXApp appName], NEWS_HOST));
while (![self openServer:serverName]) {
[NXApp terminate:self]; // get another server
}
// newsgroupsMatrix
// set docView to Matrix, free old one
[[newsgroupsScrollView setDocView:newsgroupsMatrix] free];
[newsgroupsScrollView setDocCursor:NXArrow];
[newsgroupsMatrix readNewsrc];
[newsgroupsMatrix setupNNTP:nntpFile];
// articlesMatrix
// set docView to Matrix, free old one
[[articlesScrollView setDocView:articlesMatrix] free];
[articlesScrollView setDocCursor:NXArrow];
[articlesMatrix setupNNTP:nntpFile];
// articleDisplay
[articleDisplay setupNNTP:nntpFile];
return self;
}
- terminate:sender
{
[newsgroupsMatrix writeNewsrc];
return [super terminate:sender];
}
- openServer:(const char *)serverName
{
int nntpSocket;
struct servent *nntpEnt;
struct protoent *nntpProtoEnt;
struct hostent *nntpHost;
struct sockaddr_in nntpServer;
//
int inCode;
char inCodeText[512];
if ((nntpEnt = getservbyname("nntp", "tcp")) == NULL) {
NXRunAlertPanel("News Flash",
"Cannot find nntp service in 'services' database.",
NULL, NULL, NULL);
return nil;
}
if ((nntpProtoEnt = getprotobyname(nntpEnt->s_proto)) == NULL) {
NXRunAlertPanel("News Flash", "Cannot lookup protocol type.",
NULL, NULL, NULL);
return nil;
}
if ((nntpSocket = socket(AF_INET, SOCK_STREAM, nntpProtoEnt->p_proto))== -1){
NXRunAlertPanel("News Flash", "Cannot create socket to news server.",
NULL, NULL, NULL);
return nil;
}
if ((nntpHost = gethostbyname(serverName)) == NULL) {
NXRunAlertPanel("News Flash", "Cannot find address of host %s.",
NULL, NULL, NULL, serverName);
return nil;
}
nntpServer.sin_family = nntpHost->h_addrtype;
bcopy(nntpHost->h_addr, &nntpServer.sin_addr, nntpHost->h_length);
nntpServer.sin_port = nntpEnt->s_port;
if ((connect(nntpSocket, (struct sockaddr *) &nntpServer,
sizeof(nntpServer))) == -1) {
NXRunAlertPanel("News Flash", "Cannot connect to news server on %s.",
NULL, NULL, NULL, serverName);
return nil;
}
nntpFile = fdopen(nntpSocket, "r+");
fscanf(nntpFile, "%d %[^\r]\r", &inCode, &inCodeText);
fgetc(nntpFile);
fseek(nntpFile, (long)0, SEEK_END);
switch (inCode) {
case OK_CANPOST:
case OK_NOPOST:
canPost = (inCode == OK_CANPOST);
break;
default:
NXRunAlertPanel("News Flash", "News server on %s responded incorrectly.",
NULL, NULL, NULL, serverName);
return nil;
break;
}
return self;
}
- setNewsgroupsScrollView:anObject
{
newsgroupsScrollView = anObject;
return self;
}
- setArticlesScrollView:anObject
{
articlesScrollView = anObject;
return self;
}
- setNewsgroupsMatrix:anObject;
{
newsgroupsMatrix = anObject;
return self;
}
- setArticlesMatrix:anObject;
{
articlesMatrix = anObject;
return self;
}
- setArticleDisplay:anObject
{
articleDisplay = anObject;
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.