home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / advos2 / ch16 / lc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-12-12  |  1.8 KB  |  61 lines

  1. /*
  2.     LC.C    Filter to translate uppercase {A-Z} 
  3.             to lowercase {a-z} characters.
  4.     Copyright (C) 1988 Ray Duncan
  5.  
  6.     Compile:    CL lc.c
  7.  
  8.     Usage:      LC  [<source]  [>destination]
  9. */
  10.  
  11. #include <stdio.h>
  12.  
  13. #define STDIN   0                   /* standard input handle */
  14. #define STDOUT  1                   /* standard output handle */
  15. #define BUFSIZE 256                 /* I/O buffer size */
  16.  
  17. #define API unsigned extern far pascal 
  18.  
  19. API DosRead(unsigned, void far *, unsigned, unsigned far *);
  20. API DosWrite(unsigned, void far *, unsigned, unsigned far *);
  21.  
  22. static char input[BUFSIZE];         /* buffer for input line */
  23. static char output[BUFSIZE];        /* buffer for output line */
  24.  
  25. main(int argc,char argv)
  26. {       
  27.     int rlen,wlen;                  /* scratch variables */
  28.  
  29.     while(1)                        /* do until end of file */
  30.     {                               /* get line from standard input */
  31.         DosRead(STDIN,input,BUFSIZE,&rlen);
  32.         
  33.         if(rlen == 0) exit(0);      /* exit if end of stream */
  34.  
  35.                                     /* write translated line
  36.                                        to standard output */
  37.         DosWrite(STDOUT,output,translate(rlen),&wlen);
  38.     }
  39. }
  40.  
  41.  
  42. /*
  43.     Translate upper case characters to lower
  44.     case characters, leaving resulting text
  45.     in output buffer and returning its length.
  46. */
  47. int translate(int length)
  48. {       
  49.     int i;                          /* scratch variable */
  50.  
  51.     memcpy(output,input,length);    /* copy input to output */
  52.  
  53.     for(i = 0; i < length; i++)     /* lowercase the output */
  54.     {       
  55.         if(output[i] >= 'A' && output[i] <= 'Z') 
  56.             output[i] += 'a'-'A';
  57.     }
  58.     return(length);                 /* and return its length */
  59. }
  60.  
  61.