Annotation of embedaddon/mpd/src/vars.c, revision 1.1

1.1     ! misho       1: 
        !             2: /*
        !             3:  * vars.c
        !             4:  *
        !             5:  * Written by Archie Cobbs <archie@freebsd.org>
        !             6:  * Copyright (c) 1995-1999 Whistle Communications, Inc. All rights reserved.
        !             7:  * See ``COPYRIGHT.whistle''
        !             8:  */
        !             9: 
        !            10: #include "ppp.h"
        !            11: #include "console.h"
        !            12: 
        !            13: /*
        !            14:  * DEFINITIONS
        !            15:  */
        !            16: 
        !            17:   #define ENABLE       1
        !            18:   #define DISABLE      2
        !            19:   #define ACCEPT       3
        !            20:   #define DENY         4
        !            21: 
        !            22:   #define NO_SCOLD     0x100
        !            23: 
        !            24: /*
        !            25:  * INTERNAL FUNCTIONS
        !            26:  */
        !            27: 
        !            28:   static void  Do(int which, int ac, char *av[], Options o, ConfInfo list);
        !            29:   static int   FindOpt(ConfInfo list, const char *name);
        !            30: 
        !            31: /*
        !            32:  * OptStat()
        !            33:  */
        !            34: 
        !            35: void
        !            36: OptStat(Context ctx, Options opt, ConfInfo list)
        !            37: {
        !            38:     int                k, peered = 0;
        !            39: 
        !            40:     for (k = 0; list[k].name; k++) {
        !            41:        if (list[k].peered) {
        !            42:            peered=1;
        !            43:            break;
        !            44:        }
        !            45:     }
        !            46: 
        !            47:     if (peered)
        !            48:        Printf("\t\t\tSelf\t\tPeer\r\n");
        !            49:     for (k = 0; list[k].name; k++) {
        !            50:        ConfInfo        const c = &list[k];
        !            51: 
        !            52:        Printf("\t%-10s\t%s",
        !            53:            c->name, Enabled(opt, c->option) ? "enable" : "disable");
        !            54:        if (c->peered)
        !            55:            Printf("\t\t%s", Acceptable(opt, c->option) ? "accept" : "deny");
        !            56:        Printf("\r\n");
        !            57:     }
        !            58: }
        !            59: 
        !            60: /*
        !            61:  * NoCommand()
        !            62:  */
        !            63: 
        !            64: void
        !            65: NoCommand(int ac, char *av[], Options opt, ConfInfo list)
        !            66: {
        !            67:   Do(DISABLE, ac, av, opt, list);
        !            68:   Do(DENY | NO_SCOLD, ac, av, opt, list);
        !            69: }
        !            70: 
        !            71: /*
        !            72:  * YesCommand()
        !            73:  */
        !            74: 
        !            75: void
        !            76: YesCommand(int ac, char *av[], Options opt, ConfInfo list)
        !            77: {
        !            78:   Do(ENABLE, ac, av, opt, list);
        !            79:   Do(ACCEPT | NO_SCOLD, ac, av, opt, list);
        !            80: }
        !            81: 
        !            82: /*
        !            83:  * EnableCommand()
        !            84:  */
        !            85: 
        !            86: void
        !            87: EnableCommand(int ac, char *av[], Options opt, ConfInfo list)
        !            88: {
        !            89:   Do(ENABLE, ac, av, opt, list);
        !            90: }
        !            91: 
        !            92: /*
        !            93:  * DisableCommand()
        !            94:  */
        !            95: 
        !            96: void
        !            97: DisableCommand(int ac, char *av[], Options opt, ConfInfo list)
        !            98: {
        !            99:   Do(DISABLE, ac, av, opt, list);
        !           100: }
        !           101: 
        !           102: /*
        !           103:  * AcceptCommand()
        !           104:  */
        !           105: 
        !           106: void
        !           107: AcceptCommand(int ac, char *av[], Options opt, ConfInfo list)
        !           108: {
        !           109:   Do(ACCEPT, ac, av, opt, list);
        !           110: }
        !           111: 
        !           112: /*
        !           113:  * DenyCommand()
        !           114:  */
        !           115: 
        !           116: void
        !           117: DenyCommand(int ac, char *av[], Options opt, ConfInfo list)
        !           118: {
        !           119:   Do(DENY, ac, av, opt, list);
        !           120: }
        !           121: 
        !           122: /*
        !           123:  * Do()
        !           124:  */
        !           125: 
        !           126: static void
        !           127: Do(int which, int ac, char *av[], Options opt, ConfInfo list)
        !           128: {
        !           129:   const int    scold = !(which & NO_SCOLD);
        !           130: 
        !           131:   which &= ~NO_SCOLD;
        !           132:   for ( ; ac > 0; av++, ac--)
        !           133:   {
        !           134:     const int  index = FindOpt(list, *av);
        !           135: 
        !           136:     switch (index)
        !           137:     {
        !           138:       case -1:
        !           139:        Log(LG_ERR, ("option \"%s\" unknown", *av));
        !           140:        break;
        !           141:       case -2:
        !           142:        Log(LG_ERR, ("option \"%s\" ambiguous", *av));
        !           143:        break;
        !           144:       default:
        !           145:        {
        !           146:          ConfInfo      const c = &list[index];
        !           147: 
        !           148:          switch (which)
        !           149:          {
        !           150:            case ENABLE:
        !           151:              Enable(opt, c->option);
        !           152:              break;
        !           153:            case DISABLE:
        !           154:              Disable(opt, c->option);
        !           155:              break;
        !           156:            case ACCEPT:
        !           157:              if (!c->peered)
        !           158:              {
        !           159:                if (scold)
        !           160:                  Log(LG_ERR, ("'%s %s' is not applicable",
        !           161:                    "accept", c->name));
        !           162:              }
        !           163:              else
        !           164:                Accept(opt, c->option);
        !           165:              break;
        !           166:            case DENY:
        !           167:              if (!c->peered)
        !           168:              {
        !           169:                if (scold)
        !           170:                  Log(LG_ERR, ("'%s %s' is not applicable", "deny", c->name));
        !           171:              }
        !           172:              else
        !           173:                Deny(opt, c->option);
        !           174:              break;
        !           175:            default:
        !           176:              assert(0);
        !           177:          }
        !           178:        }
        !           179:        break;
        !           180:     }
        !           181:   }
        !           182: }
        !           183: 
        !           184: /*
        !           185:  * FindOpt()
        !           186:  *
        !           187:  * Returns index of option, -1 if not found, -2 if ambiguous
        !           188:  */
        !           189: 
        !           190: static int
        !           191: FindOpt(ConfInfo list, const char *name)
        !           192: {
        !           193:     int                k, found = -1;
        !           194: 
        !           195:     for (k = 0; list[k].name; k++) {
        !           196:        if (strncasecmp(list[k].name, name, strlen(name)) == 0) {
        !           197:            if (found == -1)
        !           198:                found = k;
        !           199:            else {
        !           200:                found = -2;             /* ambiguous */
        !           201:                break;
        !           202:            }
        !           203:        }
        !           204:     }
        !           205:     return(found);
        !           206: }
        !           207: 
        !           208: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>