示例#1
0
char *
get_random_hint (int force)
{
    char *data, *result = NULL, *eol;
    int len;
    int start;
    static int last_sec;
    static struct timeval tv;
    GIConv conv;
    GString *buffer;

    /* Do not change hints more often than one minute */
    gettimeofday (&tv, NULL);
    if (!force && !(tv.tv_sec > last_sec + 60))
        return g_strdup ("");
    last_sec = tv.tv_sec;

    data = load_mc_home_file (mc_global.share_data_dir, MC_HINT, NULL);
    if (data == NULL)
        return NULL;

    /* get a random entry */
    srand (tv.tv_sec);
    len = strlen (data);
    start = rand () % len;

    for (; start != 0; start--)
        if (data[start] == '\n')
        {
            start++;
            break;
        }

    eol = strchr (data + start, '\n');
    if (eol != NULL)
        *eol = '\0';

    /* hint files are stored in utf-8 */
    /* try convert hint file from utf-8 to terminal encoding */
    conv = str_crt_conv_from ("UTF-8");
    if (conv != INVALID_CONV)
    {
        buffer = g_string_new ("");
        if (str_convert (conv, &data[start], buffer) != ESTR_FAILURE)
            result = g_strdup (buffer->str);
        g_string_free (buffer, TRUE);
        str_close_conv (conv);
    }

    g_free (data);
    return result;
}
示例#2
0
struct data *str_find_op(struct data *src,struct data *in,int nbytes){

  struct data *ptr = (struct data *) NULL;

  char src_buf[BUFFER]; 

  char dst_buf[BUFFER];

  char *sptr = src_buf;
  char *dptr = dst_buf;
  char *s ;
   
  if (str_convert(src,sptr) )
    sptr = src->STR_VALUE;
  
  if(str_convert(in,dptr) ) 
    dptr = in->STR_VALUE;

  s = sptr + nbytes;

  if (s < sptr + strlen(sptr) ) {
 
    s = strstr(s,dptr); //try finding dptr in s

    if (s) {

      ptr = MALLOC_DATA;

      ptr->ele_type = _STR;

      ptr->STR_PTR = INSTALL_STRING(s); 
        
    }
      
  }
  
  return ptr;

}
示例#3
0
void
out_list (
    char *str			/* process ranges in this string */
)


{


    int		start, stop;		/* end points */


/*
 *
 * Called to get the processing ranges that were specified by using the -o option.
 * The range syntax should be identical to the one used in nroff and troff.
 *
 */


    while ( *str && nolist < sizeof(olist) - 2 )  {
	start = stop = str_convert(&str, 0);

	if ( *str == '-' && *str++ )
	    stop = str_convert(&str, 9999);

	if ( start > stop )
	    error(FATAL, "illegal range %d-%d", start, stop);

	olist[nolist++] = start;
	olist[nolist++] = stop;

	if ( *str != '\0' ) str++;

    }	/* End while */

    olist[nolist] = 0;

}   /* End of out_list */
//==================================================================================================
void TestDialog_2::SendSerialData()
{
	UpdateData(true);
	
	//CString str_value;
	//GetDlgItemText(IDC_EDIT1, str_value);
	
	CStringA str_convert(m_Edit_1);
	LPCSTR s = str_convert;

	//LPCSTR s = (LPCSTR)(LPCTSTR)str_value;
	
	serial.Write(s);
	//serial.Write("Hello From C++ Socket");
}
示例#5
0
gchar *
mc_config_get_string (mc_config_t * mc_config, const gchar * group,
                      const gchar * param, const gchar * def)
{
    GIConv conv;
    GString *buffer;
    gchar *ret;
    estr_t conv_res;

    if (!mc_config || !group || !param)
        return g_strdup (def);

    if (!mc_config_has_param (mc_config, group, param))
    {
        if (def != NULL)
            mc_config_set_string (mc_config, group, param, def);
        return g_strdup (def);
    }

    ret = g_key_file_get_string (mc_config->handle, group, param, NULL);
    if (ret == NULL)
        ret = g_strdup (def);

    if (mc_global.utf8_display)
        return ret;

    conv = str_crt_conv_from ("UTF-8");
    if (conv == INVALID_CONV)
        return ret;

    buffer = g_string_new ("");
    conv_res = str_convert (conv, ret, buffer);
    str_close_conv (conv);

    if (conv_res == ESTR_FAILURE)
    {
        g_string_free (buffer, TRUE);
        return ret;
    }

    g_free (ret);

    return g_string_free (buffer, FALSE);
}
示例#6
0
文件: args.c 项目: idispatch/mc
static gchar *
mc_args__convert_help_to_syscharset (const gchar * charset, const gchar * error_message_str,
                                     const gchar * help_str)
{
    GString *buffer;
    GIConv conv;
    gchar *full_help_str;

    buffer = g_string_new ("");
    conv = g_iconv_open (charset, "UTF-8");
    full_help_str = g_strdup_printf ("%s\n\n%s\n", error_message_str, help_str);

    str_convert (conv, full_help_str, buffer);

    g_free (full_help_str);
    g_iconv_close (conv);

    return g_string_free (buffer, FALSE);
}
示例#7
0
struct data* str_operate(struct data *a,struct data *b,int op){

  struct data *ptr = (struct data *) NULL;
  char src_buf[BUFFER];
  char dst_buf[BUFFER];
  char *src_ptr =src_buf;
  char *dst_ptr =dst_buf;
  char *res;
  char *temp;
  int i,n=0;

  if( str_convert(a,src_ptr) )
    src_ptr = a->STR_VALUE;
  if(str_convert(b,dst_ptr) )
    dst_ptr  = b->STR_VALUE;

   ptr = MALLOC_DATA;

    if(! ptr) {

      SET_ERROR(MEM_ERROR);

    }

    ptr->ele_type = _STR;

    switch(op) { 

   case PLUS: //add 2 strings

    res = (char *)malloc(sizeof(char) * (strlen(src_ptr) + strlen(dst_ptr) + 1) );
    if (!res) {

      SET_ERROR(MEM_ERROR);

    }

    strcpy(res,src_ptr);
    strcat(res,dst_ptr);
    
    ptr->STR_PTR = INSTALL_STRING(res); 

    free((void*)res); 
    
    break;

  case MULTIPLY: //multiply 2 strings

    if((a->ele_type == _INT) || (b->ele_type == _INT)  ){

      if(a->ele_type == _INT) {
	n=atoi(src_ptr);
        temp=dst_ptr;
      }
      else {

        n=atoi(dst_ptr);
        temp=src_ptr;
      }

      res = (char*)malloc(sizeof(char) * (strlen(temp) * n + 1) );
     
      if(! res) {

	SET_ERROR(MEM_ERROR);

      }
 
      *res = 0;

      for(i=0;i < n; i++) 
     
	strcat(res,temp);
      
      ptr->STR_PTR = INSTALL_STRING(res);
      free((void*)res);
           
    } 

    else {

      SET_ERROR(BAD_OPERAND);

    }

    break;

  default:
   
    ptr->STR_PTR = (struct str_type *) NULL;

    deinstall_data(ptr);

    SET_ERROR(BAD_OPERATOR);
   

  } //end switch
           
  return ptr;

  } //end routine  
示例#8
0
char *
get_random_hint (int force)
{
    char *data, *result = NULL, *eop;
    int len;
    int start;
    static int last_sec;
    static struct timeval tv;
    GIConv conv;

    /* Do not change hints more often than one minute */
    gettimeofday (&tv, NULL);
    if (!force && !(tv.tv_sec > last_sec + 60))
        return g_strdup ("");
    last_sec = tv.tv_sec;

    data = load_mc_home_file (mc_global.share_data_dir, MC_HINT, NULL);
    if (data == NULL)
        return NULL;

    /* get a random entry */
    srand (tv.tv_sec);
    len = strlen (data);
    start = rand () % (len - 1);

    /* Search the start of paragraph */
    for (; start != 0; start--)
        if (data[start] == '\n' && data[start + 1] == '\n')
        {
            start += 2;
            break;
        }

    /* Search the end of paragraph */
    for (eop = data + start; *eop != '\0'; eop++)
    {
        if (*eop == '\n' && *(eop + 1) == '\n')
        {
            *eop = '\0';
            break;
        }
        if (*eop == '\n')
            *eop = ' ';
    }

    /* hint files are stored in utf-8 */
    /* try convert hint file from utf-8 to terminal encoding */
    conv = str_crt_conv_from ("UTF-8");
    if (conv != INVALID_CONV)
    {
        GString *buffer;

        buffer = g_string_new ("");
        if (str_convert (conv, &data[start], buffer) != ESTR_FAILURE)
            result = g_string_free (buffer, FALSE);
        else
            g_string_free (buffer, TRUE);
        str_close_conv (conv);
    }
    else
        result = g_strdup (&data[start]);

    g_free (data);
    return result;
}