当前位置:首页 >

400中显示在线用户操作记录的方法(用User Space API 实现)


首先,祝福所有CU中AS400的朋友    元宵节快乐!

[quote:3fb980c39a]╭ ╯╭╯╭╯╭╭ ╯╭╯╭   
◥█□█□█□█□█□█◤ 
 █○●○●○●○●○█ 
 █○●○●○●○●○█      Andrewleading_he  送湯圓來哦 ! 
 ◥█□█□█□█□█◤        团团园园,和和气气,一起成长!
 ▆█████████▆
[/quote:3fb980c39a]


其次,感谢CU提供机会让我认识这么多的朋友,大家都那么热心,那么坦诚!

最后,跟大家交流一个讨论了好久的问题,就是400中api的使用。有人可能不是很习惯用400中的api,也许因为我之前玩过一段时间的java吧,感觉使用java的api真的很方便,思想中一直有这种想法吧,这不就有了下面的这个议题(真的很感谢那些提供消息的cu中的朋友)。

[code:1:3fb980c39a]

     A*  位置 : TEST_LIB QDDSSRC_FILE USERACTFM_MEMBER              
     A*  功能 :  显示在线用户的操作记录
   A*  使用 :  <- USERACTRPG DSPF                                
     A*  適用 :                                                     
     A*  開發 : ANDREW HE                                    
     A*  時間 : 2004 02 05                                          
     A*  備注 :                                                     
     A*                                                            
     A************************************************************* 
     A                                      PRINT
     A                                      CA03 CA05 CA06 CA09 CA10
     A          R SCREEN03                    SFL
     A            S3SEL          1   B  4  2  DSPATR(CS)
     A  35                                    DSPATR(PR)
     A            S3STATION     10   O  4  4
     A  30                                    DSPATR(HI)
     A  35                                    DSPATR(BL)
     A
     A            S3ID          10   O  4 15
     A  30                                    DSPATR(HI)
     A            S3ACTIVITY    10   O  4 26
     A            S3PROGRAM     10   O  4 37
     A            S3NUMBER       6   O  4 48
     A            S3NAME        24   O  4 55
     A  31                                    DSPATR(HI)
     A          R SCREEN02                  SFLCTL(SCREEN03)
     A*                                     CA03 CA05 CA06 CA09
     A                                        OVERLAY
     A                                        SFLSIZ(19)
     A                                        SFLPAG(18)
     A  70                                    SFLDSP
     A  71                                    SFLDSPCTL
     A  72                                    SFLCLR
     A  70                                    SFLEND(*MORE)
     A            SFLPOS         4S 0H      SFLRCDNBR
     A            CURPAG         5S 0H      SFLSCROLL
     A                                  1  3UserLOG
     A                                       COLOR(WHT)
     A                                  1 25 Users Signed On:
     a                                       DSPATR(UL)
     A                                       COLOR(WHT)
     A            SIGNEDON       5  0O  1 43 EDTWRD(  , 0 )
     A                                  1 72DATE
     A                                      EDTCDE(Y)
     A            TIMEX          6  0O  2 72EDTWRD(  :  :  )
     A                                 03 04 Dsply Stn
     a                                       DSPATR(UL)
     A                                      COLOR(WHT)
     A                                 03 15 User Id
     a                                       DSPATR(UL)
     A                                      COLOR(WHT)
     A                                 03 26 Activity
     a                                       DSPATR(UL)
     A                                      COLOR(WHT)
     A                                 03 37 Program
     a                                       DSPATR(UL)
     A                                      COLOR(WHT)
     A                                 03 48 Job No
     a                                       DSPATR(UL)
     A                                      COLOR(WHT)
     A                                 03 55 User Name
     a                                       DSPATR(UL)
     A                                      COLOR(WHT)
     A          R SCREEN04                  OVERLAY
     A            MESSAGE       70   O 23  2
     A  99                                  DSPATR(RI)
     A                                 24 03F3=Exit   F5=Refresh   F6=SORT BY +
     A                                      Name  F9=Command Line
     A                                       COLOR(BLU)
     A          R SCREEN06                  SFL
     A            S6DAYTIM      11   O  3 01
     A            S6COMD49      49   O  3 13
     A            S6COMD160    160   H
     A          R SCREEN05                  SFLCTL(SCREEN06)
     A                                      WINDOW(3 15 19 61)
     A                                      WDWBORDER((*COLOR YLW) (*DSPATR RI))
     A                                        OVERLAY  KEEP
     A                                        SFLSIZ(15)
     A                                        SFLPAG(14)
     A  80                                    SFLDSP
     A  81                                    SFLDSPCTL
     A  82                                    SFLCLR
     A  80                                    SFLEND(*MORE)
     A            SFLPOS2        4S 0H      SFLRCDNBR
     A                                 01 02 JOB:
     A                                       COLOR(WHT)
     A                                 02 01 Day/time
     A                                       COLOR(WHT)
     a                                       DSPATR(UL)
     A                                 02 13 Request (Abbrev)
     A                                       COLOR(WHT)
     a                                       DSPATR(UL)
     A            S3STATION     10   O 01 07
     A            S3ID          10   O 01 19
     A            S3NUMBER       6   O 01 31
     A          R SCREEN07                  WINDOW(SCREEN05)
     A                                      OVERLAY
     A                                 18 03F3=Return   F10=Print
     A                                       COLOR(BLU)
[/code:1:3fb980c39a]


      [code:1:3fb980c39a]*************************************************************
      * 位置: TEST_LIB QRPGLESRC_FILE USERACTPGM_MEMBER             
      * 功能: 显示在线用户的操作记录                                        
   * 使用: <- USERACTCMD OR CALL USERACTPGM                         
      * 適用:                                                       
      * 開發: ANDREW HE                                       
      * 時間: 2004 02 05                                            
      * 備注:                                                       
      *
     F****************************************************************
     FUSERACTFM CF   E             WORKSTN
     F                                     SFILE(SCREEN03:RRN)
     F                                     SFILE(SCREEN06:RRN2)
     FQSYSPRT   O    F  195        PRINTER OFLIND(*INOA)
     D                SDS
     D  S1SWID               244    253
     D  S1USER               254    263
     D GENERALDS       DS
     D  INPUTSIZE            113    116B 0
     D  LISTOFFSET           125    128B 0
     D  LISTNBR              133    136B 0
     D  ENTRYSIZE            137    140B 0
     D ERRORDS         DS                  INZ
     D  BYTESPROVD             1      4B 0 INZ(116)
     D  BYTESAVAIL             5      8B 0
     D  MESSAGEID              9     15
     D  ERR###                16     16
     D  MESSAGEDTA            17    116
     D* API ERROR DATA STRUCTURE
     D API_ERR2        DS
     D  ERRBYTES2              1      4B 0
     D  ERRBYTESAVA2           5      8B 0
     D  EXCEPTION2             9     15
     D  RESERVE2              16     16
     D  DATA2                 17    271
     D                 DS                  INZ
     D  STARTPOSIT             1      4B 0
     D  STARTLEN               5      8B 0
     D  SPACELEN               9     12B 0
     D  NBRENTRIES            29     32B 0
     D  LENENTRY              37     40B 0
     D  NBRRETURN             41     44B 0
     D  MAXENTRIES            45     48B 0
     D SPACEATRIB      S             10
     D SPACEVALUE      S              1
     D SPACEAUTH       S             10
     D SPACETEXT       S             50
     D SPACEREPLC      S             10
     D FORMATNAME      S              8
     D USERNAME        S             10    INZ(*ALL      )
     D DSPSTATION      S             10    INZ(*ALL      )
     D DISCONNECT      S             10    INZ(*NO       )
     D SIGNEDOFF       S             10    INZ(*NO       )
     D SPACESPACE2     S             10    INZ(JOBMSGS)
     D SPACEPTR        S               *   INZ(*NULL)
     D BASEPTR         S               *   INZ(*NULL)
     D INF_LEN1        S             10I 0 INZ(%LEN(MSGSELECT))
     D DETAILS         S             10I 0
     D DETAILSIZE      S             10I 0 INZ(%LEN(LJOB01DS))
     D LINESTART       S             10I 0
     D LINESIZE        S             10I 0 INZ(%LEN(MSGENTRYDS))
     D  USERSPACE      S             20
     D  USERSPACE2     S             20
     D  LINE1          S            110
     D  LINE2          S            110
     D******************************************************************
     D*STRUCTURE FOR SGNU0200 FORMAT
     D******************************************************************
     DQEZU0200         DS
     D*                                             QEZ SGNU0200
     D  QEZDSN00               1     10
     D*                                             DISPLAY STATION NAME
     D  QEZUN01               11     20
     D*                                             USER NAME
     D  QEZJNBR00             21     26
     D*                                             JOB NUMBER
     D  QEZIVITY00            27     36
     D*                                             ACTIVITY
     D  QEZAN00               37     46
     D*                                             ACTIVITY NAME
     D  QEZDJ00               47     47
     D*                                             DISCONNECT JOB
     D  QEZERVED00            48     64
     D*                                             RESERVED
     D QEZDSD                 65    114
     D*                                             DISPLAY STATION DESCRIPTION
     D QEZUD                 115    164
     D*                                             USER DESCRIPTION

     D*  ERROR CODE DATA
     D ERRDATA         DS
     D   BYTESPROV             1      4B 0 INZ( 272 )
     D   BYTESAVAL             5      8B 0
     D   EXCPID                9     15A
     D   RESERVED             16     16A
     D   EXCPDATA             17    272A
     D*
     D STRING          S             71
     D ARRAY           S             71    DIM(5000)
     D INPUTDS         DS
     D MSGSELECT       DS
     D  MAXREQUESTED                 10I 0 INZ(-1)
     D  DIRECTION                    10A   INZ(*NEXT     )
     D  QJOBNAME                     10A
     D  QUSRNAME                     10A
     D  QJOBNUMB                      6A
     D  INTERNALJOBID                16A
     D  STARTMSGKEY                   4A   INZ(X00000000)
     D  MAXLENGTH                    10I 0 INZ(160)
     D  MAXHELP                      10I 0 INZ(4)
     D  OFFTOFIELD1                  10I 0 INZ(84)
     D  NUMTORTRN                    10I 0 INZ(1)
     D  OFFTOMSG                     10I 0 INZ(88)
     D  LENGTHMSG                    10I 0 INZ(4)
     D QMHIFR00                      10I 0 INZ(0302)
     D QMHCMQ00                       4A   INZ(*)
      * GENERIC HEADER DATA STRUCTURE
     D GENHEADDS       DS                  BASED(BASEPTR)
     D  USERAREA                     64
     D  SIZEGENHED                   10I 0
     D  STRRELLVL                     4A
     D  FMTNAME                       8A
     D  APINAME                      10A
     D  DATETIME                     13A
     D  INFSTATUS                     1A
     D  USERSPCSIZE                  10I 0
     D  IPSECOFFSET                  10I 0
     D  IPSECSIZE                    10I 0
     D  HSECOFFSET                   10I 0
     D  HSECSIZE                     10I 0
     D  LDSECOFFSET                  10I 0
     D  LDSECSIZE                    10I 0
     D  ENTRYNUMBER                  10I 0
     D  ENTRYSIZEI                   10I 0
     D  CCSID                        10I 0

      * FORMAT LJOB0100 WITH MESSAGE ENTRY DATA
     D LJOB01DS        DS
     D  NXTENTOFFSET                 10I 0
     D  FLDRETOFFSET                 10I 0
     D  FLDRETNUMBER                 10I 0
     D  MSGSEV                       10I 0
     D  MSGID                         7A
     D  MSGTYPE                       2A
     D  MSGKEY                        4A
     D  MSGFILENAME                  10A
     D  MSGFILELIB                   10A
     D  DATESENT                      7A
     D  TIMESENT                      6A
     D* RESERVED1                 32000A

      * MESSAGE ENTRY FORMAT AT END OF LJOB0100 FORMAT
     D MSGENTRYDS      DS
     D  NXTFLDOFFSET                 10I 0
     D  FLDINFLEN                    10I 0
     D  FIELDID                      10I 0
     D  DATATYPE                      1A
     D  DATASTATUS                    1A
     D  RESERVED2                    14A
     D  DATALEN                      10I 0
     D  DATATEXT                    160A
     C                   TIME                    TIMEX             6 0
     C                   EXSR      CLEAR
     C                   EVAL      USERSPACE = (USERS     QTEMP)
      *  CREATE USER SPACE FOR ONLINE  USERS
     C                   CALL      QUSCRTUS
     C                   PARM                    USERSPACE
     C                   PARM      *BLANKS       SPACEATRIB
     C                   PARM      2048          SPACELEN
     C                   PARM      *BLANKS       SPACEVALUE
     C                   PARM      *CHANGE     SPACEAUTH
     C                   PARM      *BLANKS       SPACETEXT
     C                   PARM      *YES        SPACEREPLC
     C                   PARM                    ERRORDS
     C*      CREATE USER SPACE   2
     C                   EVAL      USERSPACE2 = (JOBMSGS   QTEMP)
     C                   CALL      QUSCRTUS
     C                   PARM                    USERSPACE2
     C                   PARM      *BLANKS       SPACEATRIB
     C                   PARM      2048          SPACELEN
     C                   PARM      *BLANKS       SPACEVALUE
     C                   PARM      *CHANGE     SPACEAUTH
     C                   PARM      *BLANKS       SPACETEXT
     C                   PARM      *YES        SPACEREPLC
     C                   PARM                    API_ERR2
     C*      RETRIEVE POINTER   (INFO ABOUT USER SPACE)
     C                   CALL      QUSPTRUS
     C                   PARM                    USERSPACE2
     C                   PARM                    BASEPTR
     C                   EXSR      GETINFO
     C     *INLR         DOWEQ     *OFF
     C                   EXSR      POSITION
     C                   WRITE     SCREEN04
     C                   EXFMT     SCREEN02
     C   KC              SETON                                        LR
     C   KC              LEAVE
     C   KI              CALL      QUSCMDLN
     C     *INKE         IFEQ      *ON
     C   KE              Z-ADD     CURPAG        HOLDPAGE          5 0
     C                   EXSR      CLEAR
     C                   EXSR      GETINFO
     C                   LEAVE
     C                   ENDIF
     C     *INKF         IFEQ      *ON
     C     SIGNEDON      IFGT      5000
     C                   EVAL      MESSAGE = LIMIT OF 5000 FOR SORT
     C                   SETON                                        99
     C                   ELSE
     C                   EXSR      SORT
     C                   ENDIF
     C                   ENDIF
     C* GO GET REQUEST MESSAGES (COMMANDS ENTERED)  FOR THIS JOB
     C                   READC     SCREEN03
     C                   DOW       NOT %EOF
     C     S3STATION     IFNE      LIST EMPTY
     C                   EXSR      GETMSGS
     C                   ENDIF
     C                   MOVE                  S3SEL
     C                   SETON                                        30
     C                   UPDATE    SCREEN03
     C                   SETOFF                                       3035
     C                   READC     SCREEN03
     C                   ENDDO
     C*
     C                   ENDDO
     C*********************************************************
     C* GET INFO
     C*********************************************************
     C     GETINFO       BEGSR
     C                   TIME                    TIMEX             6 0
     C                   Z-ADD     0             SIGNEDON          5 0
      *  LIST ALL OBJECTS IN FILE
     C                   EVAL      USERSPACE = (USERS     QTEMP)
     C                   CALL      QEZLSGNU
     C                   PARM                    USERSPACE
     C                   PARM      SGNU0200    FORMATNAME
     C                   PARM                    USERNAME
     C                   PARM                    DSPSTATION
     C                   PARM                    DISCONNECT
     C                   PARM                    SIGNEDOFF
     C                   PARM                    ERRORDS
     C                   EVAL      STARTPOSIT = 1
     C                   EVAL      STARTLEN = 140
      *  RETRIEVE USER SPACE GENERAL INFORMATION
     C                   EVAL      USERSPACE = (USERS     QTEMP)
     C                   CALL      QUSRTVUS
     C                   PARM                    USERSPACE
     C                   PARM                    STARTPOSIT
     C                   PARM                    STARTLEN
     C                   PARM                    GENERALDS
      *  RETRIEVE THE LIST BY WALKING THROUGH THE USER SPACE
     C                   EVAL      STARTPOSIT =  1
     C                   EVAL      STARTLEN = INPUTSIZE
     C                   EVAL      USERSPACE = (USERS     QTEMP)
     C                   EVAL      STARTPOSIT = LISTOFFSET + 1
     C                   EVAL      STARTLEN = ENTRYSIZE
     C                   EXSR      CLEAR
     C                   Z-ADD     0             INDX              4 0
     C                   EVAL      ARRAY = ZZZZZZZZZZ
     C     LISTNBR       IFGT      0
     C                   DO        LISTNBR
     C                   EVAL      USERSPACE = (USERS     QTEMP)
     C                   CALL      QUSRTVUS
     C                   PARM                    USERSPACE
     C                   PARM                    STARTPOSIT
     C                   PARM                    STARTLEN
     C                   PARM                    QEZU0200
     C                   EVAL      STARTPOSIT = STARTPOSIT + ENTRYSIZE
     C                   ADD       1             RRN
     C                   ADD       1             SIGNEDON
     C                   MOVE      QEZDSN00      S3STATION
     C                   MOVE      QEZUN01       S3ID
     C                   MOVE      QEZIVITY00    S3ACTIVITY
     C                   MOVE      QEZAN00       S3PROGRAM
     C                   MOVE      QEZJNBR00     S3NUMBER
     C                   MOVEL     QEZUD         S3NAME
     C                   WRITE     SCREEN03
     C     INDX          IFLT      5000
     C                   EVAL      STRING = S3NAME + S3STATION + S3ID +
     C                                S3ACTIVITY + S3PROGRAM + S3NUMBER
     C                   ADD       1             INDX
     C                   MOVE      STRING        ARRAY(INDX)
     C                   ENDIF
     C                   ENDDO
     C                   ENDIF
     C*
     C     RRN           IFEQ      0
     C                   Z-ADD     1             RRN
     C                   MOVEL     LIST EMPTY  S3STATION
     C                   WRITE     SCREEN03
     C                   ENDIF
     C                   SETON                                        70
     C                   Z-ADD     1             SFLPOS
     C*
     C                   ENDSR
     C******************************************************
     C* CLEAR SUBFILE  # 1                                 *
     C******************************************************
     C     CLEAR         BEGSR
     C                   SETOFF                                       707131
     C                   SETOFF                                       99
     C                   MOVE      *BLANKS       MESSAGE          70
     C                   SETON                                        72
     C                   WRITE     SCREEN02
     C                   SETOFF                                       72
     C                   SETON                                        71
     C                   Z-ADD     0             RRN               5 0
     C                   Z-ADD     0             RRNH              5 0
     C                   Z-ADD     0             CURPAG            5 0
     C                   Z-ADD     0             HIGH              5 0
     C                   ENDSR
     C******************************************************
     C* CLEAR SUBFILE  # 2                                 *
     C******************************************************
     C     CLEAR2        BEGSR
     C                   SETOFF                                       8081
     C                   SETON                                        82
     C                   WRITE     SCREEN05
     C                   SETOFF                                       82
     C                   SETON                                        8081
     C                   Z-ADD     0             RRN2              5 0
     C                   Z-ADD     0             CURPAG2           5 0
     C                   ENDSR
     C******************************************************
     C* SORT THE SUBFILE                                   *
     C******************************************************
     C     SORT          BEGSR
     C*
     C                   EXSR      CLEAR
     C                   SETON                                        31
     C                   SETOFF                                       30
     C                   SORTA     ARRAY
     C*
     C     1             DO        INDX          X                 5 0
     C                   EVAL      S3NAME     = %SUBST(ARRAY(X):1:24)
     C                   EVAL      S3STATION  = %SUBST(ARRAY(X):25:10)
     C                   EVAL      S3ID       = %SUBST(ARRAY(X):35:10)
     C                   EVAL      S3ACTIVITY = %SUBST(ARRAY(X):45:10)
     C                   EVAL      S3PROGRAM  = %SUBST(ARRAY(X):55:10)
     C                   EVAL      S3NUMBER   = %SUBST(ARRAY(X):65:6)
     C                   ADD       1             RRN
     C                   WRITE     SCREEN03
     C                   ENDDO
     C*
     C                   SETON                                        70
     C     RRN           IFEQ      0
     C                   Z-ADD     1             RRN
     C                   MOVEL     LIST EMPTY  S3STATION
     C                   WRITE     SCREEN03
     C                   ENDIF
     C                   Z-ADD     1             SFLPOS
     C*
     C
     C                   ENDSR
     C*********************************************************
     C* KEEP CORRECT POSITIONING OF SUBFILE SCREEN            *
     C*********************************************************
     C     POSITION      BEGSR
     C   KEHOLDPAGE      IFGT      HIGH
     C                   Z-ADD     HIGH          CURPAG
     C                   ELSE
     C                   Z-ADD     HOLDPAGE      CURPAG
     C                   ENDIF
     C     HIGH          IFNE      0
     C     CURPAG        ANDGT     HIGH
     C                   Z-ADD     HIGH          CURPAG
     C                   ENDIF
     C     CURPAG        IFNE      0
     C                   Z-ADD     CURPAG        SFLPOS
     C                   ENDIF
     C                   ENDSR
     C*********************************************************
     C* GET REQUEST MESSAGES
     C*********************************************************
     C     GETMSGS       BEGSR
     C                   EXSR      CLEAR2
     C                   EVAL      QUSRNAME   =  S3ID
     C                   EVAL      QJOBNAME   =  S3STATION
     C                   EVAL      QJOBNUMB   =  S3NUMBER
     C                   EVAL      API_ERR2   =  *BLANKS
     C                   CALL      QMHLJOBL
     C                   PARM                    USERSPACE2
     C                   PARM      LJOB0100    API_FORMAT3       8
     C                   PARM                    MSGSELECT
     C                   PARM                    INF_LEN1
     C                   PARM      JSLT0100    API_FORMAT2       8
     C                   PARM                    API_ERR2
     C     EXCEPTION2    IFEQ      *BLANKS
     C                   EVAL      DETAILS     = LDSECOFFSET + 1
     C                   DO        ENTRYNUMBER
     C                   CALL      QUSRTVUS
     C                   PARM                    USERSPACE2
     C                   PARM                    DETAILS
     C                   PARM                    DETAILSIZE
     C                   PARM                    LJOB01DS
     C                   PARM                    API_ERR2
     C                   EVAL      LINESTART =   FLDRETOFFSET  +1
     C                   CALL      QUSRTVUS
     C                   PARM                    USERSPACE2
     C                   PARM                    LINESTART
     C                   PARM                    LINESIZE
     C                   PARM                    MSGENTRYDS
     C                   PARM                    API_ERR2
     C                   IF         %SUBST(DATATEXT:1:DATALEN) <> *BLANKS   AND
     C                             MSGTYPE = 08  OR  MSGTYPE = 09
     C                   ADD       1             RRN2
     C                   EVAL      S6DAYTIM = %SUBST(DATESENT:6:2) +   +
     C                                        %SUBST(TIMESENT:1:2) + : +
     C                                        %SUBST(TIMESENT:3:2) + : +
     C                                        %SUBST(TIMESENT:5:2)
     C                   EVAL      S6COMD49  = %SUBST(DATATEXT:1:DATALEN)
     C                   EVAL      S6COMD160 = %SUBST(DATATEXT:1:DATALEN)
     C                   WRITE     SCREEN06
     C                   ENDIF
     C                   EVAL      DETAILS =   + NXTENTOFFSET  +1
     C                   EVAL      LINESTART =   FLDRETOFFSET  +1
     C                   ENDDO
     C*
     C     RRN2          IFEQ      0
     C                   Z-ADD     1             RRN2
     C                   EVAL      S6DAYTIM = *BLANKS
     C                   EVAL      S6COMD49 = LIST EMPTY OR NOT AVAILABLE
     C                   EVAL      S6COMD160 = LIST EMPTY OR NOT AVAILABLE
     C                   WRITE     SCREEN06
     C                   ENDIF
     C*
     C                   Z-ADD     1             SFLPOS2
     C                   WRITE     SCREEN05
     C                   WRITE     SCREEN07
     C                   READ      SCREEN05
     C   KJ              EXSR      PRINTLIST
     C                   ELSE
     C                   SETON                                        35
     C                   ENDIF
     C                   ENDSR
     C*********************************************************
     C* PRINT LIST
     C*********************************************************
     C     PRINTLIST     BEGSR
     C                   Z-ADD     0             PAGE
     C                   Z-ADD     RRN2          TOTMSGS           6 0
     C                   EXCEPT    HEADING
     C                   DO        TOTMSGS       COUNTER           6 0
     C     COUNTER       CHAIN     SCREEN06                           50
     C     *IN50         IFEQ      *OFF
     C                   EVAL      LINE1    = %SUBST(S6COMD160:1:110)
     C                   EVAL      LINE2    = %SUBST(S6COMD160:111:50)
     C     LINE1         IFNE      *BLANKS
     C   OA              EXCEPT    HEADING
     C   OA              SETOFF                                       OA
     C                   EXCEPT    DETAIL1
     C                   ENDIF
     C     LINE2         IFNE      *BLANKS
     C   OA              EXCEPT    HEADING
     C   OA              SETOFF                                       OA
     C                   EXCEPT    DETAIL2
     C                   ENDIF
     C*
     C                   ENDIF
     C*
     C                   ENDDO     1
     C*
     C   OA              EXCEPT    HEADING
     C   OA              SETOFF                                       OA
     C                   EXCEPT    THATSIT
     C                   ENDSR
     OQSYSPRT   E            HEADING        2 01
     O                                            7 USERLOG
     O                       TIMEX               20   :  :  
     O                       S1USER              35
     O                                          122 DATE:
     O