[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.3

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

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