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 57c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 67c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 77c478bd9Sstevel@tonic-gate * with the License. 87c478bd9Sstevel@tonic-gate * 97c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 107c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 117c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 127c478bd9Sstevel@tonic-gate * and limitations under the License. 137c478bd9Sstevel@tonic-gate * 147c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 157c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 167c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 177c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 187c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 197c478bd9Sstevel@tonic-gate * 207c478bd9Sstevel@tonic-gate * CDDL HEADER END 217c478bd9Sstevel@tonic-gate */ 227c478bd9Sstevel@tonic-gate /* 237c478bd9Sstevel@tonic-gate * Copyright 2003 Sun Microsystems, Inc. All rights reserved. 247c478bd9Sstevel@tonic-gate * Use is subject to license terms. 257c478bd9Sstevel@tonic-gate */ 267c478bd9Sstevel@tonic-gate 277c478bd9Sstevel@tonic-gate /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 287c478bd9Sstevel@tonic-gate /* All Rights Reserved */ 297c478bd9Sstevel@tonic-gate 307c478bd9Sstevel@tonic-gate /* 317c478bd9Sstevel@tonic-gate * University Copyright- Copyright (c) 1982, 1986, 1988 327c478bd9Sstevel@tonic-gate * The Regents of the University of California 337c478bd9Sstevel@tonic-gate * All Rights Reserved 347c478bd9Sstevel@tonic-gate * 357c478bd9Sstevel@tonic-gate * University Acknowledgment- Portions of this document are derived from 367c478bd9Sstevel@tonic-gate * software developed by the University of California, Berkeley, and its 377c478bd9Sstevel@tonic-gate * contributors. 387c478bd9Sstevel@tonic-gate */ 397c478bd9Sstevel@tonic-gate 40*e5190c10Smuffin #pragma ident "%Z%%M% %I% %E% SMI" 41*e5190c10Smuffin 427c478bd9Sstevel@tonic-gate #ifdef EUC 437c478bd9Sstevel@tonic-gate #ifdef NROFF 447c478bd9Sstevel@tonic-gate #include <stddef.h> 457c478bd9Sstevel@tonic-gate #include <stdlib.h> 467c478bd9Sstevel@tonic-gate #include <widec.h> 477c478bd9Sstevel@tonic-gate #endif /* NROFF */ 487c478bd9Sstevel@tonic-gate #endif /* EUC */ 497c478bd9Sstevel@tonic-gate #include <string.h> 507c478bd9Sstevel@tonic-gate #include "tdef.h" 517c478bd9Sstevel@tonic-gate #include "ext.h" 527c478bd9Sstevel@tonic-gate 537c478bd9Sstevel@tonic-gate /* 547c478bd9Sstevel@tonic-gate * troff5.c 557c478bd9Sstevel@tonic-gate * 567c478bd9Sstevel@tonic-gate * misc processing requests 577c478bd9Sstevel@tonic-gate */ 587c478bd9Sstevel@tonic-gate 597c478bd9Sstevel@tonic-gate int iflist[NIF]; 607c478bd9Sstevel@tonic-gate int ifx; 617c478bd9Sstevel@tonic-gate 62*e5190c10Smuffin int 637c478bd9Sstevel@tonic-gate casead() 647c478bd9Sstevel@tonic-gate { 65*e5190c10Smuffin int i; 667c478bd9Sstevel@tonic-gate 677c478bd9Sstevel@tonic-gate ad = 1; 687c478bd9Sstevel@tonic-gate /*leave admod alone*/ 697c478bd9Sstevel@tonic-gate if (skip()) 70*e5190c10Smuffin return (0); 717c478bd9Sstevel@tonic-gate switch (i = cbits(getch())) { 727c478bd9Sstevel@tonic-gate case 'r': /*right adj, left ragged*/ 737c478bd9Sstevel@tonic-gate admod = 2; 747c478bd9Sstevel@tonic-gate break; 757c478bd9Sstevel@tonic-gate case 'l': /*left adj, right ragged*/ 767c478bd9Sstevel@tonic-gate admod = ad = 0; /*same as casena*/ 777c478bd9Sstevel@tonic-gate break; 787c478bd9Sstevel@tonic-gate case 'c': /*centered adj*/ 797c478bd9Sstevel@tonic-gate admod = 1; 807c478bd9Sstevel@tonic-gate break; 817c478bd9Sstevel@tonic-gate case 'b': 827c478bd9Sstevel@tonic-gate case 'n': 837c478bd9Sstevel@tonic-gate admod = 0; 847c478bd9Sstevel@tonic-gate break; 857c478bd9Sstevel@tonic-gate case '0': 867c478bd9Sstevel@tonic-gate case '2': 877c478bd9Sstevel@tonic-gate case '4': 887c478bd9Sstevel@tonic-gate ad = 0; 897c478bd9Sstevel@tonic-gate case '1': 907c478bd9Sstevel@tonic-gate case '3': 917c478bd9Sstevel@tonic-gate case '5': 927c478bd9Sstevel@tonic-gate admod = (i - '0') / 2; 937c478bd9Sstevel@tonic-gate } 94*e5190c10Smuffin 95*e5190c10Smuffin return (0); 967c478bd9Sstevel@tonic-gate } 977c478bd9Sstevel@tonic-gate 987c478bd9Sstevel@tonic-gate 99*e5190c10Smuffin int 1007c478bd9Sstevel@tonic-gate casena() 1017c478bd9Sstevel@tonic-gate { 1027c478bd9Sstevel@tonic-gate ad = 0; 103*e5190c10Smuffin 104*e5190c10Smuffin return (0); 1057c478bd9Sstevel@tonic-gate } 1067c478bd9Sstevel@tonic-gate 1077c478bd9Sstevel@tonic-gate 108*e5190c10Smuffin int 1097c478bd9Sstevel@tonic-gate casefi() 1107c478bd9Sstevel@tonic-gate { 1117c478bd9Sstevel@tonic-gate tbreak(); 1127c478bd9Sstevel@tonic-gate fi++; 1137c478bd9Sstevel@tonic-gate pendnf = 0; 1147c478bd9Sstevel@tonic-gate lnsize = LNSIZE; 115*e5190c10Smuffin 116*e5190c10Smuffin return (0); 1177c478bd9Sstevel@tonic-gate } 1187c478bd9Sstevel@tonic-gate 1197c478bd9Sstevel@tonic-gate 120*e5190c10Smuffin int 1217c478bd9Sstevel@tonic-gate casenf() 1227c478bd9Sstevel@tonic-gate { 1237c478bd9Sstevel@tonic-gate tbreak(); 1247c478bd9Sstevel@tonic-gate fi = 0; 125*e5190c10Smuffin 126*e5190c10Smuffin return (0); 1277c478bd9Sstevel@tonic-gate } 1287c478bd9Sstevel@tonic-gate 1297c478bd9Sstevel@tonic-gate 130*e5190c10Smuffin int 1317c478bd9Sstevel@tonic-gate casers() 1327c478bd9Sstevel@tonic-gate { 1337c478bd9Sstevel@tonic-gate dip->nls = 0; 134*e5190c10Smuffin 135*e5190c10Smuffin return (0); 1367c478bd9Sstevel@tonic-gate } 1377c478bd9Sstevel@tonic-gate 1387c478bd9Sstevel@tonic-gate 139*e5190c10Smuffin int 1407c478bd9Sstevel@tonic-gate casens() 1417c478bd9Sstevel@tonic-gate { 1427c478bd9Sstevel@tonic-gate dip->nls++; 143*e5190c10Smuffin 144*e5190c10Smuffin return (0); 1457c478bd9Sstevel@tonic-gate } 1467c478bd9Sstevel@tonic-gate 1477c478bd9Sstevel@tonic-gate 148*e5190c10Smuffin int 1497c478bd9Sstevel@tonic-gate chget(c) 1507c478bd9Sstevel@tonic-gate int c; 1517c478bd9Sstevel@tonic-gate { 1527c478bd9Sstevel@tonic-gate tchar i; 1537c478bd9Sstevel@tonic-gate 1547c478bd9Sstevel@tonic-gate if (skip() || ismot(i = getch()) || cbits(i) == ' ' || cbits(i) == '\n') { 1557c478bd9Sstevel@tonic-gate ch = i; 1567c478bd9Sstevel@tonic-gate return(c); 1577c478bd9Sstevel@tonic-gate } else 1587c478bd9Sstevel@tonic-gate return(i & BYTEMASK); 1597c478bd9Sstevel@tonic-gate } 1607c478bd9Sstevel@tonic-gate 1617c478bd9Sstevel@tonic-gate 162*e5190c10Smuffin int 1637c478bd9Sstevel@tonic-gate casecc() 1647c478bd9Sstevel@tonic-gate { 1657c478bd9Sstevel@tonic-gate cc = chget('.'); 166*e5190c10Smuffin 167*e5190c10Smuffin return (0); 1687c478bd9Sstevel@tonic-gate } 1697c478bd9Sstevel@tonic-gate 1707c478bd9Sstevel@tonic-gate 171*e5190c10Smuffin int 1727c478bd9Sstevel@tonic-gate casec2() 1737c478bd9Sstevel@tonic-gate { 1747c478bd9Sstevel@tonic-gate c2 = chget('\''); 175*e5190c10Smuffin 176*e5190c10Smuffin return (0); 1777c478bd9Sstevel@tonic-gate } 1787c478bd9Sstevel@tonic-gate 1797c478bd9Sstevel@tonic-gate 180*e5190c10Smuffin int 1817c478bd9Sstevel@tonic-gate casehc() 1827c478bd9Sstevel@tonic-gate { 1837c478bd9Sstevel@tonic-gate ohc = chget(OHC); 184*e5190c10Smuffin 185*e5190c10Smuffin return (0); 1867c478bd9Sstevel@tonic-gate } 1877c478bd9Sstevel@tonic-gate 1887c478bd9Sstevel@tonic-gate 189*e5190c10Smuffin int 1907c478bd9Sstevel@tonic-gate casetc() 1917c478bd9Sstevel@tonic-gate { 1927c478bd9Sstevel@tonic-gate tabc = chget(0); 193*e5190c10Smuffin 194*e5190c10Smuffin return (0); 1957c478bd9Sstevel@tonic-gate } 1967c478bd9Sstevel@tonic-gate 1977c478bd9Sstevel@tonic-gate 198*e5190c10Smuffin int 1997c478bd9Sstevel@tonic-gate caselc() 2007c478bd9Sstevel@tonic-gate { 2017c478bd9Sstevel@tonic-gate dotc = chget(0); 202*e5190c10Smuffin 203*e5190c10Smuffin return (0); 2047c478bd9Sstevel@tonic-gate } 2057c478bd9Sstevel@tonic-gate 2067c478bd9Sstevel@tonic-gate 207*e5190c10Smuffin int 2087c478bd9Sstevel@tonic-gate casehy() 2097c478bd9Sstevel@tonic-gate { 210*e5190c10Smuffin int i; 2117c478bd9Sstevel@tonic-gate 2127c478bd9Sstevel@tonic-gate hyf = 1; 2137c478bd9Sstevel@tonic-gate if (skip()) 214*e5190c10Smuffin return (0); 2157c478bd9Sstevel@tonic-gate noscale++; 2167c478bd9Sstevel@tonic-gate i = atoi(); 2177c478bd9Sstevel@tonic-gate noscale = 0; 2187c478bd9Sstevel@tonic-gate if (nonumb) 219*e5190c10Smuffin return (0); 2207c478bd9Sstevel@tonic-gate hyf = max(i, 0); 221*e5190c10Smuffin 222*e5190c10Smuffin return (0); 2237c478bd9Sstevel@tonic-gate } 2247c478bd9Sstevel@tonic-gate 2257c478bd9Sstevel@tonic-gate 226*e5190c10Smuffin int 2277c478bd9Sstevel@tonic-gate casenh() 2287c478bd9Sstevel@tonic-gate { 2297c478bd9Sstevel@tonic-gate hyf = 0; 230*e5190c10Smuffin 231*e5190c10Smuffin return (0); 2327c478bd9Sstevel@tonic-gate } 2337c478bd9Sstevel@tonic-gate 2347c478bd9Sstevel@tonic-gate 235*e5190c10Smuffin int 2367c478bd9Sstevel@tonic-gate max(aa, bb) 2377c478bd9Sstevel@tonic-gate int aa, bb; 2387c478bd9Sstevel@tonic-gate { 2397c478bd9Sstevel@tonic-gate if (aa > bb) 2407c478bd9Sstevel@tonic-gate return(aa); 2417c478bd9Sstevel@tonic-gate else 2427c478bd9Sstevel@tonic-gate return(bb); 2437c478bd9Sstevel@tonic-gate } 2447c478bd9Sstevel@tonic-gate 2457c478bd9Sstevel@tonic-gate 246*e5190c10Smuffin int 2477c478bd9Sstevel@tonic-gate casece() 2487c478bd9Sstevel@tonic-gate { 249*e5190c10Smuffin int i; 2507c478bd9Sstevel@tonic-gate 2517c478bd9Sstevel@tonic-gate noscale++; 2527c478bd9Sstevel@tonic-gate skip(); 2537c478bd9Sstevel@tonic-gate i = max(atoi(), 0); 2547c478bd9Sstevel@tonic-gate if (nonumb) 2557c478bd9Sstevel@tonic-gate i = 1; 2567c478bd9Sstevel@tonic-gate tbreak(); 2577c478bd9Sstevel@tonic-gate ce = i; 2587c478bd9Sstevel@tonic-gate noscale = 0; 259*e5190c10Smuffin 260*e5190c10Smuffin return (0); 2617c478bd9Sstevel@tonic-gate } 2627c478bd9Sstevel@tonic-gate 2637c478bd9Sstevel@tonic-gate 264*e5190c10Smuffin int 2657c478bd9Sstevel@tonic-gate casein() 2667c478bd9Sstevel@tonic-gate { 267*e5190c10Smuffin int i; 2687c478bd9Sstevel@tonic-gate 2697c478bd9Sstevel@tonic-gate if (skip()) 2707c478bd9Sstevel@tonic-gate i = in1; 2717c478bd9Sstevel@tonic-gate else 2727c478bd9Sstevel@tonic-gate i = max(hnumb(&in), 0); 2737c478bd9Sstevel@tonic-gate tbreak(); 2747c478bd9Sstevel@tonic-gate in1 = in; 2757c478bd9Sstevel@tonic-gate in = i; 2767c478bd9Sstevel@tonic-gate if (!nc) { 2777c478bd9Sstevel@tonic-gate un = in; 2787c478bd9Sstevel@tonic-gate setnel(); 2797c478bd9Sstevel@tonic-gate } 280*e5190c10Smuffin 281*e5190c10Smuffin return (0); 2827c478bd9Sstevel@tonic-gate } 2837c478bd9Sstevel@tonic-gate 2847c478bd9Sstevel@tonic-gate 285*e5190c10Smuffin int 2867c478bd9Sstevel@tonic-gate casell() 2877c478bd9Sstevel@tonic-gate { 288*e5190c10Smuffin int i; 2897c478bd9Sstevel@tonic-gate 2907c478bd9Sstevel@tonic-gate if (skip()) 2917c478bd9Sstevel@tonic-gate i = ll1; 2927c478bd9Sstevel@tonic-gate else 2937c478bd9Sstevel@tonic-gate i = max(hnumb(&ll), INCH / 10); 2947c478bd9Sstevel@tonic-gate ll1 = ll; 2957c478bd9Sstevel@tonic-gate ll = i; 2967c478bd9Sstevel@tonic-gate setnel(); 297*e5190c10Smuffin 298*e5190c10Smuffin return (0); 2997c478bd9Sstevel@tonic-gate } 3007c478bd9Sstevel@tonic-gate 3017c478bd9Sstevel@tonic-gate 302*e5190c10Smuffin int 3037c478bd9Sstevel@tonic-gate caselt() 3047c478bd9Sstevel@tonic-gate { 305*e5190c10Smuffin int i; 3067c478bd9Sstevel@tonic-gate 3077c478bd9Sstevel@tonic-gate if (skip()) 3087c478bd9Sstevel@tonic-gate i = lt1; 3097c478bd9Sstevel@tonic-gate else 3107c478bd9Sstevel@tonic-gate i = max(hnumb(<), 0); 3117c478bd9Sstevel@tonic-gate lt1 = lt; 3127c478bd9Sstevel@tonic-gate lt = i; 313*e5190c10Smuffin 314*e5190c10Smuffin return (0); 3157c478bd9Sstevel@tonic-gate } 3167c478bd9Sstevel@tonic-gate 3177c478bd9Sstevel@tonic-gate 318*e5190c10Smuffin int 3197c478bd9Sstevel@tonic-gate caseti() 3207c478bd9Sstevel@tonic-gate { 321*e5190c10Smuffin int i; 3227c478bd9Sstevel@tonic-gate 3237c478bd9Sstevel@tonic-gate if (skip()) 324*e5190c10Smuffin return (0); 3257c478bd9Sstevel@tonic-gate i = max(hnumb(&in), 0); 3267c478bd9Sstevel@tonic-gate tbreak(); 3277c478bd9Sstevel@tonic-gate un1 = i; 3287c478bd9Sstevel@tonic-gate setnel(); 329*e5190c10Smuffin 330*e5190c10Smuffin return (0); 3317c478bd9Sstevel@tonic-gate } 3327c478bd9Sstevel@tonic-gate 3337c478bd9Sstevel@tonic-gate 334*e5190c10Smuffin int 3357c478bd9Sstevel@tonic-gate casels() 3367c478bd9Sstevel@tonic-gate { 337*e5190c10Smuffin int i; 3387c478bd9Sstevel@tonic-gate 3397c478bd9Sstevel@tonic-gate noscale++; 3407c478bd9Sstevel@tonic-gate if (skip()) 3417c478bd9Sstevel@tonic-gate i = ls1; 3427c478bd9Sstevel@tonic-gate else 3437c478bd9Sstevel@tonic-gate i = max(inumb(&ls), 1); 3447c478bd9Sstevel@tonic-gate ls1 = ls; 3457c478bd9Sstevel@tonic-gate ls = i; 3467c478bd9Sstevel@tonic-gate noscale = 0; 347*e5190c10Smuffin 348*e5190c10Smuffin return (0); 3497c478bd9Sstevel@tonic-gate } 3507c478bd9Sstevel@tonic-gate 3517c478bd9Sstevel@tonic-gate 352*e5190c10Smuffin int 3537c478bd9Sstevel@tonic-gate casepo() 3547c478bd9Sstevel@tonic-gate { 355*e5190c10Smuffin int i; 3567c478bd9Sstevel@tonic-gate 3577c478bd9Sstevel@tonic-gate if (skip()) 3587c478bd9Sstevel@tonic-gate i = po1; 3597c478bd9Sstevel@tonic-gate else 3607c478bd9Sstevel@tonic-gate i = max(hnumb(&po), 0); 3617c478bd9Sstevel@tonic-gate po1 = po; 3627c478bd9Sstevel@tonic-gate po = i; 3637c478bd9Sstevel@tonic-gate #ifndef NROFF 3647c478bd9Sstevel@tonic-gate if (!ascii) 3657c478bd9Sstevel@tonic-gate esc += po - po1; 3667c478bd9Sstevel@tonic-gate #endif 367*e5190c10Smuffin return (0); 3687c478bd9Sstevel@tonic-gate } 3697c478bd9Sstevel@tonic-gate 3707c478bd9Sstevel@tonic-gate 371*e5190c10Smuffin int 3727c478bd9Sstevel@tonic-gate casepl() 3737c478bd9Sstevel@tonic-gate { 374*e5190c10Smuffin int i; 3757c478bd9Sstevel@tonic-gate 3767c478bd9Sstevel@tonic-gate skip(); 3777c478bd9Sstevel@tonic-gate if ((i = vnumb(&pl)) == 0) 3787c478bd9Sstevel@tonic-gate pl = 11 * INCH; /*11in*/ 3797c478bd9Sstevel@tonic-gate else 3807c478bd9Sstevel@tonic-gate pl = i; 3817c478bd9Sstevel@tonic-gate if (numtab[NL].val > pl) 3827c478bd9Sstevel@tonic-gate numtab[NL].val = pl; 383*e5190c10Smuffin 384*e5190c10Smuffin return (0); 3857c478bd9Sstevel@tonic-gate } 3867c478bd9Sstevel@tonic-gate 3877c478bd9Sstevel@tonic-gate 388*e5190c10Smuffin int 3897c478bd9Sstevel@tonic-gate casewh() 3907c478bd9Sstevel@tonic-gate { 391*e5190c10Smuffin int i, j, k; 3927c478bd9Sstevel@tonic-gate 3937c478bd9Sstevel@tonic-gate lgf++; 3947c478bd9Sstevel@tonic-gate skip(); 3957c478bd9Sstevel@tonic-gate i = vnumb((int *)0); 3967c478bd9Sstevel@tonic-gate if (nonumb) 397*e5190c10Smuffin return (0); 3987c478bd9Sstevel@tonic-gate skip(); 3997c478bd9Sstevel@tonic-gate j = getrq(); 4007c478bd9Sstevel@tonic-gate if ((k = findn(i)) != NTRAP) { 4017c478bd9Sstevel@tonic-gate mlist[k] = j; 402*e5190c10Smuffin return (0); 4037c478bd9Sstevel@tonic-gate } 4047c478bd9Sstevel@tonic-gate for (k = 0; k < NTRAP; k++) 4057c478bd9Sstevel@tonic-gate if (mlist[k] == 0) 4067c478bd9Sstevel@tonic-gate break; 4077c478bd9Sstevel@tonic-gate if (k == NTRAP) { 4087c478bd9Sstevel@tonic-gate flusho(); 4097c478bd9Sstevel@tonic-gate errprint(gettext("cannot plant trap.")); 410*e5190c10Smuffin return (0); 4117c478bd9Sstevel@tonic-gate } 4127c478bd9Sstevel@tonic-gate mlist[k] = j; 4137c478bd9Sstevel@tonic-gate nlist[k] = i; 414*e5190c10Smuffin 415*e5190c10Smuffin return (0); 4167c478bd9Sstevel@tonic-gate } 4177c478bd9Sstevel@tonic-gate 4187c478bd9Sstevel@tonic-gate 419*e5190c10Smuffin int 4207c478bd9Sstevel@tonic-gate casech() 4217c478bd9Sstevel@tonic-gate { 422*e5190c10Smuffin int i, j, k; 4237c478bd9Sstevel@tonic-gate 4247c478bd9Sstevel@tonic-gate lgf++; 4257c478bd9Sstevel@tonic-gate skip(); 4267c478bd9Sstevel@tonic-gate if (!(j = getrq())) 427*e5190c10Smuffin return (0); 4287c478bd9Sstevel@tonic-gate else 4297c478bd9Sstevel@tonic-gate for (k = 0; k < NTRAP; k++) 4307c478bd9Sstevel@tonic-gate if (mlist[k] == j) 4317c478bd9Sstevel@tonic-gate break; 4327c478bd9Sstevel@tonic-gate if (k == NTRAP) 433*e5190c10Smuffin return (0); 4347c478bd9Sstevel@tonic-gate skip(); 4357c478bd9Sstevel@tonic-gate i = vnumb((int *)0); 4367c478bd9Sstevel@tonic-gate if (nonumb) 4377c478bd9Sstevel@tonic-gate mlist[k] = 0; 4387c478bd9Sstevel@tonic-gate nlist[k] = i; 439*e5190c10Smuffin 440*e5190c10Smuffin return (0); 4417c478bd9Sstevel@tonic-gate } 4427c478bd9Sstevel@tonic-gate 4437c478bd9Sstevel@tonic-gate 444*e5190c10Smuffin int 4457c478bd9Sstevel@tonic-gate findn(i) 4467c478bd9Sstevel@tonic-gate int i; 4477c478bd9Sstevel@tonic-gate { 448*e5190c10Smuffin int k; 4497c478bd9Sstevel@tonic-gate 4507c478bd9Sstevel@tonic-gate for (k = 0; k < NTRAP; k++) 4517c478bd9Sstevel@tonic-gate if ((nlist[k] == i) && (mlist[k] != 0)) 4527c478bd9Sstevel@tonic-gate break; 4537c478bd9Sstevel@tonic-gate return(k); 4547c478bd9Sstevel@tonic-gate } 4557c478bd9Sstevel@tonic-gate 4567c478bd9Sstevel@tonic-gate 457*e5190c10Smuffin int 4587c478bd9Sstevel@tonic-gate casepn() 4597c478bd9Sstevel@tonic-gate { 460*e5190c10Smuffin int i; 4617c478bd9Sstevel@tonic-gate 4627c478bd9Sstevel@tonic-gate skip(); 4637c478bd9Sstevel@tonic-gate noscale++; 4647c478bd9Sstevel@tonic-gate i = max(inumb(&numtab[PN].val), 0); 4657c478bd9Sstevel@tonic-gate noscale = 0; 4667c478bd9Sstevel@tonic-gate if (!nonumb) { 4677c478bd9Sstevel@tonic-gate npn = i; 4687c478bd9Sstevel@tonic-gate npnflg++; 4697c478bd9Sstevel@tonic-gate } 470*e5190c10Smuffin 471*e5190c10Smuffin return (0); 4727c478bd9Sstevel@tonic-gate } 4737c478bd9Sstevel@tonic-gate 4747c478bd9Sstevel@tonic-gate 475*e5190c10Smuffin int 4767c478bd9Sstevel@tonic-gate casebp() 4777c478bd9Sstevel@tonic-gate { 478*e5190c10Smuffin int i; 479*e5190c10Smuffin struct s *savframe; 4807c478bd9Sstevel@tonic-gate 4817c478bd9Sstevel@tonic-gate if (dip != d) 482*e5190c10Smuffin return (0); 4837c478bd9Sstevel@tonic-gate savframe = frame; 4847c478bd9Sstevel@tonic-gate skip(); 4857c478bd9Sstevel@tonic-gate if ((i = inumb(&numtab[PN].val)) < 0) 4867c478bd9Sstevel@tonic-gate i = 0; 4877c478bd9Sstevel@tonic-gate tbreak(); 4887c478bd9Sstevel@tonic-gate if (!nonumb) { 4897c478bd9Sstevel@tonic-gate npn = i; 4907c478bd9Sstevel@tonic-gate npnflg++; 4917c478bd9Sstevel@tonic-gate } else if (dip->nls) 492*e5190c10Smuffin return (0); 4937c478bd9Sstevel@tonic-gate eject(savframe); 494*e5190c10Smuffin 495*e5190c10Smuffin return (0); 4967c478bd9Sstevel@tonic-gate } 4977c478bd9Sstevel@tonic-gate 4987c478bd9Sstevel@tonic-gate 499*e5190c10Smuffin int 5007c478bd9Sstevel@tonic-gate casetm(ab) 5017c478bd9Sstevel@tonic-gate int ab; 5027c478bd9Sstevel@tonic-gate { 503*e5190c10Smuffin int i; 5047c478bd9Sstevel@tonic-gate char tmbuf[NTM]; 5057c478bd9Sstevel@tonic-gate 5067c478bd9Sstevel@tonic-gate lgf++; 5077c478bd9Sstevel@tonic-gate copyf++; 5087c478bd9Sstevel@tonic-gate if (skip() && ab) 5097c478bd9Sstevel@tonic-gate errprint(gettext("User Abort")); 5107c478bd9Sstevel@tonic-gate for (i = 0; i < NTM - 2; ) 5117c478bd9Sstevel@tonic-gate if ((tmbuf[i++] = getch()) == '\n') 5127c478bd9Sstevel@tonic-gate break; 5137c478bd9Sstevel@tonic-gate if (i == NTM - 2) 5147c478bd9Sstevel@tonic-gate tmbuf[i++] = '\n'; 5157c478bd9Sstevel@tonic-gate tmbuf[i] = 0; 5167c478bd9Sstevel@tonic-gate if (ab) /* truncate output */ 5177c478bd9Sstevel@tonic-gate obufp = obuf; /* should be a function in n2.c */ 5187c478bd9Sstevel@tonic-gate flusho(); 5197c478bd9Sstevel@tonic-gate fdprintf(stderr, "%s", tmbuf); 5207c478bd9Sstevel@tonic-gate copyf--; 5217c478bd9Sstevel@tonic-gate lgf--; 522*e5190c10Smuffin 523*e5190c10Smuffin return (0); 5247c478bd9Sstevel@tonic-gate } 5257c478bd9Sstevel@tonic-gate 5267c478bd9Sstevel@tonic-gate 527*e5190c10Smuffin int 5287c478bd9Sstevel@tonic-gate casesp(a) 5297c478bd9Sstevel@tonic-gate int a; 5307c478bd9Sstevel@tonic-gate { 531*e5190c10Smuffin int i, j, savlss; 5327c478bd9Sstevel@tonic-gate 5337c478bd9Sstevel@tonic-gate tbreak(); 5347c478bd9Sstevel@tonic-gate if (dip->nls || trap) 535*e5190c10Smuffin return (0); 5367c478bd9Sstevel@tonic-gate i = findt1(); 5377c478bd9Sstevel@tonic-gate if (!a) { 5387c478bd9Sstevel@tonic-gate skip(); 5397c478bd9Sstevel@tonic-gate j = vnumb((int *)0); 5407c478bd9Sstevel@tonic-gate if (nonumb) 5417c478bd9Sstevel@tonic-gate j = lss; 5427c478bd9Sstevel@tonic-gate } else 5437c478bd9Sstevel@tonic-gate j = a; 5447c478bd9Sstevel@tonic-gate if (j == 0) 545*e5190c10Smuffin return (0); 5467c478bd9Sstevel@tonic-gate if (i < j) 5477c478bd9Sstevel@tonic-gate j = i; 5487c478bd9Sstevel@tonic-gate savlss = lss; 5497c478bd9Sstevel@tonic-gate if (dip != d) 5507c478bd9Sstevel@tonic-gate i = dip->dnl; 5517c478bd9Sstevel@tonic-gate else 5527c478bd9Sstevel@tonic-gate i = numtab[NL].val; 5537c478bd9Sstevel@tonic-gate if ((i + j) < 0) 5547c478bd9Sstevel@tonic-gate j = -i; 5557c478bd9Sstevel@tonic-gate lss = j; 5567c478bd9Sstevel@tonic-gate newline(0); 5577c478bd9Sstevel@tonic-gate lss = savlss; 558*e5190c10Smuffin 559*e5190c10Smuffin return (0); 5607c478bd9Sstevel@tonic-gate } 5617c478bd9Sstevel@tonic-gate 5627c478bd9Sstevel@tonic-gate 563*e5190c10Smuffin int 5647c478bd9Sstevel@tonic-gate casert() 5657c478bd9Sstevel@tonic-gate { 566*e5190c10Smuffin int a, *p; 5677c478bd9Sstevel@tonic-gate 5687c478bd9Sstevel@tonic-gate skip(); 5697c478bd9Sstevel@tonic-gate if (dip != d) 5707c478bd9Sstevel@tonic-gate p = &dip->dnl; 5717c478bd9Sstevel@tonic-gate else 5727c478bd9Sstevel@tonic-gate p = &numtab[NL].val; 5737c478bd9Sstevel@tonic-gate a = vnumb(p); 5747c478bd9Sstevel@tonic-gate if (nonumb) 5757c478bd9Sstevel@tonic-gate a = dip->mkline; 5767c478bd9Sstevel@tonic-gate if ((a < 0) || (a >= *p)) 577*e5190c10Smuffin return (0); 5787c478bd9Sstevel@tonic-gate nb++; 5797c478bd9Sstevel@tonic-gate casesp(a - *p); 580*e5190c10Smuffin 581*e5190c10Smuffin return (0); 5827c478bd9Sstevel@tonic-gate } 5837c478bd9Sstevel@tonic-gate 5847c478bd9Sstevel@tonic-gate 585*e5190c10Smuffin int 5867c478bd9Sstevel@tonic-gate caseem() 5877c478bd9Sstevel@tonic-gate { 5887c478bd9Sstevel@tonic-gate lgf++; 5897c478bd9Sstevel@tonic-gate skip(); 5907c478bd9Sstevel@tonic-gate em = getrq(); 591*e5190c10Smuffin 592*e5190c10Smuffin return (0); 5937c478bd9Sstevel@tonic-gate } 5947c478bd9Sstevel@tonic-gate 5957c478bd9Sstevel@tonic-gate 596*e5190c10Smuffin int 5977c478bd9Sstevel@tonic-gate casefl() 5987c478bd9Sstevel@tonic-gate { 5997c478bd9Sstevel@tonic-gate tbreak(); 6007c478bd9Sstevel@tonic-gate flusho(); 601*e5190c10Smuffin 602*e5190c10Smuffin return (0); 6037c478bd9Sstevel@tonic-gate } 6047c478bd9Sstevel@tonic-gate 6057c478bd9Sstevel@tonic-gate 606*e5190c10Smuffin int 6077c478bd9Sstevel@tonic-gate caseev() 6087c478bd9Sstevel@tonic-gate { 609*e5190c10Smuffin int nxev; 6107c478bd9Sstevel@tonic-gate 6117c478bd9Sstevel@tonic-gate if (skip()) { 6127c478bd9Sstevel@tonic-gate e0: 6137c478bd9Sstevel@tonic-gate if (evi == 0) 614*e5190c10Smuffin return (0); 6157c478bd9Sstevel@tonic-gate nxev = evlist[--evi]; 6167c478bd9Sstevel@tonic-gate goto e1; 6177c478bd9Sstevel@tonic-gate } 6187c478bd9Sstevel@tonic-gate noscale++; 6197c478bd9Sstevel@tonic-gate nxev = atoi(); 6207c478bd9Sstevel@tonic-gate noscale = 0; 6217c478bd9Sstevel@tonic-gate if (nonumb) 6227c478bd9Sstevel@tonic-gate goto e0; 6237c478bd9Sstevel@tonic-gate flushi(); 6247c478bd9Sstevel@tonic-gate if ((nxev >= NEV) || (nxev < 0) || (evi >= EVLSZ)) { 6257c478bd9Sstevel@tonic-gate flusho(); 6267c478bd9Sstevel@tonic-gate errprint(gettext("cannot do ev.")); 6277c478bd9Sstevel@tonic-gate if (error) 6287c478bd9Sstevel@tonic-gate done2(040); 6297c478bd9Sstevel@tonic-gate else 6307c478bd9Sstevel@tonic-gate edone(040); 631*e5190c10Smuffin return (0); 6327c478bd9Sstevel@tonic-gate } 6337c478bd9Sstevel@tonic-gate evlist[evi++] = ev; 6347c478bd9Sstevel@tonic-gate e1: 6357c478bd9Sstevel@tonic-gate if (ev == nxev) 636*e5190c10Smuffin return (0); 6377c478bd9Sstevel@tonic-gate #ifdef INCORE 6387c478bd9Sstevel@tonic-gate { 6397c478bd9Sstevel@tonic-gate extern tchar corebuf[]; 6407c478bd9Sstevel@tonic-gate *(struct env *)&corebuf[ev * sizeof(env)/sizeof(tchar)] = env; 6417c478bd9Sstevel@tonic-gate env = *(struct env *)&corebuf[nxev * sizeof(env)/sizeof(tchar)]; 6427c478bd9Sstevel@tonic-gate } 6437c478bd9Sstevel@tonic-gate #else 6447c478bd9Sstevel@tonic-gate lseek(ibf, ev * (long)sizeof(env), 0); 6457c478bd9Sstevel@tonic-gate write(ibf, (char *) & env, sizeof(env)); 6467c478bd9Sstevel@tonic-gate lseek(ibf, nxev * (long)sizeof(env), 0); 6477c478bd9Sstevel@tonic-gate read(ibf, (char *) & env, sizeof(env)); 6487c478bd9Sstevel@tonic-gate #endif 6497c478bd9Sstevel@tonic-gate ev = nxev; 650*e5190c10Smuffin 651*e5190c10Smuffin return (0); 6527c478bd9Sstevel@tonic-gate } 6537c478bd9Sstevel@tonic-gate 654*e5190c10Smuffin int 6557c478bd9Sstevel@tonic-gate caseel() 6567c478bd9Sstevel@tonic-gate { 6577c478bd9Sstevel@tonic-gate if (--ifx < 0) { 6587c478bd9Sstevel@tonic-gate ifx = 0; 6597c478bd9Sstevel@tonic-gate iflist[0] = 0; 6607c478bd9Sstevel@tonic-gate } 6617c478bd9Sstevel@tonic-gate caseif(2); 662*e5190c10Smuffin 663*e5190c10Smuffin return (0); 6647c478bd9Sstevel@tonic-gate } 6657c478bd9Sstevel@tonic-gate 6667c478bd9Sstevel@tonic-gate 667*e5190c10Smuffin int 6687c478bd9Sstevel@tonic-gate caseie() 6697c478bd9Sstevel@tonic-gate { 6707c478bd9Sstevel@tonic-gate if (ifx >= NIF) { 6717c478bd9Sstevel@tonic-gate errprint(gettext("if-else overflow.")); 6727c478bd9Sstevel@tonic-gate ifx = 0; 6737c478bd9Sstevel@tonic-gate edone(040); 6747c478bd9Sstevel@tonic-gate } 6757c478bd9Sstevel@tonic-gate caseif(1); 6767c478bd9Sstevel@tonic-gate ifx++; 677*e5190c10Smuffin 678*e5190c10Smuffin return (0); 6797c478bd9Sstevel@tonic-gate } 6807c478bd9Sstevel@tonic-gate 6817c478bd9Sstevel@tonic-gate 682*e5190c10Smuffin int 6837c478bd9Sstevel@tonic-gate caseif(x) 6847c478bd9Sstevel@tonic-gate int x; 6857c478bd9Sstevel@tonic-gate { 6867c478bd9Sstevel@tonic-gate extern int falsef; 687*e5190c10Smuffin int notflag, true; 6887c478bd9Sstevel@tonic-gate tchar i; 6897c478bd9Sstevel@tonic-gate 6907c478bd9Sstevel@tonic-gate if (x == 2) { 6917c478bd9Sstevel@tonic-gate notflag = 0; 6927c478bd9Sstevel@tonic-gate true = iflist[ifx]; 6937c478bd9Sstevel@tonic-gate goto i1; 6947c478bd9Sstevel@tonic-gate } 6957c478bd9Sstevel@tonic-gate true = 0; 6967c478bd9Sstevel@tonic-gate skip(); 6977c478bd9Sstevel@tonic-gate if ((cbits(i = getch())) == '!') { 6987c478bd9Sstevel@tonic-gate notflag = 1; 6997c478bd9Sstevel@tonic-gate } else { 7007c478bd9Sstevel@tonic-gate notflag = 0; 7017c478bd9Sstevel@tonic-gate ch = i; 7027c478bd9Sstevel@tonic-gate } 7037c478bd9Sstevel@tonic-gate i = atoi(); 7047c478bd9Sstevel@tonic-gate if (!nonumb) { 7057c478bd9Sstevel@tonic-gate if (i > 0) 7067c478bd9Sstevel@tonic-gate true++; 7077c478bd9Sstevel@tonic-gate goto i1; 7087c478bd9Sstevel@tonic-gate } 7097c478bd9Sstevel@tonic-gate i = getch(); 7107c478bd9Sstevel@tonic-gate switch (cbits(i)) { 7117c478bd9Sstevel@tonic-gate case 'e': 7127c478bd9Sstevel@tonic-gate if (!(numtab[PN].val & 01)) 7137c478bd9Sstevel@tonic-gate true++; 7147c478bd9Sstevel@tonic-gate break; 7157c478bd9Sstevel@tonic-gate case 'o': 7167c478bd9Sstevel@tonic-gate if (numtab[PN].val & 01) 7177c478bd9Sstevel@tonic-gate true++; 7187c478bd9Sstevel@tonic-gate break; 7197c478bd9Sstevel@tonic-gate #ifdef NROFF 7207c478bd9Sstevel@tonic-gate case 'n': 7217c478bd9Sstevel@tonic-gate true++; 7227c478bd9Sstevel@tonic-gate case 't': 7237c478bd9Sstevel@tonic-gate #endif 7247c478bd9Sstevel@tonic-gate #ifndef NROFF 7257c478bd9Sstevel@tonic-gate case 't': 7267c478bd9Sstevel@tonic-gate true++; 7277c478bd9Sstevel@tonic-gate case 'n': 7287c478bd9Sstevel@tonic-gate #endif 7297c478bd9Sstevel@tonic-gate case ' ': 7307c478bd9Sstevel@tonic-gate break; 7317c478bd9Sstevel@tonic-gate default: 7327c478bd9Sstevel@tonic-gate true = cmpstr(i); 7337c478bd9Sstevel@tonic-gate } 7347c478bd9Sstevel@tonic-gate i1: 7357c478bd9Sstevel@tonic-gate true ^= notflag; 7367c478bd9Sstevel@tonic-gate if (x == 1) 7377c478bd9Sstevel@tonic-gate iflist[ifx] = !true; 7387c478bd9Sstevel@tonic-gate if (true) { 7397c478bd9Sstevel@tonic-gate i2: 7407c478bd9Sstevel@tonic-gate while ((cbits(i = getch())) == ' ') 7417c478bd9Sstevel@tonic-gate ; 7427c478bd9Sstevel@tonic-gate if (cbits(i) == LEFT) 7437c478bd9Sstevel@tonic-gate goto i2; 7447c478bd9Sstevel@tonic-gate ch = i; 7457c478bd9Sstevel@tonic-gate nflush++; 7467c478bd9Sstevel@tonic-gate } else { 7477c478bd9Sstevel@tonic-gate copyf++; 7487c478bd9Sstevel@tonic-gate falsef++; 7497c478bd9Sstevel@tonic-gate eatblk(0); 7507c478bd9Sstevel@tonic-gate copyf--; 7517c478bd9Sstevel@tonic-gate falsef--; 7527c478bd9Sstevel@tonic-gate } 753*e5190c10Smuffin 754*e5190c10Smuffin return (0); 7557c478bd9Sstevel@tonic-gate } 7567c478bd9Sstevel@tonic-gate 757*e5190c10Smuffin int 7587c478bd9Sstevel@tonic-gate eatblk(inblk) 7597c478bd9Sstevel@tonic-gate int inblk; 760*e5190c10Smuffin { int cnt, i; 7617c478bd9Sstevel@tonic-gate 7627c478bd9Sstevel@tonic-gate cnt = 0; 7637c478bd9Sstevel@tonic-gate do { 7647c478bd9Sstevel@tonic-gate if (ch) { 7657c478bd9Sstevel@tonic-gate i = cbits(ch); 7667c478bd9Sstevel@tonic-gate ch = 0; 7677c478bd9Sstevel@tonic-gate } else 7687c478bd9Sstevel@tonic-gate i = cbits(getch0()); 7697c478bd9Sstevel@tonic-gate if (i == ESC) 7707c478bd9Sstevel@tonic-gate cnt++; 7717c478bd9Sstevel@tonic-gate else { 7727c478bd9Sstevel@tonic-gate if (cnt == 1) 7737c478bd9Sstevel@tonic-gate switch (i) { 7747c478bd9Sstevel@tonic-gate case '{': i = LEFT; break; 7757c478bd9Sstevel@tonic-gate case '}': i = RIGHT; break; 7767c478bd9Sstevel@tonic-gate case '\n': i = 'x'; break; 7777c478bd9Sstevel@tonic-gate } 7787c478bd9Sstevel@tonic-gate cnt = 0; 7797c478bd9Sstevel@tonic-gate } 7807c478bd9Sstevel@tonic-gate if (i == LEFT) eatblk(1); 7817c478bd9Sstevel@tonic-gate } while ((!inblk && (i != '\n')) || (inblk && (i != RIGHT))); 7827c478bd9Sstevel@tonic-gate if (i == '\n') 7837c478bd9Sstevel@tonic-gate nlflg++; 784*e5190c10Smuffin 785*e5190c10Smuffin return (0); 7867c478bd9Sstevel@tonic-gate } 7877c478bd9Sstevel@tonic-gate 7887c478bd9Sstevel@tonic-gate 789*e5190c10Smuffin int 7907c478bd9Sstevel@tonic-gate cmpstr(c) 7917c478bd9Sstevel@tonic-gate tchar c; 7927c478bd9Sstevel@tonic-gate { 793*e5190c10Smuffin int j, delim; 794*e5190c10Smuffin tchar i; 795*e5190c10Smuffin int val; 7967c478bd9Sstevel@tonic-gate int savapts, savapts1, savfont, savfont1, savpts, savpts1; 7977c478bd9Sstevel@tonic-gate tchar string[1280]; 798*e5190c10Smuffin tchar *sp; 7997c478bd9Sstevel@tonic-gate 8007c478bd9Sstevel@tonic-gate if (ismot(c)) 8017c478bd9Sstevel@tonic-gate return(0); 8027c478bd9Sstevel@tonic-gate delim = cbits(c); 8037c478bd9Sstevel@tonic-gate savapts = apts; 8047c478bd9Sstevel@tonic-gate savapts1 = apts1; 8057c478bd9Sstevel@tonic-gate savfont = font; 8067c478bd9Sstevel@tonic-gate savfont1 = font1; 8077c478bd9Sstevel@tonic-gate savpts = pts; 8087c478bd9Sstevel@tonic-gate savpts1 = pts1; 8097c478bd9Sstevel@tonic-gate sp = string; 8107c478bd9Sstevel@tonic-gate while ((j = cbits(i = getch()))!=delim && j!='\n' && sp<&string[1280-1]) 8117c478bd9Sstevel@tonic-gate *sp++ = i; 8127c478bd9Sstevel@tonic-gate if (sp >= string + 1280) { 8137c478bd9Sstevel@tonic-gate errprint(gettext("too-long string compare.")); 8147c478bd9Sstevel@tonic-gate edone(0100); 8157c478bd9Sstevel@tonic-gate } 8167c478bd9Sstevel@tonic-gate if (nlflg) { 8177c478bd9Sstevel@tonic-gate val = sp==string; 8187c478bd9Sstevel@tonic-gate goto rtn; 8197c478bd9Sstevel@tonic-gate } 8207c478bd9Sstevel@tonic-gate *sp++ = 0; 8217c478bd9Sstevel@tonic-gate apts = savapts; 8227c478bd9Sstevel@tonic-gate apts1 = savapts1; 8237c478bd9Sstevel@tonic-gate font = savfont; 8247c478bd9Sstevel@tonic-gate font1 = savfont1; 8257c478bd9Sstevel@tonic-gate pts = savpts; 8267c478bd9Sstevel@tonic-gate pts1 = savpts1; 8277c478bd9Sstevel@tonic-gate mchbits(); 8287c478bd9Sstevel@tonic-gate val = 1; 8297c478bd9Sstevel@tonic-gate sp = string; 8307c478bd9Sstevel@tonic-gate while ((j = cbits(i = getch())) != delim && j != '\n') { 8317c478bd9Sstevel@tonic-gate if (*sp != i) { 8327c478bd9Sstevel@tonic-gate eat(delim); 8337c478bd9Sstevel@tonic-gate val = 0; 8347c478bd9Sstevel@tonic-gate goto rtn; 8357c478bd9Sstevel@tonic-gate } 8367c478bd9Sstevel@tonic-gate sp++; 8377c478bd9Sstevel@tonic-gate } 8387c478bd9Sstevel@tonic-gate if (*sp) 8397c478bd9Sstevel@tonic-gate val = 0; 8407c478bd9Sstevel@tonic-gate rtn: 8417c478bd9Sstevel@tonic-gate apts = savapts; 8427c478bd9Sstevel@tonic-gate apts1 = savapts1; 8437c478bd9Sstevel@tonic-gate font = savfont; 8447c478bd9Sstevel@tonic-gate font1 = savfont1; 8457c478bd9Sstevel@tonic-gate pts = savpts; 8467c478bd9Sstevel@tonic-gate pts1 = savpts1; 8477c478bd9Sstevel@tonic-gate mchbits(); 8487c478bd9Sstevel@tonic-gate return(val); 8497c478bd9Sstevel@tonic-gate } 8507c478bd9Sstevel@tonic-gate 8517c478bd9Sstevel@tonic-gate 852*e5190c10Smuffin int 8537c478bd9Sstevel@tonic-gate caserd() 8547c478bd9Sstevel@tonic-gate { 8557c478bd9Sstevel@tonic-gate 8567c478bd9Sstevel@tonic-gate lgf++; 8577c478bd9Sstevel@tonic-gate skip(); 8587c478bd9Sstevel@tonic-gate getname(); 8597c478bd9Sstevel@tonic-gate if (!iflg) { 8607c478bd9Sstevel@tonic-gate if (quiet) { 8617c478bd9Sstevel@tonic-gate #ifdef NROFF 8627c478bd9Sstevel@tonic-gate echo_off(); 8637c478bd9Sstevel@tonic-gate flusho(); 864*e5190c10Smuffin #endif /* NROFF */ 8657c478bd9Sstevel@tonic-gate fdprintf(stderr, "\007"); /*bell*/ 8667c478bd9Sstevel@tonic-gate } else { 8677c478bd9Sstevel@tonic-gate if (nextf[0]) { 8687c478bd9Sstevel@tonic-gate fdprintf(stderr, "%s:", nextf); 8697c478bd9Sstevel@tonic-gate } else { 8707c478bd9Sstevel@tonic-gate fdprintf(stderr, "\007"); /*bell*/ 8717c478bd9Sstevel@tonic-gate } 8727c478bd9Sstevel@tonic-gate } 8737c478bd9Sstevel@tonic-gate } 8747c478bd9Sstevel@tonic-gate collect(); 8757c478bd9Sstevel@tonic-gate tty++; 8767c478bd9Sstevel@tonic-gate pushi(NBLIST*BLK, PAIR('r','d')); 877*e5190c10Smuffin 878*e5190c10Smuffin return (0); 8797c478bd9Sstevel@tonic-gate } 8807c478bd9Sstevel@tonic-gate 8817c478bd9Sstevel@tonic-gate 882*e5190c10Smuffin int 8837c478bd9Sstevel@tonic-gate rdtty() 8847c478bd9Sstevel@tonic-gate { 8857c478bd9Sstevel@tonic-gate char onechar; 8867c478bd9Sstevel@tonic-gate #ifdef EUC 8877c478bd9Sstevel@tonic-gate #ifdef NROFF 8887c478bd9Sstevel@tonic-gate int i, n, col_index; 8897c478bd9Sstevel@tonic-gate #endif /* NROFF */ 8907c478bd9Sstevel@tonic-gate #endif /* EUC */ 8917c478bd9Sstevel@tonic-gate 8927c478bd9Sstevel@tonic-gate onechar = 0; 8937c478bd9Sstevel@tonic-gate if (read(0, &onechar, 1) == 1) { 8947c478bd9Sstevel@tonic-gate if (onechar == '\n') 8957c478bd9Sstevel@tonic-gate tty++; 8967c478bd9Sstevel@tonic-gate else 8977c478bd9Sstevel@tonic-gate tty = 1; 8987c478bd9Sstevel@tonic-gate #ifndef EUC 8997c478bd9Sstevel@tonic-gate if (tty != 3) 9007c478bd9Sstevel@tonic-gate return(onechar); 9017c478bd9Sstevel@tonic-gate #else 9027c478bd9Sstevel@tonic-gate #ifndef NROFF 9037c478bd9Sstevel@tonic-gate if (tty != 3) 9047c478bd9Sstevel@tonic-gate return(onechar); 9057c478bd9Sstevel@tonic-gate #else 9067c478bd9Sstevel@tonic-gate if (tty != 3) { 9077c478bd9Sstevel@tonic-gate if (!multi_locale) 9087c478bd9Sstevel@tonic-gate return(onechar); 9097c478bd9Sstevel@tonic-gate i = onechar & 0377; 9107c478bd9Sstevel@tonic-gate *mbbuf1p++ = i; 9117c478bd9Sstevel@tonic-gate *mbbuf1p = 0; 9127c478bd9Sstevel@tonic-gate if ((n = mbtowc(&twc, mbbuf1, MB_CUR_MAX)) <= 0) { 9137c478bd9Sstevel@tonic-gate if (mbbuf1p >= mbbuf1 + MB_CUR_MAX) { 9147c478bd9Sstevel@tonic-gate i &= ~(MBMASK | CSMASK); 9157c478bd9Sstevel@tonic-gate twc = 0; 9167c478bd9Sstevel@tonic-gate mbbuf1p = mbbuf1; 9177c478bd9Sstevel@tonic-gate *mbbuf1p = 0; 9187c478bd9Sstevel@tonic-gate } else { 9197c478bd9Sstevel@tonic-gate i |= (MIDDLEOFMB); 9207c478bd9Sstevel@tonic-gate } 9217c478bd9Sstevel@tonic-gate } else { 9227c478bd9Sstevel@tonic-gate if (n > 1) 9237c478bd9Sstevel@tonic-gate i |= (LASTOFMB); 9247c478bd9Sstevel@tonic-gate else 9257c478bd9Sstevel@tonic-gate i |= (BYTE_CHR); 9267c478bd9Sstevel@tonic-gate if (isascii(twc)) { 9277c478bd9Sstevel@tonic-gate col_index = 0; 9287c478bd9Sstevel@tonic-gate } else { 9297c478bd9Sstevel@tonic-gate if ((col_index = wcwidth(twc)) < 0) 9307c478bd9Sstevel@tonic-gate col_index = 0; 9317c478bd9Sstevel@tonic-gate } 9327c478bd9Sstevel@tonic-gate setcsbits(i, col_index); 9337c478bd9Sstevel@tonic-gate twc = 0; 9347c478bd9Sstevel@tonic-gate mbbuf1p = mbbuf1; 9357c478bd9Sstevel@tonic-gate } 9367c478bd9Sstevel@tonic-gate return(i); 9377c478bd9Sstevel@tonic-gate } 9387c478bd9Sstevel@tonic-gate #endif /* NROFF */ 9397c478bd9Sstevel@tonic-gate #endif /* EUC */ 9407c478bd9Sstevel@tonic-gate } 9417c478bd9Sstevel@tonic-gate popi(); 9427c478bd9Sstevel@tonic-gate tty = 0; 9437c478bd9Sstevel@tonic-gate #ifdef NROFF 9447c478bd9Sstevel@tonic-gate if (quiet) 9457c478bd9Sstevel@tonic-gate echo_on(); 946*e5190c10Smuffin #endif /* NROFF */ 9477c478bd9Sstevel@tonic-gate return(0); 9487c478bd9Sstevel@tonic-gate } 9497c478bd9Sstevel@tonic-gate 9507c478bd9Sstevel@tonic-gate 951*e5190c10Smuffin int 9527c478bd9Sstevel@tonic-gate caseec() 9537c478bd9Sstevel@tonic-gate { 9547c478bd9Sstevel@tonic-gate eschar = chget('\\'); 955*e5190c10Smuffin 956*e5190c10Smuffin return (0); 9577c478bd9Sstevel@tonic-gate } 9587c478bd9Sstevel@tonic-gate 9597c478bd9Sstevel@tonic-gate 960*e5190c10Smuffin int 9617c478bd9Sstevel@tonic-gate caseeo() 9627c478bd9Sstevel@tonic-gate { 9637c478bd9Sstevel@tonic-gate eschar = 0; 964*e5190c10Smuffin 965*e5190c10Smuffin return (0); 9667c478bd9Sstevel@tonic-gate } 9677c478bd9Sstevel@tonic-gate 9687c478bd9Sstevel@tonic-gate 969*e5190c10Smuffin int 9707c478bd9Sstevel@tonic-gate caseta() 9717c478bd9Sstevel@tonic-gate { 972*e5190c10Smuffin int i; 9737c478bd9Sstevel@tonic-gate 9747c478bd9Sstevel@tonic-gate tabtab[0] = nonumb = 0; 9757c478bd9Sstevel@tonic-gate for (i = 0; ((i < (NTAB - 1)) && !nonumb); i++) { 9767c478bd9Sstevel@tonic-gate if (skip()) 9777c478bd9Sstevel@tonic-gate break; 9787c478bd9Sstevel@tonic-gate tabtab[i] = max(hnumb(&tabtab[max(i-1,0)]), 0) & TABMASK; 9797c478bd9Sstevel@tonic-gate if (!nonumb) 9807c478bd9Sstevel@tonic-gate switch (cbits(ch)) { 9817c478bd9Sstevel@tonic-gate case 'C': 9827c478bd9Sstevel@tonic-gate tabtab[i] |= CTAB; 9837c478bd9Sstevel@tonic-gate break; 9847c478bd9Sstevel@tonic-gate case 'R': 9857c478bd9Sstevel@tonic-gate tabtab[i] |= RTAB; 9867c478bd9Sstevel@tonic-gate break; 9877c478bd9Sstevel@tonic-gate default: /*includes L*/ 9887c478bd9Sstevel@tonic-gate break; 9897c478bd9Sstevel@tonic-gate } 9907c478bd9Sstevel@tonic-gate nonumb = ch = 0; 9917c478bd9Sstevel@tonic-gate } 9927c478bd9Sstevel@tonic-gate tabtab[i] = 0; 993*e5190c10Smuffin 994*e5190c10Smuffin return (0); 9957c478bd9Sstevel@tonic-gate } 9967c478bd9Sstevel@tonic-gate 9977c478bd9Sstevel@tonic-gate 998*e5190c10Smuffin int 9997c478bd9Sstevel@tonic-gate casene() 10007c478bd9Sstevel@tonic-gate { 1001*e5190c10Smuffin int i, j; 10027c478bd9Sstevel@tonic-gate 10037c478bd9Sstevel@tonic-gate skip(); 10047c478bd9Sstevel@tonic-gate i = vnumb((int *)0); 10057c478bd9Sstevel@tonic-gate if (nonumb) 10067c478bd9Sstevel@tonic-gate i = lss; 10077c478bd9Sstevel@tonic-gate if (i > (j = findt1())) { 10087c478bd9Sstevel@tonic-gate i = lss; 10097c478bd9Sstevel@tonic-gate lss = j; 10107c478bd9Sstevel@tonic-gate dip->nls = 0; 10117c478bd9Sstevel@tonic-gate newline(0); 10127c478bd9Sstevel@tonic-gate lss = i; 10137c478bd9Sstevel@tonic-gate } 1014*e5190c10Smuffin 1015*e5190c10Smuffin return (0); 10167c478bd9Sstevel@tonic-gate } 10177c478bd9Sstevel@tonic-gate 10187c478bd9Sstevel@tonic-gate 1019*e5190c10Smuffin int 10207c478bd9Sstevel@tonic-gate casetr() 10217c478bd9Sstevel@tonic-gate { 1022*e5190c10Smuffin int i, j; 10237c478bd9Sstevel@tonic-gate tchar k; 10247c478bd9Sstevel@tonic-gate 10257c478bd9Sstevel@tonic-gate lgf++; 10267c478bd9Sstevel@tonic-gate skip(); 10277c478bd9Sstevel@tonic-gate while ((i = cbits(k=getch())) != '\n') { 10287c478bd9Sstevel@tonic-gate if (ismot(k)) 1029*e5190c10Smuffin return (0); 10307c478bd9Sstevel@tonic-gate if (ismot(k = getch())) 1031*e5190c10Smuffin return (0); 10327c478bd9Sstevel@tonic-gate if ((j = cbits(k)) == '\n') 10337c478bd9Sstevel@tonic-gate j = ' '; 10347c478bd9Sstevel@tonic-gate trtab[i] = j; 10357c478bd9Sstevel@tonic-gate } 1036*e5190c10Smuffin 1037*e5190c10Smuffin return (0); 10387c478bd9Sstevel@tonic-gate } 10397c478bd9Sstevel@tonic-gate 10407c478bd9Sstevel@tonic-gate 1041*e5190c10Smuffin int 10427c478bd9Sstevel@tonic-gate casecu() 10437c478bd9Sstevel@tonic-gate { 10447c478bd9Sstevel@tonic-gate cu++; 10457c478bd9Sstevel@tonic-gate caseul(); 1046*e5190c10Smuffin 1047*e5190c10Smuffin return (0); 10487c478bd9Sstevel@tonic-gate } 10497c478bd9Sstevel@tonic-gate 10507c478bd9Sstevel@tonic-gate 1051*e5190c10Smuffin int 10527c478bd9Sstevel@tonic-gate caseul() 10537c478bd9Sstevel@tonic-gate { 1054*e5190c10Smuffin int i; 10557c478bd9Sstevel@tonic-gate 10567c478bd9Sstevel@tonic-gate noscale++; 10577c478bd9Sstevel@tonic-gate if (skip()) 10587c478bd9Sstevel@tonic-gate i = 1; 10597c478bd9Sstevel@tonic-gate else 10607c478bd9Sstevel@tonic-gate i = atoi(); 10617c478bd9Sstevel@tonic-gate if (ul && (i == 0)) { 10627c478bd9Sstevel@tonic-gate font = sfont; 10637c478bd9Sstevel@tonic-gate ul = cu = 0; 10647c478bd9Sstevel@tonic-gate } 10657c478bd9Sstevel@tonic-gate if (i) { 10667c478bd9Sstevel@tonic-gate if (!ul) { 10677c478bd9Sstevel@tonic-gate sfont = font; 10687c478bd9Sstevel@tonic-gate font = ulfont; 10697c478bd9Sstevel@tonic-gate } 10707c478bd9Sstevel@tonic-gate ul = i; 10717c478bd9Sstevel@tonic-gate } 10727c478bd9Sstevel@tonic-gate noscale = 0; 10737c478bd9Sstevel@tonic-gate mchbits(); 1074*e5190c10Smuffin 1075*e5190c10Smuffin return (0); 10767c478bd9Sstevel@tonic-gate } 10777c478bd9Sstevel@tonic-gate 10787c478bd9Sstevel@tonic-gate 1079*e5190c10Smuffin int 10807c478bd9Sstevel@tonic-gate caseuf() 10817c478bd9Sstevel@tonic-gate { 1082*e5190c10Smuffin int i, j; 10837c478bd9Sstevel@tonic-gate 10847c478bd9Sstevel@tonic-gate if (skip() || !(i = getrq()) || i == 'S' || (j = findft(i)) == -1) 10857c478bd9Sstevel@tonic-gate ulfont = ULFONT; /*default underline position*/ 10867c478bd9Sstevel@tonic-gate else 10877c478bd9Sstevel@tonic-gate ulfont = j; 10887c478bd9Sstevel@tonic-gate #ifdef NROFF 10897c478bd9Sstevel@tonic-gate if (ulfont == FT) 10907c478bd9Sstevel@tonic-gate ulfont = ULFONT; 10917c478bd9Sstevel@tonic-gate #endif 1092*e5190c10Smuffin return (0); 10937c478bd9Sstevel@tonic-gate } 10947c478bd9Sstevel@tonic-gate 10957c478bd9Sstevel@tonic-gate 1096*e5190c10Smuffin int 10977c478bd9Sstevel@tonic-gate caseit() 10987c478bd9Sstevel@tonic-gate { 1099*e5190c10Smuffin int i; 11007c478bd9Sstevel@tonic-gate 11017c478bd9Sstevel@tonic-gate lgf++; 11027c478bd9Sstevel@tonic-gate it = itmac = 0; 11037c478bd9Sstevel@tonic-gate noscale++; 11047c478bd9Sstevel@tonic-gate skip(); 11057c478bd9Sstevel@tonic-gate i = atoi(); 11067c478bd9Sstevel@tonic-gate skip(); 11077c478bd9Sstevel@tonic-gate if (!nonumb && (itmac = getrq())) 11087c478bd9Sstevel@tonic-gate it = i; 11097c478bd9Sstevel@tonic-gate noscale = 0; 1110*e5190c10Smuffin 1111*e5190c10Smuffin return (0); 11127c478bd9Sstevel@tonic-gate } 11137c478bd9Sstevel@tonic-gate 11147c478bd9Sstevel@tonic-gate 1115*e5190c10Smuffin int 11167c478bd9Sstevel@tonic-gate casemc() 11177c478bd9Sstevel@tonic-gate { 1118*e5190c10Smuffin int i; 11197c478bd9Sstevel@tonic-gate 11207c478bd9Sstevel@tonic-gate if (icf > 1) 11217c478bd9Sstevel@tonic-gate ic = 0; 11227c478bd9Sstevel@tonic-gate icf = 0; 11237c478bd9Sstevel@tonic-gate if (skip()) 1124*e5190c10Smuffin return (0); 11257c478bd9Sstevel@tonic-gate ic = getch(); 11267c478bd9Sstevel@tonic-gate icf = 1; 11277c478bd9Sstevel@tonic-gate skip(); 11287c478bd9Sstevel@tonic-gate i = max(hnumb((int *)0), 0); 11297c478bd9Sstevel@tonic-gate if (!nonumb) 11307c478bd9Sstevel@tonic-gate ics = i; 1131*e5190c10Smuffin 1132*e5190c10Smuffin return (0); 11337c478bd9Sstevel@tonic-gate } 11347c478bd9Sstevel@tonic-gate 11357c478bd9Sstevel@tonic-gate 1136*e5190c10Smuffin int 11377c478bd9Sstevel@tonic-gate casemk() 11387c478bd9Sstevel@tonic-gate { 1139*e5190c10Smuffin int i, j; 11407c478bd9Sstevel@tonic-gate 11417c478bd9Sstevel@tonic-gate if (dip != d) 11427c478bd9Sstevel@tonic-gate j = dip->dnl; 11437c478bd9Sstevel@tonic-gate else 11447c478bd9Sstevel@tonic-gate j = numtab[NL].val; 11457c478bd9Sstevel@tonic-gate if (skip()) { 11467c478bd9Sstevel@tonic-gate dip->mkline = j; 1147*e5190c10Smuffin return (0); 11487c478bd9Sstevel@tonic-gate } 11497c478bd9Sstevel@tonic-gate if ((i = getrq()) == 0) 1150*e5190c10Smuffin return (0); 11517c478bd9Sstevel@tonic-gate numtab[findr(i)].val = j; 1152*e5190c10Smuffin 1153*e5190c10Smuffin return (0); 11547c478bd9Sstevel@tonic-gate } 11557c478bd9Sstevel@tonic-gate 11567c478bd9Sstevel@tonic-gate 1157*e5190c10Smuffin int 11587c478bd9Sstevel@tonic-gate casesv() 11597c478bd9Sstevel@tonic-gate { 1160*e5190c10Smuffin int i; 11617c478bd9Sstevel@tonic-gate 11627c478bd9Sstevel@tonic-gate skip(); 11637c478bd9Sstevel@tonic-gate if ((i = vnumb((int *)0)) < 0) 1164*e5190c10Smuffin return (0); 11657c478bd9Sstevel@tonic-gate if (nonumb) 11667c478bd9Sstevel@tonic-gate i = 1; 11677c478bd9Sstevel@tonic-gate sv += i; 11687c478bd9Sstevel@tonic-gate caseos(); 1169*e5190c10Smuffin 1170*e5190c10Smuffin return (0); 11717c478bd9Sstevel@tonic-gate } 11727c478bd9Sstevel@tonic-gate 11737c478bd9Sstevel@tonic-gate 1174*e5190c10Smuffin int 11757c478bd9Sstevel@tonic-gate caseos() 11767c478bd9Sstevel@tonic-gate { 1177*e5190c10Smuffin int savlss; 11787c478bd9Sstevel@tonic-gate 11797c478bd9Sstevel@tonic-gate if (sv <= findt1()) { 11807c478bd9Sstevel@tonic-gate savlss = lss; 11817c478bd9Sstevel@tonic-gate lss = sv; 11827c478bd9Sstevel@tonic-gate newline(0); 11837c478bd9Sstevel@tonic-gate lss = savlss; 11847c478bd9Sstevel@tonic-gate sv = 0; 11857c478bd9Sstevel@tonic-gate } 1186*e5190c10Smuffin 1187*e5190c10Smuffin return (0); 11887c478bd9Sstevel@tonic-gate } 11897c478bd9Sstevel@tonic-gate 11907c478bd9Sstevel@tonic-gate 1191*e5190c10Smuffin int 11927c478bd9Sstevel@tonic-gate casenm() 11937c478bd9Sstevel@tonic-gate { 1194*e5190c10Smuffin int i; 11957c478bd9Sstevel@tonic-gate 11967c478bd9Sstevel@tonic-gate lnmod = nn = 0; 11977c478bd9Sstevel@tonic-gate if (skip()) 1198*e5190c10Smuffin return (0); 11997c478bd9Sstevel@tonic-gate lnmod++; 12007c478bd9Sstevel@tonic-gate noscale++; 12017c478bd9Sstevel@tonic-gate i = inumb(&numtab[LN].val); 12027c478bd9Sstevel@tonic-gate if (!nonumb) 12037c478bd9Sstevel@tonic-gate numtab[LN].val = max(i, 0); 12047c478bd9Sstevel@tonic-gate getnm(&ndf, 1); 12057c478bd9Sstevel@tonic-gate getnm(&nms, 0); 12067c478bd9Sstevel@tonic-gate getnm(&ni, 0); 12077c478bd9Sstevel@tonic-gate noscale = 0; 12087c478bd9Sstevel@tonic-gate nmbits = chbits; 1209*e5190c10Smuffin 1210*e5190c10Smuffin return (0); 12117c478bd9Sstevel@tonic-gate } 12127c478bd9Sstevel@tonic-gate 12137c478bd9Sstevel@tonic-gate 1214*e5190c10Smuffin int 12157c478bd9Sstevel@tonic-gate getnm(p, min) 12167c478bd9Sstevel@tonic-gate int *p, min; 12177c478bd9Sstevel@tonic-gate { 1218*e5190c10Smuffin int i; 12197c478bd9Sstevel@tonic-gate 12207c478bd9Sstevel@tonic-gate eat(' '); 12217c478bd9Sstevel@tonic-gate if (skip()) 1222*e5190c10Smuffin return (0); 12237c478bd9Sstevel@tonic-gate i = atoi(); 12247c478bd9Sstevel@tonic-gate if (nonumb) 1225*e5190c10Smuffin return (0); 12267c478bd9Sstevel@tonic-gate *p = max(i, min); 1227*e5190c10Smuffin 1228*e5190c10Smuffin return (0); 12297c478bd9Sstevel@tonic-gate } 12307c478bd9Sstevel@tonic-gate 12317c478bd9Sstevel@tonic-gate 1232*e5190c10Smuffin int 12337c478bd9Sstevel@tonic-gate casenn() 12347c478bd9Sstevel@tonic-gate { 12357c478bd9Sstevel@tonic-gate noscale++; 12367c478bd9Sstevel@tonic-gate skip(); 12377c478bd9Sstevel@tonic-gate nn = max(atoi(), 1); 12387c478bd9Sstevel@tonic-gate noscale = 0; 1239*e5190c10Smuffin 1240*e5190c10Smuffin return (0); 12417c478bd9Sstevel@tonic-gate } 12427c478bd9Sstevel@tonic-gate 12437c478bd9Sstevel@tonic-gate 1244*e5190c10Smuffin int 12457c478bd9Sstevel@tonic-gate caseab() 12467c478bd9Sstevel@tonic-gate { 12477c478bd9Sstevel@tonic-gate casetm(1); 12487c478bd9Sstevel@tonic-gate done3(0); 1249*e5190c10Smuffin 1250*e5190c10Smuffin return (0); 12517c478bd9Sstevel@tonic-gate } 12527c478bd9Sstevel@tonic-gate 12537c478bd9Sstevel@tonic-gate 12547c478bd9Sstevel@tonic-gate #ifdef NROFF 12557c478bd9Sstevel@tonic-gate /* 12567c478bd9Sstevel@tonic-gate * The following routines are concerned with setting terminal options. 12577c478bd9Sstevel@tonic-gate * The manner of doing this differs between research/Berkeley systems 12587c478bd9Sstevel@tonic-gate * and UNIX System V systems (i.e. DOCUMENTER'S WORKBENCH) 12597c478bd9Sstevel@tonic-gate * The distinction is controlled by the #define'd variable USG, 12607c478bd9Sstevel@tonic-gate * which must be set by System V users. 12617c478bd9Sstevel@tonic-gate */ 12627c478bd9Sstevel@tonic-gate 12637c478bd9Sstevel@tonic-gate 12647c478bd9Sstevel@tonic-gate #ifdef USG 12657c478bd9Sstevel@tonic-gate #include <termio.h> 12667c478bd9Sstevel@tonic-gate #define ECHO_USG (ECHO | ECHOE | ECHOK | ECHONL) 12677c478bd9Sstevel@tonic-gate struct termio ttys; 12687c478bd9Sstevel@tonic-gate #else 12697c478bd9Sstevel@tonic-gate #include <sgtty.h> 12707c478bd9Sstevel@tonic-gate struct sgttyb ttys[2]; 1271*e5190c10Smuffin #endif /* USG */ 12727c478bd9Sstevel@tonic-gate 12737c478bd9Sstevel@tonic-gate int ttysave[2] = {-1, -1}; 12747c478bd9Sstevel@tonic-gate 1275*e5190c10Smuffin int 12767c478bd9Sstevel@tonic-gate save_tty() /*save any tty settings that may be changed*/ 12777c478bd9Sstevel@tonic-gate { 12787c478bd9Sstevel@tonic-gate 12797c478bd9Sstevel@tonic-gate #ifdef USG 12807c478bd9Sstevel@tonic-gate if (ioctl(0, TCGETA, &ttys) >= 0) 12817c478bd9Sstevel@tonic-gate ttysave[0] = ttys.c_lflag; 12827c478bd9Sstevel@tonic-gate #else 12837c478bd9Sstevel@tonic-gate if (gtty(0, &ttys[0]) >= 0) 12847c478bd9Sstevel@tonic-gate ttysave[0] = ttys[0].sg_flags; 12857c478bd9Sstevel@tonic-gate if (gtty(1, &ttys[1]) >= 0) 12867c478bd9Sstevel@tonic-gate ttysave[1] = ttys[1].sg_flags; 1287*e5190c10Smuffin #endif /* USG */ 12887c478bd9Sstevel@tonic-gate 1289*e5190c10Smuffin return (0); 12907c478bd9Sstevel@tonic-gate } 12917c478bd9Sstevel@tonic-gate 12927c478bd9Sstevel@tonic-gate 1293*e5190c10Smuffin int 12947c478bd9Sstevel@tonic-gate restore_tty() /*restore tty settings from beginning*/ 12957c478bd9Sstevel@tonic-gate { 12967c478bd9Sstevel@tonic-gate 12977c478bd9Sstevel@tonic-gate if (ttysave[0] != -1) { 12987c478bd9Sstevel@tonic-gate #ifdef USG 12997c478bd9Sstevel@tonic-gate ttys.c_lflag = ttysave[0]; 13007c478bd9Sstevel@tonic-gate ioctl(0, TCSETAW, &ttys); 13017c478bd9Sstevel@tonic-gate #else 13027c478bd9Sstevel@tonic-gate ttys[0].sg_flags = ttysave[0]; 13037c478bd9Sstevel@tonic-gate stty(0, &ttys[0]); 13047c478bd9Sstevel@tonic-gate } 13057c478bd9Sstevel@tonic-gate if (ttysave[1] != -1) { 13067c478bd9Sstevel@tonic-gate ttys[1].sg_flags = ttysave[1]; 13077c478bd9Sstevel@tonic-gate stty(1, &ttys[1]); 1308*e5190c10Smuffin #endif /* USG */ 13097c478bd9Sstevel@tonic-gate } 1310*e5190c10Smuffin 1311*e5190c10Smuffin return (0); 13127c478bd9Sstevel@tonic-gate } 13137c478bd9Sstevel@tonic-gate 13147c478bd9Sstevel@tonic-gate 1315*e5190c10Smuffin int 13167c478bd9Sstevel@tonic-gate set_tty() /*this replaces the use of bset and breset*/ 13177c478bd9Sstevel@tonic-gate { 13187c478bd9Sstevel@tonic-gate 13197c478bd9Sstevel@tonic-gate #ifndef USG /*for research/BSD only, reset CRMOD*/ 13207c478bd9Sstevel@tonic-gate if (ttysave[1] == -1) 13217c478bd9Sstevel@tonic-gate save_tty(); 13227c478bd9Sstevel@tonic-gate if (ttysave[1] != -1) { 13237c478bd9Sstevel@tonic-gate ttys[1].sg_flags &= ~CRMOD; 13247c478bd9Sstevel@tonic-gate stty(1, &ttys[1]); 13257c478bd9Sstevel@tonic-gate } 1326*e5190c10Smuffin #endif /* USG */ 13277c478bd9Sstevel@tonic-gate 1328*e5190c10Smuffin return (0); 13297c478bd9Sstevel@tonic-gate } 13307c478bd9Sstevel@tonic-gate 13317c478bd9Sstevel@tonic-gate 1332*e5190c10Smuffin int 13337c478bd9Sstevel@tonic-gate echo_off() /*turn off ECHO for .rd in "-q" mode*/ 13347c478bd9Sstevel@tonic-gate { 13357c478bd9Sstevel@tonic-gate if (ttysave[0] == -1) 1336*e5190c10Smuffin return (0); 13377c478bd9Sstevel@tonic-gate 13387c478bd9Sstevel@tonic-gate #ifdef USG 13397c478bd9Sstevel@tonic-gate ttys.c_lflag &= ~ECHO_USG; 13407c478bd9Sstevel@tonic-gate ioctl(0, TCSETAW, &ttys); 13417c478bd9Sstevel@tonic-gate #else 13427c478bd9Sstevel@tonic-gate ttys[0].sg_flags &= ~ECHO; 13437c478bd9Sstevel@tonic-gate stty(0, &ttys[0]); 1344*e5190c10Smuffin #endif /* USG */ 1345*e5190c10Smuffin 1346*e5190c10Smuffin return (0); 13477c478bd9Sstevel@tonic-gate 13487c478bd9Sstevel@tonic-gate } 13497c478bd9Sstevel@tonic-gate 13507c478bd9Sstevel@tonic-gate 1351*e5190c10Smuffin int 13527c478bd9Sstevel@tonic-gate echo_on() /*restore ECHO after .rd in "-q" mode*/ 13537c478bd9Sstevel@tonic-gate { 13547c478bd9Sstevel@tonic-gate if (ttysave[0] == -1) 1355*e5190c10Smuffin return (0); 13567c478bd9Sstevel@tonic-gate 13577c478bd9Sstevel@tonic-gate #ifdef USG 13587c478bd9Sstevel@tonic-gate ttys.c_lflag |= ECHO_USG; 13597c478bd9Sstevel@tonic-gate ioctl(0, TCSETAW, &ttys); 13607c478bd9Sstevel@tonic-gate #else 13617c478bd9Sstevel@tonic-gate ttys[0].sg_flags |= ECHO; 13627c478bd9Sstevel@tonic-gate stty(0, &ttys[0]); 1363*e5190c10Smuffin #endif /* USG */ 13647c478bd9Sstevel@tonic-gate 1365*e5190c10Smuffin return (0); 13667c478bd9Sstevel@tonic-gate } 1367*e5190c10Smuffin #endif /* NROFF */ 1368