static ErlDrvSSizeT control(ErlDrvData drvstate, unsigned int command, char *args, ErlDrvSizeT argslen, char **rbuf, ErlDrvSizeT rbuflen) { state *st = (state *)drvstate; init_state(st, args, argslen); switch (command) { case ENDWIN: do_endwin(st); break; case INITSCR: do_initscr(st); break; case REFRESH: do_refresh(st); break; case CBREAK: do_cbreak(st); break; case NOCBREAK: do_nocbreak(st); break; case ECHO: do_echo(st); break; case NOECHO: do_noecho(st); break; case ADDCH: do_addch(st); break; case ADDSTR: do_addstr(st); break; case MOVE: do_move(st); break; case GETYX: do_getyx(st); break; case GETMAXYX: do_getmaxyx(st); break; case CURS_SET: do_curs_set(st); break; case WERASE: do_werase(st); break; case HAS_COLORS: do_has_colors(st); break; case START_COLOR: do_start_color(st); break; case INIT_PAIR: do_init_pair(st); break; case WATTRON: do_wattron(st); break; case WATTROFF: do_wattroff(st); break; case NL: do_nl(st); break; case NONL: do_nonl(st); break; case SCROLLOK: do_scrollok(st); break; case MVADDCH: do_mvaddch(st); break; case MVADDSTR: do_mvaddstr(st); break; case NEWWIN: do_newwin(st); break; case DELWIN: do_delwin(st); break; case WMOVE: do_wmove(st); break; case WADDSTR: do_waddstr(st); break; case WADDCH: do_waddch(st); break; case MVWADDSTR: do_mvwaddstr(st); break; case MVWADDCH: do_mvwaddch(st); break; case WREFRESH: do_wrefresh(st); break; case WHLINE: do_whline(st); break; case WVLINE: do_wvline(st); break; case WBORDER: do_wborder(st); break; case BOX: do_box(st); break; case KEYPAD: do_keypad(st); break; default: break; } int rlen = st->eixb.index; ErlDrvBinary *response = driver_alloc_binary(rlen); memcpy(response->orig_bytes, st->eixb.buff, rlen); ei_x_free(&(st->eixb)); *rbuf = (char *)response; return rlen; }
// max_nboxes: -1 = no maximum static void do_box_sequence(deark *c, struct de_boxesctx *bctx, i64 pos1, i64 len, i64 max_nboxes, int level) { i64 pos; i64 box_len; i64 endpos; int ret; i64 box_count = 0; if(level >= 32) { // An arbitrary recursion limit. return; } pos = pos1; endpos = pos1 + len; while(pos < endpos) { if(max_nboxes>=0 && box_count>=max_nboxes) break; ret = do_box(c, bctx, pos, endpos-pos, level, &box_len); if(!ret) break; box_count++; pos += box_len; } }
void ps_fillbox(t_psdata ps, real x1, real y1, real x2, real y2) { do_box(ps, x1, y1, x2, y2); fprintf(ps->fp, "f\n"); }
void ps_fillbox(FILE *ps,real x1,real y1,real x2,real y2) { do_box(ps,x1,y1,x2,y2); fprintf(ps,"f\n"); }