ftp.nice.ch/pub/next/unix/communication/newam.0.1.s.tar.gz#/newam-0.1/Dial/Addresses.m

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 "Dial.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) ;

- 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] , *cp ;

	while (fgets(buffer,sizeof(buffer),fp) != NULL)
		if ((cp = strstr(buffer,"\" = {\n")) != NULL)
		{
			*cp = '\0' ;
			if (insertIntoMatrix(aMatrix,conv1(strchr(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 ;
}


- 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\" = {\n",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\" = \""))
				{
					*strrchr (buffer,'\"') = '\0' ;
					[meineForm setStringValue: conv1(strrchr(buffer,'\"')+1,name) at: 0] ;
				}
				else if (strstr(buffer,"EMail = \""))
				{
					*strrchr (buffer,'\"') = '\0' ;
					[meineForm setStringValue: conv1(strrchr(buffer,'\"')+1,name) at: 1] ;
				}
				else if (strstr(buffer,"FAX = \""))
				{
					*strrchr (buffer,'\"') = '\0' ;
					[meineForm setStringValue: conv1(strrchr(buffer,'\"')+1,name) at: 2] ;
				}
				else if (strstr(buffer,"\"Work Phone\" = \""))
				{
					*strrchr (buffer,'\"') = '\0' ;
					[meineForm setStringValue: conv1(strrchr(buffer,'\"')+1,name) at: 3] ;
					[companyButton setEnabled: YES] ;
				}
				else if (strstr(buffer,"\"Home Phone\" = \""))
				{
					*strrchr (buffer,'\"') = '\0' ;
					[meineForm setStringValue: conv1(strrchr(buffer,'\"')+1,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.