/* * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a * aplicativos mainframe. Registro no INPI sob o nome G3270. * * Copyright (C) <2008> * * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela * Free Software Foundation. * * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para * obter mais detalhes. * * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA, 02111-1307, USA * * Este programa está nomeado como apl.c e possui 219 linhas de código. * * Contatos: * * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) * licinio@bb.com.br (Licínio Luis Branco) * kraucer@bb.com.br (Kraucer Fernandes Mazuco) * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda) * */ /* * apl.c * This module handles APL-specific actions. */ #include "globals.h" #if defined(X3270_APL) /*[*/ // #include #include "aplc.h" /* * APL keysym translation. * * This code looks a little odd because of how an APL font is implemented. * An APL font has APL graphics in place of the various accented letters and * special symbols in a regular font. APL keysym translation consists of * taking the keysym name for an APL symbol (these names are meaningful only to * x3270) and translating it into the keysym for the regular symbol that the * desired APL symbol _replaces_. * * For example, an APL font has the APL "jot" symbol where a regular font has * the "registered" symbol. So we take the keysym name "jot" and translate it * into the keysym XK_registered. When the XK_registered symbol is displayed * with an APL font, it appears as a "jot". * * The specification of which APL symbols replace which regular symbols is in * IBM GA27-3831, 3174 Establishment Controller Character Set Reference. * * In addition, several standard characters have different names for APL, * for example, "period" becomes "dot". These are included in the table as * well. */ /* static struct { const char *name; KeySym keysym; int is_ge; } axl[] = { { "Aunderbar", XK_nobreakspace, 1 }, { "Bunderbar", XK_acircumflex, 1 }, { "Cunderbar", XK_adiaeresis, 1 }, { "Dunderbar", XK_agrave, 1 }, { "Eunderbar", XK_aacute, 1 }, { "Funderbar", XK_atilde, 1 }, { "Gunderbar", XK_aring, 1 }, { "Hunderbar", XK_ccedilla, 1 }, { "Iunderbar", XK_ntilde, 1 }, { "Junderbar", XK_eacute, 1 }, { "Kunderbar", XK_ecircumflex, 1 }, { "Lunderbar", XK_ediaeresis, 1 }, { "Munderbar", XK_egrave, 1 }, { "Nunderbar", XK_iacute, 1 }, { "Ounderbar", XK_icircumflex, 1 }, { "Punderbar", XK_idiaeresis, 1 }, { "Qunderbar", XK_igrave, 1 }, { "Runderbar", XK_ssharp, 1 }, { "Sunderbar", XK_Acircumflex, 1 }, { "Tunderbar", XK_Adiaeresis, 1 }, { "Uunderbar", XK_Agrave, 1 }, { "Vunderbar", XK_Aacute, 1 }, { "Wunderbar", XK_Atilde, 1 }, { "Xunderbar", XK_Aring, 1 }, { "Yunderbar", XK_Ccedilla, 1 }, { "Zunderbar", XK_Ntilde, 1 }, { "alpha", XK_asciicircum, 1 }, { "bar", XK_minus, 0 }, { "braceleft", XK_braceleft, 1 }, { "braceright", XK_braceright, 1 }, { "bracketleft", XK_Yacute, 1 }, { "bracketright", XK_diaeresis, 1 }, { "circle", XK_cedilla, 1 }, { "circlebar", XK_Ograve, 1 }, { "circleslope", XK_otilde, 1 }, { "circlestar", XK_Ugrave, 1 }, { "circlestile", XK_ograve, 1 }, { "colon", XK_colon, 0 }, { "comma", XK_comma, 0 }, { "commabar", XK_W, 1 }, // soliton { "del", XK_bracketleft, 1 }, { "delstile", XK_udiaeresis, 1 }, { "delta", XK_bracketright, 1 }, { "deltastile", XK_ugrave, 1 }, { "deltaunderbar", XK_Udiaeresis, 1 }, { "deltilde", XK_Ucircumflex, 1 }, { "diaeresis", XK_Ecircumflex, 1 }, { "diaeresiscircle", XK_V, 1 }, // soliton { "diaeresisdot", XK_Odiaeresis, 1 }, { "diaeresisjot", XK_U, 1 }, // soliton { "diamond", XK_oslash, 1 }, { "dieresis", XK_Ecircumflex, 1 }, { "dieresisdot", XK_Odiaeresis, 1 }, { "divide", XK_onehalf, 1 }, { "dot", XK_period, 0 }, { "downarrow", XK_guillemotright, 1 }, { "downcaret", XK_Igrave, 1 }, { "downcarettilde", XK_ocircumflex, 1 }, { "downshoe", XK_questiondown, 1 }, { "downstile", XK_thorn, 1 }, { "downtack", XK_ETH, 1 }, { "downtackjot", XK_Uacute, 1 }, { "downtackup", XK_onesuperior, 1 }, { "downtackuptack", XK_onesuperior, 1 }, { "epsilon", XK_sterling, 1 }, { "epsilonunderbar", XK_Iacute, 1 }, { "equal", XK_equal, 0 }, { "equalunderbar", XK_backslash, 1 }, { "euro", XK_X, 1 }, // soliton { "greater", XK_greater, 0 }, { "iota", XK_yen, 1 }, { "iotaunderbar", XK_Egrave, 1 }, { "jot", XK_registered, 1 }, { "leftarrow", XK_currency, 1 }, { "leftbracket", XK_Yacute, 1 }, { "leftparen", XK_parenleft, 0 }, { "leftshoe", XK_masculine, 1 }, { "lefttack", XK_Icircumflex, 1 }, { "less", XK_less, 0 }, { "multiply", XK_paragraph, 1 }, { "notequal", XK_acute, 1 }, { "notgreater", XK_eth, 1 }, { "notless", XK_THORN, 1 }, { "omega", XK_copyright, 1 }, { "overbar", XK_mu, 1 }, { "plus", XK_plus, 0 }, { "plusminus", XK_AE, 1 }, { "quad", XK_degree, 1 }, { "quaddivide", XK_Oacute, 1 }, { "quadjot", XK_Ediaeresis, 1 }, { "quadquote", XK_uacute, 1 }, { "quadslope", XK_oacute, 1 }, { "query", XK_question, 0 }, { "quote", XK_apostrophe, 0 }, { "quotedot", XK_ucircumflex, 1 }, { "rho", XK_periodcentered, 1 }, { "rightarrow", XK_plusminus, 1 }, { "rightbracket", XK_diaeresis, 1 }, { "rightparen", XK_parenright, 0 }, { "rightshoe", XK_ordfeminine, 1 }, { "righttack", XK_Idiaeresis, 1 }, { "semicolon", XK_semicolon, 0 }, { "slash", XK_slash, 0 }, { "slashbar", XK_twosuperior, 1 }, { "slope", XK_onequarter, 1 }, { "slopebar", XK_Ocircumflex, 1 }, { "slopequad", XK_oacute, 1 }, { "splat", XK_ae, 1 }, { "squad", XK_odiaeresis, 1 }, { "star", XK_asterisk, 0 }, { "stile", XK_multiply, 1 }, { "tilde", XK_Ooblique, 1 }, { "times", XK_paragraph, 1 }, { "underbar", XK_underscore, 0 }, { "uparrow", XK_guillemotleft, 1 }, { "upcaret", XK_Eacute, 1 }, { "upcarettilde", XK_hyphen, 1 }, { "upshoe", XK_exclamdown, 1 }, { "upshoejot", XK_ydiaeresis, 1 }, { "upstile", XK_yacute, 1 }, { "uptack", XK_macron, 1 }, { "uptackjot", XK_Otilde, 1 }, { 0, 0 } }; // // Translation from APL ksysym names to indirect APL keysyms. // KeySym APLStringToKeysym(char *s, int *is_gep) { register int i; if (strncmp(s, "apl_", 4)) return NoSymbol; s += 4; for (i = 0; axl[i].name; i++) if (!strcmp(axl[i].name, s)) { *is_gep = axl[i].is_ge; return axl[i].keysym; } return NoSymbol; } */ #endif /*]*/