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>