TextFX is a VGA textmode terminal extender targetted at BBSes. TextFX supports many extensions to emulations like ANSI such as VGA palette and font manipulation, window scrolling, and palette morphing. Aside from these extensions, the protocol itself is also more efficient than ANSI in that BBS graphics will typically take up fewer bytes for the escape sequences.
TextFX was originally created by Mike Fricker for Iniquity BBS Software (for DOS and OS/2). TextFX never really took off, probably due to the fact that it was released rather late in the life of active dial-up BBSes, and also because the only terminal that supported the emulation was Iniquity's own.
gtermix includes a TextFX demo under the "Help" menu which demonstrates some of its capabilities.
TextFX - VGA textmode terminal extender, by Mike Fricker
Specification revision 2.0
Revision History:
2.0 - cursor hiding/showing commands added (Nate Case)
Based on the ANSI/2 specification by Hooptie
Programmer's notes:
each sequence begins with an character (27h)
all values are of 1 byte each (not ascii)
all command characters are case-sensitive
all screen position values are 1-based (x:1, y:1 is the top-left pos)
^Z (eof) characters must be ignored; wait for a real eof
initial default text attribute = 07h
high intensity backgrounds always enabled, no blinking in tfx
user palette default to all-black initially
setting new screen window resets coords to x:1, y:1
code syntax: [parameters...]
a - move cursor up 1 row
Ax - move cursor up x rows
b - move cursor down 1 row
Bx - move cursor down x rows
Cx - move cursor right x columns
c - move cursor right 1 column
Dx - move cursor left x columns
d - move cursor left 1 column
E - environment request, returns: "ENV" (ends w/ a null)
Fp.. - set new text font, p is a 4096 byte packet of font data
Gclx.. - set font for range of chars, c = 1st char; l = #chars; x = font data
h - home cursor (move to 1, 1)
Hxy - move cursor to screen position x, y
i - restore last saved color attribute
I - save current color attribute
j - clear text window with default text attribute (07h)
J - clear text window with current attribute
k - clear from cursor to end of line with default text attribute (07h)
K - clear from cursor to end of line with current attribute
lx - set default color attribute to x (00h-FFh)
Mx - set current color attribute to x (00h-FFh)
n - turn the cursor off [hide]
N - turn the cursor on [show]
px - change to color palette x (ascii x is the palette buffer, see below)
Prgb.. - set color palette, 64 r/g/b (0-63) trios (192 bytes exactly)
Qx - save current palette in user-palette buffer x (1-3)
rcx - write character c x-number of times in current attribute
Rcrgb - set palette register c (0-255) to specified r/g/b (0-63) values
s - restore last saved cursor position
S - save cursor position
t - scroll window down once, top row cleared w/ current attribute
Tx - scroll window down x lines, top row cleared w/ current attribute
u - scroll window up once, bottom row cleared w/ current attribute
Ux - scroll window up x lines, bottom row cleared w/ current attribute
V - textFX version request, returns: "TFXv" (v = textFX ver# byte)
Wabxy - defines window; a,b = upper left; x,y = lower right, homes cursor
Xfts - morph palette from f to t (see below) in s (byte) number of steps
zwfp - partial reset; w(window), f(font) and p(palette) = 0 or 1 (yes/no)
Z - reset console (resets attr, screen, palette, font and window cords)
predefined color palettes (ascii):
A all-white palette
B all-black palette
C current palette
D default textmode palette
E greyscale palette
1 user-palette #1
2 user-palette #2
3 user-palette #3