termcap.c revision 17375
1/* 2 * Copyright (c) 1994, Paul Richards. 3 * 4 * All rights reserved. 5 * 6 * This software may be used, modified, copied, distributed, and sold, in both 7 * source and binary form provided that the above copyright and these terms 8 * are retained, verbatim, as the first lines of this file. Under no 9 * circumstances is the author responsible for the proper functioning of this 10 * software, nor does the author assume any responsibility for damages 11 * incurred with its use. 12 */ 13 14#include <stdio.h> 15#include <stdlib.h> 16#include <string.h> 17#include <unistd.h> 18#include <stdarg.h> 19#include <fcntl.h> 20#include <sys/errno.h> 21#include <sys/ioctl.h> 22#include <machine/console.h> 23 24#include "sysinstall.h" 25 26#define VTY_STATUS_LINE 24 27#define TTY_STATUS_LINE 23 28 29int 30set_termcap(void) 31{ 32 char *term; 33 int stat; 34 struct ttysize ts; 35 36 OnVTY = FALSE; 37 term = getenv("TERM"); 38 stat = ioctl(STDERR_FILENO, GIO_COLOR, &ColorDisplay); 39 40 if (getpid() != 1) { 41 DebugFD = open("sysinstall.debug", O_WRONLY|O_CREAT|O_TRUNC, 0644); 42 if (DebugFD < 0) 43 DebugFD = open("/dev/null", O_RDWR, 0); 44 } 45 46 if (stat < 0) { 47 if (!term) { 48 if (setenv("TERM", "vt100", 1) < 0) 49 return -1; 50 if (setenv("TERMCAP", termcap_vt100, 1) < 0) 51 return -1; 52 } 53 if (DebugFD == -1) 54 DebugFD = dup(1); 55 } 56 else { 57 int i, on; 58 59 if (getpid() == 1) { 60 DebugFD = open("/dev/ttyv1", O_WRONLY); 61 on = 1; 62 i = ioctl(DebugFD, TIOCCONS, (char *)&on); 63 msgDebug("ioctl(%d, TIOCCONS, NULL) = %d (%s)\n", DebugFD, i, !i ? "success" : strerror(errno)); 64 } 65 if (ColorDisplay) { 66 if (!term) { 67 if (setenv("TERM", "cons25", 1) < 0) 68 return -1; 69 if (setenv("TERMCAP", termcap_cons25, 1) < 0) 70 return -1; 71 } 72 } 73 else { 74 if (!term) { 75 if (setenv("TERM", "cons25-m", 1) < 0) 76 return -1; 77 if (setenv("TERMCAP", termcap_cons25_m, 1) < 0) 78 return -1; 79 } 80 } 81 OnVTY = TRUE; 82 } 83 if (ioctl(0, TIOCGSIZE, &ts) == -1) { 84 msgDebug("Unable to get terminal size - errno %d\n", errno); 85 ts.ts_lines = OnVTY ? VTY_STATUS_LINE : TTY_STATUS_LINE; 86 } 87 StatusLine = ts.ts_lines; 88 return 0; 89} 90