顯示具有 DSPF 標籤的文章。 顯示所有文章
顯示具有 DSPF 標籤的文章。 顯示所有文章

星期二, 10月 31, 2023

2000-10-04 如何利用Subfile message 顯示訊息?



□ Tips : 如何利用Subfile message 顯示訊息?


---------------------------------------
QDDSSRC SFLMSGD

     A                                      CA03
     A*-------------------------------------*
     A          R HED01
     A*-------------------------------------*
     A  80                                  ALARM
     A                                      KEEP
     A                                      BLINK
     A                                      OVERLAY
     A                                      PUTOVR
     A                                  1  2'SFLMSGD'
     A                                  1 30'Subfile Message Test'
     A                                  1 72DATE
     A                                      EDTCDE(Y)
     A            USER          10A  O  2  2
     A                                  2 72TIME
     A                                      EDTWRD('  :  :  ')
     A                                  8 18'This is a test of subfile message -
     A                                      function '
     A                                 21 67'Vengoal Chang'
     A                                      DSPATR(HI)
     A*-------------------------------------*
     A          R SFLMSG                    SFL
     A*-------------------------------------*
     A* SFLMSGRCD specify message show from line XX
     A                                      SFLMSGRCD(23)
     A            KEYVAR                    SFLMSGKEY
     A            SFPGMQ                    SFLPGMQ(10)
     A*-------------------------------------*
     A          R CTLMSG                    SFLCTL(SFLMSG)
     A*-------------------------------------*
     A                                      OVERLAY
     A                                      SFLDSP
     A                                      SFLDSPCTL
     A  65                                  SFLEND
     A                                      SFLINZ
     A                                      SFLSIZ(0011)
     A                                      SFLPAG(0002)
     A            SFPGMQ                    SFLPGMQ

QRPGLESRC  SFLMSGR

     H DEBUG  OPTION(*SRCSTMT:*NODEBUGIO)
     H DATEDIT(*YMD/)
     FSFLMSGD   CF   E             WORKSTN
     F                                     INFDS(INFDSP)
     D******************************************************
     D*     D E F I N E    D A T A  - S T R U C T U R E    *
     D******************************************************
     D INFDSP          DS
     D  PUSHED               369    369
     D* 指定 MESSAGE FILE
     D* MESSAGE FILE 可以 CRTMSGF 自行建立 
     D* 以 WRKMSGF 按 F6 加入訊息
     D MSGF            DS
     D  MSGFIL                 1     10    INZ('QCPFMSG')
     D  MSGFLB                11     20    INZ('*LIBL')
     D*
     D                 DS                  INZ
     D  MSGLEN                 1      4B 0
     D  TOPGCT                 5      8B 0
     D*
     D PBERR           DS
     D  BYTPRV                 1      4B 0 INZ(116)
     D  BYTAVA                 5      8B 0 INZ(0)
     D  ERRID                  9     15
     D  ERR###                16     16
     D  ERRDTA                17    116

     D******************************************************
     D*     D E F I N E    PROGRAM STATUS PARM             *
     D******************************************************
     D                SDS
     D  PGMID                  1     10
     D  WRSTN                244    253
     D  USER                 254    263
     D******************************************************
     D*     D E F I N E    C O N S T A N T                 *
     D******************************************************
     D F3              C                   CONST(X'33')
     C******************************************************
     C*             M A I N -  R O U T I N E               :
     C******************************************************
      * 將 MSGID 改為自行加入的 MSGID
     C                   MOVE      'CPF0001'     MSGID                          :
     C                   MOVEL(P)  'TEST'        MSG                            :
     C                   EXSR      @SNDPM                                       :
     C*                                                    
     C                   MOVE      'CPF0002'     MSGID                          :
     C                   EXSR      @SNDPM                                       :
     C*                                                    
     C                   MOVE      'CPF0003'     MSGID                          :
     C                   EXSR      @SNDPM                                       :
     C*                                                    
     C                   MOVE      'CPF0005'     MSGID                          :
     C                   EXSR      @SNDPM                                       :
     C*                                                    
     C                   MOVE      'CPF0006'     MSGID                          :
     C                   EXSR      @SNDPM                                       :
     C*                                                    
     C                   MOVE      'CPF0007'     MSGID                          :
     C                   EXSR      @SNDPM                                       :
     C*                                                    
     C                   MOVE      'CPF0008'     MSGID                          :
     C                   EXSR      @SNDPM                                       :
     C*                                                    
     C                   MOVE      'CPF0010'     MSGID                          :
     C                   EXSR      @SNDPM                                       :
     C*                                                    
     C                   MOVE      'CPF0011'     MSGID                          :
     C                   EXSR      @SNDPM                                       :
     C*                                                    
     C                   MOVE      'CPF0190'     MSGID                          :
     C                   EXSR      @SNDPM                                       :
     C*                                                    
     C                   MOVE      'CPF0191'     MSGID                          :
     C                   EXSR      @SNDPM                                       :
     C*                                                    
     C                   MOVE      'CPF0192'     MSGID                          :
     C                   EXSR      @SNDPM                                       :
     C*                                                    
     C     F3            DOUEQ     PUSHED                                       :
     C*                                                    
     C                   WRITE     CTLMSG                                       :MSG SFL
     C                   EXFMT     HED01                                        :OPTION ENTRY
     C                   EXSR      @RMVPM                                       :
     C*                                                    
     C                   END                                                    :
     C*                                                    
     C                   MOVE      *ON           *INLR                          :
     C                   RETURN                                                 :
     C******************************************************
     C*             S U B   -  R O U T I N E               :
     C******************************************************
     C*----------------------------------------------------*
     C     *INZSR        BEGSR                                                  :
     C*----------------------------------------------------*
     C                   MOVE      *ON           *IN65                          :
     C                   MOVEL     PGMID         SFPGMQ                         :FOR MSG SFL
     C*                                                    
     C                   ENDSR                                                  :
     C*----------------------------------------------------*
     C     @SNDPM        BEGSR                                                  :
     C*----------------------------------------------------*
     C                   CALL      'QMHSNDPM'                                   :
     C                   PARM                    MSGID             7            :
     C                   PARM                    MSGF                           :
     C                   PARM                    MSG              78            :
     C                   PARM      78            MSGLEN                         :
     C                   PARM      '*INFO'       MSGTYP           10            :
     C                   PARM      '*'           TOPGMQ           10            :
     C                   PARM      0             TOPGCT                         :
     C                   PARM                    KEYVAR            4            :
     C                   PARM                    PBERR                          :
     C*                                                    
     C                   MOVE      *BLANK        MSG                            :
     C*                                                   
     C                   ENDSR                                                  :
     C*----------------------------------------------------*
     C     @RMVPM        BEGSR                                                  :
     C*----------------------------------------------------*
     C                   CALL      'QMHRMVPM'                                   :
     C                   PARM      '*'           TOPGMQ                         :
     C                   PARM      0             TOPGCT                         :
     C                   PARM      *BLANK        KEYVAR                         :
     C                   PARM      '*OLD  '      CLEAR            10            :
     C                   PARM                    PBERR                          :
     C*                                                    
     C                   ENDSR



2000-05-02 如何讓 AS/400 自動更新畫面訊息 ?(Auto display update screen)


如何讓 AS/400 自動更新畫面訊息 ?(Auto display update screen)
--------------------------------

1. 於 畫面 DDS 中指定 INVITE keyword
2.   CRTDSPF 指定參數 WAITRCD(seconds) 設定畫面自動更新時間
3. 於程式中設定檔案參數 MAXDEV(*FILE)
4.   設定 Time out procedure
5.   使用 Write, Read opcode ; 不要使用 EXFMT opcode
      且 Read "filename", not Read "record-format"

--------------------------------
QDDSSRC -- MARQUEE DSPF
           CRTDSPF (MARQUEE) WAITRCD(3) 

     A                                      PRINT                      
     A                                      INVITE                     
     A                                      INDARA                     
     A                                      CA03(03)                   
     A*-------------------------------------*                          
     A          R FMT01                                                
     A*-------------------------------------*                          
     A                                  1  2'MARQUEE'                  
     A                                  1 27'Refresh information per 3' 
     A                                  1 72DATE                       
     A                                      EDTCDE(Y)                  
     A            USER          10A  O  2  2                           
     A                                  2 72TIME                       
     A                                      EDTWRD('  :  :  ')         
      *                                                                
     A            TEXT          30A  B 14 25                           
      *                                                                
     A                                 23  2'F3=EXIT'                  
     A                                 22 23'Don''t touch the keyboard!'
                                            DSPATR(RI)                 
     A                                 24 67'Vengoal Chang'            
                                            DSPATR(HI)                 

QRPGLESRC -- MARQUEER  RPGLE

     H option(*srcstmt)                                                
     Fmarquee   CF   E             WORKSTN MAXDEV(*file)               
     F                                     INFDS(INFDS)                
     F                                     IndDs(INDDS)                
     D******************************************************           
     D*     D E F I N E    PROGRAM STATUS PARM             *           
     D******************************************************           
     D                SDS                                              
     D  PGMID                  1     10                                
     D  WRSTN                244    253                                
     D  USER                 254    263                                
     D******************************************************           
     D*     D E F I N E    C O N S T A N T                 *           
     D******************************************************           
     D F3KEY           C                   CONST(X'33')                
     D******************************************************           
     D*     D E F I N E    D A T A  - S T R U C T U R E    *           
     D******************************************************           
     D INFDS           DS                                              
     D  KEY                  369    369                                
     D  MajorCode            401    402                                
     D  MinorCode            403    404                                
                                                                       
      * INDDS using with INDARA in DSPF DDS file level defined         
     D IndDs           DS            99                                
     D  F3                     3      3N                               
                                                                       
     D                 ds                                              
     D TimeDate                      14  0                             
     D  Time60                        6  0 overlay(TimeDate:  1)       
     D  Date80                        8  0 overlay(TimeDate:  7)       
     C******************************************************           
     C*             M A I N -  R O U T I N E               :           
     C******************************************************           
     C*    *IN03         DOUEQ     *ON                                 
     C     F3            DOUEQ     *ON                                 
     C                   write     FMT01                               
     C                   read      marquee                             
                                                                       
     C                   Select                                        
      *  --------------------------------------------------------------
      *  - Handle time-out condition                                   
      *  --------------------------------------------------------------
                                                                       
     C                   When      MajorCode = '03' and                
     C                             MinorCode = '10'                    
     C                   time                    TimeDate              
     C                   movel     Time60        text                  
                                                                       
     C                   Other                                         
                                                                       
     C                   EndSl                                         
                                                                       
     C                   EndDo                                         
     C                   MOVE      *ON           *INLR                 
     C                   RETURN                                        



2000-03-20 如何在 AS/400 應用程式中抓取游標位置 ?


如何在 AS/400 應用程式中抓取游標位置 ? 

AS/400 系統無法像 PC 軟體直接追蹤使用者敲擊哪一鍵, AS/400 是於終端機
將透過按 "執行鍵(ENTER)"整個劃面資料送出至 AS/400 的, AS/400 處理完資
料後, 再將結果畫面送回終端機, 故 AS/400 應用程式中抓取游標位置, 須按
按 "執行鍵(ENTER)", 才能得到游標位置.

方法有兩種 :
一  : 於程式中畫面檔案宣告 INFDS 取其欄位值加以計算得知,
二  : 直接於畫面檔案 DDS 中加入 RTNCSRLOC Keyword , 取其系統傳回值,
而 RTNCSRLOC Keyword 有二種指定方式, 
一種為取 游標位置 RTNCSRLOC(*WINDOW &ROWN &COLN),
 另一種取欄位名稱 RTNCSRLOC(&RCDNAM &FLDNAM &CSRLOC)

--------------------------------

以下是畫面及程式 Source, 
DSPF : CSRPOSD
     A                                      PRINT
     A                                      INDARA
     A                                      CA03(03)
     A*-------------------------------------*
     A          R FMT01
     A*-------------------------------------*
     A                                      RTNCSRLOC(&RCDNAM &FLDNAM -
     A                                      &CSRLOC)
     A                                      RTNCSRLOC(*WINDOW &ROWN -
     A                                      &COLN)
     A            FLDNAM        10A  H
     A            RCDNAM        10A  H
     A            CSRLOC         4S 0H
     A            ROWN           3S 0H
     A            COLN           3S 0H
     A*
     A                                  1  2'CSRPOSD'
     A                                  1 30'Cursor Position Test'
     A                                  1 72DATE
     A                                      EDTCDE(Y)
     A            USER          10A  O  2  2
     A                                  2 72TIME
     A                                      EDTWRD('  :  :  ')
     A                                  7 38'LINE'
     A                                  7 47'COLUMN'
     A                                  8 27'INFDS ==>'
     A            V1LIN          3S 0O  8 38DSPATR(HI)
     A            V1COL          3S 0O  8 49DSPATR(HI)
     A                                 10  2'RTNCSRLOC(*WINDOW &ROWN &COLN) ==>'
     A            ROW            3S 0O 10 38DSPATR(HI)
     A            COL            3S 0O 10 49DSPATR(HI)
     A                                 12  2'RTNCSRLOC(&RCDNAM &FLDNAM &CSRLOC)'
     A            V1RCD         10A  O 12 38DSPATR(HI)
     A            V1FLD         10A  O 12 49DSPATR(HI)
     A            V1CSR          4S 0O 12 60DSPATR(HI)
      *
     A                                 14 27'TEXT  ==>'
     A            TEXT          30A  B 14 38
      *
     A                                 23  2'F3=EXIT'
     A                                 22 23'MOVE YOUR CURSOR AND PRESS ENTER'
                                            DSPATR(RI)
     A                                 24 67'Vengoal Chang'
                                            DSPATR(HI)

RPGLE : CSRPOSR
     FCSRPOSD   CF   E             WORKSTN
     F                                     INFDS(INFDS)
     D******************************************************
     D*     D E F I N E    PROGRAM STATUS PARM             *
     D******************************************************
     D                SDS
     D  PGMID                  1     10
     D  WRSTN                244    253
     D  USER                 254    263
     D******************************************************
     D*     D E F I N E    C O N S T A N T                 *
     D******************************************************
     D F3              C                   CONST(X'33')
     D******************************************************
     D*     D E F I N E    D A T A  - S T R U C T U R E    *
     D******************************************************
     D INFDS           DS
     D  KEY                  369    369
     D  LINCLM               370    371
     D                 DS
     D  DSWRK                  1      2B 0
     D  DSWRKB                 2      2
     C******************************************************
     C*             M A I N -  R O U T I N E               :
     C******************************************************
     C     *IN03         DOUEQ     *ON
     C                   EXFMT     FMT01
     C     *IN03         IFEQ      *OFF
     C*
     C                   Z-ADD     0             DSWRK
     C                   MOVEL     LINCLM        DSWRKB
     C                   Z-ADD     DSWRK         V1LIN
     C*
     C                   Z-ADD     0             DSWRK
     C                   MOVE      LINCLM        DSWRKB
     C                   Z-ADD     DSWRK         V1COL
     C*
     C                   Eval      ROW = ROWN
     C                   Eval      COL = COLN
     C*
     C                   MOVEL     RCDNAM        V1RCD
     C                   MOVEL     FLDNAM        V1FLD
     C                   Z-ADD     CSRLOC        V1CSR
     C*
     C                   END
     C                   END
     C*
     C                   MOVE      *ON           *INLR
     C                   RETURN



參考文件 : 
ILE RPG for AS/400 Reference, SC09-2508-11,

DDS for display files, SC41-5712