● 関数リファレンス

変数情報の取得

    int __stdcall   StrCalc_get_paramname(PSTRCALC_PARAM prm,char **pptr,PPARAM_INFO pinfo,int *px,int *py);

引数

引数名意味
prmSTRCALC_PARAM 構造体の実体アドレス
pptr対象文字列を指すポインタのアドレス
pinfo取得した変数情報を格納するPARAM_INFO 構造体の実体のアドレス
px一、二次元配列の場合、指定された横インデックスを格納する領域のアドレス
py二次元配列の場合、指定された縦インデックスを格納する領域のアドレス

戻り値

正常終了した時は STATUS_NORMAL を返します。
それ以外は状態コードを返します。

説明

文字列で与えられた変数名を検索し、情報を返します。
変数の登録情報だけでなく、配列表記の場合はインデックスも調べる点が関数StrCalc_search_param とは異なります。

pxpy に NULL を指定する事はできませんので注意してください。


テスト1.

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

void    main(void)
{
    STRCALC_PARAM       prm;
    PARAM_INFO          inf,out;
    int                 ret,x,y;
    char                *str = "prm_single+277";
    char                *ptr;

    if (!StrCalc_init(&prm)){
        printf("init err.\n");
        return;
    }

    /* 変数を登録する */

    strcpy(inf.name,"prm_single");
    inf.type = PRM_SINGLE;
    inf.btempflg = 1;

    if (StrCalc_new_param(&prm,&inf) <= 0){
        printf("変数の登録に失敗\n");
        StrCalc_term(&prm);
        return;
    }

    /* 変数の検索 */
    ptr = str;
    ret = StrCalc_get_paramname(&prm,&ptr,&out,&x,&y);
    if (ret != STATUS_NORMAL){
        printf("関数StrCalc_get_paramname エラー : %d\n",ret);
        StrCalc_term(&prm);
        return;
    }
    /*
      関数終了時の ptr は、検索対象の変数名の直後を指します。
      文字列走査を続ける場合は、ptr をそのまま用いる事ができます。
    */

    /* 結果表示 */

    printf("\n\n");
    printf("文字列 : %s\n",str);
    printf("後続 : %s\n",ptr);

    printf("\n\n");
    printf("name : %s\n",out.name);
    printf("type : %s\n",
        (out.type == PRM_SINGLE)? "PRM_SINGLE" :
            (out.type == PRM_DIM1)? "PRM_DIM1" :
            (out.type == PRM_DIM2)? "PRM_DIM2" : "error");
    printf("btemp : %d\n",out.btempflg);

    StrCalc_term(&prm);
}


テスト2.

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

void    main(void)
{
    STRCALC_PARAM       prm;
    PARAM_INFO          inf,out;
    int                 ret,x,y;
    char                *str = "prm_2dim(3,2)+2";
    char                *ptr;

    if (!StrCalc_init(&prm)){
        printf("init err.\n");
        return;
    }

    strcpy(inf.name,"prm_2dim"); /* 二次元配列の登録 */
    inf.type = PRM_DIM2;
    inf.width = 5;
    inf.height = 6;
    inf.btempflg = 1;

    if (StrCalc_new_param(&prm,&inf) <= 0){
        printf("変数の登録に失敗\n");
        StrCalc_term(&prm);
        return;
    }

    /* 変数の検索 */
    ptr = str;
    ret = StrCalc_get_paramname(&prm,&ptr,&out,&x,&y);
    if (ret != STATUS_NORMAL){
        printf("関数StrCalc_get_paramname エラー : %d\n",ret);
        StrCalc_term(&prm);
        return;
    }

    /* 結果表示 */

    printf("\n\n");
    printf("文字列 : %s\n",str);
    printf("後続 : %s\n",ptr);

    printf("\n\n");
    printf("name : %s\n",out.name);
    printf("type : %s\n",
        (out.type == PRM_SINGLE)? "PRM_SINGLE" :
            (out.type == PRM_DIM1)? "PRM_DIM1" :
            (out.type == PRM_DIM2)? "PRM_DIM2" : "error");
    printf("width : %d\n",out.width);
    printf("height : %d\n",out.height);
    printf("btemp : %d\n",out.btempflg);

    printf("\n\n");
    printf("pos x : %d\n",x);
    printf("pos y : %d\n",y);

    StrCalc_term(&prm);
}