Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!usc!elroy.jpl.nasa.gov!ames!ncar!boulder!sunybcs!sbcs!kepler1!vipoon From: vipoon@kepler1.UUCP (Victor I Poon) Newsgroups: comp.lang.apl Subject: APL Font for Wyse 60 Terminals (Part 1 of 1) Keywords: APL Font, Wyse Message-ID: <151@kepler1.UUCP> Date: 13 Aug 89 22:15:35 GMT Organization: Kepler Financial Mgmt, Setauket, NY Lines: 953 Apologies to anyone who doesn't believe that I should have posted this program in this group. "At the time, it seemed the logical thing to do." #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh'Font.desc' <<'END_OF_FILE' X APL Font Description X X The following list gives a description of each character and their Xcorresponding position in the array table. There wasn't much room to Xput comments in the program so I am including this file which defines Xall of the characters that are created in the font banks. This char- Xacter set maps vaguely to the PC Equivalent Font of the Wyse 60 Term- Xinals with APL characters substituting some of the more seldomly used Xcharacters. X--------------------------------------------------------------------- X XTable XEntry Description X----- ----------- X 32 Space X 33 Quote Dot (Shriek Binomial Factorial) X 34 Ascii Double Quote X 35 Hash X 36 Dollar X 37 Percent X 38 Ascii Ampersand & X 39 APL-Quote X 39 Ascii Quote Single ' X 40 Left-Parenthesis X 41 Right-Parenthesis X 42 Star (Exponential Power) X 43 Plus (Conjugate Add) X 44 Comma (Ravel Catenate) X 45 Bar (Negate Minus Subtract) X 46 Dot X 47 Slash (Replicate Reduce) X 48 0 Zero X 49 1 One X 50 2 Two X 51 3 Three X 52 4 Four X 53 5 Five X 54 6 Six X 55 7 Seven X 56 8 Eight X 57 9 Nine X 58 Colon X 59 Semicolon X 60 Left-Caret (Less than) X 61 Equal X 62 Right-Caret (Greater than) X 63 Query (Roll Deal) X 64 Ascii At sign @ X 65 Upper case A X 66 Upper case B X 67 Upper case C X 68 Upper case D X 69 Upper case E X 70 Upper case F X 71 Upper case G X 72 Upper case H X 73 Upper case I X 74 Upper case J X 75 Upper case K X 76 Upper case L X 77 Upper case M X 78 Upper case N X 79 Upper case O X 80 Upper case P X 81 Upper case Q X 82 Upper case R X 83 Upper case S X 84 Upper case T X 85 Upper case U X 86 Upper case V X 87 Upper case W X 88 Upper case X X 89 Upper case Y X 90 Upper case Z X 91 Left-Bracket X 92 Back-Slash (Expand Scan) X 93 Right-Bracket X 94 Up-Caret (And) X 94 Ascii Caret X 95 Underbar X 96 Ascii Back Quote X 97 Lower case a X 98 Lower case b X 99 Lower case c X100 Lower case d X101 Lower case e X102 Lower case f X103 Lower case g X104 Lower case h X105 Lower case i X106 Lower case j X107 Lower case k X108 Lower case l X109 Lower case m X110 Lower case n X111 Lower case o X112 Lower case p X113 Lower case q X114 Lower case r X115 Lower case s X116 Lower case t X117 Lower case u X118 Lower case v X119 Lower case w X120 Lower case x X121 Lower case y X122 Lower case z X123 Left-Brace X124 Stile (Absolute Residue Modulus) X124 Ascii Pipe X125 Right-Brace X126 Tilde (Not Exclude Without) X127 Delta X128 Delta underbar X129 Upper case A underscore X130 Upper case B underscore X131 Upper case C underscore X132 Upper case D underscore X133 Upper case E underscore X134 Upper case F underscore X135 Upper case G underscore X136 Upper case H underscore X137 Upper case I underscore X138 Upper case J underscore X139 Upper case K underscore X140 Upper case L underscore X141 Upper case M underscore X142 Upper case N underscore X143 Upper case O underscore X144 Upper case P underscore X145 Upper case Q underscore X146 Upper case R underscore X147 Upper case S underscore X148 Upper case T underscore X149 Upper case U underscore X150 Upper case V underscore X151 Upper case W underscore X152 Upper case X underscore X153 Upper case Y underscore X154 Upper case Z underscore X155 Left Shoe Stile (Cent) X156 L bar (Pound Sterling) X157 Quad X158 Quote Quad X159 Quad Divide (Domino Matrix Inverse) X160 Up-Arrow (Mix Take) X161 Down-Arrow (Split Drop) X162 Left-Arrow X163 Right-Arrow X164 Down-Tack (decode base) X165 Up-Tack (encode represent) X166 Left-Tack X167 Right-Tack X168 Down-Tack Jot (Execute) X169 Up-Tack Jot (Format) X170 Slash Bar X171 Back-Slash bar X172 Delta Stile (Up Grade) X173 Del Stile (Down Grade) X174 Down-Caret Tilde (Nor) X175 Up-Caret Tilde (Nand) X176 Left-Shoe (Enclose) X177 Right-Shoe (Disclose) X178 Down-Shoe (Union) X179 Vertical Bar X180 Right T X186 Left-Bracket Right-Bracket (Squish) X191 Upper Right Corner X192 Lower Left Corner X193 Bottom T X194 Top T X195 Left T X196 Horiz Bar X197 Stile Bar X197 Crossing Lines X217 Lower Right Corner X218 Upper Left Corner X224 Alpha X225 Omega X226 Iota (Index) X227 Rho (Shape Reshape) X228 Multiply (Signum) X229 Overbar (High Minus) X230 Up-Tack Down-Tack (I-beam) X231 Del Tilde X232 Circle Stile (Rotate) X233 Circle Bar (Rotate 1st) X234 Circle Star (Power) X235 Up-Shoe Jot (Lamp Comment) X236 Down-Caret (Or) X237 Circle Backslash (Transpose) X238 Epsilon (Type Membership) X239 Up-Shoe (Intersection) X240 Equal Underbar (Match) X241 Not-Equal Underbar (Natch) X242 Greater-than-or-Equal X243 Less-than-or-Equal X244 Ceiling (Max) X245 Floor (Min) X246 Divide (Reciprocal) X247 Not-Equal X248 Jot (Compose) X249 Circle (Trig) X250 Zero Tilde (Zilde) X251 Diamond X252 Comma Bar X253 Diaeresis (each) X254 Diaeresis Tilde (Commute) X255 Del (Function Edit) END_OF_FILE if test 5138 -ne `wc -c <'Font.desc'`; then echo shar: \"'Font.desc'\" unpacked with wrong size! fi # end of 'Font.desc' fi if test -f 'MANIFEST' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MANIFEST'\" else echo shar: Extracting \"'MANIFEST'\" \(497 characters\) sed "s/^X//" >'MANIFEST' <<'END_OF_FILE' X File Name Archive # Description X----------------------------------------------------------- X MANIFEST 1 This shipping list X Makefile 1 Control file for Unix make program X README 1 Acknowledgements, installation notes X Font.desc 1 A description of the characrters X cvtfont.c 1 Converts an ASCII display of fonts to decimal X waplfont.c 1 Downloads an APL font into the Wyse terminal END_OF_FILE if test 497 -ne `wc -c <'MANIFEST'`; then echo shar: \"'MANIFEST'\" unpacked with wrong size! fi # end of 'MANIFEST' fi if test -f 'Makefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Makefile'\" else echo shar: Extracting \"'Makefile'\" \(309 characters\) sed "s/^X//" >'Makefile' <<'END_OF_FILE' X# X# Makefile for Wyse APL Character Set Download X# X# $Header: Makefile,v 1.0, 89/08/11 11:05:30 Victor Poon X# X XCFLAGS = -O XREMOVE = rm -f X Xall: waplfont cvtfont X Xcvtfont: cvtfont.c X cc $(CFLAGS) -o cvtfont cvtfont.c X Xwaplfont: waplfont.c X cc $(CFLAGS) -o waplfont waplfont.c X Xclean: X $(REMOVE) *.o core END_OF_FILE if test 309 -ne `wc -c <'Makefile'`; then echo shar: \"'Makefile'\" unpacked with wrong size! fi # end of 'Makefile' fi if test -f 'README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'README'\" else echo shar: Extracting \"'README'\" \(3979 characters\) sed "s/^X//" >'README' <<'END_OF_FILE' XIntroduction X------------ X Since APL is closely integrated into our environment, we were Xlooking at APL terminals which we could attach to our serial ports. XMost of the terminals which we looked at were quite expensive and it Xwas then that I came across the idea of loading an APL font into a XWyse 60 which we have lying around. X X This set of sources is being released into the public domain. XYou can freely distribute it in any way you want. If you enhance this Xpackage, I would appreciate it if you can send me the diffs so that I Xcan add it on to my own stuff. The code is fairly simple so there Xshould not be any problems compiling on different flavors of UNIX. X X XWyse 60 X------- X The Wyse 60 has four font banks of which you can select a Xprimary and secondary bank. Each bank hold 128 characters and this Xgives you access to a total of 256 characters which is enough to Xhold (quad) AV. Each of the characters is an 8x16 bit-map and can be Xdescribed as a 40 byte escape sequence. Even at 2400 baud, it takes Xless than 30 seconds to download the whole font. X X The escape sequence to define a character looks like the Xfollowing: X X ESC c A kk pp bb bb ... bb ^Y ( 40 byte sequence ) X X where kk is the font bank ("00" - "03"), X pp is the character position ("00" - "FF") X bb is the character bit map for one pixel line (in hex) X XAll of the above values are sent to the terminal as a two-byte ASCII. X X The largest problem with the Wyse or any ASCII terminal is that Xit doesn't support overstriked characters; a unique function of APL Xthat makes ASCII terminals almost useless for the language. There isn't Xany way around this problem unless you happen to have a very intelligent Xterminal (like a PC/XT). However, we use a version of APL for Dyalog Xwhich allows you to re-map the character set to any set of escape Xsequences. X XHardware Problems: X X o The Wyse 60 does not seem to be fast enough to keep up X with downloading a font at 9600 baud (w/ XON/XOFF control). X I've included an option flag to add a delay loop which adds X a small delay before sending the next escape sequence. X X o For some reason, (I haven't talk to Wyse about it yet) the X screen flickers and switches fonts even when you are NOT X downloading to the primary and secondary banks. The screen X returns to normal afterwards but it is quite distrubing to X watch. X X XDyalog APL X---------- X Dyalog APL uses an input and output translation table to map Xthe APL character set. This is a very convienent feature which allows XDyalog is work with any terminal as long as you define two things: X X How to display each character in (Quad) AV. X What keystroke sequence to input them from the keyboard. X XIf anyone would like a copy of the input and output translation tables Xthat I am using, please drom me some email. X X XSTSC APL X-------- X We have an MSDOS version of STSC APL and I don't believe that Xthis will work with it. You can get all of the other characters but Xit will not able to generate the overstriked characters. We do not own Xa copy of STSC for UNIX so I'm not in any position to say. Also, some of Xthe characters have to be moved around which right now, is not an easy job. X X Xcvtapl and waplfont X------------------- X waplfont is the program which generates the escape sequences for Xthe Wyse terminals. There are two flags: X X -p This generates an printable display of all of the characters. X -s Slow: Adds a delay loop after sending out each character. X X cvtapl changes the printable display to decimal numbers which may Xbe substituted back into the program with a little work in vi. X X XMe, Myself, and I X----------------- X"I freely stole ideas from a number of people who have been good enough to Xput their stuff out on Usenet." X XI stole the above comment from Rich $alz. Thanks Rich. X X Victor Poon X Kepler Financial Management X 100 North Country Rd. X Setauket, NY 11733 X X vipoon@sbcs.sunysb.edu X {acsm, lilink, polyof, sbcs}!kepler1!vipoon END_OF_FILE if test 3979 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi # end of 'README' fi if test -f 'cvtfont.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'cvtfont.c'\" else echo shar: Extracting \"'cvtfont.c'\" \(2639 characters\) sed "s/^X//" >'cvtfont.c' <<'END_OF_FILE' X#ifndef lint Xstatic char c_cvtfont[] = "@(#)cvtfont.c 1.0 08/10/89"; X#endif X X/* Convert Font Display to Decimal Numbers X** Author: Victor Poon X*/ X#include X X X/* ASCII to Bit-mapped Character X** X** This takes a row of bits for one character and converts X** it to a decimal number which represents its bit-mapped value. X*/ Xatoc(bmap) Xchar *bmap; X{ X int i, /* Loop Counter */ X bvalue = 128, /* MSB Value */ X total = 0; /* Running Total */ X X for (i=0; i<8; i++) { X if (*(bmap+i) == '#') X total += bvalue; X bvalue /= 2; X } X X return (unsigned char) total; X} X X/* Parse A Line X** X** This routine takes each line of eight characters and X** passes them to the atoc subroutine. It stores the values X** in an array to be printed when the entire character is X** resolved. X** X** Note: There is no error checking done here. It is assumed X** that once a character is detected, the next sixteen X** lines are error free. X*/ Xparseline(buf, filep) Xchar *buf; XFILE *filep; X{ X int i, j, /* Loop Counters */ X bitmap[8][16]; /* Decimal Table for 8 chars */ X char bits[8][16], /* One Row of Bits for 8 chars */ X line[128]; /* Line Buffer */ Xstatic int nchars = 0; /* Character Counter */ X X /* 16 rows per character */ X for (i=0; i<16; i++) { X fgets(line, sizeof(line), filep); X sscanf(line, "%s %s %s %s %s %s %s %s", X bits[0], bits[1], bits[2], bits[3], X bits[4], bits[5], bits[6], bits[7]); X X /* 8 characters per row */ X for (j=0; j<8; j++) X bitmap[j][i] = atoc(bits[j]); X } X X /* Print what we have */ X for (i=0; i<8; i++) { X printf("%3d: ", nchars++); X for (j=0; j<16; j++) X printf("%3d ", bitmap[i][j]); X printf("\n"); X } X} X X/* Main Program X** X** This program reads a line at a time and determines if it is X** the start of a character map. The start is detected if the first X** character in the line is a '.' (period) or a '#' (pound sign). X** X** Note: There is really no error checking done in this program and X** hopefully, one day I'll have more time to do this correctly. X*/ Xmain(argc, argv) Xint argc; Xchar **argv; X{ X char buffer[80]; /* Temp Buffer */ X FILE *fp; /* Pointer to input file */ X X switch(argc) { X case 1: /* Take directly for stdin */ X fp = stdin; X break; X X case 2: /* Open font file */ X if ((fp = fopen(argv[1], "r")) == NULL) { X printf("Error: Cannot open %s for read\n", argv[1]); X exit(-1); X } X break; X X default: /* Print usage */ X printf("Usage: cvtfont [fontfile]\n"); X exit(-1); X } X /* Read each line */ X while (fgets(buffer, sizeof(buffer), fp) != NULL) X if (*buffer == '.' || *buffer == '#') X parseline(buffer, fp); X X fclose(fp); X} END_OF_FILE if test 2639 -ne `wc -c <'cvtfont.c'`; then echo shar: \"'cvtfont.c'\" unpacked with wrong size! fi # end of 'cvtfont.c' fi if test -f 'waplfont.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'waplfont.c'\" else echo shar: Extracting \"'waplfont.c'\" \(20646 characters\) sed "s/^X//" >'waplfont.c' <<'END_OF_FILE' X#ifndef lint Xstatic char c_waplfont[] = "@(#)waplfont.c 1.0 08/10/89"; X#endif X X/* Download an APL Character Set into the Wyse Terminals X** Author: Victor Poon X*/ X X#include X X#define BANK 0 /* Start font load in bank # */ X#define DELAY 75000 /* Delay between sending chars */ X X /* APL Character Set */ Xunsigned int aplfont[256][16] = { X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* 00 */ X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* 16 */ X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* 32 */ X{ 0, 0, 24, 60, 60, 60, 24, 24, 24, 0, 24, 24, 0, 0, 0, 0 }, X{ 0,102,102,102, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0,108,108,254,108,108,108,254,108,108, 0, 0, 0, 0 }, X{ 24, 24,124,198,194,192,124, 6, 6,134,198,124, 24, 24, 0, 0 }, X{ 0, 0, 0, 0,194,198, 12, 24, 48, 96,198,134, 0, 0, 0, 0 }, X{ 0, 0, 56,108,108, 56,118,220,204,204,204,118, 0, 0, 0, 0 }, X{ 0, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 12, 24, 48, 48, 48, 48, 48, 48, 24, 12, 0, 0, 0, 0 }, X{ 0, 0, 48, 24, 12, 12, 12, 12, 12, 12, 24, 48, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,102, 60,255, 60,102, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 24, 24,126, 24, 24, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 48, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 2, 6, 12, 24, 48, 96,192,128, 0, 0, 0, 0 }, X X{ 0, 0, 60,102,195,195,219,219,195,195,102, 60, 0, 0, 0, 0 }, /* 48 */ X{ 0, 0, 24, 56,120, 24, 24, 24, 24, 24, 24,126, 0, 0, 0, 0 }, X{ 0, 0,124,198, 6, 12, 24, 48, 96,192,198,254, 0, 0, 0, 0 }, X{ 0, 0,124,198, 6, 6, 60, 6, 6, 6,198,124, 0, 0, 0, 0 }, X{ 0, 0, 12, 28, 60,108,204,254, 12, 12, 12, 30, 0, 0, 0, 0 }, X{ 0, 0,254,192,192,192,252, 6, 6, 6,198,124, 0, 0, 0, 0 }, X{ 0, 0, 56, 96,192,192,252,198,198,198,198,124, 0, 0, 0, 0 }, X{ 0, 0,254,198, 6, 6, 12, 24, 48, 48, 48, 48, 0, 0, 0, 0 }, X{ 0, 0,124,198,198,198,124,198,198,198,198,124, 0, 0, 0, 0 }, X{ 0, 0,124,198,198,198,126, 6, 6, 6, 12,120, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 24, 24, 0, 0, 0, 24, 24, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 24, 24, 0, 0, 0, 24, 24, 48, 0, 0, 0, 0 }, X{ 0, 0, 0, 6, 12, 24, 48, 96, 48, 24, 12, 6, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,126, 0, 0,126, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 96, 48, 24, 12, 6, 12, 24, 48, 96, 0, 0, 0, 0 }, X{ 0, 0,124,198,198, 12, 24, 24, 24, 0, 24, 24, 0, 0, 0, 0 }, X X{ 0, 0, 0,124,198,198,222,222,222,220,192,124, 0, 0, 0, 0 }, /* 64 */ X{ 0, 0, 16, 56,108,198,198,254,198,198,198,198, 0, 0, 0, 0 }, X{ 0, 0,252,102,102,102,124,102,102,102,102,252, 0, 0, 0, 0 }, X{ 0, 0, 60,102,194,192,192,192,192,194,102, 60, 0, 0, 0, 0 }, X{ 0, 0,248,108,102,102,102,102,102,102,108,248, 0, 0, 0, 0 }, X{ 0, 0,254,102, 98,104,120,104, 96, 98,102,254, 0, 0, 0, 0 }, X{ 0, 0,254,102, 98,104,120,104, 96, 96, 96,240, 0, 0, 0, 0 }, X{ 0, 0, 60,102,194,192,192,222,198,198,102, 58, 0, 0, 0, 0 }, X{ 0, 0,198,198,198,198,254,198,198,198,198,198, 0, 0, 0, 0 }, X{ 0, 0, 60, 24, 24, 24, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0 }, X{ 0, 0, 30, 12, 12, 12, 12, 12,204,204,204,120, 0, 0, 0, 0 }, X{ 0, 0,230,102,102,108,120,120,108,102,102,230, 0, 0, 0, 0 }, X{ 0, 0,240, 96, 96, 96, 96, 96, 96, 98,102,254, 0, 0, 0, 0 }, X{ 0, 0,195,231,255,255,219,195,195,195,195,195, 0, 0, 0, 0 }, X{ 0, 0,198,230,246,254,222,206,198,198,198,198, 0, 0, 0, 0 }, X{ 0, 0,124,198,198,198,198,198,198,198,198,124, 0, 0, 0, 0 }, X X{ 0, 0,252,102,102,102,124, 96, 96, 96, 96,240, 0, 0, 0, 0 }, /* 80 */ X{ 0, 0,124,198,198,198,198,198,198,214,222,124, 12, 14, 0, 0 }, X{ 0, 0,252,102,102,102,124,108,102,102,102,230, 0, 0, 0, 0 }, X{ 0, 0,124,198,198, 96, 56, 12, 6,198,198,124, 0, 0, 0, 0 }, X{ 0, 0,255,219,153, 24, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0 }, X{ 0, 0,198,198,198,198,198,198,198,198,198,124, 0, 0, 0, 0 }, X{ 0, 0,195,195,195,195,195,195,195,102, 60, 24, 0, 0, 0, 0 }, X{ 0, 0,195,195,195,195,195,219,219,255,102,102, 0, 0, 0, 0 }, X{ 0, 0,195,195,102, 60, 24, 24, 60,102,195,195, 0, 0, 0, 0 }, X{ 0, 0,195,195,195,102, 60, 24, 24, 24, 24, 60, 0, 0, 0, 0 }, X{ 0, 0,255,195,134, 12, 24, 48, 96,193,195,255, 0, 0, 0, 0 }, X{ 0, 0, 60, 48, 48, 48, 48, 48, 48, 48, 48, 60, 0, 0, 0, 0 }, X{ 0, 0, 0,128,192,224,112, 56, 28, 14, 6, 2, 0, 0, 0, 0 }, X{ 0, 0, 60, 12, 12, 12, 12, 12, 12, 12, 12, 60, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 16, 56,108,198, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0 }, X X{ 48, 48, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* 96 */ X{ 0, 0, 0, 0, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0 }, X{ 0, 0,224, 96, 96,120,108,102,102,102,102,124, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,124,198,192,192,192,198,124, 0, 0, 0, 0 }, X{ 0, 0, 28, 12, 12, 60,108,204,204,204,204,118, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,124,198,254,192,192,198,124, 0, 0, 0, 0 }, X{ 0, 0, 56,108,100, 96,240, 96, 96, 96, 96,240, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,118,204,204,204,204,204,124, 12,204,120, 0 }, X{ 0, 0,224, 96, 96,108,118,102,102,102,102,230, 0, 0, 0, 0 }, X{ 0, 0, 24, 24, 0, 56, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0 }, X{ 0, 0, 6, 6, 0, 14, 6, 6, 6, 6, 6, 6,102,102, 60, 0 }, X{ 0, 0,224, 96, 96,102,108,120,120,108,102,230, 0, 0, 0, 0 }, X{ 0, 0, 56, 24, 24, 24, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,230,255,219,219,219,219,219, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,220,102,102,102,102,102,102, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,124,198,198,198,198,198,124, 0, 0, 0, 0 }, X X{ 0, 0, 0, 0, 0,220,102,102,102,102,102,124, 96, 96,240, 0 }, /* 112 */ X{ 0, 0, 0, 0, 0,118,204,204,204,204,204,124, 12, 12, 30, 0 }, X{ 0, 0, 0, 0, 0,220,118,102, 96, 96, 96,240, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,124,198, 96, 56, 12,198,124, 0, 0, 0, 0 }, X{ 0, 0, 16, 48, 48,252, 48, 48, 48, 48, 54, 28, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,204,204,204,204,204,204,118, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,195,195,195,195,102, 60, 24, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,195,195,195,219,219,255,102, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,195,102, 60, 24, 60,102,195, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,198,198,198,198,198,198,126, 6, 12,248, 0 }, X{ 0, 0, 0, 0, 0,254,204, 24, 48, 96,198,254, 0, 0, 0, 0 }, X{ 0, 0, 14, 24, 24, 24,112, 24, 24, 24, 24, 14, 0, 0, 0, 0 }, X{ 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0 }, X{ 0, 0,112, 24, 24, 24, 14, 24, 24, 24, 24,112, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 96,146, 12, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 16, 40, 68,130,254, 0, 0, 0, 0, 0, 0, 0 }, X X{ 0, 0, 0, 0, 16, 40, 68,130,254, 0, 0, 0, 0,255, 0, 0 }, /* 128 */ X{ 0, 0, 16, 56,108,198,198,254,198,198,198,198, 0,255, 0, 0 }, X{ 0, 0,252,102,102,102,124,102,102,102,102,252, 0,255, 0, 0 }, X{ 0, 0, 60,102,194,192,192,192,192,194,102, 60, 0,255, 0, 0 }, X{ 0, 0,248,108,102,102,102,102,102,102,108,248, 0,255, 0, 0 }, X{ 0, 0,254,102, 98,104,120,104, 96, 98,102,254, 0,255, 0, 0 }, X{ 0, 0,254,102, 98,104,120,104, 96, 96, 96,240, 0,255, 0, 0 }, X{ 0, 0, 60,102,194,192,192,222,198,198,102, 58, 0,255, 0, 0 }, X{ 0, 0,198,198,198,198,254,198,198,198,198,198, 0,255, 0, 0 }, X{ 0, 0, 60, 24, 24, 24, 24, 24, 24, 24, 24, 60, 0,255, 0, 0 }, X{ 0, 0, 30, 12, 12, 12, 12, 12,204,204,204,120, 0,255, 0, 0 }, X{ 0, 0,230,102,102,108,120,120,108,102,102,230, 0,255, 0, 0 }, X{ 0, 0,240, 96, 96, 96, 96, 96, 96, 98,102,254, 0,255, 0, 0 }, X{ 0, 0,195,231,255,255,219,195,195,195,195,195, 0,255, 0, 0 }, X{ 0, 0,198,230,246,254,222,206,198,198,198,198, 0,255, 0, 0 }, X{ 0, 0,124,198,198,198,198,198,198,198,198,124, 0,255, 0, 0 }, X X{ 0, 0,252,102,102,102,124, 96, 96, 96, 96,240, 0,255, 0, 0 }, /* 144 */ X{ 0, 0,124,198,198,198,198,198,198,214,222,124, 12,255, 0, 0 }, X{ 0, 0,252,102,102,102,124,108,102,102,102,230, 0,255, 0, 0 }, X{ 0, 0,124,198,198, 96, 56, 12, 6,198,198,124, 0,255, 0, 0 }, X{ 0, 0,255,219,153, 24, 24, 24, 24, 24, 24, 60, 0,255, 0, 0 }, X{ 0, 0,198,198,198,198,198,198,198,198,198,124, 0,255, 0, 0 }, X{ 0, 0,195,195,195,195,195,195,195,102, 60, 24, 0,255, 0, 0 }, X{ 0, 0,195,195,195,195,195,219,219,255,102,102, 0,255, 0, 0 }, X{ 0, 0,195,195,102, 60, 24, 24, 60,102,195,195, 0,255, 0, 0 }, X{ 0, 0,195,195,195,102, 60, 24, 24, 24, 24, 60, 0,255, 0, 0 }, X{ 0, 0,255,195,134, 12, 24, 48, 96,193,195,255, 0,255, 0, 0 }, X{ 0, 24, 24,126,195,192,192,192,195,126, 24, 24, 0, 0, 0, 0 }, X{ 0, 56,108,100, 96,240, 96, 96, 96, 96,230,252, 0, 0, 0, 0 }, X{ 0, 0,254,130,130,130,130,130,130,130,130,254, 0, 0, 0, 0 }, X{ 0, 0,254,146,146,146,130,130,130,130,130,254, 0, 0, 0, 0 }, X{ 0, 0,254,130,146,130,254,254,130,146,130,254, 0, 0, 0, 0 }, X X{ 0, 0, 24, 60,126, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0 }, /* 160 */ X{ 0, 0, 24, 24, 24, 24, 24, 24, 24,126, 60, 24, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 48, 96,254, 96, 48, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 24, 12,254, 12, 24, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 16, 16, 16, 16,124, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0,124, 16, 16, 16, 16, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 64, 64,124, 64, 64, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 4, 4,124, 4, 4, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 16, 16, 56, 84, 84, 56, 16,254, 0, 0, 0, 0, 0 }, X{ 0, 0, 0,254, 16, 56, 84, 84, 56, 16, 16, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 2, 4, 8,254, 32, 64,128, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0,128, 64, 32,254, 8, 4, 2, 0, 0, 0, 0, 0 }, X{ 0, 0, 16, 16, 16, 56, 84,146,254, 16, 16, 0, 0, 0, 0, 0 }, X{ 0, 0, 16, 16,254,146, 84, 56, 16, 16, 16, 0, 0, 0, 0, 0 }, X{ 0, 0,130, 68, 40, 16, 0, 0, 96,146, 12, 0, 0, 0, 0, 0 }, X{ 0, 0, 16, 40, 68,130, 0, 0, 96,146, 12, 0, 0, 0, 0, 0 }, X X{ 0, 0, 0, 0,124,128,128,128,124, 0, 0, 0, 0, 0, 0, 0 }, /* 176 */ X{ 0, 0, 0, 0,124, 2, 2, 2,124, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 68, 68, 68, 68, 68, 56, 0, 0, 0, 0, 0, 0, 0 }, X{ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 }, X{ 24, 24, 24, 24, 24, 24, 24,248, 24, 24, 24, 24, 24, 24, 24, 24 }, X{ 24, 24, 24, 24, 24,248, 24,248, 24, 24, 24, 24, 24, 24, 24, 24 }, X{ 54, 54, 54, 54, 54, 54, 54,246, 54, 54, 54, 54, 54, 54, 54, 54 }, X{ 0, 0, 0, 0, 0, 0, 0,254, 54, 54, 54, 54, 54, 54, 54, 54 }, X{ 0, 0, 0, 0, 0,248, 24,248, 24, 24, 24, 24, 24, 24, 24, 24 }, X{ 54, 54, 54, 54, 54,246, 6,246, 54, 54, 54, 54, 54, 54, 54, 54 }, X{ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54 }, X{ 0, 0, 0, 0, 0,254, 6,246, 54, 54, 54, 54, 54, 54, 54, 54 }, X{ 54, 54, 54, 54, 54,246, 6,254, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 54, 54, 54, 54, 54, 54, 54,254, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 24, 24, 24, 24, 24,248, 24,248, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0,248, 24, 24, 24, 24, 24, 24, 24, 24 }, X X{ 24, 24, 24, 24, 24, 24, 24, 31, 0, 0, 0, 0, 0, 0, 0, 0 }, /* 192 */ X{ 24, 24, 24, 24, 24, 24, 24,255, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0,255, 24, 24, 24, 24, 24, 24, 24, 24 }, X{ 24, 24, 24, 24, 24, 24, 24, 31, 24, 24, 24, 24, 24, 24, 24, 24 }, X{ 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 24, 24, 24, 24, 24, 24, 24,255, 24, 24, 24, 24, 24, 24, 24, 24 }, X{ 24, 24, 24, 24, 24, 31, 24, 31, 24, 24, 24, 24, 24, 24, 24, 24 }, X{ 54, 54, 54, 54, 54, 54, 54, 55, 54, 54, 54, 54, 54, 54, 54, 54 }, X{ 54, 54, 54, 54, 54, 55, 48, 63, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 63, 48, 55, 54, 54, 54, 54, 54, 54, 54, 54 }, X{ 54, 54, 54, 54, 54,247, 0,255, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,255, 0,247, 54, 54, 54, 54, 54, 54, 54, 54 }, X{ 54, 54, 54, 54, 54, 55, 48, 55, 54, 54, 54, 54, 54, 54, 54, 54 }, X{ 0, 0, 0, 0, 0,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 54, 54, 54, 54, 54,247, 0,247, 54, 54, 54, 54, 54, 54, 54, 54 }, X{ 24, 24, 24, 24, 24,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0 }, X X{ 54, 54, 54, 54, 54, 54, 54,255, 0, 0, 0, 0, 0, 0, 0, 0 }, /* 208 */ X{ 0, 0, 0, 0, 0,255, 0,255, 24, 24, 24, 24, 24, 24, 24, 24 }, X{ 0, 0, 0, 0, 0, 0, 0,255, 54, 54, 54, 54, 54, 54, 54, 54 }, X{ 54, 54, 54, 54, 54, 54, 54, 63, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 24, 24, 24, 24, 24, 31, 24, 31, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 31, 24, 31, 24, 24, 24, 24, 24, 24, 24, 24 }, X{ 0, 0, 0, 0, 0, 0, 0, 63, 54, 54, 54, 54, 54, 54, 54, 54 }, X{ 54, 54, 54, 54, 54, 54, 54,255, 54, 54, 54, 54, 54, 54, 54, 54 }, X{ 24, 24, 24, 24, 24,255, 24,255, 24, 24, 24, 24, 24, 24, 24, 24 }, X{ 24, 24, 24, 24, 24, 24, 24,248, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0, 0, 31, 24, 24, 24, 24, 24, 24, 24, 24 }, X{ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 }, X{ 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255 }, X{ 240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240 }, X{ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, X{ 255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X X{ 0, 0, 0, 0, 0,118,220,216,216,216,220,118, 0, 0, 0, 0 }, /* 224 */ X{ 0, 0, 0, 0, 0,102,195,195,219,219,255,102, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 48, 8, 8, 8, 8, 8, 6, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 56, 68, 68,120, 64, 64, 64,128, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 68, 40, 16, 40, 68, 0, 0, 0, 0, 0, 0, 0 }, X{ 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0,124, 16, 16, 16,124, 0, 0, 0, 0, 0 }, X{ 0, 96,146, 12, 0,254,130, 68, 40, 16, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 16, 56, 84,146,146,146, 84, 56, 16, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 56, 68,130,254,130, 68, 56, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0,146,124, 84,238, 84,124,146, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 56, 68,198,186,130,130,130, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0,130, 68, 40, 16, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0,184, 68,162,146,138, 68, 58, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 60, 64,120, 64, 60, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 56, 68, 68, 68, 68, 68, 0, 0, 0, 0, 0, 0, 0 }, X X{ 0, 0, 0, 0,254, 0, 0,254, 0, 0,254, 0, 0, 0, 0, 0 }, /* 240 */ X{ 0, 0, 0, 2,254, 4, 8,254, 32, 64,254,128, 0, 0, 0, 0 }, X{ 0, 0, 0, 48, 24, 12, 6, 12, 24, 48, 0,126, 0, 0, 0, 0 }, X{ 0, 0, 0, 12, 24, 48, 96, 48, 24, 12, 0,126, 0, 0, 0, 0 }, X{ 0, 0, 30, 30, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0 }, X{ 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 30, 30, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 24, 24, 0,126, 0, 24, 24, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 2, 4,254, 16,254, 64,128, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 56, 68, 68, 56, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 56, 68,130,130,130, 68, 56, 0, 0, 0, 0, 0 }, X{ 0, 0,122,164,156,132,132,132,132,132,120, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 16, 56,124,254,124, 56, 16, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0, 0, 0,254, 0, 0, 24, 8, 16, 0, 0, 0, 0 }, X{ 0,102,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 68, 0, 0, 0, 96,146, 12, 0, 0, 0, 0, 0, 0, 0, 0 }, X{ 0, 0, 0, 0,254,130, 68, 40, 16, 0, 0, 0, 0, 0, 0, 0 } X}; X X X/* Load Font Subroutine X** X** This routine sends the escape codes for to define a character X** in the Wyse 60 Terminals. Unfortunately, the APL character set takes X** up more than 128 positions of the ASCII table so two font banks must X** be loaded. The Wyse can store up to 4 banks of which two can be used X** at any one given time. X*/ Xfontload(delay) Xint delay; X{ X int i, /* Loop Counter */ X bank, /* Font Bank */ X pos, /* Character Position */ X bits; /* One line of bits for the char */ X X /* The Wyse 60 takes a second or */ X /* two to clear the font banks */ X printf("Clearing font bank %d and %d\n", BANK, BANK+1); X printf("\033c?%1d\033c?%1d", BANK, BANK+1); X sleep(2); X X printf("Loading fonts\n"); X for (bank = 0; bank<2; bank++) { X printf("Bank %d ", bank+BANK); X X for (pos=0; pos<128; pos++) { X printf("\033cA%1d%02X", bank+BANK, pos); X X for(bits=0; bits<16; bits++) X printf("%02X", aplfont[pos+bank*128][bits]); X printf("\031."); X X fflush(stdout); X for (i=0; i