home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Distributions / ucb / spencer_2bsd.tar.gz / 2bsd.tar / src / net / mwrite.c < prev    next >
C/C++ Source or Header  |  1980-02-17  |  2KB  |  92 lines

  1. /* Copyright (c) 1979 Regents of the University of California */
  2. # include "defs.h"
  3. /* mwrite name ttystr ltime fmach fuser command time */
  4. /* ttystr is the full name, e.g. /dev/tty0 */
  5. /* command and time is optional */
  6. jmp_buf env;
  7. main(argc,argv)
  8.   char **argv; {
  9.     long ltime, otime, timesent, el;
  10.     int alarmint();
  11.     FILE *file;
  12.     int n;
  13.     struct utmp utmpstr;
  14.     char buf[BFS*2],*s,buf1[BFS];
  15.     debugflg = DBV;
  16.     argv[argc] = 0;
  17.     otime = ltime = 0;
  18.     errno = 0;
  19.     setjmp(env);
  20.     alarm(0);
  21.     signal(SIGCLK,alarmint);
  22.     if(errno != 100 && argv[2][0] && argv[2][8] != 'x'){
  23.         alarm(100);
  24.         /*
  25.         debug("argv3 %s",argv[3]);
  26.         */
  27.         sscanf(argv[3],"%lo",<ime);
  28.         file = fopen("/etc/utmp","r");
  29.         if(file == NULL)error("bad utmp");
  30.         while(fread(&utmpstr,1,sizeof utmpstr,file) == sizeof utmpstr){
  31. # ifdef OLDTTY
  32.             if(utmpstr.ut_tty == argv[2][8]){
  33. # else
  34.             if(strcmp(utmpstr.ut_line,argv[2]+5) == 0){
  35. # endif
  36.                 otime = utmpstr.ut_time;
  37.                 break;
  38.                 }
  39.             }
  40.         fclose(file);
  41.         /*
  42.         debug("ltime %lo otime %lo",ltime,otime);
  43.         */
  44.         if(otime != 0 && otime == ltime) {
  45.             sprintf(buf,"%s",argv[2]);
  46.             file = fopen(buf,"w");
  47.             if(file != NULL && fstat(fileno(file),&statbuf) !=  -1
  48.                 && (statbuf.st_mode&02)){
  49.                 fprintf(file,"\nMessage from %s on %s machine ...\n",
  50.                 argv[5],longname(argv[4][0]));
  51.                 if(argc > 6){
  52.                     fprintf(file,"(command: %s",argv[6]);
  53.                     if(argc > 7){
  54.                         timesent=atol(argv[7])+TIMEBASE;
  55.                         s = ctime(×ent);
  56.                         s[strlen(s)-6] = 0;
  57.                         el = gettime() - timesent;
  58.                         fprintf(file,", sent %s, took %s",s,comptime(el));
  59.                         }
  60.                     fprintf(file,")\n");
  61.                     }
  62.                 while((n = fread(buf,1,512,stdin)) > 0){
  63.                     fwrite(buf,1,n,file);
  64.                     if(feof(stdin))break;
  65.                     }
  66.                 fprintf(file,"------\n");
  67.                 exit(0);
  68.                 }
  69.             }
  70.         }
  71.     
  72.     if(argc > 6){
  73.         sprintf(buf,"-%s",argv[6]);
  74.         if(argc > 7){
  75.             timesent=atol(argv[7])+TIMEBASE;
  76.             sprintf(buf1,"-%ld",timesent);
  77.             mexecl(mailcmd,"mmail",buf,buf1,argv[5],
  78.                 longname(argv[4][0]), argv[1], 0);
  79.             }
  80.         else mexecl(mailcmd,"mmail",buf,argv[5],longname(argv[4][0]),
  81.             argv[1], 0);
  82.         }
  83.     else mexecl(mailcmd,"mmail",argv[5],longname(argv[4][0]),argv[1],0);
  84.     exit(1);
  85.     }
  86. alarmint(){
  87.     errno = 100;
  88.     signal(SIGCLK,SIG_IGN);        /* alarm off */
  89.     longjmp(env,0);            /* ugh */
  90.     }
  91. /* returns number of bytes written, error returns WRITEFAIL (-3) */
  92.