/* Copyright 1985, Massachusetts Institute of Technology */ /* reads from standard input lines of the form: red green blue name where red/green/blue are decimal values, and inserts them in a database. */ #ifndef lint static char *rcsid_rgb_c = "$XConsortium: rgb.c,v 11.7 88/09/06 17:51:52 jim Exp $"; #endif #include #undef NULL #include #include #include "rgb.h" #include "site.h" #include #include extern int errno; /* some systems are still stupid */ extern int sys_nerr; extern char *sys_errlist[]; char *ProgramName; char *SysError () { return ((errno >= 0 && errno < sys_nerr) ? sys_errlist[errno] : "?"); } main(argc, argv) int argc; char **argv; { char *dbname; char line[512]; int red, green, blue; RGB rgb; datum key, content; char name[512]; int items; int lineno; int i, n; int fd; ProgramName = argv[0]; if (argc == 2) dbname = argv[1]; else dbname = RGB_DB; strcpy (name, dbname); strcat (name, ".dir"); fd = open (name, O_WRONLY|O_CREAT, 0666); if (fd < 0) { fprintf (stderr, "%s: unable to create dbm file \"%s\" (error %d, %s)\n", ProgramName, name, errno, SysError()); exit (1); } (void) close (fd); strcpy (name, dbname); strcat (name, ".pag"); fd = open (name, O_WRONLY|O_CREAT, 0666); if (fd < 0) { fprintf (stderr, "%s: unable to create dbm file \"%s\" (error %d, %s)\n", ProgramName, name, errno, SysError()); exit (1); } (void) close (fd); if (dbminit (dbname)) { fprintf (stderr, "%s: unable to initial dbm database for \"%s\"\n", ProgramName, dbname); exit (1); } key.dptr = name; content.dptr = (char *) &rgb; content.dsize = sizeof (rgb); lineno = 0; while (fgets (line, sizeof (line), stdin)) { lineno++; items = sscanf (line, "%d %d %d %[^\n]\n", &red, &green, &blue, name); if (items != 4) { fprintf (stderr, "syntax error on line %d\n", lineno); fflush (stderr); continue; } if (red < 0 || red > 0xff || green < 0 || green > 0xff || blue < 0 || blue > 0xff) { fprintf (stderr, "value for %s out of range\n", name); fflush (stderr); continue; } n = strlen (name); for (i = 0; i < n; i++) { if (isupper (name[i])) name[i] = tolower (name[i]); } key.dsize = n; rgb.red = (red * 65535) / 255; rgb.green = (green * 65535) / 255; rgb.blue = (blue * 65535) / 255; if (store (key, content)) { fprintf (stderr, "store of %s failed\n", name); fflush (stderr); } } }