home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol135 / wpf.c < prev    next >
C/C++ Source or Header  |  1984-04-29  |  2KB  |  78 lines

  1. /*------------------------------------------------------------
  2. A program to translate those .WPF files on this system
  3. into a format more amenable to normal program text
  4. editors.
  5.  
  6. Quick, dirty and VERY data-dependent.  Will probably
  7. screw up (slightly) if it encounters two adjacent quote
  8. marks and you'll probably want to go through the output
  9. file anyway to line up the comments.  Nevertheless the
  10. output looks reasonable.
  11.  
  12. Command format:
  13.     WPF <input file> <output file>
  14.  
  15. Sorry, but you must specify the full names, e.g.
  16.     WPF LOCK.WPF LOCK.MAC
  17. but what do you expect for half an hour's effort while
  18. waiting to log on to this system, perfection?
  19.  
  20. Written for & compiled with BDS C 1.46 (I haven't put 1.5
  21. on my YAM/RCPM disk yet).
  22.  
  23.                 John Hastwell-Batten.
  24.  
  25. --------------------------------------------------------*/
  26.  
  27. #include "bdscio.h"
  28. #define SINGLEQ 0x2C
  29. #define DOUBLEQ 0x21
  30. char ibuf[BUFSIZ], obuf[BUFSIZ];
  31. main(argc,argv)  char **argv;
  32. { int c;
  33.   char inquote, incomment, colons;
  34.   if (argc != 3) {
  35.     printf("Usage: CR infile outfile\n");
  36.     exit();        }
  37.   if (fopen(argv[1],ibuf) == ERROR) {
  38.     printf("Can't open %s\n",argv[1]);
  39.     exit();                }
  40.   if (fcreat(argv[2],obuf) == ERROR) {
  41.     printf("Can't create %s\n",argv[2]);
  42.     exit();            }
  43.   inquote = incomment = FALSE;
  44.   while ((c=getc(ibuf)) != EOF && c != CPMEOF)    {
  45.     if (!incomment)
  46.         if (c==SINGLEQ || c==DOUBLEQ)
  47.             inquote = !inquote;
  48.     if (!incomment && !inquote)
  49.         incomment = c==';';
  50.     if (!incomment && !inquote)    {
  51.         if (c==' ')
  52.             emit('\t');
  53.         else                {
  54.             emit(c);
  55.             if (c==':')            {
  56.                 if (++colons == 2)        {
  57.                     emit('\r');
  58.                     emit('\n');    }    }
  59.             else
  60.                 colons = 0;
  61.                     }    }
  62.     else
  63.         emit(c);
  64.     if (c==0x0D)     {
  65.         emit('\n');
  66.         incomment = inquote = FALSE;
  67.             }            }
  68.   emit(CPMEOF);
  69.   fflush(obuf);
  70.   fclose(obuf);
  71.   fclose(ibuf);
  72. }
  73. emit(c)  char c;
  74. {    if (putc(c,obuf) == ERROR) {
  75.         printf("Disk probably full\n");
  76.         exit();    }
  77. }
  78.