● 関数リファレンス

テンポラリ属性の付加/解除

    int __stdcall   StrCalc_set_tempflag(PSTRCALC_PARAM prm,char *name,int bflag);

引数

引数名意味
prmSTRCALC_PARAM 構造体の実体アドレス
name対象変数の名前を格納したバッファの先頭アドレス
bflag属性の有効/無効

戻り値

正常終了した時は 0 以上の値を返します。
name の変数を発見できなかった場合や、変数ではなかった場合は -1 を返します。

説明

name の変数に対し、テンポラリ属性を付加/解除します。
bflag が 1 の場合はテンポラリ属性を付加し、0 の場合は解除します。正常終了した時は、戻り値に以前のテンポラリ属性の状態を返します(1 or 0)。


テスト.

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

char        *param_tbl[] = {
    "param1", "param2", "param3", "param4", "param5", 0
};

/* テーブルの変数を登録 */
int         set_param(PSTRCALC_PARAM prm)
{
    PARAM_INFO      inf;
    char            **pptbl;

    inf.type = PRM_SINGLE; /* 単一変数 */
    inf.btempflg = 0; /* テンポラリ属性無し */

    pptbl = param_tbl;
    do{
        strcpy(inf.name,*pptbl);
        if (StrCalc_new_param(prm,&inf) <= 0)
            return 0;
    }while(*++pptbl);

    return 1;
}

/* 変数内容の確認 */
void        print_param(PSTRCALC_PARAM prm)
{
    char        **pptbl;
    int         ret;

    pptbl = param_tbl;
    do{
        printf("%s : ",prm->str = *pptbl);
        if ((ret = StrCalc(prm)) == STATUS_NORMAL && prm->ans == 0.0)
            printf("登録\n");
        else if (ret == STATUS_ILLEGALNUM_STR)
            printf("存在せず\n");
        else
            printf("エラー  %d\n",ret);
    }while(*++pptbl);
}

void    main(void)
{
    STRCALC_PARAM       prm;

    if (!StrCalc_init(&prm)){
        printf("メモリの確保に失敗しました\n");
        return;
    }

    /* テーブルの変数を登録します */
    if (!set_param(&prm)){
        StrCalc_term(&prm);
        printf("変数の登録に失敗しました\n");
        return;
    }

    /* 登録状況を確認してみる */
    printf("\n登録直後\n");
    print_param(&prm);
    printf("\n");

    /* 変数param2 、param4 、param5 をテンポラリ属性にします */
    if (StrCalc_set_tempflag(&prm,"param2",1) < 0 ||
        StrCalc_set_tempflag(&prm,"param4",1) < 0 ||
        StrCalc_set_tempflag(&prm,"param5",1) < 0){
        StrCalc_term(&prm);
        printf("変数属性の変更に失敗しました (1)\n");
        return;
    }

    /* 変数param5 だけ元に戻します */
    if (StrCalc_set_tempflag(&prm,"param5",0) < 0){
        StrCalc_term(&prm);
        printf("変数属性の変更に失敗しました (2)\n");
        return;
    }

    /* テンポラリ属性の変数を削除します */
    if (!StrCalc_delete_tempparam(&prm)){
        StrCalc_term(&prm);
        printf("変数削除に失敗しました\n");
        return;
    }

    /* 削除後の状況を確認してみる */
    printf("\n削除後\n");
    print_param(&prm);

    StrCalc_term(&prm);
}