vipoon@kepler1.UUCP (Victor I Poon) (08/06/89)
This group doesn't seem to get much traffic (I know that I'm the n-th person to say this but it's still true). I've almost finished a program which downloads an APL font into a Wyse 60 terminal. It should also work for Wyse 50s and I was wondering if anyone out there would be in need of such a thing or did I just re-invent the wheel? We are using Dyalog APL which has a very nice feature. It uses input and output translation tables to remap the character set. So as long you have a terminal that contains the APL character set, you can generate a map tables and you get an instant APL terminal (with an ASCII keyboard but you can't have everything). My company once looked at APL terminals and they were quite expensive. This was definitely more cost effective. -- Victor I. Poon {acsm, lilink, polyof, sbcs}!kepler1!vipoon Kepler Financial Management, Ltd. It was the best of times, It was the worst of times, ...
dag@fciva.FRANKLIN.COM (Daniel A. Graifer) (08/07/89)
In article <148@kepler1.UUCP> vipoon@kepler1.UUCP (Victor I Poon) writes: > > This group doesn't seem to get much traffic [...] Yeah, I know. Shame, isn't it? I am posting this rather than E-mailing just to let people know that there is still some interest in APL. >I've almost finished >a program which downloads an APL font into a Wyse 60 terminal. [...] We have a bunch of Wyse 60s here, because we have a bunch of Merge/MessyDOS users that need the SCANCODE mode. I am the only APLer, but could certainly use such a font set. >-- >Victor I. Poon {acsm, lilink, polyof, sbcs}!kepler1!vipoon >Kepler Financial Management, Ltd. I must admit to some amazement; I thought we were the only finance industry company on the net! Thanks in advance Dan
ccdn@levels.sait.edu.au (DAVID NEWALL) (08/08/89)
In article <148@kepler1.UUCP>, vipoon@kepler1.UUCP (Victor I Poon) writes: > I've almost finished a program which downloads an APL font into a Wyse 60 > terminal. It should also work for Wyse 50s How can you download a font into a wyse 50? David Newall Phone: +61 8 343 3160 Unix Systems Programmer Fax: +61 8 349 6939 Academic Computing Service E-mail: ccdn@levels.sait.oz.au SA Institute of Technology Post: The Levels, South Australia, 5095 "Execute A assigned quote execute A quote"
vipoon@kepler1.UUCP (Victor I Poon) (08/14/89)
In article <1070@levels.sait.edu.au> ccdn@levels.sait.edu.au (DAVID NEWALL) writes: >How can you download a font into a wyse 50? > > In the Wyse 60, there is an escape sequence to define a character; it looks like the following: ESC c A kk pp bb bb ... bb ^Y ( 40 byte sequence ) where kk is the font bank ("00" - "03"), pp is the character position ("00" - "FF") bb is the character bit map for one line of pixels (in hex) I believe that it is the same for a Wyse 50. The only difference between the two terminals is that the Wyse 60 has a bunch of internal functions like a calculator, an alarm clock and an ASCII table. It's been a while since I've used one of these but I have a friend who has one and I'll probably find out from him if it's possible to do the same thing. Victor -- Victor I. Poon {acsm, lilink, polyof, sbcs}!kepler1!vipoon Kepler Financial Management, Ltd. vipoon@sbcs.sunysb.edu It was the best of times, It was the worst of times, ...
vipoon@kepler1.UUCP (Victor I Poon) (08/14/89)
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 <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of shell archive." # Contents: Font.desc MANIFEST Makefile README cvtfont.c waplfont.c # Wrapped by vipoon@kepler1 on Sun Aug 13 18:05:15 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'Font.desc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Font.desc'\" else echo shar: Extracting \"'Font.desc'\" \(5138 characters\) sed "s/^X//" >'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 <stdio.h> 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 <stdio.h> 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<delay; i++) X ; X } X printf("\n"); X } X} X X/* Print Font Subroutine X** X** This subroutines prints the font out on an ASCII display. X** The a pound sign (#) denotes a bit/pixel which is on and a X** period (.) denotes a bit/pixel is off. X*/ Xfontprint() X{ X int bits, /* One line of bits for the char */ X line, /* Each line of 8 chars */ X pos, /* Character Position */ X row; /* Each char has 16 rows */ Xunsigned int ch; /* Temp storage character */ X X for (pos=0; pos<256; pos+=8) { X X for (line=0; line<8; line++) X printf("%8d ", pos+line); X putchar('\n'); X X for (row=0; row<16; row++) { X for (line=pos; line<pos+8; line++) { X ch = aplfont[line][row]; X for(bits=0; bits<8; bits++) { X if (ch & 0x80) X putchar('#'); X else X putchar('.'); X ch <<= 1; X } X putchar(' '); X } X putchar('\n'); X } X putchar('\n'); X } X} X X/* Usage - Help X*/ Xusage(name) Xchar *name; X{ X printf("Usage: %s [-ps]\n", name); X exit(-1); X} X X X/* Main Program X*/ Xmain(argc, argv) Xint argc; Xchar **argv; X{ X switch (argc) { X case 1: /* Load as fast as possible */ X fontload(0); X break; X X case 2: /* Parse flags */ X if (*argv[1] != '-') X usage(argv[0]); X X switch (*(argv[1]+1)) { X case 'p': /* Print out characters */ X fontprint(); X break; X X case 's': /* Time Delay for 9600 baud */ X fontload(DELAY); X break; X X default: /* Print Usage message */ X usage(argv[0]); X } X break; X X default: X usage(argv[0]); X } X} END_OF_FILE if test 20646 -ne `wc -c <'waplfont.c'`; then echo shar: \"'waplfont.c'\" unpacked with wrong size! fi # end of 'waplfont.c' fi echo shar: End of shell archive. exit 0 -- Victor I. Poon {acsm, lilink, polyof, sbcs}!kepler1!vipoon Kepler Financial Management, Ltd. vipoon@sbcs.sunysb.edu It was the best of times, It was the worst of times, ...
vipoon@kepler1.UUCP (Victor I Poon) (08/15/89)
In article <150@kepler1.UUCP> vipoon@kepler1.UUCP (Victor I Poon) writes: >In article <1070@levels.sait.edu.au> ccdn@levels.sait.edu.au (DAVID NEWALL) writes: >>How can you download a font into a wyse 50? I take it back. It seems that I was mistaken about the Wyse 50. I've just recieved some specs from Wyse and the 50 doesn't have the "soft" font option that is in the Wyse 60. Sorry. Victor -- Victor I. Poon {acsm, lilink, polyof, sbcs}!kepler1!vipoon Kepler Financial Management, Ltd. vipoon@sbcs.sunysb.edu It was the best of times, It was the worst of times, ...