DEADSOFTWARE

moved FlexUI fonts to "flexui.wad"
authorKetmar Dark <ketmar@ketmar.no-ip.org>
Tue, 3 Oct 2017 21:58:49 +0000 (00:58 +0300)
committerKetmar Dark <ketmar@ketmar.no-ip.org>
Tue, 3 Oct 2017 21:59:19 +0000 (00:59 +0300)
src/flexui/fui_ctls.pas
src/flexui/fui_gfx_gl.pas
src/flexui/fui_gfx_gl_cursor.inc
src/flexui/fui_gfx_gl_fonts.inc [deleted file]
src/game/g_holmes.pas
src/game/g_main.pas
src/game/g_window.pas

index ef5ab367e43e2bd11e0d8fe558c20dfb2fca4f52..69af8af26baff987fa82b7b5bf31ed94b7a02ce5 100644 (file)
@@ -554,6 +554,11 @@ procedure uiUpdateStyles ();
 procedure uiLayoutCtl (ctl: TUIControl);
 
 
+// ////////////////////////////////////////////////////////////////////////// //
+procedure uiInitialize ();
+procedure uiDeinitialize ();
+
+
 // ////////////////////////////////////////////////////////////////////////// //
 var
   fuiRenderScale: Single = 1.0;
@@ -567,6 +572,20 @@ uses
   utils;
 
 
+// ////////////////////////////////////////////////////////////////////////// //
+procedure uiDeinitialize ();
+begin
+  FreeAndNil(uiContext);
+end;
+
+
+procedure uiInitialize ();
+begin
+  if (uiContext <> nil) then raise Exception.Create('FlexUI already initialized');
+  uiContext := TGxContext.Create();
+end;
+
+
 // ////////////////////////////////////////////////////////////////////////// //
 var
   ctlsToKill: array of TUIControl = nil;
@@ -3491,6 +3510,4 @@ initialization
   registerCtlClass(TUIButton, 'button');
   registerCtlClass(TUICheckBox, 'checkbox');
   registerCtlClass(TUIRadioBox, 'radiobox');
-
-  uiContext := TGxContext.Create();
 end.
index bd409d38f9218b6579041ec92f52066b3c18ffd6..476d74909df582c9eecd5b07672e6a646b83bbd2 100644 (file)
@@ -142,6 +142,9 @@ procedure oglDrawCursor ();
 procedure oglDrawCursorAt (msX, msY: Integer);
 
 
+procedure fuiGfxLoadFont (const fontname: AnsiString; const fontFile: AnsiString; proportional: Boolean=false);
+procedure fuiGfxLoadFont (const fontname: AnsiString; st: TStream; proportional: Boolean=false);
+
 
 // ////////////////////////////////////////////////////////////////////////// //
 var
@@ -151,6 +154,7 @@ var
 implementation
 
 uses
+  fui_wadread,
   utils;
 
 
@@ -340,8 +344,6 @@ end;
 
 
 // ////////////////////////////////////////////////////////////////////////// //
-{$INCLUDE fui_gfx_gl_fonts.inc}
-
 type
   TGxBmpFont = class(TGxFont)
   private
@@ -350,6 +352,7 @@ type
     mFontBmp: PByte;
     mFontWdt: PByte;
     mFreeFontWdt: Boolean;
+    mFreeFontBmp: Boolean;
 
   protected
     procedure oglCreateTexture ();
@@ -362,7 +365,7 @@ type
     function drawTextInternal (x, y: Integer; const s: AnsiString): Integer; // return width (not including last empty pixel)
 
   public
-    constructor Create (const aname: AnsiString; awdt, ahgt: Integer; const afont: PByte; const awdtable: PByte=nil);
+    constructor Create (const aname: AnsiString; st: TStream; proportional: Boolean);
     destructor Destroy (); override;
 
     function charWidth (const ch: AnsiChar): Integer; override;
@@ -370,37 +373,77 @@ type
   end;
 
 
-constructor TGxBmpFont.Create (const aname: AnsiString; awdt, ahgt: Integer; const afont: PByte; const awdtable: PByte=nil);
+constructor TGxBmpFont.Create (const aname: AnsiString; st: TStream; proportional: Boolean);
 var
-  c: Integer;
-begin
-  if (afont = nil) then raise Exception.Create('internal error in font creation');
-  if (ahgt < 1) then raise Exception.Create('internal error in font creation');
-  if (awdt > 0) then
+  sign: packed array [0..7] of AnsiChar;
+  enc: packed array [0..16] of AnsiChar;
+  b: Byte;
+  wdt, hgt, elen: Integer;
+  ch, dy: Integer;
+  fntbwdt: Integer;
+  wrd: Word;
+begin
+  mFreeFontBmp := true;
+  mFreeFontWdt := true;
+  mName := aname;
+  mTexId := 0;
+  // signature
+  st.ReadBuffer(sign[0], 8);
+  if (sign <> 'FUIFONT0') then raise Exception.Create('FlexUI: invalid font file signature');
+  // encoding length and width
+  st.ReadBuffer(b, 1);
+  wdt := (b and $0f)+1; // 16 is not supported
+  if (wdt = 16) then raise Exception.Create('FlexUI: 16-wdt fonts aren''t supported yet');
+  elen := ((b shr 4) and $0f);
+  if (elen = 0) then raise Exception.CreateFmt('FlexUI: invalid font encoding length: %d', [elen]);
+  // height
+  st.ReadBuffer(b, 1);
+  hgt := b;
+  if (hgt < 2) then raise Exception.CreateFmt('FlexUI: invalid font height: %d', [hgt]);
+  // encoding
+  st.ReadBuffer(enc[0], elen);
+  // check for 'cp1251' here (it can also be 'koi8')
+  if (wdt <= 8) then fntbwdt := 1 else fntbwdt := 2;
+  // shift and width table (hi nibble: left shift for proportional print; lo nibble: shifted character width for proportional print)
+  GetMem(mFontWdt, 256);
+  st.ReadBuffer(mFontWdt^, 256);
+  // font bitmap
+  GetMem(mFontBmp, (hgt*fntbwdt)*256);
+  st.ReadBuffer(mFontBmp^, (hgt*fntbwdt)*256);
+  mWidth := wdt;
+  mHeight := hgt;
+  mBaseLine := hgt-1; //FIXME
+  if (proportional) then
   begin
-    //if (awdtable <> nil) then raise Exception.Create('internal error in font creation');
-    mFreeFontWdt := true;
-    // create width table
-    GetMem(mFontWdt, 256);
-    for c := 0 to 255 do mFontWdt[c] := awdt-1;
+    // shift font
+    for ch := 0 to 255 do
+    begin
+      for dy := 0 to hgt-1 do
+      begin
+        if (fntbwdt = 1) then
+        begin
+          mFontBmp[ch*hgt+dy] := mFontBmp[ch*hgt+dy] shl (mFontWdt[ch] shr 4);
+        end
+        else
+        begin
+          wrd := mFontBmp[ch*(hgt*2)+(dy*2)]+256*mFontBmp[ch*(hgt*2)+(dy*2)+1];
+          wrd := wrd shl (mFontWdt[ch] shr 4);
+          mFontBmp[ch*(hgt*2)+(dy*2)+0] := (wrd and $ff);
+          mFontBmp[ch*(hgt*2)+(dy*2)+1] := ((wrd shr 16) and $ff);
+        end;
+      end;
+    end;
   end
   else
   begin
-    if (awdtable = nil) then raise Exception.Create('internal error in font creation');
-    awdt := 0;
-    mFontWdt := awdtable;
+    FillChar(mFontWdt^, 256, wdt);
   end;
-  mName := aname;
-  mWidth := awdt;
-  mHeight := ahgt;
-  mBaseLine := ahgt-1; //FIXME
-  mFontBmp := afont;
-  mTexId := 0;
 end;
 
 
 destructor TGxBmpFont.Destroy ();
 begin
+  if (mFreeFontBmp) and (mFontBmp <> nil) then FreeMem(mFontBmp);
   if (mFreeFontWdt) and (mFontWdt <> nil) then FreeMem(mFontWdt);
   mName := '';
   mWidth := 0;
@@ -409,14 +452,91 @@ begin
   mFontBmp := nil;
   mFontWdt := nil;
   mFreeFontWdt := false;
+  mFreeFontBmp := false;
   mTexId := 0;
   inherited;
 end;
 
 
 procedure TGxBmpFont.oglCreateTexture ();
+const
+  TxWidth = 16*16;
+  TxHeight = 16*16;
+var
+  tex, tpp: PByte;
+  b: Byte;
+  cc: Integer;
+  x, y, dx, dy: Integer;
 begin
-  mTexId := createFontTexture(mFontBmp, mFontWdt, mHeight, (mWidth <= 0));
+  GetMem(tex, TxWidth*TxHeight*4);
+  FillChar(tex^, TxWidth*TxHeight*4, 0);
+
+  for cc := 0 to 255 do
+  begin
+    x := (cc mod 16)*16;
+    y := (cc div 16)*16;
+    for dy := 0 to mHeight-1 do
+    begin
+      if (mWidth <= 8) then b := mFontBmp[cc*mHeight+dy] else b := mFontBmp[cc*(mHeight*2)+(dy*2)+1];
+      //if prop then b := b shl (fontwdt[cc] shr 4);
+      tpp := tex+((y+dy)*(TxWidth*4))+x*4;
+      for dx := 0 to 7 do
+      begin
+        if ((b and $80) <> 0) then
+        begin
+          tpp^ := 255; Inc(tpp);
+          tpp^ := 255; Inc(tpp);
+          tpp^ := 255; Inc(tpp);
+          tpp^ := 255; Inc(tpp);
+        end
+        else
+        begin
+          tpp^ := 0; Inc(tpp);
+          tpp^ := 0; Inc(tpp);
+          tpp^ := 0; Inc(tpp);
+          tpp^ := 0; Inc(tpp);
+        end;
+        b := (b and $7f) shl 1;
+      end;
+      if (mWidth > 8) then
+      begin
+        b := mFontBmp[cc*(mHeight*2)+(dy*2)+0];
+        for dx := 0 to 7 do
+        begin
+          if ((b and $80) <> 0) then
+          begin
+            tpp^ := 255; Inc(tpp);
+            tpp^ := 255; Inc(tpp);
+            tpp^ := 255; Inc(tpp);
+            tpp^ := 255; Inc(tpp);
+          end
+          else
+          begin
+            tpp^ := 0; Inc(tpp);
+            tpp^ := 0; Inc(tpp);
+            tpp^ := 0; Inc(tpp);
+            tpp^ := 0; Inc(tpp);
+          end;
+          b := (b and $7f) shl 1;
+        end;
+      end;
+    end;
+  end;
+
+  glGenTextures(1, @mTexId);
+  if (mTexId = 0) then raise Exception.Create('can''t create FlexUI font texture');
+
+  glBindTexture(GL_TEXTURE_2D, mTexId);
+  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+
+  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TxWidth, TxHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, tex);
+  glFinish();
+
+  glBindTexture(GL_TEXTURE_2D, 0);
+  FreeMem(tex);
 end;
 
 
@@ -473,13 +593,13 @@ function TGxBmpFont.drawCharInterim (x, y: Integer; const ch: AnsiChar): Integer
 var
   tx, ty: Integer;
 begin
-  tx := (Integer(ch) mod 16)*8;
+  tx := (Integer(ch) mod 16)*16;
   ty := (Integer(ch) div 16)*16;
   glBegin(GL_QUADS);
-    glTexCoord2f((tx+0)/128.0, (ty+0)/256.0); glVertex2i(x+0, y+0); // top-left
-    glTexCoord2f((tx+8)/128.0, (ty+0)/256.0); glVertex2i(x+8, y+0); // top-right
-    glTexCoord2f((tx+8)/128.0, (ty+mHeight)/256.0); glVertex2i(x+8, y+mHeight); // bottom-right
-    glTexCoord2f((tx+0)/128.0, (ty+mHeight)/256.0); glVertex2i(x+0, y+mHeight); // bottom-left
+    glTexCoord2f((tx+0)/256.0, (ty+0)/256.0); glVertex2i(x+0, y+0); // top-left
+    glTexCoord2f((tx+mWidth)/256.0, (ty+0)/256.0); glVertex2i(x+mWidth, y+0); // top-right
+    glTexCoord2f((tx+mWidth)/256.0, (ty+mHeight)/256.0); glVertex2i(x+mWidth, y+mHeight); // bottom-right
+    glTexCoord2f((tx+0)/256.0, (ty+mHeight)/256.0); glVertex2i(x+0, y+mHeight); // bottom-left
   glEnd();
   result := (mFontWdt[Byte(ch)] and $0f);
 end;
@@ -514,7 +634,7 @@ end;
 // ////////////////////////////////////////////////////////////////////////// //
 var
   fontList: array of TGxBmpFont = nil;
-  defaultFontName: AnsiString = 'dos';
+  defaultFontName: AnsiString = 'win14';
 
 
 function strEquCI (const s0, s1: AnsiString): Boolean;
@@ -555,6 +675,7 @@ begin
 end;
 
 
+{
 procedure deleteFonts ();
 var
   f: Integer;
@@ -562,22 +683,55 @@ begin
   for f := 0 to High(fontList) do freeAndNil(fontList[f]);
   fontList := nil;
 end;
+}
 
 
-procedure createFonts ();
+procedure fuiGfxLoadFont (const fontname: AnsiString; const fontFile: AnsiString; proportional: Boolean=false);
+var
+  st: TStream;
+begin
+  if (Length(fontname) = 0) then raise Exception.Create('FlexUI: cannot load nameless font '''+fontFile+'''');
+  st := fuiOpenFile(fontFile);
+  if (st = nil) then raise Exception.Create('FlexUI: cannot load font '''+fontFile+'''');
+  try
+    fuiGfxLoadFont(fontname, st, proportional);
+  except on e: Exception do
+    begin
+      writeln('FlexUI font loadin error: ', e.message);
+      FreeAndNil(st);
+      raise Exception.Create('FlexUI: cannot load font '''+fontFile+'''');
+    end;
+  else
+    raise;
+  end;
+  FreeAndNil(st);
+end;
+
+
+procedure fuiGfxLoadFont (const fontname: AnsiString; st: TStream; proportional: Boolean=false);
+var
+  fnt: TGxBmpFont = nil;
+  f: Integer;
 begin
-  deleteFonts();
-  SetLength(fontList, 10);
-  fontList[0] := TGxBmpFont.Create('dos', 8, 8, @kgiFont8[0], @kgiFont8PropWidth[0]);
-  fontList[1] := TGxBmpFont.Create('dos-prop', 0, 8, @kgiFont8[0], @kgiFont8PropWidth[0]);
-  fontList[2] := TGxBmpFont.Create('msx', 6, 8, @kgiFont6[0], @kgiFont6PropWidth[0]);
-  fontList[3] := TGxBmpFont.Create('msx-prop', 0, 8, @kgiFont6[0], @kgiFont6PropWidth[0]);
-  fontList[4] := TGxBmpFont.Create('win8', 8, 8, @kgiWFont8[0], @kgiWFont8Wdt[0]);
-  fontList[5] := TGxBmpFont.Create('win8-prop', 0, 8, @kgiWFont8[0], @kgiWFont8Wdt[0]);
-  fontList[6] := TGxBmpFont.Create('win14', 8, 14, @kgiFont14[0], @kgiFont14Wdt[0]);
-  fontList[7] := TGxBmpFont.Create('win14-prop', 0, 14, @kgiFont14[0], @kgiFont14Wdt[0]);
-  fontList[8] := TGxBmpFont.Create('win16', 8, 16, @kgiFont16[0], @kgiFont16Wdt[0]);
-  fontList[9] := TGxBmpFont.Create('win16-prop', 0, 16, @kgiFont16[0], @kgiFont16Wdt[0]);
+  if (Length(fontname) = 0) then raise Exception.Create('FlexUI: cannot load nameless font');
+  fnt := TGxBmpFont.Create(fontname, st, proportional);
+  try
+    for f := 0 to High(fontList) do
+    begin
+      if (strEquCI(fontList[f].name, fontname)) then
+      begin
+        if (fontList[f].mTexId <> 0) then raise Exception.Create('FlexUI: cannot reload generated font named '''+fontname+'''');
+        FreeAndNil(fontList[f]);
+        fontList[f] := fnt;
+        exit;
+      end;
+    end;
+    SetLength(fontList, Length(fontList)+1);
+    fontList[High(fontList)] := fnt;
+  except
+    FreeAndNil(fnt);
+    raise;
+  end;
 end;
 
 
@@ -1222,7 +1376,7 @@ end;
 // ////////////////////////////////////////////////////////////////////////// //
 initialization
   savedGLState := TSavedGLState.Create(false);
-  createFonts();
+  //createFonts();
   //winFocusCB := onWinFocus;
   //winBlurCB := onWinBlur;
   //prerenderFrameCB := onPreRender;
index 1884c9f1e3114eec209c8f4b31d8080f5a5f48cc..83db7f1e82386d982e2f08f9925bb8d09040876a 100644 (file)
@@ -126,7 +126,7 @@ begin
     //glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, bclr.ptr);
 
     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, curTexWidth, curTexHeight, 0, GL_RGBA{gltt}, GL_UNSIGNED_BYTE, tex);
-    glFlush();
+    glFinish();
   finally
     FreeMem(tex);
   end;
diff --git a/src/flexui/fui_gfx_gl_fonts.inc b/src/flexui/fui_gfx_gl_fonts.inc
deleted file mode 100644 (file)
index 4bda11d..0000000
+++ /dev/null
@@ -1,700 +0,0 @@
-(* coded by Ketmar // Invisible Vector <ketmar@ketmar.no-ip.org>
- * Understanding is not required. Only obedience.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *)
-// ////////////////////////////////////////////////////////////////////////// //
-// fonts
-const kgiFont6: array[0..256*8-1] of Byte  = (
-$00,$00,$00,$00,$00,$00,$00,$00,$3c,$42,$a5,$81,$a5,$99,$42,$3c,$3c,$7e,$db,$ff,$ff,$db,$66,$3c,$6c,$fe,
-$fe,$fe,$7c,$38,$10,$00,$10,$38,$7c,$fe,$7c,$38,$10,$00,$10,$38,$54,$fe,$54,$10,$38,$00,$10,$38,$7c,$fe,
-$fe,$10,$38,$00,$00,$00,$00,$30,$30,$00,$00,$00,$ff,$ff,$ff,$e7,$e7,$ff,$ff,$ff,$38,$44,$82,$82,$82,$44,
-$38,$00,$c7,$bb,$7d,$7d,$7d,$bb,$c7,$ff,$0f,$03,$05,$79,$88,$88,$88,$70,$38,$44,$44,$44,$38,$10,$7c,$10,
-$30,$28,$24,$24,$28,$20,$e0,$c0,$3c,$24,$3c,$24,$24,$e4,$dc,$18,$10,$54,$38,$ee,$38,$54,$10,$00,$10,$10,
-$10,$7c,$10,$10,$10,$10,$10,$10,$10,$ff,$00,$00,$00,$00,$00,$00,$00,$ff,$10,$10,$10,$10,$10,$10,$10,$f0,
-$10,$10,$10,$10,$10,$10,$10,$1f,$10,$10,$10,$10,$10,$10,$10,$ff,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,
-$10,$10,$00,$00,$00,$ff,$00,$00,$00,$00,$00,$00,$00,$1f,$10,$10,$10,$10,$00,$00,$00,$f0,$10,$10,$10,$10,
-$10,$10,$10,$1f,$00,$00,$00,$00,$10,$10,$10,$f0,$00,$00,$00,$00,$81,$42,$24,$18,$18,$24,$42,$81,$01,$02,
-$04,$08,$10,$20,$40,$80,$80,$40,$20,$10,$08,$04,$02,$01,$00,$10,$10,$ff,$10,$10,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$20,$20,$20,$20,$00,$00,$20,$00,$50,$50,$50,$00,$00,$00,$00,$00,$50,$50,$f8,$50,$f8,$50,
-$50,$00,$20,$78,$a0,$70,$28,$f0,$20,$00,$c0,$c8,$10,$20,$40,$98,$18,$00,$40,$a0,$40,$a8,$90,$98,$60,$00,
-$10,$20,$40,$00,$00,$00,$00,$00,$10,$20,$40,$40,$40,$20,$10,$00,$40,$20,$10,$10,$10,$20,$40,$00,$88,$50,
-$20,$f8,$20,$50,$88,$00,$00,$20,$20,$f8,$20,$20,$00,$00,$00,$00,$00,$00,$00,$20,$20,$40,$00,$00,$00,$78,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$60,$60,$00,$00,$00,$08,$10,$20,$40,$80,$00,$70,$88,$98,$a8,$c8,$88,
-$70,$00,$20,$60,$a0,$20,$20,$20,$f8,$00,$70,$88,$08,$10,$60,$80,$f8,$00,$70,$88,$08,$30,$08,$88,$70,$00,
-$10,$30,$50,$90,$f8,$10,$10,$00,$f8,$80,$e0,$10,$08,$10,$e0,$00,$30,$40,$80,$f0,$88,$88,$70,$00,$f8,$88,
-$10,$20,$20,$20,$20,$00,$70,$88,$88,$70,$88,$88,$70,$00,$70,$88,$88,$78,$08,$10,$60,$00,$00,$00,$20,$00,
-$00,$20,$00,$00,$00,$00,$20,$00,$00,$20,$20,$40,$18,$30,$60,$c0,$60,$30,$18,$00,$00,$00,$f8,$00,$f8,$00,
-$00,$00,$c0,$60,$30,$18,$30,$60,$c0,$00,$70,$88,$08,$10,$20,$00,$20,$00,$70,$88,$08,$68,$a8,$a8,$70,$00,
-$20,$50,$88,$88,$f8,$88,$88,$00,$f0,$48,$48,$70,$48,$48,$f0,$00,$30,$48,$80,$80,$80,$48,$30,$00,$e0,$50,
-$48,$48,$48,$50,$e0,$00,$f8,$80,$80,$f0,$80,$80,$f8,$00,$f8,$80,$80,$f0,$80,$80,$80,$00,$70,$88,$80,$b8,
-$88,$88,$70,$00,$88,$88,$88,$f8,$88,$88,$88,$00,$70,$20,$20,$20,$20,$20,$70,$00,$38,$10,$10,$10,$90,$90,
-$60,$00,$88,$90,$a0,$c0,$a0,$90,$88,$00,$80,$80,$80,$80,$80,$80,$f8,$00,$88,$d8,$a8,$a8,$88,$88,$88,$00,
-$88,$c8,$c8,$a8,$98,$98,$88,$00,$70,$88,$88,$88,$88,$88,$70,$00,$f0,$88,$88,$f0,$80,$80,$80,$00,$70,$88,
-$88,$88,$a8,$90,$68,$00,$f0,$88,$88,$f0,$a0,$90,$88,$00,$70,$88,$80,$70,$08,$88,$70,$00,$f8,$20,$20,$20,
-$20,$20,$20,$00,$88,$88,$88,$88,$88,$88,$70,$00,$88,$88,$88,$88,$50,$50,$20,$00,$88,$88,$88,$a8,$a8,$d8,
-$88,$00,$88,$88,$50,$20,$50,$88,$88,$00,$88,$88,$88,$70,$20,$20,$20,$00,$f8,$08,$10,$20,$40,$80,$f8,$00,
-$70,$40,$40,$40,$40,$40,$70,$00,$00,$00,$80,$40,$20,$10,$08,$00,$70,$10,$10,$10,$10,$10,$70,$00,$20,$50,
-$88,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$00,$40,$20,$10,$00,$00,$00,$00,$00,$00,$00,$70,$08,
-$78,$88,$78,$00,$80,$80,$b0,$c8,$88,$c8,$b0,$00,$00,$00,$70,$88,$80,$88,$70,$00,$08,$08,$68,$98,$88,$98,
-$68,$00,$00,$00,$70,$88,$f8,$80,$70,$00,$10,$28,$20,$f8,$20,$20,$20,$00,$00,$00,$68,$98,$98,$68,$08,$70,
-$80,$80,$f0,$88,$88,$88,$88,$00,$20,$00,$60,$20,$20,$20,$70,$00,$10,$00,$30,$10,$10,$10,$90,$60,$40,$40,
-$48,$50,$60,$50,$48,$00,$60,$20,$20,$20,$20,$20,$70,$00,$00,$00,$d0,$a8,$a8,$a8,$a8,$00,$00,$00,$b0,$c8,
-$88,$88,$88,$00,$00,$00,$70,$88,$88,$88,$70,$00,$00,$00,$b0,$c8,$c8,$b0,$80,$80,$00,$00,$68,$98,$98,$68,
-$08,$08,$00,$00,$b0,$c8,$80,$80,$80,$00,$00,$00,$78,$80,$f0,$08,$f0,$00,$40,$40,$f0,$40,$40,$48,$30,$00,
-$00,$00,$90,$90,$90,$90,$68,$00,$00,$00,$88,$88,$88,$50,$20,$00,$00,$00,$88,$a8,$a8,$a8,$50,$00,$00,$00,
-$88,$50,$20,$50,$88,$00,$00,$00,$88,$88,$98,$68,$08,$70,$00,$00,$f8,$10,$20,$40,$f8,$00,$18,$20,$20,$40,
-$20,$20,$18,$00,$20,$20,$20,$00,$20,$20,$20,$00,$c0,$20,$20,$10,$20,$20,$c0,$00,$40,$a8,$10,$00,$00,$00,
-$00,$00,$00,$00,$20,$50,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$ff,$f0,$f0,$f0,$f0,$0f,$0f,$0f,$0f,
-$00,$00,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3c,$3c,$00,$00,$00,$ff,$ff,
-$ff,$ff,$ff,$ff,$00,$00,$c0,$c0,$c0,$c0,$c0,$c0,$c0,$c0,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$fc,$fc,$fc,$fc,
-$fc,$fc,$fc,$fc,$03,$03,$03,$03,$03,$03,$03,$03,$3f,$3f,$3f,$3f,$3f,$3f,$3f,$3f,$11,$22,$44,$88,$11,$22,
-$44,$88,$88,$44,$22,$11,$88,$44,$22,$11,$fe,$7c,$38,$10,$00,$00,$00,$00,$00,$00,$00,$00,$10,$38,$7c,$fe,
-$80,$c0,$e0,$f0,$e0,$c0,$80,$00,$01,$03,$07,$0f,$07,$03,$01,$00,$ff,$7e,$3c,$18,$18,$3c,$7e,$ff,$81,$c3,
-$e7,$ff,$ff,$e7,$c3,$81,$f0,$f0,$f0,$f0,$00,$00,$00,$00,$00,$00,$00,$00,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,
-$00,$00,$00,$00,$00,$00,$00,$00,$f0,$f0,$f0,$f0,$33,$33,$cc,$cc,$33,$33,$cc,$cc,$00,$20,$20,$50,$50,$88,
-$f8,$00,$20,$20,$70,$20,$70,$20,$20,$00,$00,$00,$00,$50,$88,$a8,$50,$00,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,
-$00,$00,$00,$00,$ff,$ff,$ff,$ff,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$ff,$ff,
-$ff,$ff,$00,$00,$00,$00,$00,$00,$68,$90,$90,$90,$68,$00,$30,$48,$48,$70,$48,$48,$70,$c0,$f8,$88,$80,$80,
-$80,$80,$80,$00,$00,$50,$70,$88,$f8,$80,$70,$00,$00,$00,$78,$80,$f0,$80,$78,$00,$00,$00,$78,$90,$90,$90,
-$60,$00,$20,$00,$60,$20,$20,$20,$70,$00,$50,$00,$70,$20,$20,$20,$70,$00,$f8,$20,$70,$a8,$a8,$70,$20,$f8,
-$20,$50,$88,$f8,$88,$50,$20,$00,$70,$88,$88,$88,$50,$50,$d8,$00,$30,$40,$40,$20,$50,$50,$50,$20,$00,$00,
-$00,$50,$a8,$a8,$50,$00,$08,$70,$a8,$a8,$a8,$70,$80,$00,$38,$40,$80,$f8,$80,$40,$38,$00,$70,$88,$88,$88,
-$88,$88,$88,$00,$00,$f8,$00,$f8,$00,$f8,$00,$00,$20,$20,$f8,$20,$20,$00,$f8,$00,$c0,$30,$08,$30,$c0,$00,
-$f8,$00,$50,$f8,$80,$f0,$80,$80,$f8,$00,$78,$80,$80,$f0,$80,$80,$78,$00,$20,$20,$20,$20,$20,$20,$a0,$40,
-$70,$20,$20,$20,$20,$20,$70,$00,$50,$70,$20,$20,$20,$20,$70,$00,$00,$18,$24,$24,$18,$00,$00,$00,$00,$30,
-$78,$78,$30,$00,$00,$00,$00,$00,$00,$00,$30,$00,$00,$00,$3e,$20,$20,$20,$a0,$60,$20,$00,$a0,$50,$50,$50,
-$00,$00,$00,$00,$40,$a0,$20,$40,$e0,$00,$00,$00,$00,$38,$38,$38,$38,$38,$38,$00,$3c,$42,$99,$a1,$a1,$99,
-$42,$3c,$00,$00,$90,$a8,$e8,$a8,$90,$00,$00,$00,$60,$10,$70,$90,$68,$00,$00,$00,$f0,$80,$f0,$88,$f0,$00,
-$00,$00,$90,$90,$90,$f8,$08,$00,$00,$00,$30,$50,$50,$70,$88,$00,$00,$00,$70,$88,$f8,$80,$70,$00,$00,$20,
-$70,$a8,$a8,$70,$20,$00,$00,$00,$78,$48,$40,$40,$40,$00,$00,$00,$88,$50,$20,$50,$88,$00,$00,$00,$88,$98,
-$a8,$c8,$88,$00,$00,$50,$20,$00,$98,$a8,$c8,$00,$00,$00,$90,$a0,$c0,$a0,$90,$00,$00,$00,$38,$28,$28,$48,
-$88,$00,$00,$00,$88,$d8,$a8,$88,$88,$00,$00,$00,$88,$88,$f8,$88,$88,$00,$00,$00,$70,$88,$88,$88,$70,$00,
-$00,$00,$78,$48,$48,$48,$48,$00,$00,$00,$78,$88,$78,$28,$48,$00,$00,$00,$f0,$88,$f0,$80,$80,$00,$00,$00,
-$78,$80,$80,$80,$78,$00,$00,$00,$f8,$20,$20,$20,$20,$00,$00,$00,$88,$50,$20,$40,$80,$00,$00,$00,$a8,$70,
-$20,$70,$a8,$00,$00,$00,$f0,$48,$70,$48,$f0,$00,$00,$00,$40,$40,$70,$48,$70,$00,$00,$00,$88,$88,$c8,$a8,
-$c8,$00,$00,$00,$f0,$08,$70,$08,$f0,$00,$00,$00,$a8,$a8,$a8,$a8,$f8,$00,$00,$00,$70,$88,$38,$88,$70,$00,
-$00,$00,$a8,$a8,$a8,$f8,$08,$00,$00,$00,$48,$48,$78,$08,$08,$00,$00,$00,$c0,$40,$70,$48,$70,$00,$90,$a8,
-$a8,$e8,$a8,$a8,$90,$00,$20,$50,$88,$88,$f8,$88,$88,$00,$f8,$88,$80,$f0,$88,$88,$f0,$00,$90,$90,$90,$90,
-$90,$f8,$08,$00,$38,$28,$28,$48,$48,$f8,$88,$00,$f8,$80,$80,$f0,$80,$80,$f8,$00,$20,$70,$a8,$a8,$a8,$70,
-$20,$00,$f8,$88,$88,$80,$80,$80,$80,$00,$88,$88,$50,$20,$50,$88,$88,$00,$88,$88,$98,$a8,$c8,$88,$88,$00,
-$50,$20,$88,$98,$a8,$c8,$88,$00,$88,$90,$a0,$c0,$a0,$90,$88,$00,$18,$28,$48,$48,$48,$48,$88,$00,$88,$d8,
-$a8,$a8,$88,$88,$88,$00,$88,$88,$88,$f8,$88,$88,$88,$00,$70,$88,$88,$88,$88,$88,$70,$00,$f8,$88,$88,$88,
-$88,$88,$88,$00,$78,$88,$88,$78,$28,$48,$88,$00,$f0,$88,$88,$f0,$80,$80,$80,$00,$70,$88,$80,$80,$80,$88,
-$70,$00,$f8,$20,$20,$20,$20,$20,$20,$00,$88,$88,$88,$50,$20,$40,$80,$00,$a8,$a8,$70,$20,$70,$a8,$a8,$00,
-$f0,$48,$48,$70,$48,$48,$f0,$00,$80,$80,$80,$f0,$88,$88,$f0,$00,$88,$88,$88,$c8,$a8,$a8,$c8,$00,$f0,$08,
-$08,$30,$08,$08,$f0,$00,$a8,$a8,$a8,$a8,$a8,$a8,$f8,$00,$70,$88,$08,$78,$08,$88,$70,$00,$a8,$a8,$a8,$a8,
-$a8,$f8,$08,$00,$88,$88,$88,$88,$78,$08,$08,$00,$c0,$40,$40,$70,$48,$48,$70,$00
-);
-
-const kgiFont8: array[0..256*8-1] of Byte  = (
-$00,$00,$00,$00,$00,$00,$00,$00,$7e,$81,$a5,$81,$bd,$99,$81,$7e,$7e,$ff,$db,$ff,$c3,$e7,$ff,$7e,$6c,$fe,
-$fe,$fe,$7c,$38,$10,$00,$10,$38,$7c,$fe,$7c,$38,$10,$00,$38,$7c,$38,$fe,$fe,$d6,$10,$38,$10,$10,$38,$7c,
-$fe,$7c,$10,$38,$00,$00,$18,$3c,$3c,$18,$00,$00,$ff,$ff,$e7,$c3,$c3,$e7,$ff,$ff,$00,$3c,$66,$42,$42,$66,
-$3c,$00,$ff,$c3,$99,$bd,$bd,$99,$c3,$ff,$0f,$07,$0f,$7d,$cc,$cc,$cc,$78,$3c,$66,$66,$66,$3c,$18,$7e,$18,
-$3f,$33,$3f,$30,$30,$70,$f0,$e0,$7f,$63,$7f,$63,$63,$67,$e6,$c0,$99,$5a,$3c,$e7,$e7,$3c,$5a,$99,$80,$e0,
-$f8,$fe,$f8,$e0,$80,$00,$02,$0e,$3e,$fe,$3e,$0e,$02,$00,$18,$3c,$7e,$18,$18,$7e,$3c,$18,$66,$66,$66,$66,
-$66,$00,$66,$00,$7f,$db,$db,$7b,$1b,$1b,$1b,$00,$7e,$c3,$78,$cc,$cc,$78,$8c,$f8,$00,$00,$00,$00,$7e,$7e,
-$7e,$00,$18,$3c,$7e,$18,$7e,$3c,$18,$ff,$18,$3c,$7e,$18,$18,$18,$18,$00,$18,$18,$18,$18,$7e,$3c,$18,$00,
-$00,$18,$0c,$fe,$0c,$18,$00,$00,$00,$30,$60,$fe,$60,$30,$00,$00,$00,$00,$c0,$c0,$c0,$fe,$00,$00,$00,$24,
-$66,$ff,$66,$24,$00,$00,$00,$18,$3c,$7e,$ff,$ff,$00,$00,$00,$ff,$ff,$7e,$3c,$18,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$30,$78,$78,$30,$30,$00,$30,$00,$6c,$6c,$6c,$00,$00,$00,$00,$00,$6c,$6c,$fe,$6c,$fe,$6c,
-$6c,$00,$30,$7c,$c0,$78,$0c,$f8,$30,$00,$00,$c6,$cc,$18,$30,$66,$c6,$00,$38,$6c,$38,$76,$dc,$cc,$76,$00,
-$60,$60,$c0,$00,$00,$00,$00,$00,$18,$30,$60,$60,$60,$30,$18,$00,$60,$30,$18,$18,$18,$30,$60,$00,$00,$66,
-$3c,$ff,$3c,$66,$00,$00,$00,$30,$30,$fc,$30,$30,$00,$00,$00,$00,$00,$00,$00,$70,$30,$60,$00,$00,$00,$fc,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$30,$30,$00,$06,$0c,$18,$30,$60,$c0,$80,$00,$78,$cc,$dc,$fc,$ec,$cc,
-$78,$00,$30,$f0,$30,$30,$30,$30,$fc,$00,$78,$cc,$0c,$38,$60,$cc,$fc,$00,$78,$cc,$0c,$38,$0c,$cc,$78,$00,
-$1c,$3c,$6c,$cc,$fe,$0c,$0c,$00,$fc,$c0,$f8,$0c,$0c,$cc,$78,$00,$38,$60,$c0,$f8,$cc,$cc,$78,$00,$fc,$cc,
-$0c,$18,$30,$60,$60,$00,$78,$cc,$cc,$78,$cc,$cc,$78,$00,$78,$cc,$cc,$7c,$0c,$18,$70,$00,$00,$00,$30,$30,
-$00,$30,$30,$00,$00,$00,$30,$30,$00,$70,$30,$60,$18,$30,$60,$c0,$60,$30,$18,$00,$00,$00,$fc,$00,$fc,$00,
-$00,$00,$60,$30,$18,$0c,$18,$30,$60,$00,$78,$cc,$0c,$18,$30,$00,$30,$00,$7c,$c6,$de,$de,$de,$c0,$78,$00,
-$30,$78,$cc,$cc,$fc,$cc,$cc,$00,$fc,$66,$66,$7c,$66,$66,$fc,$00,$3c,$66,$c0,$c0,$c0,$66,$3c,$00,$fc,$6c,
-$66,$66,$66,$6c,$fc,$00,$fe,$62,$68,$78,$68,$62,$fe,$00,$fe,$62,$68,$78,$68,$60,$f0,$00,$3c,$66,$c0,$c0,
-$ce,$66,$3e,$00,$cc,$cc,$cc,$fc,$cc,$cc,$cc,$00,$78,$30,$30,$30,$30,$30,$78,$00,$1e,$0c,$0c,$0c,$cc,$cc,
-$78,$00,$e6,$66,$6c,$78,$6c,$66,$e6,$00,$f0,$60,$60,$60,$62,$66,$fe,$00,$c6,$ee,$fe,$d6,$c6,$c6,$c6,$00,
-$c6,$e6,$f6,$de,$ce,$c6,$c6,$00,$38,$6c,$c6,$c6,$c6,$6c,$38,$00,$fc,$66,$66,$7c,$60,$60,$f0,$00,$78,$cc,
-$cc,$cc,$dc,$78,$1c,$00,$fc,$66,$66,$7c,$78,$6c,$e6,$00,$78,$cc,$e0,$38,$1c,$cc,$78,$00,$fc,$b4,$30,$30,
-$30,$30,$78,$00,$cc,$cc,$cc,$cc,$cc,$cc,$fc,$00,$cc,$cc,$cc,$cc,$cc,$78,$30,$00,$c6,$c6,$c6,$d6,$fe,$ee,
-$c6,$00,$c6,$c6,$6c,$38,$6c,$c6,$c6,$00,$cc,$cc,$cc,$78,$30,$30,$78,$00,$fe,$cc,$98,$30,$62,$c6,$fe,$00,
-$78,$60,$60,$60,$60,$60,$78,$00,$c0,$60,$30,$18,$0c,$06,$02,$00,$78,$18,$18,$18,$18,$18,$78,$00,$10,$38,
-$6c,$c6,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$30,$30,$18,$00,$00,$00,$00,$00,$00,$00,$78,$0c,
-$7c,$cc,$76,$00,$e0,$60,$7c,$66,$66,$66,$bc,$00,$00,$00,$78,$cc,$c0,$cc,$78,$00,$1c,$0c,$0c,$7c,$cc,$cc,
-$76,$00,$00,$00,$78,$cc,$fc,$c0,$78,$00,$38,$6c,$60,$f0,$60,$60,$f0,$00,$00,$00,$76,$cc,$cc,$7c,$0c,$f8,
-$e0,$60,$6c,$76,$66,$66,$e6,$00,$30,$00,$70,$30,$30,$30,$78,$00,$18,$00,$78,$18,$18,$18,$d8,$70,$e0,$60,
-$66,$6c,$78,$6c,$e6,$00,$70,$30,$30,$30,$30,$30,$78,$00,$00,$00,$ec,$fe,$d6,$c6,$c6,$00,$00,$00,$f8,$cc,
-$cc,$cc,$cc,$00,$00,$00,$78,$cc,$cc,$cc,$78,$00,$00,$00,$dc,$66,$66,$7c,$60,$f0,$00,$00,$76,$cc,$cc,$7c,
-$0c,$1e,$00,$00,$d8,$6c,$6c,$60,$f0,$00,$00,$00,$7c,$c0,$78,$0c,$f8,$00,$10,$30,$7c,$30,$30,$34,$18,$00,
-$00,$00,$cc,$cc,$cc,$cc,$76,$00,$00,$00,$cc,$cc,$cc,$78,$30,$00,$00,$00,$c6,$c6,$d6,$fe,$6c,$00,$00,$00,
-$c6,$6c,$38,$6c,$c6,$00,$00,$00,$cc,$cc,$cc,$7c,$0c,$f8,$00,$00,$fc,$98,$30,$64,$fc,$00,$1c,$30,$30,$e0,
-$30,$30,$1c,$00,$18,$18,$18,$00,$18,$18,$18,$00,$e0,$30,$30,$1c,$30,$30,$e0,$00,$76,$dc,$00,$00,$00,$00,
-$00,$00,$10,$38,$6c,$c6,$c6,$c6,$fe,$00,$78,$cc,$c0,$cc,$78,$18,$0c,$78,$00,$cc,$00,$cc,$cc,$cc,$7e,$00,
-$1c,$00,$78,$cc,$fc,$c0,$78,$00,$7e,$c3,$3c,$06,$3e,$66,$3f,$00,$cc,$00,$78,$0c,$7c,$cc,$7e,$00,$e0,$00,
-$78,$0c,$7c,$cc,$7e,$00,$30,$30,$78,$0c,$7c,$cc,$7e,$00,$00,$00,$7c,$c0,$c0,$7c,$06,$3c,$7e,$c3,$3c,$66,
-$7e,$60,$3c,$00,$cc,$00,$78,$cc,$fc,$c0,$78,$00,$e0,$00,$78,$cc,$fc,$c0,$78,$00,$cc,$00,$70,$30,$30,$30,
-$78,$00,$7c,$c6,$38,$18,$18,$18,$3c,$00,$e0,$00,$70,$30,$30,$30,$78,$00,$cc,$30,$78,$cc,$cc,$fc,$cc,$00,
-$30,$30,$00,$78,$cc,$fc,$cc,$00,$1c,$00,$fc,$60,$78,$60,$fc,$00,$00,$00,$7f,$0c,$7f,$cc,$7f,$00,$3e,$6c,
-$cc,$fe,$cc,$cc,$ce,$00,$78,$cc,$00,$78,$cc,$cc,$78,$00,$00,$cc,$00,$78,$cc,$cc,$78,$00,$00,$e0,$00,$78,
-$cc,$cc,$78,$00,$78,$cc,$00,$cc,$cc,$cc,$7e,$00,$00,$e0,$00,$cc,$cc,$cc,$7e,$00,$00,$cc,$00,$cc,$cc,$fc,
-$0c,$f8,$c6,$38,$7c,$c6,$c6,$7c,$38,$00,$cc,$00,$cc,$cc,$cc,$cc,$78,$00,$18,$18,$7e,$c0,$c0,$7e,$18,$18,
-$38,$6c,$64,$f0,$60,$e6,$fc,$00,$cc,$cc,$78,$fc,$30,$fc,$30,$00,$f0,$d8,$d8,$f4,$cc,$de,$cc,$0e,$0e,$1b,
-$18,$7e,$18,$18,$d8,$70,$1c,$00,$78,$0c,$7c,$cc,$7e,$00,$38,$00,$70,$30,$30,$30,$78,$00,$00,$1c,$00,$78,
-$cc,$cc,$78,$00,$00,$1c,$00,$cc,$cc,$cc,$7e,$00,$00,$f8,$00,$f8,$cc,$cc,$cc,$00,$fc,$00,$cc,$ec,$fc,$dc,
-$cc,$00,$3c,$6c,$6c,$3e,$00,$7e,$00,$00,$3c,$66,$66,$3c,$00,$7e,$00,$00,$30,$00,$30,$60,$c0,$cc,$78,$00,
-$00,$00,$00,$fc,$c0,$c0,$00,$00,$00,$00,$00,$fc,$0c,$0c,$00,$00,$c6,$cc,$d8,$3e,$63,$ce,$98,$1f,$c6,$cc,
-$d8,$f3,$67,$cf,$9f,$03,$00,$18,$00,$18,$18,$3c,$3c,$18,$00,$33,$66,$cc,$66,$33,$00,$00,$00,$cc,$66,$33,
-$66,$cc,$00,$00,$22,$88,$22,$88,$22,$88,$22,$88,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$dc,$76,$dc,$76,$dc,$76,
-$dc,$76,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$f8,$18,$18,$18,$18,$18,$f8,$18,$f8,$18,$18,$18,
-$36,$36,$36,$36,$f6,$36,$36,$36,$00,$00,$00,$00,$fe,$36,$36,$36,$00,$00,$f8,$18,$f8,$18,$18,$18,$36,$36,
-$f6,$06,$f6,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$00,$00,$fe,$06,$f6,$36,$36,$36,$36,$36,$f6,$06,
-$fe,$00,$00,$00,$36,$36,$36,$36,$fe,$00,$00,$00,$18,$18,$f8,$18,$f8,$00,$00,$00,$00,$00,$00,$00,$f8,$18,
-$18,$18,$18,$18,$18,$18,$1f,$00,$00,$00,$18,$18,$18,$18,$ff,$00,$00,$00,$00,$00,$00,$00,$ff,$18,$18,$18,
-$18,$18,$18,$18,$1f,$18,$18,$18,$00,$00,$00,$00,$ff,$00,$00,$00,$18,$18,$18,$18,$ff,$18,$18,$18,$18,$18,
-$1f,$18,$1f,$18,$18,$18,$36,$36,$36,$36,$37,$36,$36,$36,$36,$36,$37,$30,$3f,$00,$00,$00,$00,$00,$3f,$30,
-$37,$36,$36,$36,$36,$36,$f7,$00,$ff,$00,$00,$00,$00,$00,$ff,$00,$f7,$36,$36,$36,$36,$36,$37,$30,$37,$36,
-$36,$36,$00,$00,$ff,$00,$ff,$00,$00,$00,$36,$36,$f7,$00,$f7,$36,$36,$36,$18,$18,$ff,$00,$ff,$00,$00,$00,
-$36,$36,$36,$36,$ff,$00,$00,$00,$00,$00,$ff,$00,$ff,$18,$18,$18,$00,$00,$00,$00,$ff,$36,$36,$36,$36,$36,
-$36,$36,$3f,$00,$00,$00,$18,$18,$1f,$18,$1f,$00,$00,$00,$00,$00,$1f,$18,$1f,$18,$18,$18,$00,$00,$00,$00,
-$3f,$36,$36,$36,$36,$36,$36,$36,$f7,$36,$36,$36,$18,$18,$ff,$00,$ff,$18,$18,$18,$18,$18,$18,$18,$f8,$00,
-$00,$00,$00,$00,$00,$00,$1f,$18,$18,$18,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$00,$00,$00,$00,$ff,$ff,$ff,$ff,
-$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$ff,$ff,$ff,$ff,$00,$00,$00,$00,$00,$00,
-$76,$dc,$c8,$dc,$76,$00,$00,$78,$cc,$f8,$cc,$f8,$c0,$c0,$00,$fe,$c6,$c0,$c0,$c0,$c0,$00,$00,$fe,$6c,$6c,
-$6c,$6c,$6c,$00,$fe,$66,$30,$18,$30,$66,$fe,$00,$00,$00,$7e,$cc,$cc,$cc,$78,$00,$00,$66,$66,$66,$66,$7c,
-$60,$c0,$00,$76,$dc,$18,$18,$18,$18,$00,$fc,$30,$78,$cc,$cc,$78,$30,$fc,$38,$6c,$c6,$fe,$c6,$6c,$38,$00,
-$38,$6c,$c6,$c6,$6c,$6c,$ee,$00,$1c,$30,$18,$7c,$cc,$cc,$78,$00,$00,$00,$7e,$db,$db,$7e,$00,$00,$06,$0c,
-$7e,$db,$db,$7e,$60,$c0,$3c,$60,$c0,$fc,$c0,$60,$3c,$00,$78,$cc,$cc,$cc,$cc,$cc,$cc,$00,$00,$fc,$00,$fc,
-$00,$fc,$00,$00,$30,$30,$fc,$30,$30,$00,$fc,$00,$60,$30,$18,$30,$60,$00,$fc,$00,$18,$30,$60,$30,$18,$00,
-$fc,$00,$0e,$1b,$1b,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$d8,$d8,$70,$30,$30,$00,$fc,$00,$30,$30,$00,
-$00,$72,$9c,$00,$72,$9c,$00,$00,$38,$6c,$6c,$38,$00,$00,$00,$00,$00,$00,$00,$18,$18,$00,$00,$00,$00,$00,
-$00,$00,$18,$00,$00,$00,$0f,$0c,$0c,$0c,$ec,$6c,$3c,$1c,$78,$6c,$6c,$6c,$6c,$00,$00,$00,$78,$0c,$38,$60,
-$7c,$00,$00,$00,$00,$00,$3c,$3c,$3c,$3c,$00,$00,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
-);
-
-const kgiFont6PropWidth: array[0..256-1] of Byte = (
-  $08,$08,$08,$07,$07,$07,$07,$04,$08,$07,$08,$08,$06,$06,$06,$07,
-  $06,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,
-  $85,$21,$13,$05,$05,$05,$05,$13,$13,$13,$05,$05,$12,$14,$12,$05,
-  $05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$21,$12,$05,$05,$05,$05,
-  $05,$05,$05,$05,$05,$05,$05,$05,$05,$13,$05,$05,$05,$05,$05,$05,
-  $05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$13,$05,$13,$05,$05,
-  $13,$05,$05,$05,$05,$05,$05,$05,$05,$13,$04,$14,$13,$05,$05,$05,
-  $05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$14,$21,$04,$05,$08,
-  $08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$04,
-  $44,$08,$08,$08,$08,$08,$08,$08,$05,$04,$05,$08,$08,$08,$08,$08,
-  $05,$05,$05,$05,$05,$05,$13,$13,$05,$05,$05,$04,$05,$05,$05,$05,
-  $05,$05,$05,$05,$05,$03,$04,$04,$06,$05,$04,$07,$04,$03,$05,$08,
-  $05,$05,$05,$05,$05,$05,$05,$14,$05,$05,$05,$04,$05,$05,$05,$05,
-  $14,$05,$05,$05,$05,$05,$05,$05,$14,$05,$05,$05,$05,$05,$14,$05,
-  $05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,
-  $05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05
-);
-
-const kgiFont8PropWidth: array[0..256-1] of Byte = (
-  $08,$08,$08,$07,$07,$07,$07,$06,$08,$07,$08,$08,$07,$08,$08,$08,
-  $07,$07,$07,$07,$08,$08,$07,$08,$07,$07,$07,$07,$07,$08,$08,$08,
-  $85,$14,$15,$07,$06,$07,$07,$03,$14,$14,$08,$06,$13,$06,$22,$07,
-  $05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$22,$13,$05,$06,$15,$06,
-  $07,$06,$07,$07,$07,$07,$07,$07,$06,$14,$07,$07,$07,$07,$07,$07,
-  $07,$06,$07,$06,$06,$06,$06,$07,$07,$06,$07,$14,$07,$14,$07,$08,
-  $23,$07,$07,$06,$07,$06,$06,$07,$07,$14,$05,$07,$14,$07,$06,$06,
-  $07,$07,$06,$06,$15,$07,$06,$07,$07,$06,$06,$06,$32,$06,$07,$07,
-  $06,$07,$06,$08,$07,$07,$07,$07,$08,$06,$06,$06,$07,$05,$06,$06,
-  $06,$08,$07,$06,$06,$06,$07,$07,$06,$07,$06,$07,$07,$06,$07,$08,
-  $07,$05,$06,$07,$06,$06,$16,$16,$06,$06,$06,$08,$08,$06,$08,$08,
-  $08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,
-  $38,$08,$08,$38,$08,$08,$38,$28,$28,$28,$08,$08,$28,$08,$08,$08,
-  $08,$08,$08,$28,$38,$38,$28,$08,$08,$08,$38,$08,$08,$08,$48,$08,
-  $07,$06,$07,$07,$07,$07,$07,$07,$06,$07,$07,$06,$08,$08,$06,$06,
-  $06,$06,$06,$06,$35,$05,$06,$07,$15,$32,$32,$08,$15,$15,$24,$08
-);
-
-const kgiFont14: array[0..256*14-1] of Byte = (
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7e,$81,$a5,$81,$81,$bd,$99,$81,$7e,$00,$00,$00,
-$00,$00,$7e,$ff,$db,$ff,$ff,$c3,$e7,$ff,$7e,$00,$00,$00,$00,$00,$00,$6c,$fe,$fe,$fe,$fe,$7c,$38,$10,$00,$00,$00,
-$00,$00,$00,$10,$38,$7c,$fe,$7c,$38,$10,$00,$00,$00,$00,$00,$00,$18,$3c,$3c,$e7,$e7,$e7,$99,$18,$3c,$00,$00,$00,
-$00,$00,$18,$3c,$7e,$ff,$ff,$7e,$18,$18,$3c,$00,$00,$00,$00,$00,$00,$00,$00,$18,$3c,$3c,$18,$00,$00,$00,$00,$00,
-$ff,$ff,$ff,$ff,$ff,$e7,$c3,$c3,$e7,$ff,$ff,$ff,$ff,$ff,$00,$00,$00,$00,$3c,$66,$42,$42,$66,$3c,$00,$00,$00,$00,
-$ff,$ff,$ff,$ff,$c3,$99,$bd,$bd,$99,$c3,$ff,$ff,$ff,$ff,$00,$00,$1e,$0e,$1a,$32,$78,$cc,$cc,$cc,$78,$00,$00,$00,
-$00,$00,$3c,$66,$66,$66,$3c,$18,$7e,$18,$18,$00,$00,$00,$00,$00,$3e,$30,$3e,$30,$30,$30,$70,$f0,$e0,$00,$00,$00,
-$00,$00,$7f,$63,$7f,$63,$63,$63,$67,$e7,$e6,$c0,$00,$00,$00,$00,$18,$18,$db,$3c,$e7,$3c,$db,$18,$18,$00,$00,$00,
-$00,$00,$80,$c0,$e0,$f8,$fe,$f8,$e0,$c0,$80,$00,$00,$00,$00,$00,$02,$06,$0e,$3e,$fe,$3e,$0e,$06,$02,$00,$00,$00,
-$00,$00,$18,$3c,$7e,$18,$18,$18,$7e,$3c,$18,$00,$00,$00,$00,$00,$66,$66,$66,$66,$66,$66,$00,$66,$66,$00,$00,$00,
-$00,$00,$7f,$db,$db,$db,$7b,$1b,$1b,$1b,$1b,$00,$00,$00,$00,$7c,$c6,$60,$38,$6c,$c6,$c6,$6c,$38,$0c,$c6,$7c,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$fe,$fe,$fe,$00,$00,$00,$00,$00,$18,$3c,$7e,$18,$18,$18,$7e,$3c,$18,$7e,$00,$00,
-$00,$00,$18,$3c,$7e,$18,$18,$18,$18,$18,$18,$00,$00,$00,$00,$00,$18,$18,$18,$18,$18,$18,$7e,$3c,$18,$00,$00,$00,
-$00,$00,$00,$00,$18,$0c,$fe,$0c,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$30,$60,$fe,$60,$30,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$c0,$c0,$fe,$00,$00,$00,$00,$00,$00,$00,$00,$00,$28,$6c,$fe,$6c,$28,$00,$00,$00,$00,$00,
-$00,$00,$00,$10,$38,$38,$7c,$7c,$fe,$fe,$00,$00,$00,$00,$00,$00,$00,$fe,$fe,$7c,$7c,$38,$38,$10,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$3c,$3c,$3c,$18,$18,$00,$18,$18,$00,$00,$00,
-$00,$66,$66,$66,$24,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$6c,$6c,$fe,$6c,$6c,$6c,$fe,$6c,$6c,$00,$00,$00,
-$18,$18,$7c,$c6,$c2,$c0,$7c,$06,$86,$c6,$7c,$18,$18,$00,$00,$00,$00,$00,$c2,$c6,$0c,$18,$30,$66,$c6,$00,$00,$00,
-$00,$00,$38,$6c,$6c,$38,$76,$dc,$cc,$cc,$76,$00,$00,$00,$00,$30,$30,$30,$60,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$0c,$18,$30,$30,$30,$30,$30,$18,$0c,$00,$00,$00,$00,$00,$30,$18,$0c,$0c,$0c,$0c,$0c,$18,$30,$00,$00,$00,
-$00,$00,$00,$00,$66,$3c,$ff,$3c,$66,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$7e,$18,$18,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$18,$30,$00,$00,$00,$00,$00,$00,$00,$00,$fe,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$00,$00,$00,$00,$00,$02,$06,$0c,$18,$30,$60,$c0,$80,$00,$00,$00,$00,
-$00,$00,$7c,$c6,$ce,$de,$f6,$e6,$c6,$c6,$7c,$00,$00,$00,$00,$00,$18,$38,$78,$18,$18,$18,$18,$18,$7e,$00,$00,$00,
-$00,$00,$7c,$c6,$06,$0c,$18,$30,$60,$c6,$fe,$00,$00,$00,$00,$00,$7c,$c6,$06,$06,$3c,$06,$06,$c6,$7c,$00,$00,$00,
-$00,$00,$0c,$1c,$3c,$6c,$cc,$fe,$0c,$0c,$1e,$00,$00,$00,$00,$00,$fe,$c0,$c0,$fc,$0e,$06,$06,$c6,$7c,$00,$00,$00,
-$00,$00,$38,$60,$c0,$c0,$fc,$c6,$c6,$c6,$7c,$00,$00,$00,$00,$00,$fe,$c6,$06,$0c,$18,$30,$30,$30,$30,$00,$00,$00,
-$00,$00,$7c,$c6,$c6,$c6,$7c,$c6,$c6,$c6,$7c,$00,$00,$00,$00,$00,$7c,$c6,$c6,$c6,$7e,$06,$06,$0c,$78,$00,$00,$00,
-$00,$00,$00,$18,$18,$00,$00,$00,$18,$18,$00,$00,$00,$00,$00,$00,$00,$18,$18,$00,$00,$00,$18,$18,$30,$00,$00,$00,
-$00,$00,$06,$0c,$18,$30,$60,$30,$18,$0c,$06,$00,$00,$00,$00,$00,$00,$00,$00,$fe,$00,$00,$fe,$00,$00,$00,$00,$00,
-$00,$00,$60,$30,$18,$0c,$06,$0c,$18,$30,$60,$00,$00,$00,$00,$00,$7c,$c6,$c6,$0c,$18,$18,$00,$18,$18,$00,$00,$00,
-$00,$00,$7c,$c6,$c6,$de,$de,$de,$dc,$c0,$7c,$00,$00,$00,$00,$00,$10,$38,$6c,$c6,$c6,$fe,$c6,$c6,$c6,$00,$00,$00,
-$00,$00,$fc,$66,$66,$66,$7c,$66,$66,$66,$fc,$00,$00,$00,$00,$00,$3c,$66,$c2,$c0,$c0,$c0,$c2,$66,$3c,$00,$00,$00,
-$00,$00,$f8,$6c,$66,$66,$66,$66,$66,$6c,$f8,$00,$00,$00,$00,$00,$fe,$66,$62,$68,$78,$68,$62,$66,$fe,$00,$00,$00,
-$00,$00,$fe,$66,$62,$68,$78,$68,$60,$60,$f0,$00,$00,$00,$00,$00,$3c,$66,$c2,$c0,$c0,$de,$c6,$66,$3a,$00,$00,$00,
-$00,$00,$c6,$c6,$c6,$c6,$fe,$c6,$c6,$c6,$c6,$00,$00,$00,$00,$00,$3c,$18,$18,$18,$18,$18,$18,$18,$3c,$00,$00,$00,
-$00,$00,$1e,$0c,$0c,$0c,$0c,$0c,$cc,$cc,$78,$00,$00,$00,$00,$00,$e6,$66,$6c,$6c,$78,$6c,$6c,$66,$e6,$00,$00,$00,
-$00,$00,$f0,$60,$60,$60,$60,$60,$62,$66,$fe,$00,$00,$00,$00,$00,$c6,$ee,$fe,$fe,$d6,$c6,$c6,$c6,$c6,$00,$00,$00,
-$00,$00,$c6,$e6,$f6,$fe,$de,$ce,$c6,$c6,$c6,$00,$00,$00,$00,$00,$38,$6c,$c6,$c6,$c6,$c6,$c6,$6c,$38,$00,$00,$00,
-$00,$00,$fc,$66,$66,$66,$7c,$60,$60,$60,$f0,$00,$00,$00,$00,$00,$7c,$c6,$c6,$c6,$c6,$d6,$de,$7c,$0c,$0e,$00,$00,
-$00,$00,$fc,$66,$66,$66,$7c,$6c,$66,$66,$e6,$00,$00,$00,$00,$00,$7c,$c6,$c6,$60,$38,$0c,$c6,$c6,$7c,$00,$00,$00,
-$00,$00,$7e,$7e,$5a,$18,$18,$18,$18,$18,$3c,$00,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$7c,$00,$00,$00,
-$00,$00,$c6,$c6,$c6,$c6,$c6,$c6,$6c,$38,$10,$00,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$d6,$d6,$fe,$7c,$6c,$00,$00,$00,
-$00,$00,$c6,$c6,$6c,$38,$38,$38,$6c,$c6,$c6,$00,$00,$00,$00,$00,$66,$66,$66,$66,$3c,$18,$18,$18,$3c,$00,$00,$00,
-$00,$00,$fe,$c6,$8c,$18,$30,$60,$c2,$c6,$fe,$00,$00,$00,$00,$00,$3c,$30,$30,$30,$30,$30,$30,$30,$3c,$00,$00,$00,
-$00,$00,$80,$c0,$e0,$70,$38,$1c,$0e,$06,$02,$00,$00,$00,$00,$00,$3c,$0c,$0c,$0c,$0c,$0c,$0c,$0c,$3c,$00,$00,$00,
-$10,$38,$6c,$c6,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$00,
-$30,$30,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$78,$0c,$7c,$cc,$cc,$76,$00,$00,$00,
-$00,$00,$e0,$60,$60,$78,$6c,$66,$66,$66,$dc,$00,$00,$00,$00,$00,$00,$00,$00,$7c,$c6,$c0,$c0,$c6,$7c,$00,$00,$00,
-$00,$00,$1c,$0c,$0c,$3c,$6c,$cc,$cc,$cc,$76,$00,$00,$00,$00,$00,$00,$00,$00,$7c,$c6,$fe,$c0,$c6,$7c,$00,$00,$00,
-$00,$00,$38,$6c,$64,$60,$f0,$60,$60,$60,$f0,$00,$00,$00,$00,$00,$00,$00,$00,$76,$cc,$cc,$cc,$7c,$0c,$cc,$78,$00,
-$00,$00,$e0,$60,$60,$6c,$76,$66,$66,$66,$e6,$00,$00,$00,$00,$00,$18,$18,$00,$38,$18,$18,$18,$18,$3c,$00,$00,$00,
-$00,$00,$06,$06,$00,$0e,$06,$06,$06,$06,$66,$66,$3c,$00,$00,$00,$e0,$60,$60,$66,$6c,$78,$6c,$66,$e6,$00,$00,$00,
-$00,$00,$38,$18,$18,$18,$18,$18,$18,$18,$3c,$00,$00,$00,$00,$00,$00,$00,$00,$ec,$fe,$d6,$d6,$d6,$d6,$00,$00,$00,
-$00,$00,$00,$00,$00,$dc,$66,$66,$66,$66,$66,$00,$00,$00,$00,$00,$00,$00,$00,$7c,$c6,$c6,$c6,$c6,$7c,$00,$00,$00,
-$00,$00,$00,$00,$00,$dc,$66,$66,$66,$7c,$60,$60,$f0,$00,$00,$00,$00,$00,$00,$76,$cc,$cc,$cc,$7c,$0c,$0c,$1e,$00,
-$00,$00,$00,$00,$00,$dc,$76,$62,$60,$60,$f0,$00,$00,$00,$00,$00,$00,$00,$00,$7c,$c6,$70,$1c,$c6,$7c,$00,$00,$00,
-$00,$00,$10,$30,$30,$fc,$30,$30,$30,$36,$1c,$00,$00,$00,$00,$00,$00,$00,$00,$cc,$cc,$cc,$cc,$cc,$76,$00,$00,$00,
-$00,$00,$00,$00,$00,$66,$66,$66,$66,$3c,$18,$00,$00,$00,$00,$00,$00,$00,$00,$c6,$c6,$d6,$d6,$fe,$6c,$00,$00,$00,
-$00,$00,$00,$00,$00,$c6,$6c,$38,$38,$6c,$c6,$00,$00,$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$7e,$06,$0c,$f8,$00,
-$00,$00,$00,$00,$00,$fe,$cc,$18,$30,$66,$fe,$00,$00,$00,$00,$00,$0e,$18,$18,$18,$70,$18,$18,$18,$0e,$00,$00,$00,
-$00,$00,$18,$18,$18,$18,$00,$18,$18,$18,$18,$00,$00,$00,$00,$00,$70,$18,$18,$18,$0e,$18,$18,$18,$70,$00,$00,$00,
-$00,$00,$76,$dc,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$10,$38,$6c,$c6,$c6,$fe,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$6c,$00,$fe,$66,$62,$68,$78,$68,$60,$62,$66,$fe,$00,$00,$00,$b0,$d8,$d8,$d8,$d8,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$11,$44,$11,$44,$11,$44,$11,$44,$11,$44,$11,$44,$11,$44,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa,
-$dd,$77,$dd,$77,$dd,$77,$dd,$77,$dd,$77,$dd,$77,$dd,$77,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,
-$18,$18,$18,$18,$18,$18,$18,$f8,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$f8,$18,$f8,$18,$18,$18,$18,$18,$18,
-$36,$36,$36,$36,$36,$36,$36,$f6,$36,$36,$36,$36,$36,$36,$00,$00,$00,$00,$00,$00,$00,$fe,$36,$36,$36,$36,$36,$36,
-$00,$00,$00,$28,$00,$7c,$c6,$fe,$c0,$c0,$c6,$7c,$00,$00,$36,$36,$36,$36,$36,$f6,$06,$f6,$36,$36,$36,$36,$36,$36,
-$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$00,$00,$00,$00,$00,$fe,$06,$f6,$36,$36,$36,$36,$36,$36,
-$36,$36,$36,$36,$36,$f6,$06,$fe,$00,$00,$00,$00,$00,$00,$36,$36,$36,$36,$36,$36,$36,$fe,$00,$00,$00,$00,$00,$00,
-$18,$18,$18,$18,$18,$f8,$18,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$18,$18,$18,$18,$18,$18,
-$00,$00,$1e,$36,$66,$c6,$c6,$fe,$c6,$c6,$c6,$c6,$00,$00,$00,$00,$fe,$62,$62,$60,$7c,$66,$66,$66,$66,$fc,$00,$00,
-$00,$00,$fc,$66,$66,$66,$7c,$66,$66,$66,$66,$fc,$00,$00,$00,$00,$fe,$62,$62,$60,$60,$60,$60,$60,$60,$f0,$00,$00,
-$00,$00,$1e,$36,$66,$66,$66,$66,$66,$66,$66,$ff,$c3,$81,$00,$00,$fe,$66,$62,$68,$78,$68,$60,$62,$66,$fe,$00,$00,
-$00,$00,$d6,$d6,$54,$54,$7c,$7c,$54,$d6,$d6,$d6,$00,$00,$00,$00,$7c,$c6,$06,$06,$3c,$06,$06,$06,$c6,$7c,$00,$00,
-$00,$00,$c6,$c6,$ce,$ce,$d6,$e6,$e6,$c6,$c6,$c6,$00,$00,$38,$38,$c6,$c6,$ce,$ce,$d6,$e6,$e6,$c6,$c6,$c6,$00,$00,
-$00,$00,$e6,$66,$6c,$6c,$78,$78,$6c,$6c,$66,$e6,$00,$00,$00,$00,$1e,$36,$66,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$00,$00,
-$00,$00,$c6,$ee,$fe,$fe,$d6,$c6,$c6,$c6,$c6,$c6,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$fe,$c6,$c6,$c6,$c6,$c6,$00,$00,
-$00,$00,$7c,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$7c,$00,$00,$00,$00,$fe,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$00,$00,
-$00,$00,$fc,$66,$66,$66,$7c,$60,$60,$60,$60,$f0,$00,$00,$00,$00,$3c,$66,$c2,$c0,$c0,$c0,$c0,$c2,$66,$3c,$00,$00,
-$00,$00,$7e,$5a,$18,$18,$18,$18,$18,$18,$18,$3c,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$c6,$7e,$06,$06,$c6,$7c,$00,$00,
-$00,$3c,$18,$7e,$db,$db,$db,$db,$db,$7e,$18,$3c,$00,$00,$00,$00,$c6,$c6,$6c,$7c,$38,$38,$7c,$6c,$c6,$c6,$00,$00,
-$00,$00,$cc,$cc,$cc,$cc,$cc,$cc,$cc,$cc,$cc,$fe,$06,$06,$00,$00,$c6,$c6,$c6,$c6,$c6,$7e,$06,$06,$06,$06,$00,$00,
-$00,$00,$db,$db,$db,$db,$db,$db,$db,$db,$db,$ff,$00,$00,$00,$00,$db,$db,$db,$db,$db,$db,$db,$db,$db,$ff,$03,$03,
-$00,$00,$f8,$b0,$30,$30,$3c,$36,$36,$36,$36,$7c,$00,$00,$00,$00,$c3,$c3,$c3,$c3,$f3,$db,$db,$db,$db,$f3,$00,$00,
-$00,$00,$f0,$60,$60,$60,$7c,$66,$66,$66,$66,$fc,$00,$00,$00,$00,$7c,$c6,$06,$26,$3e,$26,$06,$06,$c6,$7c,$00,$00,
-$00,$00,$ce,$db,$db,$db,$fb,$db,$db,$db,$db,$ce,$00,$00,$00,$00,$3f,$66,$66,$66,$3e,$3e,$66,$66,$66,$e7,$00,$00,
-$00,$00,$00,$00,$00,$78,$0c,$7c,$cc,$cc,$cc,$76,$00,$00,$00,$02,$06,$3c,$60,$60,$7c,$66,$66,$66,$66,$3c,$00,$00,
-$00,$00,$00,$00,$00,$fc,$66,$66,$7c,$66,$66,$fc,$00,$00,$00,$00,$00,$00,$00,$7e,$32,$32,$30,$30,$30,$78,$00,$00,
-$00,$00,$00,$00,$00,$1e,$36,$36,$66,$66,$66,$ff,$c3,$c3,$00,$00,$00,$00,$00,$7c,$c6,$fe,$c0,$c0,$c6,$7c,$00,$00,
-$00,$00,$00,$00,$00,$d6,$d6,$54,$7c,$54,$d6,$d6,$00,$00,$00,$00,$00,$00,$00,$3c,$66,$06,$0c,$06,$66,$3c,$00,$00,
-$00,$00,$00,$00,$00,$c6,$c6,$ce,$d6,$e6,$c6,$c6,$00,$00,$00,$00,$00,$38,$38,$c6,$c6,$ce,$d6,$e6,$c6,$c6,$00,$00,
-$00,$00,$00,$00,$00,$e6,$6c,$78,$78,$6c,$66,$e6,$00,$00,$00,$00,$00,$00,$00,$1e,$36,$66,$66,$66,$66,$66,$00,$00,
-$00,$00,$00,$00,$00,$c6,$ee,$fe,$fe,$d6,$d6,$c6,$00,$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$fe,$c6,$c6,$c6,$00,$00,
-$00,$00,$00,$00,$00,$7c,$c6,$c6,$c6,$c6,$c6,$7c,$00,$00,$00,$00,$00,$00,$00,$fe,$c6,$c6,$c6,$c6,$c6,$c6,$00,$00,
-$00,$00,$00,$00,$00,$dc,$66,$66,$66,$66,$66,$7c,$60,$f0,$00,$00,$00,$00,$00,$7c,$c6,$c0,$c0,$c0,$c6,$7c,$00,$00,
-$00,$00,$00,$00,$00,$7e,$5a,$18,$18,$18,$18,$3c,$00,$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$c6,$7e,$06,$c6,$7c,
-$00,$00,$00,$00,$3c,$18,$7e,$db,$db,$db,$db,$7e,$18,$3c,$00,$00,$00,$00,$00,$c6,$6c,$38,$38,$38,$6c,$c6,$00,$00,
-$00,$00,$00,$00,$00,$cc,$cc,$cc,$cc,$cc,$cc,$fe,$06,$06,$00,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$7e,$06,$06,$00,$00,
-$00,$00,$00,$00,$00,$d6,$d6,$d6,$d6,$d6,$d6,$fe,$00,$00,$00,$00,$00,$00,$00,$d6,$d6,$d6,$d6,$d6,$d6,$fe,$03,$03,
-$00,$00,$00,$00,$00,$f8,$b0,$30,$3e,$33,$33,$7e,$00,$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$f6,$de,$de,$f6,$00,$00,
-$00,$00,$00,$00,$00,$f0,$60,$60,$7c,$66,$66,$fc,$00,$00,$00,$00,$00,$00,$00,$3c,$66,$06,$1e,$06,$66,$3c,$00,$00,
-$00,$00,$00,$00,$00,$ce,$db,$db,$fb,$db,$db,$ce,$00,$00,$00,$00,$00,$00,$00,$7e,$cc,$cc,$fc,$6c,$cc,$ce,$00,$00);
-const kgiFont14Wdt: array[0..256-1] of Byte = (
-$00,$08,$08,$07,$07,$08,$08,$24,$08,$16,$08,$07,$16,$07,$08,$08,$07,$07,$16,$16,$08,$07,$07,$16,$16,$16,$07,$07,
-$07,$07,$07,$07,$05,$24,$16,$07,$07,$07,$07,$13,$24,$24,$08,$16,$23,$07,$32,$07,$07,$16,$07,$07,$07,$07,$07,$07,
-$07,$07,$32,$23,$16,$07,$16,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$24,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,
-$16,$07,$07,$07,$07,$16,$07,$24,$07,$24,$07,$08,$23,$07,$07,$07,$07,$07,$06,$07,$07,$24,$16,$07,$24,$07,$07,$07,
-$07,$07,$07,$07,$07,$07,$16,$07,$07,$07,$07,$16,$32,$16,$07,$07,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$07,$05,$00,$00,$00,$00,$00,$00,$08,$08,$08,$08,$08,$08,$08,$08,$07,$08,$08,$08,$08,$08,$08,$08,$07,$07,$07,$07,
-$08,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$16,$07,$08,$07,$07,$07,$08,$08,$07,$08,$07,$07,$08,$08,
-$07,$16,$07,$16,$08,$07,$07,$16,$07,$07,$07,$16,$07,$07,$07,$07,$07,$07,$16,$07,$08,$07,$07,$07,$07,$08,$08,$07,
-$07,$16,$08,$07);
-
-const kgiFont16: array[0..256*16-1] of Byte = (
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7e,$81,$a5,$81,$81,$bd,$99,$81,$81,$7e,
-$00,$00,$00,$00,$00,$00,$7e,$ff,$db,$ff,$ff,$c3,$e7,$ff,$ff,$7e,$00,$00,$00,$00,$00,$00,$00,$00,$6c,$fe,$fe,$fe,
-$fe,$7c,$38,$10,$00,$00,$00,$00,$00,$00,$00,$00,$10,$38,$7c,$fe,$7c,$38,$10,$00,$00,$00,$00,$00,$00,$00,$00,$18,
-$3c,$3c,$e7,$e7,$e7,$99,$18,$3c,$00,$00,$00,$00,$00,$00,$00,$18,$3c,$7e,$ff,$ff,$7e,$18,$18,$3c,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$18,$3c,$3c,$18,$00,$00,$00,$00,$00,$00,$ff,$ff,$ff,$ff,$ff,$ff,$e7,$c3,$c3,$e7,$ff,$ff,
-$ff,$ff,$ff,$ff,$00,$00,$00,$00,$00,$3c,$66,$42,$42,$66,$3c,$00,$00,$00,$00,$00,$ff,$ff,$ff,$ff,$ff,$c3,$99,$bd,
-$bd,$99,$c3,$ff,$ff,$ff,$ff,$ff,$00,$00,$1e,$0e,$1a,$32,$78,$cc,$cc,$cc,$cc,$78,$00,$00,$00,$00,$00,$00,$3c,$66,
-$66,$66,$66,$3c,$18,$7e,$18,$18,$00,$00,$00,$00,$00,$00,$3e,$30,$3e,$30,$30,$30,$30,$70,$f0,$e0,$00,$00,$00,$00,
-$00,$00,$7f,$63,$7f,$63,$63,$63,$63,$67,$e7,$e6,$c0,$00,$00,$00,$00,$00,$00,$18,$18,$db,$3c,$e7,$3c,$db,$18,$18,
-$00,$00,$00,$00,$00,$80,$c0,$e0,$f0,$f8,$fe,$f8,$f0,$e0,$c0,$80,$00,$00,$00,$00,$00,$02,$06,$0e,$1e,$3e,$fe,$3e,
-$1e,$0e,$06,$02,$00,$00,$00,$00,$00,$00,$18,$3c,$7e,$18,$18,$18,$18,$7e,$3c,$18,$00,$00,$00,$00,$00,$00,$66,$66,
-$66,$66,$66,$66,$66,$00,$66,$66,$00,$00,$00,$00,$00,$00,$7f,$db,$db,$db,$7b,$1b,$1b,$1b,$1b,$1b,$00,$00,$00,$00,
-$00,$7c,$c6,$60,$38,$6c,$c6,$c6,$6c,$38,$0c,$c6,$7c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$fe,$fe,$fe,$fe,
-$00,$00,$00,$00,$00,$00,$18,$3c,$7e,$18,$18,$18,$18,$7e,$3c,$18,$7e,$00,$00,$00,$00,$00,$18,$3c,$7e,$18,$18,$18,
-$18,$18,$18,$18,$00,$00,$00,$00,$00,$00,$18,$18,$18,$18,$18,$18,$18,$7e,$3c,$18,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$18,$0c,$fe,$0c,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$30,$60,$fe,$60,$30,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$c0,$c0,$c0,$c0,$fe,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$28,$6c,$fe,$6c,$28,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$10,$38,$38,$7c,$7c,$fe,$fe,$00,$00,$00,$00,$00,$00,$00,$00,$00,$fe,$fe,$7c,$7c,
-$38,$38,$10,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$3c,
-$3c,$3c,$18,$18,$18,$00,$18,$18,$00,$00,$00,$00,$00,$66,$66,$66,$24,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$6c,$6c,$fe,$6c,$6c,$6c,$fe,$6c,$6c,$00,$00,$00,$00,$18,$18,$7c,$c6,$c2,$c0,$7c,$06,$86,$c6,$7c,$18,
-$18,$00,$00,$00,$00,$00,$00,$00,$c2,$c6,$0c,$18,$30,$60,$c6,$86,$00,$00,$00,$00,$00,$00,$38,$6c,$6c,$38,$76,$dc,
-$cc,$cc,$cc,$76,$00,$00,$00,$00,$00,$30,$30,$30,$60,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0c,$18,
-$30,$30,$30,$30,$30,$30,$18,$0c,$00,$00,$00,$00,$00,$00,$30,$18,$0c,$0c,$0c,$0c,$0c,$0c,$18,$30,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$66,$3c,$ff,$3c,$66,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$7e,$18,$18,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$18,$30,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$fe,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$00,$00,$00,$00,$00,$00,$00,$00,
-$02,$06,$0c,$18,$30,$60,$c0,$80,$00,$00,$00,$00,$00,$00,$7c,$c6,$c6,$ce,$d6,$d6,$e6,$c6,$c6,$7c,$00,$00,$00,$00,
-$00,$00,$18,$38,$78,$18,$18,$18,$18,$18,$18,$7e,$00,$00,$00,$00,$00,$00,$7c,$c6,$06,$0c,$18,$30,$60,$c0,$c6,$fe,
-$00,$00,$00,$00,$00,$00,$7c,$c6,$06,$06,$3c,$06,$06,$06,$c6,$7c,$00,$00,$00,$00,$00,$00,$0c,$1c,$3c,$6c,$cc,$fe,
-$0c,$0c,$0c,$1e,$00,$00,$00,$00,$00,$00,$fe,$c0,$c0,$c0,$fc,$0e,$06,$06,$c6,$7c,$00,$00,$00,$00,$00,$00,$38,$60,
-$c0,$c0,$fc,$c6,$c6,$c6,$c6,$7c,$00,$00,$00,$00,$00,$00,$fe,$c6,$06,$06,$0c,$18,$30,$30,$30,$30,$00,$00,$00,$00,
-$00,$00,$7c,$c6,$c6,$c6,$7c,$c6,$c6,$c6,$c6,$7c,$00,$00,$00,$00,$00,$00,$7c,$c6,$c6,$c6,$7e,$06,$06,$06,$0c,$78,
-$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$00,$00,$00,$18,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$00,$00,
-$00,$18,$18,$30,$00,$00,$00,$00,$00,$00,$00,$06,$0c,$18,$30,$60,$30,$18,$0c,$06,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$fe,$00,$00,$fe,$00,$00,$00,$00,$00,$00,$00,$00,$00,$60,$30,$18,$0c,$06,$0c,$18,$30,$60,$00,$00,$00,$00,
-$00,$00,$7c,$c6,$c6,$0c,$18,$18,$18,$00,$18,$18,$00,$00,$00,$00,$00,$00,$00,$7c,$c6,$c6,$de,$de,$de,$dc,$c0,$7c,
-$00,$00,$00,$00,$00,$00,$10,$38,$6c,$c6,$c6,$fe,$c6,$c6,$c6,$c6,$00,$00,$00,$00,$00,$00,$fc,$66,$66,$66,$7c,$66,
-$66,$66,$66,$fc,$00,$00,$00,$00,$00,$00,$3c,$66,$c2,$c0,$c0,$c0,$c0,$c2,$66,$3c,$00,$00,$00,$00,$00,$00,$f8,$6c,
-$66,$66,$66,$66,$66,$66,$6c,$f8,$00,$00,$00,$00,$00,$00,$fe,$66,$62,$68,$78,$68,$60,$62,$66,$fe,$00,$00,$00,$00,
-$00,$00,$fe,$66,$62,$68,$78,$68,$60,$60,$60,$f0,$00,$00,$00,$00,$00,$00,$3c,$66,$c2,$c0,$c0,$de,$c6,$c6,$66,$3a,
-$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$fe,$c6,$c6,$c6,$c6,$c6,$00,$00,$00,$00,$00,$00,$3c,$18,$18,$18,$18,$18,
-$18,$18,$18,$3c,$00,$00,$00,$00,$00,$00,$1e,$0c,$0c,$0c,$0c,$0c,$cc,$cc,$cc,$78,$00,$00,$00,$00,$00,$00,$e6,$66,
-$6c,$6c,$78,$78,$6c,$66,$66,$e6,$00,$00,$00,$00,$00,$00,$f0,$60,$60,$60,$60,$60,$60,$62,$66,$fe,$00,$00,$00,$00,
-$00,$00,$c6,$ee,$fe,$fe,$d6,$c6,$c6,$c6,$c6,$c6,$00,$00,$00,$00,$00,$00,$c6,$e6,$f6,$fe,$de,$ce,$c6,$c6,$c6,$c6,
-$00,$00,$00,$00,$00,$00,$38,$6c,$c6,$c6,$c6,$c6,$c6,$c6,$6c,$38,$00,$00,$00,$00,$00,$00,$fc,$66,$66,$66,$7c,$60,
-$60,$60,$60,$f0,$00,$00,$00,$00,$00,$00,$7c,$c6,$c6,$c6,$c6,$c6,$c6,$d6,$de,$7c,$0c,$0e,$00,$00,$00,$00,$fc,$66,
-$66,$66,$7c,$6c,$66,$66,$66,$e6,$00,$00,$00,$00,$00,$00,$7c,$c6,$c6,$60,$38,$0c,$06,$c6,$c6,$7c,$00,$00,$00,$00,
-$00,$00,$7e,$7e,$5a,$18,$18,$18,$18,$18,$18,$3c,$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$7c,
-$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$6c,$38,$10,$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$c6,$d6,
-$d6,$fe,$6c,$6c,$00,$00,$00,$00,$00,$00,$c6,$c6,$6c,$6c,$38,$38,$6c,$6c,$c6,$c6,$00,$00,$00,$00,$00,$00,$66,$66,
-$66,$66,$3c,$18,$18,$18,$18,$3c,$00,$00,$00,$00,$00,$00,$fe,$c6,$86,$0c,$18,$30,$60,$c2,$c6,$fe,$00,$00,$00,$00,
-$00,$00,$3c,$30,$30,$30,$30,$30,$30,$30,$30,$3c,$00,$00,$00,$00,$00,$00,$00,$80,$c0,$e0,$70,$38,$1c,$0e,$06,$02,
-$00,$00,$00,$00,$00,$00,$3c,$0c,$0c,$0c,$0c,$0c,$0c,$0c,$0c,$3c,$00,$00,$00,$00,$10,$38,$6c,$c6,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$00,$00,$30,$30,$18,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$78,$0c,$7c,$cc,$cc,$cc,$76,$00,$00,$00,$00,
-$00,$00,$e0,$60,$60,$78,$6c,$66,$66,$66,$66,$dc,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7c,$c6,$c0,$c0,$c0,$c6,$7c,
-$00,$00,$00,$00,$00,$00,$1c,$0c,$0c,$3c,$6c,$cc,$cc,$cc,$cc,$76,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7c,$c6,$fe,
-$c0,$c0,$c6,$7c,$00,$00,$00,$00,$00,$00,$38,$6c,$64,$60,$f0,$60,$60,$60,$60,$f0,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$76,$cc,$cc,$cc,$cc,$cc,$7c,$0c,$cc,$78,$00,$00,$00,$e0,$60,$60,$6c,$76,$66,$66,$66,$66,$e6,$00,$00,$00,$00,
-$00,$00,$18,$18,$00,$38,$18,$18,$18,$18,$18,$3c,$00,$00,$00,$00,$00,$00,$06,$06,$00,$0e,$06,$06,$06,$06,$06,$06,
-$66,$66,$3c,$00,$00,$00,$e0,$60,$60,$66,$6c,$78,$78,$6c,$66,$e6,$00,$00,$00,$00,$00,$00,$38,$18,$18,$18,$18,$18,
-$18,$18,$18,$3c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ec,$fe,$d6,$d6,$d6,$d6,$d6,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$dc,$66,$66,$66,$66,$66,$66,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7c,$c6,$c6,$c6,$c6,$c6,$7c,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$dc,$66,$66,$66,$66,$66,$7c,$60,$60,$f0,$00,$00,$00,$00,$00,$00,$76,$cc,$cc,$cc,$cc,$cc,$7c,
-$0c,$0c,$1e,$00,$00,$00,$00,$00,$00,$dc,$76,$62,$60,$60,$60,$f0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7c,$c6,$60,
-$38,$0c,$c6,$7c,$00,$00,$00,$00,$00,$00,$10,$30,$30,$fc,$30,$30,$30,$30,$36,$1c,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$cc,$cc,$cc,$cc,$cc,$cc,$76,$00,$00,$00,$00,$00,$00,$00,$00,$00,$66,$66,$66,$66,$66,$3c,$18,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$c6,$c6,$c6,$d6,$d6,$fe,$6c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$c6,$6c,$38,$38,$38,$6c,$c6,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$c6,$c6,$7e,$06,$0c,$f8,$00,$00,$00,$00,$00,$00,$fe,$cc,$18,
-$30,$60,$c6,$fe,$00,$00,$00,$00,$00,$00,$0e,$18,$18,$18,$70,$18,$18,$18,$18,$0e,$00,$00,$00,$00,$00,$00,$18,$18,
-$18,$18,$00,$18,$18,$18,$18,$18,$00,$00,$00,$00,$00,$00,$70,$18,$18,$18,$0e,$18,$18,$18,$18,$70,$00,$00,$00,$00,
-$00,$00,$76,$dc,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$10,$38,$6c,$c6,$c6,$c6,$fe,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$6c,$00,$fe,$66,$62,$68,$78,$68,$60,$62,$66,$fe,$00,$00,$00,$00,$00,$b0,$d8,$d8,$d8,$d8,$d8,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$11,$44,$11,$44,$11,$44,$11,$44,$11,$44,$11,$44,
-$11,$44,$11,$44,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$dd,$77,$dd,$77,$dd,$77,$dd,$77,
-$dd,$77,$dd,$77,$dd,$77,$dd,$77,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,
-$18,$18,$18,$f8,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$f8,$18,$f8,$18,$18,$18,$18,$18,$18,$18,$18,
-$36,$36,$36,$36,$36,$36,$36,$f6,$36,$36,$36,$36,$36,$36,$36,$36,$00,$00,$00,$00,$00,$00,$00,$fe,$36,$36,$36,$36,
-$36,$36,$36,$36,$00,$00,$28,$28,$00,$7c,$c6,$fe,$c0,$c0,$c6,$7c,$00,$00,$00,$00,$36,$36,$36,$36,$36,$f6,$06,$f6,
-$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$00,$00,$00,$00,
-$00,$fe,$06,$f6,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$f6,$06,$fe,$00,$00,$00,$00,$00,$00,$00,$00,
-$36,$36,$36,$36,$36,$36,$36,$fe,$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$18,$18,$18,$f8,$18,$f8,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$18,$18,$18,$18,$18,$18,$18,$18,$00,$00,$1e,$36,$66,$c6,$c6,$fe,
-$c6,$c6,$c6,$c6,$00,$00,$00,$00,$00,$00,$fe,$62,$62,$60,$7c,$66,$66,$66,$66,$fc,$00,$00,$00,$00,$00,$00,$fc,$66,
-$66,$66,$7c,$66,$66,$66,$66,$fc,$00,$00,$00,$00,$00,$00,$fe,$62,$62,$60,$60,$60,$60,$60,$60,$f0,$00,$00,$00,$00,
-$00,$00,$1e,$36,$66,$66,$66,$66,$66,$66,$66,$ff,$c3,$81,$00,$00,$00,$00,$fe,$66,$62,$68,$78,$68,$60,$62,$66,$fe,
-$00,$00,$00,$00,$00,$00,$d6,$d6,$54,$54,$7c,$7c,$54,$d6,$d6,$d6,$00,$00,$00,$00,$00,$00,$7c,$c6,$06,$06,$3c,$06,
-$06,$06,$c6,$7c,$00,$00,$00,$00,$00,$00,$c6,$c6,$ce,$ce,$d6,$e6,$e6,$c6,$c6,$c6,$00,$00,$00,$00,$38,$38,$c6,$c6,
-$ce,$ce,$d6,$e6,$e6,$c6,$c6,$c6,$00,$00,$00,$00,$00,$00,$e6,$66,$6c,$6c,$78,$78,$6c,$6c,$66,$e6,$00,$00,$00,$00,
-$00,$00,$1e,$36,$66,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$00,$00,$00,$00,$00,$00,$c6,$ee,$fe,$fe,$d6,$c6,$c6,$c6,$c6,$c6,
-$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$fe,$c6,$c6,$c6,$c6,$c6,$00,$00,$00,$00,$00,$00,$7c,$c6,$c6,$c6,$c6,$c6,
-$c6,$c6,$c6,$7c,$00,$00,$00,$00,$00,$00,$fe,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$c6,$00,$00,$00,$00,$00,$00,$fc,$66,
-$66,$66,$7c,$60,$60,$60,$60,$f0,$00,$00,$00,$00,$00,$00,$3c,$66,$c2,$c0,$c0,$c0,$c0,$c2,$66,$3c,$00,$00,$00,$00,
-$00,$00,$7e,$5a,$18,$18,$18,$18,$18,$18,$18,$3c,$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$c6,$7e,$06,$06,$c6,$7c,
-$00,$00,$00,$00,$00,$3c,$18,$7e,$db,$db,$db,$db,$db,$7e,$18,$3c,$00,$00,$00,$00,$00,$00,$c6,$c6,$6c,$7c,$38,$38,
-$7c,$6c,$c6,$c6,$00,$00,$00,$00,$00,$00,$cc,$cc,$cc,$cc,$cc,$cc,$cc,$cc,$cc,$fe,$06,$06,$00,$00,$00,$00,$c6,$c6,
-$c6,$c6,$c6,$7e,$06,$06,$06,$06,$00,$00,$00,$00,$00,$00,$db,$db,$db,$db,$db,$db,$db,$db,$db,$ff,$00,$00,$00,$00,
-$00,$00,$db,$db,$db,$db,$db,$db,$db,$db,$db,$ff,$03,$03,$00,$00,$00,$00,$f8,$b0,$30,$30,$3c,$36,$36,$36,$36,$7c,
-$00,$00,$00,$00,$00,$00,$c3,$c3,$c3,$c3,$f3,$db,$db,$db,$db,$f3,$00,$00,$00,$00,$00,$00,$f0,$60,$60,$60,$7c,$66,
-$66,$66,$66,$fc,$00,$00,$00,$00,$00,$00,$7c,$c6,$06,$26,$3e,$26,$06,$06,$c6,$7c,$00,$00,$00,$00,$00,$00,$ce,$db,
-$db,$db,$fb,$db,$db,$db,$db,$ce,$00,$00,$00,$00,$00,$00,$3f,$66,$66,$66,$3e,$3e,$66,$66,$66,$e7,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$78,$0c,$7c,$cc,$cc,$cc,$76,$00,$00,$00,$00,$00,$02,$06,$3c,$60,$60,$7c,$66,$66,$66,$66,$3c,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$fc,$66,$66,$7c,$66,$66,$fc,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7e,$32,$32,
-$30,$30,$30,$78,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1e,$36,$36,$66,$66,$66,$ff,$c3,$c3,$00,$00,$00,$00,$00,$00,
-$00,$7c,$c6,$fe,$c0,$c0,$c6,$7c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$d6,$d6,$54,$7c,$54,$d6,$d6,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$3c,$66,$06,$0c,$06,$66,$3c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$c6,$c6,$ce,$d6,$e6,$c6,$c6,
-$00,$00,$00,$00,$00,$00,$00,$38,$38,$c6,$c6,$ce,$d6,$e6,$c6,$c6,$00,$00,$00,$00,$00,$00,$00,$00,$00,$e6,$6c,$78,
-$78,$6c,$66,$e6,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1e,$36,$66,$66,$66,$66,$66,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$c6,$ee,$fe,$fe,$d6,$d6,$c6,$00,$00,$00,$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$fe,$c6,$c6,$c6,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$7c,$c6,$c6,$c6,$c6,$c6,$7c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$fe,$c6,$c6,$c6,$c6,$c6,$c6,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$dc,$66,$66,$66,$66,$66,$7c,$60,$60,$f0,$00,$00,$00,$00,$00,$00,$7c,$c6,$c0,
-$c0,$c0,$c6,$7c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7e,$5a,$18,$18,$18,$18,$3c,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$c6,$c6,$c6,$c6,$c6,$7e,$06,$06,$c6,$7c,$00,$00,$00,$00,$00,$3c,$18,$7e,$db,$db,$db,$db,$7e,$18,$18,$3c,$00,
-$00,$00,$00,$00,$00,$c6,$6c,$38,$38,$38,$6c,$c6,$00,$00,$00,$00,$00,$00,$00,$00,$00,$cc,$cc,$cc,$cc,$cc,$cc,$fe,
-$06,$06,$00,$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$c6,$7e,$06,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$d6,$d6,$d6,
-$d6,$d6,$d6,$fe,$00,$00,$00,$00,$00,$00,$00,$00,$00,$d6,$d6,$d6,$d6,$d6,$d6,$fe,$03,$03,$00,$00,$00,$00,$00,$00,
-$00,$f8,$b0,$30,$3e,$33,$33,$7e,$00,$00,$00,$00,$00,$00,$00,$00,$00,$c6,$c6,$c6,$f6,$de,$de,$f6,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$f0,$60,$60,$7c,$66,$66,$fc,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3c,$66,$06,$1e,$06,$66,$3c,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$ce,$db,$db,$fb,$db,$db,$ce,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7e,$cc,$cc,
-$fc,$6c,$cc,$ce,$00,$00,$00,$00);
-const kgiFont16Wdt: array[0..256-1] of Byte = (
-$00,$08,$08,$07,$07,$08,$08,$24,$08,$16,$08,$07,$16,$07,$08,$08,$07,$07,$16,$16,$08,$07,$07,$16,$16,$16,$07,$07,
-$07,$07,$07,$07,$05,$24,$16,$07,$07,$07,$07,$13,$24,$24,$08,$16,$23,$07,$32,$07,$07,$16,$07,$07,$07,$07,$07,$07,
-$07,$07,$32,$23,$16,$07,$16,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$24,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,
-$16,$07,$07,$07,$07,$16,$07,$24,$07,$24,$07,$08,$23,$07,$07,$07,$07,$07,$06,$07,$07,$24,$16,$07,$24,$07,$07,$07,
-$07,$07,$07,$07,$07,$07,$16,$07,$07,$07,$07,$16,$32,$16,$07,$07,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-$07,$05,$00,$00,$00,$00,$00,$00,$08,$08,$08,$08,$08,$08,$08,$08,$07,$08,$08,$08,$08,$08,$08,$08,$07,$07,$07,$07,
-$08,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$16,$07,$08,$07,$07,$07,$08,$08,$07,$08,$07,$07,$08,$08,
-$07,$16,$07,$16,$08,$07,$07,$16,$07,$07,$07,$16,$07,$07,$07,$07,$07,$07,$16,$07,$08,$07,$07,$07,$07,$08,$08,$07,
-$07,$16,$08,$07);
-
-const kgiWFont8: array[0..256*8-1] of Byte = (
-  $00,$00,$00,$00,$00,$00,$00,$00,$7e,$81,$a5,$81,$bd,$99,$81,$7e,$7e,$ff,$db,$ff,$c3,$e7,$ff,$7e,$6c,$fe,$fe,$fe,
-  $7c,$38,$10,$00,$10,$38,$7c,$fe,$7c,$38,$10,$00,$10,$7c,$10,$fe,$fe,$92,$10,$7c,$00,$10,$38,$7c,$fe,$7c,$10,$7c,
-  $00,$00,$18,$3c,$3c,$18,$00,$00,$ff,$ff,$e7,$c3,$c3,$e7,$ff,$ff,$00,$3c,$66,$42,$42,$66,$3c,$00,$ff,$c3,$99,$bd,
-  $bd,$99,$c3,$ff,$0f,$03,$05,$79,$cc,$cc,$cc,$78,$3c,$66,$66,$66,$3c,$18,$7e,$18,$3e,$30,$3e,$30,$30,$70,$f0,$e0,
-  $7f,$63,$7f,$63,$63,$67,$e6,$c0,$89,$4a,$3c,$e4,$27,$3c,$52,$91,$80,$e0,$f8,$fe,$f8,$e0,$80,$00,$02,$0e,$3e,$fe,
-  $3e,$0e,$02,$00,$18,$3c,$7e,$18,$18,$7e,$3c,$18,$24,$24,$24,$24,$24,$00,$24,$00,$7f,$db,$db,$7b,$1b,$1b,$1b,$00,
-  $3e,$63,$38,$6c,$6c,$38,$86,$fc,$00,$00,$00,$00,$7e,$7e,$7e,$00,$18,$3c,$7e,$18,$7e,$3c,$18,$ff,$18,$3c,$7e,$18,
-  $18,$18,$18,$00,$18,$18,$18,$18,$7e,$3c,$18,$00,$00,$18,$0c,$fe,$0c,$18,$00,$00,$00,$30,$60,$fe,$60,$30,$00,$00,
-  $00,$00,$00,$c0,$c0,$fe,$00,$00,$00,$24,$66,$ff,$66,$24,$00,$00,$00,$18,$3c,$7e,$ff,$ff,$00,$00,$00,$ff,$ff,$7e,
-  $3c,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$3c,$3c,$18,$18,$00,$18,$00,$6c,$6c,$28,$00,$00,$00,$00,$00,
-  $6c,$6c,$fe,$6c,$fe,$6c,$6c,$00,$18,$7e,$c0,$7c,$06,$fc,$18,$00,$00,$c6,$cc,$18,$30,$66,$c6,$00,$38,$6c,$38,$76,
-  $dc,$cc,$76,$00,$30,$30,$60,$00,$00,$00,$00,$00,$18,$30,$60,$60,$60,$30,$18,$00,$60,$30,$18,$18,$18,$30,$60,$00,
-  $00,$66,$3c,$ff,$3c,$66,$00,$00,$00,$18,$18,$7e,$18,$18,$00,$00,$00,$00,$00,$00,$00,$18,$18,$30,$00,$00,$00,$7e,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$00,$06,$0c,$18,$30,$60,$c0,$80,$00,$7c,$ce,$de,$f6,$e6,$c6,$7c,$00,
-  $30,$70,$30,$30,$30,$30,$fc,$00,$78,$cc,$0c,$38,$60,$cc,$fc,$00,$78,$cc,$0c,$38,$0c,$cc,$78,$00,$1c,$3c,$6c,$cc,
-  $fe,$0c,$1e,$00,$fc,$c0,$f8,$0c,$0c,$cc,$78,$00,$38,$60,$c0,$f8,$cc,$cc,$78,$00,$fc,$cc,$0c,$18,$30,$30,$30,$00,
-  $78,$cc,$cc,$78,$cc,$cc,$78,$00,$78,$cc,$cc,$7c,$0c,$18,$70,$00,$00,$18,$18,$00,$00,$18,$18,$00,$00,$18,$18,$00,
-  $00,$18,$18,$30,$18,$30,$60,$c0,$60,$30,$18,$00,$00,$00,$7e,$00,$7e,$00,$00,$00,$60,$30,$18,$0c,$18,$30,$60,$00,
-  $3c,$66,$0c,$18,$18,$00,$18,$00,$7c,$c6,$de,$de,$dc,$c0,$7c,$00,$30,$78,$cc,$cc,$fc,$cc,$cc,$00,$fc,$66,$66,$7c,
-  $66,$66,$fc,$00,$3c,$66,$c0,$c0,$c0,$66,$3c,$00,$f8,$6c,$66,$66,$66,$6c,$f8,$00,$fe,$62,$68,$78,$68,$62,$fe,$00,
-  $fe,$62,$68,$78,$68,$60,$f0,$00,$3c,$66,$c0,$c0,$ce,$66,$3a,$00,$cc,$cc,$cc,$fc,$cc,$cc,$cc,$00,$78,$30,$30,$30,
-  $30,$30,$78,$00,$1e,$0c,$0c,$0c,$cc,$cc,$78,$00,$e6,$66,$6c,$78,$6c,$66,$e6,$00,$f0,$60,$60,$60,$62,$66,$fe,$00,
-  $c6,$ee,$fe,$fe,$d6,$c6,$c6,$00,$c6,$e6,$f6,$de,$ce,$c6,$c6,$00,$38,$6c,$c6,$c6,$c6,$6c,$38,$00,$fc,$66,$66,$7c,
-  $60,$60,$f0,$00,$7c,$c6,$c6,$c6,$d6,$7c,$0e,$00,$fc,$66,$66,$7c,$6c,$66,$e6,$00,$7c,$c6,$e0,$78,$0e,$c6,$7c,$00,
-  $fc,$b4,$30,$30,$30,$30,$78,$00,$cc,$cc,$cc,$cc,$cc,$cc,$fc,$00,$cc,$cc,$cc,$cc,$cc,$78,$30,$00,$c6,$c6,$c6,$c6,
-  $d6,$fe,$6c,$00,$c6,$c6,$6c,$38,$6c,$c6,$c6,$00,$cc,$cc,$cc,$78,$30,$30,$78,$00,$fe,$c6,$8c,$18,$32,$66,$fe,$00,
-  $78,$60,$60,$60,$60,$60,$78,$00,$c0,$60,$30,$18,$0c,$06,$02,$00,$78,$18,$18,$18,$18,$18,$78,$00,$10,$38,$6c,$c6,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$30,$30,$18,$00,$00,$00,$00,$00,$00,$00,$78,$0c,$7c,$cc,$76,$00,
-  $e0,$60,$60,$7c,$66,$66,$dc,$00,$00,$00,$78,$cc,$c0,$cc,$78,$00,$1c,$0c,$0c,$7c,$cc,$cc,$76,$00,$00,$00,$78,$cc,
-  $fc,$c0,$78,$00,$38,$6c,$64,$f0,$60,$60,$f0,$00,$00,$00,$76,$cc,$cc,$7c,$0c,$f8,$e0,$60,$6c,$76,$66,$66,$e6,$00,
-  $30,$00,$70,$30,$30,$30,$78,$00,$0c,$00,$1c,$0c,$0c,$cc,$cc,$78,$e0,$60,$66,$6c,$78,$6c,$e6,$00,$70,$30,$30,$30,
-  $30,$30,$78,$00,$00,$00,$cc,$fe,$fe,$d6,$d6,$00,$00,$00,$b8,$cc,$cc,$cc,$cc,$00,$00,$00,$78,$cc,$cc,$cc,$78,$00,
-  $00,$00,$dc,$66,$66,$7c,$60,$f0,$00,$00,$76,$cc,$cc,$7c,$0c,$1e,$00,$00,$dc,$76,$62,$60,$f0,$00,$00,$00,$7c,$c0,
-  $70,$1c,$f8,$00,$10,$30,$fc,$30,$30,$34,$18,$00,$00,$00,$cc,$cc,$cc,$cc,$76,$00,$00,$00,$cc,$cc,$cc,$78,$30,$00,
-  $00,$00,$c6,$c6,$d6,$fe,$6c,$00,$00,$00,$c6,$6c,$38,$6c,$c6,$00,$00,$00,$cc,$cc,$cc,$7c,$0c,$f8,$00,$00,$fc,$98,
-  $30,$64,$fc,$00,$1c,$30,$30,$e0,$30,$30,$1c,$00,$18,$18,$18,$00,$18,$18,$18,$00,$e0,$30,$30,$1c,$30,$30,$e0,$00,
-  $76,$dc,$00,$00,$00,$00,$00,$00,$00,$10,$38,$6c,$c6,$c6,$fe,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $48,$00,$fc,$c0,$c0,$f8,$c0,$fe,$a0,$d0,$90,$90,$90,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$22,$88,$22,$88,$22,$88,$22,$88,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$ff,$ab,$d5,$ab,
-  $d5,$ab,$d5,$ff,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$f0,$10,$10,$10,$10,$10,$f0,$10,$f0,$10,$10,$10,
-  $14,$14,$14,$14,$f4,$14,$14,$14,$00,$00,$00,$00,$fc,$14,$14,$14,$48,$00,$78,$cc,$fc,$c0,$7c,$00,$14,$14,$f4,$04,
-  $f4,$14,$14,$14,$14,$14,$14,$14,$14,$14,$14,$14,$00,$00,$fc,$04,$f4,$14,$14,$14,$14,$14,$f4,$04,$fc,$00,$00,$00,
-  $14,$14,$14,$14,$fc,$00,$00,$00,$10,$10,$f0,$10,$f0,$00,$00,$00,$00,$00,$00,$00,$f0,$10,$10,$10,$0e,$1e,$36,$66,
-  $fe,$c6,$c6,$00,$fc,$c0,$c0,$fc,$c6,$c6,$fc,$00,$f8,$cc,$cc,$fc,$c6,$c6,$fc,$00,$fc,$c0,$c0,$c0,$c0,$c0,$c0,$00,
-  $7e,$66,$66,$66,$66,$66,$ff,$c3,$fc,$c0,$c0,$f8,$c0,$c0,$fe,$00,$db,$db,$7e,$18,$7e,$db,$db,$00,$3c,$66,$06,$3c,
-  $06,$c6,$7c,$00,$c6,$c6,$ce,$de,$f6,$e6,$c6,$00,$d6,$c6,$ce,$de,$f6,$e6,$c6,$00,$c6,$cc,$d8,$f8,$cc,$c6,$c6,$00,
-  $06,$0e,$1e,$36,$66,$c6,$c6,$00,$c6,$ee,$fe,$d6,$c6,$c6,$c6,$00,$c6,$c6,$c6,$fe,$c6,$c6,$c6,$00,$7c,$c6,$c6,$c6,
-  $c6,$c6,$7c,$00,$fe,$c6,$c6,$c6,$c6,$c6,$c6,$00,$fc,$c6,$c6,$fc,$c0,$c0,$c0,$00,$7c,$c6,$c0,$c0,$c0,$c6,$7c,$00,
-  $fc,$30,$30,$30,$30,$30,$30,$00,$c6,$c6,$c6,$7e,$06,$c6,$7c,$00,$18,$7e,$db,$db,$db,$7e,$18,$00,$c3,$66,$3c,$18,
-  $3c,$66,$c3,$00,$cc,$cc,$cc,$cc,$cc,$cc,$fe,$06,$c6,$c6,$c6,$7e,$06,$06,$06,$00,$d6,$d6,$d6,$d6,$d6,$d6,$fe,$00,
-  $d6,$d6,$d6,$d6,$d6,$d6,$ff,$03,$f0,$30,$30,$3e,$33,$33,$3e,$00,$c2,$c2,$c2,$f2,$da,$da,$f2,$00,$c0,$c0,$c0,$fc,
-  $c6,$c6,$fc,$00,$7c,$c6,$06,$1e,$06,$c6,$7c,$00,$ce,$db,$db,$fb,$db,$db,$ce,$00,$7e,$c6,$c6,$7e,$36,$66,$c6,$00,
-  $00,$00,$78,$0c,$7c,$cc,$7e,$00,$04,$78,$c0,$f8,$cc,$cc,$78,$00,$00,$00,$f8,$cc,$f8,$c6,$fc,$00,$00,$00,$fc,$c0,
-  $c0,$c0,$c0,$00,$00,$00,$7e,$66,$66,$66,$ff,$c3,$00,$00,$78,$cc,$fc,$c0,$7c,$00,$00,$00,$db,$7e,$18,$7e,$db,$00,
-  $00,$00,$78,$cc,$18,$cc,$78,$00,$00,$00,$cc,$cc,$dc,$ec,$cc,$00,$30,$00,$cc,$cc,$dc,$ec,$cc,$00,$00,$00,$cc,$d8,
-  $f0,$cc,$cc,$00,$00,$00,$0e,$1e,$36,$66,$c6,$00,$00,$00,$c6,$ee,$d6,$c6,$c6,$00,$00,$00,$cc,$cc,$fc,$cc,$cc,$00,
-  $00,$00,$78,$cc,$cc,$cc,$78,$00,$00,$00,$fc,$cc,$cc,$cc,$cc,$00,$00,$00,$f8,$cc,$cc,$f8,$c0,$c0,$00,$00,$78,$cc,
-  $c0,$cc,$78,$00,$00,$00,$fc,$30,$30,$30,$30,$00,$00,$00,$cc,$cc,$7c,$0c,$cc,$78,$00,$18,$7e,$db,$db,$7e,$18,$18,
-  $00,$00,$c6,$6c,$38,$6c,$c6,$00,$00,$00,$cc,$cc,$cc,$cc,$fe,$06,$00,$00,$cc,$cc,$7c,$0c,$0c,$00,$00,$00,$d6,$d6,
-  $d6,$d6,$fe,$00,$00,$00,$d6,$d6,$d6,$d6,$ff,$03,$00,$00,$f0,$30,$3e,$33,$3e,$00,$00,$00,$c2,$c2,$f2,$da,$f2,$00,
-  $00,$00,$c0,$c0,$f8,$cc,$f8,$00,$00,$00,$7c,$c6,$1e,$c6,$7c,$00,$00,$00,$ce,$db,$fb,$db,$ce,$00,$00,$00,$7c,$cc,
-  $7c,$6c,$cc,$00);
-const kgiWFont8Wdt: array[0..256-1] of Byte = (
-  $00,$08,$08,$07,$07,$07,$07,$24,$08,$16,$08,$08,$16,$07,$08,$08,$07,$07,$16,$24,$08,$08,$16,$08,$16,$16,$07,$07,
-  $07,$08,$08,$08,$05,$24,$15,$07,$07,$07,$07,$13,$14,$14,$08,$16,$23,$16,$32,$07,$07,$06,$06,$06,$07,$06,$06,$06,
-  $06,$06,$32,$23,$05,$16,$15,$16,$07,$06,$07,$07,$07,$07,$07,$07,$06,$14,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,
-  $06,$06,$06,$07,$07,$06,$07,$14,$07,$14,$07,$08,$23,$07,$07,$06,$07,$06,$06,$07,$07,$14,$06,$07,$14,$07,$06,$06,
-  $07,$07,$07,$06,$06,$07,$06,$07,$07,$06,$06,$06,$32,$06,$07,$07,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
-  $07,$04,$00,$00,$00,$00,$00,$00,$08,$08,$08,$08,$08,$08,$08,$08,$06,$08,$08,$08,$08,$08,$08,$08,$07,$07,$07,$06,
-  $08,$07,$08,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$06,$07,$08,$08,$07,$07,$07,$08,$08,$07,$07,$07,$08,$07,
-  $07,$06,$07,$06,$08,$06,$08,$06,$06,$06,$06,$07,$07,$06,$06,$06,$06,$06,$06,$06,$08,$07,$07,$06,$07,$08,$08,$07,
-  $06,$07,$08,$06);
-
-
-function createFontTexture (const font: PByte; const fontwdt: PByte; hgt: Integer; prop: Boolean): GLuint;
-const
-  Width = 16*8;
-  Height = 16*16;
-var
-  tex, tpp: PByte;
-  b: Byte;
-  cc: Integer;
-  x, y, dx, dy: Integer;
-begin
-  GetMem(tex, Width*Height*4);
-  FillChar(tex^, Width*Height*4, 0);
-
-  for cc := 0 to 255 do
-  begin
-    x := (cc mod 16)*8;
-    y := (cc div 16)*16;
-    for dy := 0 to hgt-1 do
-    begin
-      b := font[cc*hgt+dy];
-      if prop then b := b shl (fontwdt[cc] shr 4);
-      tpp := tex+((y+dy)*(Width*4))+x*4;
-      for dx := 0 to 7 do
-      begin
-        if ((b and $80) <> 0) then
-        begin
-          tpp^ := 255; Inc(tpp);
-          tpp^ := 255; Inc(tpp);
-          tpp^ := 255; Inc(tpp);
-          tpp^ := 255; Inc(tpp);
-        end
-        else
-        begin
-          tpp^ := 0; Inc(tpp);
-          tpp^ := 0; Inc(tpp);
-          tpp^ := 0; Inc(tpp);
-          tpp^ := 0; Inc(tpp);
-        end;
-        b := (b and $7f) shl 1;
-      end;
-    end;
-  end;
-
-  glGenTextures(1, @result);
-  if (result = 0) then raise Exception.Create('can''t create Holmes font texture');
-
-  glBindTexture(GL_TEXTURE_2D, result);
-  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
-  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
-  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
-  //GLfloat[4] bclr = 0.0;
-  //glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, bclr.ptr);
-
-  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Width, Height, 0, GL_RGBA{gltt}, GL_UNSIGNED_BYTE, tex);
-  glFlush();
-
-  //FreeMem(tex);
-end;
-
-
-{
-var
-  font6texid: GLuint = 0;
-  font8texid: GLuint = 0;
-  prfont6texid: GLuint = 0;
-  prfont8texid: GLuint = 0;
-
-
-procedure deleteFonts ();
-begin
-  if (font6texid <> 0) then glDeleteTextures(1, @font6texid);
-  if (font8texid <> 0) then glDeleteTextures(1, @font8texid);
-  if (prfont6texid <> 0) then glDeleteTextures(1, @prfont6texid);
-  if (prfont8texid <> 0) then glDeleteTextures(1, @prfont8texid);
-  font6texid := 0;
-  font8texid := 0;
-  prfont6texid := 0;
-  prfont8texid := 0;
-end;
-
-
-procedure createFonts ();
-begin
-  if (font6texid = 0) then font6texid := createFontTexture(kgiFont6, kgiFont6PropWidth, false);
-  if (font8texid = 0) then font8texid := createFontTexture(kgiFont8, kgiFont8PropWidth, false);
-  if (prfont6texid = 0) then prfont6texid := createFontTexture(kgiFont6, kgiFont6PropWidth, true);
-  if (prfont8texid = 0) then prfont8texid := createFontTexture(kgiFont8, kgiFont8PropWidth, true);
-end;
-}
index b4f047ed009dbb4cd04889df4aa21815c7a7e043..5f1cb3e71055523efb7483cecd4748dbce5a54e8 100644 (file)
@@ -1733,7 +1733,7 @@ end;
 begin
   evMouseCB := onMouseEvent;
   evKeyCB := onKeyEvent;
-  uiContext.font := 'win14';
+  //uiContext.font := 'win14';
 
   conRegVar('hlm_ui_scale', @fuiRenderScale, 0.01, 5.0, 'Holmes UI scale', '', false);
 end.
index 734ae36ff49f1d76f11d66d7930c63d7c81c5908..2a444ead437b2e2e6cad6313405e344d309ed38d 100644 (file)
@@ -43,7 +43,7 @@ uses
   g_weapons, SysUtils, g_triggers, MAPDEF, g_map,
   g_menu, g_language, g_net, g_holmes,
   utils, conbuf, envvars, fui_wadread, fui_style,
-  xparser;
+  fui_gfx_gl, xparser;
 
 
 var
@@ -109,7 +109,6 @@ begin
   try
     e_LogWriteln('FlexUI: loading stylesheet...');
     uiLoadStyles('flexui/widgets.wgs');
-    g_holmes_imfunctional := false;
   except on e: TParserException do
     begin
       writeln('ERROR at (', e.tokLine, ',', e.tokCol, '): ', e.message);
@@ -120,6 +119,21 @@ begin
       //raise;
     end;
   end;
+  try
+    fuiGfxLoadFont('win8', 'flexui/fonts/win8.fuifont');
+    fuiGfxLoadFont('win14', 'flexui/fonts/win14.fuifont');
+    fuiGfxLoadFont('win16', 'flexui/fonts/win16.fuifont');
+    g_holmes_imfunctional := false;
+  except on e: Exception do
+    begin
+      writeln('ERROR loading FlexUI fonts');
+      //raise;
+    end;
+  else
+    begin
+      //raise;
+    end;
+  end;
 {$ENDIF}
 
   e_WriteLog('Entering SDLMain', TMsgType.Notify);
index d20f32cc00e86ad555bb38a2a33735baf4f1d067..a09f93f6e786eff9239a42cd92f5b630032a24c9 100644 (file)
@@ -772,6 +772,9 @@ var
 begin
 {$IFDEF HEADLESS}
   e_NoGraphics := true;
+{$ELSE}
+  uiInitialize();
+  uiContext.font := 'win14';
 {$ENDIF}
 
   idx := 1;
@@ -817,7 +820,8 @@ begin
       begin
         itmp := 0;
         val(ParamStr(idx), itmp, valres);
-        if (valres = 0) then
+        {$IFNDEF HEADLESS}
+        if (valres = 0) and (not g_holmes_imfunctional) then
         begin
           case itmp of
             8: uiContext.font := 'win8';
@@ -825,6 +829,11 @@ begin
             16: uiContext.font := 'win16';
           end;
         end;
+        {$ELSE}
+        // fuck off, fpc!
+        itmp := itmp;
+        valres := valres;
+        {$ENDIF}
         Inc(idx);
       end;
     end;