示例#1
0
文件: rline.c 项目: Distrotech/slang
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;
}
示例#2
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;
}
示例#3
0
文件: rline.c 项目: Distrotech/slang
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;
}
示例#4
0
static void close_intrinsic_readline (void)
{
   if (Intrinsic_Rline_Info != NULL)
     {
	SLrline_close (Intrinsic_Rline_Info);
	Intrinsic_Rline_Info = NULL;
     }
}
示例#5
0
文件: readline.c 项目: hankem/S-Lang
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;
    }
}
示例#6
0
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);
}
示例#7
0
文件: readline.c 项目: hankem/S-Lang
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);
}
示例#8
0
static void close_readline ()
{
#if USE_SLANG_READLINE
   if (Rline_Info != NULL)
     {
	SLrline_close (Rline_Info);
	Rline_Info = NULL;
     }
#endif
}
示例#9
0
文件: readline.c 项目: hankem/S-Lang
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;
    }
}
示例#10
0
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);
}
示例#11
0
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;
}