home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / drdobbs / c_spec / execute / p.c < prev    next >
C/C++ Source or Header  |  1986-02-20  |  2KB  |  86 lines

  1. #include <stdio.h>
  2. #include <fcntl.h>
  3.  
  4. /*    P.C        Page input to stdout.
  5.  *
  6.  *    Usage:    p file...
  7.  */
  8.  
  9. #define BSIZE    256
  10. #define STOP_AT    21    /* # of lines to output before stopping */
  11.  
  12. /*------------------------------------------------------------------*/
  13.  
  14. main(argc, argv)
  15. char    **argv;
  16. {
  17.     register FILE    *fp;
  18.  
  19.     ctlc();
  20.     reargv(&argc, &argv);
  21.  
  22.     if( argc <= 1 )
  23.         dofile( stdin );
  24.  
  25.     else if( argv[1][0] == '-' )
  26.            usage();
  27.  
  28.     while( --argc > 0 )
  29.     {
  30.         if( !(fp = fopen(*++argv, "r")) )
  31.             fprintf(stderr, "p: can't open %s\n", *argv );
  32.         else
  33.         {
  34.             dofile( fp );
  35.             fclose( fp );
  36.         }
  37.  
  38.         puts("\n");
  39.         if( argc > 1 )
  40.             b_getc();
  41.     }
  42.  
  43.     exit(0);
  44. }
  45.  
  46. /*------------------------------------------------------------------*/
  47.  
  48. #define E(x) fprintf(stderr,"%s\n", x );
  49.  
  50. usage()
  51. {
  52.     E("p:  Copyright (C) 1986, Allen I. Holub. All rights reserved.");
  53.     E("\nUseage: p <file list>\n");
  54.     E("Print all files in list on the screen, pausing every 21 lines");
  55.     exit(1);
  56. }
  57.  
  58. /*------------------------------------------------------------------*/
  59.  
  60. dofile( fp )
  61. FILE    *fp;
  62. {
  63.     char        buf[BSIZE];
  64.     register int    linenum = 0;
  65.  
  66.     while( fgets(buf, BSIZE, fp) != NULL )
  67.     {
  68.         fputs(buf,stdout);
  69.         if( !(++linenum % STOP_AT) )
  70.         {
  71.             fputs("<Hit any character for next page>",stdout);
  72.             if( (b_getc() & 0x7f) == 0x3 )
  73.             {
  74.                 putchar('\n');
  75.                 exit(1);
  76.             }
  77.  
  78.             fputs("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b",stdout);
  79.             fputs("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b", stdout );
  80.             fputs("                                 ",stdout);
  81.             fputs("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b",stdout);
  82.             fputs("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b", stdout );
  83.         }
  84.     }
  85. }
  86.