+#include "apl.h"
+
+asciich() {
+ extern unsigned char *iline;
+ extern struct asoperbox charconv[OPERBOXSIZE];
+ register D,E,F,I;
+
+ F = *iline++;
+ if ( ( F == '.') && ( digit(*iline) == 0 ) ) {
+ D = (int)*iline++;
+ E = (int)*iline++;
+ for (I = 0; I <= OPERBOXSIZE;I++) {
+ if (( D== (charconv[I].letters[0]) ) &&
+ ( E== (charconv[I].letters[1]) ) ) {
+ F = charconv[I].returnchar;
+ goto out;
+ }
+ }
+ --iline;--iline;
+ }
+out: return(F);
+};
+
+/* eventually this should be replaces with arrays that hae a better */
+/* method of selecting and returning the lexical value, but */
+/* for now, this is a quick implementation */
+/* */
+/* use char as subscript from ascii - get apl character hopefully */
+/* for character conversion from ascii to apl char set --- */
+/* see files write2.c and write3.c for more recent version */
+
+struct asoperbox charconv[OPERBOXSIZE] = {
+/* ascii mnemonic ( from HP APL ascii char mnemonics and */
+/* equivalent apl character value. */
+/* all are two lowercase letters preceeded by a dot. */
+/* letters for identifiers are lowercase or uppercase */
+/* lowercase corresponding to apl uppercase and */
+/* uppercase corresponding to apl underscored letters. */
+
+"le", /* less than or equal */ '$',
+"ge", /* greater than or equal*/ '^',
+"ne", /* not equal */ '*',
+"om", /* omega ( not used ) */ 'W',
+"ep", /* epsilon */ 'E',
+"rh", /* shape (rho) */ 'R',
+"nt", /* not ( also '~' ) */ 'T',
+"tk", /* take ( also '^' ) */ 'Y',
+"dr", /* drop */ 'U',
+"it", /* iota */ 'I',
+"ci", /* circular function */ 'O',
+"al", /* alpha ( not used ) */ 'A',
+"cl", /* maximum ( ceiling ) */ 'S',
+"fl", /* minimum ( floor ) */ 'D',
+"dl", /* del ( not used ) */ 'G',
+"de", /* upside down del */ 'H',
+"jt", /* small circle ( null )*/ 'J',
+"qd", /* quad */ 'L',
+"ss", /* right U ( not used ) */ 'Z',
+"sc", /* left U ( not used ) */ 'X',
+"si", /* Down U */ 'C',
+"su", /* U ( not used ) */ 'V',
+"[^", /* upside-down del */ 'H',
+"bv", /* decode ( base ) */ 'B',
+"rp", /* encode ( rep ) */ 'N',
+"br", /* residue ( mod ) */ 'M',
+"sp", /* assignment */ '[',
+"go", /* goto */ ']',
+"or", /* or */ '(',
+"nn", /* nand */ 0205,
+"nr", /* nor */ 0206,
+"lg", /* log */ 0207,
+"rv", /* reversal */ 0217,
+"tr", /* transpose */ 0212,
+"rb", /* reverse bar */ 0214,
+"cb", /* comma bar ( not used)*/ 0,
+"sb", /* slash bar */ 0200,
+"bb", /* blackslash bar */ 0201,
+"gu", /* grade up */ 0215,
+"gd", /* grade down */ 0216,
+"qq", /* quote quad */ 0202,
+"dm", /* domino */ 0214,
+"lm", /* lamp */ 0204,
+"ib", /* i - beam */ 0213,
+"ex", /* execute ( not used ) */ 0,
+"fr", /* format( not used ) */ 0,
+"di", /* diamond ( not used ) */ 0,
+"ot", /* out ( not used ) */ 0,
+"ld", /* locked del (not used)*/ 0,
+"[a", /* alias for 'A' */ 0220,
+"[b", /* alias for 'B' */ 0221,
+"[c", /* alias for 'C' */ 0222,
+"[d", /* alias for 'D' */ 0223,
+"[e", /* alias for 'E' */ 0224,
+"[f", /* alias for 'F' */ 0225,
+"[g", /* alias for 'G' */ 0226,
+"[h", /* alias for 'H' */ 0227,
+"[i", /* alias for 'I' */ 0230,
+"[j", /* alias for 'J' */ 0231,
+"[k", /* alias for 'K' */ 0232,
+"[l", /* alias for 'L' */ 0233,
+"[m", /* alias for 'M' */ 0234,
+"[n", /* alias for 'N' */ 0235,
+"[o", /* alias for 'O' */ 0236,
+"[p", /* alias for 'P' */ 0237,
+"[q", /* alias for 'Q' */ 0240,
+"[r", /* alias for 'R' */ 0241,
+"[s", /* alias for 'S' */ 0242,
+"[t", /* alias for 'T' */ 0243,
+"[u", /* alias for 'U' */ 0244,
+"[v", /* alias for 'V' */ 0245,
+"[w", /* alias for 'W' */ 0246,
+"[x", /* alias for 'X' */ 0247,
+"[y", /* alias for 'Y' */ 0250,
+"[z", /* alias for 'Z' */ 0251
+};