Main Page   Alphabetical List   Compound List   File List   Compound Members   File Members  

prmio.c

Go to the documentation of this file.
00001 /*
00002 ** ----------------------------------------------------------------
00003 ** prmio.c  -  Primitive input/output module.
00004 **
00005 ** ----------------------------------------------------------------
00006 */
00007 
00033 /*
00034 ** ---------------------------------------------------------------
00035 ** Global variables and symbols:
00036 */
00037 #include <stdio.h>
00038 #include <string.h>
00039 
00040 #include "prmio.h"
00041 #include "prm.h"
00042 
00043 /*
00044 ** ---------------------------------------------------------------
00045 ** Local variables and symbols:
00046 */
00047 
00048 
00049 /*
00050 ** ---------------------------------------------------------------
00051 ** Private functions:
00052 */
00053 
00054 /*======================  prmioNextLabel  ======================*/
00055 
00067 static int prmioNextLabel( FILE *fd, char *label )
00068 {
00069  int c;
00070 
00071  while( ( c = fgetc( fd ) ) != '%' )           /* finds next % */
00072  {
00073   if( c == EOF )
00074   return( 0 );
00075  }
00076  if( fscanf( fd, "%s", label ) != 1 )          /* scan label string */
00077   return( 0 );
00078  else
00079   return( 1 );
00080 }
00081 
00082 /*=====================  prmioGetColorCode  ====================*/
00083 
00092 static long int prmioGetColorCode( char *color_label )
00093 {
00094  long int color = PRM_BLACK;
00095 
00096  if( strcmp( color_label, "WHITE" ) == 0 )
00097   color = PRM_WHITE;
00098  else if( strcmp( color_label, "GRAY" ) == 0 )
00099   color = PRM_GRAY;
00100  else if( strcmp( color_label, "DARK_GRAY" ) == 0 )
00101   color = PRM_DARK_GRAY;
00102  else if( strcmp( color_label, "BLACK" ) == 0 )
00103   color = PRM_BLACK;
00104  else if( strcmp( color_label, "RED" ) == 0 )
00105   color = PRM_RED;
00106  else if( strcmp( color_label, "DARK_RED" ) == 0 )
00107   color = PRM_DARK_RED;
00108  else if( strcmp( color_label, "GREEN" ) == 0 )
00109   color = PRM_GREEN;
00110  else if( strcmp( color_label, "DARK_GREEN" ) == 0 )
00111   color = PRM_DARK_GREEN;
00112  else if( strcmp( color_label, "BLUE" ) == 0 )
00113   color = PRM_BLUE;
00114  else if( strcmp( color_label, "DARK_BLUE" ) == 0 )
00115   color = PRM_DARK_BLUE;
00116  else if( strcmp( color_label, "YELLOW" ) == 0 )
00117   color = PRM_YELLOW;
00118  else if( strcmp( color_label, "DARK_YELLOW" ) == 0 )
00119   color = PRM_DARK_YELLOW;
00120  else if( strcmp( color_label, "MAGENTA" ) == 0 )
00121   color = PRM_MAGENTA;
00122  else if( strcmp( color_label, "DARK_MAGENTA" ) == 0 )
00123   color = PRM_DARK_MAGENTA;
00124  else if( strcmp( color_label, "CYAN" ) == 0 )
00125   color = PRM_CYAN;
00126  else if( strcmp( color_label, "DARK_CYAN" ) == 0 )
00127   color = PRM_DARK_CYAN;
00128 
00129  return( color );
00130 }
00131 
00132 /*====================  prmioGetColorLabel  ====================*/
00133 
00140 static void prmioGetColorLabel( long int color, char *color_label )
00141 {
00142  switch( color )
00143  {
00144   case PRM_WHITE:
00145    sprintf( color_label, "WHITE" );
00146    break;
00147   case PRM_GRAY:
00148    sprintf( color_label, "GRAY" );
00149    break;
00150   case PRM_DARK_GRAY:
00151    sprintf( color_label, "DARK_GRAY" );
00152    break;
00153   case PRM_BLACK:
00154   default:
00155    sprintf( color_label, "BLACK" );
00156    break;
00157   case PRM_RED:
00158    sprintf( color_label, "RED" );
00159    break;
00160   case PRM_DARK_RED:
00161    sprintf( color_label, "DARK_RED" );
00162    break;
00163   case PRM_GREEN:
00164    sprintf( color_label, "GREEN" );
00165    break;
00166   case PRM_DARK_GREEN:
00167    sprintf( color_label, "DARK_GREEN" );
00168    break;
00169   case PRM_BLUE:
00170    sprintf( color_label, "BLUE" );
00171    break;
00172   case PRM_DARK_BLUE:
00173    sprintf( color_label, "DARK_BLUE" );
00174    break;
00175   case PRM_YELLOW:
00176    sprintf( color_label, "YELLOW" );
00177    break;
00178   case PRM_DARK_YELLOW:
00179    sprintf( color_label, "DARK_YELLOW" );
00180    break;
00181   case PRM_MAGENTA:
00182    sprintf( color_label, "MAGENTA" );
00183    break;
00184   case PRM_DARK_MAGENTA:
00185    sprintf( color_label, "DARK_MAGENTA" );
00186    break;
00187   case PRM_CYAN:
00188    sprintf( color_label, "CYAN" );
00189    break;
00190   case PRM_DARK_CYAN:
00191    sprintf( color_label, "DARK_CYAN" );
00192    break;
00193  }
00194 }
00195 
00196 /*
00197 ** ---------------------------------------------------------------
00198 ** Public functions:
00199 */
00200 
00201 /*======================  prmioInterpret  ======================*/
00202 
00203 int prmioInterpret( FILE *fd )
00204 {
00205  static char label[80]; /* command label */
00206  Prm *prm = NULL;    /* pointer to current primitive being created */
00207 
00208  while( 1 )
00209  {
00210   if( prmioNextLabel( fd, label ) == 0 )
00211   {
00212    printf( "\n Invalid primitive file or label END doesn't exist.\n\n" );
00213    return( 0 );
00214   }
00215   else if( strcmp( label, "CREATE.FRONT" ) == 0 )
00216   {
00217    int    type;
00218    fscanf( fd, "%d", &type );
00219    prm = prmCreateFront( (PrmType)type );
00220   }
00221   else if( strcmp( label, "CREATE.BACK" ) == 0 )
00222   {
00223    int    type;
00224    fscanf( fd, "%d", &type );
00225    prm = prmCreateBack( (PrmType)type );
00226   }
00227   else if( strcmp( label, "MOVE.FRONT" ) == 0 )
00228   {
00229    if( prm == NULL )
00230     return( 0 );
00231    prmMoveFront( prm );
00232   }
00233   else if( strcmp( label, "MOVE.BACK" ) == 0 )
00234   {
00235    if( prm == NULL )
00236     return( 0 );
00237    prmMoveBack( prm );
00238   }
00239   else if( strcmp( label, "SET.GEOM" ) == 0 )
00240   {
00241    if( prm == NULL )
00242     return( 0 );
00243    prmRead( prm, fd );
00244   }
00245   else if( strcmp( label, "SET.COLOR" ) == 0 )
00246   {
00247    char color_label[32];
00248    if( prm == NULL )
00249     return( 0 );
00250    fscanf( fd, "%s", color_label );
00251    prmSetColor( prm, prmioGetColorCode( color_label ) );
00252   }
00253   else if( strcmp( label, "SET.HEIGHT" ) == 0 )
00254   {
00255    double height;
00256    if( prm == NULL )
00257     return( 0 );
00258    fscanf( fd, "%lg", &height );
00259    prmSetHeight( prm, height );
00260   }
00261   else if( strcmp( label, "TRANSLATE" ) == 0 )
00262   {
00263    double dx, dy;
00264    if( prm == NULL )
00265     return( 0 );
00266    fscanf( fd, "%lg %lg", &dx, &dy );
00267    prmTranslate( prm, dx, dy );
00268   }
00269   else if( strcmp( label, "TRANSLATE.VERTEX" ) == 0 )
00270   {
00271    int    id;
00272    double dx, dy;
00273    if( prm == NULL )
00274     return( 0 );
00275    fscanf( fd, "%d %lg %lg", &id, &dx, &dy );
00276    prmTranslateVertex( prm, id, dx, dy );
00277   }
00278   else if( strcmp( label, "TRANSLATE.SIDE" ) == 0 )
00279   {
00280    int    id;
00281    double dx, dy;
00282    if( prm == NULL )
00283     return( 0 );
00284    fscanf( fd, "%d %lg %lg", &id, &dx, &dy );
00285    prmTranslateSide( prm, id, dx, dy );
00286   }
00287   else if( strcmp( label, "END" ) == 0 )
00288    break;
00289   else             /* not a target label */
00290    continue;
00291  }
00292 
00293  return( 1 );
00294 }
00295 
00296 /*======================  prmioWriteList  ======================*/
00297 
00298 void prmioWriteList( FILE *fd )
00299 {
00300  Prm    *prm;                /* pointer to current primitive in list */
00301  char   color_label[32];     /* primitive color label */
00302 
00303  fprintf( fd, "%%HEADER.TITLE\n'List of primitives.'\n" );
00304 
00305  for( prm = prmFirst( ); prm != NULL; prm = prmNext( prm ) )
00306  {
00307   fprintf( fd, "\n%%CREATE.BACK " );
00308   fprintf( fd, "%d\n", prmGetType( prm ) );
00309 
00310   fprintf( fd, "\n%%SET.GEOM\n" );
00311   prmWrite( prm, fd );
00312 
00313   fprintf( fd, "\n%%SET.COLOR" );
00314   prmioGetColorLabel( prmGetColor( prm ), color_label );
00315   fprintf( fd, "\n%s\n", color_label );
00316 
00317   fprintf( fd, "\n%%SET.HEIGHT " );
00318   fprintf( fd, "%g\n", prmGetHeight( prm ) );
00319  }
00320 
00321  fprintf ( fd, "\n%%END\n" );
00322 }
00323 
00325 f( fd, "\n%%SET.GEOM\n" );
00326   prmWrite( prm, fd );
00327 
00328   fprintf( fd, "\n%%SET.COLOR" );
00329   prmioGetColorLabel( prmGetColor( prm ), color_label );
00330   fprintf( fd, "\n%s\n", color_label );
00331 
00332   fprintf( fd, "\n%%SET.HEIGHT " );
00333   fprintf( fd, "%g\n", prmGetHeight( prm ) );
00334  }
00335 
00336  fprintf ( fd, "\n%%END\n" );
00337 }
00338 

Generated on Tue Nov 8 10:58:00 2005 for Trab3 by doxygen1.2.18