
#include <windows.h>
#include <stdio.h>
#include <ctype.h>      /* for isdigit() */
#include <stdlib.h>
#include <conio.h>              // for _kbhit(), _getch()
#include <winioctl.h>

int HexIp( UCHAR *ip_buf, int len, UCHAR *op_buf) ;
int laxtoi( UCHAR *str, int len) ;
void ldumps( UCHAR *buf, int cnt) ;

int HexIp( UCHAR *ip_buf, int len, UCHAR *op_buf)
{
    int     i, j ;
    UCHAR   *ptr, ch ;

    j = 0 ;
    ptr=ip_buf ;
    for ( i=0 ; i<len; i++,ptr++) {
        if (( ch= *ptr) == '\\') {
            if ( ptr[1]=='\\') {
                ch = '\\' ;
                i++ ;
                ptr++ ;
            }
            else {
                ch = laxtoi( &ptr[1], 2) ;
                i = i+2 ;
                ptr += 2 ;
            }
        }
        op_buf[ j++] = ch ;
    }

//  ldumps( op_buf, j) ;
    return( j) ;
}

int laxtoi( UCHAR *str, int len)
{
    int     j ;
    int     sum ;

    sum=0 ;
    if ( len<0) len = strlen( (char*)str) ;
    for ( j=0; j<len && str[j]==' '; j++) ;
    for ( ;j<len; j++)
    if ( isxdigit( str[j] ))
        sum = sum*16 + ( isdigit( str[j])? str[j]-'0':
                       ( isupper( str[j])?(str[j]-'A'+10): (str[j]-'a'+10))) ;
    else break ;
    return( sum) ;
}

void ldumps( UCHAR *buf, int cnt)
{
    int     i ;

    if ( cnt < 0)   cnt = strlen( (char*)buf) ;
    for ( i=0; i<cnt; i++) {
        printf( "%02x ", buf[i]) ;
        if (( i&0xf) == 0xf)
            printf( "\n") ;
    }
    printf( "\n") ;
}

