17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*23a1cceaSRoger A. Faulkner * Common Development and Distribution License (the "License"). 6*23a1cceaSRoger A. Faulkner * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 21*23a1cceaSRoger A. Faulkner 22f6db9f27Scf46844 /* 23*23a1cceaSRoger A. Faulkner * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. 24f6db9f27Scf46844 */ 25f6db9f27Scf46844 267c478bd9Sstevel@tonic-gate /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 277c478bd9Sstevel@tonic-gate /* All Rights Reserved */ 287c478bd9Sstevel@tonic-gate 297c478bd9Sstevel@tonic-gate 307c478bd9Sstevel@tonic-gate /* Copyright (c) 1981 Regents of the University of California */ 31f6db9f27Scf46844 327c478bd9Sstevel@tonic-gate #include "ex.h" 337c478bd9Sstevel@tonic-gate #include "ex_temp.h" 347c478bd9Sstevel@tonic-gate #include "ex_tty.h" 357c478bd9Sstevel@tonic-gate 367c478bd9Sstevel@tonic-gate /* 377c478bd9Sstevel@tonic-gate * Set command. 387c478bd9Sstevel@tonic-gate */ 397c478bd9Sstevel@tonic-gate unsigned char optname[ONMSZ]; 407c478bd9Sstevel@tonic-gate 41f6db9f27Scf46844 void 42f6db9f27Scf46844 set(void) 437c478bd9Sstevel@tonic-gate { 44f6db9f27Scf46844 unsigned char *cp; 45f6db9f27Scf46844 struct option *op; 46f6db9f27Scf46844 int c; 477c478bd9Sstevel@tonic-gate bool no; 487c478bd9Sstevel@tonic-gate extern short ospeed; 497c478bd9Sstevel@tonic-gate #ifdef TRACE 507c478bd9Sstevel@tonic-gate int k, label; 517c478bd9Sstevel@tonic-gate line *tmpadr; 527c478bd9Sstevel@tonic-gate #endif 537c478bd9Sstevel@tonic-gate 547c478bd9Sstevel@tonic-gate setnoaddr(); 557c478bd9Sstevel@tonic-gate if (skipend()) { 567c478bd9Sstevel@tonic-gate if (peekchar() != EOF) 577c478bd9Sstevel@tonic-gate ignchar(); 587c478bd9Sstevel@tonic-gate propts(); 597c478bd9Sstevel@tonic-gate return; 607c478bd9Sstevel@tonic-gate } 617c478bd9Sstevel@tonic-gate do { 627c478bd9Sstevel@tonic-gate cp = optname; 637c478bd9Sstevel@tonic-gate do { 647c478bd9Sstevel@tonic-gate if (cp < &optname[ONMSZ - 2]) 657c478bd9Sstevel@tonic-gate *cp++ = getchar(); 667c478bd9Sstevel@tonic-gate } while (isalnum(peekchar())); 677c478bd9Sstevel@tonic-gate *cp = 0; 687c478bd9Sstevel@tonic-gate cp = optname; 697c478bd9Sstevel@tonic-gate if (eq("all", cp)) { 707c478bd9Sstevel@tonic-gate if (inopen) 717c478bd9Sstevel@tonic-gate pofix(); 727c478bd9Sstevel@tonic-gate prall(); 737c478bd9Sstevel@tonic-gate goto next; 747c478bd9Sstevel@tonic-gate } 757c478bd9Sstevel@tonic-gate no = 0; 767c478bd9Sstevel@tonic-gate #ifdef TRACE 777c478bd9Sstevel@tonic-gate /* 787c478bd9Sstevel@tonic-gate * General purpose test code for looking at address of those 797c478bd9Sstevel@tonic-gate * invisible marks (as well as the visible ones). 807c478bd9Sstevel@tonic-gate */ 817c478bd9Sstevel@tonic-gate if (eq("marks", cp)) { 82f6db9f27Scf46844 viprintf("Marks Address\n\r"); 83f6db9f27Scf46844 viprintf(" \n"); 84f6db9f27Scf46844 viprintf("\n"); 857c478bd9Sstevel@tonic-gate for (k = 0; k <= 25; k++) 86f6db9f27Scf46844 viprintf("Mark:%c\t%d\n", k+'a', names[k]); 877c478bd9Sstevel@tonic-gate goto next; 887c478bd9Sstevel@tonic-gate } 897c478bd9Sstevel@tonic-gate 907c478bd9Sstevel@tonic-gate /* 917c478bd9Sstevel@tonic-gate * General purpose test code for looking at 927c478bd9Sstevel@tonic-gate * named registers. 937c478bd9Sstevel@tonic-gate */ 947c478bd9Sstevel@tonic-gate 957c478bd9Sstevel@tonic-gate if (eq("named",cp)) { 967c478bd9Sstevel@tonic-gate if (inopen) 977c478bd9Sstevel@tonic-gate pofix(); 987c478bd9Sstevel@tonic-gate shownam(); 997c478bd9Sstevel@tonic-gate goto next; 1007c478bd9Sstevel@tonic-gate } 1017c478bd9Sstevel@tonic-gate 1027c478bd9Sstevel@tonic-gate /* 1037c478bd9Sstevel@tonic-gate * General purpose test code for looking at 1047c478bd9Sstevel@tonic-gate * numbered registers. 1057c478bd9Sstevel@tonic-gate */ 1067c478bd9Sstevel@tonic-gate 1077c478bd9Sstevel@tonic-gate if (eq("nbrreg",cp)) { 1087c478bd9Sstevel@tonic-gate if (inopen) 1097c478bd9Sstevel@tonic-gate pofix(); 1107c478bd9Sstevel@tonic-gate shownbr(); 1117c478bd9Sstevel@tonic-gate goto next; 1127c478bd9Sstevel@tonic-gate } 1137c478bd9Sstevel@tonic-gate 1147c478bd9Sstevel@tonic-gate /* 1157c478bd9Sstevel@tonic-gate * General purpose test code for looking at addresses 1167c478bd9Sstevel@tonic-gate * in the edit and save areas of VI. 1177c478bd9Sstevel@tonic-gate */ 1187c478bd9Sstevel@tonic-gate 1197c478bd9Sstevel@tonic-gate if (eq("buffers",cp)) { 1207c478bd9Sstevel@tonic-gate if (inopen) 1217c478bd9Sstevel@tonic-gate pofix(); 122f6db9f27Scf46844 viprintf("\nLabels Address Contents\n"); 123f6db9f27Scf46844 viprintf("====== ======= ========"); 1247c478bd9Sstevel@tonic-gate for (tmpadr = zero; tmpadr <= dol; tmpadr++) { 1257c478bd9Sstevel@tonic-gate label =0; 1267c478bd9Sstevel@tonic-gate if (tmpadr == zero) { 127f6db9f27Scf46844 viprintf("ZERO:\t"); 1287c478bd9Sstevel@tonic-gate label = 2; 1297c478bd9Sstevel@tonic-gate } 1307c478bd9Sstevel@tonic-gate if (tmpadr == one) { 1317c478bd9Sstevel@tonic-gate if (label > 0) 132f6db9f27Scf46844 viprintf("\nONE:\t"); 1337c478bd9Sstevel@tonic-gate else 134f6db9f27Scf46844 viprintf("ONE:\t"); 1357c478bd9Sstevel@tonic-gate label = 1; 1367c478bd9Sstevel@tonic-gate } 1377c478bd9Sstevel@tonic-gate if (tmpadr == dot) { 1387c478bd9Sstevel@tonic-gate if (label > 0) 139f6db9f27Scf46844 viprintf("\nDOT:\t"); 1407c478bd9Sstevel@tonic-gate else 141f6db9f27Scf46844 viprintf("DOT:\t"); 1427c478bd9Sstevel@tonic-gate label = 1; 1437c478bd9Sstevel@tonic-gate } 1447c478bd9Sstevel@tonic-gate if (tmpadr == undap1) { 1457c478bd9Sstevel@tonic-gate if (label > 0) 146f6db9f27Scf46844 viprintf("\nUNDAP1:\t"); 1477c478bd9Sstevel@tonic-gate else 148f6db9f27Scf46844 viprintf("UNDAP1:\t"); 1497c478bd9Sstevel@tonic-gate label = 1; 1507c478bd9Sstevel@tonic-gate } 1517c478bd9Sstevel@tonic-gate if (tmpadr == undap2) { 1527c478bd9Sstevel@tonic-gate if (label > 0) 153f6db9f27Scf46844 viprintf("\nUNDAP2:\t"); 1547c478bd9Sstevel@tonic-gate else 155f6db9f27Scf46844 viprintf("UNDAP2:\t"); 1567c478bd9Sstevel@tonic-gate label = 1; 1577c478bd9Sstevel@tonic-gate } 1587c478bd9Sstevel@tonic-gate if (tmpadr == unddel) { 1597c478bd9Sstevel@tonic-gate if (label > 0) 160f6db9f27Scf46844 viprintf("\nUNDDEL:\t"); 1617c478bd9Sstevel@tonic-gate else 162f6db9f27Scf46844 viprintf("UNDDEL:\t"); 1637c478bd9Sstevel@tonic-gate label = 1; 1647c478bd9Sstevel@tonic-gate } 1657c478bd9Sstevel@tonic-gate if (tmpadr == dol) { 1667c478bd9Sstevel@tonic-gate if (label > 0) 167f6db9f27Scf46844 viprintf("\nDOL:\t"); 1687c478bd9Sstevel@tonic-gate else 169f6db9f27Scf46844 viprintf("DOL:\t"); 1707c478bd9Sstevel@tonic-gate label = 1; 1717c478bd9Sstevel@tonic-gate } 1727c478bd9Sstevel@tonic-gate for (k=0; k<=25; k++) 1737c478bd9Sstevel@tonic-gate if (names[k] == (*tmpadr &~ 01)) { 1747c478bd9Sstevel@tonic-gate if (label > 0) 175f6db9f27Scf46844 viprintf( 176f6db9f27Scf46844 "\nMark:%c\t%d\t", k+'a', names[k]); 1777c478bd9Sstevel@tonic-gate else 178f6db9f27Scf46844 viprintf( 179f6db9f27Scf46844 "Mark:%c\t%d\t", k+'a', names[k]); 1807c478bd9Sstevel@tonic-gate label=1; 1817c478bd9Sstevel@tonic-gate } 1827c478bd9Sstevel@tonic-gate if (label == 0) 1837c478bd9Sstevel@tonic-gate continue; 1847c478bd9Sstevel@tonic-gate 1857c478bd9Sstevel@tonic-gate if (label == 2) 186f6db9f27Scf46844 viprintf("%d\n", tmpadr); 1877c478bd9Sstevel@tonic-gate else { 188f6db9f27Scf46844 viprintf("%d\t", tmpadr); 189*23a1cceaSRoger A. Faulkner getaline(*tmpadr); 1907c478bd9Sstevel@tonic-gate pline(lineno(tmpadr)); 1917c478bd9Sstevel@tonic-gate putchar('\n'); 1927c478bd9Sstevel@tonic-gate } 1937c478bd9Sstevel@tonic-gate } 1947c478bd9Sstevel@tonic-gate 1957c478bd9Sstevel@tonic-gate for (tmpadr = dol+1; tmpadr <= unddol; tmpadr++) { 1967c478bd9Sstevel@tonic-gate label =0; 1977c478bd9Sstevel@tonic-gate if (tmpadr == dol+1) { 198f6db9f27Scf46844 viprintf("DOL+1:\t"); 1997c478bd9Sstevel@tonic-gate label = 1; 2007c478bd9Sstevel@tonic-gate } 2017c478bd9Sstevel@tonic-gate if (tmpadr == unddel) { 2027c478bd9Sstevel@tonic-gate if (label > 0) 203f6db9f27Scf46844 viprintf("\nUNDDEL:\t"); 2047c478bd9Sstevel@tonic-gate else 205f6db9f27Scf46844 viprintf("UNDDEL:\t"); 2067c478bd9Sstevel@tonic-gate label = 1; 2077c478bd9Sstevel@tonic-gate } 2087c478bd9Sstevel@tonic-gate if (tmpadr == unddol) { 2097c478bd9Sstevel@tonic-gate if (label > 0) 210f6db9f27Scf46844 viprintf("\nUNDDOL:\t"); 2117c478bd9Sstevel@tonic-gate else 212f6db9f27Scf46844 viprintf("UNDDOL:\t"); 2137c478bd9Sstevel@tonic-gate label = 1; 2147c478bd9Sstevel@tonic-gate } 2157c478bd9Sstevel@tonic-gate for (k=0; k<=25; k++) 2167c478bd9Sstevel@tonic-gate if (names[k] == (*tmpadr &~ 01)) { 2177c478bd9Sstevel@tonic-gate if (label > 0) 218f6db9f27Scf46844 viprintf( 219f6db9f27Scf46844 "\nMark:%c\t%d\t", k+'a', names[k]); 2207c478bd9Sstevel@tonic-gate else 221f6db9f27Scf46844 viprintf( 222f6db9f27Scf46844 "Mark:%c\t%d\t", k+'a', names[k]); 2237c478bd9Sstevel@tonic-gate label=1; 2247c478bd9Sstevel@tonic-gate } 2257c478bd9Sstevel@tonic-gate if (label == 0) 2267c478bd9Sstevel@tonic-gate continue; 2277c478bd9Sstevel@tonic-gate if (label == 2) 228f6db9f27Scf46844 viprintf("%d\n", tmpadr); 2297c478bd9Sstevel@tonic-gate else { 230f6db9f27Scf46844 viprintf("%d\t", tmpadr); 231*23a1cceaSRoger A. Faulkner getaline(*tmpadr); 2327c478bd9Sstevel@tonic-gate pline(lineno(tmpadr)); 2337c478bd9Sstevel@tonic-gate putchar('\n'); 2347c478bd9Sstevel@tonic-gate } 2357c478bd9Sstevel@tonic-gate } 2367c478bd9Sstevel@tonic-gate goto next; 2377c478bd9Sstevel@tonic-gate } 2387c478bd9Sstevel@tonic-gate #endif 2397c478bd9Sstevel@tonic-gate if (cp[0] == 'n' && cp[1] == 'o' && cp[2] != 'v') { 2407c478bd9Sstevel@tonic-gate cp += 2; 2417c478bd9Sstevel@tonic-gate no++; 2427c478bd9Sstevel@tonic-gate } 2437c478bd9Sstevel@tonic-gate /* Implement w300, w1200, and w9600 specially */ 2447c478bd9Sstevel@tonic-gate if (eq(cp, "w300")) { 2457c478bd9Sstevel@tonic-gate if (ospeed >= B1200) { 2467c478bd9Sstevel@tonic-gate dontset: 2477c478bd9Sstevel@tonic-gate (void)getchar(); /* = */ 2487c478bd9Sstevel@tonic-gate (void)getnum(); /* value */ 2497c478bd9Sstevel@tonic-gate continue; 2507c478bd9Sstevel@tonic-gate } 2517c478bd9Sstevel@tonic-gate cp = (unsigned char *)"window"; 2527c478bd9Sstevel@tonic-gate } else if (eq(cp, "w1200")) { 2537c478bd9Sstevel@tonic-gate if (ospeed < B1200 || ospeed >= B2400) 2547c478bd9Sstevel@tonic-gate goto dontset; 2557c478bd9Sstevel@tonic-gate cp = (unsigned char *)"window"; 2567c478bd9Sstevel@tonic-gate } else if (eq(cp, "w9600")) { 2577c478bd9Sstevel@tonic-gate if (ospeed < B2400) 2587c478bd9Sstevel@tonic-gate goto dontset; 2597c478bd9Sstevel@tonic-gate cp = (unsigned char *)"window"; 2607c478bd9Sstevel@tonic-gate } 2617c478bd9Sstevel@tonic-gate for (op = options; op < &options[vi_NOPTS]; op++) 2627c478bd9Sstevel@tonic-gate if (eq(op->oname, cp) || op->oabbrev && eq(op->oabbrev, cp)) 2637c478bd9Sstevel@tonic-gate break; 2647c478bd9Sstevel@tonic-gate if (op->oname == 0) 265f6db9f27Scf46844 serror(value(vi_TERSE) ? (unsigned char *) 266f6db9f27Scf46844 gettext("%s: No such option") : 267f6db9f27Scf46844 (unsigned char *) 2687c478bd9Sstevel@tonic-gate gettext("%s: No such option - 'set all' gives all option values"), cp); 2697c478bd9Sstevel@tonic-gate c = skipwh(); 2707c478bd9Sstevel@tonic-gate if (peekchar() == '?') { 2717c478bd9Sstevel@tonic-gate ignchar(); 2727c478bd9Sstevel@tonic-gate printone: 2737c478bd9Sstevel@tonic-gate propt(op); 2747c478bd9Sstevel@tonic-gate noonl(); 2757c478bd9Sstevel@tonic-gate goto next; 2767c478bd9Sstevel@tonic-gate } 2777c478bd9Sstevel@tonic-gate if (op->otype == ONOFF) { 2787c478bd9Sstevel@tonic-gate op->ovalue = 1 - no; 2797c478bd9Sstevel@tonic-gate if (op == &options[vi_PROMPT]) 2807c478bd9Sstevel@tonic-gate oprompt = 1 - no; 2817c478bd9Sstevel@tonic-gate goto next; 2827c478bd9Sstevel@tonic-gate } 2837c478bd9Sstevel@tonic-gate if (no) 284f6db9f27Scf46844 serror((unsigned char *) 285f6db9f27Scf46844 gettext("Option %s is not a toggle"), op->oname); 2867c478bd9Sstevel@tonic-gate if (c != 0 || setend()) 2877c478bd9Sstevel@tonic-gate goto printone; 2887c478bd9Sstevel@tonic-gate if (getchar() != '=') 289f6db9f27Scf46844 serror(value(vi_TERSE) ? (unsigned char *) 290f6db9f27Scf46844 gettext("Missing =") : 291f6db9f27Scf46844 (unsigned char *) 292f6db9f27Scf46844 gettext("Missing = in assignment to option %s"), 293f6db9f27Scf46844 op->oname); 2947c478bd9Sstevel@tonic-gate switch (op->otype) { 2957c478bd9Sstevel@tonic-gate 2967c478bd9Sstevel@tonic-gate case NUMERIC: 2977c478bd9Sstevel@tonic-gate if (!isdigit(peekchar())) 2987c478bd9Sstevel@tonic-gate error(value(vi_TERSE) ? 2997c478bd9Sstevel@tonic-gate gettext("Digits required") : gettext("Digits required after =")); 3007c478bd9Sstevel@tonic-gate op->ovalue = getnum(); 3017c478bd9Sstevel@tonic-gate if (value(vi_TABSTOP) <= 0) 3027c478bd9Sstevel@tonic-gate value(vi_TABSTOP) = TABS; 3037c478bd9Sstevel@tonic-gate if (op == &options[vi_WINDOW]) { 3047c478bd9Sstevel@tonic-gate if (value(vi_WINDOW) >= lines) 3057c478bd9Sstevel@tonic-gate value(vi_WINDOW) = lines-1; 3067c478bd9Sstevel@tonic-gate vsetsiz(value(vi_WINDOW)); 3077c478bd9Sstevel@tonic-gate } 3087c478bd9Sstevel@tonic-gate break; 3097c478bd9Sstevel@tonic-gate 3107c478bd9Sstevel@tonic-gate case STRING: 3117c478bd9Sstevel@tonic-gate case OTERM: 3127c478bd9Sstevel@tonic-gate cp = optname; 3137c478bd9Sstevel@tonic-gate while (!setend()) { 3147c478bd9Sstevel@tonic-gate if (cp >= &optname[ONMSZ]) 3157c478bd9Sstevel@tonic-gate error(value(vi_TERSE) ? 3167c478bd9Sstevel@tonic-gate gettext("String too long") : gettext("String too long in option assignment")); 3177c478bd9Sstevel@tonic-gate /* adb change: allow whitepace in strings */ 3187c478bd9Sstevel@tonic-gate if( (*cp = getchar()) == '\\') 3197c478bd9Sstevel@tonic-gate if( peekchar() != EOF) 3207c478bd9Sstevel@tonic-gate *cp = getchar(); 3217c478bd9Sstevel@tonic-gate cp++; 3227c478bd9Sstevel@tonic-gate } 3237c478bd9Sstevel@tonic-gate *cp = 0; 3247c478bd9Sstevel@tonic-gate if (op->otype == OTERM) { 3257c478bd9Sstevel@tonic-gate /* 3267c478bd9Sstevel@tonic-gate * At first glance it seems like we shouldn't care if the terminal type 3277c478bd9Sstevel@tonic-gate * is changed inside visual mode, as long as we assume the screen is 3287c478bd9Sstevel@tonic-gate * a mess and redraw it. However, it's a much harder problem than that. 3297c478bd9Sstevel@tonic-gate * If you happen to change from 1 crt to another that both have the same 3307c478bd9Sstevel@tonic-gate * size screen, it's OK. But if the screen size if different, the stuff 3317c478bd9Sstevel@tonic-gate * that gets initialized in vop() will be wrong. This could be overcome 3327c478bd9Sstevel@tonic-gate * by redoing the initialization, e.g. making the first 90% of vop into 3337c478bd9Sstevel@tonic-gate * a subroutine. However, the most useful case is where you forgot to do 3347c478bd9Sstevel@tonic-gate * a setenv before you went into the editor and it thinks you're on a dumb 3357c478bd9Sstevel@tonic-gate * terminal. Ex treats this like hardcopy and goes into HARDOPEN mode. 3367c478bd9Sstevel@tonic-gate * This loses because the first part of vop calls oop in this case. 3377c478bd9Sstevel@tonic-gate */ 3387c478bd9Sstevel@tonic-gate if (inopen) 3397c478bd9Sstevel@tonic-gate error(gettext("Can't change type of terminal from within open/visual")); 3407c478bd9Sstevel@tonic-gate unterm(); 3417c478bd9Sstevel@tonic-gate setterm(optname); 3427c478bd9Sstevel@tonic-gate } else { 3437c478bd9Sstevel@tonic-gate CP(op->osvalue, optname); 3447c478bd9Sstevel@tonic-gate op->odefault = 1; 3457c478bd9Sstevel@tonic-gate } 3467c478bd9Sstevel@tonic-gate break; 3477c478bd9Sstevel@tonic-gate } 3487c478bd9Sstevel@tonic-gate next: 3497c478bd9Sstevel@tonic-gate flush(); 3507c478bd9Sstevel@tonic-gate } while (!skipend()); 3517c478bd9Sstevel@tonic-gate eol(); 3527c478bd9Sstevel@tonic-gate } 3537c478bd9Sstevel@tonic-gate 354f6db9f27Scf46844 void 355f6db9f27Scf46844 unterm(void) 3567c478bd9Sstevel@tonic-gate { 3577c478bd9Sstevel@tonic-gate /* 3587c478bd9Sstevel@tonic-gate * All terminal mapped statements must be deleted. 3597c478bd9Sstevel@tonic-gate * All user-defined mapped statements, cap=descr, 3607c478bd9Sstevel@tonic-gate * are left unchanged. 3617c478bd9Sstevel@tonic-gate */ 3627c478bd9Sstevel@tonic-gate 3637c478bd9Sstevel@tonic-gate int i; 3647c478bd9Sstevel@tonic-gate 3657c478bd9Sstevel@tonic-gate for (i=0; i < MAXNOMACS; i++) { 3667c478bd9Sstevel@tonic-gate 3677c478bd9Sstevel@tonic-gate /* 3687c478bd9Sstevel@tonic-gate * Unmap any terminal-defined arrow keys 3697c478bd9Sstevel@tonic-gate */ 3707c478bd9Sstevel@tonic-gate 3717c478bd9Sstevel@tonic-gate if (arrows[i].cap && arrows[i].descr && 3727c478bd9Sstevel@tonic-gate strcmp(arrows[i].cap, arrows[i].descr)) 3737c478bd9Sstevel@tonic-gate addmac(arrows[i].cap, NOSTR, NOSTR, arrows); 3747c478bd9Sstevel@tonic-gate 3757c478bd9Sstevel@tonic-gate /* 3767c478bd9Sstevel@tonic-gate * Unmap any terminal-defined function keys 3777c478bd9Sstevel@tonic-gate */ 3787c478bd9Sstevel@tonic-gate 3797c478bd9Sstevel@tonic-gate if (immacs[i].cap && immacs[i].descr && strcmp(immacs[i].cap, immacs[i].descr)) 3807c478bd9Sstevel@tonic-gate addmac(immacs[i].cap, NOSTR, NOSTR, immacs); 3817c478bd9Sstevel@tonic-gate 3827c478bd9Sstevel@tonic-gate } 3837c478bd9Sstevel@tonic-gate } 3847c478bd9Sstevel@tonic-gate 3857c478bd9Sstevel@tonic-gate 386f6db9f27Scf46844 int 387f6db9f27Scf46844 setend(void) 3887c478bd9Sstevel@tonic-gate { 3897c478bd9Sstevel@tonic-gate 3907c478bd9Sstevel@tonic-gate return (iswhite(peekchar()) || endcmd(peekchar())); 3917c478bd9Sstevel@tonic-gate } 3927c478bd9Sstevel@tonic-gate 393f6db9f27Scf46844 void 394f6db9f27Scf46844 prall(void) 3957c478bd9Sstevel@tonic-gate { 396f6db9f27Scf46844 int incr = (vi_NOPTS + 2) / 3; 397f6db9f27Scf46844 int rows = incr; 398f6db9f27Scf46844 struct option *op = options; 3997c478bd9Sstevel@tonic-gate 4007c478bd9Sstevel@tonic-gate for (; rows; rows--, op++) { 4017c478bd9Sstevel@tonic-gate propt(op); 4027c478bd9Sstevel@tonic-gate gotab(24); 4037c478bd9Sstevel@tonic-gate propt(&op[incr]); 4047c478bd9Sstevel@tonic-gate if (&op[2*incr] < &options[vi_NOPTS]) { 4057c478bd9Sstevel@tonic-gate gotab(56); 4067c478bd9Sstevel@tonic-gate propt(&op[2 * incr]); 4077c478bd9Sstevel@tonic-gate } 4087c478bd9Sstevel@tonic-gate putNFL(); 4097c478bd9Sstevel@tonic-gate } 4107c478bd9Sstevel@tonic-gate } 4117c478bd9Sstevel@tonic-gate 412f6db9f27Scf46844 void 413f6db9f27Scf46844 propts(void) 4147c478bd9Sstevel@tonic-gate { 415f6db9f27Scf46844 struct option *op; 4167c478bd9Sstevel@tonic-gate 4177c478bd9Sstevel@tonic-gate for (op = options; op < &options[vi_NOPTS]; op++) { 4187c478bd9Sstevel@tonic-gate if (op == &options[vi_TTYTYPE]) 4197c478bd9Sstevel@tonic-gate continue; 4207c478bd9Sstevel@tonic-gate switch (op->otype) { 4217c478bd9Sstevel@tonic-gate 4227c478bd9Sstevel@tonic-gate case ONOFF: 4237c478bd9Sstevel@tonic-gate case NUMERIC: 4247c478bd9Sstevel@tonic-gate if (op->ovalue == op->odefault) 4257c478bd9Sstevel@tonic-gate continue; 4267c478bd9Sstevel@tonic-gate break; 4277c478bd9Sstevel@tonic-gate 4287c478bd9Sstevel@tonic-gate case STRING: 4297c478bd9Sstevel@tonic-gate if (op->odefault == 0) 4307c478bd9Sstevel@tonic-gate continue; 4317c478bd9Sstevel@tonic-gate break; 4327c478bd9Sstevel@tonic-gate } 4337c478bd9Sstevel@tonic-gate propt(op); 4347c478bd9Sstevel@tonic-gate putchar(' '); 4357c478bd9Sstevel@tonic-gate } 4367c478bd9Sstevel@tonic-gate noonl(); 4377c478bd9Sstevel@tonic-gate flush(); 4387c478bd9Sstevel@tonic-gate } 4397c478bd9Sstevel@tonic-gate 440f6db9f27Scf46844 void 441f6db9f27Scf46844 propt(struct option *op) 4427c478bd9Sstevel@tonic-gate { 443f6db9f27Scf46844 unsigned char *name; 4447c478bd9Sstevel@tonic-gate 4457c478bd9Sstevel@tonic-gate name = (unsigned char *)op->oname; 4467c478bd9Sstevel@tonic-gate 4477c478bd9Sstevel@tonic-gate switch (op->otype) { 4487c478bd9Sstevel@tonic-gate 4497c478bd9Sstevel@tonic-gate case ONOFF: 450f6db9f27Scf46844 viprintf("%s%s", op->ovalue ? "" : "no", name); 4517c478bd9Sstevel@tonic-gate break; 4527c478bd9Sstevel@tonic-gate 4537c478bd9Sstevel@tonic-gate case NUMERIC: 454f6db9f27Scf46844 viprintf("%s=%d", name, op->ovalue); 4557c478bd9Sstevel@tonic-gate break; 4567c478bd9Sstevel@tonic-gate 4577c478bd9Sstevel@tonic-gate case STRING: 4587c478bd9Sstevel@tonic-gate case OTERM: 459f6db9f27Scf46844 viprintf("%s=%s", name, op->osvalue); 4607c478bd9Sstevel@tonic-gate break; 4617c478bd9Sstevel@tonic-gate } 4627c478bd9Sstevel@tonic-gate } 463