● ldstr.dll

ldstr.dll について

ldstr.dll は、FLOATEX値と文字列の相互変換を行うライブラリです。



ldstr による文字列変換系は、floatex.dll がインターフェースと DLL の操作処理を持ち、機能本体は ldstr.dll が持つという、少し特殊な構成になっています。
ldstr.dll はダイナミックリンクされますので、特別なコンパイル・リンク操作は不要です。使用する時は、exe と同じ場所(floatex.dll と同じ場所)に ldstr.dll を置く必要があります。
ldstr.dll の使用は任意です。他の変換手段を用意できる場合や、文字列変換を行わないプログラムの場合は、ldstr.dll を使用しなくても問題はありません。

関数は、リファレンスの「ldstr」を参照してください。

例.

#include <stdio.h>
#include <string.h>
#include "floatex.h"

char    *comma_edit(char *,char *);

#define START           1
#define END             20

int __cdecl    main(void)
{
    FLOATEX         cap,r,n,t,rp1;
    int             i;
    char            buf1[32],buf2[64];
    unsigned int    oldcw;

    if (!floatex_ldstr_init()){     /* ldstr.dll の初期化 */
        printf("ldstr.dll がありません\n");
        return 0;
    }

    oldcw = floatex_storecw();
    floatex_loadcw(FEX_PC_64 | FEX_RC_NEAR | FEX_MCW_EM);

    floatex_doubleto(50000.0,cap);  /* 元金 */
    floatex_doubleto(0.001,r);      /* 利率 */

    floatex_einc(r,rp1);
    i = START;

    /* 単利計算 */
    do{
        floatex_longto(i,n);

        /* 元金 × (1 + n × 利率) */
        floatex_mul(
            floatex_inc(floatex_emul(n,r,t)),
            cap);
        floatex_int(t); /* 結果の小数点以下を切り捨てる */

        floatex_ldstr_ldtoa(t,buf1); /* FLOATEX 型値を文字列に変換 */

        printf("%3d : %7s\n",i,comma_edit(buf2,buf1));

    }while(++i <= END);

    floatex_ldstr_term();   /* ldstr の解放 */
    floatex_loadcw(oldcw);

    return 0;
}

/* カンマ編集 */
char    *comma_edit(char *pdest,char *psrc)
{
    char        *ptr;
    int         len,cnt;

    cnt = ((len = strlen(psrc) % 3) != 0)? (3 - len) : 0;
    for(ptr = pdest;*psrc;psrc++){
        *ptr++ = *psrc;
        if (++cnt >= 3 && psrc[1]){
            *ptr++ = ',';
            cnt = 0;
        }
    }
    *ptr = 0;

    return pdest;
}

floatex_ldstr_init による開始処理と、floatex_ldstr_term による解放処理の間に、FLOATEX型と文字列の変換処理を記述します。これは推奨する形ですが、「ldstr系関数を使い終わったら floatex_ldstr_term を実行する」という最低限のルールに反しない限り、配置は自由です。