Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. /* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only                     */
  2.  
  3. #include <stdio.h>
  4. #include <ctype.h>
  5. #include <stdlib.h>
  6. #include <unistd.h>
  7.  
  8. #include "sysdefs.h"
  9. #include "specchars.h"
  10. #include "strutil.h"
  11.  
  12. #define TMPNAME "tempfile"
  13.  
  14. int main(int argc, char **argv)
  15. {
  16.    FILE *src,*dest;
  17.    int ch;
  18.    int z,z2,res;
  19.    char cmdline[1024];
  20.    long charcnt,metacnt,crcnt;
  21.  
  22.    if (argc<2)
  23.     {
  24.      fprintf(stderr,"usage: %s <file> [more files]\n",argv[0]);
  25.      exit(1);
  26.     }
  27.  
  28.    for (z=1; z<argc; z++)
  29.     {
  30.      src=fopen(argv[z],OPENRDMODE);
  31.      if (src==NULL)
  32.       {
  33.        fprintf(stderr,"error opening %s for reading\n",argv[z]); exit(2);
  34.       }
  35.      dest=fopen(TMPNAME,OPENWRMODE);
  36.      if (dest==NULL)
  37.       {
  38.        fprintf(stderr,"error opening %s for writing\n",TMPNAME); exit(2);
  39.       }
  40.      charcnt=metacnt=crcnt=0;
  41.      while (!feof(src))
  42.       {
  43.        ch=fgetc(src); charcnt++;
  44.        switch (ch)
  45.         {
  46.          case EOF:
  47.           break;
  48.          case 13:
  49.           crcnt++; break;
  50.          default:
  51.           for (z2=0; *specchars[z2]!=0000; z2++)
  52.            if (ch==specchars[z2][0])
  53.            {
  54.              fputc(specchars[z2][1],dest); metacnt++; break;
  55.            }
  56.           if (*specchars[z2]==0000) fputc(ch,dest);
  57.         }
  58.       }
  59.      fclose(src); fclose(dest);
  60.      as_snprintf(cmdline, sizeof(cmdline), "mv %s %s", TMPNAME, argv[z]);
  61.      res = system(cmdline);
  62.      if (res != 0)
  63.       {
  64.        fprintf(stderr,"command \"%s\" failed\n",cmdline); exit(2);
  65.       }
  66.      printf("%s: %ld char(s), %ld cr(s) stripped, %ld meta char(s) converted\n",
  67.             argv[z],charcnt,crcnt,metacnt);
  68.     }
  69.  
  70.    exit(0);
  71. }
  72.