⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pth_string.c

📁 Linux下的中文输入法
💻 C
📖 第 1 页 / 共 2 页
字号:
fmtstr(    char *buffer,    size_t *currlen,    size_t maxlen,    char *value,    int flags,    int min,    int max){    int padlen, strln;    int cnt = 0;    if (value == NULL)        value = "<NULL>";    for (strln = 0; value[strln] != '\0'; strln++)        ;    padlen = min - strln;    if (padlen < 0)        padlen = 0;    if (flags & DP_F_MINUS)        padlen = -padlen;    while ((padlen > 0) && (cnt < max)) {        dopr_outch(buffer, currlen, maxlen, ' ');        --padlen;        ++cnt;    }    while (*value && (cnt < max)) {        dopr_outch(buffer, currlen, maxlen, *value++);        ++cnt;    }    while ((padlen < 0) && (cnt < max)) {        dopr_outch(buffer, currlen, maxlen, ' ');        ++padlen;        ++cnt;    }}static voidfmtint(    char *buffer,    size_t *currlen,    size_t maxlen,    LLONG value,    int base,    int min,    int max,    int flags){    int signvalue = 0;    unsigned LLONG uvalue;    char convert[20];    int place = 0;    int spadlen = 0;    int zpadlen = 0;    int caps = 0;    if (max < 0)        max = 0;    uvalue = value;    if (!(flags & DP_F_UNSIGNED)) {        if (value < 0) {            signvalue = '-';            uvalue = -value;        } else if (flags & DP_F_PLUS)            signvalue = '+';        else if (flags & DP_F_SPACE)            signvalue = ' ';    }    if (flags & DP_F_UP)        caps = 1;    do {        convert[place++] =            (caps ? "0123456789ABCDEF" : "0123456789abcdef")            [uvalue % (unsigned) base];        uvalue = (uvalue / (unsigned) base);    } while (uvalue && (place < 20));    if (place == 20)        place--;    convert[place] = 0;    zpadlen = max - place;    spadlen = min - MAX(max, place) - (signvalue ? 1 : 0);    if (zpadlen < 0)        zpadlen = 0;    if (spadlen < 0)        spadlen = 0;    if (flags & DP_F_ZERO) {        zpadlen = MAX(zpadlen, spadlen);        spadlen = 0;    }    if (flags & DP_F_MINUS)        spadlen = -spadlen;    /* spaces */    while (spadlen > 0) {        dopr_outch(buffer, currlen, maxlen, ' ');        --spadlen;    }    /* sign */    if (signvalue)        dopr_outch(buffer, currlen, maxlen, signvalue);    /* zeros */    if (zpadlen > 0) {        while (zpadlen > 0) {            dopr_outch(buffer, currlen, maxlen, '0');            --zpadlen;        }    }    /* digits */    while (place > 0)        dopr_outch(buffer, currlen, maxlen, convert[--place]);    /* left justified spaces */    while (spadlen < 0) {        dopr_outch(buffer, currlen, maxlen, ' ');        ++spadlen;    }    return;}static LDOUBLEmath_abs(LDOUBLE value){    LDOUBLE result = value;    if (value < 0)        result = -value;    return result;}static LDOUBLEmath_pow10(int exponent){    LDOUBLE result = 1;    while (exponent > 0) {        result *= 10;        exponent--;    }    return result;}static longmath_round(LDOUBLE value){    long intpart;    intpart = (long) value;    value = value - intpart;    if (value >= 0.5)        intpart++;    return intpart;}static voidfmtfp(    char *buffer,    size_t *currlen,    size_t maxlen,    LDOUBLE fvalue,    int min,    int max,    int flags){    int signvalue = 0;    LDOUBLE ufvalue;    char iconvert[20];    char fconvert[20];    int iplace = 0;    int fplace = 0;    int padlen = 0;    int zpadlen = 0;    int caps = 0;    long intpart;    long fracpart;    if (max < 0)        max = 6;    ufvalue = math_abs(fvalue);    if (fvalue < 0)        signvalue = '-';    else if (flags & DP_F_PLUS)        signvalue = '+';    else if (flags & DP_F_SPACE)        signvalue = ' ';    intpart = (long)ufvalue;    /* sorry, we only support 9 digits past the decimal because of our       conversion method */    if (max > 9)        max = 9;    /* we "cheat" by converting the fractional part to integer by       multiplying by a factor of 10 */    fracpart = math_round((math_pow10(max)) * (ufvalue - intpart));    if (fracpart >= math_pow10(max)) {        intpart++;        fracpart -= math_pow10(max);    }    /* convert integer part */    do {        iconvert[iplace++] =            (caps ? "0123456789ABCDEF"              : "0123456789abcdef")[intpart % 10];        intpart = (intpart / 10);    } while (intpart && (iplace < 20));    if (iplace == 20)        iplace--;    iconvert[iplace] = 0;    /* convert fractional part */    do {        fconvert[fplace++] =            (caps ? "0123456789ABCDEF"              : "0123456789abcdef")[fracpart % 10];        fracpart = (fracpart / 10);    } while (fracpart && (fplace < 20));    if (fplace == 20)        fplace--;    fconvert[fplace] = 0;    /* -1 for decimal point, another -1 if we are printing a sign */    padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);    zpadlen = max - fplace;    if (zpadlen < 0)        zpadlen = 0;    if (padlen < 0)        padlen = 0;    if (flags & DP_F_MINUS)        padlen = -padlen;    if ((flags & DP_F_ZERO) && (padlen > 0)) {        if (signvalue) {            dopr_outch(buffer, currlen, maxlen, signvalue);            --padlen;            signvalue = 0;        }        while (padlen > 0) {            dopr_outch(buffer, currlen, maxlen, '0');            --padlen;        }    }    while (padlen > 0) {        dopr_outch(buffer, currlen, maxlen, ' ');        --padlen;    }    if (signvalue)        dopr_outch(buffer, currlen, maxlen, signvalue);    while (iplace > 0)        dopr_outch(buffer, currlen, maxlen, iconvert[--iplace]);    /*     * Decimal point. This should probably use locale to find the correct     * char to print out.     */    if (max > 0) {        dopr_outch(buffer, currlen, maxlen, '.');        while (fplace > 0)            dopr_outch(buffer, currlen, maxlen, fconvert[--fplace]);    }    while (zpadlen > 0) {        dopr_outch(buffer, currlen, maxlen, '0');        --zpadlen;    }    while (padlen < 0) {        dopr_outch(buffer, currlen, maxlen, ' ');        ++padlen;    }    return;}static voiddopr_outch(    char *buffer,    size_t *currlen,    size_t maxlen,    int c){    if (*currlen < maxlen) {        if (buffer != NULL)            buffer[(*currlen)] = (char)c;        (*currlen)++;    }    return;}intern intpth_vsnprintf(    char *str,    size_t count,    const char *fmt,    va_list args){    size_t retlen;    if (str != NULL)        str[0] = NUL;    dopr(str, count, &retlen, fmt, args);    return retlen;}intern intpth_snprintf(    char *str,    size_t count,    const char *fmt,    ...){    va_list ap;    int rv;    va_start(ap, fmt);    rv = pth_vsnprintf(str, count, fmt, ap);    va_end(ap);    return rv;}intern char *pth_vasprintf(    const char *fmt,    va_list ap){    char *rv;    int n;    n = pth_vsnprintf(NULL, -1, fmt, ap);    if ((rv = (char *)malloc(n+1)) == NULL)        return NULL;    pth_vsnprintf(rv, n+1, fmt, ap);    return rv;}intern char *pth_asprintf(    const char *fmt,    ...){    va_list ap;    char *rv;    va_start(ap, fmt);    rv = pth_vasprintf(fmt, ap);    va_end(ap);    return rv;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -