summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-10-13 17:18:49 +0200
committerMiguel <m.i@gmx.at>2018-10-13 17:18:49 +0200
commit5aeab1c853e487aa0042d5c32200d623efe908d3 (patch)
tree51c810e0ce95c2b031b69999be2c0ab4244b2749
parent279f3336a8f6b31ca38bdd272c73aebd68fa88fe (diff)
fontstuff et al.
-rw-r--r--README.md2
-rw-r--r--driver/e1000.c1
-rw-r--r--driver/keyboard.c2
-rw-r--r--driver/mouse.c2
-rw-r--r--driver/pci.c2
-rw-r--r--grubiso/boot/grub/grub.cfg2
-rw-r--r--kernel/kernel.c40
-rw-r--r--userspace/Makefile2
-rw-r--r--userspace/fonts/Makefile12
-rw-r--r--userspace/fonts/bdf.c59
-rw-r--r--userspace/fonts/binarize.py16
-rw-r--r--userspace/fonts/binfont.src2
-rw-r--r--userspace/fonts/binfont_v2.src1237
-rw-r--r--userspace/fonts/envypn7x13.bdf4295
-rw-r--r--userspace/fonts/envypn7x13.src2844
-rw-r--r--userspace/fonts/tinyfont.c160
-rw-r--r--userspace/fonts/tinyfont.src667
-rw-r--r--userspace/xterm/terminal.c3
-rw-r--r--userspace/xterm/vesa.c324
-rw-r--r--userspace/xterm/xterm.c3
-rw-r--r--video/compositor.c65
21 files changed, 9451 insertions, 289 deletions
diff --git a/README.md b/README.md
index 581a3dd..c8e05bc 100644
--- a/README.md
+++ b/README.md
@@ -89,6 +89,8 @@ FoolOS was/is tested/developed on the following emulators/machines
Todos
-----
+pipes! schedulig! DMA! splice (2)
+
Autobuild via Jenkins (sanbboxed?)
streamline: binutils,gcc,newlib,ncurses,ncurses-examples.vim building
mesa3d, quake,doom, netwookring tcp/ip
diff --git a/driver/e1000.c b/driver/e1000.c
index 5d0cbe6..7b4a7cb 100644
--- a/driver/e1000.c
+++ b/driver/e1000.c
@@ -525,6 +525,7 @@ struct netdev e1000_init(uint32_t base)
return dev;
}
+
uint32_t e1000_interrupt (uint32_t esp)
{
// if ( p_interruptContext->getInteruptNumber() == pciConfigHeader->getIntLine()+IRQ0)
diff --git a/driver/keyboard.c b/driver/keyboard.c
index b333b78..a153c9b 100644
--- a/driver/keyboard.c
+++ b/driver/keyboard.c
@@ -26,10 +26,8 @@ int hex_to_dec(char c)
return c+10-'a';
}
-extern struct netdev e1000_dev;
static void put(uint8_t c)
{
-// syscall_generic(SYSCALL_WRITE,kb_stream, (char *)&c , 1, 0);
compositor_kb_handle(c);
}
diff --git a/driver/mouse.c b/driver/mouse.c
index 0c48a5f..c0e71d5 100644
--- a/driver/mouse.c
+++ b/driver/mouse.c
@@ -154,7 +154,7 @@ void mouse_action()
if(mouse_x>=1920)mouse_x=1920-1;
if(mouse_y>=1080)mouse_y=1080-1;
- compositor_mouse_handle(mouse_x,1080-mouse_y, mouse_byte[0]);
+ compositor_mouse_handle(mouse_x,1080-mouse_y-1, mouse_byte[0]);
}
void mouse_handler(uint8_t byte)//struct regs *a_r) //struct regs *a_r (not used but just there)
diff --git a/driver/pci.c b/driver/pci.c
index a6d68c1..4d0ea3e 100644
--- a/driver/pci.c
+++ b/driver/pci.c
@@ -6,7 +6,7 @@
#define PCI_CONFIG_DATA 0xCFC
#define PCI_CONFIG_ADDRESS 0xCF8
-static uint32_t e1000_addr;
+static uint32_t e1000_addr=0;
static char *get_class(uint8_t v)
{
diff --git a/grubiso/boot/grub/grub.cfg b/grubiso/boot/grub/grub.cfg
index ad49f88..f16c3a0 100644
--- a/grubiso/boot/grub/grub.cfg
+++ b/grubiso/boot/grub/grub.cfg
@@ -1,4 +1,4 @@
-set timeout=0 //seconds
+set timeout=1 //seconds
if loadfont ${prefix}/fonts/unicode.pf2
diff --git a/kernel/kernel.c b/kernel/kernel.c
index 7c06ebf..7f92a25 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -48,11 +48,12 @@
* * All Processors are up and running in 32bit protected mode.
* * Interrupts are installed and enabled:
*
- * - PS/2 Keyboard CPU0
- * - PS/2 Mouse CPU0
- * - PIT Timer (20Hz) (DISABLED in apic.c) CPU0
- * - APIC Timer (Frequency defined in kernel.h) ALL CPUS
- * - E1000 CPU0
+ * - APIC Timer (Frequency defined in kernel.h) ALL CPUS
+ * - PIT Timer (20Hz hardcoded in timer.c) CPU-0
+ *
+ * - PS/2 Keyboard CPU-0
+ * - PS/2 Mouse CPU-0
+ * - E1000 CPU-0
*
* * Software Interrupts:
*
@@ -143,43 +144,24 @@ void kernel_main(uint32_t eax,uint32_t ebx)
apic_init(&cfg_acpi);
ioapic_config();
- // -- VESA -- //
- /*
- fixme("tell terminal syscall somehow if we are vga or textmode");
- klog("Video Electronics Standards Association (VESA) init ... ");
-
- // binfont has to fit in ONE ext2 block //
-
- fixme("support binfonts spanning multiple blocks?");
- uint32_t inode= ext2_filename_to_inode(VMEM_EXT2_RAMIMAGE,VESA_FONT_PATH);
- uint32_t addr= ext2_inode_blockstart( VMEM_EXT2_RAMIMAGE,inode,0);
- vesa_init(cfg_multiboot,addr); // this only sets some internal static variables
-
-
- // -- STD STREAMS -- //
- klog("Standard Streams init ...");
- fd_init_std_streams(0,cfg_multiboot->framebuffer_type!=2);
- */
-
+ // -- COMPOSITOR (TODO: text-mode fallback) -- //
klog("Compositor init ...");
compositor_init(cfg_multiboot->framebuffer_width,cfg_multiboot->framebuffer_height,cfg_multiboot->framebuffer_pitch);
- compositor_set_background("/home/miguel/bg2.ppm");
+ compositor_set_background("/home/miguel/bg.ppm");
- // -- KB -- //
+ // -- KB DRIVER -- //
klog("Keyboard init ...");
keyboard_init();
- // -- MOUSE -- //
+ // -- MOUSE DRIVER -- //
klog("Mouse init ...");
mouse_init();
- // -- E1000 INIT (TODO: only if present!) --/
+ // -- E1000 DRIVER --/
if(e1000_addr)
{
- #ifndef DISABLE_E1000
klog("E1000 init ...");
e1000_init(e1000_addr);
- #endif
}
// we wait until the end since the time will only start ticking once
diff --git a/userspace/Makefile b/userspace/Makefile
index 94d35c4..4823598 100644
--- a/userspace/Makefile
+++ b/userspace/Makefile
@@ -53,7 +53,7 @@ ext2.img: $(PROGS)
@mkdir -p mnt/pipes # mountpoint for pipes
@cp $(PROGS) mnt/bin
@cp /home/miguel/git/EXT/vim/src/vim mnt/bin
- @cp fonts/binfont.bin mnt/doc/fonts
+ @cp fonts/*.bin mnt/doc/fonts
@cp xterm/xterm mnt/bin
@cp cpp/testcpp mnt/bin
@cp ncurses/foolstart mnt/bin
diff --git a/userspace/fonts/Makefile b/userspace/fonts/Makefile
index a203753..31dfb20 100644
--- a/userspace/fonts/Makefile
+++ b/userspace/fonts/Makefile
@@ -1,5 +1,15 @@
############ fool-font ############
-binfont.bin: binfont.src
+
+# how to binarize foolfont sources to foolfont binaries
+%.bin: %.src
python3 binarize.py $< $@
+
+FONT_SRC=$(wildcard ./*.src)
+FONT_BIN=$(patsubst %.src, %.bin, $(FONT_SRC))
+
+all:
+
clean:
-rm binfont.bin
+ -rm binfont_v2.bin
+ -rm tinyfont.bin
diff --git a/userspace/fonts/bdf.c b/userspace/fonts/bdf.c
new file mode 100644
index 0000000..ce717c5
--- /dev/null
+++ b/userspace/fonts/bdf.c
@@ -0,0 +1,59 @@
+// https://github.com/Tecate/bitmap-fonts
+// https://en.wikipedia.org/wiki/Glyph_Bitmap_Distribution_Format
+//
+
+//
+// simple converted of bdf to foolfont binary format
+// limited functionality
+// works only for monospace with identical bounding boxes..
+// for now width = 7 /height=13 is hardcoded!
+//
+
+#include <stdio.h>
+#include <string.h>
+#include <stdbool.h>
+
+int main(int argc, char **argv)
+{
+ char buf[256];
+
+ FILE *f=fopen(argv[1],"r");
+
+ bool bitmap=false;
+
+ printf("7\n");
+ printf("13\n");
+
+ while(fgets(buf,256,f))
+ {
+ buf[strlen(buf)-1]=0;
+
+ //printf("[%s]\n",buf);
+
+ if(!strcmp(buf,"BITMAP"))
+ {
+ printf("//reading bitmap\n");
+ bitmap=true;
+ continue;
+ }
+ if(!strcmp(buf,"ENDCHAR"))bitmap=false;
+
+ if(bitmap)
+ {
+ //int l=atoi(buf);
+ int l=strtol(buf,NULL,16);
+
+ for(int i=0;i<7;i++)
+ {
+ if(l&(1<<(6-i)))printf("X");
+ else printf("_");
+ }
+
+ printf("\n");
+ }
+
+ }
+
+
+
+}
diff --git a/userspace/fonts/binarize.py b/userspace/fonts/binarize.py
index a992c93..e043106 100644
--- a/userspace/fonts/binarize.py
+++ b/userspace/fonts/binarize.py
@@ -4,7 +4,10 @@ def binarize(file_in, file_out):
""" Create a binary file from an ASCII file. Everything
but '0' and '1' (alternatively '_' and 'X') is ignored
- from the input file. """
+ from the input file.
+
+ The first two lines are width and height and will be saved
+ as the first two bytes of the resulting file"""
print ("binarizing " + file_in + " to "+ file_out + ".")
@@ -18,6 +21,11 @@ def binarize(file_in, file_out):
try:
+ w=int(f.readline())
+ h=int(f.readline())
+ o.write(bytes([w]))
+ o.write(bytes([h]))
+
while True:
b=readnext(f)
@@ -56,7 +64,11 @@ def readnext(f):
c=f.read(1)
if not c:
- return -1
+ if l==0:
+ return -1
+ else:
+ print("trailing only ",b," with ",l," bits");
+ return int(b,2)
if c=="0" or c=='_':
l+=1
diff --git a/userspace/fonts/binfont.src b/userspace/fonts/binfont.src
index c1d9ccc..b2b1f2e 100644
--- a/userspace/fonts/binfont.src
+++ b/userspace/fonts/binfont.src
@@ -1,3 +1,5 @@
+8
+10
// space (ox2o)
diff --git a/userspace/fonts/binfont_v2.src b/userspace/fonts/binfont_v2.src
new file mode 100644
index 0000000..05950da
--- /dev/null
+++ b/userspace/fonts/binfont_v2.src
@@ -0,0 +1,1237 @@
+8
+10
+
+// space (ox2o)
+
+________
+________
+________
+________
+___X____
+___X____
+________
+________
+________
+________
+
+// !
+
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+________
+________
+___XX___
+___XX___
+
+// "
+
+_XX__XX_
+_XX__XX_
+_XX__XX_
+________
+________
+________
+________
+________
+________
+________
+
+// #
+
+________
+__X__X__
+__X__X__
+XXXXXXXX
+__X__X__
+__X__X__
+__X__X__
+XXXXXXXX
+__X__X__
+__X__X__
+
+// $
+
+________
+___X____
+_XXXXXX_
+XX_X__XX
+_XXX____
+__XXXX__
+___X_XX_
+XX_X__XX
+_XXXXXX_
+___X____
+
+// %
+
+______XX
+_X___XX_
+X_X_XX__
+_X__XX__
+___XX___
+___XX___
+__XX__X_
+__XX_X_X
+_XX___X_
+XX______
+
+// &
+
+__X_____
+_X_X____
+X___X___
+_X_X____
+__XX____
+_X_X____
+X___X_X_
+X____X__
+X___X_X_
+_XXX___X
+
+// '
+
+___XX___
+___XX___
+___XX___
+________
+________
+________
+________
+________
+________
+________
+
+// (
+
+___X____
+__X_____
+_X______
+_X______
+X_______
+X_______
+_X______
+_X______
+__X_____
+___X____
+
+// )
+
+___X____
+_____X__
+______X_
+______X_
+_______X
+_______X
+______X_
+______X_
+_____X__
+___X____
+
+// *
+
+________
+________
+X__X__X_
+_X_X_X__
+__XXX___
+XXXXXXX_
+__XXX___
+_X_X_X__
+X__X__X_
+________
+
+// +
+
+________
+________
+___XX___
+___XX___
+XXXXXXXX
+XXXXXXXX
+___XX___
+___XX___
+________
+________
+
+// ,
+
+________
+________
+________
+________
+________
+________
+________
+___XX___
+___XX___
+__XX____
+
+// -
+
+________
+________
+________
+________
+_XXXXXX_
+_XXXXXX_
+________
+________
+________
+________
+
+// .
+
+________
+________
+________
+________
+________
+________
+________
+________
+___XX___
+___XX___
+
+// /
+______XX
+_____XX_
+____XX__
+____XX__
+___XX___
+___XX___
+__XX____
+__XX____
+_XX_____
+XX______
+
+// zero
+
+_XXXXXX_
+XXXXXXXX
+XX___XXX
+XX__X_XX
+XX__X_XX
+XX_X__XX
+XX_X__XX
+XXX___XX
+XXXXXXXX
+_XXXXXX_
+
+// one
+
+___XX___
+__XXX___
+__XXX___
+_XXXX___
+XX_XX___
+___XX___
+___XX___
+___XX___
+___XX___
+_XXXXXX_
+
+// 2
+
+_XXXXXX_
+XXXXXXXX
+_____XXX
+_____XXX
+____XXX_
+___XXX__
+_XXX____
+XXX_____
+XXXXXXXX
+XXXXXXXX
+
+// 3
+
+XXXXXXXX
+XXXXXXXX
+_____XXX
+____XX__
+___XX___
+__XXX___
+____XXX_
+XX___XXX
+XXXXXXXX
+_XXXXXX_
+
+// 4
+
+___XX___
+__XXX___
+__XXX___
+_XXXX___
+XX_XX___
+XXXXXXXX
+XXXXXXXX
+___XX___
+___XX___
+___XX___
+
+// 5
+
+XXXXXXXX
+XXXXXXXX
+XXX_____
+XXX_____
+XXXXXXX_
+_XXXXXXX
+______XX
+X_____XX
+XXXXXXXX
+_XXXXXX_
+
+// 6
+
+_XXXXXX_
+XXXXXXXX
+XX______
+XX______
+XXXXXXX_
+XXXXXXX_
+XX____XX
+XX____XX
+XXXXXXXX
+_XXXXXX_
+
+// 7
+
+XXXXXXXX
+XXXXXXXX
+_____XXX
+____XXX_
+____XXX_
+___XXX__
+___XXX__
+__XXX___
+__XXX___
+_XXX____
+
+// 8
+
+_XXXXXX_
+XXXXXXXX
+XX____XX
+XX____XX
+_XXXXXX_
+_XXXXXX_
+XX____XX
+XX____XX
+XXXXXXXX
+_XXXXXX_
+
+// 9
+
+_XXXXXX_
+XXXXXXXX
+XX____XX
+XX____XX
+_XXXXXXX
+_XXXXXXX
+______XX
+______XX
+XXXXXXXX
+_XXXXXX_
+
+
+// :
+
+________
+________
+________
+________
+___XX___
+___XX___
+________
+___XX___
+___XX___
+________
+
+
+// ;
+
+________
+________
+________
+________
+___XX___
+___XX___
+________
+___XX___
+___XX___
+__XX____
+
+// <
+
+________
+________
+______XX
+____XX__
+__XX____
+XX______
+__XX____
+____XX__
+______XX
+________
+
+// =
+
+________
+________
+________
+________
+XXXXXXXX
+________
+XXXXXXXX
+________
+________
+________
+
+
+// >
+
+________
+________
+XX______
+__XX____
+____XX__
+______XX
+____XX__
+__XX____
+XX______
+________
+
+// ?
+
+
+_XXXXXX_
+XXXXXXXX
+XX____XX
+_X___XX_
+____XX__
+___XX___
+___XX___
+________
+___XX___
+___XX___
+
+// @
+
+_XXXXXX_
+XXXXXXXX
+XX____XX
+XX_XXXXX
+XX_X__XX
+XX_X__XX
+XX_XXXXX
+XX______
+XXXXXXXX
+_XXXXXXX
+
+
+// A
+
+XXXXXXXX
+XXXXXXXX
+XX____XX
+XX____XX
+XXXXXXXX
+XXXXXXXX
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+
+// B
+
+XXXXXXX_
+XXXXXXXX
+XX____XX
+XX____XX
+XXXXXXX_
+XXXXXXX_
+XX____XX
+XX____XX
+XXXXXXXX
+XXXXXXX_
+
+// C
+
+XXXXXXXX
+XXXXXXXX
+XX______
+XX______
+XX______
+XX______
+XX______
+XX______
+XXXXXXXX
+XXXXXXXX
+
+// D
+
+XXXXXX__
+XXXXXXX_
+XX___XXX
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+XX___XXX
+XXXXXXX_
+XXXXXX__
+
+// E
+
+XXXXXXXX
+XXXXXXXX
+XX______
+XX______
+XXXXXXX_
+XXXXXXX_
+XX______
+XX______
+XXXXXXXX
+XXXXXXXX
+
+// F
+
+XXXXXXXX
+XXXXXXXX
+XX______
+XX______
+XXXXXXX_
+XXXXXXX_
+XX______
+XX______
+XX______
+XX______
+
+// G
+
+XXXXXXXX
+XXXXXXXX
+XX______
+XX______
+XX__XXXX
+XX__XXXX
+XX____XX
+XX____XX
+XXXXXXXX
+XXXXXXXX
+
+// H
+
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+XXXXXXXX
+XXXXXXXX
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+
+// I
+
+_XXXXXX_
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+_XXXXXX_
+
+// J
+
+XXXXXXXX
+XXXXXXXX
+______XX
+______XX
+______XX
+______XX
+XX____XX
+XXX___XX
+_XXXXXXX
+__XXXXXX
+
+// K
+
+XX____XX
+XX__XXX_
+XX__XXX_
+XX_XXX__
+XXXX____
+XXXX____
+XX_XXX__
+XX__XXX_
+XX__XXX_
+XX____XX
+
+// L
+
+XX______
+XX______
+XX______
+XX______
+XX______
+XX______
+XX______
+XX______
+XXXXXXXX
+XXXXXXXX
+
+// M
+
+XX____XX
+XXX__XXX
+XXX_XXXX
+XXXXXXXX
+XXXXXXXX
+XX_XX_XX
+XX_XX_XX
+XX____XX
+XX____XX
+XX____XX
+
+// N
+
+XX____XX
+XXX___XX
+XXX___XX
+XXXX__XX
+XXXXX_XX
+XX_XXXXX
+XX__XXXX
+XX___XXX
+XX___XXX
+XX____XX
+
+// O
+
+_XXXXXX_
+XXXXXXXX
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+XXXXXXXX
+_XXXXXX_
+
+// P
+
+XXXXXXX_
+XXXXXXXX
+XX____XX
+XX____XX
+XXXXXXXX
+XXXXXXX_
+XX______
+XX______
+XX______
+XX______
+
+// Q
+
+_XXXXXX_
+XXXXXXXX
+XX____XX
+XX____XX
+XX____XX
+XX_XX_XX
+XX_XXXXX
+XX__XXXX
+XXXXXXXX
+_XXXXXXX
+
+// R
+
+XXXXXXX_
+XXXXXXXX
+XX____XX
+XX____XX
+XXXXXXXX
+XXXXXXX_
+XXXXX___
+XX_XXX__
+XX__XXX_
+XX___XXX
+
+// S
+
+_XXXXXX_
+XXXXXXXX
+XX____XX
+_XX___X_
+__XX____
+___XXX__
+_X__XXX_
+XX___XXX
+XXXXXXXX
+_XXXXXX_
+
+// T
+
+XXXXXXXX
+XXXXXXXX
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+
+// U
+
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+XXXXXXXX
+_XXXXXX_
+
+// V
+
+XX____XX
+XX____XX
+XX____XX
+_XX__XX_
+_XX__XX_
+_XX__XX_
+__XXXX__
+__XXXX__
+___XX___
+___XX___
+
+// W
+
+XX____XX
+XX____XX
+XX_XX_XX
+XX_XX_XX
+XXXXXXXX
+XXXXXXXX
+XXX__XXX
+XXX__XXX
+XX____XX
+XX____XX
+
+// x big
+
+XX____XX
+XX____XX
+_XX__XX_
+_XX__XX_
+__XXXX__
+__XXXX__
+_XX__XX_
+_XX__XX_
+XX____XX
+XX____XX
+
+// Y
+
+XX____XX
+XX____XX
+_XX__XX_
+_XX__XX_
+__XXXX__
+__XXXX__
+___XX___
+___XX___
+___XX___
+___XX___
+
+// Z
+
+XXXXXXXX
+XXXXXXXX
+_____XXX
+_____XXX
+____XXX_
+___XXX__
+_XXX____
+XXX_____
+XXXXXXXX
+XXXXXXXX
+
+// [
+
+XXXX____
+XXXX____
+XX______
+XX______
+XX______
+XX______
+XX______
+XX______
+XXXX____
+XXXX____
+// \
+
+XX______
+_XX_____
+__XX____
+__XX____
+___XX___
+___XX___
+____XX__
+____XX__
+_____XX_
+______XX
+
+// ]
+
+____XXXX
+____XXXX
+______XX
+______XX
+______XX
+______XX
+______XX
+______XX
+____XXXX
+____XXXX
+// ^
+
+___XX___
+__XXXX__
+_XX__XX_
+XX____XX
+________
+________
+________
+________
+________
+________
+
+// underscore
+
+________
+________
+________
+________
+________
+________
+________
+________
+XXXXXXXX
+XXXXXXXX
+
+// `
+
+__XX____
+___XX___
+____XX__
+________
+________
+________
+________
+________
+________
+________
+
+// a
+________
+________
+_XXXXXX_
+XXXXXXXX
+______XX
+_XXXXXXX
+XXXXXXXX
+XX____XX
+XXXXXXXX
+_XXXX_XX
+
+// b
+
+XX______
+XX______
+XX______
+XX______
+XXXXXXX_
+XXXXXXX_
+XX____XX
+XX____XX
+XXXXXXX_
+XXXXXXX_
+
+// c
+
+________
+________
+________
+_XXXXXX_
+XXXXXXXX
+XX______
+XX______
+XX______
+XXXXXXXX
+_XXXXXX_
+
+// d
+
+______XX
+______XX
+______XX
+______XX
+_XXXXXXX
+_XXXXXXX
+XX____XX
+XX____XX
+_XXXXXXX
+_XXXXXXX
+
+// e
+
+________
+________
+_XXXXXX_
+XXXXXXXX
+XX_____X
+XXXXXXX_
+XX______
+XX______
+XXXXXXXX
+_XXXXXX_
+
+// f
+
+_XXXXXX_
+XXXXXXXX
+XX______
+XX______
+XXXXXXX_
+XXXXXXX_
+XX______
+XX______
+XX______
+XX______
+
+// g
+
+________
+________
+_XXXXXXX
+_XXXXXXX
+XX____XX
+XX____XX
+_XXXXXXX
+______XX
+XX____XX
+_XXXXXXX
+
+// h
+
+XX______
+XX______
+XX______
+XX______
+XXXXXXX_
+XXXXXXXX
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+
+
+// i
+
+________
+________
+________
+___XX___
+________
+___XX___
+___XX___
+___XX___
+___XX___
+__XXXX__
+
+
+// j
+
+________
+________
+____XX__
+________
+____XX__
+____XX__
+____XX__
+_XX_XX__
+_XX_XX__
+__XXX___
+
+// k
+
+
+XX______
+XX______
+XX______
+XX______
+XX____XX
+XX__XXX_
+XXXXXX__
+XX_XXX__
+XX__XXX_
+XX___XXX
+
+// l
+
+
+_XXXX___
+_XXXX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+_XXXXXX_
+
+
+// m
+________
+________
+________
+XX______
+XXXX_XX_
+XXXXXXXX
+XX_XX_XX
+XX_XX_XX
+XX_XX_XX
+XX_XX_XX
+
+// n
+________
+________
+________
+XX______
+XXXXXXX_
+XXXXXXXX
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+
+// o
+________
+________
+________
+_XXXXXX_
+XXXXXXXX
+XX____XX
+XX____XX
+XX____XX
+XXXXXXXX
+_XXXXXX_
+
+// p
+________
+________
+_XXXXXX_
+XXXXXXXX
+XX____XX
+XX____XX
+XXXXXXX_
+XX______
+XX______
+XX______
+
+// q
+
+________
+________
+_XXXXXX_
+XXXXXXXX
+XX____XX
+XX____XX
+_XXXXXXX
+______XX
+______XX
+______XX
+
+// r
+________
+________
+________
+XX__XX__
+XX_XXXX_
+XXXX__XX
+XX______
+XX______
+XX______
+XX______
+
+// s
+
+________
+________
+________
+_XXXXXX_
+XX____XX
+_XX_____
+__XXXX__
+_____XX_
+XX____XX
+_XXXXXX_
+
+// t
+
+__XX____
+__XX____
+XXXXXX__
+XXXXXX__
+__XX____
+__XX____
+__XX____
+__XX__X_
+__XX_XX_
+___XXX__
+
+// u
+________
+________
+________
+________
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+XX____XX
+_XXXXXX_
+
+// v
+________
+________
+________
+________
+XX____XX
+XX____XX
+_XX__XX_
+_XX__XX_
+__XXXX__
+___XX___
+
+// w
+________
+________
+________
+________
+XX_XX_XX
+XX_XX_XX
+XX_XX_XX
+XX_XX_XX
+XXXXXXXX
+_XX__XX_
+
+
+// x
+
+________
+________
+________
+XX____XX
+_XX__XX_
+_XX__XX_
+__XXXX__
+_XX__XX_
+_XX__XX_
+XX____XX
+
+
+// y
+
+________
+________
+________
+XX____XX
+_XX__XX_
+_XX__XX_
+__XXXX__
+___XX___
+__XX____
+_XX_____
+
+
+// z
+________
+________
+________
+________
+XXXXXXXX
+_____XX_
+____XX__
+__XXX___
+_XX_____
+XXXXXXXX
+
+// {
+
+____XX__
+___X____
+__X_____
+__X_____
+XX______
+XX______
+__X_____
+__X_____
+___X____
+____XX__
+
+// |
+
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+___XX___
+
+// }
+
+__XX____
+____X___
+_____X__
+_____X__
+______XX
+______XX
+_____X__
+_____X__
+____X___
+__XX____
+
+// ~
+
+________
+________
+________
+_XX_____
+X__XX__X
+_____XX_
+________
+________
+________
+________
diff --git a/userspace/fonts/envypn7x13.bdf b/userspace/fonts/envypn7x13.bdf
new file mode 100644
index 0000000..3c83dab
--- /dev/null
+++ b/userspace/fonts/envypn7x13.bdf
@@ -0,0 +1,4295 @@
+STARTFONT 2.1
+FONT -ypn-envypn-Medium-R-Normal--13-130-75-75-C-90-ISO8859-1
+SIZE 13 75 75
+FONTBOUNDINGBOX 7 13 0 -2
+
+STARTPROPERTIES 21
+FOUNDRY "ypn"
+FAMILY_NAME "envypn"
+WEIGHT_NAME "Medium"
+SLANT "R"
+SETWIDTH_NAME "Normal"
+SPACING "C"
+CHARSET_REGISTRY "ISO8859"
+CHARSET_ENCODING "1"
+COPYRIGHT "Designed by Ypnose - http://ywstd.fr - Special thanks to mirabilos"
+AVERAGE_WIDTH 90
+PIXEL_SIZE 13
+POINT_SIZE 130
+RESOLUTION_X 75
+RESOLUTION_Y 75
+WEIGHT 10
+X_HEIGHT 11
+QUAD_WIDTH 7
+_GBDFED_INFO "Edited with gbdfed 1.6."
+DEFAULT_CHAR 0
+FONT_DESCENT 2
+FONT_ASCENT 11
+ENDPROPERTIES
+
+CHARS 203
+
+STARTCHAR space
+ENCODING 32
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR exclamation
+ENCODING 33
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+10
+10
+10
+10
+10
+00
+10
+10
+00
+00
+ENDCHAR
+
+STARTCHAR dblquote
+ENCODING 34
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+48
+48
+48
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR nmbrsign
+ENCODING 35
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+28
+28
+7C
+28
+7C
+28
+28
+00
+00
+ENDCHAR
+
+STARTCHAR dollar
+ENCODING 36
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+10
+3C
+50
+50
+38
+14
+14
+78
+10
+00
+ENDCHAR
+
+STARTCHAR percent
+ENCODING 37
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+64
+64
+08
+10
+20
+4C
+4C
+00
+00
+ENDCHAR
+
+STARTCHAR ampersand
+ENCODING 38
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+30
+48
+48
+20
+14
+48
+48
+34
+00
+00
+ENDCHAR
+
+STARTCHAR sglquote
+ENCODING 39
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+10
+10
+10
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR leftparent
+ENCODING 40
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+08
+10
+20
+20
+20
+20
+20
+20
+10
+08
+00
+ENDCHAR
+
+STARTCHAR rightparent
+ENCODING 41
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+20
+10
+08
+08
+08
+08
+08
+08
+10
+20
+00
+ENDCHAR
+
+STARTCHAR asterisk
+ENCODING 42
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+10
+54
+38
+38
+54
+10
+00
+00
+00
+ENDCHAR
+
+STARTCHAR plus
+ENCODING 43
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+10
+10
+7C
+10
+10
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR comma
+ENCODING 44
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+18
+30
+20
+ENDCHAR
+
+STARTCHAR dash
+ENCODING 45
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+7C
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR dot
+ENCODING 46
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+18
+18
+00
+00
+ENDCHAR
+
+STARTCHAR slashforw
+ENCODING 47
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+08
+08
+10
+10
+20
+20
+40
+40
+00
+00
+ENDCHAR
+
+STARTCHAR zero
+ENCODING 48
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+44
+4C
+54
+64
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR onehehe
+ENCODING 49
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+10
+30
+50
+10
+10
+10
+10
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR two
+ENCODING 50
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+44
+44
+08
+10
+20
+40
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR three
+ENCODING 51
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+78
+04
+04
+78
+04
+04
+04
+78
+00
+00
+ENDCHAR
+
+STARTCHAR four
+ENCODING 52
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+44
+44
+44
+44
+3C
+04
+04
+04
+00
+00
+ENDCHAR
+
+STARTCHAR five
+ENCODING 53
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+7C
+40
+40
+78
+04
+04
+04
+78
+00
+00
+ENDCHAR
+
+STARTCHAR six
+ENCODING 54
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+40
+40
+58
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR seven
+ENCODING 55
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+7C
+04
+04
+08
+10
+10
+10
+10
+00
+00
+ENDCHAR
+
+STARTCHAR eight
+ENCODING 56
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+44
+44
+38
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR nine
+ENCODING 57
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+3C
+44
+44
+44
+3C
+04
+04
+78
+00
+00
+ENDCHAR
+
+STARTCHAR colon
+ENCODING 58
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+18
+18
+00
+00
+18
+18
+00
+00
+ENDCHAR
+
+STARTCHAR semicolon
+ENCODING 59
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+18
+18
+00
+00
+18
+30
+20
+00
+ENDCHAR
+
+STARTCHAR lessthan
+ENCODING 60
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+0C
+18
+30
+60
+30
+18
+0C
+00
+00
+ENDCHAR
+
+STARTCHAR equalsign
+ENCODING 61
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+7C
+00
+00
+7C
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR greathan
+ENCODING 62
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+60
+30
+18
+0C
+18
+30
+60
+00
+00
+ENDCHAR
+
+STARTCHAR question
+ENCODING 63
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+44
+44
+08
+10
+10
+00
+10
+00
+00
+ENDCHAR
+
+STARTCHAR at
+ENCODING 64
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+38
+44
+5C
+54
+54
+5C
+40
+3C
+00
+ENDCHAR
+
+STARTCHAR A
+ENCODING 65
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+44
+44
+44
+7C
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR B
+ENCODING 66
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+78
+44
+44
+78
+44
+44
+44
+78
+00
+00
+ENDCHAR
+
+STARTCHAR C
+ENCODING 67
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+44
+40
+40
+40
+40
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR D
+ENCODING 68
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+78
+44
+44
+44
+44
+44
+44
+78
+00
+00
+ENDCHAR
+
+STARTCHAR E
+ENCODING 69
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+7C
+40
+40
+78
+40
+40
+40
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR F
+ENCODING 70
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+7C
+40
+40
+78
+40
+40
+40
+40
+00
+00
+ENDCHAR
+
+STARTCHAR G
+ENCODING 71
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+44
+40
+40
+4C
+44
+4C
+34
+00
+00
+ENDCHAR
+
+STARTCHAR H
+ENCODING 72
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+44
+44
+44
+7C
+44
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR I
+ENCODING 73
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+7C
+10
+10
+10
+10
+10
+10
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR J
+ENCODING 74
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+1C
+24
+04
+04
+04
+04
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR K
+ENCODING 75
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+44
+48
+50
+60
+60
+50
+48
+44
+00
+00
+ENDCHAR
+
+STARTCHAR L
+ENCODING 76
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+40
+40
+40
+40
+40
+40
+40
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR M
+ENCODING 77
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+44
+6C
+7C
+54
+54
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR N
+ENCODING 78
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+44
+64
+54
+4C
+44
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR O
+ENCODING 79
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+44
+44
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR P
+ENCODING 80
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+78
+44
+44
+44
+78
+40
+40
+40
+00
+00
+ENDCHAR
+
+STARTCHAR Q
+ENCODING 81
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+44
+44
+44
+44
+54
+4C
+38
+08
+08
+ENDCHAR
+
+STARTCHAR R
+ENCODING 82
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+78
+44
+44
+44
+78
+50
+48
+44
+00
+00
+ENDCHAR
+
+STARTCHAR S
+ENCODING 83
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+3C
+40
+40
+38
+04
+04
+04
+78
+00
+00
+ENDCHAR
+
+STARTCHAR T
+ENCODING 84
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+7C
+10
+10
+10
+10
+10
+10
+10
+00
+00
+ENDCHAR
+
+STARTCHAR U
+ENCODING 85
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+44
+44
+44
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR V
+ENCODING 86
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+44
+44
+44
+44
+44
+44
+28
+10
+00
+00
+ENDCHAR
+
+STARTCHAR W
+ENCODING 87
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+44
+44
+44
+54
+54
+7C
+6C
+44
+00
+00
+ENDCHAR
+
+STARTCHAR X
+ENCODING 88
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+44
+44
+28
+10
+28
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR Y
+ENCODING 89
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+44
+44
+44
+28
+10
+10
+10
+10
+00
+00
+ENDCHAR
+
+STARTCHAR Z
+ENCODING 90
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+7C
+04
+08
+10
+20
+40
+40
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR leftbrack
+ENCODING 91
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+38
+20
+20
+20
+20
+20
+20
+20
+20
+38
+00
+ENDCHAR
+
+STARTCHAR backslash
+ENCODING 92
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+20
+20
+10
+10
+08
+08
+04
+04
+00
+00
+ENDCHAR
+
+STARTCHAR rightbrack
+ENCODING 93
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+38
+08
+08
+08
+08
+08
+08
+08
+08
+38
+00
+ENDCHAR
+
+STARTCHAR cirumflex
+ENCODING 94
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+10
+38
+6C
+44
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR underscore
+ENCODING 95
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+7C
+00
+ENDCHAR
+
+STARTCHAR grave
+ENCODING 96
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+10
+18
+08
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR a
+ENCODING 97
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+3C
+44
+44
+44
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR b
+ENCODING 98
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+40
+40
+78
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR c
+ENCODING 99
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+38
+44
+40
+40
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR d
+ENCODING 100
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+04
+04
+3C
+44
+44
+44
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR e
+ENCODING 101
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+38
+44
+44
+78
+40
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR f
+ENCODING 102
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+1C
+20
+20
+78
+20
+20
+20
+20
+00
+00
+ENDCHAR
+
+STARTCHAR g
+ENCODING 103
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+3C
+44
+44
+44
+44
+3C
+04
+78
+ENDCHAR
+
+STARTCHAR h
+ENCODING 104
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+40
+40
+78
+44
+44
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR i
+ENCODING 105
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+10
+00
+70
+10
+10
+10
+10
+1C
+00
+00
+ENDCHAR
+
+STARTCHAR j
+ENCODING 106
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+04
+00
+1C
+04
+04
+04
+04
+04
+04
+78
+ENDCHAR
+
+STARTCHAR k
+ENCODING 107
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+40
+40
+4C
+50
+60
+60
+50
+4C
+00
+00
+ENDCHAR
+
+STARTCHAR l
+ENCODING 108
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+70
+10
+10
+10
+10
+10
+10
+1C
+00
+00
+ENDCHAR
+
+STARTCHAR m
+ENCODING 109
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+38
+54
+54
+54
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR n
+ENCODING 110
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+38
+44
+44
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR o
+ENCODING 111
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+38
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR p
+ENCODING 112
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+38
+44
+44
+44
+44
+78
+40
+40
+ENDCHAR
+
+STARTCHAR q
+ENCODING 113
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+38
+44
+44
+44
+44
+3C
+04
+04
+ENDCHAR
+
+STARTCHAR r
+ENCODING 114
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+5C
+60
+40
+40
+40
+40
+00
+00
+ENDCHAR
+
+STARTCHAR s
+ENCODING 115
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+3C
+40
+38
+04
+04
+78
+00
+00
+ENDCHAR
+
+STARTCHAR t
+ENCODING 116
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+20
+20
+78
+20
+20
+20
+20
+1C
+00
+00
+ENDCHAR
+
+STARTCHAR u
+ENCODING 117
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+44
+44
+44
+44
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR v
+ENCODING 118
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+44
+44
+44
+44
+28
+10
+00
+00
+ENDCHAR
+
+STARTCHAR w
+ENCODING 119
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+44
+44
+54
+54
+54
+38
+00
+00
+ENDCHAR
+
+STARTCHAR x
+ENCODING 120
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+44
+28
+10
+28
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR y
+ENCODING 121
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+44
+44
+44
+44
+44
+3C
+04
+78
+ENDCHAR
+
+STARTCHAR z
+ENCODING 122
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+7C
+04
+18
+20
+40
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR leftbrace
+ENCODING 123
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+0C
+10
+10
+10
+60
+10
+10
+10
+10
+0C
+00
+ENDCHAR
+
+STARTCHAR vertbar
+ENCODING 124
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+10
+10
+10
+10
+10
+10
+10
+10
+10
+10
+00
+ENDCHAR
+
+STARTCHAR rightbrace
+ENCODING 125
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+60
+10
+10
+10
+0C
+10
+10
+10
+10
+60
+00
+ENDCHAR
+
+STARTCHAR tilde
+ENCODING 126
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+24
+54
+48
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR capitalOE
+ENCODING 140
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+3E
+48
+48
+48
+4E
+48
+48
+3E
+00
+00
+ENDCHAR
+
+STARTCHAR smalloe
+ENCODING 156
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+3E
+48
+4E
+48
+48
+3E
+00
+00
+ENDCHAR
+
+STARTCHAR nonbreak
+ENCODING 160
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR invexcla
+ENCODING 161
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+10
+00
+10
+10
+10
+10
+10
+10
+00
+00
+ENDCHAR
+
+STARTCHAR centsign
+ENCODING 162
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+10
+38
+54
+50
+50
+54
+38
+10
+00
+ENDCHAR
+
+STARTCHAR pound
+ENCODING 163
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+0C
+10
+10
+10
+3C
+10
+10
+38
+44
+00
+00
+ENDCHAR
+
+STARTCHAR currency
+ENCODING 164
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+44
+38
+44
+44
+44
+38
+44
+00
+00
+ENDCHAR
+
+STARTCHAR yensign
+ENCODING 165
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+44
+44
+28
+10
+7C
+10
+7C
+10
+00
+00
+ENDCHAR
+
+STARTCHAR brokenbar
+ENCODING 166
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+18
+18
+18
+00
+00
+18
+18
+18
+18
+00
+00
+ENDCHAR
+
+STARTCHAR section
+ENCODING 167
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+3C
+40
+50
+28
+28
+14
+04
+78
+00
+00
+ENDCHAR
+
+STARTCHAR umlaut
+ENCODING 168
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+48
+48
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR copyright
+ENCODING 169
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+44
+7C
+64
+64
+7C
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR femindic
+ENCODING 170
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+1C
+04
+1C
+14
+1C
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR leftdlquote
+ENCODING 171
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+14
+28
+50
+A0
+50
+28
+14
+00
+00
+ENDCHAR
+
+STARTCHAR nological
+ENCODING 172
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+00
+7C
+04
+04
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR hyphen
+ENCODING 173
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+00
+38
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR trademark
+ENCODING 174
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+38
+44
+7C
+64
+64
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR macron
+ENCODING 175
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+7C
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR degree
+ENCODING 176
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+1C
+14
+14
+1C
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR plusmin
+ENCODING 177
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+10
+10
+7C
+10
+10
+7C
+00
+00
+00
+ENDCHAR
+
+STARTCHAR supertwo
+ENCODING 178
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+18
+24
+24
+08
+10
+3C
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR superthree
+ENCODING 179
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+18
+04
+18
+04
+04
+18
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR acuteacc
+ENCODING 180
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+08
+18
+10
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR micro
+ENCODING 181
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+44
+44
+44
+44
+7C
+40
+40
+40
+ENDCHAR
+
+STARTCHAR paragraph
+ENCODING 182
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+74
+54
+54
+74
+14
+14
+00
+00
+ENDCHAR
+
+STARTCHAR middot
+ENCODING 183
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+30
+30
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR cedilla
+ENCODING 184
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+08
+18
+10
+00
+ENDCHAR
+
+STARTCHAR superone
+ENCODING 185
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+08
+18
+28
+08
+08
+1C
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR mascuind
+ENCODING 186
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+1C
+14
+14
+1C
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+
+STARTCHAR rigdlquote
+ENCODING 187
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+50
+28
+14
+0A
+14
+28
+50
+00
+00
+ENDCHAR
+
+STARTCHAR fractone
+ENCODING 188
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+10
+30
+10
+38
+00
+7C
+00
+28
+28
+18
+08
+00
+ENDCHAR
+
+STARTCHAR fractwo
+ENCODING 189
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+10
+30
+10
+38
+00
+7C
+00
+30
+48
+10
+38
+00
+ENDCHAR
+
+STARTCHAR fracthree
+ENCODING 190
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+10
+30
+10
+38
+00
+7C
+00
+28
+28
+18
+08
+00
+ENDCHAR
+
+STARTCHAR invquestion
+ENCODING 191
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+10
+00
+10
+10
+08
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR Agrave
+ENCODING 192
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+20
+10
+00
+38
+44
+44
+44
+7C
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR Acute
+ENCODING 193
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+08
+10
+00
+38
+44
+44
+44
+7C
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR Acircum
+ENCODING 194
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+10
+28
+00
+38
+44
+44
+44
+7C
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR Atilde
+ENCODING 195
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+14
+28
+00
+38
+44
+44
+44
+7C
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR Adiaeresis
+ENCODING 196
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+28
+00
+38
+44
+44
+44
+7C
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR Aring
+ENCODING 197
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+10
+28
+10
+38
+44
+44
+44
+7C
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR AEligature
+ENCODING 198
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+3E
+48
+48
+48
+7E
+48
+48
+4E
+00
+00
+ENDCHAR
+
+STARTCHAR Cedilla
+ENCODING 199
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+44
+40
+40
+40
+40
+44
+38
+10
+30
+ENDCHAR
+
+STARTCHAR Egrave
+ENCODING 200
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+20
+10
+00
+7C
+40
+40
+78
+40
+40
+40
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR Eacute
+ENCODING 201
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+08
+10
+00
+7C
+40
+40
+78
+40
+40
+40
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR Ecircum
+ENCODING 202
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+10
+28
+00
+7C
+40
+40
+78
+40
+40
+40
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR Ediaeresis
+ENCODING 203
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+28
+00
+7C
+40
+40
+78
+40
+40
+40
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR Igrave
+ENCODING 204
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+20
+10
+00
+7C
+10
+10
+10
+10
+10
+10
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR Iacute
+ENCODING 205
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+08
+10
+00
+7C
+10
+10
+10
+10
+10
+10
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR Icircum
+ENCODING 206
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+10
+28
+00
+7C
+10
+10
+10
+10
+10
+10
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR Idiaeresis
+ENCODING 207
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+28
+00
+7C
+10
+10
+10
+10
+10
+10
+7C
+00
+00
+ENDCHAR
+
+STARTCHAR ETH
+ENCODING 208
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+78
+44
+44
+44
+F4
+44
+44
+78
+00
+00
+ENDCHAR
+
+STARTCHAR Ntilde
+ENCODING 209
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+14
+28
+00
+44
+64
+54
+4C
+44
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR Ograve
+ENCODING 210
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+20
+10
+00
+38
+44
+44
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR Oacute
+ENCODING 211
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+08
+10
+00
+38
+44
+44
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR Ocircum
+ENCODING 212
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+10
+28
+00
+38
+44
+44
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR Otilde
+ENCODING 213
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+14
+28
+00
+38
+44
+44
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR Odiaeresis
+ENCODING 214
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+28
+00
+38
+44
+44
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR multipli
+ENCODING 215
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+44
+28
+10
+28
+44
+00
+00
+00
+ENDCHAR
+
+STARTCHAR Oslash
+ENCODING 216
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+46
+4C
+54
+64
+44
+C4
+38
+00
+00
+ENDCHAR
+
+STARTCHAR Ugrave
+ENCODING 217
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+20
+10
+00
+44
+44
+44
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR Uacute
+ENCODING 218
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+08
+10
+00
+44
+44
+44
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR Ucircum
+ENCODING 219
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+10
+28
+00
+44
+44
+44
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR Udiaeresis
+ENCODING 220
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+28
+00
+44
+44
+44
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR Yacute
+ENCODING 221
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+08
+10
+00
+44
+44
+44
+28
+10
+10
+10
+10
+00
+00
+ENDCHAR
+
+STARTCHAR THORN
+ENCODING 222
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+60
+2C
+32
+22
+22
+32
+2C
+60
+00
+00
+ENDCHAR
+
+STARTCHAR smallsharp
+ENCODING 223
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+44
+44
+58
+44
+44
+54
+48
+00
+00
+ENDCHAR
+
+STARTCHAR agrave
+ENCODING 224
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+20
+10
+00
+3C
+44
+44
+44
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR acute
+ENCODING 225
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+08
+10
+00
+3C
+44
+44
+44
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR acircum
+ENCODING 226
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+10
+28
+00
+3C
+44
+44
+44
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR atilde
+ENCODING 227
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+14
+28
+00
+3C
+44
+44
+44
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR adiaeresis
+ENCODING 228
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+28
+00
+3C
+44
+44
+44
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR aring
+ENCODING 229
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+10
+28
+10
+3C
+44
+44
+44
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR aeligature
+ENCODING 230
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+3E
+08
+7E
+48
+48
+3E
+00
+00
+ENDCHAR
+
+STARTCHAR ccedilla
+ENCODING 231
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+38
+44
+40
+40
+44
+38
+10
+30
+ENDCHAR
+
+STARTCHAR egrave
+ENCODING 232
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+20
+10
+00
+38
+44
+44
+78
+40
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR eacute
+ENCODING 233
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+08
+10
+00
+38
+44
+44
+78
+40
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR ecircum
+ENCODING 234
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+10
+28
+00
+38
+44
+44
+78
+40
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR ediaeresis
+ENCODING 235
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+28
+00
+38
+44
+44
+78
+40
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR igrave
+ENCODING 236
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+20
+10
+00
+70
+10
+10
+10
+10
+1C
+00
+00
+ENDCHAR
+
+STARTCHAR iacute
+ENCODING 237
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+08
+10
+00
+70
+10
+10
+10
+10
+1C
+00
+00
+ENDCHAR
+
+STARTCHAR icircum
+ENCODING 238
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+10
+28
+00
+70
+10
+10
+10
+10
+1C
+00
+00
+ENDCHAR
+
+STARTCHAR idiaeresis
+ENCODING 239
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+28
+00
+70
+10
+10
+10
+10
+1C
+00
+00
+ENDCHAR
+
+STARTCHAR eth
+ENCODING 240
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+10
+08
+30
+00
+38
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR ntilde
+ENCODING 241
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+14
+28
+00
+78
+44
+44
+44
+44
+44
+00
+00
+ENDCHAR
+
+STARTCHAR ograve
+ENCODING 242
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+20
+10
+00
+38
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR oacute
+ENCODING 243
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+08
+10
+00
+38
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR ocircum
+ENCODING 244
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+10
+28
+00
+38
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR otilde
+ENCODING 245
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+14
+28
+00
+38
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR odiaeresis
+ENCODING 246
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+28
+00
+38
+44
+44
+44
+44
+38
+00
+00
+ENDCHAR
+
+STARTCHAR division
+ENCODING 247
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+10
+10
+00
+7C
+00
+10
+10
+00
+00
+ENDCHAR
+
+STARTCHAR oslash
+ENCODING 248
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+00
+00
+3A
+4C
+54
+64
+44
+B8
+00
+00
+ENDCHAR
+
+STARTCHAR ugrave
+ENCODING 249
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+20
+10
+00
+44
+44
+44
+44
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR uacute
+ENCODING 250
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+08
+10
+00
+44
+44
+44
+44
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR ucircum
+ENCODING 251
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+10
+28
+00
+44
+44
+44
+44
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR udiaeresis
+ENCODING 252
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+28
+00
+44
+44
+44
+44
+44
+3C
+00
+00
+ENDCHAR
+
+STARTCHAR yacute
+ENCODING 253
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+08
+10
+00
+44
+44
+44
+44
+44
+3C
+04
+78
+ENDCHAR
+
+STARTCHAR thorn
+ENCODING 254
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+60
+20
+2C
+32
+22
+22
+32
+2C
+20
+60
+00
+ENDCHAR
+
+STARTCHAR ydiaeresis
+ENCODING 255
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+28
+00
+44
+44
+44
+44
+44
+3C
+04
+78
+ENDCHAR
+
+STARTCHAR char9679
+ENCODING 9679
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+7C
+FE
+FE
+FE
+7C
+38
+00
+00
+00
+ENDCHAR
+
+STARTCHAR char10008
+ENCODING 10008
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+C6
+EE
+7C
+38
+7C
+EE
+C6
+00
+00
+00
+ENDCHAR
+
+STARTCHAR char10010
+ENCODING 10010
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+00
+38
+38
+FE
+FE
+FE
+38
+38
+00
+00
+00
+ENDCHAR
+
+STARTCHAR versioncontrolbranch
+ENCODING 57504
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+C0
+CC
+DE
+CC
+CC
+9C
+38
+70
+E0
+C0
+C0
+00
+ENDCHAR
+
+STARTCHAR lnsymbol
+ENCODING 57505
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+40
+40
+40
+40
+7C
+00
+22
+32
+2A
+26
+22
+00
+ENDCHAR
+
+STARTCHAR closedpadlock
+ENCODING 57506
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+00
+00
+7C
+44
+44
+FE
+EE
+C6
+EE
+EE
+FE
+00
+00
+ENDCHAR
+
+STARTCHAR rightwardsblackarrowhead
+ENCODING 57520
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+80
+C0
+E0
+F0
+F8
+FC
+FE
+FC
+F8
+F0
+E0
+C0
+80
+ENDCHAR
+
+STARTCHAR rightwardsarrowhead
+ENCODING 57521
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+80
+C0
+60
+30
+18
+0C
+06
+0C
+18
+30
+60
+C0
+80
+ENDCHAR
+
+STARTCHAR leftwardsblackarrowhead
+ENCODING 57522
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+02
+06
+0E
+1E
+3E
+7E
+FE
+7E
+3E
+1E
+0E
+06
+02
+ENDCHAR
+
+STARTCHAR leftwardsarrowhead
+ENCODING 57523
+SWIDTH 516 0
+DWIDTH 7 0
+BBX 7 13 0 -2
+BITMAP
+02
+06
+0C
+18
+30
+60
+C0
+60
+30
+18
+0C
+06
+02
+ENDCHAR
+
+ENDFONT
diff --git a/userspace/fonts/envypn7x13.src b/userspace/fonts/envypn7x13.src
new file mode 100644
index 0000000..32ecdaf
--- /dev/null
+++ b/userspace/fonts/envypn7x13.src
@@ -0,0 +1,2844 @@
+7
+13
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+__X____
+__X____
+__X____
+__X____
+__X____
+_______
+__X____
+__X____
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X__X___
+X__X___
+X__X___
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_X_X___
+_X_X___
+XXXXX__
+_X_X___
+XXXXX__
+_X_X___
+_X_X___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+__X____
+_XXXX__
+X_X____
+X_X____
+_XXX___
+__X_X__
+__X_X__
+XXXX___
+__X____
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+XX__X__
+XX__X__
+___X___
+__X____
+_X_____
+X__XX__
+X__XX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XX____
+X__X___
+X__X___
+_X_____
+__X_X__
+X__X___
+X__X___
+_XX_X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+__X____
+__X____
+__X____
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+___X___
+__X____
+_X_____
+_X_____
+_X_____
+_X_____
+_X_____
+_X_____
+__X____
+___X___
+_______
+//reading bitmap
+_______
+_______
+_X_____
+__X____
+___X___
+___X___
+___X___
+___X___
+___X___
+___X___
+__X____
+_X_____
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+__X____
+X_X_X__
+_XXX___
+_XXX___
+X_X_X__
+__X____
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+__X____
+__X____
+XXXXX__
+__X____
+__X____
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+__XX___
+_XX____
+_X_____
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+XXXXX__
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+__XX___
+__XX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+___X___
+___X___
+__X____
+__X____
+_X_____
+_X_____
+X______
+X______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X___X__
+X__XX__
+X_X_X__
+XX__X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+__X____
+_XX____
+X_X____
+__X____
+__X____
+__X____
+__X____
+XXXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X___X__
+X___X__
+___X___
+__X____
+_X_____
+X______
+XXXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXXX___
+____X__
+____X__
+XXXX___
+____X__
+____X__
+____X__
+XXXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+____X__
+____X__
+____X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXXXX__
+X______
+X______
+XXXX___
+____X__
+____X__
+____X__
+XXXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X______
+X______
+X_XX___
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXXXX__
+____X__
+____X__
+___X___
+__X____
+__X____
+__X____
+__X____
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X___X__
+X___X__
+_XXX___
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXXX__
+X___X__
+X___X__
+X___X__
+_XXXX__
+____X__
+____X__
+XXXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+__XX___
+__XX___
+_______
+_______
+__XX___
+__XX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+__XX___
+__XX___
+_______
+_______
+__XX___
+_XX____
+_X_____
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+___XX__
+__XX___
+_XX____
+XX_____
+_XX____
+__XX___
+___XX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+XXXXX__
+_______
+_______
+XXXXX__
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+XX_____
+_XX____
+__XX___
+___XX__
+__XX___
+_XX____
+XX_____
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X___X__
+X___X__
+___X___
+__X____
+__X____
+_______
+__X____
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_XXX___
+X___X__
+X_XXX__
+X_X_X__
+X_X_X__
+X_XXX__
+X______
+_XXXX__
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+XXXXX__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXXX___
+X___X__
+X___X__
+XXXX___
+X___X__
+X___X__
+X___X__
+XXXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X___X__
+X______
+X______
+X______
+X______
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXXX___
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+XXXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXXXX__
+X______
+X______
+XXXX___
+X______
+X______
+X______
+XXXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXXXX__
+X______
+X______
+XXXX___
+X______
+X______
+X______
+X______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X___X__
+X______
+X______
+X__XX__
+X___X__
+X__XX__
+_XX_X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X___X__
+X___X__
+X___X__
+XXXXX__
+X___X__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXXXX__
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+XXXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+__XXX__
+_X__X__
+____X__
+____X__
+____X__
+____X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X___X__
+X__X___
+X_X____
+XX_____
+XX_____
+X_X____
+X__X___
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X______
+X______
+X______
+X______
+X______
+X______
+X______
+XXXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X___X__
+XX_XX__
+XXXXX__
+X_X_X__
+X_X_X__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X___X__
+XX__X__
+X_X_X__
+X__XX__
+X___X__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXXX___
+X___X__
+X___X__
+X___X__
+XXXX___
+X______
+X______
+X______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+X_X_X__
+X__XX__
+_XXX___
+___X___
+___X___
+//reading bitmap
+_______
+_______
+_______
+XXXX___
+X___X__
+X___X__
+X___X__
+XXXX___
+X_X____
+X__X___
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXXX__
+X______
+X______
+_XXX___
+____X__
+____X__
+____X__
+XXXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXXXX__
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_X_X___
+__X____
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X___X__
+X___X__
+X___X__
+X_X_X__
+X_X_X__
+XXXXX__
+XX_XX__
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X___X__
+X___X__
+_X_X___
+__X____
+_X_X___
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X___X__
+X___X__
+X___X__
+_X_X___
+__X____
+__X____
+__X____
+__X____
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXXXX__
+____X__
+___X___
+__X____
+_X_____
+X______
+X______
+XXXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_XXX___
+_X_____
+_X_____
+_X_____
+_X_____
+_X_____
+_X_____
+_X_____
+_X_____
+_XXX___
+_______
+//reading bitmap
+_______
+_______
+_______
+_X_____
+_X_____
+__X____
+__X____
+___X___
+___X___
+____X__
+____X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_XXX___
+___X___
+___X___
+___X___
+___X___
+___X___
+___X___
+___X___
+___X___
+_XXX___
+_______
+//reading bitmap
+_______
+_______
+_______
+__X____
+_XXX___
+XX_XX__
+X___X__
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+XXXXX__
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+__X____
+__XX___
+___X___
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXXX__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X______
+X______
+XXXX___
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXX___
+X___X__
+X______
+X______
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+____X__
+____X__
+_XXXX__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXX___
+X___X__
+X___X__
+XXXX___
+X______
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+__XXX__
+_X_____
+_X_____
+XXXX___
+_X_____
+_X_____
+_X_____
+_X_____
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXXX__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+____X__
+XXXX___
+//reading bitmap
+_______
+_______
+_______
+X______
+X______
+XXXX___
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+__X____
+_______
+XXX____
+__X____
+__X____
+__X____
+__X____
+__XXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+____X__
+_______
+__XXX__
+____X__
+____X__
+____X__
+____X__
+____X__
+____X__
+XXXX___
+//reading bitmap
+_______
+_______
+_______
+X______
+X______
+X__XX__
+X_X____
+XX_____
+XX_____
+X_X____
+X__XX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXX____
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+__XXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXX___
+X_X_X__
+X_X_X__
+X_X_X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+XXXX___
+X______
+X______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+____X__
+____X__
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+X_XXX__
+XX_____
+X______
+X______
+X______
+X______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXXX__
+X______
+_XXX___
+____X__
+____X__
+XXXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_X_____
+_X_____
+XXXX___
+_X_____
+_X_____
+_X_____
+_X_____
+__XXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+_X_X___
+__X____
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+X___X__
+X___X__
+X_X_X__
+X_X_X__
+X_X_X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+X___X__
+_X_X___
+__X____
+_X_X___
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+____X__
+XXXX___
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+XXXXX__
+____X__
+__XX___
+_X_____
+X______
+XXXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+___XX__
+__X____
+__X____
+__X____
+XX_____
+__X____
+__X____
+__X____
+__X____
+___XX__
+_______
+//reading bitmap
+_______
+_______
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+_______
+//reading bitmap
+_______
+_______
+XX_____
+__X____
+__X____
+__X____
+___XX__
+__X____
+__X____
+__X____
+__X____
+XX_____
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_X__X__
+X_X_X__
+X__X___
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXXXX_
+X__X___
+X__X___
+X__X___
+X__XXX_
+X__X___
+X__X___
+_XXXXX_
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXXXX_
+X__X___
+X__XXX_
+X__X___
+X__X___
+_XXXXX_
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+__X____
+_______
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+__X____
+_XXX___
+X_X_X__
+X_X____
+X_X____
+X_X_X__
+_XXX___
+__X____
+_______
+//reading bitmap
+_______
+_______
+___XX__
+__X____
+__X____
+__X____
+_XXXX__
+__X____
+__X____
+_XXX___
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+X___X__
+_XXX___
+X___X__
+X___X__
+X___X__
+_XXX___
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X___X__
+X___X__
+_X_X___
+__X____
+XXXXX__
+__X____
+XXXXX__
+__X____
+_______
+_______
+//reading bitmap
+_______
+_______
+__XX___
+__XX___
+__XX___
+_______
+_______
+__XX___
+__XX___
+__XX___
+__XX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXXX__
+X______
+X_X____
+_X_X___
+_X_X___
+__X_X__
+____X__
+XXXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+X__X___
+X__X___
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X___X__
+XXXXX__
+XX__X__
+XX__X__
+XXXXX__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+__XXX__
+____X__
+__XXX__
+__X_X__
+__XXX__
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+__X_X__
+_X_X___
+X_X____
+_X_____
+X_X____
+_X_X___
+__X_X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_______
+XXXXX__
+____X__
+____X__
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_______
+_XXX___
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_XXX___
+X___X__
+XXXXX__
+XX__X__
+XX__X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXXXX__
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+__XXX__
+__X_X__
+__X_X__
+__XXX__
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+__X____
+__X____
+XXXXX__
+__X____
+__X____
+XXXXX__
+_______
+_______
+_______
+//reading bitmap
+_______
+__XX___
+_X__X__
+_X__X__
+___X___
+__X____
+_XXXX__
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+__XX___
+____X__
+__XX___
+____X__
+____X__
+__XX___
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+___X___
+__XX___
+__X____
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+XXXXX__
+X______
+X______
+X______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+XXX_X__
+X_X_X__
+X_X_X__
+XXX_X__
+__X_X__
+__X_X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XX____
+_XX____
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+___X___
+__XX___
+__X____
+_______
+//reading bitmap
+_______
+___X___
+__XX___
+_X_X___
+___X___
+___X___
+__XXX__
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+__XXX__
+__X_X__
+__X_X__
+__XXX__
+_______
+_______
+_______
+_______
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+X_X____
+_X_X___
+__X_X__
+___X_X_
+__X_X__
+_X_X___
+X_X____
+_______
+_______
+//reading bitmap
+_______
+__X____
+_XX____
+__X____
+_XXX___
+_______
+XXXXX__
+_______
+_X_X___
+_X_X___
+__XX___
+___X___
+_______
+//reading bitmap
+_______
+__X____
+_XX____
+__X____
+_XXX___
+_______
+XXXXX__
+_______
+_XX____
+X__X___
+__X____
+_XXX___
+_______
+//reading bitmap
+_______
+__X____
+_XX____
+__X____
+_XXX___
+_______
+XXXXX__
+_______
+_X_X___
+_X_X___
+__XX___
+___X___
+_______
+//reading bitmap
+_______
+_______
+_______
+__X____
+_______
+__X____
+__X____
+___X___
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_X_____
+__X____
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+XXXXX__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+___X___
+__X____
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+XXXXX__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+__X____
+_X_X___
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+XXXXX__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+__X_X__
+_X_X___
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+XXXXX__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_X_X___
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+XXXXX__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+__X____
+_X_X___
+__X____
+_XXX___
+X___X__
+X___X__
+X___X__
+XXXXX__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXXXX_
+X__X___
+X__X___
+X__X___
+XXXXXX_
+X__X___
+X__X___
+X__XXX_
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X___X__
+X______
+X______
+X______
+X______
+X___X__
+_XXX___
+__X____
+_XX____
+//reading bitmap
+_X_____
+__X____
+_______
+XXXXX__
+X______
+X______
+XXXX___
+X______
+X______
+X______
+XXXXX__
+_______
+_______
+//reading bitmap
+___X___
+__X____
+_______
+XXXXX__
+X______
+X______
+XXXX___
+X______
+X______
+X______
+XXXXX__
+_______
+_______
+//reading bitmap
+__X____
+_X_X___
+_______
+XXXXX__
+X______
+X______
+XXXX___
+X______
+X______
+X______
+XXXXX__
+_______
+_______
+//reading bitmap
+_______
+_X_X___
+_______
+XXXXX__
+X______
+X______
+XXXX___
+X______
+X______
+X______
+XXXXX__
+_______
+_______
+//reading bitmap
+_X_____
+__X____
+_______
+XXXXX__
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+XXXXX__
+_______
+_______
+//reading bitmap
+___X___
+__X____
+_______
+XXXXX__
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+XXXXX__
+_______
+_______
+//reading bitmap
+__X____
+_X_X___
+_______
+XXXXX__
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+XXXXX__
+_______
+_______
+//reading bitmap
+_______
+_X_X___
+_______
+XXXXX__
+__X____
+__X____
+__X____
+__X____
+__X____
+__X____
+XXXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XXXX___
+X___X__
+X___X__
+X___X__
+XXX_X__
+X___X__
+X___X__
+XXXX___
+_______
+_______
+//reading bitmap
+__X_X__
+_X_X___
+_______
+X___X__
+XX__X__
+X_X_X__
+X__XX__
+X___X__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+_X_____
+__X____
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+___X___
+__X____
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+__X____
+_X_X___
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+__X_X__
+_X_X___
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_X_X___
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+X___X__
+_X_X___
+__X____
+_X_X___
+X___X__
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X___XX_
+X__XX__
+X_X_X__
+XX__X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_X_____
+__X____
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+___X___
+__X____
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+__X____
+_X_X___
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_X_X___
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+___X___
+__X____
+_______
+X___X__
+X___X__
+X___X__
+_X_X___
+__X____
+__X____
+__X____
+__X____
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+XX_____
+_X_XX__
+_XX__X_
+_X___X_
+_X___X_
+_XX__X_
+_X_XX__
+XX_____
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+X___X__
+X___X__
+X_XX___
+X___X__
+X___X__
+X_X_X__
+X__X___
+_______
+_______
+//reading bitmap
+_______
+_______
+_X_____
+__X____
+_______
+_XXXX__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+___X___
+__X____
+_______
+_XXXX__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+__X____
+_X_X___
+_______
+_XXXX__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+__X_X__
+_X_X___
+_______
+_XXXX__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_X_X___
+_______
+_XXXX__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+__X____
+_X_X___
+__X____
+_XXXX__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXXXX_
+___X___
+XXXXXX_
+X__X___
+X__X___
+_XXXXX_
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXX___
+X___X__
+X______
+X______
+X___X__
+_XXX___
+__X____
+_XX____
+//reading bitmap
+_______
+_______
+_X_____
+__X____
+_______
+_XXX___
+X___X__
+X___X__
+XXXX___
+X______
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+___X___
+__X____
+_______
+_XXX___
+X___X__
+X___X__
+XXXX___
+X______
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+__X____
+_X_X___
+_______
+_XXX___
+X___X__
+X___X__
+XXXX___
+X______
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_X_X___
+_______
+_XXX___
+X___X__
+X___X__
+XXXX___
+X______
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_X_____
+__X____
+_______
+XXX____
+__X____
+__X____
+__X____
+__X____
+__XXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+___X___
+__X____
+_______
+XXX____
+__X____
+__X____
+__X____
+__X____
+__XXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+__X____
+_X_X___
+_______
+XXX____
+__X____
+__X____
+__X____
+__X____
+__XXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_X_X___
+_______
+XXX____
+__X____
+__X____
+__X____
+__X____
+__XXX__
+_______
+_______
+//reading bitmap
+_______
+__X____
+___X___
+_XX____
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+__X_X__
+_X_X___
+_______
+XXXX___
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_______
+_______
+//reading bitmap
+_______
+_______
+_X_____
+__X____
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+___X___
+__X____
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+__X____
+_X_X___
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+__X_X__
+_X_X___
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_X_X___
+_______
+_XXX___
+X___X__
+X___X__
+X___X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+__X____
+__X____
+_______
+XXXXX__
+_______
+__X____
+__X____
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_______
+_______
+_XXX_X_
+X__XX__
+X_X_X__
+XX__X__
+X___X__
+_XXX___
+_______
+_______
+//reading bitmap
+_______
+_______
+_X_____
+__X____
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+___X___
+__X____
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+__X____
+_X_X___
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_X_X___
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+_______
+_______
+//reading bitmap
+_______
+_______
+___X___
+__X____
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+____X__
+XXXX___
+//reading bitmap
+_______
+_______
+XX_____
+_X_____
+_X_XX__
+_XX__X_
+_X___X_
+_X___X_
+_XX__X_
+_X_XX__
+_X_____
+XX_____
+_______
+//reading bitmap
+_______
+_______
+_______
+_X_X___
+_______
+X___X__
+X___X__
+X___X__
+X___X__
+X___X__
+_XXXX__
+____X__
+XXXX___
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+XXXXX__
+XXXXXX_
+XXXXXX_
+XXXXXX_
+XXXXX__
+_XXX___
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+X___XX_
+XX_XXX_
+XXXXX__
+_XXX___
+XXXXX__
+XX_XXX_
+X___XX_
+_______
+_______
+_______
+//reading bitmap
+_______
+_______
+_______
+_XXX___
+_XXX___
+XXXXXX_
+XXXXXX_
+XXXXXX_
+_XXX___
+_XXX___
+_______
+_______
+_______
+//reading bitmap
+_______
+X______
+X__XX__
+X_XXXX_
+X__XX__
+X__XX__
+__XXX__
+_XXX___
+XXX____
+XX_____
+X______
+X______
+_______
+//reading bitmap
+_______
+X______
+X______
+X______
+X______
+XXXXX__
+_______
+_X___X_
+_XX__X_
+_X_X_X_
+_X__XX_
+_X___X_
+_______
+//reading bitmap
+_______
+_______
+XXXXX__
+X___X__
+X___X__
+XXXXXX_
+XX_XXX_
+X___XX_
+XX_XXX_
+XX_XXX_
+XXXXXX_
+_______
+_______
+//reading bitmap
+_______
+X______
+XX_____
+XXX____
+XXXX___
+XXXXX__
+XXXXXX_
+XXXXX__
+XXXX___
+XXX____
+XX_____
+X______
+_______
+//reading bitmap
+_______
+X______
+XX_____
+_XX____
+__XX___
+___XX__
+____XX_
+___XX__
+__XX___
+_XX____
+XX_____
+X______
+_______
+//reading bitmap
+_____X_
+____XX_
+___XXX_
+__XXXX_
+_XXXXX_
+XXXXXX_
+XXXXXX_
+XXXXXX_
+_XXXXX_
+__XXXX_
+___XXX_
+____XX_
+_____X_
+//reading bitmap
+_____X_
+____XX_
+___XX__
+__XX___
+_XX____
+XX_____
+X______
+XX_____
+_XX____
+__XX___
+___XX__
+____XX_
+_____X_
diff --git a/userspace/fonts/tinyfont.c b/userspace/fonts/tinyfont.c
new file mode 100644
index 0000000..f1afcdf
--- /dev/null
+++ b/userspace/fonts/tinyfont.c
@@ -0,0 +1,160 @@
+// https://hackaday.io/project/6309-vga-graphics-over-spi-and-serial-vgatonic/log/20759-a-tiny-4x6-pixel-font-that-will-fit-on-almost-any-microcontroller-license-mit
+// https://robey.lag.net/2010/01/23/tiny-monospace-font.html
+
+// ultrasmall 3x5 font!
+
+
+#include <stdio.h>
+#include <stdint.h>
+
+// Font Definition
+const uint8_t font4x6 [96][2] = {
+ { 0x00 , 0x00 }, /*SPACE*/
+ { 0x49 , 0x08 }, /*'!'*/
+ { 0xb4 , 0x00 }, /*'"'*/
+ { 0xbe , 0xf6 }, /*'#'*/
+ { 0x7b , 0x7a }, /*'$'*/
+ { 0xa5 , 0x94 }, /*'%'*/
+ { 0x55 , 0xb8 }, /*'&'*/
+ { 0x48 , 0x00 }, /*'''*/
+ { 0x29 , 0x44 }, /*'('*/
+ { 0x44 , 0x2a }, /*')'*/
+ { 0x15 , 0xa0 }, /*'*'*/
+ { 0x0b , 0x42 }, /*'+'*/
+ { 0x00 , 0x50 }, /*','*/
+ { 0x03 , 0x02 }, /*'-'*/
+ { 0x00 , 0x08 }, /*'.'*/
+ { 0x25 , 0x90 }, /*'/'*/
+ { 0x76 , 0xba }, /*'0'*/
+ { 0x59 , 0x5c }, /*'1'*/
+ { 0xc5 , 0x9e }, /*'2'*/
+ { 0xc5 , 0x38 }, /*'3'*/
+ { 0x92 , 0xe6 }, /*'4'*/
+ { 0xf3 , 0x3a }, /*'5'*/
+ { 0x73 , 0xba }, /*'6'*/
+ { 0xe5 , 0x90 }, /*'7'*/
+ { 0x77 , 0xba }, /*'8'*/
+ { 0x77 , 0x3a }, /*'9'*/
+ { 0x08 , 0x40 }, /*':'*/
+ { 0x08 , 0x50 }, /*';'*/
+ { 0x2a , 0x44 }, /*'<'*/
+ { 0x1c , 0xe0 }, /*'='*/
+ { 0x88 , 0x52 }, /*'>'*/
+ { 0xe5 , 0x08 }, /*'?'*/
+ { 0x56 , 0x8e }, /*'@'*/
+ { 0x77 , 0xb6 }, /*'A'*/
+ { 0x77 , 0xb8 }, /*'B'*/
+ { 0x72 , 0x8c }, /*'C'*/
+ { 0xd6 , 0xba }, /*'D'*/
+ { 0x73 , 0x9e }, /*'E'*/
+ { 0x73 , 0x92 }, /*'F'*/
+ { 0x72 , 0xae }, /*'G'*/
+ { 0xb7 , 0xb6 }, /*'H'*/
+ { 0xe9 , 0x5c }, /*'I'*/
+ { 0x64 , 0xaa }, /*'J'*/
+ { 0xb7 , 0xb4 }, /*'K'*/
+ { 0x92 , 0x9c }, /*'L'*/
+ { 0xbe , 0xb6 }, /*'M'*/
+ { 0xd6 , 0xb6 }, /*'N'*/
+ { 0x56 , 0xaa }, /*'O'*/
+ { 0xd7 , 0x92 }, /*'P'*/
+ { 0x76 , 0xee }, /*'Q'*/
+ { 0x77 , 0xb4 }, /*'R'*/
+ { 0x71 , 0x38 }, /*'S'*/
+ { 0xe9 , 0x48 }, /*'T'*/
+ { 0xb6 , 0xae }, /*'U'*/
+ { 0xb6 , 0xaa }, /*'V'*/
+ { 0xb6 , 0xf6 }, /*'W'*/
+ { 0xb5 , 0xb4 }, /*'X'*/
+ { 0xb5 , 0x48 }, /*'Y'*/
+ { 0xe5 , 0x9c }, /*'Z'*/
+ { 0x69 , 0x4c }, /*'['*/
+ { 0x91 , 0x24 }, /*'\'*/
+ { 0x64 , 0x2e }, /*']'*/
+ { 0x54 , 0x00 }, /*'^'*/
+ { 0x00 , 0x1c }, /*'_'*/
+ { 0x44 , 0x00 }, /*'`'*/
+ { 0x0e , 0xae }, /*'a'*/
+ { 0x9a , 0xba }, /*'b'*/
+ { 0x0e , 0x8c }, /*'c'*/
+ { 0x2e , 0xae }, /*'d'*/
+ { 0x0e , 0xce }, /*'e'*/
+ { 0x56 , 0xd0 }, /*'f'*/
+ { 0x55 , 0x3B }, /*'g'*/
+ { 0x93 , 0xb4 }, /*'h'*/
+ { 0x41 , 0x44 }, /*'i'*/
+ { 0x41 , 0x51 }, /*'j'*/
+ { 0x97 , 0xb4 }, /*'k'*/
+ { 0x49 , 0x44 }, /*'l'*/
+ { 0x17 , 0xb6 }, /*'m'*/
+ { 0x1a , 0xb6 }, /*'n'*/
+ { 0x0a , 0xaa }, /*'o'*/
+ { 0xd6 , 0xd3 }, /*'p'*/
+ { 0x76 , 0x67 }, /*'q'*/
+ { 0x17 , 0x90 }, /*'r'*/
+ { 0x0f , 0x38 }, /*'s'*/
+ { 0x9a , 0x8c }, /*'t'*/
+ { 0x16 , 0xae }, /*'u'*/
+ { 0x16 , 0xba }, /*'v'*/
+ { 0x16 , 0xf6 }, /*'w'*/
+ { 0x15 , 0xb4 }, /*'x'*/
+ { 0xb5 , 0x2b }, /*'y'*/
+ { 0x1c , 0x5e }, /*'z'*/
+ { 0x6b , 0x4c }, /*'{'*/
+ { 0x49 , 0x48 }, /*'|'*/
+ { 0xc9 , 0x5a }, /*'}'*/
+ { 0x54 , 0x00 }, /*'~'*/
+ { 0x56 , 0xe2 } /*''*/
+};
+
+uint8_t pgm_read_byte(uint8_t *x)
+{
+ return *x;
+}
+
+// Font retreival function - ugly, but needed.
+unsigned char getFontLine(unsigned char data, int line_num) {
+ const uint8_t index = (data-32);
+ unsigned char pixel = 0;
+ if (pgm_read_byte(&font4x6[index][1]) & 1 == 1) line_num -= 1;
+ if (line_num == 0) {
+ pixel = (pgm_read_byte(&font4x6[index][0])) >> 4;
+ } else if (line_num == 1) {
+ pixel = (pgm_read_byte(&font4x6[index][0])) >> 1;
+ } else if (line_num == 2) {
+ // Split over 2 bytes
+ return (((pgm_read_byte(&font4x6[index][0])) & 0x03) << 2) | (((pgm_read_byte(&font4x6[index][1])) & 0x02));
+ } else if (line_num == 3) {
+ pixel = (pgm_read_byte(&font4x6[index][1])) >> 4;
+ } else if (line_num == 4) {
+ pixel = (pgm_read_byte(&font4x6[index][1])) >> 1;
+ }
+ return pixel & 0xE;
+}
+
+int main()
+{
+ printf("3\n");
+ printf("5\n");
+
+ for(int c=0;c<95;c++)
+ {
+ printf("\n");
+ char cc=c+32;
+ // printf("// char [%c]\n",cc);
+ printf("\n");
+
+ for(int l=0;l<5;l++)
+ {
+ uint8_t v=getFontLine(cc,l);
+ for(int p=0;p<3;p++)
+ {
+ if(v&(1<<(3-p)))printf("X");
+ else printf("_");
+ //else printf(" ");
+ }
+ printf("\n");
+ }
+ }
+}
+
diff --git a/userspace/fonts/tinyfont.src b/userspace/fonts/tinyfont.src
new file mode 100644
index 0000000..ef5f7f1
--- /dev/null
+++ b/userspace/fonts/tinyfont.src
@@ -0,0 +1,667 @@
+3
+5
+
+
+___
+___
+___
+___
+___
+
+
+_X_
+_X_
+_X_
+___
+_X_
+
+
+X_X
+X_X
+___
+___
+___
+
+
+X_X
+XXX
+X_X
+XXX
+X_X
+
+
+_XX
+XX_
+XXX
+_XX
+XX_
+
+
+X_X
+__X
+_X_
+X__
+X_X
+
+
+_X_
+X_X
+_X_
+X_X
+XX_
+
+
+_X_
+_X_
+___
+___
+___
+
+
+__X
+_X_
+_X_
+_X_
+__X
+
+
+_X_
+__X
+__X
+__X
+_X_
+
+
+___
+X_X
+_X_
+X_X
+___
+
+
+___
+_X_
+XXX
+_X_
+___
+
+
+___
+___
+___
+_X_
+X__
+
+
+___
+___
+XXX
+___
+___
+
+
+___
+___
+___
+___
+_X_
+
+
+__X
+__X
+_X_
+X__
+X__
+
+
+_XX
+X_X
+X_X
+X_X
+XX_
+
+
+_X_
+XX_
+_X_
+_X_
+XXX
+
+
+XX_
+__X
+_XX
+X__
+XXX
+
+
+XX_
+__X
+_X_
+__X
+XX_
+
+
+X__
+X__
+X_X
+XXX
+__X
+
+
+XXX
+X__
+XXX
+__X
+XX_
+
+
+_XX
+X__
+XXX
+X_X
+XX_
+
+
+XXX
+__X
+_X_
+X__
+X__
+
+
+_XX
+X_X
+XXX
+X_X
+XX_
+
+
+_XX
+X_X
+XXX
+__X
+XX_
+
+
+___
+_X_
+___
+_X_
+___
+
+
+___
+_X_
+___
+_X_
+X__
+
+
+__X
+_X_
+X__
+_X_
+__X
+
+
+___
+XXX
+___
+XXX
+___
+
+
+X__
+_X_
+__X
+_X_
+X__
+
+
+XXX
+__X
+_X_
+___
+_X_
+
+
+_X_
+X_X
+X_X
+X__
+_XX
+
+
+_XX
+X_X
+XXX
+X_X
+X_X
+
+
+_XX
+X_X
+XX_
+X_X
+XX_
+
+
+_XX
+X__
+X__
+X__
+_XX
+
+
+XX_
+X_X
+X_X
+X_X
+XX_
+
+
+_XX
+X__
+XXX
+X__
+XXX
+
+
+_XX
+X__
+XXX
+X__
+X__
+
+
+_XX
+X__
+X_X
+X_X
+_XX
+
+
+X_X
+X_X
+XXX
+X_X
+X_X
+
+
+XXX
+_X_
+_X_
+_X_
+XXX
+
+
+_XX
+__X
+__X
+X_X
+_X_
+
+
+X_X
+X_X
+XX_
+X_X
+X_X
+
+
+X__
+X__
+X__
+X__
+XXX
+
+
+X_X
+XXX
+X_X
+X_X
+X_X
+
+
+XX_
+X_X
+X_X
+X_X
+X_X
+
+
+_X_
+X_X
+X_X
+X_X
+_X_
+
+
+XX_
+X_X
+XXX
+X__
+X__
+
+
+_XX
+X_X
+X_X
+XXX
+_XX
+
+
+_XX
+X_X
+XX_
+X_X
+X_X
+
+
+_XX
+X__
+_X_
+__X
+XX_
+
+
+XXX
+_X_
+_X_
+_X_
+_X_
+
+
+X_X
+X_X
+X_X
+X_X
+_XX
+
+
+X_X
+X_X
+X_X
+X_X
+_X_
+
+
+X_X
+X_X
+X_X
+XXX
+X_X
+
+
+X_X
+X_X
+_X_
+X_X
+X_X
+
+
+X_X
+X_X
+_X_
+_X_
+_X_
+
+
+XXX
+__X
+_X_
+X__
+XXX
+
+
+_XX
+_X_
+_X_
+_X_
+_XX
+
+
+X__
+X__
+_X_
+__X
+__X
+
+
+_XX
+__X
+__X
+__X
+_XX
+
+
+_X_
+X_X
+___
+___
+___
+
+
+___
+___
+___
+___
+XXX
+
+
+_X_
+__X
+___
+___
+___
+
+
+___
+_XX
+X_X
+X_X
+_XX
+
+
+X__
+XX_
+X_X
+X_X
+XX_
+
+
+___
+_XX
+X__
+X__
+_XX
+
+
+__X
+_XX
+X_X
+X_X
+_XX
+
+
+___
+_XX
+X_X
+XX_
+_XX
+
+
+_X_
+X_X
+X__
+XX_
+X__
+
+
+___
+_X_
+X_X
+_XX
+__X
+
+
+X__
+X__
+XX_
+X_X
+X_X
+
+
+_X_
+___
+_X_
+_X_
+__X
+
+
+___
+_X_
+___
+_X_
+_X_
+
+
+X__
+X_X
+XX_
+X_X
+X_X
+
+
+_X_
+_X_
+_X_
+_X_
+__X
+
+
+___
+X_X
+XXX
+X_X
+X_X
+
+
+___
+XX_
+X_X
+X_X
+X_X
+
+
+___
+_X_
+X_X
+X_X
+_X_
+
+
+___
+XX_
+X_X
+X_X
+XX_
+
+
+___
+_XX
+X_X
+X_X
+_XX
+
+
+___
+X_X
+XX_
+X__
+X__
+
+
+___
+_XX
+XX_
+__X
+XX_
+
+
+X__
+XX_
+X__
+X__
+_XX
+
+
+___
+X_X
+X_X
+X_X
+_XX
+
+
+___
+X_X
+X_X
+X_X
+XX_
+
+
+___
+X_X
+X_X
+XXX
+X_X
+
+
+___
+X_X
+_X_
+X_X
+X_X
+
+
+___
+X_X
+X_X
+_XX
+__X
+
+
+___
+XXX
+__X
+_X_
+XXX
+
+
+_XX
+_X_
+XX_
+_X_
+_XX
+
+
+_X_
+_X_
+_X_
+_X_
+_X_
+
+
+XX_
+_X_
+_XX
+_X_
+XX_
+
+
+_X_
+X_X
+___
+___
+___
diff --git a/userspace/xterm/terminal.c b/userspace/xterm/terminal.c
index ed2b175..60cd8b0 100644
--- a/userspace/xterm/terminal.c
+++ b/userspace/xterm/terminal.c
@@ -384,14 +384,15 @@ terminal_tty terminal_init(term_out *screen,term_in *input)
return tty;
}
+
term_out tout;
terminal_tty tty;
+
terminal_tty* terminal_init_vesa()
{
tout.put_char=vesa_console_put_char;
tout.update_cursor=vesa_update_cursor;
-
tty=(terminal_init(&tout,NULL));
return &tty;
diff --git a/userspace/xterm/vesa.c b/userspace/xterm/vesa.c
index 9e89cbe..7f22a5f 100644
--- a/userspace/xterm/vesa.c
+++ b/userspace/xterm/vesa.c
@@ -1,56 +1,33 @@
#include <stdarg.h>
#include <stdint.h>
+#include <stdbool.h>
#include <stdio.h>
+#include <malloc.h>
#include "vesa.h"
-#define VMEM_USER_FRAMEBUFFER 0xfc000000
-
-typedef struct foolfont_struct
-{
- uint8_t line[10]; //every single fool font consists of 10 lines a 8 bit
-
-}foolfont;
+void PutFont(char c, int x,int y, int color_fg,int color_bg);
-static foolfont deffont[256];
-
-//static vbemodeinfo *VbeModeInfoBlock;
-
-static int console_x;
-static int console_y;
-
-static int console_lines;
-static int console_cols;
-
-static uint8_t* buffer;
-static uint8_t* physbase;
-
-void PutConsoleNL();
-void PutPixel(int x,int y, int color);
+#define VMEM_USER_FRAMEBUFFER 0xfc000000
-// we need to obtain this from somewhere else..
+// framebuffer info
static uint32_t vesaXres;
static uint32_t vesaYres;
static uint32_t vesaPitch;
static uint32_t vesaBpp;
static uint32_t vesaAddr;
-//static char buf[80][24];
+// font
+static uint8_t *foolfont;
+static uint32_t font_width;
+static uint32_t font_height;
-void vesa_update_cursor(uint32_t col,uint32_t row)
-{
- console_x=col;
- console_y=row;
-}
+// cursor position
+static int console_x;
+static int console_y;
-// helper_funcs
-/*
-static void vesa_print_char_col(int x, int y, char c, char col_fg, char col_bg)
-{
- // uint16_t attrib = (col_bg << 4) | (col_fg & 0x0F);
- // uint16_t* video_mem=(uint16_t *)SCR_VIDEOMEM+(x+y*SCR_REAL_WIDTH);
- // *video_mem=c | (attrib << 8) ;
-}
-*/
+//terminal size
+static int console_lines;
+static int console_cols;
// same colors as in screen.h
static uint32_t cols[] = {
@@ -72,44 +49,17 @@ static uint32_t cols[] = {
0xffffff, //white
};
-// glue func for terminal
-void vesa_console_put_char(uint8_t c,uint8_t color_bg, uint8_t color_fg, uint32_t x, uint32_t y)
-{
-// print_char_col(x,y,c, color_bg, color_fg);
- //PutFont(c, console_x*10,console_y*12, cols[color_fg],cols[color_bg]);
-
- //PutFont(c, x*10,y*12, cols[color_bg],cols[color_fg]);
- PutFont(c, x*8,y*11, cols[color_bg],cols[color_fg]);
-
-// buf[console_x][console_y]=c;
-
-// console_x++;
-
-// #ifdef FOOLOS_CONSOLE_AUTOBREAK
-// if(console_x>=console_cols)PutConsoleNL();
-// #endif
-}
-
-void vesa_switch_buffers()
-{
- for(int i=0;i<800*600*2;i++)physbase[i]=buffer[i];
-}
-
-void vesa_put_rect(int x, int y, int w , int h, int color)
-{
- for(int i=x;i<x+w;i++)
- for(int j=y;j<y+h;j++)
- PutPixel(i,j,color);
-}
-
-void vesa_clear_screen()
+/** update cursor position */
+void vesa_update_cursor(uint32_t col,uint32_t row)
{
- vesa_put_rect(0,0,vesaXres, vesaYres, 0xffffff);
+ console_x=col;
+ console_y=row;
}
-void vesa_set_physbase(uint32_t addr)
+/** put char */
+void vesa_console_put_char(uint8_t c,uint8_t color_bg, uint8_t color_fg, uint32_t x, uint32_t y)
{
- vesaAddr=addr;
+ PutFont(c, x,y, cols[color_bg],cols[color_fg]);
}
//
@@ -132,79 +82,49 @@ void vesa_set_physbase(uint32_t addr)
// our video memory
//
-uint32_t vesa_init()
+uint32_t vesa_init(char *fontname)
{
+ // LOAD FONT
+ FILE *f;
+ //if(fontname==NULL)f=fopen("/doc/fonts/binfont.bin","r");
+ //if(fontname==NULL)f=fopen("/doc/fonts/tinyfont.bin","r");
+ if(fontname==NULL)f=fopen("/doc/fonts/binfont_v2.bin","r");
- FILE *f=fopen("/doc/fonts/binfont.bin","r");
- fread(deffont,10,95,f);
-//inf->framebuffer_type
+ fread(&font_width,1,1,f);
+ fread(&font_height,1,1,f);
- /*
- vesaXres=inf->framebuffer_width;
- vesaYres=inf->framebuffer_height;
- vesaPitch=inf->framebuffer_pitch;
- vesaBpp=inf->framebuffer_bpp;
- vesaAddr=inf->framebuffer_addr;
- */
+ int bits_per_font=font_width*font_height;
+ int alloc_bytes=(bits_per_font*95+7)/8;
+
+ foolfont=malloc(alloc_bytes);
+ fread(foolfont,1,alloc_bytes,f);
// virtual screen
vesaXres=640;
vesaYres=480;
+
vesaPitch=640*4;
- vesaBpp=32;
+ vesaBpp=4; //32bit
vesaAddr=VMEM_USER_FRAMEBUFFER;
-
- //the only functionallu important init lines! (rest is log)
- //VbeModeInfoBlock=mode;
-// deffont=rawfont;
+ //
+
+ //
console_x=0;
console_y=0;
- int line_height=12;
- int col_width=10;
-
- console_lines=vesaYres/line_height;
- console_cols=vesaXres/col_width;
-
//TODO dynamic (but need to sync with terminal!)
console_cols=80;
console_lines=24;
- /*
- // vesa info
- klog("vbe version: 0x%x / video mode ptr: 0x%x 0x%x",
- info->VbeVersion, info->VideoModePtr[1], info->VideoModePtr[0]);
-
- // vesa info on selected mode:
- klog("colors r:%d 0x%x g:%d 0x%x b:%d 0x%x",
- mode->red_position,mode->red_mask,
- mode->green_position,mode->green_mask,
- mode->blue_position,mode->blue_mask);
-
- klog("res: %d * %d / banks: %d / attr: 0x%x",
- mode->Xres, mode->Yres, mode->banks, mode->attributes);
- klog("bpp: %d / physbase: 0x%x",
- mode->bpp,mode->physbase);
-
- // vesa modes
- // todo: take segment from vbeinfo!
-#ifdef FOOLSOS_SHOW_VESAMODES
- uint16_t *modeptr=info->VideoModePtr[0];
-
- while(*modeptr!=0xffff&&*modeptr!=0)
- {
- klog("mode supported : 0x%X", (*modeptr));
- modeptr++;
- }
-#endif
-*/
return vesaAddr;
}
// TODO: what will happen in 24bit mode?
+// TODO: optimize
void PutPixel(int x,int y, int color)
{
+ /*
//do not write memory outside the screen buffer, check parameters against the VBE mode info
if (x<0 || x>vesaXres|| y<0 || y>vesaYres) return;
if (x) x = (x*(vesaBpp>>3)); // get bytes (divide by 8)
@@ -215,142 +135,62 @@ void PutPixel(int x,int y, int color)
cTemp[x+y] = (uint8_t)(color & 0xff);
cTemp[x+y+1] = (uint8_t)((color>>8) & 0xff);
cTemp[x+y+2] = (uint8_t)((color>>16) & 0xff);
-}
-
-
-void PutFont(char c, int x,int y, int color_fg,int color_bg)
-{
-
- int fnt=0x126-0x20;
-
- if(c>=0x20&&c<=0x126)fnt=c-0x20;
-
- int posx, posy, sizex=8, sizey=10;
-
- for(posx=x;posx<x+sizex;posx++)
- {
- PutPixel(posx,y-1,color_bg);
- }
- for(posy=y;posy<y+sizey;posy++)
- {
- PutPixel(x-1,posy,color_bg);
- }
-
- for(posx=x;posx<x+sizex;posx++)
- {
-
- for(posy=y;posy<y+sizey;posy++)
- {
- if(deffont[fnt].line[posy-y]&1<<(7-(posx-x)))
- {
- PutPixel(posx,posy,color_fg);
- }
- else
- {
- PutPixel(posx,posy,color_bg);
- }
-
- }
- }
+ */
+ uint8_t *p=VMEM_USER_FRAMEBUFFER+y*vesaPitch+x*vesaBpp;
+ uint32_t *pix=p;
+ *pix=color;
}
-void PutString(char *str, int x,int y, int color, va_list va)
-{
-
- char buff[256];
- sprintf(buff,str,va);
- str=buff;
-
- int i=x;
- while((*str)!=0)
- {
- PutFont(*str, i,y, color,0x0);
- i+=9; // spacing
- str++;
- }
-
-}
-void PutConsoleChar(char c, int color)
+static bool check_pixel(int idx,int x,int y)
{
- if(c=='\n')
- {
- PutConsoleNL();
- return;
- }
- //PutFont(c, console_x*10,console_y*12, color);
- console_x++;
-
-
- #ifdef FOOLOS_CONSOLE_AUTOBREAK
- if(console_x>=console_cols)PutConsoleNL();
- #endif
+// x=font_width-x-1;
+ int pixel_index=idx*font_width*font_height+y*font_width+x;
+ return foolfont[pixel_index/8]&(1<<(7-(pixel_index%8)));
}
-void PutConsole(char *str, int color)
+/**
+ * Put character C in column X of row Y using colors fg and bg
+ */
+void PutFont(char c, int x,int y, int color_fg,int color_bg)
{
+ int fnt;
+ if(c>=0x20&&c<=0x126)fnt=c-0x20;
+ else return; // any other fonts??
- while((*str)!=0)
- {
- PutConsoleChar(*str,color);
- str++;
- }
+ //x=x*(1+font_width);
+ //y=y*(1+font_height);
+ x=x*(font_width+1);
+ y=y*(font_height+1);
-}
-void PutConsoleNL()
-{
- console_y++;
- if(console_y<console_lines)return;
+ //fill broder with bg color
+ for(int posx=x;posx<x+font_width+1;posx++)PutPixel(posx,y+font_height,color_bg);
+ for(int posy=y;posy<y+font_height;posy++)PutPixel(x+font_width,posy,color_bg);
- for(int line=0;line<24;line++)
+ // paint letter
+ for(int posx=x;posx<x+font_width;posx++)
{
- for(int j=0;j<console_cols;j++)
+ for(int posy=y;posy<y+font_height;posy++)
{
-// buf[j][line]=buf[j][line+1];
-// PutFont(buf[j][line],j*10,line*12,0x33ff66,0);
-// PutFont(buf[j][line+1],j*10,line*12,0x33ff66,0);
+ //if(deffont[fnt].line[posy-y]&1<<(7-(posx-x)))
+ if(check_pixel(fnt,posx-x,posy-y))PutPixel(posx,posy,color_fg);
+ else PutPixel(posx,posy,color_bg);
}
}
-
- for(int i=0;i<console_cols;i++)
+ /*
+ for(int y=0;y<vesaYres;y++)
{
- PutFont(' ',i*10,23*12,0x33ff66,0);
- //buf[i][23]=' ';
+ PutPixel(0,y,0xff);
+ PutPixel(100,y,0xff);
+ PutPixel(vesaXres-1,y,0xff);
}
- console_x=0;
- console_y--;
-}
-
-static int boxx;
-static int boxy;
-////////////////
-void vesa_render()
-{
- vesa_clear_screen();
- vesa_put_rect(100,100,vesaXres-200,vesaYres-200,0xff);
- vesa_put_rect(boxx-10,boxy-10,20,20,0x999999);
-
- boxx++;
-// boxy+=boxx;
- if(boxx>vesaXres-100)boxx=100;
- // if(boxy>VbeModeInfoBlock->Yres-200)boxy=200;
-
- vesa_switch_buffers();
-}
-
-/*
-void vesa_init_doublebuff()
-{
- boxx=300;
- boxy=300;
-
- int blocks=800*600*2/4096+1;
- physbase=VbeModeInfoBlock->physbase;
- buffer=pmmngr_alloc_blocks(blocks);
- klog("Init buffer of %d blocks at 0x%08X",blocks,buffer);
-
- VbeModeInfoBlock->physbase=buffer;
+ for(int x=0;x<vesaXres;x++)
+ {
+ PutPixel(x,0,0xff);
+ PutPixel(x,100,0xff);
+ PutPixel(x,vesaYres-1,0xff);
+ }
+ */
}
-*/
diff --git a/userspace/xterm/xterm.c b/userspace/xterm/xterm.c
index bee8d8d..b333794 100644
--- a/userspace/xterm/xterm.c
+++ b/userspace/xterm/xterm.c
@@ -10,8 +10,7 @@ int main(int argc, char **argv)
{
_gui_win();
-
- vesa_init();
+ vesa_init(NULL);
void *tty=terminal_init_vesa();
//int xterm_in[2];
diff --git a/video/compositor.c b/video/compositor.c
index 4debe9a..d6689a7 100644
--- a/video/compositor.c
+++ b/video/compositor.c
@@ -5,6 +5,7 @@
#include "kmalloc.h"
#include "log.h"
#include "vmem.h"
+#include "timer.h"
#include "asm_x86.h"
#include "mount.h"
@@ -32,6 +33,9 @@ struct window
struct window windows[MAX_WINDOWS];
+static uint32_t display_width=1920;
+static uint32_t display_height=1080;
+
static uint16_t next_window=0;
static uint16_t next_x=50;
static uint16_t next_y=50;
@@ -156,15 +160,27 @@ static void put_mouse()
{
if(mouse_k&1)
{
- for(int i=-5;i<5;i++)
- for(int j=-5;j<5;j++)
- backbuffer[(mouse_y+j)*vesa_width+mouse_x+i]=0x00ff00;
+ for(int i=0;i<1;i++)
+ for(int j=0;j<display_height;j++)
+// backbuffer[(mouse_y+j)*vesa_width+mouse_x+i]=0x00ff00;
+ backbuffer[(j)*vesa_width+mouse_x+i]=0x0044ee;
+
+ for(int i=0;i<display_width;i++)
+ for(int j=0;j<1;j++)
+// backbuffer[(mouse_y+j)*vesa_width+mouse_x+i]=0x00ff00;
+ backbuffer[(mouse_y+j)*vesa_width+i]=0x0044ee;
}
else
{
- for(int i=-5;i<5;i++)
- for(int j=-5;j<5;j++)
- backbuffer[(mouse_y+i)*vesa_width+mouse_x+j]=0xff0000;
+ for(int i=0;i<1;i++)
+ for(int j=0;j<display_height;j++)
+// backbuffer[(mouse_y+j)*vesa_width+mouse_x+i]=0x00ff00;
+ backbuffer[(j)*vesa_width+mouse_x+i]=0x000099;
+
+ for(int i=0;i<display_width;i++)
+ for(int j=0;j<1;j++)
+// backbuffer[(mouse_y+j)*vesa_width+mouse_x+i]=0x00ff00;
+ backbuffer[(mouse_y+j)*vesa_width+i]=0x000099;
}
}
@@ -236,6 +252,8 @@ void compositor_swap_buffers()
// klog("swap");
// background
memcpy(backbuffer,bgimage,vesa_height*vesa_width*4);// TODO optimize? rects only too?
+ // compositor_set_background(0);
+
for(int i=next_window-1;i>=0;i--)
{
@@ -316,8 +334,22 @@ void compositor_mouse_handle(uint16_t x,uint16_t y, uint8_t key)
}
}
+// https://stackoverflow.com/questions/3581528/how-is-the-square-root-function-implemented
+double sqroot(double n){
+ double lo = 0, hi = n, mid;
+ for(int i = 0 ; i < 10 ; i++){
+ mid = (lo+hi)/2;
+ if(mid*mid == n) return mid;
+ if(mid*mid > n) hi = mid;
+ else lo = mid;
+ }
+ return mid;
+}
+
void compositor_set_background(char *ppm_raw_filename)
{
+// uint64_t t=timer_get_ms()/333;
+ /*
klog("loading bg...");
fd bg=mount_file_open(ppm_raw_filename);
@@ -334,4 +366,25 @@ void compositor_set_background(char *ppm_raw_filename)
}
klog("finished");
+ */
+
+ int center_x=vesa_width/2;
+ int center_y=vesa_height/2;
+
+ int max_dist = center_x*center_x+center_y*center_y;
+
+ for(int x=0;x<vesa_width;x++)
+ {
+ for(int y=0;y<vesa_height;y++)
+ {
+ int diffx=center_x-x;
+ int diffy=center_y-y;
+ int dist=diffx*diffx+diffy*diffy;
+ int val = 0xff*dist/max_dist;
+
+ bgimage[x+y*vesa_width]=val;
+ //backbuffer[x+y*vesa_width]=valr<<16;
+ }
+ }
+
}