/* the one already displayed */ static int brl_writeWindow(BrailleDisplay *brl, const wchar_t *text) { brlapi_writeArguments_t arguments = BRLAPI_WRITEARGUMENTS_INITIALIZER; int vt = currentVirtualTerminal(); if (vt == SCR_NO_VT) { /* should leave display */ if (prevShown) { brlapi_write(&arguments); prevShown = 0; } } else { if (prevShown && (memcmp(prevData,brl->buffer,displaySize) == 0) && (!text || (wmemcmp(prevText,text,displaySize) == 0)) && (brl->cursor == prevCursor)) { return 1; } unsigned char and[displaySize]; memset(and, 0, sizeof(and)); arguments.andMask = and; arguments.orMask = brl->buffer; if (text) { arguments.text = (char*) text; arguments.textSize = displaySize * sizeof(wchar_t); arguments.charset = (char*) getWcharCharset(); } arguments.regionBegin = 1; arguments.regionSize = displaySize; arguments.cursor = (brl->cursor != BRL_NO_CURSOR)? (brl->cursor + 1): BRLAPI_CURSOR_OFF; if (brlapi_write(&arguments)==0) { memcpy(prevData,brl->buffer,displaySize); wmemcpy(prevText,text,displaySize); prevCursor = brl->cursor; prevShown = 1; } else { logMessage(LOG_ERR, "write: %s", brlapi_strerror(&brlapi_error)); restart = 1; } } return 1; }
static void showDots(void) { unsigned int x, y; brlapi_keyCode_t k; if (brlapi_getDisplaySize(&x, &y)<0) { brlapi_perror("failed"); exit(PROG_EXIT_FATAL); } if (brlapi_enterTtyMode(-1, NULL)<0) { brlapi_perror("enterTtyMode"); exit(PROG_EXIT_FATAL); } if (x*y<DOTS_TOTALLEN) { fprintf(stderr,"can't show dots with a braille display with less than %d cells\n",(int)DOTS_TOTALLEN); exit(PROG_EXIT_SEMANTIC); } { char text[x*y+1]; unsigned char or[x*y]; brlapi_writeArguments_t wa = BRLAPI_WRITEARGUMENTS_INITIALIZER; fprintf(stderr,"Showing dot patterns\n"); memcpy(text,DOTS_TEXT,DOTS_TEXTLEN); memset(text+DOTS_TEXTLEN,' ',sizeof(text)-DOTS_TEXTLEN); text[x*y] = 0; wa.regionBegin = 1; wa.regionSize = sizeof(or); wa.text = text; memset(or,0,sizeof(or)); or[DOTS_TEXTLEN+0] = BRL_DOT_1; or[DOTS_TEXTLEN+1] = BRL_DOT_2; or[DOTS_TEXTLEN+2] = BRL_DOT_3; or[DOTS_TEXTLEN+3] = BRL_DOT_4; or[DOTS_TEXTLEN+4] = BRL_DOT_5; or[DOTS_TEXTLEN+5] = BRL_DOT_6; or[DOTS_TEXTLEN+6] = BRL_DOT_7; or[DOTS_TEXTLEN+7] = BRL_DOT_8; wa.orMask = or; if (brlapi_write(&wa)<0) { brlapi_perror("brlapi_write"); exit(PROG_EXIT_FATAL); } } brlapi_readKey(1, &k); }