home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / OS2MNX1.ZIP / HEAD.C < prev    next >
C/C++ Source or Header  |  1989-12-27  |  3KB  |  130 lines

  1. /*
  2.  * head - print the first few lines of a file    Author: Andy
  3.  * Tanenbaum 
  4.  */
  5.  
  6. /* $Header: D:/RCS/RCS/head.c 1.1 89/12/27 02:12:35 RCA Exp $
  7.  * $Log:    head.c $
  8.  * Revision 1.1  89/12/27  02:12:35  RCA
  9.  * Initial revision
  10.  * 
  11.  */
  12. /* Someone should put wildcard capability in here */
  13.  
  14.  /*
  15.  * change to use putc() instead of prints()    --  Dean Long
  16.  * 3/7/87    
  17.  */
  18.  
  19.  
  20. #include "stdio.h"
  21.  
  22. #define DEFAULT 10
  23.  
  24. char    buff[BUFSIZ];
  25. main(argc, argv)
  26.    int     argc;
  27.    char   *argv[];
  28. {
  29.  
  30. int     n, k, nfiles;
  31. char   *ptr;
  32.  
  33.     if (argc == 1)
  34.       {
  35.       printf ("\n █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█");
  36.       printf ("\n █ HEAD     (Print first lines of file)    $Author: RCA $   █");
  37.       printf ("\n █          $Date: 89/12/27 02:12:35 $     $Revision: 1.1 $ █");
  38.       printf ("\n █ Usage:   HEAD [-n] filename                              █");
  39.       printf ("\n █ Purpose: Will print the first [n] lines of a file.       █");
  40.       printf ("\n █ Option:  -n: Print \"n\" lines of the file.                █");
  41.       printf ("\n █ OS:      Works under OS/2 or DOS.                        █");
  42.       printf ("\n █ Credits: A. Tannenbaum, D. Long                          █");
  43.       printf ("\n █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█\n");
  44.       exit(1);
  45.       }
  46.  
  47. /*
  48.  * Check for flag.  Only flag is -n, to say how many lines to
  49.  * print. 
  50.  */
  51.    setbuf(stdout, buff);
  52.    k = 1;
  53.    ptr = argv[1];
  54.    n = DEFAULT;
  55.    if (*ptr++ == '-')
  56.    {
  57.       k++;
  58.       n = atoi(ptr);
  59.       if (n <= 0)
  60.      usage();
  61.    }
  62.    nfiles = argc - k;
  63.  
  64.    if (nfiles == 0)
  65.    {
  66.    /* Print standard input only. */
  67.       do_file(n);
  68.       fflush(stdout);
  69.       exit(0);
  70.    }
  71. /* One or more files have been listed explicitly. */
  72.    while (k < argc)
  73.    {
  74.       fclose(stdin);
  75.    /*
  76.     * change if (nfiles > 1) prints("==> %s <==\n",
  77.     * argv[k]); 
  78.     */
  79.       if (nfiles > 1)
  80.      puts("==> %s <==\n");
  81.       if (fopen(argv[k], "r") == NULL)
  82.       /*
  83.        * change prints("head: cannot open %s\n", argv[k]);
  84.        */
  85.      puts("head: cannot open %s\n");
  86.  
  87.       else
  88.       {
  89.      do_file(n);
  90.      fflush(stdout);
  91.       }
  92.       k++;
  93.    /*
  94.     * change if (k < argc) prints("\n");
  95.     */
  96.       if (k < argc)
  97.      puts("\n");
  98.    }
  99.    exit(0);
  100. }
  101.  
  102.  
  103.  
  104. do_file(n)
  105.    int     n;
  106. {
  107. int     c;
  108. /* Print the first 'n' lines of a file. */
  109.    while (n)
  110.       switch (c = getc(stdin))
  111.       {
  112.       case EOF:
  113.      return;
  114.       case '\n':
  115.      --n;
  116.       default:
  117.      putc((char) c, stdout);
  118.       }
  119. }
  120.  
  121.  
  122. usage()
  123. {
  124. /*
  125.  * change std_err("Usage: head [-n] [file ...]\n");
  126.  */
  127.    printf("Usage: head [-n] [file ...]\n");
  128.    exit(1);
  129. }
  130.