197 lines
9.4 KiB
Plaintext
197 lines
9.4 KiB
Plaintext
/**
|
|
* A library of functions for writing text on the screen.
|
|
* The Hack physical screen consists of 320 rows of 240 pixels each.
|
|
* The library uses a fixed font, in which each character is displayed
|
|
* within a frame which is 11 pixels high (including 1 pixel for inter-line
|
|
* spacing) and 8 pixels wide (including 2 pixels for inter-character spacing).
|
|
* The resulting grid accommodates 29 rows (indexed 0..28, top to bottom)
|
|
* of 30 characters each (indexed 0..29, left to right). The top left
|
|
* character position on the screen is indexed (0,0). A cursor, implemented
|
|
* as a small filled square, indicates where the next character will be displayed.
|
|
*/
|
|
|
|
class Output {
|
|
|
|
// Character map for displaying characters
|
|
static Array charMaps;
|
|
/** Initializes the screen, and locates the cursor at the screen's top-left. */
|
|
function void init() {
|
|
}
|
|
// Initializes the character map array
|
|
function void initMap() {
|
|
var int i;
|
|
let charMaps = Array.new(127);
|
|
|
|
// Black square, used for displaying non-printable characters.
|
|
do Output.create(0,63,63,63,63,63,63,63,63,63,0,0);
|
|
|
|
// Assigns the bitmap for each character in the charachter set.
|
|
// The first parameter is the character index, the next 11 numbers
|
|
// are the values of each row in the frame that represents this character.
|
|
do Output.create(32,0,0,0,0,0,0,0,0,0,0,0); //
|
|
do Output.create(33,12,30,30,30,12,12,0,12,12,0,0); // !
|
|
do Output.create(34,54,54,20,0,0,0,0,0,0,0,0); // "
|
|
do Output.create(35,0,18,18,63,18,18,63,18,18,0,0); // #
|
|
do Output.create(36,12,30,51,3,30,48,51,30,12,12,0); // $
|
|
do Output.create(37,0,0,35,51,24,12,6,51,49,0,0); // %
|
|
do Output.create(38,12,30,30,12,54,27,27,27,54,0,0); // &
|
|
do Output.create(39,12,12,6,0,0,0,0,0,0,0,0); // '
|
|
do Output.create(40,24,12,6,6,6,6,6,12,24,0,0); // (
|
|
do Output.create(41,6,12,24,24,24,24,24,12,6,0,0); // )
|
|
do Output.create(42,0,0,0,51,30,63,30,51,0,0,0); // *
|
|
do Output.create(43,0,0,0,12,12,63,12,12,0,0,0); // +
|
|
do Output.create(44,0,0,0,0,0,0,0,12,12,6,0); // ,
|
|
do Output.create(45,0,0,0,0,0,63,0,0,0,0,0); // -
|
|
do Output.create(46,0,0,0,0,0,0,0,12,12,0,0); // .
|
|
do Output.create(47,0,0,32,48,24,12,6,3,1,0,0); // /
|
|
|
|
do Output.create(48,12,30,51,51,51,51,51,30,12,0,0); // 0
|
|
do Output.create(49,12,14,15,12,12,12,12,12,63,0,0); // 1
|
|
do Output.create(50,30,51,48,24,12,6,3,51,63,0,0); // 2
|
|
do Output.create(51,30,51,48,48,28,48,48,51,30,0,0); // 3
|
|
do Output.create(52,16,24,28,26,25,63,24,24,60,0,0); // 4
|
|
do Output.create(53,63,3,3,31,48,48,48,51,30,0,0); // 5
|
|
do Output.create(54,28,6,3,3,31,51,51,51,30,0,0); // 6
|
|
do Output.create(55,63,49,48,48,24,12,12,12,12,0,0); // 7
|
|
do Output.create(56,30,51,51,51,30,51,51,51,30,0,0); // 8
|
|
do Output.create(57,30,51,51,51,62,48,48,24,14,0,0); // 9
|
|
|
|
do Output.create(58,0,0,12,12,0,0,12,12,0,0,0); // :
|
|
do Output.create(59,0,0,12,12,0,0,12,12,6,0,0); // ;
|
|
do Output.create(60,0,0,24,12,6,3,6,12,24,0,0); // <
|
|
do Output.create(61,0,0,0,63,0,0,63,0,0,0,0); // =
|
|
do Output.create(62,0,0,3,6,12,24,12,6,3,0,0); // >
|
|
do Output.create(64,30,51,51,59,59,59,27,3,30,0,0); // @
|
|
do Output.create(63,30,51,51,24,12,12,0,12,12,0,0); // ?
|
|
|
|
do Output.create(65,12,30,51,51,63,51,51,51,51,0,0); // A ** TO BE FILLED **
|
|
do Output.create(66,31,51,51,51,31,51,51,51,31,0,0); // B
|
|
do Output.create(67,28,54,35,3,3,3,35,54,28,0,0); // C
|
|
do Output.create(68,15,27,51,51,51,51,51,27,15,0,0); // D
|
|
do Output.create(69,63,51,35,11,15,11,35,51,63,0,0); // E
|
|
do Output.create(70,63,51,35,11,15,11,3,3,3,0,0); // F
|
|
do Output.create(71,28,54,35,3,59,51,51,54,44,0,0); // G
|
|
do Output.create(72,51,51,51,51,63,51,51,51,51,0,0); // H
|
|
do Output.create(73,30,12,12,12,12,12,12,12,30,0,0); // I
|
|
do Output.create(74,60,24,24,24,24,24,27,27,14,0,0); // J
|
|
do Output.create(75,51,51,51,27,15,27,51,51,51,0,0); // K
|
|
do Output.create(76,3,3,3,3,3,3,35,51,63,0,0); // L
|
|
do Output.create(77,33,51,63,63,51,51,51,51,51,0,0); // M
|
|
do Output.create(78,51,51,55,55,63,59,59,51,51,0,0); // N
|
|
do Output.create(79,30,51,51,51,51,51,51,51,30,0,0); // O
|
|
do Output.create(80,31,51,51,51,31,3,3,3,3,0,0); // P
|
|
do Output.create(81,30,51,51,51,51,51,63,59,30,48,0);// Q
|
|
do Output.create(82,31,51,51,51,31,27,51,51,51,0,0); // R
|
|
do Output.create(83,30,51,51,6,28,48,51,51,30,0,0); // S
|
|
do Output.create(84,63,63,45,12,12,12,12,12,30,0,0); // T
|
|
do Output.create(85,51,51,51,51,51,51,51,51,30,0,0); // U
|
|
do Output.create(86,51,51,51,51,51,30,30,12,12,0,0); // V
|
|
do Output.create(87,51,51,51,51,51,63,63,63,18,0,0); // W
|
|
do Output.create(88,51,51,30,30,12,30,30,51,51,0,0); // X
|
|
do Output.create(89,51,51,51,51,30,12,12,12,30,0,0); // Y
|
|
do Output.create(90,63,51,49,24,12,6,35,51,63,0,0); // Z
|
|
|
|
do Output.create(91,30,6,6,6,6,6,6,6,30,0,0); // [
|
|
do Output.create(92,0,0,1,3,6,12,24,48,32,0,0); // \
|
|
do Output.create(93,30,24,24,24,24,24,24,24,30,0,0); // ]
|
|
do Output.create(94,8,28,54,0,0,0,0,0,0,0,0); // ^
|
|
do Output.create(95,0,0,0,0,0,0,0,0,0,63,0); // _
|
|
do Output.create(96,6,12,24,0,0,0,0,0,0,0,0); // `
|
|
|
|
do Output.create(97,0,0,0,14,24,30,27,27,54,0,0); // a
|
|
do Output.create(98,3,3,3,15,27,51,51,51,30,0,0); // b
|
|
do Output.create(99,0,0,0,30,51,3,3,51,30,0,0); // c
|
|
do Output.create(100,48,48,48,60,54,51,51,51,30,0,0); // d
|
|
do Output.create(101,0,0,0,30,51,63,3,51,30,0,0); // e
|
|
do Output.create(102,28,54,38,6,15,6,6,6,15,0,0); // f
|
|
do Output.create(103,0,0,30,51,51,51,62,48,51,30,0); // g
|
|
do Output.create(104,3,3,3,27,55,51,51,51,51,0,0); // h
|
|
do Output.create(105,12,12,0,14,12,12,12,12,30,0,0); // i
|
|
do Output.create(106,48,48,0,56,48,48,48,48,51,30,0); // j
|
|
do Output.create(107,3,3,3,51,27,15,15,27,51,0,0); // k
|
|
do Output.create(108,14,12,12,12,12,12,12,12,30,0,0); // l
|
|
do Output.create(109,0,0,0,29,63,43,43,43,43,0,0); // m
|
|
do Output.create(110,0,0,0,29,51,51,51,51,51,0,0); // n
|
|
do Output.create(111,0,0,0,30,51,51,51,51,30,0,0); // o
|
|
do Output.create(112,0,0,0,30,51,51,51,31,3,3,0); // p
|
|
do Output.create(113,0,0,0,30,51,51,51,62,48,48,0); // q
|
|
do Output.create(114,0,0,0,29,55,51,3,3,7,0,0); // r
|
|
do Output.create(115,0,0,0,30,51,6,24,51,30,0,0); // s
|
|
do Output.create(116,4,6,6,15,6,6,6,54,28,0,0); // t
|
|
do Output.create(117,0,0,0,27,27,27,27,27,54,0,0); // u
|
|
do Output.create(118,0,0,0,51,51,51,51,30,12,0,0); // v
|
|
do Output.create(119,0,0,0,51,51,51,63,63,18,0,0); // w
|
|
do Output.create(120,0,0,0,51,30,12,12,30,51,0,0); // x
|
|
do Output.create(121,0,0,0,51,51,51,62,48,24,15,0); // y
|
|
do Output.create(122,0,0,0,63,27,12,6,51,63,0,0); // z
|
|
|
|
do Output.create(123,56,12,12,12,7,12,12,12,56,0,0); // {
|
|
do Output.create(124,12,12,12,12,12,12,12,12,12,0,0); // |
|
|
do Output.create(125,7,12,12,12,56,12,12,12,7,0,0); // }
|
|
do Output.create(126,38,45,25,0,0,0,0,0,0,0,0); // ~
|
|
|
|
return;
|
|
}
|
|
|
|
// Creates the character map array of the given character index, using the given values.
|
|
function void create(int index, int a, int b, int c, int d, int e,
|
|
int f, int g, int h, int i, int j, int k) {
|
|
var Array map;
|
|
|
|
let map = Array.new(11);
|
|
let charMaps[index] = map;
|
|
|
|
let map[0] = a;
|
|
let map[1] = b;
|
|
let map[2] = c;
|
|
let map[3] = d;
|
|
let map[4] = e;
|
|
let map[5] = f;
|
|
let map[6] = g;
|
|
let map[7] = h;
|
|
let map[8] = i;
|
|
let map[9] = j;
|
|
let map[10] = k;
|
|
|
|
return;
|
|
}
|
|
|
|
// Returns the character map (array of size 11) of the given character.
|
|
// If the given character is invalid or non-printable, returns the
|
|
// character map of a black square.
|
|
function Array getMap(char c) {
|
|
if ((c < 32) | (c > 126)) {
|
|
let c = 0;
|
|
}
|
|
return charMaps[c];
|
|
}
|
|
|
|
/** Moves the cursor to the j-th column of the i-th row,
|
|
* and erases the character displayed there. */
|
|
function void moveCursor(int i, int j) {
|
|
}
|
|
|
|
/** Displays the given character at the cursor location,
|
|
* and advances the cursor one column forward. */
|
|
function void printChar(char c) {
|
|
}
|
|
|
|
/** displays the given string starting at the cursor location,
|
|
* and advances the cursor appropriately. */
|
|
function void printString(String s) {
|
|
}
|
|
|
|
/** Displays the given integer starting at the cursor location,
|
|
* and advances the cursor appropriately. */
|
|
function void printInt(int i) {
|
|
}
|
|
|
|
/** Advances the cursor to the beginning of the next line. */
|
|
function void println() {
|
|
}
|
|
|
|
/** Moves the cursor one column back. */
|
|
function void backSpace() {
|
|
}
|
|
}
|