cd /home/kabu/adifrewrited/

/bin/cp ./adifrewritec /usr/bin/
/bin/cp ./adifrewrited /usr/bin/
/bin/cp ./adifrewrited_*.php /usr/bin/

/bin/cp ./adifrewrited.conf /etc/

cd /home/kabu/adifrewrited/
/bin/cp ./systemd/adifrewrited.service /usr/lib/systemd/system/
systemctl daemon-reload

systemctl restart adifrewrited
systemctl status adifrewrited


#!/usr/bin/php
<?php
// ----------------------------------------------------------------------
// Sub Routine
// ----------------------------------------------------------------------
function adif_decode($TARGET_DATA)
{
    // 対象データに<EOR>が無ければ
    if (stristr($TARGET_DATA, '<EOR>') == FALSE)
    {
        // 0を返して戻る
        return 0;
    }
    
    // ADIFデータを初期化
    $TARGET_ADIF = array();
    
    // 各タグごとに分割する
    $TARGET_ARRAY = preg_split('/</', $TARGET_DATA);
    
    foreach($TARGET_ARRAY as $TARGET_TAG)
    {
        // $TARGET_TAGに「>」が無ければ飛ばす
        if (stristr($TARGET_TAG, '>') == FALSE)
        {
            // 次
            continue;
        }
        // $TARGET_TAGに「eor>」があったら抜ける
        if (stristr($TARGET_TAG, 'eor>') == true)
        {
            // 次
            break;
        }
        // タグの内容を解析する
        $TARGET_PARAM = preg_split('/(.*):(.*)>/', trim($TARGET_TAG), -1, PREG_SPLIT_DELIM_CAPTURE);
        // タグの解析結果が配列型であり、4つの要素があるなら
        if (is_array($TARGET_PARAM) && count($TARGET_PARAM) == 4)
        {
            // 解析結果の要素1がタグ名、要素3が実際の値、となるので、これを設定
            $TARGET_ADIF[ $TARGET_PARAM[1] ] = $TARGET_PARAM[3];
        }
        else
        {
            // ありえないんだけど、タグの実際の値の中に「<」とか「>」があったらどうするんだろ？
        }
    }
    return $TARGET_ADIF;
}
?>
<?php
// ----------------------------------------------------------------------
// Sub Routine
// ----------------------------------------------------------------------
function adif_modify_old($TARGET_DATA)
{
    // 対象データが配列でなければ
    if (is_array($TARGET_DATA) == FALSE)
    {
        // 0を返して戻る
        return FALSE;
    }
    
    // 「  Rcvd: 」を「 Rcvd:」にする
    // 「 Sent: 」を「Sent:」にする
    // 半角スペースが連続しているなら、一つにする
    $SEARCH_ARRAY = array('  Rcvd: ', ' Sent: ', '  ');
    $REPLACE_ARRAY = array(' Rcvd:', 'Sent:', ' ');
    $TARGET_DATA = str_replace($SEARCH_ARRAY, $REPLACE_ARRAY, $TARGET_DATA);
    // tx_pwr, comment, add_comment(独自)をqslmsgにする
////    $TARGET_DATA['qsl_msg'] = $TARGET_DATA['tx_pwr'].' '.$TARGET_DATA['comment'].' '.$TARGET_DATA['add_comment'];
    $TARGET_DATA['qslmsg'] = $TARGET_DATA['tx_pwr'].' '.$TARGET_DATA['comment'].' '.'Shibuya(JCC#100113)';
    $TARGET_DATA['comment'] = $TARGET_DATA['qslmsg'];
    
    return $TARGET_DATA;
}
?>
<?php
// ----------------------------------------------------------------------
// Sub Routine
// ----------------------------------------------------------------------
function adif_modify($TARGET_DATA, $TARGET_CONF)
{
    // 対象データが配列でなければ
    if (is_array($TARGET_DATA) == FALSE)
    {
        // 0を返して戻る
        return FALSE;
    }
    
    // 「  Rcvd: 」を「 Rcvd:」にする
    // 「 Sent: 」を「Sent:」にする
    // 半角スペースが連続しているなら、一つにする
    $SEARCH_ARRAY = array('  Rcvd: ', ' Sent: ', '  ');
    $REPLACE_ARRAY = array(' Rcvd:', 'Sent:', ' ');
    $TARGET_DATA = str_replace($SEARCH_ARRAY, $REPLACE_ARRAY, $TARGET_DATA);
    
    // QSLMSGフォーマットが定義されているなら
    if (isset($TARGET_CONF['qslmsg_format']))
    {
        // QSLMSGタグの文字列を初期化
        $TARGET_DATA['qslmsg'] = "";
        // フォーマットをスペースごとにADIFタグに分割して
        $FORMAT_TAG = preg_split('/ +/', $TARGET_CONF['qslmsg_format']);
        // それぞれのタグのデータを、QSLMSGタグのデータとして連結していく
        foreach($FORMAT_TAG as $TARGET_TAG)
        {
            // $TARGET_TAGが設定されていないか、そのタグのの文字列長が0なら
            if (isset($TARGET_DATA[$TARGET_TAG]) == FALSE || mb_strlen($TARGET_DATA[$TARGET_TAG]) <= 0)
            {
                // 次
                continue;
            }
            // QSLMSGタグのデータに追加していく
            $TARGET_DATA['qslmsg'] .= $TARGET_DATA[$TARGET_TAG].' ';
        }
        // 最後の' 'を取り除く
        $TARGET_DATA['qslmsg'] = rtrim($TARGET_DATA['qslmsg']);
        // commentタグもqslmsgタグと同じにする
        $TARGET_DATA['comment'] = $TARGET_DATA['qslmsg'];
    }
    
    return $TARGET_DATA;
}
?>
<?php
// ----------------------------------------------------------------------
// Sub Routine
// ----------------------------------------------------------------------
function adif_encode($TARGET_DATA)
{
    // 対象データが配列でなければ
    if (is_array($TARGET_DATA) == FALSE)
    {
        // 0を返して戻る
        return FALSE;
    }
    
    // ADIFデータを初期化
    $TARGET_ADIF = '';
    // タグごとのADIFデータのフォーマットを設定
    $ADIF_FORMAT = '<%s:%0d>%s ';
    
    // ADIFデータを生成する
    foreach($TARGET_DATA as $TARGET_TAG => $TARGET_VALUE)
    {
        // $TARGET_TAGの文字列長が0なら
        if (mb_strlen($TARGET_TAG) <= 0)
        {
            // 次
            continue;
        }
        // $TARGET_VALUEの長さを取得する
        $TARGET_LEN = mb_strlen($TARGET_VALUE);
        // 長さが0でも出力した方がいいのかな？
        $TARGET_ADIF .= sprintf($ADIF_FORMAT, $TARGET_TAG, $TARGET_LEN, $TARGET_VALUE);
    }
    // レコードの終了を追加する
    $TARGET_ADIF .= '<eor>';
    
    return $TARGET_ADIF;
}
?>
<?php

$LOGSTR = '
<call:6>JA1QRA <gridsquare:4>QM05 <mode:3>FT8 <rst_sent:3>+01 
<rst_rcvd:3>-01 <qso_date:8>20230822 <time_on:6>025150 <qso_date_off:8>20230822 <time_off:6>025200 
<band:3>20m <freq:9>14.075646 <station_callsign:6>JA1QRA <my_gridsquare:6>PM95UP <tx_pwr:12>50w FT-DX10M <comment:23>FT8  Sent: +01  Rcvd: -01 
<eor>';

$ADIFREWRITED_CONF['qslmsg_format'] = "tx_pwr comment add_qslmsg";
$ADIFREWRITED_CONF['add_qslmsg'] = "JCG#10005 Miyake Is (IOTA AS-008)";


                    // ADIFデコード(配列に変換)
                    $ADIF_DATA = adif_decode($LOGSTR);
                    // デコード結果が0なら
                    if (is_array($ADIF_DATA) == FALSE)
                    {
                    }
                    else
                    {
print '----------------'."\n";
print date("Y-m-d H:i:s")." adifrewrite[".getmypid()."]: "."DATA: ".var_export($ADIF_DATA, TRUE)."\n";

                        // QSLMSGフォーマットが定義されているなら
                        if (isset($ADIFREWRITED_CONF['add_qslmsg']))
                        {
                            $ADIF_DATA['add_qslmsg'] = $ADIFREWRITED_CONF['add_qslmsg'];
                        }


$ADIF_MODIFY = adif_modify($ADIF_DATA, $ADIFREWRITED_CONF);

print '↓↓↓↓↓↓↓↓'."\n";
print date("Y-m-d H:i:s")." adifrewrite[".getmypid()."]: "."MODI: ".var_export($ADIF_MODIFY, TRUE)."\n";

print '↓↓↓↓↓↓↓↓'."\n";
print date("Y-m-d H:i:s")." adifrewrite[".getmypid()."]: "."ADIF: ".adif_encode($ADIF_MODIFY)."\n";


                    }


<?php

print 'ENCODE='.mb_internal_encoding()."\n";;
print 'STRLEN='.mb_strlen('文字列')."\n";
