1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 1997 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 /* Copyright (c) 1988 AT&T */ 28 /* All Rights Reserved */ 29 30 /* 31 * University Copyright- Copyright (c) 1982, 1986, 1988 32 * The Regents of the University of California 33 * All Rights Reserved 34 * 35 * University Acknowledgment- Portions of this document are derived from 36 * software developed by the University of California, Berkeley, and its 37 * contributors. 38 */ 39 40 #pragma ident "%Z%%M% %I% %E% SMI" 41 42 /*LINTLIBRARY*/ 43 44 #include <stdlib.h> 45 #include <signal.h> 46 #include <sys/types.h> 47 #include "curses_inc.h" 48 49 /* 50 * This routine initializes the current and standard screen, 51 * and sets up the terminal. In case of error, initscr aborts. 52 * If you want an error status returned, call 53 * scp = newscreen(getenv("TERM"), 0, 0, 0, stdout, stdin); 54 */ 55 56 WINDOW * 57 initscr(void) 58 { 59 #ifdef SIGPOLL 60 void (*savsignal)(int); 61 extern void _ccleanup(int); 62 #else /* SIGPOLL */ 63 int (*savsignal)(); 64 extern int _ccleanup(int); 65 #endif /* SIGPOLL */ 66 67 #ifdef SIGTSTP 68 extern void _tstp(int); 69 #endif /* SIGTSTP */ 70 71 static char i_called_before = FALSE; 72 73 /* Free structures we are about to throw away so we can reuse the memory. */ 74 75 if (i_called_before && SP) { 76 delscreen(SP); 77 SP = NULL; 78 } 79 if (newscreen(NULL, 0, 0, 0, stdout, stdin) == NULL) { 80 (void) reset_shell_mode(); 81 if (term_errno != -1) 82 termerr(); 83 else 84 curserr(); 85 exit(1); 86 } 87 88 #ifdef DEBUG 89 if (outf) 90 fprintf(outf, "initscr: term = %s\n", SP); 91 #endif /* DEBUG */ 92 i_called_before = TRUE; 93 94 #ifdef SIGTSTP 95 /*LINTED*/ 96 if ((savsignal = signal(SIGTSTP, SIG_IGN)) == SIG_DFL) 97 (void) signal(SIGTSTP, _tstp); 98 else 99 (void) signal(SIGTSTP, savsignal); 100 #endif /* SIGTSTP */ 101 /*LINTED*/ 102 if ((savsignal = signal(SIGINT, SIG_IGN)) == SIG_DFL) 103 (void) signal(SIGINT, _ccleanup); 104 else 105 (void) signal(SIGINT, savsignal); 106 107 /*LINTED*/ 108 if ((savsignal = signal(SIGQUIT, SIG_IGN)) == SIG_DFL) 109 (void) signal(SIGQUIT, _ccleanup); 110 else 111 (void) signal(SIGQUIT, savsignal); 112 113 return (stdscr); 114 } 115