ch_init(): * Initialize the character editor */
| 390 | * Initialize the character editor |
| 391 | */ |
| 392 | protected int |
| 393 | ch_init(EditLine *el) |
| 394 | { |
| 395 | c_macro_t *ma = &el->el_chared.c_macro; |
| 396 | |
| 397 | el->el_line.buffer = el_malloc(EL_BUFSIZ * |
| 398 | sizeof(*el->el_line.buffer)); |
| 399 | if (el->el_line.buffer == NULL) |
| 400 | return -1; |
| 401 | |
| 402 | (void) memset(el->el_line.buffer, 0, EL_BUFSIZ * |
| 403 | sizeof(*el->el_line.buffer)); |
| 404 | el->el_line.cursor = el->el_line.buffer; |
| 405 | el->el_line.lastchar = el->el_line.buffer; |
| 406 | el->el_line.limit = &el->el_line.buffer[EL_BUFSIZ - EL_LEAVE]; |
| 407 | |
| 408 | el->el_chared.c_undo.buf = el_malloc(EL_BUFSIZ * |
| 409 | sizeof(*el->el_chared.c_undo.buf)); |
| 410 | if (el->el_chared.c_undo.buf == NULL) |
| 411 | return -1; |
| 412 | (void) memset(el->el_chared.c_undo.buf, 0, EL_BUFSIZ * |
| 413 | sizeof(*el->el_chared.c_undo.buf)); |
| 414 | el->el_chared.c_undo.len = -1; |
| 415 | el->el_chared.c_undo.cursor = 0; |
| 416 | el->el_chared.c_redo.buf = el_malloc(EL_BUFSIZ * |
| 417 | sizeof(*el->el_chared.c_redo.buf)); |
| 418 | if (el->el_chared.c_redo.buf == NULL) |
| 419 | return -1; |
| 420 | el->el_chared.c_redo.pos = el->el_chared.c_redo.buf; |
| 421 | el->el_chared.c_redo.lim = el->el_chared.c_redo.buf + EL_BUFSIZ; |
| 422 | el->el_chared.c_redo.cmd = ED_UNASSIGNED; |
| 423 | |
| 424 | el->el_chared.c_vcmd.action = NOP; |
| 425 | el->el_chared.c_vcmd.pos = el->el_line.buffer; |
| 426 | |
| 427 | el->el_chared.c_kill.buf = el_malloc(EL_BUFSIZ * |
| 428 | sizeof(*el->el_chared.c_kill.buf)); |
| 429 | if (el->el_chared.c_kill.buf == NULL) |
| 430 | return -1; |
| 431 | (void) memset(el->el_chared.c_kill.buf, 0, EL_BUFSIZ * |
| 432 | sizeof(*el->el_chared.c_kill.buf)); |
| 433 | el->el_chared.c_kill.mark = el->el_line.buffer; |
| 434 | el->el_chared.c_kill.last = el->el_chared.c_kill.buf; |
| 435 | el->el_chared.c_resizefun = NULL; |
| 436 | el->el_chared.c_resizearg = NULL; |
| 437 | el->el_chared.c_aliasfun = NULL; |
| 438 | el->el_chared.c_aliasarg = NULL; |
| 439 | |
| 440 | el->el_map.current = el->el_map.key; |
| 441 | |
| 442 | el->el_state.inputmode = MODE_INSERT; /* XXX: save a default */ |
| 443 | el->el_state.doingarg = 0; |
| 444 | el->el_state.metanext = 0; |
| 445 | el->el_state.argument = 1; |
| 446 | el->el_state.lastcmd = ED_UNASSIGNED; |
| 447 | |
| 448 | ma->level = -1; |
| 449 | ma->offset = 0; |