/* * MAKE * * scan .MAK file */#include <D2:\include\stdio.h>#define local staticextern char *m_nopen;char word[40];char  runtime[40]="D2:\\LIB\\RUNTIME.OBJ",  library[40]="D2:\\LIB\\C.OLB";char *keys[] ={  "runtime", "library", 0};local char erred;local char *m_nword = "word needed\n";local FILE *f;/* get word * * NOTE: returns TRUE on ERROR */local int getword(w)char *w;{  char *p;  int ch;  do  {    if ((ch=fgetc(f)) == EOF)      return 1;    if (ch == ';')    {      while (ch != '\n')      {        if ((ch=fgetc(f)) == EOF)          return 1;      }    }  } while (iswhite(ch));  p = w;  while (isalnum(ch) ||         strchr(".:\\>", ch))   {    *p++ = ch;    if ((ch=fgetc(f)) == EOF)      break;  }  *p = 0;  return (ch == EOF);}/* scan file, build tree */int build (fname)char *fname;{  char nbuf[40];  erred = 0;  filname(nbuf, fname);  strcat(nbuf, ".MAK");  f = fopen(nbuf, "r");  if (f == NULL)  {    fputs(   nbuf, stdout);    fputs(m_nopen, stdout);    return 0;  }  for (;;)  {    if (getword(word)) break;    switch (inlist(keys, word))    {    case 1:      if (getword(runtime))      {        fputs(m_nword, stdout);        return 0;      }      break;    case 2:      if (getword(library))      {        fputs(m_nword, stdout);        return 0;      }      break;    default:      if (addunit()) erred = 1;      if (getword(word))      {        fputs("no ':'\n", stdout);        erred = 1;      }      for (;;)      {        erred = getword(word);        if (*word == '.') break;        erred = adddep();      }    }  }  fclose(f);  return !erred;}