home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / fish / programming / mkid / src / opensrc.c < prev    next >
C/C++ Source or Header  |  1991-02-01  |  2KB  |  127 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. #ifdef UNIX
  7. #include    <sys/types.h>
  8. #include    <sys/stat.h>
  9. #endif
  10.  
  11. FILE *openSrcFILE();
  12. char *getSCCS();
  13. char *coRCS();
  14.  
  15. FILE *
  16. openSrcFILE(path, sccsDir, rcsDir)
  17.     char        *path;
  18.     char        *sccsDir;
  19.     char        *rcsDir;
  20. {
  21.     char        *command = NULL;
  22.     char        *what = NULL;
  23.     char        *get = "get SCCS file";
  24.     char        *checkout = "checkout RCS file";
  25.     char        *dirName;
  26.     char        *baseName;
  27.     FILE        *srcFILE;
  28.  
  29.     if ((srcFILE = fopen(path, "r")) != NULL)
  30.         return srcFILE;
  31.  
  32. #ifdef UNIX
  33.     if ((baseName = strrchr(path, '/')) == NULL) {
  34.         dirName = ".";
  35.         baseName = path;
  36.     } else {
  37.         dirName = path;
  38.         *baseName++ = '\0';
  39.     }
  40.  
  41.     if (rcsDir && (command = coRCS(dirName, baseName, rcsDir)))
  42.         what = checkout;
  43.     else if (sccsDir && (command = getSCCS(dirName, baseName, sccsDir)))
  44.         what = get;
  45.     else if ((command = coRCS(dirName, baseName, "RCS"))
  46.          ||  (command = coRCS(dirName, baseName, ".")))
  47.         what = checkout;
  48.     else if ((command = getSCCS(dirName, baseName, "SCCS"))
  49.          ||  (command = getSCCS(dirName, baseName, "sccs"))
  50.          ||  (command = getSCCS(dirName, baseName, ".")))
  51.         what = get;
  52.  
  53.     if (dirName == path)
  54.         *--baseName = '/';
  55.  
  56.     if (!command) {
  57.         filerr("open", path);
  58.         return NULL;
  59.     }
  60.  
  61.     system(command);
  62.     if ((srcFILE = fopen(path, "r")) == NULL) {
  63.         filerr("open", path);
  64.         return NULL;
  65.     }
  66.  
  67.     fprintf(stderr, "%s\n", command);
  68.     return srcFILE;
  69. #endif
  70. #ifdef AMIGA
  71.     filerr("open", path);
  72.     return NULL;
  73. #endif
  74. }
  75.  
  76. char *
  77. getSCCS(dir, base, sccsDir)
  78.     char        *dir;
  79.     char        *base;
  80.     char        *sccsDir;
  81. {
  82. #ifdef UNIX
  83.     static char    cmdBuf[BUFSIZ];
  84.     char        fileBuf[BUFSIZ];
  85.     struct stat    statBuf;
  86.  
  87.     if (!*sccsDir)
  88.         sccsDir = ".";
  89.  
  90.     sprintf(fileBuf, "%s/%s/s.%s", dir, sccsDir, base);
  91.     if (stat(fileBuf, &statBuf) < 0)
  92.         return NULL;
  93.     sprintf(cmdBuf, "cd %s; get -s %s/s.%s", dir, sccsDir, base);
  94.  
  95.     return cmdBuf;
  96. #endif
  97. #ifdef AMIGA
  98.     return NULL;
  99. #endif
  100. }
  101.  
  102. char *
  103. coRCS(dir, base, rcsDir)
  104.     char        *dir;
  105.     char        *base;
  106.     char        *rcsDir;
  107. {
  108. #ifdef UNIX
  109.     static char    cmdBuf[BUFSIZ];
  110.     char        fileBuf[BUFSIZ];
  111.     struct stat    statBuf;
  112.  
  113.     if (!*rcsDir)
  114.         rcsDir = ".";
  115.  
  116.     sprintf(fileBuf, "%s/%s/%s,v", dir, rcsDir, base);
  117.     if (stat(fileBuf, &statBuf) < 0)
  118.         return NULL;
  119.     sprintf(cmdBuf, "cd %s; co -q %s/%s,v", dir, rcsDir, base);
  120.  
  121.     return cmdBuf;
  122. #endif
  123. #ifdef AMIGA
  124.     return NULL;
  125. #endif
  126. }
  127.