[mod.sources] v06i069: VT100TOOL for Sun's

sources-request@mirror.UUCP (07/22/86)

Submitted by: linus!ell (Ed Lafferty)
Mod.sources: Volume 6, Issue 69
Archive-name: vt100tool/Part10

[  I generally dislike posting anything other than source code.  In this
   case, however, I'm making an exception because (a) there's no other
   way to do it; and (b) there is apparently a lot of demand for this
   program.  So, I took the object and data files in the fontdir and
   libdir directories and uuencode'd them.  The decode.sh script in the
   toplevel directory will uudecode them and remove the uu.xxx files;
   the lists the files by name, so you can check if you're missing
   something.  This comment will appear at the beginning of each of the
   postings of this program.  --r$  ]


#!/bin/sh
# This is a shell archive.  Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
# Wrapped by rs@mirror.UUCP on Thu Jul 17 00:22:53 EDT 1986
# Contents:  vt100tool.c
 
echo x - vt100tool.c
sed 's/^XX//' > "vt100tool.c" <<'@//E*O*F vt100tool.c//'
XX#ifndef lint
XXstatic	char sccsid[] = "@(#)vt100tool.c 1.3 86/04/15 Copyr 1985 MITRE Corp.";
XX#endif


XX/*
XX * MITRE Corp. Bedford, MA
XX */

XX/*
XX * 	Overview:	panelvttool: A shell subwindow emulating
XX *                        a vt100 terminal
XX *
XX */

XX/*
XX *      Author: Edward L. Lafferty
XX */

XX#include <suntool/tool_hs.h>

XX#include <suntool/ttysw.h>
XX#include <stdio.h>
XX#include <suntool/panel.h>
XX#include "vconfig.h"
XX#include <suntool/ttysw_impl.h>
XXstatic short ic_image[258] = {
XX#include "vshelltool.icon"
XX};

XX#include <suntool/ttytlsw.h>
XX#include <sunwindow/window_hs.h>
XX#include <pixrect/pixrect_hs.h>
XX#include <sundev/kbio.h>
XX#include <sundev/kbd.h>


XXextern int winheightp, winwidthp;

XXmpr_static(shellic_mpr, 64, 64, 1, ic_image);

XXstatic	struct icon icon = {64, 64, (struct pixrect *)NULL, 0, 0, 64, 64,
XX	    &shellic_mpr, 0, 0, 0, 0, (char *)NULL, (struct pixfont *)NULL,
XX	    ICON_BKGRDGRY};


XX	    static	sigwinchcatcher(), sigchldcatcher(),
XX	    	sigtermcatcher(),setup_proc(), keyboard_proc(), button_proc();

XXstatic	struct tool *tool;
XXstruct toolsw *ttysw;

XXstatic  struct toolsw *setupsw, *arrowsw, *keypadsw, *normkeysw;
XXstatic struct singlecolor scr_foreground = {100,100,100};
XXstatic struct singlecolor scr_background = {0, 0, 0};
XXstatic  caddr_t setup_button, keyboard_button;

XXstatic  caddr_t  local_choice, scroll_choice, screen_choice,
XX                    cursor_choice,xon_choice,ansi_choice,wrap_choice,
XX		    newline_choice, size_choice, answerback_text, baud_rate,
XX		    label_choice;
XXstatic  caddr_t  PF1_button, PF2_button, PF3_button, PF4_button, R1_button,
XX		 R2_button,R3_button,R4_button,R5_button,R6_button,
XX		 R7_button,R8_button,R9_button,R0_button,enter_button,
XX		 dot_button,comma_button,up_button,down_button,
XX		 left_button,right_button, minus_button;


XXstatic  local_proc(), scroll_proc(), screen_proc(),
XX		    cursor_proc(),xon_proc(),ansi_proc(),wrap_proc(),
XX		    newline_proc(), size_proc(), baud_rate_proc(),
XX		    answer_proc(), label_proc(), norm_proc();

XXstatic	char *normalname = "VT100 Shell 2.0";
XXstatic  Panel setup, arrow, keypad, normkey;
XXstatic struct pixfont *font;

XX/* so we can set locally
XX   and still inform the emulator*/
XXextern int newline, wrap,cursor,vt52mode,big_screen,rev_screen, local;
XXextern char  answer_message[];

XX/* defined in the emulator */
XXextern char* translate_key();
XXextern char main_font_directory[];

XXmain(argc, argv)
XX	int argc;
XX	char **argv;
XX{
XX	char	*toolname = normalname;
XX	char *tool_name = argv[0];
XX	char **tool_attrs = NULL;


XX	if(tool_parse_all(&argc,argv,&tool_attrs, tool_name) == -1)
XX	  {
XX	    tool_usage(tool_name);
XX	    exit(1);
XX	  }
XX	/*
XX	 * Create tool window
XX	 */
XX	tool = tool_make(WIN_NAME_STRIPE,TRUE,
XX			 WIN_ICON, &icon,
XX			 WIN_LABEL,normalname,
XX			 WIN_COLUMNS,83,
XX			 WIN_WIDTH, 680,
XX			 WIN_HEIGHT, 600,
XX			 0);

XX	tool_free_attribute_list(tool_attrs);
XX	/*
XX	 * Create tty subwindow
XX	 * Libsuntool now has vt100 code instead of ansi
XX	 * Communicate with emulator via envirionment variable VTFONTS
XX	 */
XX	setenv("VTFONTS", MAIN_FONT_DIR); 
XX	ttysw = ttysw_createtoolsubwindow(tool, "ttysw", TOOL_SWEXTENDTOEDGE,
XX	    384);
XX	if (ttysw == (struct toolsw *)NULL)
XX		exit(1);
XX	
XX	setupsw = panel_create(tool, 0);
XX	setup   = (Panel) setupsw->ts_data;

XX	strcpy(main_font_directory,MAIN_FONT_DIR);

XX	/* create the items for setup of vt100 screen */
XX	setup_button = panel_create_item(setup,PANEL_BUTTON,

XX					 PANEL_NOTIFY_PROC,setup_proc,

XX					 PANEL_LABEL_IMAGE,
XX					 panel_button_image(setup,
XX							    "Setup",
XX							    7,
XX							    NULL ),
XX					 0);

XX	/* Set up the mouse driven keyboard */

XX	keyboard_button = panel_create_item(setup,PANEL_BUTTON,
XX					    PANEL_NOTIFY_PROC,keyboard_proc,
XX					    PANEL_LABEL_IMAGE,
XX					    panel_button_image(setup,
XX							       "Keyboard",
XX							    8,
XX							    NULL ),
XX					 0);
XX	label_choice = panel_create_item(setup, PANEL_CHOICE,
XX					 PANEL_SHOW_ITEM, TRUE,
XX					 PANEL_LABEL_STRING, "Key Labels",
XX					 PANEL_CHOICE_STRINGS,"Normal", "IBM",
XX					 			"MRED","WD11",
XX					 0,
XX					 PANEL_NOTIFY_PROC, label_proc,
XX					 PANEL_DISPLAY_LEVEL, PANEL_ALL,
XX					 PANEL_FEEDBACK, PANEL_INVERTED,
XX					 0);


XX	local_choice = panel_create_item(setup,PANEL_CHOICE,
XX		PANEL_SHOW_ITEM, FALSE,
XX		PANEL_CHOICE_STRINGS,"Online","Local",0,
XX		PANEL_NOTIFY_PROC, local_proc,
XX		PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
XX					     0);

XX	scroll_choice = panel_create_item(setup,PANEL_CHOICE,
XX		PANEL_SHOW_ITEM, FALSE,
XX		PANEL_CHOICE_STRINGS,"Smooth","Jump",0,
XX		PANEL_NOTIFY_PROC, scroll_proc,
XX		PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
XX					     0);

XX	screen_choice = panel_create_item(setup,PANEL_CHOICE,
XX		PANEL_SHOW_ITEM, FALSE,
XX		PANEL_CHOICE_STRINGS,"Dark","Light",0,
XX		PANEL_NOTIFY_PROC, screen_proc,
XX		PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
XX					     0);

XX	cursor_choice = panel_create_item(setup,PANEL_CHOICE,
XX		PANEL_SHOW_ITEM, FALSE,
XX		PANEL_CHOICE_STRINGS,"Block","Under",0,
XX		PANEL_NOTIFY_PROC, cursor_proc,
XX		PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
XX					     0);

XX	xon_choice = panel_create_item(setup,PANEL_CHOICE,
XX		PANEL_SHOW_ITEM, FALSE,
XX		PANEL_CHOICE_STRINGS,"Xon","No-xon",0,
XX		PANEL_NOTIFY_PROC, xon_proc,
XX		PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
XX					     0);

XX	wrap_choice = panel_create_item(setup,PANEL_CHOICE,
XX		PANEL_SHOW_ITEM, FALSE,
XX		PANEL_CHOICE_STRINGS,"No Wrap","Wrap",0,
XX		PANEL_NOTIFY_PROC, wrap_proc,
XX		PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
XX					     0);

XX	newline_choice = panel_create_item(setup,PANEL_CHOICE,
XX		PANEL_SHOW_ITEM, FALSE,
XX		PANEL_CHOICE_STRINGS,"Newline","No Newline",0,
XX		PANEL_NOTIFY_PROC, newline_proc,
XX		PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
XX					     0);

XX	ansi_choice = panel_create_item(setup,PANEL_CHOICE,
XX		PANEL_SHOW_ITEM, FALSE,
XX		PANEL_CHOICE_STRINGS,"ANSI","VT-52",0,
XX		PANEL_NOTIFY_PROC, ansi_proc,
XX		PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
XX					     0);

XX	size_choice = panel_create_item(setup,PANEL_CHOICE,
XX		PANEL_SHOW_ITEM, FALSE,
XX		PANEL_CHOICE_STRINGS,"80 Col","132 Col",0,
XX		PANEL_NOTIFY_PROC, size_proc,
XX		PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
XX					     0);
XX	answerback_text = panel_create_item(setup,PANEL_TEXT,
XX		PANEL_SHOW_ITEM, FALSE,
XX		PANEL_LABEL_STRING, "Answerback:",
XX                PANEL_NOTIFY_LEVEL, PANEL_NONE,
XX		PANEL_VALUE, "",
XX                PANEL_VALUE_DISPLAY_LENGTH, 20,
XX		0);
XX/*	baud_rate = panel_create_item(setup, PANEL_CHOICE,
XX	        PANEL_LABEL_STRING, "Baud RATE",
XX                PANEL_CHOICE_STRINGS,"75","110","150","300","600","1200",
XX				      "2400","4800","9600", "19200",0,
XX                PANEL_NOTIFY_PROC, baud_rate_proc,
XX		PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
XX                PANEL_SHOW_ITEM,FALSE,
XX                0);
XX*/

XX	panel_set(setup,
XX		  PANEL_HEIGHT, PANEL_FIT_ITEMS,
XX		  PANEL_WIDTH, PANEL_CU(80),
XX		  0);

XX	/* Set up keypad */
XX	/* Client data item is used by key process to determine which
XX	   key was moused. */

XX	keypadsw = panel_create(tool,
XX				PANEL_HEIGHT, PANEL_CU(27),
XX				PANEL_WIDTH, PANEL_CU(30),   
XX				PANEL_ITEM_X_GAP,1,
XX				PANEL_ITEM_Y_GAP,1,
XX				0);
XX	keypad = (Panel) keypadsw->ts_data;

XX	PF1_button = panel_create_item(keypad, PANEL_BUTTON,
XX				       PANEL_SHOW_ITEM, FALSE,
XX				       PANEL_CLIENT_DATA, (int)11,
XX				       PANEL_NOTIFY_PROC, button_proc,
XX				       PANEL_LABEL_IMAGE,
XX				       panel_button_image(keypad,
XX							  "PF1",
XX							  5,
XX							  NULL),
XX				       0);

XX	PF2_button = panel_create_item(keypad, PANEL_BUTTON,
XX				       PANEL_SHOW_ITEM, FALSE,
XX				       PANEL_CLIENT_DATA, (int)12,
XX				       PANEL_NOTIFY_PROC, button_proc,
XX				       PANEL_LABEL_IMAGE,
XX				       panel_button_image(keypad,
XX							  "PF2",
XX							  5,
XX							  NULL),
XX				       0);
XX	PF3_button = panel_create_item(keypad, PANEL_BUTTON,
XX				       PANEL_SHOW_ITEM, FALSE,
XX				       PANEL_CLIENT_DATA, (int)13,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "PF3",
XX						       5,
XX						       NULL),
XX				    0);

XX	PF4_button = panel_create_item(keypad, PANEL_BUTTON,
XX				       PANEL_SHOW_ITEM, FALSE,
XX				       PANEL_CLIENT_DATA, (int) 14,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "PF4",
XX						       5,
XX						       NULL),
XX				    0);

XX	R7_button = panel_create_item(keypad, PANEL_BUTTON,
XX				      PANEL_SHOW_ITEM, FALSE,
XX				      PANEL_CLIENT_DATA, 7,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "7",
XX						       5,
XX						       NULL),
XX				    0);

XX	R8_button = panel_create_item(keypad, PANEL_BUTTON,
XX				      PANEL_SHOW_ITEM, FALSE,
XX				      PANEL_CLIENT_DATA, 8,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "8",
XX						       5,
XX						       NULL),
XX				    0);

XX	R9_button = panel_create_item(keypad, PANEL_BUTTON,
XX				      PANEL_SHOW_ITEM, FALSE,
XX				      PANEL_CLIENT_DATA, 9,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "9",
XX						       5,
XX						       NULL),
XX				    0);

XX	minus_button = panel_create_item(keypad, PANEL_BUTTON,
XX					 PANEL_SHOW_ITEM, FALSE,
XX					 PANEL_CLIENT_DATA, 15,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "-",
XX						       5,
XX						       NULL),
XX				    0);

XX	R4_button = panel_create_item(keypad, PANEL_BUTTON,
XX				      PANEL_SHOW_ITEM, FALSE,
XX				      PANEL_CLIENT_DATA, 4,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "4",
XX						       5,
XX						       NULL),
XX				    0);

XX	R5_button = panel_create_item(keypad, PANEL_BUTTON,
XX				      PANEL_SHOW_ITEM, FALSE,
XX				      PANEL_CLIENT_DATA, 5,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "5",
XX						       5,
XX						       NULL),
XX				    0);

XX	R6_button = panel_create_item(keypad, PANEL_BUTTON,
XX				      PANEL_SHOW_ITEM, FALSE,
XX				      PANEL_CLIENT_DATA, 6,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "6",
XX						       5,
XX						       NULL),
XX				    0);

XX	comma_button = panel_create_item(keypad, PANEL_BUTTON,
XX					 PANEL_SHOW_ITEM, FALSE,
XX					 PANEL_CLIENT_DATA, 16,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       ",",
XX						       5,
XX						       NULL),
XX				    0);

XX	R1_button = panel_create_item(keypad, PANEL_BUTTON,
XX				      PANEL_SHOW_ITEM, FALSE,
XX				      PANEL_CLIENT_DATA, 1,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "1",
XX						       5,
XX						       NULL),
XX				    0);

XX	R2_button = panel_create_item(keypad, PANEL_BUTTON,
XX				      PANEL_SHOW_ITEM, FALSE,
XX				      PANEL_CLIENT_DATA, 2,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "2",
XX						       5,
XX						       NULL),
XX				    0);

XX	R3_button = panel_create_item(keypad, PANEL_BUTTON,
XX				      PANEL_SHOW_ITEM, FALSE,
XX				      PANEL_CLIENT_DATA, 3,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "3",
XX						       5,
XX						       NULL),
XX				    0);
XX	enter_button = panel_create_item(keypad, PANEL_BUTTON,
XX					 PANEL_SHOW_ITEM, FALSE,
XX					 PANEL_CLIENT_DATA, 17,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "Enter",
XX						       5,
XX						       NULL),
XX				    0);
XX	R0_button = panel_create_item(keypad, PANEL_BUTTON,
XX				      PANEL_SHOW_ITEM, FALSE,
XX				      PANEL_CLIENT_DATA, 10,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       "0",
XX						       13,
XX						       NULL),
XX				    0);

XX	dot_button = panel_create_item(keypad, PANEL_BUTTON,
XX				       PANEL_SHOW_ITEM, FALSE,
XX				       PANEL_CLIENT_DATA, 18,
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(keypad,
XX						       ".",
XX						       5,
XX						       NULL),
XX				    0);

XX	arrowsw = panel_create(tool,  0);
XX	arrow = (Panel) arrowsw->ts_data;

XX	up_button = panel_create_item(arrow, PANEL_BUTTON,
XX				      PANEL_SHOW_ITEM, FALSE,
XX				      PANEL_CLIENT_DATA, 19,
XX				      PANEL_ITEM_X, PANEL_CU(8),
XX				      PANEL_ITEM_Y, PANEL_CU(1),
XX				      PANEL_NOTIFY_PROC, button_proc,
XX				      PANEL_LABEL_IMAGE,
XX				      panel_button_image(arrow,
XX							 "^",
XX							 5,
XX							 NULL),
XX				      0);
XX	down_button = panel_create_item(arrow, PANEL_BUTTON,
XX					PANEL_SHOW_ITEM, FALSE,
XX					PANEL_CLIENT_DATA, 21,
XX					PANEL_ITEM_X, PANEL_CU(8),
XX					PANEL_ITEM_Y, PANEL_CU(3),
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(arrow,
XX						       "v",
XX						       5,
XX						       NULL),
XX				    0);
XX	left_button = panel_create_item(arrow, PANEL_BUTTON,
XX					PANEL_SHOW_ITEM, FALSE,
XX					PANEL_CLIENT_DATA, 22,
XX					PANEL_ITEM_X, PANEL_CU(2),
XX					PANEL_ITEM_Y, PANEL_CU(2),
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(arrow,
XX						       "<--",
XX						       5,
XX						       NULL),
XX				    0);
XX	right_button = panel_create_item(arrow, PANEL_BUTTON,
XX					 PANEL_SHOW_ITEM, FALSE,
XX					 PANEL_CLIENT_DATA, 20,
XX					 PANEL_ITEM_X, PANEL_CU(15),
XX					 PANEL_ITEM_Y, PANEL_CU(2),
XX				    PANEL_NOTIFY_PROC, button_proc,
XX				    PANEL_LABEL_IMAGE,
XX				    panel_button_image(arrow,
XX						       "-->",
XX						       5,
XX						       NULL),
XX				    0);
XX	panel_fit_height(arrow);



XX	label_setup();


XX        /*
XX	 * Install tool in tree of windows
XX	 */
XX	signal(SIGWINCH, sigwinchcatcher);
XX	tool_install(tool);

XX	/*
XX	 * Start tty process
XX	 */
XX	signal(SIGCHLD, sigchldcatcher);
XX	signal(SIGTERM, sigtermcatcher);

XX	if (ttysw_fork(ttysw->ts_data, ++argv,
XX	    &ttysw->ts_io.tio_inputmask,
XX	    &ttysw->ts_io.tio_outputmask,
XX	    &ttysw->ts_io.tio_exceptmask) == -1) {
XX		perror("vt100tool");
XX		exit(1);
XX	}
XX	/*
XX	 * Handle input
XX	 */
XX	tool_select(tool, 1 /* means wait for child process to die*/);
XX	/*
XX	 * Cleanup
XX	 */
XX	tool_destroy(tool);
XX	exit(0);
XX}

XXstatic
XXsigchldcatcher()
XX{
XX	tool_sigchld(tool);
XX}

XXstatic
XXsigwinchcatcher()
XX{
XX	tool_sigwinch(tool);
XX}

XXstatic
XXsigtermcatcher()
XX{
XX	ttysw_done(ttysw->ts_data);
XX	exit(0);
XX}
XXstatic int insetup = 0;
XXstatic int inkeyboard = 0;

XXstatic
XXsetup_proc(item,event)
XX     Panel_item item;
XX     struct inputevent *event;
XX{
XX  if(insetup == 0)
XX    {
XX      panel_set(local_choice,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set(scroll_choice,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set(screen_choice,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set(cursor_choice,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set(xon_choice,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set(ansi_choice,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set(wrap_choice,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set(newline_choice,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set(answerback_text,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set(baud_rate,PANEL_SHOW_ITEM,TRUE,0);
XX      insetup = 1;
XX    }
XX  else
XX    {
XX      panel_set(local_choice,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set(scroll_choice,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set(screen_choice,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set(cursor_choice,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set(xon_choice,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set(ansi_choice,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set(wrap_choice,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set(newline_choice,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set(answerback_text,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set(baud_rate,PANEL_SHOW_ITEM,FALSE,0);
XX      strcpy(answer_message,(char*) panel_get_value(answerback_text));
XX      insetup = 0;
XX    }
XX}

XX/* Toggle the appearance of the panel keyboard */

XXstatic
XXkeyboard_proc(item,event)
XX     Panel_item item;
XX     struct inputevent *event;
XX{
XX  if(inkeyboard == 0)
XX    {
XX      panel_set(PF1_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set(PF2_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set(PF3_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set(PF4_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( R7_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( R8_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( R9_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( minus_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( R4_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( R5_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( R6_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( comma_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( R1_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( R2_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( R3_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( R0_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( dot_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( enter_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( up_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( down_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( right_button,PANEL_SHOW_ITEM,TRUE,0);
XX      panel_set( left_button,PANEL_SHOW_ITEM,TRUE,0);
XX      inkeyboard = 1;
XX    }
XX  else
XX    {
XX      panel_set(PF1_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set(PF2_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set(PF3_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set(PF4_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( R7_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( R8_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( R9_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( minus_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( R4_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( R5_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( R6_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( comma_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( R1_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( R2_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( R3_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( R0_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( dot_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( enter_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( up_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( down_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( right_button,PANEL_SHOW_ITEM,FALSE,0);
XX      panel_set( left_button,PANEL_SHOW_ITEM,FALSE,0);
XX      inkeyboard = 0;
XX    }
XX}

XX/* What to do when a button is clicked */
XX/* Since the meaning of the keys is a function of variables set in
XX   the vt100 environment, this routine uses the translator which
XX   is used to interpret real sun-2 keyboard actions: translate_key()
XX*/

XXstatic
XXbutton_proc(item, event)
XX     Panel_item item;
XX     struct inputevent event;
XX{
XX  int button_pushed = 0;
XX  extern  struct ttysubwindow  *_ttysw;
XX  char * keystr;
XX  button_pushed = (int) panel_get(item, PANEL_CLIENT_DATA);
XX  switch (button_pushed)
XX    {
XX    case 11:
XX      keystr = translate_key(KEY_RIGHT(1));
XX      break;
XX    case 12:
XX      keystr = translate_key(KEY_RIGHT(2));
XX      break;
XX    case 13:
XX      keystr = translate_key(KEY_RIGHT(3));
XX      break;
XX    case 7:
XX      keystr = translate_key(KEY_RIGHT(4));
XX      break;
XX    case 8:
XX      keystr = translate_key(KEY_RIGHT(5));
XX      break;
XX    case 9:
XX      keystr = translate_key(KEY_RIGHT(6));
XX      break;
XX    case 4:
XX      keystr = translate_key(KEY_RIGHT(7));
XX      break;
XX    case 5:
XX      keystr = translate_key(KEY_RIGHT(8));
XX      break;
XX    case 6:
XX      keystr = translate_key(KEY_RIGHT(9));
XX      break;
XX    case 1:
XX      keystr = translate_key(KEY_RIGHT(10));
XX      break;
XX    case 2:
XX      keystr = translate_key(KEY_RIGHT(11));
XX      break;
XX    case 3:
XX      keystr = translate_key(KEY_RIGHT(12));
XX      break;
XX    case 10:
XX      keystr = translate_key(KEY_RIGHT(13));
XX      break;
XX    case 18:
XX      keystr = translate_key(KEY_RIGHT(14));
XX      break;
XX    case 17:
XX      keystr = translate_key(KEY_RIGHT(15));
XX      break;
XX    case 19:
XX      keystr = translate_key(KEY_TOP(3));
XX      break;
XX    case 21:
XX      keystr = translate_key(KEY_TOP(4));
XX      break;
XX    case 22:
XX      keystr = translate_key(KEY_TOP(5));
XX      break;
XX    case 20:
XX      keystr = translate_key(KEY_TOP(6));
XX      break;
XX    case 14:
XX      keystr = translate_key(KEY_TOP(7));
XX      break;
XX    case 15:
XX      keystr = translate_key(KEY_TOP(8));
XX      break;
XX    case 16:
XX      keystr = translate_key(KEY_TOP(9));
XX      break;
XX    default:
XX      keystr = "";
XX   }
XX  if(local)
XX    ttysw_output(_ttysw,keystr,strlen(keystr));
XX  else
XX    {
XX      write(_ttysw->ttysw_pty,keystr, strlen(keystr));
XX      /* Sorry about this hack */
XX      /* We have to fake out the ttysw_input routine */
XX      /* since it only queues up the input till the next */
XX      /* real input event. We will actually write to the */
XX      /* pty and not put the text into the input queue.*/
XX    }

XX}



XXstatic
XXlocal_proc(item,value,event)
XX     Panel_item item;
XX     int value;
XX     struct inputevent event;
XX{
XX  local = value;
XX}

XXstatic
XXscroll_proc(item,value,event)
XX     Panel_item item;
XX     int value;
XX     struct inputevent event;
XX{
XX}
XXstatic
XXscreen_proc(item,value,event)
XX     Panel_item item;
XX     int value;
XX     struct inputevent event;
XX{
XX/* Never could get this to work right!

XX  (value == 0) ? pw_whiteonblack(tool->tl_pixwin, 0, 1)
XX    :pw_blackonwhite(tool->tl_pixwin,0 , 1);
XX  (value == 0) ? rev_screen = 0:1;
XX  pw_writebackground(tool->tl_pixwin, 0, 0,
XX		     winwidthp, winheightp, PIX_NOT(PIX_DST));
XX*/
XX}


XXstatic
XXcursor_proc(item,value,event)
XX     Panel_item item;
XX     int value;
XX     struct inputevent event;
XX{
XX}
XXstatic
XXxon_proc(item,value,event)
XX     Panel_item item;
XX     int value;
XX     struct inputevent event;
XX{
XX}
XXstatic
XXansi_proc(item,value,event)
XX     Panel_item item;
XX     int value;
XX     struct inputevent event;
XX{
XX}
XXstatic
XXwrap_proc(item,value,event)
XX     Panel_item item;
XX     int value;
XX     struct inputevent event;
XX{
XX  wrap = value;
XX}
XXstatic
XXnewline_proc(item,value,event)
XX     Panel_item item;
XX     int value;
XX     struct inputevent event;
XX{
XX  newline = value;
XX}
XXstatic
XXsize_proc(item,value,event)
XX     Panel_item item;
XX     int value;
XX     struct inputevent event;
XX{
XX  big_screen = value;
XX}

XXstatic
XXbaud_rate_proc(item,value,event)
XX     Panel_item item;
XX     int value;
XX     struct inputevent event;
XX{
XX}

XXstatic
XXlabel_setup()
XX{
XX  keys[(int)panel_get(PF1_button,PANEL_CLIENT_DATA)].button_handle = PF1_button;
XX  keys[(int)panel_get(PF2_button,PANEL_CLIENT_DATA)].button_handle = PF2_button;
XX  keys[(int)panel_get(PF3_button,PANEL_CLIENT_DATA)].button_handle = PF3_button;
XX  keys[(int)panel_get(PF4_button,PANEL_CLIENT_DATA)].button_handle = PF4_button;
XX   keys[(int)panel_get(R7_button,PANEL_CLIENT_DATA)].button_handle = R7_button;
XX   keys[(int)panel_get(R8_button,PANEL_CLIENT_DATA)].button_handle = R8_button;
XX   keys[(int)panel_get(R9_button,PANEL_CLIENT_DATA)].button_handle = R9_button;
XX   keys[(int)panel_get(minus_button,PANEL_CLIENT_DATA)].button_handle = minus_button;
XX   keys[(int)panel_get(R4_button,PANEL_CLIENT_DATA)].button_handle = R4_button;
XX   keys[(int)panel_get(R5_button,PANEL_CLIENT_DATA)].button_handle = R5_button;
XX   keys[(int)panel_get(R6_button,PANEL_CLIENT_DATA)].button_handle = R6_button;
XX   keys[(int)panel_get(comma_button,PANEL_CLIENT_DATA)].button_handle = comma_button;
XX   keys[(int)panel_get(R1_button,PANEL_CLIENT_DATA)].button_handle = R1_button;
XX   keys[(int)panel_get(R2_button,PANEL_CLIENT_DATA)].button_handle = R2_button;
XX   keys[(int)panel_get(R3_button,PANEL_CLIENT_DATA)].button_handle = R3_button;
XX   keys[(int)panel_get(R0_button,PANEL_CLIENT_DATA)].button_handle = R0_button;
XX   keys[(int)panel_get(dot_button,PANEL_CLIENT_DATA)].button_handle = dot_button;
XX   keys[(int)panel_get(enter_button,PANEL_CLIENT_DATA)].button_handle = enter_button;
XX   keys[(int)panel_get(up_button,PANEL_CLIENT_DATA)].button_handle = up_button;
XX   keys[(int)panel_get(down_button,PANEL_CLIENT_DATA)].button_handle = down_button;
XX   keys[(int)panel_get(right_button,PANEL_CLIENT_DATA)].button_handle = right_button;
XX   keys[(int)panel_get(left_button,PANEL_CLIENT_DATA)].button_handle = left_button;
XX}

XXstatic
XXlabel_proc(item,value,event)
XX     Panel_item item;
XX     int value;
XX     struct inputevent event;
XX{
XX  int i;
XX  switch (value){
XX  case 0:
XX    for(i = 1; i <= 22; i++)
XX      panel_set(keys[i].button_handle,
XX		PANEL_LABEL_IMAGE, panel_button_image(keypad,
XX						       keys[i].norm_label,
XX						       (i == 10)?13:5,
XX						       NULL),
XX		0);
XX    break;
XX  case 2:
XX    for(i = 1; i <= 22; i++)
XX      panel_set(keys[i].button_handle,
XX		PANEL_LABEL_IMAGE,panel_button_image(keypad,
XX						      keys[i].mred_label,
XX						      (i == 10)?13:5,
XX						      NULL),
XX		0);
XX    break;
XX  case 1:
XX    for(i = 1; i <= 22; i++)
XX      panel_set(keys[i].button_handle,
XX		PANEL_LABEL_IMAGE, panel_button_image(keypad,
XX						       keys[i].ibm_label,
XX						       (i ==10)?13 : 5,
XX						       NULL),
XX		0);
XX    break;
XX  case 3:
XX    for(i = 1; i <= 22; i++)
XX      panel_set(keys[i].button_handle,
XX		PANEL_LABEL_IMAGE, panel_button_image(keypad,
XX						       keys[i].wd11_label,
XX						       (i ==10)?13 : 5,
XX						       NULL),
XX		0);
XX    break;
XX  case 4:
XX    for(i = 1; i <= 22; i++)
XX      panel_set(keys[i].button_handle,
XX		PANEL_LABEL_IMAGE, panel_button_image(keypad,
XX						       keys[i].emacs_label,
XX						       (i ==10)?13 : 5,
XX						       NULL),
XX		0);
XX    break;
XX    
XX  }
XX}

XXstatic
XXnorm_proc(item, value,event)
XX     Panel_item item;
XX     int value;
XX     struct inputevent event;

XX{}
@//E*O*F vt100tool.c//
chmod u=r,g=r,o=r vt100tool.c
 
echo Inspecting for damage in transit...
temp=/tmp/sharin$$; dtemp=/tmp/sharout$$
trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
cat > $temp <<\!!!
     939    1787   25546 vt100tool.c
!!!
wc  vt100tool.c | sed 's=[^ ]*/==' | diff -b $temp - >$dtemp
if test -s $dtemp
then echo "Ouch [diff of wc output]:" ; cat $dtemp
else echo "No problems found."
fi
exit 0