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

mpeg/mp3

开发平台:

Visual C++

  1. /*
  2. (c) Copyright 1998, 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. /******************************************************************************
  14. >>> BLADESYS <<<
  15. The intention of this file is to keep all system specific things away from the
  16. rest of the code.
  17. ******************************************************************************/
  18. #include <stdio.h>
  19. #include    <stdlib.h>
  20. #include    <string.h>
  21. #include    <time.h>
  22. #include <fcntl.h>
  23. #include    "system.h"
  24. #ifdef  MSWIN
  25. # include <windows.h>
  26. # include    <conio.h>
  27. # include    <io.h>
  28. #endif
  29. #ifdef OS2
  30. # define INCL_DOSFILEMGR
  31. # define INCL_DOSERRORS
  32. # define INCL_DOSPROCESS
  33. # include <os2.h>
  34. # include "os2key.h"
  35. #endif
  36. #ifdef UNIX_SYSTEM
  37. # include <pwd.h>
  38. # include <sys/resource.h>
  39. # include <unistd.h>
  40. # include <sys/types.h>
  41. # ifndef PRIO_MAX
  42. # define PRIO_MAX 20
  43. # define PRIO_MIN -20
  44. # endif
  45. #endif
  46. #if SYSTEM == MAC_OS
  47. #        include "EventHandling.h"
  48. #endif
  49. #include "codec.h"
  50. #include    "samplein.h"
  51. #include "arglink.h"
  52. #include "bladesys.h"
  53. /******************************************************************************
  54. >>> SYSTEM FOR PRIORITY HANDLING <<<
  55. ******************************************************************************/
  56. #ifdef OS2
  57. typedef struct
  58. {
  59. ULONG ulClass;
  60. LONG loDelta;
  61. } OS2PRIORITIES;
  62. OS2PRIORITIES OS2PrioTab[] =
  63.     {
  64.         { PRTYC_IDLETIME, 0 },
  65.         { PRTYC_IDLETIME, 31 },
  66.         { PRTYC_REGULAR, -31 },
  67.         { PRTYC_REGULAR, 0 },
  68.         { PRTYC_REGULAR, 31 },
  69.         { PRTYC_TIMECRITICAL, 0 },
  70.     };
  71. #endif
  72. int setPriority( char * pPrioString )
  73. {
  74. #ifdef  MSWIN
  75. HANDLE hThread;
  76. hThread = GetCurrentThread();
  77. if( pPrioString == NULL )
  78. SetThreadPriority( hThread, THREAD_PRIORITY_LOWEST ); /* Set default priority if NULL! */
  79. else if( strcmp( pPrioString, "HIGHEST" ) == 0 )
  80. SetThreadPriority( hThread, THREAD_PRIORITY_HIGHEST );
  81. else if( strcmp( pPrioString, "HIGHER" ) == 0 )
  82. SetThreadPriority( hThread, THREAD_PRIORITY_ABOVE_NORMAL );
  83. else if( strcmp( pPrioString, "NORMAL" ) == 0 )
  84. SetThreadPriority( hThread, THREAD_PRIORITY_NORMAL );
  85. else if( strcmp( pPrioString, "LOWER" ) == 0 )
  86. SetThreadPriority( hThread, THREAD_PRIORITY_BELOW_NORMAL );
  87. else if( strcmp( pPrioString, "LOWEST" ) == 0 )
  88. SetThreadPriority( hThread, THREAD_PRIORITY_LOWEST );
  89. else if( strcmp( pPrioString, "IDLE" ) == 0 )
  90. SetThreadPriority( hThread, THREAD_PRIORITY_IDLE );
  91. else
  92. return FALSE;
  93. #endif
  94. #ifdef OS2
  95. APIRET rc;
  96. int prio;
  97. if( pPrioString == NULL )
  98. prio = 1; /* Set default priority if NULL! */
  99. else if( strcmp( pPrioString, "HIGHEST" ) == 0 )
  100. prio = 5;
  101. else if( strcmp( pPrioString, "HIGHER" ) == 0 )
  102. prio = 4;
  103. else if( strcmp( pPrioString, "NORMAL" ) == 0 )
  104. prio = 3;
  105. else if( strcmp( pPrioString, "LOWER" ) == 0 )
  106. prio = 2;
  107. else if( strcmp( pPrioString, "LOWEST" ) == 0 )
  108. prio = 1;
  109. else if( strcmp( pPrioString, "IDLE" ) == 0 )
  110. prio = 0;
  111. else
  112. return FALSE;
  113. if ((rc = DosSetPriority (PRTYS_PROCESS,
  114.                           OS2PrioTab[prio].ulClass,
  115.                           OS2PrioTab[prio].loDelta,
  116.                           0L)) != NO_ERROR)
  117. {
  118. printf (" DosSetPriority error : rc = %un", rc);
  119. exit(1);
  120. }
  121. #endif
  122. #ifdef UNIX_SYSTEM
  123. pid_t my_pid;
  124. int prio;
  125. if( pPrioString == NULL )
  126. prio = (PRIO_MAX + PRIO_MIN)/2; /* Set default priority if NULL! */
  127. else if( strcmp( pPrioString, "HIGHEST" ) == 0 )
  128. prio = PRIO_MIN;
  129. else if( strcmp( pPrioString, "HIGHER" ) == 0 )
  130. prio = (PRIO_MAX + PRIO_MIN + PRIO_MIN)/3;
  131. else if( strcmp( pPrioString, "NORMAL" ) == 0 )
  132. prio = (PRIO_MAX + PRIO_MIN)/2;
  133. else if( strcmp( pPrioString, "LOWER" ) == 0 )
  134. prio = (PRIO_MAX + PRIO_MAX + PRIO_MIN)/3;
  135. else if( strcmp( pPrioString, "LOWEST" ) == 0 )
  136. prio = (PRIO_MAX + PRIO_MAX + PRIO_MAX + PRIO_MIN)/4;
  137. else if( strcmp( pPrioString, "IDLE" ) == 0 )
  138. prio = PRIO_MAX;
  139. else
  140. {
  141. prio = atoi( pPrioString );
  142. if( prio < PRIO_MIN )
  143. prio = PRIO_MIN;
  144. if( prio > PRIO_MAX )
  145. prio = PRIO_MAX;
  146. }
  147. my_pid = getpid();
  148. setpriority( PRIO_PROCESS, my_pid, prio );
  149. #endif
  150. /* Include Prioritysettings for other systems here... */
  151. return TRUE;
  152. }
  153. /* Some systems are by default using text-input/output instead of binary.:-( */
  154. void prepStdin( void )
  155. {
  156. #ifdef MSWIN
  157. _setmode(_fileno(stdin), _O_BINARY );
  158. #endif
  159. }
  160. void prepStdout( void )
  161. {
  162. #ifdef MSWIN
  163. _setmode(_fileno(stdout), _O_BINARY );
  164. #endif
  165. }
  166. /******************************************************************************
  167. >>> ROUTINES FOR KEYHANDLING <<<
  168. ******************************************************************************/
  169. int be_kbhit( void )
  170. {
  171. #ifdef MSWIN
  172. return kbhit();
  173. #endif
  174. #ifdef OS2
  175. return DosKeyAvailable();
  176. #endif
  177. return 0;
  178. }
  179. int be_getch( void )
  180. {
  181. #if defined(MSWIN) || defined(OS2)
  182. return getch();
  183. #endif
  184. return 0;
  185. }
  186. /******************************************************************************
  187. >>> EXPAND WILDCARDS FOR SYSTEMS THAT DON'T DO IT AUTOMATICALLY <<<
  188. ******************************************************************************/
  189. #ifdef WILDCARDS
  190. int findFirstMatch( char * pFileName, char * wpName );
  191. int findNextMatch(  char * pFileName, char * wpName );
  192. /*____ expandWildcards() ____________________________________________________*/
  193. int expandWildcards( argLink ** ppArgLink )
  194. {
  195. argLink * pFirstNewLink = NULL;
  196. argLink ** wppPrev = &pFirstNewLink;
  197. argLink * pArgLink = * ppArgLink;
  198. argLink * pTmp;
  199. int nNew = 0;
  200. int x;
  201. char temp[MAX_NAMELEN];
  202. while( pArgLink != NULL )
  203. {
  204. #ifdef MSWIN
  205. if( strchr( pArgLink->pString, '*' ) != NULL || strchr( pArgLink->pString, '?' ) != NULL
  206.     || strchr( pArgLink->pString, '~' ) != NULL )
  207. #else
  208. if( strchr( pArgLink->pString, '*' ) != NULL || strchr( pArgLink->pString, '?' ) != NULL )
  209. #endif
  210. {
  211. x = findFirstMatch( pArgLink->pString, temp );
  212. while( x == TRUE )
  213. {
  214. pTmp = insertStringInArgLink( wppPrev, temp );
  215. wppPrev = &pTmp->psNext;
  216. nNew++;
  217. x = findNextMatch( pArgLink->pString, temp );
  218. }
  219. pTmp = pArgLink;
  220. pArgLink = pArgLink->psNext;
  221. free( pTmp );
  222. }
  223. else
  224. {
  225. * wppPrev = pArgLink;
  226. wppPrev = &pArgLink->psNext;
  227. pArgLink = pArgLink->psNext;
  228. }
  229. }
  230. * wppPrev = NULL;
  231. * ppArgLink = pFirstNewLink;
  232. return nNew;
  233. }
  234. #ifdef  MSWIN
  235. static struct   _finddata_t sFind;
  236. static long             hFind;
  237. /*____ findFirstMatch() - MSWIN version ______________________________________*/
  238. int findFirstMatch( char * pFileName, char * wpName )
  239. {
  240. int x;
  241. hFind = _findfirst( pFileName, &sFind );
  242. if( hFind == -1 )
  243. return  FALSE;
  244. if( (sFind.attrib & _A_SUBDIR) != 0 )
  245. return findNextMatch( pFileName, wpName );
  246. strcpy( wpName, pFileName );
  247. for( x = strlen(wpName)-1 ; wpName[x] != '\' && wpName[x] !='/'
  248.         && wpName[x] != ':' && x > 0 ; x-- );
  249. if( x != 0 )
  250. x++;
  251. strcpy( wpName + x, sFind.name );
  252. return TRUE;
  253. }
  254. /*____ findNextMatch() - MSWIN version _______________________________________*/
  255. int findNextMatch( char * pFileName, char * wpName )
  256. {
  257. int x;
  258. while( 1 )
  259. {
  260. if( _findnext( hFind, &sFind ) != 0 )
  261. return  FALSE;
  262. if( (sFind.attrib & _A_SUBDIR) == 0 )
  263. {
  264. strcpy( wpName, pFileName );
  265. for( x = strlen(wpName)-1 ; wpName[x] != '\' && wpName[x] !='/'
  266.         && wpName[x] != ':' && x > 0 ; x-- );
  267. if( x != 0 )
  268. x++;
  269. strcpy( wpName + x, sFind.name );
  270. return TRUE;
  271. }
  272. }
  273. }
  274. #endif  /* MSWIN */
  275. #ifdef OS2
  276. static HDIR          hdirFindHandle = HDIR_SYSTEM;
  277. static FILEFINDBUF3  FindBuffer     = {0};
  278. static ULONG         ulResultBufLen = sizeof(FILEFINDBUF3);
  279. static ULONG         ulFindCount    = 1;
  280. /*____ findFirstMatch() - OS/2 version _______________________________________*/
  281. int     findFirstMatch( char * pFileName, char * wpName )
  282. {
  283. int x;
  284. APIRET rc = NO_ERROR;
  285. ulFindCount = 1;
  286. rc = DosFindFirst( pFileName,
  287.                    &hdirFindHandle,
  288.                    FILE_NORMAL,
  289.                    &FindBuffer,
  290.                    ulResultBufLen,
  291.                    &ulFindCount,
  292.                    FIL_STANDARD);
  293. if (rc != NO_ERROR)
  294. return FALSE;
  295. if( (FindBuffer.attrFile & FILE_DIRECTORY) != 0 )
  296. return findNextMatch( pFileName, wpName );
  297. strcpy( wpName, pFileName );
  298. for( x = strlen(wpName)-1 ; wpName[x] != '\' && wpName[x] !='/'
  299.         && wpName[x] != ':' && x > 0 ; x-- );
  300. if( x != 0 )
  301. x++;
  302. strcpy( wpName + x, FindBuffer.achName );
  303. return TRUE;
  304. }
  305. /*____ findNextMatch() - OS/2 version ________________________________________*/
  306. int     findNextMatch( char * pFileName, char * wpName )
  307. {
  308. int x;
  309. APIRET rc = NO_ERROR;
  310. while( 1 )
  311. {
  312. ulFindCount = 1;
  313. if ((rc = DosFindNext(hdirFindHandle,
  314.                       &FindBuffer,
  315.                       ulResultBufLen,
  316.                       &ulFindCount)) != NO_ERROR)
  317. {
  318. if ((rc = DosFindClose(hdirFindHandle)) != NO_ERROR)
  319. printf("DosFindClose error: return code = %un",rc);
  320. return FALSE;
  321. }
  322. if( (FindBuffer.attrFile & FILE_DIRECTORY) == 0 )
  323. {
  324. strcpy( wpName, pFileName );
  325. for( x = strlen(wpName)-1 ; wpName[x] != '\' && wpName[x] !='/'
  326.         && wpName[x] != ':' && x > 0 ; x-- );
  327. if( x != 0 )
  328. x++;
  329. strcpy( wpName + x, FindBuffer.achName );
  330. return TRUE;
  331. }
  332. }
  333. }
  334. #endif /* OS/2 */
  335. #endif /* WILDCARDS */
  336. /******************************************************************************
  337. >>> Routine for finding config file <<<
  338. ******************************************************************************/
  339. /*____ findConfigFile() _____________________________________________________*/
  340. int findConfigFile( char * pExepath, char * wpPath )
  341. {
  342. char * pTmp;
  343. FILE * fp;
  344. #ifdef MSWIN
  345. strcpy( wpPath, pExepath );
  346. pTmp = wpPath + strlen( wpPath) -1;
  347. while( * pTmp != '\' && pTmp != wpPath )
  348. pTmp--;
  349. if( * pTmp == '\' )
  350. pTmp++;
  351. strcpy( pTmp, "bladeenc.cfg" );
  352. fp = fopen( wpPath, "r" );
  353. if( fp != NULL )
  354. {
  355. fclose( fp );
  356. return TRUE;
  357. }
  358. #endif
  359. #ifdef UNIX_SYSTEM
  360. pTmp = getenv( "HOME" );
  361. if( pTmp != NULL )
  362. {
  363. strcpy( wpPath, pTmp );
  364. if( wpPath[strlen(wpPath)-1] != '/' )
  365. strcat( wpPath, "/" );
  366. strcat( wpPath, ".bladeencrc" );
  367. fp = fopen( wpPath, "r" );
  368. if( fp != NULL )
  369. {
  370. fclose( fp );
  371. return TRUE;
  372. }
  373. }
  374. #endif
  375. #if SYSTEM == MAC_OS
  376.  strcpy( wpPath, pExepath );
  377.  pTmp = wpPath + strlen( wpPath) -1;
  378.  while( * pTmp != ':' )
  379.          pTmp--;
  380.  strcpy( pTmp+1, MAC_BLADEENC_PREFSFILE );
  381.  fp = fopen( wpPath, "r" );
  382.  if( fp != NULL )
  383.  {
  384.          fclose( fp );
  385.          return  TRUE;
  386.  }
  387. #endif
  388. return FALSE;
  389. }