home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume25 / pty4 / part03 / sessname.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-19  |  2.5 KB  |  118 lines

  1. #include <stdio.h>
  2. #include "ptycomm.h"
  3. #include "config/ptydir.h"
  4. #include "config/ptylongname.h"
  5. #include "getopt.h"
  6. #include "env.h"
  7.  
  8. main(argc,argv)
  9. int argc;
  10. char *argv[];
  11. {
  12.  int opt;
  13.  int uid;
  14.  char *ext;
  15.  int fdcomm;
  16.  char resp6[6];
  17.  char longname[PTYLONGNAMELEN];
  18.  
  19.  uid = getuid();
  20.  ext = env_get("PTY");
  21.  while ((opt = getopt(argc,argv,"s:")) != opteof)
  22.    switch(opt)
  23.     {
  24.      case 's':
  25.        ext = optarg;
  26.        break;
  27.      case '?':
  28.      default:
  29.        exit(1);
  30.     }
  31.  argc -= optind;
  32.  argv += optind;
  33.  
  34.  if (*argv)
  35.   {
  36.    strncpy(longname,*argv,sizeof(longname));
  37.    longname[sizeof(longname) - 1] = 0;
  38.   }
  39.  
  40.  if (!ext)
  41.   {
  42.    fprintf(stderr,"%s: fatal: no -s specified, and PTY not set; are we under a session?\n",optprogname);
  43.    exit(2);
  44.   }
  45.  
  46.  if (chdir(PTYDIR) == -1)
  47.   {
  48.    fprintf(stderr,"%s: fatal: cannot change to session directory %s\n",optprogname,PTYDIR);
  49.    exit(2);
  50.   }
  51.  
  52.  fdcomm = comm_write(ext,uid);
  53.  if (fdcomm == -1)
  54.   {
  55.    fprintf(stderr,"%s: fatal: cannot find session %s; if it exists, do you own it?\n",optprogname,ext);
  56.    exit(2);
  57.   }
  58.  if (!*argv)
  59.   {
  60.    if (write(fdcomm,"l",1) < 1)
  61.     {
  62.      close(fdcomm);
  63.      fprintf(stderr,"%s: weird: session %s refuses to listen\n",optprogname,ext);
  64.      exit(2);
  65.     }
  66.    if (read(fdcomm,resp6,6) < 6)
  67.     {
  68.      close(fdcomm);
  69.      fprintf(stderr,"%s: weird: session %s refuses to respond\n",optprogname,ext);
  70.      exit(2);
  71.     }
  72.    if (!respeq(resp6,"longnm"))
  73.     {
  74.      close(fdcomm);
  75.      fprintf(stderr,"%s: weird: session %s is being quiet\n",optprogname,ext);
  76.      exit(2);
  77.     }
  78.    if (read(fdcomm,longname,sizeof(longname)) < sizeof(longname))
  79.     {
  80.      close(fdcomm);
  81.      fprintf(stderr,"%s: weird: session %s is being evasive\n",optprogname,ext);
  82.      exit(2);
  83.     }
  84.    close(fdcomm);
  85.    printf("session %c%c%s%s\n",ext[0],ext[1],longname[0] ? ": " : "",longname);
  86.   }
  87.  else
  88.   {
  89.    if (write(fdcomm,"L",1) < 1)
  90.     {
  91.      close(fdcomm);
  92.      fprintf(stderr,"%s: weird: session %s refuses to listen\n",optprogname,ext);
  93.      exit(2);
  94.     }
  95.    if (write(fdcomm,longname,sizeof(longname)) < sizeof(longname))
  96.     {
  97.      close(fdcomm);
  98.      fprintf(stderr,"%s: fatal: session %s is deaf\n",optprogname,ext);
  99.      exit(2);
  100.     }
  101.    if (read(fdcomm,resp6,6) < 6)
  102.     {
  103.      close(fdcomm);
  104.      fprintf(stderr,"%s: weird: session %s refuses to respond\n",optprogname,ext);
  105.      exit(2);
  106.     }
  107.    if (!respeq(resp6,"thanks"))
  108.     {
  109.      close(fdcomm);
  110.      fprintf(stderr,"%s: fatal: session %s refuses to change\n",optprogname,ext);
  111.      exit(2);
  112.     }
  113.    close(fdcomm);
  114.   }
  115.  
  116.  exit(0);
  117. }
  118.