#include <stdio.h>
#include <stdlib.h>

int main( int argc , char * argv[] )
{
   int ii , iarg ;
   int xx,yy,zz ;
   float fx,fy,fz ;
   float sx,ax , sy,ay, sz,az ;
   int truncate = 0 ;

   if( argc < 7 ){
      fprintf(stderr,
              "Usage: colari [-int] sx ax sy ay sz ax < input > output\n"
              "where output x = sx * (input x) + ax, etc\n"
              " -int --> truncate results to integers\n" ) ;
      exit(0) ;
   }

   iarg = 1 ;
   if( strncmp(argv[iarg],"-int",4) == 0 ){
      truncate = 1 ;
      iarg++ ;
   }

   if( iarg+6 > argc ){
      fprintf(stderr,"Not enough arguments!  Try colari -help.\n") ;
      exit(-1) ;
   }

   sx = strtod( argv[iarg++] , NULL ) ;
   ax = strtod( argv[iarg++] , NULL ) ;
   sy = strtod( argv[iarg++] , NULL ) ;
   ay = strtod( argv[iarg++] , NULL ) ;
   sz = strtod( argv[iarg++] , NULL ) ;
   az = strtod( argv[iarg++] , NULL ) ;

   if( sx==0.0 || sy==0.0 || sz==0.0 ){
      fprintf(stderr,"Illegal command line!\n") ;
      exit(-1) ;
   } else {
      fprintf(stderr,"sx=%g ax=%g  sy=%g ay=%g  sz=%g az=%g\n",
              sx,ax,sy,ay,sz,az ) ;
   }

   do {

      ii = fscanf( stdin , " %f %f %f" , &fx,&fy,&fz ) ;
      if( ii != 3 ) break ;

      fx = sx*fx + ax ;
      fy = sy*fy + ay ;
      fz = sz*fz + az ;

      if( truncate ){
         xx = fx ; yy = fy ; zz = fz ;
         fprintf( stdout , "%d %d %d\n" , xx,yy,zz ) ;
      } else {
         fprintf( stdout , "%g %g %g\n" , fx,fy,fz ) ;
      }
   } while(1) ;
   exit(0) ;
}


syntax highlighted by Code2HTML, v. 0.9.1