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 >
Wrap
C/C++ Source or Header
|
1993-07-30
|
3KB
|
159 lines
#include <stdio.h>
main (ac, av)
char **av;
{
char **ap, *cp;
int xhot, yhot, nplanes;
int maskcolor, datacolor;
char *datafn, *maskfn;
char *name;
short gemfmt = 0;
short rename = 0;
if (ac < 2)
{
printf("usage: -xypMDmdnG xhot yhot planes mcolor dcolor\n");
printf("\t\tmaskfn datafn mformname\n");
printf("or: -dnR datafn newmformname\n");
exit(0);
}
xhot = 0;
yhot = 0;
nplanes = 1;
maskcolor = 0;
datacolor = 1;
maskfn = (char *) 0;
datafn = (char *) 0;
name = "mform";
for (ap = av + 1; *ap && **ap == '-'; )
for (cp = *ap++ + 1; *cp; ++cp)
switch (*cp)
{
case 'x':
xhot = atoi(*ap++);
break;
case 'y':
yhot = atoi(*ap++);
break;
case 'p':
nplanes = atoi(*ap++);
break;
case 'M':
maskcolor = atoi(*ap++);
break;
case 'D':
datacolor = atoi(*ap++);
break;
case 'm':
maskfn = *ap++;
break;
case 'd':
datafn = *ap++;
break;
case 'n':
name = *ap++;
break;
case 'G':
++gemfmt;
break;
case 'R':
++rename;
break;
}
if (rename)
chgname(datafn, name);
if (gemfmt)
{
printf("/* GEM Icon Definition: */\n");
printf("#define %s_W 0x0010\n", name);
printf("#define %s_H 0x0028\n", name);
printf("#define %sSIZE 0x0028\n", name);
printf("short %s[%sSIZE] =\n{ ", name, name);
hexw(5, xhot, yhot, nplanes, maskcolor, datacolor);
}
else
{
printf("#ifndef USER_DEF\n#include <gemdefs.h>\n#endif\n");
printf("MFORM\t%s[1] = {\n\t%d,\t%d,\t%d,\t%d,\t%d,\n",
name, xhot, yhot, nplanes, maskcolor, datacolor);
}
domask(maskfn, gemfmt);
if (!gemfmt)
fputs("\t },\n", stdout);
domask(datafn, gemfmt);
if (gemfmt)
fputs("0x0000, 0x0000, 0x0000", stdout);
else
fputs("\t }", stdout);
fputs("\n};\n\n", stdout);
exit(0);
}
domask (fn, gemfmt)
char *fn;
{
char line[80];
int h0, h1, h2, h3;
FILE *fd;
if (fd = fopen(fn, "r"))
{
*line = '\0';
while (fgets(line, sizeof(line), fd) && *line != '{');
if (*line == '{')
{
do
if (gemfmt)
{
sscanf(line + 1,
" 0x%x, 0x%x, 0x%x, 0x%x",
&h0, &h1, &h2, &h3);
hexw(4, h0, h1, h2, h3);
}
else
printf("\t %s", line);
while (fgets(line, sizeof(line), fd) && *line != '}');
}
fclose(fd);
}
}
hexw (count, h0)
{
int *ap;
static int col;
for (ap = &h0; --count >= 0; )
printf("0x%04x,%s", *ap++, (++col % 4)? " ": "\n ");
}
chgname (datafn, name)
char *datafn, *name;
{
FILE *fd;
char line[80];
register char *cp;
if (fd = fopen(datafn, "r"))
{
while (fgets(line, sizeof(line), fd) != NULL &&
strncmp(line, "short", 5))
fputs(line, stdout);
printf("short %s", name);
for (cp = line; *cp && *cp != '['; ++cp);
fputs(cp, stdout);
while (fgets(line, sizeof(line), fd) != NULL)
fputs(line, stdout);
fclose(fd);
}
exit(0);
}