home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 195_01 / unrot.c < prev    next >
Text File  |  1987-10-05  |  2KB  |  84 lines

  1. /* [UNROT.C of JUGPDS Vol.18]
  2. *****************************************************************
  3. *                                *
  4. *    Written by  Hakuo Katayose (JUG-CP/M No.179)        *
  5. *            49-114 Kawauchi-Sanjuunin-machi        *
  6. *            Sendai, Miyagi 980                          *
  7. *            Phone: 0222-61-3219                *
  8. *                                *
  9. *    Edited & tested by Y. Monma (JUG-C/M Disk Editor)       * 
  10. *                                *
  11. *****************************************************************
  12. */
  13.  
  14. #include <stdio.h>
  15. #include <dio.h>
  16.  
  17. #define    FOLD    36
  18. #define    MAXOUT    80
  19. #define    MIDDLE    40
  20.  
  21. main(argc, argv)
  22. int    argc;
  23. char     **argv;
  24.  
  25. {
  26.     int    i, j;
  27.     char    inbuf[MAXLINE], outbuf[MAXOUT+1];
  28.  
  29.     dioinit(&argc, argv);
  30.     if (argc <2) {
  31.         error("Usage: unrot <infile >outfile ^Z");
  32.         exit();
  33.     }
  34.     while (getlin(inbuf, MAXLINE) > 0) {
  35.         for (i = 0; i < MAXOUT; i++)
  36.             outbuf[i] = BLANK;
  37.         j = MIDDLE;
  38.         for (i = 0; inbuf[i] != FOLD && inbuf[i] != NEWLINE; i++) {
  39.             j++;
  40.             outbuf[i] = BLANK;
  41.             if (j >= MAXOUT - 1)
  42.                 j = 0;
  43.             outbuf[j] = inbuf[i];
  44.         }
  45.         if (inbuf[i] == FOLD) {
  46.             j = MIDDLE;
  47.             for (i = index(inbuf, NEWLINE) - 1; i > 0; i--) {
  48.                 if (inbuf[i] == FOLD)
  49.                     break;
  50.                 if (--j < 0)
  51.                     j = MAXOUT - 2;
  52.                 outbuf[j] = inbuf[i];
  53.             }
  54.         }
  55.         for (i = MAXOUT - 2; i > 0; i--)
  56.             if (inbuf[i] != BLANK)
  57.                 break;
  58.         outbuf[i + 1] = NEWLINE;
  59.         outbuf[i + 2] = EOS;
  60.         putlin(outbuf, STDOUT);
  61.     }
  62.     dioflush();
  63. }
  64.  
  65.  
  66. putlin(buf)
  67. char *buf;
  68. {
  69.     while (*buf)
  70.         putchar(*buf++);
  71. }
  72.  
  73.  
  74. index(str, c)
  75. char    *str;
  76. int    c;
  77. {
  78.     int    i;
  79.  
  80.     for (i = 0; *str && *str != c; i++ )
  81.         *str++;
  82.     return ( *str ? i : ERROR);
  83. }
  84.