home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume19 / fbm / part02 / qrt2fbm.c < prev   
Encoding:
C/C++ Source or Header  |  1989-06-08  |  2.5 KB  |  103 lines

  1. /*****************************************************************
  2.  * qrt2fbm.c: FBM Library 0.91 (Beta Test)  7-Apr-89  Michael Mauldin
  3.  *
  4.  * Copyright (C) 1989 by Michael Mauldin.  Permission is granted to
  5.  * use this file in whole or in part provided that you do not sell it
  6.  * for profit and that this copyright notice is retained unchanged.
  7.  *
  8.  * qrt2fbm.c: Convert QRT format (from the QRT ray tracer)
  9.  *
  10.  * USAGE
  11.  *     % qrt2fbm -t'title' -c'credits' < qrtfile > fbm
  12.  *
  13.  * EDITLOG
  14.  *    LastEditDate = Wed May  3 23:35:24 1989 - Michael Mauldin
  15.  *    LastFileName = /usr2/mlm/src/misc/fbm/qrt2fbm.c
  16.  *
  17.  * HISTORY
  18.  *  7-Apr-89  Michael Mauldin (mlm) at Carnegie-Mellon University
  19.  *    Installed, code by Butler Hines.
  20.  *
  21.  *****************************************************************/
  22.  
  23. # include <stdio.h>
  24. # include "fbm.h"
  25.  
  26. # define USAGE \
  27. "Usage: qrt2fbm [ -t'title' -c'credits' ] < qrtfile > fbm"
  28.  
  29. #ifndef lint
  30. static char *fbmid =
  31.     "$FBM qrt2fbm.c <0.91> 07-Apr-89  (C) 1989 by Michael Mauldin$";
  32. #endif
  33.  
  34. main (argc, argv)
  35. char *argv[];
  36. { register int j, k, rowlen;
  37.   double aspect = 0.56;
  38.   int rows, cols, line, len, planes=3;
  39.   FBMHDR hdr;
  40.   unsigned char *buf;
  41.   char title[FBM_MAX_TITLE], credits[FBM_MAX_TITLE];
  42.  
  43.   /* Get the options */
  44.   while (--argc > 0 && (*++argv)[0] == '-')
  45.   { while (*++(*argv))
  46.     { switch (**argv)
  47.       { 
  48.     case 't':    strncpy (title, *argv+1, FBM_MAX_TITLE);
  49.             title[FBM_MAX_TITLE-1] = '\0';
  50.             CLRARG; break;
  51.     case 'c':    strncpy (credits, *argv+1, FBM_MAX_TITLE);
  52.             credits[FBM_MAX_TITLE-1] = '\0';
  53.             CLRARG; break;
  54.     default:    fprintf (stderr, "%s\n", USAGE);
  55.             exit (1);
  56.       }
  57.     }
  58.   }
  59.  
  60.   cols = getchar();
  61.   cols |= (getchar()<<8);
  62.   rows = getchar();
  63.   rows |= (getchar()<<8);
  64.   
  65.   rowlen = 2 * ((cols * 8 + 15) / 16);
  66.  
  67.   /* Build header */
  68.   hdr.rows = rows;
  69.   hdr.cols = cols;
  70.   hdr.planes = planes;
  71.   hdr.bits = 8;
  72.   hdr.physbits = 8;
  73.   hdr.rowlen = rowlen;
  74.   hdr.plnlen = hdr.rowlen * rows;
  75.   hdr.clrlen = 0;
  76.   hdr.aspect = aspect;
  77.   strcpy (hdr.title, title);
  78.   strcpy (hdr.credits, credits);
  79.   
  80.   write_hdr_fbm (&hdr, stdout);
  81.   
  82.   len = planes*cols; 
  83.   buf = (unsigned char *) malloc (rows*len);
  84.  
  85.   for (j=0; j<rows; j++){
  86.     line = getchar();
  87.     line |= (getchar()<<8);
  88.     if (! fread (&buf[j*len], len, 1, stdin))
  89.       { fprintf (stderr, "premature end of file on input at line %d\n", line);
  90.         break;
  91.       }
  92.     }
  93.  
  94.   for(k=0; k<planes; k++){
  95.     for (j=0; j<rows; j++){
  96.       if (! fwrite (&buf[j*len+k*cols], rowlen, 1, stdout))
  97.         { perror ("qrt2fbm"); exit (1); }
  98.       }
  99.     }
  100.   
  101.   exit (0);
  102. }
  103.