home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / gnu / gmlibs23.lzh / GMLIBS23 / BLDMFORM.C < prev    next >
C/C++ Source or Header  |  1993-07-30  |  3KB  |  159 lines

  1. #include <stdio.h>
  2.  
  3. main (ac, av)
  4. char    **av;
  5. {
  6.     char    **ap, *cp;
  7.     int    xhot, yhot, nplanes;
  8.     int    maskcolor, datacolor;
  9.     char    *datafn, *maskfn;
  10.     char    *name;
  11.     short    gemfmt = 0;
  12.     short    rename = 0;
  13.  
  14.     if (ac < 2)
  15.     {
  16.         printf("usage:  -xypMDmdnG xhot yhot planes mcolor dcolor\n");
  17.         printf("\t\tmaskfn datafn mformname\n");
  18.         printf("or:     -dnR datafn newmformname\n");
  19.         exit(0);
  20.     }
  21.  
  22.     xhot = 0;
  23.     yhot = 0;
  24.     nplanes = 1;
  25.     maskcolor = 0;
  26.     datacolor = 1;
  27.     maskfn = (char *) 0;
  28.     datafn = (char *) 0;
  29.     name = "mform";
  30.  
  31.     for (ap = av + 1; *ap && **ap == '-'; )
  32.         for (cp = *ap++ + 1; *cp; ++cp)
  33.             switch (*cp)
  34.             {
  35.             case 'x':
  36.                 xhot = atoi(*ap++);
  37.                 break;
  38.             case 'y':
  39.                 yhot = atoi(*ap++);
  40.                 break;
  41.             case 'p':
  42.                 nplanes = atoi(*ap++);
  43.                 break;
  44.             case 'M':
  45.                 maskcolor = atoi(*ap++);
  46.                 break;
  47.             case 'D':
  48.                 datacolor = atoi(*ap++);
  49.                 break;
  50.             case 'm':
  51.                 maskfn = *ap++;
  52.                 break;
  53.             case 'd':
  54.                 datafn = *ap++;
  55.                 break;
  56.             case 'n':
  57.                 name = *ap++;
  58.                 break;
  59.             case 'G':
  60.                 ++gemfmt;
  61.                 break;
  62.             case 'R':
  63.                 ++rename;
  64.                 break;
  65.             }
  66.  
  67.     if (rename)
  68.         chgname(datafn, name);
  69.  
  70.     if (gemfmt)
  71.     {
  72.         printf("/* GEM Icon Definition: */\n");
  73.         printf("#define %s_W 0x0010\n", name);
  74.         printf("#define %s_H 0x0028\n", name);
  75.         printf("#define %sSIZE 0x0028\n", name);
  76.         printf("short %s[%sSIZE] =\n{ ", name, name);
  77.         hexw(5, xhot, yhot, nplanes, maskcolor, datacolor);
  78.     }
  79.     else
  80.     {
  81.         printf("#ifndef USER_DEF\n#include <gemdefs.h>\n#endif\n");
  82.         printf("MFORM\t%s[1] = {\n\t%d,\t%d,\t%d,\t%d,\t%d,\n",
  83.             name, xhot, yhot, nplanes, maskcolor, datacolor);
  84.     }
  85.  
  86.     domask(maskfn, gemfmt);
  87.     if (!gemfmt)
  88.         fputs("\t },\n", stdout);
  89.     domask(datafn, gemfmt);
  90.  
  91.     if (gemfmt)
  92.         fputs("0x0000, 0x0000, 0x0000", stdout);
  93.     else
  94.         fputs("\t }", stdout);
  95.     fputs("\n};\n\n", stdout);
  96.     exit(0);
  97. }
  98.  
  99. domask (fn, gemfmt)
  100. char    *fn;
  101. {
  102.     char    line[80];
  103.     int    h0, h1, h2, h3;
  104.     FILE    *fd;
  105.  
  106.     if (fd = fopen(fn, "r"))
  107.     {
  108.         *line = '\0';
  109.         while (fgets(line, sizeof(line), fd) && *line != '{');
  110.         if (*line == '{')
  111.         {
  112.             do
  113.                 if (gemfmt)
  114.                 {
  115.                     sscanf(line + 1,
  116.                         " 0x%x, 0x%x, 0x%x, 0x%x",
  117.                         &h0, &h1, &h2, &h3);
  118.                     hexw(4, h0, h1, h2, h3);
  119.                 }
  120.                 else
  121.                     printf("\t %s", line);
  122.             while (fgets(line, sizeof(line), fd) && *line != '}');
  123.         }
  124.         fclose(fd);
  125.     }
  126. }
  127.  
  128. hexw (count, h0)
  129. {
  130.     int    *ap;
  131.     static    int    col;
  132.  
  133.     for (ap = &h0; --count >= 0; )
  134.         printf("0x%04x,%s", *ap++, (++col % 4)? " ": "\n  ");
  135. }
  136.  
  137. chgname (datafn, name)
  138. char    *datafn, *name;
  139. {
  140.     FILE    *fd;
  141.     char    line[80];
  142.     register char    *cp;
  143.  
  144.     if (fd = fopen(datafn, "r"))
  145.     {
  146.         while (fgets(line, sizeof(line), fd) != NULL &&
  147.             strncmp(line, "short", 5))
  148.             fputs(line, stdout);
  149.         printf("short %s", name);
  150.         for (cp = line; *cp && *cp != '['; ++cp);
  151.         fputs(cp, stdout);
  152.         while (fgets(line, sizeof(line), fd) != NULL)
  153.             fputs(line, stdout);
  154.         fclose(fd);
  155.     }
  156.  
  157.     exit(0);
  158. }
  159.