'+------------------------------------------------------------------------------+
'|                                                                              |
'|  ASPAC消費財卸　ハンディオプション                                           |
'|      ﾌﾟﾛｸﾞﾗﾑ     ：      梱包明細レシート印刷処理                            |
'|      ﾌﾟﾛｸﾞﾗﾑ ID  ：      TecRecit.SRC                                        |
'|      作成者      ：      TAKAYA.Terachi                                      |
'|      作成日      ：      2004.09.28                                          |
'|      ﾊﾞｰｼﾞｮﾝ     ：      V01L01                                              |
'|                                                                              |
'+------------------------------------------------------------------------------+
'|        修正日    ：      2008.12.04 kakihana                                 |(2008.12.04)
'|          ・自社ｺｰﾄﾞ14桁対応                                                  |(2008.12.04)
'+------------------------------------------------------------------------------+

'==============================================================='
'       ［　印刷時初期処理　］
'   印刷制御を開始する前にエリア定義とシステム値を設定する
'==============================================================='
Ir.settei
'---------------------------------------------------------------'
'       エリア定義
'---------------------------------------------------------------'
    DEFREG  Cmd.data$[255],work$[255],sbuf$[255],rbuf$[255],pack$[255]
    DEFREG  ans$[1],Prt.msg$[40],Prt.sta$[1],Bat.sta$[1]
    DEFREG  rcrc$[2]

    DIM sline$[254]

    DEFREG IDmh$,IDml$,IDsh$,IDsl$
    DEFREG cmdcnt9 ,data.cnt9 ,eot.chkf9 
    DEFREG cmd.len9 ,cmd.len1$
    DEFREG Prt.flg9 ,Pack.flg$
    DEFREG crc$,crc.err9 
    DEFREG rtime9 
    DEFREG mode$
    DEFREG K$

    DEFREG NUL$,ENQ$,ACK$,DLE$,NAK$,ESC$,LF$,PAD$

    NUL$ = chr$( &h00 ): SOH$ = chr$( &h01 ): STX$ = chr$( &h02 )
    ETX$ = chr$( &h03 ): EOT$ = chr$( &h04 ): ENQ$ = chr$( &h05 )
    ACK$ = chr$( &h06 ): DLE$ = chr$( &h10 ): NAK$ = chr$( &h15 )
    ESC$ = chr$( &h1b ): LF$  = chr$( &h0A ): PAD$ = chr$( &hFF )

'---------------------------------------------------------------'
'       システム初期値設定
'---------------------------------------------------------------'
'   out &h6060,&h02                         ' BHT-Irプロトコル

    DEFREG  char$  = ""                     ' 受信文字
    DEFREG  count9 = 0                      ' 実行件数（回数）
    DEFREG  state9 = 0                      ' エラー発生コード
    DEFREG  stage9 = 0                      ' フェーズ移行値
    DEFREG  REcnt9 = 120                    ' ENQリトライ回数

'  >>*  Ｉｒ－ＤＡ通信速度設定　*<<
'   システム設定スピードで通信の場合
'*  gosub s.sysset
'*  OPEN comport$ AS #prt9 

'   固定スピードで通信の場合
    DEFREG SPD$ = "2"                       ' 通信速度：19200bsp
    select  SPD$
        case    "1"
            OPEN "COM:9600,N,8,1" AS #prt9 
        case    "2"
            OPEN "COM:19200,N,8,1" AS #prt9 
        case    "3"
            OPEN "COM:38400,N,8,1" AS #prt9 
        case    else
            OPEN "COM:9600,N,8,1" AS #prt9 
    end select

    return

'****************************************************************
'*      印刷実行メイン処理              *
'****************************************************************

Rctprt

    Gosub s.sysset
    Gosub s.sysset2

    d9 = 1
    Gosub Piw.Search                        ' 箱番号で実績履歴を検索
    Gosub Pi2.Search                        ' 実績１件目のﾋﾟｯｷﾝｸﾞ番号で得意先情報を取得
                                            ' (同一箱内ではﾋﾟｯｷﾝｸﾞ番号(得意先)は不変)

    if LabelC$ = "KM" and syskoprt$ = "1" and d9 <> 0 and p.prtf$ = "1" then
            GOSUB Ir.Rect00
    endif

    Close #prt9 
    Return

'****************************************************************
'*      発行シーケンス(RECEIPTﾓｰﾄﾞ)         *
'****************************************************************
Ir.Rect00

    Gosub Ir.settei                         ' 印刷時初期処理

    cls
    locate  1,1 : print " RECEIPTモード " ;
    Gosub   Ir.link                         ' リンク

    if state9 = 0 then
        Gosub   Ir.rectini                  ' 初期設定
    endif

    if state9 = 0 then
        Gosub s.prtwkopn
        CLFILE  #prtwk9                     ' 出力用ﾜｰｸｸﾘｱ

        Gosub   Rectdata1                   ' ﾍｯﾀﾞｰﾃﾞｰﾀを出力用ﾜｰｸへ書き込み

        d9 = 1
        Gosub   Piw.Search                  ' ﾋﾟｯｷﾝｸﾞ実績履歴ﾌｧｲﾙを順次読込み
        while d9 <> 0
            Gosub   Rectdata2               ' 明細ﾃﾞｰﾀを出力用ﾜｰｸへ書き込み
            Gosub   Piw.Search              ' ﾋﾟｯｷﾝｸﾞ実績履歴ﾌｧｲﾙを順次読込み
        wend
        Close #picwk9 

        Gosub   Rectdata3                   ' ﾌｯﾀｰﾃﾞｰﾀを出力用ﾜｰｸへ書き込み

        Close #prtwk9 
    endif

    if state9 = 0 then
        Gosub   Ir.rectprn                  ' 印刷実行
    endif

    if state9 = 0 then
        if LabelT$ = "NP" then
            nocouf$ = "on"                  ' 再印刷でなく、印刷成功時のみ箱番号のｶｳﾝﾄｱｯﾌﾟﾌﾗｸﾞ
                                            ' をたてる。実際のｶｳﾝﾄｱｯﾌﾟは実績履歴への更新時。
                                            ' (何度でも印刷実行可能とする為)
        endif
    endif

    return

'=============  印刷レイアウト定義  =================================
Rectdata1                                   ' 梱包明細ヘッダー用データ書込み
    sline$ = ESC$+"!"+chr$(&h40)+mid$(p.haiso$,1,16)
    put     #prtwk9 
    sline$ = mid$(p.haiso$,18,5)
    put     #prtwk9 
    sline$ = mid$(p.tokmei$,1,16)
    put     #prtwk9 
    sline$ = "    "+fnspplus3$(mid$(p.tokmei$,18,5),7,1)+" 御中"
    put     #prtwk9 
    sline$ = ESC$+"!"+chr$(&h00)+p.tokcd$
    put     #prtwk9 
    sline$ = fnspplus3$(mid$(p.jimei$,1,32),32,0)
    put     #prtwk9 
    sline$ = fnspplus3$(mid$(p.jimei$,33,9),32,0)
    put     #prtwk9 
    sline$ = "出荷日   端末№  担当  連番"
    put     #prtwk9 
    sline$ = ESC$+"!"+chr$(&h10)+mid$(p.sdate$,5,2)+"/"+mid$(p.sdate$,7,2)
'担当者ｺｰﾄﾞ4桁化 START 06/01/26 T.S
    'sline$ = sline$+"    "+fnspplus3$(syshht$,2,1)+"      "+fnspplus3$(p.tanto$,3,0)
'ILS-MOD Start 北九州共和個別カスタマイズ 導入 
'    sline$ = sline$+"    "+fnspplus3$(syshht$,2,1)+"      "+fnspplus3$(p.tanto$,4,0)
    sline$ = sline$+"    "+fnspplus3$(syshht$,3,1)+"     "+fnspplus3$(p.tanto$,4,0)
'ILS-MOD End 北九州共和個別カスタマイズ 導入 
'担当者ｺｰﾄﾞ4桁化 END 06/01/26 T.S
'ILS-MOD Start 北九州共和個別カスタマイズ 導入 
'    sline$ = sline$+"   "+fnspplus3$(p.picno$,5,1)+"-"+fnzeroplus$(val(p.no$),3)
    sline$ = sline$+"   "+fnspplus3$(p.picno$,5,1)+"-"+ufnmaezero$(ufnnumstr$(val(p.no$)),3)
'ILS-MOD Start 北九州共和個別カスタマイズ 導入 
    put     #prtwk9 
    sline$ = ESC$+"!"+chr$(&h00)+" "
    put     #prtwk9 
    sline$ = "※※※ 梱包明細一覧 ※※※"
    put     #prtwk9 
    sline$ = " "
    put     #prtwk9 

    Return

Rectdata2                                   ' 梱包明細明細用データ書込み

    sline$ = fnspplus3$(p.jancd$,13,1)+" /("+fnspplus3$(p.shocd$,14,1)+")"
    put     #prtwk9 
    gosub Sht.Search
    sline$ = fnspplus3$(p.shomei$,25,1)+"("+fnspplus$(val(p.sbara$),5)+")"
    put     #prtwk9 
    sline$ = " "
    put     #prtwk9 

    Return

Rectdata3                                   ' 梱包明細フッター用データ書込み

    sline$ = "DATAEND"
    put     #prtwk9 

    Return

'********************************************************************************
'*      内容        ：      箱番号から梱包明細出力情報を取得                    *
'********************************************************************************
Piw.Search
    gosub s.picwkopn                        ' 出荷検品ﾌｧｲﾙのｵｰﾌﾟﾝ
    if lof(#picwk9 ) = 0 then
        p.picno$ = ""
        p.jancd$ = ""
        p.shocd$ = ""
        p.sbara$ = ""
        d9 = 0
    else
        d9 = search(#picwk9 , pw.no$ , p.no$ , d9 )  ' 箱番号のｻｰﾁ
        if d9 <> 0 then
            get #picwk9 , d9 
            p.picno$ = pw.picno$
            p.jancd$ = pw.jancd$
            p.shocd$ = pw.shocd$
            p.sbara$ = pw.syusu$
            d9 = d9 + 1
        else
            p.picno$ = ""
            p.jancd$ = ""
            p.shocd$ = ""
            p.sbara$ = ""
            d9 = 0
        endif
    endif
    close #picwk9 

    return

'********************************************************************************
'*      内容        ：      ﾋﾟｯｷﾝｸﾞ番号から梱包明細印刷用ﾃｷｽﾄ情報を取得         *
'********************************************************************************
Pi2.Search
    gosub pic2.opn                          ' 印刷用ﾃｷｽﾄﾌｧｲﾙのｵｰﾌﾟﾝ
    if lof(#pictxt29 ) = 0 then
        p.tokcd$ = ""
        p.tokmei$ = ""
        p.haiso$ = ""
        p.sdate$ = ""
        p.jimei$ = ""
        p.prtf$ = "0"
    else
        c9 = 0
        c9 = search(#pictxt29 , pi2.picno$ , p.picno$)  'ﾋﾟｯｷﾝｸﾞ番号のｻｰﾁ
        if c9 <> 0 then
            get #pictxt29 , c9 
            p.tokcd$ = pi2.tokcd$
            p.tokmei$ = pi2.tokrk$
            p.haiso$ = pi2.haiso$
            p.sdate$ = pi2.sdate$
            p.jimei$ = pi2.jimei$
            p.prtf$ = pi2.prtf$
        else
            p.tokcd$ = ""
            p.tokmei$ = ""
            p.haiso$ = ""
            p.sdate$ = ""
            p.jimei$ = ""
            p.prtf$ = "0"
        endif
    endif
    close #pictxt29 

    return

'********************************************************************************
'*      内容        ：      JANｺｰﾄﾞから商品棚番ﾏｽﾀ情報を取得                    *
'********************************************************************************
Sht.Search
    gosub s.shtmopn                         ' 商品棚番ﾏｽﾀのｵｰﾌﾟﾝ
    if lof(#shtmst9  ) = 0 then
        p.shomei$ = ""
    else
        e9 = 0
        e9 = search(#shtmst9 , shtjan$ , p.jancd$)  'JANｺｰﾄﾞのｻｰﾁ
        if e9 <> 0 then
            get #shtmst9 , e9 
            p.shomei$ = shtmei$
        else
            p.jancod$ = ""
            p.shomei$ = ""
        endif
    endif
    close # shtmst9 

    return

'==============================================================='
'       ［　リンク要求　］
'   伝送制御を開始する前に必ずリンクを確保する
'   始動時にはステータス要求コマンドを送りプリンタのＩＤ
'   を獲得する必要がある
'==============================================================='
Ir.link
    locate 1,3 : print "プリンタ準備中" ;
    IDmh$ = chr$(&h00)                      ' プリンタ指定無し(ID=0000h)
    IDml$ = chr$(&h00)

    stage9 = 1
    while   stage9 < 90
        select  stage9 
            case    1                       '［ リンク要求コマンド ］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 1                  ' インターバル(1x100ms)
                gosub   Ir.linkreq          ' リンク要求(PAD)
                if  state9 = 0 then
                stage9 = 2
                endif
            case    2                       '［ ステータス要求コマンド ］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 2                  ' インターバル(2x100ms)
                gosub   Ir.statreq          ' ステータス要求
                if  state9 = 0 then
                    stage9 = 3
                endif
            case    3                       '［ ステータス応答チェック ］
                rtime9 = 10                 ' インターバル(10x100ms)
                gosub   Ir.statchk          ' プリンタ状態チエック
                if  state9 = 0 then
                    stage9 = 4
                else
                    stage9 = 2              ' 再度ステータス要求
                endif
            case    4                       '［　ＥＯＴコマンド送出　］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 5                  ' インターバル(5x100ms)
                eot.chkf9 = 0               ' コマンド処理(EOT送信後の応答無し)
                gosub   Ir.eotsend          ' 処理終了コマンド
                if  state9 = 0 then
                    stage9 = 90
                endif
        end select
        if  state9 > 0 then
            if  state9 > 900 then           ' 「Ｃ」キーによる処理中断
                beep
                locate 1,3 : print "ＣＬＲキー中断" ;
                gosub   crwait              ' ENTキー入力待ち
                return
            endif
            if  state9 < 800 then           ' プリンタの異常以外のエラー
                beep 3
                locate 1,3 : print "プリンタ無応答" ;
'               locate 1,5 : print "stage=";stage9 ;    ' エラー発生箇所
'               locate 1,7 : print "state=";state9 ;    ' エラー発生原因
                gosub   crwait
                return
            endif
        endif
    wend
    locate 1,3 : print "プリンタ準備完" ;
    return

'==============================================================='
'       初期設定（ＲＥＣＥＩＰＴモード）
'   外字・グラフィック・濃度を登録する場合はＬＡＢＥＬモード
'   に切り替えて登録する
'==============================================================='
Ir.rectini
    locate 1,3 : print "初期設定中　　" ;
    IDmh$ = IDsh$                           ' プリンタから獲得したＩＤ
    IDml$ = IDsl$

    stage9 = 41
    while   stage9 < 90
        select  stage9 
            case    41                      '［ リンク要求コマンド ］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 1                  ' インターバル(1x100ms)
                gosub   Ir.linkreq          ' リンク要求(PAD)
                if  state9 = 0 then
                    stage9 = 42
                endif
            case    42                      '［ モード切換えコマンド(ラベル) ］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 2                  ' インターバル(2x100ms)
                mode$ = chr$(&h30)          ' ラベルモード指定
                gosub   Ir.modechg          ' モード切換え
                if  state9 = 0 then
                    stage9 = 45
                endif
            case    45                      '［ 印字濃度微調コマンド　　］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 2                  ' インターバル(2x100ms)
                gosub   Ir.contreg          ' 印字濃度微調整
                if  state9 = 0 then
                    stage9 = 48
                endif
            case    48                      '［ グラフィック登録コマンド  ］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 2                  ' インターバル(2x100ms)
                gosub   Ir.grapreg          ' グラフィックデータ登録
                if  state9 = 0 then
                    stage9 = 49
                endif
            case    49                      '［ 外字登録コマンド　　　　］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 2                  ' インターバル(2x100ms)
                gosub   Ir.gaijreg          ' 外字データ登録
                if  state9 = 0 then
                    stage9 = 50
                endif
            case    50                      '［ モード切換えコマンド(レシート)　］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 2                  ' インターバル(2x100ms)
                Mode$ = chr$(&h31)          ' レシートモード
                gosub   Ir.modechg          ' モード切換え
                if  state9 = 0 then
                    stage9 = 53
                endif
            case    53                      '［ ＥＯＴ送出　］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 15                 ' インターバル(15x100ms)
                eot.chkf9 = 1               ' コマンド処理(EOT送信後の応答有り)
                gosub   Ir.eotsend          ' 処理終了コマンド
                if  state9 = 0 then
                    stage9 = 54
                endif
            case    54                      '［ ステータス要求コマンド ］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 2                  ' インターバル(2x100ms)
                gosub   Ir.statreq          ' ステータス要求
                if  state9 = 0 then
                    stage9 = 55
                endif
            case    55                      '［ ステータス応答チェック ］
                rtime9 = 10                 ' インターバル(10x100ms)
                gosub   Ir.statchk          ' プリンタ状態チエック
                if  state9 = 0 then
                    stage9 = 94
                else
                    stage9 = 54             ' 再度ステータス要求
                endif
        end select
        if  state9 > 0 then
            if  state9 > 900 then           '「Ｃ」キーによる処理中断
                beep
                locate 1,3 : print "ＣＬＲキー中断" ;
                gosub   crwait
                return
            endif
            if  state9 < 800 then           ' プリンタの異常以外のエラー
                beep 3
                locate 1,3 : print "プリンタ無応答" ;
'               locate 1,5 : print "stage=";stage9 ;    ' エラー発生箇所
'               locate 1,7 : print "state=";state9 ;    ' エラー発生原因
                gosub   crwait
                return
            endif
        endif
        wend
        locate 1,3 : print "初期設定完了　" ;
    return

'==============================================================='
'       発行・フィードシーケンス（ＲＥＣＥＩＰＴモード）
'   今回のサンプルプログラムではテストデータをテーブルに
'   セットして印刷しているが、実際のアプリではファイルから
'   読込んで印刷するケースになるであろう。
'==============================================================='
Ir.rectprn
    locate 1,3 : print "データ転送中　" ;
    IDmh$ = IDsh$                           ' プリンタから獲得したＩＤ
    IDml$ = IDsl$
    data.cnt9 = 0                           ' 印刷データカウント
    sbuf$ = ""

    i=1
    stage9 = 61
    while   stage9 < 90
        select  stage9 
            case    61                      '［ リンク要求コマンド ］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 1                  ' インターバル(1x100ms)
                gosub   Ir.linkreq          ' リンク要求(PAD)
                if  state9 = 0 then
                    stage9 = 62
                endif
            case    62                      '［ データ印刷実行コマンド ］
                Gosub s.prtwkopn
                Get #prtwk9 ,i               ' データ読込
                work$ = sline$
                Close #prtwk9 
                i=i+1

                if  work$ <> "DATAEND" then
                    Prt.flg9 = 1            ' 途中データ
                    sbuf$ = work$ + LF$
                    gosub   Ir.rcprin       ' 印刷データセット
                    data.cnt9 = data.cnt9 + 1
                    locate 5,5
                    print using "#####" ; data.cnt9 ;
                else
                    Prt.flg9 = 0            ' 最終データ
                    sbuf$ = LF$ + LF$ + LF$     ' 最後の用紙送り
                    gosub   Ir.rcprin       ' 印刷データセット
                    data.cnt9 = data.cnt9 + 1
                    locate 5,5
                    print using "#####" ; data.cnt9 ;
                    stage9 = 65
                endif
            case    65                      '［ ＥＯＴ送出　］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 15                 ' インターバル(15x100ms)
                eot.chkf9 = 1               ' コマンド処理(EOT送信後の応答有り)
                gosub   Ir.eotsend          ' 処理終了コマンド
                if  state9 = 0 then
                    stage9 = 66
                endif
            case    66                      '［ ステータス要求コマンド ］
                REcnt9 = 20                 ' 送信リトライ回数
                rtime9 = 2                  ' インターバル(2x100ms)
                gosub   Ir.statreq          ' ステータス要求
                if  state9 = 0 then
                    stage9 = 67
                endif
            case    67                      '［ ステータス応答チェック ］
                rtime9 = 10                 ' インターバル(10x100ms)
                gosub   Ir.statchk          ' プリンタ状態チエック
                if  state9 = 0 then
                    stage9 = 96
                else
                    stage9 = 66             ' 再度ステータス要求
                endif
        end select
        if  state9 > 0 then
            if  state9 > 900 then           ' 「Ｃ」キーによる処理中断
                beep
                locate 1,3 : print "ＣＬＲキー中断" ;
                gosub   crwait              ' ENTキー入力待ち
                return
            endif
            if  state9 < 800 then           ' プリンタステータス異常以外
                beep 3
                locate 1,3 : print "プリンタ無応答" ;
'               locate 1,5 : print "stage=";stage9 ;    ' エラー発生箇所
'               locate 1,7 : print "state=";state9 ;    ' エラー発生原因
                gosub   crwait
                return
            endif
        endif
    wend
    locate 1,3 : print "印刷実行完了　" ;

    return

'==============================================================='
'       サブルーチンプログラム
'==============================================================='

'---------------------------------------------------------------'
'       リンク要求コマンド発行
'   PAD(FFh)を送ると40ms以内にNAK(15h)が返る
'   印刷モードに関係なく実行する事
'---------------------------------------------------------------'
Ir.linkreq
    state9 = 0
    cmdcnt9 = 1                             ' コマンド再送カウンタ
s11 gosub   dumred                          ' 受信バッファクリア
    print #prt9 , PAD$ ;                     ' リンク要求
    timeA = rtime9                          ' 受信待ちタイマー
s12 if  loc( #prt9 ) > 0 then
        ans$ = input$( 1, #prt9 )           ' 受信キャラクタ
        select  ans$
            case    NAK$                    ' リンク確立応答
                return
            case    else
                gosub   dumred              ' 受信バッファクリア
        end select
    endif
    if  timeA = 0 then
        cmdcnt9 = cmdcnt9 + 1
        if  cmdcnt9 > REcnt9 then
            state9 = 111                    ' リンクフェーズ・タイムアウト
            return
        else
            goto    s11                     ' リンクコマンド再送
        endif
    endif
    if  inkey$ = chr$( &h18 ) then          ' CLRキー入力
        state9 = 911                        ' ﾕｰｻﾞｰによる処理中断
        return
    endif
    goto    s12
'---------------------------------------------------------------'
'       プリンタのステータス要求コマンド
'   ESC+"FM"+0Ah+00h
'---------------------------------------------------------------'
Ir.statreq
    Cmd.data$ = ESC$+"FM"+LF$+NUL$
    gosub   Lab.cmdsnd
    return
'---------------------------------------------------------------'
'       プリンタ状態チェック
'   リターンコード（state9 ）の内容
'     0：正常状態
'   801：動作中なので指定時間待機しています（今回は１秒間）
'   802：プリンタに問題が有りますキー押下で再確認します
'   981：エラ－表示後中断キーが押されて中断
'---------------------------------------------------------------'
Ir.statchk
    state9 = 0
    Prt.sta$ = mid$( rbuf$,23, 1 )          ' プリンタ状態フラグ
    Bat.sta$ = mid$( rbuf$,24, 1 )          ' バッテリィ充電状態
    select  Prt.sta$
        case    chr$(&h00)                  ' 通常状態（アイドル中）
            Prt.msg$ = ""
        case    chr$(&h01)                  ' カバーオープン状態
            Prt.msg$ = "カバーオープン　"
        case    chr$(&h02)                  ' コマンドのシンタックスエラー
            Prt.msg$ = "コマンドエラー　"
        case    chr$(&h03)                  ' 用紙フィードジャム
            Prt.msg$ = "フィードジャム　"
        case    chr$(&h04)                  ' ラベルエンド
            Prt.msg$ = "ラベルエンド　　"
        case    chr$(&h05)                  ' カバーオープンエラー
            Prt.msg$ = "ｶﾊﾞｰｵｰﾌﾟﾝｴﾗｰ　　"
        case    chr$(&h06)                  ' サーマルヘッド断線エラー
            Prt.msg$ = "ｻｰﾏﾙﾍｯﾄﾞ断線　　"
        case    chr$(&h07)                  ' サーマルヘッド異常高温
            Prt.msg$ = "ｻｰﾏﾙﾍｯﾄﾞ過熱　　"
        case    chr$(&h08)                  ' フラッシュROMへの書込みエラー
            Prt.msg$ = "ﾌﾗｯｼｭROM書込ｴﾗｰ "
        case    chr$(&h09)                  ' フラッシュROMの消去エラー
            Prt.msg$ = "ﾌﾗｯｼｭROM消去ｴﾗｰ "
        case    chr$(&h0A)                  ' ローバッテリィ（印字不能状態）
            Prt.msg$ = "ﾛｰﾊﾞｯﾃﾘｨ印字不能"
        case    chr$(&h0B)                  ' プリンタ動作中
            Prt.msg$ = "プリンタ動作中　"
        case    chr$(&h0C)                  ' 通信エラー(RS-232Cのみ)
            Prt.msg$ = "通信ｴﾗｰ(RS232C) "
        case    chr$(&h0D)                  ' 正常終了＋ラベルエンド
            Prt.msg$ = "正常終了(LBLEND)"
        case    chr$(&h0E)                  ' フラッシュROM登録エリアフル
            Prt.msg$ = "ﾌﾗｯｼｭROMｴﾘｱﾌﾙ　 "
    end select
    if  Prt.msg$ <> "" then
        beep 3
        locate  1, 7 : print Prt.msg$ ;
        if  Prt.sta$ = chr$(&h0B) then      ' プリンタ動作中
            timeA = rtime9 
            while   timeA > 0               ' 動作完了待ち
            wend
            state9 = 801
        else
            gosub   kywait
            if  K$ = chr$(&h18) then        ' 「Ｃ」キー中断
                state9 = 981
            else
                state9 = 802                ' ステータス異常
            endif
        endif
    endif
    return
'---------------------------------------------------------------'
'       処理終了時フェーズ
'   EOTを送信して処理を終了するが、応答が有るケースと無い
'   ケースがあるので注意する
'   ACK応答を待たないケース： eot.chkf9 = 0
'   ACK応答を待つケース：     eot.chkf9 = 1
'---------------------------------------------------------------'
Ir.eotsend
    state9 = 0
    cmdcnt9 = 1                             ' コマンド再送カウンタ
s31 gosub   dumred                          ' 受信バッファクリア
    print #prt9 , EOT$ ;
    timeA = rtime9                          ' 受信待ちタイマー
s32 if  loc( #prt9 ) > 0 then
        ans$ = input$( 1, #prt9 )           ' 受信キャラクタ
        select  ans$
            case    ACK$                    ' ACK応答受信
                return
            case    else
                gosub   dumred              ' 受信バッファクリア
                return
        end select
    endif
'/* ステータス要求コマンド後のＥＯＴにはＡＣＫ応答が来ない      */
    if  timeA = 0 then
        if  eot.chkf9 = 1 then              ' ＥＯＴ待ちフラグＯＮ
            cmdcnt9 = cmdcnt9 + 1           ' 再送カウント＋１
            if  cmdcnt9 > REcnt9 then
                state9 = 131                ' 終了フェーズタイムアウト
                return
            else
                goto    s31
            endif
        else
            return                          ' 応答を待たずに終了
        endif
    endif
    if  inkey$ = chr$( &h18 ) then          ' CLRキー入力
        state9 = 931                        ' ﾕｰｻﾞｰによる処理中断
        return
    endif
    goto    s32
'---------------------------------------------------------------'
'       モード変更コマンド
'   ESC+"M;"+a+0Ah+00h
'       a:発行モード
'       (最上位ﾋﾞｯﾄはIrDA:IrCOMMでｽﾃｰﾀｽ自動応答の有無)
'       0:しない
'       1:する
'       30h,B0h:LABEL    受信済みデータ捨てる
'       31h,B1h:RECEIPT  受信済みデータ捨てる
'       32h,B2h:RECEIPT1 継続印刷
'       33h,B3h:RECEIPT  受信済みデータ捨てる
'       41h,C1h:TPCL-LE  継続印刷
'---------------------------------------------------------------'
Ir.modechg
    Cmd.data$ = ESC$+"M;"+mode$+LF$+NUL$
    gosub   Lab.cmdsnd
    return
'-------------------------------'
'   印字濃度微調
'-------------------------------'
Ir.contreg
    return
'-------------------------------'
'   グラフィック登録
'-------------------------------'
Ir.grapreg
    return
'-------------------------------'
'   外字登録
'-------------------------------'
Ir.gaijreg
    return
'---------------------------------------------------------------'
'       データ印字コマンド（ＲＥＣＥＩＰＴモード）
'       (Ｉｒｄａ：ＴＥＣ Ｐｒｏｔｏｃｏｌの場合）
'---------------------------------------------------------------'
Ir.rcprin
    Cmd.data$ = sbuf$
    gosub   Rec.cmdsnd
    return

'---------------------------------------------------------------'
'       ステータス受信(STX+26ﾊﾞｲﾄ)
'---------------------------------------------------------------'
Ir.statget
    crc.err9 = 0                            ' CRCエラーフラグ
    state9 = 0
    rbuf$ = ""
s221    if  loc( #prt9 ) >= 26 then
        rbuf$ = input$( 24, #prt9 )         ' 受信データ読み込み
        rcrc$ = input$(  2, #prt9 )         ' CRC読み込み
        call    "CRC.FN3" 1 rbuf$, crc$     ' CRC計算モジュール
        if  rcrc$ = right$(crc$,1)+left$(crc$,1) then
            IDsh$ = mid$( rbuf$, 1, 1 )     ' プリンタＩＤ上位
            IDsl$ = mid$( rbuf$, 2, 1 )     ' プリンタＩＤ下位
            crc.err9 = 0                    ' CRCチェックＯＫ
            return
        else
            crc.err9 = 1                    ' CRCエラー
            return
        endif
    endif
    if  timeA = 0 then
        state9 = 212                        ' ステータス受信フェーズタイムアウト
        return
    endif
    if  inkey$ = chr$( &h18 ) then          ' CLR入力
        state9 = 921                        ' ﾕｰｻﾞｰによる処理中断
        return
    endif
    goto    s221
'---------------------------------------------------------------'
'       コマンド発行 (ラベルフォーマット)
'   STX(1)+ID(2)+LEN(1)+ｺﾏﾝﾄﾞ(n)+CRC(2)
'---------------------------------------------------------------'
Lab.cmdsnd
    state9 = 0
    cmdcnt9 = 1                             ' コマンド再送カウンタ
    gosub   Labl.pack                       ' コマンドパケット生成（ラベルモード）
    sbuf$ = pack$
s21 gosub   dumred                          ' 受信バッファクリア
    print #prt9 , sbuf$ ;                    ' コマンドデータ送信
    timeA = rtime9                          ' 受信待ちタイマー
    ans$ = ""
s22 if  loc( #prt9 ) > 0 then
        ans$ = input$( 1, #prt9 )           ' 受信キャラクタ
        select  ans$
            case    ACK$                    ' 処理終了応答受信
                return
            case    STX$                    ' ステータス受信
                gosub   Ir.statget          '
                if  crc.err9 <> 0 then      ' CRCエラー
                    goto    s21             ' コマンド再送
                endif
                if  state9 = 0 then         ' 正常受信
                    return
                endif
                if  state9 = 921 then       ' CLRキー中断
                    return
                endif
                cmdcnt9 = cmdcnt9 + 1       ' 再送カウント＋１
                if  cmdcnt9 > REcnt9 then
                    state9 = 122            ' 再送カウントオーバー
                    return
                else
                    goto    s21             ' コマンド再送
                endif
            case    NAK$                    ' コマンド再送
                cmdcnt9 = cmdcnt9 + 1       ' 再送カウント＋１
                if  cmdcnt9 > REcnt9 then
                    state9 = 123            ' 再送カウントオーバー
                    return
                else
                    goto    s21             ' プリンタＮＡＫ応答再送
                endif
            case    else
                gosub   dumred              ' 受信バッファクリア
        end select
    endif
    if  timeA = 0 then
        cmdcnt9 = cmdcnt9 + 1               ' 再送カウント＋１
        if  cmdcnt9 > REcnt9 then
            state9 = 124                    'ステータス受信フェーズタイムアウト
            return
        else
            goto    s21                     ' プリンタ応答無し再送
        endif
    endif
    if  inkey$ = chr$( &h18 ) then          ' CLRキー入力
        state9 = 922                        ' ﾕｰｻﾞｰによる処理中断
        return
    endif
    goto    s22

'---------------------------------------------------------------'
'       コマンド発行 (レシートフォーマット)
'   STX(1)+ID(2)+LEN(1)+"Y"+ﾌﾗｸﾞ(1)+ｺﾏﾝﾄﾞ(n)+CRC(2)
'   フラグは00h～7FhのｼｰｹﾝｼｬﾙNo.をセットするが、最終印字
'   データ以外の途中データの場合は80hを加算する。
'---------------------------------------------------------------'
Rec.cmdsnd
    state9 = 0
    cmdcnt9 = 1                             ' コマンド再送カウンタ
    gosub   Rect.pack                       ' コマンドパケット生成（レシートモード）
    sbuf$ = pack$
s41 gosub   dumred                          ' 受信バッファクリア
    print #prt9 , sbuf$ ;                    ' コマンドデータ送信
    timeA = rtime9                          ' 受信待ちタイマー
    ans$ = ""
s42 if  loc( #prt9 ) > 0 then
        ans$ = input$( 1, #prt9 )           ' 受信キャラクタ
        select  ans$
            case    ACK$                    ' 処理終了応答受信
                return
            case    STX$                    ' ステータス受信
                gosub   Ir.statget
                if  crc.err9 <> 0 then      ' CRCエラー
                    goto    s41             ' コマンド再送
                endif
                if  state9 = 0 then         ' 正常受信
                    return
                endif
                if  state9 = 921 then       ' CLRキー中断
                    return
                endif
                cmdcnt9 = cmdcnt9 + 1       ' 再送カウント＋１
                if  cmdcnt9 > REcnt9 then
                    state9 = 242            ' 再送カウントオーバー
                    return
                else
                    goto    s41             ' コマンド再送
                endif
            case    NAK$                    ' コマンド再送
                cmdcnt9 = cmdcnt9 + 1       ' 再送カウント＋１
                if  cmdcnt9 > REcnt9 then
                    state9 = 243            ' 再送カウントオーバー
                    return
                else
                    goto    s41             ' プリンタＮＡＫ応答再送
                endif
            case    else
                gosub   dumred              ' 受信バッファクリア
        end select
    endif
    if  timeA = 0 then
        cmdcnt9 = cmdcnt9 + 1               ' 再送カウント＋１
        if  cmdcnt9 > REcnt9 then
            state9 = 244                    ' ステータス受信フェーズタイムアウト
            return
        else
            goto    s41                     ' プリンタ応答無し再送
        endif
    endif
    if  inkey$ = chr$( &h18 ) then          ' CLRキー入力
        state9 = 922                        ' ﾕｰｻﾞｰによる処理中断
        return
    endif
    goto    s42

'---------------------------------------------------------------'
'       送信パケットの生成(LABEL)
'         (255ﾊﾞｲﾄ以内)
'---------------------------------------------------------------'
Labl.pack
    cmd.len9  = len(Cmd.data$)              ' 送信データの長さを求める
    cmd.len1$ = chr$(cmd.len9 )              ' 長さを文字形式に変換
    work$ = IDmh$ + IDml$ + cmd.len1$ + Cmd.data$       ' CRC計算範囲のデータをセット
    call    "CRC.FN3" 1 work$, crc$         ' CRC計算モジュールをCall
    scrc$ = right$(crc$,1) + left$(crc$,1)  ' High/Lowを入れ替える
    pack$ = STX$ + work$ + scrc$            ' 送信パケットを生成
    return
'---------------------------------------------------------------'
'       送信パケットの生成(RECEIPT)
'         (255ﾊﾞｲﾄ以内)
'       Prt.flg9 について(0:最終　1:途中)
'       76543210
'       ||-----|   ブロックNo.00h～7Fhの昇順連番
'       |          0:最終ブロック　1:途中ブロック
'---------------------------------------------------------------'
Rect.pack
    cmd.len9  = len(Cmd.data$)              ' 送信データの長さを求める
    cmd.len1$ = chr$(cmd.len9 +2)            ' 長さを文字形式に変換
    if  Prt.flg9 = 1 then
        Pack.flg$ = chr$(&h80+data.cnt9 )
    else
        Pack.flg$ = chr$(&h00+data.cnt9 )
    endif
    work$ = IDmh$ + IDml$ + cmd.len1$ + "Y" + Pack.flg$ + Cmd.data$
    call    "CRC.FN3" 1 work$, crc$         ' CRC計算モジュールをCall
    scrc$ = right$(crc$,1) + left$(crc$,1)  ' High/Lowを入れ替える
    pack$ = STX$ + work$ + scrc$            ' 送信パケットを生成
    return

'---------------------------------------------------------------'
'       ＥＮＴキー入力待ち
'---------------------------------------------------------------'
crwait
    if  inkey$ <> chr$( &h0d ) then
        goto    crwait
    endif
    beep
    return
'---------------------------------------------------------------'
'       ＫＥＹ入力待ち
'---------------------------------------------------------------'
kywait
    K$ = inkey$
    if  K$ = "" then
        goto    kywait
    endif
    beep
    return
'---------------------------------------------------------------'
'       受信ＢＵＦＦＥＲ読み捨て
'   受信バッファに残っているデータを読み捨てる
'---------------------------------------------------------------'
dumred
    if  loc( #prt9 ) > 0 then
        work$ = input$( loc(#prt9 ), #prt9 )
    endif
    return

'********************************************************************************
'*      内容        ：      梱包明細出力用ﾜｰｸﾌｧｲﾙのｵｰﾌﾟﾝ                        *
'********************************************************************************
s.prtwkopn
    open prtwk$ as #prtwk9 
    field #prtwk9 , 254 as sline$

    return

'********************************************************************************
'*      内容        ：      ﾋﾟｯｷﾝｸﾞ実績履歴ﾌｧｲﾙのｵｰﾌﾟﾝ                          *
'********************************************************************************
s.picwkopn
 rem (2008.12.04)    open picwk$ as #picwk9 record 1000                           'ﾚｺｰﾄﾞ数1000
 rem (2008.12.04)    field #picwk9 , 3 as pw.no$ , 5 as pw.picno$ , 2 as pw.gyo$ ,
 rem (2008.12.04)                   13 as pw.jancd$ , 13 as pw.shocd$ , 5 as pw.syusu$
'+------------------------------------------------------------------------------+
    open picwk$ as #picwk9 record 1000                           'ﾚｺｰﾄﾞ数1000
    field #picwk9 , 3 as pw.no$ , 5 as pw.picno$ , 2 as pw.gyo$ ,
                   13 as pw.jancd$ , 14 as pw.shocd$ , 5 as pw.syusu$

    return

'********************************************************************************
'*      内容        ：      商品棚番ﾏｽﾀのｵｰﾌﾟﾝ                                  *
'********************************************************************************
s.shtmopn
'    open shtmst$ as #shtmst9 record 20000                           'ﾚｺｰﾄﾞ数20000
    open shtmst$ as #shtmst9
'▼北九　入荷予定の追加                                       16.02.05 大坪
'▼北九　在庫数、入数の追加                                       15.12.09 大坪
'    field #shtmst9 , 13 as shtjan$ , 9 as shtcase$ , 9 as shtbara$ ,
'                     16 as shtgtin$
'    field #shtmst9, 13 as shtjan$, 9 as shtcase$, 9 as shtbara$,
'                    16 as shtgtin$ , 10 as shtzaiko$, 5 as shtirisu$
    field #shtmst9, 13 as shtjan$, 9 as shtcase$, 9 as shtbara$,
                    16 as shtgtin$ , 10 as shtzaiko$, 5 as shtirisu$ , 16 as nyuyote$
'▲北九　在庫数、入数の追加                                       15.12.09 大坪
'▲北九　入荷予定の追加                                       16.02.05 大坪
    return

