static int example_3 (void) { SLrline_Type *rl; unsigned int width = 80; if ((-1 == SLang_init_all ()) || (-1 == SLang_init_array_extra ()) || (-1 == SLang_init_import ())) return -1; (void) SLpath_set_load_path ("../slsh/lib"); if (-1 == SLrline_init ("demo/rline", NULL, NULL)) return -1; issue_instructions (); SLang_init_tty (-1, 0, 1); SLang_set_abort_signal (NULL); rl = SLrline_open2 ("rline", width, SL_RLINE_BLINK_MATCH); if (rl == NULL) return -1; while (1) { char *line; unsigned int len; line = SLrline_read_line (rl, "prompt>", &len); if (line == NULL) { int err = SLang_get_error (); if (err == SL_UserBreak_Error) { (void) fprintf (stderr, "*Interrupted*\n"); SLang_set_error (0); SLKeyBoard_Quit = 0; continue; } if (err == 0) break; /* EOF */ fprintf (stderr, "Error Occurred: %s\n", SLerr_strerror (err)); break; } if (0 == strcmp (line, "quit")) { SLfree (line); break; } (void) fprintf (stdout, "\nRead %d bytes: %s\n", strlen(line), line); if (-1 == SLrline_save_line (rl)) break; SLfree (line); } SLrline_close (rl); SLang_reset_tty (); return 0; }
SLrline_Type *SLrline_open2 (SLFUTURE_CONST char *name, unsigned int width, unsigned int flags) { SLrline_Type *rli; SLrline_Type *arli; char hookname [1024]; if (NULL == (rli = SLrline_open (width, flags))) return NULL; if (NULL != rli->name) SLang_free_slstring (rli->name); if (NULL == (rli->name = SLang_create_slstring (name))) { SLrline_close (rli); return NULL; } arli = Active_Rline_Info; Active_Rline_Info = rli; SLsnprintf (hookname, sizeof(hookname), "%s_rline_open_hook", name); if (0 == SLang_run_hooks (hookname, 0)) (void) SLang_run_hooks ("rline_open_hook", 1, name); Active_Rline_Info = arli; return rli; }
static int example_1 (void) { SLrline_Type *rl; unsigned int width = 80; issue_instructions (); SLang_init_tty (-1, 0, 1); rl = SLrline_open (width, SL_RLINE_BLINK_MATCH); while (1) { char *line; unsigned int len; line = SLrline_read_line (rl, "prompt>", &len); if (line == NULL) break; if (0 == strcmp (line, "quit")) { SLfree (line); break; } (void) fprintf (stdout, "\nRead %d bytes: %s\n", strlen(line), line); SLfree (line); } SLrline_close (rl); SLang_reset_tty (); return 0; }
static void close_intrinsic_readline (void) { if (Intrinsic_Rline_Info != NULL) { SLrline_close (Intrinsic_Rline_Info); Intrinsic_Rline_Info = NULL; } }
static void close_intrinsic_readline (void) { if (Intrinsic_Rline_Info != NULL) { SLrline_close (Intrinsic_Rline_Info->rli); SLfree ((char *) Intrinsic_Rline_Info); Intrinsic_Rline_Info = NULL; } }
static void destroy_rline (SLtype type, VOID_STAR f) { SLang_RLine_Info_Type *rli; (void) type; rli = (SLang_RLine_Info_Type *) f; if (rli != NULL) SLrline_close (rli); }
static void close_slsh_readline (Slsh_Readline_Type *sri) { if (sri == NULL) return; #if USE_SLANG_READLINE if (sri->rli != NULL) SLrline_close (sri->rli); #endif SLfree ((char *) sri); }
static void close_readline () { #if USE_SLANG_READLINE if (Rline_Info != NULL) { SLrline_close (Rline_Info); Rline_Info = NULL; } #endif }
static void close_readline (void) { if (Default_Readline_Info != NULL) { #if USE_SLANG_READLINE SLrline_close (Default_Readline_Info->rli); #endif SLfree ((char *) Default_Readline_Info); Default_Readline_Info = NULL; } }
static void new_slrline_intrinsic (char *name) { SLang_RLine_Info_Type *rli; SLang_MMT_Type *mmt; if (NULL == (rli = SLrline_open2 (name, SLtt_Screen_Cols, SL_RLINE_BLINK_MATCH))) return; if (NULL == (mmt = SLang_create_mmt (Rline_Type_Id, (VOID_STAR) rli))) { SLrline_close (rli); return; } if (-1 == SLang_push_mmt (mmt)) SLang_free_mmt (mmt); }
SLrline_Type *SLrline_open (unsigned int width, unsigned int flags) { SLrline_Type *rli; if (_pSLutf8_mode) flags |= SL_RLINE_UTF8_MODE; if (NULL == (rli = (SLrline_Type *)SLcalloc (1, sizeof (SLrline_Type)))) return NULL; if (width == 0) width = 80; if (width < 256) rli->buf_len = 256; else rli->buf_len = width; if (NULL == (rli->buf = (unsigned char *)SLmalloc (rli->buf_len))) { SLrline_close (rli); return NULL; } *rli->buf = 0; #ifdef REAL_UNIX_SYSTEM rli->eof_char = 4; #else rli->eof_char = 26; #endif rli->point = 0; rli->flags = flags; rli->edit_width = width; rli->hscroll = width/4; rli->tab = 8; rli->getkey = SLang_getkey; rli->input_pending = SLang_input_pending; rli->state = RLI_LINE_INVALID; if (rli->flags & SL_RLINE_USE_ANSI) { if (rli->tt_goto_column == NULL) rli->tt_goto_column = ansi_goto_column; } if (-1 == init_keymap ()) { SLrline_close (rli); return NULL; } rli->keymap = RL_Keymap; rli->old_upd = rli->upd_buf1; rli->new_upd = rli->upd_buf2; if (Char_Widths[0] == 0) { int ch; /* FIXME: This does not support UTF-8 */ for (ch = 0; ch < 32; ch++) Char_Widths[ch] = 2; for (ch = 32; ch < 256; ch++) Char_Widths[ch] = 1; Char_Widths[127] = 2; #ifndef IBMPC_SYSTEM for (ch = 128; ch < 160; ch++) Char_Widths[ch] = 3; #endif } return rli; }