示例#1
0
/***
 * clear vga screen
 */
void vga_clear() {
    vga_d_char_t *pos, *end;
    end = VGA_BUF + VGA_HEIGHT * VGA_WIDTH * sizeof(vga_d_char_t);
    for (pos = VGA_BUF; pos < end; pos++) {
        (*pos).c = NULL;
        (*pos).color = FORMAT_COLORS(VGA_STATE.fg, VGA_STATE.bg);
    }
    vga_update_cursor(0, 0);
}
示例#2
0
文件: kio.c 项目: LFUnion/LFOS
// bug
char * scanf() {
    char* tmp = (char*)malloc(150 * sizeof(char));
    char inp = ' ';
    int i = 0;
    vga_enable_cursor();

    do {
        vga_update_cursor();
        kbd_flush_buffer();
        inp = kbd_pull_char();

        if (inp != 0) {
            if (i > 149)
                break;
            else if (inp != '\b') {
                char* str = (char*)malloc(2*sizeof(char));
                str[0] = inp;
                str[1] = '\0';
                kprint_raw(str);
                free(str);

                if (inp != '\n')
                    tmp[i] = inp;

                i++;
            } else {
                if (i > 0) {
                    // Clear character in array
                    i--;
                    tmp[i] = 0;
                    // Remove character from screen
                    int new_pos = (vga_get_row() * 80 + vga_get_column()) - 1;
                    vga_set_position(new_pos / 80, new_pos % 80);
                    print_raw(" ");
                    vga_set_position(new_pos / 80, new_pos % 80);
                }
            }
        }
    } while (inp != '\n');

    tmp[i-1] = '\0';
    vga_disable_cursor();
    char* ret = (char*)malloc(strlen(tmp)+1 * sizeof(char));

    for (int ii = 0; ii < strlen(tmp); ii++)
        ret[ii] = tmp[ii];

    ret[strlen(tmp)] = '\0';
    free(tmp);
    return ret;
}
示例#3
0
文件: vga.c 项目: jasonpr59/asbestos
// Reposition the cursor, and possibly scroll the screen, so that the
// cursor is in bounds.
void vga_reposition() {
  if (vga_column >= kVgaWidth) {
    vga_column = 0;
    vga_row++;
  }
  int overhang = vga_row - kVgaHeight + 1;
  if (overhang > 0) {
    // We'll scroll the screen by 'overhang' rows.
    const int bytesToScroll = overhang * kVgaWidth * sizeof(VgaCharacter);
    memmove((void *) kVgaBuffer, (void *) (kVgaBuffer + bytesToScroll),
	    kVgaWidth * kVgaHeight * sizeof(VgaCharacter) - bytesToScroll);
    for (unsigned row = kVgaHeight - overhang; row < kVgaHeight; row++) {
      vga_erase_row(row);
    }
    vga_row = kVgaHeight - 1;
  }
  vga_update_cursor();
}