[BACK]Return to fep_set.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / fep

Annotation of OpenXM_contrib2/fep/fep_set.c, Revision 1.2

1.1       noro        1: /*     Copyright (c) 1987, 1988 by Software Research Associates, Inc.  */
                      2:
                      3: #ifndef lint
                      4: static char rcsid[]=
                      5: "$Header: fep_set.c,v 4.3 91/05/29 14:31:08 utashiro Exp $ (SRA)";
                      6: #endif /* lint */
                      7:
                      8: #include <stdio.h>
1.2     ! ohara       9: #include <stdlib.h>
1.1       noro       10: #include "fep_defs.h"
                     11: #include "fep_glob.h"
                     12:
                     13: VAR default_set_vars [] = {
                     14:        {"expand-tilde",        "",
                     15:         "Expand ~ to home directory name",     (VAR*)0},
                     16:        {"ignore-empty-line",   "",
                     17:         "Don't put empty line to history",     (VAR*)0},
                     18:        {"ignore-same-line",    "",
                     19:         "Don't put same line to history",      (VAR*)0},
                     20:        {"editmode",            "emacs",
                     21:         "Fep command line edit mode",          (VAR*)0},
                     22:        {"history-file",        ".fephistory",
                     23:         "Name of history file",                (VAR*)0},
                     24:        {"shell",               "/bin/sh",
                     25:         "Shell name used by invoke-shell",     (VAR*)0},
                     26:        {"auto-tty-fix",        "",
                     27:         "Fix tty mode automatically",          (VAR*)0},
                     28:        {"script-file",         "fepscript",
                     29:         "Script file name",                    (VAR*)0},
                     30:        {"crt",                 "24",
                     31:         "Terminal lines",                      (VAR*)0},
                     32:        {"showhist",            "24",
                     33:         "History length used by show-history", (VAR*)0},
                     34:        {"delimiters",          " \t",
                     35:         "Argument delemiter characters",       (VAR*)0},
                     36:        {"buffer",              "5120",
                     37:        "Output buffer size",                   (VAR*)0},
                     38:        {NULL,                  NULL,
                     39:         NULL,                                  (VAR*)0}
                     40: };
                     41:
                     42: VAR default_unset_vars [] = {
                     43:        /* below from here is unset by default */
                     44:        {"alarm-on-eof",        "",
                     45:         "Alarm once to eof character",         (VAR*)0},
                     46:        {"ignore-eof",          "",
                     47:         "Never treat eof character as eof",    (VAR*)0},
                     48:        {"savehist",            "",
                     49:         "Length of save history",              (VAR*)0},
                     50:        {"verbose",             "",
                     51:         NULL,                                  (VAR*)0},
                     52:        {"search-string",       "",
                     53:         NULL,                                  (VAR*)0},
                     54:        {"noalias",             "",
                     55:         "Not use alias",                       (VAR*)0},
                     56:        {"tty-fix-bell",        "",
                     57:         "Ring bell when tty mode changed",     (VAR*)0},
                     58:        {"auto-repaint",        "",
                     59:         "Repaint screen when restarting",      (VAR*)0},
                     60:        {"clear-repaint",       "",
                     61:         "Clear screen before repaint",         (VAR*)0},
                     62:        {"ignore-short-line",   "3",
                     63:        "Don't put short line to history",      (VAR*)0},
                     64:        {NULL,                  NULL,
                     65:         NULL,                                  (VAR*)0}
                     66: };
                     67:
                     68: #ifdef HASH
                     69: #define HASHNUM        10
                     70: VAR *var_htab[HASHNUM];
                     71: #else /* HASH */
                     72: VAR var_top = {"top", "top", (char *)0, (VAR *)0};
                     73: VAR *var_list = &var_top;
                     74: #endif /* HASH */
                     75:
                     76: /*
                     77:  * Functions
                     78:  */
                     79: int    set_var         (/* char *name, char *value */);
                     80: char   *look_var       (/* char *name */);
                     81: int    lookd_var       (/* char *name */);
                     82: VAR    *getvp          (/* char *name */);
                     83:
                     84: extern char    *allocAndCopyThere();
                     85: extern char    *prompt;
                     86:
                     87: /*
                     88:  * Set default variables
                     89:  */
                     90: set_default_vars ()
                     91: {
                     92:     register VAR *vp;
                     93:
                     94:     for (vp = default_set_vars; vp->v_name; vp++)
                     95:        set_only_var (vp->v_name, vp->v_value);
                     96: }
                     97:
                     98: /*
                     99:  * Set variable
                    100:  */
                    101: set_var (name, value)
                    102:     char *name;
                    103:     char *value;
                    104: {
                    105:     /*
                    106:      * Process special variable
                    107:      */
                    108:     if (eq (name, "history")) {
                    109:        if (!changeHistorySize (atoi (value)))
                    110:            return (0);
                    111:     }
                    112:     else if (eq (name, "prompt")) {
                    113:        free (prompt);
                    114:        prompt = allocAndCopyThere (value);
                    115:     }
                    116:     else if (eq (name, "editmode")) {
                    117:        if (eq (value, "emacs")) {
                    118:            editmode = EMACS;
                    119:            initEmacsBindings (curFuncTab, altFuncTab);
                    120:        }
                    121:        else if (eq (value, "vi")) {
                    122:            editmode = VI;
                    123:            initViBindings (curFuncTab, altFuncTab);
                    124:        }
                    125:        else
                    126:            printf ("%s: Unknown editmode\n", value);
                    127:     }
                    128:     else if (eq (name, "auto-tty-fix"))
                    129:        auto_tty_fix = ON;
                    130:     else if (eq (name, "debug"))
                    131:        debug = ON;
                    132:     else if (eq (name, "tty-fix-bell"))
                    133:        tty_fix_bell = ON;
                    134:     else if (eq (name, "delimiters")) {
                    135:        /* only in this case, variable points allocated area */
                    136:        set_only_var (name, value);
                    137:        delimiters = look_var ("delimiters");
                    138:     }
                    139:     else if (eq (name, "crt"))
                    140:        lines = atoi (value);
                    141:     else if (eq(name, "buffer")) {
                    142:        int s;
                    143:
                    144:        if ((s = atoi(value)) <= 0)
                    145:            return;
                    146:
                    147:        if (!set_buffer (output_buffer, s))
                    148:            return;
                    149:     }
                    150:
                    151:     set_only_var (name, value);
                    152: }
                    153:
                    154: set_only_var (name, value)
                    155:     char *name, *value;
                    156: {
                    157:     VAR *vp;
                    158:
                    159:     vp = getvp (name, 1, 0);
                    160:
                    161:     if (vp->v_value == value)
                    162:        return;
                    163:
                    164:     if (vp->v_value)
                    165:        free (vp->v_value);
                    166:
                    167:     vp->v_value = allocAndCopyThere (value);
                    168: }
                    169:
                    170: /*
                    171:  * Unset variable
                    172:  */
                    173: unset_var (name)
                    174:     char *name;
                    175: {
                    176:     VAR *vp, *prev;
                    177:
                    178:     vp = getvp (name, 0, &prev);
                    179:
                    180:     if (!vp)
                    181:        return;
                    182:
                    183:     prev->v_next = vp->v_next;
                    184:     free (vp->v_name);
                    185:     free (vp->v_value);
                    186:     free (vp);
                    187:
                    188:     if (eq (name, "auto-tty-fix"))
                    189:        auto_tty_fix = OFF;
                    190:
                    191:     if (eq (name, "debug"))
                    192:        debug = OFF;
                    193:
                    194:     if (eq (name, "tty-fix-bell"))
                    195:        tty_fix_bell = OFF;
                    196:
                    197:     if (eq (name, "delimiters"))
                    198:        delimiters = DEFAULT_DELIMITERS;
                    199:     return;
                    200: }
                    201:
                    202: /*
                    203:  * Look up variable
                    204:  */
                    205: char *
                    206: look_var (name)
                    207:     char *name;
                    208: {
                    209:
                    210:     VAR *vp;
                    211:
                    212:     vp = getvp (name, 0, 0);
                    213:
                    214:     if (vp && vp->v_value)
                    215:        return (vp->v_value);
                    216:     else
                    217:        return ((char *)0);
                    218: }
                    219:
                    220: /*
                    221:  * Look up variable and get integer result
                    222:  */
                    223: int
                    224: lookd_var (name)
                    225:     char *name;
                    226: {
                    227:     VAR *vp;
                    228:
                    229:     vp = getvp (name, 0, 0);
                    230:
                    231:     if (vp && vp->v_value)
                    232:        return (atoi (vp->v_value));
                    233:     else
                    234:        return (0);
                    235: }
                    236:
                    237: /*
                    238:  * Show variable list
                    239:  */
                    240: show_varlist ()
                    241: {
                    242: #ifdef HASH
                    243:     register int i;
                    244:
                    245:     for (i = 0; i< HASHNUM; i++) {
                    246:        register VAR *vp;
                    247:
                    248:        vp = var_htab[i];
                    249:        if (vp == (VAR *)0)
                    250:            continue;
                    251:
                    252:        for (; vp != (VAR *)0; vp = vp->v_next)
                    253:            printf ("%-16s %s\n", vp->v_name, vp->v_value);
                    254:     }
                    255: #else /* HASH */
                    256:     register VAR *vp;
                    257:
                    258:     for (vp = var_list->v_next; vp; vp = vp->v_next)
                    259:        printf ("%-16s %s\n", vp->v_name, vp->v_value);
                    260: #endif /* HASH */
                    261: }
                    262:
                    263: #ifdef HASH
                    264: /*
                    265:  * Get hash index from variable name
                    266:  */
                    267: static getindex (s)
                    268:     register char *s;
                    269: {
                    270:     register int sum = 0;
                    271:
                    272:     while (*s)
                    273:        sum += *s++;
                    274:
                    275:     return (sum % HASHNUM);
                    276: }
                    277: #endif /* HASH */
                    278:
                    279: /*
                    280:  * Get pointer to VAR.
                    281:  * If there is no memoly associated to the variable and alloc argument is 1,
                    282:  * allocate the area and initialize name field.
                    283:  */
                    284: VAR *
                    285: getvp (name, alloc, lastvp)
                    286:     char *name;
                    287:     int alloc;
                    288:     VAR **lastvp;
                    289: {
                    290: #ifdef HASH
                    291:     register i = getindex (name);
                    292: #endif /* HASH */
                    293:     VAR *vp, *last = (VAR *)0;
                    294:
                    295: #ifdef HASH
                    296:     for (vp = var_htab[i]; vp; last = vp, vp->v_next) {
                    297:        if (strcmp (name, vp->v_value) == 0)
                    298:            return (vp);
                    299:     }
                    300: #else /* HASH */
                    301:     for (vp = var_list->v_next, last = var_list; vp; last = vp, vp = vp->v_next) {
                    302:        int r;
                    303:
                    304:        r = strcmp (name, vp->v_name);
                    305:        if (r == 0) {
                    306:            if (lastvp)
                    307:                *lastvp = last;
                    308:            return (vp);
                    309:        }
                    310:        else if (r < 0)
                    311:            break;
                    312:     }
                    313: #endif /* HASH */
                    314:
                    315:     if (alloc == 0)
                    316:        return (0);
                    317:
                    318:     vp = (VAR *) calloc (sizeof (VAR), 1);
                    319:     vp->v_value = (char *)0;
                    320:     vp->v_next = (VAR *) 0;
                    321:     vp->v_name = allocAndCopyThere (name);
                    322:
                    323: #ifdef HASH
                    324:     if (last) {
                    325:        vp->v_next = last->v_next;
                    326:        last->v_next = vp;
                    327:     }
                    328:     else {
                    329:        var_htab[i] = vp;
                    330:     }
                    331: #else /* HASH */
                    332:     vp->v_next = last->v_next;
                    333:     last->v_next = vp;
                    334: #endif /* HASH */
                    335:     return (vp);
                    336: }

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