/*
** Askhost
** by Kelly Cochran
** Last Update: Wed Sep 17 00:25:01 1997
*/

#include <netdb.h>

const char *version = "\0$VER: CNetAskHost v1.1 "__AMIGADATE__;

void check_entry(char *name);

struct MsgPort         *replyp; /* Some communication details ...       */
struct CPort           *cport;
struct CMessage        cmess;
struct MainPort        *myp;    /* Pointer to CNet port--ALL info!      */
struct PortData        *z;
char                   **bm;
struct Library         *CNetBase   = NULL;

extern struct h_errno;

void main( int argc, char **argv )
{
   if(CNetBase = OpenLibrary("cnet.library", 4))
   {
      Forbid();
      if((argc > 1))/* && (cport = (struct CPort *)FindPort(argv[1])))*/
      {
         Permit();
/*
         if(replyp = CreatePort(0,0))
         {
            cmess.cn_Message.mn_ReplyPort    = replyp;
            cmess.cn_Message.mn_Length       = sizeof( struct CMessage );
            cmess.cn_Message.mn_Node.ln_Name = "cstuff";

            if(cport->ack != 40)
            {
               if(!(cport->ack != 30))
               {
                  cport->ack = 0;
                  z          = cport->zp;
                  myp        = cport->myp;
                  bm         = z->bm;
*/
                  check_entry(argv[1]);
/*
               }
            }
         }
*/
         ShutDown(NULL);
      }
      else
      {
         Permit();
         Printf("Could not find CONTROL process\n\n");
      }
      CloseLibrary(CNetBase);
   }
   else
      Printf("Could not open cnet.library.\n");

   exit(0);
}

void check_entry(char *name)
{
   struct hostent *he;
   char           **alias;
   char           **addr = NULL;
   ULONG          ipaddr;
   int i = 0;
/*
   char           *name;
*/

/*
   if(z->npitems > 1)
      name = z->pitem[1];
   else
   {
      EnterLine(30,ELINE_INPUTBOX | ELINE_ALLOWCHAT,"n1Host information for: ");
      name = z->InBuffer;
   }
*/
   ipaddr = inet_addr(name);
   if(ipaddr != INADDR_NONE)
      he = gethostbyaddr((char *)ipaddr, sizeof(struct in_addr), AF_INET);
   else
      he = gethostbyname(name);

   if(!he)
   {
      switch(h_errno)
      {
         case HOST_NOT_FOUND:
            Printf("Host not found\n");
            break;
         case TRY_AGAIN:
            Printf("BZZT!\n");
            break;
         case NO_RECOVERY:
            Printf("No recovery\n");
            break;
         case NO_DATA:
            Printf("No data\n");
            break;
         default:
            Printf("I have no clue what fubar'\n");
            break;
      }
      return;
   }

   if(he)
   {
      Printf("n1host: %s   type: %ld  length: %ldn1",he->h_name,he->h_addrtype,he->h_length);
      Printf("aliases:n1");
      alias = he->h_aliases;

      for(; **alias; alias++)
      {
         Printf("   %sn1", *alias);
      }

      Printf("address list:n1");
#if 0
      while (*(addr = (char **) (he->h_addr_list[i])))
      {
/*
         addr = (char **)(he->h_addr_list[i]);
*/  
         Printf("   %sn1",Inet_NtoA((ULONG)*addr));
         i++;
      }
#endif
   }
   return;
}
