mkjambase.c

来自「Boost provides free peer-reviewed portab」· C语言 代码 · 共 132 行

C
132
字号
/* * Copyright 1993, 1995 Christopher Seiwald. * * This file is part of Jam - see jam.c for Copyright information. *//*  This file is ALSO: *  Copyright 2001-2004 David Abrahams. *  Distributed under the Boost Software License, Version 1.0. *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) *//* * mkjambase.c - turn Jambase into a big C structure * * Usage: mkjambase jambase.c Jambase ... * * Results look like this: * *	 char *jambase[] = { *	 "...\n", *	 ... *	 0 }; * * Handles \'s and "'s specially; knows to delete blank and comment lines. * */# include <stdio.h># include <string.h>int main( int argc, char **argv, char **envp ){	char buf[ 1024 ];	FILE *fin;	FILE *fout;	char *p;	int doDotC = 0;	if( argc < 3 )	{	    fprintf( stderr, "usage: %s jambase.c Jambase ...\n", argv[0] );	    return -1;	}	if( !( fout = fopen( argv[1], "w" ) ) )	{	    perror( argv[1] );	    return -1;	}	/* If the file ends in .c generate a C source file */	if( ( p = strrchr( argv[1], '.' ) ) && !strcmp( p, ".c" ) )	    doDotC++;	/* Now process the files */	argc -= 2, argv += 2;	if( doDotC )	{	    fprintf( fout, "/* Generated by mkjambase from Jambase */\n" );	    fprintf( fout, "char *jambase[] = {\n" );	}	for( ; argc--; argv++ )	{	    if( !( fin = fopen( *argv, "r" ) ) )	    {		perror( *argv );		return -1;	    }	    if( doDotC )	    {		fprintf( fout, "/* %s */\n", *argv );	    }	    else	    {		fprintf( fout, "### %s ###\n", *argv );	    }	    while( fgets( buf, sizeof( buf ), fin ) )	    {		if( doDotC )		{		    char *p = buf;		    /* Strip leading whitespace. */		    while( *p == ' ' || *p == '\t' || *p == '\n' )			p++;		    /* Drop comments and empty lines. */		    if( *p == '#' || !*p )			continue;		    /* Copy */		    putc( '"', fout );		    for( ; *p && *p != '\n'; p++ )			switch( *p )		    {		    case '\\': putc( '\\', fout ); putc( '\\', fout ); break;		    case '"': putc( '\\', fout ); putc( '"', fout ); break;                    case '\r': break;		    default: putc( *p, fout ); break;		    }		    fprintf( fout, "\\n\",\n" );		}		else		{		    fprintf( fout, "%s", buf );		}	    }	    fclose( fin );	}	    	if( doDotC )	    fprintf( fout, "0 };\n" );	fclose( fout );	return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?