#include /* Program to create a CVL format picture header that can be prepended to a raw data file. It is interactive, the only argument is an optional output filename (otherwise output is directed to standard output). */ char *argv0; getline (string, strlen) char *string; int strlen; {int n=0,c; while (n < strlen-1 && (c = getchar ()) != EOF && c != '\n') {n++; *string++ = c;} if (n < strlen) *string = '\0'; if (c == EOF) return (-max(n,1)); else return (n); } main (argc, argv) int argc; char *argv[]; { register int i, j, k; int width = -1, height = -1, x, n, infile, outfile; char line[200]; struct cvl_p newarea; argv0 = argv[0]; /* if an optional output file is specified then create it */ if (argc > 1) if ((outfile = creat (argv[1], 0644)) == -1) {fprintf (stderr, "Can't creat %s for output\n", argv[1]); exit (1); } else; else outfile = 1; /* Prompt for all of the CVL fields */ x = lnargv (argv); do /* width */ {fprintf (stderr, "Enter picture width : "); getline (line, 200); if (sscanf (line, "%d", &width) != 1) width = -1; } while (width <= 0); do /* height */ {fprintf (stderr, "Enter picture height (default = %d): ", width); getline (line, 200); if (line[0] == '\0' || sscanf (line, "%d", &height) != 1) height = width; } while (height <= 0); mhead (&newarea, width, height); /* pixel type */ fprintf (stderr, "Enter pixel type (default = %d): ", newarea.cv_type); getline (line, 200); if (line[0] != '\0' && sscanf (line, "%d", &n) == 1) newarea.cv_type = n; /* dimensions */ fprintf (stderr, "Enter # of dimensions (default = %d): ", newarea.cv_dims); getline (line, 200); if (line[0] != '\0' && sscanf (line, "%d", &n) == 1) newarea.cv_dims = n; /* hyperplanes */ fprintf (stderr, "Enter # of hyperplanes (default = %d): ", newarea.cv_hpls); getline (line, 200); if (line[0] != '\0' && sscanf (line, "%d", &n) == 1) newarea.cv_hpls = n; /* planes */ fprintf (stderr, "Enter # of planes (default = %d): ", newarea.cv_plns); getline (line, 200); if (line[0] != '\0' && sscanf (line, "%d", &n) == 1) newarea.cv_plns = n; /* bands */ fprintf (stderr, "Enter # of bands (default = %d): ", newarea.cv_bnds); getline (line, 200); if (line[0] != '\0' && sscanf (line, "%d", &n) == 1) newarea.cv_bnds = n; /* bits per pixel */ fprintf(stderr,"Enter # of bits per pixel (default = %d): ",newarea.cv_bp); getline (line, 200); if (line[0] != '\0' && sscanf (line, "%d", &n) == 1) newarea.cv_bp = n; /* exponent bits per band */ fprintf (stderr, "Enter # of exponent bits per band (default = %d): ", newarea.cv_ebb); getline (line, 200); if (line[0] != '\0' && sscanf (line, "%d", &n) == 1) newarea.cv_ebb = n; /* significant bits per band */ fprintf (stderr, "Enter # of significant bits per band (default = %d): ", newarea.cv_sbb); getline (line, 200); if (line[0] != '\0' && sscanf (line, "%d", &n) == 1) newarea.cv_sbb = n; /* bits per band */ fprintf (stderr, "Enter # of bits per band (default = %d): ",newarea.cv_bb); getline (line, 200); if (line[0] != '\0' && sscanf (line, "%d", &n) == 1) newarea.cv_bb = n; /* significant bits per pixel */ fprintf (stderr, "Enter # of significant bits per pixel (default = %d): ", newarea.cv_sbp); getline (line, 200); if (line[0] != '\0' && sscanf (line, "%d", &n) == 1) newarea.cv_sbp = n; /* exponent bits per pixel */ fprintf (stderr, "Enter # of exponent bits per pixel (default = %d): ", newarea.cv_ebp); getline (line, 200); if (line[0] != '\0' && sscanf (line, "%d", &n) == 1) newarea.cv_ebp = n; fprintf (stderr, "Enter an optional line of text for comment field :\n"); n = getline (line, 200); if (n > 0) line[n++] = '\012'; fprintf (stderr, "Length of line = %d\n", n); newarea.cv_lcom += x + n; write (outfile, &newarea, sizeof (newarea)); prargv (outfile, argv); if (n > 0) write (outfile, line, n); }