Annotation of coherent/d/bin/cc/c/coh/number.c, revision 1.1.1.1

1.1       root        1: /*     number.c
                      2:  *     11/28/83
                      3:  *     Usage:  number [ -tn ] [ file ... ]
                      4:  *     Reads file ... or standard input,
                      5:  *     prints line numbered listing on standard output.
                      6:  *     Option -tn expands tabs to every n spaces (default: 8).
                      7:  */
                      8: 
                      9: #define        VERSION "V1.4"          /* version number */
                     10: #ifndef        UDI
                     11: #define        VCHAR   'V'
                     12: #else
                     13: #define        VCHAR   'v'             /* upper case mapped to lower under UDI */
                     14: #endif
                     15: 
                     16: #include <stdio.h>
                     17: 
                     18: int tab = 8;                   /* tab stop spacing */
                     19: int line = 0;                  /* line number */
                     20: int pos = 0;                   /* line position */
                     21: int last = '\n';               /* last character read */
                     22: 
                     23: main (argc, argv)
                     24: int argc;
                     25: register char **argv;
                     26: {
                     27:        register int c;
                     28: 
                     29:        /* process flags */
                     30:        while (*++argv != NULL && **argv == '-') {
                     31:                switch (*++*argv) {
                     32:                        case 't':       tab = atoi (++*argv);
                     33:                                        break;
                     34:                        case VCHAR:     fprintf (stderr, "number:  %s\n", VERSION);
                     35:                                        break;
                     36:                        default:        fprintf (stderr, "Usage:  number [ -tn ] [ file ... ]\n");
                     37:                                        exit (1);
                     38:                                        break;
                     39:                }
                     40:        }
                     41: 
                     42:        /* process files */
                     43:        do {
                     44:                if (*argv != NULL) {
                     45:                        if (freopen (*argv++, "r", stdin) == NULL ) {
                     46:                                fprintf (stderr, "number:  cannot open %s\n", *--argv);
                     47:                                exit (1);
                     48:                        }
                     49:                }
                     50:                while ((c = getchar ()) != EOF) put1 (c);
                     51:        } while (*argv != NULL);
                     52:        exit (0);
                     53: }
                     54: 
                     55: /* print character c, expanding tabs and numbering after newlines */
                     56: put1 (c)
                     57: register c;
                     58: {
                     59:        if (last == '\n') printf ("%4d:   ", ++line);
                     60:        last = c;
                     61:        switch (c) {
                     62:                case '\t':      if (tab != 0) { /* expand tab */
                     63:                                        do putchar (' ');
                     64:                                        while ( ++pos % tab != 0);
                     65:                                        return;
                     66:                                }
                     67:                                break;
                     68:                case '\n':      pos = 0;
                     69:                                break;
                     70:                case '\b':      --pos;
                     71:                                break;
                     72:                default:        ++pos;
                     73:                                break;
                     74:        }
                     75:        putchar (c);
                     76: }
                     77: 
                     78: /* end of number.c */

unix.superglobalmegacorp.com

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