**********************************************************************************************
* DBG202R4: Progress meter
* Copyright (C) 2001 Martin Rowe <martin@dbg400.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
**********************************************************************************************
H DATEDIT(*YMD) DEBUG(*YES) OPTION(*NODEBUGIO : *SRCSTMT)
**********************************************************************************************
* FILES:
**********************************************************************************************
**********************************************************************************************
* ARRAYS:
**********************************************************************************************
**********************************************************************************************
* DATA STRUCTURES:
**********************************************************************************************
**********************************************************************************************
* PROGRAM NAME
D SDS
D SDS_Pgm 1 10
*
D P_Error DS
D zBytp 10I 0
D zByta 10I 0
D zErrid 7
D zError 1
D zExdta 240
**********************************************************************************************
* WORK FIELDS:
**********************************************************************************************
D Complete S 50
D Fraction S 3 0
D JobType S 1
D P_DataLength S 10I 0
D P_Format S 8 INZ('JOBI0100')
D P_IntJob S 16
D P_Marker S 1
D P_MsgData S 512
D P_MsgFile S 20 INZ('QCPFMSG *LIBL')
D P_MsgID S 7 INZ('CPDA0FF')
D P_MsgKey S 4
D P_MsgType S 10
D P_Percent S 3 0
D P_PgmQueue S 10
D P_PgmStack S 10I 0
D P_Rcvr S 100
D P_RcvrLen S 10I 0 INZ(100)
D P_Text S 20
D P_ThisJob S 26 INZ('*')
D Progress S 50
D Pointer S 50
**********************************************************************************************
* CONSTANTS:
**********************************************************************************************
**********************************************************************************************
* ENTRY PARAMETERS:
**********************************************************************************************
C *ENTRY PLIST
C PARM P_Percent
C PARM P_Text
C PARM P_Marker
**********************************************************************************************
* MAINLINE:
**********************************************************************************************
* Determine job type (interactive or batch) if first time through
B001 C IF JobType = *BLANKS
C CALL 'QUSRJOBI'
C PARM P_Rcvr
C PARM P_RcvrLen
C PARM P_Format
C PARM P_ThisJob
C PARM P_IntJob
C EVAL JobType = %SUBST(P_Rcvr : 61 :1)
E001 C ENDIF
* Show uncompleted work as a row of dots
C EVAL Progress = *ALL'.'
* If an attribute below x'20' (normal green) specified, swap for yellow reverse (safer)
C IF P_Marker < X'20'
C EVAL P_Marker = X'33'
C ENDIF
* Build completion overlay for marker values of *blank and above
C IF P_Marker >= X'40'
C ' ':P_Marker XLATE Complete Pointer
C ENDIF
* Make sure percent value is in a safe range (0-100)
B001 C IF P_Percent > 100
C EVAL P_Percent = 100
E001 C ENDIF
B001 C IF P_Percent < 0
C EVAL P_Percent = 0 - P_Percent
E001 C ENDIF
* As we only have enough space for a line of fifty, halve the percentage to fit
C EVAL Fraction = P_Percent / 2
* Replace the the dots in the completed section with the requested marker
C EVAL %SUBST(Progress : 1 : Fraction) =
C %SUBST(Pointer : 1 : Fraction)
* Format the message accoring to marker type - row of characters or solid reverse image bar
C IF P_Marker >= X'40'
C EVAL P_MsgData = P_Text + ' ' +
C %EDITC(P_Percent:'Z') + '% ' + Progress
C ELSE
C IF Fraction < 50
C EVAL %SUBST(Progress : Fraction + 1 : 1) = X'22'
C ENDIF
C EVAL P_MsgData = P_Text + ' ' +
C %EDITC(P_Percent:'Z') + '%' + P_Marker +
C Progress
C ENDIF
C EVAL P_DataLength = 76
C EVAL P_PgmStack = 0
C EVAL P_PgmQueue = '*EXT'
* Send message to this program's own queue if in batch (log in job log)
B001 C IF JobType = 'B'
C EVAL P_MsgType = '*INFO'
X001 C ELSE
* Otherwise send status message for interactive request
C EVAL P_MsgType = '*STATUS'
E001 C ENDIF
*
C CALL (E) 'QMHSNDPM'
C PARM P_MsgID
C PARM P_MsgFile
C PARM P_MsgData
C PARM P_DataLength
C PARM P_MsgType
C PARM P_PgmQueue
C PARM P_PgmStack
C PARM P_MsgKey
C PARM P_Error
*
C RETURN
**********************************************************************************************