Está en la página 1de 28

/TITLE RTVDB2 - Build DDS member

*--------------------------------------------------------------*
* Programmers Group & Management Resources Copyright 1998 *
*
*
*
\\\\\\\
*
*
( o o )
*
*---------------------oOOO----(_)----OOOo----------------------*
*
*
* System name. . : Programmer Tool
*
* Program name . : RTVDB2
*
* Text . . . . . : Build DDS member
*
*
*
* Author . . . . : Alex Nubla
*
*
*
* Description. . : This program builds the temporary DDS
*
*
member requested for the entry file
*
*
using the RTVDBSRC command.
*
*
*
*
Return Codes:
*
*
*Blank = Good Retrieval
*
*
99 = No *ACCPTH record in QAFDACCP
*
*
*
*
*
*
OOOOO
OOOOO
*
*
(
)
(
)
*
*--------------------( )-------------( )-------------------*
*
(_)
(_)
*
* Modules:
*
*
*
* 1. RTVDB1
CLLE
Build temporary files
*
* 2. RTVDB2
RPGLE
Build DDS member
*
*
*
* Programs:
*
*
*
* 1. *none
*
*
*
*--------------------------------------------------------------*
* Modification Log :
*
*
*
*
Task Programmer/
*
* Date
No. Description
*
* -------- ------ ------------------------------------------ *
*
Alex Nubla
*
*
Creation Date
*
*
*
*--------------------------------------------------------------*
* APIs Used:
*
*
*
* QUSDLTUS Delete user space
*
* QUSCRTUS Create user space
*
* QUSCUSAT Change user space attributes
*
* QUSPTRUS Retrieve pointer to user space
*
* QUSLRCD List Record Formats
*
* QUSLFLD List Fields
*
* QUSRTVUS Retrieve user space
*
*
*
*--------------------------------------------------------------*
/EJECT
H COPYRIGHT('(C) Alex Nubla of PGMR, Inc. 1998')
****************************************************************

* F I L E D E S C R I P T I O N S P E C I F I C A T I O N *
****************************************************************
FQAFDACCP IF E
DISK
*
* File Access Path (built in RTVDB1)
*
*--------------------------------------------------------------*
FQAFDJOIN IF E
DISK
UsrOpn
*
* *Join File description (built in RTVDB1)
*
*--------------------------------------------------------------*
FQAFDSELO IF E
DISK
UsrOpn
*
* *Select / *Omit fields (built in RTVDB1)
*
*--------------------------------------------------------------*
FQDDSSRC UF A F 92
DISK
*
* New member (built in RTVDB1)
*
*--------------------------------------------------------------*
****************************************************************
*
D E F I N I T I O N
S P E C I F I C A T I O N
*
****************************************************************
*
* Program Status Data Structure
*
D PGMDS
SDS
D Pgmq##
*PROC
D ErrorSts
*STATUS
D PrvStatus
16
20S 0
D SrcLinNum
21
28
D Routine
*ROUTINE
D NumParms
*PARMS
D ExcpType
40
42
D ExcpNum
43
46
*
D PgmLib
81
90
D ExcpData
91
170
D ExcpId
171
174
D LastFile
201
208
D FileErr
209
243
D JobName
244
253
D User
254
263
D JobNumA
264
269
D JobNum
264
269S 0
D JobDate
270
275S 0
D RunDate
276
281S 0
D RunTime
282
287S 0
D PgmCrtDt
288
293
D PgmCrtTm
294
299
D CmplrLvl
300
303
D SrcFile
304
313
D SrcLib
314
323
D SrcMbr
324
333
D ProcPgm
334
343
D ProcMod
344
353

*--------------------------------------------------------------*
*
* User space parameters
*
*
@ prefix - names
*
# prefix - pointers
*
* ==========
* Space name
* ==========
*
D @SpcName
S
10
Based(#SpcName)
D #SpcName
S
*
*
* =============
* Space library
* =============
*
D @SpcLib
S
10
Based(#SpcLib)
D #SpcLib
S
*
*
* ==========
* Space size
* ==========
*
D @SpcSize
S
9B 0 Based(#SpcSize)
D #SpcSize
S
*
*
* =============
* Space pointer
* =============
*
D @SpcPtr
S
* Based(#SpcPtr)
D #SpcPtr
S
*
*
* ================
* Error message id
* ================
*
D @MsgId
S
7
Based(#MsgId)
D #MsgId
S
*
*
* ==================
* Error message data
* ==================
*
D @MsgDta
S
184
Based(#MsgDta)
D #MsgDta
S
*
*--------------------------------------------------------------*
*
* Initial User Space Name & Library
*
D @UsNameLib
DS
20
D @UsName
10
Inz('DBSPACE')
D @UsLib
10
Inz('QTEMP')
*--------------------------------------------------------------*
*
* Fields used in List Record Formats (QUSLRCD) API

*
*

and List Field (QUSLFLD) API

D @FormatR
S
8
QUSLRCD Format name
D @FormatF
S
8
QUSLFLD Format name
D @RecFmt
S
10
Record Format
D @OvrdPrc
S
1
Override Processing
D @QFile
S
20
Qualified File name
D @RecText
S
50
Record Format Text
*
* Format RCDL0200 List Data Section
*
D @Receiver1
DS
82
D @200Name
10
D @200Id
13
D @200Res1
1
D @200RecLen
9B 0
D @200NoFld
9B 0
D @200Text
50
*
* Format FLDL0100 List Data Section
*
D @Receiver2
DS
268
D @100Field
10
D @100Type
1
D @100Use
1
D @100OutBuf
9B 0
D @100InBuf
9B 0
D @100FldLen
9B 0
D @100Digits
9B 0
D @100DecPos
9B 0
D @100FldTxt
50
D @100EdtCde
2
D @100EdwLen
9B 0
D @100EdtWrd
64
D @100ColHdg1
20
D @100ColHdg2
20
D @100ColHdg3
20
D @100IntFld
10
D @100Alias
30
D @100AliasLn
9B 0
D @100NoDBCS
9B 0
D @100AlwNull
1
D @100Host
1
D @100DTFmt
4
D @100DTSep
1
D @100MIMap
1

Inz('RCDL0200')
Inz('FLDL0100')
Inz
Inz('1')
Inz
Inz

*--------------------------------------------------------------*
*
* Additional User Space parameters
*
D @ExtAttr
S
10
Inz('RTVDBSRC')
D @InitValue
S
1
Inz(X'00')
D @PubAut
S
10
Inz('*ALL')

D
D
D
D
D
D
D
D
D

@Text
@Replace
@FrcToAux
@StartPos
@StartEnt
@DataLen
@Size
@Loop
@BasePtr

S
S
S
S
S
S
S
S
S

50
10
1
9B
9B
9B
9B
5P
*

0
0
0
0
0

Inz('User space for RTVDBSRC')


Inz('*NO')
Inz('1')
Inz(1)
Inz(1)
Inz(192)
Inz(4096)

*--------------------------------------------------------------*
*
* Record structure for error code parameter
*
D@ErrData
DS
D @BytesProv
9B 0 Inz(200)
D @BytesAval
9B 0
D @ExcpId
7
D @Reserved1
1
D @ExcpData
184
*--------------------------------------------------------------*
*
* Change attribute parameters
*
D@ChgAttr
DS
D @NbrAttr
9B 0 Inz(2)
*
D @Attr2
9B 0 Inz(2)
D @Attr2Len
9B 0 Inz(1)
D @Attr2Dta
1
Inz(X'00')
*
D @Attr3
9B 0 Inz(3)
D @Attr3Len
9B 0 Inz(1)
D @Attr3Dta
1
Inz('1')
*--------------------------------------------------------------*
*
* Generic Header Format 0100
*
D@GenHeader
DS
Based(@SpcPtr)
D @QUserArea
1
64
D @QSzGenHdr
65
68B 0
D @QStrRelLv
69
72
D @QFmtName
73
80
D @QApiUsed
81
90
D @QDtTmCrtd
91
103
D @QInfoSts
104
104
D @QUsSize
105
108B 0
D @QOfstInp
109
112B 0
D @QSizeInp
113
116B 0
D @QOfstHdr
117
120B 0
D @QSzHdrSec
121
124B 0
D @QOfstLst
125
128B 0
D @QSizeLst
129
132B 0
D @QNoLstEnt
133
136B 0
D @QLstEntSz
137
140B 0
D @QCCSIdLst
141
144B 0
D @QCntryId
145
146
D @QLangId
147
149

D @QSubLstIn
D @QUsResrvd

150
151

150
192

*--------------------------------------------------------------*
*
* New source date
*
D
ds
D DateRtn
32A
D NewDat
6S 0 overlay(DateRtn: 1)
*--------------------------------------------------------------*
*
* New source record
*
DNewSource
ds
Inz
D NsSeqNo
1
5
Inz
D NsFormType
6
6
Inz
D NsComment
7
7
Inz
D NsConditn
8
16
Inz
D NsNameType
17
17
Inz
D NsReservd1
18
18
Inz
D NsName
19
28
Inz
D NsRef
29
29
Inz
D NsLen
30
34
Inz
D NsDataType
35
35
Inz
D NsDec
36
37
Inz
D NsUsage
38
38
Inz
D NsLocation
39
44
Inz
D NsKeyword
45
80
Inz
D NsLen#
S
5S 0 Inz
D NsDec#
S
2S 0 Inz
*--------------------------------------------------------------*
*
* Record Format array and information
*
D RfArray
DS
D RfInfo
60
dim(99)
D RfName
10
overlay(RfInfo: 1)
D RfText
50
overlay(RfInfo: 11)
D Rf#
S
3 0 Inz EXPORT
D Lf#
S
3 0 Inz
*--------------------------------------------------------------*
*
* Physical File array - for logical file only
*
D PfArray
DS
EXPORT
D PfInfo
10
dim(32)
D Pf#
S
3 0 Inz EXPORT
D PfAccess
S
3 0 Inz EXPORT
*--------------------------------------------------------------*
*
* Join File array - for logical file only
*
D JfArray
DS
EXPORT
D JfInfo
10
dim(32)
D Jf#
S
3 0 Inz EXPORT

*--------------------------------------------------------------*
*
* Text Line array
*
D LnArray
DS
Inz
D Line1
36
D Line2
36
D Line3
36
D Line4
36
D Line5
36
D Line6
36
D Line7
36
D Line8
36
D Line9
36
D Line10
36
D Lin
S
36
Inz Dim(10)
D Ln#
S
3 0 Inz
*--------------------------------------------------------------*
*
* From & To file for Join
*
D CurJFiles
DS
D JNJFNM
10
D JNJTNM
10
*
D SavJFiles
DS
D SVJFNM
10
D SVJTNM
10
*--------------------------------------------------------------*
*
* Constants
*
D @Yes
C
const('Y')
D @No
C
const('N')
D @PF
C
const('Physical File . . :')
D @LF
C
const('Logical file . . . :')
D @Unique
C
const('UNIQUE')
D @Minus
C
const('-')
D @Plus
C
const('+')
D @Descend
C
const('DESCEND')
D @Ascend
C
const(' ')
D @Signed
C
const('SIGNED')
D @Unsigned
C
const(' ')
D @Zone
C
const('ZONE')
D @NotZone
C
const(' ')
*--------------------------------------------------------------*
*
* Standalone fields
*
D Lilian
S
9B 0 Inz
D Second
S
8A Inz
D GregDt
S
17A Inz
D Picture
S
32A Inz('Mmmmmmmmmz ZD, YYYY')
D Picture2
S
32A Inz('MM/DD/YY')
D DateTxt
S
32A Inz
D DateMDY
S
32A Inz

D Lbl
Std comments
D Lbl#
D Fil#
D Maint
D KeyOrder
D Unique
D Keyed
D SelOmt
D Join
D Key#
D KeyFld
D LFFormat
D Pfile
D Jfile
D KeySeq
D KeySign
D KeyZone
D TstTxt
D Txt34
D Cont
D TxtLen
D Remain
D Scan
D BrkPos

S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S

80

Dim(24) CtData PerRcd(1)

3 0
3 0
8
8
1
1
1
1

8
8
4
360
34
1
3
3
3
3

0
0
0
0

Inz
Inz
Inz
Inz
Inz
Inz
Inz
Inz
Inz
Inz
Inz
Inz
Inz
Inz
Inz

Like(APNKYF)
Like(APKEYF)
Like(APBOLF)
Like(APBOF)
Like(JNDNAM)

/EJECT
****************************************************************
*
I N P U T
S P E C I F I C A T I O N
*
****************************************************************
IQDDSSRC NS
I
S
1
6 2SRCSEQ
I
S
7 12 0SRCDAT
I
13 92 SRCDTA
/EJECT
****************************************************************
*
C A L C U L A T I O N
S P E C I F I C A T I O N
*
****************************************************************
*
* Entry parameter list
*
C
*Entry
plist
C
parm
File
10
C
parm
FileL
10
C
parm
ObjAtr
10
C
parm
Mbr
10
C
parm
Text
50
C
parm
Rtncde
2
*
C
Eval
%Subst(@QFile: 1: 10) = File
C
Eval
%Subst(@QFile:11: 10) = FileL
*----------------------------------------------------*
* Get the local date
*
*----------------------------------------------------*
C
Callb(d) 'CEELOCT'
C
Parm
Lilian
C
Parm
Second
C
Parm
GregDt
C
Parm
*Omit

*
C
C
C
C
C

Callb(d) 'CEEDATE'
Parm
Parm
'YYMMDD'
Parm
Parm

Lilian
Picture
DateRtn
*Omit

*
C
C
C
C
C
C

Reset
Callb(d) 'CEEDATE'
Parm
Parm
Parm
Parm

Picture

Reset
Callb(d) 'CEEDATE'
Parm
Parm
Parm
Parm

Picture2

Lilian
Picture
DateTxt
*Omit

*
C
C
C
C
C
C

Lilian
Picture2
DateMDY
*Omit

*
*----------------------------------------------------*
* Initialize pointers
*
*----------------------------------------------------*
C
Eval
#SpcName
= %addr(@UsName)
C
Eval
#SpcLib
= %addr(@UsLib)
C
Eval
#SpcSize
= %addr(@Size)
C
Eval
#SpcPtr
= %addr(@BasePtr)
*----------------------------------------------------*
* Create a new user space
*
*----------------------------------------------------*
C
Exsr
$CrtUs
*
C
Eval
SRCSEQ
= 0
C
Eval
SRCDAT
= NewDat
*----------------------------------------------------*
* Retrieve list of Record formats for the file
*
*----------------------------------------------------*
C
Exsr
$RecFmt
*
*----------------------------------------------------*
* Write the standard label & file level keywords
*
*----------------------------------------------------*
C
Exsr
$StdLbl
*
*----------------------------------------------------*
* Write record & field level source
*
*----------------------------------------------------*
C
If
RtnCde
= *Blanks
C
1
Do
Rf#
Lf#
C
Exsr
$CrtUs
C
Eval
@RecFmt
= RfName(Lf#)
C
Eval
@RecText
= RfText(Lf#)
C
Eval
LnArray
= *Blanks
*
C
Eval
NsComment = '*'
C
Eval
SRCSEQ
= SRCSEQ + 1
C
Eval
SRCDTA
= NewSource
C
Except
WrtSrc
C
Reset
NewSource

*
*
*
C
C
C
C
C
C

*------------------------------------------*
* Write the Record Level
*
*------------------------------------------*
Eval
TstTxt
= %Trimr('TEXT(''')
%Trim(@RecText)
''')'
Eval
Cont
= @Plus
@RecText
CasNe
*Blanks
$BrkLin
EndCs

+
+

*
C
C
C
C
C
C
C
C
C
C

If
Eval
EndIf
Eval
Eval
Eval
Eval
Eval
Except
Reset

Line1
<> *Blanks
NsKeyword = Line1

Do
If
Eval
Eval
Eval
Eval
Except
Reset
Else
Leave
EndIf
EndDo

9
Lin(Ln#)
NsFormType
NsKeyword
SRCSEQ
SRCDTA
WrtSrc

NsFormType
NsNameType
NsName
SRCSEQ
SRCDTA
WrtSrc

=
=
=
=
=

'A'
'R'
@RecFmt
SRCSEQ + 1
NewSource
NewSource

*
C
C
C
C
C
C
C
C
C
C
C
C

*
*
*
*
C
C
C
C
C
C
C
C
C
C
*
*
*
C
C
C
*
*
*
C
C
C
C

<>
=
=
=
=

Ln#
*Blanks
'A'
Lin(Ln#)
SRCSEQ + 1
NewSource
NewSource

*------------------------------------------*
* Write PFILE keyword
*
*------------------------------------------*
If
Pfile
<> *Blanks
Eval
NsFormType = 'A'
Eval
NsKeyword = %Trimr('PFILE(')
%Trimr(Pfile)
')'
Eval
SRCSEQ
= SRCSEQ + 1
Eval
SRCDTA
= NewSource
Except
WrtSrc
Reset
NewSource
Else
*------------------------------------------*
* Write Join logical keywords
*
*------------------------------------------*
Join
CasEq
@Yes
$LstJoin
EndCs
EndIf
*------------------------------------------*
* Write the Field Level
*
*------------------------------------------*
Eval
NsComment = '*'
Eval
SRCSEQ
= SRCSEQ + 1
Eval
SRCDTA
= NewSource
Except
WrtSrc

+
+

C
C
*
*
*
C
*
*
*
C
C
C
C
C
C

Reset
NewSource
Exsr
$LstFld
*------------------------------------------*
* Write the Key fields (if any)
*
*------------------------------------------*
Exsr
$LstKFld
*------------------------------------------*
* Write the Select/Omit fields (if any) *
*------------------------------------------*
SelOmt
CasEq
@Yes
$LstSelO
EndCs
EndDo
EndIf
Eval
Return

*InLr

= *On

/EJECT
****************************************************************
*
S U B R O U T I N E S
*
****************************************************************
/SPACE
*==============================================================*
*
*
* Create a new user space for this job
*
*
*
* Parameters: All parameters used in this routine are based *
*
on pointers -- names prefix by #. (E.g. If you *
*
use @SpaceName, the pointer used is called
*
*
#SpaceName. Prior to executing the routine, *
*
you should have initialized the pointer using *
*
Eval #SpaceName = %addr(@SpaceName).)
*
*
*
* Input:
*
*
@SpcName
Name of the user space to be used *
*
by this routine. This field is
*
*
based on #SpcName. Prior to
*
*
running this routine, it is assumed*
*
that #SpcName has been initialized.*
*
@SpcLib
Name of the library used by the
*
*
space name.
*
*
@SpcSize
Initial size of the user space to *
*
be allocated by the job.
*
*
*
* Output:
*
*
@SpcPtr
Pointer used by the user space
*
*
@MsgId
Error id received when using the *
*
API's. This will be blank If all *
*
executions are sucessful.
*
*
@MsgDta
Message data associated with the *
*
Message Id.
*
*
*
C
$CrtUs
BEGSR
*==============================================================*
*
*----------------------------------------------------*
* Delete any existing user space
*
*----------------------------------------------------*
C
Call
'QUSDLTUS'
C
Parm
@UsNameLib
C
Parm
@ErrData

*----------------------------------------------------*
* Create the user space
*
*----------------------------------------------------*
C
Eval
@ExcpId
= *Blanks
C
Eval
@BytesProv = 200
*
C
Call
'QUSCRTUS'
C
Parm
@UsNameLib
C
Parm
@ExtAttr
C
Parm
@SpcSize
C
Parm
@InitValue
C
Parm
@PubAut
C
Parm
@Text
C
Parm
@Replace
C
Parm
@ErrData
*
C
If
@BytesAval > 0
C
Eval
@MsgId
= @ExcpId
C
Eval
@MsgDta
= @ExcpData
C
Else
*
*----------------------------------------------------*
* Change the user space & expand the size
*
*----------------------------------------------------*
C
Eval
@ExcpId
= *Blanks
C
Eval
@BytesProv = 200
*
C
Call
'QUSCUSAT'
C
Parm
@UsLib
C
Parm
@UsName
C
Parm
@ChgAttr
C
Parm
@ErrData
*
C
If
@BytesAval > 0
C
Eval
@MsgId
= @ExcpId
C
Eval
@MsgDta
= @ExcpData
C
Else
*
*----------------------------------------------------*
* Retrieve pointer to user space
*
*----------------------------------------------------*
C
Call
'QUSPTRUS'
C
Parm
@UsNameLib
C
Parm
@SpcPtr
C
Parm
@ErrData
*
C
EndIf
C
EndIf
*
C
#CrtUs
ENDSR
/EJECT
*==============================================================*
*
*
* Get all record format for the file
*
*
*
C
$RecFmt
BEGSR
*==============================================================*
C
Eval
@ExcpId
= *Blanks
C
Eval
@BytesProv = 200
*----------------------------------------------------*

* List Record Formats (QUSLRCD) API


*
*----------------------------------------------------*
C
Call
'QUSLRCD'
C
Parm
@UsNameLib
C
Parm
@FormatR
C
Parm
@QFile
C
Parm
@OvrdPrc
*
*------------------------------------------*
*
* Look for the generic header format to *
*
* determine how info will be retrieved
*
*
* in the user space.
*
*
*------------------------------------------*
C
Eval
@BytesProv = 200
*
C
Call
'QUSRTVUS'
C
Parm
@UsNameLib
C
Parm
@StartPos
C
Parm
@DataLen
C
Parm
@GenHeader
C
Parm
@ErrData
*
C
If
@BytesAval > 0
C
Eval
@MsgId
= @ExcpId
C
Eval
@MsgDta
= @ExcpData
C
EndIf
*
*
*------------------------------------------*
*
* Determine the size of each entries
*
*
*------------------------------------------*
C
If
@QLstEntSz < 82
C
Eval
@DataLen
= @QLstEntSz
C
Else
C
Eval
@DataLen
= 82
C
EndIf
*
*------------------------------------------*
*
* Retrieve the number of entries
*
*
*------------------------------------------*
C
Eval
@Loop
= @QNoLstEnt
*
*------------------------------------------*
*
* Get the starting position and increased *
*
* the offset by 1 (user space is based on *
*
* base 0, we compute under base 1)
*
*
*------------------------------------------*
C
Eval
@StartEnt = @QOfstLst + 1
*----------------------------------------------------*
* Loop thru the list of record format entries
*
*----------------------------------------------------*
C
Dow
@Loop
> 0
*
C
Call
'QUSRTVUS'
C
Parm
@UsNameLib
C
Parm
@StartEnt
C
Parm
@DataLen
C
Parm
@Receiver1
C
Parm
@ErrData
*
C
If
@200Name
= *Blanks
C
Leave
C
EndIf

*
C
C
C
C
*
*
*
C
C
C

If
@BytesAval > 0
Eval
@MsgId
= @ExcpId
Eval
@MsgDta
= @ExcpData
EndIf
*------------------------------------------*
* Store info into array - up to 99 elem *
*------------------------------------------*
Eval
Rf#
= Rf# + 1
Eval
RfName(Rf#) = @200Name
Eval
RfText(Rf#) = @200Text

*
C
C
C

If
Leave
EndIf
*
*
*
*

C
C
C

Rf#

= 99

*------------------------------------------*
* Position to the record format entry
*
*------------------------------------------*
Eval
@StartEnt = @StartEnt + @QLstEntSz
Eval
@Loop
= @Loop - 1
EndDo

*
C

#RecFmt
ENDSR
/EJECT
*==============================================================*
*
*
* List all the fields per record format & write to source
*
*
*
C
$LstFld
BEGSR
*==============================================================*
C
Eval
@ExcpId
= *Blanks
C
Eval
@BytesProv = 200
*----------------------------------------------------*
* List Fields (QUSLFLD) API
*
*----------------------------------------------------*
C
Call
'QUSLFLD'
C
Parm
@UsNameLib
C
Parm
@FormatF
C
Parm
@QFile
C
Parm
@RecFmt
C
Parm
@OvrdPrc
*
*------------------------------------------*
*
* Look for the generic header format to *
*
* determine how info will be retrieved
*
*
* in the user space.
*
*
*------------------------------------------*
C
Eval
@BytesProv = 200
*
C
Call
'QUSRTVUS'
C
Parm
@UsNameLib
C
Parm
@StartPos
C
Parm
@DataLen
C
Parm
@GenHeader
C
Parm
@ErrData
*
C
If
@BytesAval > 0
C
Eval
@MsgId
= @ExcpId
C
Eval
@MsgDta
= @ExcpData
C
EndIf

*
*
*
*
C
C
C
C
C
*
*
*
C
*
*
*
*
*
C

*------------------------------------------*
* Determine the size of each entries
*
*------------------------------------------*
If
@QLstEntSz < 268
Eval
@DataLen
= @QLstEntSz
Else
Eval
@DataLen
= 268
EndIf
*------------------------------------------*
* Retrieve the number of entries
*
*------------------------------------------*
Eval
@Loop
= @QNoLstEnt
*------------------------------------------*
* Get the starting position and increased *
* the offset by 1 (user space is based on *
* base 0, we compute under base 1)
*
*------------------------------------------*
Eval
@StartEnt = @QOfstLst + 1

*----------------------------------------------------*
* Loop thru the list of record format entries
*
*----------------------------------------------------*
C
Dow
@Loop
> 0
*
C
Call
'QUSRTVUS'
C
Parm
@UsNameLib
C
Parm
@StartEnt
C
Parm
@DataLen
C
Parm
@Receiver2
C
Parm
@ErrData
*
C
If
@100Field = *Blanks
C
Leave
C
EndIf
*
C
If
@BytesAval > 0
C
Eval
@MsgId
= @ExcpId
C
Eval
@MsgDta
= @ExcpData
C
EndIf
C

Eval
*
*
*

C
C
C
C
C
C

LnArray

= *Blanks

*------------------------------------------*
* Field Name, Length, Type, Decimal & Text*
*------------------------------------------*
Eval
TstTxt
= %Trimr('TEXT(''')
%Trim(@100FldTxt)
''')'
Eval
Cont
= @Plus
@100FldTxt
CasNe
*Blanks
$BrkLin
EndCs

*
C
C
C
C
C
C
*

If
Line1
<> *Blanks
Eval
NsKeyword = Line1
EndIf
Eval
NsFormType = 'A'
Eval
NsName
= @100Field
Eval
NsDataType = @100Type
*--Time/Date/Timestamp---------------------*

+
+

If

@100Type

= 'L' or

@100Type

= 'T' or

C
TimeStamp
C
C
*
C
C
*
C
Packed
C
Zoned
C
Binary
C
C
C
C
C
C
C
C
C
C
*
C
2
C
C
C
C
C
C
C
C
C
C
C

@100Type

= 'Z'

Date
Time

*
*
*
C
C
C

Eval
NsLen
= *Blanks
Else
*--Other data type-------------------------*
Eval
NsLen#
= @100FldLen
Eval
NsLen
= %Editc(NsLen#:'Z')
*--Packed/Zoned/Binary---------------------*
If
@100Type
= 'P' or
@100Type

= 'Z' or

@100Type

= 'B'

Eval
Eval
Eval
Eval
EndIf
EndIf
Eval
Eval
Except
Reset

NsLen#
NsLen
NsDec#
NsDec

=
=
=
=

SRCSEQ
SRCDTA
WrtSrc

= SRCSEQ + 1
= NewSource

Do
If
Eval
Eval
Eval
Eval
Except
Reset
Else
Leave
EndIf
EndDo

9
Lin(Ln#)
NsFormType
NsKeyword
SRCSEQ
SRCDTA
WrtSrc

@100Digits
%Editc(NsLen#:'Z')
@100DecPos
%Editc(NsDec#:'Z')

NewSource
<>
=
=
=
=

Ln#
*Blanks
'A'
Lin(Ln#)
SRCSEQ + 1
NewSource
NewSource

*------------------------------------------*
* Column Heading
*
*------------------------------------------*
If
@100ColHdg1<> *Blanks or
@100ColHdg2<> *Blanks or
@100ColHdg3<> *Blanks

*
C
C
C
C
C
C
C
C
C
C
C

Eval
If
Eval
EndIf
If
Eval

TstTxt
= %Trimr('COLHDG(''')
@100ColHdg1<> *Blanks
TstTxt
= %Trimr(TstTxt)
+
%Trim(@100ColHdg1) +
''''
@100ColHdg2<> *Blanks
TstTxt
= %Trimr(TstTxt)
+
' '''
+
%Trim(@100ColHdg2) +
''''

C
C
C
C
C
C
C
C
C
C
C

EndIf
If
Eval

@100ColHdg3<> *Blanks
TstTxt
= %Trimr(TstTxt)
+
' '''
+
%Trim(@100ColHdg3) +
''''

EndIf
Eval

TstTxt

Eval
Exsr

Cont
$BrkLin

Do
If
Eval
Eval
Eval
Eval
Except
Reset
Else
Leave
EndIf
EndDo

10
Lin(Ln#)
NsFormType
NsKeyword
SRCSEQ
SRCDTA
WrtSrc

= %Trimr(TstTxt)
')'
= @Plus

*
C
C
C
C
C
C
C
C
C
C
C
C

<>
=
=
=
=

Ln#
*Blanks
'A'
Lin(Ln#)
SRCSEQ + 1
NewSource
NewSource

*
C

EndIf
*
*
*

*------------------------------------------*
* Alternative field name
*
*------------------------------------------*
If
@100Alias <> *Blanks

*
C
C
C
C
C

Eval

TstTxt

Eval
Exsr

Cont
$BrkLin

Do
If
Eval
Eval
Eval
Eval
Except
Reset
Else
Leave
EndIf
EndDo

10
Lin(Ln#)
NsFormType
NsKeyword
SRCSEQ
SRCDTA
WrtSrc

= %Trimr('ALIAS(')
%Trim(@100Alias)
')'
= @Minus

+
+

*
C
C
C
C
C
C
C
C
C
C
C
C

<>
=
=
=
=

Ln#
*Blanks
'A'
Lin(Ln#)
SRCSEQ + 1
NewSource
NewSource

*
C

EndIf
*
*
*

*------------------------------------------*
* Edit Code
*
*------------------------------------------*
If
@100EdtCde <> *Blanks

*
C
C

Eval
Eval

NsFormType = 'A'
NsKeyword = %Trimr('EDTCDE')

C
C
C
C
C
C

Eval
Eval
Except
Reset

SRCSEQ
SRCDTA
WrtSrc

%Trimr(@100EdtCde) +
')'
= SRCSEQ + 1
= NewSource
NewSource

*
C

EndIf
*
*
*
*
*

*------------------------------------------*
* Date Format
*
*------------------------------------------*
*--Time/Date/Timestamp---------------------*
If
@100Type
= 'L' or

Date
C

@100Type

= 'T' or

@100Type

= 'Z'

Time
C
TimeStamp
*
C
*
C
C
C
C
C
C
C
C
*
C
*
*
*
*
*
C

If

@100DTFmt <> *Blanks

Eval
Eval

NsFormType = 'A'
NsKeyword = %Trimr('DATFMT(')
%Trimr(@100DTFmt)
')'
SRCSEQ
= SRCSEQ + 1
SRCDTA
= NewSource
WrtSrc
NewSource

Eval
Eval
Except
Reset

+
+

EndIf
*------------------------------------------*
* Date Seperator
*
*------------------------------------------*
*--Time/Date-------------------------------*
If
NsDataType = 'L' or

Date
C

NsDataType = 'T'

Time
C

If

@100DTSep <> *Blanks

Eval
Eval

NsFormType = 'A'
NsKeyword = %Trimr('DATSEP(')
%Trimr(@100DTSep)
')'
SRCSEQ
= SRCSEQ + 1
SRCDTA
= NewSource
WrtSrc
NewSource

*
C
C
C
C
C
C
C
C

Eval
Eval
Except
Reset
*
*

C
C
Type = L,T
*
C

EndIf
EndIf
EndIf

+
+

Type = L,T,Z
*
*
*
C
C
C
C
C
C
C
C
*
*
*
*
C
C
C

*------------------------------------------*
* Allow Null
*
*------------------------------------------*
If
@100AlwNull = '1'
Eval
NsFormType = 'A'
Eval
NsKeyword = 'ALWNULL'
Eval
SRCSEQ
= SRCSEQ + 1
Eval
SRCDTA
= NewSource
Except
WrtSrc
Reset
NewSource
EndIf
*------------------------------------------*
* Position to the record format entry
*
*------------------------------------------*
Eval
@StartEnt = @StartEnt + @QLstEntSz
Eval
@Loop
= @Loop - 1
EndDo

*
C

#LstFld
ENDSR
/EJECT
*==============================================================*
*
*
* List all the key fields per record format & write to source *
*
*
C
$LstKFld
BEGSR
*==============================================================*
C
If
Key#
> 0
C
Eval
NsComment = '*'
C
Eval
SRCSEQ
= SRCSEQ + 1
C
Eval
SRCDTA
= NewSource
C
Except
WrtSrc
C
Reset
NewSource
C
EndIf
*
C
Do
Key#
*----------------------------------------------------*
* Write key field & keywords to source
*
*----------------------------------------------------*
C
Eval
NsFormType = 'A'
C
Eval
NsNameType = 'K'
C
Eval
NsName
= KeyFld
C
Eval
NsKeyword = %Trimr(KeySeq) + ' ' +
C
%Trimr(KeySign) + ' ' +
C
%Trimr(KeyZone)
C
Eval
SRCSEQ
= SRCSEQ + 1
C
Eval
SRCDTA
= NewSource
C
Except
WrtSrc
C
Reset
NewSource
*----------------------------------------------------*
* Read the next key from QAFDACCP
*
*----------------------------------------------------*
C
Read
QAFDACCP
90
C
If
*In90
C
Leave
C
EndIf
*
*------------------------------------------*
*
* Get Key information
*

*
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
*
*
*
C
C
C
C
C
C
C
C
*
*
*
C
C
C
C
C

*------------------------------------------*
Eval
KeyFld
= APKEYF
If
APKSEQ
= 'A'
Eval
KeySeq
= @Ascend
Else
Eval
KeySeq
= @Descend
EndIf
If
APKSIN
= @Yes
Eval
KeySign
= @Signed
Else
Eval
KeySign
= @Unsigned
EndIf
If
APKZD
= @Yes
Eval
KeyZone
= @Zone
Else
Eval
KeyZone
= @NotZone
EndIf
*------------------------------------------*
* Get Pfile info if different
*
*------------------------------------------*
If
APJOIN
= @No and
APFATR
= 'LF'
If
Pfile
<> APBOF
Eval
Pfile
= APBOF
Eval
Pf#
= Pf# + 1
Eval
PfInfo(Pf#) = APBOF
EndIf
EndIf
*------------------------------------------*
* Make sure the same record format
*
*------------------------------------------*
If
APBOLF
<> *Blanks and
LFFormat <> @RecFmt
Eval
LFFormat
= APBOLF
Leave
EndIf

*
C

Enddo
*

#LstKFld
ENDSR
/EJECT
*==============================================================*
*
*
* List Join keywords
*
*
*
C
$LstJoin
BEGSR
*==============================================================*
C
Eval
LnArray
= *Blanks
*----------------------------------------------------*
* Write JFILE keyword
*
*----------------------------------------------------*
C
Eval
TstTxt
= %Trimr('JFILE(')
C
Do
Jf#
Fil#
C
If
Fil#
= 1
C
Eval
TstTxt
= %Trimr(TstTxt) + JfInfo(Fil#)
C
Else
C
Eval
TstTxt
= %Trimr(TstTxt) + ' ' +
C
JfInfo(Fil#)
C
EndIf
C
Enddo

C
C
C

Eval
Eval
Exsr

TstTxt
Cont
$BrkLin

= %Trimr(TstTxt) + ')'
= @Plus

*
C
C
C
C
C
C
C
C
C
C
C
C

Do
10
Ln#
If
Lin(Ln#) <> *Blanks
Eval
NsFormType = 'A'
Eval
NsKeyword = Lin(Ln#)
Eval
SRCSEQ
= SRCSEQ + 1
Eval
SRCDTA
= NewSource
Except
WrtSrc
Reset
NewSource
Else
Leave
EndIf
EndDo
*----------------------------------------------------*
* Write JOIN & JFLD keywords
*
*----------------------------------------------------*
C
1
Chain
QAFDJOIN
92
C
Dow
Not *In92
C
If
JNJFRM
> *Zero
and
C
JNJTO
> *Zero
C
If
CurJFiles <> SavJFiles
C
Eval
SVJFNM
= JNJFNM
C
Eval
SVJTNM
= JNJTNM
*
*------------------------------------------*
*
* JOIN keyword
*
*
*------------------------------------------*
C
Eval
NsFormType = 'A'
C
Eval
NsNameType = 'J'
C
Eval
NsKeyword = %Trimr('JOIN(') +
C
%Trimr(JNJFNM) + ' ' +
C
%Trimr(JNJTNM) + ')'
C
Eval
SRCSEQ
= SRCSEQ + 1
C
Eval
SRCDTA
= NewSource
C
Except
WrtSrc
C
Reset
NewSource
*
*------------------------------------------*
*
* JFLD keyword
*
*
*------------------------------------------*
C
Eval
NsFormType = 'A'
C
Eval
NsKeyword = %Trimr('JFLD(') +
C
%Trimr(JNJFD1) + ' ' +
C
%Trimr(JNJFD2) + ')'
C
Eval
SRCSEQ
= SRCSEQ + 1
C
Eval
SRCDTA
= NewSource
C
Except
WrtSrc
C
Reset
NewSource
C
EndIf
C
EndIf
C
Read
QAFDJOIN
92
C
EndDo
*
C
#LstJoin
ENDSR
/EJECT
*==============================================================*
*
*
* List all select / omit fields per record format & write
*
*
*

$LstSelO
BEGSR
*==============================================================*
*
C
1
Chain
QAFDSELO
91
C
Dow
Not *In91
C
If
SORFMT
= @RecFmt
*----------------------------------------------------*
* Write select / omit keywords to source
*
*----------------------------------------------------*
C
Eval
NsFormType = 'A'
C
Eval
NsNameType = SORULE
C
Eval
NsName
= SOFLD
C
If
SOCOMP
= 'AL'
C
Eval
NsKeyword = 'ALL'
C
Else
C
Eval
NsKeyword = %Trimr('COMP(')
+
C
%Trimr(SOCOMP)
+
C
' '
+
C
%Trimr(SOVALU)
+
C
')'
C
EndIf
C
Eval
SRCSEQ
= SRCSEQ + 1
C
Eval
SRCDTA
= NewSource
C
Except
WrtSrc
C
Reset
NewSource
C
EndIf
C
Read
QAFDSELO
91
C
EndDo
*
C
#LstSelO
ENDSR
/EJECT
*==============================================================*
*
*
* Print Standard DDS Labels
*
*
*
C
$StdLbl
BEGSR
*==============================================================*
C
1
Do
24
Lbl#
C
Eval
SRCSEQ
= SRCSEQ + 1
C
Eval
SRCDTA
= Lbl(Lbl#)
C
Select
*
*------------------------------------------*
*
* Database Label
*
*
*------------------------------------------*
C
When
Lbl#
= 8
C
If
ObjAtr
= 'PF'
C
Eval
%Subst(SRCDTA: 10: 20) = @PF
C
Else
C
Eval
%Subst(SRCDTA: 10: 20) = @LF
C
EndIf
C
Eval
%Subst(SRCDTA: 32: 10) = File
*
*------------------------------------------*
*
* Text Label
*
*
*------------------------------------------*
C
When
Lbl#
= 9
C
Eval
%Subst(SRCDTA: 32: 34) = Text
*
*------------------------------------------*
*
* Date Label
*
*
*------------------------------------------*
C
When
Lbl#
= 10

C
C
C
C
C
C

Eval
When
Eval
EndSl
Except
Enddo

%Subst(SRCDTA: 32: 32) = DateTxt


Lbl#
= 22
%Subst(SRCDTA: 9: 8) = DateMDY
WrtSrc

*----------------------------------------------------*
* Build fields used for file level keywords. Read *
* the first record of QAFDACCP for this info.
*
*----------------------------------------------------*
C
Read
QAFDACCP
C
If
*In90
C
Eval
RtnCde
= '99'
C
Else
*
*
*------------------------------------------*
*
* Get Access path order of key
*
*
*------------------------------------------*
C
Select
C
When
APKEYO
= 'L'
C
Eval
KeyOrder
= 'LIFO'
C
When
APKEYO
= 'F'
C
Eval
KeyOrder
= 'FIFO'
C
When
APKEYO
= 'C'
C
Eval
KeyOrder
= 'FCFO'
C
EndSl
*
*------------------------------------------*
*
* Is key UNIQUE
*
*
*------------------------------------------*
C
Eval
Unique
= APUNIQ
*
*------------------------------------------*
*
* Access path: A-Arrival, K-Keyed
*
*
*------------------------------------------*
C
Eval
Keyed
= APACCP
*
*------------------------------------------*
*
* Select/Omit file: Y-Yes, N-No
*
*
*------------------------------------------*
C
Eval
SelOmt
= APSELO
C
If
SelOmt
= @Yes
C
Open
QAFDSELO
C
EndIf
*
*------------------------------------------*
*
* Join logical file: Y-Yes, N-No
*
*
*------------------------------------------*
C
Eval
Join
= APJOIN
C
If
APJOIN
= @Yes
C
Open
QAFDJOIN
C
Eval
*In92
= *Off
C
Eval
JFile
= *Blanks
*
C
Dow
Not *In92
C
Read
QAFDJOIN
C
If
Not *In92 and
C
JFile
<> JNDNAM
C
Eval
JFile
= JNDNAM
C
Eval
Jf#
= Jf# + 1
C
Eval
JfInfo(Jf#) = JNDNAM
C
EndIf
C
EndDo

90

92

C
*
*
*
C
C
C
C
C
C
C
*
*
*
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
*
*
*
C
C
C
C
C
C
C
C

Else
*------------------------------------------*
* Based on Physical File - for LF only
*
*------------------------------------------*
If
APFATR
= 'LF'
Eval
PfAccess
= APNSCO
Eval
Pfile
= APBOF
Eval
Pf#
= Pf# + 1
Eval
PfInfo(Pf#) = APBOF
EndIf
EndIf
*------------------------------------------*
* Get Key information (& First Key Field) *
*------------------------------------------*
Eval
Key#
= APNKYF
Eval
KeyFld
= APKEYF
Eval
LFFormat
= APBOLF
If
APKSEQ
= 'A'
Eval
KeySeq
= @Ascend
Else
Eval
KeySeq
= @Descend
EndIf
If
APKSIN
= @Yes
Eval
KeySign
= @Signed
Else
Eval
KeySign
= @Unsigned
EndIf
If
APKZD
= @Yes
Eval
KeyZone
= @Zone
Else
Eval
KeyZone
= @NotZone
EndIf
*------------------------------------------*
* Get Access path maintenance
*
*------------------------------------------*
Select
When
APMANT
= 'R'
Eval
Maint
= '*REBLD'
When
APMANT
= 'D'
Eval
Maint
= '*DLY'
Other
Eval
Maint
= '*IMMED'
EndSl

*
*----------------------------------------------------*
* File Level Keywords
*
*----------------------------------------------------*
C
Reset
NewSource
*
*------------------------------------------*
*
* UNIQUE
*
*
*------------------------------------------*
C
If
Unique
= @Yes
C
Eval
NsFormType = 'A'
C
Eval
NsKeyword = @Unique
C
Eval
SRCSEQ
= SRCSEQ + 1
C
Eval
SRCDTA
= NewSource
C
Except
WrtSrc
C
Reset
NewSource
C
Else
*
*------------------------------------------*

*
*
C
C
C
C
C
C
C
C
C

* FCFO, FIFO or LIFO


*
*------------------------------------------*
If
KeyOrder <> *Blanks
Eval
NsFormType = 'A'
Eval
NsKeyword = KeyOrder
Eval
SRCSEQ
= SRCSEQ + 1
Eval
SRCDTA
= NewSource
Except
WrtSrc
Reset
NewSource
EndIf
EndIf

*
C

EndIf
*

#StdLbl
ENDSR
/EJECT
*==============================================================*
*
*
* Break Text Line to Line 1, 2 & 3
*
*
*
C
$BrkLin
BEGSR
*==============================================================*
C
Eval
LnArray
= *Blanks
C
' '
Checkr
TstTxt
TxtLen
C
MoveA
'1000000000' *In(21)
*----------------------------------------------------*
* Continuation tag is minus
*
*----------------------------------------------------*
C
If
Cont
= @Minus
C
Dow
TxtLen
> 0
*
*------------------------------------------*
*
* Check if TstTxt is less than / equal 36 *
*
*------------------------------------------*
C
If
TxtLen
<= 36
C 21
Eval
Line1
= TstTxt
C 22
Eval
Line2
= TstTxt
C 23
Eval
Line3
= TstTxt
C 24
Eval
Line4
= TstTxt
C 25
Eval
Line5
= TstTxt
C 26
Eval
Line6
= TstTxt
C 27
Eval
Line7
= TstTxt
C 28
Eval
Line8
= TstTxt
C 29
Eval
Line9
= TstTxt
C 30
Eval
Line10
= TstTxt
C
Leave
C
Else
*
*------------------------------------------*
*
* Greater than 36, break text
*
*
*------------------------------------------*
C
Eval
TstTxt
= %Trim(TstTxt)
C
Eval
Remain
= 1
C
Eval
Scan
= 1
C
Dow
Remain
< 36
C
' '
Scan
TstTxt:Scan Scan
C
If
Scan
= 0
C
Leave
C
Else
C
Eval
Remain
= Scan - 1
C
Eval
Scan
= Scan + 1
C
EndIf

EndDo

C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C

21
22
23
24
25
26
27
28
29
30
21
22
23
24
25
26
27
28
29
30

If
Eval
Eval
Eval
Eval
Eval
Eval
Eval
Eval
Eval
Eval
Leave
Else
Eval
Eval
Eval
Eval
Eval
Eval
Eval
Eval
Eval
Eval
EndIf
EndIf

Remain
Line1
Line2
Line3
Line4
Line5
Line6
Line7
Line8
Line9
Line10

<=
=
=
=
=
=
=
=
=
=
=

Line1
Line2
Line3
Line4
Line5
Line6
Line7
Line8
Line9
Line10

=
=
=
=
=
=
=
=
=
=

36
TstTxt
TstTxt
TstTxt
TstTxt
TstTxt
TstTxt
TstTxt
TstTxt
TstTxt
TstTxt
%Subst(TstTxt:
%Subst(TstTxt:
%Subst(TstTxt:
%Subst(TstTxt:
%Subst(TstTxt:
%Subst(TstTxt:
%Subst(TstTxt:
%Subst(TstTxt:
%Subst(TstTxt:
TstTxt

1:
1:
1:
1:
1:
1:
1:
1:
1:

35)
35)
35)
35)
35)
35)
35)
35)
35)

+
+
+
+
+
+
+
+
+

'-'
'-'
'-'
'-'
'-'
'-'
'-'
'-'
'-'

*
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C

Select
When
MoveA
When
MoveA
When
MoveA
When
MoveA
When
MoveA
When
MoveA
When
MoveA
When
MoveA
When
MoveA
When
Leave
EndSl
Eval
Eval
Enddo
Else

*In21
'0100000000'
*In22
'0010000000'
*In23
'0001000000'
*In24
'0000100000'
*In25
'0000010000'
*In26
'0000001000'
*In27
'0000000100'
*In28
'0000000010'
*In29
'0000000001'
*In30
TxtLen
TstTxt

*In(21)
*In(21)
*In(21)
*In(21)
*In(21)
*In(21)
*In(21)
*In(21)
*In(21)

= TxtLen - 35
= %Subst(TstTxt: 36: TxtLen)

*
*----------------------------------------------------*
* Continuation tag is plus
*
*----------------------------------------------------*
C
Eval
BrkPos
= 1
C
Dow
TxtLen
> 0

*
*
*
C
C
C
C
C
C
C
C
C
C
C
C
C

21
22
23
24
25
26
27
28
29
30
*
*
*

C
C
C
C
C
C
C
C
C
C
C
C
C

'

C
C
C
C
C
C
C
C
C
C
C

21
22
23
24
25
26
27
28
29
30

*------------------------------------------*
* Check if TstTxt is less than / equal 34 *
*------------------------------------------*
If
TxtLen
<= 34
Eval
Line1
= TstTxt
Eval
Line2
= TstTxt
Eval
Line3
= TstTxt
Eval
Line4
= TstTxt
Eval
Line5
= TstTxt
Eval
Line6
= TstTxt
Eval
Line7
= TstTxt
Eval
Line8
= TstTxt
Eval
Line9
= TstTxt
Eval
Line10
= TstTxt
Leave
Else
*------------------------------------------*
* Greater than 34, break text
*
*------------------------------------------*
Eval
Txt34
= %Subst(TstTxt: 1: 34)
Eval
Txt34
= %Trim(Txt34)
Eval
Remain
= 1
Eval
Scan
= 1
Dow
Remain
< 34
'
Scan
Txt34:Scan
Scan
If
Scan
= 0
Leave
Else
Eval
Remain
= Scan - 1
Eval
Scan
= Scan + 1
EndIf
EndDo
Eval
Eval
Eval
Eval
Eval
Eval
Eval
Eval
Eval
Eval
EndIf

Line1
Line2
Line3
Line4
Line5
Line6
Line7
Line8
Line9
Line10

Select
When
MoveA
When
MoveA
When
MoveA
When
MoveA
When
MoveA
When
MoveA
When
MoveA

*In21
'0100000000'
*In22
'0010000000'
*In23
'0001000000'
*In24
'0000100000'
*In25
'0000010000'
*In26
'0000001000'
*In27
'0000000100'

=
=
=
=
=
=
=
=
=
=

%Subst(Txt34:
%Subst(Txt34:
%Subst(Txt34:
%Subst(Txt34:
%Subst(Txt34:
%Subst(Txt34:
%Subst(Txt34:
%Subst(Txt34:
%Subst(Txt34:
TstTxt

*
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C

*In(21)
*In(21)
*In(21)
*In(21)
*In(21)
*In(21)
*In(21)

1:
1:
1:
1:
1:
1:
1:
1:
1:

Remain)
Remain)
Remain)
Remain)
Remain)
Remain)
Remain)
Remain)
Remain)

+
+
+
+
+
+
+
+
+

'
'
'
'
'
'
'
'
'

+'
+'
+'
+'
+'
+'
+'
+'
+'

C
C
C
C
C
C
C
C
C
C
C

When
MoveA
When
MoveA
When
Leave
EndSl
Eval
Eval
Eval
EndDo

*In28
'0000000010' *In(21)
*In29
'0000000001' *In(21)
*In30
BrkPos
TxtLen
TstTxt

= Remain + 2
= TxtLen - Remain
= %Subst(TstTxt: BrkPos: TxtLen)

*
C

EndIf
*

MoveA

LnArray

Lin

*
#BrkLin
ENDSR
/EJECT
****************************************************************
*
O U T P U T
S P E C I F I C A T I O N
*
****************************************************************
OQDDSSRC EADD
WRTSRC
O
SRCSEQ
O
SRCDAT
O
SRCDTA
** LBL Source label
A*--------------------------------------------------------------*
A* Source Retrieval from Retrieve Database Source (RTVDBSRC) *
A*
*
A*
\\\\\\\
*
A*
( o o )
*
A*---------------------oOOO----(_)----OOOo----------------------*
A*
*
A* Database File. . . :
*
A* Text . . . . . . . :
*
A* Date . . . . . . . :
*
A*
*
A*
OOOOO
OOOOO
*
A*
(
)
(
)
*
A*--------------------( )-------------( )-------------------*
A*
(_)
(_)
*
A*
*
A* MODIFICATION LOG :
*
A*
*
A*
Task Programmer/
*
A* Date
No. Description
*
A* ======== ====== ========================================== *
A*
Creation Date
*
A*
*
A*--------------------------------------------------------------*


También podría gustarte