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

  1. /* pbmtogo.c - read a portable bitmap and produce a GraphOn terminal raster file
  2. **    
  3. **    based on pbmtolj.c
  4. **
  5. **    Bo Thide', Swedish Institute of Space Physics, bt@irfu.se
  6. **                   
  7. **    misfeatures: 
  8. **        No 2D compression, no positioning
  9. **
  10. ** Copyright (C) 1988 by Jef Poskanzer, Michael Haberler, and Bo Thide'.
  11. **
  12. ** Permission to use, copy, modify, and distribute this software and its
  13. ** documentation for any purpose and without fee is hereby granted, provided
  14. ** that the above copyright notice appear in all copies and that both that
  15. ** copyright notice and this permission notice appear in supporting
  16. ** documentation.  This software is provided "as is" without express or
  17. ** implied warranty.
  18. */
  19.  
  20. #include <stdio.h>
  21. #ifdef    SYSV
  22. #include <string.h>
  23. #else    SYSV
  24. #include <strings.h>
  25. #endif    SYSV
  26. #include "pbm.h"
  27.  
  28.     
  29. main( argc, argv )
  30. int argc;
  31. char *argv[];
  32.     {
  33.     FILE *ifd;
  34.     register bit *bitrow, *bP;
  35.     int argn, rows, cols, format, rucols, padright, row, col;
  36.     char *usage = "[-c] [pbmfile]";
  37.  
  38.     pm_progname = argv[0];
  39.  
  40.     argn = 2;
  41.  
  42.     /* Check for flags. */
  43.     if ( argc > argn )
  44.     {
  45.     if ( argv[argn][0] == '-' )
  46.         {
  47.         if ( strcmp( argv[argn], "-c" ) == 0 )
  48.         pm_error( "compression not implemented yet", 0,0,0,0,0 );
  49.         argn++;
  50.         }
  51.     else
  52.         pm_usage( usage );
  53.     }
  54.  
  55.     if ( argc > argn + 1 )
  56.     pm_usage( usage );
  57.  
  58.     if ( argc == argn )
  59.     ifd = pm_openr( argv[argn-1] );
  60.     else
  61.     ifd = stdin;
  62.  
  63.     pbm_readpbminit( ifd, &cols, &rows, &format );
  64.     bitrow = pbm_allocrow( cols );
  65.  
  66.     /* Round cols up to the nearest multiple of 8. */
  67.     rucols = ( cols + 7 ) / 8;
  68.     rucols = rucols * 8;
  69.     padright = rucols - cols;
  70.  
  71.     putinit( );
  72.  
  73.     /* Star donwloading screen raster*/
  74.     printf( "\033P0;0;1;4;101;%d;%d;101!R", rows + 100, rucols + 100 );
  75.     for ( row = 0; row < rows; row++ )
  76.     {
  77.     pbm_readpbmrow( ifd, bitrow, cols, format );
  78.     /* Transfer raster graphics */
  79.     printf( "%d/",rucols / 8 );  /* No. of bytes per row */
  80.         for ( col = 0, bP = bitrow; col < cols; col++, bP++ )
  81.         putbit( *bP );
  82.     for ( col = 0; col < padright; col++ )
  83.         putbit( 0 );
  84.         }
  85.  
  86.     pm_close( ifd );
  87.  
  88.     putrest( );
  89.  
  90.     exit( 0 );
  91.     }
  92.  
  93.  
  94. int item, bitsperitem, bitshift, itemsperline, firstitem;
  95.  
  96. putinit( )
  97.     {
  98.     /* Enter graphics window */
  99.     printf( "\0331" );
  100.  
  101.     /* Erase graphics window */
  102.     printf( "\033\014" );
  103.  
  104.     /* Set graphics window in raster mode */
  105.     printf( "\033r" );
  106.  
  107.     /* Select standard Tek coding **/
  108.     printf( "\033[=11l" );
  109.  
  110.     itemsperline = 0;
  111.     bitsperitem = 1;
  112.     item = 0;
  113.     bitshift = 7;
  114.     firstitem = 1;
  115.     }
  116.  
  117. putbit( b )
  118. bit b;
  119.     {
  120.     if ( b == PBM_BLACK )
  121.     item += 1 << bitshift;
  122.     bitshift--;
  123.     if ( bitsperitem == 8 ) {
  124.     putitem( );
  125.         bitshift = 7;
  126.     }
  127.     bitsperitem++;
  128.     }
  129.  
  130. putrest( )
  131.     {
  132.     if ( bitsperitem > 1 )
  133.     putitem( );
  134.  
  135.     /* end raster downloading */
  136.     printf( "\033\134" );
  137.  
  138.     /* Exit raster mode */
  139.     printf( "\033t" );
  140.  
  141.     /* Exit graphics window
  142.     printf( "\0332" ); */
  143.     }
  144.  
  145. putitem( )
  146.     {
  147.     putchar( item );
  148.     bitsperitem = 0;
  149.     item = 0;
  150.     }
  151.