home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / tass.lzh / sigs.c < prev    next >
C/C++ Source or Header  |  1993-01-24  |  2KB  |  80 lines

  1. #include       <stdio.h>
  2. #include       "tass.h"
  3.  
  4. #ifdef APPEND_SIG
  5. #ifdef RAND_SIG
  6. static void
  7. random_signature (buf, fpo, cnt)
  8. char *buf;
  9. FILE *fpo;
  10. int cnt;
  11. {
  12.        static int      first = 1;
  13.        FILE            *fp;
  14.        char            inp[130];
  15.        int             n;
  16.  
  17.        sprintf (buf, "%s/.randsig", homedir);
  18.        if (! (fp = fopen (buf, "r")))
  19.                return;
  20.        if (first) {
  21.                srandom (time (0));
  22.                first = 0;
  23.        }
  24.        n = _gs_size (fileno (fp));
  25.        n = random () % 
  26.                ((n > (1 << 9)) ?
  27.                        (n >> 7) :
  28.                        ((n > (1 << 5)) ?
  29.                                (n >> 3) :
  30.                                10));
  31.        while (n-- > 0) {
  32.                while (fgets (inp, 128, fp))
  33.                        if (! strcmp (inp, "%%\n"))
  34.                                break;
  35.                if (feof (fp)) {
  36.                        clearerr (fp);
  37.                        cleareof (fp);
  38.                        rewind (fp);
  39.                        continue;
  40.                }
  41.        }
  42.        while (fgets (inp, 128, fp) && (cnt-- > 0))
  43.                if (strcmp (inp, "%%\n"))
  44.                        fputs (inp, fpo);
  45.                else
  46.                        break;
  47.        fclose (fp);
  48. }
  49. #endif /* RAND_SIG */
  50.                
  51. void
  52. add_signature (fp)
  53. FILE *fp;
  54. {
  55.        extern char     *malloc ();
  56.        static char     *fn = NULL;
  57.        FILE            *fpi;
  58.        int             cnt;
  59.  
  60.        if (!fn) {
  61.                if (!(fn = malloc (250)))
  62.                        return;
  63.        }
  64.        sprintf (fn, "%s/.signature", homedir);
  65.        cnt = 4 * 400;
  66.        if (fpi = fopen (fn, "r")) {
  67.                putc ('\n', fp);
  68.                while (fgets (fn, 200, fpi) && (cnt-- > 0))
  69.                        fputs (fn, fp);
  70.                fclose (fpi);
  71.        }
  72. #ifdef RAND_SIG
  73.        if (cnt > 0)
  74.                random_signature (fn, fp, cnt);
  75. #endif /* RAND_SIG */
  76. }
  77. #endif /* APPEND_SIG */
  78.  
  79.  
  80.