void _start( unsigned int memSize, char *params, boot_dir *bd ) { screen_init(); set_attrib( ATTRIB_BRIGHT | ATTRIB_BLUE | ATTRIB_BLACK_BG ); printf( "Dem" ); set_attrib( ATTRIB_BRIGHT | ATTRIB_GREEN | ATTRIB_BLACK_BG ); printf( "OS" ); set_attrib( ATTRIB_WHITE | ATTRIB_BLACK_BG ); printf( " Week 1: " ); set_attrib( ATTRIB_RED | ATTRIB_BLACK_BG ); printf( "Getting Started\n\n" ); set_attrib( ATTRIB_WHITE | ATTRIB_BLACK_BG ); printf( "Hello World!\n" ); asm("hlt"); }
/** * Creates a grid mesh. * * @param n_x the number of grid cells on the X axis * @param n_y the number of grid cells on the Y axis * @param width the width X of the grid (normalized) * @param height the height Y of the grid (normalized) * @param spacing the spacing between cells (normalized) * @param conf_func a function to call to configure the grid (or NULL) */ void Mesh::make_grid(int n_x, int n_y, double width, double height, double spacing, grid_configuration_func conf_func) { double side_width = (width - (n_x - 1) * spacing) / n_x; double side_height = (height - (n_y - 1) * spacing) / n_y; for (int i = 0; i < n_x; i++) { for (int j = 0; j < n_y; j++) { LibMatrix::vec3 a(-width / 2 + i * (side_width + spacing), height / 2 - j * (side_height + spacing), 0); LibMatrix::vec3 b(a.x(), a.y() - side_height, 0); LibMatrix::vec3 c(a.x() + side_width, a.y(), 0); LibMatrix::vec3 d(a.x() + side_width, a.y() - side_height, 0); if (!conf_func) { std::vector<float> ul(vertex_size_); std::vector<float> ur(vertex_size_); std::vector<float> ll(vertex_size_); std::vector<float> lr(vertex_size_); set_attrib(0, a, &ul); set_attrib(0, c, &ur); set_attrib(0, b, &ll); set_attrib(0, d, &lr); next_vertex(); vertices_.back() = ul; next_vertex(); vertices_.back() = ll; next_vertex(); vertices_.back() = ur; next_vertex(); vertices_.back() = ll; next_vertex(); vertices_.back() = lr; next_vertex(); vertices_.back() = ur; } else { conf_func(*this, i, j, n_x, n_y, a, b, c, d); } } } }
static void putch_help(console_t *con, unsigned c) { unsigned short *fb_adr; unsigned att; att = (unsigned)con->attrib << 8; fb_adr = con->fb_adr; /* state machine to handle the escape sequences ESC */ if(con->esc == 1) { if(c == '[') { con->esc++; con->esc1 = 0; return; } /* else fall-through: zero esc and print c */ } /* ESC[ */ else if(con->esc == 2) { if(isdigit(c)) { con->esc1 = con->esc1 * 10 + c - '0'; return; } else if(c == ';') { con->esc++; con->esc2 = 0; return; } /* ESC[2J -- clear screen */ else if(c == 'J') { if(con->esc1 == 2) { memsetw(fb_adr, ' ' | att, _vc_height * _vc_width); con->csr_x = con->csr_y = 0; } } /* ESC[num1m -- set attribute num1 */ else if(c == 'm') set_attrib(con, con->esc1); con->esc = 0; /* anything else with one numeric arg */ return; } /* ESC[num1; */ else if(con->esc == 3) { if(isdigit(c)) { con->esc2 = con->esc2 * 10 + c - '0'; return; } else if(c == ';') { con->esc++; /* ESC[num1;num2; */ con->esc3 = 0; return; } /* ESC[num1;num2H -- move cursor to num1,num2 */ else if(c == 'H') { if(con->esc2 < _vc_width) con->csr_x = con->esc2; if(con->esc1 < _vc_height) con->csr_y = con->esc1; } /* ESC[num1;num2m -- set attributes num1,num2 */ else if(c == 'm') { set_attrib(con, con->esc1); set_attrib(con, con->esc2); } con->esc = 0; return; } /* ESC[num1;num2;num3 */ else if(con->esc == 4) { if(isdigit(c)) { con->esc3 = con->esc3 * 10 + c - '0'; return; } /* ESC[num1;num2;num3m -- set attributes num1,num2,num3 */ else if(c == 'm') { set_attrib(con, con->esc1); set_attrib(con, con->esc2); set_attrib(con, con->esc3); } con->esc = 0; return; } con->esc = 0; /* escape character */ if(c == 0x1B) { con->esc = 1; return; } /* backspace */ if(c == 0x08) { if(con->csr_x != 0) con->csr_x--; } /* tab */ else if(c == 0x09) con->csr_x = (con->csr_x + 8) & ~(8 - 1); /* carriage return */ else if(c == '\r') /* 0x0D */ con->csr_x = 0; /* line feed */ // else if(c == '\n') /* 0x0A */ // con->csr_y++; /* CR/LF */ else if(c == '\n') /* ### - 0x0A again */ { con->csr_x = 0; con->csr_y++; } /* printable ASCII */ else if(c >= ' ') { unsigned short *where; where = fb_adr + (con->csr_y * _vc_width + con->csr_x); *where = (c | att); con->csr_x++; } if(con->csr_x >= _vc_width) { con->csr_x = 0; con->csr_y++; } scroll(con); /* move cursor only if the VC we're writing is the current VC */ if(_curr_vc == con) move_csr(); }