Lines Matching +full:num +full:- +full:cols

3 /*-
45 * terminal.c: Editor/termcap-curses interface
96 #define GoodStr(a) (el->el_terminal.t_str[a] != NULL && \
97 el->el_terminal.t_str[a][0] != '\0')
98 #define Str(a) el->el_terminal.t_str[a]
99 #define Val(a) el->el_terminal.t_val[a]
236 if (el->el_tty.t_tabs) in terminal_setflags()
260 (void) fprintf(el->el_errfile, in terminal_setflags()
262 (void) fprintf(el->el_errfile, in terminal_setflags()
266 (void) fprintf(el->el_errfile, "no clear EOL capability.\n"); in terminal_setflags()
268 (void) fprintf(el->el_errfile, "no delete char capability.\n"); in terminal_setflags()
270 (void) fprintf(el->el_errfile, "no insert char capability.\n"); in terminal_setflags()
281 el->el_terminal.t_buf = el_calloc(TC_BUFSIZE, in terminal_init()
282 sizeof(*el->el_terminal.t_buf)); in terminal_init()
283 if (el->el_terminal.t_buf == NULL) in terminal_init()
284 return -1; in terminal_init()
285 el->el_terminal.t_cap = el_calloc(TC_BUFSIZE, in terminal_init()
286 sizeof(*el->el_terminal.t_cap)); in terminal_init()
287 if (el->el_terminal.t_cap == NULL) in terminal_init()
289 el->el_terminal.t_fkey = el_calloc(A_K_NKEYS, in terminal_init()
290 sizeof(*el->el_terminal.t_fkey)); in terminal_init()
291 if (el->el_terminal.t_fkey == NULL) in terminal_init()
293 el->el_terminal.t_loc = 0; in terminal_init()
294 el->el_terminal.t_str = el_calloc(T_str, in terminal_init()
295 sizeof(*el->el_terminal.t_str)); in terminal_init()
296 if (el->el_terminal.t_str == NULL) in terminal_init()
298 el->el_terminal.t_val = el_calloc(T_val, in terminal_init()
299 sizeof(*el->el_terminal.t_val)); in terminal_init()
300 if (el->el_terminal.t_val == NULL) in terminal_init()
307 return -1; in terminal_init()
317 el_free(el->el_terminal.t_buf); in terminal_end()
318 el->el_terminal.t_buf = NULL; in terminal_end()
319 el_free(el->el_terminal.t_cap); in terminal_end()
320 el->el_terminal.t_cap = NULL; in terminal_end()
321 el->el_terminal.t_loc = 0; in terminal_end()
322 el_free(el->el_terminal.t_str); in terminal_end()
323 el->el_terminal.t_str = NULL; in terminal_end()
324 el_free(el->el_terminal.t_val); in terminal_end()
325 el->el_terminal.t_val = NULL; in terminal_end()
326 el_free(el->el_terminal.t_fkey); in terminal_end()
327 el->el_terminal.t_fkey = NULL; in terminal_end()
340 char **tlist = el->el_terminal.t_str; in terminal_alloc()
341 char **tmp, **str = &tlist[t - tstr]; in terminal_alloc()
363 if (el->el_terminal.t_loc + 3 < TC_BUFSIZE) { in terminal_alloc()
365 (void) strcpy(*str = &el->el_terminal.t_buf[ in terminal_alloc()
366 el->el_terminal.t_loc], cap); in terminal_alloc()
367 el->el_terminal.t_loc += clen + 1; /* one for \0 */ in terminal_alloc()
383 memcpy(el->el_terminal.t_buf, termbuf, TC_BUFSIZE); in terminal_alloc()
384 el->el_terminal.t_loc = tlen; in terminal_alloc()
385 if (el->el_terminal.t_loc + 3 >= TC_BUFSIZE) { in terminal_alloc()
386 (void) fprintf(el->el_errfile, in terminal_alloc()
391 (void) strcpy(*str = &el->el_terminal.t_buf[el->el_terminal.t_loc], in terminal_alloc()
393 el->el_terminal.t_loc += (size_t)clen + 1; /* one for \0 */ in terminal_alloc()
404 coord_t *c = &el->el_terminal.t_size; in terminal_rebuffer_display()
408 c->h = Val(T_co); in terminal_rebuffer_display()
409 c->v = Val(T_li); in terminal_rebuffer_display()
411 if (terminal_alloc_display(el) == -1) in terminal_rebuffer_display()
412 return -1; in terminal_rebuffer_display()
420 coord_t *c = &el->el_terminal.t_size; in terminal_alloc_buffer()
423 b = el_calloc((size_t)(c->v + 1), sizeof(*b)); in terminal_alloc_buffer()
426 for (i = 0; i < c->v; i++) { in terminal_alloc_buffer()
427 b[i] = el_calloc((size_t)(c->h + 1), sizeof(**b)); in terminal_alloc_buffer()
429 while (--i >= 0) in terminal_alloc_buffer()
435 b[c->v] = NULL; in terminal_alloc_buffer()
462 el->el_display = terminal_alloc_buffer(el); in terminal_alloc_display()
463 if (el->el_display == NULL) in terminal_alloc_display()
465 el->el_vdisplay = terminal_alloc_buffer(el); in terminal_alloc_display()
466 if (el->el_vdisplay == NULL) in terminal_alloc_display()
471 return -1; in terminal_alloc_display()
481 terminal_free_buffer(&el->el_display); in terminal_free_display()
482 terminal_free_buffer(&el->el_vdisplay); in terminal_free_display()
495 if (where == el->el_cursor.v) in terminal_move_to_line()
498 if (where >= el->el_terminal.t_size.v) { in terminal_move_to_line()
500 (void) fprintf(el->el_errfile, in terminal_move_to_line()
505 if ((del = where - el->el_cursor.v) > 0) { in terminal_move_to_line()
510 for (; del > 0; del--) in terminal_move_to_line()
513 el->el_cursor.h = 0; in terminal_move_to_line()
515 if (GoodStr(T_UP) && (-del > 1 || !GoodStr(T_up))) in terminal_move_to_line()
516 terminal_tputs(el, tgoto(Str(T_UP), -del, -del), -del); in terminal_move_to_line()
523 el->el_cursor.v = where;/* now where is here */ in terminal_move_to_line()
536 if (where == el->el_cursor.h) in terminal_move_to_char()
539 if (where > el->el_terminal.t_size.h) { in terminal_move_to_char()
541 (void) fprintf(el->el_errfile, in terminal_move_to_char()
548 el->el_cursor.h = 0; in terminal_move_to_char()
551 del = where - el->el_cursor.h; in terminal_move_to_char()
553 if ((del < -4 || del > 4) && GoodStr(T_ch)) in terminal_move_to_char()
564 if ((el->el_cursor.h & 0370) != in terminal_move_to_char()
566 && (el->el_display[ in terminal_move_to_char()
567 el->el_cursor.v][where & 0370] != in terminal_move_to_char()
572 (el->el_cursor.h & 0370); in terminal_move_to_char()
578 el->el_cursor.h = where & ~0x7; in terminal_move_to_char()
587 * el->el_cursor.h!!! in terminal_move_to_char()
590 (wchar_t *)&el->el_display[ in terminal_move_to_char()
591 el->el_cursor.v][el->el_cursor.h], in terminal_move_to_char()
592 (size_t)(where - el->el_cursor.h)); in terminal_move_to_char()
596 if ((-del > 4) && GoodStr(T_LE)) in terminal_move_to_char()
597 terminal_tputs(el, tgoto(Str(T_LE), -del, -del), in terminal_move_to_char()
598 -del); in terminal_move_to_char()
605 ((unsigned int)-del > in terminal_move_to_char()
608 : (-del > where)) { in terminal_move_to_char()
610 el->el_cursor.h = 0; in terminal_move_to_char()
613 for (i = 0; i < -del; i++) in terminal_move_to_char()
618 el->el_cursor.h = where; /* now where is here */ in terminal_move_to_char()
623 * Overstrike num characters
632 if (n > (size_t)el->el_terminal.t_size.h) { in terminal_overwrite()
634 (void) fprintf(el->el_errfile, in terminal_overwrite()
643 el->el_cursor.h++; in terminal_overwrite()
644 } while (--n); in terminal_overwrite()
646 if (el->el_cursor.h >= el->el_terminal.t_size.h) { /* wrap? */ in terminal_overwrite()
648 el->el_cursor.h = 0; in terminal_overwrite()
649 if (el->el_cursor.v + 1 < el->el_terminal.t_size.v) in terminal_overwrite()
650 el->el_cursor.v++; in terminal_overwrite()
655 if ((c = el->el_display[el->el_cursor.v] in terminal_overwrite()
656 [el->el_cursor.h]) != '\0') { in terminal_overwrite()
658 while (el->el_display[el->el_cursor.v] in terminal_overwrite()
659 [el->el_cursor.h] == MB_FILL_CHAR) in terminal_overwrite()
660 el->el_cursor.h++; in terminal_overwrite()
663 el->el_cursor.h = 1; in terminal_overwrite()
667 el->el_cursor.h = el->el_terminal.t_size.h - 1; in terminal_overwrite()
673 * Delete num characters
676 terminal_deletechars(EditLine *el, int num) in terminal_deletechars() argument
678 if (num <= 0) in terminal_deletechars()
683 (void) fprintf(el->el_errfile, " ERROR: cannot delete \n"); in terminal_deletechars()
687 if (num > el->el_terminal.t_size.h) { in terminal_deletechars()
689 (void) fprintf(el->el_errfile, in terminal_deletechars()
690 "%s: num is ridiculous: %d\r\n", __func__, num); in terminal_deletechars()
695 if ((num > 1) || !GoodStr(T_dc)) { /* if dc would be more in terminal_deletechars()
697 terminal_tputs(el, tgoto(Str(T_DC), num, num), num); in terminal_deletechars()
704 while (num--) in terminal_deletechars()
713 * Puts terminal in insert character mode or inserts num
718 terminal_insertwrite(EditLine *el, wchar_t *cp, int num) in terminal_insertwrite() argument
720 if (num <= 0) in terminal_insertwrite()
724 (void) fprintf(el->el_errfile, " ERROR: cannot insert \n"); in terminal_insertwrite()
728 if (num > el->el_terminal.t_size.h) { in terminal_insertwrite()
730 (void) fprintf(el->el_errfile, in terminal_insertwrite()
731 "%s: num is ridiculous: %d\r\n", __func__, num); in terminal_insertwrite()
736 if ((num > 1) || !GoodStr(T_ic)) { in terminal_insertwrite()
738 terminal_tputs(el, tgoto(Str(T_IC), num, num), num); in terminal_insertwrite()
739 terminal_overwrite(el, cp, (size_t)num); in terminal_insertwrite()
746 el->el_cursor.h += num; in terminal_insertwrite()
749 while (--num); in terminal_insertwrite()
751 if (GoodStr(T_ip)) /* have to make num chars insert */ in terminal_insertwrite()
758 if (GoodStr(T_ic)) /* have to make num chars insert */ in terminal_insertwrite()
763 el->el_cursor.h++; in terminal_insertwrite()
765 if (GoodStr(T_ip)) /* have to make num chars insert */ in terminal_insertwrite()
769 } while (--num); in terminal_insertwrite()
774 * clear to end of line. There are num characters to clear
777 terminal_clear_EOL(EditLine *el, int num) in terminal_clear_EOL() argument
784 for (i = 0; i < num; i++) in terminal_clear_EOL()
786 el->el_cursor.h += num; /* have written num spaces */ in terminal_clear_EOL()
829 *term = el->el_terminal.t_name; in terminal_get()
844 int lins, cols; in terminal_set() local
860 el->el_flags |= EDIT_DISABLED; in terminal_set()
862 (void) memset(el->el_terminal.t_cap, 0, TC_BUFSIZE); in terminal_set()
864 i = tgetent(el->el_terminal.t_cap, term); in terminal_set()
867 if (i == -1) in terminal_set()
868 (void) fprintf(el->el_errfile, in terminal_set()
871 (void) fprintf(el->el_errfile, in terminal_set()
873 (void) fprintf(el->el_errfile, in terminal_set()
878 for (t = tstr; t->name != NULL; t++) in terminal_set()
893 for (t = tstr; t->name != NULL; t++) { in terminal_set()
895 terminal_alloc(el, t, tgetstr(strchr(t->name, *t->name), in terminal_set()
905 el->el_terminal.t_size.v = Val(T_co); in terminal_set()
906 el->el_terminal.t_size.h = Val(T_li); in terminal_set()
911 (void) terminal_get_size(el, &lins, &cols); in terminal_set()
912 if (terminal_change_size(el, lins, cols) == -1) in terminal_set()
913 return -1; in terminal_set()
916 el->el_terminal.t_name = term; in terminal_set()
917 return i <= 0 ? -1 : 0; in terminal_set()
922 * Return the new window size in lines and cols, and
926 terminal_get_size(EditLine *el, int *lins, int *cols) in terminal_get_size() argument
929 *cols = Val(T_co); in terminal_get_size()
935 if (ioctl(el->el_infd, TIOCGWINSZ, &ws) != -1) { in terminal_get_size()
937 *cols = ws.ws_col; in terminal_get_size()
946 if (ioctl(el->el_infd, TIOCGSIZE, &ts) != -1) { in terminal_get_size()
948 *cols = ts.ts_cols; in terminal_get_size()
954 return Val(T_co) != *cols || Val(T_li) != *lins; in terminal_get_size()
962 terminal_change_size(EditLine *el, int lins, int cols) in terminal_change_size() argument
964 coord_t cur = el->el_cursor; in terminal_change_size()
968 Val(T_co) = (cols < 2) ? 80 : cols; in terminal_change_size()
971 /* re-make display buffers */ in terminal_change_size()
972 if (terminal_rebuffer_display(el) == -1) in terminal_change_size()
973 return -1; in terminal_change_size()
975 el->el_cursor = cur; in terminal_change_size()
986 funckey_t *arrow = el->el_terminal.t_fkey; in terminal_init_arrow()
1031 funckey_t *arrow = el->el_terminal.t_fkey; in terminal_reset_arrow()
1058 if (el->el_map.type != MAP_VI) in terminal_reset_arrow()
1082 funckey_t *arrow = el->el_terminal.t_fkey; in terminal_set_arrow()
1091 return -1; in terminal_set_arrow()
1101 funckey_t *arrow = el->el_terminal.t_fkey; in terminal_clear_arrow()
1109 return -1; in terminal_clear_arrow()
1120 funckey_t *arrow = el->el_terminal.t_fkey; in terminal_print_arrow()
1140 funckey_t *arrow = el->el_terminal.t_fkey; in terminal_bind_arrow()
1143 if (el->el_terminal.t_buf == NULL || el->el_map.key == NULL) in terminal_bind_arrow()
1146 map = el->el_map.type == MAP_VI ? el->el_map.alt : el->el_map.key; in terminal_bind_arrow()
1147 dmap = el->el_map.type == MAP_VI ? el->el_map.vic : el->el_map.emacs; in terminal_bind_arrow()
1156 p = el->el_terminal.t_str[arrow[i].key]; in terminal_bind_arrow()
1168 * 1. They are multi-character arrow keys and the user in terminal_bind_arrow()
1169 * has not re-assigned the leading character, or in terminal_bind_arrow()
1170 * has re-assigned the leading character to be in terminal_bind_arrow()
1202 return -1; in terminal_putc()
1212 terminal_outfile = el->el_outfile; in terminal_tputs()
1230 return fputs(literal_get(el, c), el->el_outfile); in terminal__putc()
1235 return fputs(buf, el->el_outfile); in terminal__putc()
1245 (void) fflush(el->el_outfile); in terminal__flush()
1275 (void) fprintf(el->el_outfile, "\n\tYour terminal has the\n"); in terminal_telltc()
1276 (void) fprintf(el->el_outfile, "\tfollowing characteristics:\n\n"); in terminal_telltc()
1277 (void) fprintf(el->el_outfile, "\tIt has %d columns and %d lines\n", in terminal_telltc()
1279 (void) fprintf(el->el_outfile, in terminal_telltc()
1281 (void) fprintf(el->el_outfile, in terminal_telltc()
1283 (void) fprintf(el->el_outfile, "\tIt %s automatic margins\n", in terminal_telltc()
1286 (void) fprintf(el->el_outfile, "\tIt %s magic margins\n", in terminal_telltc()
1289 for (t = tstr, ts = el->el_terminal.t_str; t->name != NULL; t++, ts++) { in terminal_telltc()
1293 ct_decode_string(*ts, &el->el_scratch), in terminal_telltc()
1294 &el->el_visual), &el->el_scratch); in terminal_telltc()
1298 (void) fprintf(el->el_outfile, "\t%25s (%s) == %s\n", in terminal_telltc()
1299 t->long_name, t->name, ub); in terminal_telltc()
1301 (void) fputc('\n', el->el_outfile); in terminal_telltc()
1321 return -1; in terminal_settc()
1323 strlcpy(what, ct_encode_string(argv[1], &el->el_scratch), sizeof(what)); in terminal_settc()
1324 strlcpy(how, ct_encode_string(argv[2], &el->el_scratch), sizeof(how)); in terminal_settc()
1329 for (ts = tstr; ts->name != NULL; ts++) in terminal_settc()
1330 if (strcmp(ts->name, what) == 0) in terminal_settc()
1333 if (ts->name != NULL) { in terminal_settc()
1341 for (tv = tval; tv->name != NULL; tv++) in terminal_settc()
1342 if (strcmp(tv->name, what) == 0) in terminal_settc()
1345 if (tv->name == NULL) { in terminal_settc()
1346 (void) fprintf(el->el_errfile, in terminal_settc()
1348 return -1; in terminal_settc()
1357 el->el_terminal.t_val[tv - tval] = 1; in terminal_settc()
1359 el->el_terminal.t_val[tv - tval] = 0; in terminal_settc()
1361 (void) fprintf(el->el_errfile, in terminal_settc()
1363 return -1; in terminal_settc()
1374 (void) fprintf(el->el_errfile, in terminal_settc()
1376 return -1; in terminal_settc()
1378 el->el_terminal.t_val[tv - tval] = (int) i; in terminal_settc()
1381 el->el_terminal.t_size.v = Val(T_co); in terminal_settc()
1384 el->el_terminal.t_size.h = Val(T_li); in terminal_settc()
1387 if (i && terminal_change_size(el, Val(T_li), Val(T_co)) == -1) in terminal_settc()
1388 return -1; in terminal_settc()
1406 return -1; in terminal_gettc()
1414 for (ts = tstr; ts->name != NULL; ts++) in terminal_gettc()
1415 if (strcmp(ts->name, what) == 0) in terminal_gettc()
1418 if (ts->name != NULL) { in terminal_gettc()
1419 *(char **)how = el->el_terminal.t_str[ts - tstr]; in terminal_gettc()
1425 for (tv = tval; tv->name != NULL; tv++) in terminal_gettc()
1426 if (strcmp(tv->name, what) == 0) in terminal_gettc()
1429 if (tv->name == NULL) in terminal_gettc()
1430 return -1; in terminal_gettc()
1436 if (el->el_terminal.t_val[tv - tval]) in terminal_gettc()
1442 *(int *)how = el->el_terminal.t_val[tv - tval]; in terminal_gettc()
1468 return -1; in terminal_echotc()
1471 if (argv[0][0] == '-') { in terminal_echotc()
1488 (void) fprintf(el->el_outfile, fmts, EL_CAN_TAB ? "yes" : "no"); in terminal_echotc()
1491 (void) fprintf(el->el_outfile, fmts, Val(T_km) ? "yes" : "no"); in terminal_echotc()
1494 (void) fprintf(el->el_outfile, fmts, EL_HAS_MAGIC_MARGINS ? in terminal_echotc()
1498 (void) fprintf(el->el_outfile, fmts, EL_HAS_AUTO_MARGINS ? in terminal_echotc()
1502 (void) fprintf(el->el_outfile, fmtd, (int)el->el_tty.t_speed); in terminal_echotc()
1506 (void) fprintf(el->el_outfile, fmtd, Val(T_li)); in terminal_echotc()
1508 } else if (wcscmp(*argv, L"cols") == 0) { in terminal_echotc()
1509 (void) fprintf(el->el_outfile, fmtd, Val(T_co)); in terminal_echotc()
1516 for (t = tstr; t->name != NULL; t++) in terminal_echotc()
1517 if (strcmp(t->name, in terminal_echotc()
1518 ct_encode_string(*argv, &el->el_scratch)) == 0) { in terminal_echotc()
1519 scap = el->el_terminal.t_str[t - tstr]; in terminal_echotc()
1522 if (t->name == NULL) { in terminal_echotc()
1524 scap = tgetstr(ct_encode_string(*argv, &el->el_scratch), &area); in terminal_echotc()
1528 (void) fprintf(el->el_errfile, in terminal_echotc()
1531 return -1; in terminal_echotc()
1559 (void) fprintf(el->el_errfile, in terminal_echotc()
1571 (void) fprintf(el->el_errfile, in terminal_echotc()
1574 return -1; in terminal_echotc()
1582 (void) fprintf(el->el_errfile, in terminal_echotc()
1584 return -1; in terminal_echotc()
1590 (void) fprintf(el->el_errfile, in terminal_echotc()
1593 return -1; in terminal_echotc()
1599 (void) fprintf(el->el_errfile, in terminal_echotc()
1602 return -1; in terminal_echotc()
1609 (void) fprintf(el->el_errfile, in terminal_echotc()
1617 (void) fprintf(el->el_errfile, in terminal_echotc()
1619 return -1; in terminal_echotc()
1624 (void) fprintf(el->el_errfile, in terminal_echotc()
1625 "echotc: Bad value `%ls' for cols.\n", in terminal_echotc()
1627 return -1; in terminal_echotc()
1633 (void) fprintf(el->el_errfile, in terminal_echotc()
1635 return -1; in terminal_echotc()
1640 (void) fprintf(el->el_errfile, in terminal_echotc()
1643 return -1; in terminal_echotc()
1648 (void) fprintf(el->el_errfile, in terminal_echotc()
1650 return -1; in terminal_echotc()
1655 (void) fprintf(el->el_errfile, in terminal_echotc()
1658 return -1; in terminal_echotc()