WSTestUTF16Head (C 関数)

int WSTestUTF16Head(WSLINK l, const unsigned short *h, int v, int *n)

l から読み込まれる次の式が頭部 h を持つ式と長さ v のUTF-16でコード化された名前であり,式の引数の数を n に保存することを検証する.

詳細

  • WSTestUTF16Head()は,リンク上の現行の式が頭部としての記号を持つ関数ではない場合,あるいは記号名が h とマッチしない場合には失敗する.
  • WSTestUTF16Head()は,エラーが起った場合には0を,関数が成功した場合には非零の値を返す.
  • WSTestUTF16Head()が失敗した場合には,WSError()を使ってエラーコードを得るとよい.
  • WSTestUTF16Head()は,関数が失敗した場合には,WSTestUTF16Head()を呼び出す直前のリンク上の式に対するストリームポインタを再設定する.この操作は,プログラマがWSCreateMark(l); WSTestUTF16Head(); WSSeekToMark()を呼び出したかのように振舞う.
  • UTF-16でコード化された頭部 h には,バイトオーダーマークを含まなければならない.
  • UTF-16でコード化された頭部 h の長さ v には,バイトオーダーマークを含まなければならない.
  • WSTestUTF16Head()は,WSTPヘッダファイルwstp.hの中で宣言される.

例題

  (1)

#include "wstp.h"

/* A function for testing whether the next expression on the link is a ReturnPacket[] */

void f(WSLINK l)
{
    const unsigned short packet[13];
    int arguments;

    packet[0] = 0xFEFF;
    packet[1] = 'R';
    packet[2] = 'e';
    packet[3] = 't';
    packet[4] = 'u';
    packet[5] = 'r';
    packet[6] = 'n';
    packet[7] = 'P';
    packet[8] = 'a';
    packet[9] = 'c';
    packet[10] = 'k';
    packet[11] = 'e';
    packet[12] = 't';

    if(! WSTestUCS2Head(l, (const unsigned short *)packet, 13,
        &arguments))
    { /* read the contents of the ReturnPacket[] */ }
    else
    { /* the head of the incoming expression is not ReturnPacket */ }
}