home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 309.lha / PBM_PLUS / pbm / pbmtobbnbg.c < prev    next >
C/C++ Source or Header  |  1980-12-04  |  2KB  |  97 lines

  1. /* pbmtobg.c - read a portable bitmap and produce BitGraph graphics
  2. **
  3. ** Copyright 1989 by Mike Parker.
  4. **
  5. ** Permission to use, copy, modify, and distribute this software and its
  6. ** documentation for any purpose and without fee is hereby granted, provided
  7. ** that the above copyright notice appear in all copies and that both that
  8. ** copyright notice and this permission notice appear in supporting
  9. ** documentation.  This software is provided "as is" without express or
  10. ** implied warranty.
  11. */
  12.  
  13. #include <stdio.h>
  14.  
  15. #include "pbm.h"
  16.  
  17. int nco;
  18.  
  19. main(ac,av)
  20. int ac;
  21. char **av;
  22. {
  23.  int rows;
  24.  int cols;
  25.  int format;
  26.  bit *bitrow;
  27.  int row;
  28.  unsigned int sixteen;
  29.  int i;
  30.  unsigned int mask;
  31.  int op;
  32.  int x;
  33.  int y;
  34.  
  35.  op = 3;
  36.  switch (ac)
  37.   { case 1:
  38.        break;
  39.     case 2:
  40.        op = atoi(av[1]);
  41.        break;
  42.     case 3:
  43.        x = atoi(av[1]);
  44.        y = atoi(av[2]);
  45.        printf("\33:%d;%dm",x,y);
  46.        break;
  47.     case 4:
  48.        op = atoi(av[1]);
  49.        x = atoi(av[2]);
  50.        y = atoi(av[3]);
  51.        printf("\33:%d;%dm",x,y);
  52.        break;
  53.   }
  54.  nco = 0;
  55.  pbm_readpbminit(stdin,&cols,&rows,&format);
  56.  printf("\33P:%d;%d;%ds\n",op,cols,rows);
  57.  bitrow = pbm_allocrow(cols);
  58.  for (row=0;row<rows;row++)
  59.   { pbm_readpbmrow(stdin,bitrow,cols,format);
  60.     sixteen = 0;
  61.     mask = 0x8000;
  62.     for (i=0;i<cols;i++)
  63.      { if (bitrow[i]==PBM_BLACK) sixteen |= mask;
  64.        mask >>= 1;
  65.        if (mask == 0)
  66.     { mask = 0x8000;
  67.       write16(sixteen);
  68.       sixteen = 0;
  69.     }
  70.      }
  71.     if (mask != 0x8000)
  72.      { write16(sixteen);
  73.      }
  74.   }
  75.  putchar('\n');
  76.  exit(0);
  77. }
  78.  
  79. write16(sixteen)
  80. unsigned int sixteen;
  81. {
  82.  if (nco > 75)
  83.   { putchar('\n');
  84.     nco = 0;
  85.   }
  86.  if (sixteen & 0xfc00)
  87.   { putchar(0100+(sixteen>>10));
  88.     nco ++;
  89.   }
  90.  if (sixteen & 0xfff0)
  91.   { putchar(0100+((sixteen>>4)&0x3f));
  92.     nco ++;
  93.   }
  94.  putchar(060+(sixteen&0xf));
  95.  nco ++;
  96. }
  97.