home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 June / SIMTEL_0692.cdr / msdos / screen / pipev20.arc / PIPE.C next >
Text File  |  1986-08-13  |  4KB  |  163 lines

  1. /*
  2.  *  This is PIPE, version 2.00; Written by Josh Assing
  3.  *  on Turbo-C, Version 1.0; The purpose of this pipe
  4.  *  is to route output to the screen and to a file for
  5.  *  viewing and/or editing at a later date.  The switches
  6.  *  are discussed with the /h switch, so I shall not
  7.  *  discuss them now.  This program is given to the general
  8.  *  public at no charge.  HOWEVER, this program still
  9.  *  belongs to me, so any modifications, I would appreciate
  10.  *  you sending them to me.  Via REDWOOD BBS, or mail:
  11.  *  1376 H st, Apt. A, Arcata, CA  95521
  12.  *  I found a use for it, so I assume others might be
  13.  *  able to use it as well.
  14.  *  (Sorry, comments are not my strong point, but I
  15.  *   will make some.)
  16.  */
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <stdarg.h>
  21. #include <dir.h>
  22. #include <string.h>
  23. #include <ctype.h>
  24. #include <pipe.h>
  25.  
  26. #define boolean int
  27. #define true 1
  28. #define false 0
  29. #define EOI 255
  30.  
  31. main(argc, argv)
  32.   int argc;
  33.   char *argv[];  {
  34.  
  35.   char ch, write_name[100];
  36.   boolean backup, append, help;
  37.   FILE *fpp;
  38.  
  39.   backup = append = help = false;
  40.  
  41.   --argc;
  42.  
  43. /*
  44.  *  Get file name to work with, if it's there, otherwise
  45.  *  use the default.
  46.  */
  47.  
  48.   {
  49.   boolean defaultn = false;
  50.   int argn;
  51.  
  52.   if(argc == 0)
  53.     defaultn = true;
  54.   else
  55.     if(argv[1][0] == '/')
  56.       if(argc >= 2)
  57.         argn = 2;
  58.       else
  59.         defaultn = true;
  60.       else
  61.         argn = 1;
  62.   if(defaultn)
  63.     strcpy(write_name,"PIPE-OUT.PUT");
  64.   else
  65.     strcpy(write_name,argv[argn]);
  66.   }
  67.  
  68. /*
  69.  *  Get the switches, and set the boolean values.
  70.  */
  71.  
  72.   if(argc >= 1 && argv[1][0] == '/') {
  73.     int i = 1;
  74.  
  75.     for(; i < strlen(argv[1]); ++i)
  76.       switch(toupper(argv[1][i])) {
  77.         case 'H':
  78.            help = true;
  79.            break;
  80.         case 'A':
  81.            append = true;
  82.            break;
  83.         case 'B':
  84.           backup = true;
  85.           break;
  86.         case '/':
  87.           break;
  88.         default:
  89.           printf("\nIllegal switch %c.\nTerminating.",argv[1][i]);
  90.           exit(1);
  91.       }
  92.     if(append && backup)
  93.       append = false;
  94.  
  95. /*
  96.  *  Now, test for help, then for backup, then append, then
  97.  *  run the pipe.
  98.  */
  99.  
  100.     if(help) {
  101.       helpf(argv[0]);
  102.       exit(0);
  103.     }
  104.     if(backup) {
  105.       char back_name[13];
  106.       int result;
  107.  
  108.       result = backupf(back_name);
  109.       if(result != 0) {
  110.         printf("\nError (%d) in using file name: %s.\nTerminating.",result, back_name);
  111.         exit(1);
  112.       }
  113.       result = rename(write_name,back_name);
  114.       if(result != 0) {
  115.         printf("\nError (%d) backing up file %s to %s.\nTerminating.",result, write_name, back_name);
  116.         exit(1);
  117.       }
  118.     } /* Backup */
  119.   } /* Command line params */
  120.  
  121.   if(append)
  122.     fpp = fopen(write_name,"a");
  123.   else
  124.     fpp = fopen(write_name,"w");
  125.  
  126.   if(fpp == NULL) {
  127.     printf("\nError using file: %s\nTerminating.",write_name);
  128.     exit(1);
  129.   }
  130.  
  131.   do {
  132.     putchar(ch = getchar());
  133.     putc(ch,fpp);
  134.   } while(ch != EOI);
  135.   putc('\n',fpp);
  136.   exit(0);
  137. }
  138.  
  139.  
  140.  
  141. int backupf(fname)
  142.   char fname[];  {
  143.  
  144.   strcpy(fname,"PIPED-XXXXXX");
  145.   fname = mktemp(fname);
  146.   return(0);
  147. }
  148.  
  149.  
  150. void helpf(name)
  151.   char name[];  {
  152.   printf("\n\n%s (PIPE), Version 2.00",name);
  153.   puts("\n\nTo use this program, use the Following:");
  154.   puts("\ncommand |pipe [/bah] [file name]");
  155.   puts("/b means: back up the file (given name or default)");
  156.   puts("          then do the pipe.");
  157.   puts("/h means: print this descrpition.  (NO pipe done.)");
  158.   puts("/a means: append the file before writting.  Do the pipe.");
  159.   puts("\n\nThe purpose of this program is to write data to");
  160.   puts("the screen and a file.");
  161.   puts("\n\nThis program is written by Josh Assing.\n\n");
  162.   return;
  163. }