This is Addresses.m in view mode; [Download] [Up]
//
// quick and dirty:
// dialing with the ZyXEL modem
// by: Olaf Mueller <olaf@orest.escape.de>
//
#import "Addresses.h"
#import "AM.h"
@interface Addresses (PrivateAddressesMethods)
static BOOL insertIntoMatrix (id matrix,char *string) ;
static char *conv1 (char *old,char *new) ;
static char *conv2 (char *old,char *new) ;
static char *nameFromBuffer (char *buffer,int where) ;
- click: sender ;
@end
@implementation Addresses
- windowWillClose: sender
{
fclose (fp) ;
return self ;
}
// init
- initForAddressBook: (const char*)filename
{
char tablename [MAXPATHLEN+1] ;
[super init] ;
strcpy (addressname,filename) ;
[NXApp loadNibSection:"Addresses.nib" owner: self] ;
[meinWindow setTitle: strrchr(filename,'/')+1] ;
sprintf (tablename,"%s/AddressBook.table",filename) ;
fp = fopen (tablename,"r") ;
[meinBrowser setAction:@selector(click:)] ;
[meinWindow makeKeyAndOrderFront: self] ;
return self ;
}
// service for friends
- orderFront: sender
{
[meinWindow makeKeyAndOrderFront: self] ;
return self ;
}
- (const char*)name
{
return addressname ;
}
- (int) browser:aBrowser fillMatrix:aMatrix inColumn:(int)aColumn
{
int count = 0 ;
char buffer [256] , name [256] ;
while (fgets(buffer,sizeof(buffer),fp) != NULL)
if (strstr(buffer," = {\n") != NULL && !strstr(buffer,"Contents"))
if (insertIntoMatrix(aMatrix,conv1(nameFromBuffer(buffer,1),name)))
count++ ;
return count ;
}
- privateNumber: sender ;
{
[NXApp newDialNumber: [meineForm stringValueAt: 4]] ;
return self ;
}
- companyNumber: sender ;
{
[NXApp newDialNumber: [meineForm stringValueAt: 3]] ;
return self ;
}
// ------------------- private methods -------------------------
static BOOL insertIntoMatrix (id matrix,char *string)
{
int ii , cmp ;
id t ;
for (ii = 0 ; ii < [matrix cellCount] ; ii++)
if ((cmp = strcmp([[matrix cellAt:ii:0] stringValue],string)) == 0)
return NO ;
else if (cmp > 0)
break ;
[matrix insertRowAt: ii] ;
t = [matrix cellAt:ii :0] ;
[t setStringValue: string] ;
[t setLoaded: YES] ;
[t setLeaf: YES] ;
return YES ;
}
static char *conv1 (char *old,char *new)
{
int special = 0 ;
char *cp ;
for (cp = new ; *old ; old++)
{
if (special)
{
if (*old >= '0' && *old <= '7')
*cp = *cp * 8 + (*old - '0') ;
else
{
cp++ ;
*cp++ = *old ;
special = 0 ;
}
}
else if (*old == '\\')
{
*cp = 0 ;
special = 1 ;
}
else
*cp++ = *old ;
}
*cp = '\0' ;
return new ;
}
static char *conv2 (char *old,char *new)
{
char *cp ;
for (cp = new ; *old ; old++)
{
if (*old < 0x20)
{
sprintf (cp,"\\%03o",(unsigned char)*old) ;
cp += 4 ;
}
else
*cp++ = *old ;
}
*cp = '\0' ;
return new ;
}
static char *nameFromBuffer (char *buffer,int where)
{
char *cp ;
cp = strstr (buffer," = ") ;
if (where == 1)
{
*cp = '\0' ;
while (*buffer == ' ' || *buffer == '\"')
buffer++ ;
cp = buffer + strlen(buffer) - 1 ;
}
else
{
buffer = cp + 3 ;
if (*buffer == '\"')
buffer++ ;
cp = strchr (buffer,';') ;
*(cp--) = '\0' ;
}
if (*cp == '\"')
*cp = '\0' ;
return buffer ;
}
- click: sender
{
const char *clickname = [[meinBrowser selectedCell] stringValue] ;
int ii ;
char buffer [256] , name [256] ;
BOOL nameFound = NO ;
for (ii = 0 ; ii < 5 ; ii++)
[meineForm setStringValue: NULL at: ii] ;
[privateButton setEnabled: NO] ;
[companyButton setEnabled: NO] ;
if (clickname)
{
rewind (fp) ;
sprintf (name,"%s",conv2((char*)clickname,buffer)) ;
while (fgets(buffer,sizeof(buffer),fp) != NULL)
{
if (!nameFound)
{
if (strstr(buffer,name))
nameFound = YES ;
}
else
{
if (strstr(buffer,"};"))
break ;
else if (strstr(buffer,"\"Full Name\" = "))
[meineForm setStringValue: conv1(nameFromBuffer(buffer,2),name) at: 0] ;
else if (strstr(buffer,"EMail = "))
[meineForm setStringValue: conv1(nameFromBuffer(buffer,2),name) at: 1] ;
else if (strstr(buffer,"FAX = "))
[meineForm setStringValue: conv1(nameFromBuffer(buffer,2),name) at: 2] ;
else if (strstr(buffer,"\"Work Phone\" = "))
{
[meineForm setStringValue: conv1(nameFromBuffer(buffer,2),name) at: 3] ;
[companyButton setEnabled: YES] ;
}
else if (strstr(buffer,"\"Home Phone\" = "))
{
[meineForm setStringValue: conv1(nameFromBuffer(buffer,2),name) at: 4] ;
[privateButton setEnabled: YES] ;
}
}
}
}
return self ;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.