lewis@m2-net.UUCP (Dave Lewis) (07/01/88)
> > A library of graphics primitives for System V/AT (and probably any > other Intel unix, with a bit of hacking) is now available, supporting > common video cards and printers. Demonstration programs are included > with the code. > > Please contact me by e-mail if you would like a copy. If there is > sufficient interest, I will post source (about 130K bytes). > > -Dave Lewis > I have received enough requests to justify posting the code for this. The code is pretty well tested on various uPort 286 configurations (with CGA, EGA, Hercules, and dot matrix printers). I would particularly appreciate it if any users of Xenix 286, Venix, and the various 386 unices could try this out and send me the needed changes. As soon as we have this running on several flavors of Intel Unix, it may be appropriate to post to the archives (yes? no? comments?). Thanks. Dave Lewis Ann Arbor, MI ...![ itivax umix ]!m-net!dtlewis!lewis ------------------------------ cut here ------------------------------ # To recover, type "sh archive" echo restoring Readme sed 's/^X//' > Readme <<XxX--EOF--XxX X XGraphics library for System V/AT X-------------------------------- X XThis collection of routines is designed to provide graphic output to Xa number of video adapters and printers for PC/AT class computers running Xunder Microport System V/AT (r). Various output devices are supported. XFor each type of device, one or more graphics "modes" is defined in Xgraphics.h, and the corresponding bitmaps are defined in bitmaps.h. XThese modes roughly correspond to the BIOS video modes defined for MS-DOS, Xwith additional modes defined for Hercules (r) and for printer output. X XThe routines are: X X init() Initialize device, buffers, variables. Attach X to shared memory segment or malloc'ed buffers. X finish() Release resources, detach segments. X clear() Clear screen. X write_pix() Turn one pixel on. X movpen() Move logical cursor in 32768 x 32768 address space. X draw() Draw vector. X linedraw() Draw line. X box() Draw box. X grafchar() Display a vectorized text character (stroke font). X grafstr() Display a character string, stroke font. X cellchar() Display a bit mapped character. X cellstr() Display a string, bit mapped characters. X cursor() Move to character column and row for cellstr(). X pix_mode() Establish OR mode or XOR mode pixel setting, returns X previous mode value. X pix_color() Set pixel color, returns previous color value. X XCurrently supported devices are Hercules mono, CGA, EGA (currently mono only), Xand dot matrix printers (IBM, IBM Proprinter, Epson FX85, Star10X, Tandy XDMP130, and probably others). Additional device support is straightforward, Xas all routines call write_pix() to do output. X X XRequirements: X------------- X X1) A graphics capable video adapter and/or printer (see above for supported Xdevices). X X2) An entry in /etc/rc.d/shm.rc to define the shared memory key for your Xgraphics board. A sample entry for EGA is: X X /etc/shmcreate 0xa0000 a0000 65535 # ega high res X X3) A program or shell script which will cause the graphics adapter to Xswitch from text to graphics modes, and vice versa. For most configurations, Xthis can be just a shell script which echoes the appropriate escape sequences Xto the console. The mode.sh script is supplied for this purpose, but Xshould be tested and modified as needed for your system. The program Xmode.c is also supplied for use with the Everex Edge. This program can Xbe modified to support various other video adapters which may not respond Xto the console escape sequences (mode.c probably works with a Hercules Xboard, also, but this is not tested). Mode.c needs to be suid to root Xand placed in an appropriate safe directory, but a simple shell script Xwill need no special treatment. X X4) For graphics printing, the printer driver must be in "transparency" Xmode. This is done with the "lpget" and "lpset" commands. The plotting Xroutines do not set this for you, since the printer is on a queue and Xis assumed to be a shared device. If more than one person uses the Xprinter, it would be a good idea to leave the driver in transparency Xmode, and write a filter for normal text line printer output to handle Xconversion of <lf> to <cr><lf> along with any other output formatting that Xmay be required for text. An alternative method, based on an undocumented Xfeature of the lp driver, is to use minor numbers 128 and 129 of the lp Xdriver, rather than 0 and 1. This device will correspond to the transparent Xmode of the lp device driver. The commands "mknod /dev/lpt0 c 0 128", X"link /dev/lpt0 /dev/lpt", "lpadmin -plpt -v/dev/lpt -elp", "enable lpt" Xand "/usr/lib/accept lpt" may be used to set this up (you may need to Xuse "mknod /dev/lpt1 c 0 129" and "link /dev/lpt0 /dev/lpt", depending on Xwhich printer port you are using. The lp command then becomes "lp -dlp" X(set PRINTPROG in graphics.h accordingly). If the environment variable X"PLOTDEV" is defined, it will be used as the name of the output printer X(e.g. "PLOTDEV=lpt; export PLOTDEV" to use the transparent printer device). X X XHow it works: X------------- X XInit() attaches the shared memory segment for your video board to your Xprocess address space. The pointer to this memory segment is used for Xdirect read and write access to bit mapped graphics. In the case of Xa printer, init() simply allocates some memory buffers which it Xtreats like the bit map for the printer, then adds some escape codes Xand spools the whole mess off to the lp program. X XThe screen (or printer page) is represented by a normalized address Xspace of 32768 by 32768. This gives a reasonable amount of resolution, Xand allows valid addresses to be represented by non-negative short integers, Xgiving efficient calculations and easy checking for addresses that would Xbe "off the edge of the screen." All of the output routines, except Xwrite_pix(), use this normalized address space, regardless of the pixel Xaspect ratio or the aspect ratio of the physical screen. X XThe write_pix() routine uses physical pixel coordinates (row,col) Xto access one pixel on the graphics device. All output, whether lines, Xdots or text, use the write_pix() routine at the lowest level. In Xthis way, all knowledge of the display bit map, interleaving and Xsegmentation are localized to the write_pix() routine. To add support Xfor a new device type, only write_pix() is changed, along with the Xappropriate parameters in bitmaps.h and the init() and finish() routines X(for initializing and releasing graphics resources, respectively). X XPositioning on the screen is done with a "graphics cursor," which Xis used to position all graphics and text output. The cursor is Xpositioned in normalized coordinates using the movepen() routine. XRoutines such as draw() cause the cursor to be moved to new positions. X XThe box() and linedraw() routines, as well as the stroke font text, Xcall movepen() and draw() to position the cursor and draw a vector, Xrespectively. This is the basis of all the graphical output, with Xthe low level output handled by write_pix(). X XTwo types of text output are supported. A stroke font is invoked by Xgrafstr(), and a bit cell font is invoked by cellstr(). Grafchar() Xand cellchar() are single character versions which should normally Xnot be directly called (just use the grafstr() and cellstr() versions). XCursor() is used to position the graphics cursor in terms of character Xrows and columns, as if it were a text cursor. X XThe finish() routine detaches shared memory, frees resources, and Xsends any output to the print queue. X XAll routines are written in C (no assembler at all) and use short integer Xarithmetic wherever possible. Long integers are used when more accuracy Xis required, and floats and doubles are avoided wherever possible. The Xoverall performance is quite acceptable, even for text output, and is Xin fact considerably faster than similar code under MS-DOS using BIOS Xrather than write_pix(). The development machine for this code is a X6 MHz Zenith 241 with no 80287 coprocessor, hence the avoidance of floating Xpoint math. X XBugs: X----- X XPix_mode() does not set XOR mode for EGA high res graphics. XPix_color() does not do anything for EGA high res graphics. X XLimitations: X------------ X XNo checking is done to control ownership of the console output. The Xuser of the program is assumed to be at the console. Any checks for Xthis would have to be done by an application program using these Xroutines. X XThe EGA and VGA adapters control color and writing modes (OR or XOR) Xwith output to port addresses on the EGA/VGA card. On System V/AT, Xthis requires use of the outb() subroutine with write access to /dev/mem. XSince this would require the application program to be suid to root, Xsupport for color and writing modes has not yet been implemented. X XThese routines have been tested by the author only on an Everex Edge Xvideo card, emulating CGA modes 4 and 6, and Hercules graphics. Printer Xoutput has been tested only on a Tandy DMP 130 (IBM printer mode). XOther users have verified EGA mode and various printers. X XThe graphics.h file has declarations for parameters that will be used Xfor various coordinate transformations. However, none of this is Ximplemented at the present time. The only coordinate system which the Xapplication program should refer to is the normalized 2-D space used Xto represent the screen. It is important to realize that even an object Xas simple as a circle will require additional coordinate transformations Xto handle aspect ratio. X XCredits: X-------- X XThanks to John Antypas, Denis Fortin and Bill Rankin for assistance in Xtesting and developing the code. X XThe font.h and cellfont.h files contain data for stroke fonts and bit cell Xfonts, respectively. The copyright status of this data is uncertain. XThe stroke font is taken from _Advanced_Graphics_in_C_, by Nelson XJohnson (McGraw-Hill, 1987). The copyright notice for this book specifically Xallows copying of the code, but does not say if you need to have purchased Xthe book to be so entitled. I recommend the book, in any case, so you may Xwish to buy a copy. The bit cell font was received third or fourth hand, Xand is presumed public domain unless I hear otherwise. The name at the Xhead of the data file is: X[ X /* RAM-Loadable Character Sets for the IBM PC X Richard Wilton X July 1986 */ X XIn any case, if you can locate the font data in your machine's BIOS, you Xcan use that instead, and you are presumably licenced to do so by virtue Xhaving bought the machine. X XThe setmode.c code comes from Jeff Turner, and was posted to the net Xa while back. It has been modified by me for Everex Edge and Hercules Xgraphics, and is presumed in the public domain. X XThe rest of the material is copyrighted by me, but may be used and Xcopied by anybody, as long as it is not used for commercial profit. XI would very much appreciate hearing about any bug fixes and new Xdevice support that may be forthcoming. Thanks. X X X David T. Lewis X umix!m-net!dtlewis!lewis X 122 S. Seventh X Ann Arbor MI 48103 X X system5 dtlewis 2 2.3.0-U AT X Wed Jun 29 23:48:47 EDT 1988 X X X XxX--EOF--XxX echo restoring Things_to_do sed 's/^X//' > Things_to_do <<XxX--EOF--XxX XThings that need to be added to enhance the graphics routines: X X XVolunteers needed: X------------------ X X-Test and/or port to uPort 386 unix. I don't know if this works Xlike the 286 version or not. X X-Port to Xenix 286 and 386. This will require someone with a Xenix Xsystem to figure out how to get a pointer to video memory (this is Xreputedly explained in the screen(HW) section of the manual), and add Xsome suitable #ifdef code in init.c and finish.c. We also will need Xto make an appropriate mode changing script (using the stty command, XI think). X X-Add additional device support (VGA, Laserjet, enhanced EGA boards). X X XThings I'll probably get around to doing myself: X------------------------------------------------ X X-Add XOR and color support to EGA. X X-Add polygon fill routines. X X-Add circle/ellipse routines. X X-Get plot(3) and plot(1) working. X X-Add windows, viewports, 3-D transforms, etc. X X X X Wed Jun 29 23:53:34 EDT 1988 dtl X XxX--EOF--XxX echo restoring graphics.1 sed 's/^X//' > graphics.1 <<XxX--EOF--XxX X.\" dummy line X.TH GRAPHICS 3 "29 June 1988" X.UC 4 X.SH NAME Xinit, finish, clear, write_pix, movpen, draw, linedraw, box, Xgrafchar, grafstr, cellchar, cellstr, cursor, pix_mode, pix_color X\- graphics primitives for pc clone unix systems. X.SH SYNOPSIS X.nf X.B int init(mode) Xint mode; X.PP X.B int finish() X.PP X.B int clear() X.PP X.B int write_pix(x,y) Xint x, y; X.PP X.B int movpen(x,y) Xint x, y; X.PP X.B int draw(x,y) Xint x, y; X.PP X.B int linedraw(x1,y1,x2,y2) Xint x1, y1, x2, y2; X.PP X.B int box(x1, y1, x2, y2) Xint x1, y1, x2, y2; X.PP X.B int grafchar(asc_char,x,y,vsize,hsize) Xunsigned char asc_char; Xint x, y, vsize, hisize; X.PP X.B int grafstr(strng,x,y,vsize,hsize,spacing) Xchar strng[]; Xint x, y, vsize, hsize, spacing; X.PP X.B int cellchar(asc_char) Xunsigned char asc_char; X.PP X.B int cellstr(strng) Xchar strng[]; X.PP X.B int cursor(row,col) Xint row, col; X.PP X.B enum PIX_MODE {OR, XOR} pix_mode(mode_val) Xenum PIX_MODE mode_val; X.PP X.B int pix_color(color) Xint color; X.br X.SH DESCRIPTION XThis collection of routines is designed to provide graphic output Xto a number of video adapters and printers for PC clone computers Xrunning unix operating systems. X.PP XVarious output devices are supported, including CGA, EGA, Hercules Xand dot matrix printers. For each type of device, one or more Xgraphics "modes" is defined in graphics.h, and the corresponding Xbitmaps are defined in bitmaps.h. These modes roughly correspond Xto the BIOS video modes defined for MS-DOS, with additional modes Xdefined for Hercules and for printer output. X.PP XThe X.I init Xroutine initializes device, buffers, variables, and attaches Xshared memory segment or malloc'ed buffers to the calling process. X.PP XThe X.I finish Xroutine releases resources and detaches memory segments. X.PP XThe X.I clear Xroutine clears the screen (or printer buffer area). X.PP XThe X.I write_pix Xroutine activates a pixel. If the current writing mode is OR, Xthe pixel is turned on (set to the currently active color). If Xthe current writing mode is XOR, the pixel value (color) is XORed Xwith its current value. X.PP XThe X.I movpen Xroutine moves the logical cursor in normalized 32768 x 32768 Xaddress space, where (0,0) is the upper left corner of the screen Xor printed page. X.PP XThe X.I draw Xroutine draws a vector from the current address to (x,y) in Xnormalized address space. X.PP XThe X.I linedraw Xroutine draws a line from (x1,y1) to (x2,y2) in normalized address Xspace. X.PP XThe X.I box Xroutine draws a box with corners at (x1, y1) and (x2, y2) in Xnormalized address space. X.PP XThe X.I grafchar Xroutine displays a vectorized (stroke font) text character Xasc_char located at (x,y), of height vsize by width hsize. X.PP XThe X.I grafstr Xroutine displays a character string using a stroke font. X.PP XThe X.I cellchar Xroutine displays a bit mapped character at the current location. X.PP XThe X.I cellstr Xroutine displays a string at the current location, using bit mapped Xcharacters. X.PP XThe X.I cursor Xroutine moves the graphics cursor to a position corresponding to Xa character row and column. This is used for easy positioning of text Xdrawn with the X.I cellstr Xroutine. X.PP XThe X.I pix_mode Xroutine establishes the active OR mode or XOR mode pixel Xsetting mode, and returns the previous mode value. X.PP XThe X.I pix_color Xroutine sets the active pixel color, and returns previous color Xvalue. X.SH AUTHOR XDavid T Lewis, Ann Arbor, MI, USA X.br X(...!m-net!dtlewis!lewis) X.SH BUGS XThe X.I pix_mode Xroutine does not set XOR mode for EGA high res graphics. X.PP XThe X.I pix_color Xroutine does not do anything for EGA high res graphics. X.SH CAVEATS XNo checking is done to control ownership of the console output. The Xuser of the program is assumed to be at the console. Any checks for Xthis must be done by the application program. X.PP XThe EGA and VGA adapters control color and writing modes (OR or XOR) Xwith output to port addresses on the EGA/VGA card. On System V/AT, Xthis requires use of the outb() routine with write access to /dev/mem. XSince this would require the application program to be suid to root, Xsupport for color and writing modes has not yet been implemented. X XxX--EOF--XxX echo restoring xdemo.c sed 's/^X//' > xdemo.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) xdemo.c 1.9 88/06/20"; X#endif X X/* X * Copyright (c) David T. Lewis 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* Cheap clone of an attention getting program I saw on a Xerox workstation.*/ X/* system5 dtlewis 2 2.3.0-U AT */ X/* Tue May 24 22:38:22 EDT 1988 */ X/* by Dave Lewis */ X X#include <signal.h> X#include <stdio.h> X#include <time.h> X#include "graphics.h" X#define MAXINT 32767 X#define NUMLINES 32 X X#define MSG_COUNT 20 X Xint init(); Xint linedraw(); Xint finish(); Xenum PIX_MODE pix_mode(); Xint pix_color(); Xint clear(); Xint grafstr(); X Xvoid sig_catch() { X /* Clean up and exit. */ X finish(); X system("mode 2"); X exit(0); X} X Xstatic int msg_count = 0; Xvoid message() { X /* Write a cute message every time we get a time signal. */ X int save_color; X enum PIX_MODE save_pix_mode; X save_color = pix_color(3); X save_pix_mode = pix_mode(XOR); X cursor(2,2); X cellstr("Press <Del> to quit..."); X pix_color(save_color); X pix_mode(save_pix_mode); X if (msg_count < MSG_COUNT) { X /* Do it MSG_COUNT times, then stop. */ X signal(SIGALRM,message); X alarm(1); X msg_count++; X } X} X Xmain(argc,argv) Xint argc; Xchar *argv[]; X{ Xchar buffer[80]; Xint mode = 8; Xlong x1; Xlong y1; Xlong x2; Xlong y2; Xint x1rate; Xint y1rate; Xint x2rate; Xint y2rate; Xlong timeval; Xlong time(); Xstruct tm *timestruct; Xstruct tm *gmtime(); Xvoid srand(); Xint rand(); Xint (*signal ())(); X Xstruct endpoints { X int x1; X int x2; X int y1; X int y2; X} buff[NUMLINES]; X Xint idx_to_buff, idx; X X/* Initialize the line buffer to invalid values (so they don't get plotted). */ X Xfor (idx_to_buff=0; idx_to_buff < NUMLINES; idx_to_buff++) { X buff[idx_to_buff].x1 = -1; X buff[idx_to_buff].y1 = -1; X buff[idx_to_buff].x2 = -1; X buff[idx_to_buff].y2 = -1; X } Xidx_to_buff = 0; X X/* Get the mode to use. */ Xif (argc == 2) { X mode = 0; X mode = *(argv[1]) - '0'; X init(mode); X strcpy(buffer,"mode "); X strcat(buffer,argv[1]); X system(buffer); X } Xelse { X printf("usage: xdemo mode\n\n mode = {4,6,8,16}\n\nAssuming CGA hi-res graphics mode...",0); X init(6); X system("mode 6"); X } X X/* Clear the video display. */ Xclear(); X X/* Get the current time, and use it as a seed value for the rand() function. */ Xtimeval = time((long *) 0); Xtimestruct = gmtime(&timeval); Xsrand((unsigned)timestruct->tm_sec); X X/* Modify the slopes and starting location of the endpoint motion, to give */ X/* different patterns every time we run the program. */ Xx1 = rand(); Xy1 = rand(); Xx2 = rand(); Xy2 = rand(); Xx1rate = rand() & 0x0FF + 256; Xy1rate = rand() & 0x0FF + 256; Xx2rate = rand() & 0x0FF + 256; Xy2rate = rand() & 0x0FF + 256; Xif (rand() & 0x01) x1rate *= -1; Xif (rand() & 0x01) y1rate *= -1; Xif (rand() & 0x01) x2rate *= -1; Xif (rand() & 0x01) y2rate *= -1; X X/* Draw a border and a text message. */ Xpix_color(3); Xbox(0,0,32767,32767); Xgrafstr("XOR Write Mode",10000,31000,220,120,800); Xpix_color(1); Xlinedraw(16383,6000,16383,26767); Xlinedraw(6000,16383,26767,16383); Xpix_color(2); X X/* Set for XOR mode. */ Xpix_mode(XOR); X X/* Fork and start flashing a cute message. */ Xif (fork()) { X /* Child process here. */ X /* Set a timer to post message. */ X signal(SIGALRM,message); X alarm(3); X for(;;) pause(); X} X X/* Parent process continues here. */ X X/* Catch interrupt signals. */ Xsignal (SIGINT, sig_catch); X X/* Loop for a while. */ Xwhile (msg_count < MSG_COUNT) { X X /* Increment buffer pointer, wrapping around buffer. */ X ++idx_to_buff; X idx_to_buff %= NUMLINES; X X /* Erase (redraw in XOR mode) old line. */ X linedraw( buff[idx_to_buff].x1, X buff[idx_to_buff].y1, X buff[idx_to_buff].x2, X buff[idx_to_buff].y2 X ); X X /* Get coordinates of new line. */ X if (((x1 += x1rate) < 0) || (x1 > MAXINT)) { X x1rate *= -1; X x1 += (2 * x1rate); X } X if (((y1 += y1rate) < 0) || (y1 > MAXINT)) { X y1rate *= -1; X y1 += (2 * y1rate); X } X if (((x2 += x2rate) < 0) || (x2 > MAXINT)) { X x2rate *= -1; X x2 += (2 * x2rate); X } X if (((y2 += y2rate) < 0) || (y2 > MAXINT)) { X y2rate *= -1; X y2 += (2 * y2rate); X } X X /* Store it in buffer. */ X buff[idx_to_buff].x1 = x1; X buff[idx_to_buff].y1 = y1; X buff[idx_to_buff].x2 = x2; X buff[idx_to_buff].y2 = y2; X X /* Draw new line. */ X linedraw( buff[idx_to_buff].x1, X buff[idx_to_buff].y1, X buff[idx_to_buff].x2, X buff[idx_to_buff].y2 X ); X } X X/* Restart the pattern. */ X Xfor (idx_to_buff=0; idx_to_buff < NUMLINES; idx_to_buff++) { X buff[idx_to_buff].x1 = -1; X buff[idx_to_buff].y1 = -1; X buff[idx_to_buff].x2 = -1; X buff[idx_to_buff].y2 = -1; X } X Xidx_to_buff = 0; X Xclear(); X X/* Loop until <del> key is pressed. */ Xfor (;;) { X X /* Increment buffer pointer, wrapping around buffer. */ X ++idx_to_buff; X idx_to_buff %= NUMLINES; X X /* Erase (redraw in XOR mode) old line. */ X linedraw( buff[idx_to_buff].x1, X buff[idx_to_buff].y1, X buff[idx_to_buff].x2, X buff[idx_to_buff].y2 X ); X X /* Get coordinates of new line. */ X if (((x1 += x1rate) < 0) || (x1 > MAXINT)) { X x1rate *= -1; X x1 += (2 * x1rate); X } X if (((y1 += y1rate) < 0) || (y1 > MAXINT)) { X y1rate *= -1; X y1 += (2 * y1rate); X } X if (((x2 += x2rate) < 0) || (x2 > MAXINT)) { X x2rate *= -1; X x2 += (2 * x2rate); X } X if (((y2 += y2rate) < 0) || (y2 > MAXINT)) { X y2rate *= -1; X y2 += (2 * y2rate); X } X X /* Store it in buffer. */ X buff[idx_to_buff].x1 = x1; X buff[idx_to_buff].y1 = y1; X buff[idx_to_buff].x2 = x2; X buff[idx_to_buff].y2 = y2; X X /* Draw new line. */ X linedraw( buff[idx_to_buff].x1, X buff[idx_to_buff].y1, X buff[idx_to_buff].x2, X buff[idx_to_buff].y2 X ); X } X} XxX--EOF--XxX -- Dave Lewis Ann Arbor, MI ...![ itivax umix ]!m-net!dtlewis!lewis
lewis@m2-net.UUCP (Dave Lewis) (07/01/88)
------------------------------ cut here ------------------------------ # To recover, type "sh archive" echo restoring box.c sed 's/^X//' > box.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) box.c 4.3 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* Fri Jul 3 23:43:36 EDT 1987 X * dtlewis X * Routine to draw a box. X */ X Xint box(x1,y1,x2,y2) X int x1, y1, x2, y2; X{ X int movepen(), draw(); X if (movepen(x1,y1)) return(1); X if (draw(x2,y1)) return(1); X if (draw(x2,y2)) return(1); X if (draw(x1,y2)) return(1); X if (draw(x1,y1)) return(1); X return(0); X} XxX--EOF--XxX echo restoring cellchar.c sed 's/^X//' > cellchar.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) cellchar.c 4.4 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* Write a graphics character to the screen. */ X/* This routine uses bit mapped character cell fonts. */ X/* The character will be drawn such that the current graphics cursor */ X/* denotes the upper left corner of the character cell. The graphics */ X/* cursor will be incremented in the X direction by an amount corres- */ X/* ponding to one character cell. */ X X/* x and y are in PIXEL COORDINATES, not normalized coordinates. */ X/* Tue Mar 15 22:46:31 EST 1988 */ X/* system5 dtlewis 2 2.3.0-U AT */ X X#include "graphics.h" X#include "cellfont.h" X Xextern struct SVAT_graphics graphics; X Xint cellchar(asc_char) Xunsigned char asc_char; X{ X int x, y, i, j; X int write_pix(); X X char *bits; X X /* Get the pixel location, and check for Y out of range. */ X x = conv_x_coord(graphics.x_cursor); X y = conv_y_coord(graphics.y_cursor); X if ((y<0) || ((y + Y_CELL_BITS) >= graphics.y_extent)) return(1); X X /* Increment the graphics cursor, check X range. */ X if ((graphics.x_cursor += (int)(NORM_X_RANGE * X_CELL_BITS X / graphics.x_extent)) < 0) X return(1); X X /* Point at the character bit map to print. */ X bits = (char *) &(charcell[asc_char * Y_CELL_BITS]); X X /* Write the character. */ X for (i=y; i < y + Y_CELL_BITS; i++, bits++) { X j=x; X if (*bits & 0x80) if (write_pix(j,i)) return(1); j++; X if (*bits & 0x40) if (write_pix(j,i)) return(1); j++; X if (*bits & 0x20) if (write_pix(j,i)) return(1); j++; X if (*bits & 0x10) if (write_pix(j,i)) return(1); j++; X if (*bits & 0x08) if (write_pix(j,i)) return(1); j++; X if (*bits & 0x04) if (write_pix(j,i)) return(1); j++; X if (*bits & 0x02) if (write_pix(j,i)) return(1); j++; X if (*bits & 0x01) if (write_pix(j,i)) return(1); j++; X } X X return(0); X} XxX--EOF--XxX echo restoring cellstr.c sed 's/^X//' > cellstr.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) cellstr.c 4.3 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* Write string of a graphics characters to the screen. */ X/* Sat Mar 19 23:56:46 EST 1988 */ X/* system5 dtlewis 2 2.3.0-U AT */ X X/* Routine to display cell mode text string with upper left corner of */ X/* first character located at the current graphics cursor. The cursor */ X/* is incremented as characters are written. */ X X#include <stdio.h> X Xint cellstr(strng) Xchar strng[]; X{ X int i; X int cellchar(); X for(i=0; strng[i] != NULL; i++) { X if (cellchar(strng[i])) return(1); X } X return(0); X} X XxX--EOF--XxX echo restoring clear.c sed 's/^X//' > clear.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) clear.c 4.4 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* X * Routine to clear video memory (or print buffer memory). X * dtlewis 6-28-87 X * Sun Mar 13 21:13:59 EST 1988 X */ X X#include "graphics.h" X Xint clear() X{ X extern struct SVAT_graphics graphics; X int i, j; X switch (graphics.grafmode) { X case CGA_COLOR_MODE: X for(i=0; i<100; i++) { X for(j=0; j<80; j++) { X (graphics.cgamem)->page1[i][j] = 0x0; X (graphics.cgamem)->page2[i][j] = 0x0; X } X } X break; X X case CGA_HI_RES_MODE: X for(i=0; i<100; i++) { X for(j=0; j<80; j++) { X (graphics.cgamem)->page1[i][j] = 0x0; X (graphics.cgamem)->page2[i][j] = 0x0; X } X } X break; X X case EGA_COLOR_MODE: X for (i=0 ; i<350 ; i++) { X for (j=0 ; j<80 ; j++) { X (graphics.egamem)->mem[i][j] = 0x0; X } X } X break; X X case HERC_GRAF_MODE: X for(i=0; i<87; i++) { X for(j=0; j<90; j++) { X (graphics.hercmem)->page1[i][j] = 0x0; X (graphics.hercmem)->page2[i][j] = 0x0; X (graphics.hercmem)->page3[i][j] = 0x0; X (graphics.hercmem)->page4[i][j] = 0x0; X } X } X break; X X case IBM_PRINTER: X for(i=0; i<PRINTLINES; i++) { X for(j=0; j<PRINTDENSITY; j++) { X (graphics.printbuf1)->buf[i][j] = 0x0; X (graphics.printbuf2)->buf[i][j] = 0x0; X (graphics.printbuf3)->buf[i][j] = 0x0; X } X } X break; X X default: X return(1); X X } X return(0); X} XxX--EOF--XxX echo restoring cursor.c sed 's/^X//' > cursor.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) cursor.c 4.3 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* Move the graphics cursor as if it were a text cursor. The cursor */ X/* is positioned such that a cell character may be drawn at the */ X/* specified character row and column. */ X/* This routine uses bit mapped character cell fonts. */ X/* The character will be drawn such that the current graphics cursor */ X/* denotes the upper left corner of the character cell. */ X X/* Columns and rows are numbered 1 through N, not 0 through N !!!! */ X X#include "graphics.h" X Xextern struct SVAT_graphics graphics; Xextern int movepen(); X Xint cursor(row, col) Xint row, col; X{ X long xval, yval; X X /* Check valid range for this screen type. */ X if (col <= 0 || col > graphics.cellfont.chars_per_line) return(1); X if (row <= 0 || row > graphics.cellfont.lines_per_screen) return(1); X X /* Move the graphics cursor. Add a 1/2 pixel offset so we will */ X /* always round down to the correct pixel value. */ X X xval = (col-1) * graphics.cellfont.xtic; /* The value... */ X xval += NORM_X_RANGE / graphics.x_extent / 2; /* Plus 1/2 pix */ X X yval = (row-1) * graphics.cellfont.ytic; X yval += NORM_Y_RANGE / graphics.y_extent / 2; X X if (movepen((int)xval, (int)yval)) return(1); X X return(0); X} XxX--EOF--XxX echo restoring draw.c sed 's/^X//' > draw.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) draw.c 4.4 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* Sat Mar 21 22:59:10 EST 1987 */ X/* dtl 2-8-87 X** X** Write a line on the CGA or Hercules adapter. X** This routine assumes that the current graphics cursor position is X** set, and draws a line to the indicated point. X*/ X X#include "graphics.h" X Xextern struct SVAT_graphics graphics; X Xdraw(new_x_cursor,new_y_cursor) X int new_x_cursor, new_y_cursor; X{ X X /* Draw line from current cursor to new position. */ X /* Parameters are in normalized 2-D coordinates. */ X X int x_dist; /* Pixel coordinates */ X int y_dist; /* Pixel coordinates */ X int x_start; /* Pixel coordinates */ X int y_start; /* Pixel coordinates */ X int x_final; /* Pixel coordinates */ X int y_final; /* Pixel coordinates */ X int x_current; /* Pixel coordinates */ X int y_current; /* Pixel coordinates */ X int x_pixels; /* X distance in pixels */ X int y_pixels; /* Y distance in pixels */ X long int slope; X int offset; X long int idx; X X int write_pix(); X X /* Check for out of range. */ X X if (new_x_cursor < 0 || new_y_cursor < 0) return(1); X X /* Find the starting point in pixel coordinates. */ X X x_current = x_start = conv_x_coord(graphics.x_cursor); X y_current = y_start = conv_y_coord(graphics.y_cursor); X X /* Find the end point in pixel coordinates. */ X X x_final = conv_x_coord(new_x_cursor); X y_final = conv_y_coord(new_y_cursor); X X /* Find the distances in pixel coordinates. */ X X x_dist = x_final - x_start; X y_dist = y_final - y_start; X X /* Find the number of pixels to travel in the x any y directions. */ X X x_pixels = abs(x_dist); X y_pixels = abs(y_dist); X X /* Step across the screen pixel by pixel. Do this in the x */ X /* direction if x_dist is greater than y_dist; else, do it in */ X /* the y direction. */ X X if (x_pixels > y_pixels) { X /* Stepwise in x direction. */ X X /* Calculate the slope to use (rise over run). */ X /* Shift left 16 bits for precision. */ X if (x_dist != 0) slope = (long)y_dist * 0x010000L / X (long)x_dist; X else slope = 0x7FFFFFFFL; /* Infinity */ X X /* Figure a fudge factor to be used in offsetting the */ X /* pixels by 1/2 pixel. */ X if (slope > 0) offset = 1; X else if (slope < 0) offset = -1; X else offset = 0; X X /* Write the line on the screen. */ X X if (x_final - x_start >= 0) { X if (slope==0) { X while (x_current <= x_final) X if (write_pix(x_current++, X y_current)) return(1); X } X else for (idx=0; idx <= x_pixels; idx++, x_current++) { X y_current = y_start + (idx*slope/0x08000L X + offset)/2; X if (write_pix(x_current, y_current)) X return(1); X } X } X else { X if (slope==0) { X while (x_current >= x_final) X if (write_pix(x_current--, X y_current)) return(1); X } X else for (idx=0; idx <= x_pixels; idx++, x_current--) { X y_current = y_start - (idx*slope/0x08000L X + offset)/2; X if (write_pix(x_current, y_current)) X return(1); X } X } X } X else { X /* Stepwise in y direction. */ X X /* Calculate the inverse slope to use (run over rise). */ X /* Shift left 16 bits for precision. */ X if (y_dist != 0) slope = (long)x_dist * 0x010000L / X (long)y_dist; X else slope = 0x7FFFFFFF; /* Infinity */ X X /* Figure a fudge factor to be used in offsetting the */ X /* pixels by 1/2 pixel. */ X if (slope > 0) offset = 1; X else if (slope < 0) offset = -1; X else offset = 0; X X /* Write the line on the screen. */ X X if (y_final - y_start >= 0) { X if (slope==0) { X while (y_current <= y_final) X if (write_pix(x_current, X y_current++)) return(1); X } X else for (idx=0; idx <= y_pixels; idx++, y_current++) { X x_current = x_start + (idx*slope/0x08000L X + offset)/2; X if (write_pix(x_current, y_current)) X return(1); X } X } X else { X if (slope==0) { X while (y_current >= y_final) X if (write_pix(x_current, X y_current--)) return(1); X } X else for (idx=0; idx <= y_pixels; idx++, y_current--) { X x_current = x_start - (idx*slope/0x08000L X + offset)/2; X if (write_pix(x_current, y_current)) X return(1); X } X } X } X /* Advance the cursor to the new position. */ X graphics.x_cursor = new_x_cursor; X graphics.y_cursor = new_y_cursor; X return(0); X} XxX--EOF--XxX echo restoring grafchar.c sed 's/^X//' > grafchar.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) grafchar.c 4.4 88/06/20"; X#endif X X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* Write a graphics character to the screen. */ X/* Sat Dec 12 12:51:27 EST 1987 */ X/* system5 dtlewis 2 2.2-U AT */ X X#include "font.h" X Xint grafchar(asc_char,x,y,vsize,hsize) Xunsigned char asc_char; Xint x, y, vsize, hsize; X{ X int x1, y1, x2, y2, i; X int linedraw(); X X union X { X struct X { X unsigned col2 : 4; X unsigned row2 : 4; X unsigned col1 : 4; X unsigned row1 : 4; X } part; X struct X { X unsigned word; X } whole; X } font; X X for (i=0; i<=35; i++) { X if ((font.whole.word = stroke[asc_char][i]) != 0xFFFF) X if (linedraw( X x1 = x+font.part.col1*hsize, X y1 = y+font.part.row1*vsize, X x2 = x+font.part.col2*hsize, X y2 = y+font.part.row2*vsize) X ) return(1); X } X return(0); X} X XxX--EOF--XxX echo restoring grafstr.c sed 's/^X//' > grafstr.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) grafstr.c 4.3 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* Write string of a graphics characters to the screen. */ X/* Sat Dec 12 12:51:27 EST 1987 */ X/* system5 dtlewis 2 2.2-U AT */ X X#include <stdio.h> X Xint grafstr(strng,x,y,vsize,hsize,spacing) Xchar strng[]; Xint x, /* X position of upper left corner of character cell */ X y, /* Y position of character cell */ X vsize, /* Vertical size of character cell */ X hsize, /* Horizontal size of character cell */ X spacing; /* Distance between characters */ X{ X int i; X int grafchar(); X for(i=0; strng[i] != NULL; i++) { X if (grafchar(strng[i],x,y,vsize,hsize)) return(1); X x += spacing; X } X return(0); X} X XxX--EOF--XxX echo restoring init.c sed 's/^X//' > init.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) init.c 4.4 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* Sat Nov 28 17:10:53 EST 1987 */ X/* Initialize shared memory for use in graphics I/O. This routine is */ X/* specific to Microport System V/AT, and presumes that shared memory */ X/* segments have been defined (usually at system boot time) such that */ X/* the shared memory keys are "B8000L" for CGA adapter, and so on. */ X X#include <stdio.h> X#include <sys/types.h> X#include <sys/ipc.h> X#include <math.h> X#include <malloc.h> X#include "graphics.h" X Xstruct SVAT_graphics graphics; X Xint init(mode) Xint mode; X/* Mode is the video mode that will be used when in graphics mode. */ X/* By implication, this gives us the memory location we want to attach */ X/* to, as well as the dimensions of the screen. */ X X{ X char *shmat(); X int shmid; X char *malloc(); X int clear(); X extern int errno; X static char initialized = 'N'; /* Flag to prevent reinitialization */ X X graphics.grafmode = mode; X X /* Attach to the appropriate shared memory segment, and set the */ X /* values of graphics.x_extent and graphics.y_extent, according */ X /* to the video mode requested. */ X X switch (graphics.grafmode) { X case CGA_COLOR_MODE: X graphics.x_extent = 319; X graphics.y_extent = 199; X graphics.x_window_ll = 0; X graphics.y_window_ll = 0; X graphics.x_window_ur = 319; X graphics.y_window_ur = 199; X graphics.aspect_ratio = 0.7; X graphics.cellfont.chars_per_line = 40; X graphics.cellfont.lines_per_screen = 25; X graphics.strokefont.xtic = 800; X graphics.strokefont.ytic = 1500; X graphics.strokefont.xsize = 100; X graphics.strokefont.ysize = 160; X if ((shmid = shmget(0xB8000L, 32768, IPC_CREAT)) < 0) X return(errno); X graphics.cgamem = (CGA_BUF_TYPE *)shmat(shmid, 0L, 0); X break; X case CGA_HI_RES_MODE: X graphics.x_extent = 639; X graphics.y_extent = 199; X graphics.x_window_ll = 0; X graphics.y_window_ll = 0; X graphics.x_window_ur = 639; X graphics.y_window_ur = 199; X graphics.aspect_ratio = 0.7; X graphics.cellfont.chars_per_line = 80; X graphics.cellfont.lines_per_screen = 25; X graphics.strokefont.xtic = 480; X graphics.strokefont.ytic = 1500; X graphics.strokefont.xsize = 60; X graphics.strokefont.ysize = 160; X if ((shmid = shmget(0xB8000L, 32768, IPC_CREAT)) < 0) X return(errno); X graphics.cgamem = (CGA_BUF_TYPE *)shmat(shmid, 0L, 0); X break; X case HERC_GRAF_MODE: X graphics.x_extent = 719; X graphics.y_extent = 347; X graphics.x_window_ll = 0; X graphics.y_window_ll = 0; X graphics.x_window_ur = 719; X graphics.y_window_ur = 347; X graphics.aspect_ratio = 0.7; X graphics.cellfont.chars_per_line = 90; X graphics.cellfont.lines_per_screen = 43; X graphics.strokefont.xtic = 400; X graphics.strokefont.ytic = 1500; X graphics.strokefont.xsize = 50; X graphics.strokefont.ysize = 160; X if ((shmid = shmget(0xB0000L, 32768, IPC_CREAT)) < 0) X return(errno); X graphics.hercmem = (HERC_BUF_TYPE *)shmat(shmid, 0L, 0); X break; X case EGA_COLOR_MODE: X /* (not implemented yet) */ X graphics.x_extent = 639; X graphics.y_extent = 349; X graphics.x_window_ll = 0; X graphics.y_window_ll = 0; X graphics.x_window_ur = 639; X graphics.y_window_ur = 349; X graphics.aspect_ratio = 0.7; X graphics.cellfont.chars_per_line = 80; X graphics.cellfont.lines_per_screen = 43; X graphics.strokefont.xtic = 480; X graphics.strokefont.ytic = 1500; X graphics.strokefont.xsize = 60; X graphics.strokefont.ysize = 160; X if ((shmid = shmget(0xA0000L, 32768, IPC_CREAT)) < 0) X return(errno); X graphics.egamem = (EGA_BUF_TYPE *)shmat(shmid, 0L, 0); X break; X case IBM_PRINTER: X graphics.x_extent = 719; X graphics.y_extent = 959; X graphics.x_window_ll = 0; X graphics.y_window_ll = 0; X graphics.x_window_ur = 719; X graphics.y_window_ur = 959; X graphics.aspect_ratio = 0.7; X graphics.cellfont.chars_per_line = 90; X graphics.cellfont.lines_per_screen = 120; X graphics.strokefont.xtic = 400; X graphics.strokefont.ytic = 1000; X graphics.strokefont.xsize = 50; X graphics.strokefont.ysize = 100; X if ((graphics.printbuf1 = (PR_BUF_TYPE *)malloc X (sizeof(PR_BUF_TYPE))) == NULL) return(1); X if ((graphics.printbuf2 = (PR_BUF_TYPE *)malloc X (sizeof(PR_BUF_TYPE))) == NULL) return(1); X if ((graphics.printbuf3 = (PR_BUF_TYPE *)malloc X (sizeof(PR_BUF_TYPE))) == NULL) return(1); X break; X X default: X /* The programmer is probably confused at this point, */ X /* so we may as well exit. */ X printf ("Unable to initialize in routine init(). Mode %d requested.\n",graphics.grafmode); X exit (1); X } X X /* Set other variables to reasonable values. */ X X graphics.color = 2; X graphics.wrt_mode = OR; X graphics.xlate_x = 0; X graphics.xlate_y = 0; X graphics.xlate_z = 0; X graphics.offset_x = 0; X graphics.offset_y = 0; X graphics.offset_z = 0; X graphics.theta_x = 0; X graphics.theta_y = 0; X graphics.theta_z = 0; X graphics.c_tz_c_ty = 1.0; X graphics.s_tz = 0.0; X graphics.s_ty = 0.0; X graphics.c_tz_c_tx = 1.0; X graphics.s_tx = 0.0; X graphics.scale_factor = 1.0; X graphics.perspect_dist = HUGE; X graphics.x_vport_ll = NORM_X_MIN; X graphics.y_vport_ll = NORM_Y_MAX; X graphics.x_vport_ur = NORM_X_MIN; X graphics.y_vport_ur = NORM_Y_MAX; X X graphics.strokefont.angle = 0; X graphics.strokefont.angle = 0; X X /* Character cell spacing in normalized coordinates. This is */ X /* the distance in normalized coordinates. The calculation */ X /* must account for leftover scan lines on the bottom of the */ X /* screen. */ X graphics.cellfont.xtic = X NORM_X_RANGE X * (graphics.x_extent X - (graphics.x_extent + 1) % X_CELL_BITS) X / graphics.x_extent X / graphics.cellfont.chars_per_line; X /* The (integer) value just got rounded down, but we want to */ X /* round up always, so that we won't lose a pixel. Therefore */ X /* increment the value by 1. */ X graphics.cellfont.xtic++; X X graphics.cellfont.ytic = X NORM_Y_RANGE X * (graphics.y_extent X - (graphics.y_extent + 1) % Y_CELL_BITS) X / graphics.y_extent X / graphics.cellfont.lines_per_screen; X graphics.cellfont.ytic++; X X graphics.cellfont.xmult = 1; /* Cell size multipliers */ X graphics.cellfont.ymult = 1; X X /* Erase graphics memory. */ X if (clear()) return(1); X X return(0); X} XxX--EOF--XxX -- Dave Lewis Ann Arbor, MI ...![ itivax umix ]!m-net!dtlewis!lewis
lewis@m2-net.UUCP (Dave Lewis) (07/01/88)
------------------------------ cut here ------------------------------ # To recover, type "sh archive" echo restoring Makefile sed 's/^X//' > Makefile <<XxX--EOF--XxX XCFLAGS = -c -Ml -O XLDFLAGS = -Ml XOBJS = testpat.o clear.o movpen.o draw.o box.o linedraw.o write_pix.o init.o grafchar.o grafstr.o finish.o cellchar.o cellstr.o cursor.o pix_mode.o pix_color.o X Xall: demo xdemo mode X Xmode: mode.c setmode.c X cc -o mode mode.c setmode.c X chmod +x mode.sh X # X # If you have an EGA or CGA, you can use mode.sh instead of X # the mode.c program (mv mode.sh mode)." If you have a Hercules X # or Everex Edge, use mode.c. For other adapters, you may have X # to modify mode.c. X # X # If you use mode.c, you must make it suid and owned by root. X # Put it in a safe path, of course. X # X # Don't forget to create your video shared memory using X # shmcreate(1). This should be in your /etc/rc.d/shm.rc file. X # X # Try running demo and xdemo to see how things work. X Xdemo: demo.o \$(OBJS) X cc demo.o -o demo \$(LDFLAGS) $(OBJS) X Xxdemo: xdemo.o \$(OBJS) X cc xdemo.o -o xdemo \$(LDFLAGS) $(OBJS) X Xdemo.o: demo.c X cc \$(CFLAGS) demo.c X Xtestpat.o: testpat.c X cc \$(CFLAGS) testpat.c X Xclear.o: clear.c X cc \$(CFLAGS) clear.c X Xmovpen.o: movpen.c X cc \$(CFLAGS) movpen.c X Xdraw.o: draw.c X cc \$(CFLAGS) draw.c X Xbox.o: box.c X cc \$(CFLAGS) box.c X Xlinedraw.o: linedraw.c X cc \$(CFLAGS) linedraw.c X Xwrite_pix.o: write_pix.c X cc \$(CFLAGS) write_pix.c X Xinit.o: init.c X cc \$(CFLAGS) init.c X Xgrafchar.o: grafchar.c X cc \$(CFLAGS) grafchar.c X Xgrafstr.o: grafstr.c X cc \$(CFLAGS) grafstr.c X Xfinish.o: finish.c X cc \$(CFLAGS) finish.c X Xcellchar.o: cellchar.c X cc \$(CFLAGS) cellchar.c X Xcellstr.o: cellstr.c X cc \$(CFLAGS) cellstr.c X Xcursor.o: cursor.c X cc \$(CFLAGS) cursor.c X Xpix_mode.o: pix_mode.c X cc \$(CFLAGS) pix_mode.c X Xpix_color.o: pix_color.c X cc \$(CFLAGS) pix_color.c X X XxX--EOF--XxX echo restoring demo.c sed 's/^X//' > demo.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) demo.c 4.6 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X#include <signal.h> X#include <sys/types.h> X#include <ctype.h> X#include <sys/ipc.h> X#include <stdio.h> X X/* Sun Nov 29 16:20:03 EST 1987 */ X/* Sat Mar 21 22:59:10 EST 1987 */ X/* Sun Feb 21 11:50:45 EST 1988 */ X X#include "graphics.h" X Xextern struct SVAT_graphics graphics; X Xmain(argc,argv) Xint argc; Xchar *argv[]; X{ X int testpattern(); X X char *mode_to_use[8]; X int idx; X int init(), grafstr(), finish(), istat; X void null_function(); X X if (argc < 2) { X printf ("Usage: demo <mode>\n\nWhere <mode> can be 4, 6, 8, EGA or print)\n"); X exit(0); X } X X if (strcmp(argv[1],"4") == 0) { X graphics.grafmode = CGA_COLOR_MODE; X strcpy(mode_to_use,"mode 4"); X } X else if (strcmp(argv[1],"6") == 0) { X graphics.grafmode = CGA_HI_RES_MODE; X strcpy(mode_to_use,"mode 6"); X } X else if (strcmp(argv[1],"8") == 0) { X graphics.grafmode = HERC_GRAF_MODE; X strcpy(mode_to_use,"mode 8"); X } X else if (strcmp(argv[1],"16") == 0) { X graphics.grafmode = EGA_COLOR_MODE; X strcpy(mode_to_use,"mode 16"); X } X else if (strcmp(argv[1],"EGA") == 0) { X graphics.grafmode = EGA_COLOR_MODE; X strcpy(mode_to_use,"mode 16"); X } X else if (strcmp(argv[1],"print") == 0) { X graphics.grafmode = IBM_PRINTER; X strcpy(mode_to_use," "); X } X else { X printf ("Valid modes are 4, 6, 8, EGA, and print.\n"); X exit (1); X } X X /* Set video mode. */ X X istat = init(graphics.grafmode); X X system(mode_to_use); X X istat = clear(); X X istat = testpattern(); X X if (graphics.grafmode != IBM_PRINTER) { X X /* Kill some time... */ X signal(SIGALRM,null_function); X alarm(4); X pause(); X X istat = clear(); X X /* void grafstr(strng,x,y,vsize,hsize,spacing) */ X istat = grafstr("AbCdEfGhIjKlMnOpQrStUvWxYz",10,10000,400,180,1250); X istat = grafstr("AbCdEfGhIjKlMnOpQrStUvWxYz",100,25000,150,80,667); X istat = grafstr("AbCdEfGhIjKlMnO",100,15000,800,360,2500); X X istat = grafstr("Z#\$%^&*()+",100,20000,600,400,2600); X X if (graphics.grafmode != IBM_PRINTER) { X /* Kill some time... */ X signal(SIGALRM,null_function); X alarm(4); X pause(); X } X X istat = clear(); X X istat = cursor(1,1); X istat = cellstr("This should be (1,1)"); X X istat = cursor(2,30); X istat = cellstr("This should be (2,30)"); X X istat = cursor(3,60); X istat = cellstr("This should be (3,60)"); X X istat = cursor(10,40); X istat = cellstr("This should be (10,40)"); X X istat = cursor(25,40); X cellstr("X"); X X istat = cursor(25,80); X cellstr("X"); X X istat = cursor(43,90); X cellstr("X"); X X cursor(2,1); cellstr("This"); X cursor(3,1); cellstr(" Is "); X cursor(4,1); cellstr(" A "); X cursor(5,1); cellstr("TEST"); X cursor(6,1); cellstr("XXXX"); X cursor(7,1); cellstr("XXXX"); X X for (idx=1;idx<=43;idx++) { X cursor(idx,20); X cellstr("XHIHX"); X } X X /* Kill some time... */ X signal(SIGALRM,null_function); X alarm(4); X pause(); X X system ("mode 2"); X } X X istat = finish(); X} X Xstatic void null_function() { X /* Do nothing. Dummy signal handling routine for SIGALRM. */ X} X XxX--EOF--XxX echo restoring finish.c sed 's/^X//' > finish.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) finish.c 4.6 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X X/* Wed Feb 10 20:58:37 EST 1988 */ X/* Detach shared memory and do any other clean up chores. */ X/* If printing, the print job is dispatched to the print spooler. */ X/* This routine is specific to Microport System V/AT, and presumes */ X/* that shared memory segments have been defined (usually at system */ X/* boot time) such that the shared memory keys are "B8000L" for CGA */ X/* adapter, and so on. */ X X#define TEXTPITCH(fp) fputc(033,fp);fputc('A',fp);fputc(014,fp);fputc(033,fp);fputc('2',fp); X#define GRAFPITCH(fp) fputc(033,fp); fputc('1',fp); X#define GRAFSTART(fp) fputc(033,fp); fputc('L',fp); fputc(0300,fp);fputc(03,fp); X#define CRLF(fp) fputc(015,fp); fputc(012,fp); X X#include <stdio.h> X#include <sys/types.h> X#include <sys/ipc.h> X#include <string.h> X#include "graphics.h" X Xint finish() X X{ X extern struct SVAT_graphics graphics; X int shmdt(), fprintf(), fputs(), fwrite(); X int shmid; X int clear(); X void free(); X char *getenv(); X extern errno; X int idx; X char printprog[60]; X char *envptr; X X FILE *popen(), *fhandle; X int pclose(); X X switch (graphics.grafmode) { X X case CGA_HI_RES_MODE: X /* Erase graphics memory. */ X if (clear()) return(1); X /* Detach the shared memory segment. */ X if (shmdt(graphics.cgamem) < 0) return(errno); X break; X X case CGA_COLOR_MODE: X /* Erase graphics memory. */ X if (clear()) return(1); X /* Detach the shared memory segment. */ X if (shmdt(graphics.cgamem) < 0) return(errno); X break; X X case EGA_COLOR_MODE: X /* Erase graphics memory. */ X if (clear()) return(1); X /* Detach the shared memory segment. */ X if (shmdt(graphics.egamem) < 0) return(errno); X break; X X case HERC_GRAF_MODE: X /* Erase graphics memory. */ X if (clear()) return(1); X /* Detach the shared memory segment. */ X if (shmdt(graphics.hercmem) < 0) return(errno); X break; X X case IBM_PRINTER: X X /* Print the buffer */ X X /* Use the environment variable PLOTDEV if set. */ X X strcpy(printprog, PRINTPROG); X strcat(printprog, " "); X if ((envptr = getenv("PLOTDEV")) != NULL) { X strcat(printprog, "-d"); X strcat(printprog, envptr); X } X X if ((fhandle = popen(printprog, "w")) == NULL) { X fprintf(stderr, X "finish(): Error piping to %s\n", X printprog); X return(1); X } X X /* Dump the print image to the file */ X X /* Set line feed pitch to 7/72" */ X X GRAFPITCH(fhandle); X X /* Write the lines of data (3 buffers full) */ X for (idx=0; idx<PRINTLINES; idx++) { X GRAFSTART(fhandle); X fwrite(&(graphics.printbuf1->buf[idx][0]), X sizeof(char), PRINTDENSITY, fhandle); X CRLF(fhandle); X } X for (idx=0; idx<PRINTLINES; idx++) { X GRAFSTART(fhandle); X fwrite(&(graphics.printbuf2->buf[idx][0]), X sizeof(char), PRINTDENSITY, fhandle); X CRLF(fhandle); X } X for (idx=0; idx<PRINTLINES; idx++) { X GRAFSTART(fhandle); X fwrite(&(graphics.printbuf3->buf[idx][0]), X sizeof(char), PRINTDENSITY, fhandle); X CRLF(fhandle); X } X X /* Set line feed pitch back to 12/72" for text */ X TEXTPITCH(fhandle); X X if (pclose(fhandle) < 0) return(1); X X /* Free the allocated memory. */ X free(graphics.printbuf1); X free(graphics.printbuf2); X free(graphics.printbuf3); X X break; X X default: X return(1); X } X return(0); X} X X XxX--EOF--XxX echo restoring linedraw.c sed 's/^X//' > linedraw.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) linedraw.c 4.4 88/06/20"; X#endif X X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* Fri Jul 3 23:43:36 EDT 1987 X** dtlewis X** Routine to draw a line. X*/ X Xint linedraw(x1,y1,x2,y2) X int x1, y1, x2, y2; X{ X int movepen(), draw(); X if (movepen(x1,y1)) return(1); X if (draw(x2,y2)) return(1); X return(0); X} XxX--EOF--XxX echo restoring mode.c sed 's/^X//' > mode.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) mode.c 4.4 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* dtlewis 7-13-1987 X** Take command line argument to set graphics mode. If no argument, then X** read standard input until end of file. X*/ X X#define NORMAL_MODE 2 X X#include <stdio.h> X Xmain(argc,argv) Xint argc; Xchar *argv[]; X{ X int setmode(); X int modevalue, stat; X char *inbuf[20]; X X if (argc > 2) { X printf("Usage: mode n\n"); X exit(0); X } X X else if (argc == 2) { X modevalue = atoi(argv[1]); X if (modevalue < 0 || modevalue > 11) { X printf("Mode must be between 0 and 11\n"); X exit(0); X } X setmode(modevalue); X } X else if (argc == 1) { X#ifdef DEBUG X for ( ; ; ) { X stat=scanf("%d", &modevalue); X if (stat == EOF) exit(0); X /* Clear input stream if bad read. */ X if (stat == 0) gets(inbuf, 20, stdin); X if (stat == 1 && modevalue >= 0 && modevalue <=11) X setmode(modevalue); X } X#endif /* DEBUG */ X setmode(NORMAL_MODE); X } X } XxX--EOF--XxX echo restoring mode.sh sed 's/^X//' > mode.sh <<XxX--EOF--XxX X: X# Contributed by Denis Fortin, April 1988. X# X# mode - This trivial little command file is used to set the graphics mode X# of the console on Microport System V/AT. X# X# Usage: X# mode [value] X# X# where: value is an integer used to select the current display X# mode. If it is omitted, the screen is returned to X# normal text mode. X# X# Examples: X# mode X# Returns to normal text mode X# X# mode 16 X# Puts an EGA card with Enhanced Display adapter in 640x350 X# graphics mode. X# X# mode 6 X# Puts a CGA card in 640x200 graphics mode. X# Xif [ \$# -lt 1 ] Xthen X echo "\033[=h\c" Xelse X echo "\033[=\${1}h\c" Xfi XxX--EOF--XxX echo restoring movpen.c sed 's/^X//' > movpen.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) movpen.c 4.3 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* dtlewis Fri Jul 3 23:12:40 EDT 1987 X** Routine to move the logical graphics cursor to the indicated (x,y) X** position. X*/ X X#include "graphics.h" X Xextern struct SVAT_graphics graphics; X Xint movepen(x,y) X int x,y; X{ X /* Set the graphics cursor to the indicated position. */ X /* X and y are in normalized 2-D coordinates (0 to 32767). */ X if ((graphics.x_cursor = x) < 0 ) return(1); X if ((graphics.y_cursor = y) < 0 ) return(1); X return(0); X} XxX--EOF--XxX echo restoring setmode.c sed 's/^X//' > setmode.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) setmode.c 4.3 88/06/19"; X#endif X#define MSDOS 0 X#define UNIX 1 X/* X * Module : mode X * Date : 8705.20 X * Author : Jeffrey A. Turner X * Purpose : Set cga video modes (0-6) when active Unix display X * is an mda. Modified to support modes 7 and 8 X * on Everex Edge. X * X * Modifications: dtlewis 8-16-1987 Changes to support mode 7 and to X * support Hercules operation on an Everex Edge. X * Hercules 720 x 348 (page 0) is referred to as X * mode 8 for this routine, and Hercules page 1 is X * referred to as mode 9. Note that these are for X * convenience, and conflict with the PCjr mode X * assignments, which I presume to be non-reusable X * and obsolete. X * X * Split modeset() off from the main routine to make X * it callable from any program. X * X * Renamed the function to setmode(). X * X * Useage: int setmode(modenumber) X * int modenumber X * X * \$Log$ X */ X X#include <stdio.h> X#if UNIX X#include <sys/types.h> X#include <sys/io_op.h> X#endif X Xextern errno; X Xint fd; X X/* Define the mode register settings. */ Xunsigned char creg[12] = { X 0x2c, 0x28, 0x2d, 0x2d, 0x2a, 0x2e, 0x1e, 0x2d, 0x0e, 0x8e, 0x2d, 0x2d X}; X/* Define the Everex extended graphics register settings */ Xunsigned char ext_graf_reg[12] = { X 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x06, 0x06 X}; X Xunsigned char params[192] = { X/*0*/ 0x38, 0x28, 0x2d, 0x0a, 0x1f, 0x06, 0x19, 0x1c, /* 40x25 b/w */ X 0x02, 0x07, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, X X/*1*/ 0x38, 0x28, 0x2d, 0x0a, 0x1f, 0x06, 0x19, 0x1c, /* 40x25 color */ X 0x02, 0x07, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, X X/*2*/ 0x61, 0x50, 0x52, 0x0f, 0x19, 0x06, 0x19, 0x19, /* 80x25 b/w */ X 0x02, 0x0d, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00, X X/*3*/ 0x71, 0x50, 0x5a, 0x0a, 0x1f, 0x06, 0x19, 0x1c, /* 80x25 color */ X 0x02, 0x07, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, X X/*4*/ 0x38, 0x28, 0x2d, 0x0a, 0x7f, 0x06, 0x64, 0x70, /* 320x200 color */ X 0x02, 0x01, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, X X/*5*/ 0x38, 0x28, 0x2d, 0x0a, 0x7f, 0x06, 0x64, 0x70, /* 320x200 b/w */ X 0x02, 0x01, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, X X/*6*/ 0x38, 0x28, 0x2d, 0x0a, 0x7f, 0x06, 0x64, 0x70, /* 640x200 b/w */ X 0x02, 0x01, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, X X/*7*/ 0x61, 0x50, 0x52, 0x0f, 0x19, 0x06, 0x19, 0x19, /* mono */ X 0x02, 0x0d, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00, X X/*8*/ 0x36, 0x2d, 0x2e, 0x07, 0x5a, 0x02, 0x57, 0x57, /* Hercules 720x348 */ X 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, X X/*9*/ 0x37, 0x2d, 0x2f, 0x05, 0x57, 0x00, 0x57, 0x57, /* Hercules 720x348 */ X 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, X X/*10*/ 0x9a, 0x84, 0x86, 0x0f, 0x19, 0x06, 0x19, 0x19, /* Everex 132x25b&w */ X 0x02, 0x0d, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, X X/*11*/ 0x9a, 0x84, 0x86, 0x0f, 0x2d, 0x02, 0x2c, 0x2c, /* Everex 132x44b&w */ X 0x02, 0x07, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00 X}; X Xsetmode(mode) Xint mode; X{ X int i; X int j; X int bport; X int cgaaddr = 0x3d4; /* cga 6845 port address */ X int monoaddr = 0x3b4; /* mda 6845 port address */ X X#if UNIX X if ((fd = open("/dev/mem", 2)) < 0) { X fprintf(stderr, "mode: open of /dev/mem failed\n"); X perror("mode"); X exit(1); X } X#endif X if ((mode == 2 | mode == 7) | (mode == 8) | (mode == 9) | X (mode == 10) | (mode == 11)) { X /* Select mono mode on Everex Edge. */ X bport = cgaaddr; X outb(bport+9, 2); /* Extended Graphics Register */ X bport = monoaddr; X } X else { X /* Select CGA mode on Everex Edge. */ X bport = monoaddr; X outb(bport+9, 0); /* Extended Graphics Register */ X bport = cgaaddr; X } X X outb(bport+4, 0); /* Reset mode register */ X X outb(bport+11, 0x06); /* Enable all 64k of Everex X ** Edge video memory, for mono X ** adapter. X */ X X outb(bport+9, ext_graf_reg[mode]); /* set Everex "extended X graphics register" */ X j = (mode+1)*16; X for(i=mode*16; i < j; i++) { X outb(bport, i); /* select register */ X outb(bport+1, params[i]); /* send value */ X } X X outb(bport+4, creg[mode]); /* enable */ X if (mode == 6) X outb(bport+5, 0x3f); /* set overscan for 640x200 */ X else X outb(bport+5, 0x30); /* set normal overscan */ X close(fd); X return(0); X} X X#if UNIX Xoutb(portno, data) Xint portno; Xint data; X{ X io_op_t iop; X X iop.io_port = portno; X iop.io_byte = data; X if (ioctl(fd, IOCIOP_WB, &iop) < 0) { X fprintf(stderr, "mode: error on IOCIOP_WB\n"); X perror("mode"); X exit(1); X } X} X#endif X X X#if MSDOS Xoutb(portno, data) Xint portno; Xint data; X{ X outp(portno,data); X} X#endif X XxX--EOF--XxX echo restoring testpat.c sed 's/^X//' > testpat.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) testpat.c 4.5 88/06/20"; X#endif X#include "graphics.h" Xextern struct SVAT_graphics graphics; X Xint testpattern() { X X int pix_color(); X X /* Put a test pattern on the screen. */ X X int linedraw(), movepen(), draw(), box(); X X if (linedraw(4000,4000,20000,20000)) return(1); X X if (movepen(6000,6000)) return(1); X if (draw(12000,6000)) return(1); X if (draw(12000,12000)) return(1); X if (draw(6000,12000)) return(1); X if (draw(6000,6000)) return(1); X X if (movepen(6000,6000)) return(1); X if (draw(12000,12000)) return(1); X X pix_color(3); X X if (box(700,700,900,1200)) return(1); X if (box(900,1200,1100,1700)) return(1); X if (box(20000,20000,30000,30000)) return(1); X X if (box(1000,10000,12000,12000)) return(1); X if (box(9000,9000,13000,13000)) return(1); X if (box(8000,8000,14000,14000)) return(1); X if (box(7000,7000,15000,15000)) return(1); X if (box(6000,6000,16000,16000)) return(1); X X if (movepen(2000,13000)) return(1); X if (draw(4000,13000)) return(1); X if (movepen(4000,13300)) return(1); X if (draw(2000,13300)) return(1); X X pix_color(2); X X if (movepen(2000,14000)) return(1); X if (draw(30000,14400)) return(1); X if (draw(2000,14800)) return(1); X if (draw(30000,15200)) return(1); X if (draw(2000,15600)) return(1); X if (draw(30000,16000)) return(1); X if (draw(2000,16400)) return(1); X if (draw(30000,16800)) return(1); X if (draw(2000,17200)) return(1); X if (draw(30000,17600)) return(1); X if (draw(2000,18000)) return(1); X if (draw(30000,18400)) return(1); X if (draw(0,18800)) return(1); X if (draw(32000,19200)) return(1); X if (draw(0,19600)) return(1); X if (draw(32000,20000)) return(1); X if (draw(0,20400)) return(1); X if (draw(32000,20800)) return(1); X if (draw(0,21200)) return(1); X if (draw(32000,21600)) return(1); X if (draw(0,22000)) return(1); X if (draw(32000,22400)) return(1); X X if (movepen(6000,4000)) return(1); X if (draw(6200,30000)) return(1); X if (draw(6400,4000)) return(1); X if (draw(6600,30000)) return(1); X if (draw(6800,4000)) return(1); X if (draw(7000,30000)) return(1); X if (draw(7200,4000)) return(1); X if (draw(7400,30000)) return(1); X if (draw(7600,4000)) return(1); X if (draw(7800,30000)) return(1); X if (draw(8000,4000)) return(1); X if (draw(8200,30000)) return(1); X if (draw(8400,4000)) return(1); X X pix_color(1); X X if (movepen(2000,2000)) return(1); X if (draw(32000,4000)) return(1); X if (draw(31000,32000)) return(1); X if (draw(1000,30000)) return(1); X if (draw(2000,2000)) return(1); X if (draw(31000,32000)) return(1); X X if (movepen(0,0)) return(1); X if (draw(32767,0)) return(1); X if (draw(32767,32767)) return(1); X if (draw(0,32767)) return(1); X if (draw(0,0)) return(1); X if (draw(32767,32767)) return(1); X if (movepen(0,32767)) return(1); X if (draw(32767,0)) return(1); X X return(0); X} XxX--EOF--XxX echo restoring write_pix.c sed 's/^X//' > write_pix.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) write_pix.c 4.9 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X#include "graphics.h" X/* X * The following routine writes a pixel dot on a CGA in modes 4 X * and 6 and on Hercules for Microport System V/AT. X * Also writes to pixel buffer for printer support. X * Note: Operation of the "color" variable is untested; I have X * an Everex Edge with mono display. Probably will work, though. X * I have used this in a program which does line drawing graphics, X * and it runs much faster than the equivalent MS-DOS program X * calling BIOS. (Tested under MS-DOS with Mix-C compiler). X */ X Xint write_pix(x,y) X int x, y; X{ X X/* Mon Mar 23 00:14:50 EST 1987 X * Sun Mar 13 22:21:46 EST 1988 X * system5 dtlewis 2 1.3 AT X * X * Compile with large memory model. X * X * This routine currently supports modes 4, 6, and Hercules (arbitrarily X * defined as mode 8), as well as buffer for printer graphics. X */ X Xextern struct SVAT_graphics graphics; X Xstatic int row, col, page; Xunsigned register char bitmask; Xregister char shiftcount; X Xswitch (graphics.grafmode) { X X case CGA_COLOR_MODE: X X row = y >> 1; X col = x >> 2; X X /* Select a color mask, consisting of four 2 bit patterns. */ X switch (graphics.color) { X case 0: bitmask = 0; X break; X case 1: bitmask = 0x055; X break; X case 2: bitmask = 0x0AA; X break; X case 3: bitmask = 0x0FF; X break; X default:bitmask = 0x0FF; X } X X /* Apply the color mask to the two bit pixel of interest. */ X switch (x & 0x0003) { X case 0: bitmask &= PIX0; X break; X case 1: bitmask &= PIX1; X break; X case 2: bitmask &= PIX2; X break; X case 3: bitmask &= PIX3; X break; X } X X /* Write pixel to the appropriate page for this line. */ X if (y & 0x0001) X switch (graphics.wrt_mode) { X case OR: X (graphics.cgamem)->page2[row][col] X |= bitmask; X break; X case XOR: X (graphics.cgamem)->page2[row][col] X ^= bitmask; X break; X } X else X switch (graphics.wrt_mode) { X case OR: X (graphics.cgamem)->page1[row][col] X |= bitmask; X break; X case XOR: X (graphics.cgamem)->page1[row][col] X ^= bitmask; X break; X } X break; X X case CGA_HI_RES_MODE: X X row = y >> 1; X col = x >> 3; X X bitmask = 0x80; X shiftcount = x & 0x0007; X bitmask = bitmask >> shiftcount; X X if (y & 0x0001) { X switch (graphics.wrt_mode) { X case OR: X (graphics.cgamem)->page2[row][col] X |= bitmask; X break; X case XOR: X (graphics.cgamem)->page2[row][col] X ^= bitmask; X break; X } X } X else { X switch (graphics.wrt_mode) { X case OR: X (graphics.cgamem)->page1[row][col] X |= bitmask; X break; X case XOR: X (graphics.cgamem)->page1[row][col] X ^= bitmask; X break; X } X } X break; X X case EGA_COLOR_MODE: X X col = x >> 3; X X bitmask = 0x80; X shiftcount = x & 0x0007; X bitmask = bitmask >> shiftcount; X X (graphics.egamem)->mem[y][col] |= bitmask; X break; X X case HERC_GRAF_MODE: X X row = y >> 2; X col = x >> 3; X X bitmask = 0x80 >> (x & 0x0007); X X switch (y & 0x0003) { X X case 0: X switch (graphics.wrt_mode) { X case OR: X (graphics.hercmem) X ->page1[row][col] X |= bitmask; X break; X case XOR: X (graphics.hercmem) X ->page1[row][col] X ^= bitmask; X break; X } X break; X case 1: X switch (graphics.wrt_mode) { X case OR: X (graphics.hercmem) X ->page2[row][col] X |= bitmask; X break; X case XOR: X (graphics.hercmem) X ->page2[row][col] X ^= bitmask; X break; X } X break; X case 2: X switch (graphics.wrt_mode) { X case OR: X (graphics.hercmem) X ->page3[row][col] X |= bitmask; X break; X case XOR: X (graphics.hercmem) X ->page3[row][col] X ^= bitmask; X break; X } X break; X case 3: X switch (graphics.wrt_mode) { X case OR: X (graphics.hercmem) X ->page4[row][col] X |= bitmask; X break; X case XOR: X (graphics.hercmem) X ->page4[row][col] X ^= bitmask; X break; X } X break; X } X break; X X case IBM_PRINTER: X X col = PRINTDENSITY - y - 1; X X row = (x >> 3); X page = 0; X while (row >= PRINTLINES) { X row -= PRINTLINES; X ++page; X } X X bitmask = 0x80 >> (x & 0x0007); X X switch (page) { X X case 0: /* Page 0 */ X switch (graphics.wrt_mode) { X case OR: X (graphics.printbuf1) X ->buf[row][col] X |= bitmask; X break; X case XOR: X (graphics.printbuf1) X ->buf[row][col] X ^= bitmask; X break; X } X break; X case 1: /* Page 1 */ X switch (graphics.wrt_mode) { X case OR: X (graphics.printbuf2) X ->buf[row][col] X |= bitmask; X break; X case XOR: X (graphics.printbuf2) X ->buf[row][col] X ^= bitmask; X break; X } X break; X case 2: /* Page 2 */ X switch (graphics.wrt_mode) { X case OR: X (graphics.printbuf3) X ->buf[row][col] X |= bitmask; X break; X case XOR: X (graphics.printbuf3) X ->buf[row][col] X ^= bitmask; X break; X } X break; X } X break; X default: X return(1); X } X return(0); X} XxX--EOF--XxX -- Dave Lewis Ann Arbor, MI ...![ itivax umix ]!m-net!dtlewis!lewis
lewis@m2-net.UUCP (Dave Lewis) (07/01/88)
------------------------------ cut here ------------------------------ # To recover, type "sh archive" echo restoring bitmaps.h sed 's/^X//' > bitmaps.h <<XxX--EOF--XxX X/* @(#) bitmaps.h 4.4 88/06/19 */ X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* Number of print pixel columns across the page. */ X# define PRINTDENSITY 960 X/* Number of 8 pixel print rows down the page (times 3 for full page). */ X# define PRINTLINES 30 X X/* X * Define the structure for CGA video memory. X */ Xtypedef struct CGAMEM { X char page1[100][80]; X char filler[192]; X char page2[100][80]; X} CGA_BUF_TYPE; X X/* X * Define the structure for EGA video memory. X */ Xtypedef struct EGAMEM { X char mem[350][80]; X} EGA_BUF_TYPE; X X/* X * Define the structure for Hercules video memory. X */ Xtypedef struct HERCMEM { X char page1[87][90]; X char filler1[362]; X char page2[87][90]; X char filler2[362]; X char page3[87][90]; X char filler3[362]; X char page4[87][90]; X} HERC_BUF_TYPE; X X/* X * Define the structure for a memory buffer for IBM printer bit map X * image. The horizontal resolution may be either 960 bits, or 480 X * bits (in which case only part of the 960 characters is used in each X * line of the buffer). The buffer is divided into multiple pages so X * that it can fit into two memory segments of < 64K each. That is, X * three of these structures must be declared to make a complete print X * buffer for 90 * 960 byte printing. X */ Xtypedef struct IBM_PRINT_BUF { X char buf[PRINTLINES][PRINTDENSITY]; X} PR_BUF_TYPE; /* Three of these required! */ XxX--EOF--XxX echo restoring cellfont.h sed 's/^X//' > cellfont.h <<XxX--EOF--XxX X/* @(#) cellfont.h 4.3 88/06/19 */ X/* Note: Copyright status unknown. Presumed public domain. dtl 3-15-88*/ X X/* RAM-Loadable Character Sets for the IBM PC X Richard Wilton X July 1986 */ X X/* definitions for 8 by 8 characters 00 through FF */ X Xstatic char charcell [2048]={ X 0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 000 */ X 0x07E,0x081,0x0A5,0x081,0x0BD,0x099,0x081,0x07E, /* 001 */ X 0x07E,0x0FF,0x000,0x0FF,0x0C3,0x0E7,0x0FF,0x07E, /* 002 */ X 0x06C,0x0FE,0x0FE,0x0FE,0x07C,0x038,0x010,0x000, /* 003 */ X 0x010,0x038,0x07C,0x0FE,0x07C,0x038,0x010,0x000, /* 004 */ X 0x038,0x07C,0x038,0x0FE,0x0FE,0x07C,0x038,0x07C, /* 005 */ X 0x010,0x010,0x038,0x07C,0x0FE,0x07C,0x038,0x07C, /* 006 */ X 0x000,0x000,0x018,0x03C,0x03C,0x018,0x000,0x000, /* 007 */ X 0x0FF,0x0FF,0x0E7,0x0C3,0x0C3,0x0E7,0x0FF,0x0FF, /* 008 */ X 0x000,0x03C,0x066,0x042,0x042,0x066,0x03C,0x000, /* 009 */ X 0x0FF,0x0C3,0x099,0x0BD,0x0BD,0x099,0x0C3,0x0FF, /* 00A */ X 0x00F,0x007,0x00F,0x07D,0x0CC,0x0CC,0x0CC,0x078, /* 00B */ X 0x03C,0x066,0x066,0x066,0x03C,0x018,0x07E,0x018, /* 00C */ X 0x03F,0x033,0x03F,0x030,0x030,0x070,0x0F0,0x0E0, /* 00D */ X 0x07F,0x063,0x07F,0x063,0x063,0x067,0x0E6,0x0C0, /* 00E */ X 0x099,0x05A,0x03C,0x0E7,0x0E7,0x03C,0x05A,0x099, /* 00F */ X 0x080,0x0E0,0x0F8,0x0FE,0x0F8,0x0E0,0x080,0x000, /* 010 */ X 0x002,0x00E,0x03E,0x0FE,0x03E,0x00E,0x002,0x000, /* 011 */ X 0x018,0x03C,0x07E,0x018,0x018,0x07E,0x03C,0x018, /* 012 */ X 0x066,0x066,0x066,0x066,0x066,0x000,0x066,0x000, /* 013 */ X 0x07F,0x000,0x000,0x07B,0x01B,0x01B,0x01B,0x000, /* 014 */ X 0x03E,0x063,0x038,0x06C,0x06C,0x038,0x0CC,0x078, /* 015 */ X 0x000,0x000,0x000,0x000,0x07E,0x07E,0x07E,0x000, /* 016 */ X 0x018,0x03C,0x07E,0x018,0x07E,0x03C,0x018,0x0FF, /* 017 */ X 0x018,0x03C,0x07E,0x018,0x018,0x018,0x018,0x000, /* 018 */ X 0x018,0x018,0x018,0x018,0x07E,0x03C,0x018,0x000, /* 019 */ X 0x000,0x018,0x00C,0x0FE,0x00C,0x018,0x000,0x000, /* 01A */ X 0x000,0x030,0x060,0x0FE,0x060,0x030,0x000,0x000, /* 01B */ X 0x000,0x000,0x0C0,0x0C0,0x0C0,0x0FE,0x000,0x000, /* 01C */ X 0x000,0x024,0x066,0x0FF,0x066,0x024,0x000,0x000, /* 01D */ X 0x000,0x018,0x03C,0x07E,0x0FF,0x0FF,0x000,0x000, /* 01E */ X 0x000,0x0FF,0x0FF,0x07E,0x03C,0x018,0x000,0x000, /* 01F */ X 0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 020 */ X 0x030,0x078,0x078,0x030,0x030,0x000,0x030,0x000, /* 021 */ X 0x06C,0x06C,0x06C,0x000,0x000,0x000,0x000,0x000, /* 022 */ X 0x06C,0x06C,0x0FE,0x06C,0x0FE,0x06C,0x06C,0x000, /* 023 */ X 0x030,0x07C,0x0C0,0x078,0x00C,0x0F8,0x030,0x000, /* 024 */ X 0x000,0x0C6,0x0CC,0x018,0x030,0x066,0x0C6,0x000, /* 025 */ X 0x038,0x06C,0x038,0x076,0x0DC,0x0CC,0x076,0x000, /* 026 */ X 0x060,0x060,0x0C0,0x000,0x000,0x000,0x000,0x000, /* 027 */ X 0x018,0x030,0x060,0x060,0x060,0x030,0x018,0x000, /* 028 */ X 0x060,0x030,0x018,0x018,0x018,0x030,0x060,0x000, /* 029 */ X 0x000,0x066,0x03C,0x0FF,0x03C,0x066,0x000,0x000, /* 02A */ X 0x000,0x030,0x030,0x0FC,0x030,0x030,0x000,0x000, /* 02B */ X 0x000,0x000,0x000,0x000,0x000,0x030,0x030,0x060, /* 02C */ X 0x000,0x000,0x000,0x0FC,0x000,0x000,0x000,0x000, /* 02D */ X 0x000,0x000,0x000,0x000,0x000,0x030,0x030,0x000, /* 02E */ X 0x006,0x00C,0x018,0x030,0x060,0x0C0,0x080,0x000, /* 02F */ X 0x07C,0x0C6,0x0CE,0x0DE,0x0F6,0x0E6,0x07C,0x000, /* 030 */ X 0x030,0x070,0x030,0x030,0x030,0x030,0x0FC,0x000, /* 031 */ X 0x078,0x0CC,0x00C,0x038,0x060,0x0CC,0x0FC,0x000, /* 032 */ X 0x078,0x0CC,0x00C,0x038,0x00C,0x0CC,0x078,0x000, /* 033 */ X 0x01C,0x03C,0x06C,0x0CC,0x0FE,0x00C,0x01E,0x000, /* 034 */ X 0x0FC,0x0C0,0x0F8,0x00C,0x00C,0x0CC,0x078,0x000, /* 035 */ X 0x038,0x060,0x0C0,0x0F8,0x0CC,0x0CC,0x078,0x000, /* 036 */ X 0x0FC,0x0CC,0x00C,0x018,0x030,0x030,0x030,0x000, /* 037 */ X 0x078,0x0CC,0x0CC,0x078,0x0CC,0x0CC,0x078,0x000, /* 038 */ X 0x078,0x0CC,0x0CC,0x07C,0x00C,0x018,0x070,0x000, /* 039 */ X 0x000,0x030,0x030,0x000,0x000,0x030,0x030,0x000, /* 03A */ X 0x000,0x030,0x030,0x000,0x000,0x030,0x030,0x060, /* 03B */ X 0x018,0x030,0x060,0x0C0,0x060,0x030,0x018,0x000, /* 03C */ X 0x000,0x000,0x0FC,0x000,0x000,0x0FC,0x000,0x000, /* 03D */ X 0x060,0x030,0x018,0x00C,0x018,0x030,0x060,0x000, /* 03E */ X 0x078,0x0CC,0x00C,0x018,0x030,0x000,0x030,0x000, /* 03F */ X 0x07C,0x0C6,0x0DE,0x0DE,0x0DE,0x0C0,0x078,0x000, /* 040 */ X 0x030,0x078,0x0CC,0x0CC,0x0FC,0x0CC,0x0CC,0x000, /* 041 */ X 0x0FC,0x066,0x066,0x07C,0x066,0x066,0x0FC,0x000, /* 042 */ X 0x03C,0x066,0x0C0,0x0C0,0x0C0,0x066,0x03C,0x000, /* 043 */ X 0x0F8,0x06C,0x066,0x066,0x066,0x06C,0x0F8,0x000, /* 044 */ X 0x0FE,0x062,0x068,0x078,0x068,0x062,0x0FE,0x000, /* 045 */ X 0x0FE,0x062,0x068,0x078,0x068,0x060,0x0F0,0x000, /* 046 */ X 0x03C,0x066,0x0C0,0x0C0,0x0CE,0x066,0x03E,0x000, /* 047 */ X 0x0CC,0x0CC,0x0CC,0x0FC,0x0CC,0x0CC,0x0CC,0x000, /* 048 */ X 0x078,0x030,0x030,0x030,0x030,0x030,0x078,0x000, /* 049 */ X 0x01E,0x00C,0x00C,0x00C,0x0CC,0x0CC,0x078,0x000, /* 04A */ X 0x0E6,0x066,0x06C,0x078,0x06C,0x066,0x0E6,0x000, /* 04B */ X 0x0F0,0x060,0x060,0x060,0x062,0x066,0x0FE,0x000, /* 04C */ X 0x0C6,0x0EE,0x0FE,0x0FE,0x0D6,0x0C6,0x0C6,0x000, /* 04D */ X 0x0C6,0x0E6,0x0F6,0x0DE,0x0CE,0x0C6,0x0C6,0x000, /* 04E */ X 0x038,0x06C,0x0C6,0x0C6,0x0C6,0x06C,0x038,0x000, /* 04F */ X 0x0FC,0x066,0x066,0x07C,0x060,0x060,0x0F0,0x000, /* 050 */ X 0x078,0x0CC,0x0CC,0x0CC,0x0DC,0x078,0x01C,0x000, /* 051 */ X 0x0FC,0x066,0x066,0x07C,0x06C,0x066,0x0E6,0x000, /* 052 */ X 0x078,0x0CC,0x0E0,0x070,0x01C,0x0CC,0x078,0x000, /* 053 */ X 0x0FC,0x0B4,0x030,0x030,0x030,0x030,0x078,0x000, /* 054 */ X 0x0CC,0x0CC,0x0CC,0x0CC,0x0CC,0x0CC,0x0FC,0x000, /* 055 */ X 0x0CC,0x0CC,0x0CC,0x0CC,0x0CC,0x078,0x030,0x000, /* 056 */ X 0x0C6,0x0C6,0x0C6,0x0D6,0x0FE,0x0EE,0x0C6,0x000, /* 057 */ X 0x0C6,0x0C6,0x06C,0x038,0x038,0x06C,0x0C6,0x000, /* 058 */ X 0x0CC,0x0CC,0x0CC,0x078,0x030,0x030,0x078,0x000, /* 059 */ X 0x0FE,0x0C6,0x08C,0x018,0x032,0x066,0x0FE,0x000, /* 05A */ X 0x078,0x060,0x060,0x060,0x060,0x060,0x078,0x000, /* 05B */ X 0x0C0,0x060,0x030,0x018,0x00C,0x006,0x002,0x000, /* 05C */ X 0x078,0x018,0x018,0x018,0x018,0x018,0x078,0x000, /* 05D */ X 0x010,0x038,0x06C,0x0C6,0x000,0x000,0x000,0x000, /* 05E */ X 0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x0FF, /* 05F */ X 0x030,0x030,0x018,0x000,0x000,0x000,0x000,0x000, /* 060 */ X 0x000,0x000,0x078,0x00C,0x07C,0x0CC,0x076,0x000, /* 061 */ X 0x0E0,0x060,0x060,0x07C,0x066,0x066,0x0DC,0x000, /* 062 */ X 0x000,0x000,0x078,0x0CC,0x0C0,0x0CC,0x078,0x000, /* 063 */ X 0x01C,0x00C,0x00C,0x07C,0x0CC,0x0CC,0x076,0x000, /* 064 */ X 0x000,0x000,0x078,0x0CC,0x0FC,0x0C0,0x078,0x000, /* 065 */ X 0x038,0x06C,0x060,0x0F0,0x060,0x060,0x0F0,0x000, /* 066 */ X 0x000,0x000,0x076,0x0CC,0x0CC,0x07C,0x00C,0x0F8, /* 067 */ X 0x0E0,0x060,0x06C,0x076,0x066,0x066,0x0E6,0x000, /* 068 */ X 0x030,0x000,0x070,0x030,0x030,0x030,0x078,0x000, /* 069 */ X 0x00C,0x000,0x00C,0x00C,0x00C,0x0CC,0x0CC,0x078, /* 06A */ X 0x0E0,0x060,0x066,0x06C,0x078,0x06C,0x0E6,0x000, /* 06B */ X 0x070,0x030,0x030,0x030,0x030,0x030,0x078,0x000, /* 06C */ X 0x000,0x000,0x0CC,0x0FE,0x0FE,0x0D6,0x0C6,0x000, /* 06D */ X 0x000,0x000,0x0F8,0x0CC,0x0CC,0x0CC,0x0CC,0x000, /* 06E */ X 0x000,0x000,0x078,0x0CC,0x0CC,0x0CC,0x078,0x000, /* 06F */ X 0x000,0x000,0x0DC,0x066,0x066,0x07C,0x060,0x0F0, /* 070 */ X 0x000,0x000,0x076,0x0CC,0x0CC,0x07C,0x00C,0x01E, /* 071 */ X 0x000,0x000,0x0DC,0x076,0x066,0x060,0x0F0,0x000, /* 072 */ X 0x000,0x000,0x07C,0x0C0,0x078,0x00C,0x0F8,0x000, /* 073 */ X 0x010,0x030,0x07C,0x030,0x030,0x034,0x018,0x000, /* 074 */ X 0x000,0x000,0x0CC,0x0CC,0x0CC,0x0CC,0x076,0x000, /* 075 */ X 0x000,0x000,0x0CC,0x0CC,0x0CC,0x078,0x030,0x000, /* 076 */ X 0x000,0x000,0x0C6,0x0D6,0x0FE,0x0FE,0x06C,0x000, /* 077 */ X 0x000,0x000,0x0C6,0x06C,0x038,0x06C,0x0C6,0x000, /* 078 */ X 0x000,0x000,0x0CC,0x0CC,0x0CC,0x07C,0x00C,0x0F8, /* 079 */ X 0x000,0x000,0x0FC,0x098,0x030,0x064,0x0FC,0x000, /* 07A */ X 0x01C,0x030,0x030,0x0E0,0x030,0x030,0x01C,0x000, /* 07B */ X 0x018,0x018,0x018,0x000,0x018,0x018,0x018,0x000, /* 07C */ X 0x0E0,0x030,0x030,0x01C,0x030,0x030,0x0E0,0x000, /* 07D */ X 0x076,0x0DC,0x000,0x000,0x000,0x000,0x000,0x000, /* 07E */ X 0x000,0x010,0x038,0x06C,0x0C6,0x0C6,0x0FE,0x000, /* 07F */ X 0x078,0x0CC,0x0C0,0x0CC,0x078,0x018,0x00C,0x078, /* 080 */ X 0x000,0x066,0x000,0x066,0x066,0x066,0x03F,0x000, /* 081 */ X 0x00E,0x000,0x03C,0x066,0x07E,0x060,0x03C,0x000, /* 082 */ X 0x07E,0x0C3,0x03C,0x006,0x03E,0x066,0x03F,0x000, /* 083 */ X 0x066,0x000,0x03C,0x006,0x03E,0x066,0x03F,0x000, /* 084 */ X 0x070,0x000,0x03C,0x006,0x03E,0x066,0x03F,0x000, /* 085 */ X 0x018,0x018,0x03C,0x006,0x03E,0x066,0x03F,0x000, /* 086 */ X 0x000,0x000,0x03C,0x060,0x060,0x03C,0x006,0x01C, /* 087 */ X 0x07E,0x0C3,0x03C,0x066,0x07E,0x060,0x03C,0x000, /* 088 */ X 0x066,0x000,0x03C,0x066,0x07E,0x060,0x03C,0x000, /* 089 */ X 0x070,0x000,0x03C,0x066,0x07E,0x060,0x03C,0x000, /* 08A */ X 0x066,0x000,0x038,0x018,0x018,0x018,0x03C,0x000, /* 08B */ X 0x07C,0x0C6,0x038,0x018,0x018,0x018,0x03C,0x000, /* 08C */ X 0x070,0x000,0x038,0x018,0x018,0x018,0x03C,0x000, /* 08D */ X 0x063,0x01C,0x036,0x063,0x07F,0x063,0x063,0x000, /* 08E */ X 0x018,0x018,0x000,0x03C,0x066,0x07E,0x066,0x000, /* 08F */ X 0x00E,0x000,0x07E,0x030,0x03C,0x030,0x07E,0x000, /* 090 */ X 0x000,0x000,0x07F,0x00C,0x07F,0x0CC,0x07F,0x000, /* 091 */ X 0x01F,0x036,0x066,0x07F,0x066,0x066,0x067,0x000, /* 092 */ X 0x03C,0x066,0x000,0x03C,0x066,0x066,0x03C,0x000, /* 093 */ X 0x000,0x066,0x000,0x03C,0x066,0x066,0x03C,0x000, /* 094 */ X 0x000,0x070,0x000,0x03C,0x066,0x066,0x03C,0x000, /* 095 */ X 0x03C,0x066,0x000,0x066,0x066,0x066,0x03F,0x000, /* 096 */ X 0x000,0x070,0x000,0x066,0x066,0x066,0x03F,0x000, /* 097 */ X 0x000,0x066,0x000,0x066,0x066,0x03E,0x006,0x07C, /* 098 */ X 0x0C3,0x018,0x03C,0x066,0x066,0x03C,0x018,0x000, /* 099 */ X 0x066,0x000,0x066,0x066,0x066,0x066,0x03C,0x000, /* 09A */ X 0x018,0x018,0x07E,0x0C0,0x0C0,0x07E,0x018,0x018, /* 09B */ X 0x01C,0x036,0x032,0x078,0x030,0x073,0x07E,0x000, /* 09C */ X 0x066,0x066,0x03C,0x07E,0x018,0x07E,0x018,0x018, /* 09D */ X 0x0F8,0x0CC,0x0CC,0x0FA,0x0C6,0x0CF,0x0C6,0x0C7, /* 09E */ X 0x00E,0x01B,0x018,0x03C,0x018,0x018,0x0D8,0x070, /* 09F */ X 0x00E,0x000,0x03C,0x006,0x03E,0x066,0x03F,0x000, /* 0A0 */ X 0x01C,0x000,0x038,0x018,0x018,0x018,0x03C,0x000, /* 0A1 */ X 0x000,0x00E,0x000,0x03C,0x066,0x066,0x03C,0x000, /* 0A2 */ X 0x000,0x00E,0x000,0x066,0x066,0x066,0x03F,0x000, /* 0A3 */ X 0x000,0x07C,0x000,0x07C,0x066,0x066,0x066,0x000, /* 0A4 */ X 0x07E,0x000,0x066,0x076,0x07E,0x06E,0x066,0x000, /* 0A5 */ X 0x03C,0x06C,0x06C,0x03E,0x000,0x07E,0x000,0x000, /* 0A6 */ X 0x038,0x06C,0x06C,0x038,0x000,0x07C,0x000,0x000, /* 0A7 */ X 0x018,0x000,0x018,0x030,0x060,0x066,0x03C,0x000, /* 0A8 */ X 0x000,0x000,0x000,0x07E,0x060,0x060,0x000,0x000, /* 0A9 */ X 0x000,0x000,0x000,0x07E,0x006,0x006,0x000,0x000, /* 0AA */ X 0x0C3,0x0C6,0x0CC,0x0DE,0x033,0x066,0x0CC,0x00F, /* 0AB */ X 0x0C3,0x0C6,0x0CC,0x000,0x037,0x06F,0x0CF,0x003, /* 0AC */ X 0x018,0x018,0x000,0x018,0x018,0x018,0x018,0x000, /* 0AD */ X 0x000,0x033,0x066,0x0CC,0x066,0x033,0x000,0x000, /* 0AE */ X 0x000,0x0CC,0x066,0x033,0x066,0x0CC,0x000,0x000, /* 0AF */ X 0x022,0x088,0x022,0x088,0x022,0x088,0x022,0x088, /* 0B0 */ X 0x055,0x0AA,0x055,0x0AA,0x055,0x0AA,0x055,0x0AA, /* 0B1 */ X 0x000,0x077,0x000,0x0EE,0x000,0x077,0x000,0x0EE, /* 0B2 */ X 0x018,0x018,0x018,0x018,0x018,0x018,0x018,0x018, /* 0B3 */ X 0x018,0x018,0x018,0x018,0x0F8,0x018,0x018,0x018, /* 0B4 */ X 0x018,0x018,0x0F8,0x018,0x0F8,0x018,0x018,0x018, /* 0B5 */ X 0x036,0x036,0x036,0x036,0x0F6,0x036,0x036,0x036, /* 0B6 */ X 0x000,0x000,0x000,0x000,0x0FE,0x036,0x036,0x036, /* 0B7 */ X 0x000,0x000,0x0F8,0x018,0x0F8,0x018,0x018,0x018, /* 0B8 */ X 0x036,0x036,0x0F6,0x006,0x0F6,0x036,0x036,0x036, /* 0B9 */ X 0x036,0x036,0x036,0x036,0x036,0x036,0x036,0x036, /* 0BA */ X 0x000,0x000,0x0FE,0x006,0x0F6,0x036,0x036,0x036, /* 0BB */ X 0x036,0x036,0x0F6,0x006,0x0FE,0x000,0x000,0x000, /* 0BC */ X 0x036,0x036,0x036,0x036,0x0FE,0x000,0x000,0x000, /* 0BD */ X 0x018,0x018,0x0F8,0x018,0x0F8,0x000,0x000,0x000, /* 0BE */ X 0x000,0x000,0x000,0x000,0x0F8,0x018,0x018,0x018, /* 0BF */ X 0x018,0x018,0x018,0x018,0x01F,0x000,0x000,0x000, /* 0C0 */ X 0x018,0x018,0x018,0x018,0x0FF,0x000,0x000,0x000, /* 0C1 */ X 0x000,0x000,0x000,0x000,0x0FF,0x018,0x018,0x018, /* 0C2 */ X 0x018,0x018,0x018,0x018,0x01F,0x018,0x018,0x018, /* 0C3 */ X 0x000,0x000,0x000,0x000,0x0FF,0x000,0x000,0x000, /* 0C4 */ X 0x018,0x018,0x018,0x018,0x0FF,0x018,0x018,0x018, /* 0C5 */ X 0x018,0x018,0x01F,0x018,0x01F,0x018,0x018,0x018, /* 0C6 */ X 0x036,0x036,0x036,0x036,0x037,0x036,0x036,0x036, /* 0C7 */ X 0x036,0x036,0x037,0x030,0x03F,0x000,0x000,0x000, /* 0C8 */ X 0x000,0x000,0x03F,0x030,0x037,0x036,0x036,0x036, /* 0C9 */ X 0x036,0x036,0x0F7,0x000,0x0FF,0x000,0x000,0x000, /* 0CA */ X 0x000,0x000,0x0FF,0x000,0x0F7,0x036,0x036,0x036, /* 0CB */ X 0x036,0x036,0x037,0x030,0x037,0x036,0x036,0x036, /* 0CC */ X 0x000,0x000,0x0FF,0x000,0x0FF,0x000,0x000,0x000, /* 0CD */ X 0x036,0x036,0x0F7,0x000,0x0F7,0x036,0x036,0x036, /* 0CE */ X 0x018,0x018,0x0FF,0x000,0x0FF,0x000,0x000,0x000, /* 0CF */ X 0x036,0x036,0x036,0x036,0x0FF,0x000,0x000,0x000, /* 0D0 */ X 0x000,0x000,0x0FF,0x000,0x0FF,0x018,0x018,0x018, /* 0D1 */ X 0x000,0x000,0x000,0x000,0x0FF,0x036,0x036,0x036, /* 0D2 */ X 0x036,0x036,0x036,0x036,0x03F,0x000,0x000,0x000, /* 0D3 */ X 0x018,0x018,0x01F,0x018,0x01F,0x000,0x000,0x000, /* 0D4 */ X 0x000,0x000,0x01F,0x018,0x01F,0x018,0x018,0x018, /* 0D5 */ X 0x000,0x000,0x000,0x000,0x03F,0x036,0x036,0x036, /* 0D6 */ X 0x036,0x036,0x036,0x036,0x0FF,0x036,0x036,0x036, /* 0D7 */ X 0x018,0x018,0x0FF,0x018,0x0FF,0x018,0x018,0x018, /* 0D8 */ X 0x018,0x018,0x018,0x018,0x0F8,0x000,0x000,0x000, /* 0D9 */ X 0x000,0x000,0x000,0x000,0x01F,0x018,0x018,0x018, /* 0DA */ X 0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF, /* 0 */ X 0x000,0x000,0x000,0x000,0x0FF,0x0FF,0x0FF,0x0FF, /* 0DC */ X 0x0F0,0x0F0,0x0F0,0x0F0,0x0F0,0x0F0,0x0F0,0x0F0, /* 0DD */ X 0x00F,0x00F,0x00F,0x00F,0x00F,0x00F,0x00F,0x00F, /* 0DE */ X 0x0FF,0x0FF,0x0FF,0x0FF,0x000,0x000,0x000,0x000, /* 0DF */ X 0x000,0x000,0x03B,0x06E,0x064,0x06E,0x03B,0x000, /* 0E0 */ X 0x000,0x03C,0x066,0x07C,0x066,0x07C,0x060,0x060, /* 0E1 */ X 0x000,0x07E,0x066,0x060,0x060,0x060,0x060,0x000, /* 0E2 */ X 0x000,0x07F,0x036,0x036,0x036,0x036,0x036,0x000, /* 0E3 */ X 0x07E,0x066,0x030,0x018,0x030,0x066,0x07E,0x000, /* 0E4 */ X 0x000,0x000,0x03F,0x06C,0x06C,0x06C,0x038,0x000, /* 0E5 */ X 0x000,0x033,0x033,0x033,0x033,0x03E,0x030,0x060, /* 0E6 */ X 0x000,0x03B,0x06E,0x00C,0x00C,0x00C,0x00C,0x000, /* 0E7 */ X 0x07E,0x018,0x03C,0x066,0x066,0x03C,0x018,0x07E, /* 0E8 */ X 0x01C,0x036,0x063,0x07F,0x063,0x036,0x01C,0x000, /* 0E9 */ X 0x01C,0x036,0x063,0x063,0x036,0x036,0x077,0x000, /* 0EA */ X 0x00E,0x018,0x00C,0x03E,0x066,0x066,0x03C,0x000, /* 0EB */ X 0x000,0x000,0x07E,0x000,0x000,0x07E,0x000,0x000, /* 0EC */ X 0x006,0x00C,0x07E,0x000,0x000,0x07E,0x060,0x0C0, /* 0ED */ X 0x01C,0x060,0x0C0,0x0FC,0x0C0,0x060,0x01C,0x000, /* 0EE */ X 0x03C,0x066,0x066,0x066,0x066,0x066,0x066,0x000, /* 0EF */ X 0x000,0x07E,0x000,0x07E,0x000,0x07E,0x000,0x000, /* 0F0 */ X 0x018,0x018,0x07E,0x018,0x018,0x000,0x07E,0x000, /* 0F1 */ X 0x030,0x018,0x00C,0x018,0x030,0x000,0x07E,0x000, /* 0F2 */ X 0x00C,0x018,0x030,0x018,0x00C,0x000,0x07E,0x000, /* 0F3 */ X 0x00E,0x01B,0x01B,0x018,0x018,0x018,0x018,0x018, /* 0F4 */ X 0x018,0x018,0x018,0x018,0x018,0x0D8,0x0D8,0x070, /* 0F5 */ X 0x018,0x018,0x000,0x07E,0x000,0x018,0x018,0x000, /* 0F6 */ X 0x000,0x076,0x0DC,0x000,0x076,0x0DC,0x000,0x000, /* 0F7 */ X 0x038,0x06C,0x06C,0x038,0x000,0x000,0x000,0x000, /* 0F8 */ X 0x000,0x000,0x000,0x018,0x018,0x000,0x000,0x000, /* 0F9 */ X 0x000,0x000,0x000,0x000,0x018,0x000,0x000,0x000, /* 0FA */ X 0x00F,0x00C,0x00C,0x00C,0x0EC,0x06C,0x03C,0x01C, /* 0FB */ X 0x078,0x06C,0x06C,0x06C,0x06C,0x000,0x000,0x000, /* 0FC */ X 0x070,0x018,0x030,0x060,0x078,0x000,0x000,0x000, /* 0FD */ X 0x000,0x000,0x03C,0x03C,0x03C,0x03C,0x000,0x000, /* 0FE */ X 0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000 /* 0FF */ X}; XxX--EOF--XxX echo restoring graphics.h sed 's/^X//' > graphics.h <<XxX--EOF--XxX X/* @(#) graphics.h 4.5 88/06/19 */ X/* X * Copyright (c) David T. Lewis 1987, 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X X/* Define variables used in translation from 3D world coordinates */ X/* through several steps to reach the screen. */ X/* Sun Dec 20 18:31:11 EST 1987 */ X/* system5 dtlewis 2 2.2-U AT */ X/* dtlewis 6-28-87 */ X X#include "bitmaps.h" X X#define PRINTPROG "/usr/bin/lp" X X/* X * The following are for MIX-C on MS-DOS. X */ X#define DOS 0x021 X#define VIDEO_BIOS 0x010 X#define SET_VIDEO_MODE 0x00 X#define WRT_PIXEL 0x0C X X/* X * Mode definitions. X */ X#define CGA_HI_RES_MODE 0x06 X#define CGA_COLOR_MODE 0x04 X#define EGA_COLOR_MODE 0x010 X#define HERC_GRAF_MODE 0x08 X#define COLOR_TEXT 0x03 X#define MONO_TEXT 0x02 X#define IBM_PRINTER 0x100 X X/* X * The following are masks for the four possible 2-bit pixel X * positions in CGA 320x200 mode. X */ X#define PIX0 0x0C0 X#define PIX1 0x030 X#define PIX2 0x0C X#define PIX3 0x03 X X/* X * Define range of the normalized 2D coordinate system X */ X#define NORM_X_MIN 0 X#define NORM_Y_MIN 0 X#define NORM_X_MAX 32767 X#define NORM_Y_MAX 32767 X#define NORM_X_RANGE 0x7FFFL X#define NORM_Y_RANGE 0x7FFFL X X#define X_CELL_BITS 8 /* Number of bits per character cell */ X /* in X direction. */ X X#define Y_CELL_BITS 8 /* Number of bits per character cell */ X /* in Y direction. */ X X/* Define transforms for normalized 2-D drawing space to pixel space. */ X/* These routines convert from normalized (x,y) coordinates to local */ X/* screen pixel coordinates. The normalized coordinate system extends */ X/* from 0 to 32767 in the x direction, and from 0 to 32767 in the */ X/* downward y direction, with the origin at the upper left of the */ X/* screen. Screen aspect ratio is not taken into account. */ X X#define conv_x_coord(x) ((int)((long)(x * graphics.x_extent) / NORM_X_RANGE)) X#define conv_y_coord(y) ((int)((long)(y * graphics.y_extent) / NORM_Y_RANGE)) X X/* Enumerated data type for pixel setting mode. */ Xenum PIX_MODE {OR, XOR}; X X/* The following structure defines variables used for video support. */ X Xstruct SVAT_graphics { X X CGA_BUF_TYPE *cgamem; /* Pointer to video memory segment. */ X /* Will be used by the write_pixel() */ X /* routine. */ X X EGA_BUF_TYPE *egamem; /* Pointer to video memory segment. */ X /* Will be used by the write_pixel() */ X /* routine. */ X X HERC_BUF_TYPE *hercmem; /* Pointer to video memory segment. */ X /* Will be used by the write_pixel() */ X /* routine. */ X X PR_BUF_TYPE *printbuf1, /* Pointers to printer bit map segment. */ X *printbuf2, /* Will be used by the write_pixel() */ X *printbuf3; /* routine. */ X X int x_cursor; /* Graphics cursor position in pixel */ X /* units on x axis. */ X int y_cursor; /* Graphics cursor position in pixel */ X /* units on y axis. */ X X /* Definition of the virtual screen space. This will usually */ X /* be set to (0,0) at the lower left of the screen and */ X /* (32767,32767) at the upper right, regardless of aspect */ X /* ratio of the physical screen. */ X X int x_extent, /* Width and height of screen in units */ X y_extent; /* of pixels. */ X X float aspect_ratio; /* Height of screen divided by width. */ X X /* Variables used for coordinate transformations. */ X X float xlate_x, /* Translation prior to rotation and */ X xlate_y, /* scaling, perspective, viewports, and */ X xlate_z; /* windows. */ X X float offset_x, /* Offset from origin of world */ X offset_y, /* coordinates (after translation), */ X offset_z; /* about which we will rotate, scale, */ X /* and do perspective. */ X X float theta_x, /* Angle of rotation about x axis. */ X /* (z to y right hand rule.) */ X theta_y, /* Angle of rotation about y axis. */ X /* (z to x right hand rule.) */ X theta_z; /* Angle of rotation about x axis. */ X /* (x to y right hand rule.) */ X X /* Factors used in the 3D to 2D rotation matrix. We want to */ X /* calculate them once, then use them repeatedly. */ X X float c_tz_c_ty, /* cos(theta_z)*cos(theta_y) */ X s_tz, /* sin(theta_z) */ X s_ty, /* sin(theta_y) */ X c_tz_c_tx, /* cos(theta_z)*cos(theta_x) */ X s_tx; /* sin(theta_x) */ X X float scale_factor; /* Scaling factor, after rotation, */ X /* before perspective. */ X X float perspect_dist; /* Perspective viewing distance. */ X X int x_vport_ll, /* Lower left and upper right x and y */ X y_vport_ll, /* coordinates of the viewport in the */ X x_vport_ur, /* normalized coordinate space. */ X y_vport_ur; X X int x_window_ll, /* Lower left and upper right x and y */ X y_window_ll, /* coordinates of the active windo in */ X x_window_ur, /* terms of normalized coordinate */ X y_window_ur; /* space. */ X X /* Drawing control variables. */ X X int grafmode; /* Video display mode */ X X int color; /* Color of line to draw */ X X int lineweight; /* Line thickness */ X X long linestyle; /* Line style (e.g. dot-dash) */ X X enum PIX_MODE wrt_mode; /* Pixel writing mode (OR, XOR) */ X X struct { X int xtic; /* Character to character distance */ X int ytic; /* Line to line distance */ X int xsize; /* Vertical character size */ X int ysize; /* Horizontal character size */ X float angle; /* Rotation angle of text line, in */ X /* counterclockwise radians. */ X float slant; /* Char slant angle, in clockwise */ X /* radians. */ X } strokefont; X X struct { X int chars_per_line; X int lines_per_screen; X int xtic; /* Character to character distance */ X int ytic; /* Line to line distance */ X int xmult; /* If 2, then make double wide, etc. */ X int ymult; /* If 2, then make double high, etc. */ X } cellfont; X}; XxX--EOF--XxX echo restoring pix_color.c sed 's/^X//' > pix_color.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) pix_color.c 1.3 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* X * This routine sets the color to be used for all pixel operations. X * Color is (unfortunately) nothing more than a 16 bit integer, and X * may display different results on different graphics adapters. X * No attempt has been made to correlate colors between CGA, EGA X * or any other adapter, in part because the author is developing X * the code on a machine with only monochrome graphics (Everex X * Edge). X * X * The returned value is the previous color setting. X */ X X#include "graphics.h" X Xextern struct SVAT_graphics graphics; X Xint pix_color(color) Xint color; X{ X int last_color; X last_color = graphics.color; X graphics.color = color; X if (graphics.grafmode == EGA_COLOR_MODE) { X /* Write to EGA registers. Not yet implemented. */ X /* Ditto for VGA. */ X } X return(last_color); X} XxX--EOF--XxX echo restoring pix_mode.c sed 's/^X//' > pix_mode.c <<XxX--EOF--XxX X#ifndef lint Xstatic char sccsid[] = "@(#) pix_mode.c 1.3 88/06/19"; X#endif X X/* X * Copyright (c) David T. Lewis 1988 X * All rights reserved. X * X * Permission is granted to use this for any personal noncommercial use. X * You may not distribute source or executable code for profit, nor X * may you distribute it with a commercial product without the written X * consent of the author. Please send modifications to the author for X * inclusion in updates to the program. Thanks. X */ X X/* X * This routine sets us up to update pixels in either OR mode X * (set the pixel on, regardless of previous state), or XOR mode X * (pixel is XORed with its previous value). XOR mode is used for X * things like graphics cursors which may be placed on the screen X * without destroying the previous screen contents. X * X * The returned value is the previous state of the pixel mode. X */ X X#include "graphics.h" X Xextern struct SVAT_graphics graphics; X Xenum PIX_MODE pix_mode(mode_val) Xenum PIX_MODE mode_val; X{ X enum PIX_MODE last_mode; X last_mode = graphics.wrt_mode; X switch (mode_val) { X case OR: X graphics.wrt_mode = OR; X break; X case XOR: X graphics.wrt_mode = XOR; X break; X default: X graphics.wrt_mode = OR; X break; X } X return(last_mode); X} XxX--EOF--XxX -- Dave Lewis Ann Arbor, MI ...![ itivax umix ]!m-net!dtlewis!lewis
lewis@m2-net.UUCP (Dave Lewis) (07/01/88)
------------------------------ cut here ------------------------------ # To recover, type "sh archive" echo restoring font.h sed 's/^X//' > font.h <<XxX--EOF--XxX X/* @(#) font.h 4.3 88/06/19 */ X/* X * Copied from _Graphics_in_C_, by Nelson Johnson, 1987, McGraw-Hill, p. 592. X * Use is subject to conditions stated in that text. X * Note: The author's copyright presumes that you bought the book, which X * is worth doing in any case. X * X * FONT.H contains the standard character set from ASCII 0 through 127. X */ X/*dtl needs to be filled in with correct values.*/ X Xunsigned stroke[128][36] = { X/* 0 */ X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 1 */ X0x0106,0x0617,0x1767,0x6776,0x7671,0x7160, X0x6010,0x1001,0x2232,0x2535,0x4245,0x4554, X0x5453,0x5342,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 2 */ X0x0106,0x0617,0x1767,0x6776,0x7671,0x7160, X0x6010,0x1001,0x1113,0x1323,0x2321,0x2111, X0x1416,0x1626,0x2624,0x2414,0x4146,0x4655, X0x5552,0x5241,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 3 */ X0x0102,0x0213,0x1304,0x0405,0x0516,0x1636, X0x3663,0x6330,0x3010,0x1001,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 4 */ X0x0336,0x3663,0x6330,0x3003,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 5 */ X0x0204,0x0415,0x1524,0x2434,0x3436,0x3646, X0x4664,0x6462,0x6240,0x4030,0x3032,0x3222, X0x2211,0x1102,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 6 */ X0x0313,0x1346,0x4664,0x6475,0x7571,0x7162, X0x6240,0x4013,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 7 */ X0x2324,0x2435,0x3545,0x4554,0x5453,0x5342, X0x4232,0x3223,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 8 */ X0x0007,0x0777,0x7770,0x7000,0x2225,0x2536, X0x3646,0x4655,0x5552,0x5241,0x4131,0x3122, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 9 */ X0x1215,0x1525,0x2526,0x2656,0x5655,0x5565, X0x6562,0x6252,0x5251,0x5121,0x2122,0x2212, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* a */ X0x0001,0x0111,0x1110,0x1000,0x0607,0x0717, X0x1716,0x1606,0x6061,0x6171,0x7170,0x7060, X0x6667,0x6777,0x7776,0x7666,0x2324,0x2435, X0x3545,0x4554,0x5453,0x5342,0x4232,0x3223, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* b */ X0x0407,0x0727,0x3307,0x3134,0x3445,0x4565, X0x6574,0x7471,0x7160,0x6040,0x4031,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* c */ X0x0205,0x0516,0x1636,0x3654,0x5331,0x3111, X0x1102,0x5373,0x5474,0x6166,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* d */ X0x0207,0x0727,0x2722,0x2202,0x2262,0x6271, X0x7170,0x7060,0x6051,0x5152,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* e */ X0x0207,0x0757,0x5766,0x6665,0x6555,0x5546, X0x4647,0x2227,0x0262,0x6271,0x7170,0x7060, X0x6051,0x5152,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* f */ X0x2225,0x2555,0x5552,0x5222,0x0022,0x0323, X0x0424,0x0725,0x3735,0x4745,0x7755,0x7454, X0x7353,0x7052,0x4042,0x3032,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 10 */ X0x0036,0x3660,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 11 */ X0x0630,0x3066,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 12 */ X0x0304,0x0426,0x2624,0x2454,0x5456,0x5674, X0x7473,0x7351,0x5153,0x5323,0x2321,0x2103, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 13 */ X0x0102,0x0242,0x4241,0x4101,0x6162,0x0506, X0x0646,0x4645,0x4505,0x6566,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 14 */ X0x0107,0x0767,0x0110,0x1020,0x2031,0x3137, X0x0464,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 15 */ X0x1706,0x0602,0x0211,0x1122,0x2224,0x2435, X0x3545,0x4554,0x6071,0x7174,0x7465,0x6554, X0x5452,0x5241,0x4131,0x3122,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 16 */ X0x4146,0x4666,0x6661,0x6141,0x5156,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 17 */ X0x0304,0x0426,0x2624,0x2444,0x4446,0x4664, X0x6463,0x6341,0x4143,0x4323,0x2321,0x2103, X0x7077,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 18 */ X0x0304,0x0426,0x2624,0x2464,0x6463,0x6323, X0x2321,0x2103,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 19 */ X0x0304,0x0444,0x4446,0x4664,0x6463,0x6341, X0x4143,0x4303,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 1a */ X0x1314,0x1436,0x3654,0x5453,0x5335,0x3513, X0x3035,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 1b */ X0x1213,0x1331,0x3153,0x5352,0x5230,0x3012, X0x3136,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 1c */ X0x5121,0x2120,0x2050,0x5056,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 1d */ X0x1252,0x5230,0x3012,0x1537,0x3755,0x5515, X0x3235,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 1e */ X0x1314,0x1447,0x4757,0x5750,0x5040,0x4013, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 1f */ X0x1017,0x1727,0x2754,0x5453,0x5320,0x2010, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 20 */ X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 21 */ X0x0203,0x0314,0x1424,0x2433,0x3343,0x4342, X0x4232,0x3221,0x2111,0x1102,0x6263,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 22 */ X0x0102,0x0222,0x2221,0x2101,0x0405,0x0525, X0x2524,0x2404,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 23 */ X0x0102,0x0262,0x6261,0x6101,0x0405,0x0565, X0x6564,0x6404,0x2026,0x4046,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 24 */ X0x1511,0x1120,0x2031,0x3134,0x3445,0x4554, X0x5450,0x0262,0x0363,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 25 */ X0x1011,0x1121,0x2120,0x2010,0x1516,0x1661, X0x6160,0x6015,0x5556,0x5666,0x6665,0x6555, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 26 */ X0x0204,0x0415,0x1524,0x2431,0x3140,0x4050, X0x5061,0x6163,0x6336,0x0211,0x1166,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 27 */ X0x0102,0x0212,0x1221,0x2120,0x2011,0x1101, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 28 */ X0x0304,0x0422,0x2242,0x4264,0x6463,0x6341, X0x4121,0x2103,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 29 */ X0x0102,0x0224,0x2444,0x4462,0x6261,0x6143, X0x4323,0x2301,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 2a */ X0x1112,0x1256,0x5655,0x5511,0x1516,0x1652, X0x5251,0x5115,0x3037,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 2b */ X0x1213,0x1353,0x5352,0x5212,0x3032,0x3335, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 2c */ X0x5253,0x5363,0x6372,0x7271,0x7162,0x6252, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 2d */ X0x3035,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 2e */ X0x5253,0x5363,0x6362,0x6252,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 2f */ X0x0506,0x0660,0x6050,0x5005,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 30 */ X0x0105,0x0516,0x1656,0x5665,0x6561,0x6150, X0x5010,0x1001,0x0161,0x0565,0x5115,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 31 */ X0x0203,0x0363,0x6065,0x0262,0x0211,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 32 */ X0x1001,0x0104,0x0415,0x1525,0x2534,0x3441, X0x4150,0x5060,0x6065,0x0434,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 33 */ X0x1001,0x0104,0x0415,0x1525,0x2534,0x3234, X0x3445,0x4555,0x5564,0x6461,0x6150,0x0464, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 34 */ X0x0305,0x0565,0x0464,0x6366,0x0330,0x3040, X0x4046,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 35 */ X0x0005,0x0020,0x0121,0x2024,0x2435,0x3555, X0x5564,0x6461,0x6150,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 36 */ X0x0402,0x0220,0x2050,0x5061,0x6164,0x6455, X0x5545,0x4534,0x3431,0x1161,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 37 */ X0x1000,0x0005,0x0525,0x2543,0x4363,0x0434, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 38 */ X0x0104,0x0415,0x1525,0x2534,0x3445,0x4555, X0x5564,0x6461,0x6150,0x5040,0x4031,0x3120, X0x2010,0x1001,0x0161,0x0464,0x3134,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 39 */ X0x3431,0x3120,0x2010,0x1001,0x0104,0x0415, X0x1545,0x4563,0x6361,0x0454,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 3a */ X0x1213,0x1323,0x2322,0x2212,0x5253,0x5363, X0x6362,0x6252,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 3b */ X0x1213,0x1323,0x2322,0x2212,0x5253,0x5363, X0x6372,0x7271,0x7162,0x6252,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 3c */ X0x0304,0x0431,0x3164,0x6463,0x6330,0x3003, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 3d */ X0x2025,0x5055,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 3e */ X0x0102,0x0235,0x3562,0x6261,0x6134,0x3401, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 3f */ X0x1001,0x0104,0x0415,0x1525,0x2534,0x3443, X0x0434,0x6263,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 40 */ X0x6461,0x6150,0x5010,0x1001,0x0105,0x0516, X0x1646,0x4643,0x4323,0x2326,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 41 */ X0x0220,0x2060,0x6061,0x6111,0x0203,0x0325, X0x2565,0x6564,0x6414,0x4144,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 42 */ X0x0005,0x0516,0x1626,0x2635,0x3532,0x3546, X0x4656,0x5665,0x6560,0x0161,0x0262,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 43 */ X0x1605,0x0502,0x0220,0x2040,0x4062,0x6265, X0x6556,0x1151,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 44 */ X0x0004,0x0426,0x2646,0x4664,0x6460,0x0161, X0x0262,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 45 */ X0x0006,0x0616,0x6066,0x6656,0x0161,0x0262, X0x3234,0x2444,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 46 */ X0x0006,0x0616,0x0161,0x0262,0x6063,0x3234, X0x2444,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 47 */ X0x1605,0x0502,0x0220,0x2040,0x4062,0x6266, X0x6646,0x4644,0x1151,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 48 */ X0x0001,0x0161,0x6160,0x6000,0x0405,0x0565, X0x6564,0x6404,0x3134,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 49 */ X0x0104,0x6164,0x0262,0x0363,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 4a */ X0x0306,0x0454,0x5463,0x0555,0x5564,0x6461, X0x6150,0x5040,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 4b */ X0x0002,0x0161,0x0262,0x6062,0x3234,0x0616, X0x1634,0x3456,0x5666,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 4c */ X0x0003,0x0161,0x0262,0x6066,0x6646,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 4d */ X0x0001,0x0161,0x6160,0x6000,0x0506,0x0666, X0x6665,0x6505,0x1133,0x3315,0x2143,0x4325, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 4e */ X0x0001,0x0161,0x6160,0x6000,0x0506,0x0666, X0x6665,0x6505,0x1155,0x2165,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 4f */ X0x0204,0x0426,0x2646,0x4664,0x6462,0x6240, X0x4020,0x2002,0x1151,0x1555,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 50 */ X0x0005,0x0516,0x1626,0x2635,0x3532,0x0161, X0x0262,0x6063,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 51 */ X0x0104,0x0415,0x1545,0x4554,0x5451,0x5140, X0x4010,0x1001,0x0151,0x0464,0x4363,0x6365, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 52 */ X0x0005,0x0516,0x1626,0x2635,0x3235,0x3545, X0x4556,0x5666,0x0161,0x0262,0x6062,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 53 */ X0x1504,0x0401,0x0110,0x1020,0x2055,0x1045, X0x4555,0x5564,0x6461,0x6150,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 54 */ X0x1000,0x0005,0x0515,0x0262,0x0363,0x6164, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 55 */ X0x0001,0x0161,0x6160,0x6000,0x0405,0x0565, X0x6564,0x6404,0x6164,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 56 */ X0x0001,0x0151,0x0040,0x4062,0x6263,0x0405, X0x0545,0x4563,0x0454,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 57 */ X0x0001,0x0161,0x6160,0x6000,0x0506,0x0666, X0x6665,0x6505,0x5133,0x3355,0x6143,0x4365, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 58 */ X0x0001,0x0111,0x1133,0x3315,0x1505,0x0506, X0x0616,0x1634,0x3444,0x4466,0x6665,0x6543, X0x4361,0x6160,0x6042,0x4232,0x3210,0x1000, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 59 */ X0x0001,0x0121,0x2132,0x3233,0x3324,0x2404, X0x0405,0x0525,0x2543,0x4363,0x6164,0x6242, X0x4220,0x2000,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 5a */ X0x2000,0x0006,0x0616,0x1650,0x5056,0x5060, X0x6066,0x6646,0x1016,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 5b */ X0x0104,0x0161,0x0262,0x6164,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 5c */ X0x0001,0x0156,0x5666,0x6600,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 5d */ X0x0104,0x0363,0x0464,0x6164,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 5e */ X0x0336,0x3635,0x3513,0x1331,0x3130,0x3003, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 5f */ X0x7077,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 60 */ X0x0203,0x0313,0x1324,0x2423,0x2312,0x1202, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 61 */ X0x2124,0x2435,0x3565,0x6566,0x2454,0x4441, X0x4250,0x5061,0x6163,0x6354,0x5465,0x6566, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 62 */ X0x0002,0x0161,0x6160,0x6152,0x0252,0x3235, X0x3546,0x4656,0x5665,0x6563,0x6352,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 63 */ X0x3524,0x2421,0x2130,0x3050,0x5061,0x6164, X0x6455,0x2161,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 64 */ X0x0305,0x0454,0x5465,0x0565,0x6566,0x3431, X0x3140,0x4050,0x5061,0x6163,0x6354,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 65 */ X0x4145,0x4535,0x3524,0x2421,0x2130,0x3050, X0x5061,0x6164,0x2161,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 66 */ X0x1504,0x0402,0x0211,0x1161,0x6063,0x0262, X0x3031,0x3233,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 67 */ X0x3423,0x2321,0x2130,0x3040,0x4051,0x5154, X0x3474,0x7470,0x2625,0x2534,0x2565,0x6574, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 68 */ X0x0002,0x0161,0x0262,0x6062,0x3224,0x2425, X0x2536,0x3666,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 69 */ X0x0203,0x0313,0x1312,0x1202,0x2223,0x2363, X0x2262,0x2123,0x6164,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 6a */ X0x0405,0x0515,0x1514,0x1404,0x2425,0x2464, X0x2565,0x6574,0x6473,0x7471,0x7160,0x6050, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 6b */ X0x0002,0x0161,0x0262,0x6062,0x4244,0x2644, X0x4466,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 6c */ X0x0103,0x0262,0x0363,0x6164,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 6d */ X0x2022,0x2233,0x3363,0x3324,0x2425,0x2536, X0x3666,0x2060,0x6061,0x6121,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 6e */ X0x2021,0x2161,0x6160,0x6020,0x3123,0x2324, X0x2435,0x3565,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 6f */ X0x2124,0x2435,0x3555,0x5564,0x6461,0x6150, X0x5030,0x3021,0x2161,0x2464,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 70 */ X0x2021,0x2132,0x3272,0x2171,0x7073,0x3223, X0x2325,0x2536,0x3646,0x4655,0x5552,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 71 */ X0x2625,0x2534,0x3474,0x2575,0x7376,0x3423, X0x2321,0x2130,0x3040,0x4051,0x5154,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 72 */ X0x2021,0x2132,0x2161,0x3262,0x6063,0x3223, X0x2325,0x2536,0x3646,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 73 */ X0x2521,0x2130,0x3041,0x4144,0x4455,0x5564, X0x6460,0x2141,0x4464,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 74 */ X0x0322,0x0363,0x2125,0x2252,0x5263,0x6364, X0x6455,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 75 */ X0x2050,0x5061,0x6163,0x6354,0x2454,0x5465, X0x6566,0x2425,0x2555,0x5566,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 76 */ X0x2040,0x4062,0x6263,0x2021,0x2141,0x4162, X0x2545,0x4563,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 77 */ X0x2021,0x2151,0x5162,0x2050,0x5061,0x6162, X0x6253,0x5333,0x5364,0x6465,0x6556,0x5626, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 78 */ X0x2021,0x2143,0x4361,0x6160,0x6042,0x4220, X0x4344,0x2644,0x4466,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 79 */ X0x2040,0x4051,0x5154,0x2425,0x2565,0x6574, X0x2474,0x7470,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 7a */ X0x3020,0x2025,0x2561,0x2460,0x6065,0x6555, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 7b */ X0x0305,0x0413,0x1323,0x2332,0x3243,0x4353, X0x5364,0x6365,0x0312,0x1222,0x2231,0x3130, X0x3142,0x4252,0x5263,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 7c */ X0x0304,0x0464,0x6463,0x6303,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 7d */ X0x0002,0x0112,0x1222,0x2233,0x3342,0x4252, X0x5261,0x6062,0x0213,0x1323,0x2334,0x3435, X0x3443,0x4353,0x5362,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 7e */ X0x0103,0x0314,0x1405,0x0506,0x0615,0x1513, X0x1302,0x0211,0x1110,0x1001,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X/* 7f */ X0x1346,0x4666,0x6660,0x6040,0x4013,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, X0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF X}; X X/* END OF CHARACTER INITIALIZATION */ XxX--EOF--XxX -- Dave Lewis Ann Arbor, MI ...![ itivax umix ]!m-net!dtlewis!lewis
lewis@m-net.UUCP (Dave Lewis) (03/29/89)
> Subject: Graphics Library (part 1 of 5) > Summary: Graphics primitives for AT class computers running uPort (Xenix?) > Keywords: Graphics EGA CGA Hercules Printers Microport Xenix 286 386 In June 1988, I posted a "Graphics Library" for Microport System V/AT in the comp.unix.microport and comp.unix.xenix newsgroups. A second release of this program, enhanced and (unfortunately) modified, has just been posted to comp.sources.unix as "gl_plot" (v18i059). Comments and criticism welcome. Send to clip!m-net!dlewis!lewis (mail path given in the source posting has since changed). -- Dave Lewis Ann Arbor, MI ...!m-net!dtlewis!lewis