home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume3 / send / stom.c < prev   
Encoding:
C/C++ Source or Header  |  1989-02-03  |  1.7 KB  |  107 lines

  1. /*
  2. **  stom.c --
  3. **        Convert a .sends formatted message into a Unix mailbox
  4. **        format.
  5. **
  6. **    Written by: Keith Gabryelski (ag@elgar.UUCP)
  7. **
  8. **        Released into public domain June 14, 1988.
  9. **            Please keep this header.
  10. */
  11.  
  12. #include <stdio.h>
  13. #include <sys/types.h>
  14. #include <sys/stat.h>
  15. #include <pwd.h>
  16. #include <errno.h>
  17.  
  18. extern errno;
  19.  
  20. extern FILE *fopen();
  21. extern struct passwd *getpwuid(), *getpwnam();
  22. extern char *sys_errlist[], *malloc(), *realloc();
  23. extern int sys_nerr;
  24.  
  25. #undef TRUE
  26. #undef FALSE
  27. #define TRUE            1
  28. #define FALSE            0
  29.  
  30. #define    SENDS_FILENAME        "/.sends"    /* must have the '/' */
  31. #define MESSAGE_SEPARATOR    0x1F
  32.  
  33. char *puterr(), *mymalloc(), *myrealloc();
  34. char *progname;
  35.  
  36. main(argc, argv)
  37. int argc;
  38. char **argv;
  39. {
  40.     FILE *fp;
  41.  
  42.     progname = *argv++; --argc;
  43.  
  44.     if (argc < 1)
  45.     convert(stdin);
  46.     else
  47.     while (argc--)
  48.     {
  49.         if ((fp = fopen(*argv, "r")) == NULL)
  50.         fprintf(stderr, "%s: can't access file %s (%s).\n", progname,
  51.             *argv, puterr(errno));
  52.         else
  53.         convert(fp);
  54.  
  55.         *++argv;
  56.     }
  57.  
  58.     exit(0);
  59. }
  60.  
  61. convert(stream)
  62. FILE *stream;
  63. {
  64.     char text[20], user_name[10], date[28];
  65.     char *dp;
  66.     int c;
  67.  
  68.     while (fscanf(stream, "[%s from %s ", text, user_name) == 2)
  69.     {
  70.     /*
  71.     ** ignore tty.
  72.     */
  73.     while ((c = getc(stream)) != ')')
  74.         ;
  75.  
  76.     /*
  77.     ** get date.
  78.     */
  79.  
  80.     dp = date;
  81.  
  82.     while ((c = getc(stream)) != ']')
  83.         *dp++ = c;
  84.  
  85.     *dp = '\0';
  86.  
  87.     printf("From %s%s\nSubject: A %s\n",  user_name, date, text);
  88.  
  89.     /*
  90.     ** And the message itself.
  91.     */
  92.     while ((c = getc(stream)) != MESSAGE_SEPARATOR)
  93.         putchar(c);
  94.     }
  95. }
  96.  
  97. char *
  98. puterr(error)
  99. int error;
  100. {
  101.     static char qwerty[42];
  102.  
  103.     (void) sprintf(qwerty, "Unknown error %d", error);
  104.  
  105.     return ((unsigned)error >= sys_nerr) ? qwerty : sys_errlist[error];
  106. }
  107.