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