# 日本語 Compaq OpenVMS
日本語ライブラリ 利用者の手引き

前へ | 次へ | 目次 | 索引

# 3.6 その他のルーチン

JLB$DATE_TIME

> 現在の日付けおよび時間の入手

例)

            12時間制の場合平成元年 2月14日 (火) 午後 5時21分 3秒
            24時間制の場合平成元年 2月14日 (火) 17時21分 3秒

＜形式＞

> ret-status = JLB$DATE_TIME ( dst-str [, flg[, out-len]] )

＜引数＞

dst-str
JLB usage | 出力文字列
access | 出力のみ
mechanism | Descriptor渡し
flg
JLB usage | 時間制の指定
type | Byte
access | 入力のみ
mechanism | Reference渡し
| 0 : 12時間制(省略時の値)
| 1 : 24時間制
out-len
JLB usage | 出力文字列のバイト長
type | Word
access | 出力のみ
mechanism | Reference渡し

＜戻り値＞

ret-status | SS$_NORMAL | 正常終了
| LIB$_STRTRU | 出力結果の切捨てが行われた

JLB$DATE_TIME で使用する元号の名称および日付は，論理名で定義されます。この論理名は，システムのスタートアップ時に， SYS$STARTUP:JSY$DT_STARTUP.COM を実行することによって定義されます (SYS$STARTUP:JSY$STARTUP.COM の中から実行されます)。省略時には次のように定義します。

    $       define/system/exec jsy$era_name -
                                    "平成", -
                                    "昭和", -
                                    "大正", -
                                    "明治"
    $       define/system/exec jsy$era_begin_date -
                                    "19890108", -
                                    "19261425", -
                                    "19140730", -
                                    "18680908"
    $       define/system/exec jsy$era_display_form 1

3番目の論理名，JSY$ERA_DISPLAY_FORMAT は，その元号の初年度を「1年(0)」で表示するか，または「元年(1)」で表示するかを選択します。省略時の設定では「元年」です。

例)

    #include <stdio.h>
    #include <descrip.h>
    #include <ssdef.h>
    #include <libdef.h>

    #define BUFLEN 100

    main()
    {
        struct dsc$descriptor_s     dst_str;
        char        flg;
        short int   out_len;
        int         ret_status;
        char        buffer[ BUFLEN ];
        extern int  jlb$date_time();

        dst_str.dsc$b_class = DSC$K_CLASS_S;
        dst_str.dsc$b_dtype = DSC$K_DTYPE_T;
        dst_str.dsc$w_length = sizeof( buffer );
        dst_str.dsc$a_pointer = buffer;

        for ( flg = 0 ; flg < 2 ; ++flg ) {
            ret_status = jlb$date_time( &dst_str, &flg, &out_len );

            buffer[ out_len ] = '\0';
            printf( "フラグ :%1d\n 時間 :\"%s\"    ステータス :",
                flg, dst_str.dsc$a_pointer );

            switch ( ret_status ) {
            case SS$_NORMAL:
                printf( "SS$_NORMAL" );
                break;
            case LIB$_STRTRU:
                printf( "LIB$_STRTRU" );
                break;
            }
            putchar( '\n' );
        }
    }

JLB$DEV_KANJI

> 漢字端末かどうかのチェック
> 端末が VT80 に設定されているかどうか，または KANJIGEN の SET /OUTPUT=KANJI により出力が漢字に設定されているかどうかをチェックします。

＜形式＞

> ret-status = JLB$DEV_KANJI ( device-name )

＜引数＞

device-name
JLB usage | デバイス名
type | 文字列
access | 入力のみ
mechanism | Descriptor渡し

＜戻り値＞

ret-status | 1 : 漢字端末
| 0 : 漢字端末ではない

JLB$DEV_KANJI_IN

> 漢字入力端末かどうかのチェック
> 端末が KANJIGEN の SET /INPUT=KANJI により，漢字入力に設定されているかどうかをチェックします。

＜形式＞

> ret-status = JLB$DEV_KANJI_IN ( device-name )

＜引数＞

device-name
JLB usage | デバイス名
type | 文字列
access | 入力のみ
mechanism | Descriptor渡し

＜戻り値＞

ret-status | 1 : 漢字入力端末
| 0 : 漢字入力端末ではない

# 第 4 章
基本ライブラリ

基本ライブラリ とは，1 文字単位の変換など，より細かな処理を行うためのルーチン群です。

この章では，基本ライブラリの次の項目について説明します。

> 基本ライブラリ・ルーチン一覧
> 日本語文字列操作ルーチン
> 文字変換ルーチン
> 文字列変換ルーチン

# 4.1 基本ライブラリ・ルーチン一覧

日本語文字列操作ルーチン

日本語データを扱うための基本的なルーチン群です。1バイト/2バイトの文字コードを正しく取り扱うために使用します。

JSY$CH_NEXT | 次の文字の文字位置の入手
JSY$CH_PREV | 前の文字の文字位置の入手
JSY$CH_CURR | 現在の文字の文字位置の入手
JSY$POS_NEXT | 次の文字の文字位置の入手， および文字列の終わりのチェック
JSY$POS_PREV | 前の文字の文字位置の入手， および文字列の終わりのチェック
JSY$POS_CURR | 現在の文字の文字位置の入手， および文字列の終わりのチェック
JSY$CH_RCHAR | 文字列からの文字の取り出し
JSY$CH_RNEXT | 文字列からの文字の取り出し
JSY$CH_WCHAR | 文字列への文字の書き込み
JSY$CH_WNEXT | 文字列への文字の書き込み
JSY$CH_GCHAR | 文字列からの文字の取り出し， および文字列の終わりのチェック
JSY$CH_GNEXT | 文字列からの文字の取り出し， および文字列の終わりのチェック
JSY$CH_PCHAR | 文字列への文字の書き込み， および文字列の終わりのチェック
JSY$CH_PNEXT | 文字列への文字の書き込み， および文字列の終わりのチェック
JSY$CH_SIZE | 文字が占めるバイト数の入手
JSY$CH_NBYTE | 文字列が占めるバイト数の入手
JSY$CH_NCHAR | 文字列に含まれる文字数の入手
JSY$POSITION | 文字列の検索
JSY$STR_EQUAL | 英大文字/小文字，全角/半角， ひらがな/カタカナ変換による文字列の比較
JSY$STR_START | 英大文字/小文字，全角/半角， ひらがな/カタカナ変換による文字列の比較
JSY$STR_SEARCH | 英大文字/小文字，全角/半角， ひらがな/カタカナ変換による文字列の検索
JSY$TRIM | 文字列の後の空白の切り捨て
JSY$TRUNC | 文字列の切り捨て
JSY$LOCC | 文字の検索
JSY$SKPC | 文字の飛び越し

文字変換ルーチン

文字単位の各種変換を行うルーチン群です。

JSY$CHG_ROM_HALF | ローマ文字全角から半角への変換
JSY$CHG_ROM_FULL | ローマ文字半角から全角への変換
JSY$CHG_ROM_SIZE | ローマ文字全角/半角の相互変換
JSY$CHG_ROM_LOWER | 英文字半角/全角の小文字への変換
JSY$CHG_ROM_UPPER | 英文字半角/全角の大文字への変換
JSY$CHG_ROM_CASE | 英文字全角/半角の大文字/小文字の相互変換
JSY$CHG_KANA_HIRA | 全角カタカナから全角ひらがなへの変換
JSY$CHG_KANA_KATA | 全角ひらがなから全角カタカナへの変換
JSY$CHG_KANA_KANA | 全角ひらがな/全角カタカナの相互変換
JSY$CHG_KANA_DAKU | 全角ひらがな/カタカナの濁点/半濁点処理
JSY$CHG_KANA_HALF | 全角ひらがな/カタカナから半角カタカナへの変換
JSY$CHG_KANA_FULL | 半角カタカナから全角ひらがな/カタカナへの変換
JSY$CHG_GENERAL | パラメータ指定による，英大文字/小文字，全角/半角，ひらがな/カタカナ
JSY$CHG_JIS_KUTEN | JIS 区点番号から DEC 漢字コードへの変換
JSY$CHG_KEISEN | 数字から罫線文字への変換

文字列変換ルーチン

文字列の各種変換を行うルーチン群です。

JSY$TRA_ROM_HALF | ローマ文字全角から半角への変換
JSY$TRA_ROM_FULL | ローマ文字半角から全角への変換
JSY$TRA_ROM_SIZE | ローマ文字全角/半角の相互変換
JSY$TRA_ROM_LOWER | 英文字半角/全角の小文字への変換
JSY$TRA_ROM_UPPER | 英文字半角/全角の大文字への変換
JSY$TRA_ROM_CASE | 英文字全角/半角の大文字/小文字の相互変換
JSY$TRA_ROM_KANA | ローマ字から全角ひらがな/カタカナへの変換
JSY$TRA_KANA_HIRA | 全角カタカナから全角ひらがなへの変換
JSY$TRA_KANA_KATA | 全角ひらがなから全角カタカナへの変換
JSY$TRA_KANA_KANA | 全角ひらがな/全角カタカナの相互変換
JSY$TRA_KANA_DAKU | 全角ひらがな/カタカナの濁点/半濁点処理
JSY$TRA_KANA_HALF | 全角ひらがな/カタカナから半角カタカナへの変換
JSY$TRA_KANA_FULL | 半角カタカナから全角ひらがな/カタカナへの変換
JSY$TRA_SYMBOL | 記号変換

# 4.2 日本語文字列操作ルーチン

日本語文字列操作ルーチンは，日本語データを扱うための基本的なルーチン群です。 1 バイト /2 バイトの文字コードを正しく取り扱うために使用します。

JSY$CH_NEXT

> 次の文字の文字位置の入手

＜形式＞

> next-ptr = JSY$CH_NEXT ( char-ptr )

＜引数＞

char-ptr
JSY usage | 文字の1バイト目を指すポインタ
mechanism | Value渡し

＜戻り値＞

next-ptr | 1文字次の文字の1バイト目を指すポインタ

例)

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

    static void     create_display_string();

    main()
    {
        char        *char_ptr,
                    *next_ptr;
        char        string[] = "日本語RTL";
        char        disp_str[32];
        int         byte_offset = 4;
        extern char *jsy$ch_next();

        char_ptr = string + byte_offset;

        printf( "文字列 :\"%s\"\n", string );
        create_display_string( char_ptr, disp_str );
        printf( "実行前の位置の文字 :%s\n", disp_str );

        next_ptr = jsy$ch_next( char_ptr );
        create_display_string( next_ptr, disp_str );
        printf( "実行後の位置の文字 :%s\n", disp_str );
    }

    static void     create_display_string(src, disp)
    char    *src;
    char    *disp;
    {
        int nof_byte_char = 1;
        unsigned char       check;

        check = (unsigned char)(*src);
        if ( ( 0x0A1 <= check ) && ( check <= 0x0FE ) )     /* 範囲内なら2バイト文字 */
            nof_byte_char = 2;

        strncpy( disp, src, nof_byte_char );
        disp[ nof_byte_char ] = '\0';
    }

JSY$CH_PREV

> 前の文字の文字位置の入手

＜形式＞

> prev-ptr = JSY$CH_PREV ( top-ptr, char-ptr )

＜引数＞

top-ptr
JSY usage | 文字列の先頭を指すポインタ
mechanism | Value渡し
char-ptr
JSY usage | 文字の1バイト目を指すポインタ
mechanism | Value渡し

＜戻り値＞

prev-ptr | 1文字前の文字の1バイト目を指すポインタ
| char-ptr ≦ top-ptr の場合は0

JSY$CH_CURR

> 現在の文字の文字位置の入手

＜形式＞

> curr-ptr = JSY$CH_CURR ( top-ptr, char-ptr )

＜引数＞

top-ptr
JSY usage | 文字列の先頭を指すポインタ
mechanism | Value渡し
char-ptr
JSY usage | 文字の1バイト目または2バイト目を指すポインタ
mechanism | Value渡し

＜戻り値＞

curr-ptr | 文字の1バイト目を指すポインタ
| char-ptr < top-ptr の場合は0

JSY$POS_NEXT

> 次の文字の文字位置の入手，および文字列の終わりのチェック

＜形式＞

> next-ptr = JSY$POS_NEXT ( char-ptr, end-ptr )

＜引数＞

char-ptr
JSY usage | 文字の1バイト目を指すポインタ
mechanism | Value渡し
end-ptr
JSY usage | 文字列の終わりを示すポインタ
mechanism | Value渡し

＜戻り値＞

next-ptr | 1文字次の文字の1バイト目を指すポインタ
| char-ptr ≧ end-ptr の場合は 0

JSY$POS_PREV

> 前の文字の文字位置の入手，および文字列の終わりのチェック

＜形式＞

> prev-ptr = JSY$POS_PREV ( top-ptr, char-ptr, end-ptr )

＜引数＞

top-ptr
JSY usage | 文字列の先頭を指すポインタ
mechanism | Value渡し
char-ptr
JSY usage | 文字の1バイト目を指すポインタ
mechanism | Value渡し
end-ptr
JSY usage | 文字列の終わりを示すポインタ
mechanism | Value渡し

＜戻り値＞

prev-ptr | 1文字前の文字の1バイト目を指すポインタ
| char-ptr ≦ top-ptr または char-ptr ＞ end-ptr の場合は 0

例)

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

    #define MSB     0x80

    static void     create_display_string();

    main()
    {
        char        *top_ptr,
                    *char_ptr,
                    *end_ptr,
                    *prev_ptr;
        char        string[] = "日本語RTL";
        char        disp_str[32];
        int         byte_offset = 6;
        extern char *jsy$pos_prev();

        top_ptr = string;
        end_ptr = string + strlen( string );
        char_ptr = string + byte_offset;

        create_display_string( char_ptr, disp_str );
        printf( "文字列 :\"%s\"\n", string );
        printf( "実行前の位置の文字 :%s\n", disp_str );

        prev_ptr = jsy$pos_prev( top_ptr, char_ptr, end_ptr );

        create_display_string( prev_ptr, disp_str );
        printf( "実行後の位置の文字 :%s\n", disp_str );
    }

    static void     create_display_string(src, disp)
    char    *src;
    char    *disp;
    {
        int nof_byte_char = 1;
        unsigned char       check;

        check = (unsigned char)(*src);
        if ( ( 0x0A1 <= check ) && ( check <= 0x0FE ) )     /* 範囲内なら2バイト文字 */
            nof_byte_char = 2;

        strncpy( disp, src, nof_byte_char );
        disp[ nof_byte_char ] = '\0';
    }

前へ | 次へ | 目次 | 索引