home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume11 / id / part03 / opensrc.c < prev    next >
C/C++ Source or Header  |  1987-09-25  |  2KB  |  109 lines

  1. /* Copyright (c) 1986, Greg McGary */
  2. static char sccsid[] = "@(#)opensrc.c    1.1 86/10/09";
  3.  
  4. #include    <stdio.h>
  5. #include    <string.h>
  6. #include    <sys/types.h>
  7. #include    <sys/stat.h>
  8.  
  9. FILE *openSrcFILE();
  10. char *getSCCS();
  11. char *coRCS();
  12.  
  13. FILE *
  14. openSrcFILE(path, sccsDir, rcsDir)
  15.     char        *path;
  16.     char        *sccsDir;
  17.     char        *rcsDir;
  18. {
  19.     char        *command = NULL;
  20.     char        *what = NULL;
  21.     char        *get = "get SCCS file";
  22.     char        *checkout = "checkout RCS file";
  23.     char        *dirName;
  24.     char        *baseName;
  25.     FILE        *srcFILE;
  26.  
  27.     if ((srcFILE = fopen(path, "r")) != NULL)
  28.         return srcFILE;
  29.  
  30.     if ((baseName = strrchr(path, '/')) == NULL) {
  31.         dirName = ".";
  32.         baseName = path;
  33.     } else {
  34.         dirName = path;
  35.         *baseName++ = '\0';
  36.     }
  37.  
  38.     if (rcsDir && (command = coRCS(dirName, baseName, rcsDir)))
  39.         what = checkout;
  40.     else if (sccsDir && (command = getSCCS(dirName, baseName, sccsDir)))
  41.         what = get;
  42.     else if ((command = coRCS(dirName, baseName, "RCS"))
  43.          ||  (command = coRCS(dirName, baseName, ".")))
  44.         what = checkout;
  45.     else if ((command = getSCCS(dirName, baseName, "SCCS"))
  46.          ||  (command = getSCCS(dirName, baseName, "sccs"))
  47.          ||  (command = getSCCS(dirName, baseName, ".")))
  48.         what = get;
  49.  
  50.     if (dirName == path)
  51.         *--baseName = '/';
  52.  
  53.     if (!command) {
  54.         filerr("open", path);
  55.         return NULL;
  56.     }
  57.  
  58.     system(command);
  59.     if ((srcFILE = fopen(path, "r")) == NULL) {
  60.         filerr("open", path);
  61.         return NULL;
  62.     }
  63.  
  64.     fprintf(stderr, "%s\n", command);
  65.     return srcFILE;
  66. }
  67.  
  68. char *
  69. getSCCS(dir, base, sccsDir)
  70.     char        *dir;
  71.     char        *base;
  72.     char        *sccsDir;
  73. {
  74.     static char    cmdBuf[BUFSIZ];
  75.     char        fileBuf[BUFSIZ];
  76.     struct stat    statBuf;
  77.  
  78.     if (!*sccsDir)
  79.         sccsDir = ".";
  80.  
  81.     sprintf(fileBuf, "%s/%s/s.%s", dir, sccsDir, base);
  82.     if (stat(fileBuf, &statBuf) < 0)
  83.         return NULL;
  84.     sprintf(cmdBuf, "cd %s; get -s %s/s.%s", dir, sccsDir, base);
  85.  
  86.     return cmdBuf;
  87. }
  88.  
  89. char *
  90. coRCS(dir, base, rcsDir)
  91.     char        *dir;
  92.     char        *base;
  93.     char        *rcsDir;
  94. {
  95.     static char    cmdBuf[BUFSIZ];
  96.     char        fileBuf[BUFSIZ];
  97.     struct stat    statBuf;
  98.  
  99.     if (!*rcsDir)
  100.         rcsDir = ".";
  101.  
  102.     sprintf(fileBuf, "%s/%s/%s,v", dir, rcsDir, base);
  103.     if (stat(fileBuf, &statBuf) < 0)
  104.         return NULL;
  105.     sprintf(cmdBuf, "cd %s; co -q %s/%s,v", dir, rcsDir, base);
  106.  
  107.     return cmdBuf;
  108. }
  109.