d2q.c

by Dave Aronson

/* decimal to dotted quad converter */
/* COPYRIGHT 1998, David J. Aronson */
/* License freely granted for all spamfighting use */
/* All other rights reserved */

#include <stdio.h>
#include <stdlib.h>

unsigned long atoul (char *s);

void main (int argc, char *argv[])
{
   int                  argNum;
   unsigned long        l;
   int                  quadNum;

   /* for each arg */
   for (argNum = 1; argNum < argc; argNum++)
   {
      unsigned long     mask = 0xFF000000;
      int               shift = 0;

      /* convert string to number */
      l = atoul (argv[argNum]);

      /* print original string */
      printf ("%s = ", argv[argNum]);

      /* for each quad */
      for (quadNum = 0; quadNum < 4; quadNum++)
      {
         /* if this isn't the first one, separate from previous */
         if (quadNum) printf (".");

         /* mask out OTHER quads, and shift as needed to get 0-255 */
         printf ("%ld", (l & (mask >> shift)) >> (24 - shift));

         /* shift over to next quad */
         shift += 8;

      /* end for each quad */
      }

      printf ("\n");

   /* end for each arg */
   }

/* end main() */
}


/* convert string to UNSIGNED long; atol is SIGNED, dagnabit! */

unsigned long atoul (char *string)
{
   char*                charPtr;
   unsigned long        l = 0;

   /* for each char in string */
   for (charPtr = string; *charPtr; charPtr++)
   {
      /* multiply total-so-far by ten and add digit */
      l = l * 10 + (*charPtr - '0');
   }

   return l;
}