summaryrefslogtreecommitdiffstats
path: root/util/alevt
diff options
context:
space:
mode:
authorMark Purcell <msp@debian.org>2010-02-25 21:13:46 +1100
committeretobi <git@e-tobi.net>2013-09-03 09:48:46 +0200
commit665818f1969f893f05edf5b70eb1804c89b2829e (patch)
tree34ba68cee03c52d769a5a51b456b7e9d63cd091a /util/alevt
parent109c7947d6a11a2a54eff1b19615ed80ea2f0602 (diff)
parent9fe4d4ea9c054e539ab679ed2e9c076c35beb69d (diff)
downloadlinux-dvb-apps-665818f1969f893f05edf5b70eb1804c89b2829e.tar.gz
Imported Debian patch 1.1.1+rev1355-1debian/1.1.1+rev1355-1
Diffstat (limited to 'util/alevt')
-rw-r--r--util/alevt/COPYRIGHT297
-rw-r--r--util/alevt/ChangeLog535
-rw-r--r--util/alevt/EXPORT.HOWTO84
-rw-r--r--util/alevt/Makefile130
-rw-r--r--util/alevt/README72
-rw-r--r--util/alevt/README.OLD78
-rw-r--r--util/alevt/ReadmeGR28
-rw-r--r--util/alevt/TODO12
-rw-r--r--util/alevt/alevt-cap.153
-rw-r--r--util/alevt/alevt-cap.c280
-rw-r--r--util/alevt/alevt-date.141
-rw-r--r--util/alevt/alevt-date.c225
-rw-r--r--util/alevt/alevt.160
-rw-r--r--util/alevt/alevt.desktop9
-rw-r--r--util/alevt/bdf2xbm.c212
-rw-r--r--util/alevt/cache.c229
-rw-r--r--util/alevt/cache.h41
-rw-r--r--util/alevt/dllist.h55
-rw-r--r--util/alevt/exp-gfx.c258
-rw-r--r--util/alevt/exp-html.c299
-rw-r--r--util/alevt/exp-txt.c226
-rw-r--r--util/alevt/export.c364
-rw-r--r--util/alevt/export.h66
-rw-r--r--util/alevt/fdset.c97
-rw-r--r--util/alevt/fdset.h28
-rw-r--r--util/alevt/font.c5
-rw-r--r--util/alevt/font.h19
-rw-r--r--util/alevt/hamm.c229
-rw-r--r--util/alevt/hamm.h7
-rw-r--r--util/alevt/help.c83
-rw-r--r--util/alevt/help.h8
-rw-r--r--util/alevt/icon.xbm17
-rw-r--r--util/alevt/lang.c393
-rw-r--r--util/alevt/lang.h28
-rw-r--r--util/alevt/main.c221
-rw-r--r--util/alevt/misc.c66
-rw-r--r--util/alevt/misc.h32
-rw-r--r--util/alevt/os.h7
-rw-r--r--util/alevt/search.c127
-rw-r--r--util/alevt/search.h16
-rw-r--r--util/alevt/ui.c721
-rw-r--r--ut
/* $Id$
 * $URL$
 *
 * driver for USB2LCD display interface
 * see http://www.harbaum.org/till/lcd2usb for schematics
 *
 * Copyright 2005 Till Harbaum <till@harbaum.org>
 * Copyright 2005 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
 *
 * This file is part of LCD4Linux.
 *
 * LCD4Linux is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * LCD4Linux is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */

/* 
 *
 * exported fuctions:
 *
 * struct DRIVER drv_LCD2USB
 *
 */

#include "config.h"

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <termios.h>
#include <fcntl.h>
#include <ctype.h>
#include <sys/ioctl.h>
#include <sys/time.h>

#include <usb.h>

#include "debug.h"
#include "cfg.h"
#include "timer.h"
#include "qprintf.h"
#include "plugin.h"
#include "widget.h"
#include "widget_text.h"
#include "widget_icon.h"
#include "widget_bar.h"
#include "widget_keypad.h"
#include "drv.h"
#include "drv_generic_text.h"
#include "drv_generic_keypad.h"

/* vid/pid donated by FTDI */
#define LCD_USB_VENDOR 0x0403
#define LCD_USB_DEVICE 0xC630

/* number of buttons on display */
#define L2U_BUTTONS        (2)

#define LCD_ECHO           (0<<5)
#define LCD_CMD            (1<<5)
#define LCD_DATA           (2<<5)
#define LCD_SET            (3<<5)
#define LCD_GET            (4<<5)

/* target is a bit map for CMD/DATA */
#define LCD_CTRL_0              (1<<3)
#define LCD_CTRL_1              (1<<4)
#define LCD_BOTH           (LCD_CTRL_0 | LCD_CTRL_1)

/* target is value to set */
#define LCD_SET_CONTRAST   (LCD_SET | (0<<3))
#define LCD_SET_BRIGHTNESS (LCD_SET | (1<<3))
#define LCD_SET_RESERVED0  (LCD_SET | (2<<3))
#define LCD_SET_RESERVED1  (LCD_SET | (3<<3))

/* target is value to get */
#define LCD_GET_FWVER      (LCD_GET | (0<<3))
#define LCD_GET_BUTTONS    (LCD_GET | (1<<3))
#define LCD_GET_CTRL       (LCD_GET | (2<<3))
#define LCD_GET_RESERVED1  (LCD_GET | (3<<3))

static char Name[] = "LCD2USB";
static char *device_id = NULL, *bus_id = NULL;

static usb_dev_handle *lcd;
static int controllers = 0;

extern int usb_debug;
extern int got_signal;

/****************************************/
/***  hardware dependant functions    ***/
/****************************************/

static int drv_L2U_open(char *bus_id, char *device_id)
{
    struct usb_bus *busses, *bus;
    struct usb_device *dev;

    lcd = NULL;

    info("%s: scanning USB for LCD2USB interface ...", Name);

    if (bus_id != NULL)
	info("%s: scanning for bus id: %s", Name, bus_id);

    if (device_id != NULL)
	info("%s: scanning for device id: %s", Name, device_id);

    usb_debug = 0;

    usb_init();
    usb_find_busses();
    usb_find_devices();
    busses = usb_get_busses();

    for (bus = busses; bus; bus = bus->next) {
	/* search this bus if no bus id was given or if this is the given bus id */
	if (!bus_id || (bus_id && !strcasecmp(bus->dirname, bus_id))) {

	    for (dev = bus->devices; dev; dev = dev->next) {
		/* search this device if no device id was given or if this is the given device id */
		if (!device_id || (device_id && !strcasecmp(dev->filename, device_id))) {

		    if ((dev->descriptor.idVendor == LCD_USB_VENDOR) && (dev->descriptor.idProduct == LCD_USB_DEVICE)) {
			info("%s: found LCD2USB interface on bus %s device %s", Name, bus->dirname, dev->filename);
			lcd = usb_open(dev);
			if (usb_claim_interface(lcd, 0) < 0) {
			    error("%s: usb_claim_interface() failed!", Name);
			    return -1;
			}
			return 0;
		    }
		}
	    }
	}
    }
    return -1;
}


static int drv_L2U_close(void)
{
    usb_release_interface(lcd, 0);
    usb_close(lcd);

    return 0;
}


static int drv_L2U_send(int request, int value, int index)
{
    if (usb_control_msg(lcd, USB_TYPE_VENDOR, request, value, index, NULL, 0, 1000) < 0) {
	error("%s: USB request failed! Trying to reconnect device.", Name);

	usb_release_interface(lcd, 0);
	usb_close(lcd);

	/* try to close and reopen connection */
	if (drv_L2U_open(bus_id, device_id) < 0) {
	    error("%s: could not re-detect LCD2USB USB LCD", Name);
	    got_signal = -1;
	    return -1;
	}
	/* and try to re-send command */
	if (usb_control_msg(lcd, USB_TYPE_VENDOR, request, value, index, NULL, 0, 1000) < 0) {
	    error("%s: retried USB request failed, aborting!", Name);
	    got_signal = -1;
	    return -1;
	}

	info("%s: Device successfully reconnected.", Name);
    }

    return 0;
}

/* send a number of 16 bit words to the lcd2usb interface */
/* and verify that they are correctly returned by the echo */
/* command. This may be used to check the reliability of */
/* the usb interfacing */
#define ECHO_NUM 100

int drv_L2U_echo(void)
{
    int i, nBytes, errors = 0;
    unsigned short val, ret;

    for (i = 0; i < ECHO_NUM; i++) {
	val = rand() & 0xffff;

	nBytes = usb_control_msg(lcd,
				 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN,
				 LCD_ECHO, val, 0, (char *) &ret, sizeof(ret), 1000);

	if (nBytes < 0) {
	    error("%s: USB request failed!", Name);
	    return -1;
	}

	if (val != ret)
	    errors++;
    }

    if (errors) {
	error("%s: ERROR, %d out of %d echo transfers failed!", Name, errors, ECHO_NUM);
	return -1;
    } else
	info("%s: echo test successful", Name);

    return 0;
}

/* get a value from the lcd2usb interface */
static int drv_L2U_get(unsigned char cmd)
{
    unsigned char buffer[2];
    int nBytes;

    /* send control request and accept return value */
    nBytes = usb_control_msg(lcd,
			     USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN,
			     cmd, 0, 0, (char *) buffer, sizeof(buffer), 1000);

    if (nBytes < 0) {
	error("%s: USB request failed!", Name);
	return -1;
    }

    return buffer[0] + 256 * buffer[1];
}

/* get lcd2usb interface firmware version */
static void drv_L2U_get_version(void)
{
    int ver = drv_L2U_get(LCD_GET_FWVER);

    if (ver != -1)
	info("%s: firmware version %d.%02d", Name, ver & 0xff, ver >> 8);
    else
	error("%s: unable to read firmware version", Name);
}

/* get the bit mask of installed LCD controllers (0 = no */
/* lcd found, 1 = single controller display, 3 = dual */
/* controller display */
static void drv_L2U_get_controllers(void)
{
    controllers = drv_L2U_get(LCD_GET_CTRL);

    if (controllers != -1) {
	if (controllers)
	    info("%s: installed controllers: %s%s", Name,
		 (controllers & 1) ? "CTRL0" : "", (controllers & 2) ? " CTRL1" : "");
	else
	    error("%s: no controllers found", Name);
    } else {
	error("%s: unable to read installed controllers", Name);
	controllers = 0;	/* don't access any controllers */
    }

    /* convert into controller map matching our protocol */
    controllers = ((controllers & 1) ? LCD_CTRL_0 : 0) | ((controllers & 2) ? LCD_CTRL_1 : 0);
}

/* get state of the two optional buttons */
static unsigned long drv_L2U_get_buttons(void)
{
    int buttons = drv_L2U_get(LCD_GET_BUTTONS);

    if (buttons == -1) {
	error("%s: unable to read button state", Name);
	buttons = 0;
    }

    return buttons;
}


/* to increase performance, a little buffer is being used to */
/* collect command bytes of the same type before transmitting them */
#define BUFFER_MAX_CMD 4	/* current protocol supports up to 4 bytes */
int buffer_current_type = -1;	/* nothing in buffer yet */
int buffer_current_fill = 0;	/* -"- */
unsigned char buffer[BUFFER_MAX_CMD];

/* command format: 
 * 7 6 5 4 3 2 1 0
 * C C C T T R L L
 *
 * TT = target bit map 
 * R = reserved for future use, set to 0
 * LL = number of bytes in transfer - 1 
 */

/* flush command queue due to buffer overflow / content */
/* change or due to explicit request */
static void drv_L2U_flush(void)
{
    int request, value, index;

    /* anything to flush? ignore request if not */
    if (buffer_current_type == -1)
	return;

    /* build request byte */
    request = buffer_current_type | (buffer_current_fill - 1);

    /* fill value and index with buffer contents. endianess should IMHO not */
    /* be a problem, since usb_control_msg() will handle this. */
    value = buffer[0] | (buffer[1] << 8);
    index = buffer[2] | (buffer[3] << 8);

    if (controllers) {
	/* send current buffer contents */
	drv_L2U_send(request, value, index);
    }

    /* buffer is now free again */
    buffer_current_type = -1;
    buffer_current_fill = 0;
}

/* enqueue a command into the buffer */
static void drv_L2U_enqueue(int command_type, int value)
{
    if ((buffer_current_type >= 0) && (buffer_current_type != command_type))
	drv_L2U_flush();

    /* add new item to buffer */
    buffer_current_type = command_type;
    buffer[buffer_current_fill++] = value;

    /* flush buffer if it's full */
    if (buffer_current_fill == BUFFER_MAX_CMD)
	drv_L2U_flush();
}

static void drv_L2U_command(const unsigned char ctrl, const unsigned char cmd)
{
    drv_L2U_enqueue(LCD_CMD | (ctrl & controllers), cmd);
}


static void drv_L2U_clear(void)
{
    drv_L2U_command(LCD_BOTH, 0x01);	/* clear display */
    drv_L2U_command(LCD_BOTH, 0x03);	/* return home */
}

static void drv_L2U_write(int row, const int col, const char *data, int len)
{
    int pos, ctrl = LCD_CTRL_0;

    /* displays with more two rows and 20 columns have a logical width */
    /* of 40 chars and use more than one controller */
    if ((DROWS > 2) && (DCOLS > 20) && (row > 1)) {
	/* use second controller */
	row -= 2;
	ctrl = LCD_CTRL_1;
    }

    /* 16x4 Displays use a slightly different layout */
    if (DCOLS == 16 && DROWS == 4) {
	pos = (row % 2) * 64 + (row / 2) * 16 + col;
    } else {
	pos = (row % 2) * 64 + (row / 2) * 20 + col;
    }

    drv_L2U_command(ctrl, 0x80 | pos);

    while (len--) {
	drv_L2U_enqueue(LCD_DATA | (ctrl & controllers), *data++);
    }

    drv_L2U_flush();
}

static void drv_L2U_defchar(const int ascii, const unsigned char *matrix)
{
    int i;

    drv_L2U_command(LCD_BOTH, 0x40 | 8 * ascii);

    for (i = 0; i < 8; i++) {
	drv_L2U_enqueue(LCD_DATA | (LCD_BOTH & controllers), *matrix++ & 0x1f);
    }

    drv_L2U_flush();
}

static int drv_L2U_contrast(int contrast)
{
    if (contrast < 0)
	contrast = 0;
    if (contrast > 255)
	contrast = 255;

    drv_L2U_send(LCD_SET_CONTRAST, contrast, 0);

    return contrast;
}

static int drv_L2U_brightness(int brightness)
{
    if (brightness < 0)
	brightness = 0;
    if (brightness > 255)
	brightness = 255;

    drv_L2U_send(LCD_SET_BRIGHTNESS, brightness, 0);

    return brightness;
}

static void drv_L2U_timer(void __attribute__ ((unused)) * notused)
{
    static unsigned long last_but = 0;
    unsigned long new_but = drv_L2U_get_buttons();
    int i;

    /* check if button state changed */
    if (new_but ^ last_but) {

	/* send single keypad events for all changed buttons */
	for (i = 0; i < L2U_BUTTONS; i++)
	    if ((new_but & (1 << i)) ^ (last_but & (1 << i)))
		drv_generic_keypad_press(((new_but & (1 << i)) ? 0x80 : 0) | i);
    }

    last_but = new_but;
}

static int drv_L2U_keypad(const int num)
{
    int val = 0;

    /* check for key press event */
    if (num & 0x80)
	val = WIDGET_KEY_PRESSED;
    else
	val = WIDGET_KEY_RELEASED;

    if ((num & 0x7f) == 0)
	val += WIDGET_KEY_UP;

    if ((num & 0x7f) == 1)
	val += WIDGET_KEY_DOWN;

    return val;
}

static int drv_L2U_start(const char *section, const int quiet)
{
    int contrast, brightness;
    int rows = -1, cols = -1;
    char *s;

    s = cfg_get(section, "Size", NULL);
    if (s == NULL || *s == '\0') {
	error("%s: no '%s.Size' entry from %s", Name, section, cfg_source());
	return -1;
    }
    if (sscanf(s, "%dx%d", &cols, &rows) != 2 || rows < 1 || cols < 1) {
	error("%s: bad %s.Size '%s' from %s", Name, section, s, cfg_source());
	free(s);
	return -1;
    }

    DROWS = rows;
    DCOLS = cols;

    /* bus id and device id are strings and not just intergers, since */
    /* the windows port of libusb treats them as strings. And this way */
    /* we keep windows compatibility ... just in case ... */
    bus_id = cfg_get(section, "Bus", NULL);
    device_id = cfg_get(section, "Device", NULL);

    if (drv_L2U_open(bus_id, device_id) < 0) {
	error("%s: could not find a LCD2USB USB LCD", Name);
	return -1;
    }

    /* test interface reliability */
    drv_L2U_echo();

    /* get some infos from the interface */
    drv_L2U_get_version();
    drv_L2U_get_controllers();
    if (!controllers)
	return -1;

    /* regularly request key state */
    /* Fixme: make 100msec configurable */
    timer_add(drv_L2U_timer, NULL, 100, 0);

    if (cfg_number(section, "Contrast", 0, 0, 255, &contrast) > 0) {
	drv_L2U_contrast(contrast);
    }

    if (cfg_number(section, "Brightness", 0, 0, 255, &brightness) > 0) {
	drv_L2U_brightness(brightness);
    }

    drv_L2U_clear();		/* clear display */

    if (!quiet) {
	char buffer[40];
	qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
	if (drv_generic_text_greet(buffer, "www.harbaum.org/till")) {
	    sleep(3);
	    drv_L2U_clear();
	}
    }

    return 0;
}


/****************************************/
/***            plugins               ***/
/****************************************/

static void plugin_contrast(RESULT * result, RESULT * arg1)
{
    double contrast;

    contrast = drv_L2U_contrast(R2N(arg1));
    SetResult(&result, R_NUMBER, &contrast);
}


static void plugin_brightness(RESULT * result, RESULT * arg1)
{
    double brightness;

    brightness = drv_L2U_brightness(R2N(arg1));
    SetResult(&result, R_NUMBER, &brightness);
}


/****************************************/
/***        widget callbacks          ***/
/****************************************/


/* using drv_generic_text_draw(W) */
/* using drv_generic_text_icon_draw(W) */
/* using drv_generic_text_bar_draw(W) */


/****************************************/
/***        exported functions        ***/
/****************************************/


/* list models */
int drv_L2U_list(void)
{
    printf("generic");
    return 0;
}


/* initialize driver & display */
int drv_L2U_init(const char *section, const int quiet)
{
    WIDGET_CLASS wc;
    int asc255bug;
    int ret;

    info("%s: %s", Name, "$Rev$");

    /* display preferences */
    XRES = 5;			/* pixel width of one char  */
    YRES = 8;			/* pixel height of one char  */
    CHARS = 8;			/* number of user-defineable characters */
    CHAR0 = 0;			/* ASCII of first user-defineable char */
    GOTO_COST = 2;		/* number of bytes a goto command requires */

    /* real worker functions */
    drv_generic_text_real_write = drv_L2U_write;
    drv_generic_text_real_defchar = drv_L2U_defchar;
    drv_generic_keypad_real_press = drv_L2U_keypad;

    /* start display */
    if ((ret = drv_L2U_start(section, quiet)) != 0)
	return ret;

    /* initialize generic text driver */
    if ((ret = drv_generic_text_init(section, Name)) != 0)
	return ret;

    /* initialize generic icon driver */
    if ((ret = drv_generic_text_icon_init()) != 0)
	return ret;

    /* initialize generic bar driver */
    if ((ret = drv_generic_text_bar_init(0)) != 0)
	return ret;

    /* add fixed chars to the bar driver */
    /* most displays have a full block on ascii 255, but some have kind of  */
    /* an 'inverted P'. If you specify 'asc255bug 1 in the config, this */
    /* char will not be used, but rendered by the bar driver */
    cfg_number(section, "asc255bug", 0, 0, 1, &asc255bug);
    drv_generic_text_bar_add_segment(0, 0, 255, 32);	/* ASCII  32 = blank */
    if (!asc255bug)
	drv_generic_text_bar_add_segment(255, 255, 255, 255);	/* ASCII 255 = block */

    /* initialize generic key pad driver */
    if ((ret = drv_generic_keypad_init(section, Name)) != 0)
	return ret;

    /* register text widget */
    wc = Widget_Text;
    wc.draw = drv_generic_text_draw;
    widget_register(&wc);

    /* register icon widget */
    wc = Widget_Icon;
    wc.draw = drv_generic_text_icon_draw;
    widget_register(&wc);

    /* register bar widget */
    wc = Widget_Bar;
    wc.draw = drv_generic_text_bar_draw;
    widget_register(&wc);

    /* register plugins */
    AddFunction("LCD::contrast", 1, plugin_contrast);
    AddFunction("LCD::brightness", 1, plugin_brightness);

    return 0;
}


/* close driver & display */
int drv_L2U_quit(const int quiet)
{

    info("%s: shutting down.", Name);

    drv_generic_text_quit();
    drv_generic_keypad_quit();

    /* clear display */
    drv_L2U_clear();

    /* say goodbye... */
    if (!quiet) {
	drv_generic_text_greet("That's all, folks!", NULL);
    }

    debug("closing USB connection");
    drv_L2U_close();

    return (0);
}


DRIVER drv_LCD2USB = {
    .name = Name,
    .list = drv_L2U_list,
    .init = drv_L2U_init,
    .quit = drv_L2U_quit,
};
captured pages
+
+ ind = 1;
+ while (opt = option(argc, argv, &ind, &arg))
+ switch (opt)
+ {
+ case 1: // charset
+ if (streq(arg, "latin-1") || streq(arg, "1"))
+ latin1 = 1;
+ else if (streq(arg, "latin-2") || streq(arg, "2"))
+ latin1 = 0;
+ else if (streq(arg, "koi8-r") || streq(arg, "koi"))
+ latin1 = KOI8;
+ else if (streq(arg, "iso8859-7") || streq(arg, "el"))
+ latin1 = GREEK;
+ else
+ fatal("bad charset (not latin-1/2/koi8-r/iso8859-7)");
+ break;
+ case 2: // format
+ if (streq(arg, "help") || streq(arg, "?") || streq(arg, "list"))
+ exp_help(stdout);
+ out_fmt = arg;
+ fmt = 0;
+ break;
+ case 3: // help
+ usage(stdout, 0);
+ break;
+ case 4: // name
+ fname = arg;
+ break;
+ case 5: // timeout
+ timeout = strtol(arg, 0, 10);
+ if (timeout < 1 || timeout > 999999)
+ fatal("bad timeout value", timeout);
+ break;
+ case 6: // service id
+ sid = strtoul(arg, NULL, 0);
+ break;
+ case 7: // teletext pid
+ ttpid = strtoul(arg, NULL, 0);
+ break;
+ case 8: // vbi
+ vbi_name = arg;
+ break;
+ case -1: // non-option arg
+ if (not fmt)
+ fmt = export_open(out_fmt);
+ if (not fmt)
+ fatal("%s", export_errstr());
+ if (not(req = malloc(sizeof(*req))))
+ out_of_mem(sizeof(*req));
+ req->name = fname;
+ req->pgno_str = arg;
+ req->pgno = arg_pgno(arg, &req->subno);
+ req->export = fmt;
+ dl_insert_last(reqs, req->node);
+ break;
+ }
+
+ if (dl_empty(reqs))
+ fatal("no pages requested");
+
+ // setup device
+ if (not(vbi = vbi_open(vbi_name, 0, channel, outfile, sid, ttpid)))
+ fatal("cannot open %s", vbi_name);
+ vbi_add_handler(vbi, event, reqs); // register event handler
+
+ if (timeout)
+ alarm(timeout);
+
+ // capture pages (moves requests from reqs[0] to reqs[1])
+ while (not dl_empty(reqs) && not timed_out)
+ if (fdset_select(fds, 30000) == 0) // 30sec select time out
+ {
+ error("no signal.");
+ break;
+ }
+
+ alarm(0);
+ vbi_del_handler(vbi, event, reqs);
+ vbi_close(vbi);
+ if (not dl_empty(reqs))
+ error("capture aborted. Some pages are missing.");
+
+ for (req = PTR reqs[1].first; req->node->next; req = PTR req->node->next)
+ {
+ fname = export_mkname(req->export, req->name, req->vtp, req->pgno_str);
+ if (not fname || export(req->export, req->vtp, fname))
+ error("error saving page %s: %s", req->pgno_str, export_errstr());
+ if (fname)
+ free(fname);
+ }
+ exit(dl_empty(reqs) ? 0 : 1);
+}
diff --git a/util/alevt/alevt-date.1 b/util/alevt/alevt-date.1
new file mode 100644
index 0000000..69d2f6f
--- /dev/null
+++ b/util/alevt/alevt-date.1
@@ -0,0 +1,41 @@
+.TH alevt-date 1 "February 07, 2010"
+.SH NAME
+alevt-date \- print out UTC date.
+.SH SYNOPSIS
+.B alevt-date
+.RI [ options ]
+.br
+.SH DESCRIPTION
+This manual page documents briefly the
+.B alevt-date
+commands.
+.PP
+\fBalevt-date\fP is a program to print the UTC date.
+.SH OPTIONS
+.TP
+.B \-d -delta <max_secs>
+maximum delta
+.TP
+.B \-f -format <fmtstr>
+time format
+.TP
+.B \-h -help
+print this page
+.TP
+.B \-s -set
+set the system clock
+.TP
+.B \-t -timeout <seconds>
+timeout
+.TP
+.B \-v -vbi <vbidev>
+vbi device /dev/vbi; /dev/vbi0; /dev/video0; /dev/dvb/adapter0/demux0
+.TP
+.br
+.SH SEE ALSO
+.BR alevt-cap (1) , alevt (1).
+.br
+.SH AUTHOR
+alevt-date was written by Edgar Toernig <froese@gmx.de>.
+.PP
+This manual page was written by Uwe Bugla <uwe.bugla@gmx.de>.
diff --git a/util/alevt/alevt-date.c b/util/alevt/alevt-date.c
new file mode 100644
index 0000000..5496937
--- /dev/null
+++ b/util/alevt/alevt-date.c
@@ -0,0 +1,225 @@
+#include <stdio.h>
+#include <string.h>
+#include <sys/time.h>
+#include <time.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include "os.h"
+#include "vt.h"
+#include "fdset.h"
+#include "vbi.h"
+#include "lang.h"
+#include "misc.h"
+
+char *fmt = "%a %b %d %H:%M:%S %Z %Y";
+int max_diff = 2*60*60; // default: 2 hours
+int set_time = 0;
+char *outfile = "";
+static char *channel;
+u_int16_t sid;
+
+
+static void chk_time(int t)
+{
+ struct tm *tm;
+ time_t sys_t;
+ int dt;
+ char buf[256];
+
+ if (t < 0 || t > 235959 || t%100 > 59 || t/100%100 > 59)
+ return;
+
+ sys_t = time(0);
+ tm = localtime(&sys_t);
+
+ // Now convert to UTC seconds
+ t = t/100/100 * 60*60 + t/100%100 * 60 + t%100;
+#ifdef BSD
+ t -= tm->tm_gmtoff; // dst already included...
+#else
+ t += timezone;
+ if (tm->tm_isdst)
+ t -= 60*60;
+#endif
+
+ dt = t - sys_t % (24*60*60);
+ if (dt <= -12*60*60)
+ dt += 24*60*60;
+
+ if (dt <= -max_diff || dt >= max_diff)
+ fatal("time diff too big (%2d:%02d:%02d)", dt/60/60, abs(dt)/60%60, abs(dt)%60);
+
+ sys_t += dt;
+
+ if (set_time)
+ {
+ struct timeval tv[1];
+
+ tv->tv_sec = sys_t;
+ tv->tv_usec = 500000;
+ if (settimeofday(tv, 0) == -1)
+ ioerror("settimeofday");
+ }
+ if (*fmt)
+ {
+ tm = localtime(&sys_t);
+ if (strftime(buf, sizeof(buf), fmt, tm))
+ puts(buf);
+ }
+ exit(0);
+}
+
+
+static void event(void *_, struct vt_event *ev)
+{
+ switch (ev->type)
+ {
+ /* vbi may generate EV_PAGE, EV_HEADER, EV_XPACKET */
+ /* for event arguments see vt.h */
+
+ case EV_HEADER: // a new title line (for running headers)
+ {
+ static int last_t = -1;
+ u8 *s = ev->p1;
+ int i, t = 1;
+
+ if (ev->i2 & PG_OUTOFSEQ)
+ break;
+
+ for (i = 32; i < 40; ++i)
+ if (s[i] >= '0' && s[i] <= '9')
+ t = t * 10+ s[i] - '0';
+ if (t >= 1000000 && t <= 1235959)
+ if (t == last_t || t - last_t == 1)
+ chk_time(t - 1000000);
+ last_t = t;
+ break;
+ }
+ }
+}
+
+
+static void usage(FILE *fp, int exit_val)
+{
+ fprintf(fp, "usage: %s [options]\n", prgname);
+ fprintf(fp,
+ "\n"
+ " Valid options:\t\tDefault:\n"
+ " -d -delta <max_secs>\t7200 (2 hours)\n"
+ " -f -format <fmtstr>\t\t%%c\n"
+ " -h -help\n"
+ " -s -set\t\t\toff\n"
+ " -to -timeout <seconds>\t(none)\n"
+ " -v -vbi <vbidev>\t\t/dev/vbi\n"
+ " \t\t/dev/vbi0\n"
+ " \t\t/dev/video0\n"
+ " \t\t/dev/dvb/adapter0/demux0\n"
+ );
+ exit(exit_val);
+}
+
+
+static int option(int argc, char **argv, int *ind, char **arg)
+{
+ static struct { char *nam, *altnam; int arg; } opts[] = {
+ { "-delta", "-d", 1 },
+ { "-format", "-f", 1 },
+ { "-help", "-h", 0 },
+ { "-set", "-s", 0 },
+ { "-timeout", "-to", 1 },
+ { "-vbi", "-v", 1 },
+ };
+ int i;
+
+ if (*ind >= argc)
+ return 0;
+
+ *arg = argv[(*ind)++];
+ for (i = 0; i < NELEM(opts); ++i)
+ if (streq(*arg, opts[i].nam) || streq(*arg, opts[i].altnam))
+ {
+ if (opts[i].arg)
+ if (*ind < argc)
+ *arg = argv[(*ind)++];
+ else
+ fatal("option %s requires an argument", *arg);
+ return i+1;
+ }
+
+ if (**arg == '-')
+ {
+ fatal("%s: invalid option", *arg);
+ usage(stderr, 1);
+ }
+
+ return -1;
+}
+
+
+int main(int argc, char **argv)
+{
+ char *vbi_name = NULL;
+ int timeout = 0;
+ struct vbi *vbi;
+ int opt, ind;
+ char *arg;
+ int ttpid = -1;
+
+ setprgname(argv[0]);
+ ind = 1;
+ while (opt = option(argc, argv, &ind, &arg))
+ switch (opt)
+ {
+ case 1: // -delta
+ max_diff = atoi(arg);
+ if (max_diff < 1)
+ fatal("-delta: illegal value '%s'", arg);
+ if (max_diff > 12*60*60)
+ {
+ max_diff = 12*60*60;
+ error("-delta: %d too big. Assuming %d", arg, max_diff);
+ }
+ break;
+ case 2: // -format
+ fmt = arg;
+ break;
+ case 3: // help
+ usage(stdout, 0);
+ break;
+ case 4: // -set
+ set_time = 1;
+ break;
+ case 5: // -timeout
+ timeout = atoi(arg);
+ if (timeout < 1 || timeout > 60*60)
+ fatal("-timeout: illegal value '%s'", arg);
+ break;
+ case 6: // -vbi
+ vbi_name = arg;
+ break;
+ case -1:
+ usage(stderr, 1);
+ break;
+ }
+
+ fdset_init(fds);
+
+ if (timeout)
+ {
+ signal(SIGALRM, SIG_DFL); // kill me
+ alarm(timeout);
+ }
+ vbi = vbi_open(vbi_name, 0, channel, outfile, sid, ttpid); // open device
+ if (not vbi)
+ fatal_ioerror(vbi_name);
+ vbi_add_handler(vbi, event, 0); // register event handler
+
+ for (;;)
+ fdset_select(fds, -1); // call scheduler
+
+ /* never reached */
+ vbi_del_handler(vbi, event, 0);
+ vbi_close(vbi);
+ exit(0);
+}
diff --git a/util/alevt/alevt.1 b/util/alevt/alevt.1
new file mode 100644
index 0000000..68bff45
--- /dev/null
+++ b/util/alevt/alevt.1
@@ -0,0 +1,60 @@
+.TH alevt 1 "February 07, 2010"
+.SH NAME
+alevt \- a teletext browser for analogue and DVB channels.
+.SH SYNOPSIS
+.B alevt
+.RI [ options ]
+.br
+.SH DESCRIPTION
+This manual page documents briefly the
+.B alevt
+commands.
+.PP
+\fBalevt\fP is a program to read teletext from analogue or DVB channels.
+.SH OPTIONS
+.TP
+.B \-c <channel>
+channel name (dvb only)
+.TP
+.B \-ch -child <ppp.ss>
+child window
+.TP
+.B \-cs -charset <latin-1/2/koi8-r/iso8859-7>
+character set
+.TP
+.B \-h -help
+print this page
+.TP
+.B \-o <outfile>
+path + file for all services (dvb only)
+.TP
+.B \-p -parent <ppp.ss>
+parent window
+.TP
+.B \-s -sid <sid>
+service id (dvb only)
+.TP
+.B \-t -ttpid <ttpid>
+teletext pid (dvb only)
+.TP
+.B \-v -vbi <vbidev>
+vbi device
+.TP
+Sequence: /dev/vbi; /dev/vbi0; /dev/video0; /dev/dvb/adapter0/demux0
+.TP
+Order is important! Each page number opens a new window
+with the previously given geometry, device, and display.
+.TP
+ppp.ss stands for a page number and an optional
+subpage number (example: 123.4).
+.TP
+The -child option requires a parent window. So it must
+be preceded by a parent or another child window.
+.TP
+.SH SEE ALSO
+.BR alevt-cap (1), alevt-date (1).
+.br
+.SH AUTHOR
+alevt was written by Edgar Toernig <froese@gmx.de>.
+.PP
+This manual page was written by Uwe Bugla <uwe.bugla@gmx.de>.
diff --git a/util/alevt/alevt.desktop b/util/alevt/alevt.desktop
new file mode 100644
index 0000000..c125bb9
--- /dev/null
+++ b/util/alevt/alevt.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=alevt
+Comment=Teletext Browser
+Exec=alevt
+Icon=alevt
+Terminal=false
+Type=Application
+Categories=GNOME;GTK;AudioVideo;Video;
diff --git a/util/alevt/bdf2xbm.c b/util/alevt/bdf2xbm.c
new file mode 100644
index 0000000..74d238e
--- /dev/null
+++ b/util/alevt/bdf2xbm.c
@@ -0,0 +1,212 @@
+/*
+ Simple program to convert a bdf-font to a bitmap.
+ The characters are arranged in a 32x8 matrix.
+ usage: bdf2xbm [identifier] <bdf >xbm
+ Copyright 1998,1999 by E. Toernig (froese@gmx.de)
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <stdarg.h>
+
+#define not !
+#define streq(a,b) (strcmp((a),(b)) == 0)
+
+int lineno;
+char *word[64];
+int nword;
+
+char *font = "font%dx%d";
+int w, h, bpl;
+unsigned char *bmap;
+
+
+static void error(char *fmt, ...)
+{
+ va_list args;
+
+ va_start(args, fmt);
+ fprintf(stderr, "bdf2xbm");
+ if (lineno)
+ fprintf(stderr, ":%d", lineno);
+ fprintf(stderr, ": ");
+ vfprintf(stderr, fmt, args);
+ fputc('\n', stderr);
+ exit(1);
+}
+
+
+static int nextline()
+{
+ static char buf[256];
+ char *p;
+ int i;
+
+ do
+ {
+ nword = 0;
+ if (fgets(buf, sizeof(buf), stdin) == 0)
+ return nword;
+ lineno++;
+
+ p = buf;
+ for (;;)
+ {
+ while (isspace(*p))
+ p++;
+ if (*p == 0)
+ break;
+ word[nword++] = p;
+ while (*p && not isspace(*p))
+ *p = toupper(*p), p++;
+ if (*p == 0)
+ break;
+ *p++ = 0;
+ }
+ } while (nword == 0);
+
+ for (i = nword; i < 64; ++i)
+ word[i] = "";
+ return nword;
+}
+
+
+static inline void setbit(int ch, int x, int y)
+{
+
+ int yo = ch / 32 * h + y;
+ int xo = ch % 32 * w + x;
+
+ bmap[yo * bpl + xo / 8] |= 1 << (xo % 8);
+}
+
+
+static void dobitmap(int ch, int x, int y)
+{
+ int i, j;
+
+ for (i = 0; i < y; ++i)
+ {
+ nextline();
+ if (nword > 1 || strlen(word[0]) != (x + 7) / 8 * 2)
+ error("bad BITMAP");
+ for (j = 0; j < x; ++j)
+ {
+ int c = word[0][j / 4];
+ if (c >= '0' && c <= '9')
+ c -= '0';
+ else if (c >= 'A' && c <= 'F')
+ c -= 'A' - 10;
+ else
+ error("bad hexchar in BITMAP");
+ if (c & (8 >> (j % 4)))
+ setbit(ch, j, i);
+ }
+ }
+}
+
+
+static void dochar()
+{
+ int ch = -1, x = -1, y = -1;
+
+ while (nextline())
+ {
+ if (streq(word[0], "ENDCHAR"))
+ return;
+ else if (streq(word[0], "ENCODING") && nword == 2)
+ {
+ ch = atoi(word[1]);
+ if (ch < 0 || ch > 255)
+ error("bad character code %d", ch);
+ }
+ else if (streq(word[0], "BBX") && nword == 5)
+ {
+ x = atoi(word[1]), y = atoi(word[2]);
+ if (x < 1 || x > 64 || y < 1 || y > 64)
+ error("bad BBX (%dx%d)", x, y);
+ }
+ else if (streq(word[0], "BITMAP"))
+ {
+ if (x < 0)
+ error("missing BBX");
+ if (ch < 0)
+ error("missing ENDCODING");
+ dobitmap(ch, x, y);
+ }
+ }
+ error("unexpected EOF (missing ENDCHAR)");
+}
+
+
+static void dofile()
+{
+ lineno = 0;
+ w = h = 0;
+ bmap = 0;
+
+ nextline();
+ if (nword != 2 || not streq(word[0], "STARTFONT"))
+ error("not a bdf-file");
+
+ while (nextline())
+ {
+ if (streq(word[0], "ENDFONT"))
+ return;
+ else if (streq(word[0], "FONTBOUNDINGBOX") && nword == 5)
+ {
+ if (bmap)
+ error("multiple FONTBOUNDINGBOXes!?!");
+ w = atoi(word[1]), h = atoi(word[2]);
+ if (w < 1 || w > 64 || h < 1 || h > 64)
+ error("bad bounding box %dx%d\n", w, h);
+ bpl = (w*32+7)/8; // rounding is unnecessary
+ bmap = calloc(1, bpl * h*8);
+ if (bmap == 0)
+ error("out of memory");
+ }
+ else if (streq(word[0], "STARTCHAR"))
+ {
+ if (not bmap)
+ error("no FONTBOUNDINGBOX");
+ dochar();
+ }
+ }
+ error("unexpected EOF (missing ENDFONT)");
+}
+
+
+static void writexbm()
+{
+ char buf[256];
+ int i, j;
+ unsigned char *p = bmap;
+
+ if (not bmap)
+ return;
+
+ sprintf(buf, font, w, h);
+
+ printf("#define %s_width %d\n", buf, 32 * w);
+ printf("#define %s_height %d\n", buf, 8 * h);
+ printf("static unsigned char %s_bits[] = {\n", buf);
+ for (i = 0; i < 16 * h * w / 8; ++i)
+ {
+ for (j = 0; j < 16; ++j)
+ printf("0x%02x,", *p++);
+ printf("\n");
+ }
+ printf("};\n");
+}
+
+
+int main(int argc, char **argv)
+{
+ if (argc > 1)
+ font = argv[1];
+ dofile();
+ writexbm();
+ exit(0);
+}
diff --git a/util/alevt/cache.c b/util/alevt/cache.c
new file mode 100644
index 0000000..c747448
--- /dev/null
+++ b/util/alevt/cache.c
@@ -0,0 +1,229 @@
+#include <stdlib.h>
+#include <string.h>
+#include "misc.h"
+#include "dllist.h"
+#include "cache.h"
+#include "help.h"
+
+
+static inline int hash(int pgno)
+{
+ // very simple...
+ return pgno % HASH_SIZE;
+}
+
+
+static void do_erc(struct vt_page *ovtp, struct vt_page *nvtp)
+{
+ int l, c;
+
+ if (nvtp->errors == 0 && ovtp->lines == nvtp->lines)
+ return;
+
+ for (l = 0; l < H; ++l)
+ {
+ if (~nvtp->lines & (1 << l))
+ memcpy(nvtp->data[l], ovtp->data[l], W);
+ else if (ovtp->lines & (1 << l))
+ for (c = 0; c < W; ++c)
+ if (nvtp->data[l][c] == BAD_CHAR)
+ nvtp->data[l][c] = ovtp->data[l][c];
+ }
+ nvtp->lines |= ovtp->lines;
+}
+
+
+static void cache_close(struct cache *ca)
+{
+ struct cache_page *cp;
+ int i;
+
+ for (i = 0; i < HASH_SIZE; ++i)
+ while (not dl_empty(ca->hash + i))
+ {
+ cp = PTR ca->hash[i].first;
+ dl_remove(cp->node);
+ free(cp);
+ }
+ free(ca);
+}
+
+
+static void cache_reset(struct cache *ca)
+{
+ struct cache_page *cp, *cpn;
+ int i;
+
+ for (i = 0; i < HASH_SIZE; ++i)
+ for (cp = PTR ca->hash[i].first; cpn = PTR cp->node->next; cp = cpn)
+ if (cp->page->pgno / 256 != 9) // don't remove help pages
+ {
+ dl_remove(cp->node);
+ free(cp);
+ ca->npages--;
+ }
+ memset(ca->hi_subno, 0, sizeof(ca->hi_subno[0]) * 0x900);
+}
+
+/* Get a page from the cache.
+ If subno is SUB_ANY, the newest subpage of that page is returned */
+
+
+static struct vt_page * cache_get(struct cache *ca, int pgno, int subno)
+{
+ struct cache_page *cp;
+ int h = hash(pgno);
+
+ for (cp = PTR ca->hash[h].first; cp->node->next; cp = PTR cp->node->next)
+ if (cp->page->pgno == pgno)
+ if (subno == ANY_SUB || cp->page->subno == subno)
+ {
+ // found, move to front (make it 'new')
+ dl_insert_first(ca->hash + h, dl_remove(cp->node));
+ return cp->page;
+ }
+ return 0;
+}
+
+/* Put a page in the cache.
+ If it's already there, it is updated. */
+
+
+static struct vt_page * cache_put(struct cache *ca, struct vt_page *vtp)
+{
+ struct cache_page *cp;
+ int h = hash(vtp->pgno);
+
+ for (cp = PTR ca->hash[h].first; cp->node->next; cp = PTR cp->node->next)
+ if (cp->page->pgno == vtp->pgno && cp->page->subno == vtp->subno)
+ break;
+
+ if (cp->node->next)
+ {
+ // move to front.
+ dl_insert_first(ca->hash + h, dl_remove(cp->node));
+ if (ca->erc)
+ do_erc(cp->page, vtp);
+ }
+ else
+ {
+ cp = malloc(sizeof(*cp));
+ if (cp == 0)
+ return 0;
+ if (vtp->subno >= ca->hi_subno[vtp->pgno])
+ ca->hi_subno[vtp->pgno] = vtp->subno + 1;
+ ca->npages++;
+ dl_insert_first(ca->hash + h, cp->node);
+ }
+
+ *cp->page = *vtp;
+ return cp->page;
+}
+
+/* Same as cache_get but doesn't make the found entry new */
+
+
+static struct vt_page * cache_lookup(struct cache *ca, int pgno, int subno)
+{
+ struct cache_page *cp;
+ int h = hash(pgno);
+
+ for (cp = PTR ca->hash[h].first; cp->node->next; cp = PTR cp->node->next)
+ if (cp->page->pgno == pgno)
+ if (subno == ANY_SUB || cp->page->subno == subno)
+ return cp->page;
+ return 0;
+}
+
+
+static struct vt_page * cache_foreach_pg(struct cache *ca, int pgno, int subno,
+ int dir, int (*func)(), void *data)
+{
+ struct vt_page *vtp, *s_vtp = 0;
+
+ if (ca->npages == 0)
+ return 0;
+
+ if (vtp = cache_lookup(ca, pgno, subno))
+ subno = vtp->subno;
+ else if (subno == ANY_SUB)
+ subno = dir < 0 ? 0 : 0xffff;
+
+ for (;;)
+ {
+ subno += dir;
+ while (subno < 0 || subno >= ca->hi_subno[pgno])
+ {
+ pgno += dir;
+ if (pgno < 0x100)
+ pgno = 0x9ff;
+ if (pgno > 0x9ff)
+ pgno = 0x100;
+ subno = dir < 0 ? ca->hi_subno[pgno] - 1 : 0;
+ }
+ if (vtp = cache_lookup(ca, pgno, subno))
+ {
+ if (s_vtp == vtp)
+ return 0;
+ if (s_vtp == 0)
+ s_vtp = vtp;
+ if (func(data, vtp))
+ return vtp;
+ }
+ }
+}
+
+
+static int cache_mode(struct cache *ca, int mode, int arg)
+{
+ int res = -1;
+
+ switch (mode)
+ {
+ case CACHE_MODE_ERC:
+ res = ca->erc;
+ ca->erc = arg ? 1 : 0;
+ break;
+ }
+ return res;
+}
+
+
+static struct cache_ops cops =
+{
+ cache_close,
+ cache_get,
+ cache_put,
+ cache_reset,
+ cache_foreach_pg,
+ cache_mode,
+};
+
+
+struct cache * cache_open(void)
+{
+ struct cache *ca;
+ struct vt_page *vtp;
+ int i;
+
+ if (not(ca = malloc(sizeof(*ca))))
+ goto fail1;
+
+ for (i = 0; i < HASH_SIZE; ++i)
+ dl_init(ca->hash + i);
+
+ memset(ca->hi_subno, 0, sizeof(ca->hi_subno));
+ ca->erc = 1;
+ ca->npages = 0;
+ ca->op = &cops;
+
+ for (vtp = help_pages; vtp < help_pages + nr_help_pages; vtp++)
+ cache_put(ca, vtp);
+
+ return ca;
+
+fail2:
+ free(ca);
+fail1:
+ return 0;
+}
diff --git a/util/alevt/cache.h b/util/alevt/cache.h
new file mode 100644
index 0000000..934ef9a
--- /dev/null
+++ b/util/alevt/cache.h
@@ -0,0 +1,41 @@
+#ifndef CACHE_H
+#define CACHE_H
+
+#include "vt.h"
+#include "misc.h"
+#include "dllist.h"
+
+#define HASH_SIZE 113
+
+
+struct cache
+{
+ struct dl_head hash[HASH_SIZE];
+ int erc; // error reduction circuit on
+ int npages;
+ u16 hi_subno[0x9ff + 1]; // 0:pg not in cache, 1-3f80:highest subno + 1
+ struct cache_ops *op;
+};
+
+
+struct cache_page
+{
+ struct dl_node node[1];
+ struct vt_page page[1];
+};
+
+
+struct cache_ops
+{
+ void (*close)(struct cache *ca);
+ struct vt_page *(*get)(struct cache *ca, int pgno, int subno);
+ struct vt_page *(*put)(struct cache *ca, struct vt_page *vtp);
+ void (*reset)(struct cache *ca);
+ struct vt_page *(*foreach_pg)(struct cache *ca, int pgno, int subno, int dir,
+ int (*func)(), void *data);
+ int (*mode)(struct cache *ca, int mode, int arg);
+};
+
+struct cache *cache_open(void);
+#define CACHE_MODE_ERC 1
+#endif
diff --git a/util/alevt/dllist.h b/util/alevt/dllist.h
new file mode 100644
index 0000000..f925506
--- /dev/null
+++ b/util/alevt/dllist.h
@@ -0,0 +1,55 @@
+#ifndef DLLIST_H
+#define DLLIST_H
+
+
+struct dl_node
+{
+ struct dl_node *next;
+ struct dl_node *prev;
+};
+
+
+struct dl_head
+{
+ struct dl_node *first;
+ struct dl_node *null;
+ struct dl_node *last;
+};
+
+
+static inline struct dl_head * dl_init(struct dl_head *h)
+{
+ h->first = (struct dl_node *)&h->null;
+ h->null = 0;
+ h->last = (struct dl_node *)&h->first;
+ return h;
+}
+
+
+static inline struct dl_node * dl_remove(struct dl_node *n)
+{
+ n->prev->next = n->next;
+ n->next->prev = n->prev;
+ return n;
+}
+
+
+static inline struct dl_node *
+ dl_insert_after(struct dl_node *p, struct dl_node *n)
+{
+ n->next = p->next;
+ n->prev = p;
+ p->next = n;
+ n->next->prev = n;
+ return n;
+}
+
+#define dl_empty(h) ((h)->first->next == 0)
+#define dl_insert_before(p, n) dl_insert_after((p)->prev, (n))
+#define dl_insert_first(h, n) ({ struct dl_node *_n = (n); \
+ dl_insert_before((h)->first, _n); })
+#define dl_insert_last(h, n) ({ struct dl_node *_n = (n); \
+ dl_insert_after((h)->last, _n); })
+#define dl_remove_first(h) dl_remove((h)->first) // mustn't be empty!
+#define dl_remove_last(h) dl_remove((h)->last) // mustn't be empty!
+#endif
diff --git a/util/alevt/exp-gfx.c b/util/alevt/exp-gfx.c
new file mode 100644
index 0000000..82ab218
--- /dev/null
+++ b/util/alevt/exp-gfx.c
@@ -0,0 +1,258 @@
+/* Copyright 1999 by Paul Ortyl <ortylp@from.pl> */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "lang.h"
+#include "export.h"
+#include "font.h"
+#define WW (W*CW) /* pixel width of window */
+#define WH (H*CH) /* pixel hegiht of window */
+
+
+static inline void draw_char(unsigned char * colour_matrix, int fg, int bg,
+ int c, int dbl, int _x, int _y, int sep)
+{
+ int x,y;
+ unsigned char* src= (latin1==LATIN1 ? font1_bits : font2_bits);
+ int dest_x=_x*CW;
+ int dest_y=_y*CH;
+
+ for(y=0;y<(CH<<dbl); y++)
+ {
+ for(x=0;x<CW; x++)
+ {
+ int bitnr, bit, maskbitnr, maskbit;
+ bitnr=(c/32*CH + (y>>dbl))*CW*32+ c%32*CW +x;
+ bit=(*(src+bitnr/8))&(1<<bitnr%8);
+ if (sep)
+ {
+ maskbitnr=(0xa0/32*CH + (y>>dbl))*CW*32+ 0xa0%32*CW +x;
+ maskbit=(*(src+maskbitnr/8))&(1<<maskbitnr%8);
+ *(colour_matrix+WW*(dest_y+y)+dest_x+x)=
+ (char)((bit && (!maskbit)) ? fg : bg);
+ }
+ else
+ *(colour_matrix+WW*(dest_y+y)+dest_x+x)=
+ (char)(bit ? fg : bg);
+ }
+ }
+ return;
+}
+
+
+static void prepare_colour_matrix(/*struct export *e,*/
+ struct fmt_page *pg,
+ unsigned char *colour_matrix)
+{
+ int x, y;
+ for (y = 0; y < H; ++y)
+ {
+ for (x = 0; x < W; ++x)
+ {
+ if (pg->dbl & (1<<(y-1)))
+ {
+ if (pg->data[y-1][x].attr & EA_HDOUBLE)
+ draw_char(colour_matrix, pg->data[y][x].fg,
+ pg->data[y][x].bg, pg->data[y][x].ch,
+ (0),
+ x, y,
+ ((pg->data[y][x].attr & EA_SEPARATED) ? 1 : 0)
+ );
+ }
+ else
+ {
+ draw_char(colour_matrix, pg->data[y][x].fg,
+ pg->data[y][x].bg, pg->data[y][x].ch,
+ ((pg->data[y][x].attr & EA_DOUBLE) ? 1 : 0),
+ x, y,
+ ((pg->data[y][x].attr & EA_SEPARATED) ? 1 : 0)
+ );
+ }
+ }
+ }
+ return;
+}
+
+
+static int ppm_output(struct export *e, char *name, struct fmt_page *pg);
+
+struct export_module export_ppm = // exported module definition
+{
+ "ppm", // id
+ "ppm", // extension
+ 0, // options
+ 0, // size
+ 0, // open
+ 0, // close
+ 0, // option
+ ppm_output // output
+};
+
+
+static int ppm_output(struct export *e, char *name, struct fmt_page *pg)
+{
+ FILE *fp;
+ long n;
+ static u8 rgb1[][3]={{0,0,0},
+ {1,0,0},
+ {0,1,0},
+ {1,1,0},
+ {0,0,1},
+ {1,0,1},
+ {0,1,1},
+ {1,1,1}};
+ unsigned char *colour_matrix;
+
+ if (!(colour_matrix=malloc(WH*WW)))
+ {
+ export_error("cannot allocate memory");
+ return 0;
+ }
+
+ prepare_colour_matrix(/*e,*/ pg, (unsigned char *)colour_matrix);
+ if (not(fp = fopen(name, "w")))
+ {
+ free(colour_matrix);
+ export_error("cannot create file");
+ return -1;
+ }
+ fprintf(fp,"P6 %d %d 1\n", WW, WH);
+
+ for(n=0;n<WH*WW;n++)
+ {
+ if (!fwrite(rgb1[(int) *(colour_matrix+n)], 3, 1, fp))
+ {
+ export_error("error while writting to file");
+ free(colour_matrix);
+ fclose(fp);
+ return -1;
+ }
+ }
+ free(colour_matrix);
+ fclose(fp);
+ return 0;
+}
+
+
+#ifdef WITH_PNG
+
+#include <png.h>
+static int png_open(struct export *e);
+static int png_option(struct export *e, int opt, char *arg);
+static int png_output(struct export *e, char *name, struct fmt_page *pg);
+static char *png_opts[] = // module options
+{
+ "compression=<0-9>", // set compression level
+ 0
+};
+
+struct png_data // private data in struct export
+{
+ int compression;
+};
+
+struct export_module export_png = // exported module definition
+{
+ "png", // id
+ "png", // extension
+ png_opts, // options
+ sizeof(struct png_data), // size
+ png_open, // open
+ 0, // close
+ png_option, // option
+ png_output // output
+};
+
+#define D ((struct png_data *)e->data)
+
+
+static int png_open(struct export *e)
+{
+ D->compression = Z_DEFAULT_COMPRESSION;
+ return 0;
+}
+
+
+static int png_option(struct export *e, int opt, char *arg)
+{
+ switch (opt)
+ {
+ case 1: // compression=
+ if (*arg >= '0' && *arg <= '9')
+ D->compression = *arg - '0';
+ break;
+ }
+ return 0;
+}
+
+
+static int png_output(struct export *e, char *name, struct fmt_page *pg)
+{
+ FILE *fp;
+ int x;
+ png_structp png_ptr;
+ png_infop info_ptr;
+ png_byte *row_pointers[WH];
+ static u8 rgb8[][3]={{ 0, 0, 0},
+ {255, 0, 0},
+ { 0,255, 0},
+ {255,255, 0},
+ { 0, 0,255},
+ {255, 0,255},
+ { 0,255,255},
+ {255,255,255}};
+ unsigned char *colour_matrix;
+
+ if (!(colour_matrix=malloc(WH*WW)))
+ {
+ export_error("cannot allocate memory");
+ return -1;
+ }
+ prepare_colour_matrix(/*e,*/ pg, (unsigned char *)colour_matrix);
+ if (not(fp = fopen(name, "w")))
+ {
+ free(colour_matrix);
+ export_error("cannot create file");
+ return -1;
+ }
+ png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
+ NULL, NULL, NULL);
+ if (!png_ptr)
+ {
+ free(colour_matrix);
+ fclose(fp);
+ export_error("libpng init error");
+ return -1;
+ }
+ info_ptr = png_create_info_struct(png_ptr);
+ if (!info_ptr)
+ {
+ png_destroy_write_struct(&png_ptr,
+ (png_infopp)NULL);
+ free(colour_matrix);
+ fclose(fp);
+ export_error("libpng init error");
+ return -1;
+ }
+ png_init_io(png_ptr, fp);
+ png_set_compression_level(png_ptr, D->compression);
+ png_set_compression_mem_level(png_ptr, 9);
+ png_set_compression_window_bits(png_ptr, 15);
+ png_set_IHDR(png_ptr, info_ptr, WW, WH,
+ 8, PNG_COLOR_TYPE_PALETTE , PNG_INTERLACE_NONE,
+ PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
+ png_set_PLTE(png_ptr, info_ptr,(png_color*) rgb8 , 8);
+ png_write_info(png_ptr, info_ptr);
+ for(x=0; x<WH; x++)
+ { row_pointers[x]=colour_matrix+x*WW; }
+ png_write_image(png_ptr, row_pointers);
+ png_write_end(png_ptr, info_ptr);
+ png_destroy_write_struct(&png_ptr, &info_ptr);
+ free(colour_matrix);
+ fclose(fp);
+ return 0;
+}
+
+#endif
+
diff --git a/util/alevt/exp-html.c b/util/alevt/exp-html.c
new file mode 100644
index 0000000..6c9312a
--- /dev/null
+++ b/util/alevt/exp-html.c
@@ -0,0 +1,299 @@
+/* Copyright 1999 by Paul Ortyl <ortylp@from.pl> */
+
+#include <stdio.h>
+#include <string.h>
+#include "lang.h"
+#include "export.h"
+
+static int html_open(struct export *e);
+static int html_option(struct export *e, int opt, char *arg);
+static int html_output(struct export *e, char *name, struct fmt_page *pg);
+static char *html_opts[] = // module options
+{
+ "gfx-chr=<char>", // substitute <char> for gfx-symbols
+ "bare", // no headers
+ 0
+};
+
+struct html_data // private data in struct export
+{
+ u8 gfx_chr;
+ u8 bare;
+};
+
+
+struct export_module export_html = // exported module definition
+{
+ "html", // id
+ "html", // extension
+ html_opts, // options
+ sizeof(struct html_data), // size
+ html_open, // open
+ 0, // close
+ html_option, // option
+ html_output // output
+};
+
+#define D ((struct html_data *)e->data)
+
+
+static int html_open(struct export *e)
+{
+ D->gfx_chr = '#';
+ D->bare = 0;
+ //e->reveal=1; // the default should be the same for all formats.
+ return 0;
+}
+
+
+static int html_option(struct export *e, int opt, char *arg)
+{
+ switch (opt)
+ {
+ case 1: // gfx-chr=
+ D->gfx_chr = *arg ?: ' ';
+ break;
+ case 2: // bare (no headers)
+ D->bare=1;
+ break;
+ }
+ return 0;
+}
+
+#define HTML_BLACK "#000000"
+#define HTML_RED "#FF0000"
+#define HTML_GREEN "#00FF00"
+#define HTML_YELLOW "#FFFF00"
+#define HTML_BLUE "#0000FF"
+#define HTML_MAGENTA "#FF00FF"
+#define HTML_CYAN "#00FFFF"
+#define HTML_WHITE "#FFFFFF"
+
+#undef UNREADABLE_HTML //no '\n'
+#define STRIPPED_HTML //only necessary fields in header
+
+static int html_output(struct export *e, char *name, struct fmt_page *pg)
+{
+
+ const char* html_colours[]={ HTML_BLACK,
+ HTML_RED,
+ HTML_GREEN,
+ HTML_YELLOW,
+ HTML_BLUE,
+ HTML_MAGENTA,
+ HTML_CYAN,
+ HTML_WHITE};
+ FILE *fp;
+ int x, y;
+
+#ifdef UNREADABLE_HTML
+#define HTML_NL
+#else
+#define HTML_NL fputc('\n',fp);
+#endif
+
+ if (not(fp = fopen(name, "w")))
+ {
+ export_error("cannot create file");
+ return -1;
+ }
+
+if (!D->bare)
+ {
+#ifndef STRIPPED_HTML
+ fputs("<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">",fp);
+ HTML_NL
+#endif
+ fputs("<html><head>",fp);
+ HTML_NL
+#ifndef STRIPPED_HTML
+ fputs("<meta http-equiv=\"Content-Type\" content=\"text/html;",fp);
+ switch(latin1) {
+ case LATIN1: fprintf(fp,"charset=iso-8859-1\">"); break;
+ case LATIN2: fprintf(fp,"charset=iso-8859-2\">"); break;
+ case KOI8: fprintf(fp,"charset=koi8-r\">"); break;
+ case GREEK: fprintf(fp,"charset=iso-8859-7\">"); break;
+ }
+ HTML_NL
+ fputs("<meta name=\"GENERATOR\" content=\"alevt-cap\">",fp);
+ HTML_NL
+#else
+ switch(latin1) {
+ case LATIN1: fprintf(fp,"<meta charset=iso-8859-1\">"); break;
+ case LATIN2: fprintf(fp,"<meta charset=iso-8859-2\">"); break;
+ case KOI8: fprintf(fp,"<meta charset=koi8-r\">"); break;
+ case GREEK: fprintf(fp,"<meta charset=iso-8859-7\">"); break;
+ }
+ HTML_NL
+#endif
+ fputs("</head>",fp);
+ fputs("<body text=\"#FFFFFF\" bgcolor=\"#000000\">",fp);
+ HTML_NL
+ } //bare
+
+ fputs("<tt><b>",fp);
+ HTML_NL
+
+ // write tables in form of HTML format
+ for (y = 0; y < 25; ++y)
+ {
+ int last_nonblank=0;
+ int first_unprinted=0;
+ int last_space=1;
+ // previous char was &nbsp;
+ // is used for deciding to put semicolon or not
+ int nbsp=0;
+
+ // for output filled with ' ' up to 40 chars
+ // set last_nonblank=39
+ for (x = 0 ; x < 40; ++x)
+ {
+ if (pg->data[y][x].attr & EA_GRAPHIC)
+ {pg->data[y][x].ch= D->gfx_chr;}
+
+ if (pg->data[y][x].ch!=' ')
+ {
+ last_nonblank=x;
+ }
+ }
+
+ for (x = 0 ; x <= last_nonblank ; ++x)
+ {
+ if (pg->data[y][x].ch==' ')
+ {
+ // if single space between blinking/colour words
+ // then make the space blinking/colour too
+ if ((x)&&(x<39))
+ {
+ if ((pg->data[y][x-1].ch!=' ')
+ &&(pg->data[y][x+1].ch!=' ')
+ &&(pg->data[y][x-1].attr & EA_BLINK)
+ &&(pg->data[y][x+1].attr & EA_BLINK))
+ {pg->data[y][x].attr |= EA_BLINK;}
+ else
+ {pg->data[y][x].attr &= ~EA_BLINK;}
+
+ if ((pg->data[y][x-1].ch!=' ')
+ &&(pg->data[y][x+1].ch!=' ')
+ &&(pg->data[y][x-1].fg==pg->data[y][x+1].fg))
+ {pg->data[y][x].fg=pg->data[y][x-1].fg;}
+ else
+ pg->data[y][x].fg=7;
+ }
+ else
+ {
+ pg->data[y][x].attr &= ~EA_BLINK;
+ pg->data[y][x].fg=7;
+ }
+ }
+ else
+ {
+ // if foreground is black set the foreground to previous
+ // background colour to let it be visible
+ if (!pg->data[y][x].fg)
+ {pg->data[y][x].fg=pg->data[y][x].bg;}
+ }
+ //check if attributes changed,
+ //if yes then print chars and update first_unprinted
+ //if not then go to next char
+ if (x)
+ {
+ if (((
+ (pg->data[y][x].attr & EA_BLINK)
+ ==
+ (pg->data[y][x-1].attr & EA_BLINK)
+ )
+ &&
+ (
+ pg->data[y][x].fg == pg->data[y][x-1].fg
+ ))
+ &&(x!=last_nonblank))
+
+ { continue; }
+ }
+ else continue;
+
+ {
+ int z=first_unprinted;
+ for(;(pg->data[y][z].ch==' ') && (z<x);z++)
+ {
+ if (last_space)
+ {
+ fprintf(fp,"&nbsp");
+ last_space=0;
+ nbsp=1;
+ }
+ else
+ {
+ fputc(' ',fp);
+ last_space=1;
+ nbsp=0;
+ }
+ }
+
+ first_unprinted=z;
+
+ if (z==x) continue;
+
+ if (pg->data[y][first_unprinted].attr & EA_BLINK)
+ {
+ fprintf(fp,"<blink>");
+ nbsp=0;
+ }
+
+ if (pg->data[y][first_unprinted].fg!=7)
+ {
+ fprintf(fp,"<font color=\"%s\">",
+ html_colours[pg->data[y][first_unprinted].fg]);
+ nbsp=0;
+ }
+ for(;(z<x)||(z==last_nonblank);z++)
+ {
+
+ if (pg->data[y][z].ch==' ')
+ {
+ for(;(pg->data[y][z].ch==' ') && (z<x);z++)
+ {
+ if (last_space)
+ {
+ fprintf(fp,"&nbsp");
+ last_space=0;
+ nbsp=1;
+ }
+ else
+ {
+ fputc(' ',fp);
+ last_space=1;
+ nbsp=0;
+ }
+ }
+ z--;
+ }
+ else
+ {
+ //if previous nbsp --> put semicolon!!!
+ if (nbsp) fputc(';',fp);
+ fputc(pg->data[y][z].ch,fp);
+ last_space=0;
+ nbsp=0;
+ }
+ }
+ if (pg->data[y][first_unprinted].fg!=7)
+ {
+ fprintf(fp,"</font>");
+ }
+ if (pg->data[y][first_unprinted].attr & EA_BLINK)
+ fprintf(fp,"</blink>");
+
+ first_unprinted=z;
+ }
+ }
+ fputs("<br>",fp);
+ HTML_NL
+ }
+ fputs("</b></tt>",fp);
+ if (!D->bare)
+ fputs("</body></html>",fp);
+ fclose(fp);
+ return 0;
+}
diff --git a/util/alevt/exp-txt.c b/util/alevt/exp-txt.c
new file mode 100644
index 0000000..8009c17
--- /dev/null
+++ b/util/alevt/exp-txt.c
@@ -0,0 +1,226 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "os.h"
+#include "export.h"
+
+static int txt_open(struct export *e);
+static int txt_option(struct export *e, int opt, char *arg);
+static int txt_output(struct export *e, char *name, struct fmt_page *pg);
+static char *txt_opts[] = // module options
+{
+ "color", // generate ansi color codes (and attributes)
+ "gfx-chr=<char>", // substitute <char> for gfx-symbols
+ "fg=<0-7|none>", // assume term has <x> as foreground color
+ "bg=<0-7|none>", // assume term has <x> as background color
+ "lines=<1-25>", // output 24 or 25 lines
+ 0
+};
+
+
+struct txt_data // private data in struct export
+{
+ u8 color;
+ u8 gfx_chr;
+ u8 def_fg;
+ u8 def_bg;
+ int endline;
+ struct fmt_char curr[1];
+ FILE *fp;
+};
+
+
+struct export_module export_txt = // exported module definition
+{
+ "ascii", // id
+ "txt", // extension
+ txt_opts, // options
+ sizeof(struct txt_data), // data size
+ txt_open, // open
+ 0, // close
+ txt_option, // option
+ txt_output, // output
+};
+
+
+struct export_module export_ansi = // exported module definition
+{
+ "ansi", // id
+ "txt", // extension
+ txt_opts, // options
+ sizeof(struct txt_data), // data size
+ txt_open, // open
+ 0, // close
+ txt_option, // option
+ txt_output, // output
+};
+
+#define D ((struct txt_data *)e->data)
+
+
+char * my_stpcpy(char *dst, const char *src)
+{
+ while (*dst = *src++)
+ dst++;
+ return dst;
+}
+
+
+static int txt_open(struct export *e)
+{
+ D->gfx_chr = '#';
+ D->def_fg = -1;
+ D->def_bg = -1;
+ D->endline = H;
+ if (e->mod == &export_ansi)
+ D->color = 1;
+ return 0;
+}
+
+
+static int txt_option(struct export *e, int opt, char *arg)
+{
+ switch (opt)
+ {
+ case 1: // color
+ D->color = 1;
+ break;
+ case 2: // gfx-chr=
+ D->gfx_chr = *arg ?: ' ';
+ break;
+ case 3: // fg=
+ D->def_fg = *arg - '0';
+ break;
+ case 4: // bg=
+ D->def_bg = *arg - '0';
+ break;
+ case 5: // lines=
+ D->endline = atoi(arg);
+ if (D->endline < 1 || D->endline > H)
+ {
+ export_error("lines: invalid number");
+ return 1;
+ }
+ }
+ return 0;
+}
+
+
+static void put_attr(struct export *e, struct fmt_char *new)
+{
+ char buf[512];
+ char *p = buf;
+ int fg, bg, attr;
+ int reset = 0;
+
+ if (D->color)
+ {
+ fg = D->curr->fg ^ new->fg;
+ bg = D->curr->bg ^ new->bg;
+ attr = (D->curr->attr ^ new->attr) & (EA_BLINK | EA_DOUBLE);
+
+ if (fg | bg | attr)
+ {
+ if (~new->attr & attr) // reset some attributes -> reset all.
+ reset = 1;
+ if (fg && new->fg == D->def_fg) // switch to def fg -> reset all
+ reset = 1;
+ if (bg && new->bg == D->def_bg) // switch to def bg -> reset all
+ reset = 1;
+
+ p = my_stpcpy(buf, "\e[");
+ if (reset)
+ {
+ p = my_stpcpy(p, ";"); // "0;" but 0 isn't neccesary
+ attr = -1; // set all attributes
+ fg = new->fg ^ D->def_fg; // set fg if != default fg
+ bg = new->bg ^ D->def_bg; // set bg if != default bg
+ }
+ if (attr & new->attr & EA_BLINK)
+ p = my_stpcpy(p, "5;"); // blink
+ if (attr & new->attr & EA_DOUBLE)
+ p = my_stpcpy(p, "1;"); // bold
+ if (fg)
+ p += sprintf(p, "%d;", new->fg + 30); // fg-color
+ if (bg)
+ p += sprintf(p, "%d;", new->bg + 40); // bg-color
+ p[-1] = 'm'; // replace last ;
+ *D->curr = *new;
+ }
+ }
+ *p++ = new->ch;
+ *p = 0;
+ fputs(buf, D->fp);
+}
+
+
+static int txt_output(struct export *e, char *name, struct fmt_page *pg)
+{
+ struct fmt_char def_c[1];
+ struct fmt_char l[W+2];
+ #define L (l+1)
+ int x, y;
+
+ D->fp = fopen(name, "w");
+ if (not D->fp)
+ {
+ export_error("cannot create file");
+ return -1;
+ }
+
+ /* initialize default colors. These have to be restored at EOL. */
+ def_c->ch = '\n';
+ def_c->fg = D->def_fg;
+ def_c->bg = D->def_bg;
+ def_c->attr = E_DEF_ATTR;
+ *D->curr = *def_c;
+ L[-1] = L[W] = *def_c;
+
+ for (y = 0; y < D->endline; y++)
+ if (~pg->hid & (1 << y)) // not hidden
+ {
+ // character conversion
+ for (x = 0; x < W; ++x)
+ {
+ struct fmt_char c = pg->data[y][x];
+
+ switch (c.ch)
+ {
+ case 0x00: case 0xa0: c.ch = ' '; break;
+ case 0x7f: c.ch = '*'; break;
+ case BAD_CHAR: c.ch = '?'; break;
+ default:
+ if (c.attr & EA_GRAPHIC)
+ c.ch = D->gfx_chr;
+ break;
+ }
+ L[x] = c;
+ }
+
+ if (D->color)
+ {
+ // optimize color and attribute changes
+ // delay fg and attr changes as far as possible
+ for (x = 0; x < W; ++x)
+ if (L[x].ch == ' ')
+ {
+ L[x].fg = L[x-1].fg;
+ l[x].attr = L[x-1].attr;
+ }
+
+ // move fg and attr changes to prev bg change point
+ for (x = W-1; x >= 0; x--)
+ if (L[x].ch == ' ' && L[x].bg == L[x+1].bg)
+ {
+ L[x].fg = L[x+1].fg;
+ L[x].attr = L[x+1].attr;
+ }
+ }
+
+ // now emit the whole line (incl EOL)
+ for (x = 0; x < W+1; ++x)
+ put_attr(e, L + x);
+ }
+ fclose(D->fp);
+ return 0;
+}
diff --git a/util/alevt/export.c b/util/alevt/export.c
new file mode 100644
index 0000000..1eb8ea9
--- /dev/null
+++ b/util/alevt/export.c
@@ -0,0 +1,364 @@
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "vt.h"
+#include "misc.h"
+#include "export.h"
+
+extern struct export_module export_txt;
+extern struct export_module export_ansi;
+extern struct export_module export_html;
+extern struct export_module export_png;
+extern struct export_module export_ppm;
+struct export_module *modules[] =
+{
+ &export_txt,
+ &export_ansi,
+ &export_html,
+ &export_ppm,
+#ifdef WITH_PNG
+ &export_png,
+#endif
+ 0
+};
+
+
+static char *glbl_opts[] =
+{
+ "reveal", // show hidden text
+ "hide", // don't show hidden text (default)
+ 0
+};
+
+static char errbuf[64];
+
+
+void export_error(char *str, ...)
+{
+ va_list args;
+
+ va_start(args, str);
+ vsnprintf(errbuf, sizeof(errbuf)-1, str, args);
+}
+
+
+char * export_errstr(void)
+{
+ return errbuf;
+}
+
+
+static int find_opt(char **opts, char *opt, char *arg)
+{
+ int err = 0;
+ char buf[256];
+ char **oo, *o, *a;
+
+ if (oo = opts)
+ while (o = *oo++)
+ {
+ if (a = strchr(o, '='))
+ {
+ a = buf + (a - o);
+ o = strcpy(buf, o);
+ *a++ = 0;
+ }
+ if (strcasecmp(o, opt) == 0)
+ {
+ if ((a != 0) == (arg != 0))
+ return oo - opts;
+ err = -1;
+ }
+ }
+ return err;
+}
+
+
+struct export * export_open(char *fmt)
+{
+ struct export_module **eem, *em;
+ struct export *e;
+ char *opt, *optend, *optarg;
+ int opti;
+
+ if (fmt = strdup(fmt))
+ {
+ if (opt = strchr(fmt, ','))
+ *opt++ = 0;
+ for (eem = modules; em = *eem; eem++)
+ if (strcasecmp(em->fmt_name, fmt) == 0)
+ break;
+ if (em)
+ {
+ if (e = malloc(sizeof(*e) + em->local_size))
+ {
+ e->mod = em;
+ e->fmt_str = fmt;
+ e->reveal = 0;
+ memset(e + 1, 0, em->local_size);
+ if (not em->open || em->open(e) == 0)
+ {
+ for (; opt; opt = optend)
+ {
+ if (optend = strchr(opt, ','))
+ *optend++ = 0;
+ if (not *opt)
+ continue;
+ if (optarg = strchr(opt, '='))
+ *optarg++ = 0;
+ if ((opti = find_opt(glbl_opts, opt, optarg)) > 0)
+ {
+ if (opti == 1) // reveal
+ e->reveal = 1;
+ else if (opti == 2) // hide
+ e->reveal = 0;
+ }
+ else if (opti == 0 &&
+ (opti = find_opt(em->options, opt, optarg)) > 0)
+ {
+ if (em->option(e, opti, optarg))
+ break;
+ }
+ else
+ {
+ if (opti == 0)
+ export_error("%s: unknown option", opt);
+ else if (optarg)
+ export_error("%s: takes no arg", opt);
+ else
+ export_error("%s: missing arg", opt);
+ break;
+ }
+ }
+ if (opt == 0)
+ return e;
+
+ if (em->close)
+ em->close(e);
+ }
+ free(e);
+ }
+ else
+ export_error("out of memory");
+ }
+ else
+ export_error("unknown format: %s", fmt);
+ free(fmt);
+ }
+ else
+ export_error("out of memory");
+ return 0;
+}
+
+
+void export_close(struct export *e)
+{
+ if (e->mod->close)
+ e->mod->close(e);
+ free(e->fmt_str);
+ free(e);
+}
+
+
+static char * hexnum(char *buf, unsigned int num)
+{
+ char *p = buf + 5;
+
+ num &= 0xffff;
+ *--p = 0;
+ do
+ {
+ *--p = "0123456789abcdef"[num % 16];
+ num /= 16;
+ } while (num);
+ return p;
+}
+
+
+static char * adjust(char *p, char *str, char fill, int width)
+{
+ int l = width - strlen(str);
+
+ while (l-- > 0)
+ *p++ = fill;
+ while (*p = *str++)
+ p++;
+ return p;
+}
+
+
+char * export_mkname(struct export *e, char *fmt, struct vt_page *vtp, char *usr)
+{
+ char bbuf[1024];
+ char *p = bbuf;
+
+ while (*p = *fmt++)
+ if (*p++ == '%')
+ {
+ char buf[32], buf2[32];
+ int width = 0;
+
+ p--;
+ while (*fmt >= '0' && *fmt <= '9')
+ width = width*10 + *fmt++ - '0';
+
+ switch (*fmt++)
+ {
+ case '%':
+ p = adjust(p, "%", '%', width);
+ break;
+ case 'e': // extension
+ p = adjust(p, e->mod->extension, '.', width);
+ break;
+ case 'p': // pageno[.subno]
+ if (vtp->subno)
+ p = adjust(p,strcat(strcat(hexnum(buf, vtp->pgno),
+ "."), hexnum(buf2, vtp->subno)), ' ', width);
+ else
+ p = adjust(p, hexnum(buf, vtp->pgno), ' ', width);
+ break;
+ case 'S': // subno
+ p = adjust(p, hexnum(buf, vtp->subno), '0', width);
+ break;
+ case 'P': // pgno
+ p = adjust(p, hexnum(buf, vtp->pgno), '0', width);
+ break;
+ case 's': // user strin
+ p = adjust(p, usr, ' ', width);
+ break;
+ //TODO: add date, channel name, ...
+ }
+ }
+ p = strdup(bbuf);
+ if (not p)
+ export_error("out of memory");
+ return p;
+}
+
+
+static void fmt_page(struct export *e, struct fmt_page *pg, struct vt_page *vtp)
+{
+ char buf[16];
+ int x, y;
+ u8 *p = vtp->data[0];
+
+ pg->dbl = 0;
+
+ sprintf(buf, "\2%x.%02x\7", vtp->pgno, vtp->subno & 0xff);
+
+ for (y = 0; y < H; y++)
+ {
+ struct fmt_char c;
+ int last_ch = ' ';
+ int dbl = 0, hold = 0;
+
+ c.fg = 7;
+ c.bg = 0;
+ c.attr = 0;
+
+ for (x = 0; x < W; ++x)
+ {
+ c.ch = *p++;
+ if (y == 0 && x < 8)
+ c.ch = buf[x];
+ switch (c.ch)
+ {
+ case 0x00 ... 0x07: /* alpha + fg color */
+ c.fg = c.ch & 7;
+ c.attr &= ~(EA_GRAPHIC | EA_CONCEALED);
+ goto ctrl;
+ case 0x08: /* flash */
+ c.attr |= EA_BLINK;
+ goto ctrl;
+ case 0x09: /* steady */
+ c.attr &= ~EA_BLINK;
+ goto ctrl;
+ case 0x0a: /* end box */
+ case 0x0b: /* start box */
+ goto ctrl;
+ case 0x0c: /* normal height */
+ c.attr &= EA_DOUBLE;
+ goto ctrl;
+ case 0x0d: /* double height */
+ if (y < H-2) /* ignored on last 2 lines */
+ {
+ c.attr |= EA_DOUBLE;
+ dbl = 1;
+ }
+ goto ctrl;
+ case 0x10 ... 0x17: /* gfx + fg color */
+ c.fg = c.ch & 7;
+ c.attr |= EA_GRAPHIC;
+ c.attr &= ~EA_CONCEALED;
+ goto ctrl;
+ case 0x18: /* conceal */
+ c.attr |= EA_CONCEALED;
+ goto ctrl;
+ case 0x19: /* contiguous gfx */
+ c.attr &= ~EA_SEPARATED;
+ goto ctrl;
+ case 0x1a: /* separate gfx */
+ c.attr |= EA_SEPARATED;
+ goto ctrl;
+ case 0x1c: /* black bg */
+ c.bg = 0;
+ goto ctrl;
+ case 0x1d: /* new bg */
+ c.bg = c.fg;
+ goto ctrl;
+ case 0x1e: /* hold gfx */
+ hold = 1;
+ goto ctrl;
+ case 0x1f: /* release gfx */
+ hold = 0;
+ goto ctrl;
+
+ case 0x0e: /* SO */
+ case 0x0f: /* SI */
+ case 0x1b: /* ESC */
+ c.ch = ' ';
+ break;
+
+ ctrl:
+ c.ch = ' ';
+ if (hold && (c.attr & EA_GRAPHIC))
+ c.ch = last_ch;
+ break;
+ }
+ if (c.attr & EA_GRAPHIC)
+ if ((c.ch & 0xa0) == 0x20)
+ {
+ last_ch = c.ch;
+ c.ch += (c.ch & 0x40) ? 32 : -32;
+ }
+ if (c.attr & EA_CONCEALED)
+ if (not e->reveal)
+ c.ch = ' ';
+ pg->data[y][x] = c;
+ }
+ if (dbl)
+ {
+ pg->dbl |= 1 << y;
+ for (x = 0; x < W; ++x)
+ {
+ if (~pg->data[y][x].attr & EA_DOUBLE)
+ pg->data[y][x].attr |= EA_HDOUBLE;
+ pg->data[y+1][x] = pg->data[y][x];
+ pg->data[y+1][x].ch = ' ';
+ }
+ y++;
+ p += W;
+ }
+ }
+ pg->hid = pg->dbl << 1;
+}
+
+
+int export(struct export *e, struct vt_page *vtp, char *name)
+{
+ struct fmt_page pg[1];
+
+ fmt_page(e, pg, vtp);
+ return e->mod->output(e, name, pg);
+}
diff --git a/util/alevt/export.h b/util/alevt/export.h
new file mode 100644
index 0000000..a08875c
--- /dev/null
+++ b/util/alevt/export.h
@@ -0,0 +1,66 @@
+#ifndef EXPORT_H
+#define EXPORT_H
+
+#include "vt.h"
+#include "misc.h"
+
+
+struct fmt_char
+{
+ u8 ch, fg, bg, attr;
+};
+
+#define EA_DOUBLE 1 // double height char
+#define EA_HDOUBLE 2 // single height char in double height line
+#define EA_BLINK 4 // blink
+#define EA_CONCEALED 8 // concealed
+#define EA_GRAPHIC 16 // graphic symbol
+#define EA_SEPARATED 32 // use separated graphic symbol
+
+#define E_DEF_FG 7
+#define E_DEF_BG 0
+#define E_DEF_ATTR 0
+
+
+struct fmt_page
+{
+ struct vt_page *vtp;
+ u32 dbl, hid;
+ struct fmt_char data[H][W];
+};
+
+
+struct export
+{
+ struct export_module *mod; // module type
+ char *fmt_str; // saved option string (splitted)
+ // global options
+ int reveal; // reveal hidden chars
+ // local data for module's use. initialized to 0.
+ struct { int dummy; } data[0];
+};
+
+
+struct export_module
+{
+ char *fmt_name; // the format type name (ASCII/HTML/PNG/...)
+ char *extension; // the default file name extension
+ char **options; // module options
+ int local_size;
+ int (*open)(struct export *fmt);
+ void (*close)(struct export *fmt);
+ int (*option)(struct export *fmt, int opt, char *arg);
+ int (*output)(struct export *fmt, char *name, struct fmt_page *pg);
+};
+
+
+extern struct export_module *modules[]; // list of modules (for help msgs)
+void export_error(char *str, ...); // set error
+char *export_errstr(void); // return last error
+char *export_mkname(struct export *e, char *fmt, struct vt_page *vtp, char *usr);
+
+
+struct export *export_open(char *fmt);
+void export_close(struct export *e);
+int export(struct export *e, struct vt_page *vtp, char *user_str);
+#endif
diff --git a/util/alevt/fdset.c b/util/alevt/fdset.c
new file mode 100644
index 0000000..99edac4
--- /dev/null
+++ b/util/alevt/fdset.c
@@ -0,0 +1,97 @@
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/time.h>
+#include "dllist.h"
+#include "misc.h"
+#include "fdset.h"
+
+struct fdset fds[1]; /* global fd list */
+
+
+int fdset_init(struct fdset *fds)
+{
+ dl_init(fds->list);
+ fds->del_count = 0;
+ return 0;
+}
+
+
+int fdset_add_fd(struct fdset *fds, int fd, void *handler, void *data)
+{
+ struct fdset_node *fn;
+
+ if (fd < 0)
+ return -1;
+ if (handler == 0)
+ return -1;
+
+ for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next)
+ if (fn->fd == fd)
+ return -1;
+
+ if (not(fn = malloc(sizeof(*fn))))
+ return -1;
+ fn->fd = fd;
+ fn->handler = handler;
+ fn->data = data;
+ dl_insert_last(fds->list, fn->node);
+ return 0;
+}
+
+
+int fdset_del_fd(struct fdset *fds, int fd)
+{
+ struct fdset_node *fn;
+
+ for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next)
+ if (fn->fd == fd)
+ {
+ dl_remove(fn->node);
+ free(fn);
+ fds->del_count++;
+ return 0;
+ }
+ return -1;
+}
+
+
+int fdset_select(struct fdset *fds, int timeout)
+{
+ struct fdset_node *fn;
+ fd_set rfds[1];
+ struct timeval tv[1], *tvp = 0;
+ int max_fd, x, del_count;
+
+ FD_ZERO(rfds);
+ max_fd = 0;
+ for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next)
+ {
+ FD_SET(fn->fd, rfds);
+ if (fn->fd >= max_fd)
+ max_fd = fn->fd + 1;
+ }
+
+ if (timeout >= 0)
+ {
+ tv->tv_sec = timeout/1000;
+ tv->tv_usec = timeout%1000*1000;
+ tvp = tv;
+ }
+
+ x = select(max_fd, rfds, 0, 0, tvp);
+ if (x <= 0)
+ return x;
+
+ /* A little bit complicated. A called handler may modify the fdset... */
+restart:
+ del_count = fds->del_count;
+ for (fn = PTR fds->list->first; fn->node->next; fn = PTR fn->node->next)
+ if (FD_ISSET(fn->fd, rfds))
+ {
+ FD_CLR(fn->fd, rfds);
+ fn->handler(fn->data, fn->fd);
+ if (fds->del_count != del_count)
+ goto restart;
+ }
+ return 1;
+}
diff --git a/util/alevt/fdset.h b/util/alevt/fdset.h
new file mode 100644
index 0000000..4b786e6
--- /dev/null
+++ b/util/alevt/fdset.h
@@ -0,0 +1,28 @@
+#ifndef FDSET_H
+#define FDSET_H
+
+#include "dllist.h"
+
+
+struct fdset
+{
+ struct dl_head list[1];
+ int del_count;
+};
+
+
+struct fdset_node /*internal*/
+{
+ struct dl_node node[1];
+ int fd;
+ void (*handler)(void *data, int fd);
+ void *data;
+};
+
+extern struct fdset fds[1]; /* global fd list */
+
+int fdset_init(struct fdset *fds);
+int fdset_add_fd(struct fdset *fds, int fd, void *handler, void *data);
+int fdset_del_fd(struct fdset *fds, int fd);
+int fdset_select(struct fdset *fds, int timeout /*millisec*/);
+#endif
diff --git a/util/alevt/font.c b/util/alevt/font.c
new file mode 100644
index 0000000..da0e448
--- /dev/null
+++ b/util/alevt/font.c
@@ -0,0 +1,5 @@
+#define static /* I want them global */
+#include "font1.xbm"
+#include "font2.xbm"
+#include "font3.xbm"
+#include "font4.xbm"
diff --git a/util/alevt/font.h b/util/alevt/font.h
new file mode 100644
index 0000000..c17c4bc
--- /dev/null
+++ b/util/alevt/font.h
@@ -0,0 +1,19 @@
+#ifndef FONT_H
+#define FONT_H
+
+#include "fontsize.h" /* the #defines from font?.xbm */
+
+#if font1_width != font2_width || font1_height != font2_height
+#error different font sizes.
+#endif
+
+extern unsigned char font1_bits[];
+extern unsigned char font2_bits[];
+extern unsigned char font3_bits[];
+extern unsigned char font4_bits[];
+
+#define font_width font1_width
+#define font_height font1_height
+#define CW (font_width/32) /* pixel width of a character */
+#define CH (font_height/8) /* pixel height of a character */
+#endif
diff --git a/util/alevt/hamm.c b/util/alevt/hamm.c
new file mode 100644
index 0000000..c44a902
--- /dev/null
+++ b/util/alevt/hamm.c
@@ -0,0 +1,229 @@
+#include "vt.h"
+#include "hamm.h"
+
+// table to decode hamm8/4 encoded bytes.
+// the low 4 bits are the (corrected) data bits
+// bit 8 is set if there was a single bit error
+// bit 12 is set if there was an uncorrectable error
+
+// the idea: you may add up to 15 words and get the
+// number of single bit errors in b8-b11 and the number
+// of double errors in b12-b15
+
+
+static unsigned short hammtab[256] =
+{
+ 0x0101, 0x100f, 0x0001, 0x0101, 0x100f, 0x0100, 0x0101, 0x100f,
+ 0x100f, 0x0102, 0x0101, 0x100f, 0x010a, 0x100f, 0x100f, 0x0107,
+ 0x100f, 0x0100, 0x0101, 0x100f, 0x0100, 0x0000, 0x100f, 0x0100,
+ 0x0106, 0x100f, 0x100f, 0x010b, 0x100f, 0x0100, 0x0103, 0x100f,
+ 0x100f, 0x010c, 0x0101, 0x100f, 0x0104, 0x100f, 0x100f, 0x0107,
+ 0x0106, 0x100f, 0x100f, 0x0107, 0x100f, 0x0107, 0x0107, 0x0007,
+ 0x0106, 0x100f, 0x100f, 0x0105, 0x100f, 0x0100, 0x010d, 0x100f,
+ 0x0006, 0x0106, 0x0106, 0x100f, 0x0106, 0x100f, 0x100f, 0x0107,
+ 0x100f, 0x0102, 0x0101, 0x100f, 0x0104, 0x100f, 0x100f, 0x0109,
+ 0x0102, 0x0002, 0x100f, 0x0102, 0x100f, 0x0102, 0x0103, 0x100f,
+ 0x0108, 0x100f, 0x100f, 0x0105, 0x100f, 0x0100, 0x0103, 0x100f,
+ 0x100f, 0x0102, 0x0103, 0x100f, 0x0103, 0x100f, 0x0003, 0x0103,
+ 0x0104, 0x100f, 0x100f, 0x0105, 0x0004, 0x0104, 0x0104, 0x100f,
+ 0x100f, 0x0102, 0x010f, 0x100f, 0x0104, 0x100f, 0x100f, 0x0107,
+ 0x100f, 0x0105, 0x0105, 0x0005, 0x0104, 0x100f, 0x100f, 0x0105,
+ 0x0106, 0x100f, 0x100f, 0x0105, 0x100f, 0x010e, 0x0103, 0x100f,
+ 0x100f, 0x010c, 0x0101, 0x100f, 0x010a, 0x100f, 0x100f, 0x0109,
+ 0x010a, 0x100f, 0x100f, 0x010b, 0x000a, 0x010a, 0x010a, 0x100f,
+ 0x0108, 0x100f, 0x100f, 0x010b, 0x100f, 0x0100, 0x010d, 0x100f,
+ 0x100f, 0x010b, 0x010b, 0x000b, 0x010a, 0x100f, 0x100f, 0x010b,
+ 0x010c, 0x000c, 0x100f, 0x010c, 0x100f, 0x010c, 0x010d, 0x100f,
+ 0x100f, 0x010c, 0x010f, 0x100f, 0x010a, 0x100f, 0x100f, 0x0107,
+ 0x100f, 0x010c, 0x010d, 0x100f, 0x010d, 0x100f, 0x000d, 0x010d,
+ 0x0106, 0x100f, 0x100f, 0x010b, 0x100f, 0x010e, 0x010d, 0x100f,
+ 0x0108, 0x100f, 0x100f, 0x0109, 0x100f, 0x0109, 0x0109, 0x0009,
+ 0x100f, 0x0102, 0x010f, 0x100f, 0x010a, 0x100f, 0x100f, 0x0109,
+ 0x0008, 0x0108, 0x0108, 0x100f, 0x0108, 0x100f, 0x100f, 0x0109,
+ 0x0108, 0x100f, 0x100f, 0x010b, 0x100f, 0x010e, 0x0103, 0x100f,
+ 0x100f, 0x010c, 0x010f, 0x100f, 0x0104, 0x100f, 0x100f, 0x0109,
+ 0x010f, 0x100f, 0x000f, 0x010f, 0x100f, 0x010e, 0x010f, 0x100f,
+ 0x0108, 0x100f, 0x100f, 0x0105, 0x100f, 0x010e, 0x010d, 0x100f,
+ 0x100f, 0x010e, 0x010f, 0x100f, 0x010e, 0x000e, 0x100f, 0x010e,
+};
+
+#if 0 // this information is contained in hamm24par bit 5
+// simple parity table (sum of 1 bits modulo 2)
+
+
+static char odd_parity[256] =
+{
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0
+};
+#endif
+
+// this table generates the parity checks for hamm24/18 decoding.
+// bit 0 is for test A, 1 for B, ...
+// thanks to R. Gancarz for this fine table *g*
+
+
+static char hamm24par[3][256] =
+{
+ { // parities of first byte
+ 0, 33, 34, 3, 35, 2, 1, 32, 36, 5, 6, 39, 7, 38, 37, 4,
+ 37, 4, 7, 38, 6, 39, 36, 5, 1, 32, 35, 2, 34, 3, 0, 33,
+ 38, 7, 4, 37, 5, 36, 39, 6, 2, 35, 32, 1, 33, 0, 3, 34,
+ 3, 34, 33, 0, 32, 1, 2, 35, 39, 6, 5, 36, 4, 37, 38, 7,
+ 39, 6, 5, 36, 4, 37, 38, 7, 3, 34, 33, 0, 32, 1, 2, 35,
+ 2, 35, 32, 1, 33, 0, 3, 34, 38, 7, 4, 37, 5, 36, 39, 6,
+ 1, 32, 35, 2, 34, 3, 0, 33, 37, 4, 7, 38, 6, 39, 36, 5,
+ 36, 5, 6, 39, 7, 38, 37, 4, 0, 33, 34, 3, 35, 2, 1, 32,
+ 40, 9, 10, 43, 11, 42, 41, 8, 12, 45, 46, 15, 47, 14, 13, 44,
+ 13, 44, 47, 14, 46, 15, 12, 45, 41, 8, 11, 42, 10, 43, 40, 9,
+ 14, 47, 44, 13, 45, 12, 15, 46, 42, 11, 8, 41, 9, 40, 43, 10,
+ 43, 10, 9, 40, 8, 41, 42, 11, 15, 46, 45, 12, 44, 13, 14, 47,
+ 15, 46, 45, 12, 44, 13, 14, 47, 43, 10, 9, 40, 8, 41, 42, 11,
+ 42, 11, 8, 41, 9, 40, 43, 10, 14, 47, 44, 13, 45, 12, 15, 46,
+ 41, 8, 11, 42, 10, 43, 40, 9, 13, 44, 47, 14, 46, 15, 12, 45,
+ 12, 45, 46, 15, 47, 14, 13, 44, 40, 9, 10, 43, 11, 42, 41, 8
+ }, { // parities of second byte
+ 0, 41, 42, 3, 43, 2, 1, 40, 44, 5, 6, 47, 7, 46, 45, 4,
+ 45, 4, 7, 46, 6, 47, 44, 5, 1, 40, 43, 2, 42, 3, 0, 41,
+ 46, 7, 4, 45, 5, 44, 47, 6, 2, 43, 40, 1, 41, 0, 3, 42,
+ 3, 42, 41, 0, 40, 1, 2, 43, 47, 6, 5, 44, 4, 45, 46, 7,
+ 47, 6, 5, 44, 4, 45, 46, 7, 3, 42, 41, 0, 40, 1, 2, 43,
+ 2, 43, 40, 1, 41, 0, 3, 42, 46, 7, 4, 45, 5, 44, 47, 6,
+ 1, 40, 43, 2, 42, 3, 0, 41, 45, 4, 7, 46, 6, 47, 44, 5,
+ 44, 5, 6, 47, 7, 46, 45, 4, 0, 41, 42, 3, 43, 2, 1, 40,
+ 48, 25, 26, 51, 27, 50, 49, 24, 28, 53, 54, 31, 55, 30, 29, 52,
+ 29, 52, 55, 30, 54, 31, 28, 53, 49, 24, 27, 50, 26, 51, 48, 25,
+ 30, 55, 52, 29, 53, 28, 31, 54, 50, 27, 24, 49, 25, 48, 51, 26,
+ 51, 26, 25, 48, 24, 49, 50, 27, 31, 54, 53, 28, 52, 29, 30, 55,
+ 31, 54, 53, 28, 52, 29, 30, 55, 51, 26, 25, 48, 24, 49, 50, 27,
+ 50, 27, 24, 49, 25, 48, 51, 26, 30, 55, 52, 29, 53, 28, 31, 54,
+ 49, 24, 27, 50, 26, 51, 48, 25, 29, 52, 55, 30, 54, 31, 28, 53,
+ 28, 53, 54, 31, 55, 30, 29, 52, 48, 25, 26, 51, 27, 50, 49, 24
+ }, { // parities of third byte
+ 63, 14, 13, 60, 12, 61, 62, 15, 11, 58, 57, 8, 56, 9, 10, 59,
+ 10, 59, 56, 9, 57, 8, 11, 58, 62, 15, 12, 61, 13, 60, 63, 14,
+ 9, 56, 59, 10, 58, 11, 8, 57, 61, 12, 15, 62, 14, 63, 60, 13,
+ 60, 13, 14, 63, 15, 62, 61, 12, 8, 57, 58, 11, 59, 10, 9, 56,
+ 8, 57, 58, 11, 59, 10, 9, 56, 60, 13, 14, 63, 15, 62, 61, 12,
+ 61, 12, 15, 62, 14, 63, 60, 13, 9, 56, 59, 10, 58, 11, 8, 57,
+ 62, 15, 12, 61, 13, 60, 63, 14, 10, 59, 56, 9, 57, 8, 11, 58,
+ 11, 58, 57, 8, 56, 9, 10, 59, 63, 14, 13, 60, 12, 61, 62, 15,
+ 31, 46, 45, 28, 44, 29, 30, 47, 43, 26, 25, 40, 24, 41, 42, 27,
+ 42, 27, 24, 41, 25, 40, 43, 26, 30, 47, 44, 29, 45, 28, 31, 46,
+ 41, 24, 27, 42, 26, 43, 40, 25, 29, 44, 47, 30, 46, 31, 28, 45,
+ 28, 45, 46, 31, 47, 30, 29, 44, 40, 25, 26, 43, 27, 42, 41, 24,
+ 40, 25, 26, 43, 27, 42, 41, 24, 28, 45, 46, 31, 47, 30, 29, 44,
+ 29, 44, 47, 30, 46, 31, 28, 45, 41, 24, 27, 42, 26, 43, 40, 25,
+ 30, 47, 44, 29, 45, 28, 31, 46, 42, 27, 24, 41, 25, 40, 43, 26,
+ 43, 26, 25, 40, 24, 41, 42, 27, 31, 46, 45, 28, 44, 29, 30, 47
+ }
+};
+
+// table to extract the lower 4 bit from hamm24/18 encoded bytes
+
+
+static char hamm24val[256] =
+{
+ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1,
+ 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3,
+ 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5,
+ 6, 6, 6, 6, 7, 7, 7, 7, 6, 6, 6, 6, 7, 7, 7, 7,
+ 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 9, 9,
+ 10, 10, 10, 10, 11, 11, 11, 11, 10, 10, 10, 10, 11, 11, 11, 11,
+ 12, 12, 12, 12, 13, 13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13,
+ 14, 14, 14, 14, 15, 15, 15, 15, 14, 14, 14, 14, 15, 15, 15, 15,
+ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1,
+ 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3,
+ 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5,
+ 6, 6, 6, 6, 7, 7, 7, 7, 6, 6, 6, 6, 7, 7, 7, 7,
+ 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 9, 9,
+ 10, 10, 10, 10, 11, 11, 11, 11, 10, 10, 10, 10, 11, 11, 11, 11,
+ 12, 12, 12, 12, 13, 13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13,
+ 14, 14, 14, 14, 15, 15, 15, 15, 14, 14, 14, 14, 15, 15, 15, 15
+};
+
+// mapping from parity checks made by table hamm24par to error
+// results return by hamm24.
+// (0 = no error, 0x0100 = single bit error, 0x1000 = double error)
+
+
+static short hamm24err[64] =
+{
+ 0x0000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000,
+ 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000,
+ 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000,
+ 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
+ 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000,
+};
+
+// mapping from parity checks made by table hamm24par to faulty bit
+// in the decoded 18 bit word.
+
+
+static int hamm24cor[64] =
+{
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00001, 0x00000, 0x00002, 0x00004, 0x00008,
+ 0x00000, 0x00010, 0x00020, 0x00040, 0x00080, 0x00100, 0x00200, 0x00400,
+ 0x00000, 0x00800, 0x01000, 0x02000, 0x04000, 0x08000, 0x10000, 0x20000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+};
+
+
+int hamm8(u8 *p, int *err)
+{
+ int a = hammtab[p[0]];
+ *err += a;
+ return a & 15;
+}
+
+
+int hamm16(u8 *p, int *err)
+{
+ int a = hammtab[p[0]];
+ int b = hammtab[p[1]];
+ *err += a;
+ *err += b;
+ return (a & 15) | (b & 15) * 16;
+}
+
+
+int hamm24(u8 *p, int *err)
+{
+ int e = hamm24par[0][p[0]] ^ hamm24par[1][p[1]] ^ hamm24par[2][p[2]];
+ int x = hamm24val[p[0]] + p[1] % 128 * 16 + p[2] % 128 * 2048;
+ *err += hamm24err[e];
+ return x ^ hamm24cor[e];
+}
+
+
+int chk_parity(u8 *p, int n)
+{
+ int err;
+ for (err = 0; n--; p++)
+ if (hamm24par[0][*p] & 32)
+ *p &= 0x7f;
+ else
+ *p = BAD_CHAR, err++;
+ return err;
+}
diff --git a/util/alevt/hamm.h b/util/alevt/hamm.h
new file mode 100644
index 0000000..3b8c8ad
--- /dev/null
+++ b/util/alevt/hamm.h
@@ -0,0 +1,7 @@
+#ifndef HAMM_H
+#define HAMM_H
+int hamm8(u8 *p, int *err);
+int hamm16(u8 *p, int *err);
+int hamm24(u8 *p, int *err);
+int chk_parity(u8 *p, int n);
+#endif
diff --git a/util/alevt/help.c b/util/alevt/help.c
new file mode 100644
index 0000000..b867855
--- /dev/null
+++ b/util/alevt/help.c
@@ -0,0 +1,83 @@
+#include "vt.h"
+#include "misc.h"
+
+#define VFILL " "
+#define HELP_HEADER \
+"........\6AleVT Online Help System ", \
+" \22`p0`0 p `0pppp ", \
+"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34", \
+"\4\35\22\177,\177j5\177.! +t>! j5 \7"VFILL VERSION" \34", \
+" \22# #\42!\42# \42 \42! ",
+#define FLOF_DATA \
+ 1, { {0x100,ANY_SUB}, {0x200,ANY_SUB}, {0x300,ANY_SUB}, \
+ {0x400,ANY_SUB}, {0x0ff,ANY_SUB}, {0x100,ANY_SUB} }
+
+
+struct vt_page help_pages[] =
+{
+ { 0x900, 0, -1, 0, 0, (1<<26)-1, {
+#include "vt900.out"
+ }, FLOF_DATA },
+
+ { 0x901, 1, -1, 0, 0, (1<<26)-1, {
+#include "vt901.out"
+ }, FLOF_DATA },
+
+ { 0x902, 1, -1, 0, 0, (1<<26)-1, {
+#include "vt902.out"
+ }, FLOF_DATA },
+
+ { 0x903, 1, -1, 0, 0, (1<<26)-1, {
+#include "vt903.out"
+ }, FLOF_DATA },
+
+ { 0x904, 1, -1, 0, 0, (1<<26)-1, {
+#include "vt904.out"
+ }, FLOF_DATA },
+
+ { 0x905, 2, -1, 0, 0, (1<<26)-1, {
+#include "vt905.out"
+ }, FLOF_DATA },
+
+ { 0x906, 1, -1, 0, 0, (1<<26)-1, {
+#include "vt906.out"
+ }, FLOF_DATA },
+
+ { 0x907, 2, -1, 0, 0, (1<<26)-1, {
+#include "vt907.out"
+ }, FLOF_DATA },
+
+ { 0x908, 1, -1, 0, 0, (1<<26)-1, {
+#include "vt908.out"
+ }, FLOF_DATA },
+
+ { 0x909, 0, -1, 0, 0, (1<<26)-1, {
+#include "vt909.out"
+ }, FLOF_DATA },
+
+ { 0x910, 2, -1, 0, 0, (1<<26)-1, {
+#include "vt910.out"
+ }, FLOF_DATA },
+
+ { 0x911, 1, -1, 0, 0, (1<<26)-1, {
+#include "vt911.out"
+ }, FLOF_DATA },
+
+ { 0x912, 2, -1, 0, 0, (1<<26)-1, {
+#include "vt912.out"
+ }, FLOF_DATA },
+
+ { 0x913, 1, -1, 0, 0, (1<<26)-1, {
+#include "vt913.out"
+ }, FLOF_DATA },
+
+ { 0x914, 0, -1, 0, 0, (1<<26)-1, {
+#include "vt914.out"
+ }, FLOF_DATA },
+
+ { 0x915, 0, -1, 0, 0, (1<<26)-1, {
+#include "vt915.out"
+ }, FLOF_DATA },
+};
+
+const int nr_help_pages = NELEM(help_pages);
diff --git a/util/alevt/help.h b/util/alevt/help.h
new file mode 100644
index 0000000..5df47fc
--- /dev/null
+++ b/util/alevt/help.h
@@ -0,0 +1,8 @@
+#ifndef HELP_H
+#define HELP_H
+
+#include "vt.h"
+
+extern struct vt_page help_pages[];
+extern const int nr_help_pages;
+#endif
diff --git a/util/alevt/icon.xbm b/util/alevt/icon.xbm
new file mode 100644
index 0000000..27255a4
--- /dev/null
+++ b/util/alevt/icon.xbm
@@ -0,0 +1,17 @@
+#define icon_width 58
+#define icon_height 20
+static unsigned char icon_bits[] = {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x03, 0x0f, 0x30, 0xfe, 0xff, 0xf8, 0x11, 0x00, 0x03,
+ 0x0f, 0x30, 0xfe, 0xff, 0xf8, 0x11, 0x00, 0x03, 0xc5, 0x23, 0xaa, 0xaa,
+ 0xa8, 0xf1, 0xf1, 0x03, 0xc6, 0x22, 0xfe, 0xd5, 0x58, 0xb1, 0xb1, 0x02,
+ 0x45, 0x23, 0x06, 0xaa, 0xa8, 0x51, 0x51, 0x01, 0xc6, 0x22, 0x06, 0xd6,
+ 0x58, 0xb1, 0xb1, 0x02, 0x45, 0x23, 0x62, 0xac, 0xa8, 0x51, 0x51, 0x01,
+ 0xc6, 0x22, 0x62, 0xd4, 0x58, 0xb1, 0xb1, 0x02, 0x45, 0x23, 0x62, 0xac,
+ 0xa8, 0x51, 0x51, 0x01, 0xc6, 0x23, 0x62, 0xd4, 0xf8, 0xb1, 0xb1, 0x02,
+ 0x05, 0x20, 0x02, 0xae, 0x61, 0x58, 0x51, 0x01, 0x06, 0x20, 0x02, 0x56,
+ 0x61, 0xa8, 0xb1, 0x02, 0xc5, 0x23, 0xe2, 0xab, 0x06, 0x56, 0x51, 0x01,
+ 0x46, 0x22, 0xe2, 0x57, 0x05, 0xaa, 0xb1, 0x02, 0xc7, 0x23, 0x06, 0xfe,
+ 0x9f, 0xff, 0xf1, 0x03, 0xc7, 0x23, 0x06, 0xfe, 0x9f, 0xff, 0xf1, 0x03,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x03, };
diff --git a/util/alevt/lang.c b/util/alevt/lang.c
new file mode 100644
index 0000000..3a49307
--- /dev/null
+++ b/util/alevt/lang.c
@@ -0,0 +1,393 @@
+#include <string.h>
+#include <ctype.h>
+#include "misc.h"
+#include "vt.h"
+#include "lang.h"
+
+int latin1 = -1;
+
+
+static u8 lang_char[256];
+static u8 lang_chars[1+8+8][16] =
+{
+ { 0, 0x23,0x24,0x40,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x7b,0x7c,0x7d,0x7e },
+
+ // for latin-1 font
+ // English (100%)
+ { 0, '£', '$', '@', '«', '½', '»', '¬', '#', '­', '¼', '¦', '¾', '÷' },
+ // German (100%)
+ { 0, '#', '$', '§', 'Ä', 'Ö', 'Ü', '^', '_', '°', 'ä', 'ö', 'ü', 'ß' },
+ // Swedish/Finnish/Hungarian (100%)
+ { 0, '#', '¤', 'É', 'Ä', 'Ö', 'Å', 'Ü', '_', 'é', 'ä', 'ö', 'å', 'ü' },
+ // Italian (100%)
+ { 0, '£', '$', 'é', '°', 'ç', '»', '¬', '#', 'ù', 'à', 'ò', 'è', 'ì' },
+ // French (100%)
+ { 0, 'é', 'ï', 'à', 'ë', 'ê', 'ù', 'î', '#', 'è', 'â', 'ô', 'û', 'ç' },
+ // Portuguese/Spanish (100%)
+ { 0, 'ç', '$', '¡', 'á', 'é', 'í', 'ó', 'ú', '¿', 'ü', 'ñ', 'è', 'à' },
+ // Czech/Slovak (60%)
+ { 0, '#', 'u', 'c', 't', 'z', 'ý', 'í', 'r', 'é', 'á', 'e', 'ú', 's' },
+ // reserved (English mapping)
+ { 0, '£', '$', '@', '«', '½', '»', '¬', '#', '­', '¼', '¦', '¾', '÷' },
+
+ // for latin-2 font
+ // Polish (100%)
+ { 0, '#', 'ñ', '±', '¯', '¦', '£', 'æ', 'ó', 'ê', '¿', '¶', '³', '¼' },
+ // German (100%)
+ { 0, '#', '$', '§', 'Ä', 'Ö', 'Ü', '^', '_', '°', 'ä', 'ö', 'ü', 'ß' },
+ // Estonian (100%)
+ { 0, '#', 'õ', '©', 'Ä', 'Ö', '®', 'Ü', 'Õ', '¹', 'ä', 'ö', '¾', 'ü' },
+ // Lettish/Lithuanian (90%)
+ { 0, '#', '$', '©', 'ë', 'ê', '®', 'è', 'ü', '¹', '±', 'u', '¾', 'i' },
+ // French (90%)
+ { 0, 'é', 'i', 'a', 'ë', 'ì', 'u', 'î', '#', 'e', 'â', 'ô', 'u', 'ç' },
+ // Serbian/Croation/Slovenian (100%)
+ { 0, '#', 'Ë', 'È', 'Æ', '®', 'Ð', '©', 'ë', 'è', 'æ', '®', 'ð', '¹' },
+ // Czech/Slovak (100%)
+ { 0, '#', 'ù', 'è', '»', '¾', 'ý', 'í', 'ø', 'é', 'á', 'ì', 'ú', '¹' },
+ // Rumanian (95%)
+ { 0, '#', '¢', 'Þ', 'Â', 'ª', 'Ã', 'Î', 'i', 'þ', 'â', 'º', 'ã', 'î' },
+};
+
+/* Yankable latin charset :-)
+ !"#$%&'()*+,-./0123456789:;<=>?
+ @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
+ `abcdefghijklmnopqrstuvwxyz{|}~
+ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿
+ ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß
+ àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
+*/
+
+
+static struct mark { u8 *g0, *latin1, *latin2; } marks[16] =
+{
+ /* none */ { "#",
+ "¤",
+ "$" },
+ /* grave - ` */ { " aeiouAEIOU",
+ "`àèìòùÀÈÌÒÙ",
+ "`aeiouAEIOU" },
+ /* acute - ' */ { " aceilnorsuyzACEILNORSUYZ",
+ "'ácéílnórsúýzÁCÉÍLNÓRSÚÝZ",
+ "'áæéíåñóà¶úý¼ÁÆÉÍÅÑÓÀ¦Úݬ" },
+ /* cirumflex - ^ */ { " aeiouAEIOU",
+ "^âêîôûÂÊÎÔÛ",
+ "^âeîôuÂEÎÔU" },
+ /* tilde - ~ */ { " anoANO",
+ "~ãñõÃÑÕ",
+ "~anoANO" },
+ /* ??? - ¯ */ { "",
+ "",
+ "" },
+ /* breve - u */ { "aA",
+ "aA",
+ "ãÃ" },
+ /* abovedot - · */ { "zZ",
+ "zZ",
+ "¿¯" },
+ /* diaeresis ¨ */ { "aeiouAEIOU",
+ "äëïöüÄËÏÖÜ",
+ "äëiöüÄËIÖÜ" },
+ /* ??? - . */ { "",
+ "",
+ "" },
+ /* ringabove - ° */ { " auAU",
+ "°åuÅU",
+ "°aùAÙ" },
+ /* cedilla - ¸ */ { "cstCST",
+ "çstÇST",
+ "çºþǪÞ" },
+ /* ??? - _ */ { " ",
+ "_",
+ "_" },
+ /* dbl acute - " */ { " ouOU",
+ "\"ouOU",
+ "\"õûÕÛ" },
+ /* ogonek - \, */ { "aeAE",
+ "aeAE",
+ "±ê¡Ê" },
+ /* caron - v */ { "cdelnrstzCDELNRSTZ",
+ "cdelnrstzCDELNRSTZ",
+ "èïìµòø¹»¾ÈÏÌ¥ÒØ©«®" },
+};
+
+
+static u8 g2map_latin1[] =
+ /*0123456789abcdef*/
+ " ¡¢£$¥#§¤'\"« "
+ "°±²³×µ¶·÷'\"»¼½¾¿"
+ " `´^~ ¨.°¸_\" "
+ "_¹®© "
+ " ÆÐªH ILLØ ºÞTNn"
+ "Kædðhiillø ßþtn\x7f";
+
+
+static u8 g2map_latin2[] =
+ /*0123456789abcdef*/
+ " icL$Y#§¤'\"< "
+ "° ×u ÷'\"> "
+ " `´^~ ¢ÿ¨.°¸_½²·"
+ "- RC "
+ " ÐaH iL£O opTNn"
+ "K ðdhiil³o ßptn\x7f";
+
+
+void lang_init(void)
+{
+ int i;
+
+ memset(lang_char, 0, sizeof(lang_char));
+ for (i = 1; i <= 13; i++)
+ lang_char[lang_chars[0][i]] = i;
+}
+
+
+void conv2latin(u8 *p, int n, int lang)
+{
+ int c, gfx = 0, lat=0;
+
+ if ((latin1 == KOI8) && lang==12) { /* russian */
+ while (n--) {
+ c=*p;
+
+ if(c==0x1b) lat = !lat; /* ESC switches languages inside page */
+
+ if ( is_koi(c)) {
+ if (not gfx || (c & 0xa0) != 0x20) {
+ if(!lat) conv2koi8(p);
+ }
+ }
+ else if ((c & 0xe8) == 0)
+ gfx = c & 0x10;
+ p++;
+ }
+ }
+else if ((latin1 == GREEK) && lang==15) { /* Hellas */
+ while (n--) {
+ c=*p;
+
+ if(c==0x1b) lat = !lat; /* ESC switches languages inside page */
+
+ if ( is_greek(c)) {
+ if (not gfx || (c & 0xa0) != 0x20) {
+ if(!lat) conv2greek(p);
+ }
+ }
+ else if ((c & 0xe8) == 0)
+ gfx = c & 0x10;
+ p++;
+ }
+ }
+
+ else {
+ while (n--)
+ {
+ if (lang_char[c = *p])
+ {
+ if (not gfx || (c & 0xa0) != 0x20)
+ *p = lang_chars[lang + 1][lang_char[c]];
+ }
+ else if ((c & 0xe8) == 0)
+ gfx = c & 0x10;
+ p++;
+ }
+ }
+}
+
+
+/* check for Greek chars - needs locale iso8859-7 set */
+int is_greek(int c)
+{
+ if( isalpha(c | 0x80)) return 1;
+ return 0;
+}
+
+
+/* check for russian chars - needs locale KOI8-R set */
+int is_koi(int c)
+{
+ if( isalpha(c | 0x80)) return 1;
+ if( c=='&' ) return 1;
+ return 0;
+}
+
+
+/* teletext to koi8-r conversion */
+void conv2koi8(u8 *p)
+{
+ u8 c;
+ static u8 l2koi[]={
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
+ 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3,
+ 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xFF, 0xFA, 0xFB, 0xFC, 0xFD,
+ 0xFE, 0xF9, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1,
+ 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB,
+ 0xDC, 0xDD, 0xDE, 0xDF
+ };
+
+ c= *p;
+ if ( (c >= 0x40) && (c <= 0x7f)) *p=l2koi[(c & 0x7f) - 0x40];
+ if (c=='&') *p='Ù';
+}
+
+
+/* teletext to iso8859-7 conversion */
+void conv2greek(u8 *p)
+{
+ u8 c;
+ static u8 l2greek[]={
+/* 1 @ 0x40->ú*/0xc0,
+/* 2 A 0x41->Á*/0xc1,
+/* 3 B 0x42->Â*/0xc2,
+/* 4 C 0x43->Ã*/0xc3,
+/* 5 D 0x44->Ä*/0xc4,
+/* 6 E 0x45->Å*/0xc5,
+/* 7 F 0x46->Æ*/0xc6,
+/* 8 G 0x47->Ç*/0xc7,
+/* 9 H 0x48->È*/0xc8,
+/*10 I 0x49->É*/0xc9,
+/*11 J 0x4a->Ê*/0xca,
+/*12 K 0x4b->Ë*/0xcb,
+/*13 L 0x4c->Ì*/0xcc,
+/*14 M 0x4d->Í*/0xcd,
+/*15 N 0x4e->Î*/0xce,
+/*16 O 0x4f->Ï*/0xcf,
+/*17 P 0x50->Ð*/0xd0,
+/*18 Q 0x51->Ñ*/0xd1,
+/*19 R 0x52->?*/0x52,
+/*20 S 0x53->Ó*/0xd3,
+/*21 T 0x54->Ô*/0xd4,
+/*22 U 0x55->Õ*/0xd5,
+/*23 V 0x56->Ö*/0xd6,
+/*24 W 0x57->÷*/0xd7,
+/*25 X 0x58->Ø*/0xd8,
+/*26 Y 0x59->Ù*/0xd9,
+/*27 Z 0x5a->?*/0x5a,
+/*28 [ 0x5b->?*/0x5b,
+/*!29 \ 0x5c->Ü*/0xdc,
+/*!30 ] 0x5d->Ý*/0xdd,
+/*!31 ^ 0x5e->Þ*/0xde,
+/*!32 _ 0x5f->ß*/0xdf,
+/*33 ` 0x60->?*/0x60,
+/*!34 a 0x61->á*/0xe1,
+/*!35 b 0x62->â*/0xe2,
+/*!36 c 0x63->ã*/0xe3,
+/*!37 d 0x64->ä*/0xe4,
+/*!38 e 0x65->å*/0xe5,
+/*!39 f 0x66->æ*/0xe6,
+/*!40 g 0x67->ç*/0xe7,
+/*!41 h 0x68->è*/0xe8,
+/*!42 i 0x69->é*/0xe9,
+/*!43 j 0x6a->ê*/0xea,
+/*!44 k 0x6b->ë*/0xeb,
+/*!45 l 0x6c->ì*/0xec,
+/*!46 m 0x6d->í*/0xed,
+/*!47 n 0x6e->î*/0xee,
+/*!48 o 0x6f->ï*/0xef,
+/*!49 p 0x70->ð*/0xf0,
+/*!50 q 0x71->ñ*/0xf1,
+/*!51 r 0x72->ò*/0xf2,
+/*!52 s 0x73->ó*/0xf3,
+/*!53 t 0x74->ô*/0xf4,
+/*!54 u 0x75->õ*/0xf5,
+/*!55 v 0x76->ö*/0xf6,
+/*!56 w 0x77->÷*/0xf7,
+/*!57 x 0x78->ø*/0xf8,
+/*!58 y 0x79->ù*/0xf9,
+/*59 z 0x7a->ú(ìå ôüíï)*/0xc0,
+/*60 { 0x7b->?*/0x7b,
+/*!61 | 0x7c->ü*/0xfc,
+/*!62 } 0x7d->ý*/0xfd,
+/*!63 ~ 0x7e->þ*/0xfe,
+/*64 0x7f->?*/0x7f
+ };
+ c= *p;
+ if ( (c >= 0x40) && (c <= 0x7f)) *p=l2greek[(c & 0x7f) - 0x40];
+}
+
+
+void init_enhance(struct enhance *eh)
+{
+ eh->next_des = 0;
+}
+
+
+void add_enhance(struct enhance *eh, int dcode, u32 *t)
+{
+
+ if (dcode == eh->next_des)
+ {
+ memcpy(eh->trip + dcode * 13, t, 13 * sizeof(*t));
+ eh->next_des++;
+ }
+ else
+ eh->next_des = -1;
+}
+
+
+void enhance(struct enhance *eh, struct vt_page *vtp)
+{
+ int row = 0;
+ u32 *p, *e;
+
+ if (eh->next_des < 1)
+ return;
+
+ for (p = eh->trip, e = p + eh->next_des * 13; p < e; p++)
+ if (*p % 2048 != 2047)
+ {
+ int adr = *p % 64;
+ int mode = *p / 64 % 32;
+ int data = *p / 2048 % 128;
+
+ if (adr < 40)
+ {
+ // col functions
+ switch (mode)
+ {
+ case 15: // char from G2 set
+ if (adr < W && row < H)
+ if (latin1==LATIN1)
+ vtp->data[row][adr] = g2map_latin1[data-32];
+ else if (latin1==LATIN2)
+ vtp->data[row][adr] = g2map_latin2[data-32];
+ break;
+ case 16 ... 31: // char from G0 set with diacritical mark
+ if (adr < W && row < H)
+ {
+ struct mark *mark = marks + (mode - 16);
+ u8 *x;
+
+ if (x = strchr(mark->g0, data))
+ if (latin1==LATIN1)
+ data = mark->latin1[x - mark->g0];
+ else if (latin1==LATIN2)
+ data = mark->latin2[x - mark->g0];
+ vtp->data[row][adr] = data;
+ }
+ break;
+ }
+ }
+ else
+ {
+ // row functions
+ if ((adr -= 40) == 0)
+ adr = 24;
+
+ switch (mode)
+ {
+ case 1: // full row color
+ row = adr;
+ break;
+ case 4: // set active position
+ row = adr;
+ break;
+ case 7: // address row 0 (+ full row color)
+ if (adr == 23)
+ row = 0;
+ break;
+ }
+ }
+ }
+}
diff --git a/util/alevt/lang.h b/util/alevt/lang.h
new file mode 100644
index 0000000..531f3b0
--- /dev/null
+++ b/util/alevt/lang.h
@@ -0,0 +1,28 @@
+#ifndef LANG_H
+#define LANG_H
+
+#include "misc.h"
+#include "vt.h"
+
+extern int latin1;
+
+#define LATIN1 1
+#define LATIN2 2
+#define KOI8 3
+#define GREEK 4
+
+
+struct enhance
+{
+ int next_des; // next expected designation code
+ u32 trip[13*16]; // tripplets
+};
+
+void lang_init(void);
+void conv2latin(u8 *p, int n, int lang);
+void conv2koi8(u8 *p);
+void conv2greek(u8 *p);
+void init_enhance(struct enhance *eh);
+void add_enhance(struct enhance *eh, int dcode, u32 *data);
+void enhance(struct enhance *eh, struct vt_page *vtp);
+#endif
diff --git a/util/alevt/main.c b/util/alevt/main.c
new file mode 100644
index 0000000..31fe9c3
--- /dev/null
+++ b/util/alevt/main.c
@@ -0,0 +1,221 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+#include "vt.h"
+#include "misc.h"
+#include "fdset.h"
+#include "xio.h"
+#include "vbi.h"
+#include "lang.h"
+#include "cache.h"
+#include "ui.h"
+
+static char *geometry;
+static char *dpy_name;
+static char *vbi_name = NULL;
+static struct xio *xio;
+static struct vbi *vbi;
+static int erc = 1;
+char *outfile = "";
+static char *channel;
+static int ttpid = -1;
+u_int16_t sid = 0;
+
+
+static void usage(FILE *fp, int exitval)
+{
+ fprintf(fp, "\nUsage: %s [options]\n", prgname);
+ fprintf(fp,
+ "\n"
+ " Valid options:\t\tDefault:\n"
+ " -c <channel name>\t\t(none;dvb only)\n"
+ " -ch -child <ppp.ss>\t\t(none)\n"
+ " -cs -charset\t\tlatin-1\n"
+ " <latin-1/2/koi8-r/iso8859-7>\n"
+ " -h -help\n"
+ " -o <outfile>\t\t(none;dvb only)\n"
+ " -p -parent <ppp.ss>\t\t900\n"
+ " -s -sid <sid>\t\t(none;dvb only)\n"
+ " -t -ttpid <ttpid>\t\t(none;dvb only)\n"
+ " -v -vbi <vbidev>\t\t/dev/vbi\n"
+ " \t\t/dev/vbi0\n"
+ " \t\t/dev/video0\n"
+ " \t\t/dev/dvb/adapter0/demux0\n"
+ "\n"
+ " ppp.ss stands for a page number and an\n"
+ " optional subpage number (Example: 123.4).\n"
+ "\n"
+ " The -child option requires a parent\n"
+ " window. So it must be preceded by\n"
+ " a parent or another child window.\n"
+ );
+ exit(exitval);
+}
+
+
+static int arg_pgno(char *p, int *subno)
+{
+ char *end;
+ int pgno;
+
+ *subno = ANY_SUB;
+ if (*p)
+ {
+ pgno = strtol(p, &end, 16);
+ if ((*end == ':' || *end == '/' || *end == '.') && end[1])
+ *subno = strtol(end + 1, &end, 16);
+ if (*end == 0)
+ if (pgno >= 0x100 && pgno <= 0x999)
+ if (*subno == ANY_SUB || (*subno >= 0x00 && *subno <= 0x3f7f))
+ return pgno;
+ }
+ fatal("%s: invalid page number", p);
+}
+
+
+static struct vtwin * start(int argc, char **argv, struct vtwin *parent,
+ int pgno, int subno)
+{
+ static int valid_vbi_name = 1;
+
+ if (!valid_vbi_name)
+ return parent;
+
+ if (vbi == 0)
+ vbi = vbi_open(vbi_name, cache_open(), channel, outfile, sid, ttpid);
+ if (vbi == 0)
+ {
+ if (vbi_name)
+ error("cannot open device: %s", vbi_name);
+ valid_vbi_name = 0;
+ vbi = open_null_vbi(cache_open());
+ }
+ if (vbi->cache)
+ vbi->cache->op->mode(vbi->cache, CACHE_MODE_ERC, erc);
+
+ if (xio == 0)
+ xio = xio_open_dpy(dpy_name, argc, argv);
+ if (xio == 0)
+ fatal("cannot open display");
+
+ parent = vtwin_new(xio, vbi, geometry, parent, pgno, subno);
+ if (parent == 0)
+ fatal("cannot create window");
+
+ if (!valid_vbi_name)
+ {
+ if (vbi_name)
+ send_errmsg(vbi, "cannot open device: %s", vbi_name);
+ else
+ send_errmsg(vbi, "cannot open any device", vbi_name);
+ }
+
+ return parent;
+}
+
+
+static int option(int argc, char **argv, int *ind, char **arg)
+{
+ static struct { char *nam, *altnam; int arg; } opts[] = {
+ { "-channel", "-c", 1 },
+ { "-child", "-ch", 1 },
+ { "-charset", "-cs", 1 },
+ { "-help", "-h", 0 },
+ { "-outfile", "-o", 1 },
+ { "-parent", "-p", 1 },
+ { "-sid", "-s", 1 },
+ { "-ttpid", "-t", 1 },
+ { "-vbi", "-v", 1 },
+ };
+ int i;
+ if (*ind >= argc)
+ return 0;
+ *arg = argv[(*ind)++];
+ for (i = 0; i < NELEM(opts); ++i)
+ if (streq(*arg, opts[i].nam) || streq(*arg, opts[i].altnam))
+ {
+ if (opts[i].arg)
+ if (*ind < argc)
+ *arg = argv[(*ind)++];
+ else
+ fatal("option %s requires an argument", *arg);
+ return i+1;
+ }
+ if (**arg == '-')
+ {
+ fatal("%s: invalid option", *arg);
+ usage(stderr, 1);
+ }
+ return -1;
+}
+
+
+int main(int argc, char **argv)
+{
+ struct vtwin *parent = 0;
+ int pgno, subno;
+ int opt, ind;
+ char *arg;
+ sid = 0;
+
+ setprgname(argv[0]);
+ fdset_init(fds);
+
+ ind = 1;
+ while (opt = option(argc, argv, &ind, &arg))
+ switch (opt)
+ {
+
+ case 1: // channel
+ channel = arg;
+ break;
+ case 2: // child
+ if (parent == 0)
+ fatal("-child requires a parent window");
+ pgno = arg_pgno(arg, &subno);
+ parent = start(argc, argv, parent, pgno, subno);
+ geometry = 0;
+ break;
+ case 3: // charset
+ if (streq(arg, "latin-1") || streq(arg, "1"))
+ latin1 = LATIN1;
+ else if (streq(arg, "latin-2") || streq(arg, "2"))
+ latin1 = LATIN2;
+ else if (streq(arg, "koi8-r") || streq(arg, "koi"))
+ latin1 = KOI8;
+ else if (streq(arg, "iso8859-7") || streq(arg, "el"))
+ latin1 = GREEK;
+ else
+ fatal("bad charset (not latin-1/2/koi8-r/iso8859-7)");
+ break;
+ case 4: // help
+ usage(stdout, 0);
+ break;
+ case 5: // outfile
+ outfile = arg;
+ break;
+ case 6: // parent
+ case -1: // non-option arg
+ pgno = arg_pgno(arg, &subno);
+ parent = start(argc, argv, 0, pgno, subno);
+ geometry = 0;
+ break;
+ case 7: // sid
+ sid = strtoul(arg, NULL, 0);
+ break;
+ case 8: // ttpid
+ ttpid = strtoul(arg, NULL, 0);
+ break;
+ case 9: // vbi
+ vbi_name = arg;
+ vbi = 0;
+ parent = 0;
+ break;
+ }
+
+ if (parent == 0)
+ start(argc, argv, 0, 0x900, ANY_SUB);
+ xio_event_loop();
+ exit(0);
+}
diff --git a/util/alevt/misc.c b/util/alevt/misc.c
new file mode 100644
index 0000000..32d0595
--- /dev/null
+++ b/util/alevt/misc.c
@@ -0,0 +1,66 @@
+#include <stdio.h>
+#include <stdarg.h>
+#include "misc.h"
+
+char *prgname = 0;
+
+extern char *strrchr(const char *, int);
+NORETURN(exit(int));
+
+
+void setprgname(char *str)
+{
+ char *x = strrchr(str, '/');
+ prgname = x ? x+1 : str;
+}
+
+
+static void print_prgname(void)
+{
+ if (prgname && *prgname)
+ fprintf(stderr, "%s: ", prgname);
+}
+
+
+void error(const char *str, ...)
+{
+ va_list args;
+ va_start(args, str);
+ print_prgname();
+ vfprintf(stderr, str, args);
+ fputc('\n', stderr);
+}
+
+
+void ioerror(const char *str)
+{
+ print_prgname();
+ perror(str);
+}
+
+
+void fatal(const char *str, ...)
+{
+ va_list args;
+ va_start(args, str);
+ print_prgname();
+ vfprintf(stderr, str, args);
+ fputc('\n', stderr);
+ exit(2);
+}
+
+
+void fatal_ioerror(const char *str)
+{
+ print_prgname();
+ perror(str);
+ exit(2);
+}
+
+
+void out_of_mem(int size)
+{
+ if (size > 0)
+ fatal("out of memory allocating %d bytes.", size);
+ fatal("out of memory.");
+}
diff --git a/util/alevt/misc.h b/util/alevt/misc.h
new file mode 100644
index 0000000..00a71f8
--- /dev/null
+++ b/util/alevt/misc.h
@@ -0,0 +1,32 @@
+#ifndef MISC_H
+#define MISC_H
+#define PTR (void *)
+#define NELEM(x) ((int)(sizeof(x)/sizeof(*(x))))
+#define NORETURN(x) void x __attribute__((__noreturn__))
+#define DEFINE(x) typeof(x) x
+#define OFFSET_OF(type, elem) ((u8 *)&((type *)0)->elem - (u8 *)0)
+#define BASE_OF(type, elem, p) ((type *)((u8 *)(p) - OFFSET_OF(type, elem)))
+
+#define not !
+#define streq(a, b) (strcmp((a), (b)) == 0)
+#define min(a,b) ({ typeof(a) _a = a; typeof(b) _b = b; _a < _b ? _a : _b; })
+#define max(a,b) ({ typeof(a) _a = a; typeof(b) _b = b; _a > _b ? _a : _b; })
+#define bound(a,b,c) ({ typeof(a) _a = a; typeof(b) _b = b; typeof(c) _c = c; \
+ _b < _a ? _a : _b > _c ? _c : _b; })
+
+typedef unsigned char u8;
+typedef unsigned short u16;
+typedef unsigned int u32;
+typedef signed char s8;
+typedef signed short s16;
+typedef signed int s32;
+
+extern char *prgname;
+void setprgname(char *argv_0);
+
+NORETURN(fatal(const char *str, ...));
+NORETURN(fatal_ioerror(const char *str));
+NORETURN(out_of_mem(int size));
+void error(const char *str, ...);
+void ioerror(const char *str);
+#endif
diff --git a/util/alevt/os.h b/util/alevt/os.h
new file mode 100644
index 0000000..50b7662
--- /dev/null
+++ b/util/alevt/os.h
@@ -0,0 +1,7 @@
+#ifndef OS_H
+#define OS_H
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBsd__) \
+ || defined(__bsdi__)
+#define BSD
+#endif
+#endif
diff --git a/util/alevt/search.c b/util/alevt/search.c
new file mode 100644
index 0000000..082cefb
--- /dev/null
+++ b/util/alevt/search.c
@@ -0,0 +1,127 @@
+#include <sys/types.h> // for freebsd
+#include <stdlib.h>
+#include "vt.h"
+#include "misc.h"
+#include "cache.h"
+#include "search.h"
+
+
+static void convert(u8 *p, u8 *buf, int *line)
+{
+ int x, y, c, ch, gfx, hid = 0;
+
+ for (y = 1, p += 40; y < 25; ++y)
+ {
+ if (not hid)
+ {
+ gfx = 0;
+ for (x = 0; x < 40; ++x)
+ {
+ c = ' ';
+ switch (ch = *p++)
+ {
+ case 0x00 ... 0x07:
+ gfx = 0;
+ break;
+ case 0x10 ... 0x17:
+ gfx = 1;
+ break;
+ case 0x0c:
+ hid = 1;
+ break;
+ case 0x7f:
+ c = '*';
+ break;
+ case 0x20 ... 0x7e:
+ if (gfx && ch != ' ' && (ch & 0xa0) == 0x20)
+ ch = '#';
+ case 0xa0 ... 0xff:
+ c= ch;
+ }
+ *buf++ = c;
+ }
+ *buf++ = '\n';
+ *line++ = y;
+ }
+ else
+ {
+ p += 40;
+ hid = 0;
+ }
+ }
+ *line = y;
+ *buf = 0;
+}
+
+
+static int search_pg(struct search *s, struct vt_page *vtp)
+{
+ regmatch_t m[1];
+ u8 buf[H *(W+1) + 1];
+ int line[H];
+
+ convert(PTR vtp->data, buf, line);
+ if (regexec(s->pattern, buf, 1, m, 0) == 0)
+ {
+ s->len = 0;
+ if (m->rm_so >= 0)
+ {
+ s->y = line[m->rm_so / (W+1)];
+ s->x = m->rm_so % (W+1);
+ s->len = m->rm_eo - m->rm_so;
+ if (s->x + s->len > 40)
+ s->len = 40 - s->x;
+ }
+ return 1;
+ }
+ return 0;
+}
+
+
+struct search * search_start(struct cache *ca, u8 *pattern)
+{
+ struct search *s;
+ int f = 0;
+
+ if (not(s = malloc(sizeof(*s))))
+ goto fail1;
+
+ if (pattern[0] == '!')
+ pattern++;
+ else
+ f = REG_ICASE;
+
+ if (regcomp(s->pattern, pattern, f | REG_NEWLINE) != 0)
+ goto fail2;
+
+ s->cache = ca;
+ return s;
+
+fail2:
+ free(s);
+fail1:
+ return 0;
+}
+
+
+void search_end(struct search *s)
+{
+ regfree(s->pattern);
+ free(s);
+}
+
+
+int search_next(struct search *s, int *pgno, int *subno, int dir)
+{
+ struct vt_page *vtp = 0;
+
+ if (s->cache)
+ vtp = s->cache->op->foreach_pg(s->cache, *pgno, *subno, dir,
+ search_pg, s);
+ if (vtp == 0)
+ return -1;
+
+ *pgno = vtp->pgno;
+ *subno = vtp->subno ?: ANY_SUB;
+ return 0;
+}
diff --git a/util/alevt/search.h b/util/alevt/search.h
new file mode 100644
index 0000000..c7e813a
--- /dev/null
+++ b/util/alevt/search.h
@@ -0,0 +1,16 @@
+#ifndef SEARCH_H
+#define SEARCH_H
+
+#include <regex.h>
+
+struct search
+{
+ struct cache *cache;
+ regex_t pattern[1];
+ int x, y, len; // the position of the match
+};
+
+struct search *search_start(struct cache *ca, u8 *pattern);
+void search_end(struct search *s);
+int search_next(struct search *s, int *pgno, int *subno, int dir);
+#endif
diff --git a/util/alevt/ui.c b/util/alevt/ui.c
new file mode 100644
index 0000000..70391c7
--- /dev/null
+++ b/util/alevt/ui.c
@@ -0,0 +1,721 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <ctype.h>
+#include <stdarg.h>
+#include "vt.h"
+#include "misc.h"
+#include "xio.h"
+#include "vbi.h"
+#include "fdset.h"
+#include "search.h"
+#include "export.h"
+#include "ui.h"
+
+static void vtwin_event(struct vtwin *w, struct vt_event *ev);
+static void msg(struct vtwin *w, u8 *str, ...);
+static void err(struct vtwin *w, u8 *str, ...);
+
+#define hist(w,o) ((w)->hist + (((w)->hist_top + (o)) & (N_HISTORY-1)))
+
+
+static int inc_hex(int i, int bcd_mode)
+{
+ i++;
+ if (bcd_mode)
+ {
+ if ((i & 0x000f) > 0x0009)
+ i = (i + 0x0010) & 0x0ff0;
+ if ((i & 0x00f0) > 0x090)
+ i = (i + 0x0100) & 0x0f00;
+ if ((i & 0x0f00) > 0x0900)
+ i = (i + 0x1000) & 0xf000;
+ }
+ return i;
+}
+
+
+static int dec_hex(int i, int bcd_mode)
+{
+ i--;
+ if (bcd_mode)
+ {
+ if ((i & 0x000f) > 0x0009)
+ i = (i & 0xfff0) + 0x0009;
+ if ((i & 0x00f0) > 0x0090)
+ i = (i & 0xff00) + 0x0099;
+ if ((i & 0x0f00) > 0x0900)
+ i = (i & 0xf000) + 0x0999;
+ }
+ return i;
+}
+
+
+static void set_title(struct vtwin *w)
+{
+ char buf[32], buf2[32];
+
+ if (w->subno == ANY_SUB)
+ sprintf(buf, "%x", w->pgno);
+ else
+ sprintf(buf, "%x/%x", w->pgno, w->subno);
+ if (w->searching)
+ sprintf(buf2, "(%s)", buf);
+ else
+ sprintf(buf2, "%s", buf);
+ xio_title(w->xw, buf2);
+}
+
+
+static void query_page(struct vtwin *w, int pgno, int subno)
+{
+ w->pgno = pgno;
+ w->subno = subno;
+ w->searching = 1;
+ w->hold = 0; //subno != ANY_SUB;
+ xio_set_concealed(w->xw, w->revealed = 0);
+
+ if (hist(w, 0)->pgno != pgno ||
+ (hist(w,0)->subno == ANY_SUB && subno != ANY_SUB))
+ w->hist_top++;
+ hist(w, 0)->pgno = pgno;
+ hist(w, 0)->subno = subno;
+ hist(w, 1)->pgno = 0; // end marker
+
+ xio_cancel_selection(w->xw);
+ if (vbi_query_page(w->vbi, pgno, subno) == 0)
+ {
+ w->vtp = 0;
+ }
+ set_title(w);
+}
+
+
+static void new_or_query(struct vtwin *w, int pgno, int subno, int new_win)
+{
+ if (new_win)
+ {
+ if (w->child)
+ query_page(w->child, pgno, subno);
+ else
+ vtwin_new(w->xw->xio, w->vbi, 0, w, pgno, subno);
+ }
+ else
+ query_page(w, pgno, subno);
+}
+
+static int _next_pgno(int *arg, struct vt_page *vtp)
+{
+ int pgno = vtp->pgno;
+
+ if (arg[0] == pgno) // want different page
+ return 0;
+ if (arg[1]) // and not a hex page
+ for (; pgno; pgno >>=4)
+ if ((pgno & 15) > 9)
+ return 0;
+ return 1;
+}
+
+
+static int _next_subno(int *arg, struct vt_page *vtp)
+{
+ return vtp->pgno == arg[0]; // only subpages of this page
+}
+
+
+static void do_next_pgno(struct vtwin *w, int dir, int bcd_mode, int subs,
+ int new_win)
+{
+ struct vt_page *vtp;
+ struct vtwin *cw = (new_win && w->child) ? w->child : w;
+ int pgno = cw->pgno;
+ int subno = cw->subno;
+
+ if (w->vbi->cache)
+ {
+ int arg[2];
+ arg[0] = pgno;
+ arg[1] = bcd_mode;
+ if (vtp = w->vbi->cache->op->foreach_pg(w->vbi->cache,
+ pgno, subno, dir, subs ? _next_subno:_next_pgno, &arg))
+ {
+ new_or_query(w, vtp->pgno, subs ? vtp->subno : ANY_SUB, new_win);
+ return;
+ }
+ }
+ err(w, "No page.");
+}
+
+#define notdigit(x) (not isdigit((x)))
+
+
+static int chk_screen_fromto(u8 *p, int x, int *n1, int *n2)
+{
+ p += x;
+
+ if (x >= 0 && x+5 < 42)
+ if (notdigit(p[1]) || notdigit(p[0]))
+ if (isdigit(p[2]))
+ if (p[3] == '/' || p[3] == ':')
+ if (isdigit(p[4]))
+ if (notdigit(p[5]) || notdigit(p[6])) /* p[6] is save here */
+ {
+ *n1 = p[2] % 16;
+ if (isdigit(p[1]))
+ *n1 += p[1] % 16 * 16;
+ *n2 = p[4] % 16;
+ if (isdigit(p[5]))
+ *n2 = *n2 * 16 + p[5] % 16;
+ return 1;
+ }
+ return 0;
+}
+
+
+static int chk_screen_pgno(u8 *p, int x, int *pgno, int *subno)
+{
+ p += x;
+
+ if (x >= 0 && x+4 < 42)
+ if (notdigit(p[0]) && notdigit(p[4]))
+ if (isdigit(p[1]) && isdigit(p[2]) && isdigit(p[3]))
+ {
+ *pgno = p[1] % 16 * 256 + p[2] % 16 * 16 + p[3] % 16;
+ if (*pgno >= 0x100 && *pgno <= 0x999)
+ {
+ *subno = ANY_SUB;
+ if (x+6 < 42)
+ if (p[4] == '.' || p[4] == '/')
+ if (isdigit(p[5]))
+ if (notdigit(p[6]) || notdigit(p[7])) /* p[7] is save here */
+ {
+ *subno = p[5] % 16;
+ if (isdigit(p[6]))
+ *subno = *subno * 16 + p[6] % 16;
+ }
+ // hackhackhack:
+ // pgno followed by start box gets subno 1
+ if (x+4 < 42 && p[4] == 11)
+ *subno = 1;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+
+static void do_screen_pgno(struct vtwin *w, int x, int y, int new_win)
+{
+ u8 buf[42];
+ int n1, n2, i;
+
+ if (x >= 0 && x < 40)
+ {
+ if (xio_get_line(w->xw, y, buf+1) == 0)
+ {
+ buf[0] = buf[41] = ' ';
+ x++;
+
+ for (i = -6; i < 35; i++)
+ {
+ if (w->vtp == 0 || w->vtp->subno != 0)
+ if (chk_screen_fromto(buf, x+i, &n1, &n2))
+ {
+ // subno cycling works wrong with children.
+ // so middle button cycles backwards...
+ if (w->subno != ANY_SUB)
+ n1 = w->subno;
+ n1 = new_win ? dec_hex(n1, 1) : inc_hex(n1, 1);
+ if (n1 < 1)
+ n1 = n2;
+ if (n1 > n2)
+ n1 = 1;
+ new_or_query(w, w->pgno, n1, 0);
+ return;
+ }
+ if (i >= -4)
+ if (chk_screen_pgno(buf, x+i, &n1, &n2))
+ {
+ new_or_query(w, n1, n2, new_win);
+ return;
+ }
+ }
+ }
+ }
+ err(w, "No page.");
+}
+
+
+static void do_flof_pgno(struct vtwin *w, int button, int x, int new_win)
+{
+ struct vt_page *vtp = w->vtp;
+ int lk = 99, i, c;
+
+ if (vtp && vtp->flof)
+ {
+ switch (button)
+ {
+ case 1 ... 3:
+ for (i = 0; i <= x && i < 40; ++i)
+ if ((c = vtp->data[24][i]) < 8) // fg-color code
+ lk = c;
+ lk = "x\0\1\2\3x\3x"[lk]; // color -> link#
+ break;
+ case KEY_F(1): lk = 0; break;
+ case KEY_F(2): lk = 1; break;
+ case KEY_F(3): lk = 2; break;
+ case KEY_F(4): lk = 3; break;
+ case KEY_F(5): lk = 5; break;
+ }
+ if (lk < 6 && (vtp->link[lk].pgno & 0xff) != 0xff)
+ {
+ new_or_query(w, vtp->link[lk].pgno, vtp->link[lk].subno, new_win);
+ return;
+ }
+ }
+ else
+ {
+ switch (button)
+ {
+ case 1 ... 3: lk = x / 8; break;
+ case KEY_F(1): lk = 0; break;
+ case KEY_F(2): lk = 1; break;
+ case KEY_F(3): lk = 2; break;
+ case KEY_F(4): lk = 3; break;
+ case KEY_F(5): lk = 4; break;
+ }
+ switch (lk)
+ {
+ case 0: new_or_query(w, 0x100, ANY_SUB, new_win); return;
+ case 1: do_next_pgno(w, -1, 1, 0, new_win); return;
+ case 2: new_or_query(w, 0x900, ANY_SUB, new_win); return;
+ case 3: do_next_pgno(w, 1, 1, 0, new_win); return;
+ case 4: new_or_query(w, 0x999, ANY_SUB, new_win); return;
+ }
+ }
+ err(w, "No page.");
+}
+
+
+static void do_hist_pgno(struct vtwin *w)
+{
+ if (hist(w, -1)->pgno)
+ {
+ w->hist_top--;
+ query_page(w, hist(w, 0)->pgno, hist(w, 0)->subno);
+ }
+ else
+ err(w, "Empty history.");
+}
+
+
+static void put_head_line(struct vtwin *w, u8 *p)
+{
+ char buf[40];
+
+ if (p == 0)
+ xio_get_line(w->xw, 0, buf);
+ else
+ memcpy(buf + 8, p + 8, 32);
+
+ if (w->subno == ANY_SUB)
+ sprintf(buf, "\2%3x \5\xb7", w->pgno);
+ else
+ sprintf(buf, "\2S%02x \5\xb7", w->subno & 0xff);
+
+ if (w->searching)
+ buf[0] = 1;
+ if (w->hold)
+ buf[4] = 'H';
+ if (w->xw->concealed)
+ buf[6] = '*';
+ buf[7] = 7;
+
+ xio_put_line(w->xw, 0, buf);
+}
+
+
+static void put_menu_line(struct vtwin *w)
+{
+ if (w->status > 0)
+ xio_put_line(w->xw, 24, w->statusline);
+ else if (w->vtp && w->vtp->flof)
+ xio_put_line(w->xw, 24, w->vtp->data[24]);
+ else
+ xio_put_line(w->xw, 24, "\0 100 \4<< \6Help \4>>\0 999 ");
+}
+
+
+static void _msg(struct vtwin *w, u8 *str, va_list args)
+{
+ u8 buf[128];
+ int i;
+
+ i = vsprintf(buf, str, args);
+ if (i > W)
+ i = W;
+ memset(w->statusline, ' ', W);
+ memcpy(w->statusline + (W-i+1)/2, buf, i);
+ w->status = 6;
+ put_menu_line(w);
+}
+
+
+static void msg(struct vtwin *w, u8 *str, ...)
+{
+ va_list args;
+
+ va_start(args, str);
+ _msg(w, str, args);
+ va_end(args);
+}
+
+
+static void err(struct vtwin *w, u8 *str, ...)
+{
+ va_list args;
+
+ va_start(args, str);
+ _msg(w, str, args);
+ va_end(args);
+}
+
+
+static void next_search(struct vtwin *w, int rev)
+{
+ if (w->search)
+ {
+ int pgno = w->pgno;
+ int subno = w->subno;
+ int dir = rev ? -w->searchdir : w->searchdir;
+
+ if (search_next(w->search, &pgno, &subno, dir) == 0)
+ {
+ query_page(w, pgno, subno);
+ if (not w->searching && w->search->len)
+ xio_set_selection(w->xw, w->search->x, w->search->y,
+ w->search->x + w->search->len - 1, w->search->y);
+ return;
+ }
+ else
+ err(w, "Pattern not found.");
+ }
+ else
+ err(w, "No search pattern.");
+}
+
+
+static void start_search(struct vtwin *w, u8 *string)
+{
+ if (not string)
+ return;
+
+ if (*string)
+ {
+ if (w->search)
+ search_end(w->search);
+ w->search = search_start(w->vbi->cache, string);
+ if (w->search == 0)
+ {
+ err(w, "Bad search pattern.");
+ return;
+ }
+ }
+ next_search(w, 0);
+}
+
+
+static void start_save2(struct vtwin *w, u8 *name)
+{
+ if (name && *name)
+ if (export(w->export, w->vtp, name))
+ err(w, export_errstr());
+
+ export_close(w->export);
+ w->export = 0;
+ put_menu_line(w);
+}
+
+
+struct vtwin * vtwin_new(struct xio *xio, struct vbi *vbi, char *geom,
+ struct vtwin *parent, int pgno, int subno)
+{
+ struct vtwin *w;
+
+ if (not(w = malloc(sizeof(*w))))
+ goto fail1;
+
+ if (not (w->xw = xio_open_win(xio, geom)))
+ goto fail2;
+ w->vbi = vbi;
+ w->vtp = 0;
+ w->search = 0;
+ w->export = 0;
+ w->parent = parent;
+ w->child = 0;
+ if (parent && parent->child)
+ fatal("internal error: parent already has a child != 0");
+ if (parent)
+ parent->child = w;
+
+ w->hist_top = 1;
+ hist(w,0)->pgno = 0;
+ hist(w,1)->pgno = 0;
+ w->status = 0;
+ xio_set_handler(w->xw, vtwin_event, w);
+ vbi_add_handler(w->vbi, vtwin_event, w);
+ query_page(w, pgno, subno);
+ return w;
+
+fail2:
+ free(w);
+fail1:
+ return 0;
+}
+
+
+static void vtwin_close(struct vtwin *w)
+{
+ if (w->parent)
+ w->parent->child = w->child;
+ if (w->child)
+ w->child->parent = w->parent;
+
+ if (w->search)
+ search_end(w->search);
+ if (w->export)
+ export_close(w->export);
+
+ vbi_del_handler(w->vbi, vtwin_event, w);
+ xio_close_win(w->xw, 1);
+ free(w);
+}
+
+
+static void vtwin_event(struct vtwin *w, struct vt_event *ev)
+{
+ struct xio_win *xw = w->xw;
+ int i;
+
+ switch (ev->type)
+ {
+ case EV_CLOSE:
+ vtwin_close(w);
+ break;
+
+ case EV_TIMER:
+ if (w->status > 0 && --w->status == 0)
+ put_menu_line(w);
+ break;
+
+ case EV_KEY:
+ {
+ switch (ev->i1)
+ {
+ case '0' ... '9':
+ i = ev->i1 - '0';
+ if (w->pgno >= 0x100)
+ {
+ if (i == 0)
+ break;
+ w->pgno = i;
+ }
+ else
+ {
+ w->pgno = w->pgno * 16 + i;
+ if (w->pgno >= 0x100)
+ query_page(w, w->pgno, ANY_SUB);
+ }
+ break;
+ case 'q':
+ case '\e':
+ vtwin_close(w);
+ break;
+ case 'h':
+ query_page(w, 0x900, ANY_SUB);
+ break;
+ case 'e':
+ if (w->vbi->cache)
+ {
+ i = w->vbi->cache->op->mode(w->vbi->cache,
+ CACHE_MODE_ERC, 0);
+ w->vbi->cache->op->mode(w->vbi->cache,
+ CACHE_MODE_ERC, !i);
+ msg(w, "Error reduction %sabled.", i ? "dis" : "en");
+ }
+ break;
+ case 'o':
+ if (vtwin_new(xw->xio, w->vbi, 0, 0, w->pgno, w->subno) == 0)
+ err(w, "Unable to open new window.");
+ break;
+ case KEY_RIGHT:
+ do_next_pgno(w, 1, not ev->i2, 0, 0);
+ break;
+ case KEY_LEFT:
+ do_next_pgno(w, -1, not ev->i2, 0, 0);
+ break;
+ case KEY_UP:
+ do_next_pgno(w, -1, not ev->i2, 1, 0);
+ break;
+ case KEY_DOWN:
+ do_next_pgno(w, 1, not ev->i2, 1, 0);
+ break;
+ case '\b':
+ do_hist_pgno(w);
+ break;
+ case ' ':
+ w->hold = !w->hold;
+ break;
+ case 'c':
+ vbi_reset(w->vbi);
+ break;
+ case 'i':
+ if (w->vtp && w->vtp->flof &&
+ (w->vtp->link[5].pgno & 0xff) != 0xff)
+ query_page(w, w->vtp->link[5].pgno,
+ w->vtp->link[5].subno);
+ else
+ query_page(w, 0x100, ANY_SUB);
+ break;
+ case 'r':
+ xio_set_concealed(xw, w->revealed = !w->revealed);
+ break;
+ case KEY_F(1) ... KEY_F(5):
+ do_flof_pgno(w, ev->i1, 0, ev->i2);
+ break;
+ case 'n':
+ next_search(w, 0);
+ break;
+ case 'N':
+ next_search(w, 1);
+ break;
+ default:
+ err(w, "Unused key.");
+ break;
+ }
+ break;
+ }
+ case EV_RESET:
+ {
+ if (w->search)
+ search_end(w->search);
+ w->search = 0;
+
+ query_page(w, w->pgno, w->subno);
+ msg(w, "Cache cleared!");
+ break;
+ }
+ case EV_MOUSE:
+ {
+ if (ev->i1 == 3)
+ do_hist_pgno(w);
+ else if (ev->i1 == 5) // wheel mouse
+ do_next_pgno(w, 1, not ev->i2, 0, 0);
+ else if (ev->i1 == 4) // wheel mouse
+ do_next_pgno(w, -1, not ev->i2, 0, 0);
+ else if (ev->i1 == 7) // dual wheel mouse
+ do_next_pgno(w, 1, not ev->i2, 1, 0);
+ else if (ev->i1 == 6) // dual wheel mouse
+ do_next_pgno(w, -1, not ev->i2, 1, 0);
+ else if (ev->i4 == 24)
+ do_flof_pgno(w, ev->i1, ev->i3, ev->i1 == 2);
+ else if (ev->i4 == 0 && ev->i3 < 5)
+ {
+ if (ev->i1 == 1)
+ w->hold = !w->hold;
+ else
+ vtwin_new(xw->xio, w->vbi, 0, 0, w->pgno, w->subno);
+ }
+ else if (ev->i4 == 0 && ev->i3 < 8)
+ {
+ if (ev->i1 == 2 && w->child)
+ w = w->child;
+ xio_set_concealed(w->xw, w->revealed = !w->revealed);
+ }
+ else
+ do_screen_pgno(w, ev->i3, ev->i4, ev->i1 == 2);
+ break;
+ }
+ case EV_PAGE:
+ {
+ struct vt_page *vtp = ev->p1;
+
+ if (0)
+ if (vtp->errors)
+ printf("errors=%4d\n",vtp->errors);
+ if (w->searching || not(w->hold || ev->i1))
+ if (vtp->pgno == w->pgno)
+ if (w->subno == ANY_SUB || vtp->subno == w->subno)
+ {
+ w->searching = 0;
+ w->vtp = vtp;
+ put_head_line(w, vtp->data[0]);
+ for (i = 1; i < 24; ++i)
+ xio_put_line(w->xw, i, vtp->data[i]);
+ put_menu_line(w);
+ set_title(w);
+ }
+ break;
+ }
+ case EV_HEADER:
+ {
+ u8 *p = ev->p1;
+ int hdr_mag = ev->i1 / 256;
+ int flags = ev->i3;
+ int mag = w->pgno;
+ if (mag >= 0x10)
+ mag = mag >> 4;
+ if (mag >= 0x10)
+ mag = mag >> 4;
+ if (flags & PG_OUTOFSEQ)
+ p = 0;
+ else
+ if (~flags & PG_MAGSERIAL)
+ if (mag != hdr_mag)
+ p = 0;
+
+ put_head_line(w, p);
+ break;
+ }
+ case EV_XPACKET:
+ {
+#if 0 /* VPS data (seems to be unused in .de */
+ u8 *p = ev->p1;
+
+ if (ev->i1 == 8 && ev->i2 == 30 && p[0]/2 == 1)
+ {
+ int i;
+ int pil, cni, pty, misc;
+
+ for (i = 7; i < 20; ++i)
+ p[i] = hamm8(p+i, &ev->i3);
+ if (ev->i3 & 0xf000) /* uncorrectable errors */
+ break;
+ cni = p[9] + p[15]/4*16 + p[16]%4*64 + p[10]%4*256
+ + p[16]/4*1024 + p[17]*4096;
+ pty = p[18] + p[19]*16;
+ pil = p[10]/4 + p[11]*4 + p[12]*64 + p[13]*1024
+ + p[14]*16384 + p[15]%4*262144;
+ misc = p[7] + p[8]*16;
+ err(w, "%02x %04x %05x %02x: %.20s", misc, cni, pil, pty, p+20);
+ }
+#endif
+ break;
+ }
+ case EV_ERR:
+ {
+ char *errmsg = ev->p1;
+ if (errmsg != NULL && *errmsg != '\0')
+ {
+ err(w, errmsg);
+ w->status = 30;
+ ev->p1 = NULL;
+ free(errmsg);
+ }
+ break;
+ }
+ }
+}
diff --git a/util/alevt/ui.h b/util/alevt/ui.h
new file mode 100644
index 0000000..9efc791
--- /dev/null
+++ b/util/alevt/ui.h
@@ -0,0 +1,35 @@
+#ifndef UI_H
+#define UI_H
+
+#include "vt.h"
+#include "xio.h"
+#include "vbi.h"
+#include "search.h"
+
+#define N_HISTORY (1 << 6) // number of history entries
+
+struct vtwin
+{
+ struct vtwin *parent, *child;
+ struct xio_win *xw;
+ struct vbi *vbi;
+ struct {
+ int pgno;
+ int subno;
+ } hist[N_HISTORY];
+ int hist_top;
+ int searching;
+ int revealed;
+ int hold;
+ int pgno, subno;
+ struct vt_page *vtp;
+ struct search *search;
+ int searchdir;
+ int status;
+ u8 statusline[W+1];
+ struct export *export;
+};
+
+extern struct vtwin *vtwin_new(struct xio *xio, struct vbi *vbi, char *geom,
+ struct vtwin *parent, int pgno, int subno);
+#endif
diff --git a/util/alevt/vbi.c b/util/alevt/vbi.c
new file mode 100644
index 0000000..6a8a47e
--- /dev/null
+++ b/util/alevt/vbi.c
@@ -0,0 +1,942 @@
+#define _GNU_SOURCE
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <sys/ioctl.h>
+#include <sys/poll.h>
+#include "os.h"
+#include "vt.h"
+#include "misc.h"
+#include "vbi.h"
+#include "fdset.h"
+#include "hamm.h"
+#include "lang.h"
+#include <libzvbi.h>
+
+
+static vbi_capture * pZvbiCapt;
+static vbi_raw_decoder * pZvbiRawDec;
+static vbi_sliced * pZvbiData;
+static vbi_proxy_client * pProxy;
+
+#define ZVBI_BUFFER_COUNT 10
+#define ZVBI_TRACE 0
+
+
+static int vbi_dvb_open(struct vbi *vbi, const char *vbi_name,
+ const char *channel, char *outfile, u_int16_t sid, int ttpid);
+static void dvb_handler(struct vbi *vbi, int fd);
+
+#define FAC (1<<16) // factor for fix-point arithmetic
+
+static u8 *rawbuf; // one common buffer for raw vbi data
+static int rawbuf_size; // its current size
+u_int16_t sid;
+static char *vbi_names[]
+ = { "/dev/vbi", "/dev/vbi0", "/dev/video0", "/dev/dvb/adapter0/demux0",
+ NULL }; // default device names if none was given at the command line
+
+
+static void out_of_sync(struct vbi *vbi)
+{
+ int i; // discard all in progress pages
+ for (i = 0; i < 8; ++i)
+ vbi->rpage[i].page->flags &= ~PG_ACTIVE;
+}
+
+
+// send an event to all clients
+static void vbi_send(struct vbi *vbi, int type, int i1, int i2, int i3, void *p1)
+{
+ struct vt_event ev[1];
+ struct vbi_client *cl, *cln;
+ ev->resource = vbi;
+ ev->type = type;
+ ev->i1 = i1;
+ ev->i2 = i2;
+ ev->i3 = i3;
+ ev->p1 = p1;
+ for (cl = PTR vbi->clients->first; cln = PTR cl->node->next; cl = cln)
+ cl->handler(cl->data, ev);
+}
+
+
+static void vbi_send_page(struct vbi *vbi, struct raw_page *rvtp, int page)
+{
+ struct vt_page *cvtp = 0;
+
+ if (rvtp->page->flags & PG_ACTIVE)
+ {
+ if (rvtp->page->pgno % 256 != page)
+ {
+ rvtp->page->flags &= ~PG_ACTIVE;
+ enhance(rvtp->enh, rvtp->page);
+ if (vbi->cache)
+ cvtp = vbi->cache->op->put(vbi->cache, rvtp->page);
+ vbi_send(vbi, EV_PAGE, 0, 0, 0, cvtp ?: rvtp->page);
+ }
+ }
+}
+
+
+static void pll_add(struct vbi *vbi, int n, int err)
+{
+}
+
+
+// process one videotext packet
+static int vt_line(struct vbi *vbi, u8 *p)
+{
+ struct vt_page *cvtp;
+ struct raw_page *rvtp;
+ int hdr, mag, mag8, pkt, i;
+ int err = 0;
+
+ hdr = hamm16(p, &err);
+ if (err & 0xf000)
+ return -4;
+ mag = hdr & 7;
+ mag8 = mag?: 8;
+ pkt = (hdr >> 3) & 0x1f;
+ p += 2;
+ rvtp = vbi->rpage + mag;
+ cvtp = rvtp->page;
+ switch (pkt)
+ {
+ case 0:
+ {
+ int b1, b2, b3, b4;
+ b1 = hamm16(p, &err); // page number
+ b2 = hamm16(p+2, &err); // subpage number + flags
+ b3 = hamm16(p+4, &err); // subpage number + flags
+ b4 = hamm16(p+6, &err); // language code + more flags
+ if (vbi->ppage->page->flags & PG_MAGSERIAL)
+ vbi_send_page(vbi, vbi->ppage, b1);
+ vbi_send_page(vbi, rvtp, b1);
+
+ if (err & 0xf000)
+ return 4;
+
+ cvtp->errors = (err >> 8) + chk_parity(p + 8, 32);;
+ cvtp->pgno = mag8 * 256 + b1;
+ cvtp->subno = (b2 + b3 * 256) & 0x3f7f;
+ cvtp->lang = "\0\4\2\6\1\5\3\7"[b4 >> 5] + (latin1==LATIN1 ? 0 : 8);
+ cvtp->flags = b4 & 0x1f;
+ cvtp->flags |= b3 & 0xc0;
+ cvtp->flags |= (b2 & 0x80) >> 2;
+ cvtp->lines = 1;
+ cvtp->flof = 0;
+ vbi->ppage = rvtp;
+ pll_add(vbi, 1, cvtp->errors);
+ conv2latin(p + 8, 32, cvtp->lang);
+ vbi_send(vbi, EV_HEADER, cvtp->pgno, cvtp->subno, cvtp->flags, p);
+
+ if (b1 == 0xff)
+ return 0;
+ cvtp->flags |= PG_ACTIVE;
+ init_enhance(rvtp->enh);
+ memcpy(cvtp->data[0]+0, p, 40);
+ memset(cvtp->data[0]+40, ' ', sizeof(cvtp->data)-40);
+ return 0;
+ }
+
+ case 1 ... 24:
+ {
+ pll_add(vbi, 1, err = chk_parity(p, 40));
+
+ if (~cvtp->flags & PG_ACTIVE)
+ return 0;
+
+ cvtp->errors += err;
+ cvtp->lines |= 1 << pkt;
+ conv2latin(p, 40, cvtp->lang);
+ memcpy(cvtp->data[pkt], p, 40);
+ return 0;
+ }
+ case 26:
+ {
+ int d, t[13];
+
+ if (~cvtp->flags & PG_ACTIVE)
+ return 0;
+
+ d = hamm8(p, &err);
+ if (err & 0xf000)
+ return 4;
+
+ for (i = 0; i < 13; ++i)
+ t[i] = hamm24(p + 1 + 3*i, &err);
+ if (err & 0xf000)
+ return 4;
+
+ add_enhance(rvtp->enh, d, t);
+ return 0;
+ }
+ case 27:
+ {
+ int b1,b2,b3,x;
+ if (~cvtp->flags & PG_ACTIVE)
+ return 0; // -1 flushes all pages. We may never resync again
+
+ b1 = hamm8(p, &err);
+ b2 = hamm8(p + 37, &err);
+ if (err & 0xf000)
+ return 4;
+ if (b1 != 0 || not(b2 & 8))
+ return 0;
+
+ for (i = 0; i < 6; ++i)
+ {
+ err = 0;
+ b1 = hamm16(p+1+6*i, &err);
+ b2 = hamm16(p+3+6*i, &err);
+ b3 = hamm16(p+5+6*i, &err);
+ if (err & 0xf000)
+ return 1;
+ x = (b2 >> 7) | ((b3 >> 5) & 0x06);
+ cvtp->link[i].pgno = ((mag ^ x) ?: 8) * 256 + b1;
+ cvtp->link[i].subno = (b2 + b3 * 256) & 0x3f7f;
+ }
+ cvtp->flof = 1;
+ return 0;
+ }
+ case 30:
+ {
+ if (mag8 != 8)
+ return 0;
+ p[0] = hamm8(p, &err); // designation code
+ p[1] = hamm16(p+1, &err); // initial page
+ p[3] = hamm16(p+3, &err); // initial subpage + mag
+ p[5] = hamm16(p+5, &err); // initial subpage + mag
+ if (err & 0xf000)
+ return 4;
+ err += chk_parity(p+20, 20);
+ conv2latin(p+20, 20, 0);
+ vbi_send(vbi, EV_XPACKET, mag8, pkt, err, p);
+ return 0;
+ }
+ default:
+ return 0;
+ }
+ return 0;
+}
+
+
+// called when new vbi data is waiting
+static void vbi_handler(struct vbi *vbi, int fd)
+{
+ double timestamp;
+ struct timeval timeout;
+ int lineCount;
+ int line;
+ int res;
+
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 25000;
+ res = vbi_capture_read_sliced(pZvbiCapt, pZvbiData, &lineCount, &timestamp,
+ &timeout);
+ if (res > 0)
+ {
+ for (line=0; line < lineCount; line++)
+ {
+ if ((pZvbiData[line].id & VBI_SLICED_TELETEXT_B) != 0)
+ {
+ vt_line(vbi, pZvbiData[line].data);
+ }
+ }
+ }
+ else if (res < 0)
+ {
+ }
+}
+
+
+int vbi_add_handler(struct vbi *vbi, void *handler, void *data)
+{
+ struct vbi_client *cl;
+
+ if (not(cl = malloc(sizeof(*cl))))
+ return -1;
+ cl->handler = handler;
+ cl->data = data;
+ dl_insert_last(vbi->clients, cl->node);
+ return 0;
+}
+
+
+void vbi_del_handler(struct vbi *vbi, void *handler, void *data)
+{
+ struct vbi_client *cl;
+
+ for (cl = PTR vbi->clients->first; cl->node->next; cl = PTR cl->node->next)
+ if (cl->handler == handler && cl->data == data)
+ {
+ dl_remove(cl->node);
+ break;
+ }
+ return;
+}
+
+
+struct vbi * vbi_open(char *vbi_name, struct cache *ca,
+ const char *channel, char *outfile, u_int16_t sid, int ttpid)
+{
+ static int inited = 0;
+ struct vbi *vbi;
+ char * pErrStr;
+ int services;
+
+ if (vbi_name == NULL)
+ {
+ int i;
+ char *tried_devices = NULL;
+ char *old_tried_devices = NULL;
+ for (i = 0; vbi_names[i] != NULL; i++)
+ {
+ vbi_name = vbi_names[i];
+ // collect device names for the error message below
+ if (old_tried_devices)
+ {
+ if (asprintf(&tried_devices, "%s, %s", old_tried_devices, vbi_name) < 0)
+ tried_devices = NULL;
+ free(old_tried_devices);
+ }
+ else if (asprintf(&tried_devices, "%s", vbi_name) < 0)
+ tried_devices = NULL;
+ if (tried_devices == NULL)
+ out_of_mem(-1);
+ old_tried_devices = tried_devices;
+ if (access(vbi_name, R_OK) != 0)
+ continue;
+ vbi = vbi_open(vbi_name, ca, channel, outfile, sid, ttpid);
+ if (vbi != NULL)
+ {
+ if (tried_devices != NULL)
+ free(tried_devices);
+ return vbi;
+ }
+ }
+
+ error("could not open any of the standard devices (%s)", tried_devices);
+ free(tried_devices);
+ return NULL;
+ }
+
+ if (not inited)
+ lang_init();
+ inited = 1;
+
+ if (not(vbi = malloc(sizeof(*vbi))))
+ {
+ error("out of memory");
+ goto fail1;
+ }
+ if (!vbi_dvb_open(vbi, vbi_name, channel, outfile, sid, ttpid)) {
+ vbi->cache = ca;
+ dl_init(vbi->clients);
+ out_of_sync(vbi);
+ vbi->ppage = vbi->rpage;
+ fdset_add_fd(fds, vbi->fd, dvb_handler, vbi);
+ return vbi;
+ }
+
+ services = VBI_SLICED_TELETEXT_B;
+ pErrStr = NULL;
+ vbi->fd = -1;
+
+ pProxy = vbi_proxy_client_create(vbi_name, "alevt",
+ VBI_PROXY_CLIENT_NO_STATUS_IND, &pErrStr, ZVBI_TRACE);
+ if (pProxy != NULL)
+ {
+ pZvbiCapt = vbi_capture_proxy_new(pProxy, ZVBI_BUFFER_COUNT, 0,
+ &services, 0, &pErrStr);
+ if (pZvbiCapt == NULL)
+ {
+ vbi_proxy_client_destroy(pProxy);
+ pProxy = NULL;
+ }
+ }
+ if (pZvbiCapt == NULL)
+ pZvbiCapt = vbi_capture_v4l2_new(vbi_name, ZVBI_BUFFER_COUNT,
+ &services, 0, &pErrStr, ZVBI_TRACE);
+ if (pZvbiCapt == NULL)
+ pZvbiCapt = vbi_capture_v4l_new(vbi_name, 0, &services, 0, &pErrStr,
+ ZVBI_TRACE);
+
+ if (pZvbiCapt != NULL)
+ {
+ pZvbiRawDec = vbi_capture_parameters(pZvbiCapt);
+ if ((pZvbiRawDec != NULL) && ((services & VBI_SLICED_TELETEXT_B) != 0))
+ {
+ pZvbiData = malloc((pZvbiRawDec->count[0] + pZvbiRawDec->count[1]) \
+ * sizeof(*pZvbiData));
+
+ vbi->fd = vbi_capture_fd(pZvbiCapt);
+ }
+ else
+ vbi_capture_delete(pZvbiCapt);
+ }
+
+ if (pErrStr != NULL)
+ {
+ fprintf(stderr, "libzvbi: %s\n", pErrStr);
+ free(pErrStr);
+ }
+
+ if (vbi->fd == -1)
+ goto fail2;
+ vbi->cache = ca;
+ dl_init(vbi->clients);
+ out_of_sync(vbi);
+ vbi->ppage = vbi->rpage;
+ fdset_add_fd(fds, vbi->fd, vbi_handler, vbi);
+ return vbi;
+
+fail3:
+ close(vbi->fd);
+fail2:
+ free(vbi);
+fail1:
+ return 0;
+}
+
+
+void vbi_close(struct vbi *vbi)
+{
+ fdset_del_fd(fds, vbi->fd);
+ if (vbi->cache)
+ vbi->cache->op->close(vbi->cache);
+
+ if (pZvbiData != NULL)
+ free(pZvbiData);
+ pZvbiData = NULL;
+
+ if (pZvbiCapt != NULL)
+ {
+ vbi_capture_delete(pZvbiCapt);
+ pZvbiCapt = NULL;
+ }
+ if (pProxy != NULL)
+ {
+ vbi_proxy_client_destroy(pProxy);
+ pProxy = NULL;
+ }
+ free(vbi);
+}
+
+
+struct vt_page * vbi_query_page(struct vbi *vbi, int pgno, int subno)
+{
+ struct vt_page *vtp = 0;
+ if (vbi->cache)
+ vtp = vbi->cache->op->get(vbi->cache, pgno, subno);
+ if (vtp == 0)
+ {
+ return 0;
+ }
+ vbi_send(vbi, EV_PAGE, 1, 0, 0, vtp);
+ return vtp;
+}
+
+
+void vbi_reset(struct vbi *vbi)
+{
+ if (vbi->cache)
+ vbi->cache->op->reset(vbi->cache);
+ vbi_send(vbi, EV_RESET, 0, 0, 0, 0);
+}
+
+
+/* Starting from here: DVB API */
+#include <linux/dvb/dmx.h>
+#include <linux/dvb/frontend.h>
+#include <linux/dvb/video.h>
+
+static int dvb_get_table(int fd, u_int16_t pid, u_int8_t tblid, u_int8_t *buf,
+ size_t bufsz)
+{
+ struct dmx_sct_filter_params sctFilterParams;
+ struct pollfd pfd;
+ int r;
+ memset(&sctFilterParams, 0, sizeof(sctFilterParams));
+ sctFilterParams.pid = pid;
+ sctFilterParams.timeout = 10000;
+ sctFilterParams.flags = DMX_ONESHOT | DMX_IMMEDIATE_START | DMX_CHECK_CRC;
+ sctFilterParams.filter.filter[0] = tblid;
+ sctFilterParams.filter.mask[0] = 0xff;
+ if (ioctl(fd, DMX_SET_FILTER, &sctFilterParams)) {
+ perror("DMX_SET_FILTER");
+ return -1;
+ }
+ pfd.fd = fd;
+ pfd.events = POLLIN;
+ r = poll(&pfd, 1, 10000);
+ if (r < 0) {
+ perror("poll");
+ goto out;
+ }
+ if (r > 0) {
+ r = read(fd, buf, bufsz);
+ if (r < 0) {
+ perror("read");
+ goto out;
+ }
+ }
+ out:
+ ioctl(fd, DMX_STOP, 0);
+ return r;
+}
+
+static const u_int8_t byterev8[256] = {
+ 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
+ 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
+ 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
+ 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
+ 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
+ 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
+ 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
+ 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
+ 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
+ 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
+ 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
+ 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
+ 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
+ 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
+ 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
+ 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
+ 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
+ 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
+ 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
+ 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
+ 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
+ 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
+ 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
+ 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
+ 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
+ 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
+ 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
+ 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
+ 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
+ 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
+ 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
+ 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
+};
+
+static void dvb_handle_pes_payload(struct vbi *vbi, const u_int8_t *buf,
+ unsigned int len)
+{
+ unsigned int p, i;
+ u_int8_t data[42];
+
+ if (buf[0] < 0x10 || buf[0] > 0x1f)
+ return; /* no EBU teletext data */
+ for (p = 1; p < len; p += /*6 + 40*/ 2 + buf[p + 1]) {
+#if 0
+ printf("Txt Line:\n"
+ " data_unit_id 0x%02x\n"
+ " data_unit_length 0x%02x\n"
+ " reserved_for_future_use 0x%01x\n"
+ " field_parity 0x%01x\n"
+ " line_offset 0x%02x\n"
+ " framing_code 0x%02x\n"
+ " magazine_and_packet_addr 0x%04x\n"
+ " data_block 0x%02x 0x%02x 0x%02x 0x%02x\n",
+ buf[p], buf[p+1],
+ buf[p+2] >> 6,
+ (buf[p+2] >> 5) & 1,
+ buf[p+2] & 0x1f,
+ buf[p+3],
+ (buf[p+4] << 8) | buf[p+5],
+ buf[p+6], buf[p+7], buf[p+8], buf[p+9]);
+#endif
+ for (i = 0; i < sizeof(data); i++)
+ data[i] = byterev8[buf[p+4+i]];
+ /* note: we should probably check for missing lines and then
+ * call out_of_sync(vbi); and/or vbi_reset(vbi); */
+ vt_line(vbi, data);
+ }
+}
+
+static unsigned int rawptr;
+
+static void dvb_handler(struct vbi *vbi, int fd)
+{
+ /* PES packet start code prefix and stream_id == private_stream_1 */
+ static const u_int8_t peshdr[4] = { 0x00, 0x00, 0x01, 0xbd };
+ u_int8_t *bp;
+ int n;
+ unsigned int p, i, len;
+ u_int16_t rpid;
+ u_int32_t crc, crccomp;
+
+ if (rawptr >= (unsigned int)rawbuf_size)
+ rawptr = 0;
+ n = read(vbi->fd, rawbuf + rawptr, rawbuf_size - rawptr);
+ if (n <= 0)
+ return;
+ rawptr += n;
+ if (rawptr < 6)
+ return;
+ if (memcmp(rawbuf, peshdr, sizeof(peshdr))) {
+ bp = memmem(rawbuf, rawptr, peshdr, sizeof(peshdr));
+ if (!bp)
+ return;
+ rawptr -= (bp - rawbuf);
+ memmove(rawbuf, bp, rawptr);
+ if (rawptr < 6)
+ return;
+ }
+ len = (rawbuf[4] << 8) | rawbuf[5];
+ if (len < 9) {
+ rawptr = 0;
+ return;
+ }
+ if (rawptr < len + 6)
+ return;
+ p = 9 + rawbuf[8];
+#if 0
+ for (i = 0; i < len - p; i++) {
+ if (!(i & 15))
+ printf("\n%04x:", i);
+ printf(" %02x", rawbuf[p + i]);
+ }
+ printf("\n");
+#endif
+ if (!dl_empty(vbi->clients))
+ dvb_handle_pes_payload(vbi, rawbuf + p, len - p);
+ rawptr -= len;
+ if (rawptr)
+ memmove(rawbuf, rawbuf + len, rawptr);
+}
+
+
+static int vbi_dvb_open(struct vbi *vbi, const char *vbi_name,
+ const char *channel, char *outfile, u_int16_t sid, int ttpid)
+{
+ struct {
+ u_int16_t pmtpid;
+ u_int16_t ttpid;
+ u_int16_t service_id;
+ u_int8_t service_type;
+ char service_provider_name[64];
+ char service_name[64];
+ u_int8_t txtlang[3];
+ u_int8_t txttype;
+ u_int8_t txtmagazine;
+ u_int8_t txtpage;
+ } progtbl[16], *progp;
+ u_int8_t tbl[4096];
+ u_int8_t * ppname, * psname, pncode, sncode, pnlen, snlen;
+ int r;
+ FILE *ofd;
+ unsigned int i, j, k, l, progcnt = 0;
+ struct dmx_pes_filter_params filterpar;
+
+ /* open DVB demux device */
+ if (!vbi_name)
+ vbi_name = "/dev/dvb/adapter0/demux0";
+ if ((vbi->fd = open(vbi_name, O_RDWR)) == -1) {
+ error("cannot open demux device %s", vbi_name);
+ return -1;
+ }
+ memset(progtbl, 0, sizeof(progtbl));
+ if (ttpid >= 0x15 && ttpid < 0x1fff) {
+ vbi->ttpid = ttpid;
+ printf("Using command line specified teletext PID 0x%x\n",
+ vbi->ttpid);
+ goto ttpidfound;
+ }
+ /* parse PAT to enumerate services and to find the PMT PIDs */
+ r = dvb_get_table(vbi->fd, 0, 0, tbl, sizeof(tbl));
+ if (r == -1)
+ goto outerr;
+ if (!(tbl[5] & 1)) {
+ error("PAT not active (current_next_indicator == 0)");
+ goto outerr;
+ }
+ if (tbl[6] != 0 || tbl[7] != 0) {
+ error("PAT has multiple sections");
+ goto outerr;
+ }
+ if (r < 13) {
+ error("PAT too short\n");
+ goto outerr;
+ }
+ r -= 13;
+ for (i = 0; i < (unsigned)r; i += 4) {
+ if (progcnt >= sizeof(progtbl)/sizeof(progtbl[0])) {
+ error("Program table overflow");
+ goto outerr;
+ }
+ progtbl[progcnt].service_id = (tbl[8 + i] << 8) | tbl[9 + i];
+ if (!progtbl[progcnt].service_id) /* this is the NIT pointer */
+ continue;
+ progtbl[progcnt].pmtpid = ((tbl[10 + i] << 8) | tbl[11 + i])
+ & 0x1fff;
+ progcnt++;
+ }
+ /* find the SDT to get the station names */
+ r = dvb_get_table(vbi->fd, 0x11, 0x42, tbl, sizeof(tbl));
+ if (r == -1)
+ goto outerr;
+ if (!(tbl[5] & 1)) {
+ error("SDT not active (current_next_indicator == 0)");
+ goto outerr;
+ }
+ if (tbl[6] != 0 || tbl[7] != 0) {
+ error("SDT has multiple sections");
+ goto outerr;
+ }
+ if (r < 12) {
+ error("SDT too short\n");
+ goto outerr;
+ }
+ i = 11;
+ while (i < (unsigned)r - 1) {
+ k = (tbl[i] << 8) | tbl[i+1]; /* service ID */
+ progp = NULL;
+ for (j = 0; j < progcnt; j++)
+ if (progtbl[j].service_id == k) {
+ progp = &progtbl[j];
+ break;
+ }
+ j = i + 5;
+ i = j + (((tbl[i+3] << 8) | tbl[i+4]) & 0x0fff);
+ if (!progp) {
+ error("SDT: service_id 0x%x not in PAT\n", k);
+ continue;
+ }
+ while (j < i) {
+ switch (tbl[j]) {
+ case 0x48: // service descriptor
+ k = j + 4 + tbl[j + 3];
+ progp->service_type = tbl[j+2];
+ ppname = tbl+j+4 ; // points to 1st byte of provider_name
+ pncode = *ppname ; // 1st byte of provider_name
+ pnlen = tbl[j+3]; // length of provider_name
+ psname = tbl+k+1 ; // points to 1st byte of service_name
+ sncode = *psname ; // 1st byte of service_name
+ snlen = tbl[k] ; // length of service_name
+ if (pncode >= 0x20) {
+ pncode = 0 ; // default character set Latin alphabet fig.A.1
+ } else {
+ ppname++ ; pnlen-- ;
+ // character code from table A.3 1st byte = ctrl-code
+ }
+ if (sncode >= 0x20) {
+ sncode = 0 ; // default character set Latin alphabet fig.A.1
+ } else {
+ psname++ ; snlen-- ;
+ // character code from table A.3 ; 1st byte = ctrl-code
+ }
+ snprintf(progp->service_provider_name,
+ sizeof(progp->service_provider_name), "%.*s", pnlen, ppname);
+ snprintf(progp->service_name,
+ sizeof(progp->service_name), "%.*s", snlen, psname); break;
+ }
+ j += 2 + tbl[j + 1]; // next descriptor
+ }
+ }
+ /* parse PMT's to find Teletext Services */
+ for (l = 0; l < progcnt; l++) {
+ progtbl[l].ttpid = 0x1fff;
+ if (progtbl[l].service_type != 0x01 || /* not digital TV */
+ progtbl[l].pmtpid < 0x15 || /* PMT PID sanity check */
+ progtbl[l].pmtpid >= 0x1fff)
+ continue;
+ r = dvb_get_table(vbi->fd, progtbl[l].pmtpid, 0x02, tbl,
+ sizeof(tbl));
+ if (r == -1)
+ goto outerr;
+ if (!(tbl[5] & 1)) { error \
+ ("PMT pid 0x%x not active (current_next_indicator == 0)",
+ progtbl[l].pmtpid);
+ goto outerr;
+ }
+ if (tbl[6] != 0 || tbl[7] != 0) {
+ error("PMT pid 0x%x has multiple sections",
+ progtbl[l].pmtpid);
+ goto outerr;
+ }
+ if (r < 13) {
+ error("PMT pid 0x%x too short\n", progtbl[l].pmtpid);
+ goto outerr;
+ }
+ i = 12 + (((tbl[10] << 8) | tbl[11]) & 0x0fff);
+ /* skip program info section */
+ while (i <= (unsigned)r-6) {
+ j = i + 5;
+ i = j + (((tbl[i + 3] << 8) | tbl[i + 4]) & 0x0fff);
+ if (tbl[j - 5] != 0x06)
+ /* teletext streams have type 0x06 */
+ continue;
+ k = ((tbl[j - 4] << 8) | tbl[j - 3]) & 0x1fff;
+ /* elementary PID - save until we know if it's teletext PID */
+ while (j < i) {
+ switch (tbl[j]) {
+ case 0x56: /* EBU teletext descriptor */
+ progtbl[l].txtlang[0] = tbl[j + 2];
+ progtbl[l].txtlang[1] = tbl[j + 3];
+ progtbl[l].txtlang[2] = tbl[j + 4];
+ progtbl[l].txttype = tbl[j + 5] >> 3;
+ progtbl[l].txtmagazine = tbl[j + 5] & 7;
+ progtbl[l].txtpage = tbl[j + 6];
+ progtbl[l].ttpid = k;
+ break;
+ }
+ j += 2 + tbl[j + 1];
+ }
+ }
+ }
+
+ printf \
+ ("sid:pmtpid:ttpid:type:provider:name:language:texttype:magazine:page\n\n");
+ for (i = 0; i < progcnt; i++) {
+ printf("%d:%d:%d:%d:%s:%s:lang=%.3s:type=%d:magazine=%1u:page=%3u\n",
+ progtbl[i].service_id, progtbl[i].pmtpid, progtbl[i].ttpid,
+ progtbl[i].service_type, progtbl[i].service_provider_name,
+ progtbl[i].service_name, progtbl[i].txtlang, progtbl[i].txttype,
+ progtbl[i].txtmagazine, progtbl[i].txtpage);
+ }
+
+ if (*outfile) {
+ ofd = fopen(outfile,"w") ;
+ if (ofd == NULL) { error("cannot open outfile\n"); goto outerr ; }
+ for (i = 0; i < progcnt; i++) {
+ if (progtbl[i].ttpid == 0x1fff) continue ; // service without teletext
+ fprintf(ofd,"%d:%d:%s:%s:lang=%.3s\n",
+ progtbl[i].service_id, progtbl[i].ttpid, progtbl[i].service_provider_name,
+ progtbl[i].service_name, progtbl[i].txtlang);
+ }
+ fclose(ofd) ;
+ }
+
+ progp = NULL;
+
+ if (channel) {
+ j = strlen(channel);
+ for (i = 0; i < progcnt; i++)
+ if (!strncmp(progtbl[i].service_name, channel, j)
+ && progtbl[i].ttpid != 0x1fff) { progp = &progtbl[i];
+ break ;
+ }
+ }
+
+ if (channel && !progp) {
+ j = strlen(channel);
+ for (i = 0; i < progcnt; i++)
+ if (!strncasecmp(progtbl[i].service_name, channel, j)
+ && progtbl[i].ttpid != 0x1fff) { progp = &progtbl[i];
+ break ;
+ }
+ }
+
+ if (sid) {
+ for (i = 0; i < progcnt; i++) {
+ if ((progtbl[i].service_id == sid) && (progtbl[i].ttpid != 0x1fff)) {
+ progp = &progtbl[i]; break ; }
+ }
+ }
+
+ if (!progp) {
+ for (i = 0; i < progcnt; i++)
+ if (progtbl[i].ttpid != 0x1fff) {
+ progp = &progtbl[i]; break ;
+ }
+ }
+
+ printf("\nUsing: Service ID = %d ; PMT PID = %d ; TXT PID = %d ;\n"
+ "Service type = %d ; Provider Name = %s ; Service name = %s ;\n"
+ "language = %.3s ; Text type = %d ; Text Magazine = %1u ; Text page = %3u\n",
+ progp->service_id, progp->pmtpid, progp->ttpid, progp->service_type,
+ progp->service_provider_name, progp->service_name, progp->txtlang,
+ progp->txttype, progp->txtmagazine, progp->txtpage);
+ vbi->ttpid = progp->ttpid;
+
+ ttpidfound:
+ rawbuf = malloc(rawbuf_size = 8192);
+ if (!rawbuf)
+ goto outerr;
+ rawptr = 0;
+#if 0
+ close(vbi->fd);
+ if ((vbi->fd = open(vbi_name, O_RDWR)) == -1) {
+ error("cannot open demux device %s", vbi_name);
+ return -1;
+ }
+#endif
+ memset(&filterpar, 0, sizeof(filterpar));
+ filterpar.pid = vbi->ttpid;
+ filterpar.input = DMX_IN_FRONTEND;
+ filterpar.output = DMX_OUT_TAP;
+ filterpar.pes_type = DMX_PES_OTHER;
+ filterpar.flags = DMX_IMMEDIATE_START;
+ if (ioctl(vbi->fd, DMX_SET_PES_FILTER, &filterpar) < 0) {
+ error("ioctl: DMX_SET_PES_FILTER %s (%u)", strerror(errno), errno);
+ goto outerr;
+ }
+ return 0;
+
+ outerr:
+ close(vbi->fd);
+ vbi->fd = -1;
+ return -1;
+}
+
+
+struct vbi *open_null_vbi(struct cache *ca)
+{
+ static int inited = 0;
+ struct vbi *vbi;
+
+ if (not inited)
+ lang_init();
+ inited = 1;
+
+ vbi = malloc(sizeof(*vbi));
+ if (!vbi)
+ {
+ error("out of memory");
+ goto fail1;
+ }
+
+ vbi->fd = open("/dev/null", O_RDONLY);
+ if (vbi->fd == -1)
+ {
+ error("cannot open null device");
+ goto fail2;
+ }
+
+ vbi->ttpid = -1;
+ out_of_sync(vbi);
+ vbi->ppage = vbi->rpage;
+ fdset_add_fd(fds, vbi->fd, vbi_handler, vbi);
+ return vbi;
+
+fail3:
+ close(vbi->fd);
+fail2:
+ free(vbi);
+fail1:
+ return 0;
+}
+
+
+void send_errmsg(struct vbi *vbi, char *errmsg, ...)
+{
+ va_list args;
+ if (errmsg == NULL || *errmsg == '\0')
+ return;
+ va_start(args, errmsg);
+ char *buff = NULL;
+ if (vasprintf(&buff, errmsg, args) < 0)
+ buff = NULL;
+ va_end(args);
+ if(buff == NULL)
+ out_of_mem(-1);
+ vbi_send(vbi, EV_ERR, 0, 0, 0, buff);
+}
diff --git a/util/alevt/vbi.h b/util/alevt/vbi.h
new file mode 100644
index 0000000..edb9dab
--- /dev/null
+++ b/util/alevt/vbi.h
@@ -0,0 +1,47 @@
+#ifndef VBI_H
+#define VBI_H
+
+#include "vt.h"
+#include "dllist.h"
+#include "cache.h"
+#include "lang.h"
+
+#define PLL_ADJUST 4
+
+struct raw_page
+{
+ struct vt_page page[1];
+ struct enhance enh[1];
+};
+
+struct vbi
+{
+ int fd;
+ struct cache *cache;
+ struct dl_head clients[1];
+ // page assembly
+ struct raw_page rpage[8]; // one for each magazin
+ struct raw_page *ppage; // points to page of previous pkt0
+ // DVB stuff
+ unsigned int ttpid;
+ u_int16_t sid;
+};
+
+struct vbi_client
+{
+ struct dl_node node[1];
+ void (*handler)(void *data, struct vt_event *ev);
+ void *data;
+};
+
+struct vbi *vbi_open(char *vbi_dev_name, struct cache *ca,
+ const char *channel, char *outfile, u_int16_t sid, int ttpid);
+void vbi_close(struct vbi *vbi);
+void vbi_reset(struct vbi *vbi);
+int vbi_add_handler(struct vbi *vbi, void *handler, void *data);
+void vbi_del_handler(struct vbi *vbi, void *handler, void *data);
+struct vt_page *vbi_query_page(struct vbi *vbi, int pgno, int subno);
+
+struct vbi *open_null_vbi(struct cache *ca);
+void send_errmsg(struct vbi *vbi, char *errmsg, ...);
+#endif
diff --git a/util/alevt/vt.h b/util/alevt/vt.h
new file mode 100644
index 0000000..75986e8
--- /dev/null
+++ b/util/alevt/vt.h
@@ -0,0 +1,62 @@
+#ifndef VT_H
+#define VT_H
+
+#include "misc.h"
+
+#define W 40
+#define H 25
+#define BAD_CHAR 0xb8 // substitute for chars with bad parity
+
+struct vt_event
+{
+ int type;
+ void *resource; /* struct xio_win *, struct vbi *, ... */
+ int i1, i2, i3, i4;
+ void *p1;
+};
+
+#define EV_CLOSE 1
+#define EV_KEY 2 // i1:KEY_xxx i2:shift-flag
+#define EV_MOUSE 3 // i1:button i2:shift-flag i3:x i4:y
+#define EV_SELECTION 4 // i1:len p1:data
+#define EV_PAGE 5 // p1:vt_page i1:query-flag
+#define EV_HEADER 6 // i1:pgno i2:subno i3:flags p1:data
+#define EV_XPACKET 7 // i1:mag i2:pkt i3:errors p1:data
+#define EV_RESET 8 // ./.
+#define EV_TIMER 9 // ./.
+#define EV_ERR 10 // p1: errmsg
+#define KEY_F(i) (1000+i)
+#define KEY_LEFT 2001
+#define KEY_RIGHT 2002
+#define KEY_UP 2003
+#define KEY_DOWN 2004
+#define KEY_PUP 2005
+#define KEY_PDOWN 2006
+#define KEY_DEL 2007
+#define KEY_INS 2008
+
+struct vt_page
+{
+ int pgno, subno; // the wanted page number
+ int lang; // language code
+ int flags; // misc flags (see PG_xxx below)
+ int errors; // number of single bit errors in page
+ u32 lines; // 1 bit for each line received
+ u8 data[25][40]; // page contents
+ int flof; // page has FastText links
+ struct {
+ int pgno;
+ int subno;
+ } link[6]; // FastText links (FLOF)
+};
+
+#define PG_SUPPHEADER 0x01 // C7 row 0 is not to be displayed
+#define PG_OUTOFSEQ 0x04 // C9 page out of numerical order
+#define PG_NODISPLAY 0x08 // C10 rows 1-24 is not to be displayed
+#define PG_MAGSERIAL 0x10 // C11 serial trans. (any pkt0 terminates page)
+#define PG_ERASE 0x20 // C4 clear previously stored lines
+#define PG_NEWSFLASH 0x40 // C5 box it and insert into normal video pict.
+#define PG_SUBTITLE 0x80 // C6 box it and insert into normal video pict.
+#define PG_ACTIVE 0x100 // currently fetching this page
+#define ANY_SUB 0x3f7f // universal subpage number
+#endif
diff --git a/util/alevt/vt900.out b/util/alevt/vt900.out
new file mode 100644
index 0000000..558ee67
--- /dev/null
+++ b/util/alevt/vt900.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Contents: ",
+"\6\15Contents: ",
+"\24 #################################### ",
+" ",
+" \3\177\6Starting alevt . . . . . . 902 ",
+" ",
+" \3\177\6Copying/Warranty . . . . . 904 ",
+" ",
+" \3\177\6The Status Line . . . . . 905 ",
+" ",
+" \3\177\6Selecting Pages . . . . . 907 ",
+" ",
+" \3\177\6QuickClick Page . . . . . 915 ",
+" ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" (Click to select a page) ",
+" ",
+"\4\35\7 Next 901 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt901.out b/util/alevt/vt901.out
new file mode 100644
index 0000000..1bde77c
--- /dev/null
+++ b/util/alevt/vt901.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Contents: ",
+"\6\15Contents: ",
+"\24 #################################### ",
+" ",
+"\6 \3\177\6FastText Menu . . . . . . 909 ",
+"\6 ",
+"\6 \3\177\6Keyboard Commands . . . . 910 ",
+"\6 ",
+"\6 \3\177\6Starting alevt-cap . . . . 912 ",
+"\6 ",
+"\6 \3\177\6Starting alevt-date . . . 914 ",
+"\6 ",
+"\6 \3\177\6QuickClick Page . . . . . 915 ",
+" ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" (Click to select a page) ",
+" ",
+"\4\35\7Back 900 Index 900 Next 902 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt902.out b/util/alevt/vt902.out
new file mode 100644
index 0000000..665b41d
--- /dev/null
+++ b/util/alevt/vt902.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Starting alevt: ",
+"\6\15Starting alevt: ",
+"\24 #################################### ",
+"\6 $\7alevt\6[options] Default: ",
+" ",
+" -c\6<channel name> (none;dvb only) ",
+" -ch -child\6<ppp.ss> (none) ",
+" -cs -charset \6latin-1 ",
+" \6<latin-1/2/koi8-r/ ",
+" \6iso8859-7> ",
+" -h -help ",
+" ",
+" ",
+" ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" ",
+" ",
+"\4\35\7Back 901 Index 900 Next 903 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt903.out b/util/alevt/vt903.out
new file mode 100644
index 0000000..0df75c1
--- /dev/null
+++ b/util/alevt/vt903.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Starting alevt: ",
+"\6\15Starting alevt: ",
+"\24 #################################### ",
+"\6 $\7alevt\6[options] Default: ",
+" -o\6<outfile> (none;dvb only) ",
+" -p -parent\6<ppp.ss> 900 ",
+" -s -sid\6<sid> (none;dvb only) ",
+" -t -ttpid\6<ttpid> (none;dvb only) ",
+" -v -vbi\6<vbidev> /dev/vbi ",
+" \6/dev/vbi0 ",
+" \6/dev/video0 ",
+" \6/dev/dvb/adapter0/demux0 ",
+" ",
+" ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" ",
+" ",
+"\4\35\7Back 902 Index 900 Next 904 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt904.out b/util/alevt/vt904.out
new file mode 100644
index 0000000..d13dcfd
--- /dev/null
+++ b/util/alevt/vt904.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Copying: ",
+"\6\15Copying: ",
+"\24 #################################### ",
+"\6 2002-07 Edgar Toernig (froese@gmx.de) ",
+"\6 All Rights Reserved. ",
+"\6 ",
+"\6 This program is free software; you ",
+"\6 can redistribute it and/or modify it ",
+"\6 under the terms of the GNU General ",
+"\6 Public License Version 2 as published ",
+"\6 by the Free Software Foundation. ",
+"\6 ",
+"\6 This program is distributed in the ",
+"\6 hope that it will be useful, but ",
+"\6\7without any warranty.\6See the GNU ",
+"\6 General Public License for details. ",
+" ",
+"\4\35\7Back 903 Index 900 Next 905 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt905.out b/util/alevt/vt905.out
new file mode 100644
index 0000000..b445ebb
--- /dev/null
+++ b/util/alevt/vt905.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Status Line: ",
+"\6\15Status Line: ",
+"\24 #################################### ",
+"\6 The top line of each window is the ",
+"\6 status line. On the left it shows ",
+"\6 the current page number (CPN) and ",
+"\6 some flags. The rest of the line ",
+"\6 is the running header sent by the ",
+"\6 TV station. ",
+"\6 ",
+"\6 If the CPN is red, the program is ",
+"\6 searching for that page. If it's ",
+"\6 green, it's the PN of the currently ",
+"\6 displayed page. ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" ",
+" ",
+"\4\35\7Back 904 Index 900 Next 906 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt906.out b/util/alevt/vt906.out
new file mode 100644
index 0000000..156b481
--- /dev/null
+++ b/util/alevt/vt906.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Status Line: \14\5\30 ",
+"\6\15Status Line: \14\5\30 ",
+"\24 #################################### ",
+"\6 An\2H\6behind the CPN indicates that ",
+"\6 the page is on hold. This inhibits ",
+"\6 subpage cycling and page updates. A ",
+"\6 click on the CPN toggles the\2H\6flag.",
+" ",
+"\6 A\5*\6indicates that the page ",
+"\6 contains concealed text. Clicking on ",
+"\6 the\5*\6reveals that text. ",
+" ",
+"\6 A CPN in the form\2Sxx\6is shown if a ",
+"\6 specific subpage is selected. ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" ",
+" ",
+"\4\35\7Back 905 Index 900 Next 907 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt907.out b/util/alevt/vt907.out
new file mode 100644
index 0000000..6aeb4e6
--- /dev/null
+++ b/util/alevt/vt907.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Selecting Pages: ",
+"\6\15Selecting Pages: ",
+"\24 #################################### ",
+"\6 To select a specific page, you may ",
+"\6 either enter the page number with ",
+"\6 the keyboard or click with the\7left ",
+"\6 mouse button on a page number ",
+"\6 somewhere on the screen. ",
+"\6 ",
+"\6 Clicking with the\7middle\6button will ",
+"\6 show the page in a child window. If ",
+"\6 there is no child window, a new one ",
+"\6 will be opened. ",
+"\6 ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" ",
+" ",
+"\4\35\7Back 906 Index 900 Next 908 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt908.out b/util/alevt/vt908.out
new file mode 100644
index 0000000..851a9b5
--- /dev/null
+++ b/util/alevt/vt908.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Selecting Pages: ",
+"\6\15Selecting Pages: ",
+"\24 #################################### ",
+"\6 AleVT also recognizes something like ",
+"\3 3/7\6as a valid page number. Clicking ",
+"\6 with the\7left\6button will cycle to ",
+"\6 the next subpage of the current page. ",
+"\6 The\7middle\6buttons cycles backwards. ",
+"\6 ",
+"\6 For each window a history of ",
+"\6 recently visited pages is kept. ",
+"\6 Pressing the\7right\6mouse button will ",
+"\6 take you back to the previous page. ",
+"\6 ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" ",
+" ",
+"\4\35\7Back 907 Index 900 Next 909 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt909.out b/util/alevt/vt909.out
new file mode 100644
index 0000000..0b28450
--- /dev/null
+++ b/util/alevt/vt909.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15FastText Menu: ",
+"\6\15FastText Menu: ",
+"\24 #################################### ",
+"\6 The last line of each window shows ",
+"\6 the FastText Menu (only if one is ",
+"\6 transmitted for that page). ",
+"\6 ",
+"\6 It consists of up to four colored ",
+"\6 labels. You may click on a label ",
+"\6 or press one of the function keys ",
+"\6 F1-F4 to go to the associated page. ",
+"\6 ",
+"\6 For the 5th (white) key present on ",
+"\6 some remote controls press F5. ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" ",
+" ",
+"\4\35\7Back 908 Index 900 Next 910 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt910.out b/util/alevt/vt910.out
new file mode 100644
index 0000000..d3a2095
--- /dev/null
+++ b/util/alevt/vt910.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Keyboard Commands: ",
+"\6\15Keyboard Commands: ",
+"\24 #################################### ",
+" 0\6-\0079 \6Enter page number ",
+" q\6or\7ESC \6Close window ",
+" h \6Goto page 900 (help page) ",
+" i \6Goto page 100 (index page) ",
+" o \6Open a new window ",
+" SPACE \6Hold page ",
+" RIGHT \6Goto next page ",
+" LEFT \6Goto previous page ",
+" DOWN \6Goto next subpage ",
+" UP \6Goto previous subpage ",
+" BACKSPACE\6Previous page from history ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" ",
+" ",
+"\4\35\7Back 909 Index 900 Next 911 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt911.out b/util/alevt/vt911.out
new file mode 100644
index 0000000..49e6cc1
--- /dev/null
+++ b/util/alevt/vt911.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \007 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Keyboard Commands: ",
+"\6\15Keyboard Commands: ",
+"\24 #################################### ",
+" s \6Save page to file ",
+" c \6Clear page cache ",
+" r \6Reveal concealed text ",
+" F1\6-\7F5 \6FastText keys ",
+" /\6and\7? \6Search forward/backward ",
+" n\6and\7N \6Search next/previous ",
+" f\6and\7F \6Fine tune the decoder ",
+" e \6Error reduction on/off ",
+" b \6Error bell on/off ",
+"\6 Holding the\7shift\6key while pressing ",
+"\6 one of the\7cursor\6keys allows ",
+"\6 selecting the 'hex' pages (Ex.: 1f1). ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" ",
+"\4\35\7Back 910 Index 900 Next 912 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt912.out b/util/alevt/vt912.out
new file mode 100644
index 0000000..6fd7d12
--- /dev/null
+++ b/util/alevt/vt912.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Starting alevt-cap: ",
+"\6\15Starting alevt-cap: ",
+"\24 #################################### ",
+"\6 $\7alevt-cap\6[options] Default: ",
+" ",
+" -cs -charset \6latin-1 ",
+" \6<latin-1/2/koi8-r/ ",
+" \6iso8859-7> ",
+" -f -format \6ascii ",
+" \6<fmt,options> ",
+" -f help -format help ",
+" -h -help ",
+" -n -name \6<filename> ttext-%s.%e ",
+" ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" ",
+" ",
+"\4\35\7Back 911 Index 900 Next 913 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt913.out b/util/alevt/vt913.out
new file mode 100644
index 0000000..e0f4878
--- /dev/null
+++ b/util/alevt/vt913.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Starting alevt-cap: ",
+"\6\15Starting alevt-cap: ",
+"\24 #################################### ",
+"\6 $\7alevt-cap\6[options] Default: ",
+" ",
+" -s -sid\6<sid> (none;dvb only) ",
+" -t -ttpid\6<ttpid> (none;dvb only) ",
+" -to -timeout\6<secs> (none) ",
+" -v -vbi\6<vbidev> /dev/vbi ",
+" \6/dev/vbi0 ",
+" \6/dev/video0 ",
+" \6/dev/dvb/adapter0/demux0 ",
+" ",
+" ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" ",
+" ",
+"\4\35\7Back 912 Index 900 Next 914 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt914.out b/util/alevt/vt914.out
new file mode 100644
index 0000000..a55eed1
--- /dev/null
+++ b/util/alevt/vt914.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7 Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15Starting alevt-date: ",
+"\6\15Starting alevt-date: ",
+"\24 #################################### ",
+"\6 $\7alevt-date\6[options] Default: ",
+" ",
+" -d -delta\6<max_secs> 7200 (2 hours) ",
+" -f -format\6<fmtstr> %c ",
+" -h -help ",
+" -s -set \6off ",
+" -to -timeout\6<seconds>(none) ",
+" -v -vbi\6<vbidev> /dev/vbi ",
+" \6/dev/vbi0 ",
+" \6/dev/video0 ",
+" \6/dev/dvb/adapter0/demux0 ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" ",
+" ",
+"\4\35\7Back 913 Index 900 Next 915 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vt915.out b/util/alevt/vt915.out
new file mode 100644
index 0000000..66041ac
--- /dev/null
+++ b/util/alevt/vt915.out
@@ -0,0 +1,29 @@
+#ifndef HELP_HEADER
+" \6AleVT Online Help System ",
+" \22`p0`0 p `0pppp ",
+"\4\35\22\177 \177j5`p \177 j5 j5 \7Version \34",
+"\4\35\22\177,\177j5\177.! +t>! j5 \7 1.7.0 \34",
+" \22# #\42!\42# \42 \42! ",
+#else
+HELP_HEADER
+#endif
+" ",
+"\6\15QuickClick: ",
+"\6\15QuickClick: ",
+"\24 #################################### ",
+"\6 100 200 300 400 500 600 700 800 ",
+"\6 101 201 301 401 501 601 701 801 ",
+"\6 110 210 310 410 510 610 710 810 ",
+"\6 120\006220 320 420 520 620 720 820 ",
+"\6 130 230 330 430 530 630 730 830 ",
+"\6 140\006240 340 440 540 640 740 840 ",
+"\6 150 250 350 450 550 650 750 850 ",
+"\6 160\006260 360 460 560 660 760 860 ",
+"\6 170 270 370 470 570 670 770 870 ",
+"\6 180\006280 380 480 580 680 780 880 ",
+"\6 190 290 390 490 590 690 790 890 ",
+"\24 pppppppppppppppppppppppppppppppppppp ",
+" ",
+" ",
+"\4\35\7 Index 900 \34",
+"\1Page 100 \2Page 200 \3Page 300 \6Page 400\34",
diff --git a/util/alevt/vtxt-iso8859-7.bdf b/util/alevt/vtxt-iso8859-7.bdf
new file mode 100644
index 0000000..7d62c95
--- /dev/null
+++ b/util/alevt/vtxt-iso8859-7.bdf
@@ -0,0 +1,5768 @@
+STARTFONT 2.1
+FONT -alevt-teletext-medium-r-normal--16-1-75-75-c-90-fontspecific-1
+SIZE 1 75 75
+FONTBOUNDINGBOX 9 16 0 -4
+STARTPROPERTIES 10
+POINT_SIZE 1
+PIXEL_SIZE 16
+RESOLUTION_X 75
+RESOLUTION_Y 75
+FONT_ASCENT 12
+FONT_DESCENT 4
+AVERAGE_WIDTH 90
+SPACING "C"
+_XMBDFED_INFO "Edited with xmbdfed 4.5."
+FONT "vtxt"
+ENDPROPERTIES
+CHARS 250
+STARTCHAR char0
+ENCODING 0
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 1
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 2
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 3
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 4
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 5
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 6
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 7
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 8
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 9
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 10
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 11
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 12
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 13
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 14
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 15
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 16
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 17
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 18
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 19
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 20
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 21
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 22
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 23
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 24
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 25
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 26
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 27
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 28
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 29
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 30
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 31
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+0000
+0000
+ENDCHAR
+STARTCHAR char32
+ENCODING 32
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char33
+ENCODING 33
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+3C00
+3C00
+3C00
+1800
+1800
+1800
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char34
+ENCODING 34
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6600
+6600
+6600
+2400
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char35
+ENCODING 35
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+3600
+3600
+7F00
+3600
+3600
+3600
+7F00
+3600
+3600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char36
+ENCODING 36
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+0C00
+3E00
+6300
+6100
+6000
+3E00
+0300
+0300
+4300
+6300
+3E00
+0C00
+0C00
+0000
+0000
+ENDCHAR
+STARTCHAR char37
+ENCODING 37
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+6100
+6300
+0600
+0C00
+1800
+3000
+6300
+4300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char38
+ENCODING 38
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3600
+3600
+1C00
+3B00
+6E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char39
+ENCODING 39
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3000
+3000
+3000
+6000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char40
+ENCODING 40
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0C00
+1800
+3000
+3000
+3000
+3000
+3000
+3000
+1800
+0C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char41
+ENCODING 41
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3000
+1800
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+1800
+3000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char42
+ENCODING 42
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6600
+3C00
+FF00
+3C00
+6600
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char43
+ENCODING 43
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+7E00
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char44
+ENCODING 44
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+1800
+3000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char45
+ENCODING 45
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+7F00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char46
+ENCODING 46
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char47
+ENCODING 47
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0100
+0300
+0600
+0C00
+1800
+3000
+6000
+4000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char48
+ENCODING 48
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+6600
+C300
+C300
+DB00
+DB00
+C300
+C300
+6600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char49
+ENCODING 49
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+3800
+7800
+1800
+1800
+1800
+1800
+1800
+1800
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char50
+ENCODING 50
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+0300
+0600
+0C00
+1800
+3000
+6000
+6300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char51
+ENCODING 51
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+0300
+0300
+1E00
+0300
+0300
+0300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char52
+ENCODING 52
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0600
+0E00
+1E00
+3600
+6600
+7F00
+0600
+0600
+0600
+0F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char53
+ENCODING 53
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+6000
+6000
+6000
+7E00
+0300
+0300
+0300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char54
+ENCODING 54
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3000
+6000
+6000
+7E00
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char55
+ENCODING 55
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+6300
+0300
+0300
+0600
+0C00
+1800
+1800
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char56
+ENCODING 56
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+3E00
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char57
+ENCODING 57
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+3F00
+0300
+0300
+0300
+0600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char58
+ENCODING 58
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char59
+ENCODING 59
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+1800
+1800
+1800
+3000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char60
+ENCODING 60
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0600
+0C00
+1800
+3000
+6000
+3000
+1800
+0C00
+0600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char61
+ENCODING 61
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7E00
+0000
+0000
+7E00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char62
+ENCODING 62
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+6000
+3000
+1800
+0C00
+0600
+0C00
+1800
+3000
+6000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char63
+ENCODING 63
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+0600
+0C00
+0C00
+0C00
+0000
+0C00
+0C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char64
+ENCODING 64
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+3E00
+6300
+6300
+6F00
+6F00
+6F00
+6E00
+6000
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char65
+ENCODING 65
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char66
+ENCODING 66
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+3300
+3300
+3300
+3E00
+3300
+3300
+3300
+3300
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char67
+ENCODING 67
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1E00
+3300
+6100
+6000
+6000
+6000
+6000
+6100
+3300
+1E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char68
+ENCODING 68
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7C00
+3600
+3300
+3300
+3300
+3300
+3300
+3300
+3600
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char69
+ENCODING 69
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char70
+ENCODING 70
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char71
+ENCODING 71
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1E00
+3300
+6100
+6000
+6000
+6F00
+6300
+6300
+3300
+1D00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char72
+ENCODING 72
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+6300
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char73
+ENCODING 73
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char74
+ENCODING 74
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0F00
+0600
+0600
+0600
+0600
+0600
+6600
+6600
+6600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char75
+ENCODING 75
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7300
+3300
+3300
+3600
+3C00
+3C00
+3600
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char76
+ENCODING 76
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7800
+3000
+3000
+3000
+3000
+3000
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char77
+ENCODING 77
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+E700
+FF00
+FF00
+DB00
+C300
+C300
+C300
+C300
+C300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char78
+ENCODING 78
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+7300
+7B00
+7F00
+6F00
+6700
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char79
+ENCODING 79
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char80
+ENCODING 80
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+3300
+3300
+3300
+3E00
+3000
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char81
+ENCODING 81
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6B00
+6F00
+3E00
+0600
+0700
+0000
+0000
+ENDCHAR
+STARTCHAR char82
+ENCODING 82
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+3300
+3300
+3300
+3E00
+3600
+3300
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char83
+ENCODING 83
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+3000
+1C00
+0600
+0300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char84
+ENCODING 84
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FF00
+DB00
+9900
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char85
+ENCODING 85
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char86
+ENCODING 86
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+C300
+C300
+C300
+C300
+C300
+6600
+3C00
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char87
+ENCODING 87
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+C300
+C300
+C300
+DB00
+DB00
+FF00
+6600
+6600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char88
+ENCODING 88
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+6600
+3C00
+1800
+1800
+3C00
+6600
+C300
+C300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char89
+ENCODING 89
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+C300
+6600
+3C00
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char90
+ENCODING 90
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FF00
+C300
+8600
+0C00
+1800
+3000
+6000
+C100
+C300
+FF00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char91
+ENCODING 91
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+3000
+3000
+3000
+3000
+3000
+3000
+3000
+3000
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char92
+ENCODING 92
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+4000
+6000
+7000
+3800
+1C00
+0E00
+0700
+0300
+0100
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char93
+ENCODING 93
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char94
+ENCODING 94
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0800
+1C00
+3600
+6300
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char95
+ENCODING 95
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char96
+ENCODING 96
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3000
+3000
+1800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char97
+ENCODING 97
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char98
+ENCODING 98
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+3000
+3000
+3C00
+3600
+3300
+3300
+3300
+3300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char99
+ENCODING 99
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+6000
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char100
+ENCODING 100
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0E00
+0600
+0600
+1E00
+3600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char101
+ENCODING 101
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+7F00
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char102
+ENCODING 102
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3600
+3200
+3000
+7800
+3000
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char103
+ENCODING 103
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3B00
+6600
+6600
+6600
+6600
+6600
+3E00
+0600
+6600
+3C00
+0000
+ENDCHAR
+STARTCHAR char104
+ENCODING 104
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+3000
+3000
+3600
+3B00
+3300
+3300
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char105
+ENCODING 105
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+1800
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char106
+ENCODING 106
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0600
+0600
+0000
+0E00
+0600
+0600
+0600
+0600
+0600
+0600
+6600
+6600
+3C00
+0000
+ENDCHAR
+STARTCHAR char107
+ENCODING 107
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+3000
+3000
+3300
+3600
+3C00
+3C00
+3600
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char108
+ENCODING 108
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char109
+ENCODING 109
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+E600
+FF00
+DB00
+DB00
+DB00
+DB00
+DB00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char110
+ENCODING 110
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6E00
+3300
+3300
+3300
+3300
+3300
+3300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char111
+ENCODING 111
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char112
+ENCODING 112
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6E00
+3300
+3300
+3300
+3300
+3300
+3E00
+3000
+3000
+3000
+0000
+ENDCHAR
+STARTCHAR char113
+ENCODING 113
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3B00
+6600
+6600
+6600
+6600
+6600
+3E00
+0600
+0600
+0600
+0000
+ENDCHAR
+STARTCHAR char114
+ENCODING 114
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6E00
+3B00
+3300
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char115
+ENCODING 115
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+3000
+1C00
+0600
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char116
+ENCODING 116
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+1800
+1800
+7E00
+1800
+1800
+1800
+1800
+1B00
+0E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char117
+ENCODING 117
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6600
+6600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char118
+ENCODING 118
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C300
+C300
+C300
+C300
+6600
+3C00
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char119
+ENCODING 119
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C300
+C300
+C300
+DB00
+DB00
+FF00
+6600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char120
+ENCODING 120
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C300
+6600
+3C00
+1800
+3C00
+6600
+C300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char121
+ENCODING 121
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6300
+6300
+6300
+6300
+6300
+6300
+3F00
+0300
+0600
+0C00
+0000
+ENDCHAR
+STARTCHAR char122
+ENCODING 122
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7F00
+6600
+0C00
+1800
+3000
+6300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char123
+ENCODING 123
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0E00
+1800
+1800
+1800
+7000
+1800
+1800
+1800
+1800
+0E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char124
+ENCODING 124
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char125
+ENCODING 125
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+1800
+1800
+1800
+0E00
+1800
+1800
+1800
+1800
+7000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char126
+ENCODING 126
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3B00
+6E00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char127
+ENCODING 127
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+7F00
+7F00
+7F00
+7F00
+7F00
+7F00
+7F00
+7F00
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 128
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 129
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 130
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 131
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 132
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 133
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 134
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 135
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 136
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 137
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 138
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 139
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 140
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 141
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 142
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 143
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 144
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 145
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 146
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 147
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 148
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 149
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 150
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 151
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 152
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 153
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 154
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 155
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 156
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 157
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 158
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 159
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR U+00A0 NO-BREAK SPACE
+ENCODING 160
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+02BD MODIFIER LETTER REVERSED COMMA
+ENCODING 161
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1800
+1000
+1000
+0800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+02BC MODIFIER LETTER APOSTROPHE
+ENCODING 162
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1800
+0800
+0800
+1000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00A3 POUND SIGN
+ENCODING 163
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0E00
+1000
+1000
+1000
+7C00
+1000
+1000
+1000
+3E00
+6100
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00A6 BROKEN BAR
+ENCODING 166
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+0800
+0800
+0800
+0000
+0000
+0800
+0800
+0800
+0800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00A7 SECTION SIGN
+ENCODING 167
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+4200
+4000
+3C00
+4200
+4200
+3C00
+0200
+4200
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00A8 DIAERESIS
+ENCODING 168
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+2400
+2400
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00A9 COPYRIGHT SIGN
+ENCODING 169
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+4200
+9900
+A500
+A100
+A100
+A500
+9900
+4200
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ENCODING 171
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+1200
+1200
+2400
+2400
+4800
+2400
+2400
+1200
+1200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00AC NOT SIGN
+ENCODING 172
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+7E00
+0200
+0200
+0200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00AD SOFT HYPHEN
+ENCODING 173
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+7E00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+2015 HORIZONTAL BAR
+ENCODING 175
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FF00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00B0 DEGREE SIGN
+ENCODING 176
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1000
+2800
+2800
+1000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00B1 PLUS-MINUS SIGN
+ENCODING 177
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+0800
+0800
+7F00
+0800
+0800
+0800
+0000
+7F00
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00B2 SUPERSCRIPT TWO
+ENCODING 178
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1C00
+2200
+0200
+1C00
+2000
+2000
+3E00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00B3 SUPERSCRIPT THREE
+ENCODING 179
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1C00
+2200
+0200
+1C00
+0200
+2200
+1C00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0384 GREEK TONOS
+ENCODING 180
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1000
+1000
+1000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0385 GREEK DIALYTIKA TONOS
+ENCODING 181
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1000
+1000
+1000
+4400
+4400
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS
+ENCODING 182
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+4000
+4000
+0000
+1800
+2400
+2400
+4200
+4200
+7E00
+4200
+4200
+4200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00B7 MIDDLE DOT
+ENCODING 183
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS
+ENCODING 184
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+4000
+4000
+0000
+7E00
+4000
+4000
+4000
+7C00
+4000
+4000
+4000
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0389 GREEK CAPITAL LETTER ETA WITH TONOS
+ENCODING 185
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+4000
+4000
+0000
+4200
+4200
+4200
+4200
+7E00
+4200
+4200
+4200
+4200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+038A GREEK CAPITAL LETTER IOTA WITH TONOS
+ENCODING 186
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+4000
+4000
+0000
+3E00
+0800
+0800
+0800
+0800
+0800
+0800
+0800
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ENCODING 187
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+4800
+4800
+2400
+2400
+1200
+2400
+2400
+4800
+4800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS
+ENCODING 188
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+4000
+4000
+0000
+3C00
+4200
+4200
+4200
+4200
+4200
+4200
+4200
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+00BD VULGAR FRACTION ONE HALF
+ENCODING 189
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+2200
+6200
+2400
+2800
+2800
+1400
+1A00
+2200
+4400
+4E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS
+ENCODING 190
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+4000
+4000
+0000
+4100
+4100
+2200
+2200
+1400
+0800
+0800
+0800
+0800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS
+ENCODING 191
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+4000
+4000
+0000
+3E00
+4100
+4100
+4100
+4100
+2200
+1400
+1400
+7700
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+ENCODING 192
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+1000
+5400
+4400
+0000
+1000
+1000
+1000
+1000
+1000
+1000
+0C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0391 GREEK CAPITAL LETTER ALPHA
+ENCODING 193
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+2400
+2400
+4200
+4200
+7E00
+4200
+4200
+4200
+4200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0392 GREEK CAPITAL LETTER BETA
+ENCODING 194
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7C00
+4200
+4200
+4200
+7C00
+4200
+4200
+4200
+4200
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0393 GREEK CAPITAL LETTER GAMMA
+ENCODING 195
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+4000
+4000
+4000
+4000
+4000
+4000
+4000
+4000
+4000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0394 GREEK CAPITAL LETTER DELTA
+ENCODING 196
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+0800
+1400
+1400
+2200
+2200
+2200
+4100
+4100
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0395 GREEK CAPITAL LETTER EPSILON
+ENCODING 197
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+4000
+4000
+4000
+7C00
+4000
+4000
+4000
+4000
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0396 GREEK CAPITAL LETTER ZETA
+ENCODING 198
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+0200
+0200
+0400
+0800
+1000
+2000
+4000
+4000
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0397 GREEK CAPITAL LETTER ETA
+ENCODING 199
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+4200
+4200
+4200
+4200
+7E00
+4200
+4200
+4200
+4200
+4200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0398 GREEK CAPITAL LETTER THETA
+ENCODING 200
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+4200
+4200
+4200
+7E00
+4200
+4200
+4200
+4200
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+0399 GREEK CAPITAL LETTER IOTA
+ENCODING 201
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+0800
+0800
+0800
+0800
+0800
+0800
+0800
+0800
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+039A GREEK CAPITAL LETTER KAPPA
+ENCODING 202
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+4200
+4400
+4800
+5000
+6000
+6000
+5000
+4800
+4400
+4200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+039B GREEK CAPITAL LETTER LAMDA
+ENCODING 203
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+0800
+1400
+1400
+2200
+2200
+2200
+4100
+4100
+4100
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+039C GREEK CAPITAL LETTER MU
+ENCODING 204
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+4200
+4200
+6600
+6600
+5A00
+5A00
+4200
+4200
+4200
+4200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+039D GREEK CAPITAL LETTER NU
+ENCODING 205
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+4200
+6200
+6200
+5200
+5200
+4A00
+4A00
+4600
+4600
+4200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+039E GREEK CAPITAL LETTER XI
+ENCODING 206
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+0000
+0000
+0000
+3C00
+0000
+0000
+0000
+0000
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+039F GREEK CAPITAL LETTER OMICRON
+ENCODING 207
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+4200
+4200
+4200
+4200
+4200
+4200
+4200
+4200
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03A0 GREEK CAPITAL LETTER PI
+ENCODING 208
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+2200
+2200
+2200
+2200
+2200
+2200
+2200
+2200
+2200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03A1 GREEK CAPITAL LETTER RHO
+ENCODING 209
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7C00
+4200
+4200
+4200
+7C00
+4000
+4000
+4000
+4000
+4000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03A3 GREEK CAPITAL LETTER SIGMA
+ENCODING 211
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+4000
+2000
+1000
+0800
+0800
+1000
+2000
+4000
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03A4 GREEK CAPITAL LETTER TAU
+ENCODING 212
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+0800
+0800
+0800
+0800
+0800
+0800
+0800
+0800
+0800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03A5 GREEK CAPITAL LETTER UPSILON
+ENCODING 213
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+4100
+4100
+2200
+2200
+1400
+0800
+0800
+0800
+0800
+0800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03A6 GREEK CAPITAL LETTER PHI
+ENCODING 214
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+0800
+3E00
+4900
+4900
+4900
+4900
+3E00
+0800
+1C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03A7 GREEK CAPITAL LETTER CHI
+ENCODING 215
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+4200
+4200
+2400
+2400
+1800
+1800
+2400
+2400
+4200
+4200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03A8 GREEK CAPITAL LETTER PSI
+ENCODING 216
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+4900
+4900
+4900
+4900
+4900
+3E00
+0800
+0800
+0800
+0800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03A9 GREEK CAPITAL LETTER OMEGA
+ENCODING 217
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+4100
+4100
+4100
+4100
+4100
+2200
+1400
+1400
+7700
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+ENCODING 218
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+2400
+2400
+0000
+3E00
+0800
+0800
+0800
+0800
+0800
+0800
+0800
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+ENCODING 219
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+2400
+2400
+0000
+4100
+4100
+2200
+2200
+1400
+0800
+0800
+0800
+0800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03AC GREEK SMALL LETTER ALPHA WITH TONOS
+ENCODING 220
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1000
+1000
+0000
+0000
+3200
+4A00
+4400
+4400
+4400
+4400
+4A00
+3200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03AD GREEK SMALL LETTER EPSILON WITH TONOS
+ENCODING 221
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1000
+1000
+0000
+0000
+3E00
+4000
+4000
+3C00
+4000
+4000
+4000
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03AE GREEK SMALL LETTER ETA WITH TONOS
+ENCODING 222
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1000
+1000
+0000
+0000
+5C00
+6200
+4200
+4200
+4200
+4200
+4200
+4200
+0200
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03AF GREEK SMALL LETTER IOTA WITH TONOS
+ENCODING 223
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1000
+1000
+0000
+0000
+1000
+1000
+1000
+1000
+1000
+1000
+1000
+0C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+ENCODING 224
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1000
+1000
+4400
+4400
+0000
+4200
+4200
+4200
+4200
+4200
+4200
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03B1 GREEK SMALL LETTER ALPHA
+ENCODING 225
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+3200
+4A00
+4400
+4400
+4400
+4400
+4A00
+3200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03B2 GREEK SMALL LETTER BETA
+ENCODING 226
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3800
+4400
+4400
+4400
+7C00
+4200
+4200
+4200
+6200
+5C00
+4000
+4000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03B3 GREEK SMALL LETTER GAMMA
+ENCODING 227
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+3100
+4900
+0A00
+0400
+0800
+0800
+1000
+1000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03B4 GREEK SMALL LETTER DELTA
+ENCODING 228
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+2000
+2000
+2000
+1800
+2400
+4200
+4200
+4200
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03B5 GREEK SMALL LETTER EPSILON
+ENCODING 229
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+3C00
+4200
+4000
+3C00
+4000
+4000
+4200
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03B6 GREEK SMALL LETTER ZETA
+ENCODING 230
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+2000
+2000
+1C00
+0800
+1000
+2000
+2000
+2000
+2000
+1C00
+0200
+1C00
+0000
+0000
+ENDCHAR
+STARTCHAR U+03B7 GREEK SMALL LETTER ETA
+ENCODING 231
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+5C00
+6200
+4200
+4200
+4200
+4200
+4200
+4200
+0200
+0200
+0000
+0000
+ENDCHAR
+STARTCHAR U+03B8 GREEK SMALL LETTER THETA
+ENCODING 232
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+2400
+2400
+4200
+7E00
+4200
+4200
+2400
+2400
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03B9 GREEK SMALL LETTER IOTA
+ENCODING 233
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1000
+1000
+1000
+1000
+1000
+1000
+1000
+0C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03BA GREEK SMALL LETTER KAPPA
+ENCODING 234
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+2200
+2400
+2800
+3000
+3000
+2800
+2400
+2200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03BB GREEK SMALL LETTER LAMDA
+ENCODING 235
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+2000
+2000
+1000
+1000
+0800
+1800
+2400
+2400
+4200
+4200
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03BC GREEK SMALL LETTER MU
+ENCODING 236
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+4200
+4200
+4200
+4200
+6600
+6600
+5A00
+4200
+4000
+4000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03BD GREEK SMALL LETTER NU
+ENCODING 237
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+4200
+4200
+4200
+4400
+4400
+4800
+5000
+6000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03BE GREEK SMALL LETTER XI
+ENCODING 238
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+4000
+4000
+3C00
+4000
+4000
+3C00
+4000
+4000
+3C00
+0200
+0200
+3C00
+0000
+0000
+ENDCHAR
+STARTCHAR U+03BF GREEK SMALL LETTER OMICRON
+ENCODING 239
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+3C00
+4200
+4200
+4200
+4200
+4200
+4200
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03C0 GREEK SMALL LETTER PI
+ENCODING 240
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+7E00
+2400
+2400
+2400
+2400
+2400
+2400
+2400
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03C1 GREEK SMALL LETTER RHO
+ENCODING 241
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+3C00
+4200
+4200
+4200
+4200
+4200
+6200
+5C00
+4000
+4000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03C2 GREEK SMALL LETTER FINAL SIGMA
+ENCODING 242
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1E00
+2000
+4000
+4000
+4000
+2000
+1C00
+0200
+0200
+1C00
+0000
+0000
+ENDCHAR
+STARTCHAR U+03C3 GREEK SMALL LETTER SIGMA
+ENCODING 243
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+3F00
+4800
+4400
+4400
+4400
+4400
+4400
+3800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03C4 GREEK SMALL LETTER TAU
+ENCODING 244
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+7E00
+1000
+1000
+1000
+1000
+1000
+1000
+0C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03C5 GREEK SMALL LETTER UPSILON
+ENCODING 245
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+4200
+4200
+4200
+4200
+4200
+4200
+4200
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03C6 GREEK SMALL LETTER PHI
+ENCODING 246
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+3E00
+4900
+4900
+4900
+4900
+4900
+4900
+3E00
+0800
+0800
+0000
+0000
+ENDCHAR
+STARTCHAR U+03C7 GREEK SMALL LETTER CHI
+ENCODING 247
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+4200
+4200
+2400
+2400
+1800
+1800
+2400
+2400
+4200
+4200
+0000
+0000
+ENDCHAR
+STARTCHAR U+03C8 GREEK SMALL LETTER PSI
+ENCODING 248
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+4900
+4900
+4900
+4900
+4900
+3E00
+0800
+0800
+0000
+0000
+ENDCHAR
+STARTCHAR U+03C9 GREEK SMALL LETTER OMEGA
+ENCODING 249
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+2200
+4100
+4100
+4900
+4900
+4900
+4900
+3600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA
+ENCODING 250
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+2400
+2400
+0000
+0000
+1000
+1000
+1000
+1000
+1000
+1000
+1000
+0C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+ENCODING 251
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+2400
+2400
+0000
+0000
+4200
+4200
+4200
+4200
+4200
+4200
+4200
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03CC GREEK SMALL LETTER OMICRON WITH TONOS
+ENCODING 252
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1000
+1000
+0000
+0000
+3C00
+4200
+4200
+4200
+4200
+4200
+4200
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03CD GREEK SMALL LETTER UPSILON WITH TONOS
+ENCODING 253
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1000
+1000
+0000
+0000
+4200
+4200
+4200
+4200
+4200
+4200
+4200
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR U+03CE GREEK SMALL LETTER OMEGA WITH TONOS
+ENCODING 254
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0800
+0800
+0000
+0000
+2200
+4100
+4100
+4900
+4900
+4900
+4900
+3600
+0000
+0000
+0000
+0000
+ENDCHAR
+ENDFONT
diff --git a/util/alevt/vtxt-koi8.bdf b/util/alevt/vtxt-koi8.bdf
new file mode 100644
index 0000000..a7398b2
--- /dev/null
+++ b/util/alevt/vtxt-koi8.bdf
@@ -0,0 +1,5906 @@
+STARTFONT 2.1
+FONT -alevt-teletext-medium-r-normal--16-1-75-75-c-90-fontspecific-1
+SIZE 1 75 75
+FONTBOUNDINGBOX 9 16 0 -4
+STARTPROPERTIES 10
+POINT_SIZE 1
+PIXEL_SIZE 16
+RESOLUTION_X 75
+RESOLUTION_Y 75
+FONT_ASCENT 12
+FONT_DESCENT 4
+AVERAGE_WIDTH 90
+SPACING "C"
+_XMBDFED_INFO "Edited with xmbdfed 3.0."
+FONT "vtxt"
+ENDPROPERTIES
+CHARS 256
+STARTCHAR char0
+ENCODING 0
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 1
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 2
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 3
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 4
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 5
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 6
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 7
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 8
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 9
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 10
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 11
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 12
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 13
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 14
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 15
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 16
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 17
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char2
+ENCODING 18
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 19
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char0
+ENCODING 20
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 21
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char2
+ENCODING 22
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 23
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char0
+ENCODING 24
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 25
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char2
+ENCODING 26
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 27
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char0
+ENCODING 28
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 29
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char2
+ENCODING 30
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 31
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char32
+ENCODING 32
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char33
+ENCODING 33
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+3C00
+3C00
+3C00
+1800
+1800
+1800
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char34
+ENCODING 34
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6600
+6600
+6600
+2400
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char35
+ENCODING 35
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+3600
+3600
+7F00
+3600
+3600
+3600
+7F00
+3600
+3600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char36
+ENCODING 36
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+0C00
+3E00
+6300
+6100
+6000
+3E00
+0300
+0300
+4300
+6300
+3E00
+0C00
+0C00
+0000
+0000
+ENDCHAR
+STARTCHAR char37
+ENCODING 37
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+6100
+6300
+0600
+0C00
+1800
+3000
+6300
+4300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char38
+ENCODING 38
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3600
+3600
+1C00
+3B00
+6E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char39
+ENCODING 39
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3000
+3000
+3000
+6000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char40
+ENCODING 40
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0C00
+1800
+3000
+3000
+3000
+3000
+3000
+3000
+1800
+0C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char41
+ENCODING 41
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3000
+1800
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+1800
+3000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char42
+ENCODING 42
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6600
+3C00
+FF00
+3C00
+6600
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char43
+ENCODING 43
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+7E00
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char44
+ENCODING 44
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+1800
+3000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char45
+ENCODING 45
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+7F00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char46
+ENCODING 46
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char47
+ENCODING 47
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0100
+0300
+0600
+0C00
+1800
+3000
+6000
+4000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char48
+ENCODING 48
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+6600
+C300
+C300
+DB00
+DB00
+C300
+C300
+6600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char49
+ENCODING 49
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+3800
+7800
+1800
+1800
+1800
+1800
+1800
+1800
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char50
+ENCODING 50
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+0300
+0600
+0C00
+1800
+3000
+6000
+6300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char51
+ENCODING 51
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+0300
+0300
+1E00
+0300
+0300
+0300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char52
+ENCODING 52
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0600
+0E00
+1E00
+3600
+6600
+7F00
+0600
+0600
+0600
+0F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char53
+ENCODING 53
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+6000
+6000
+6000
+7E00
+0300
+0300
+0300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char54
+ENCODING 54
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3000
+6000
+6000
+7E00
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char55
+ENCODING 55
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+6300
+0300
+0300
+0600
+0C00
+1800
+1800
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char56
+ENCODING 56
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+3E00
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char57
+ENCODING 57
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+3F00
+0300
+0300
+0300
+0600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char58
+ENCODING 58
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char59
+ENCODING 59
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+1800
+1800
+1800
+3000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char60
+ENCODING 60
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0600
+0C00
+1800
+3000
+6000
+3000
+1800
+0C00
+0600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char61
+ENCODING 61
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7E00
+0000
+0000
+7E00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char62
+ENCODING 62
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+6000
+3000
+1800
+0C00
+0600
+0C00
+1800
+3000
+6000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char63
+ENCODING 63
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+0600
+0C00
+0C00
+0C00
+0000
+0C00
+0C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char64
+ENCODING 64
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+3E00
+6300
+6300
+6F00
+6F00
+6F00
+6E00
+6000
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char65
+ENCODING 65
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char66
+ENCODING 66
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+3300
+3300
+3300
+3E00
+3300
+3300
+3300
+3300
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char67
+ENCODING 67
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1E00
+3300
+6100
+6000
+6000
+6000
+6000
+6100
+3300
+1E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char68
+ENCODING 68
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7C00
+3600
+3300
+3300
+3300
+3300
+3300
+3300
+3600
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char69
+ENCODING 69
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char70
+ENCODING 70
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char71
+ENCODING 71
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1E00
+3300
+6100
+6000
+6000
+6F00
+6300
+6300
+3300
+1D00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char72
+ENCODING 72
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+6300
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char73
+ENCODING 73
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char74
+ENCODING 74
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0F00
+0600
+0600
+0600
+0600
+0600
+6600
+6600
+6600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char75
+ENCODING 75
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7300
+3300
+3300
+3600
+3C00
+3C00
+3600
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char76
+ENCODING 76
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7800
+3000
+3000
+3000
+3000
+3000
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char77
+ENCODING 77
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+E700
+FF00
+FF00
+DB00
+C300
+C300
+C300
+C300
+C300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char78
+ENCODING 78
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+7300
+7B00
+7F00
+6F00
+6700
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char79
+ENCODING 79
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char80
+ENCODING 80
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+3300
+3300
+3300
+3E00
+3000
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char81
+ENCODING 81
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6B00
+6F00
+3E00
+0600
+0700
+0000
+0000
+ENDCHAR
+STARTCHAR char82
+ENCODING 82
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+3300
+3300
+3300
+3E00
+3600
+3300
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char83
+ENCODING 83
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+3000
+1C00
+0600
+0300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char84
+ENCODING 84
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FF00
+DB00
+9900
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char85
+ENCODING 85
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char86
+ENCODING 86
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+C300
+C300
+C300
+C300
+C300
+6600
+3C00
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char87
+ENCODING 87
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+C300
+C300
+C300
+DB00
+DB00
+FF00
+6600
+6600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char88
+ENCODING 88
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+6600
+3C00
+1800
+1800
+3C00
+6600
+C300
+C300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char89
+ENCODING 89
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+C300
+6600
+3C00
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char90
+ENCODING 90
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FF00
+C300
+8600
+0C00
+1800
+3000
+6000
+C100
+C300
+FF00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char91
+ENCODING 91
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+3000
+3000
+3000
+3000
+3000
+3000
+3000
+3000
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char92
+ENCODING 92
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+4000
+6000
+7000
+3800
+1C00
+0E00
+0700
+0300
+0100
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char93
+ENCODING 93
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char94
+ENCODING 94
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0800
+1C00
+3600
+6300
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char95
+ENCODING 95
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char96
+ENCODING 96
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3000
+3000
+1800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char97
+ENCODING 97
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char98
+ENCODING 98
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+3000
+3000
+3C00
+3600
+3300
+3300
+3300
+3300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char99
+ENCODING 99
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+6000
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char100
+ENCODING 100
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0E00
+0600
+0600
+1E00
+3600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char101
+ENCODING 101
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+7F00
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char102
+ENCODING 102
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3600
+3200
+3000
+7800
+3000
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char103
+ENCODING 103
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3B00
+6600
+6600
+6600
+6600
+6600
+3E00
+0600
+6600
+3C00
+0000
+ENDCHAR
+STARTCHAR char104
+ENCODING 104
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+3000
+3000
+3600
+3B00
+3300
+3300
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char105
+ENCODING 105
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+1800
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char106
+ENCODING 106
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0600
+0600
+0000
+0E00
+0600
+0600
+0600
+0600
+0600
+0600
+6600
+6600
+3C00
+0000
+ENDCHAR
+STARTCHAR char107
+ENCODING 107
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+3000
+3000
+3300
+3600
+3C00
+3C00
+3600
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char108
+ENCODING 108
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char109
+ENCODING 109
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+E600
+FF00
+DB00
+DB00
+DB00
+DB00
+DB00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char110
+ENCODING 110
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6E00
+3300
+3300
+3300
+3300
+3300
+3300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char111
+ENCODING 111
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char112
+ENCODING 112
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6E00
+3300
+3300
+3300
+3300
+3300
+3E00
+3000
+3000
+7800
+0000
+ENDCHAR
+STARTCHAR char113
+ENCODING 113
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3B00
+6600
+6600
+6600
+6600
+6600
+3E00
+0600
+0600
+0F00
+0000
+ENDCHAR
+STARTCHAR char114
+ENCODING 114
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6E00
+3B00
+3300
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char115
+ENCODING 115
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+3000
+1C00
+0600
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char116
+ENCODING 116
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+1800
+1800
+7E00
+1800
+1800
+1800
+1800
+1B00
+0E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char117
+ENCODING 117
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6600
+6600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char118
+ENCODING 118
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C300
+C300
+C300
+C300
+6600
+3C00
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char119
+ENCODING 119
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C300
+C300
+C300
+DB00
+DB00
+FF00
+6600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char120
+ENCODING 120
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C300
+6600
+3C00
+1800
+3C00
+6600
+C300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char121
+ENCODING 121
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6300
+6300
+6300
+6300
+6300
+6300
+3F00
+0300
+0600
+7C00
+0000
+ENDCHAR
+STARTCHAR char122
+ENCODING 122
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7F00
+6600
+0C00
+1800
+3000
+6300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char123
+ENCODING 123
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0E00
+1800
+1800
+1800
+7000
+1800
+1800
+1800
+1800
+0E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char124
+ENCODING 124
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char125
+ENCODING 125
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+1800
+1800
+1800
+0E00
+1800
+1800
+1800
+1800
+7000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char126
+ENCODING 126
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3B00
+6E00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char127
+ENCODING 127
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+7F00
+7F00
+7F00
+7F00
+7F00
+7F00
+7F00
+7F00
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 128
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 129
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char2
+ENCODING 130
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 131
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char0
+ENCODING 132
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 133
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char2
+ENCODING 134
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 135
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char0
+ENCODING 136
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 137
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char2
+ENCODING 138
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 139
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char0
+ENCODING 140
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 141
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char2
+ENCODING 142
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 143
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char0
+ENCODING 144
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 145
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char2
+ENCODING 146
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 147
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char0
+ENCODING 148
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 149
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char2
+ENCODING 150
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 151
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char0
+ENCODING 152
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 153
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char2
+ENCODING 154
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 155
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char0
+ENCODING 156
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 157
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char2
+ENCODING 158
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 159
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char160
+ENCODING 160
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+0880
+0880
+0880
+0880
+FF80
+0880
+0880
+0880
+0880
+0880
+FF80
+0880
+0880
+0880
+0880
+ENDCHAR
+STARTCHAR char161
+ENCODING 161
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+1800
+0000
+1800
+1800
+1800
+3C00
+3C00
+3C00
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char162
+ENCODING 162
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+1800
+1800
+7E00
+C300
+C000
+C000
+C000
+C300
+7E00
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char163
+ENCODING 163
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+1C00
+3600
+3200
+3000
+7800
+3000
+3000
+3000
+3000
+7300
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char164
+ENCODING 164
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+4100
+6300
+3E00
+6300
+6300
+6300
+6300
+3E00
+6300
+4100
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char165
+ENCODING 165
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+6600
+3C00
+1800
+FF00
+1800
+FF00
+1800
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char166
+ENCODING 166
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6600
+6600
+6600
+6600
+6600
+6600
+6600
+6600
+6600
+6600
+6600
+6600
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char167
+ENCODING 167
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3E00
+6300
+3000
+1C00
+3600
+6300
+6300
+3600
+1C00
+0600
+6300
+3E00
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char168
+ENCODING 168
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+7E00
+DB00
+FF00
+BD00
+C300
+E700
+FF00
+7E00
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char169
+ENCODING 169
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+4100
+5D00
+5100
+5100
+5D00
+4100
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char170
+ENCODING 170
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3800
+0C00
+3C00
+6400
+3C00
+0000
+7C00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char171
+ENCODING 171
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+1800
+3000
+7F00
+7F00
+3000
+1800
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char172
+ENCODING 172
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+3C00
+7E00
+5A00
+1800
+1800
+1800
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char173
+ENCODING 173
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char174
+ENCODING 174
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+4100
+5D00
+5500
+5900
+5500
+4100
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char175
+ENCODING 175
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+7F00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char176
+ENCODING 176
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+1C00
+3600
+3600
+1C00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char177
+ENCODING 177
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1800
+1800
+7E00
+1800
+1800
+0000
+0000
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char178
+ENCODING 178
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3800
+6C00
+1800
+3000
+6400
+7C00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char179
+ENCODING 179
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+7C00
+0C00
+1800
+0C00
+6C00
+3800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char180
+ENCODING 180
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1800
+3000
+6000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char181
+ENCODING 181
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+6600
+6600
+6600
+6600
+6600
+7E00
+6300
+6000
+C000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char182
+ENCODING 182
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+DB00
+DB00
+DB00
+7B00
+1B00
+1B00
+1B00
+1B00
+1B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char183
+ENCODING 183
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char184
+ENCODING 184
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0080
+0100
+0300
+0600
+0C00
+1C00
+3000
+7F00
+7700
+0E00
+1C00
+1800
+3000
+6000
+8000
+0000
+ENDCHAR
+STARTCHAR char185
+ENCODING 185
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3000
+7000
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char186
+ENCODING 186
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3800
+6C00
+4400
+6C00
+3800
+0000
+7C00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char187
+ENCODING 187
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0C00
+0600
+7F00
+7F00
+0600
+0C00
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char188
+ENCODING 188
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6000
+6000
+6100
+6300
+6600
+0C00
+1800
+3300
+6700
+4B00
+1F00
+0300
+0300
+0000
+0000
+ENDCHAR
+STARTCHAR char189
+ENCODING 189
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6000
+6000
+6100
+6300
+6600
+0C00
+1800
+3000
+6700
+4D80
+0300
+0600
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char190
+ENCODING 190
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+7800
+1800
+3900
+1B00
+7600
+0C00
+1800
+3300
+6700
+4B00
+1F00
+0300
+0300
+0000
+0000
+ENDCHAR
+STARTCHAR char191
+ENCODING 191
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+1800
+0000
+1800
+1800
+3000
+6000
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char238
+ENCODING 192
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+CE00
+DB00
+DB00
+FB00
+DB00
+DB00
+CE00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char160
+ENCODING 193
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7800
+0C00
+7C00
+CC00
+CC00
+CC00
+7600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char161
+ENCODING 194
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0200
+0600
+3C00
+6000
+6000
+7C00
+6600
+6600
+6600
+6600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char230
+ENCODING 195
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+CC00
+CC00
+CC00
+CC00
+CC00
+CC00
+FE00
+0600
+0600
+0000
+0000
+ENDCHAR
+STARTCHAR char164
+ENCODING 196
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+1E00
+3600
+3600
+6600
+6600
+6600
+FF00
+C300
+C300
+0000
+0000
+ENDCHAR
+STARTCHAR char165
+ENCODING 197
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7C00
+C600
+FE00
+C000
+C000
+C600
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char228
+ENCODING 198
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+3C00
+1800
+7E00
+DB00
+DB00
+DB00
+DB00
+7E00
+1800
+1800
+3C00
+0000
+ENDCHAR
+STARTCHAR char163
+ENCODING 199
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7E00
+3200
+3200
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char229
+ENCODING 200
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C600
+6C00
+3800
+3800
+3800
+6C00
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char168
+ENCODING 201
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C600
+C600
+CE00
+D600
+E600
+C600
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char169
+ENCODING 202
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+3800
+3800
+C600
+C600
+CE00
+D600
+E600
+C600
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char170
+ENCODING 203
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+E600
+6C00
+7800
+7800
+6C00
+6600
+E600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char171
+ENCODING 204
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+1E00
+3600
+6600
+6600
+6600
+6600
+6600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char172
+ENCODING 205
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C600
+EE00
+FE00
+FE00
+D600
+D600
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char173
+ENCODING 206
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C600
+C600
+C600
+FE00
+C600
+C600
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char174
+ENCODING 207
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7C00
+C600
+C600
+C600
+C600
+C600
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char175
+ENCODING 208
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FE00
+C600
+C600
+C600
+C600
+C600
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char239
+ENCODING 209
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7E00
+CC00
+CC00
+FC00
+6C00
+CC00
+CE00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char224
+ENCODING 210
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+DC00
+6600
+6600
+6600
+6600
+6600
+7C00
+6000
+6000
+F000
+0000
+ENDCHAR
+STARTCHAR char225
+ENCODING 211
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7C00
+C600
+C000
+C000
+C000
+C600
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char226
+ENCODING 212
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7E00
+5A00
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char227
+ENCODING 213
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C600
+C600
+C600
+C600
+C600
+7E00
+0600
+0600
+C600
+7C00
+0000
+ENDCHAR
+STARTCHAR char166
+ENCODING 214
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+D600
+D600
+5400
+7C00
+5400
+D600
+D600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char162
+ENCODING 215
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FC00
+6600
+6600
+7C00
+6600
+6600
+FC00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char236
+ENCODING 216
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+6000
+6000
+7C00
+6600
+6600
+FC00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char235
+ENCODING 217
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C600
+C600
+C600
+F600
+DE00
+DE00
+F600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char167
+ENCODING 218
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3C00
+6600
+0600
+0C00
+0600
+6600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char232
+ENCODING 219
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+D600
+D600
+D600
+D600
+D600
+D600
+FE00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char237
+ENCODING 220
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3C00
+6600
+0600
+1E00
+0600
+6600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char233
+ENCODING 221
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+D600
+D600
+D600
+D600
+D600
+D600
+FE00
+0300
+0300
+0000
+0000
+ENDCHAR
+STARTCHAR char231
+ENCODING 222
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C600
+C600
+C600
+C600
+7E00
+0600
+0600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char234
+ENCODING 223
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F800
+B000
+3000
+3E00
+3300
+3300
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char158
+ENCODING 224
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+CE00
+DB00
+DB00
+DB00
+FB00
+DB00
+DB00
+DB00
+DB00
+CE00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char128
+ENCODING 225
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1E00
+3600
+6600
+C600
+C600
+FE00
+C600
+C600
+C600
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char129
+ENCODING 226
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FE00
+6200
+6200
+6000
+7C00
+6600
+6600
+6600
+6600
+FC00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char150
+ENCODING 227
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+CC00
+CC00
+CC00
+CC00
+CC00
+CC00
+CC00
+CC00
+CC00
+FE00
+0600
+0600
+0000
+0000
+ENDCHAR
+STARTCHAR char132
+ENCODING 228
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1E00
+3600
+6600
+6600
+6600
+6600
+6600
+6600
+6600
+FF00
+C300
+8100
+0000
+0000
+ENDCHAR
+STARTCHAR char133
+ENCODING 229
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FE00
+6600
+6200
+6800
+7800
+6800
+6000
+6200
+6600
+FE00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char148
+ENCODING 230
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3C00
+1800
+7E00
+DB00
+DB00
+DB00
+DB00
+DB00
+7E00
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char131
+ENCODING 231
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FE00
+6200
+6200
+6000
+6000
+6000
+6000
+6000
+6000
+F000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char149
+ENCODING 232
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C600
+C600
+6C00
+7C00
+3800
+3800
+7C00
+6C00
+C600
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char136
+ENCODING 233
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C600
+C600
+CE00
+CE00
+D600
+E600
+E600
+C600
+C600
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char137
+ENCODING 234
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3800
+3800
+C600
+C600
+CE00
+CE00
+D600
+E600
+E600
+C600
+C600
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char138
+ENCODING 235
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+E600
+6600
+6C00
+6C00
+7800
+7800
+6C00
+6C00
+6600
+E600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char139
+ENCODING 236
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1E00
+3600
+6600
+C600
+C600
+C600
+C600
+C600
+C600
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char140
+ENCODING 237
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C600
+EE00
+FE00
+FE00
+D600
+C600
+C600
+C600
+C600
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char141
+ENCODING 238
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C600
+C600
+C600
+C600
+FE00
+C600
+C600
+C600
+C600
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char142
+ENCODING 239
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7C00
+C600
+C600
+C600
+C600
+C600
+C600
+C600
+C600
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char143
+ENCODING 240
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FE00
+C600
+C600
+C600
+C600
+C600
+C600
+C600
+C600
+C600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char159
+ENCODING 241
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3F00
+6600
+6600
+6600
+3E00
+3E00
+6600
+6600
+6600
+E700
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char144
+ENCODING 242
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FC00
+6600
+6600
+6600
+7C00
+6000
+6000
+6000
+6000
+F000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char145
+ENCODING 243
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+6600
+C200
+C000
+C000
+C000
+C000
+C200
+6600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char146
+ENCODING 244
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+5A00
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char147
+ENCODING 245
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C600
+C600
+C600
+C600
+C600
+7E00
+0600
+0600
+C600
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char134
+ENCODING 246
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+D600
+D600
+5400
+5400
+7C00
+7C00
+5400
+D600
+D600
+D600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char130
+ENCODING 247
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FC00
+6600
+6600
+6600
+7C00
+6600
+6600
+6600
+6600
+FC00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char156
+ENCODING 248
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+F000
+6000
+6000
+6000
+7C00
+6600
+6600
+6600
+6600
+FC00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char155
+ENCODING 249
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+C300
+C300
+F300
+DB00
+DB00
+DB00
+DB00
+F300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char135
+ENCODING 250
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7C00
+C600
+0600
+0600
+3C00
+0600
+0600
+0600
+C600
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char152
+ENCODING 251
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+DB00
+DB00
+DB00
+DB00
+DB00
+DB00
+DB00
+DB00
+DB00
+FF00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char157
+ENCODING 252
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7C00
+C600
+0600
+2600
+3E00
+2600
+0600
+0600
+C600
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char153
+ENCODING 253
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+DB00
+DB00
+DB00
+DB00
+DB00
+DB00
+DB00
+DB00
+DB00
+FF00
+0300
+0300
+0000
+0000
+ENDCHAR
+STARTCHAR char151
+ENCODING 254
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C600
+C600
+C600
+C600
+C600
+7E00
+0600
+0600
+0600
+0600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char154
+ENCODING 255
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+F800
+B000
+3000
+3000
+3C00
+3600
+3600
+3600
+3600
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+ENDFONT
diff --git a/util/alevt/vtxt-latin-1.bdf b/util/alevt/vtxt-latin-1.bdf
new file mode 100644
index 0000000..2f1a11b
--- /dev/null
+++ b/util/alevt/vtxt-latin-1.bdf
@@ -0,0 +1,5906 @@
+STARTFONT 2.1
+FONT -alevt-teletext-medium-r-normal--16-1-75-75-c-90-fontspecific-1
+SIZE 1 75 75
+FONTBOUNDINGBOX 9 16 0 -4
+STARTPROPERTIES 10
+POINT_SIZE 1
+PIXEL_SIZE 16
+RESOLUTION_X 75
+RESOLUTION_Y 75
+FONT_ASCENT 12
+FONT_DESCENT 4
+AVERAGE_WIDTH 90
+SPACING "C"
+_XMBDFED_INFO "Edited with xmbdfed 2.4."
+FONT "vtxt"
+ENDPROPERTIES
+CHARS 256
+STARTCHAR char0
+ENCODING 0
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 1
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 2
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 3
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 4
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 5
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 6
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 7
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 8
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 9
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 10
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 11
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 12
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 13
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 14
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 15
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 16
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 17
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char2
+ENCODING 18
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 19
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char0
+ENCODING 20
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 21
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char2
+ENCODING 22
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 23
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char0
+ENCODING 24
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 25
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char2
+ENCODING 26
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 27
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char0
+ENCODING 28
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 29
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char2
+ENCODING 30
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 31
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char32
+ENCODING 32
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char33
+ENCODING 33
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+3C00
+3C00
+3C00
+1800
+1800
+1800
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char34
+ENCODING 34
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6600
+6600
+6600
+2400
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char35
+ENCODING 35
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+3600
+3600
+7F00
+3600
+3600
+3600
+7F00
+3600
+3600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char36
+ENCODING 36
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+0C00
+3E00
+6300
+6100
+6000
+3E00
+0300
+0300
+4300
+6300
+3E00
+0C00
+0C00
+0000
+0000
+ENDCHAR
+STARTCHAR char37
+ENCODING 37
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+6100
+6300
+0600
+0C00
+1800
+3000
+6300
+4300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char38
+ENCODING 38
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3600
+3600
+1C00
+3B00
+6E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char39
+ENCODING 39
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3000
+3000
+3000
+6000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char40
+ENCODING 40
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0C00
+1800
+3000
+3000
+3000
+3000
+3000
+3000
+1800
+0C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char41
+ENCODING 41
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3000
+1800
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+1800
+3000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char42
+ENCODING 42
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6600
+3C00
+FF00
+3C00
+6600
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char43
+ENCODING 43
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+7E00
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char44
+ENCODING 44
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+1800
+3000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char45
+ENCODING 45
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+7F00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char46
+ENCODING 46
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char47
+ENCODING 47
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0100
+0300
+0600
+0C00
+1800
+3000
+6000
+4000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char48
+ENCODING 48
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+6600
+C300
+C300
+DB00
+DB00
+C300
+C300
+6600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char49
+ENCODING 49
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+3800
+7800
+1800
+1800
+1800
+1800
+1800
+1800
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char50
+ENCODING 50
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+0300
+0600
+0C00
+1800
+3000
+6000
+6300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char51
+ENCODING 51
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+0300
+0300
+1E00
+0300
+0300
+0300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char52
+ENCODING 52
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0600
+0E00
+1E00
+3600
+6600
+7F00
+0600
+0600
+0600
+0F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char53
+ENCODING 53
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+6000
+6000
+6000
+7E00
+0300
+0300
+0300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char54
+ENCODING 54
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3000
+6000
+6000
+7E00
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char55
+ENCODING 55
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+6300
+0300
+0300
+0600
+0C00
+1800
+1800
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char56
+ENCODING 56
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+3E00
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char57
+ENCODING 57
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+3F00
+0300
+0300
+0300
+0600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char58
+ENCODING 58
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char59
+ENCODING 59
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+1800
+1800
+1800
+3000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char60
+ENCODING 60
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0600
+0C00
+1800
+3000
+6000
+3000
+1800
+0C00
+0600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char61
+ENCODING 61
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7E00
+0000
+0000
+7E00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char62
+ENCODING 62
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+6000
+3000
+1800
+0C00
+0600
+0C00
+1800
+3000
+6000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char63
+ENCODING 63
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+0600
+0C00
+0C00
+0C00
+0000
+0C00
+0C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char64
+ENCODING 64
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+3E00
+6300
+6300
+6F00
+6F00
+6F00
+6E00
+6000
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char65
+ENCODING 65
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char66
+ENCODING 66
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+3300
+3300
+3300
+3E00
+3300
+3300
+3300
+3300
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char67
+ENCODING 67
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1E00
+3300
+6100
+6000
+6000
+6000
+6000
+6100
+3300
+1E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char68
+ENCODING 68
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7C00
+3600
+3300
+3300
+3300
+3300
+3300
+3300
+3600
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char69
+ENCODING 69
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char70
+ENCODING 70
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char71
+ENCODING 71
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1E00
+3300
+6100
+6000
+6000
+6F00
+6300
+6300
+3300
+1D00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char72
+ENCODING 72
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+6300
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char73
+ENCODING 73
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char74
+ENCODING 74
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0F00
+0600
+0600
+0600
+0600
+0600
+6600
+6600
+6600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char75
+ENCODING 75
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7300
+3300
+3300
+3600
+3C00
+3C00
+3600
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char76
+ENCODING 76
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7800
+3000
+3000
+3000
+3000
+3000
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char77
+ENCODING 77
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+E700
+FF00
+FF00
+DB00
+C300
+C300
+C300
+C300
+C300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char78
+ENCODING 78
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+7300
+7B00
+7F00
+6F00
+6700
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char79
+ENCODING 79
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char80
+ENCODING 80
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+3300
+3300
+3300
+3E00
+3000
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char81
+ENCODING 81
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6B00
+6F00
+3E00
+0600
+0700
+0000
+0000
+ENDCHAR
+STARTCHAR char82
+ENCODING 82
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+3300
+3300
+3300
+3E00
+3600
+3300
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char83
+ENCODING 83
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+3000
+1C00
+0600
+0300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char84
+ENCODING 84
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FF00
+DB00
+9900
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char85
+ENCODING 85
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char86
+ENCODING 86
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+C300
+C300
+C300
+C300
+C300
+6600
+3C00
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char87
+ENCODING 87
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+C300
+C300
+C300
+DB00
+DB00
+FF00
+6600
+6600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char88
+ENCODING 88
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+6600
+3C00
+1800
+1800
+3C00
+6600
+C300
+C300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char89
+ENCODING 89
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+C300
+6600
+3C00
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char90
+ENCODING 90
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FF00
+C300
+8600
+0C00
+1800
+3000
+6000
+C100
+C300
+FF00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char91
+ENCODING 91
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+3000
+3000
+3000
+3000
+3000
+3000
+3000
+3000
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char92
+ENCODING 92
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+4000
+6000
+7000
+3800
+1C00
+0E00
+0700
+0300
+0100
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char93
+ENCODING 93
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char94
+ENCODING 94
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0800
+1C00
+3600
+6300
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char95
+ENCODING 95
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char96
+ENCODING 96
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3000
+3000
+1800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char97
+ENCODING 97
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char98
+ENCODING 98
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+3000
+3000
+3C00
+3600
+3300
+3300
+3300
+3300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char99
+ENCODING 99
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+6000
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char100
+ENCODING 100
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0E00
+0600
+0600
+1E00
+3600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char101
+ENCODING 101
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+7F00
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char102
+ENCODING 102
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3600
+3200
+3000
+7800
+3000
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char103
+ENCODING 103
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3B00
+6600
+6600
+6600
+6600
+6600
+3E00
+0600
+6600
+3C00
+0000
+ENDCHAR
+STARTCHAR char104
+ENCODING 104
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+3000
+3000
+3600
+3B00
+3300
+3300
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char105
+ENCODING 105
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+1800
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char106
+ENCODING 106
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0600
+0600
+0000
+0E00
+0600
+0600
+0600
+0600
+0600
+0600
+6600
+6600
+3C00
+0000
+ENDCHAR
+STARTCHAR char107
+ENCODING 107
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+3000
+3000
+3300
+3600
+3C00
+3C00
+3600
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char108
+ENCODING 108
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char109
+ENCODING 109
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+E600
+FF00
+DB00
+DB00
+DB00
+DB00
+DB00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char110
+ENCODING 110
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6E00
+3300
+3300
+3300
+3300
+3300
+3300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char111
+ENCODING 111
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char112
+ENCODING 112
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6E00
+3300
+3300
+3300
+3300
+3300
+3E00
+3000
+3000
+7800
+0000
+ENDCHAR
+STARTCHAR char113
+ENCODING 113
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3B00
+6600
+6600
+6600
+6600
+6600
+3E00
+0600
+0600
+0F00
+0000
+ENDCHAR
+STARTCHAR char114
+ENCODING 114
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6E00
+3B00
+3300
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char115
+ENCODING 115
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+3000
+1C00
+0600
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char116
+ENCODING 116
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+1800
+1800
+7E00
+1800
+1800
+1800
+1800
+1B00
+0E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char117
+ENCODING 117
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6600
+6600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char118
+ENCODING 118
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C300
+C300
+C300
+C300
+6600
+3C00
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char119
+ENCODING 119
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C300
+C300
+C300
+DB00
+DB00
+FF00
+6600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char120
+ENCODING 120
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C300
+6600
+3C00
+1800
+3C00
+6600
+C300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char121
+ENCODING 121
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6300
+6300
+6300
+6300
+6300
+6300
+3F00
+0300
+0600
+7C00
+0000
+ENDCHAR
+STARTCHAR char122
+ENCODING 122
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7F00
+6600
+0C00
+1800
+3000
+6300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char123
+ENCODING 123
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0E00
+1800
+1800
+1800
+7000
+1800
+1800
+1800
+1800
+0E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char124
+ENCODING 124
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char125
+ENCODING 125
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+1800
+1800
+1800
+0E00
+1800
+1800
+1800
+1800
+7000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char126
+ENCODING 126
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3B00
+6E00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char127
+ENCODING 127
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+7F00
+7F00
+7F00
+7F00
+7F00
+7F00
+7F00
+7F00
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 128
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 129
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char2
+ENCODING 130
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 131
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char0
+ENCODING 132
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 133
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char2
+ENCODING 134
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 135
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char0
+ENCODING 136
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 137
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char2
+ENCODING 138
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 139
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char0
+ENCODING 140
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 141
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char2
+ENCODING 142
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 143
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char0
+ENCODING 144
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 145
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char2
+ENCODING 146
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 147
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char0
+ENCODING 148
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 149
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char2
+ENCODING 150
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 151
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char0
+ENCODING 152
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 153
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char2
+ENCODING 154
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 155
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char0
+ENCODING 156
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 157
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char2
+ENCODING 158
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 159
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char160
+ENCODING 160
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+0880
+0880
+0880
+0880
+FF80
+0880
+0880
+0880
+0880
+0880
+FF80
+0880
+0880
+0880
+0880
+ENDCHAR
+STARTCHAR char161
+ENCODING 161
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+1800
+0000
+1800
+1800
+1800
+3C00
+3C00
+3C00
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char162
+ENCODING 162
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+1800
+1800
+7E00
+C300
+C000
+C000
+C000
+C300
+7E00
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char163
+ENCODING 163
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+1C00
+3600
+3200
+3000
+7800
+3000
+3000
+3000
+3000
+7300
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char164
+ENCODING 164
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+4100
+6300
+3E00
+6300
+6300
+6300
+6300
+3E00
+6300
+4100
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char165
+ENCODING 165
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+6600
+3C00
+1800
+FF00
+1800
+FF00
+1800
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char166
+ENCODING 166
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6600
+6600
+6600
+6600
+6600
+6600
+6600
+6600
+6600
+6600
+6600
+6600
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char167
+ENCODING 167
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3E00
+6300
+3000
+1C00
+3600
+6300
+6300
+3600
+1C00
+0600
+6300
+3E00
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char168
+ENCODING 168
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+7E00
+DB00
+FF00
+BD00
+C300
+E700
+FF00
+7E00
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char169
+ENCODING 169
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+4100
+5D00
+5100
+5100
+5D00
+4100
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char170
+ENCODING 170
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3800
+0C00
+3C00
+6400
+3C00
+0000
+7C00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char171
+ENCODING 171
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+1800
+3000
+7F00
+7F00
+3000
+1800
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char172
+ENCODING 172
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+3C00
+7E00
+5A00
+1800
+1800
+1800
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char173
+ENCODING 173
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char174
+ENCODING 174
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+4100
+5D00
+5500
+5900
+5500
+4100
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char175
+ENCODING 175
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+7F00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char176
+ENCODING 176
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+1C00
+3600
+3600
+1C00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char177
+ENCODING 177
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1800
+1800
+7E00
+1800
+1800
+0000
+0000
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char178
+ENCODING 178
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3800
+6C00
+1800
+3000
+6400
+7C00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char179
+ENCODING 179
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+7C00
+0C00
+1800
+0C00
+6C00
+3800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char180
+ENCODING 180
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1800
+3000
+6000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char181
+ENCODING 181
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+6600
+6600
+6600
+6600
+6600
+7E00
+6300
+6000
+C000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char182
+ENCODING 182
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+DB00
+DB00
+DB00
+7B00
+1B00
+1B00
+1B00
+1B00
+1B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char183
+ENCODING 183
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char184
+ENCODING 184
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0080
+0100
+0300
+0600
+0C00
+1C00
+3000
+7F00
+7700
+0E00
+1C00
+1800
+3000
+6000
+8000
+0000
+ENDCHAR
+STARTCHAR char185
+ENCODING 185
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3000
+7000
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char186
+ENCODING 186
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3800
+6C00
+4400
+6C00
+3800
+0000
+7C00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char187
+ENCODING 187
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0C00
+0600
+7F00
+7F00
+0600
+0C00
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char188
+ENCODING 188
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6000
+6000
+6100
+6300
+6600
+0C00
+1800
+3300
+6700
+4B00
+1F00
+0300
+0300
+0000
+0000
+ENDCHAR
+STARTCHAR char189
+ENCODING 189
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6000
+6000
+6100
+6300
+6600
+0C00
+1800
+3000
+6700
+4D80
+0300
+0600
+0F80
+0000
+0000
+ENDCHAR
+STARTCHAR char190
+ENCODING 190
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+7800
+1800
+3900
+1B00
+7600
+0C00
+1800
+3300
+6700
+4B00
+1F00
+0300
+0300
+0000
+0000
+ENDCHAR
+STARTCHAR char191
+ENCODING 191
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+1800
+0000
+1800
+1800
+3000
+6000
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char192
+ENCODING 192
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1800
+0C00
+0800
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char193
+ENCODING 193
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+1800
+0800
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char194
+ENCODING 194
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1C00
+3600
+0800
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char195
+ENCODING 195
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3B00
+6E00
+0000
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char196
+ENCODING 196
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6300
+0000
+0800
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char197
+ENCODING 197
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1C00
+1400
+1C00
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char198
+ENCODING 198
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1F00
+3600
+6600
+6600
+7F00
+6600
+6600
+6600
+6600
+6700
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char199
+ENCODING 199
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+1E00
+3300
+6100
+6000
+6000
+6000
+6100
+3300
+1E00
+0600
+0300
+3E00
+0000
+ENDCHAR
+STARTCHAR char200
+ENCODING 200
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1800
+0C00
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char201
+ENCODING 201
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+1800
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char202
+ENCODING 202
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1C00
+3600
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char203
+ENCODING 203
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6300
+0000
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char204
+ENCODING 204
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3000
+1800
+0000
+3C00
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char205
+ENCODING 205
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+1800
+0000
+3C00
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char206
+ENCODING 206
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3C00
+6600
+0000
+3C00
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char207
+ENCODING 207
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6600
+0000
+3C00
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char208
+ENCODING 208
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+3600
+3300
+3300
+7B00
+7B00
+3300
+3300
+3600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char209
+ENCODING 209
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3B00
+6E00
+6300
+7300
+7B00
+7F00
+6F00
+6700
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char210
+ENCODING 210
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3000
+1800
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char211
+ENCODING 211
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0600
+0C00
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char212
+ENCODING 212
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1C00
+3600
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char213
+ENCODING 213
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3B00
+6E00
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char214
+ENCODING 214
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6300
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char215
+ENCODING 215
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+6300
+3600
+1C00
+0800
+1C00
+3600
+6300
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char216
+ENCODING 216
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0100
+0300
+3E00
+6700
+6700
+6F00
+6B00
+6B00
+7B00
+7300
+7300
+3E00
+6000
+4000
+0000
+0000
+ENDCHAR
+STARTCHAR char217
+ENCODING 217
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3000
+1800
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char218
+ENCODING 218
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0600
+0C00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char219
+ENCODING 219
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1C00
+1400
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char220
+ENCODING 220
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6300
+0000
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char221
+ENCODING 221
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1800
+3000
+C300
+C300
+C300
+6600
+3C00
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char222
+ENCODING 222
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+7800
+3000
+3E00
+3300
+3300
+3300
+3E00
+3000
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char223
+ENCODING 223
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3600
+6300
+6700
+6E00
+6C00
+6600
+6300
+6B00
+6E00
+6000
+4000
+0000
+0000
+ENDCHAR
+STARTCHAR char224
+ENCODING 224
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3000
+1800
+0C00
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char225
+ENCODING 225
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0C00
+1800
+3000
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char226
+ENCODING 226
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0800
+1C00
+3600
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char227
+ENCODING 227
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3B00
+6E00
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char228
+ENCODING 228
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6600
+0000
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char229
+ENCODING 229
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+1C00
+3600
+1C00
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char230
+ENCODING 230
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6E00
+3B00
+1B00
+7E00
+D800
+DC00
+7700
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char231
+ENCODING 231
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+6000
+6000
+6000
+6300
+3E00
+0C00
+0600
+3C00
+0000
+ENDCHAR
+STARTCHAR char232
+ENCODING 232
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3000
+1800
+0C00
+0000
+3E00
+6300
+7F00
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char233
+ENCODING 233
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0600
+0C00
+1800
+0000
+3E00
+6300
+7F00
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char234
+ENCODING 234
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0800
+1C00
+3600
+0000
+3E00
+6300
+7F00
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char235
+ENCODING 235
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+0000
+0000
+3E00
+6300
+7F00
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char236
+ENCODING 236
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6000
+3000
+1800
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char237
+ENCODING 237
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0600
+0C00
+1800
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char238
+ENCODING 238
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+1800
+3C00
+6600
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char239
+ENCODING 239
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6600
+0000
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char100
+ENCODING 240
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0E00
+0600
+0F00
+0600
+3E00
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char241
+ENCODING 241
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3B00
+6E00
+0000
+6E00
+3300
+3300
+3300
+3300
+3300
+3300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char242
+ENCODING 242
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3000
+1800
+0C00
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char243
+ENCODING 243
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0C00
+1800
+3000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char244
+ENCODING 244
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0800
+1C00
+3600
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char245
+ENCODING 245
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3B00
+6E00
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char246
+ENCODING 246
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char247
+ENCODING 247
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+7E00
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char248
+ENCODING 248
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0100
+0300
+3E00
+6700
+6F00
+6B00
+7B00
+7300
+3E00
+6000
+4000
+0000
+0000
+ENDCHAR
+STARTCHAR char249
+ENCODING 249
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3000
+1800
+0C00
+0000
+6600
+6600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char250
+ENCODING 250
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0C00
+1800
+3000
+0000
+6600
+6600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char251
+ENCODING 251
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+1800
+3C00
+6600
+0000
+6600
+6600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char252
+ENCODING 252
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6600
+0000
+0000
+6600
+6600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char253
+ENCODING 253
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0C00
+1800
+3000
+0000
+6300
+6300
+6300
+6300
+6300
+6300
+3F00
+0300
+0600
+7C00
+0000
+ENDCHAR
+STARTCHAR char254
+ENCODING 254
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+7800
+3000
+3E00
+3300
+3300
+3300
+3300
+3300
+3E00
+3000
+3000
+7800
+0000
+ENDCHAR
+STARTCHAR char255
+ENCODING 255
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+0000
+0000
+6300
+6300
+6300
+6300
+6300
+6300
+3F00
+0300
+0600
+7C00
+0000
+ENDCHAR
+ENDFONT
diff --git a/util/alevt/vtxt-latin-2.bdf b/util/alevt/vtxt-latin-2.bdf
new file mode 100644
index 0000000..6505c6e
--- /dev/null
+++ b/util/alevt/vtxt-latin-2.bdf
@@ -0,0 +1,5906 @@
+STARTFONT 2.1
+FONT -alevt-teletext-medium-r-normal--16-1-75-75-c-90-fontspecific-2
+SIZE 1 75 75
+FONTBOUNDINGBOX 9 16 0 -4
+STARTPROPERTIES 10
+POINT_SIZE 1
+PIXEL_SIZE 16
+RESOLUTION_X 75
+RESOLUTION_Y 75
+FONT_ASCENT 12
+FONT_DESCENT 4
+AVERAGE_WIDTH 90
+SPACING "C"
+_XMBDFED_INFO "Edited with xmbdfed 3.3."
+FONT "vtxt"
+ENDPROPERTIES
+CHARS 256
+STARTCHAR char0
+ENCODING 0
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 1
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 2
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 3
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 4
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 5
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 6
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 7
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 8
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 9
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 10
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 11
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 12
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 13
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char2
+ENCODING 14
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char1
+ENCODING 15
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 16
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 17
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char2
+ENCODING 18
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 19
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char0
+ENCODING 20
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 21
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char2
+ENCODING 22
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 23
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char0
+ENCODING 24
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 25
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char2
+ENCODING 26
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 27
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char0
+ENCODING 28
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 29
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char2
+ENCODING 30
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char1
+ENCODING 31
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+ENDCHAR
+STARTCHAR char32
+ENCODING 32
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char33
+ENCODING 33
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+3C00
+3C00
+3C00
+1800
+1800
+1800
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char34
+ENCODING 34
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6600
+6600
+6600
+2400
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char35
+ENCODING 35
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+3600
+3600
+7F00
+3600
+3600
+3600
+7F00
+3600
+3600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char36
+ENCODING 36
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+0C00
+3E00
+6300
+6100
+6000
+3E00
+0300
+0300
+4300
+6300
+3E00
+0C00
+0C00
+0000
+0000
+ENDCHAR
+STARTCHAR char37
+ENCODING 37
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+6100
+6300
+0600
+0C00
+1800
+3000
+6300
+4300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char38
+ENCODING 38
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3600
+3600
+1C00
+3B00
+6E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char39
+ENCODING 39
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3000
+3000
+3000
+6000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char40
+ENCODING 40
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0C00
+1800
+3000
+3000
+3000
+3000
+3000
+3000
+1800
+0C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char41
+ENCODING 41
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3000
+1800
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+1800
+3000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char42
+ENCODING 42
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6600
+3C00
+FF00
+3C00
+6600
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char43
+ENCODING 43
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+7E00
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char44
+ENCODING 44
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+1800
+3000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char45
+ENCODING 45
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+7F00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char46
+ENCODING 46
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char47
+ENCODING 47
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0100
+0300
+0600
+0C00
+1800
+3000
+6000
+4000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char48
+ENCODING 48
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+6600
+C300
+C300
+DB00
+DB00
+C300
+C300
+6600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char49
+ENCODING 49
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+3800
+7800
+1800
+1800
+1800
+1800
+1800
+1800
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char50
+ENCODING 50
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+0300
+0600
+0C00
+1800
+3000
+6000
+6300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char51
+ENCODING 51
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+0300
+0300
+1E00
+0300
+0300
+0300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char52
+ENCODING 52
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0600
+0E00
+1E00
+3600
+6600
+7F00
+0600
+0600
+0600
+0F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char53
+ENCODING 53
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+6000
+6000
+6000
+7E00
+0300
+0300
+0300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char54
+ENCODING 54
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3000
+6000
+6000
+7E00
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char55
+ENCODING 55
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+6300
+0300
+0300
+0600
+0C00
+1800
+1800
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char56
+ENCODING 56
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+3E00
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char57
+ENCODING 57
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+3F00
+0300
+0300
+0300
+0600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char58
+ENCODING 58
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char59
+ENCODING 59
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+0000
+0000
+1800
+1800
+1800
+3000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char60
+ENCODING 60
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0600
+0C00
+1800
+3000
+6000
+3000
+1800
+0C00
+0600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char61
+ENCODING 61
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7E00
+0000
+0000
+7E00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char62
+ENCODING 62
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+6000
+3000
+1800
+0C00
+0600
+0C00
+1800
+3000
+6000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char63
+ENCODING 63
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+0600
+0C00
+0C00
+0C00
+0000
+0C00
+0C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char64
+ENCODING 64
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+3E00
+6300
+6300
+6F00
+6F00
+6F00
+6E00
+6000
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char65
+ENCODING 65
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char66
+ENCODING 66
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+3300
+3300
+3300
+3E00
+3300
+3300
+3300
+3300
+7E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char67
+ENCODING 67
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1E00
+3300
+6100
+6000
+6000
+6000
+6000
+6100
+3300
+1E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char68
+ENCODING 68
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7C00
+3600
+3300
+3300
+3300
+3300
+3300
+3300
+3600
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char69
+ENCODING 69
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char70
+ENCODING 70
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char71
+ENCODING 71
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1E00
+3300
+6100
+6000
+6000
+6F00
+6300
+6300
+3300
+1D00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char72
+ENCODING 72
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+6300
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char73
+ENCODING 73
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char74
+ENCODING 74
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0F00
+0600
+0600
+0600
+0600
+0600
+6600
+6600
+6600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char75
+ENCODING 75
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7300
+3300
+3300
+3600
+3C00
+3C00
+3600
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char76
+ENCODING 76
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7800
+3000
+3000
+3000
+3000
+3000
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char77
+ENCODING 77
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+E700
+FF00
+FF00
+DB00
+C300
+C300
+C300
+C300
+C300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char78
+ENCODING 78
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+7300
+7B00
+7F00
+6F00
+6700
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char79
+ENCODING 79
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char80
+ENCODING 80
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+3300
+3300
+3300
+3E00
+3000
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char81
+ENCODING 81
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6B00
+6F00
+3E00
+0600
+0700
+0000
+0000
+ENDCHAR
+STARTCHAR char82
+ENCODING 82
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7E00
+3300
+3300
+3300
+3E00
+3600
+3300
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char83
+ENCODING 83
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+3000
+1C00
+0600
+0300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char84
+ENCODING 84
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FF00
+DB00
+9900
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char85
+ENCODING 85
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char86
+ENCODING 86
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+C300
+C300
+C300
+C300
+C300
+6600
+3C00
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char87
+ENCODING 87
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+C300
+C300
+C300
+DB00
+DB00
+FF00
+6600
+6600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char88
+ENCODING 88
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+6600
+3C00
+1800
+1800
+3C00
+6600
+C300
+C300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char89
+ENCODING 89
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+C300
+C300
+C300
+6600
+3C00
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char90
+ENCODING 90
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FF00
+C300
+8600
+0C00
+1800
+3000
+6000
+C100
+C300
+FF00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char91
+ENCODING 91
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+3000
+3000
+3000
+3000
+3000
+3000
+3000
+3000
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char92
+ENCODING 92
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+4000
+6000
+7000
+3800
+1C00
+0E00
+0700
+0300
+0100
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char93
+ENCODING 93
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char94
+ENCODING 94
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0800
+1C00
+3600
+6300
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char95
+ENCODING 95
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+0000
+0000
+ENDCHAR
+STARTCHAR char96
+ENCODING 96
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3000
+3000
+1800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char97
+ENCODING 97
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char98
+ENCODING 98
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+3000
+3000
+3C00
+3600
+3300
+3300
+3300
+3300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char99
+ENCODING 99
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+6000
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char100
+ENCODING 100
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0E00
+0600
+0600
+1E00
+3600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char101
+ENCODING 101
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+7F00
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char102
+ENCODING 102
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3600
+3200
+3000
+7800
+3000
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char103
+ENCODING 103
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3B00
+6600
+6600
+6600
+6600
+6600
+3E00
+0600
+6600
+3C00
+0000
+ENDCHAR
+STARTCHAR char104
+ENCODING 104
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+3000
+3000
+3600
+3B00
+3300
+3300
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char105
+ENCODING 105
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+1800
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char106
+ENCODING 106
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0600
+0600
+0000
+0E00
+0600
+0600
+0600
+0600
+0600
+0600
+6600
+6600
+3C00
+0000
+ENDCHAR
+STARTCHAR char107
+ENCODING 107
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+3000
+3000
+3300
+3600
+3C00
+3C00
+3600
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char108
+ENCODING 108
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char109
+ENCODING 109
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+E600
+FF00
+DB00
+DB00
+DB00
+DB00
+DB00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char110
+ENCODING 110
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6E00
+3300
+3300
+3300
+3300
+3300
+3300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char111
+ENCODING 111
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char112
+ENCODING 112
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6E00
+3300
+3300
+3300
+3300
+3300
+3E00
+3000
+3000
+7800
+0000
+ENDCHAR
+STARTCHAR char113
+ENCODING 113
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3B00
+6600
+6600
+6600
+6600
+6600
+3E00
+0600
+0600
+0F00
+0000
+ENDCHAR
+STARTCHAR char114
+ENCODING 114
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6E00
+3B00
+3300
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char115
+ENCODING 115
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+3000
+1C00
+0600
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char116
+ENCODING 116
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+1800
+1800
+7E00
+1800
+1800
+1800
+1800
+1B00
+0E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char117
+ENCODING 117
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6600
+6600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char118
+ENCODING 118
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C300
+C300
+C300
+C300
+6600
+3C00
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char119
+ENCODING 119
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C300
+C300
+C300
+DB00
+DB00
+FF00
+6600
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char120
+ENCODING 120
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+C300
+6600
+3C00
+1800
+3C00
+6600
+C300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char121
+ENCODING 121
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+6300
+6300
+6300
+6300
+6300
+6300
+3F00
+0300
+0600
+7C00
+0000
+ENDCHAR
+STARTCHAR char122
+ENCODING 122
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+7F00
+6600
+0C00
+1800
+3000
+6300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char123
+ENCODING 123
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0E00
+1800
+1800
+1800
+7000
+1800
+1800
+1800
+1800
+0E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char124
+ENCODING 124
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char125
+ENCODING 125
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7000
+1800
+1800
+1800
+0E00
+1800
+1800
+1800
+1800
+7000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char126
+ENCODING 126
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3B00
+6E00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char127
+ENCODING 127
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+7F00
+7F00
+7F00
+7F00
+7F00
+7F00
+7F00
+7F00
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char0
+ENCODING 128
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 129
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char2
+ENCODING 130
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 131
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char0
+ENCODING 132
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 133
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char2
+ENCODING 134
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 135
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char0
+ENCODING 136
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 137
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char2
+ENCODING 138
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 139
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char0
+ENCODING 140
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 141
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char2
+ENCODING 142
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char1
+ENCODING 143
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+ENDCHAR
+STARTCHAR char0
+ENCODING 144
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 145
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char2
+ENCODING 146
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 147
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char0
+ENCODING 148
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 149
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char2
+ENCODING 150
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 151
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+F000
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char0
+ENCODING 152
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 153
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char2
+ENCODING 154
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 155
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char0
+ENCODING 156
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 157
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+F000
+F000
+F000
+F000
+F000
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char2
+ENCODING 158
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char1
+ENCODING 159
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR char160
+ENCODING 160
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+FF80
+0880
+0880
+0880
+0880
+FF80
+0880
+0880
+0880
+0880
+0880
+FF80
+0880
+0880
+0880
+0880
+ENDCHAR
+STARTCHAR char65
+ENCODING 161
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0600
+0300
+0000
+0000
+ENDCHAR
+STARTCHAR char162
+ENCODING 162
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6600
+3C00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char76
+ENCODING 163
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7800
+3000
+3000
+3C00
+3800
+3000
+7000
+F100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char164
+ENCODING 164
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+4100
+6300
+3E00
+6300
+6300
+6300
+6300
+3E00
+6300
+4100
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char76
+ENCODING 165
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7B00
+3300
+3600
+3000
+3000
+3000
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char83
+ENCODING 166
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+1800
+3E00
+6300
+6300
+3000
+1C00
+0600
+0300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char167
+ENCODING 167
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3E00
+6300
+3000
+1C00
+3600
+6300
+6300
+3600
+1C00
+0600
+6300
+3E00
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char196
+ENCODING 168
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6300
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char169
+ENCODING 169
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6600
+3C00
+3E00
+6300
+6300
+3000
+1C00
+0600
+0300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char83
+ENCODING 170
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3E00
+6300
+6300
+3000
+1C00
+0600
+0300
+6300
+6300
+3E00
+0600
+0300
+3E00
+0000
+ENDCHAR
+STARTCHAR char171
+ENCODING 171
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6600
+3C00
+FF00
+DB00
+9900
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char90
+ENCODING 172
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+1800
+FF00
+C300
+8600
+0C00
+1800
+3000
+6000
+C100
+C300
+FF00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char173
+ENCODING 173
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FF80
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char174
+ENCODING 174
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6600
+3C00
+FF00
+C300
+8600
+0C00
+1800
+3000
+6000
+C100
+C300
+FF00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char90
+ENCODING 175
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FF00
+C300
+8600
+0C00
+7E00
+3000
+6000
+C100
+C300
+FF00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char176
+ENCODING 176
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+1C00
+3600
+3600
+1C00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char97
+ENCODING 177
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0600
+0300
+0000
+0000
+ENDCHAR
+STARTCHAR char97
+ENCODING 178
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0C00
+1800
+0E00
+0000
+0000
+ENDCHAR
+STARTCHAR char108
+ENCODING 179
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3800
+1800
+1E00
+1C00
+1800
+3800
+7800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char180
+ENCODING 180
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1800
+3000
+6000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char108
+ENCODING 181
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3980
+1980
+1B00
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char115
+ENCODING 182
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0600
+0C00
+0000
+3E00
+6300
+3000
+1C00
+0600
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char171
+ENCODING 183
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6600
+3C00
+1800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char184
+ENCODING 184
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0080
+0100
+0300
+0600
+0C00
+1C00
+3000
+7F00
+7700
+0E00
+1C00
+1800
+3000
+6000
+8000
+0000
+ENDCHAR
+STARTCHAR char185
+ENCODING 185
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+3600
+1C00
+3E00
+6300
+3000
+1C00
+0600
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char115
+ENCODING 186
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+3000
+1C00
+0600
+6300
+3E00
+0300
+1E00
+0000
+0000
+ENDCHAR
+STARTCHAR char187
+ENCODING 187
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0180
+0980
+1B00
+1800
+7E00
+1800
+1800
+1800
+1800
+1B00
+0E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char122
+ENCODING 188
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0600
+0C00
+0000
+7F00
+6600
+0C00
+1800
+3000
+6300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char189
+ENCODING 189
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+3300
+6600
+CC00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char190
+ENCODING 190
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+6600
+3C00
+7F00
+6600
+0C00
+1800
+3000
+6300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char122
+ENCODING 191
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0C00
+0C00
+0000
+7F00
+6600
+0C00
+1800
+3000
+6300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char82
+ENCODING 192
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0600
+0C00
+7E00
+3300
+3300
+3300
+3E00
+3600
+3300
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char193
+ENCODING 193
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0300
+0600
+0000
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char194
+ENCODING 194
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1C00
+3600
+0800
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char195
+ENCODING 195
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6300
+3E00
+0000
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char196
+ENCODING 196
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6300
+0000
+0800
+1C00
+3600
+6300
+6300
+7F00
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char76
+ENCODING 197
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+1800
+7C00
+3000
+3000
+3000
+3000
+3000
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char67
+ENCODING 198
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0600
+0C00
+1E00
+3300
+6100
+6000
+6000
+6000
+6000
+6100
+3300
+1E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char199
+ENCODING 199
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+1E00
+3300
+6100
+6000
+6000
+6000
+6100
+3300
+1E00
+0600
+0300
+3E00
+0000
+ENDCHAR
+STARTCHAR char200
+ENCODING 200
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3300
+1E00
+1E00
+3300
+6100
+6000
+6000
+6000
+6000
+6100
+3300
+1E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char201
+ENCODING 201
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+1800
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char202
+ENCODING 202
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3100
+3300
+7F00
+0C00
+0600
+0000
+0000
+ENDCHAR
+STARTCHAR char203
+ENCODING 203
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6300
+0000
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char204
+ENCODING 204
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3300
+1E00
+7F00
+3300
+3100
+3400
+3C00
+3400
+3000
+3100
+3300
+7F00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char205
+ENCODING 205
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+1800
+0000
+3C00
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char206
+ENCODING 206
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3C00
+6600
+0000
+3C00
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char207
+ENCODING 207
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6600
+3C00
+7C00
+3600
+3300
+3300
+3300
+3300
+3300
+3300
+3600
+7C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char208
+ENCODING 208
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3C00
+3600
+3300
+3300
+7B00
+7B00
+3300
+3300
+3600
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char78
+ENCODING 209
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+1800
+6300
+7300
+7B00
+7F00
+6F00
+6700
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char210
+ENCODING 210
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6600
+3C00
+6300
+7300
+7B00
+7F00
+6F00
+6700
+6300
+6300
+6300
+6300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char211
+ENCODING 211
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0600
+0C00
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char212
+ENCODING 212
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1C00
+3600
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char213
+ENCODING 213
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+3300
+6600
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char214
+ENCODING 214
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6300
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char215
+ENCODING 215
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+6300
+3600
+1C00
+0800
+1C00
+3600
+6300
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char216
+ENCODING 216
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6600
+3C00
+7E00
+3300
+3300
+3300
+3E00
+3600
+3300
+3300
+3300
+7300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char217
+ENCODING 217
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0800
+1400
+6B00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char218
+ENCODING 218
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0600
+0C00
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char219
+ENCODING 219
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1B00
+3600
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char220
+ENCODING 220
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+6300
+0000
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char221
+ENCODING 221
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+1800
+3000
+C300
+C300
+C300
+6600
+3C00
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char84
+ENCODING 222
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+FF00
+DB00
+9900
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0600
+3C00
+0000
+0000
+ENDCHAR
+STARTCHAR char223
+ENCODING 223
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+1C00
+3600
+6300
+6700
+6E00
+6C00
+6600
+6300
+6B00
+6E00
+6000
+4000
+0000
+0000
+ENDCHAR
+STARTCHAR char224
+ENCODING 224
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0C00
+1800
+6E00
+3B00
+3300
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char225
+ENCODING 225
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0C00
+1800
+3000
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char226
+ENCODING 226
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0800
+1C00
+3600
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char227
+ENCODING 227
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6600
+3C00
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char228
+ENCODING 228
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6600
+0000
+0000
+3C00
+0600
+3E00
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char108
+ENCODING 229
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0C00
+1800
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char99
+ENCODING 230
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0600
+0C00
+0000
+3E00
+6300
+6000
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char231
+ENCODING 231
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+6000
+6000
+6000
+6300
+3E00
+0C00
+0600
+3C00
+0000
+ENDCHAR
+STARTCHAR char232
+ENCODING 232
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+6600
+3C00
+3E00
+6300
+6000
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char233
+ENCODING 233
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0600
+0C00
+1800
+0000
+3E00
+6300
+7F00
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char234
+ENCODING 234
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+0000
+3E00
+6300
+7F00
+6000
+6000
+6300
+3E00
+1800
+0E00
+0000
+0000
+ENDCHAR
+STARTCHAR char235
+ENCODING 235
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+0000
+0000
+3E00
+6300
+7F00
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char236
+ENCODING 236
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+3300
+1E00
+3E00
+6300
+7F00
+6000
+6000
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char237
+ENCODING 237
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0600
+0C00
+1800
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char238
+ENCODING 238
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+1800
+3C00
+6600
+0000
+3800
+1800
+1800
+1800
+1800
+1800
+3C00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char239
+ENCODING 239
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+6000
+6E00
+3600
+0600
+1E00
+3600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char100
+ENCODING 240
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0E00
+0600
+0F00
+0600
+3E00
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char241
+ENCODING 241
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0600
+0C00
+0000
+6E00
+3300
+3300
+3300
+3300
+3300
+3300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char242
+ENCODING 242
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+3300
+1E00
+6E00
+3300
+3300
+3300
+3300
+3300
+3300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char243
+ENCODING 243
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0600
+0C00
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char244
+ENCODING 244
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0800
+1C00
+3600
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char245
+ENCODING 245
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3300
+6600
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char246
+ENCODING 246
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6300
+0000
+0000
+3E00
+6300
+6300
+6300
+6300
+6300
+3E00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char247
+ENCODING 247
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+0000
+1800
+1800
+0000
+7E00
+0000
+1800
+1800
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char248
+ENCODING 248
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0000
+3300
+1E00
+6E00
+3B00
+3300
+3000
+3000
+3000
+7800
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char249
+ENCODING 249
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+1800
+2400
+2400
+1800
+6600
+6600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char250
+ENCODING 250
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0C00
+1800
+3000
+0000
+6600
+6600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char251
+ENCODING 251
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+3300
+6600
+0000
+6600
+6600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char252
+ENCODING 252
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+6600
+0000
+0000
+6600
+6600
+6600
+6600
+6600
+6600
+3B00
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR char253
+ENCODING 253
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0C00
+1800
+3000
+0000
+6300
+6300
+6300
+6300
+6300
+6300
+3F00
+0300
+0600
+7C00
+0000
+ENDCHAR
+STARTCHAR char116
+ENCODING 254
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0000
+0800
+1800
+1800
+7E00
+1800
+1800
+1800
+1800
+1B00
+0E00
+0300
+1E00
+0000
+0000
+ENDCHAR
+STARTCHAR char255
+ENCODING 255
+SWIDTH 8640 0
+DWIDTH 9 0
+BBX 9 16 0 -4
+BITMAP
+0000
+0C00
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+ENDFONT
diff --git a/util/alevt/xio.c b/util/alevt/xio.c
new file mode 100644
index 0000000..4c0bca2
--- /dev/null
+++ b/util/alevt/xio.c
@@ -0,0 +1,1156 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xatom.h>
+#define XK_MISCELLANY
+#define XK_LATIN1
+#include <X11/keysymdef.h>
+#include <sys/time.h>
+#include "vt.h"
+#include "misc.h"
+#include "dllist.h"
+#include "xio.h"
+#include "fdset.h"
+#include "lang.h"
+#include "icon.xbm"
+#include "font.h"
+
+#define WW (W*CW) /* pixel width of window */
+#define WH (H*CH) /* pixel hegiht of window */
+#define NO_SEL 999 /* sel_y1 value if no selection */
+#define SEL_MIN_TIME 500 /* anything shorter is a click */
+
+static struct dl_head dpys[1]; /* list of all displays */
+static void xio_timer(void *data, int fd);
+static void handle_event(struct xio *xio, int fd);
+
+
+static int timer_init(int argc, char **argv)
+{
+ int p[2], timer_pid, i;
+
+ if (pipe(p) == -1)
+ return -1;
+
+ signal(SIGPIPE, SIG_DFL);
+ timer_pid = fork();
+ if (timer_pid == -1)
+ return -1;
+ if (timer_pid > 0)
+ {
+ fdset_add_fd(fds, p[0], xio_timer, 0);
+ close(p[1]);
+ return 0;
+ }
+
+ close(p[0]);
+ for (i = 0; i < 32; ++i)
+ if (p[1] != i)
+ close(i);
+ memcpy(argv[0], "Timer", 6);
+
+ for (;;)
+ {
+ usleep(300000);
+ write(p[1], "*", 1);
+ }
+}
+
+
+static int local_init(int argc, char **argv)
+{
+ static int inited = 0;
+
+ if (inited)
+ return 0;
+
+ if (timer_init(argc, argv) == -1)
+ return -1;
+
+ dl_init(dpys);
+
+ inited = 1;
+ return 0;
+}
+
+
+static int get_colors(struct xio *xio)
+{
+ int i;
+ XColor c;
+
+ static short rgb[][3] =
+ {
+ { 0x0000,0x0000,0x0000 },
+ { 0xffff,0x0000,0x0000 },
+ { 0x0000,0xffff,0x0000 },
+ { 0xffff,0xffff,0x0000 },
+ { 0x0000,0x0000,0xffff },
+ { 0xffff,0x0000,0xffff },
+ { 0x0000,0xffff,0xffff },
+ { 0xffff,0xffff,0xffff },
+ { 0x7fff,0x7fff,0x7fff },
+ { 0x7fff,0x0000,0x0000 },
+ { 0x0000,0x7fff,0x0000 },
+ { 0x7fff,0x7fff,0x0000 },
+ { 0x0000,0x0000,0x7fff },
+ { 0x7fff,0x0000,0x7fff },
+ { 0x0000,0x7fff,0x7fff },
+ { 0x3fff,0x3fff,0x3fff },
+ };
+
+ for (i = 0; i < 16; ++i)
+ {
+ c.red = rgb[i][0];
+ c.green = rgb[i][1];
+ c.blue = rgb[i][2];
+ if (XAllocColor(xio->dpy, xio->cmap, &c) == 0)
+ return -1;
+ xio->color[i] = c.pixel;
+ }
+ return 0;
+}
+
+
+static int get_fonts(struct xio *xio)
+{
+ GC gc;
+ int i;
+ unsigned char *font_bits;
+ switch(latin1) {
+ case LATIN1: font_bits=font1_bits; break;
+ case LATIN2: font_bits=font2_bits; break;
+ case KOI8: font_bits=font3_bits; break;
+ case GREEK: font_bits=font4_bits; break;
+ default: font_bits=font1_bits; break;
+ }
+
+ xio->font[0] = XCreateBitmapFromData(xio->dpy, xio->root,
+ font_bits, font_width, font_height);
+ xio->font[1] = XCreatePixmap(xio->dpy, xio->root,
+ font_width, font_height*2, 1);
+ gc = XCreateGC(xio->dpy, xio->font[0], 0, 0);
+ for (i = 0; i < font_height; ++i)
+ {
+ XCopyArea(xio->dpy, xio->font[0], xio->font[1], gc, 0, i,
+ font_width, 1, 0, i*2);
+ XCopyArea(xio->dpy, xio->font[0], xio->font[1], gc, 0, i,
+ font_width, 1, 0, i*2+1);
+ }
+ XFreeGC(xio->dpy, gc);
+ return 0;
+}
+
+
+static void xlib_conn_watch(Display *dpy, void *fds, int fd, int open_flag, void *data)
+{
+ if (open_flag)
+ fdset_add_fd(fds, fd, XProcessInternalConnection, dpy);
+ else
+ fdset_del_fd(fds, fd);
+}
+
+
+struct xio * xio_open_dpy(char *dpy, int argc, char **argv)
+{
+ XClassHint classhint[1];
+ struct xio *xio;
+
+ if (local_init(argc, argv) == -1)
+ goto fail1;
+
+ if (not(xio = malloc(sizeof(*xio))))
+ goto fail1;
+
+ if (not(xio->dpy = XOpenDisplay(dpy)))
+ goto fail2;
+
+ xio->fd = ConnectionNumber(xio->dpy);
+ xio->argc = argc;
+ xio->argv = argv;
+ dl_init(xio->windows);
+ xio->screen = DefaultScreen(xio->dpy);
+ xio->depth = DefaultDepth(xio->dpy, xio->screen);
+ xio->width = DisplayWidth(xio->dpy, xio->screen);
+ xio->height = DisplayHeight(xio->dpy, xio->screen);
+ xio->root = DefaultRootWindow(xio->dpy);
+ xio->cmap = DefaultColormap(xio->dpy, xio->screen);
+ xio->xa_del_win = XInternAtom(xio->dpy, "WM_DELETE_WINDOW", False);
+ xio->xa_targets = XInternAtom(xio->dpy, "TARGETS", False);
+ xio->xa_timestamp = XInternAtom(xio->dpy, "TIMESTAMP", False);
+ xio->xa_multiple = XInternAtom(xio->dpy, "MULTIPLE", False);
+ xio->xa_text = XInternAtom(xio->dpy, "TEXT", False);
+
+ if (get_colors(xio) == -1)
+ goto fail3;
+
+ if (get_fonts(xio) == -1)
+ goto fail3;
+
+ if (fdset_add_fd(fds, xio->fd, handle_event, xio) == -1)
+ goto fail3;
+
+ XAddConnectionWatch(xio->dpy, PTR xlib_conn_watch, PTR fds);
+
+ xio->icon = XCreateBitmapFromData(xio->dpy, xio->root,
+ icon_bits, icon_width, icon_height);
+
+ xio->group_leader = XCreateSimpleWindow(xio->dpy, xio->root,
+ 0, 0, 1, 1, 0, 0, 0);
+ XSetCommand(xio->dpy, xio->group_leader, xio->argv, xio->argc);
+ classhint->res_name = "VTLeader";
+ classhint->res_class = "AleVT";
+ XSetClassHint(xio->dpy, xio->group_leader, classhint);
+
+ dl_insert_first(dpys, xio->node);
+ return xio;
+
+fail4:
+ fdset_del_fd(fds, xio->fd);
+fail3:
+ XCloseDisplay(xio->dpy);
+fail2:
+ free(xio);
+fail1:
+ return 0;
+}
+
+
+static void set_user_geometry(struct xio_win *xw, char *geom, XSizeHints *sh, int bwidth)
+{
+ static int gravs[] = { NorthWestGravity, NorthEastGravity,
+ SouthWestGravity, SouthEastGravity };
+ int f, g = 0;
+
+ f = XParseGeometry(geom, &sh->x, &sh->y, &sh->width, &sh->height);
+
+ if (f & WidthValue)
+ sh->width = sh->base_width + sh->width * sh->width_inc;
+ if (f & HeightValue)
+ sh->height = sh->base_height + sh->height * sh->height_inc;
+ if (f & XNegative)
+ g+=1, sh->x = xw->xio->width + sh->x - sh->width - bwidth;
+ if (f & YNegative)
+ g+=2, sh->y = xw->xio->height + sh->y - sh->height - bwidth;
+
+ sh->width = bound(sh->min_width, sh->width, sh->max_width);
+ sh->height = bound(sh->min_height, sh->height, sh->max_height);
+
+ if (f & (WidthValue | HeightValue))
+ sh->flags |= USSize;
+ if (f & (XValue | YValue))
+ sh->flags |= USPosition | PWinGravity;
+
+ sh->win_gravity = gravs[g];
+}
+
+
+struct xio_win * xio_open_win(struct xio *xio, char *geom)
+{
+ struct xio_win *xw;
+ XSetWindowAttributes attr;
+ XGCValues gcval;
+ XSizeHints sizehint[1];
+ XClassHint classhint[1];
+ XWMHints wmhint[1];
+
+ if (not(xw = malloc(sizeof(*xw))))
+ goto fail1;
+
+ xw->xio = xio;
+
+ sizehint->flags = PSize | PBaseSize | PMinSize | PMaxSize | PResizeInc;
+ sizehint->x = sizehint->y = 0;
+ sizehint->width_inc = CW;
+ sizehint->height_inc = CH;
+ sizehint->base_width = 0;
+ sizehint->base_height = 0;
+ sizehint->min_width = 11*CW;
+ sizehint->min_height = 1*CH;
+ sizehint->max_width = sizehint->width = WW + CW;
+ sizehint->max_height = sizehint->height = WH;
+ set_user_geometry(xw, geom, sizehint, 1);
+
+ attr.background_pixel = xio->color[0];
+ attr.event_mask = KeyPressMask |
+ ButtonPressMask|ButtonReleaseMask|Button1MotionMask |
+ ExposureMask;
+ xw->win = XCreateWindow(xio->dpy, xio->root,
+ sizehint->x, sizehint->y, sizehint->width, sizehint->height, 1,
+ CopyFromParent, CopyFromParent, CopyFromParent,
+ CWBackPixel|CWEventMask, &attr);
+
+ classhint->res_name = "VTPage";
+ classhint->res_class = "AleVT";
+
+ wmhint->flags = InputHint | StateHint | WindowGroupHint | IconPixmapHint;
+ wmhint->input = True;
+ wmhint->initial_state = NormalState; //IconicState;
+ wmhint->window_group = xio->group_leader;
+ wmhint->icon_pixmap = xio->icon;
+
+ XSetWMProperties(xio->dpy, xw->win, 0,0, 0,0, sizehint, wmhint, classhint);
+ XSetWMProtocols(xio->dpy, xw->win, &xio->xa_del_win, 1);
+
+ xw->title[0] = 0;
+ xio_title(xw, "AleVT"); // will be reset pretty soon
+
+ gcval.graphics_exposures = False;
+ xw->gc = XCreateGC(xio->dpy, xw->win, GCGraphicsExposures, &gcval);
+
+ xw->tstamp = CurrentTime;
+ xw->fg = xw->bg = -1; /* unknown colors */
+
+ xw->curs_x = xw->curs_y = 999; // no cursor
+
+ xw->sel_y1 = NO_SEL; /* no selection area */
+ xw->sel_start_t = 0; /* no selection-drag active */
+ xw->sel_set_t = 0; /* not selection owner */
+ xw->sel_pixmap = 0; /* no selection pixmap yet */
+
+ xio_clear_win(xw);
+ xw->blink_on = xw->reveal = 0;
+
+ xw->handler = 0;
+
+ XMapWindow(xio->dpy, xw->win);
+ dl_insert_first(xio->windows, xw->node);
+ return xw;
+
+fail2:
+ free(xw);
+fail1:
+ return 0;
+}
+
+
+void xio_close_win(struct xio_win *xw, int dpy_too)
+{
+ struct xio *xio = xw->xio;
+
+ XDestroyWindow(xio->dpy, xw->win);
+ dl_remove(xw->node);
+ free(xw);
+
+ if (dpy_too && dl_empty(xio->windows))
+ xio_close_dpy(xio);
+}
+
+
+void xio_close_dpy(struct xio *xio)
+{
+ while (not dl_empty(xio->windows))
+ xio_close_win((struct xio_win *)xio->windows->first, 0);
+
+ XDestroyWindow(xio->dpy, xio->group_leader);
+ XRemoveConnectionWatch(xio->dpy, PTR xlib_conn_watch, PTR fds);
+ fdset_del_fd(fds, xio->fd);
+ dl_remove(xio->node);
+ free(xio);
+}
+
+
+void xio_set_handler(struct xio_win *xw, void *handler, void *data)
+{
+ xw->handler = handler;
+ xw->data = data;
+}
+
+
+void xio_title(struct xio_win *xw, char *title)
+{
+ char buf[sizeof(xw->title) + 32];
+
+ if (strlen(title) >= sizeof(xw->title))
+ return; //TODO: trimm...
+ if (strcmp(xw->title, title) == 0)
+ return;
+
+ strcpy(xw->title, title);
+ sprintf(buf, "AleVT " VERSION " %s", xw->title);
+ XStoreName(xw->xio->dpy, xw->win, buf);
+ XSetIconName(xw->xio->dpy, xw->win, xw->title);
+}
+
+
+void xio_clear_win(struct xio_win *xw)
+{
+ memset(xw->ch, ' ', sizeof(xw->ch));
+ xw->dheight = xw->blink = xw->concealed = 0;
+ xw->hidden = xw->lhidden = 0;
+ xw->modified = ALL_LINES;
+}
+
+
+void xio_put_line(struct xio_win *xw, int y, u8 *data)
+{
+ u8 *p = xw->ch + y*W;
+ u8 *ep = p + W;
+ lbits yb = 1 << y;
+ lbits x = xw->dheight;
+
+ if (y < 0 || y >= H)
+ return;
+
+ if (memcmp(data, p, ep - p) == 0)
+ return;
+
+ xw->modified |= yb;
+ xw->blink &= ~yb;
+ xw->dheight &= ~yb;
+ xw->concealed &= ~yb;
+
+ while (p < ep)
+ switch (*p++ = *data++)
+ {
+ case 0x08:
+ xw->blink |= yb;
+ break;
+ case 0x0d:
+ if (y < H-1)
+ xw->dheight |= yb;
+ break;
+ case 0x18:
+ xw->concealed |= yb;
+ break;
+ }
+
+ if ((xw->dheight ^ x) & yb) // dheight has changed, recalc hidden
+ {
+ xw->hidden &= yb*2 - 1;
+ for (; yb & ALL_LINES/2; yb *= 2)
+ if (~xw->hidden & xw->dheight & yb)
+ xw->hidden |= yb*2;
+ }
+}
+
+
+void xio_put_str(struct xio_win *xw, int y, u8 *str)
+{
+ u8 buf[W];
+ int l;
+ l = strlen(str);
+ if (l < W)
+ {
+ memcpy(buf, str, l);
+ memset(buf + l, ' ', W - l);
+ }
+ else
+ memcpy(buf, str, W);
+ xio_put_line(xw, y, buf);
+}
+
+
+static void dirty(struct xio_win *xw, int y1, int y2) // mark [y1,y2[ dirty
+{
+ if (y1 >= 0 && y1 < H && y1 < y2)
+ {
+ if (y2 > H)
+ y2 = H;
+ if (xw->hidden & (1 << y1))
+ y1--;
+ while (y1 < y2)
+ xw->modified |= 1 << y1++;
+ }
+}
+
+
+int xio_get_line(struct xio_win *xw, int y, u8 *data)
+{
+ if (y < 0 || y >= H)
+ return -1;
+ if (xw->hidden & (1 << y))
+ y--;
+ memcpy(data, xw->ch + y*W, 40);
+ return 0;
+}
+
+
+void xio_set_cursor(struct xio_win *xw, int x, int y)
+{
+ if (xw->curs_y >= 0 && xw->curs_y < H)
+ dirty(xw, xw->curs_y, xw->curs_y + 1);
+ if (x >= 0 && x < W && y >= 0 && y < H)
+ dirty(xw, y, y + 1);
+ else
+ x = y = 999;
+ xw->curs_x = x;
+ xw->curs_y = y;
+}
+
+
+static inline void draw_char(struct xio_win *xw, Window win, int fg, int bg,
+ int c, int dbl, int x, int y, int ry)
+{
+ struct xio *xio = xw->xio;
+
+ if (fg != xw->fg)
+ XSetForeground(xio->dpy, xw->gc, xio->color[xw->fg = fg]);
+ if (bg != xw->bg)
+ XSetBackground(xio->dpy, xw->gc, xio->color[xw->bg = bg]);
+
+ if (dbl)
+ {
+ XCopyPlane(xio->dpy, xio->font[1], win, xw->gc,
+ c%32*CW, c/32*CH*2, CW, CH*2, x*CW, y*CH, 1);
+ }
+ else
+ {
+ XCopyPlane(xio->dpy, xio->font[0], win, xw->gc,
+ c%32*CW, c/32*CH, CW, CH, x*CW, y*CH, 1);
+ if (xw->dheight & (1<<ry))
+ XCopyPlane(xio->dpy, xio->font[0], win, xw->gc,
+ ' '%32*CW, ' '/32*CH, CW, CH, x*CW, y*CH+CH, 1);
+ }
+}
+
+static void draw_cursor(struct xio_win *xw, int x, int y, int dbl)
+{
+ struct xio *xio = xw->xio;
+
+ if (xw->blink_on)
+ XSetForeground(xio->dpy, xw->gc, xio->color[xw->fg = xw->bg ^ 8]);
+ XDrawRectangle(xio->dpy, xw->win, xw->gc, x * CW, y * CH, CW-1,
+ (dbl ? 2*CH : CH)-1);
+}
+
+
+void xio_update_win(struct xio_win *xw)
+{
+ u8 *p = xw->ch;
+ lbits yb, redraw;
+ int x, y, c;
+
+ if (xw->modified == 0)
+ return;
+
+ redraw = xw->modified; // all modified lines
+ redraw |= xw->lhidden; // all previously hidden lines
+ redraw &= ~xw->hidden;
+
+ xw->lhidden = xw->hidden;
+ xw->modified = 0;
+
+ if (redraw == 0)
+ return;
+
+ for (yb = 1, y = 0; y < H; ++y, yb *= 2)
+ if (redraw & yb)
+ {
+ int fg = 7, bg = 0, _fg, _bg;
+ int dbl = 0, blk = 0, con = 0, gfx = 0, sep = 0, hld = 0;
+ int last_ch = ' ';
+
+ for (x = 0; x < W; ++x)
+ {
+ switch (c = *p++)
+ {
+ case 0x00 ... 0x07: /* alpha + foreground color */
+ fg = c & 7;
+ gfx = 0;
+ con = 0;
+ goto ctrl;
+ case 0x08: /* flash */
+ blk = not xw->blink_on;
+ goto ctrl;
+ case 0x09: /* steady */
+ blk = 0;
+ goto ctrl;
+ case 0x0a: /* end box */
+ case 0x0b: /* start box */
+ goto ctrl;
+ case 0x0c: /* normal height */
+ dbl = 0;
+ goto ctrl;
+ case 0x0d: /* double height */
+ dbl = y < H-1;
+ goto ctrl;
+ case 0x10 ... 0x17: /* graphics + foreground color */
+ fg = c & 7;
+ gfx = 1;
+ con = 0;
+ goto ctrl;
+ case 0x18: /* conceal display */
+ con = not xw->reveal;
+ goto ctrl;
+ case 0x19: /* contiguous graphics */
+ sep = 0;
+ goto ctrl;
+ case 0x1a: /* separate graphics */
+ sep = 1;
+ goto ctrl;
+ case 0x1c: /* black background */
+ bg = 0;
+ goto ctrl;
+ case 0x1d: /* new background */
+ bg = fg;
+ goto ctrl;
+ case 0x1e: /* hold graphics */
+ hld = 1;
+ goto ctrl;
+ case 0x1f: /* release graphics */
+ hld = 0;
+ goto ctrl;
+
+ case 0x0e: /* SO (reserved, double width) */
+ case 0x0f: /* SI (reserved, double size) */
+ c= ' '; break;
+ case 0x1b: /* ESC (reserved) */
+ c = ' ';
+ break;
+
+ ctrl:
+ c = ' ';
+ if (hld && gfx)
+ c = last_ch;
+ break;
+
+ case 0x80 ... 0x9f: /* these aren't used */
+ c = BAD_CHAR;
+ break;
+
+ default: /* mapped to selected font */
+ break;
+ }
+
+ if (gfx && (c & 0xa0) == 0x20)
+ {
+ last_ch = c;
+ c += (c & 0x40) ? 32 : -32;
+ }
+
+ _fg = fg;
+ _bg = bg;
+ if (blk)
+ _fg |= 8;
+ if (y >= xw->sel_y1 && y < xw->sel_y2 &&
+ x >= xw->sel_x1 && x < xw->sel_x2)
+ _bg |= 8;
+ if (con)
+ _fg = _bg;
+
+ draw_char(xw, xw->win, _fg, _bg, c, dbl, x, y, y);
+
+ if (y == xw->curs_y && x == xw->curs_x)
+ draw_cursor(xw, xw->curs_x, xw->curs_y, dbl);
+
+ if (xw->sel_pixmap && (_bg & 8))
+ draw_char(xw, xw->sel_pixmap, con ? bg : fg, bg, c, dbl,
+ x - xw->sel_x1, y - xw->sel_y1, y);
+ }
+ }
+ else
+ p += 40;
+}
+
+
+static void for_all_windows(void (*func)(struct xio_win *xw), struct xio_win *except)
+{
+ struct xio *xio, *vtn;
+ struct xio_win *xw, *vwn;
+
+ for (xio = PTR dpys->first; vtn = PTR xio->node->next; xio = vtn)
+ for (xw = PTR xio->windows->first; vwn = PTR xw->node->next; xw = vwn)
+ if (xw != except)
+ func(xw);
+}
+
+
+int xio_set_concealed(struct xio_win *xw, int on)
+{
+ on = !!on;
+ if (xw->reveal == on)
+ return on;
+
+ xw->reveal = on;
+ xw->modified |= xw->concealed;
+ return !on;
+}
+
+
+static void sel_set(struct xio_win *xw, int x1, int y1, int x2, int y2)
+{
+ int t;
+
+ x1 = bound(0, x1, W-1);
+ y1 = bound(0, y1, H-1);
+ x2 = bound(0, x2, W-1);
+ y2 = bound(0, y2, H-1);
+
+ if (x1 > x2)
+ t = x1, x1 = x2, x2 = t;
+ if (y1 > y2)
+ t = y1, y1 = y2, y2 = t;
+
+ dirty(xw, xw->sel_y1, xw->sel_y2);
+
+ if (xw->hidden & (1 << y1))
+ y1--;
+ if (xw->hidden & (2 << y2))
+ y2++;
+
+ xw->sel_x1 = x1;
+ xw->sel_y1 = y1;
+ xw->sel_x2 = x2 + 1;
+ xw->sel_y2 = y2 + 1;
+ dirty(xw, xw->sel_y1, xw->sel_y2);
+}
+
+
+static void sel_abort(struct xio_win *xw)
+{
+ if (xw->sel_set_t)
+ XSetSelectionOwner(xw->xio->dpy, XA_PRIMARY, None, xw->sel_set_t);
+ if (xw->sel_y1 != NO_SEL)
+ dirty(xw, xw->sel_y1, xw->sel_y2);
+ xw->sel_y1 = NO_SEL;
+ xw->sel_set_t = 0;
+ xw->sel_start_t = 0;
+}
+
+
+static void sel_start(struct xio_win *xw, int x, int y, Time t)
+{
+ sel_abort(xw);
+ xw->sel_start_x = x;
+ xw->sel_start_y = y;
+ xw->sel_start_t = t;
+}
+
+
+static void sel_move(struct xio_win *xw, int x, int y, Time t)
+{
+ if (xw->sel_start_t == 0)
+ return;
+ if (xw->sel_y1 == NO_SEL)
+ if (t - xw->sel_start_t < SEL_MIN_TIME)
+ if (x == xw->sel_start_x)
+ if (y == xw->sel_start_y)
+ return;
+ sel_set(xw, xw->sel_start_x, xw->sel_start_y, x, y);
+}
+
+
+static int sel_end(struct xio_win *xw, int x, int y, Time t)
+{
+ sel_move(xw, x, y, t);
+ xw->sel_start_t = 0;
+
+ if (xw->sel_y1 == NO_SEL)
+ return 0;
+
+ for_all_windows(sel_abort, xw);
+ XSetSelectionOwner(xw->xio->dpy, XA_PRIMARY, xw->win, t);
+ if (XGetSelectionOwner(xw->xio->dpy, XA_PRIMARY) == xw->win)
+ xw->sel_set_t = t;
+ else
+ sel_abort(xw);
+ return 1;
+}
+
+
+static int sel_convert2ascii(struct xio_win *xw, u8 *buf)
+{
+ u8 *d = buf;
+ int x, y, nl = 0;
+
+ for (y = xw->sel_y1; y < xw->sel_y2; y++)
+ {
+ u8 *s = xw->ch + y * W;
+ int gfx = 0, con = 0;
+
+ if (~xw->hidden & (1 << y))
+ {
+ for (x = 0; x < xw->sel_x2; ++x)
+ {
+ int ch, c = ' ';
+ switch (ch = *s++)
+ {
+ case 0x00 ... 0x07:
+ gfx = con = 0;
+ break;
+ case 0x10 ... 0x17:
+ gfx = 1, con = 0;
+ break;
+ case 0x18:
+ con = not xw->reveal;
+ break;
+ case 0xa0 ... 0xff:
+ case 0x20 ... 0x7f:
+ if (not con)
+ if (gfx && ch != ' ' && (ch & 0xa0) == 0x20)
+ c = '#';
+ else if (ch == 0x7f)
+ c = '*';
+ else
+ c = ch;
+ break;
+ }
+ if (x >= xw->sel_x1)
+ {
+ if (nl)
+ *d++ = '\n', nl = 0;
+ *d++ = c;
+ }
+ }
+ nl = 1;
+ }
+ }
+ *d = 0; // not necessary
+ return d - buf;
+}
+
+
+static Pixmap sel_convert2pixmap(struct xio_win *xw)
+{
+ struct xio *xio = xw->xio;
+ Pixmap pm;
+
+ if (xw->sel_y1 == NO_SEL)
+ return None;
+
+ pm = XCreatePixmap(xio->dpy, xio->root, (xw->sel_x2 - xw->sel_x1) * CW,
+ (xw->sel_y2 - xw->sel_y1) * CH,
+ xio->depth);
+ xw->sel_pixmap = pm;
+ dirty(xw, xw->sel_y1, xw->sel_y2);
+ xio_update_win(xw);
+ xw->sel_pixmap = 0;
+
+ return pm;
+}
+
+
+static int sel_do_conv(struct xio_win *xw, Window w, Atom type, Atom prop)
+{
+ struct xio *xio = xw->xio;
+
+ if (type == xio->xa_targets)
+ {
+ u32 atoms[6];
+
+ atoms[0] = XA_STRING;
+ atoms[1] = xio->xa_text;
+ atoms[2] = XA_PIXMAP;
+ atoms[3] = XA_COLORMAP;
+ atoms[4] = xio->xa_multiple;
+ atoms[5] = xio->xa_timestamp;
+ XChangeProperty(xio->dpy, w, prop, type,
+ 32, PropModeReplace, PTR atoms, NELEM(atoms));
+ }
+ else if (type == xio->xa_timestamp)
+ {
+ u32 t = xw->sel_set_t;
+
+ XChangeProperty(xio->dpy, w, prop, type, 32, PropModeReplace, PTR &t, 1);
+ }
+ else if (type == XA_COLORMAP)
+ {
+ u32 t = xio->cmap;
+
+ XChangeProperty(xio->dpy, w, prop, type, 32, PropModeReplace, PTR &t, 1);
+ }
+ else if (type == XA_STRING || type == xio->xa_text)
+ {
+ u8 buf[H * (W+1)];
+ int len;
+
+ len = sel_convert2ascii(xw, buf);
+
+ XChangeProperty(xio->dpy, w, prop, type, 8, PropModeReplace, buf, len);
+ }
+ else if (type == XA_PIXMAP || type == XA_DRAWABLE)
+ {
+ Pixmap pm;
+
+ pm = sel_convert2pixmap(xw);
+
+ XChangeProperty(xio->dpy, w, prop, type, 32, PropModeReplace, PTR &pm, 1);
+ }
+ else if (type == xio->xa_multiple)
+ {
+ u32 *atoms, ty, fo, i;
+ unsigned long n, b;
+
+ if (prop != None)
+ {
+ if (Success == XGetWindowProperty(xio->dpy, w, prop, 0, 1024, 0,
+ AnyPropertyType, PTR &ty, PTR &fo, &n, &b, PTR &atoms))
+ {
+ if (fo == 32 && n%2 == 0)
+ {
+ for (i = 0; i < n; i += 2)
+ if (sel_do_conv(xw, w, atoms[i], atoms[i+1]) == None)
+ atoms[i] = None;
+ }
+ XChangeProperty(xio->dpy, w, prop, type, 32, PropModeReplace,
+ PTR atoms, n);
+ XFree(atoms);
+ }
+ }
+ }
+ else
+ return None;
+ return prop;
+}
+
+
+static void sel_send(struct xio_win *xw, XSelectionRequestEvent *req)
+{
+ XSelectionEvent ev[1];
+
+ if (req->property == None)
+ req->property = req->target;
+
+ ev->type = SelectionNotify;
+ ev->requestor = req->requestor;
+ ev->selection = req->selection;
+ ev->target = req->target;
+ ev->property = sel_do_conv(xw, req->requestor, req->target, req->property);
+ ev->time = req->time;
+ XSendEvent(xw->xio->dpy, req->requestor, False, 0, PTR ev);
+}
+
+
+static void sel_retrieve(struct xio_win *xw, Window w, Atom prop, int del)
+{
+ u8 *data;
+ u32 ty, fo;
+ unsigned long n, b;
+ struct xio *xio = xw->xio;
+
+ if (prop == None)
+ return;
+
+ if (Success == XGetWindowProperty(xio->dpy, w, prop, 0, 1024, del,
+ AnyPropertyType, PTR &ty, PTR &fo, &n, &b, PTR &data))
+ {
+ if (fo == 8 && n != 0)
+ {
+ struct vt_event vtev[1];
+
+ vtev->resource = xw;
+ vtev->type = EV_SELECTION;
+ vtev->i1 = n;
+ vtev->p1 = data;
+ xw->handler(xw->data, vtev);
+ }
+ XFree(data);
+ }
+}
+
+
+void xio_cancel_selection(struct xio_win *xw)
+{
+ sel_abort(xw);
+}
+
+
+void xio_query_selection(struct xio_win *xw)
+{
+ struct xio *xio = xw->xio;
+
+ if (XGetSelectionOwner(xio->dpy, XA_PRIMARY) == None)
+ sel_retrieve(xw, xio->root, XA_CUT_BUFFER0, False);
+ else
+ {
+ XDeleteProperty(xio->dpy, xw->win, XA_STRING);
+ XConvertSelection(xio->dpy, XA_PRIMARY, XA_STRING,
+ XA_STRING, xw->win, xw->tstamp);
+ }
+}
+
+
+void xio_set_selection(struct xio_win *xw, int x1, int y1, int x2, int y2)
+{
+ sel_start(xw, x1, y1, xw->tstamp - SEL_MIN_TIME);
+ sel_end(xw, x2, y2, xw->tstamp);
+}
+
+
+static void handle_event(struct xio *xio, int fd)
+{
+ struct xio_win *xw;
+ struct vt_event vtev[1];
+ XEvent ev[1];
+
+ XNextEvent(xio->dpy, ev);
+
+ for (xw = PTR xio->windows->first; xw->node->next; xw = PTR xw->node->next)
+ if (xw->win == ev->xany.window)
+ break;
+ if (xw->node->next == 0)
+ return;
+
+ vtev->resource = xw;
+
+ switch(ev->type)
+ {
+ case Expose:
+ {
+ int y1 = ev->xexpose.y / CH;
+ int y2 = (ev->xexpose.y + ev->xexpose.height + CH-1) / CH;
+
+ dirty(xw, y1, y2);
+ break;
+ }
+ case ClientMessage:
+ {
+ vtev->type = EV_CLOSE;
+ if (ev->xclient.format == 32)
+ if ((Atom)ev->xclient.data.l[0] == xio->xa_del_win)
+ xw->handler(xw->data, vtev);
+ break;
+ }
+ case KeyPress:
+ {
+ unsigned char ch;
+ KeySym k;
+
+ xw->tstamp = ev->xkey.time;
+ vtev->type = EV_KEY;
+ vtev->i1 = 0;
+ vtev->i2 = (ev->xkey.state & ShiftMask) != 0;
+ if (XLookupString(&ev->xkey, &ch, 1, &k, 0))
+ vtev->i1 = ch;
+ else
+ switch (k)
+ {
+ case XK_Left: vtev->i1 = KEY_LEFT; break;
+ case XK_Right: vtev->i1 = KEY_RIGHT; break;
+ case XK_Up: vtev->i1 = KEY_UP; break;
+ case XK_Down: vtev->i1 = KEY_DOWN; break;
+ case XK_Prior: vtev->i1 = KEY_PUP; break;
+ case XK_Next: vtev->i1 = KEY_PDOWN; break;
+ case XK_Delete: vtev->i1 = KEY_DEL; break;
+ case XK_Insert: vtev->i1 = KEY_INS; break;
+ case XK_F1: vtev->i1 = KEY_F(1); break;
+ case XK_F2: vtev->i1 = KEY_F(2); break;
+ case XK_F3: vtev->i1 = KEY_F(3); break;
+ case XK_F4: vtev->i1 = KEY_F(4); break;
+ case XK_F5: vtev->i1 = KEY_F(5); break;
+ case XK_F6: vtev->i1 = KEY_F(6); break;
+ case XK_F7: vtev->i1 = KEY_F(7); break;
+ case XK_F8: vtev->i1 = KEY_F(8); break;
+ case XK_F9: vtev->i1 = KEY_F(9); break;
+ case XK_F10: vtev->i1 = KEY_F(10); break;
+ case XK_F11: vtev->i1 = KEY_F(11); break;
+ case XK_F12: vtev->i1 = KEY_F(12); break;
+ }
+ if (vtev->i1)
+ xw->handler(xw->data, vtev);
+ break;
+ }
+ case ButtonPress:
+ {
+ xw->tstamp = ev->xkey.time;
+ ev->xbutton.x /= CW;
+ ev->xbutton.y /= CH;
+ if (ev->xbutton.button == Button1)
+ sel_start(xw, ev->xbutton.x, ev->xbutton.y, ev->xbutton.time);
+ break;
+ }
+ case MotionNotify:
+ {
+ xw->tstamp = ev->xkey.time;
+ ev->xmotion.x /= CW;
+ ev->xmotion.y /= CH;
+ if (ev->xmotion.state & Button1Mask)
+ sel_move(xw, ev->xmotion.x, ev->xmotion.y, ev->xmotion.time);
+ break;
+ }
+ case ButtonRelease:
+ {
+ xw->tstamp = ev->xkey.time;
+ ev->xbutton.x /= CW;
+ ev->xbutton.y /= CH;
+ if (ev->xbutton.button == Button1)
+ if (sel_end(xw, ev->xbutton.x, ev->xbutton.y, ev->xbutton.time))
+ break;
+
+ vtev->type = EV_MOUSE;
+ vtev->i1 = ev->xbutton.button;
+ vtev->i2 = (ev->xbutton.state & ShiftMask) != 0;
+ vtev->i3 = ev->xbutton.x;
+ vtev->i4 = ev->xbutton.y;
+ if (vtev->i3 >= 0 && vtev->i3 < W && vtev->i4 >= 0 && vtev->i4 < H)
+ xw->handler(xw->data, vtev);
+ break;
+ }
+ case SelectionClear:
+ {
+ // may be our own Owner=None due to sel_start
+ if (xw->sel_set_t && ev->xselectionclear.time >= xw->sel_set_t)
+ {
+ xw->sel_set_t = 0; // no need to reset owner
+ sel_abort(xw);
+ }
+ break;
+ }
+ case SelectionRequest:
+ {
+ sel_send(xw, &ev->xselectionrequest);
+ break;
+ }
+ case SelectionNotify:
+ {
+ sel_retrieve(xw, ev->xselection.requestor, ev->xselection.property, True);
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+
+static void switch_blink_state(struct xio_win *xw)
+{
+ xw->blink_on = !xw->blink_on;
+ xw->modified |= xw->blink;
+ dirty(xw, xw->curs_y, xw->curs_y + 1);
+}
+
+
+static void send_timer_event(struct xio_win *xw)
+{
+ struct vt_event vtev[1];
+ vtev->type = EV_TIMER;
+ xw->handler(xw->data, vtev);
+}
+
+
+static void xio_timer(void *data, int fd)
+{
+ char buf[64];
+ read(fd, buf, sizeof(buf));
+ for_all_windows(switch_blink_state, 0);
+ for_all_windows(send_timer_event, 0);
+}
+
+
+void xio_event_loop(void)
+{
+ struct xio *xio, *vtn;
+ int f;
+
+ while (not dl_empty(dpys))
+ {
+ do
+ {
+ for_all_windows(xio_update_win, 0);
+ f = 0;
+ for (xio = PTR dpys->first; vtn = PTR xio->node->next; xio = vtn)
+ while (XPending(xio->dpy))
+ {
+ handle_event(xio, xio->fd);
+ f++;
+ }
+ } while (f);
+ fdset_select(fds, -1);
+ }
+}
diff --git a/util/alevt/xio.h b/util/alevt/xio.h
new file mode 100644
index 0000000..664b701
--- /dev/null
+++ b/util/alevt/xio.h
@@ -0,0 +1,80 @@
+#ifndef VTXIO_H
+#define VTXIO_H
+
+#include <X11/Xlib.h>
+#include "vt.h"
+#include "dllist.h"
+
+typedef u32 lbits;
+#define ALL_LINES ((1ul << H) - 1)
+
+/* one xio per display */
+struct xio
+{
+ struct dl_node node[1];
+ int argc;
+ char **argv;
+ Display *dpy; /* display connection */
+ int fd; /* the displays file descriptor */
+ Atom xa_del_win; /* WM_DELETE_WINDOW atom */
+ Atom xa_targets; /* TARGETS atom (selection) */
+ Atom xa_timestamp; /* TIMESTAMP atom (selection) */
+ Atom xa_text; /* TEXT atom (selection) */
+ Atom xa_multiple; /* MULTIPLE atom (selection) */
+ Window group_leader; /* unmapped window */
+ int screen; /* DefaultScreen */
+ int width, height; /* DisplayWidth/Height */
+ int depth; /* DefaultDepth */
+ Window root; /* DefaultRoot */
+ Colormap cmap;
+ int color[16]; /* 8 normal, 8 dim intensity */
+ Pixmap font[2]; /* normal, dbl-height */
+ Pixmap icon; /* icon pixmap */
+ struct dl_head windows[1]; /* all windows on this display */
+};
+
+/* one vt_win per window */
+struct xio_win
+{
+ struct dl_node node[1];
+ struct xio *xio; /* display */
+ Window win; /* the drawing window */
+ Time tstamp; /* timestamp of last user event */
+ GC gc; /* it's graphics context */
+ u8 ch[H*W]; /* the page contents */
+ lbits modified, hidden, lhidden; /* states for each line */
+ lbits dheight, blink, concealed; /* attributes for each line */
+ int fg, bg; /* current foreground/background */
+ int blink_on; /* blinking on */
+ int reveal; /* reveal concealed text */
+ void (*handler)(void *data, struct vt_event *ev); /* event-handler */
+ void *data; /* data for the event-handler */
+ int curs_x, curs_y; /* cursor position */
+ u8 title[32]; /* the user title */
+ // selection support
+ int sel_start_x, sel_start_y;
+ Time sel_start_t;
+ Time sel_set_t; /* time we got selection owner */
+ int sel_x1, sel_y1, sel_x2, sel_y2; /* selected area */
+ Pixmap sel_pixmap; /* for pixmap-selection requests */
+};
+
+struct xio *xio_open_dpy(char *dpy, int argc, char **argv);
+struct xio_win *xio_open_win(struct xio *xio, char *geom);
+void xio_close_win(struct xio_win *xw, int dpy_too);
+void xio_close_dpy(struct xio *xio);
+void xio_set_handler(struct xio_win *xw, void *handler, void *data);
+void xio_clear_win(struct xio_win *xw);
+void xio_put_line(struct xio_win *xw, int line, u8 *data);
+void xio_put_str(struct xio_win *xw, int line, u8 *c_str);
+int xio_get_line(struct xio_win *xw, int line, u8 *data);
+int xio_set_concealed(struct xio_win *xw, int on);
+void xio_update_win(struct xio_win *xw);
+void xio_fd_handler(int fd, void *handler, void *data);
+void xio_cancel_selection(struct xio_win *xw);
+void xio_query_selection(struct xio_win *xw);
+void xio_set_selection(struct xio_win *xw, int x1, int y1, int x2, int y2);
+void xio_set_cursor(struct xio_win *xw, int x, int y);
+void xio_event_loop(void);
+void xio_title(struct xio_win *xw, char *title);
+#endif