home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / rcs57pc3.zip / rcs / src / pc / libinit.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-03-14  |  2.1 KB  |  125 lines

  1. /* libinit.c
  2.  *
  3.  * Author:  Kai Uwe Rommel <rommel@jonas>
  4.  * Created: Sat Jan 01 1994
  5.  */
  6.  
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <sys/types.h>
  10. #include <sys/stat.h>
  11.  
  12. extern char cmdid[];
  13. extern exiterr();
  14.  
  15. #ifdef main
  16. #undef main
  17. #endif
  18.  
  19. int main(int argc, char **argv)
  20. {
  21.   /* Before actually starting the RCS programs, additional
  22.    * startup code can be executed here, such as for command
  23.    * line expansion.
  24.    */
  25.  
  26.   char *rcstz = getenv("RCSTZ");
  27.   char tzbuffer[256];
  28.   int i, j;
  29.  
  30.   if (rcstz)
  31.   {
  32.     strcpy(tzbuffer, "TZ=");
  33.     strcat(tzbuffer, rcstz);
  34.     putenv(tzbuffer);
  35.   }
  36.  
  37. #ifdef __EMX__
  38.   _response(&argc, &argv);
  39.   _wildcard(&argc, &argv);
  40. #ifndef __WIN32__
  41.   _emxload_env("RCSLOAD");
  42. #endif
  43. #endif
  44.  
  45.   for (i = 1; i < argc; i++)
  46.   {
  47.     struct stat statb;
  48.     int e = stat(argv[i], &statb);
  49.  
  50.     if ((e == 0 && (statb.st_mode & S_IFMT) == S_IFDIR)
  51.     || strcmp(argv[i], "RCS") == 0)
  52.     {
  53.       for (j = i; j < argc; j++)
  54.     argv[j] = argv[j + 1];
  55.       argc--;
  56.     }
  57.   }
  58.  
  59. #ifdef RCSDLL
  60.   dllmain(cmdid, exiterr);
  61. #endif
  62.  
  63.   return rcsmain(argc, argv);
  64. }
  65.  
  66. #if defined(__IBMC__)
  67.  
  68. #include <io.h>
  69.  
  70. int ibmc_rename(char *from, char *to)
  71. {
  72.   char *copy;
  73.  
  74.   if (*from != ',')
  75.     return rename(from, to);
  76.  
  77.   copy = _alloca(strlen(from) + 3);
  78.   strcpy(copy, ".\\");
  79.   strcat(copy, from);
  80.  
  81.   return rename(copy, to);
  82. }
  83.  
  84. int ibmc_unlink(char *filename)
  85. {
  86.   char *copy;
  87.  
  88.   if (*filename != ',')
  89.     return remove(filename);
  90.  
  91.   copy = _alloca(strlen(filename) + 3);
  92.   strcpy(copy, ".\\");
  93.   strcat(copy, filename);
  94.  
  95.   return unlink(copy);
  96. }
  97.  
  98. int ibmc_chmod(char *file, int mode)
  99. {
  100.   return chmod(file, mode & 0x0FFF);
  101. }
  102.  
  103. #ifdef _WIN32
  104.  
  105. #define WIN32_LEAN_AND_MEAN
  106. #include <windows.h>
  107.  
  108. static int std[3] = {STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, STD_ERROR_HANDLE};
  109.  
  110. int ibmc_dup2(int fromfd, int tofd)
  111. {
  112.   int rc = dup2(fromfd, tofd);
  113.  
  114.   if (0 <= tofd && tofd <= 2)
  115.     SetStdHandle(std[tofd], (HANDLE) _get_osfhandle(tofd));
  116.  
  117.   return rc;
  118. }
  119.  
  120. #endif
  121.  
  122. #endif
  123.  
  124. /* end of libinit.c */
  125.