File TEKEMU.TXT 7 Feb 1991 DESCRIPTION OF THE TEKTRONIX GRAPHICS TERMINAL EMULATOR IN MS-DOS KERMIT V3 FOR IBM PCs INTRODUCTION The MS-DOS Kermit Tektronix terminal emulator has characteristics of the real Tektronix 4010 and 4014 terminals plus extensive additions from the DEC VT340 and Human Data Systems 2000/3000 series terminals. Please note that the DEC VT340 can mix text and graphics on the same display but the hardware design of IBM PC display adapters forbids this. Instead a best effort scaling is done to simulate text and graphics together. Real Tektronix 401x terminals use storage tube technology which forbids erasure and colors; the MS-DOS Kermit emulator bends these rules in favor of raster display technology and the DEC VT340. The real Tektronix terminals display text by overwriting dots; MS-DOS Kermit does this via command SET TERMINAL GRAPHICS CHARACTER-WRITING TRANSPARENT. Raster display devices fill each character cell with new dots; use option OPAQUE in the above command to achieve the same effect. A real Tek terminal writes two screens of text by overwriting the second screen on the right half of the first; MS-DOS Kermit sounds a beep and waits for a keystroke and then starts on a fresh screen. VT340 Sixel graphics is supported, but ReGis graphics is not. The kind of display adpater is normally sensed automatically. But the user can specify a type with command SET TERMINAL GRAPHICS; if the type is not present a fall-back to CGA or ordinary monochrome text is performed. Screen coloring can be controlled from the Kermit prompt by the command SET TERMINAL GRAPHICS COLOR value, value, value. The "value" items are 0 white on black 1 for high intensity foreground Foreground color (30-37) = 30 + sum of colors Background color (40-47) = 40 + sum of colors where colors are 1 = red, 2 = green, 4 = blue Example: 1, 37, 44 bright(1) white(37) chars on a blue(44) background field. These numbers can be separated by either commas or spaces. The default screen coloring is dim white characters on a black background, so that Print Screen does not make the paper all black (it makes an ink dot for each illuminated screen dot, without regard to foreground and background). Command SET TERMINAL GRAPHICS CURSOR {ON, OFF} controls the occurence of a box-like cursor character while in graphics terminal emulation mode. The default is ON. This cursor represents where the next text character would be drawn. A mouse may be used to control the Tektronix GIN mode crosshair. It works in parallel with the keyboard arrow keys. A Microsoft compatible mouse driver is required, and a mouse menu program may be used when GIN mode is inactive. Within GIN mode any mouse menu is suspended. A typical DOS command to activate a mouse driver is MOUSE ON, or load MOUSE.SYS in file CONFIG.SYS. Mouse buttons are converted to be equivalent to pressing the Enter key. Graphics screens are saved in display memory if the adapter has sufficient quantity. CGA screens cannot be saved, and VGA (640x480) cannot save the last 131 scan lines. Hercules adapters need graphics page 1 to save an image; some clones do not seem to do this. The Wyse 700 display and special adapter do not allow screen saving. MS-DOS Kermit attempts to save the graphics screens whenever possible, even though this differs from DEC VT340 practice (DEC merges text and graphics modes, IBM-PCs cannot). Use ALT = or keyboard verb \Kreset to do a full screen clear and terminal reset, or echo ^L to just clear the screen. The VT320 main text terminal emulator is designed to switch to Tektronix emulation whenever four commands are received: 1. ESC ^L Tektronix screen clear command 2. ESC [ ? 38 h VT340 command to enter Tek mode 3. DCS Pn q start of Sixel command string, Pn is a digit 4. ESC 1 same as ESC ^L The third case results in the VT320 emulator feeding a ^L (screen clear) command to the Tek emulator, replaying the DCS lead-in characters, and then placing the Tek emulator temporarily in charge to read subsequent characters. Tek sub-mode persists until either: 1. the user toggles terminal types manually (ALT white minus, or keyboard verb \Ktermtype) 2. ESC [ ? 38 l is read, VT340 command to exit Tek mode 3. ESC ^X is read 4. ESC 2 is read Entering Tek mode by the third method (Sixel) forces character-writing to be opaque, the other two methods do not. ACTIONS TO RECEIVED CHARACTERS Characters of 80h and above (those with their high bit on) are converted as follows: 80h..9fh converted to pair ESC . These are C1 control codes. 0a0h..0ffh converted to and become printable characters. Control codes in C0 (no high bit) area Name ASCII value chart hex keyboard operation NUL 0/0 00h ^@ Ignored ENQ 0/5 05h ^E BEL 0/7 07h ^G Sound DEC style beep BS 0/8 08h ^H Backspace, move cursor left one character, 8 dots, can be destructive HT 0/9 09h ^I Treated as a single space LF 0/10 0ah ^J Linefeed, move cursor down one line, 8 dots VT 0/11 0bh ^K Vertical Tab, treated as a line feed FF 0/12 0ch ^L Formfeed, erase screen, Home cursor CR 0/13 0dh ^M Carriage return, move cursor to col 1 DC1 1/1 11h ^Q XON flow control, resume communication DC3 1/3 13h ^S XOFF flow control, suspend communication CAN 1/8 18h ^X Return to text terminal, only if in sub-Tek mode, else ignored if regular Tek terminal SUB 1/10 1ah ^Z Treated as a CAN ESC 1/11 1bh ^[ Escape, start escape seq, cancel any others FS 1/12 1ch ^\ Enter point plotting mode GS 1/13 1dh ^] Enter line drawing mode RS 1/14 1eh ^^ Enter incremental line drawing mode US 1/15 1fh ^_ Enter Tek text mode (leave line/point drawing) All others are ignored Control codes in C1 (high bit set, 80h - 9fh) area Name ASCII value chart hex operation DCS 9/0 90h Expand to be ESC P Device Control String ST 9/12 9ch Expand to be ESC \ String Terminator for DCS CSI 9/13 9dh Expand to be ESC [ Control Seq Introducer All others are expanded to be ESC and are generally ignored. Tektronix Coordinate system (the PC screen is scaled to fit a Tek screen): The plot commands are characters which specify the absolute position to move the beam. All moves except the one immediately after the GS character (Control-]) are with a visible trace. For 4010-like devices - The positions are from 0 to 1023 for both X and Y, although only 0 to 780 are visible for Y due to screen geometry. The screen is 10.23 by 7.80 inches, and coordinates are sent as 1 to 4 characters. For 4014-like devices - The positions are from 0 to 4096, but each movement is a multiple of 4 positions unless the high-resolution LSBXY are sent. This makes it compatible with the 4010 in that a full sized plot fills the screen. HIX,HIY = High-order 5 bits of position LOX,LOY = Middle-order 5 bits of position LSBXY = Low-order 2 bits of X + low-order 2 bits of Y (4014 mode) Hi Y Lo Y Hi X LSBXY Characters sent (Lo-X always sent) ---- ---- ---- ----- ---------------------------------- Same Same Same Same Lo-X Same Same Same Diff LSB, Lo-Y, Lo-X 4014 Same Same Diff Same Lo-Y, Hi-X, Lo-X Same Same Diff Diff LSB, Lo-Y, Hi-X, Lo-X 4014 Same Diff Same Same Lo-Y, Lo-X Same Diff Same Diff LSB, Lo-Y, Lo-X 4014 Same Diff Diff Same Lo-Y, Hi-X, Lo-X Same Diff Diff Diff LSB, Lo-Y, Hi-X, Lo-X 4014 Diff Same Same Same Hi-Y, Lo-X Diff Same Same Diff Hi-Y, LSB, Lo-Y, Lo-X 4014 Diff Same Diff Same Hi-Y, Lo-Y, Hi-X, Lo-X Diff Same Diff Diff Hi-Y, LSB, Lo-Y, Hi-X, Lo-X 4014 Diff Diff Same Same Hi-Y, Lo-Y, Lo-X Diff Diff Same Diff Hi-Y, LSB, Lo-Y, Lo-X 4014 Diff Diff Diff Same Hi-y, Lo-Y, Hi-X, Lo-X Diff Diff Diff Diff Hi-y, LSB, Lo-Y, Hi-X, Lo-X 4014 Offset for byte: 20h 60h 60h 20h 40h Note that LO-Y must be sent if HI-X has changed so that the TEKTRONIX knows the HI-X byte (in the range of 20h-3fh) is HI-X and not HI-Y. LO-Y must also be sent if LSBXY has changed, so that the 4010 will ignore LSBXY and accept LO-Y. The LSBXY byte is 60h + MARGIN*10h + LSBY*4 + LSBX. (MARGIN=0) Control-] (GS) Tek coordinates. Enter Tek line plot mode. The first move will be with beam off (a moveto command), subsequent coordinates will be reached with the beam on (a drawto command). Note: this is also Kermit's Connect mode escape character so beware if typing GS by hand; SET ESCAPE to something else before the test. Exit drawing upon reception of CR,LF,RS,US,FS,CAN. Control-caret (^, RS) Tek coordinates. Enter Tek line incremental plot mode. RS space move with pen up (invisible) RS P move with pen down (write dots) RS letter motion letter motion A right (East) B left (West) B right and up (NE) J left and down (SW) D up (North) H down (South) F left and up (NW) I right and down (SE) Exit drawing upon reception of CR,LF,RS,US,FS,CAN. Example: RS J J J means move three Tek positions left and down (three south west steps) with the pen up (move invisibly). Control-\ (FS) Tek coordinates. Draw a dot at the coordinate. Point plotting mode. Like GS but does not join end points with lines. Exit drawing upon reception of CR,LF,RS,US,FS,CAN. Control-underline (_, US) Exit Tek line plot mode and return to text mode. Escape sequences (ESC intermediates Final) Escape Seq Mnemonic Description of Action ESC ^E Request Tek status report Report is 20h Tek-X Tek-Y 0dh for non-text mode 24h Tek-X Tek-Y 0dh for text mode Tek-X Tek-Y is Tek style cursor position ESC ^L Enter Tektronix sub-mode, clear Tek screen ESC ^X Turn on Bypass mode (no screen chars) ESC ^Z Turn on GIN crosshairs ESC ? Substitute for DEL, for 7-bit systems ESC P Device Control Sequence introducer (DCS) See below. ESC Z Report terminal type (as a VT320/VT340) Response is ESC [ ? 63; 1; 2; 4; 8; 9; 15 c a VT300 series, level 3, etc ESC @ .. ESC M (@,A,B,C,D,E,F,G,H,I,J,K,L,M) Select rectangular fill pattern 1..14. See ESC /..y ESC \ String Terminator (ST, of DCS items) ESC ` .. ESC e, ESC x, .. ESC z (accent grave,a,b,c,d,e,x,y,z) Select line drawing pattern ESC letter line type, bits, least significant bit plotted first accent 11111111 11111111 a 10101010 10101010 b 11110000 11110000 c 11111010 11111010 d 11111111 11001100 e 11111100 10010010 x user defined (by ESC / Pn a) y user defined (by ESC / Pn b) z user defined (by ESC / Pn c) Control sequences (ESC / or ESC [ or CSI) (ESC / is an HDS 2000/3000 sequence, ESC [ is ANSI form) Control Seq Mnemonic Description of Action ESC / P1; P2;...; P8 C Define user fill pattern. Use low 8-bits of each Pn. P1 is top of fill, plotted lsb first. Pattern is 8x8 dots. Omitted Pn are 0's. ESC / P1; P2;...; P8 D Define second user fill pattern, as above ESC / Pn a Set user definable line drawing bit pattern ESC / Pn b Ditto, lsb drawn first, 16 bits overall ESC / Pn c Ditto ESC / Pd d Set pixel operation code Pd pixel operation 0 draw 1's in foreground color, skip 0's 1 draw 1's in background color, skip 0's 2 XOR 1's with foreground color, skip 0's 3 write absolute, 1's in foreground and 0's in background color ESC / Pn h Set, see table below ESC / Pn l Reset, set table below Pn item 2 destructive space (writes all dots in 8x8 character cell) 9 destructive backspace (clears all dots in 8x8 character cell) Note: both are default off. If Tek mode is entered by receiving a Sixel DCS while in text mode then both are turned on. If SET TERMINAL GRAPHICS CHARACTER-WRITING OPAQUE is stated then both are turned on. ESC / Px; Py; Ph; Pw x Draw rectangle, Px,Py is lower left corner line is drawn as foreground dots only. ESC / Px; Py; Ph; Pw; Pp y Fill a rectangle, Px,Py is lower left corner Ph is height, Pw is width, Pp is fill pattern number (1..14), all in Tek coordinates. Pp pattern Pp pattern 0 use default 1 solid 8 vertical cross-hatch 2 grey (50% dots) 9 checkerboard 3 left to right slant 10 dotted, sparse 4 right to left slant 11 horizontal herringbone 5 horizontal lines 12 vertical herringbone 6 vertical lines 13 user defined (by ESC / Pn C) 7 slanted cross-hatch 14 user defined (by ESC / Pn D) All are 8x8 tiling pixel patterns locked to the top left of the screen and are drawn using the current pixel operation code (ESC / Pd d). ESC / Px; Py; Ph; Pw; Pp z Fill a rectangle, as for ESC / ...y and then add a line border as for ESC / ...x. Each rectangle command, ESC /...(x, y, z) does not change the "text" cursor. ESC [ Pn @ ICH Insert Pn spaces at and after cursor (8 dots) ESC [ Pn A CUU* Cursor up Pn lines, does not scroll ESC [ Pn B CUD* Cursor down Pn lines, does not scroll ESC [ Pn C CUF Cursor forward, stays on same line (8 dots) ESC [ Pn D CUB Cursor backward, stays on same line (8 dots) ESC [ Pn E CNL* Next-line (same as cr/lf), do Pn times ESC [ Pn F CPL* Previous-line (reverse index), do Pn times ESC [ Pc G CHA* ANSI Cursor to absolute column Pc ESC [ Pr; Pc H CUP* Set cursor to row, column (same as HVP) ESC [ Ps J ED* Erase in display: 0 = cursor to end of screen, inclusive 1 = start of screen to cursor, inclusive 2 = entire screen, cursor does not move ESC [ Ps K EL* Erase in line: 0 = cursor to end of line, inclusive 1 = start of line to cursor, inclusive 2 = entire line, cursor does not move ESC [ Pn P DCH* Delete Pn chars from cursor to left, incl. ESC [ Pn X ECH* Erase Pn chars at and to right of cursor ESC [ Pn a CUF* ANSI Cursor forward Pn columns ESC [ Pr d CVA* ANSI Cursor to row Pr, absolute ESC [ Pn e CUD* ANSI Cursor down Pn rows ESC [ Pr; Pc f HVP* Set cursor to row, column (same as CUP) * means the row and column are scaled by assuming the screen has the row and column dimensions of the text terminal emulator. Since the two screens generally do not share common divisors some mis-registration will occur. Successive cursor steering commands, mixed with CR and LF's, will cause further mis-registration. Tek emulator characters use an 8x8 dot bit mapped pattern. ESC [ Pn; Pn m Set screen colors Pn operation 0 set dim (normal) intensity 1 set high intensity 30-37 set foreground colors to Pn minus 30 40-47 set background colors to Pn minus 40 Colors are red=1, green=2, blue=4 and summations for others. Note: this stores new values in palette 0 (background) and palette 7 (foreground). ESC [ 2; 2 $ u Request VT340 color palette report Report is ESC P 2 $ s //... ESC \ where is the palette color in the RGB system - Pr; Pg; Pb for red, green, and blue percentages, resp. black is 0; 0; 0 bold black is 20; 20; 20 dim (regular) hue is 40, bold hue is 80. NOTE: this report is a very long string and may not be acceptable to some communications channels (for example, Telnet). Further, the host may request a report in the HLS system; MS-DOS Kermit always reports in the RGB system. Default VT340 color palettes are - palette b/w color palette b/w color 0 backgnd black black 8 dim grey dim grey (bold black) 1 white bold blue 9 grey blue 2 white bold red 10 grey red 3 white bold green 11 grey green 4 white bold magenta 12 grey magenta 5 white bold cyan 13 grey cyan 6 white bold yellow 14 grey yellow/brown 7 foregnd grey grey 15 white white (bold) ESC [ ? 34 h Invoke macro TerminalS, if defined, exits connect mode. ESC [ ? 34 l Invoke macro TerminalR, as above ESC [ ? 38 l Exit Tek mode to text terminal emulator, only if Tek mode were invoked from text emulator by ESC [ ? 38 h or by a Sixel DCS. ESC [ ? 256 n Request screen size report, MS-DOS Kermit only Report is ESC [ ? 256; Ph; Pw; Pc n for graphics systems where Ph is screen height in dots Pw is screen width in dots Pc is number of colors (0, 1 or 16, for none, b/w, ega/vga) Report is ESC [ ? 24; 80; 0 n for pure text mono systems. Device Control Strings (ESC P or DCS) DCS P1; P2; P3 q string ST or in 7-bit form ESC P P1; P2; P3 q string ESC \ a Sixel Graphics command P1 and P3 are ignored. P2 = 0 or 2 means draw 0 bits in background, 1 means skip them. string is a Sixel command string, containing mixtures of - Sixel characters (3fh..7eh, lower 6 bits+3fh, displayed as six dots vertically, least significant bit at the top after subtracting 3fh). "?" is all zeros, "@" is top line only, "~" is all 6 bits on. The initial Sixel char is placed at the top left of the current 8x8 text cell, subsequent chars work to the right without wrapping. Writing below the screen bottom results in overwriting the bottom strip. ! Pn sixel char Draw Sixel char Pn times (Pn is repeat count) " Pc; Pad; Ph; Pv Raster attributes (all ignored) $ (dollar sign ) Go to left margin - (minus) Go to left margin and 6 dots down Control characters Perform the function, stay in Sixel mode. Note that LF increments by 8 dots (text cell size) Escape sequences are permitted within string and occur without disruption # Pc; Pu; Px; Py; Pz Set palette color, as follows, Pc is color palette, 0..255 (0 is background, 7 is normal foreground), only 0..15 are predefined. Pu is color system, 1 = HLS, 2 = RGB For Hue Lightness Saturation: Px = Hue angle, 0-360 degrees. The colors are mapped around the color wheel in 60 degree segments as Hues: 0-29 deg = blue, 30-89 = magenta (blue + red), 90-149 = red, 150-209 = yellow (red + green), 210-269 = green, 270-329 = cyan (green + blue), 330-359 = blue. Py = Lightness, 0-100%, Pz = Saturation, 0-100% Lightness Sat = 51-100 Sat = 11-50 Sat = 0-10 86-100 bold white bold white bold white 71-85 bold hue bold white bold white 57-70 bold hue grey (dim white) grey 43-56 bold hue dim hue black 29-42 dim hue grey grey 14-28 dim hue black black 0-13 black black black Note that Py = Pz = 50 gives the widest spectrum. For RGB: Px = red, 0-100%, Py = green, 0-100%, Pz = blue, 0-100% If any color exceeds 50% then the bold bit is turned on for the ensemble (IBM ega display adapter constraint for iRGB). Palette registers can be selected by the substring # Pc followed by a non-numeric char other than ";" and Pc is the palette register, 0..255. Example of dynamic palette register selection - ESC P ;1 q AAAA#2BBBBBB#3!6C ESC \ (omit the spaces) Displays Sixel char A four times in the default foreground color (palette 7), then B five times in colors of palette 2, then C six times in palette 3 colors. The ";1" says skip coloring dots with 0 bits. Exception from DEC: color of black always writes all dots in black (an erasure or clearing). Suggestion: when possible ask for a palette report and store the reponse, change palettes as desired for a plot, and then restore the palettes. Sixel character plotting begins at the upper left of the current text cell. Thus, either Tek or ANSI cursor steering commands can be employed to locate the starting position. ESC [ ..m coloring escape sequence can occur withing a Sixel string and it acts on the current fore/background colors and stores them in palettes 7 and 0. Sixel dots are stored by ORing the palette value with the palette value already existing in that dot, with the exception that all black writes black absolutely. At the completion of a Sixel DCS the screen colors are reset to palette 7 and 0 for foreground and background, respectively. TIFF SCREEN DUMPS These follow Aldus/Microsoft TIFF version 5.0 specifications. The output filename is always TEKPLTnn.TIF, where nn starts at 01 and increments by one for each new screen dump. The files are in uncompressed format and thus EGA/VGA screens yield 100KB+ files. Monochrome graphics are written as one bit per pixel TIFF type B format, with the screen divided into 25 or fewer strips. EGA and VGA screens use TIFF type P palette format and a supplementary color palette to RGB table. They too are divided into 25 or fewer strips and use four bits per pixel. The color palette contents are iRGB, to match normal IBM PC display adapter conventions. When dumping a screen via Control End or keyboard verb \Kdump the graphics screen needs to be visible; otherwise, an ordinary text screen is written to the Kermit.scn file. TIFF v5 specifications are available directly from Aldus or Microsoft and by anonymous ftp from site wsmr-simtel20.army.mil as file PD1:[MSDOS.GRAPHICS]TIFF-5.ARC. EXAMPLES Tek 4010 line drawing: Suppose is point y = 300, x = 500 in Tektronix coordinates. Split each 10-bit coordinate into 5-bit groups, add add the Kind code to each. Send the X part last. HI-Y LO-Y HI-X LO-X Y=300d=012Ch= 01001 01100 X=500d=01F4h= 01111 10100 +Kind code +100000 +1100000 +kind code +100000 +1000000 Binary 101001 01101100 101111 1000100 ASCII ) l / D So = (500,300) is sent or received in a GS command as ")l/D". An example in C (program fragments): ----------------------- /* File tek.c. Creates binary output file tek.tst. Replay that file. */ /* writes a Tek test file 'tek.tst', Lattice C */ #include #include #define ESC 0x1b #define FF 0x0c #define CAN 0x18 #define FS 0x1c #define GS 0x1d #define US 0x1f #define ESCZ 0x1a #define RED 1 #define GREEN 2 #define BLUE 4 #define color(c) fputc(ESC,fp);fputc('[',fp);fputc('1',fp);\ fputc(';',fp);fputc('3',fp); fputc('0'+c,fp);fputc('m',fp); FILE *fp; main() { int i, x, y, xc = 750, yc = 500; double radius = 125.0; if ((fp = fopen("tek.tst", "wb")) == NULL) /* write binary mode */ exit(1); fputc(ESC, fp); fputc(FF, fp); /* clear screen, enter graphics mode*/ for (i = 0; i < 40; i++) fputc('\0', fp); /* padding */ /* for mode switch */ fputc(GS, fp); coord(210,500); /* moveto */ color(RED); fputc(US, fp); fputs("shallow fan",fp); /* text mode */ color(GREEN+RED); fputc(GS, fp); coord(50,500); coord(200,400); /* drawto's */ coord(50,500); coord(200,450); coord(50,500); coord(200,500); coord(50,500); coord(200,550); coord(50,500); coord(200,600); fputc(GS, fp); coord(460,500); color(BLUE); fputc(US, fp); fputs("steep fan", fp); fputc(GS, fp); coord(400,200); coord(400,800); coord(400,500); coord(450,200); coord(400,500); coord(450,300); coord(400,500); coord(450,400); coord(400,500); coord(450,500); coord(400,500); coord(450,600); coord(400,500); coord(450,700); coord(400,500); coord(450,800); fputc(US, fp); fputc(' ', fp); color(GREEN); fputc(GS, fp); /* simple circle */ for (i = 0; i <= 360; i++) { x = radius * cos(PI * i / 180.0); y = radius * sin(PI * i / 180.0); coord(x+xc, y+yc); } color(GREEN+BLUE); fputc(GS, fp); coord(75, 65); /* moveto */ fputc(US, fp); fputs("This is a house\n", fp); /* text mode */ fputc(GS, fp); /* draw lines for house */ coord(50,50); coord(300,50); coord(300,200); coord(50,200); coord(175,250); coord(300,200); fputc(GS, fp); coord(50,50); coord(50,200); color(RED+BLUE); /* do some point plotting */ fputc(GS, fp); coord(350,50); fputc(FS, fp); /* draw a dotted rectangle */ for (i = 350; i <= 600; i += 4) coord(i,50); for (i = 50; i <= 200; i += 4) coord(600,i); for (i = 600; i >= 350; i -= 4) coord(i,200); for (i = 200; i >= 50; i -= 4) coord(350,i); color(RED+GREEN+BLUE); fputc(GS, fp); coord(50,10); /* move to */ fputc(US, fp); fputs(" the end.", fp); /* text mode */ fclose(fp); exit(0); } coord(x, y) /* package coordinates Tek style */ int x, y; { fputc((y / 32) + 32, fp); /* high y */ fputc((y % 32) + 96, fp); /* low y */ fputc((x / 32) + 32, fp); /* high x */ fputc((x % 32) + 64, fp); /* low x */ } --------------------------------- SIXEL PLOTTING Sixel file cat.six below is from an anonymous source. It uses only Sixel commands. Please edit this file and replace with a real escape code. Note the presence of CR/LF's in the file; they do adjust the cursor. Two Sixel commands are present: a short one to set color palettes followed directly by the main long one. The picture halts prematurely at the right margin because it was designed for VT340 terminals which are wider and taller than IBM PC screens. View the file via the REPLAY command. Another example file is DEMO.TEK on the MS-DOS Kermit distribution disk. That file has mixed Tek drawing and Sixel commands. WordPerfect Corporation made DEMO.TEK for MS-DOS Kermit testing and demonstration. File cat.six: \Pq#0;1;280;35;60#1;10;0;0#2;1;120;50;100#3;1;0;99;0\ \P;1q----- $#1???!424?!8_- $#1???!373?owwK{C{C}E}A}AyE}C{C{C{KwGwGwGwK{C{E}A}A}A}A}B~@~@~@~?~?}@~@~@~@~B}A }EsK{GgWwOoOoOOoo!7_ $#2???!376?_?o?w?w?{?{?w?w?w?w?o?o?o?o?o?o?w?w?{?{?{?{?{?}?}?}?~?}?}?}?}?{?{?w? o?o?_?_?_?_- $#1???!368?_owWKNNFCFEBAABB@@BBABABABABEFKNW^O~o~_~?~?~?~?~?~?~?~?~?~?~?~?~?~?~ ?~?~?~?~?~?~?~?~?~?~?~?~?~?~@~@~@|B~A}A}A}E{C{CsK{Gw GwGwWoOOoo___ $#2???!376?B?@?@!9?@?@?@?@?@?B?F?N?^?^?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~? ~?~?~?~?~?~?~?}?}?}?{?{?{?{?w?w?w?o?o?o?o?_?_ $#3???!371?__oo!4w!16{wwoo!4_- $#1???!368?FNkww!14?!17_??!6@BBABEFCNKNW^W~w~o~o~o~_~_~_~?~?~?~?~_~_~_~_~_~_~_~ _no~O^O^O^O^O^O^O^WNGNGNGNGNGNGNW^O^O^P\R^Q]QYU]SS{{ MFB@BB@@BBAA]}o $#2???!416?@?@?B?F?F?F?F?N?N?^?^?^?^?~?~?~?^?^?^?^?^?^?^?^?N?N?N?N?N?N?N?N?F?F? F?F?F?F?F?F?F?N?M?K?K?K?G?G $#3???!371?FF!14~!18^!6}!4{!4woo!4_!90?ww!8{__- $#1???!367?o}^B@?_oOWKKKCEFbppXXH!4G!8?_``ppPPZZIMMEEEM!4EM!5K\^vvbBBAEEC!4t||! 4xh!5gww!10OoowG!42?BBAEECKKGGKKCEEBB $#2???!376?_?o?o?w?K?e?u?v?v?~?~?~?~?]?M?M?C?C!19?G?[?{?w?G?G!7?O?O?O!5?_?_?_?_ $#3???!369?__}}NNFF!4B!25?!4_oppxhxp!4xppRrrr__!86?@@!8B@@- $#1???!346?__ckwoOOO[[OOPZ^NMKK[\NNEFDDKKGG?!7_!4?_ooW[KEEBB@@@!27?@BFE{{_?F^^N !5FfbbrrRRZZLMEAABB!5@ $#2???!354?_?_?_?_?_?o?_?_?o?w?q?v?~?^?^?^?^?~?^?N?B?@!37?@?B?w?_?w?w?w?[?K?K?C ???@ $#3???!393?__oWw{{}}}!22~}!4~}swG- $#1???!342?CEFDDDCCCS\LNJz~vfFN^^!4?o{{cEABA?@@@!5?@BBEM^zo!21?K]]K!17?N~w__oo[ [FFPp`?wXHHLLFF!4EAA $#2???!348?B?B?A!7?W?_?~?f?B?B?@???@!61?F?N?B?_?g?]?F?E?A $#3???!372?w{{{!4}!5~}{{w__CN~|!19~r``r!15~{~o- $#1???!354?AEK]zpb}{{___fNLWoo___??ENNE!4?___oWNN?EEKKGWWoo!6_o!7Oo!4_!9?_ow[NF @?@BECE]]}{LFBA $#2???!360?K?@?N?@!24?o?w?o?o?_!36?o?}?{?z?`?@?A $#3???!371?NN^^^~~xoox!4~^^^Nf?o?x@r@vBfNN!6^NnNnNnNnN!4^!9~^NFB- $#1???!355?_o[{~vFNZp_!9@BBBEAAEAA@@@?@BBEEkk{{[MMBB?@@B!7?C!6?@@@B!4@AFBLLww_? ?CK]ua!4B@BA $#2???!391?@?B?B?@!34?A?F?^?z?`?@ $#3???!362?o?K?}?}?}?}?}?{?x@|@|@}?}?}?{?x?R?B?`?o?{?}?~?~?~?~?~?~?~?}?}?}?}?|? {?_- $#1???!354?@@?N^Zro!4?__!24?Kr@!28?oue!5Ccc~~JJJIIIZPRU[W!6Oo!8_ $#2???!440?@ $#3???!360?C?N?~?^?~?~?~?~?~?~?~?~?~?~?~?~?r?K?~?~?~?~?~?~?~?~?~?~?~?~?~?~?H?z? z?z?Z- $#1???!360?br]MMNXWoo{{__?G???G!6?___oo{{v{{ww!4o!6_!4?!5_oo!4OwxNMK[vf@@ $#3???!364?@?A?F?B?^?^?~?~?~?~?~?^?^?N?B???B?F?N?N?^?^?^?~?^?^?^?N?N?N?E?@?B- $#1???!352?_oOWKEAB@!8?{~B!5@`brZNnxx@@!4?x!18~|xxp??KK^~|[scD@!4?@BEKWo_ $#2???!384?E?}?~?~!21?E?M?r?_- $#1???!343?OWGKCEAB@@!15?MN@!6?AEKWr||~~!5?^!19~^N~{!4?F~{_@BEKG!8?@@ $#2???!388?~?~!20?_!4?~?~ $#3???!412?_- $#1???!378?GKEB`o~^!6?!18~{__`BBAAEECDD!11CKK!17GWWOOoo!4_ $#2???!386?_?~?~!20?^?[?{?w@w@w?w?w?w?w?w?o?o?o?o?o?o?o?o?o?o?_?_ $#3???!412?^?[?{?w?w?w?w?w?w?w?w?o?o?o?o?o?o?o?o?o?o?_?_- $#1???!379?cuzx~NB@!5?B!15~rp__!6@BB!5A!36?@@@FFK{w $#2???!386?}?~?~?{!16?M?]?}?}?{?{?|?|?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?}?w?o $#3???!410?M?]?}?}?{?{?|?|?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?}?w?o- $#1???!376?CEb`}~RWKC!7?@BFnn!4N^^~!6^NNNffvp^^BBB}}YqaA!6CG!8O!5_!6?!4_owWGGKK EFB $#2???!384?r?~?~?~?~?{?O?o?o?_???_?_?_?o?O?G?_?{?{@?@?@?B?B?B?F?N?N?N?N?^?^?~?~ ?~?^?^?F?F?B?@ $#3???!424?@?@?@?B?B?B?F?N?N?N?N?^?^?~?~?~?^?^?F?F?B?@- $#1???!375?CEz|NF!5?!6_!4?@@@BBAA!5IJB!6@!6?C^~qAEECCKWo_!14?!8@ $#2???!380?o?~?~?^?^?^?^?~?}?}?{?|?t?t?s?}?}?}?~?~?~?z $#3???!425?KK!4w__- $#1???!369?wwKKCEEABB!9@??!9@BB!4AEECCCEEAAAEECCEEABB@@!8?@BE}{_ $#2???!402?@?@?@?B?@?@?@?@?B?@ $#3???!371?oo!4w{{!20}!6{!8w{{!6w!4{}}!6~}}ww- $#1???!369?bfess[[GGWWOOOoo!5_!32?___???wwG?_{}E??BBM}w $#3???!371?@@BBbb!4fnnNN!6^!31~^^^~~~FFv~^B@x~{{oo- $#1???!367?G]^ro!44?AB@???BB???BB@??BB__ow[EABB $#3???!371?NN!43~|{}~~~{{~~~{{}~~{[^NNBB@@- $#1???!370?@Bb}}uM{GwGwGwGwWoOoOoOoo!8OWW!10GwwwK{C{C{C{C{C{E}BvN\wo___ $#2???!376?o?o?o?o?o?_?_?_?_!25?O?o?w?w?w?w?w?{?o $#3???!373?!4@BB!8F!8N!8nff!10vFF!12B@@- $#1???!364?_{{}E}B~@~?~?~?~?~?~?~?~?~?No~^!21?f~{~?~?~?~?~?~?~?~?~?~?~@~B}Mww_ $#2???!368?w?{?{?}?~?~?~?~?~?~?~?~?N!27?~?~?~?~?~?~?~?~?~?~?}?{?o $#3???!395?!20~WW- $#1???!362?o}^~?~?~?~?~?~?~?~?~?~?~?~?^_{~F!7?CCM^^MCC!7?F~{~?~?~?~?~?~?~?~?~?~ ?~?~?~?{BF}{ $#2???!366?{?~?~?~?~?~?~?~?~?~?~?~?^!29?~?~?~?~?~?~?~?~?~?~?~?~?~?{ $#3???!393?ww!6~zz!4_zz!6~ww- $#1???!360?o}^~?~?~?~?~?~?~?~?~?~?~?~?~??~~!24?_~~~?~?~?~?~?~?~?~?~?~?~?~?~?~?w F~{ $#2???!364?{?~?~?~?~?~?~?~?~?~?~?~?~!31?~?~?~?~?~?~?~?~?~?~?~?~?~?~?w $#3???!393?!22~^^- $#1???!360?~~?~?~?~?~?~?~?~?~?~?~?~?~?~??~~!9?__owwo__!7?~~?~?~?~?~?~?~?~?~?~?~ ?~?~?~?~?~?`^~o $#2???!364?~?~?~?~?~?~?~?~?~?~?~?~?~!31?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?_ $#3???!393?!8~^^!4F^^!6~- $#1???!360?b~}~?~?~?~?~?~?~?~?~?~?~?~?~?}@~~!10?@BBB!8?{~~?~?~?~?~?~?~?~?~?~?~? ~?~?~?~?~?~?N~w $#2???!364?~?~?~?~?~?~?~?~?~?~?~?~?~?}!27?w?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~ $#3???!393?!10~!4{!8~- $#1???!360?~~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~~!8?__owwo__!6?~~~?~?~?~?~?~?~?~?~?~ ?~?~?~?~?~?~?~?{B~} $#2???!364?~?~?~?~?~?~?~?~?~?~?~?~?~?~!27?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?{ $#3???!393?!8~^^!4F^^!6~- $#1???!359?{~~_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~~!10_bbb`!8_~~~_~_~_~_~_~_~_~_~_~_~ _~_~_~_~_~_~_~_`~~ $#2???!362?W?^?^?^?^?^?^?^?^?^?^?^?^?^?^!27?^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?^ $#3???!393?!10^!4[!8^-- $#3???!597?_OKCCc[??o_?OOo!4?!4Oo??_O!4?_O?_o?OOOo!11?_oGSOOo??_O???_O!21?_okcc CSK?o_?OOo!5?oO?C!4?!4Oo??_o?OOOo!11?_O?G?CCCK_O???_ O!5?oO?C??_o?OOOo??_o?OOOo- $#3???!593?CCEDC?A?@?CA@!6?EC!4DB@?E@A?F?A@CA@???CA@!9?CAFCCC?AXOORAICB@!19?CCE DCC?A@?CA@!6?CCCED!4?EC!4DB@CA@???CA@!11?FCCC@B@?EDC C?E@??CCCED???CA@???CA@CA@???CA@??CEA-\ --------------------- End of file TEKEMU.TXT --------------------------------