示例#1
0
void screen_puts(const char *str)
{
    int i;

    for (i = 0; str[i]; ++i)
        screen_putc(str[i]);
}
示例#2
0
文件: chunk.c 项目: cnvogelg/knobterm
u08 chunk_handle_char(u08 ch)
{
  // something to process in raw chunk?
  if(bytes_left > 0) {
    // chunk with color?
    if((type=='B')&&(cell==0)) {
      cur_col = ch;
      cell = 1;
    } 
    // text char
    else {
      if(type == 0) {
        screen_putc(cur_x, cur_y, ch);
      } else {
        screen_putch(cur_x, cur_y, ch, cur_col, cur_flags);
      }
      span--;
      if(span == 0) {
        cur_x = pos_x;
        span = width;
        cur_y ++;
        // answer each span with a hash as a handshake
        uart_send('#');
      } else {
        cur_x ++;
      }
      cell = 0;
    }
    bytes_left--;
    return 1;
  } else {
    return 0;
  }
}
示例#3
0
文件: keyboard.c 项目: seanzzz/SOS
void keyboard_callback(registers_t regs) {
  
  // screen_puts("recieved interrupt: ");
  unsigned char scancode;

  /* Read from the keyboard's data buffer */
  scancode = inb(0x60);

  if (scancode & 0x80) { // a key is released
    
    if (scancode == 0xAA || scancode == 0xB6) {
      // shift released
      shift = 0;
    }
  } else if (scancode == 0x2A || scancode == 0x36) {
    // shift pressed but yet released
    shift = 1;
  } else {
    // screen_putc(scancode);
    switch(scancode) {
      case 0x48:
        decrement_cursor_y();
        move_cursor();
        break;
      case 0x50:
        increment_cursor_y();
        move_cursor();
        break;
      case 0x4B:
        decrement_cursor_x();
        move_cursor();
        break;
      case 0x4D:
        increment_cursor_x();
        move_cursor();
        break;
      default:
        if (shift) {
          screen_putc(kbdus_shift[scancode]);
        } else {
          screen_putc(kbdus[scancode]);
        }
        break;
    }
  }

}
示例#4
0
文件: diag.c 项目: AdamRLukaitis/prex
void
diag_puts(char *str)
{

	while (*str)
		screen_putc(*str++);

	screen_move_cursor();
}
示例#5
0
文件: kmain.c 项目: seanzzz/SOS
void welcome() {
  
  char* welcome_msg = "Hello! Welcome to SOS, Sean's Operating System.\n";
  screen_puts(welcome_msg);
  screen_puts("This is a hex number:");
  screen_putx(256);
  screen_putc('\n');

}
示例#6
0
文件: main.c 项目: giszo/urubu
// =====================================================================================================================
static int screen_write(struct device* dev, struct device_request* req)
{
    uint8_t* p = (uint8_t*)req->data;

    for (size_t i = 0; i < req->size; ++i)
	screen_putc(p[i]);

    device_request_finished(req, (int)req->size);

    return 0;
}
示例#7
0
文件: time.c 项目: seanzzz/SOS
static void timer_callback(registers_t regs)
{
  tick++;
  char* t = "Time tick: " ;
  screen_puts(t);
  screen_putd(tick);
  screen_putc('\n');
  // short* vram = (short *)0xb8000;
  // char* msg = "yo!";

  // vram[tick] = msg[0] | '[' << 8;
}
示例#8
0
//FIXME: now only display message on console.
static void
kputc(int c)
{
	int pad_nr = 0;
	if(c < 0)
		return;
	if(c == 0)
		c = '@';

	if(console_pos_x >= TTY_COLUMNS_NR)
	{
		console_pos_x = 0;
		console_pos_y += 1;		
	}
	if(console_pos_y >= TTY_LINES_NR)
	{
		screen_scrollup();
		console_pos_y -= 1;
	}
	switch(c)
	{
		case '\n':
			console_pos_x = 0;
			console_pos_y += 1;
			break;
		case '\t' :
			pad_nr = TTY_TABWIDTH - (console_pos_x % TTY_TABWIDTH);
			while(pad_nr --)
			{
				screen_putc(console_pos_x, console_pos_y, ' ');
				console_pos_x += 1;
			}
			break;
		default:
			screen_putc(console_pos_x, console_pos_y, c);
			console_pos_x += 1;
			break;
	}
}
示例#9
0
static void screen_put_gbk(int c)
{
	static int left = 0;
	if (left) {
		char buf[3] = { left, c };
		convert(CONVERT_G2U, buf, 3, NULL, 0, screen_put_gbk_helper, NULL);
		left = 0;
	} else if (c & 0x80) {
		left = c;
	} else {
		screen_putc(c);
	}
}
示例#10
0
void screen_puti(u32int num)
{
    char stack[10];
    char *sptr = stack;

    if (num == 0)
    {
        screen_putc(ZEROASCII);
        return;
    }

    while (num != 0)
    {
        *sptr++ = num % 10 + ZEROASCII;
        num = num / 10;
    }

    while ((sptr - stack) > 0)
    {
        screen_putc(*(--sptr));
    }
}
示例#11
0
int
screen_puts(const char * s)
{
  int                   i;
  int                   val = 0;

  for (i = 0; s[i] != '\0'; ++i)
    {
      val += screen_putc(s[i]);
    }

  return val;
}
示例#12
0
文件: screen.c 项目: mmalecki/cOS
void screen_putca(char c, char attr) {
  if (c == '\n') {
    x = 0;
    y++;
    if (y >= LINES - 1)
      screen_scroll();
    return;
  }
  int pos = (x + y * COLUMNS) * 2;
  *(video + pos) = c; 
  *(video + pos + 1) = attr;
  x++;
  if (x >= COLUMNS)
    screen_putc('\n');
}
示例#13
0
void
clear_screen(void)
{
	int flags;
	int x, y;

	local_irq_save(flags);
	set_screen_pos_x(0);
	set_screen_pos_y(0);
	for(x = 0; x < TTY_COLUMNS_NR; x++)
		for(y = 0; y < TTY_LINES_NR; y++)
		{
			screen_putc(x, y, '\0');
		}
	set_screen_pos_x(0);
	set_screen_pos_y(0);
	local_irq_restore(flags);
}
示例#14
0
文件: tui.c 项目: fbbs/fbbs
static int _tui_input(int line, int col, const char *prompt, char *buf,
		int len, int echo, int clear, bool utf8)
{
	extern int RMSG;
	extern int msg_num;

	if (clear)
		buf[0] = '\0';
	buf[len - 1] = '\0';

	int real_x = prompt ? screen_display_width(prompt, utf8) : 0;

	int cur, clen;
	cur = clen = strlen(buf);

	bool inited = screen_inited(), prompted = false;
	while (1) {
		if (inited || !prompted) {
			screen_move(line, col);
			clrtoeol();
			if (prompt) {
				if (utf8)
					screen_printf("%s", prompt);
				else
					prints("%s", prompt);
			}
			prompted = true;
		}
		if (inited) {
			if (echo)
				prints("%s", buf);
			else
				tui_repeat_char('*', clen);
			screen_move(line, real_x + cur);
		}

		if (RMSG)
			screen_flush();

		int ch = terminal_getchar();

		if (RMSG && msg_num == 0) {
			if (ch == Ctrl('Z') || ch == KEY_UP) {
				buf[0] = Ctrl('Z');
				clen = 1;
				break;
			}
			if (ch == Ctrl('A') || ch == KEY_DOWN) {
				buf[0] = Ctrl('A');
				clen = 1;
				break;
			}
		}

		if (ch == '\n' || ch == '\r')
			break;

		if (!inited) {
			if (ch == '\x7f' || ch == Ctrl('H')) {
				int dec = remove_character(buf, &cur, clen, true);
				if (dec) {
					clen -= dec;
					screen_puts("\x8 \x8", 3);
				}
			} else if (isprint2(ch) && clen < len - 1) {
				buf[cur] = ch;
				buf[++cur] = '\0';
				++clen;
				screen_putc(echo ? ch : '*');
			}
			continue;
		}

		if (ch == '\x7f' || ch == Ctrl('H')) {
			clen -= remove_character(buf, &cur, clen, true);
		} else if (ch == KEY_DEL) {
			clen -= remove_character(buf, &cur, clen, false);
		} else if (ch == KEY_LEFT) {
			if (cur > 0)
				--cur;
		} else if (ch == KEY_RIGHT) {
			if (cur < clen)
				++cur;
		} else if (ch == Ctrl('E') || ch == KEY_END) {
			cur = clen;
		} else if (ch == Ctrl('A') || ch == KEY_HOME) {
			cur = 0;
		} else if (isprint2(ch) && clen < len - 1) {
			if (buf[cur] != '\0')
				memmove(buf + cur + 1, buf + cur, clen - cur);
			buf[cur++] = ch;
			buf[++clen] = '\0';
		}
	}

	screen_putc('\n');
	screen_flush();
	return clen;
}
示例#15
0
文件: screen.c 项目: zhmu/hardware
void
screen_puts(const char* s)
{
	while (*s)
		screen_putc(*s++);
}
示例#16
0
/**
 * 格式化输出到屏幕
 * 支持形如%d %ld %c %s %-7s %7s的格式
 * @param[in] fmt 格式字符串
 * @param[in] utf8 输入是否为UTF-8编码
 * @param[in] ap 参数列表
 */
static void screen_vprintf(const char *fmt, bool utf8, va_list ap)
{
	const char *ptr = fmt;
	while (*fmt != '\0') {
		if (*fmt == '%') {
			_put_string(ptr, fmt, utf8);

			bool left_adjust = false, long_ = false;
			size_t width = 0;

			++fmt;
			switch (*fmt) {
				case '-':
					left_adjust = true;
					++fmt;
					break;
				case 'l':
					long_ = true;
					++fmt;
					break;
			}

			while (isdigit(*fmt)) {
				width *= 10;
				width += *fmt - '0';
				++fmt;
			}

			switch (*fmt) {
				case 's': {
					const char *ptr = va_arg(ap, const char *);
					_print_string(ptr, width, utf8, left_adjust);
					break;
				}
				case 'd': {
					int64_t n;
					if (long_) {
						n = va_arg(ap, int64_t);
					} else {
						n = va_arg(ap, int);
					}

					char buf[24];
					snprintf(buf, sizeof(buf), "%ld", n);
					_print_string(buf, width, true, left_adjust);
					break;
				}
				case 'c': {
					int i = va_arg(ap, int);
					screen_putc(i);
					break;
				}
				case '\0':
					return;
				default:
					if (utf8)
						screen_putc(*fmt);
					else
						screen_put_gbk(*fmt);
					break;
			}
			ptr = ++fmt;
		} else {
			++fmt;