Skip to content

Commit

Permalink
Step harib14d: enable input to console
Browse files Browse the repository at this point in the history
page 344
  • Loading branch information
M366 committed Jul 28, 2020
1 parent d50dc21 commit d9f2aee
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 24 deletions.
78 changes: 55 additions & 23 deletions harib/bootpack.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,19 +123,29 @@ void HariMain(void)
if (256 <= i && i <= 511) { // keyboard data
sprintf(s, "%02X", i - 256);
putfonts8_asc_sht(sht_back, 0, 16, 0, 7, s, 2);
if (i < 0x54 + 256) {
if (keytable[i - 256] != 0 && cursor_x < 128) { /* 通常文字 */
/* 一文字表示してから、カーソルを1つ進める */
s[0] = keytable[i - 256];
s[1] = 0;
putfonts8_asc_sht(sht_win, cursor_x, 28, COL8_000000, COL8_FFFFFF, s, 1);
cursor_x += 8;
}
if (i < 0x54 + 256 && keytable[i - 256] != 0) {
if (key_to == 0) { // to task A
if (cursor_x < 128) {
/* 一文字表示してから、カーソルを1つ進める */
s[0] = keytable[i - 256];
s[1] = 0;
putfonts8_asc_sht(sht_win, cursor_x, 28, COL8_000000, COL8_FFFFFF, s, 1);
cursor_x += 8;
}
} else { // to task console
fifo32_put(&task_cons->fifo, keytable[i - 256] + 256);
}
}
if (i == 256 + 0x0e && cursor_x > 8) { /* バックスペース */
/* カーソルをスペースで消してから、カーソルを1つ戻す */
putfonts8_asc_sht(sht_win, cursor_x, 28, COL8_000000, COL8_FFFFFF, " ", 1);
cursor_x -= 8;
if (i == 256 + 0x0e) { /* バックスペース */
if (key_to == 0) { // to task A
if (cursor_x > 8) {
/* カーソルをスペースで消してから、カーソルを1つ戻す */
putfonts8_asc_sht(sht_win, cursor_x, 28, COL8_000000, COL8_FFFFFF, " ", 1);
cursor_x -= 8;
}
} else { // to task console
fifo32_put(&task_cons->fifo, 8 + 256);
}
}
if (i == 256 + 0x0f) { /* Tab */
if (key_to == 0) {
Expand Down Expand Up @@ -289,37 +299,59 @@ void make_textbox8(struct SHEET *sht, int x0, int y0, int sx, int sy, int c)

void console_task(struct SHEET *sheet)
{
struct FIFO32 fifo;
struct TIMER *timer;
struct TASK *task = task_now();
int i, fifobuf[128], cursor_x = 16, cursor_c = COL8_000000;
char s[2];

int i, fifobuf[128], cursor_x = 8, cursor_c = COL8_000000;
fifo32_init(&fifo, 128, fifobuf, task);

fifo32_init(&task->fifo, 128, fifobuf, task);
timer = timer_alloc();
timer_init(timer, &fifo, 1);
timer_init(timer, &task->fifo, 1);
timer_settime(timer, 50);

/* プロンプト表示 */
putfonts8_asc_sht(sheet, 8, 28, COL8_FFFFFF, COL8_000000, ">", 1);

for (;;) {
io_cli();
if (fifo32_status(&fifo) == 0) {
if (fifo32_status(&task->fifo) == 0) {
task_sleep(task);
io_sti();
} else {
i = fifo32_get(&fifo);
i = fifo32_get(&task->fifo);
io_sti();
if (i <= 1) { /* カーソル用タイマ */
if (i != 0) {
timer_init(timer, &fifo, 0); /* 次は0を */
timer_init(timer, &task->fifo, 0); /* 次は0を */
cursor_c = COL8_FFFFFF;
} else {
timer_init(timer, &fifo, 1); /* 次は1を */
timer_init(timer, &task->fifo, 1); /* 次は1を */
cursor_c = COL8_000000;
}
timer_settime(timer, 50);
boxfill8(sheet->buf, sheet->bxsize, cursor_c, cursor_x, 28, cursor_x + 7, 43);
sheet_refresh(sheet, cursor_x, 28, cursor_x + 8, 44);
}
if (256 <= i && i <= 511) { /* キーボードデータ(タスクA経由) */
if (i == 8 + 256) {
/* バックスペース */
if (cursor_x > 16) {
/* カーソルをスペースで消してから、カーソルを1つ戻す */
putfonts8_asc_sht(sheet, cursor_x, 28, COL8_FFFFFF, COL8_000000, " ", 1);
cursor_x -= 8;
}
} else {
/* 一般文字 */
if (cursor_x < 240) {
/* 一文字表示してから、カーソルを1つ進める */
s[0] = i - 256;
s[1] = 0;
putfonts8_asc_sht(sheet, cursor_x, 28, COL8_FFFFFF, COL8_000000, s, 1);
cursor_x += 8;
}
}
}
/* カーソル再表示 */
boxfill8(sheet->buf, sheet->bxsize, cursor_c, cursor_x, 28, cursor_x + 7, 43);
sheet_refresh(sheet, cursor_x, 28, cursor_x + 8, 44);
}
}
}
2 changes: 1 addition & 1 deletion harib/bootpack.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ void set_gatedesc(struct GATE_DESCRIPTOR *gd, int offset, int selector, int ar);
//
// int.c
//

void init_pic(void);
void inthandler27(int *esp);
#define PIC0_ICW1 0x0020
Expand Down Expand Up @@ -241,6 +240,7 @@ struct TSS32 {
struct TASK {
int sel, flags; /* selはGDTの番号のこと */
int level, priority;
struct FIFO32 fifo;
struct TSS32 tss;
};
struct TASKLEVEL {
Expand Down

0 comments on commit d9f2aee

Please sign in to comment.