home

top bbs_s.gif (936 バイト)

updated on 2004.06.24

2.30. ライン入力サンプル解説

[previous][upper][next]

サブファイルの入力の、ライン入力パターンの説明です。仕組みさえ分かれば、それほど面倒ではありません。実行中のgifをよく見て、動きを把握してください。また、これは、あくまで解説用のプログラムです。そのため、出来るだけシンプルにしましたので、適宜細かな動きなどを追加してください。

[注意]

このプログラムでは、排他ロックなどの処理をしていないので、その部分は、各自考えてください。ここでの主眼はあくまで、サブファイルを使った入力プログラムの解説です。

プレーンテキストソース:zzm010.txt

     H            Y/                                    1
     FZZM010P UF  E           K        DISK                      A
     FZZM010D CF  E                    WORKSTN
     F                                        RRN01 KSFILE SFL01
     F                                              KINFDS INFDS
     I******************************************************
     I*     D E F I N E    C O N S T A N T                 *
     I******************************************************
     I              X'33'                 C         F3
     I              X'3A'                 C         F10
     I              X'3C'                 C         F12
     I              X'BB'                 C         F23
     I******************************************************
     I*     D E F I N E    D A T A  - S T R U C T U R E    *
     I******************************************************
     IINFDS       DS
     I                                      369 369 PUSHED
     I*
     I           SDS
     I                                        1  10 V1PGM
     I                                      244 253 V1JOB
     I                                      254 263 V1USR
     I                                       91 170 ##LOCK
     C******************************************************
     C*     DEFINITION  MODULE  ( PLIST   FIELD   KLIST )  *
     C******************************************************
[解説10]
     C           *ENTRY    PLIST                           ;FOR ZZM010P
     C                     PARM           PIODR   8        :
     C*                                                    ;
     C*  DEFINE KLIST                                      ;
     C*                                                    ;
     C           KYZZM     KLIST                           ;FOR ZZM010P
     C                     KFLD           V1ODR            :
     C*                                                    ;
     C*  DEFINE FILED                                      ;
     C*                                                    ;
     C           *LIKE     DEFN RRN01     W1RN01           ;
     C           *LIKE     DEFN L1SEQ     W1SEQ            ;
     C******************************************************
     C*             M A I N -  R O U T I N E               ;
     C******************************************************
[解説20]
     C                     EXSR @INZSF                     ;
[解説30]
     C                     EXSR @BLDSF                     ;
[解説40]
     C                     EXSR @LIN                       ;ライン入力
[解説50]
     C*                                                    :
     C* このままだと、入力中でもいきなり終了してしまう。 :
     C*                                                    :
B001 C           F3        IFEQ PUSHED                     ;
*001 C           F12       OREQ PUSHED                     ;
 001 C                     GOTO \END                       :
E001 C                     END                             :
     C*                                                    :
     C* データの書出し                                   :
     C*                                                    :
B001 C           F10       IFEQ PUSHED                     ;
 001 C                     EXSR @DBOUT                     ;ファイル書出
E001 C                     END                             :
     C*                                                    ;
     C*終了                                              ;
     C*                                                    ;
     C           \END      TAG                             :
     C*                                                    :
     C                     MOVE *ON       *INLR            ;
     C                     RETRN                           ;
     C******************************************************
     C*             S U B   -  R O U T I N E               ;
     C******************************************************
     C*----------------------------------------------------*
     C           *INZSR    BEGSR                           :初期設定
     C*----------------------------------------------------*
     C                     MOVE PIODR     V1ODR            :
     C                     Z-ADD0         RRN01   50       :RRN FOR SFL
     C                     Z-ADD1         H1SRCD           :SFLRCD
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @INZSF    BEGSR                           :SF初期化
     C*----------------------------------------------------*
     C                     CLEARLIN01                      ;
     C                     Z-ADD0         RRN01            ;
     C*                                                    ;
     C                     MOVE *ON       *IN62            ;
     C                     WRITECTL01                      ;SFLCLR
     C                     MOVE *OFF      *IN62            ;
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @BLDSF    BEGSR                           :SF書込み
     C*----------------------------------------------------*
[解説60]
     C           KYZZM     SETLLZZM010P                    ;
B001 C           *IN90     DOUEQ*ON                        ;
 001 C           KYZZM     READEZZM010P                  90;
B002 C           *IN90     IFEQ *ON                        ;
 002 C                     LEAVE                           :
+002 C                     ELSE                            :
 002 C                     EXSR @TOSF0                     ;
E002 C                     END                             ;
E001 C                     END                             ;
     C*                                                    ;
[解説70]
     C           RRN01     ADD  1         L1SEQ            ;
     C*                                                    :
     C                     Z-ADDRRN01     H1SRCD           ;
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @LIN      BEGSR                           :
     C*----------------------------------------------------*
[解説80]
B001 C           F3        DOUEQPUSHED                     ;
*001 C           F12       OREQ PUSHED                     ;
*001 C           F10       OREQ PUSHED                     ;
 001 C*                                                    :
 001 C                     MOVE *ON       *IN61            ;SFLDSPCTL ON
 001 C           RRN01     COMP 0                    6060  ;SFLDSP ON/OFF
 001 C                     WRITECTL01                      ;
 001 C                     MOVEA'00'      *IN,60           ;
 001 C*                                                    :
[解説90]
 001 C                     Z-ADDL1SEQ     W1SEQ            ;
 001 C*                                                    :
 001 C                     WRITEFTR01                      ;
[解説100]
 001 C                     EXFMTLIN01                      ;
 001 C*                                                    ;
 001 C                     EXSR @EROFF                     ;
 001 C*                                                    ;
B002 C           F3        IFNE PUSHED                     ;
*002 C           F12       ANDNEPUSHED                     ;
*002 C           F10       ANDNEPUSHED                     ;データ書出
     C*
     C           L1SEQ     IFEQ 0
     C                     Z-ADDW1SEQ     L1SEQ
     C                     END   
 002 C*                                                    ;
[解説110]
*003 C           RRN01     IFGT 0                          ;
*003 C           L1SEQ     ANDNEW1SEQ                      ;
[解説120]
 003 C                     EXSR @CHGLN                     ;
+003 C                     ELSE                            ;
[解説130]
 003 C                     EXSR @ADD                       ;LINE -> SFL
E003 C                     END                             ;
E002 C                     END                             ;
E001 C                     END                             ;
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @TOSF0    BEGSR                           :D/B -> SFL
     C*----------------------------------------------------*
[解説140]
     C                     ADD  1         RRN01            :
     C                     Z-ADDRRN01     S1SEQ            :
     C                     MOVE *BLANK    S1STS            :
     C                     Z-ADDN1QTY     S1QTY            :QUANTITY
     C                     Z-ADDN1AMT     S1AMT            :AMOUNT
     C*                                                    :
     C                     WRITESFL01                      ;
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @ADD      BEGSR                           :追加LINE->SFL
     C*----------------------------------------------------*
[解説150]
     C                     ADD  1         RRN01            :
     C*                                                    :
     C                     Z-ADDRRN01     S1SEQ            :
     C                     MOVE 'ADD'     S1STS            :
     C                     Z-ADDL1QTY     S1QTY            :QUANTITY
     C                     Z-ADDL1AMT     S1AMT            :AMOUNT
     C*                                                    :
     C                     WRITESFL01                      ;WRITE SFL
     C                     CLEARLIN01                      :
     C*                                                    :
[解説155]
     C                     Z-ADDRRN01     H1SRCD           :
     C*                                                    :
[解説160]
     C           RRN01     ADD  1         L1SEQ            ;
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @CHGLN    BEGSR                           :
     C*----------------------------------------------------*
[解説170]
     C                     MOVE *ON       *IN81            :
[解説180]
     C                     Z-ADDRRN01     W1RN01           :退避
     C*                                                    :
[解説185]     C           L1SEQ     CHAINSFL01                90    :
B001 C           *IN90     IFEQ *OFF                       :
[解説190]
 001 C                     MOVE *ON       *IN52            :DSPATR(BL)
 001 C                     UPDATSFL01                      :
 001 C                     Z-ADDRRN01     H1SRCD           :
 001 C                     MOVE *ON       *IN61            :SFLDSPCTL ON
 001 C           RRN01     COMP 0                    6060  :SFLDSP ON/OFF
 001 C                     WRITECTL01                      :
 001 C                     MOVEA'00'      *IN,60           :
 001 C*                                                    :
[解説200]
 001 C           L1SEQ     CHAINSFL01                90    :
B002 C           *IN90     IFEQ *OFF                       :
 002 C*                                                    :
[解説210]
 002 C                     Z-ADDS1QTY     L1QTY            :QUANTITY
 002 C                     Z-ADDS1AMT     L1AMT            :AMOUNT
 002 C*                                                    :
[解説215]
 002 C                     WRITEFTR02                      :
 002 C                     EXFMTLIN01                      :
 002 C*                                                    ;
 002 C                     EXSR @EROFF                     ;
 002 C*                                                    :
[解説220]
B003 C                     SELEC                           :
 003 C           F3        WHEQ PUSHED                     :
*003 C           F12       OREQ PUSHED                     :
 003 C                     MOVE *OFF      *IN52            :DSPATR(BL)
 003 C                     UPDATSFL01                      :
 003 C           F23       WHEQ PUSHED                     :
 003 C                     EXSR @DLT                       :
+003 C                     OTHER                           :
 003 C                     EXSR @CHG                       :
E003 C                     END                             :
E002 C                     END                             :
E001 C                     END                             :
     C*                                                    :
     C                     CLEARLIN01                      :
     C*                                                    :
[解説230]
     C                     MOVE *OFF      *IN81            :CA23 HOLD
[解説240]
     C                     Z-ADDW1RN01    RRN01            :復元
[解説250]
     C                     Z-ADDW1RN01    H1SRCD           :
[解説260]
     C           RRN01     ADD  1         L1SEQ            ;
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @CHG      BEGSR                           :変更LINE->SFL
     C*----------------------------------------------------*
[解説270]
     C                     MOVE *OFF      *IN52            :DSPATR(BL)
     C                     MOVE 'CHG'     S1STS            :
     C*                                                    :
     C                     Z-ADDL1QTY     S1QTY            :QUANTITY
     C                     Z-ADDL1AMT     S1AMT            :AMOUNT
     C*                                                    :
     C                     UPDATSFL01                      :
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @DLT      BEGSR                           :削除LINE->SFL
     C*----------------------------------------------------*
[解説280]
     C                     MOVE *OFF      *IN52            :DSPATR(BL)
     C                     MOVE 'DLT'     S1STS            :
     C*                                                    :
     C                     Z-ADD0         S1QTY            :
     C                     Z-ADD0         S1AMT            :
     C*                                                    :
     C                     UPDATSFL01                      :
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @DBOUT    BEGSR                           :ファイルへ書出
     C*----------------------------------------------------*
[解説290]
     C*修正モードの時明細を一旦すべて削除                :
     C*                                                    :
[解説300]
     C           KYZZM     SETLLZZM010P                    ;FOR ZZM010P
B001 C           *IN90     DOUEQ*ON                        ;
 001 C           KYZZM     DELETZZM010P              90    ;
E001 C                     END                             ;
     C                     CLEARZZM010R                    :
     C*                                                    :
     C                     Z-ADD0         W1LIN   30       :
     C                     Z-ADDRRN01     W1RN01           ;MAX RRN
[解説310]
     C*                                                    :
B001 C           1         DO   W1RN01    RRN01            ;
 001 C           RRN01     CHAINSFL01                92    ;
B002 C           *IN92     IFEQ *OFF                       :
*002 C           S1STS     ANDNE'DLT'                      :
 002 C                     Z-ADDV1ODR     N1ODR            :
 002 C                     ADD  1         W1LIN            :
 002 C                     Z-ADDW1LIN     N1LIN            :
 002 C                     Z-ADDS1QTY     N1QTY            :QUANTITY
 002 C                     Z-ADDS1AMT     N1AMT            :AMOUNT
 002 C                     WRITEZZM010R                    :
 002 C                     CLEARZZM010R                    :
E002 C                     END                             ;
E001 C                     END                             ;
     C*                                                    :
     C                     ENDSR                           :
     C*----------------------------------------------------*
     C           @EROFF    BEGSR                           :ERR OFF
     C*----------------------------------------------------*
     C                     MOVE *OFF      *IN80            :ALARM OFF
     C                     MOVEA'00000000'*IN,30           :ALARM OFF
     C                     MOVE *BLANK    V1MSG#           :ERR MSG ID OFF
     C                     MOVE *BLANK    V1MSG            :ERR MSG DATA OFF
     C*                                                    :
     C                     ENDSR                           :

[previous][home][upper][next]

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送