v02i012: 3270tool, Part02/03
Charles Mcgrew
mcgrew at dartagnan.rutgers.edu
Wed May 30 05:06:34 AEST 1990
Submitted-by: robert%shangri-la at gatech.edu (Robert Viduya)
Posting-number: Volume 2, Issue 12
Archive-name: 3270tool/part02
---cut here---
#! /bin/sh
# Run the following text with /bin/sh to create:
# File keypanel.c (16573 bytes)
# File 3270.font.uu (13444 bytes)
# File telnet.c (7794 bytes)
# File 3270_enc.h (6207 bytes)
# File selection.c (5912 bytes)
# File 3270.h (4709 bytes)
# File BtnEnter (541 bytes)
if test -f 'keypanel.c'
then
echo "`basename $0`: can't extract" 'keypanel.c' "- file exists" 1>&2
else
sed 's/^X//' << '--End_of_keypanel.c--' > 'keypanel.c'
X/*
X * Copyright 1989 by Georgia Tech Research Corporation, Atlanta, GA.
X * Copyright 1988, 1989 by Robert Viduya.
X *
X * All Rights Reserved
X */
X
X/*
X * keypanel.c
X * This module handles the special 3270 keys using a panel
X * of buttons. All the PF keys as well as the PA1, PA2,
X * Clear, Enter and SysReq keys are on the panel. Only
X * 12 PF keys are displayed at a time; the other 12 are
X * accessed by hitting the button labelled "Shift" (which
X * is NOT the same as the Shift-key on the keyboard).
X */
X
X#include <suntool/sunview.h>
X#include <suntool/panel.h>
X#include <suntool/canvas.h>
X#include <stdio.h>
X
X#define SPACING 2
X
X#define ITEM_COORD(n) (((n) * 32) + ((n) * SPACING) + SPACING)
X
Xstatic unsigned short BtnClear_image[] = {
X#include "BtnClear"
X};
Xmpr_static (BtnClear_pixrect, 32, 32, 1, BtnClear_image);
X
Xstatic unsigned short BtnEnter_image[] = {
X#include "BtnEnter"
X};
Xmpr_static (BtnEnter_pixrect, 32, 32, 1, BtnEnter_image);
X
Xstatic unsigned short BtnPA1_image[] = {
X#include "BtnPA1"
X};
Xmpr_static (BtnPA1_pixrect, 32, 32, 1, BtnPA1_image);
X
Xstatic unsigned short BtnPA2_image[] = {
X#include "BtnPA2"
X};
Xmpr_static (BtnPA2_pixrect, 32, 32, 1, BtnPA2_image);
X
Xstatic unsigned short BtnPF01_image[] = {
X#include "BtnPF01"
X};
Xmpr_static (BtnPF01_pixrect, 32, 32, 1, BtnPF01_image);
X
Xstatic unsigned short BtnPF02_image[] = {
X#include "BtnPF02"
X};
Xmpr_static (BtnPF02_pixrect, 32, 32, 1, BtnPF02_image);
X
Xstatic unsigned short BtnPF03_image[] = {
X#include "BtnPF03"
X};
Xmpr_static (BtnPF03_pixrect, 32, 32, 1, BtnPF03_image);
X
Xstatic unsigned short BtnPF04_image[] = {
X#include "BtnPF04"
X};
Xmpr_static (BtnPF04_pixrect, 32, 32, 1, BtnPF04_image);
X
Xstatic unsigned short BtnPF05_image[] = {
X#include "BtnPF05"
X};
Xmpr_static (BtnPF05_pixrect, 32, 32, 1, BtnPF05_image);
X
Xstatic unsigned short BtnPF06_image[] = {
X#include "BtnPF06"
X};
Xmpr_static (BtnPF06_pixrect, 32, 32, 1, BtnPF06_image);
X
Xstatic unsigned short BtnPF07_image[] = {
X#include "BtnPF07"
X};
Xmpr_static (BtnPF07_pixrect, 32, 32, 1, BtnPF07_image);
X
Xstatic unsigned short BtnPF08_image[] = {
X#include "BtnPF08"
X};
Xmpr_static (BtnPF08_pixrect, 32, 32, 1, BtnPF08_image);
X
Xstatic unsigned short BtnPF09_image[] = {
X#include "BtnPF09"
X};
Xmpr_static (BtnPF09_pixrect, 32, 32, 1, BtnPF09_image);
X
Xstatic unsigned short BtnPF10_image[] = {
X#include "BtnPF10"
X};
Xmpr_static (BtnPF10_pixrect, 32, 32, 1, BtnPF10_image);
X
Xstatic unsigned short BtnPF11_image[] = {
X#include "BtnPF11"
X};
Xmpr_static (BtnPF11_pixrect, 32, 32, 1, BtnPF11_image);
X
Xstatic unsigned short BtnPF12_image[] = {
X#include "BtnPF12"
X};
Xmpr_static (BtnPF12_pixrect, 32, 32, 1, BtnPF12_image);
X
Xstatic unsigned short BtnPF13_image[] = {
X#include "BtnPF13"
X};
Xmpr_static (BtnPF13_pixrect, 32, 32, 1, BtnPF13_image);
X
Xstatic unsigned short BtnPF14_image[] = {
X#include "BtnPF14"
X};
Xmpr_static (BtnPF14_pixrect, 32, 32, 1, BtnPF14_image);
X
Xstatic unsigned short BtnPF15_image[] = {
X#include "BtnPF15"
X};
Xmpr_static (BtnPF15_pixrect, 32, 32, 1, BtnPF15_image);
X
Xstatic unsigned short BtnPF16_image[] = {
X#include "BtnPF16"
X};
Xmpr_static (BtnPF16_pixrect, 32, 32, 1, BtnPF16_image);
X
Xstatic unsigned short BtnPF17_image[] = {
X#include "BtnPF17"
X};
Xmpr_static (BtnPF17_pixrect, 32, 32, 1, BtnPF17_image);
X
Xstatic unsigned short BtnPF18_image[] = {
X#include "BtnPF18"
X};
Xmpr_static (BtnPF18_pixrect, 32, 32, 1, BtnPF18_image);
X
Xstatic unsigned short BtnPF19_image[] = {
X#include "BtnPF19"
X};
Xmpr_static (BtnPF19_pixrect, 32, 32, 1, BtnPF19_image);
X
Xstatic unsigned short BtnPF20_image[] = {
X#include "BtnPF20"
X};
Xmpr_static (BtnPF20_pixrect, 32, 32, 1, BtnPF20_image);
X
Xstatic unsigned short BtnPF21_image[] = {
X#include "BtnPF21"
X};
Xmpr_static (BtnPF21_pixrect, 32, 32, 1, BtnPF21_image);
X
Xstatic unsigned short BtnPF22_image[] = {
X#include "BtnPF22"
X};
Xmpr_static (BtnPF22_pixrect, 32, 32, 1, BtnPF22_image);
X
Xstatic unsigned short BtnPF23_image[] = {
X#include "BtnPF23"
X};
Xmpr_static (BtnPF23_pixrect, 32, 32, 1, BtnPF23_image);
X
Xstatic unsigned short BtnPF24_image[] = {
X#include "BtnPF24"
X};
Xmpr_static (BtnPF24_pixrect, 32, 32, 1, BtnPF24_image);
X
Xstatic unsigned short BtnSysReq_image[] = {
X#include "BtnSysReq"
X};
Xmpr_static (BtnSysReq_pixrect, 32, 32, 1, BtnSysReq_image);
X
Xstatic unsigned short BtnShift_image[] = {
X#include "BtnShift"
X};
Xmpr_static (BtnShift_pixrect, 32, 32, 1, BtnShift_image);
X
Xextern Frame frame;
Xextern Canvas canvas;
XFrame key_frame;
XPanel key_panel;
XPanel_item BtnPA1, BtnPA2, BtnClear,
X BtnPF01, BtnPF02, BtnPF03,
X BtnPF04, BtnPF05, BtnPF06,
X BtnPF07, BtnPF08, BtnPF09,
X BtnPF10, BtnPF11, BtnPF12,
X BtnPF13, BtnPF14, BtnPF15,
X BtnPF16, BtnPF17, BtnPF18,
X BtnPF19, BtnPF20, BtnPF21,
X BtnPF22, BtnPF23, BtnPF24,
X BtnSysReq, BtnEnter, BtnShift;
Xbool panel_shifted = FALSE, panel_showing = FALSE;
X
Xextern int key_PA1 (), key_PA2 (), key_Clear (),
X key_PF1 (), key_PF2 (), key_PF3 (),
X key_PF4 (), key_PF5 (), key_PF6 (),
X key_PF7 (), key_PF8 (), key_PF9 (),
X key_PF10 (), key_PF11 (), key_PF12 (),
X key_PF13 (), key_PF14 (), key_PF15 (),
X key_PF16 (), key_PF17 (), key_PF18 (),
X key_PF19 (), key_PF20 (), key_PF21 (),
X key_PF22 (), key_PF23 (), key_PF24 (),
X key_SysReq (), key_Enter ();
X
X/*
X * Shift button hit, hide the currently showing 12 PF keys and show the
X * 12 that are hiding.
X */
Xkey_PFShift ()
X{
X if (panel_shifted) {
X panel_shifted = FALSE;
X panel_set (BtnPF13, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF14, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF15, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF16, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF17, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF18, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF19, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF20, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF21, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF22, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF23, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF24, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF01, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF02, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF03, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF04, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF05, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF06, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF07, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF08, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF09, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF10, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF11, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF12, PANEL_SHOW_ITEM, TRUE, 0);
X }
X else {
X panel_shifted = TRUE;
X panel_set (BtnPF01, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF02, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF03, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF04, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF05, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF06, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF07, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF08, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF09, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF10, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF11, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF12, PANEL_SHOW_ITEM, FALSE, 0);
X panel_set (BtnPF13, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF14, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF15, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF16, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF17, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF18, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF19, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF20, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF21, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF22, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF23, PANEL_SHOW_ITEM, TRUE, 0);
X panel_set (BtnPF24, PANEL_SHOW_ITEM, TRUE, 0);
X }
X}
X
X
X/*
X * Toggle whether the key panel is showing or not.
X */
Xkey_panel_toggle ()
X{
X panel_showing = !((bool) window_get (key_frame, WIN_SHOW));
X window_set (key_frame, WIN_SHOW, panel_showing, 0);
X}
X
X
X/*
X * Catch open/close events on the main frame so that if the key panel frame
X * is visible, we can hide and display it as necessary. This makes the
X * key panel frame seem to track the open/close events on the main frame.
X */
Xstatic Notify_value
Xframe_interposer (frame, event, arg, type)
XFrame frame;
XEvent *event;
XNotify_arg arg;
XNotify_event_type type;
X{
X int init_closed, current_closed;
X Notify_value value;
X
X init_closed = (int) window_get (frame, FRAME_CLOSED);
X value = notify_next_event_func (frame, event, arg, type);
X current_closed = (int) window_get (frame, FRAME_CLOSED);
X if (init_closed != current_closed && panel_showing)
X window_set (key_frame, WIN_SHOW, !current_closed, 0);
X return (value);
X}
X
X
X/*
X * Build the key panel from ground up. Should only be called once.
X */
Xkey_panel_init ()
X{
X int input_designee;
X
X input_designee = (int) window_get (canvas, WIN_DEVICE_NUMBER);
X key_frame = window_create (
X frame, FRAME,
X FRAME_SHOW_LABEL, FALSE,
X FRAME_SHOW_SHADOW, FALSE, /* SunOS 4.0 only, ok to delete */
X WIN_SHOW, FALSE,
X 0
X );
X panel_showing = FALSE;
X key_panel = window_create (
X key_frame, PANEL,
X PANEL_ITEM_X_GAP, SPACING,
X PANEL_ITEM_Y_GAP, SPACING,
X WIN_TOP_MARGIN, SPACING,
X WIN_BOTTOM_MARGIN, SPACING,
X WIN_LEFT_MARGIN, SPACING,
X WIN_RIGHT_MARGIN, SPACING,
X WIN_ROW_GAP, SPACING,
X WIN_COLUMN_GAP, SPACING,
X WIN_IGNORE_KBD_EVENTS, WIN_ASCII_EVENTS,
X WIN_LEFT_KEYS,
X WIN_RIGHT_KEYS,
X WIN_TOP_KEYS,
X 0,
X WIN_INPUT_DESIGNEE, input_designee,
X 0
X );
X BtnPA1 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (0),
X PANEL_ITEM_Y, ITEM_COORD (0),
X PANEL_LABEL_IMAGE, &BtnPA1_pixrect,
X PANEL_NOTIFY_PROC, key_PA1,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPA2 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (1),
X PANEL_ITEM_Y, ITEM_COORD (0),
X PANEL_LABEL_IMAGE, &BtnPA2_pixrect,
X PANEL_NOTIFY_PROC, key_PA2,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnClear = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (2),
X PANEL_ITEM_Y, ITEM_COORD (0),
X PANEL_LABEL_IMAGE, &BtnClear_pixrect,
X PANEL_NOTIFY_PROC, key_Clear,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPF01 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (0),
X PANEL_ITEM_Y, ITEM_COORD (1),
X PANEL_LABEL_IMAGE, &BtnPF01_pixrect,
X PANEL_NOTIFY_PROC, key_PF1,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPF02 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (1),
X PANEL_ITEM_Y, ITEM_COORD (1),
X PANEL_LABEL_IMAGE, &BtnPF02_pixrect,
X PANEL_NOTIFY_PROC, key_PF2,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPF03 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (2),
X PANEL_ITEM_Y, ITEM_COORD (1),
X PANEL_LABEL_IMAGE, &BtnPF03_pixrect,
X PANEL_NOTIFY_PROC, key_PF3,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPF04 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (0),
X PANEL_ITEM_Y, ITEM_COORD (2),
X PANEL_LABEL_IMAGE, &BtnPF04_pixrect,
X PANEL_NOTIFY_PROC, key_PF4,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPF05 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (1),
X PANEL_ITEM_Y, ITEM_COORD (2),
X PANEL_LABEL_IMAGE, &BtnPF05_pixrect,
X PANEL_NOTIFY_PROC, key_PF5,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPF06 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (2),
X PANEL_ITEM_Y, ITEM_COORD (2),
X PANEL_LABEL_IMAGE, &BtnPF06_pixrect,
X PANEL_NOTIFY_PROC, key_PF6,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPF07 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (0),
X PANEL_ITEM_Y, ITEM_COORD (3),
X PANEL_LABEL_IMAGE, &BtnPF07_pixrect,
X PANEL_NOTIFY_PROC, key_PF7,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPF08 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (1),
X PANEL_ITEM_Y, ITEM_COORD (3),
X PANEL_LABEL_IMAGE, &BtnPF08_pixrect,
X PANEL_NOTIFY_PROC, key_PF8,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPF09 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (2),
X PANEL_ITEM_Y, ITEM_COORD (3),
X PANEL_LABEL_IMAGE, &BtnPF09_pixrect,
X PANEL_NOTIFY_PROC, key_PF9,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPF10 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (0),
X PANEL_ITEM_Y, ITEM_COORD (4),
X PANEL_LABEL_IMAGE, &BtnPF10_pixrect,
X PANEL_NOTIFY_PROC, key_PF10,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPF11 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (1),
X PANEL_ITEM_Y, ITEM_COORD (4),
X PANEL_LABEL_IMAGE, &BtnPF11_pixrect,
X PANEL_NOTIFY_PROC, key_PF11,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPF12 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (2),
X PANEL_ITEM_Y, ITEM_COORD (4),
X PANEL_LABEL_IMAGE, &BtnPF12_pixrect,
X PANEL_NOTIFY_PROC, key_PF12,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnPF13 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (0),
X PANEL_ITEM_Y, ITEM_COORD (1),
X PANEL_LABEL_IMAGE, &BtnPF13_pixrect,
X PANEL_NOTIFY_PROC, key_PF13,
X PANEL_SHOW_ITEM, FALSE,
X 0
X );
X BtnPF14 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (1),
X PANEL_ITEM_Y, ITEM_COORD (1),
X PANEL_LABEL_IMAGE, &BtnPF14_pixrect,
X PANEL_NOTIFY_PROC, key_PF14,
X PANEL_SHOW_ITEM, FALSE,
X 0
X );
X BtnPF15 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (2),
X PANEL_ITEM_Y, ITEM_COORD (1),
X PANEL_LABEL_IMAGE, &BtnPF15_pixrect,
X PANEL_NOTIFY_PROC, key_PF15,
X PANEL_SHOW_ITEM, FALSE,
X 0
X );
X BtnPF16 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (0),
X PANEL_ITEM_Y, ITEM_COORD (2),
X PANEL_LABEL_IMAGE, &BtnPF16_pixrect,
X PANEL_NOTIFY_PROC, key_PF16,
X PANEL_SHOW_ITEM, FALSE,
X 0
X );
X BtnPF17 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (1),
X PANEL_ITEM_Y, ITEM_COORD (2),
X PANEL_LABEL_IMAGE, &BtnPF17_pixrect,
X PANEL_NOTIFY_PROC, key_PF17,
X PANEL_SHOW_ITEM, FALSE,
X 0
X );
X BtnPF18 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (2),
X PANEL_ITEM_Y, ITEM_COORD (2),
X PANEL_LABEL_IMAGE, &BtnPF18_pixrect,
X PANEL_NOTIFY_PROC, key_PF18,
X PANEL_SHOW_ITEM, FALSE,
X 0
X );
X BtnPF19 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (0),
X PANEL_ITEM_Y, ITEM_COORD (3),
X PANEL_LABEL_IMAGE, &BtnPF19_pixrect,
X PANEL_NOTIFY_PROC, key_PF19,
X PANEL_SHOW_ITEM, FALSE,
X 0
X );
X BtnPF20 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (1),
X PANEL_ITEM_Y, ITEM_COORD (3),
X PANEL_LABEL_IMAGE, &BtnPF20_pixrect,
X PANEL_NOTIFY_PROC, key_PF20,
X PANEL_SHOW_ITEM, FALSE,
X 0
X );
X BtnPF21 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (2),
X PANEL_ITEM_Y, ITEM_COORD (3),
X PANEL_LABEL_IMAGE, &BtnPF21_pixrect,
X PANEL_NOTIFY_PROC, key_PF21,
X PANEL_SHOW_ITEM, FALSE,
X 0
X );
X BtnPF22 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (0),
X PANEL_ITEM_Y, ITEM_COORD (4),
X PANEL_LABEL_IMAGE, &BtnPF22_pixrect,
X PANEL_NOTIFY_PROC, key_PF22,
X PANEL_SHOW_ITEM, FALSE,
X 0
X );
X BtnPF23 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (1),
X PANEL_ITEM_Y, ITEM_COORD (4),
X PANEL_LABEL_IMAGE, &BtnPF23_pixrect,
X PANEL_NOTIFY_PROC, key_PF23,
X PANEL_SHOW_ITEM, FALSE,
X 0
X );
X BtnPF24 = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (2),
X PANEL_ITEM_Y, ITEM_COORD (4),
X PANEL_LABEL_IMAGE, &BtnPF24_pixrect,
X PANEL_NOTIFY_PROC, key_PF24,
X PANEL_SHOW_ITEM, FALSE,
X 0
X );
X BtnSysReq = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (0),
X PANEL_ITEM_Y, ITEM_COORD (5),
X PANEL_LABEL_IMAGE, &BtnSysReq_pixrect,
X PANEL_NOTIFY_PROC, key_SysReq,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnEnter = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (1),
X PANEL_ITEM_Y, ITEM_COORD (5),
X PANEL_LABEL_IMAGE, &BtnEnter_pixrect,
X PANEL_NOTIFY_PROC, key_Enter,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X BtnShift = panel_create_item (
X key_panel, PANEL_BUTTON,
X PANEL_ITEM_X, ITEM_COORD (2),
X PANEL_ITEM_Y, ITEM_COORD (5),
X PANEL_LABEL_IMAGE, &BtnShift_pixrect,
X PANEL_NOTIFY_PROC, key_PFShift,
X PANEL_SHOW_ITEM, TRUE,
X 0
X );
X panel_shifted = FALSE;
X window_fit (key_panel);
X window_fit (key_frame);
X
X /* interpose base frame on opens and close so that we can mimic them on
X * the key panel frame.
X */
X (void) notify_interpose_event_func (frame, frame_interposer, NOTIFY_SAFE);
X}
--End_of_keypanel.c--
if test 16573 -ne `wc -c < 'keypanel.c'`
then
echo "`basename $0`: error in" 'keypanel.c' ": sent 16573 chars, received `wc -c < 'keypanel.c'`" 1>&2
fi
fi
if test -f '3270.font.uu'
then
echo "`basename $0`: can't extract" '3270.font.uu' "- file exists" 1>&2
else
sed 's/^X//' << '--End_of_3270.font.uu--' > '3270.font.uu'
Xbegin 664 3270.font
XM 1X< ) ! " ,! ) D ( @# 0 "0 ) $ ( P$ D "0!@ " ,
XM! ) D @ @# 0 "0 ) * ( P$ D "0# " ,! ) D X @# 0 "0 )
XM 0 ( P$ D "0$@ " ,! ) D!0 @# 0 "0 ) 6 ( P$ D "0& " ,
XM! ) D!H @# 0 "0 ) < ( P$ D "0'@ " ,! ) D" @# 0 "0 )
XM B ( P$ D "0) " ,! ) D"8 @# 0 "0 ) H ( P$ D "0*@ " ,
XM! ) D"P @# 0 "0 ) N ( P$ D "0, " ,! ) D#( @# 0 "0 )
XM T ( P$ D "0-@ " ,! ) D#@ @# 0 "0 ) Z ( P$ D "0/ " ,
XM! ) D#X @# 0 "0 )! ( P$ D "00@ " ,! ) D$0 @# 0 "0 )
XM!& ( P$ D "02 " ,! ) D$H @# 0 "0 )!, ( P$ D "03@ " ,
XM! ) D% @# 0 "0 )!2 ( P$ D "05 " ,! ) D%8 @# 0 "0 )
XM!8 ( P$ D "06@ " ,! ) D%P @# 0 "0 )!> ( P$ D "08 " ,
XM! ) D&( @# 0 "0 )!D ( P$ D "09@ " ,! ) D&@ @# 0 "0 )
XM!J ( P$ D "0; " ,! ) D&X @# 0 "0 )!P ( P$ D "0<@ " ,
XM! ) D'0 @# 0 "0 )!V ( P$ D "0> " ,! ) D'H @# 0 "0 )
XM!\ ( P$ D "0?@ " ,! ) D( @# 0 "0 )"" ( P$ D "0A " ,
XM! ) D(8 @# 0 "0 )"( ( P$ D "0B@ " ,! ) D(P @# 0 "0 )
XM". ( P$ D "0D " ,! ) D)( @# 0 "0 )"4 ( P$ D "0E@ " ,
XM! ) D)@ @# 0 "0 )": ( P$ D "0G " ,! ) D)X @# 0 "0 )
XM"@ ( P$ D "0H@ " ,! ) D*0 @# 0 "0 )"F ( P$ D "0J " ,
XM! ) D*H @# 0 "0 )"L ( P$ D "0K@ " ,! ) D+ @# 0 "0 )
XM"R ( P$ D "0M " ,! ) D+8 @# 0 "0 )"X ( P$ D "0N@ " ,
XM! ) D+P @# 0 "0 )"^ ( P$ D "0P " ,! ) D,( @# 0 "0 )
XM#$ ( P$ D "0Q@ " ,! ) D,@ @# 0 "0 )#* ( P$ D "0S " ,
XM! ) D,X @# 0 "0 )#0 ( P$ D "0T@ " ,! ) D-0 @# 0 "0 )
XM#6 ( P$ D "0V " ,! ) D-H @# 0 "0 )#< ( P$ D "0W@ " ,
XM! ) D. @# 0 "0 )#B ( P$ D "0Y " ,! ) D.8 @# 0 "0 )
XM#H ( P$ D "0Z@ " ,! ) D.P @# 0 "0 )#N ( P$ D "0\ " ,
XM! ) D/( @# 0 "0 )#T ( P$ D "0]@ " ,! ) D/@ @# 0 "0 )
XM#Z ( P$ D "0_ " ,! ) D/X @# 0 "0 )$ ( P$ D "1 @ " ,
XM! ) D00 @# 0 "0 )$& ( P$ D "1" " ,! ) D0H @# 0 "0 )
XM$, ( P$ D "1#@ " ,! ) D1 @# 0 "0 )$2 ( P$ D "1% " ,
XM! ) D18 @# 0 "0 )$8 ( P$ D "1&@ " ,! ) D1P @# 0 "0 )
XM$> ( P$ D "1( " ,! ) D2( @# 0 "0 )$D ( P$ D "1)@ " ,
XM! ) D2@ @# 0 "0 )$J ( P$ D "1+ " ,! ) D2X @# 0 "0 )
XM$P ( P$ D "1,@ " ,! ) D30 @# 0 "0 )$V ( P$ D "1. " ,
XM! ) D3H @# 0 "0 )$\ ( P$ D "1/@ " ,! ) D4 @# 0 "0 )
XM%" ( P$ D "11 " ,! ) D48 @# 0 "0 )%( ( P$ D "12@ " ,
XM! ) D4P @# 0 "0 )%. ( P$ D "14 " ,! ) D5( @# 0 "0 )
XM%4 ( P$ D "15@ " ,! ) D5@ @# 0 "0 )%: ( P$ D "17 " ,
XM! ) D5X @# 0 "0 )%@ ( P$ D "18@ " ,! ) D60 @# 0 "0 )
XM%F ( P$ D "1: " ,! ) D6H @# 0 "0 )%L ( P$ D "1;@ " ,
XM! ) D7 @# 0 "0 )%R ( P$ D "1= " ,! ) D78 @# 0 "0 )
XM%X ( P$ D "1>@ " ,! ) D7P @# 0 "0 )%^ ( P$ D "0
XM
XM
XM
XM 8 @# 0 "0 )&" ( P$ D "1A " ,
XM! ) D88 @# 0 "0 )&( ( P$ D "1B@ " ,! ) D8P @# 0 "0 )
XM&. ( P$ D "1D " ,! ) D9( @# 0 "0 )&4 ( P$ D "1E@ " ,
XM! ) D9@ @# 0 "0 )&: ( P$ D "1G " ,! ) D9X @# 0 "0 )
XM
XM
XM
XM !H " ,! ) D:( @# 0 "0 )
XM&D ( P$ D "1I@ " ,! ) D:@ @# 0 "0 )&J ( P$ D "1K " ,
XM! ) D:X @# 0 "0 )&P ( P$ D "1L@ " ,! ) D;0 @# 0 "0 )
XM&V ( P$ D "1N " ,! ) D;H @# 0 "0 )&\ ( P$ D "1O@ " ,
XM! ) D 50 ' B "( (@ B !P !5
XM ( !@ " ( @ " %4 !@ ) $ @ $ \
XM 50 ?@ $ P @!" #P
XM !5 4 "0 1 !^ 0 ! %4 'X 0 !\
XM ( @!\ 50 ( ! %P 8@!" #P
XM !5 !^ 0 " ( ! $ ( 0
XM @ ! " 0 " 0 " " 0 " 0 " $ ( 0
XM @ < ! $ 0 ! $ 0 ! $ 0 !P
XM !P ! $ 0 ! $ 0 ! $ 0 ' 0 @ ! $ 0
XM! $ @ $ 0 " 0 ! $ 0 ! " $
XM # " ( @ " $ @ " ( @ , # 0 !
XM$ 0 " $ 0 ! $ ,
XM '\ '\
XM" ( @ D "0 )
XM ! ( ! ( ! ( !
XM $ ( 0 @ ! " $ " ( @ " (
XM @ " ( @ " ( @ " @ " ( @ " " ( @
XM" ( '@ A "$ @ $ @ " " (
XM @ " ( @ " ( ( @ " _ $@ 2 ^ D
XM"0!^ @ " " ( #X 2 !( $@ /@ ( @
XM , !( $ 0 'P $ 0 ! <0!N $$ (@ 4 @
XM?P ( @ ?P ( @ > !$ $0 1 !X $ 1 !. $0 1 $
XM $$ (@ < "( (@ B !P (@!! !P
XM(@!! $$ 20!) $$ 00 B !P " 8 "@ " ( @ " (
XM @ " > "$ 00 ! ( ! ( ! ( !_
XM #\ 0 " 0 # " $ 0!" #P !@ * !( (@!"
XM $( ?P " ( @ !_ $ 0 !\ ( 0 ! $ @!\
XM ! ( ! $ 7 !B $$ 00 B !P ?P !
XM ( ! ( ! $ 0 ! $ < "( (@ B !P (@!! $$
XM(@ < !X (0!! $, 10 Y $ 0 ! (
XM & D $0 2 !$ $( 00!! %$ 3@ < " ( !0 $@
XM1 B !( "@ $ 0 . ) !^ "0 ) !^ "0
XM /@!! $$ 30!5 %X 0 ! $ /P @ %
XM(0 " 0 " 0 " 0@ % (
XM ?P P $@ 2 !( # 40!* $0 .@ !
XM /@
XM 8 !@ P # 8 #
XM !@ & & 8 (
XM @ " !_ @ " ( !_ $ 0
XM !_
XM !@ ) D !@ (@ 4 @
XM ( !0 (@
XM # 20 & 8P!C
XM 0 @ !
XM 0 " 0
XM @ " ( # ( 0 @ \ ( @ ^
XM $( 0@ _ @ ! " #P 0@!" 'X 0 ! #X
XM ! " $ ( @ " ( @ " ( 0 @ \
XM $( 0@!" $( 0@ \ @ ! " $( 0@!" $( 0@!" #T
XM &0 F / " ( /@!" $( /P R
XM $P \ $( 0@!" $( 0@ \ "0 $( 0@!" $(
XM(@ 4 @ $ @ $ " $ ( / " ( /@!" $( /P
XM ( 0 @ \ $( 0@!^ $ 0 ^ " 0 " #P
XM0@!" 'X 0 ! #X ! " $ ( @ " ( @ "
XM ( 0 @ \ $( 0@!" $( 0@ \ @ !
XM" $( 0@!" $( 0@!" #T ) 0@!" $( 0@!"
XM $( /0 > " 0 ! $ ( > @ .
XM "0 #P @ " #X 0@!" #\ ) / !"
XM $( ?@! $ /@ B ( @ " ( @ " (
XM "0 #P 0@!" $( 0@!" #P )
XM 0@!" $( 0@!" $( /0 ( !0 \ ( @ ^ $(
XM0@ _ @ % #P 0@!" 'X 0 ! #X
XM " 4 ( @ " ( @ " ( !0 < "(
XM(@ B "( (@ < ! * $0 1 !$ $0 1 !$ #H
XM ( ! ( / " ( /@!" $( /P @ $ @
XM \ $( 0@!^ $ 0 ^ $ @ $ " ( @ " (
XM @ 0 " 0 / !" $( 0@!" $( /
XM! ( ! !" $( 0@!" $( 0@ ] !D )@ %X (0 A
XM "$ (0 A "$ @ ! " @ % B $$ ?P!! $$ 00
XM ( 0 @ ?P! $ ? ! $ 0 !_ 0 @ !
XM !P " ( @ " ( !P " $ ( #X 00!! $$ 00!! $$
XM/@ ( 0 @ 00!! $$ 00!! $$ 00 ^
XM !D )@ @ % B $$ ?P!! $$ !D )@ ^ $$ 00!! $$
XM00!! $$ /@ $$ (@ 4 @ " ( @ " (
XM " 4 "( 00!! '\ 00!! $$ !_ $
XM0 ! 'P 0 ! $ ?P '\ 0 ! $ ? ! $ 0 !_
XM ' ( @ " ( @ " ( !P
XM ^ $$ 00!! $$ 00!! $$ /@ $$ 00!! $$ 00!!
XM $$ 00 ^ 00 B !0 " ( @ " ( @
XM . !$ ( ! $ 0 @ !$ #@ (@ @ % B
XM $$ 00!_ $$ 00!! B ?P! $ 0 !\ $ 0 ! '\
XM "( < @ " ( @ " ( @ ' (@
XM #X 00!! $$ 00!! $$ 00 ^ B 00!! $$ 00!! $$
XM00!! #X @ % @ % B $$ ?P!! $$ 00
XM " 4 ?P! $ 0 !\ $ 0 !_ ( !0 < @
XM" ( @ " ( !P @ % #X 00!! $$ 00!! $$ /@
XM " 4 00!! $$ 00!! $$ 00 ^ ( !
XM( ( !0 (@!! '\ 00!! $$ ( ! ( '\ 0 ! $ ? !
XM $ ?P ! ( ! < @ " ( @ " <
XM " 0 " ^ $$ 00!! $$ 00!! #X ( ! ( $$ 00!!
XM $$ 00!! $$ /@ 9 "8 !! &$ 40!) $4 0P!!
XM #P @ " #X 0@!" #\ 0 !
XM $ > !$ $( 0@!" $0 > > " 0 ! $
XM( > ( @ " !X (@!" $( 0@ B !X
XM / !" $( ?@! $ /@ . ! $ !\ !
XM$ 0 ! $ 0 !X (0!! $$ (P = $ (0 >
XM 0 ! $ 7 !B $( 0@!" $( 0@ (
XM ( @ " ( @ " ( ( ( @ " ( @ "
XM ( (@ < ( @ " (@ D "@ , H "0 (@
XM ( @ " ( @ " ( @ " , #8 20!)
XM $D 20!) $D 7@ A "$ (0 A "$ (0
XM \ $( 0@!" $( 0@ \
XM '@ 1 !" $( 0@!$ '@ 0 ! $ '@ B $( 0@ B !X
XM @ " , !. #$ ( @ " ( @
XM #P 0@ @ !@ ! !" #P " ( @ /@ ( @
XM" ( @ " !" $( 0@!" $( 0@ ]
XM $$ 00 B "( % 4 @
XM00!! $$ 20!) %4 (@ !! "( % ( !0 (@!!
XM $( 0@!" $( (@ 4 @ $ @ $
XM ?P " 0 " 0 " ?P !V D &0 O
XM $@ 2 W !T (@ F "H ,@ B %P
XM ' < / " ( /@!" $( /P >
XM " 0 ! $ ( > @ . '\ ?P P # # , !@
XM, ?P!_ " !) "H % J $D "
XM @ % B $$ 00!_ $$ 00!! ? B "$ (@ \ "(
XM(0 B 'P . !$ ( ! $ 0 @ !$ #@
XM 'P (@ A "$ (0 A "$ (@!\ ?P! $
XM0 !\ $ 0 ! '\ !_ $ 0 ! 'X 0 ! $ 0
XM !P (@! $ 0 !/ $( (@ >
XM00!! $$ 00!_ $$ 00!! $$ < @ " ( @ " (
XM @ ' X ! $ 0 ! $ $0 1 X
XM 00!" $0 2 !0 &@ 1 !" $$ ! $ 0 !
XM $ 0 ! $ ?P $$ 8P!5 $D 20!! $$ 00!!
XM 00!A %$ 20!% $, 00!! $$ ^
XM $$ 00!! $$ 00!! $$ /@ 'P 0@!! $$ 0@!\ $
XM0 ! ' B $$ 00!! $$ 20 J !P @ !
XM !^ $$ 00!! 'X 2 !$ $( 00 #X 00! #
XM" & $ 00 ^ ?P ( @ " ( @ " ( @
XM !! $$ 00!! $$ 00!! $$ /@ $$
XM00 B "( (@ 4 !0 " ( 00!! $$ 00!) $D 20!5
XM "( !! $$ (@ 4 @ % B $$ 00
XM $$ (@ 4 @ " ( @ " ( ?P ! ( ! (
XM ! ( ! '\ / !0 ) !$ $< ? !$ $0 1P
XM #X 00!# $4 20!1 &$ 00 ^ < !P " 4
XM "( 00!! '\ 00!! $$ . !$ ( ! $ 0 @ !$
XM#@ $ #P P # # , !@ ,
XM " !) "H % J $D " !\ $( 00!! $(
XM? ! $ 0 #X 00! # " & $ 00 ^
XM @ % B "( /@ B "( _X" @(" _X
XM" < #X =P#C@,& @( #P $@ 2 !P $@ 2 #P /^ @("
XM@/^ _X" @)" H("@@*R LH"B@)R @(#_@ "
XM, X #P /@ ^ #\ /@ \ #@ , @ #_@(" @("
XM@/^ 0 !@#_ 8 !
XM @ # & _X"X@)R CH#_@ , 8 @ ( !0 (@!!
XM '< % 4 !0 % 4 !P !P % < @ ?P ( @ % B $$
XM #P $@ 2 !P $@ 2 #P #_@ <
XM !0 % 4 !0 % !W $$ (@ 4 @ #_@(" G("B@** @H"$@(B
XMB(" @(B @(#_@ /^ _X#_@/^ _X#_@/^ _X#_@/^ _X#_@/^
XM " , X !P #@ _X . < X !@ "
XM #_@ /P " 0 " ?X
XM #_@ $
XM" " @$$ 0 ! "$ 0 ( $ ( "@ 0 " 0
XM @ @ @(#!@.. ]X!_ #X /@!_ /> XX#!@("
XM /^ _X#_@/^ _X $ P
XM '^ , 0 " , 8 #_@/^ _X#_@/^ P !@ "
XM . !$ $8 1 X
XM #_@!V '8 !@ /^ @("$@(R E("D at +Z
XMA("$@(" _X ( !0 (@ B #X (@ B _X
XM /^ @(" @(" _X" @/^ _X" @)R E("<@(B
X2_X"(@(B E("B@,& _X
X
Xend
--End_of_3270.font.uu--
if test 13444 -ne `wc -c < '3270.font.uu'`
then
echo "`basename $0`: error in" '3270.font.uu' ": sent 13444 chars, received `wc -c < '3270.font.uu'`" 1>&2
fi
uudecode 3270.font.uu
fi
if test -f 'telnet.c'
then
echo "`basename $0`: can't extract" 'telnet.c' "- file exists" 1>&2
else
sed 's/^X//' << '--End_of_telnet.c--' > 'telnet.c'
X/*
X * Copyright 1989 by Georgia Tech Research Corporation, Atlanta, GA.
X * Copyright 1988, 1989 by Robert Viduya.
X *
X * All Rights Reserved
X */
X
X/*
X * telnet.c
X * This module initializes and manages a telnet socket to
X * the given IBM host.
X */
X
X#include <sys/types.h>
X#include <sys/socket.h>
X#include <sys/ioctl.h>
X#include <netinet/in.h>
X#include <arpa/telnet.h>
X#include <netdb.h>
X#include <fcntl.h>
X#include <suntool/sunview.h>
X#include <errno.h>
X#include <stdio.h>
X
X#define BUFSZ 4096
X
Xu_char myopts[256], hisopts[256]; /* telnet option flags */
Xu_char ibuf[4*BUFSZ], *ibptr; /* 3270 input buffer */
Xu_char obuf[4*BUFSZ], *obptr; /* 3270 output buffer */
Xu_char netrbuf[BUFSZ]; /* network input buffer */
Xu_char sbbuf[1024], *sbptr; /* telnet sub-option buffer */
X
X/* telnet states */
X#define TNS_DATA 0 /* receiving data */
X#define TNS_IAC 1 /* got an IAC */
X#define TNS_WILL 2 /* got an IAC WILL */
X#define TNS_WONT 3 /* got an IAC WONT */
X#define TNS_DO 4 /* got an IAC DO */
X#define TNS_DONT 5 /* got an IAC DONT */
X#define TNS_SB 6 /* got an IAC SB */
X#define TNS_SB_IAC 7 /* got an IAC after an IAC SB */
Xstatic u_char telnet_state;
X
X/* telnet predefined messages */
Xstatic u_char do_opt[] = { IAC, DO, '_' };
Xstatic u_char dont_opt[] = { IAC, DONT, '_' };
Xstatic u_char will_opt[] = { IAC, WILL, '_' };
Xstatic u_char wont_opt[] = { IAC, WONT, '_' };
Xstatic u_char ttype_opt[] = { IAC, SB, TELOPT_TTYPE, TELQUAL_IS,
X 'I', 'B', 'M', '-', '3', '2', '7', '8', '-', '2',
X IAC, SE };
X
Xextern Frame frame;
Xextern u_long inet_addr ();
X
X
X/*
X * connect_net
X * Establish a telnet socket to the given host passed as an argument.
X * Called only once and is responsible for setting up the telnet
X * variables. Returns the file descriptor of the connected socket.
X */
Xint
Xconnect_net (host)
Xchar *host;
X{
X struct servent *sp;
X struct hostent *hp;
X struct sockaddr_in sin;
X int net, i;
X
X /* initialize the telnet variables */
X bzero ((char *) myopts, sizeof (myopts));
X bzero ((char *) hisopts, sizeof (hisopts));
X telnet_state = TNS_DATA;
X ibptr = &ibuf[0];
X sbptr = &sbbuf[0];
X
X /* get the tcp/ip service (telnet) */
X if ((sp = getservbyname ("telnet", "tcp")) == (struct servent *) 0) {
X (void) fprintf (stderr, "3270tool: telnet/tcp - unknown service\n");
X exit (1);
X }
X
X /* fill in the socket address of the given host */
X bzero ((char *) &sin, sizeof (sin));
X if ((hp = gethostbyname (host)) == (struct hostent *) 0) {
X sin.sin_family = AF_INET;
X sin.sin_addr.s_addr = inet_addr (host);
X if (sin.sin_addr.s_addr == -1) {
X (void) fprintf (stderr, "3270tool: unknown host (%s)\n", host);
X exit (1);
X }
X }
X else {
X sin.sin_family = hp->h_addrtype;
X bcopy ((char *) hp->h_addr, (char *) &sin.sin_addr, hp->h_length);
X }
X sin.sin_port = sp->s_port;
X
X /* create and establish a connection on the socket */
X if ((net = socket (AF_INET, SOCK_STREAM, 0)) == -1) {
X perror ("3270tool: socket");
X exit (1);
X }
X if (connect (net, (struct sockaddr *) &sin, sizeof (sin)) == -1) {
X perror ("3270tool: connect");
X exit (1);
X }
X
X /* set the socket to be asynchronous and non-delaying */
X i = FNDELAY | FASYNC;
X if (fcntl (net, F_SETFL, i) == -1) {
X perror ("3270tool: fcntl");
X exit (1);
X }
X i = -getpid ();
X if (ioctl (net, SIOCSPGRP, &i) == -1) {
X perror ("3270tool: ioctl");
X exit (1);
X }
X
X /* all done */
X return (net);
X}
X
X
X/*
X * net_input
X * Called by the notifier whenever there is input available on the
X * socket. Reads the data, processes the special telnet commands
X * and calls net_process to process the 3270 data stream.
X */
X/*ARGSUSED*/
XNotify_value
Xnet_input (client, fd)
XNotify_client client;
Xint fd;
X{
X register u_char *cp;
X int nr;
X int br;
X
X br = 0;
X do { /* until no more data available */
X nr = read (fd, (char *) netrbuf, BUFSZ);
X if (nr > 0) {
X br += nr;
X for (cp = netrbuf; cp < (netrbuf + nr); cp++) {
X switch (telnet_state) {
X case TNS_DATA: /* normal data processing */
X if (*cp == IAC) /* got a telnet command */
X telnet_state = TNS_IAC;
X else
X *ibptr++ = *cp;
X break;
X case TNS_IAC: /* process a telnet command */
X switch (*cp) {
X case IAC: /* escaped IAC, insert it */
X *ibptr++ = *cp;
X telnet_state = TNS_DATA;
X break;
X case EOR: /* eor, process accumulated input */
X net_process (ibuf, ibptr - ibuf);
X ibptr = ibuf;
X telnet_state = TNS_DATA;
X break;
X case WILL:
X telnet_state = TNS_WILL;
X break;
X case WONT:
X telnet_state = TNS_WONT;
X break;
X case DO:
X telnet_state = TNS_DO;
X break;
X case DONT:
X telnet_state = TNS_DONT;
X break;
X case SB:
X telnet_state = TNS_SB;
X sbptr = sbbuf;
X break;
X }
X break;
X case TNS_WILL: /* telnet WILL DO OPTION command */
X switch (*cp) {
X case TELOPT_BINARY:
X case TELOPT_EOR:
X case TELOPT_TTYPE:
X if (!hisopts[*cp]) {
X hisopts[*cp] = 1;
X do_opt[2] = *cp;
X (void) write (fd, (char *) do_opt, sizeof (do_opt));
X }
X break;
X default:
X dont_opt[2] = *cp;
X (void) write (fd, (char *) dont_opt, sizeof (dont_opt));
X break;
X }
X telnet_state = TNS_DATA;
X break;
X case TNS_WONT: /* telnet WONT DO OPTION command */
X switch (*cp) {
X case TELOPT_BINARY:
X case TELOPT_EOR:
X case TELOPT_TTYPE:
X (void) fprintf (stderr, "3270tool: Remote host won't do option 0%03o.\n", *cp);
X (void) fprintf (stderr, "3270tool: Are you sure it's an IBM?\n");
X window_done (frame);
X break;
X default:
X hisopts[*cp] = 0;
X break;
X }
X telnet_state = TNS_DATA;
X break;
X case TNS_DO: /* telnet PLEASE DO OPTION command */
X switch (*cp) {
X case TELOPT_BINARY:
X case TELOPT_EOR:
X case TELOPT_TTYPE:
X if (!myopts[*cp]) {
X myopts[*cp] = 1;
X will_opt[2] = *cp;
X (void) write (fd, (char *) will_opt, sizeof (will_opt));
X }
X break;
X default:
X wont_opt[2] = *cp;
X (void) write (fd, (char *) wont_opt, sizeof (wont_opt));
X break;
X }
X telnet_state = TNS_DATA;
X break;
X case TNS_DONT: /* telnet PLEASE DON'T DO OPTION command */
X switch (*cp) {
X case TELOPT_BINARY:
X case TELOPT_EOR:
X case TELOPT_TTYPE:
X (void) fprintf (stderr, "3270tool: Remote host says don't do option 0%03o.\n", *cp);
X (void) fprintf (stderr, "3270tool: Are you sure it's an IBM?\n");
X window_done (frame);
X break;
X default:
X myopts[*cp] = 0;
X break;
X }
X telnet_state = TNS_DATA;
X break;
X case TNS_SB: /* telnet sub-option string command */
X if (*cp == IAC)
X telnet_state = TNS_SB_IAC;
X else
X *sbptr++ = *cp;
X break;
X case TNS_SB_IAC: /* telnet sub-option string command */
X if (*cp == SE) {
X telnet_state = TNS_DATA;
X if (sbbuf[0] == TELOPT_TTYPE && sbbuf[1] == TELQUAL_SEND) {
X (void) write (fd, (char *) ttype_opt, sizeof (ttype_opt));
X }
X }
X else {
X *sbptr = *cp; /* just stuff it */
X telnet_state = TNS_SB;
X }
X break;
X }
X }
X }
X else if (nr < 0 && errno != EWOULDBLOCK) { /* got an error */
X perror ("3270tool: read(net)");
X window_done (frame);
X }
X } while (nr > 0);
X if (br == 0)
X window_done (frame);
X return (NOTIFY_DONE);
X}
X
X
X/*
X * net_output
X * Called to send output over the network. Tacks on the necessary
X * telnet end-of-record command before doing a standard write.
X */
Xnet_output (buf, buflen)
Xu_char buf[];
Xint buflen;
X{
X extern int net_sock;
X
X buf[buflen++] = IAC;
X buf[buflen++] = EOR;
X if (write (net_sock, (char *) buf, buflen) != buflen) {
X perror ("3270tool: write(net)");
X window_done (frame);
X }
X}
--End_of_telnet.c--
if test 7794 -ne `wc -c < 'telnet.c'`
then
echo "`basename $0`: error in" 'telnet.c' ": sent 7794 chars, received `wc -c < 'telnet.c'`" 1>&2
fi
fi
if test -f '3270_enc.h'
then
echo "`basename $0`: can't extract" '3270_enc.h' "- file exists" 1>&2
else
sed 's/^X//' << '--End_of_3270_enc.h--' > '3270_enc.h'
X/*
X * Copyright 1989 by Georgia Tech Research Corporation, Atlanta, GA.
X * Copyright 1988, 1989 by Robert Viduya.
X *
X * All Rights Reserved
X */
X
X/*
X * 3270_enc.h
X *
X * Header file for 3270tool. Contains the character encoding
X * of the 3270.font vfont.
X */
X
X#define CG_NULLBLANK 0x00
X#define CG_OVERBAR1 0x01
X#define CG_OVERBAR2 0x02
X#define CG_OVERBAR3 0x03
X#define CG_OVERBAR4 0x04
X#define CG_OVERBAR5 0x05
X#define CG_OVERBAR6 0x06
X#define CG_OVERBAR7 0x07
X#define CG_GREATER 0x08
X#define CG_LESS 0x09
X#define CG_LBRACKET 0x0A
X#define CG_RBRACKET 0x0B
X#define CG_RPAREN 0x0C
X#define CG_LPAREN 0x0D
X#define CG_RBRACE 0x0E
X#define CG_LBRACE 0x0F
X#define CG_BLANK 0x10
X#define CG_EQUAL 0x11
X#define CG_SQUOTE 0x12
X#define CG_DQUOTE 0x13
X#define CG_FSLASH 0x14
X#define CG_BSLASH 0x15
X#define CG_SOLIDBAR 0x16
X#define CG_BROKENBAR 0x17
X#define CG_QUESTION 0x18
X#define CG_EXCLAMATION 0x19
X#define CG_DOLLAR 0x1A
X#define CG_CENT 0x1B
X#define CG_POUND 0x1C
X#define CG_YEN 0x1D
X#define CG_PT 0x1E
X#define CG_CURRENCY 0x1F
X#define CG_ZERO 0x20
X#define CG_ONE 0x21
X#define CG_TWO 0x22
X#define CG_THREE 0x23
X#define CG_FOUR 0x24
X#define CG_FIVE 0x25
X#define CG_SIX 0x26
X#define CG_SEVEN 0x27
X#define CG_EIGHT 0x28
X#define CG_NINE 0x29
X#define CG_SHARPS 0x2A
X#define CG_SECTION 0x2B
X#define CG_NUMBER 0x2C
X#define CG_AT 0x2D
X#define CG_PERCENT 0x2E
X#define CG_UNDERSCORE 0x2F
X#define CG_AMPERSAND 0x30
X#define CG_MINUS 0x31
X#define CG_PERIOD 0x32
X#define CG_COMMA 0x33
X#define CG_COLON 0x34
X#define CG_PLUS 0x35
X#define CG_NOT 0x36
X#define CG_OVERSCORE 0x37
X#define CG_DEGREE 0x38
X#define CG_BREVE 0x39
X#define CG_CIRCUMFLEX 0x3A
X#define CG_TILDE 0x3B
X#define CG_DIAERESIS 0x3C
X#define CG_GRAVE 0x3D
X#define CG_ACUTE 0x3E
X#define CG_CEDILLA 0x3F
X#define CG_LAACUTE1 0x40
X#define CG_LEACUTE1 0x41
X#define CG_LIACUTE1 0x42
X#define CG_LOACUTE1 0x43
X#define CG_LUACUTE1 0x44
X#define CG_LATILDE 0x45
X#define CG_LOTILDE 0x46
X#define CG_LYDIAERESIS 0x47
X#define CG_LAACUTE2 0x48
X#define CG_LEACUTE2 0x49
X#define CG_LEGRAVE1 0x4A
X#define CG_LIACUTE2 0x4B
X#define CG_LOACUTE2 0x4C
X#define CG_LUACUTE2 0x4D
X#define CG_LUDIAERESIS1 0x4E
X#define CG_LCCEDILLA1 0x4F
X#define CG_LADIAERESIS 0x50
X#define CG_LEDIAERESIS 0x51
X#define CG_LIDIAERESIS 0x52
X#define CG_LODIAERESIS 0x53
X#define CG_LUDIAERESIS2 0x54
X#define CG_LACIRCUMFLEX 0x55
X#define CG_LECIRCUMFLEX 0x56
X#define CG_LICIRCUMFLEX 0x57
X#define CG_LOCIRCUMFLEX 0x58
X#define CG_LUCIRCUMFLEX 0x59
X#define CG_LAGRAVE 0x5A
X#define CG_LEGRAVE2 0x5B
X#define CG_LIGRAVE 0x5C
X#define CG_LOGRAVE 0x5D
X#define CG_LUGRAVE 0x5E
X#define CG_LNTILDE 0x5F
X#define CG_CAACUTE 0x60
X#define CG_CEACUTE 0x61
X#define CG_CIACUTE 0x62
X#define CG_COACUTE 0x63
X#define CG_CUACUTE 0x64
X#define CG_CATILDE 0x65
X#define CG_COTILDE 0x66
X#define CG_CY1 0x67
X#define CG_CA1 0x68
X#define CG_CE1 0x69
X#define CG_CE2 0x6A
X#define CG_CI1 0x6B
X#define CG_CO1 0x6C
X#define CG_CU1 0x6D
X#define CG_CY2 0x6E
X#define CG_CC1 0x6F
X#define CG_CADIAERESIS 0x70
X#define CG_CEDIAERESIS 0x71
X#define CG_CIDIAERESIS 0x72
X#define CG_CODIAERESIS 0x73
X#define CG_CUDIAERESIS 0x74
X#define CG_CACIRCUMFLEX 0x75
X#define CG_CECIRCUMFLEX 0x76
X#define CG_CICIRCUMFLEX 0x77
X#define CG_COCIRCUMFLEX 0x78
X#define CG_CUCIRCUMFLEX 0x79
X#define CG_CAGRAVE 0x7A
X#define CG_CEGRAVE 0x7B
X#define CG_CIGRAVE 0x7C
X#define CG_COGRAVE 0x7D
X#define CG_CUGRAVE 0x7E
X#define CG_CNTILDE 0x7F
X#define CG_LA 0x80
X#define CG_LB 0x81
X#define CG_LC 0x82
X#define CG_LD 0x83
X#define CG_LE 0x84
X#define CG_LF 0x85
X#define CG_LG 0x86
X#define CG_LH 0x87
X#define CG_LI 0x88
X#define CG_LJ 0x89
X#define CG_LK 0x8A
X#define CG_LL 0x8B
X#define CG_LM 0x8C
X#define CG_LN 0x8D
X#define CG_LO 0x8E
X#define CG_LP 0x8F
X#define CG_LQ 0x90
X#define CG_LR 0x91
X#define CG_LS 0x92
X#define CG_LT 0x93
X#define CG_LU 0x94
X#define CG_LV 0x95
X#define CG_LW 0x96
X#define CG_LX 0x97
X#define CG_LY 0x98
X#define CG_LZ 0x99
X#define CG_LAE 0x9A
X#define CG_SSLASH0 0x9B
X#define CG_LADOT 0x9C
X#define CG_LCCEDILLA2 0x9D
X#define CG_FM 0x9E
X#define CG_DUP 0x9F
X#define CG_CA 0xA0
X#define CG_CB 0xA1
X#define CG_CC 0xA2
X#define CG_CD 0xA3
X#define CG_CE 0xA4
X#define CG_CF 0xA5
X#define CG_CG 0xA6
X#define CG_CH 0xA7
X#define CG_CI 0xA8
X#define CG_CJ 0xA9
X#define CG_CK 0xAA
X#define CG_CL 0xAB
X#define CG_CM 0xAC
X#define CG_CN 0xAD
X#define CG_CO 0xAE
X#define CG_CP 0xAF
X#define CG_CQ 0xB0
X#define CG_CR 0xB1
X#define CG_CS 0xB2
X#define CG_CT 0xB3
X#define CG_CU 0xB4
X#define CG_CV 0xB5
X#define CG_CW 0xB6
X#define CG_CX 0xB7
X#define CG_CY 0xB8
X#define CG_CZ 0xB9
X#define CG_CAE 0xBA
X#define CG_BSLASH0 0xBB
X#define CG_CADOT 0xBC
X#define CG_CCCEDILLA 0xBD
X#define CG_SEMICOLON 0xBE
X#define CG_ASTERISK 0xBF
X#define CG_0xC0 0xC0
X#define CG_0xC1 0xC1
X#define CG_0xC2 0xC2
X#define CG_0xC3 0xC3
X#define CG_0xC4 0xC4
X#define CG_0xC5 0xC5
X#define CG_0xC6 0xC6
X#define CG_0xC7 0xC7
X#define CG_0xC8 0xC8
X#define CG_0xC9 0xC9
X#define CG_0xCA 0xCA
X#define CG_0xCB 0xCB
X#define CG_0xCC 0xCC
X#define CG_0xCD 0xCD
X#define CG_0xCE 0xCE
X#define CG_0xCF 0xCF
X#define CG_PSP 0xD0
X#define CG_PSS 0xD1
X#define CG_BLOCKA 0xD2
X#define CG_INSERT 0xD3
X#define CG_BLOCKB 0xD4
X#define CG_BOX6 0xD5
X#define CG_RIGHTTRI 0xD6
X#define CG_STATION 0xD7
X#define CG_RIGHTARROW 0xD8
X#define CG_BADSTATION 0xD9
X#define CG_UPSHIFT 0xDA
X#define CG_HUMAN 0xDB
X#define CG_UNDERB 0xDC
X#define CG_DOWNSHIFT 0xDD
X#define CG_BOXQUESTION 0xDE
X#define CG_BOXSOLID 0xDF
X#define CG_0xE0 0xE0
X#define CG_0xE1 0xE1
X#define CG_0xE2 0xE2
X#define CG_0xE3 0xE3
X#define CG_0xE4 0xE4
X#define CG_0xE5 0xE5
X#define CG_0xE6 0xE6
X#define CG_0xE7 0xE7
X#define CG_0xE8 0xE8
X#define CG_0xE9 0xE9
X#define CG_0xEA 0xEA
X#define CG_0xEB 0xEB
X#define CG_0xEC 0xEC
X#define CG_0xED 0xED
X#define CG_0xEE 0xEE
X#define CG_0xEF 0xEF
X#define CG_BADCOMMHI 0xF0
X#define CG_COMMHI 0xF1
X#define CG_COMMJAG 0xF2
X#define CG_COMMLO 0xF3
X#define CG_CLOCKLEFT 0xF4
X#define CG_CLOCKRIGHT 0xF5
X#define CG_LOCK 0xF6
X#define CG_BUSYSTATION 0xF7
X#define CG_LEFTARROW 0xF8
X#define CG_BADBUSYSTATION 0xF9
X#define CG_KEYLEFT 0xFA
X#define CG_KEYRIGHT 0xFB
X#define CG_BOX4 0xFC
X#define CG_UNDERA 0xFD
X#define CG_MAGCARD 0xFE
X#define CG_BOXHUMAN 0xFF
--End_of_3270_enc.h--
if test 6207 -ne `wc -c < '3270_enc.h'`
then
echo "`basename $0`: error in" '3270_enc.h' ": sent 6207 chars, received `wc -c < '3270_enc.h'`" 1>&2
fi
fi
if test -f 'selection.c'
then
echo "`basename $0`: can't extract" 'selection.c' "- file exists" 1>&2
else
sed 's/^X//' << '--End_of_selection.c--' > 'selection.c'
X/*
X * Copyright 1989 by Georgia Tech Research Corporation, Atlanta, GA.
X * Copyright 1988, 1989 by Robert Viduya.
X *
X * All Rights Reserved
X */
X
X/*
X * selection.c
X * This module handles putting and getting the selection.
X * Selections in the window are done in a block-mode fashion
X * instead of the expected line-by-line. This seems more
X * appropriate for the displays produced by most IBM software.
X */
X
X#include <suntool/sunview.h>
X#include <suntool/canvas.h>
X#include <suntool/seln.h>
X#include <stdio.h>
X#include "3270.h"
X#include "3270_enc.h"
X
Xbool seln_isset;
Xint row_start, row_end, col_start, col_end; /* selection area */
XSeln_client s_client;
Xu_char prim_seln[ROWS * COLS + ROWS + 1];/* enough for screen + eols */
Xint prim_size = 0;
Xu_char shelf_seln[ROWS * COLS + ROWS + 1];
Xint shelf_size = 0;
Xextern u_char asc2cg[128], cg2asc[256];
Xextern u_char screen_buf[ROWS * COLS];
Xextern Pixwin *pixwin;
Xextern Pixfont *ibmfont;
Xextern int char_width, char_height, char_base;
X
X
XSeln_result
Xread_seln (buffer)
XSeln_request *buffer;
X{
X register char *cp;
X char *reply;
X int cgcode;
X Event event;
X
X if (*buffer->requester.context == 0) {
X if (buffer == (Seln_request *) NULL
X || *((Seln_attribute *) buffer->data) != SELN_REQ_CONTENTS_ASCII) {
X fprintf (stderr, "Selection holder error -- unknown request (in read_seln)\n");
X return (SELN_FAILED);
X }
X else {
X reply = buffer->data + sizeof (Seln_attribute);
X *buffer->requester.context = 1;
X }
X }
X else
X reply = buffer->data;
X bzero (&event, sizeof (event));
X for (cp = reply; *cp; cp++) {
X /* code copied out of canvas_event_proc in kybd.c */
X if ((*cp >= ' ' && *cp <= '~') || (*cp == 0x1B)) {
X cgcode = asc2cg[*cp];
X if (cgcode != CG_NULLBLANK)
X (void) key_Character (cgcode);
X }
X }
X return (SELN_SUCCESS);
X}
X
X
Xstuff_seln ()
X{
X Seln_holder holder;
X char context = 0;
X
X holder = seln_inquire (SELN_PRIMARY);
X if (holder.state == SELN_NONE) /* no selection */
X return;
X seln_query (&holder, read_seln, &context, SELN_REQ_CONTENTS_ASCII, 0, 0);
X}
X
X
Xkey_seln (client_data, args)
Xchar *client_data;
XSeln_function_buffer *args;
X{
X Seln_holder *holder;
X char context = 0;
X
X switch (seln_figure_response (args, &holder)) {
X case SELN_REQUEST: /* GET */
X seln_query (holder, read_seln, &context, SELN_REQ_CONTENTS_ASCII, 0, 0);
X break;
X case SELN_SHELVE: /* PUT */
X if (seln_acquire (s_client, SELN_SHELF) != SELN_SHELF)
X fprintf (stderr, "can't acquire shelf selection!\n");
X else {
X shelf_size = prim_size;
X bcopy (prim_seln, shelf_seln, shelf_size);
X }
X default: /* ignore the rest */
X break;
X }
X}
X
X
XSeln_result
Xreply_seln (item, context, length)
XSeln_attribute item;
XSeln_replier_data *context;
Xint length;
X{
X u_char *seln, *destp;
X int size, needed;
X
X switch (item) {
X case SELN_REQ_BYTESIZE:
X if (context->rank == SELN_PRIMARY) {
X *context->response_pointer++ = (char *) prim_size;
X return (SELN_SUCCESS);
X }
X else if (context->rank == SELN_SHELF) {
X *context->response_pointer++ = (char *) shelf_size;
X return (SELN_SUCCESS);
X }
X else
X return (SELN_DIDNT_HAVE);
X case SELN_REQ_YIELD:
X if (context->rank == SELN_PRIMARY) {
X clear_seln ();
X return (SELN_SUCCESS);
X }
X else if (context->rank == SELN_SHELF) {
X shelf_size = 0;
X return (SELN_SUCCESS);
X }
X else
X return (SELN_DIDNT_HAVE);
X case SELN_REQ_CONTENTS_ASCII:
X if (context->rank == SELN_PRIMARY)
X seln = prim_seln;
X else if (context->rank == SELN_SHELF)
X seln = shelf_seln;
X else
X return (SELN_DIDNT_HAVE);
X if (context->context == NULL)
X context->context = (char *) seln;
X size = strlen (context->context);
X destp = (u_char *) context->response_pointer;
X needed = size + 4;
X if (size % 4 != 0)
X needed += 4 - size % 4;
X if (needed <= length) { /* everything fits */
X strcpy (destp, context->context);
X destp += size;
X while ((int) destp % 4 != 0)
X *destp++ = '\0';
X context->response_pointer = (char **) destp;
X *context->response_pointer++ = 0;
X return (SELN_SUCCESS);
X }
X else {
X strncpy (destp, context->context, length);
X destp += length;
X context->response_pointer = (char **) destp;
X context->context += length;
X return (SELN_CONTINUED);
X }
X break;
X case SELN_REQ_END_REQUEST:
X return (SELN_SUCCESS);
X default:
X return (SELN_UNRECOGNIZED);
X }
X}
X
X
Xset_seln (sbaddr, ebaddr)
Xint sbaddr, ebaddr;
X{
X register u_char *cp;
X int r, c;
X
X cursor_off (); /* also clears selection, if any */
X /* make sure order is correct */
X if (ebaddr < sbaddr) {
X r = ebaddr;
X ebaddr = sbaddr;
X sbaddr = r;
X }
X col_start = BA_TO_COL (sbaddr);
X row_start = BA_TO_ROW (sbaddr);
X col_end = BA_TO_COL (ebaddr);
X row_end = BA_TO_ROW (ebaddr);
X pw_writebackground (
X pixwin,
X COL_TO_X (col_start), ROW_TO_Y (row_start),
X COL_TO_X (col_end - col_start + 1), ROW_TO_Y (row_end - row_start + 1),
X PIX_SET ^ PIX_DST
X );
X cp = prim_seln;
X for (r = row_start; r <= row_end; r++) {
X for (c = col_start; c <= col_end; c++)
X *cp++ = cg2asc[screen_buf[ROWCOL_TO_BA(r,c)]];
X *cp++ = '\n';
X }
X *cp = '\0';
X prim_size = cp - prim_seln;
X cursor_on ();
X seln_isset = TRUE;
X if (seln_acquire (s_client, SELN_PRIMARY) != SELN_PRIMARY)
X fprintf (stderr, "can't acquire primary selection!\n");
X}
X
X
Xclear_seln ()
X{
X if (!seln_isset)
X return;
X prim_size = 0;
X pw_writebackground (
X pixwin,
X COL_TO_X (col_start), ROW_TO_Y (row_start),
X COL_TO_X (col_end - col_start + 1), ROW_TO_Y (row_end - row_start + 1),
X PIX_SET ^ PIX_DST
X );
X seln_isset = FALSE;
X seln_done (s_client, SELN_PRIMARY);
X}
X
X
Xselection_init ()
X{
X s_client = seln_create (key_seln, reply_seln, (char *) 0);
X seln_isset = FALSE;
X}
X
X
Xselection_exit ()
X{
X seln_destroy (s_client);
X}
--End_of_selection.c--
if test 5912 -ne `wc -c < 'selection.c'`
then
echo "`basename $0`: error in" 'selection.c' ": sent 5912 chars, received `wc -c < 'selection.c'`" 1>&2
fi
fi
if test -f '3270.h'
then
echo "`basename $0`: can't extract" '3270.h' "- file exists" 1>&2
else
sed 's/^X//' << '--End_of_3270.h--' > '3270.h'
X/*
X * Copyright 1989 by Georgia Tech Research Corporation, Atlanta, GA.
X * Copyright 1988, 1989 by Robert Viduya.
X *
X * All Rights Reserved
X */
X
X/*
X * 3270.h
X *
X * Header file for 3270tool. Contains a number of constants
X * and macros that shouldn't be changed unless you know what
X * you're doing.
X */
X
X/* 3270 commands */
X#define CMD_EAU 0x0F /* erase all unprotected */
X#define CMD_EW 0x05 /* erase/write */
X#define CMD_EWA 0x0D /* erase/write alternate */
X#define CMD_RB 0x02 /* read buffer */
X#define CMD_RM 0x06 /* read modified */
X#define CMD_W 0x01 /* write */
X#define CMD_NOP 0x03 /* no-op */
X
X/* 3270 orders */
X#define ORDER_SF 0x1D /* start field */
X#define ORDER_SFE 0x29 /* start field extended */
X#define ORDER_SBA 0x11 /* set buffer address */
X#define ORDER_SA 0x28 /* set attribute */
X#define ORDER_MF 0x2C /* modify field */
X#define ORDER_IC 0x13 /* insert cursor */
X#define ORDER_PT 0x05 /* program tab */
X#define ORDER_RA 0x3C /* repeat to address */
X#define ORDER_EUA 0x12 /* erase unprotected to address */
X#define ORDER_GE 0x08 /* graphic escape */
X#define ORDER_YALE 0x2B /* Yale sub command */
X
X/* screen dimensions */
X#define COLS 80
X#define ROWS 24
X
X#define CHAR_WIDTH (ibmfont->pf_char[0x10].pc_pr->pr_size.x)
X#define CHAR_HEIGHT (ibmfont->pf_char[0x10].pc_pr->pr_size.y)
X#define CHAR_BASE (ibmfont->pf_char[0x10].pc_home.y)
X#define X_TO_COL(x_pos) ((x_pos) / char_width)
X#define Y_TO_ROW(y_pos) ((y_pos) / char_height)
X#define COL_TO_X(col) ((col) * char_width)
X#define ROW_TO_Y(row) ((row) * char_height)
X#define ROW_TO_YC(row) ((row) * char_height - char_base)
X
X#define BA_TO_ROW(ba) ((ba) / COLS)
X#define BA_TO_COL(ba) ((ba) % COLS)
X#define ROWCOL_TO_BA(r,c) (((r) * COLS) + c)
X#define INC_BA(ba) \
X { \
X if (++ba >= (COLS * ROWS)) \
X ba = 0; \
X }
X
X#define DEC_BA(ba) \
X { \
X if (--ba < 0) \
X ba = (COLS * ROWS) - 1; \
X }
X
X
X#define PW_CHAR(pw,xcoord,ycoord,op,char) \
X pw_rop ( \
X pw, xcoord, ycoord, \
X char_width, char_height, \
X op, ibmfont->pf_char[(char ? char : 0x10)].pc_pr, 0, 0 \
X )
X
X
X/* field attribute definitions
X * The font used (3270.font) in ibmfont is based on the 3270 character
X * generator font found on page 12-2 in the IBM 3270 Information Display
X * System Character Set Reference. Characters 0xC0 through 0xCF and
X * 0xE0 through 0xEF (inclusive) are purposely left blank and are used
X * to represent field attributes as follows:
X *
X * 11x0xxxx
X * | ||||
X * | ||++--- 00 normal intensity/non-selectable
X * | || 01 normal intensity/selectable
X * | || 10 high intensity/selectable
X * | || 11 zero intensity/non-selectable
X * | |+----- unprotected(0)/protected(1)
X * | +------ alphanumeric(0)/numeric(1)
X * +-------- unmodified(0)/modified(1)
X */
X#define FA_BASE 0xC0
X#define FA_MASK 0xD0
X#define FA_MODIFY 0x20
X#define FA_NUMERIC 0x08
X#define FA_PROTECT 0x04
X#define FA_INTENSITY 0x03
X
X#define FA_INT_NORM_NSEL 0x00
X#define FA_INT_NORM_SEL 0x01
X#define FA_INT_HIGH_SEL 0x02
X#define FA_INT_ZERO_NSEL 0x03
X
X#define IS_FA(c) (((c) & FA_MASK) == FA_BASE)
X
X#define FA_IS_MODIFIED(c) ((c) & FA_MODIFY)
X#define FA_IS_NUMERIC(c) ((c) & FA_NUMERIC)
X#define FA_IS_PROTECTED(c) ((c) & FA_PROTECT)
X
X#define FA_IS_ZERO(c) \
X (((c) & FA_INTENSITY) == FA_INT_ZERO_NSEL)
X#define FA_IS_HIGH(c) \
X (((c) & FA_INTENSITY) == FA_INT_HIGH_SEL)
X#define FA_IS_NORMAL(c) \
X ( \
X ((c) & FA_INTENSITY) == FA_INT_NORM_NSEL \
X || \
X ((c) & FA_INTENSITY) == FA_INT_NORM_SEL \
X )
X#define FA_IS_SELECTABLE(c) \
X ( \
X ((c) & FA_INTENSITY) == FA_INT_NORM_SEL \
X || \
X ((c) & FA_INTENSITY) == FA_INT_HIGH_SEL \
X )
X
X
X/* WCC definitions */
X#define WCC_START_PRINTER(c) ((c) & 0x08)
X#define WCC_SOUND_ALARM(c) ((c) & 0x04)
X#define WCC_KEYBOARD_RESTORE(c) ((c) & 0x02)
X#define WCC_RESET_MDT(c) ((c) & 0x01)
X
X/* AIDs */
X#define AID_NO 0x60 /* no AID generated */
X#define AID_ENTER 0x7D
X#define AID_PF1 0xF1
X#define AID_PF2 0xF2
X#define AID_PF3 0xF3
X#define AID_PF4 0xF4
X#define AID_PF5 0xF5
X#define AID_PF6 0xF6
X#define AID_PF7 0xF7
X#define AID_PF8 0xF8
X#define AID_PF9 0xF9
X#define AID_PF10 0x7A
X#define AID_PF11 0x7B
X#define AID_PF12 0x7C
X#define AID_PF13 0xC1
X#define AID_PF14 0xC2
X#define AID_PF15 0xC3
X#define AID_PF16 0xC4
X#define AID_PF17 0xC5
X#define AID_PF18 0xC6
X#define AID_PF19 0xC7
X#define AID_PF20 0xC8
X#define AID_PF21 0xC9
X#define AID_PF22 0x4A
X#define AID_PF23 0x4B
X#define AID_PF24 0x4C
X#define AID_OICR 0xE6
X#define AID_MSR_MHS 0xE7
X#define AID_SELECT 0x7E
X#define AID_PA1 0x6C
X#define AID_PA2 0x6E
X#define AID_PA3 0x6B
X#define AID_CLEAR 0x6D
X#define AID_SYSREQ 0xF0
--End_of_3270.h--
if test 4709 -ne `wc -c < '3270.h'`
then
echo "`basename $0`: error in" '3270.h' ": sent 4709 chars, received `wc -c < '3270.h'`" 1>&2
fi
fi
if test -f 'BtnEnter'
then
echo "`basename $0`: can't extract" 'BtnEnter' "- file exists" 1>&2
else
sed 's/^X//' << '--End_of_BtnEnter--' > 'BtnEnter'
X/* Format_version=1, Width=32, Height=32, Depth=1, Valid_bits_per_item=16
X */
X 0xFFFF,0xFFFF,0x8000,0x0001,0x8000,0x0001,0x8000,0x0001,
X 0x8000,0x0001,0x8000,0x0001,0x8000,0x0001,0x8000,0x0001,
X 0x8000,0x0001,0x8000,0x0001,0x8000,0x0001,0x8000,0x0001,
X 0xBC01,0x0001,0xA0A3,0xC629,0xB8D1,0x0935,0xA091,0x0E21,
X 0xA091,0x0821,0xBC90,0xC721,0x8000,0x0001,0x8000,0x0001,
X 0x8000,0x0001,0x8000,0x0001,0x8000,0x0001,0x8000,0x0001,
X 0x8000,0x0001,0x8000,0x0001,0x8000,0x0001,0x8000,0x0001,
X 0x8000,0x0001,0x8000,0x0001,0x8000,0x0001,0xFFFF,0xFFFF
--End_of_BtnEnter--
if test 541 -ne `wc -c < 'BtnEnter'`
then
echo "`basename $0`: error in" 'BtnEnter' ": sent 541 chars, received `wc -c < 'BtnEnter'`" 1>&2
fi
fi
exit 0
--
Robert Viduya robert at shangri-la.gatech.edu
Office of Computing Services
Georgia Institute of Technology (404) 894-6296
Atlanta, Georgia 30332-0275
More information about the Comp.sources.sun
mailing list