static void send_char(wchar_t c) { char cbuf[STR_BOUNDS(1)]; size_t offs; int rc; offs = 0; chr_encode(c, cbuf, &offs, STR_BOUNDS(1)); rc = conn_send(cbuf, offs); if (rc != EOK) { printf("[Failed sending data]\n"); } }
int fputc(wchar_t c, FILE *stream) { char buf[STR_BOUNDS(1)]; size_t sz = 0; if (chr_encode(c, buf, &sz, STR_BOUNDS(1)) == EOK) { size_t wr = fwrite(buf, 1, sz, stream); if (wr < sz) return EOF; return (int) c; } return EOF; }
/** Insert a character at caret position. */ static void insert_char(wchar_t c) { spt_t pt; char cbuf[STR_BOUNDS(1) + 1]; size_t offs; tag_get_pt(&pane.caret_pos, &pt); offs = 0; chr_encode(c, cbuf, &offs, STR_BOUNDS(1) + 1); cbuf[offs] = '\0'; (void) sheet_insert(&doc.sh, &pt, dir_before, cbuf); pane.rflags |= REDRAW_ROW; if (c == '\n') pane.rflags |= REDRAW_TEXT; }
static int klog_vprintf_wstr_write(const wchar_t *str, size_t size, void *data) { size_t offset = 0; size_t chars = 0; while (offset < size) { char buf[STR_BOUNDS(1)]; size_t sz = 0; if (chr_encode(str[chars], buf, &sz, STR_BOUNDS(1)) == EOK) klog_write(buf, sz); chars++; offset += sizeof(wchar_t); } return chars; }
static int log_printf_wstr_write(const wchar_t *wstr, size_t size, void *data) { char buffer[16]; size_t offset = 0; size_t chars = 0; for (offset = 0; offset < size; offset += sizeof(wchar_t), chars++) { kio_push_char(wstr[chars]); size_t buffer_offset = 0; int rc = chr_encode(wstr[chars], buffer, &buffer_offset, 16); if (rc != EOK) { return rc; } log_append((const uint8_t *)buffer, buffer_offset); } return chars; }
void insertscore(int score, int level) { int i; int j; size_t off; cons_event_t ev; kbd_event_t *kev; clear_screen(); moveto(10, 10); puts("Insert your name: "); str_cpy(scores[NUMSPOTS - 1].hs_name, STR_BOUNDS(MAXLOGNAME) + 1, "Player"); i = 6; off = 6; moveto(10 , 28); printf("%s%.*s", scores[NUMSPOTS - 1].hs_name, MAXLOGNAME-i, "........................................"); while (1) { console_flush(console); if (!console_get_event(console, &ev)) exit(1); if (ev.type != CEV_KEY || ev.ev.key.type == KEY_RELEASE) continue; kev = &ev.ev.key; if (kev->key == KC_ENTER || kev->key == KC_NENTER) break; if (kev->key == KC_BACKSPACE) { if (i > 0) { wchar_t uc; --i; while (off > 0) { --off; size_t otmp = off; uc = str_decode(scores[NUMSPOTS - 1].hs_name, &otmp, STR_BOUNDS(MAXLOGNAME) + 1); if (uc != U_SPECIAL) break; } scores[NUMSPOTS - 1].hs_name[off] = '\0'; } } else if (kev->c != '\0') { if (i < (MAXLOGNAME - 1)) { if (chr_encode(kev->c, scores[NUMSPOTS - 1].hs_name, &off, STR_BOUNDS(MAXLOGNAME) + 1) == EOK) { ++i; } scores[NUMSPOTS - 1].hs_name[off] = '\0'; } } moveto(10, 28); printf("%s%.*s", scores[NUMSPOTS - 1].hs_name, MAXLOGNAME - i, "........................................"); } scores[NUMSPOTS - 1].hs_score = score; scores[NUMSPOTS - 1].hs_level = level; i = NUMSPOTS - 1; while ((i > 0) && (scores[i - 1].hs_score < score)) i--; for (j = NUMSPOTS - 2; j > i; j--) copyhiscore(j, j-1); copyhiscore(i, NUMSPOTS - 1); }