SRCHPATH.C
上传用户:hlzzc88
上传日期:2007-01-06
资源大小:220k
文件大小:2k
源码类别:

编译器/解释器

开发平台:

Others

  1. /*
  2.  * 68K/386 32-bit C compiler.
  3.  *
  4.  * copyright (c) 1997, David Lindauer
  5.  * 
  6.  * This compiler is intended for educational use.  It may not be used
  7.  * for profit without the express written consent of the author.
  8.  *
  9.  * It may be freely redistributed, as long as this notice remains intact
  10.  * and either the original sources or derived sources 
  11.  * are distributed along with any executables derived from the originals.
  12.  *
  13.  * The author is not responsible for any damages that may arise from use
  14.  * of this software, either idirect or consequential.
  15.  *
  16.  * v1.35 March 1997
  17.  * David Lindauer, gclind01@starbase.spd.louisville.edu
  18.  *
  19.  * Credits to Mathew Brandt for original K&R C compiler
  20.  *
  21.  */
  22. /*
  23.  * Search for a file along a path list
  24.  */
  25. #include <stdio.h>
  26. #include <string.h>
  27. #include "cmdline.h"
  28. /*
  29.  * Pull the next path off the path search list
  30.  */
  31. static char *parsepath(char *path, char *buffer)
  32. {
  33.   char *pos = path;
  34.   /* Quit if hit a ';' */
  35.   while (*pos) {
  36. if (*pos == ';') {
  37. pos++;
  38. break;
  39.     }
  40. *buffer++ = *pos++;
  41. }
  42.   *buffer = 0;
  43.   /* Return a null pointer if no more data */
  44.   if (*pos)
  45.   return(pos);
  46.   return(0);
  47. }
  48. /*
  49.  * For each library:
  50.  * Search local directory and all directories in the search path
  51.  *  until it is found or run out of directories
  52.  */
  53. FILE *SearchPath(char *string, char *searchpath, char *mode)
  54. {
  55. FILE *in;
  56. char *newpath = searchpath;
  57. /* Search local path */
  58.     in = fopen((char *) string,mode);
  59. if (in) {
  60. return(in);
  61. }
  62. else {
  63. /* If no path specified we search along the search path */
  64. if (!strchr(string,'\')) {
  65.   char buffer[200];
  66. while (newpath) {
  67. /* Create a file name along this path */
  68.   newpath = parsepath(newpath,buffer);
  69. if (buffer[strlen(buffer)-1] != '\')
  70. strcat(buffer,"\");
  71.   strcat(buffer, (char *)string);
  72. /* Check this path */
  73. in = fopen(buffer, mode);
  74. if (in) {
  75. strcpy(string,buffer);
  76. return(in);
  77. }
  78. }
  79. }
  80. }
  81. return(0);
  82. }