/* * Copyright (C) 1995-1997 Christopher D. Granz * * This header may not be removed. * * Refer to the file "License" included in this package for further * information and before using any of the following. */ #include <stdlib.h> #include <stdio.h> #include <ctype.h> #include <string.h> #include "abic.h" /* * Globals */ char cNullChar; /* * Functions */ int main( int iArgC, char *pArgV[] ) { FILE *pFile; FILE *pFileOut; char cBuf[1028]; char *pBuf; char c[2]; int i; if ( iArgC > 1 ) { strncpy( cBuf, pArgV[1], 1024 ); cBuf[1024] = '\0'; pFile = open_file( cBuf, "r" ); if ( iArgC > 2 ) strncpy( cBuf, pArgV[2], 1024 ); else { pBuf = strrchr( cBuf, '.' ); if ( !strcmp( pBuf, ".abi" ) || !strcmp( pBuf, ".ABI" ) ) strcpy( pBuf, ".bin" ); else strcat( pBuf, ".bin" ); } } else { pFile = stdin; strcpy( cBuf, "_a.bin" ); } if ( ( pFileOut = fopen( cBuf, "wb" ) ) == NULL ) { fprintf( stderr, "\n%s: %s.\n", pArgV[0], strerror( errno ) ); if ( pFile != stdin ) close_file( pFile ); return ( 0 ); } if ( pFile != stdin ) fprintf( stderr, "%s: %s -> %s\n", pArgV[0], pArgV[1], cBuf ); c[0] = fget_letter( pFile ); while ( feof( pFile ) == 0 ) { switch ( c[0] ) { case ';': while ( c[0] != '\n' && c[0] != EOF ) c[0] = getc( pFile ); if ( c[0] == '\n' ) lCurrentLine++; break; default : ungetc( c[0], pFile ); pBuf = fget_word( pFile ); if ( strcmp( pBuf, "int1" ) == 0 ) { char cV = (char) atoi( fget_word( pFile ) ); i = fwrite( &cV, sizeof( char ), 1, pFileOut ); if ( i < 0 ) error( "%s: %s.", cBuf, strerror( errno ) ); } else if ( strcmp( pBuf, "int2" ) == 0 ) { i2 iV = (i2) atoi( fget_word( pFile ) ); i = fwrite( &iV, sizeof( i2 ), 1, pFileOut ); if ( i < 0 ) error( "%s: %s.", cBuf, strerror( errno ) ); } else if ( strcmp( pBuf, "int4" ) == 0 ) { i4 iV = (i4) atol( fget_word( pFile ) ); i = fwrite( &iV, sizeof( i4 ), 1, pFileOut ); if ( i < 0 ) error( "%s: %s.", cBuf, strerror( errno ) ); } else if ( strcmp( pBuf, "float4" ) == 0 ) { f4 fV = (f4) atof( fget_word( pFile ) ); i = fwrite( &fV, sizeof( f4 ), 1, pFileOut ); if ( i < 0 ) error( "%s: %s.", cBuf, strerror( errno ) ); } else if ( strcmp( pBuf, "float8" ) == 0 ) { f8 fV = (f8) strtod( fget_word( pFile ), (char **) NULL ); i = fwrite( &fV, sizeof( f8 ), 1, pFileOut ); if ( i < 0 ) error( "%s: %s.", cBuf, strerror( errno ) ); } else if ( strcmp( pBuf, "string" ) == 0 ) { pBuf = fget_string( pFile ); i = fwrite( pBuf, 1, strlen( pBuf ), pFileOut ); if ( i < 0 ) error( "%s: %s.", cBuf, strerror( errno ) ); } else error( "Unknown literal type `%s'.", pBuf ); break; } c[0] = fget_letter( pFile ); } fclose( pFileOut ); if ( pFile != stdin ) close_file( pFile ); return ( 0 ); } /* * End of main.c */