Annotation of coherent/d/bin/cat.c, revision 1.1

1.1     ! root        1: 
        !             2: 
        !             3: /*
        !             4:  * cat -- concatinate and print
        !             5:  */
        !             6: #include       <errno.h>
        !             7: #include       <stdio.h>
        !             8: #include       <access.h>
        !             9: 
        !            10: int    uflag;                          /* don't buffer */
        !            11: char   *filename;                      /* current input file name */
        !            12: 
        !            13: main( argc, argv)
        !            14: char   *argv[];
        !            15: {
        !            16:        static char     obuf[BUFSIZ];
        !            17:        register int    i = 0;  
        !            18: 
        !            19:        ++argv;
        !            20:        if (--argc>0 && strcmp( *argv, "-u")==0) {
        !            21:                ++argv;
        !            22:                --argc;
        !            23:                ++uflag;
        !            24:                setbuf( stdout, (char *)NULL);
        !            25:        }
        !            26:        else
        !            27:                setbuf( stdout, obuf);
        !            28: 
        !            29:        if (argc <= 0)
        !            30:                cat("-");
        !            31:        else
        !            32:        {       while (*argv)
        !            33:                {   if (strcmp(*argv, "-") && access(*argv, AREAD))
        !            34:                    {  fprintf(stderr, "cat: %s: %s\n", *argv,
        !            35:                          sys_errlist[errno]);
        !            36:                       *argv[0] = 0;  /* flag arg as invalid */
        !            37:                    }
        !            38:                    i++;     /* count the arg */
        !            39:                    argv++;  /* advance to next arg */
        !            40:                }
        !            41:                
        !            42:                argv -= i;  /* back to start of filename args to process */
        !            43: 
        !            44:                do {
        !            45:                        if (*argv[0] == 0)  /* arg to skip? */ 
        !            46:                        {  argv++;
        !            47:                           continue;        /* yes */
        !            48:                        }
        !            49:                        cat(*argv++);
        !            50:                } while (--argc);
        !            51:        }
        !            52:        exit(0);
        !            53: }
        !            54: 
        !            55: 
        !            56: cat(file)
        !            57: char *file;
        !            58: {
        !            59:        register        c;
        !            60:        register FILE   *f;
        !            61:        extern char     *sys_errlist[];
        !            62:        extern          errno;
        !            63: 
        !            64:        if (strcmp( file, "-") == 0) {
        !            65:                filename = "<stdin>";
        !            66:                f = stdin;
        !            67:        }
        !            68:        else {
        !            69:                filename = file;
        !            70:                f = fopen( file, "r");
        !            71:                if (f == (FILE *)NULL) 
        !            72:                {  fprintf(stderr, "cat: %s: %s\n", file, sys_errlist[errno]);
        !            73:                   return;
        !            74:                }
        !            75:        }
        !            76:        if (uflag)
        !            77:                setbuf( f, (char *)NULL);
        !            78: 
        !            79:        while ((c=getc( f)) != EOF) {
        !            80:                putchar( c);
        !            81:                if (ferror( stdout))
        !            82:                        fatal( errno==EIO? "write error": sys_errlist[errno]);
        !            83:        }
        !            84: 
        !            85:        if (ferror( f))
        !            86:                fatal( errno==EIO? "read error": sys_errlist[errno]);
        !            87:        if (f != stdin)
        !            88:                fclose( f);
        !            89: }
        !            90: 
        !            91: 
        !            92: fatal( mesg)
        !            93: char   *mesg;
        !            94: {
        !            95: 
        !            96:        fflush( stdout);
        !            97:        printerr( "cat: ", filename, ": ", mesg, "\n", (char *)0);
        !            98:        exit(1);
        !            99: }
        !           100: 
        !           101: 
        !           102: printerr( arg0)
        !           103: char   *arg0;
        !           104: {
        !           105:        register char   **pp;
        !           106: 
        !           107:        for (pp= &arg0; *pp; )
        !           108:                fputs( *pp++, stderr);
        !           109: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.