Annotation of 43BSDTahoe/new/jove/argcount.c, revision 1.1

1.1     ! root        1: /***************************************************************************
        !             2:  * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne.  JOVE *
        !             3:  * is provided to you without charge, and with no warranty.  You may give  *
        !             4:  * away copies of JOVE, including sources, provided that this notice is    *
        !             5:  * included in all the files.                                              *
        !             6:  ***************************************************************************/
        !             7: 
        !             8: #include "jove.h"
        !             9: #include <ctype.h>
        !            10: 
        !            11: #ifdef MAC
        !            12: #      undef private
        !            13: #      define private
        !            14: #endif
        !            15: 
        !            16: #ifdef LINT_ARGS
        !            17: private        void
        !            18:        gather_numeric_argument(int),
        !            19:        quad_numeric_arg(void);
        !            20: #else
        !            21: private        void
        !            22:        gather_numeric_argument(),
        !            23:        quad_numeric_arg();
        !            24: #endif
        !            25: 
        !            26: #ifdef MAC
        !            27: #      undef private
        !            28: #      define private static
        !            29: #endif
        !            30: 
        !            31: private int    arg_supplied_p,
        !            32:                arg_count;
        !            33: 
        !            34: int
        !            35: arg_type()
        !            36: {
        !            37:        return arg_supplied_p;
        !            38: }
        !            39: 
        !            40: void
        !            41: set_is_an_arg(there_is)
        !            42: {
        !            43:        arg_supplied_p = there_is;
        !            44: }
        !            45: 
        !            46: void
        !            47: set_arg_value(n)
        !            48: {
        !            49:        arg_supplied_p = YES;
        !            50:        arg_count = n;
        !            51: }
        !            52: 
        !            53: void
        !            54: negate_arg_value()
        !            55: {
        !            56:        arg_count = -arg_count;
        !            57: }
        !            58: 
        !            59: void
        !            60: clr_arg_value()
        !            61: {
        !            62:        arg_supplied_p = NO;
        !            63:        arg_count = 1;
        !            64: }
        !            65: 
        !            66: /* return whether there is currently a numeric argument */
        !            67: 
        !            68: int
        !            69: is_an_arg()
        !            70: {
        !            71:        return (arg_supplied_p != NO);
        !            72: }
        !            73: 
        !            74: /* return the numeric argument */
        !            75: 
        !            76: int
        !            77: arg_value()
        !            78: {
        !            79:        return arg_count;
        !            80: }
        !            81: 
        !            82: /* called by C-U to gather a numeric argument, either C-U's or digits,
        !            83:    but not both */
        !            84: 
        !            85: void
        !            86: TimesFour()
        !            87: {
        !            88:        quad_numeric_arg();
        !            89: }
        !            90: 
        !            91: /* This initializes the numeric argument to 1 and starts multiplying
        !            92:    by 4 (the magic number Stallman came up with).  It is an error to
        !            93:    invoke quad_numeric_arg() interactively (via TimesFour()), because
        !            94:    it uses the LastKeyStruck variable to know what character signals
        !            95:    to multiply again (in the loop). */
        !            96: private void
        !            97: quad_numeric_arg()
        !            98: {
        !            99:        int     oldc = LastKeyStruck,
        !           100:                newc,
        !           101:                narg_count,
        !           102:                slow;
        !           103: 
        !           104:        slow = 0;
        !           105:        arg_supplied_p = YES;
        !           106:        arg_count = 1;
        !           107:        this_cmd = ARG_CMD;
        !           108:        do {
        !           109:                if ((narg_count = arg_count * 4) != 0)
        !           110:                        arg_count = narg_count;
        !           111:                if (!slow)
        !           112:                        newc = waitchar(&slow);
        !           113:                else
        !           114:                        newc = getch();
        !           115:                if (isdigit(newc) || newc == '-') {
        !           116:                     arg_supplied_p = NO;
        !           117:                     gather_numeric_argument(newc);
        !           118:                     return;
        !           119:                }
        !           120:                if (slow)
        !           121:                        message(key_strokes);
        !           122:        } while (newc == oldc);
        !           123:        Ungetc(newc);
        !           124: }
        !           125: 
        !           126: private void
        !           127: gather_numeric_argument(c)
        !           128: {
        !           129:        int     sign = 0;
        !           130:        static int      digited;
        !           131:        int     slow = 0;
        !           132: 
        !           133:        if (!isdigit(c) && c != '-')
        !           134:                complain((char *) 0);
        !           135:        if (arg_supplied_p == NO) {     /* if we just got here */
        !           136:                arg_count = 0;  /* start over */
        !           137:                digited = NO;
        !           138:        } else if (arg_supplied_p == YES_NODIGIT) {
        !           139:                sign = (arg_count < 0) ? -1 : 1;
        !           140:                arg_count = 0;
        !           141:        }
        !           142: 
        !           143:        if (!sign)
        !           144:                sign = (arg_count < 0) ? -1 : 1;
        !           145:        if (sign == -1)
        !           146:                arg_count = -arg_count;
        !           147:        if (c == '-') {
        !           148:                sign = -sign;
        !           149:                goto goread;
        !           150:        }
        !           151:        for (;;) {
        !           152:                if (slow)
        !           153:                        message(key_strokes);
        !           154:                if (isdigit(c)) {
        !           155:                        arg_count = (arg_count * 10) + (c - '0');
        !           156:                        digited = YES;
        !           157:                } else {
        !           158:                        if (digited)
        !           159:                                arg_supplied_p = YES;
        !           160:                        else {
        !           161:                                arg_count = 1;
        !           162:                                if (arg_supplied_p == NO)
        !           163:                                        arg_supplied_p = YES_NODIGIT;
        !           164:                        }
        !           165:                        arg_count *= sign;
        !           166:                        this_cmd = ARG_CMD;
        !           167:                        Ungetc(c);
        !           168:                        return;
        !           169:                }
        !           170: goread:                if (!slow)
        !           171:                        c = waitchar(&slow);
        !           172:                else {
        !           173:                        add_mess(NullStr);
        !           174:                        c = getch();
        !           175:                }
        !           176:        }
        !           177: }
        !           178: 
        !           179: void
        !           180: Digit()
        !           181: {
        !           182:        gather_numeric_argument(LastKeyStruck);
        !           183: }
        !           184: 
        !           185: void
        !           186: Digit0()
        !           187: {
        !           188:        gather_numeric_argument('0');
        !           189: }
        !           190: 
        !           191: void
        !           192: Digit1()
        !           193: {
        !           194:        gather_numeric_argument('1');
        !           195: }
        !           196: 
        !           197: void
        !           198: Digit2()
        !           199: {
        !           200:        gather_numeric_argument('2');
        !           201: }
        !           202: 
        !           203: void
        !           204: Digit3()
        !           205: {
        !           206:        gather_numeric_argument('3');
        !           207: }
        !           208: 
        !           209: void
        !           210: Digit4()
        !           211: {
        !           212:        gather_numeric_argument('4');
        !           213: }
        !           214: 
        !           215: void
        !           216: Digit5()
        !           217: {
        !           218:        gather_numeric_argument('5');
        !           219: }
        !           220: 
        !           221: void
        !           222: Digit6()
        !           223: {
        !           224:        gather_numeric_argument('6');
        !           225: }
        !           226: 
        !           227: void
        !           228: Digit7()
        !           229: {
        !           230:        gather_numeric_argument('7');
        !           231: }
        !           232: 
        !           233: void
        !           234: Digit8()
        !           235: {
        !           236:        gather_numeric_argument('8');
        !           237: }
        !           238: 
        !           239: void
        !           240: Digit9()
        !           241: {
        !           242:        gather_numeric_argument('9');
        !           243: }

unix.superglobalmegacorp.com

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