www.pudn.com > bladeenc-0.90.0-src.zip > arglink.c


/* 
			(c) Copyright 1999 - Tord Jansson 
			================================= 
 
		This file is part of the BladeEnc MP3 Encoder, based on 
		ISO's reference code for MPEG Layer 3 compression. 
 
		This file doesn't contain any of the ISO reference code and 
		is copyright Tord Jansson (tord.jansson@swipnet.se). 
 
	BladeEnc is free software; you can redistribute this file 
	and/or modify it under the terms of the GNU Lesser General Public 
	License as published by the Free Software Foundation; either 
	version 2.1 of the License, or (at your option) any later version. 
 
*/ 
 
 
#include	 
#include	 
#include	 
 
#include	"arglink.h" 
 
extern	char *mystrupr(char * strng); 
 
 
/*____ deleteArgLink() ______________________________________________________*/ 
 
void deleteArgLink( argLink * pLink ) 
{ 
	argLink * pDelete; 
	while( pLink != NULL ) 
	{ 
		pDelete = pLink; 
		pLink = pLink->psNext; 
		free( pDelete ); 
	} 
} 
 
 
/*____ findStrInArgLink() ___________________________________________________*/ 
 
argLink * findStrInArgLink( argLink * pLink, char * pString ) 
{ 
	char	noncase[256]; 
	char	temp[256]; 
 
	strcpy( noncase, pString ); 
	mystrupr( noncase ); 
 
 
	while( pLink != NULL ) 
	{ 
		strcpy( temp, pLink->pString ); 
		mystrupr( temp ); 
		if( strcmp( noncase, temp ) == 0 ) 
			return	pLink; 
		pLink = pLink->psNext; 
	} 
 
	return	NULL; 
} 
 
 
/*____ argv2ArgLink() _______________________________________________________*/ 
 
argLink * argv2ArgLink( int argc, char * argv[] ) 
{ 
	int		i; 
	argLink	** wpPrev, * pLink; 
	argLink * pFirst = NULL; 
 
	wpPrev = &pFirst; 
 
	for( i = 0 ; i < argc ; i++ ) 
	{ 
		pLink = (argLink *) malloc( sizeof(argLink) ); 
		pLink->pString = argv[i]; 
		pLink->psNext = NULL; 
		* wpPrev = pLink; 
		wpPrev = &pLink->psNext; 
	} 
	return	pFirst; 
} 
 
 
/*____ insertStringInArgLink() ______________________________________________*/ 
 
argLink * insertStringInArgLink( argLink ** wpPrev, char * pString ) 
{ 
	argLink	* pMyArg; 
 
	pMyArg = (argLink *) malloc( sizeof(argLink) + strlen(pString) + 1); 
	pMyArg->pString = ((char *)pMyArg) + sizeof(argLink); 
	pMyArg->psNext = * wpPrev; 
	* wpPrev = pMyArg; 
	strcpy( pMyArg->pString, pString ); 
	return	pMyArg; 
} 
 
/*____ linkStringToArgLink() ________________________________________________*/ 
 
argLink * linkStringToArgLink( argLink ** wpPrev, char * pString ) 
{ 
	argLink	* pMyArg; 
 
	pMyArg = (argLink *) malloc( sizeof(argLink) ); 
	pMyArg->pString = pString; 
	pMyArg->psNext = * wpPrev; 
	* wpPrev = pMyArg; 
	return	pMyArg; 
} 
 
 
 
 
 
/*____ addFileContentToArgLink() ____________________________________________*/ 
 
int	addFileContentToArgLink( argLink ** wpPrev , char * pFilename ) 
{ 
	FILE	* fp; 
	argLink * pMyArg; 
	int		len; 
	char	temp[1024]; 
	char	* pTmp, * pTmp2; 
	int		nArg = 0; 
 
	fp = fopen( pFilename, "r" ); 
	if( fp == NULL ) 
		return	-1; 
 
	/* Take line after line */ 
 
	while( fgets( temp, 1024, fp ) != NULL ) 
	{ 
		/* Skip everything after a '#' */ 
 
		 pTmp = strchr( temp, '#' ); 
		 if( pTmp != NULL ) 
			 * pTmp = 0; 
 
		/* grab the arguments from the line */ 
 
		pTmp = temp; 
		len = strlen( temp ); 
		while( 1 ) 
		{ 
			for( ; * pTmp <= 32 && pTmp < temp + len ; pTmp++ ); 
			if( pTmp == temp + len ) 
				break; 
			for( pTmp2 = pTmp ; * pTmp2 > 32 ; pTmp2++ ); 
 
 
			pMyArg = (argLink *) malloc( sizeof( argLink ) + pTmp2 - pTmp + 1 ); 
			pMyArg->pString = ((char *)pMyArg) + sizeof( argLink ); 
			pMyArg->psNext = * wpPrev; 
			*wpPrev = pMyArg; 
			wpPrev = &pMyArg->psNext; 
			nArg++; 
			 
			memcpy( pMyArg->pString, pTmp, pTmp2 - pTmp ); 
			pMyArg->pString[pTmp2 - pTmp] = 0; 
			pTmp = pTmp2; 
		} 
 
	} 
	fclose( fp ); 
	return	nArg; 
}