v06i069: VT100TOOL for Sun's (vt100tool), Part10/10
sources-request at mirror.UUCP
sources-request at mirror.UUCP
Wed Jul 23 02:23:38 AEST 1986
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 at 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
More information about the Mod.sources
mailing list