arglink.c
上传用户:bjsgzm
上传日期:2007-01-08
资源大小:256k
文件大小:4k
源码类别:

mpeg/mp3

开发平台:

Visual C++

  1. /*
  2. (c) Copyright 1999 - Tord Jansson
  3. =================================
  4. This file is part of the BladeEnc MP3 Encoder, based on
  5. ISO's reference code for MPEG Layer 3 compression.
  6. This file doesn't contain any of the ISO reference code and
  7. is copyright Tord Jansson (tord.jansson@swipnet.se).
  8. BladeEnc is free software; you can redistribute this file
  9. and/or modify it under the terms of the GNU Lesser General Public
  10. License as published by the Free Software Foundation; either
  11. version 2.1 of the License, or (at your option) any later version.
  12. */
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <string.h>
  16. #include "arglink.h"
  17. extern char *mystrupr(char * strng);
  18. /*____ deleteArgLink() ______________________________________________________*/
  19. void deleteArgLink( argLink * pLink )
  20. {
  21. argLink * pDelete;
  22. while( pLink != NULL )
  23. {
  24. pDelete = pLink;
  25. pLink = pLink->psNext;
  26. free( pDelete );
  27. }
  28. }
  29. /*____ findStrInArgLink() ___________________________________________________*/
  30. argLink * findStrInArgLink( argLink * pLink, char * pString )
  31. {
  32. char noncase[256];
  33. char temp[256];
  34. strcpy( noncase, pString );
  35. mystrupr( noncase );
  36. while( pLink != NULL )
  37. {
  38. strcpy( temp, pLink->pString );
  39. mystrupr( temp );
  40. if( strcmp( noncase, temp ) == 0 )
  41. return pLink;
  42. pLink = pLink->psNext;
  43. }
  44. return NULL;
  45. }
  46. /*____ argv2ArgLink() _______________________________________________________*/
  47. argLink * argv2ArgLink( int argc, char * argv[] )
  48. {
  49. int i;
  50. argLink ** wpPrev, * pLink;
  51. argLink * pFirst = NULL;
  52. wpPrev = &pFirst;
  53. for( i = 0 ; i < argc ; i++ )
  54. {
  55. pLink = (argLink *) malloc( sizeof(argLink) );
  56. pLink->pString = argv[i];
  57. pLink->psNext = NULL;
  58. * wpPrev = pLink;
  59. wpPrev = &pLink->psNext;
  60. }
  61. return pFirst;
  62. }
  63. /*____ insertStringInArgLink() ______________________________________________*/
  64. argLink * insertStringInArgLink( argLink ** wpPrev, char * pString )
  65. {
  66. argLink * pMyArg;
  67. pMyArg = (argLink *) malloc( sizeof(argLink) + strlen(pString) + 1);
  68. pMyArg->pString = ((char *)pMyArg) + sizeof(argLink);
  69. pMyArg->psNext = * wpPrev;
  70. * wpPrev = pMyArg;
  71. strcpy( pMyArg->pString, pString );
  72. return pMyArg;
  73. }
  74. /*____ linkStringToArgLink() ________________________________________________*/
  75. argLink * linkStringToArgLink( argLink ** wpPrev, char * pString )
  76. {
  77. argLink * pMyArg;
  78. pMyArg = (argLink *) malloc( sizeof(argLink) );
  79. pMyArg->pString = pString;
  80. pMyArg->psNext = * wpPrev;
  81. * wpPrev = pMyArg;
  82. return pMyArg;
  83. }
  84. /*____ addFileContentToArgLink() ____________________________________________*/
  85. int addFileContentToArgLink( argLink ** wpPrev , char * pFilename )
  86. {
  87. FILE * fp;
  88. argLink * pMyArg;
  89. int len;
  90. char temp[1024];
  91. char * pTmp, * pTmp2;
  92. int nArg = 0;
  93. fp = fopen( pFilename, "r" );
  94. if( fp == NULL )
  95. return -1;
  96. /* Take line after line */
  97. while( fgets( temp, 1024, fp ) != NULL )
  98. {
  99. /* Skip everything after a '#' */
  100.  pTmp = strchr( temp, '#' );
  101.  if( pTmp != NULL )
  102.  * pTmp = 0;
  103. /* grab the arguments from the line */
  104. pTmp = temp;
  105. len = strlen( temp );
  106. while( 1 )
  107. {
  108. for( ; * pTmp <= 32 && pTmp < temp + len ; pTmp++ );
  109. if( pTmp == temp + len )
  110. break;
  111. for( pTmp2 = pTmp ; * pTmp2 > 32 ; pTmp2++ );
  112. pMyArg = (argLink *) malloc( sizeof( argLink ) + pTmp2 - pTmp + 1 );
  113. pMyArg->pString = ((char *)pMyArg) + sizeof( argLink );
  114. pMyArg->psNext = * wpPrev;
  115. *wpPrev = pMyArg;
  116. wpPrev = &pMyArg->psNext;
  117. nArg++;
  118. memcpy( pMyArg->pString, pTmp, pTmp2 - pTmp );
  119. pMyArg->pString[pTmp2 - pTmp] = 0;
  120. pTmp = pTmp2;
  121. }
  122. }
  123. fclose( fp );
  124. return nArg;
  125. }