This is PreferencesController.m in view mode; [Download] [Up]
/* Generated by Interface Builder */
#import <streams/streams.h>
#import "PreferencesController.h"
#import "CookieFile.h"
#import <sys/types.h>
#include <sys/stat.h>
#import <sys/dir.h>
#import <sys/param.h>
#import <defaults.h>
#import "CookieFileListView.h"
#import "CookieController.h"
extern NXDefaultsVector mydefaults;
@implementation PreferencesController
- setSeconds :(int)secs
{
char string[32],temp[32];
seconds = secs;
string[0] = 0;
switch((secs/60))
{
case 0 : break;
case 1 : strcpy(string,"1 min ");
break;
default : sprintf(string,"%d mins ",secs/60);
break;
}
switch((secs%60))
{
case 0 : break;
case 1 : strcat(string,"1 sec");
break;
default : sprintf(temp,"%d secs",secs%60);
strcat(string,temp);
break;
}
if(secs == 0)
strcpy(string,"no secs");
[timeDisplay setStringValue:string];
[timeDisplay display];
return self;
}
- revert:sender
{
[NXApp stopModal];
[prefPanel orderOut:self];
return self;
}
- switchTimer:sender
{
flags ^= PREF_TIMER;
return self;
}
- ok:sender
{
NXStream *stream;
char mypath[MAXPATHLEN];
int count;
NXRect myRect;
sprintf(mypath,"%s/.Cookie_Defaults",getenv("HOME"));
stream = NXOpenMemory(NULL,0,NX_READWRITE);
if(!stream)
return 0;
for(count = 0; count < [((List *)cookieList) count]; count++)
{
CookieFile *cookieFile;
int length;
char myflags = 0;
cookieFile = [cookieList objectAt:count];
if([[[((CookieFileListView *)fileList) matrix] cellAt:count:0] state])
[cookieFile setSelected:TRUE];
else
[cookieFile setSelected:FALSE];
length = strlen([cookieFile filename])+1;
NXWrite(stream,(char *)&length,sizeof(int));
NXWrite(stream,[cookieFile filename],length);
if([cookieFile selected])
myflags = TRUE;
NXWrite(stream,(char *)&myflags,1);
}
if(NXSaveToFile(stream,mypath))
{
NXCloseMemory(stream,NX_FREEBUFFER);
return 0;
}
NXCloseMemory(stream,NX_FREEBUFFER);
if(flags&PREF_DEAD)
NXWriteDefault([NXApp appName],"Status","DEAD");
else
NXWriteDefault([NXApp appName],"Status","ALIVE");
if(flags&PREF_TIMER)
NXWriteDefault([NXApp appName],"Timer","YES");
else
NXWriteDefault([NXApp appName],"Timer","NO");
sprintf(mypath,"%d",seconds);
NXWriteDefault([NXApp appName],"Seconds",mypath);
myRect = [cookieController getWindowRect];
sprintf(mypath,"%.0f %.0f %.0f %.0f",myRect.origin.x,myRect.origin.y,myRect.size.width,
myRect.size.height);
NXWriteDefault([NXApp appName],"MainFrame",mypath);
NXWriteDefault([NXApp appName],"NXFont",[cookieController fontname]);
myRect.origin.x = [((CookieController *)cookieController) fontsize];
sprintf(mypath,"%.0f",myRect.origin.x);
NXWriteDefault([NXApp appName],"NXFontSize",mypath);
[NXApp stopModal];
[prefPanel orderOut:self];
[cookieController newPrefs];
return self;
}
- changeTimer:sender
{
float newValue;
newValue = [sender floatValue];
[self setSeconds:((int)newValue)];
return self;
}
- startPreferences:sender
{
[fileList syncView:cookieList];
if(flags&PREF_TIMER)
[timerButton setState:FALSE];
else
[timerButton setState:TRUE];
if(flags&PREF_DEAD)
[statusButton setState:TRUE];
else
[statusButton setState:FALSE];
[timerSlider setFloatValue:(float)seconds];
[timerButton display];
[statusButton display];
[timerSlider display];
[self setSeconds:seconds];
[prefPanel makeKeyAndOrderFront:self];
[NXApp runModalFor:prefPanel];
return self;
}
- changeStatus:sender
{
flags ^= PREF_DEAD;
return self;
}
- getPreferences
{
NXStream *stream;
int entries = 0,dircount;
struct direct **namelist;
char mypath[MAXPATHLEN];
[cookieList init];
sprintf(mypath,"%s/Library/Cookies",getenv("HOME"));
for(dircount = 0; dircount < 2; dircount++)
{
// Try resource in users home directory, then system wide one.
switch(dircount)
{
case 0 :
entries = scandir(mypath, &namelist,NULL,NULL);
break;
case 1 :
entries = scandir("/LocalLibrary/Cookies",&namelist,NULL,NULL);
break;
}
if(entries > 0)
{
int count;
for(count = 0; count < entries; count++)
{
CookieFile *cookieFile;
// Skip over this filename if it starts with a dot
if(namelist[count]->d_name[0] == '.')
continue;
// Must be a cookie file them, make a cookie file for it
cookieFile = [CookieFile alloc];
if([cookieFile initFromName:namelist[count]->d_name fromList:cookieList])
{
struct stat my_stat;
char filepath[MAXPATHLEN];
switch(dircount)
{
case 0 :
sprintf(filepath,"%s/%s",mypath,namelist[count]->d_name);
break;
case 1 :
sprintf(filepath,"%s/%s","/LocalLibrary/Cookies",
namelist[count]->d_name);
break;
}
stat(filepath,&my_stat);
[cookieFile setFilelength:my_stat.st_size];
[cookieList addObject:cookieFile];
}
else
[cookieFile free];
}
// Free all the entries and the list itself
for(count = 0; count < entries; count++)
free((char *)namelist[count]);
free((char *)namelist);
}
}
sprintf(mypath,"%s/.Cookie_Defaults",getenv("HOME"));
stream = NXMapFile(mypath, NX_READONLY);
if(stream)
{
int count;
char name[MAXPATHLEN];
while(NXRead(stream,(char *)&count,sizeof(int)) == sizeof(int))
{
unsigned char myflags;
CookieFile *cookieFile;
NXRead(stream,name,count);
NXRead(stream,(char *)&myflags,1);
cookieFile = [CookieFile findName :name fromList:cookieList];
if(cookieFile)
{
if(myflags)
[cookieFile setSelected:TRUE];
else
[cookieFile setSelected:FALSE];
}
}
NXCloseMemory(stream, NX_FREEBUFFER);
}
if(!strcasecmp(NXGetDefaultValue([NXApp appName],"Status"),"ALIVE"))
flags = 0;
else
flags = PREF_DEAD;
if(!strcasecmp(NXGetDefaultValue([NXApp appName],"Timer"),"YES"))
flags |= PREF_TIMER;
sscanf(NXGetDefaultValue([NXApp appName],"Seconds"),"%d",&seconds);
[cookieController newPrefs];
return self;
}
- (int)seconds
{
return seconds;
}
- (char)flags
{
return flags;
}
- (const char *)fontname
{
return NXGetDefaultValue([NXApp appName],"NXFont");
}
- (int)fontsize
{
return atoi(NXGetDefaultValue([NXApp appName],"NXFontSize"));
}
- (NXRect)windowframe
{
NXRect myRect;
sscanf(NXGetDefaultValue([NXApp appName],"MainFrame"),"%f %f %f %f",
&myRect.origin.x,&myRect.origin.y,&myRect.size.width,&myRect.size.height);
return myRect;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.