Annotation of coherent/a/usr/src/sample/example3.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Factor prints out the prime factorization of numbers.
                      3:  * If there are any arguments, then it factors these.  If
                      4:  * there are no arguments, then it reads stdin until
                      5:  * either EOF or the number zero or a non-numeric
                      6:  * non-white-space character.  Since factor does all of
                      7:  * its calculations in double format, the largest number
                      8:  * which can be handled is quite large.
                      9:  */
                     10: #include <stdio.h>
                     11: #include <math.h>
                     12: #include <ctype.h>
                     13: 
                     14: 
                     15: #define        NUL     '\0'
                     16: #define        ERROR   0x10    /* largest input base */
                     17: #define        MAXNUM  200     /* max number of chars in number */
                     18: 
                     19: 
                     20: main(argc, argv)
                     21: int            argc;
                     22: register char  *argv[];
                     23: {
                     24:        register char   *chp;
                     25:        double          n;
                     26:        double          atod();
                     27:        char            *getnum();
                     28: 
                     29:        if (argc != 1)
                     30:                while ((chp=*++argv) != NULL &&
                     31:                        (n=atod(chp)) != 0)
                     32:                        factor(n);
                     33:        else
                     34:                while ((chp=getnum()) != NULL &&
                     35:                        (n=atod(chp)) != 0)
                     36:                        factor(n);
                     37:        return (0);
                     38: }
                     39: die(str)
                     40: char   *str;
                     41: {
                     42:        fprintf(stderr, "%r\en", &str);
                     43:        exit(1);
                     44: }
                     45: 
                     46: usage()
                     47: {
                     48:        die("usage: factor [number number ...]");
                     49: }
                     50: 
                     51: 
                     52: char   *
                     53: getnum()
                     54: {
                     55:        register char   *chp,
                     56:                        ch;
                     57:        static char     res[MAXNUM+1];
                     58: 
                     59:        do {
                     60:                ch = getchar();
                     61:        } while (isascii(ch) && isspace(ch));
                     62:        if (!isascii(ch) || todigit(ch) == ERROR)
                     63:                return (NULL);
                     64:        for (chp=res; isascii(ch) && !isspace(ch);
                     65:                ch=getchar())
                     66:                if (chp < &res[MAXNUM])
                     67:                        *chp++ = ch;
                     68:        if (chp >= &res[MAXNUM])
                     69:                die("Number too big");
                     70:        *chp++ = NUL;
                     71:        return (res);
                     72: }

unix.superglobalmegacorp.com

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