EFIGraphicalConsole.Mod 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. MODULE EFIGraphicalConsole; (** AUTHOR ""; PURPOSE ""; *)
  2. IMPORT SYSTEM,Trace;
  3. CONST
  4. (* PixelFormat enum *)
  5. PFRGBX8Bit= 0; (* a pixel is 32 bit. Each color is 8bit and they are ordered Red,Green,Blue,Reserved *)
  6. PFBGRX8Bit= 1; (* a pixel is 32 bit. Each color is 8bit and they are ordered Blue,Green,Red,Reserved *)
  7. PFBitMask= 2; (* format is defined by PixelBitmask *)
  8. PFBltOnly= 3; (* this mode does not support a physical frame buffer *)
  9. PFMax= 4;
  10. TYPE
  11. Buffer = ADDRESS;
  12. Char = RECORD
  13. dx*,x*,y*,w*,h*: INTEGER;
  14. buffer*: Buffer;
  15. END;
  16. Font = RECORD
  17. height*, minX*, maxX*, minY*, maxY*: INTEGER;
  18. char: ARRAY 256 OF Char;
  19. END;
  20. (* copies of types in EFIGraphicsOutput -- to be independent of EFI *)
  21. GraphicsModeInfo = POINTER TO GraphicsModeInfoDescription;
  22. GraphicsModeInfoDescription = RECORD
  23. Version-: LONGINT; (* = 0 for the structure specified here. If > 0, structure extended backwards compatibly *)
  24. HorizontalResolution-: LONGINT;
  25. VerticalResolution-: LONGINT;
  26. PixelFormat-: LONGINT; (* enum *)
  27. PixelBitmask-: RECORD RedMask-,GreenMask-,BlueMask-,ReservedMask-:LONGINT; END;
  28. PixelsPerScanline-: LONGINT;
  29. END;
  30. VAR
  31. font: Font;
  32. (* character pattern buffer *)
  33. buffer: ARRAY 1342 OF CHAR;
  34. (* frame buffer parameters *)
  35. adr: ADDRESS; VAR x,y: SIZE; w,h,depth: SIZE;
  36. info: GraphicsModeInfo;
  37. traceChar: PROCEDURE {DELEGATE} (c: CHAR);
  38. PROCEDURE MakeFont*(VAR font: Font);
  39. VAR buf: Buffer; pos: LONGINT;
  40. PROCEDURE SetBuf(VAR p: Buffer); BEGIN p := ADDRESSOF(buffer[pos]) END SetBuf;
  41. PROCEDURE Put1(ch: CHAR); BEGIN buffer[pos] := ch; INC(pos) END Put1;
  42. PROCEDURE Dimensions(VAR char: Char; dx,x,y,w,h: INTEGER); BEGIN char.dx := dx; char.x := x; char.y := y; char.w := w; char.h := h END Dimensions;
  43. BEGIN
  44. font.height := 14;
  45. font.minX := 0;
  46. font.maxX := 13;
  47. font.minY := -4;
  48. font.maxY := 10;
  49. Dimensions(font.char[0], 7, 1, 0, 5, 10);SetBuf(font.char[0].buffer);Put1(005X);Put1(00AX);Put1(01FX);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(01FX);
  50. Dimensions(font.char[1], 12, 0, -3, 12, 12);SetBuf(font.char[1].buffer);Put1(00CX);Put1(00CX);Put1(0FFX);Put1(00FX);Put1(001X);Put1(008X);Put1(001X);Put1(008X);Put1(001X);Put1(008X);Put1(001X);Put1(008X);Put1(001X);Put1(008X);Put1(001X);Put1(008X);Put1(001X);Put1(008X);Put1(001X);Put1(008X);Put1(001X);Put1(008X);Put1(001X);Put1(008X);Put1(0FFX);Put1(00FX);
  51. Dimensions(font.char[2], 12, 0, -3, 12, 12);font.char[2].buffer := font.char[1].buffer;
  52. Dimensions(font.char[3], 12, 0, -3, 12, 12);font.char[3].buffer := font.char[1].buffer;
  53. Dimensions(font.char[4], 12, 0, -3, 12, 12);font.char[4].buffer := font.char[1].buffer;
  54. Dimensions(font.char[5], 12, 0, -3, 12, 12);font.char[5].buffer := font.char[1].buffer;
  55. Dimensions(font.char[6], 12, 0, -3, 12, 12);font.char[6].buffer := font.char[1].buffer;
  56. Dimensions(font.char[7], 12, 0, -3, 12, 12);font.char[7].buffer := font.char[1].buffer;
  57. Dimensions(font.char[8], 12, 0, -3, 12, 12);font.char[8].buffer := font.char[1].buffer;
  58. Dimensions(font.char[9], 16, 0, 0, 0, 0);SetBuf(font.char[9].buffer);Put1(000X);Put1(000X);
  59. Dimensions(font.char[10], 12, 0, -3, 12, 12);font.char[10].buffer := font.char[1].buffer;
  60. Dimensions(font.char[11], 12, 0, -3, 12, 12);font.char[11].buffer := font.char[1].buffer;
  61. Dimensions(font.char[12], 12, 0, -3, 12, 12);font.char[12].buffer := font.char[1].buffer;
  62. Dimensions(font.char[13], 12, 0, -3, 12, 12);font.char[13].buffer := font.char[1].buffer;
  63. Dimensions(font.char[14], 12, 0, -3, 12, 12);font.char[14].buffer := font.char[1].buffer;
  64. Dimensions(font.char[15], 12, 0, -3, 12, 12);font.char[15].buffer := font.char[1].buffer;
  65. Dimensions(font.char[16], 12, 0, -3, 12, 12);font.char[16].buffer := font.char[1].buffer;
  66. Dimensions(font.char[17], 12, 0, -3, 12, 12);font.char[17].buffer := font.char[1].buffer;
  67. Dimensions(font.char[18], 12, 0, -3, 12, 12);font.char[18].buffer := font.char[1].buffer;
  68. Dimensions(font.char[19], 12, 0, -3, 12, 12);font.char[19].buffer := font.char[1].buffer;
  69. Dimensions(font.char[20], 12, 0, -3, 12, 12);font.char[20].buffer := font.char[1].buffer;
  70. Dimensions(font.char[21], 12, 0, -3, 12, 12);font.char[21].buffer := font.char[1].buffer;
  71. Dimensions(font.char[22], 12, 0, -3, 12, 12);font.char[22].buffer := font.char[1].buffer;
  72. Dimensions(font.char[23], 12, 0, -3, 12, 12);font.char[23].buffer := font.char[1].buffer;
  73. Dimensions(font.char[24], 12, 0, -3, 12, 12);font.char[24].buffer := font.char[1].buffer;
  74. Dimensions(font.char[25], 12, 0, -3, 12, 12);font.char[25].buffer := font.char[1].buffer;
  75. Dimensions(font.char[26], 12, 0, -3, 12, 12);font.char[26].buffer := font.char[1].buffer;
  76. Dimensions(font.char[27], 12, 0, -3, 12, 12);font.char[27].buffer := font.char[1].buffer;
  77. Dimensions(font.char[28], 12, 0, -3, 12, 12);font.char[28].buffer := font.char[1].buffer;
  78. Dimensions(font.char[29], 12, 0, -3, 12, 12);font.char[29].buffer := font.char[1].buffer;
  79. Dimensions(font.char[30], 12, 0, -3, 12, 12);font.char[30].buffer := font.char[1].buffer;
  80. Dimensions(font.char[31], 12, 0, -3, 12, 12);font.char[31].buffer := font.char[1].buffer;
  81. Dimensions(font.char[32], 4, 0, 0, 0, 0);SetBuf(font.char[32].buffer);Put1(000X);Put1(000X);
  82. Dimensions(font.char[33], 4, 2, 0, 1, 9);SetBuf(font.char[33].buffer);Put1(001X);Put1(009X);Put1(001X);Put1(001X);Put1(000X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);
  83. Dimensions(font.char[34], 5, 1, 6, 3, 3);SetBuf(font.char[34].buffer);Put1(003X);Put1(003X);Put1(005X);Put1(005X);Put1(005X);
  84. Dimensions(font.char[35], 7, 0, 0, 6, 9);SetBuf(font.char[35].buffer);Put1(006X);Put1(009X);Put1(012X);Put1(012X);Put1(012X);Put1(03FX);Put1(012X);Put1(03FX);Put1(012X);Put1(012X);Put1(012X);
  85. Dimensions(font.char[36], 6, 0, -1, 6, 11);SetBuf(font.char[36].buffer);Put1(006X);Put1(00BX);Put1(004X);Put1(00FX);Put1(014X);Put1(014X);Put1(014X);Put1(00CX);Put1(00AX);Put1(00AX);Put1(00AX);Put1(03CX);Put1(008X);
  86. Dimensions(font.char[37], 9, 1, 0, 7, 9);SetBuf(font.char[37].buffer);Put1(007X);Put1(009X);Put1(032X);Put1(04AX);Put1(04CX);Put1(034X);Put1(008X);Put1(016X);Put1(019X);Put1(029X);Put1(026X);
  87. Dimensions(font.char[38], 7, 0, 0, 7, 9);SetBuf(font.char[38].buffer);Put1(007X);Put1(009X);Put1(04EX);Put1(031X);Put1(021X);Put1(051X);Put1(04AX);Put1(00CX);Put1(012X);Put1(012X);Put1(01CX);
  88. Dimensions(font.char[39], 3, 1, 6, 1, 3);SetBuf(font.char[39].buffer);Put1(001X);Put1(003X);Put1(001X);Put1(001X);Put1(001X);
  89. Dimensions(font.char[40], 5, 1, -2, 3, 11);SetBuf(font.char[40].buffer);Put1(003X);Put1(00BX);Put1(004X);Put1(002X);Put1(002X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(002X);Put1(002X);Put1(004X);
  90. Dimensions(font.char[41], 5, 1, -2, 3, 11);SetBuf(font.char[41].buffer);Put1(003X);Put1(00BX);Put1(001X);Put1(002X);Put1(002X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(002X);Put1(002X);Put1(001X);
  91. Dimensions(font.char[42], 7, 0, 0, 7, 7);SetBuf(font.char[42].buffer);Put1(007X);Put1(007X);Put1(022X);Put1(014X);Put1(008X);Put1(07FX);Put1(008X);Put1(014X);Put1(022X);
  92. Dimensions(font.char[43], 7, 0, 0, 7, 7);SetBuf(font.char[43].buffer);Put1(007X);Put1(007X);Put1(008X);Put1(008X);Put1(008X);Put1(07FX);Put1(008X);Put1(008X);Put1(008X);
  93. Dimensions(font.char[44], 3, 0, -3, 2, 5);SetBuf(font.char[44].buffer);Put1(002X);Put1(005X);Put1(001X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);
  94. Dimensions(font.char[45], 7, 1, 3, 6, 1);SetBuf(font.char[45].buffer);Put1(006X);Put1(001X);Put1(03FX);
  95. Dimensions(font.char[46], 3, 1, 0, 1, 2);SetBuf(font.char[46].buffer);Put1(001X);Put1(002X);Put1(001X);Put1(001X);
  96. Dimensions(font.char[47], 5, 0, 0, 5, 10);SetBuf(font.char[47].buffer);Put1(005X);Put1(00AX);Put1(001X);Put1(001X);Put1(002X);Put1(002X);Put1(004X);Put1(004X);Put1(008X);Put1(008X);Put1(010X);Put1(010X);
  97. Dimensions(font.char[48], 6, 0, 0, 5, 9);SetBuf(font.char[48].buffer);Put1(005X);Put1(009X);Put1(00EX);Put1(00AX);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(00AX);Put1(00EX);
  98. Dimensions(font.char[49], 6, 0, 0, 3, 9);SetBuf(font.char[49].buffer);Put1(003X);Put1(009X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(005X);Put1(006X);Put1(004X);
  99. Dimensions(font.char[50], 6, 0, 0, 5, 9);SetBuf(font.char[50].buffer);Put1(005X);Put1(009X);Put1(01FX);Put1(001X);Put1(002X);Put1(004X);Put1(008X);Put1(008X);Put1(008X);Put1(008X);Put1(007X);
  100. Dimensions(font.char[51], 6, 1, 0, 4, 9);SetBuf(font.char[51].buffer);Put1(004X);Put1(009X);Put1(007X);Put1(004X);Put1(008X);Put1(008X);Put1(007X);Put1(004X);Put1(008X);Put1(008X);Put1(007X);
  101. Dimensions(font.char[52], 6, 0, 0, 6, 9);SetBuf(font.char[52].buffer);Put1(006X);Put1(009X);Put1(008X);Put1(008X);Put1(008X);Put1(03FX);Put1(009X);Put1(009X);Put1(00AX);Put1(00CX);Put1(008X);
  102. Dimensions(font.char[53], 6, 0, 0, 5, 9);SetBuf(font.char[53].buffer);Put1(005X);Put1(009X);Put1(007X);Put1(008X);Put1(010X);Put1(010X);Put1(018X);Put1(00FX);Put1(001X);Put1(002X);Put1(01EX);
  103. Dimensions(font.char[54], 6, 0, 0, 5, 9);SetBuf(font.char[54].buffer);Put1(005X);Put1(009X);Put1(00EX);Put1(011X);Put1(011X);Put1(013X);Put1(00DX);Put1(001X);Put1(002X);Put1(006X);Put1(018X);
  104. Dimensions(font.char[55], 6, 0, 0, 5, 9);SetBuf(font.char[55].buffer);Put1(005X);Put1(009X);Put1(002X);Put1(002X);Put1(002X);Put1(004X);Put1(004X);Put1(004X);Put1(008X);Put1(008X);Put1(01FX);
  105. Dimensions(font.char[56], 6, 0, 0, 5, 9);SetBuf(font.char[56].buffer);Put1(005X);Put1(009X);Put1(00EX);Put1(011X);Put1(011X);Put1(00AX);Put1(004X);Put1(00AX);Put1(011X);Put1(011X);Put1(00EX);
  106. Dimensions(font.char[57], 6, 0, 0, 5, 9);SetBuf(font.char[57].buffer);Put1(005X);Put1(009X);Put1(003X);Put1(00CX);Put1(008X);Put1(010X);Put1(016X);Put1(019X);Put1(011X);Put1(011X);Put1(00EX);
  107. Dimensions(font.char[58], 4, 2, 0, 1, 7);SetBuf(font.char[58].buffer);Put1(001X);Put1(007X);Put1(001X);Put1(001X);Put1(000X);Put1(000X);Put1(000X);Put1(001X);Put1(001X);
  108. Dimensions(font.char[59], 4, 1, -3, 2, 10);SetBuf(font.char[59].buffer);Put1(002X);Put1(00AX);Put1(001X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(000X);Put1(000X);Put1(000X);Put1(002X);Put1(002X);
  109. Dimensions(font.char[60], 7, 0, 0, 7, 7);SetBuf(font.char[60].buffer);Put1(007X);Put1(007X);Put1(060X);Put1(018X);Put1(006X);Put1(001X);Put1(006X);Put1(018X);Put1(060X);
  110. Dimensions(font.char[61], 7, 1, 2, 5, 3);SetBuf(font.char[61].buffer);Put1(005X);Put1(003X);Put1(01FX);Put1(000X);Put1(01FX);
  111. Dimensions(font.char[62], 7, 0, 0, 7, 7);SetBuf(font.char[62].buffer);Put1(007X);Put1(007X);Put1(003X);Put1(00CX);Put1(030X);Put1(040X);Put1(030X);Put1(00CX);Put1(003X);
  112. Dimensions(font.char[63], 6, 1, 0, 4, 9);SetBuf(font.char[63].buffer);Put1(004X);Put1(009X);Put1(002X);Put1(002X);Put1(000X);Put1(002X);Put1(002X);Put1(004X);Put1(008X);Put1(008X);Put1(007X);
  113. Dimensions(font.char[64], 12, 1, 0, 10, 9);SetBuf(font.char[64].buffer);Put1(00AX);Put1(009X);Put1(00CX);Put1(000X);Put1(0C2X);Put1(001X);Put1(059X);Put1(001X);Put1(069X);Put1(002X);Put1(049X);Put1(002X);Put1(049X);Put1(002X);Put1(072X);Put1(002X);Put1(006X);Put1(001X);Put1(0F8X);Put1(000X);
  114. Dimensions(font.char[65], 7, 0, 0, 7, 9);SetBuf(font.char[65].buffer);Put1(007X);Put1(009X);Put1(041X);Put1(041X);Put1(022X);Put1(03EX);Put1(022X);Put1(014X);Put1(014X);Put1(008X);Put1(008X);
  115. Dimensions(font.char[66], 7, 1, 0, 5, 9);SetBuf(font.char[66].buffer);Put1(005X);Put1(009X);Put1(00FX);Put1(011X);Put1(011X);Put1(011X);Put1(00FX);Put1(011X);Put1(011X);Put1(011X);Put1(00FX);
  116. Dimensions(font.char[67], 7, 1, 0, 5, 9);SetBuf(font.char[67].buffer);Put1(005X);Put1(009X);Put1(01CX);Put1(002X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(002X);Put1(01CX);
  117. Dimensions(font.char[68], 9, 1, 0, 7, 9);SetBuf(font.char[68].buffer);Put1(007X);Put1(009X);Put1(01FX);Put1(021X);Put1(041X);Put1(041X);Put1(041X);Put1(041X);Put1(041X);Put1(021X);Put1(01FX);
  118. Dimensions(font.char[69], 7, 1, 0, 5, 9);SetBuf(font.char[69].buffer);Put1(005X);Put1(009X);Put1(01FX);Put1(001X);Put1(001X);Put1(001X);Put1(01FX);Put1(001X);Put1(001X);Put1(001X);Put1(01FX);
  119. Dimensions(font.char[70], 6, 1, 0, 5, 9);SetBuf(font.char[70].buffer);Put1(005X);Put1(009X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(01FX);Put1(001X);Put1(001X);Put1(001X);Put1(01FX);
  120. Dimensions(font.char[71], 8, 1, 0, 6, 9);SetBuf(font.char[71].buffer);Put1(006X);Put1(009X);Put1(03CX);Put1(022X);Put1(021X);Put1(021X);Put1(021X);Put1(001X);Put1(001X);Put1(002X);Put1(03CX);
  121. Dimensions(font.char[72], 8, 1, 0, 6, 9);SetBuf(font.char[72].buffer);Put1(006X);Put1(009X);Put1(021X);Put1(021X);Put1(021X);Put1(021X);Put1(03FX);Put1(021X);Put1(021X);Put1(021X);Put1(021X);
  122. Dimensions(font.char[73], 3, 1, 0, 1, 9);SetBuf(font.char[73].buffer);Put1(001X);Put1(009X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);
  123. Dimensions(font.char[74], 4, 0, 0, 3, 9);SetBuf(font.char[74].buffer);Put1(003X);Put1(009X);Put1(003X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);
  124. Dimensions(font.char[75], 7, 1, 0, 6, 9);SetBuf(font.char[75].buffer);Put1(006X);Put1(009X);Put1(021X);Put1(011X);Put1(009X);Put1(005X);Put1(003X);Put1(005X);Put1(009X);Put1(011X);Put1(021X);
  125. Dimensions(font.char[76], 6, 1, 0, 5, 9);SetBuf(font.char[76].buffer);Put1(005X);Put1(009X);Put1(01FX);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);
  126. Dimensions(font.char[77], 11, 0, 0, 11, 9);SetBuf(font.char[77].buffer);Put1(00BX);Put1(009X);Put1(021X);Put1(004X);Put1(021X);Put1(004X);Put1(051X);Put1(004X);Put1(052X);Put1(002X);Put1(052X);Put1(002X);Put1(08AX);Put1(002X);Put1(08AX);Put1(002X);Put1(004X);Put1(001X);Put1(004X);Put1(001X);
  127. Dimensions(font.char[78], 9, 1, 0, 7, 9);SetBuf(font.char[78].buffer);Put1(007X);Put1(009X);Put1(041X);Put1(061X);Put1(051X);Put1(049X);Put1(049X);Put1(045X);Put1(045X);Put1(043X);Put1(041X);
  128. Dimensions(font.char[79], 9, 1, 0, 7, 9);SetBuf(font.char[79].buffer);Put1(007X);Put1(009X);Put1(01CX);Put1(022X);Put1(041X);Put1(041X);Put1(041X);Put1(041X);Put1(041X);Put1(022X);Put1(01CX);
  129. Dimensions(font.char[80], 6, 1, 0, 5, 9);SetBuf(font.char[80].buffer);Put1(005X);Put1(009X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(00FX);Put1(011X);Put1(011X);Put1(011X);Put1(00FX);
  130. Dimensions(font.char[81], 9, 1, -2, 8, 11);SetBuf(font.char[81].buffer);Put1(008X);Put1(00BX);Put1(0C0X);Put1(020X);Put1(01CX);Put1(022X);Put1(041X);Put1(041X);Put1(041X);Put1(041X);Put1(041X);Put1(022X);Put1(01CX);
  131. Dimensions(font.char[82], 7, 1, 0, 6, 9);SetBuf(font.char[82].buffer);Put1(006X);Put1(009X);Put1(021X);Put1(011X);Put1(011X);Put1(009X);Put1(00FX);Put1(011X);Put1(011X);Put1(011X);Put1(00FX);
  132. Dimensions(font.char[83], 6, 1, 0, 4, 9);SetBuf(font.char[83].buffer);Put1(004X);Put1(009X);Put1(007X);Put1(008X);Put1(008X);Put1(004X);Put1(006X);Put1(002X);Put1(001X);Put1(001X);Put1(00EX);
  133. Dimensions(font.char[84], 7, 0, 0, 7, 9);SetBuf(font.char[84].buffer);Put1(007X);Put1(009X);Put1(008X);Put1(008X);Put1(008X);Put1(008X);Put1(008X);Put1(008X);Put1(008X);Put1(008X);Put1(07FX);
  134. Dimensions(font.char[85], 8, 1, 0, 6, 9);SetBuf(font.char[85].buffer);Put1(006X);Put1(009X);Put1(01EX);Put1(012X);Put1(021X);Put1(021X);Put1(021X);Put1(021X);Put1(021X);Put1(021X);Put1(021X);
  135. Dimensions(font.char[86], 7, 0, 0, 7, 9);SetBuf(font.char[86].buffer);Put1(007X);Put1(009X);Put1(008X);Put1(008X);Put1(014X);Put1(014X);Put1(022X);Put1(022X);Put1(022X);Put1(041X);Put1(041X);
  136. Dimensions(font.char[87], 13, 0, 0, 13, 9);SetBuf(font.char[87].buffer);Put1(00DX);Put1(009X);Put1(008X);Put1(002X);Put1(008X);Put1(002X);Put1(014X);Put1(005X);Put1(014X);Put1(005X);Put1(012X);Put1(009X);Put1(0A2X);Put1(008X);Put1(0A2X);Put1(008X);Put1(041X);Put1(010X);Put1(041X);Put1(010X);
  137. Dimensions(font.char[88], 7, 0, 0, 7, 9);SetBuf(font.char[88].buffer);Put1(007X);Put1(009X);Put1(041X);Put1(022X);Put1(022X);Put1(014X);Put1(008X);Put1(014X);Put1(022X);Put1(022X);Put1(041X);
  138. Dimensions(font.char[89], 6, 0, 0, 6, 9);SetBuf(font.char[89].buffer);Put1(006X);Put1(009X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(00AX);Put1(012X);Put1(011X);Put1(021X);Put1(021X);
  139. Dimensions(font.char[90], 5, 0, 0, 5, 9);SetBuf(font.char[90].buffer);Put1(005X);Put1(009X);Put1(01FX);Put1(001X);Put1(002X);Put1(002X);Put1(004X);Put1(008X);Put1(008X);Put1(010X);Put1(01FX);
  140. Dimensions(font.char[91], 5, 1, -2, 3, 11);SetBuf(font.char[91].buffer);Put1(003X);Put1(00BX);Put1(007X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(007X);
  141. Dimensions(font.char[92], 5, 0, 0, 5, 10);SetBuf(font.char[92].buffer);Put1(005X);Put1(00AX);Put1(010X);Put1(010X);Put1(008X);Put1(008X);Put1(004X);Put1(004X);Put1(002X);Put1(002X);Put1(001X);Put1(001X);
  142. Dimensions(font.char[93], 5, 1, -2, 3, 11);SetBuf(font.char[93].buffer);Put1(003X);Put1(00BX);Put1(007X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(007X);
  143. Dimensions(font.char[94], 7, 0, 0, 7, 8);SetBuf(font.char[94].buffer);Put1(007X);Put1(008X);Put1(008X);Put1(008X);Put1(008X);Put1(008X);Put1(049X);Put1(02AX);Put1(01CX);Put1(008X);
  144. Dimensions(font.char[95], 3, 0, 3, 3, 1);SetBuf(font.char[95].buffer);Put1(003X);Put1(001X);Put1(007X);
  145. Dimensions(font.char[96], 7, 2, 8, 2, 2);SetBuf(font.char[96].buffer);Put1(002X);Put1(002X);Put1(002X);Put1(001X);
  146. Dimensions(font.char[97], 6, 1, 0, 4, 7);SetBuf(font.char[97].buffer);Put1(004X);Put1(007X);Put1(00BX);Put1(009X);Put1(009X);Put1(00EX);Put1(008X);Put1(009X);Put1(00EX);
  147. Dimensions(font.char[98], 7, 1, 0, 5, 10);SetBuf(font.char[98].buffer);Put1(005X);Put1(00AX);Put1(00FX);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(013X);Put1(01DX);Put1(001X);Put1(001X);Put1(001X);
  148. Dimensions(font.char[99], 5, 1, 0, 4, 7);SetBuf(font.char[99].buffer);Put1(004X);Put1(007X);Put1(007X);Put1(009X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(00EX);
  149. Dimensions(font.char[100], 7, 1, 0, 5, 10);SetBuf(font.char[100].buffer);Put1(005X);Put1(00AX);Put1(017X);Put1(019X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(01EX);Put1(010X);Put1(010X);Put1(010X);
  150. Dimensions(font.char[101], 6, 1, 0, 4, 7);SetBuf(font.char[101].buffer);Put1(004X);Put1(007X);Put1(007X);Put1(009X);Put1(001X);Put1(00FX);Put1(009X);Put1(009X);Put1(00EX);
  151. Dimensions(font.char[102], 4, 0, 0, 4, 10);SetBuf(font.char[102].buffer);Put1(004X);Put1(00AX);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(00FX);Put1(002X);Put1(002X);Put1(00CX);
  152. Dimensions(font.char[103], 6, 1, -3, 5, 10);SetBuf(font.char[103].buffer);Put1(005X);Put1(00AX);Put1(00EX);Put1(011X);Put1(011X);Put1(00EX);Put1(001X);Put1(006X);Put1(009X);Put1(009X);Put1(009X);Put1(01EX);
  153. Dimensions(font.char[104], 7, 1, 0, 5, 10);SetBuf(font.char[104].buffer);Put1(005X);Put1(00AX);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(013X);Put1(01DX);Put1(001X);Put1(001X);Put1(001X);
  154. Dimensions(font.char[105], 3, 1, 0, 1, 10);SetBuf(font.char[105].buffer);Put1(001X);Put1(00AX);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(000X);Put1(000X);Put1(001X);
  155. Dimensions(font.char[106], 3, 0, -3, 2, 13);SetBuf(font.char[106].buffer);Put1(002X);Put1(00DX);Put1(001X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(000X);Put1(000X);Put1(002X);
  156. Dimensions(font.char[107], 6, 1, 0, 5, 10);SetBuf(font.char[107].buffer);Put1(005X);Put1(00AX);Put1(011X);Put1(009X);Put1(005X);Put1(003X);Put1(005X);Put1(009X);Put1(011X);Put1(001X);Put1(001X);Put1(001X);
  157. Dimensions(font.char[108], 3, 1, 0, 1, 10);SetBuf(font.char[108].buffer);Put1(001X);Put1(00AX);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);
  158. Dimensions(font.char[109], 11, 1, 0, 9, 7);SetBuf(font.char[109].buffer);Put1(009X);Put1(007X);Put1(011X);Put1(001X);Put1(011X);Put1(001X);Put1(011X);Put1(001X);Put1(011X);Put1(001X);Put1(011X);Put1(001X);Put1(033X);Put1(001X);Put1(0DDX);Put1(001X);
  159. Dimensions(font.char[110], 7, 1, 0, 5, 7);SetBuf(font.char[110].buffer);Put1(005X);Put1(007X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(013X);Put1(01DX);
  160. Dimensions(font.char[111], 7, 1, 0, 5, 7);SetBuf(font.char[111].buffer);Put1(005X);Put1(007X);Put1(00FX);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(01EX);
  161. Dimensions(font.char[112], 7, 1, -3, 5, 10);SetBuf(font.char[112].buffer);Put1(005X);Put1(00AX);Put1(001X);Put1(001X);Put1(001X);Put1(00FX);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(013X);Put1(01DX);
  162. Dimensions(font.char[113], 7, 1, -3, 5, 10);SetBuf(font.char[113].buffer);Put1(005X);Put1(00AX);Put1(010X);Put1(010X);Put1(010X);Put1(017X);Put1(019X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(01EX);
  163. Dimensions(font.char[114], 4, 1, 0, 3, 7);SetBuf(font.char[114].buffer);Put1(003X);Put1(007X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(003X);Put1(005X);
  164. Dimensions(font.char[115], 5, 0, 0, 4, 7);SetBuf(font.char[115].buffer);Put1(004X);Put1(007X);Put1(007X);Put1(008X);Put1(008X);Put1(006X);Put1(001X);Put1(001X);Put1(00EX);
  165. Dimensions(font.char[116], 4, 0, 0, 4, 9);SetBuf(font.char[116].buffer);Put1(004X);Put1(009X);Put1(006X);Put1(00AX);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(00FX);Put1(002X);Put1(002X);
  166. Dimensions(font.char[117], 7, 1, 0, 5, 7);SetBuf(font.char[117].buffer);Put1(005X);Put1(007X);Put1(017X);Put1(019X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);
  167. Dimensions(font.char[118], 5, 0, 0, 5, 7);SetBuf(font.char[118].buffer);Put1(005X);Put1(007X);Put1(004X);Put1(004X);Put1(00AX);Put1(00AX);Put1(011X);Put1(011X);Put1(011X);
  168. Dimensions(font.char[119], 9, 0, 0, 9, 7);SetBuf(font.char[119].buffer);Put1(009X);Put1(007X);Put1(044X);Put1(000X);Put1(044X);Put1(000X);Put1(0AAX);Put1(000X);Put1(0AAX);Put1(000X);Put1(0AAX);Put1(000X);Put1(011X);Put1(001X);Put1(011X);Put1(001X);
  169. Dimensions(font.char[120], 5, 0, 0, 5, 7);SetBuf(font.char[120].buffer);Put1(005X);Put1(007X);Put1(011X);Put1(011X);Put1(00AX);Put1(004X);Put1(00AX);Put1(011X);Put1(011X);
  170. Dimensions(font.char[121], 5, 0, -3, 5, 10);SetBuf(font.char[121].buffer);Put1(005X);Put1(00AX);Put1(002X);Put1(002X);Put1(004X);Put1(004X);Put1(004X);Put1(00AX);Put1(00AX);Put1(011X);Put1(011X);Put1(011X);
  171. Dimensions(font.char[122], 5, 0, 0, 5, 7);SetBuf(font.char[122].buffer);Put1(005X);Put1(007X);Put1(01FX);Put1(002X);Put1(002X);Put1(004X);Put1(008X);Put1(008X);Put1(01FX);
  172. Dimensions(font.char[123], 4, 0, -2, 4, 11);SetBuf(font.char[123].buffer);Put1(004X);Put1(00BX);Put1(00CX);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(001X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(00CX);
  173. Dimensions(font.char[124], 3, 1, -3, 1, 13);SetBuf(font.char[124].buffer);Put1(001X);Put1(00DX);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);
  174. Dimensions(font.char[125], 4, 0, -2, 4, 11);SetBuf(font.char[125].buffer);Put1(004X);Put1(00BX);Put1(003X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(008X);Put1(004X);Put1(004X);Put1(004X);Put1(004X);Put1(003X);
  175. Dimensions(font.char[126], 7, 0, 2, 7, 3);SetBuf(font.char[126].buffer);Put1(007X);Put1(003X);Put1(031X);Put1(049X);Put1(046X);
  176. Dimensions(font.char[127], 12, 0, -3, 12, 12);font.char[127].buffer := font.char[1].buffer;
  177. Dimensions(font.char[128], 7, 0, 0, 7, 10);SetBuf(font.char[128].buffer);Put1(007X);Put1(00AX);Put1(041X);Put1(041X);Put1(022X);Put1(03EX);Put1(022X);Put1(014X);Put1(014X);Put1(008X);Put1(008X);Put1(022X);
  178. Dimensions(font.char[129], 9, 1, 0, 7, 10);SetBuf(font.char[129].buffer);Put1(007X);Put1(00AX);Put1(01CX);Put1(022X);Put1(041X);Put1(041X);Put1(041X);Put1(041X);Put1(041X);Put1(022X);Put1(01CX);Put1(022X);
  179. Dimensions(font.char[130], 8, 1, 0, 6, 10);SetBuf(font.char[130].buffer);Put1(006X);Put1(00AX);Put1(01EX);Put1(012X);Put1(021X);Put1(021X);Put1(021X);Put1(021X);Put1(021X);Put1(021X);Put1(021X);Put1(00CX);
  180. Dimensions(font.char[131], 6, 1, 0, 4, 10);SetBuf(font.char[131].buffer);Put1(004X);Put1(00AX);Put1(00BX);Put1(009X);Put1(009X);Put1(00EX);Put1(008X);Put1(009X);Put1(00EX);Put1(000X);Put1(009X);Put1(009X);
  181. Dimensions(font.char[132], 7, 1, 0, 5, 10);SetBuf(font.char[132].buffer);Put1(005X);Put1(00AX);Put1(00FX);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(01EX);Put1(000X);Put1(012X);Put1(012X);
  182. Dimensions(font.char[133], 7, 1, 0, 5, 10);SetBuf(font.char[133].buffer);Put1(005X);Put1(00AX);Put1(017X);Put1(019X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(000X);Put1(00AX);Put1(00AX);
  183. Dimensions(font.char[134], 6, 1, 0, 4, 10);SetBuf(font.char[134].buffer);Put1(004X);Put1(00AX);Put1(00BX);Put1(009X);Put1(009X);Put1(00EX);Put1(008X);Put1(009X);Put1(00EX);Put1(000X);Put1(009X);Put1(006X);
  184. Dimensions(font.char[135], 6, 1, 0, 4, 10);SetBuf(font.char[135].buffer);Put1(004X);Put1(00AX);Put1(007X);Put1(009X);Put1(001X);Put1(00FX);Put1(009X);Put1(009X);Put1(00EX);Put1(000X);Put1(009X);Put1(006X);
  185. Dimensions(font.char[136], 3, 0, 0, 3, 10);SetBuf(font.char[136].buffer);Put1(003X);Put1(00AX);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(000X);Put1(005X);Put1(002X);
  186. Dimensions(font.char[137], 7, 1, 0, 5, 10);SetBuf(font.char[137].buffer);Put1(005X);Put1(00AX);Put1(00FX);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(01EX);Put1(000X);Put1(011X);Put1(00EX);
  187. Dimensions(font.char[138], 7, 1, 0, 5, 10);SetBuf(font.char[138].buffer);Put1(005X);Put1(00AX);Put1(017X);Put1(019X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(000X);Put1(011X);Put1(00EX);
  188. Dimensions(font.char[139], 6, 1, 0, 4, 10);SetBuf(font.char[139].buffer);Put1(004X);Put1(00AX);Put1(00BX);Put1(009X);Put1(009X);Put1(00EX);Put1(008X);Put1(009X);Put1(00EX);Put1(000X);Put1(004X);Put1(002X);
  189. Dimensions(font.char[140], 6, 1, 0, 4, 10);SetBuf(font.char[140].buffer);Put1(004X);Put1(00AX);Put1(007X);Put1(009X);Put1(001X);Put1(00FX);Put1(009X);Put1(009X);Put1(00EX);Put1(000X);Put1(004X);Put1(002X);
  190. Dimensions(font.char[141], 3, 0, 0, 2, 10);SetBuf(font.char[141].buffer);Put1(002X);Put1(00AX);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(000X);Put1(002X);Put1(001X);
  191. Dimensions(font.char[142], 7, 1, 0, 5, 10);SetBuf(font.char[142].buffer);Put1(005X);Put1(00AX);Put1(00FX);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(01EX);Put1(000X);Put1(004X);Put1(002X);
  192. Dimensions(font.char[143], 7, 1, 0, 5, 10);SetBuf(font.char[143].buffer);Put1(005X);Put1(00AX);Put1(017X);Put1(019X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(000X);Put1(004X);Put1(002X);
  193. Dimensions(font.char[144], 6, 1, 0, 4, 10);SetBuf(font.char[144].buffer);Put1(004X);Put1(00AX);Put1(007X);Put1(009X);Put1(001X);Put1(00FX);Put1(009X);Put1(009X);Put1(006X);Put1(000X);Put1(004X);Put1(008X);
  194. Dimensions(font.char[145], 6, 1, 0, 4, 10);SetBuf(font.char[145].buffer);Put1(004X);Put1(00AX);Put1(007X);Put1(009X);Put1(001X);Put1(00FX);Put1(009X);Put1(009X);Put1(006X);Put1(000X);Put1(009X);Put1(009X);
  195. Dimensions(font.char[146], 3, 0, 0, 3, 10);SetBuf(font.char[146].buffer);Put1(003X);Put1(00AX);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(002X);Put1(000X);Put1(005X);Put1(005X);
  196. Dimensions(font.char[147], 5, 1, -4, 4, 11);SetBuf(font.char[147].buffer);Put1(004X);Put1(00BX);Put1(002X);Put1(004X);Put1(006X);Put1(000X);Put1(007X);Put1(009X);Put1(001X);Put1(001X);Put1(001X);Put1(001X);Put1(00EX);
  197. Dimensions(font.char[148], 6, 1, 0, 4, 10);SetBuf(font.char[148].buffer);Put1(004X);Put1(00AX);Put1(00BX);Put1(009X);Put1(009X);Put1(00EX);Put1(008X);Put1(009X);Put1(00EX);Put1(000X);Put1(004X);Put1(008X);
  198. Dimensions(font.char[149], 7, 1, 0, 5, 10);SetBuf(font.char[149].buffer);Put1(005X);Put1(00AX);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(011X);Put1(013X);Put1(01DX);Put1(000X);Put1(00DX);Put1(016X);
  199. Dimensions(font.char[150], 7, 1, 0, 5, 10);SetBuf(font.char[150].buffer);Put1(005X);Put1(00AX);Put1(00DX);Put1(011X);Put1(011X);Put1(011X);Put1(009X);Put1(005X);Put1(005X);Put1(009X);Put1(009X);Put1(006X);
  200. Dimensions(font.char[151], 12, 0, -3, 12, 12);font.char[151].buffer := font.char[1].buffer;
  201. Dimensions(font.char[152], 12, 0, -3, 12, 12);font.char[152].buffer := font.char[1].buffer;
  202. Dimensions(font.char[153], 12, 0, -3, 12, 12);font.char[153].buffer := font.char[1].buffer;
  203. Dimensions(font.char[154], 12, 0, -3, 12, 12);font.char[154].buffer := font.char[1].buffer;
  204. Dimensions(font.char[155], 8, 0, 3, 8, 1);SetBuf(font.char[155].buffer);Put1(008X);Put1(001X);Put1(0FFX);
  205. Dimensions(font.char[156], 12, 0, -3, 12, 12);font.char[156].buffer := font.char[1].buffer;
  206. Dimensions(font.char[157], 12, 0, -3, 12, 12);font.char[157].buffer := font.char[1].buffer;
  207. Dimensions(font.char[158], 12, 0, -3, 12, 12);font.char[158].buffer := font.char[1].buffer;
  208. Dimensions(font.char[159], 7, 0, 0, 0, 0);SetBuf(font.char[159].buffer);Put1(000X);Put1(000X);
  209. Dimensions(font.char[160], 12, 0, -3, 12, 12);font.char[160].buffer := font.char[1].buffer;
  210. Dimensions(font.char[161], 12, 0, -3, 12, 12);font.char[161].buffer := font.char[1].buffer;
  211. Dimensions(font.char[162], 12, 0, -3, 12, 12);font.char[162].buffer := font.char[1].buffer;
  212. Dimensions(font.char[163], 12, 0, -3, 12, 12);font.char[163].buffer := font.char[1].buffer;
  213. Dimensions(font.char[164], 12, 0, -3, 12, 12);font.char[164].buffer := font.char[1].buffer;
  214. Dimensions(font.char[165], 12, 0, -3, 12, 12);font.char[165].buffer := font.char[1].buffer;
  215. Dimensions(font.char[166], 12, 0, -3, 12, 12);font.char[166].buffer := font.char[1].buffer;
  216. Dimensions(font.char[167], 12, 0, -3, 12, 12);font.char[167].buffer := font.char[1].buffer;
  217. Dimensions(font.char[168], 12, 0, -3, 12, 12);font.char[168].buffer := font.char[1].buffer;
  218. Dimensions(font.char[169], 12, 0, -3, 12, 12);font.char[169].buffer := font.char[1].buffer;
  219. Dimensions(font.char[170], 12, 0, -3, 12, 12);font.char[170].buffer := font.char[1].buffer;
  220. Dimensions(font.char[171], 12, 0, -3, 12, 12);font.char[171].buffer := font.char[1].buffer;
  221. Dimensions(font.char[172], 12, 0, -3, 12, 12);font.char[172].buffer := font.char[1].buffer;
  222. Dimensions(font.char[173], 12, 0, -3, 12, 12);font.char[173].buffer := font.char[1].buffer;
  223. Dimensions(font.char[174], 12, 0, -3, 12, 12);font.char[174].buffer := font.char[1].buffer;
  224. Dimensions(font.char[175], 12, 0, -3, 12, 12);font.char[175].buffer := font.char[1].buffer;
  225. Dimensions(font.char[176], 12, 0, -3, 12, 12);font.char[176].buffer := font.char[1].buffer;
  226. Dimensions(font.char[177], 12, 0, -3, 12, 12);font.char[177].buffer := font.char[1].buffer;
  227. Dimensions(font.char[178], 12, 0, -3, 12, 12);font.char[178].buffer := font.char[1].buffer;
  228. Dimensions(font.char[179], 12, 0, -3, 12, 12);font.char[179].buffer := font.char[1].buffer;
  229. Dimensions(font.char[180], 12, 0, -3, 12, 12);font.char[180].buffer := font.char[1].buffer;
  230. Dimensions(font.char[181], 12, 0, -3, 12, 12);font.char[181].buffer := font.char[1].buffer;
  231. Dimensions(font.char[182], 12, 0, -3, 12, 12);font.char[182].buffer := font.char[1].buffer;
  232. Dimensions(font.char[183], 12, 0, -3, 12, 12);font.char[183].buffer := font.char[1].buffer;
  233. Dimensions(font.char[184], 12, 0, -3, 12, 12);font.char[184].buffer := font.char[1].buffer;
  234. Dimensions(font.char[185], 12, 0, -3, 12, 12);font.char[185].buffer := font.char[1].buffer;
  235. Dimensions(font.char[186], 12, 0, -3, 12, 12);font.char[186].buffer := font.char[1].buffer;
  236. Dimensions(font.char[187], 12, 0, -3, 12, 12);font.char[187].buffer := font.char[1].buffer;
  237. Dimensions(font.char[188], 12, 0, -3, 12, 12);font.char[188].buffer := font.char[1].buffer;
  238. Dimensions(font.char[189], 12, 0, -3, 12, 12);font.char[189].buffer := font.char[1].buffer;
  239. Dimensions(font.char[190], 12, 0, -3, 12, 12);font.char[190].buffer := font.char[1].buffer;
  240. Dimensions(font.char[191], 12, 0, -3, 12, 12);font.char[191].buffer := font.char[1].buffer;
  241. Dimensions(font.char[192], 12, 0, -3, 12, 12);font.char[192].buffer := font.char[1].buffer;
  242. Dimensions(font.char[193], 12, 0, -3, 12, 12);font.char[193].buffer := font.char[1].buffer;
  243. Dimensions(font.char[194], 12, 0, -3, 12, 12);font.char[194].buffer := font.char[1].buffer;
  244. Dimensions(font.char[195], 12, 0, -3, 12, 12);font.char[195].buffer := font.char[1].buffer;
  245. Dimensions(font.char[196], 12, 0, -3, 12, 12);font.char[196].buffer := font.char[1].buffer;
  246. Dimensions(font.char[197], 12, 0, -3, 12, 12);font.char[197].buffer := font.char[1].buffer;
  247. Dimensions(font.char[198], 12, 0, -3, 12, 12);font.char[198].buffer := font.char[1].buffer;
  248. Dimensions(font.char[199], 12, 0, -3, 12, 12);font.char[199].buffer := font.char[1].buffer;
  249. Dimensions(font.char[200], 12, 0, -3, 12, 12);font.char[200].buffer := font.char[1].buffer;
  250. Dimensions(font.char[201], 12, 0, -3, 12, 12);font.char[201].buffer := font.char[1].buffer;
  251. Dimensions(font.char[202], 12, 0, -3, 12, 12);font.char[202].buffer := font.char[1].buffer;
  252. Dimensions(font.char[203], 12, 0, -3, 12, 12);font.char[203].buffer := font.char[1].buffer;
  253. Dimensions(font.char[204], 12, 0, -3, 12, 12);font.char[204].buffer := font.char[1].buffer;
  254. Dimensions(font.char[205], 12, 0, -3, 12, 12);font.char[205].buffer := font.char[1].buffer;
  255. Dimensions(font.char[206], 12, 0, -3, 12, 12);font.char[206].buffer := font.char[1].buffer;
  256. Dimensions(font.char[207], 12, 0, -3, 12, 12);font.char[207].buffer := font.char[1].buffer;
  257. Dimensions(font.char[208], 12, 0, -3, 12, 12);font.char[208].buffer := font.char[1].buffer;
  258. Dimensions(font.char[209], 12, 0, -3, 12, 12);font.char[209].buffer := font.char[1].buffer;
  259. Dimensions(font.char[210], 12, 0, -3, 12, 12);font.char[210].buffer := font.char[1].buffer;
  260. Dimensions(font.char[211], 12, 0, -3, 12, 12);font.char[211].buffer := font.char[1].buffer;
  261. Dimensions(font.char[212], 12, 0, -3, 12, 12);font.char[212].buffer := font.char[1].buffer;
  262. Dimensions(font.char[213], 12, 0, -3, 12, 12);font.char[213].buffer := font.char[1].buffer;
  263. Dimensions(font.char[214], 12, 0, -3, 12, 12);font.char[214].buffer := font.char[1].buffer;
  264. Dimensions(font.char[215], 12, 0, -3, 12, 12);font.char[215].buffer := font.char[1].buffer;
  265. Dimensions(font.char[216], 12, 0, -3, 12, 12);font.char[216].buffer := font.char[1].buffer;
  266. Dimensions(font.char[217], 12, 0, -3, 12, 12);font.char[217].buffer := font.char[1].buffer;
  267. Dimensions(font.char[218], 12, 0, -3, 12, 12);font.char[218].buffer := font.char[1].buffer;
  268. Dimensions(font.char[219], 12, 0, -3, 12, 12);font.char[219].buffer := font.char[1].buffer;
  269. Dimensions(font.char[220], 12, 0, -3, 12, 12);font.char[220].buffer := font.char[1].buffer;
  270. Dimensions(font.char[221], 12, 0, -3, 12, 12);font.char[221].buffer := font.char[1].buffer;
  271. Dimensions(font.char[222], 12, 0, -3, 12, 12);font.char[222].buffer := font.char[1].buffer;
  272. Dimensions(font.char[223], 12, 0, -3, 12, 12);font.char[223].buffer := font.char[1].buffer;
  273. Dimensions(font.char[224], 12, 0, -3, 12, 12);font.char[224].buffer := font.char[1].buffer;
  274. Dimensions(font.char[225], 12, 0, -3, 12, 12);font.char[225].buffer := font.char[1].buffer;
  275. Dimensions(font.char[226], 12, 0, -3, 12, 12);font.char[226].buffer := font.char[1].buffer;
  276. Dimensions(font.char[227], 12, 0, -3, 12, 12);font.char[227].buffer := font.char[1].buffer;
  277. Dimensions(font.char[228], 12, 0, -3, 12, 12);font.char[228].buffer := font.char[1].buffer;
  278. Dimensions(font.char[229], 12, 0, -3, 12, 12);font.char[229].buffer := font.char[1].buffer;
  279. Dimensions(font.char[230], 12, 0, -3, 12, 12);font.char[230].buffer := font.char[1].buffer;
  280. Dimensions(font.char[231], 12, 0, -3, 12, 12);font.char[231].buffer := font.char[1].buffer;
  281. Dimensions(font.char[232], 12, 0, -3, 12, 12);font.char[232].buffer := font.char[1].buffer;
  282. Dimensions(font.char[233], 12, 0, -3, 12, 12);font.char[233].buffer := font.char[1].buffer;
  283. Dimensions(font.char[234], 12, 0, -3, 12, 12);font.char[234].buffer := font.char[1].buffer;
  284. Dimensions(font.char[235], 12, 0, -3, 12, 12);font.char[235].buffer := font.char[1].buffer;
  285. Dimensions(font.char[236], 12, 0, -3, 12, 12);font.char[236].buffer := font.char[1].buffer;
  286. Dimensions(font.char[237], 12, 0, -3, 12, 12);font.char[237].buffer := font.char[1].buffer;
  287. Dimensions(font.char[238], 12, 0, -3, 12, 12);font.char[238].buffer := font.char[1].buffer;
  288. Dimensions(font.char[239], 12, 0, -3, 12, 12);font.char[239].buffer := font.char[1].buffer;
  289. Dimensions(font.char[240], 12, 0, -3, 12, 12);font.char[240].buffer := font.char[1].buffer;
  290. Dimensions(font.char[241], 12, 0, -3, 12, 12);font.char[241].buffer := font.char[1].buffer;
  291. Dimensions(font.char[242], 12, 0, -3, 12, 12);font.char[242].buffer := font.char[1].buffer;
  292. Dimensions(font.char[243], 12, 0, -3, 12, 12);font.char[243].buffer := font.char[1].buffer;
  293. Dimensions(font.char[244], 12, 0, -3, 12, 12);font.char[244].buffer := font.char[1].buffer;
  294. Dimensions(font.char[245], 12, 0, -3, 12, 12);font.char[245].buffer := font.char[1].buffer;
  295. Dimensions(font.char[246], 12, 0, -3, 12, 12);font.char[246].buffer := font.char[1].buffer;
  296. Dimensions(font.char[247], 12, 0, -3, 12, 12);font.char[247].buffer := font.char[1].buffer;
  297. Dimensions(font.char[248], 12, 0, -3, 12, 12);font.char[248].buffer := font.char[1].buffer;
  298. Dimensions(font.char[249], 12, 0, -3, 12, 12);font.char[249].buffer := font.char[1].buffer;
  299. Dimensions(font.char[250], 12, 0, -3, 12, 12);font.char[250].buffer := font.char[1].buffer;
  300. Dimensions(font.char[251], 12, 0, -3, 12, 12);font.char[251].buffer := font.char[1].buffer;
  301. Dimensions(font.char[252], 12, 0, -3, 12, 12);font.char[252].buffer := font.char[1].buffer;
  302. Dimensions(font.char[253], 12, 0, -3, 12, 12);font.char[253].buffer := font.char[1].buffer;
  303. Dimensions(font.char[254], 12, 0, -3, 12, 12);font.char[254].buffer := font.char[1].buffer;
  304. Dimensions(font.char[255], 12, 0, -3, 12, 12);font.char[255].buffer := font.char[1].buffer;
  305. END MakeFont;
  306. PROCEDURE Mask(buf: ADDRESS; bitof, stride, x, y, w, h, adr, dstride, depth: SIZE);
  307. CONST SetSize = MAX (SET) + 1;
  308. VAR p, i, dadr: ADDRESS; s: SET; space: LONGINT; d, bitofs: SIZE;
  309. BEGIN
  310. IF (w > 0) & (h > 0) THEN
  311. i := buf MOD SIZEOF (SET);
  312. bitofs := bitof + i * 8;
  313. p := buf-i + bitofs DIV SetSize * SIZEOF (SET); (* p always aligned to 32-bit boundary *)
  314. bitofs := bitofs MOD SetSize; stride := stride*8;
  315. LOOP
  316. SYSTEM.GET(p, s); i := bitofs;
  317. LOOP
  318. IF (i MOD SetSize) IN s THEN
  319. dadr := adr+(y*dstride+(x+i-bitofs)*depth);
  320. FOR d := 0 TO depth-1 DO
  321. SYSTEM.PUT8(dadr+d,0FFH);
  322. END;
  323. END;
  324. INC(i);
  325. IF i-bitofs = w THEN EXIT END;
  326. IF i MOD SetSize = 0 THEN SYSTEM.GET(p+i DIV 8, s) END
  327. END;
  328. DEC(h);
  329. IF h = 0 THEN EXIT END;
  330. INC(y); INC(bitofs, stride);
  331. IF (bitofs >= SetSize) OR (bitofs < 0) THEN (* moved outside s *)
  332. INC(p, bitofs DIV SetSize * SIZEOF (SET)); bitofs := bitofs MOD SetSize
  333. END
  334. END
  335. END
  336. END Mask;
  337. PROCEDURE RenderChar0(c: CHAR; adr: ADDRESS; VAR x,y: SIZE; w,h,depth: SIZE );
  338. VAR char: Char; stride,pw,ph: LONGINT;
  339. PROCEDURE Scroll;
  340. VAR x0,y0: ADDRESS; val: CHAR; sadr,dadr: ADDRESS;
  341. BEGIN
  342. FOR y0 := font.height TO y+font.height-1 DO
  343. sadr := adr + y0*w*depth DIV 8;
  344. dadr := adr + (y0-font.height)*w*depth DIV 8;
  345. FOR x0 := 0 TO w*depth DIV 8-1 DO
  346. SYSTEM.GET(sadr+x0,val);
  347. SYSTEM.PUT(dadr+x0,val);
  348. END;
  349. END;
  350. FOR y0 := y+1 TO h-1 DO
  351. dadr := adr + y0*w*depth DIV 8;
  352. FOR x0 := 0 TO w*depth DIV 8-1 DO
  353. SYSTEM.PUT(dadr+x0, 0);
  354. END;
  355. END;
  356. END Scroll;
  357. BEGIN
  358. IF c = 0DX THEN
  359. x := 0;
  360. ELSIF c = 0AX THEN
  361. IF y + 2*font.height >= h THEN
  362. Scroll;
  363. ELSE
  364. INC(y, font.height);
  365. END;
  366. ELSE
  367. char := font.char[ORD(c)];
  368. IF (char.w > 0) & (char.h>0) & (x+char.x < w) THEN
  369. pw := SYSTEM.GET8(char.buffer);
  370. ph := SYSTEM.GET8(char.buffer+1);
  371. stride := (pw + 7) DIV 8;
  372. Mask(char.buffer, 16+stride*(char.h-1)*8, -stride, x+char.x, y+font.height-char.y-char.h, char.w, char.h, adr, w*depth DIV 8, depth DIV 8)
  373. END;
  374. INC(x,char.dx);
  375. END;
  376. END RenderChar0;
  377. PROCEDURE RenderChar(c: CHAR);
  378. BEGIN
  379. IF traceChar # NIL THEN traceChar(c) END;
  380. RenderChar0(c, adr,x,y,w,h,depth);
  381. END RenderChar;
  382. PROCEDURE GetDepth(info: GraphicsModeInfo): LONGINT; (* depth in bits *)
  383. VAR mask, depth: LONGINT;
  384. BEGIN
  385. CASE info.PixelFormat OF
  386. PFRGBX8Bit, PFBGRX8Bit :
  387. depth := 32
  388. | PFBitMask :
  389. mask := info.PixelBitmask.RedMask + info.PixelBitmask.GreenMask + info.PixelBitmask.BlueMask;
  390. depth := 0;
  391. WHILE mask # 0 DO mask := LSH(mask,-1); INC(depth); END;
  392. | PFBltOnly :
  393. depth := 0;
  394. ELSE
  395. depth := 0;
  396. END;
  397. RETURN depth
  398. END GetDepth;
  399. PROCEDURE SetupConsole*(graphicsModeInfo: ADDRESS; frameBufferAdr: ADDRESS);
  400. VAR i: ADDRESS;
  401. VAR tmp: HUGEINT;
  402. BEGIN
  403. Trace.String("Graphical Console, info = "); Trace.Address(graphicsModeInfo); Trace.Ln;
  404. Trace.String("Graphical Console, address = "); Trace.Address(frameBufferAdr); Trace.Ln;
  405. info := SYSTEM.VAL(GraphicsModeInfo, graphicsModeInfo);
  406. FOR i := 0 TO 9 DO
  407. SYSTEM.GET(graphicsModeInfo+i*8,tmp);
  408. Trace.Hex(tmp,-16);
  409. Trace.Ln;
  410. END;
  411. adr := frameBufferAdr;
  412. x := 0; y := 0; w := info.HorizontalResolution; h := info.VerticalResolution; depth := GetDepth(info);
  413. Trace.String("Graphical Console, w = "); Trace.Address(w); Trace.Ln;
  414. Trace.String("Graphical Console, h = "); Trace.Address(h); Trace.Ln;
  415. Trace.String("Graphical Console, depth = "); Trace.Address(depth); Trace.Ln;
  416. FOR i := 0 TO w*h*depth DIV 8-1 DO SYSTEM.PUT(adr+i,0) END;
  417. RenderChar("X"); RenderChar("X");
  418. traceChar := Trace.Char;
  419. Trace.Char := RenderChar;
  420. Trace.String("Graphical Console started"); Trace.Ln;
  421. END SetupConsole;
  422. PROCEDURE Init*;
  423. BEGIN
  424. Trace.String("Graphical Console Enter"); Trace.Ln;
  425. MakeFont(font);
  426. Trace.String("Graphical Console Exit"); Trace.Ln;
  427. END Init;
  428. (*BEGIN
  429. Trace.String("Graphical Console Enter"); Trace.Ln;
  430. MakeFont(font);
  431. Trace.String("Graphical Console Exit"); Trace.Ln;
  432. *)
  433. END EFIGraphicalConsole.
  434. ~~~
  435. The following module can be used to generate font for console (Oberon grey box must be started).
  436. MODULE GenerateFont; (** AUTHOR ""; PURPOSE ""; *)
  437. IMPORT Files, Commands, SYSTEM, Fonts IN Oberon, Display IN Oberon, Streams, D := Debugging;
  438. CONST debug = TRUE;
  439. VAR out: Streams.Writer;
  440. TYPE
  441. PatternPtr = POINTER TO RECORD
  442. buf: ARRAY 8192 OF CHAR (* w = buf[0], h = buf[1], pixmap = buf[2..] *)
  443. END;
  444. Char = RECORD
  445. dx*,x*,y*,w*,h*: INTEGER;
  446. pat*: POINTER TO ARRAY OF CHAR;
  447. END;
  448. Font = RECORD
  449. height*, minX*, maxX*, minY*, maxY*: INTEGER;
  450. char: ARRAY 256 OF Char
  451. END;
  452. PROCEDURE Do*(context: Commands.Context);
  453. VAR
  454. name: ARRAY 64 OF CHAR; l,i: LONGINT; file: Files.File; r: Files.Reader; font: Fonts.Font; p: PatternPtr;
  455. pw, ph,stride: LONGINT;
  456. dx,dy,x,y,w,h: INTEGER;
  457. dx2,dy2,x2,y2,w2,h2: INTEGER;
  458. pat,pat2: Display.Pattern; j: LONGINT; done: BOOLEAN; len: LONGINT;
  459. PROCEDURE Mask(VAR buf: ARRAY OF CHAR; bitof, stride, x, y, w, h: LONGINT);
  460. CONST SetSize = MAX (SET) + 1;
  461. VAR p, i, bitofs: ADDRESS; s: SET;
  462. BEGIN
  463. IF (w > 0) & (h > 0) THEN
  464. i := ADDRESSOF(buf[0]) MOD SIZEOF (SET);
  465. bitofs := bitof + i * 8;
  466. p := ADDRESSOF(buf[0])-i + bitofs DIV SetSize * SIZEOF (SET); (* p always aligned to 32-bit boundary *)
  467. bitofs := bitofs MOD SetSize; stride := stride*8;
  468. LOOP
  469. SYSTEM.GET(p, s); i := bitofs;
  470. LOOP
  471. IF (i MOD SetSize) IN s THEN
  472. D.String("*") ELSE D.String("-") END;
  473. INC(i);
  474. IF i-bitofs = w THEN EXIT END;
  475. IF i MOD SetSize = 0 THEN SYSTEM.GET(p+i DIV 8, s) END
  476. END;
  477. D.Ln;
  478. DEC(h);
  479. IF h = 0 THEN EXIT END;
  480. INC(y); INC(bitofs, stride);
  481. IF (bitofs >= SetSize) OR (bitofs < 0) THEN (* moved outside s *)
  482. INC(p, bitofs DIV SetSize * SIZEOF (SET)); bitofs := bitofs MOD SetSize
  483. END
  484. END
  485. END
  486. END Mask;
  487. PROCEDURE WriteChar(i: LONGINT);
  488. BEGIN
  489. context.out.String("font.char["); context.out.Int(i,1); context.out.String("]");
  490. out.Update;
  491. END WriteChar;
  492. BEGIN
  493. out := context.out;
  494. IF context.arg.GetString(name) THEN
  495. font := Fonts.This(name);
  496. (*
  497. out.String("PROCEDURE MakeFont(VAR font: Font);"); out.Ln;
  498. out.String("VAR buf: Buffer; pos: LONGINT;");out.Ln;
  499. out.String("PROCEDURE SetBuf(VAR p: Buffer); BEGIN p := ADDRESSOF(buffer[pos]) END SetBuf;"); out.Ln;
  500. out.String("PROCEDURE Put1(ch: CHAR); BEGIN buffer[pos] := ch; INC(pos) END Put1;"); out.Ln;
  501. out.String("PROCEDURE Dimensions(VAR char: Char; dx,x,y,w,h: INTEGER); BEGIN char.dx := dx; char.x := x; char.y := y; char.w := w; char.h := h END Dimensions;"); out.Ln;
  502. out.String("BEGIN");out.Ln;
  503. *)
  504. out.String("font.height := "); out.Int(font.height,1); out.String(";"); out.Ln;
  505. out.String("font.minX := "); out.Int(font.minX,1); out.String(";");out.Ln;
  506. out.String("font.maxX := "); out.Int(font.maxX,1); out.String(";");out.Ln;
  507. out.String("font.minY := "); out.Int(font.minY,1); out.String(";");out.Ln;
  508. out.String("font.maxY := "); out.Int(font.maxY,1); out.String(";");out.Ln;
  509. len := 0;
  510. FOR i := 0 TO 255 DO
  511. Fonts.GetChar(font, CHR(i), dx, x, y, w,h,pat);
  512. p := SYSTEM.VAL(PatternPtr, pat);
  513. pw := ORD(p.buf[0]); ph := ORD(p.buf[1]);
  514. out.String("Dimensions("); WriteChar(i); out.String(", ");
  515. out.Int(dx,1);out.String(", ");
  516. out.Int(x,1);out.String(", ");
  517. out.Int(y,1);out.String(", ");
  518. out.Int(w,1);out.String(", ");
  519. out.Int(h,1); out.String(");");
  520. stride := (pw + 7) DIV 8;
  521. done := FALSE;
  522. j := 0;
  523. WHILE ~done & (j<i) DO
  524. Fonts.GetChar(font, CHR(j), dx2, x2, y2, w2,h2,pat2);
  525. IF pat2 = pat THEN
  526. done := TRUE;
  527. WriteChar(i); out.String(".buffer := "); WriteChar(j); out.String(".buffer;"); out.Ln;
  528. END;
  529. INC(j);
  530. END;
  531. IF ~done THEN
  532. out.String("SetBuf("); WriteChar(i); out.String(".buffer);");
  533. FOR j := 0 TO h*stride-1 +2 DO
  534. INC(len);
  535. out.String("Put1("); out.Hex(ORD(p.buf[j]),-3); out.String("X);");
  536. END;out.Ln;
  537. END;
  538. IF debug THEN Mask(p.buf, 16+(ph-1)*stride*8,-stride, x, h-y-ph, pw,ph) END;
  539. END;
  540. (* out.String("END MakeFont;"); *)
  541. out.Ln;
  542. out.String("VAR buffer: ARRAY "); out.Int(len,1); out.String(" OF CHAR"); out.Ln;
  543. END;
  544. END Do;
  545. END GenerateFont.