#include <stdio.h>
#include <libh/net.h>

int
main (
    int		argc
    ,
    char * *	argv
)
{
    char *		addrptr	;
    char *		endptr	;
    ipv4_t		addr1	;
    ipv4_t		addr2	;
    ipv4_t		mask	;
    unsigned int	prefix	;
    unsigned int	count	;
    unsigned int	port	;
    int			rc	;

    while ( -- argc ) {
	addrptr = * ++ argv;

	printf( "\naddress string: \"%s\"\n", addrptr );
	fflush( stdout );
	rc = ipv4_str_to_addr( addrptr,
			       & endptr,
			       & addr1,
			       & addr2,
			       & mask,
			       & prefix,
			       & count,
			       & port );
	fputs( "processed chars: ", stdout );
	while ( addrptr ++ < endptr ) putchar( '-' );
	putchar( '\n' );

	if ( rc & IPV4_STR_TO_ADDR_BAD_ADDR   ) fputs( "bad address\n", stdout );
	if ( rc & IPV4_STR_TO_ADDR_BAD_ADDR2  ) fputs( "bad address 2\n", stdout );
	if ( rc & IPV4_STR_TO_ADDR_BAD_PREFIX ) fputs( "bad prefix or netmask\n", stdout );
	if ( rc & IPV4_STR_TO_ADDR_BAD_COUNT  ) fputs( "bad count\n", stdout );
	if ( rc & IPV4_STR_TO_ADDR_BAD_PORT   ) fputs( "bad port\n", stdout );

	if ( rc & IPV4_STR_TO_ADDR_ADDR		) printf( "  addr1 = 0x%08lx\n", (unsigned long) addr1 );
	if ( rc & IPV4_STR_TO_ADDR_ADDR2	) printf( "  addr2 = 0x%08lx\n", (unsigned long) addr2 );
	if ( rc & IPV4_STR_TO_ADDR_NETMASK	) printf( "   mask = 0x%08lx\n", (unsigned long) mask );
	if ( rc & IPV4_STR_TO_ADDR_PREFIX	) printf( " prefix = %5u\n", prefix );
	if ( rc & IPV4_STR_TO_ADDR_COUNT	) printf( "  count = %5u\n", count );
	if ( rc & IPV4_STR_TO_ADDR_PORT		) printf( "   port = %5u\n", port );
    }

    return 0;
}

