コード例 #1
0
char* iupMatrixCellGetValue (Ihandle* ih, int lin, int col)
{
  if (!ih->handle)
  {
    char str[100];
    sprintf(str, "%d:%d", lin, col);
    return iupAttribGet(ih, str);
  }
  else
  {
    if (ih->data->callback_mode)
    {
      sIFnii value_cb = (sIFnii)IupGetCallback(ih, "VALUE_CB");
      return value_cb(ih, lin, col);
    }
    else
      return ih->data->cells[lin][col].value;
  }
}
コード例 #2
0
ファイル: strings.c プロジェクト: mymmsc/api
char * api_strfilter(char *haystack, char * (*value_cb)(api_str_t *key, void *, size_t *), void *data)
{
    int i = 0;//, j = 0;
    size_t len = api_strlen(haystack);
    
    if(value_cb == NULL) {
        value_cb = filter_env;
    }

    if(len <= 4) {
        return haystack;
    } else {
        //char *str = haystack;
        char *p = NULL;
        int flag = 0;
        int fp = 0; // prefix
        int fs = 0; // suffix
        byte_t ch;
        p = haystack;
        api_str_t key = api_null_string;
        for(i = 0; i < (int)len; i++) {
            //printf("%d: %c\n", i, ch);
            ch = haystack[i];
            if(ch == '$') {
                flag = 1;
                fp = 1;
                continue;
            }
            //printf("%d: %c\n", i, ch);
            switch(ch) {
            case '{':
                if(flag != 1) {
                    flag = 0;
                    fp = 0;
                    continue;
                }
                fp = 2;
                flag = 2;
                key.data = (uint8_t *)haystack + i + 1;
                key.len = 0;
                break;
            case '}':
                if(flag != 2) {
                    flag = 0;
                    fp = 0;
                    continue;
                }
                fs = 1;
                flag = 0;
                {
                    //printf("----------------------------------------------\n");
                    size_t vlen = 0;
                    //printf("key = [%s]\n", key.data);
                    char *value = value_cb(&key, data, &vlen);
                    if(value != NULL && vlen > 0) {
                        int nPoint = p - haystack;
                        int nNeedle = key.len + 3;
                        //printf("find: pos=%d, needle=%d, vlen=%d\n", nPoint, nNeedle, vlen);
                        memmove(haystack + (nPoint + vlen), p + nNeedle, len - nPoint - 1);
                        memcpy(haystack + nPoint, value, vlen);
                        *(haystack + len + (vlen - nNeedle)) = 0x00;
                        p += vlen;
                        i += vlen - nNeedle;
                        len += vlen - nNeedle;
                    }
                }
                break;
            default:
                if(flag == 2) {
                    key.len++;
                } else {
                    *p++ = ch;
                }
                break;
            }
        }
    }
    return haystack;
}
コード例 #3
0
ファイル: strings.c プロジェクト: mymmsc/api
char * api_str2rep(char *haystack, char * (*value_cb)(api_str_t *key, void *, size_t *), void *data)
{
	int i = 0;//, j = 0;
	size_t len = api_strlen(haystack);

	if(len <= 4) {
		return haystack;
	} else {
		char *p = NULL;
		int flag = 0, fp = 0, fs = 0;
		byte_t ch;
		p = haystack;
		api_str_t key = api_null_string;
		for(i = 0; i < (int)len; i++) {
			//printf("%d: %c\n", i, ch);
			ch = haystack[i];
			//printf("%d: %c\n", i, ch);
			switch(ch) {
			case '%':
				switch(flag) {
				case 0:
					flag = 1;
					fp = 1;
					break;
				case 1:
					fp = 2;
					flag = 2;
					key.data = (uint8_t *)haystack + i + 1;
					key.len = 0;
					break;
				case 2:
					flag = 3;
					fs = 1;
					break;
				case 3:
					fs = 2;
					flag = 0;
					{
						//printf("----------------------------------------------\n");
						size_t vlen = 0;
						//printf("key = [%s]\n", key.data);
						char *value = value_cb(&key, data, &vlen);
						if(value != NULL && vlen > 0) {
							int nPoint = p - haystack;
							int nNeedle = key.len + 4;
							//printf("find: pos=%d, needle=%d, vlen=%d\n", nPoint, nNeedle, vlen);
					        memmove(haystack + (nPoint + vlen), p + nNeedle, len - nPoint - 1);
					        memcpy(haystack + nPoint, value, vlen);
					        *(haystack + len + (vlen - nNeedle)) = 0x00;
							p += vlen;
							i += vlen - nNeedle;
							len += vlen - nNeedle;
						}
					}
					break;
				default:
					break;
				}
				break;
			default:
				if(flag == 2) {
					key.len++;
				} else {
					*p++ = ch;
				}
				break;
			}	
		}
	}
	return haystack;
}