tholm@uvicctr.UUCP (Terrence W. Holm) (06/02/88)
EFTH Minix report #16 - June 1988 - a minimal tset(1) This is an implementation of a minimal tset(1) that we wrote for Minix. Please consider this a public domain program. This tset(1) is only used to find the default device type for log-in's to different ports. Note: You must have termcap(3) and ttyname(3) to compile tset(1). A "man" page is included. echo x - tset.1 gres '^X' '' > tset.1 << '/' XNAME X tset(1) - setup the TERM environment variable X XSYNOPSIS X eval `tset [ device_type ]` X XDESCRIPTION X This command is generally used in a ".profile" script X with no arguments. In this case tset(1) uses the name X of the current port and looks in "/etc/ttytype" to find X the default device type for the port. It will return a X "TERM=..." definition for export. Put the following in X your ".profile" script: X X eval `tset` X X If the optional "device_type" is supplied then tset(1) X will generate a "TERM=device_type" string. However, to X change the current device type it is easier to simply X type the "TERM=..." parameter yourself. X X Tset(1) checks to make sure the device has a description X in "/etc/termcap". X X The command stty(1) should be used to set the terminal X characteristics, for example the "line kill" character. X XFILES X /etc/termcap definitions for termcap(3) X /etc/ttytype device type at each port X XSEE ALSO X stty(1), environ(4), termcap(4), ttytype(4) / echo x - ttytype.4 gres '^X' '' > ttytype.4 << '/' XNAME X ttytype(4) - mapping from terminal ports to type X XSYNOPSIS X /etc/ttytype X XDESCRIPTION X This file contains one line for each terminal port. X The format is: device type, a space and then the port X name (without the "/dev/" prefix), for example: X X minix tty0 X vt100 tty1 X X The tset(1) command uses this file to map a port X name into the appropriate default device descriptor. X XSEE ALSO X tset(1), ttys(4) / echo x - tset.c gres '^X' '' > tset.c << '/' X/****************************************************************/ X/* */ X/* tset(1) */ X/* */ X/* Setup the $TERM environment variable. */ X/* */ X/****************************************************************/ X/* origination 1988-May-6 T. Holm */ X/****************************************************************/ X X X X#include <stdio.h> X X X#define LINE_LENGTH 40 /* Max length in /etc/ttytype */ X#define TC_BUFFER 1024 /* Size of termcap(3) buffer */ X X XFILE *fopen(); Xchar *ttyname(); Xchar *index(); Xchar *getenv(); X X X X X X/****************************************************************/ X/* */ X/* eval `tset [ device_type ]` */ X/* */ X/* "device_type" is the new name for $TERM. If no */ X/* type is supplied then /etc/ttytype is scanned for */ X/* the current port. */ X/* */ X/* This program returns the string: */ X/* */ X/* TERM= . . . */ X/* */ X/****************************************************************/ X/* */ X/* Login(1) sets a default for $TERM, so for logging-in */ X/* to any terminal place the following in ".profile": */ X/* */ X/* eval `tset` */ X/* */ X/* To change $TERM during a session: */ X/* */ X/* eval `tset device_type` */ X/* */ X/****************************************************************/ X X X Xmain( argc, argv ) X int argc; X char *argv[]; X X { X char *name; X FILE *f; X char line[ LINE_LENGTH ]; X X X if ( argc > 2 ) X { X fprintf( stderr, "Usage: %s [ device_type ]\n", argv[0] ); X exit( 1 ); X } X X if ( argc == 2 ) X { X Find_Termcap( argv[1] ); X exit( 0 ); X } X X X /* No terminal name supplied, so use the current device */ X X if ( (name = ttyname( 0 )) == NULL ) X Error( "Can not determine the user's terminal" ); X X name += 5; /* Chop off "/dev/" part */ X X X /* Look up the default terminal type in /etc/ttytype */ X X if ( (f = fopen( "/etc/ttytype", "r" )) == NULL ) X Error( "Can not open /etc/ttytype" ); X X while ( fgets( line, LINE_LENGTH, f ) != NULL ) X { X char *space = index( line, ' ' ); X X line[ strlen(line) - 1 ] = '\0'; /* Remove '\n' */ X X if ( strcmp( space+1, name ) == 0 ) X { X *space = '\0'; X Find_Termcap( line ); X exit( 0 ); X } X } X X Error( "Can not find your terminal in /etc/ttytype" ); X } X X X XFind_Termcap( terminal ) X char *terminal; X X { X char termcap[ TC_BUFFER ]; X X if ( tgetent( termcap, terminal ) != 1 ) X Error( "No termcap for your terminal type" ); X X /* In real Unix the $TERMCAP would also be returned here */ X X printf( "TERM=%s;\n", terminal ); X } X X X XError( msg ) X char *msg; X X { X fprintf( stderr, "tset: %s\n", msg ); X exit( 1 ); X } / -------------------------------------------------------------------- Edwin L. Froese uw-beaver!ubc-cs!mprg!handel!froese Terrence W. Holm {uw-beaver,ubc-cs}!uvicctr!sirius!tholm