home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / COMPICO.ZIP / COMPICO.C next >
C/C++ Source or Header  |  1992-10-23  |  3KB  |  110 lines

  1. #define INCL_DOS
  2. #include <os2.h>
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <malloc.h>
  8.  
  9. typedef struct
  10. {
  11.    char * ico_name;
  12.    char * ico_string;
  13.    int ico_len;
  14. } ICO;
  15. typedef ICO * PICO;
  16.  
  17. void load (PICO [], char *, USHORT *);
  18.  
  19. main ()
  20. {
  21.    int indx;
  22.  
  23.    HDIR hdir = 0xFFFF;
  24.    FILEFINDBUF findbuf;
  25.    USHORT usSearchCount = 1, num_icons = 0, curr_ico = 0, comp_ico;
  26.    PICO * pico;
  27.  
  28.    printf ("Loading");
  29.  
  30.    if (DosFindFirst ("*.ICO", &hdir, FILE_NORMAL,
  31.                      &findbuf, sizeof (findbuf),
  32.                      &usSearchCount, 0L) != 0)
  33.    {
  34.       printf ("\nNo .ICO files found\n");
  35.       return 96;
  36.    }
  37.    do num_icons++;
  38.    while (DosFindNext (hdir,
  39.                        &findbuf,
  40.                        sizeof (findbuf),
  41.                        &usSearchCount) == 0);
  42.    printf (" %d icons; please wait...\n", num_icons);
  43.  
  44.    pico = (PICO *) malloc ((num_icons) * sizeof (PICO));
  45.  
  46.    usSearchCount = 1;
  47.    DosFindFirst ("*.ICO", &hdir, FILE_NORMAL,
  48.                  &findbuf, sizeof (findbuf),
  49.                  &usSearchCount, 0L);
  50.  
  51.    do load (pico, findbuf.achName, &curr_ico);
  52.    while (DosFindNext (hdir,
  53.                        &findbuf,
  54.                        sizeof (findbuf),
  55.                        &usSearchCount) == 0);
  56.  
  57.    printf ("Comparing icons...\n");
  58.  
  59.    for (curr_ico = 0; curr_ico < num_icons; curr_ico++)
  60.       for (comp_ico = curr_ico + 1; comp_ico < num_icons; comp_ico++)
  61.          if (pico [curr_ico]->ico_len == pico [comp_ico]->ico_len)
  62.          {
  63.             for (indx = 0; indx < pico [curr_ico]->ico_len; indx++)
  64.             {
  65.                if (pico [curr_ico]->ico_string [indx] != pico [comp_ico]->ico_string [indx])
  66.                {
  67.                   indx = -1;
  68.                   break;
  69.                }
  70.             }
  71.             if (indx > 0)
  72.                printf ("%s matches %s\n",
  73.                        pico [curr_ico]->ico_name,
  74.                        pico [comp_ico]->ico_name);
  75.          }
  76.  
  77.    return 0;
  78. }
  79.  
  80.  
  81. void load (PICO pico [], char * filename, USHORT * curr_ico)
  82. {
  83.    char * s;
  84.    int count;
  85.    FILE *filenum;
  86.  
  87.    pico [*curr_ico] = (PICO) malloc (sizeof (ICO));
  88.  
  89.    pico [*curr_ico]->ico_name = (char *) malloc ((1 + strlen (filename)) * sizeof (char));
  90.    strcpy (pico [*curr_ico]->ico_name, filename);
  91.  
  92.    filenum = fopen (filename, "r+b");
  93.    if (filenum == NULL)
  94.    {
  95.       printf ("Cannot open %s\n", filename);
  96.       exit (99);
  97.    }
  98.    pico [*curr_ico]->ico_len = filelength (fileno (filenum));
  99.  
  100.    if ((pico [*curr_ico]->ico_string = (char *) malloc ((1 + pico [*curr_ico]->ico_len) * sizeof (char))) == NULL)
  101.    {
  102.       printf ("Cannot allocate space\n");
  103.       exit (98);
  104.    }
  105.    count = fread (pico [*curr_ico]->ico_string, sizeof (char), pico [*curr_ico]->ico_len, filenum);
  106.    fclose (filenum);
  107.  
  108.    (*curr_ico)++;
  109. }
  110.