updated on 2004.06.24 |
サブファイルの入力の、ライン入力パターンの説明です。仕組みさえ分かれば、それほど面倒ではありません。実行中の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 :
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||