Beispiel #1
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
static int readline_intrinsic_internal (SLang_RLine_Info_Type *rli, char *prompt, int noecho)
{
   char *line;

   if (rli == NULL)
     rli = Intrinsic_Rline_Info;

#if USE_SLANG_READLINE
   if ((rli == NULL) && Use_Readline)
     {
	Intrinsic_Rline_Info = SLrline_open (SLtt_Screen_Cols, SL_RLINE_BLINK_MATCH);
	if (Intrinsic_Rline_Info == NULL)
	  return -1;
	(void) SLang_add_cleanup_function (close_intrinsic_readline);
	rli = Intrinsic_Rline_Info;
     }
#endif
   enable_keyboard_interrupt ();

   line = read_input_line (rli, prompt, noecho);
   if (noecho == 0)
     (void) save_input_line (rli, line);
   (void) SLang_push_malloced_string (line);
   return 0;
}
Beispiel #4
0
static int example_2 (void)
{
   SLrline_Type *rl;
   unsigned int width = 80;

   issue_instructions ();

   SLang_init_tty (-1, 0, 1);
   SLang_set_abort_signal (NULL);

   rl = SLrline_open (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);
	SLfree (line);
     }
   SLrline_close (rl);
   SLang_reset_tty ();
   return 0;
}
Beispiel #5
0
static Slsh_Readline_Type *open_slsh_readline (SLFUTURE_CONST char *name, unsigned int flags)
{
    Slsh_Readline_Type *sri;

    if (NULL == (sri = (Slsh_Readline_Type *)SLmalloc (sizeof (Slsh_Readline_Type))))
        return NULL;
    memset ((char *)sri, 0, sizeof (Slsh_Readline_Type));

#if USE_SLANG_READLINE
    if (name == NULL)
        sri->rli = SLrline_open (SLtt_Screen_Cols, flags);
    else
        sri->rli = SLrline_open2 (name, SLtt_Screen_Cols, flags);

    if (sri->rli == NULL)
    {
        SLfree ((char *)sri);
        return NULL;
    }
    sri->output_newline = 1;
#endif
    return sri;
}
Beispiel #6
0
/* make sure to call free on the returned string once no longer needed */
char *get_input_line(char *title, char *prefill) {

#if (SLANG_VERSION >= 20000) /* libslang2 */

  char *s = NULL;
  char *buf;
  unsigned int len = 0;
  SLrline_Type *rli;

  rli = SLrline_open(SLtt_Screen_Cols, SL_RLINE_BLINK_MATCH);
  if( rli ) {
    SLtt_set_cursor_visibility(1);
    SLsmg_normal_video();
    len = 255;
    rline_update(NULL, len, strlen(title));
    buf = SLrline_read_line(rli, title, &len);
    if( buf ) {
      s = strdup(buf);
      add_history(s); 
    }
    SLfree(buf);
    SLtt_set_cursor_visibility(0);
  }

#else /* libslang1 */

  char *s;
  SLang_RLine_Info_Type *rli;

  s = malloc(256 * sizeof(char));
  if( s ) {

    rli = (SLang_RLine_Info_Type *)malloc(sizeof(SLang_RLine_Info_Type));
    if( rli ) {
      memset(rli, 0, sizeof(SLang_RLine_Info_Type));
      rli->buf = (unsigned char *)s; /* buf is unsigned */
      rli->buf_len = 255;
      rli->tab = 8;
      rli->dhscroll = 5;
      rli->getkey = SLang_getkey;
      rli->tt_goto_column = NULL;
      rli->update_hook = rline_update;
      rli->flags |= SL_RLINE_BLINK_MATCH;
      rli->input_pending = SLang_input_pending;
      SLang_init_readline(rli);
      rli->edit_width = SLtt_Screen_Cols - 1;
      rli->prompt = title;

      /* now prefill if necessary */
      if( *prefill ) {
	strncpy(s, prefill, 255); 
	rli->buf[255] = '\0';
	rli->point = strlen((char *)rli->buf);
      } else {
	*rli->buf = 0;
	rli->point = 0;
      }

      SLtt_set_cursor_visibility(1);
      SLsmg_normal_video();
      SLang_read_line(rli);
      add_history(s); /* buf is unsigned */
      SLtt_set_cursor_visibility(0);
      free(rli);
    }
  }

#endif

  return s;
}