FWIW, here's a copy of a program and command which Gene Gaunt wrote, which
is about as thorough as I have ever found - it's in RPGLE, not C, but for
anyone who wants to understand this API, it's the bomb.
On Mon, Aug 18, 2014 at 12:05 AM, Frank Kolmann <fkolmann@xxxxxxxxx> wrote:
Thanks Bryan
That is a help.  In fact I looked at this before but could not make head or
tail of it.
Now I know C and having written an RPG version it makes sense.
I hope IBM wont mind if I use their coding constructs.
Regards
Frank
*Subject: Re: Struggling with API QDFRTVFD
*From: Bryan Dietz <bdietz400@xxxxxxxxx>
*Date: Tue, 12 Aug 2014 16:36:30 -0400
I just did a Google search "QDFRTVFD site:ibm.com"
which returned a "C" example for the API
"This document contains an example of how to retrieving the Row/Column
of a Field Using the QDFRTVFD API."
http://www-01.ibm.com/support/docview.wss?uid=nas8N1017486
bryan
--
This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L)
mailing list
To post a message email: C400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/c400-l
or email: C400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/c400-l.
/*********************************************************************/
/*  COMMAND  - DSPDSPF                                               */
/*  FUNCTION - Display a Display File                                */
/*  AUTHOR   - Gene Gaunt                                            */
/*********************************************************************/
     CMD   PROMPT('Display a Display File')
     PARM  KWD(FILE) +
           TYPE(Q1) +
           MIN(1) +
           PROMPT('Display file')
Q1:  QUAL  TYPE(*NAME) +
           MIN(1)
     QUAL  TYPE(*NAME) +
           DFT(*LIBL) +
           SPCVAL((*CURLIB) (*LIBL)) +
           PROMPT('Library')
     PARM  KWD(TYPE) +
           TYPE(*CHAR) +
           LEN(4) +
           RSTD(*YES) +
           DFT(*PIC) +
           VALUES(*PIC *HEX) +
           PROMPT('Print pictures or hex dump')
     PARM  KWD(LINES) +
           TYPE(*DEC) +
           LEN(3) +
           DFT(66) +
           RANGE(1 255) +
           PROMPT('Lines per page')
     PARM  KWD(LPI) +
           TYPE(*CHAR) +
           LEN(3) +
           RSTD(*YES) +
           DFT(6) +
           VALUES(3  4  6  7.5  7,5  8  9  12) +
           PROMPT('Lines per inch')
     PARM  KWD(CPI) +
           TYPE(*CHAR) +
           LEN(4) +
           RSTD(*YES) +
           DFT(10) +
           VALUES(5  10  12  13.3  13,3  15  16.7  16,7  18  20) +
           PROMPT('Characters per inch')
**********************************************************************************************
      *  PROGRAM  - DSPDSPF
*
      *  FUNCTION - Display a Display File (CPP for DSPDSPF command)
*
      *  LANGUAGE - ILE RPG/400
*
      *  AUTHOR   - Gene Gaunt
*
**********************************************************************************************
     H dftactgrp(*no) actgrp('QILE') bnddir('QC2LE')
     FQSYSPRT   O    F  198        printer oflind(*INOF) usropn
     D Out             S            198A
     D Raw             S             32A
     D Top             S             16A   based( Top@ )
     D Base            S              1A   based( Base@ )
     D MessageTypes    S             30A   inz( '*COMP     *DIAG
*ESCAPE' )
     D Form1Max        C                   const( 141 )
     D Form3Max        C                   const( 182 )
     D Resolve         S             10I 0 dim( Form1Max )
     D Form1           S             13A   dim( Form1Max ) perrcd( 1 )
ctdata
     D Form2           S             50A   dim( Form1Max ) alt( Form1 )
     D Form3           S            100A   dim( Form3Max ) perrcd( 1 )
ctdata
     D Form3@          S               *   inz( %addr( Form3 ))
     D                 DS                  based( Form3@ )
     D Form3Array                   100A   dim( Form3Max )
     D   Child                        3S 0 overlay( Form3Array :  1 )
     D   Parent                       3S 0 overlay( Form3Array : 11 )
     D   DefStr                       3S 0 overlay( Form3Array : 21 )
     D   DefOff                       2S 0 overlay( Form3Array : 26 )
     D   DefBin                       1A   overlay( Form3Array : 29 )
     D   AryStr                       3S 0 overlay( Form3Array : 36 )
     D   AryOff                       2S 0 overlay( Form3Array : 41 )
     D   AryLen                       2S 0 overlay( Form3Array : 44 )
     D   DpnStr                       3S 0 overlay( Form3Array : 52 )
     D   DpnOff                       2S 0 overlay( Form3Array : 57 )
     D   DpnHex                       4A   overlay( Form3Array : 60 )
     D   DpnEqu                       1A   overlay( Form3Array : 65 )
     D   DpnBit                       1A   overlay( Form3Array : 67 )
     D   DpnBi2                       5I 0 overlay( Form3Array : 67 )
     D BoxCol          S              5P 0
box column
     D BoxPlace        S              5P 0
box place
     D BoxRow          S              5P 0
box row
     D Buttons         S               N
buttons flag
     D CatDispl        S             11P 0
category displacemnt
     D CatIdent        S              1A
category identifier
     D CatKeyId        S              2A
cat & keyword ident
     D CatStrng        S             11P 0
category string
     D CatTotal        S              5P 0
category total
     D ChcCols         S              5P 0
choice columns
     D ChcHavEx        S               N
choices have extensn
     D ChcHoriz        S               N
choices are horizont
     D ChcLen          S              5P 0
choice length
     D ChcStrng        S             11P 0
choice string
     D ChcStruc        S             11P 0
choice structure
     D ChcRows         S              5P 0
choice rows
     D ChcText         S            256A
choice text
     D ChcWidth        S              5P 0
choice width
     D DecPos          S              5P 0
decimal positions
     D EditLen         S              5P 0
edit length
     D FileDvDp        S             11P 0
file device dependnt
     D FileHdr         S             11P 0
file header
     D FileWhUs        S             11P 0
file where-used
     D FldCol          S              5P 0
field column
     D FldDevDp        S             11P 0
field device-dependn
     D FldExtn         S             11P 0
field extension
     D FldHdr          S             11P 0
field header
     D FldIdxTa        S             11P 0
field index table
     D FldLen          S              5P 0
field length
     D FldPlace        S              5P 0
field place
     D FldRow          S              5P 0
field row
     D FldUsage        S              1A
field usage
     D FldWhUs         S             11P 0
field where-used
     D FootBit         S               N
title is in footer
     D FootBord        S            198A
footer border text
     D HeadBord        S            198A
header border text
     D InpBuf          S              5P 0
input buffer pos
     D KeyStrng        S             11P 0
keyword string
     D KeyTotal        S              5P 0
keyword total
     D Kshift          S              1A
keyboard shift
     D MnemoPos        S              5P 0
mnemonic position
     D NameIdx         S              5P 0
name index
     D NameTab         S             11P 0
name table
     D OutBuf          S              5P 0
output buffer pos
     D PanDepth        S              5P 0
panel depth
     D PanWidth        S              5P 0
panel width
     D RecDevDp        S             11P 0
record device-depndt
     D RecFmTab        S             11P 0
record format table
     D RecHdr          S             11P 0
record header
     D RecMax          S              5P 0
number of records
     D RecWhUs         S             11P 0
record where-used
     D RecName         S             10A
record name
     D RowColTa        S             11P 0
row-column table
     D ScrSizes        S              5P 0
screen sizes
     D ScrSizId        S              3P 0
screen size ident
     D TitleLen        S              5P 0
title length
     D TitleTxt        S            256A
title text
     D TotChoic        S              5P 0
total choices
     D TotField        S              5P 0
total fields
     D X_Header        S             11P 0
file/rec/fld header
     D                 DS
     D Picture                     3564A
screen to print
     D Pic                            1A   dim(3564) overlay(Picture)
as linear array
     D UndLine                     3564A
underlines to print
     D Und                            1A   dim(3564) overlay(UndLine)
as linear array
     D ChcIndex                       2A
choice index
     D ChcIndx2                       2S 0 overlay( ChcIndex )
as numeric
     D RepMax          S              5P 0
report index
     D                 DS
report buckets
     D Report                         8A   dim( 9999 )
     D   Report1                      3P 0 overlay( Report : 1 ) inz(
*hival )
     D   Report2                     11P 0 overlay( Report : 3 ) inz(
*hival )
     D Data            DS           256
     D   Bin                         10I 0
     D   Need                        10I 0
     D Bit             PR              N
     D                               11P 0 const
     D                                1A   const
     D Get             PR           256A
     D                               11P 0 const
     D                               11P 0 const
     D U1              PR            11P 0
     D                               11P 0 const
     D I2              PR            11P 0
     D                               11P 0 const
     D I4              PR            11P 0
     D                               11P 0 const
     D DumpHex         PR
     D                                3P 0 const
     D                                3P 0 const
     D                               10I 0 value dim( Form1Max )
     D CVTHC           PR                  extproc( 'cvthc' )
     D                                 *   value
     D                                 *   value
     D                               10I 0 value
     D CVTCH           PR                  extproc( 'cvtch' )
     D                                 *   value
     D                                 *   value
     D                               10I 0 value
     D Prop            PR                  extproc('__memset')
     D                                 *   value
     D                                1A   value
     D                               10U 0 value
     D OS400           PR                  extpgm('QCMDEXC')
     D                             3000A   const options(*varsize)
     D                               15P 5 const
     C     *entry        plist
     C                   parm                    Object           20
     C                   parm                    ReportType        4
     C                   parm                    Lines             3 0
     C                   parm                    PageLPI           3
     C                   parm                    PageCPI           4
      *  check if object exists
     C                   move      *on           *INLR
     C                   time                    Time6             6 0
     C                   call(e)   'QUSROBJD'
retrieve object desc
     C                   parm                    Data
receiver variable
     C                   parm      256           Bin
receiver length
     C                   parm      'OBJD0100'    ApiFormat         8
API format name
     C                   parm                    Object
object and library
     C                   parm      '*FILE'       ObjectType       10
object type
     C                   if        %error
     C                   exsr      MoveMessage
     C                   endif
     C     10            subst     Data:9        File             10
extract file name
     C     10            subst     Data:39       Lib              10
extract library name
     C     File          cat       Lib           FileLib          21
extract both
      *  copy display file into heap space
     C                   call(e)   'QDFRTVFD'
retrieve disply file
     C                   parm                    Data
receiver variable
     C                   parm      8             Bin
receiver length
     C                   parm      'DSPF0100'    ApiFormat
API format name
     C                   parm                    FileLib
file and library
     C                   parm      X'00000000'   ApiError
standard API error
     C                   if        %error
     C                   exsr      MoveMessage
     C                   endif
     C                   alloc     Need          Base@
get heap space
     C                   call(e)   'QDFRTVFD'
retrieve disply file
     C                   parm                    Base
receiver variable
     C                   parm                    Need
receiver length
     C                   parm      'DSPF0100'    ApiFormat
API format name
     C                   parm                    FileLib
file and library
     C                   parm      X'00000000'   ApiError
standard API error
     C                   if        %error
     C                   exsr      MoveMessage
     C                   endif
      *  open the printer file
     C                   callp(e)  OS400('OVRPRTF FILE(QSYSPRT) '
+
     C                             'SPLFNAME(' + File + ') '
+
     C                             'USRDTA(''dspdspf'') '
+
     C                             'LPI(' + PageLPI + ') '
+
     C                             'CPI(' + PageCPI + ') '
+
     C                             'PAGESIZE(' + %editc(Lines:'3') + ' 198)
' +
     C                             'OVRFLW(' + %editc(Lines:'3') + ')':256)
     C                   if        %error
     C                   exsr      MoveMessage
     C                   endif
     C                   open      QSYSPRT
     C                   eval      FileLib = %trim( Lib ) + '/' + %trim(
File )
      *  print a report
     C                   select
     C     '*PIC'        wheneq    ReportType
     C                   exsr      PrtPicture
screen pictures
     C     '*HEX'        wheneq    ReportType
     C     1             do        Form3Max      X                 5 0
loop through form
     C     DpnStr( X )   ifgt      *zeros
if dependency exists
     C                   callp     CVTCH( %addr( DpnBi2( X )) :
convert to binary
     C                                    %addr( DpnHex( X )) : 4 )
     C                   endif
     C                   enddo
     C                   z-add     -1            Resolve
unresolve everything
     C                   z-add     *zeros        Resolve( 1 )
except for QDFFBASE
     C                   callp     DumpHex( 1 : 1 : Resolve )
recursive descent
     C                   endsl
     C                   close     QSYSPRT
     C                   dealloc                 Base@
     CSR   MoveMessage   begsr
     C                   call      'QMHMOVPM'
move program message
     C                   parm                    MessageKey        4
blank message key
     C                   parm                    MessageTypes
three message types
     C                   parm      X'00000003'   NumberOfTypes     4
number of types
     C                   parm      '*'           ProgramQueue     10
our program queue
     C                   parm      X'00000002'   StackCounter      4
hop over PEP
     C                   parm      X'00000000'   ApiError          4
standard API error
     C                   return
return to caller
     C                   endsr
      *  get file-level information
     CSR   PrtPicture    begsr
     C                   eval      FileHdr  = I2( 8 )
get file header
     C                   eval      RecMax   = I2( 10 ) - 1
number of records
     C                   eval      ScrSizes = I2( 13 ) - 1
number of sizes
     C                   eval      FileWhUs = FileHdr  + I4( FileHdr +  4 )
file where-used
     C                   eval      FileDvDp = FileHdr  + I2( FileHdr + 34 )
file device dependnt
     C                   eval      RecWhUs  = FileWhUs + I2( FileWhUs )
first record wh-used
     C                   eval      NameTab  = FileWhUs + I4( FileWhUs + 8 )
component name table
     C                   eval      CatDispl = I2( FileDvDp + 24 )
category displacemnt
     C                   eval      X_Header = FileHdr
use file header
     C                   exsr      Keywords
file-level keywords
      *  loop through each record format
     C     0             do        RecMax        Rx                5 0
loop thru records
     C                   eval      RecFmTab = FileHdr + I4( FileHdr ) + Rx
* 16 record format table
     C                   eval      RecName  = Get( RecFmTab : 10 )
get record name
     C                   if        %subst( RecName : 1 : 1 ) <> '*'
if not compiler-gen
     C                   eval      RecHdr   = FileHdr + I4( RecFmTab + 12 )
record header
     C                   eval      RecDevDp = RecHdr + I2( RecHdr + 28 )
record device-depndt
     C                   eval      FldIdxTa = RecHdr + I4( RecHdr + 4 )
field index table
     C                   eval      TotField = I2( RecHdr + 16 ) - 1
total fields
      *  loop through each screen size
     C     0             do        ScrSizes      SizIdx            5 0
loop thru sizes
     C                   eval      ScrSizId = U1( 19 + SizIdx * 5 )
screen size ident
     C                   select
     C     3             wheneq    ScrSizId
if *DS3 dimension
     C                   eval      PanDepth = 24
panel depth
     C                   eval      PanWidth = 80
panel width
     C     4             wheneq    ScrSizId
if *DS4 dimension
     C                   eval      PanDepth = 27
panel depth
     C                   eval      PanWidth = 132
panel width
     C                   other
     C                   iter
     C                   endsl
     C                   eval      TitleLen = -1
title length
     C                   eval      RowColTa = RecHdr + I4( RecDevDp )
row-column table
     C                                 + SizIdx * ( 6 + 2 * ( 1 + TotField
))
     C                   eval      CatDispl = I2( RecDevDp + 32 )
get category displac
     C                   eval      X_Header = RecHdr
use record header
     C                   exsr      Keywords
record-level keywrds
     C                   eval      Picture  = *blanks
prepare screen pic
     C                   eval      UndLine  = *blanks
prepare screen pic
      *  loop through each field
     C     0             do        TotField      FldIdx            5 0
loop thru fields
     C                   exsr      FieldInfo
get field informatin
     C                   eval      CatDispl = I2( FldDevDp + 4 )
get category displac
     C                   eval      X_Header = FldHdr
use field header
     C                   exsr      Keywords
field-level keywords
     C                   if            FldRow   <= PanDepth
if within screen
     C                             and FldUsage <> 'C' and not Buttons
and not a constant
     C                   eval      EditLen = I2( FldIdxTa + 6 + FldIdx * 8
)    get edit length
     C                   callp     Prop( %addr( Pic( FldPlace )) :
propogate usage
     C                                                  FldUsage : EditLen
)
     C                   if        FldUsage = 'B' or FldUsage = 'I'
if <B>oth or <I>nput
     C                   callp     Prop( %addr( Und( FldPlace )) :
propogate underline
     C                                                       '_' : EditLen
)
     C                   endif
     C                   endif
     C                   enddo
      *  prepare top and bottom borders
     C                   eval      HeadBord = *blanks
clear previous stuff
     C                   callp     Prop( %addr( HeadBord ) : '.' : PanWidth
)   propogate border
     C                   eval      FootBord = HeadBord
propogate border
     C                   if        TitleLen > 0 and TitleLen <= PanWidth
if title exists
     C                   eval      X = ( PanWidth - TitleLen ) / 2 + 1
find center
     C                   if        FootBit
if title in footer
     C                   eval      %subst( FootBord : X : TitleLen ) =
TitleTxt   insert title text
     C                   else
if title in header
     C                   eval      %subst( HeadBord : X : TitleLen ) =
TitleTxt   insert title text
     C                   endif
     C                   endif
      *  print a screen picture
     C                   except    HEAD
print heading
     C                   eval      Out = '.' + %trim( HeadBord ) + '.'
prepare top border
     C                   except    BODY
print top border
     C     1             do        PanDepth      X                 5 0
loop thru lines
     C                   eval      Out = ':' + %subst( UndLine :
prepare underlines
     C                              ( X - 1 ) * PanWidth + 1 : PanWidth ) +
':'
     C                   except    BODY0
print underlines
     C                   eval      Out = ':' + %subst( Picture :
prepare screen line
     C                              ( X - 1 ) * PanWidth + 1 : PanWidth ) +
':'
     C                   except    BODY
print screen line
     C                   enddo
next screen line
     C                   eval      Out = ':' + %trim( FootBord ) + ':'
prepare bottom bordr
     C                   except    BODY
print bottom border
     C                   except    BODY
print blank line
     C                   except    BODY
print blank line
     C                   eval      Out = '_____        ________
______'  prep column heading
     C                                 + '        _____        ______'
     C                   except    BODY0
print column heading
     C                   eval      Out = 'Field        Location
Length'  prep column heading
     C                                 + '        Input        Output'
     C                   except    BODY
print column heading
      *  print list of fields
     C                   eval      FldWhUs  = RecWhUs + I2( RecWhUs )
first field wh-used
     C     0             do        TotField
loop thru fields
     C                   eval      FldIdx   = I2( FldWhUs + 4 ) - 1
field index
     C                   eval      NameIdx  = I4( FldWhUs + 6 ) - 1
name index
     C                   eval      FldWhUs  = FldWhUs + I2( FldWhUs )
next field wh-used
     C                   if        FldIdx >= 0 and NameIdx >= 0
if field is in table
     C                   exsr      FieldInfo
get field informatin
     C                   if        FldUsage <> 'C'
if not a constant
     C                   eval      InpBuf = I2( FldHdr + 6 ) + 1
input buffer pos
     C                   eval      OutBuf = I2( FldHdr + 8 ) + 1
output buffer pos
     C                   eval      FldLen = I2( FldHdr + 10 )
field length
     C                   eval      DecPos = U1( FldHdr + 12 )
decimal positions
     C                   eval      Kshift = %subst( 'AXNYKDISBPFJOEMG' :
keyboard shift
     C                                              U1( Fldhdr + 13 ) + 1 :
1 )
     C                   eval      Out = Get( NameTab + 4 + NameIdx * 10 :
10)  get field name
     C                   eval      %subst( Out : 14 : 8 ) = '(*NOLOC)'
no field location
     C                   if        FldRow <= PanDepth
if in range
     C                   eval      %subst( Out : 15 : 12 ) =
get field location
     C                               %trim( %editc( FldRow : '3' )) + ','
     C                             + %trim( %editc( FldCol : '3' )) + ')'
     C                   endif
     C                   if        DecPos = 255
if no decimal pos
     C                   eval      %subst( Out : 30 : 8 ) = Kshift + '(' +
get field length
     C                               %trim( %editc( FldLen : '3' )) + ')'
     C                   else
if decimal positions
     C                   eval      %subst( Out : 30 : 8 ) = Kshift + '(' +
get length + dec pos
     C                               %trim( %editc( FldLen : '3' )) + ','
     C                             + %trim( %editc( DecPos : '3' )) + ')'
     C                   endif
     C                   if        InpBuf > 0
if input position
     C                   eval      %subst( Out : 44 : 12 ) =
show input position
     C                               %trim( %editc( InpBuf : '3' )) + '-'
     C                             + %trim( %editc( InpBuf + FldLen - 1 :
'3' ))
     C                   endif
     C                   if        OutBuf > 0
if output position
     C                   eval      %subst( Out : 57 : 12 ) =
show output position
     C                               %trim( %editc( OutBuf : '3' )) + '-'
     C                             + %trim( %editc( OutBuf + FldLen - 1 :
'3' ))
     C                   endif
     C                   except    BODY
print detail line
     C                   endif
     C                   endif
     C                   enddo
next field
     C                   enddo
next screen size
     C                   endif
     C                   eval      RecWhUs  = RecWhUs + I4( RecWhUs + 4 )
next record wh-used
     C                   enddo
next record
     C                   endsr
      *  get field information
     CSR   FieldInfo     begsr
     C                   eval      FldHdr = RecHdr + I4( FldIdxTa + FldIdx
* 8 ) get field header
     C                   eval      FldUsage = %subst( 'COMIBHP' :
get field usage
     C                                                    U1( FldHdr + 2 )
: 1 )
     C     'C'           ifeq      FldUsage
if constant field
     C                   eval      FldDevDp = FldHdr + I2( FldHdr + 8 )
get device-dependent
     C                   else
if not constant
     C                   eval      FldDevDp = FldHdr + I2( FldHdr + 16 )
get device-dependent
     C                   endif
     C                   eval      FldExtn  = FldHdr + I2( FldDevDp + 2 )
get field extension
     C     FldExtn       ifgt      FldHdr
if extension exists
     C                   eval      Buttons  = Bit( FldExtn     : X'06' )
test for buttons
     C                   eval      ChcHavEx = Bit( FldExtn + 1 : X'02' )
choice extensions
     C                   else
if no extension
     C                   eval      Buttons  = *off
no buttons
     C                   eval      ChcHavEx = *off
no choice extensions
     C                   endif
     C                   eval      FldRow = U1( RowColTa + 6 + FldIdx * 2 )
get field row
     C                   eval      FldCol = U1( RowColTa + 7 + FldIdx * 2 )
+ 1  get field column
     C                   if        FldRow <= PanDepth and FldCol > PanWidth
if too far right
     C                   eval      FldCol = FldCol - PanWidth
adjust to next line
     C                   eval      FldRow = FldRow + 1
adjust to next line
     C                   endif
     C                   eval      FldPlace = ( FldRow - 1 ) * PanWidth +
FldCol   get field place
     C                   endsr
      *  scan keywords at file, record, and field level
     CSR   Keywords      begsr
     C                   if        CatDispl <> 0
if any cats exist
     C                   eval      CatStrng = X_Header + CatDispl
get category string
     C                   eval      CatTotal = I2( CatStrng )
get category total
     C     1             do        CatTotal      Cx                5 0
loop thru categories
     C                   eval      CatIdent = Get( CatStrng - 1 + Cx * 3 :
1 )  get category ident
     C                   eval      KeyStrng = X_Header + I2( CatStrng + Cx
* 3 ) get keyword string
     C                   eval      KeyTotal = I2( KeyStrng )
get keyword total
     C     1             do        KeyTotal
loop thru keywords
     C                   eval      CatKeyId = CatIdent + Get( KeyStrng + 2
: 1 ) get keyword ident
     C                   select
     C                   when      CatKeyId = X'1708'
keyword is WINDOW
     C                                and Bit( KeyStrng + 7 : X'80' )
window definition
     C                   eval      PanDepth = I2( KeyStrng + 13 + SizIdx *
12 ) get window depth
     C                   eval      PanWidth = I2( KeyStrng + 15 + SizIdx *
12 ) get window width
     C                   when      CatKeyId = X'1709'
keyword is WDWTITLE
     C                                and not Bit( KeyStrng + 7 : X'80' )
text is literal
     C                   eval      FootBit  = Bit( KeyStrng + 7 : X'08' )
footer title flag
     C                   eval      TitleLen = I2( KeyStrng + 16 )
get title length
     C                   eval      TitleTxt = Get( KeyStrng + 28 : TitleLen
)   get title text
     C                   when      CatKeyId = X'2601'
SNGCHCFLD, MLTCHCFLD
     C                   eval      TotChoic = I2( KeyStrng + 7 )
get total choices
     C                   eval      ChcRows  = I2( KeyStrng + 19 )
number of rows
     C                   eval      ChcCols  = ( TotChoic - 1 ) / ChcRows +
1    number of columns
     C                   eval      ChcHoriz = *off
not horizontal
     C                   eval      ChcStrng = KeyStrng + 26
get choice string
     C                   if        ChcHavEx
have extensions
     C                   eval      ChcHoriz = Bit( ChcStrng + 7 : X'20' )
get horizontal flag
     C                   if        ChcHoriz
if horizontal choice
     C                   eval      ChcCols  = I2( ChcStrng + 2 )
number of columns
     C                   endif
     C                   eval      ChcStrng = ChcStrng + I2( ChcStrng )
bump past extension
     C                   endif
     C                   eval      ChcWidth = I2( KeyStrng + 21 ) / ChcCols
get choice width
     C     1             do        TotChoic
loop for each choice
     C                   eval      ChcIndex = Get( ChcStrng + 4 : 2 )
get choice index
     C                   eval      ChcIndx2 = ChcIndx2 - 1
prepare for division
     C                   eval      ChcLen   = I2( ChcStrng + 10 )
get choice length
     C                   if        Bit( ChcStrng + 3 : X'80' )
text is constant
     C                   eval      ChcStruc = ChcStrng + I2( ChcStrng + 8 )
choice structure
     C                   eval      MnemoPos = I2( ChcStruc )
mnemonic position
     C                   eval      ChcText  = Get( ChcStruc + 2 : ChcLen )
get choice text
     C                   else
text is variable
     C                   eval      MnemoPos = 0
mnemonic position
     C                   callp     Prop( %addr( ChcText ) : 'O' : ChcLen )
fake choice text
     C                   endif
     C                   if        ChcHoriz
if horizontal
     C     ChcIndx2      div       ChcCols       BoxRow
get box row
     C                   mvr                     BoxCol
get box column
     C                   else
if vertical
     C     ChcIndx2      div       ChcRows       BoxCol
get box column
     C                   mvr                     BoxRow
get box row
     C                   endif
     C                   eval      BoxPlace = BoxRow * PanWidth
get box place
     C                                      + BoxCol * ChcWidth + FldPlace
     C                   eval      %subst( Picture : BoxPlace : ChcLen + 2
)    show choice text
     C                                      = '/ ' + ChcText
     C                   if        MnemoPos > 0
if mnemonic exists
     C                   eval      Und( BoxPlace + MnemoPos + 1 ) = '_'
show underline
     C                   endif
     C                   eval      ChcStrng = ChcStrng + I2( ChcStrng + 1 )
bump to next choice
     C                   enddo
     C                   when      CatIdent = X'23' and FldRow <= PanDepth
DFT, MSGCON, DFTVAL
     C                   eval      FldLen   = I2( KeyStrng + 6 )
get field length
     C                   eval      %subst( Picture : FldPlace : FldLen )
get field text
     C                                      = Get( KeyStrng + 8 : FldLen )
     C                   when      CatIdent <> X'17' and CatIdent <> X'26'
ignore anything else
     C                   leave
     C                   endsl
     C                   eval      KeyStrng = KeyStrng + I2( KeyStrng + 5 )
+ 5         next keyword
     C                   enddo
loop thru keywords
     C                   enddo
loop thru categories
     C                   endif
     C                   endsr
     OQSYSPRT   E            HEAD           1  1
     O                                           26 'Display file . . . . .
. :'
     O                       FileLib             50
     O                                           74 'Page:'
     O                       Page          3     78
     O          E            HEAD           1
     O                                           26 'Record . . . . . . . .
. :'
     O                       RecName             39
     O          E            HEAD           1
     O                                           26 'Size identifier  . . .
. :'
     O                       ScrSizId      3     33
     O                                           32 '*DS'
     O          E            HEAD           3
     O                                           26 'Printed on . . . . . .
. :'
     O                       *Date         Y     39
     O                       Time6               49 '0 :  :  '
     O          E            BODY           1
     O                       Out            B   198
     O          E            BODY0       0  0
     O                       Out            B   198
     OQSYSPRT   H    OF                     1  1
     O                                           13 'Display file:'
     O                       FileLib             36
     O                                           56 'Date:'
     O                       *Date         Y     68
     O                       Time6               78 '0 :  :  '
     O                                          126 'Page:'
     O                       Page          3    130
     O          H    OF                     1
     O                                           34 '
________________________'
     O                                           57 '
_______________________'
     O                                           77 '________________'
     O          H    OF                  0  0
     O                                           34 '
________________________'
     O                                           57 '
_______________________'
     O                                           77 '________________'
     O          H    OF                     1
     O                                           32 '0  1  2  3  4  5  6
7'
     O                                           56 '8  9  A  B  C  D  E
F'
     O                                           77 '0123456789ABCDEF'
     O          EF           LINE           1
     O                       Out                198
     O                                           61 '|'
     O                                           78 '|'
      *  GET:  return data at offset:length
     P Get             B
     D Get             PI           256A
     D   Offset                      11P 0 const
     D   Length                      11P 0 const
     D OverByte        S            256A   based( Walk@ )
     C                   eval      Walk@ = Base@ + Offset
     C                   return    %subst( OverByte : 1 : Length )
     P Get             E
      *  BIT:  return *ON if data at offset has any mask bits
     P Bit             B
     D Bit             PI              N
     D   Offset                      11P 0 const
     D   Mask                         1A   const
     D OverByte        S              1A   based( Walk@ )
     C                   eval      Walk@ = Base@ + Offset
     C                   testb     Mask          OverByte             21
(HI)
     C                   return    not *IN21
     P Bit             E
      *  U1:  return Binary(1) unsigned integer at offset
     P U1              B
     D U1              PI            11P 0
     D   Offset                      11P 0 const
     D OverByte        S              1A   based( Walk@ )
     D                 DS
     D   Unsigned                     5U 0 inz(0)
     D   RightByte                    1A   overlay( Unsigned : 2 )
     C                   eval      Walk@ = Base@ + Offset
     C                   move      OverByte      RightByte
     C                   return    Unsigned
     P U1              E
      *  I2:  return Binary(2) signed integer at offset
     P I2              B
     D I2              PI            11P 0
     D   Offset                      11P 0 const
     D ShortInteger    S              5I 0 based( Walk@ )
     C                   eval      Walk@ = Base@ + Offset
     C                   return    ShortInteger
     P I2              E
      *  I4:  return Binary(4) signed integer at offset
     P I4              B
     D I4              PI            11P 0
     D   Offset                      11P 0 const
     D LongInteger     S             10I 0 based( Walk@ )
     C                   eval      Walk@ = Base@ + Offset
     C                   return    LongInteger
     P I4              E
      *  DUMPHEX:  print hexadecimal sections
     P DumpHex         B
     D Form1Max        C                   const( 141 )
     D Form3Max        C                   const( 182 )
     D DumpHex         PI
     D   Dad                          3P 0 const
our parent
     D   GrandDad                     3P 0 const
our grandparent
     D   Resolve                     10I 0 value dim( Form1Max )
parent's resolutions
     D Good            S               N   dim ( Form3Max ) inz( *off )
flags for resolvable
     D Walk            DS           256    based( Walk@ )
travel pointer
     D   Over1                 1      1A
     D   Over2                 1      2I 0
     D   Over4                 1      4I 0
      *  find the children of our parent
     C     1             do        Form3Max      X                 5 0
loop through Form3
     C                   if            ( Parent( X ) = Child( Dad )
if parent matches
     C                             or    DefStr( X ) = Child( Dad )
or structure matches
     C                             and   Parent( X ) = Parent( GrandDad ))
with grandparent
     C                             and (          DefStr( X )  =  0
and no structure
     C                             or    Resolve( DefStr( X )) >= 0 )
or resolved structur
     C                             and (          AryStr( X )  =  0
and no array
     C                             or    Resolve( AryStr( X )) >= 0 )
or resolved array
     C                             and (          DpnStr( X )  =  0
and no dependency
     C                             or    Resolve( DpnStr( X )) >= 0 )
or resolved dependen
      *  ignore if dependencies are not met
     C     DpnStr( X )   ifgt      *zeros
if dependency exists
     C                   eval      Walk@ = Base@ + Resolve( DpnStr( X ))
point to dependency
     C                                                    + DpnOff( X )
     C                   testb     DpnBit( X )   Over1                21
22    (HI,EQ) test off/on
     C                   if            DpnEqu( X ) =  'E'
if equality1 fails
     C                             and DpnBit( X ) <> Over1
     C                             or  DpnEqu( X ) =  'F'
if equality2 fails
     C                             and DpnBi2( X ) <> Over2
     C                             or  DpnEqu( X ) =  'N'
if inequality1 fails
     C                             and DpnBit( X ) =  Over1
     C                             or  DpnEqu( X ) =  'P'
if inequality2 fails
     C                             and DpnBi2( X ) =  Over2
     C                             or  DpnEqu( X ) =  '0' and not *IN21
if bit-off fails
     C                             or  DpnEqu( X ) =  '1' and not *IN22
if bit-on fails
     C                   iter
don't resolve this
     C                   endif
     C                   endif
      *  resolve child's offset from parent
     C     DefStr( X )   ifgt      *zeros
if structure exists
     C                   eval      Walk@ = Base@ + Resolve( DefStr( X ))
point to structure
     C                                                    + DefOff( X )
     C     DefBin( X )   ifeq      '2'
if BIN(2) definition
     C                   z-add     Over2         Offset           11 0
extract offset
     C                   else
if BIN(4) definition
     C                   z-add     Over4         Offset
extract offset
     C                   endif
     C     Offset        ifeq      *zeros
ignore if no offset
     C                   iter
     C                   endif
     C                   else
if no structure
     C                   z-add     DefOff( X )   Offset
get absolute offset
     C                   endif
     C                   eval      Resolve( Child(  X )) =
resolve from parent
     C                             Resolve( Parent( X )) + Offset
     C                   move      *on           Good( X )
save flag for below
     C                   endif
     C                   enddo
      *  extract number of array elements
     C     1             do        Form3Max      X
loop through Form3
     C                   if        Good( X )
if this is resolved
     C                   z-add     1             Elements          5 0
prepare for no array
     C                   if                     DefStr( X )  >  0
if structure exists
     C                             and Resolve( DefStr( X )) >= 0
and it's resolved
     C                   z-add     1             Y                 5 0
     C     DefStr( X )   lookup    Child( Y )
21    (EQ) find true index
     C                   if        *IN21 and          AryStr( Y )  >  0
if array exists
     C                                   and Resolve( AryStr( Y )) >= 0
and it's resolved
     C                   eval      Walk@ = Base@ + Resolve( AryStr( Y ))
point to num of elem
     C                                                    + AryOff( Y )
     C                   z-add     Over2         Elements
extract num of elems
     C                   endif
     C                   endif
      *  save current resolve in table for report
     C                   z-add     X             Son               5 0
prep first sibling
     C     1             do        Elements      Z                 5 0
loop through array
     C                   if        RepMax < %elem( Report1 ) - 1
if still room left
     C                   add       1             RepMax
increment report max
     C                   eval      Report1( RepMax ) =          Child( Son
)    save Form1 index
     C                   eval      Report2( RepMax ) = Resolve( Child( Son
))   save it's resolution
     C                   endif
      *  recursively resolve our own children's offsets
     C     Son           ifgt      1
if not QDFFBASE
     C                   callp     DumpHex( Son : Dad : Resolve )
recursive descent
     C                   endif
      *  find next sibling at current level
     C     Z             iflt      Elements
if array exists
     C                   eval      Walk@ = Base@ + Resolve( DefStr( Son ))
point to structure
     C                                                    + AryLen( Y ) * Z
next array element
     C     DpnStr( Son ) ifeq      Child( Dad )
if siblings exist
     C     1             do        Form3Max      Son
loop through table
     C                   if            DpnStr( Son ) = Child( Dad )
if sibling matches
     C                             and Parent( Son ) = Parent( GrandDad )
if family matches
     C                             and DpnBit( Son ) = Over1
if dependency matchs
     C                   leave
next sibling found
     C                   endif
     C                   enddo
     C     Son           ifgt      Form3Max
if sibling not found
     C                   leave
safety net exit
     C                   endif
     C                   endif
      *  calculate new sibling's resolution
     C                   eval      Walk@ = Walk@ + DefOff( Son )
point to offset
     C     DefBin( Son ) ifeq      '2'
if BIN(2) definition
     C                   eval      Resolve( Child(  Son )) =
resolve next sibling
     C                             Resolve( Parent( Son )) + Over2
     C                   else
if BIN(4) definition
     C                   eval      Resolve( Child(  Son )) =
resolve next sibling
     C                             Resolve( Parent( Son )) + Over4
     C                   endif
     C                   endif
     C                   enddo
     C                   endif
     C                   enddo
      *  print the hexadecimal sections
     C     Dad           ifeq      1
if QDFFBASE
     C                   sorta     Report2
ascending resolves
     C                   move      *on           *INOF
use fetch overflow
     C                   move      Base@         Top@
prepare traveller
     C                   z-add     1             Y
prep report index
     C     0             do        Need          Bin
loop through dump
     C                   callp     CVTHC( %addr( Raw ) : %addr( Top ) : 32
)    convert to character
     C                   exsr      PrepareLine
format line offset
     C     0             do        15            X
loop 16 bytes
     C     Report2( Y )  dowle     Bin
if unfinished struct
     C                   eval         %subst( Out : X*3+10 : 1 ) =  '>'
finalize prior struc
     C                   if           %subst( Out : X*3+9  : 1 ) <> ' '
     C                             or %subst( Out : 82     : 1 ) <> ' '
     C                   except    LINE
print prior line
     C                   endif
     C                   exsr      PrepareLine
format line offset
     C                   eval      %subst( Out : X*3+10 : 1 ) =  '<'
start new structure
     C                   eval      %subst( Out : 82 : 117   ) =
copy structure names
     C                                 %trim (Form1( Report1( Y ))) + ': '
     C                               + %trim( Form2( Report1( Y )))
     C                   add       1             Y
next resolve index
     C                   enddo
     C                   eval      %subst(Out:X*3+11:2) =
%subst(Raw:X*2+1:2)  copy hex data
     C                   if        %subst(Top:X  + 1:1) >= X'40'
if no printer error
     C                   eval      %subst(Out:X  +62:1) =  %subst(Top:X
+1:1)  copy raw data
     C                   endif
     C                   add       1             Bin
next data byte
     C                   enddo
     C     Report2( Y )  ifeq      Bin
if next byte begins
     C                   eval      %subst( Out : 58 : 1 ) =  '>'
close this section
     C                   endif
     C                   except    LINE
print hex dump line
     C                   eval      Top@ = Top@ + 16
point next 16 bytes
     C                   sub       1             Bin
cancel DO increment
     C                   enddo
     C                   endif
     CSR   PrepareLine   begsr
     C                   callp     CVTHC( %addr( Out ) : %addr( Bin ) :  8
)    convert address
     C                   eval      Out = %subst( Out : 3 : 6 ) + ':'
     C     1             do        5             Z                 5 0
strip leading zeros
     C                   if        %subst( Out : Z : 1 ) = '0'
     C                   eval      %subst( Out : Z : 1 ) = ' '
     C                   else
     C                   leave
     C                   endif
     C                   enddo
     C                   endsr
     P DumpHex         E
**CTDATA Form1
QDFFBASE     Base File Section
QDFFSCRA     Screen Size Table
QDFFSSEQ     Sort Sequence Table
QDFFINFO     File Header Section
QDFFDPDD     Display-File-Level Device-Dependent Section
QDFFCOSA     Keyword Category Displacement String
QDFARFTE     Record Format Table
QDFFSEQT     Sequence Number Table
QDFFRINF     Record Header Section
QDFFRDPD     Display-Record-Level Device-Dependent Section
QDFFSFCR     Subfile Control Record
QDFFSFHR     Subfile Control Entry
QDFFSFCREXT  Subfile Control Record Extension
QDFFXRDP     Display-Record-Level Device-Dependent Extension
QDFFRCTB     Row-Column Table
QDFFRCTE     Row-Column Table Entry
QDFFNTB      Field Name Table
QDFFOT       Field Order Table
QDFFFITB     Field Indexing Table
QDFFFINF     Field Header Section
QDFFFCON     Constant Field Header Table
QDFFFNAM     Named Field Header Table
QDFFFDPD     Display-Field-Level Device-Dependent Section
QDFFFDIC     Input-Capable Field-Level Device-Dependent Section
QDFFXFDP     Field-Dependent Extension Structure
QDFFSELT     Selection Table
QDFFSTBL     Selection Table Entry
QDFFCCOA     Keyword Category Displacement String Entry
QDFKFILK     File-Level Keywords
QDFKFLPM     File-Level Keywords with Parameters
QDFKFLPP     Category 1 Parameter Entry
QDFKFLSZ     MSGLOC Keyword Structure
QDFKICVP     IGCCNV Keyword Structure
QDFKHARD     HLPRCD Keyword Structure
QDFKHXPS     HLPPNLGRP Keyword Structure
QDFKHDOC     HLPDOC Keyword Structure
QDFKSIDX     HLPSCHIDX Keyword Structure
QDFKFALX     ALTNAME Keyword Structure
QDFKFALK     ALTNAME Keyword Entry
QDFKESFL     ERRSFL Keyword Structure
QDFKBODR     WDWBORDER Keyword Structure
QDFKCKKW     Command Key Keyword Structure
QDFKCKKE     Command Key Keyword Entries
QDFKOVRR     OVERLAY Keyword Structure
QDFKOVRE     Keyword Structure
QDFKOVRP     OVERLAY and PUTRETAIN-Related Keyword Structure
QDFKOLER     ERASE Keyword Structure
QDFKOLCL     CLRL Keyword Structure
QDFKMSRL     Miscellaneous Record-Level Keywords
QDFKMSAP     Parameter Structure
QDFKMSCP     Response Indicator Keyword Array
QDFKMSK1     CSRLOC Keyword Structure
QDFKMSK2     INDARA Keyword Structure
QDFKMSK3     DSPMOD Keyword Structure
QDFKMSCLN    RTNCSRLOC and RTNCSRLOC2 Keyword Structure
QDFKMSMBDSP  MNUBARDSP Keyword Structure
QDFK0BPR     File-Level Keywords with Parameters Structure
QDFK0BXWP    File-Level Keyword Structure
QDFK0BGATR   GRDATR Parameter Structure
QDFKHBKPRM   HLPSHELF Parameter Structure
QDFKMRPR     Miscellaneous Record-Level Structure
QDFKMRWP     Miscellaneous Record-Level Keywords
QDFKHSTR     HLP Keyword Structure
QDFKHPRM     HLP Keyword Entry Structure
QDFKHNMS     HLPRCD Keyword Structure
QDFKHPS      HLPPNLGRP Keyword Structure
QDFKHRDC     HLPDOC Keyword Structure
QDFKHARA     HLPARA Keyword Structure
QDFKHARX     HLPARA Keyword Enhanced Display Structure
QDFKHSEQ     HLPSEQ Keyword Structure
QDFKPRTR     PRINT Keyword Structure
QDFKPPRM     Record-Level Print Parameters
QDFKBRDR     WDWBORDER Keyword Structure
QDFKWDTA     Window Data Array Structure
QDFKWDWTTL   Window Title Structure
QDFKMB       Mouse Button Structure
QDFKSCSF     SFL Keyword Structure
QDFKSCCP     SFL Keyword Entry
QDFKSCSM     SFLMSG and SFLMSGID Keyword Structure
QDFKSCSI     SFLMSGID Keyword Structure
QDFKSFLM     SFLEND(*MORE) Keyword Structure
QDFKSFLS     SFLEND(*SCRBAR) Keyword Structure
QDFKCSRRRN   SFLCSRRRN Keyword Structure
QDFKMODE     SFLMODE Keyword Structure
QDFKSASA     Screen Attribute Keyword Structure
QDFKSAPM     Screen Attribute Keyword Array
QDFKFFWR     FFW and FCW Keyword Structure
QDFKCHKP     FFW Keyword Structure
QDFKMFDK     Miscellaneous Field-Level Keyword Structure
QDFKMFDP     Field-Level Keyword Structure
QDFKMFRS     Response Indicator Structure
QDFKMFEM     ERRMSG and ERRMSGID Keyword Structure
QDFKMFSI     ERRMSGID Keyword Structure
QDFKMFMV     MSGID Keyword Common Structure
QDFKMFM3     Type Three MSGID Keyword Structure
QDFKMFM4     Type Four MSGID Keyword Structure
QDFKDFLD     DSPATR Keyword Structure
QDFK_DATTIM_FDATTIMFMT Keyword Structure
QDFK_DATTIM_SDATTIMSEP Keyword Structure
QDFK_DATEP   DATE Keyword Structure
QDFK_MAPVAL  MAPVAL Keyword Structure
QDFKDFT      Category 23 Keyword Structure
QDFKDFPM     Category 23 Keyword Parameters
QDFKDFMM     MSGCON Keyword Structure
QDFKDFHTML   HTML Keyword Structure
QDFKEDTR     EDIT Keyword Structure
QDFKEDTP     EDIT Keyword Structure
QDFKVAKW     Validity Checking Keyword Structure
QDFKVARL     Validity Checking Keywords
QDFKCKMI     CHKMSGID Keyword Structure
QDFKFCPR     Field-Level CUA Keyword Structure
QDFKFC       Field-Level CUA Keywords
QDFKCHC      CHCFLD Keyword Structure
QDFKCHCHDREXPCHCFLD Keyword Header Expansion Structure
QDFKCHCE     Choice Entry Structure
QDFKCTXT     Choice Text Structure
QDFKCACC     CHCACCEL Keyword Structure
QDFKCMSG     CHCCTL Keyword Structure
QDFKMBSEPS   MNUBARSEP Keyword Structure
QDFKCHCX     Choice Keywords Structure
QDFKEFATR    ENTFLDATR Keyword Structure
QDFKFLDCP    FLDCSRPRG Keyword Structure
QDFKCNTFLD   CNTFLD Keyword Structure
QDFKEDTMSK   EDTMSK Keyword Structure
QDFKEDTSEG   EDTMSG Keyword Segment Structure
QDFKSMSG     SFLCHCCTL Message Structure
QDFKGRPR     Record-Level Grid Keywords with Parameters Struct
QDFKGRWP     Record-Level Grid Keywords
QDFKGRDATR   GRDATR Parameters
QDFKGRDCLR   GRDCLR Parameters Structure
QDFKGRDBOX   GRDBOX Parameters
QDFKGBOXDFM  GRDBOX Parameter Entry Structure
QDFKGRDLIN   GRDLIN Parameters Structure
QDFKGLINDFM  GRDLIN Parameter Entry Structure
QDFWFLEI     Where-Used File-Level Info Structure
QDFWRCDI     Where-Used Record Info Structure
QDFWFLDI     Where-Used Field Info Structure
QDFWITBE     Indicator Table Entry Structure
QDFWKWDA     Keyword Area Structure
QDFWATTR     Keyword Entry Structure
QDFFNTBL     Name Table Structure
**CTDATA Form3
001.      001.      000. 00        000. 00 00      000. 00
002.      001.      000. 19        001. 13 05      000. 00
003.      001.      001. 15 2      000. 00 00      000. 00
004.      001.      001. 08 2      000. 00 00      000. 00
005.      004.      004. 34 2      000. 00 00      000. 00
006.      004.      005. 24 2      000. 00 00      000. 00
007.      004.      004. 00 4      001. 10 16      000. 00
008.      004.      004. 12 4      001. 10 16      000. 00
009.      004.      007. 12 4      000. 00 00      000. 00
010.      009.      009. 28 2      000. 00 00      009. 12 2000 0
011.      009.      009. 28 2      000. 00 00      009. 12 2000 1
012.      011.      000. 54        001. 13 24      000. 00
013.      011.      011. 50 2      000. 00 00      000. 00
014.      009.      010. 28 2      000. 00 00      000. 00
014.      009.      011. 28 2      000. 00 00      000. 00
006.      009.      010. 32 2      000. 00 00      000. 00
006.      009.      011. 32 2      000. 00 00      000. 00
015.      009.      010. 00 4      001. 13 06      000. 00
015.      009.      011. 00 4      001. 13 06      000. 00
016.      015.      000. 06        009. 16 02      000. 00
017.      009.      014. 04 4      009. 16 10      000. 00
018.      009.      014. 00 4      009. 16 02      000. 00
019.      009.      009. 04 4      009. 16 08      000. 00
020.      009.      019. 00 4      000. 00 00      000. 00
021.      020.      000. 06        000. 00 00      020. 02 0100 E
022.      020.      000. 06        000. 00 00      020. 02 0100 N
023.      020.      021. 02 2      000. 00 00      020. 02 0100 E
023.      020.      022. 10 2      000. 00 00      020. 02 0100 N
024.      023.      000. 06        000. 00 00      020. 02 0400 E
024.      023.      000. 06        000. 00 00      020. 02 0500 E
025.      020.      023. 02 2      000. 00 00      000. 00
006.      020.      023. 04 2      000. 00 00      000. 00
026.      009.      009. 08 4      000. 00 00      000. 00
027.      026.      000. 08        026. 04 04      000. 00
028.      006.      000. 02        006. 00 03      000. 00
029.      004.      028. 01 2      000. 00 00      028. 00 0100 E
029.      009.      028. 01 2      000. 00 00      028. 00 0100 E
029.      020.      028. 01 2      000. 00 00      028. 00 0100 E
030.      029.      000. 02        029. 00 07      000. 00
031.      030.      000. 07        030. 05 02      000. 00
032.      031.      000. 02        001. 13 06      030. 00 0200 E
033.      031.      000. 02        000. 00 00      030. 00 0400 E
034.      031.      000. 02        000. 00 00      030. 00 0500 E
035.      031.      000. 02        000. 00 00      030. 00 0600 E
036.      031.      000. 02        000. 00 00      030. 00 0700 E
037.      031.      000. 02        000. 00 00      030. 00 0800 E
038.      031.      000. 02        000. 00 00      030. 00 0A00 E
039.      038.      000. 02        038. 00 12      000. 00
040.      031.      000. 02        000. 00 00      030. 00 0B00 E
041.      031.      000. 02        000. 00 00      030. 00 0C00 E
042.      004.      028. 01 2      000. 00 00      028. 00 0200 E
042.      009.      028. 01 2      000. 00 00      028. 00 0200 E
042.      020.      028. 01 2      000. 00 00      028. 00 0200 E
043.      042.      000. 02        042. 00 09      000. 00
044.      004.      028. 01 2      000. 00 00      028. 00 0300 E
044.      009.      028. 01 2      000. 00 00      028. 00 0300 E
044.      020.      028. 01 2      000. 00 00      028. 00 0300 E
045.      044.      000. 02        044. 00 03      000. 00
046.      044.      000. 02        000. 00 00      000. 00
047.      046.      000. 03        000. 00 00      000. 00
048.      046.      000. 03        000. 00 00      000. 00
049.      004.      028. 01 2      000. 00 00      028. 00 0400 E
049.      009.      028. 01 2      000. 00 00      028. 00 0400 E
049.      020.      028. 01 2      000. 00 00      028. 00 0400 E
050.      049.      000. 02        049. 00 03      000. 00
051.      009.      009. 22 2      000. 00 00      000. 00
052.      051.      000. 03        000. 00 00      051. 00 1000 E
053.      051.      000. 03        000. 00 00      051. 00 1100 E
054.      051.      000. 03        000. 00 00      051. 00 0F00 E
055.      051.      000. 03        000. 00 00      051. 00 1500 E
056.      051.      000. 03        000. 00 00      051. 00 1600 E
057.      004.      028. 01 2      000. 00 00      028. 00 0B00 E
057.      009.      028. 01 2      000. 00 00      028. 00 0B00 E
057.      020.      028. 01 2      000. 00 00      028. 00 0B00 E
058.      057.      000. 02        000. 00 00      000. 00
059.      058.      000. 05        000. 00 00      058. 00 0100 E
060.      058.      000. 05        000. 00 00      058. 00 0200 E
061.      004.      028. 01 2      000. 00 00      028. 00 1700 E
061.      009.      028. 01 2      000. 00 00      028. 00 1700 E
061.      020.      028. 01 2      000. 00 00      028. 00 1700 E
062.      061.      000. 02        061. 00 05      000. 00
063.      062.      000. 05        000. 00 00      062. 00 0100 E
064.      063.      000. 02        063. 00 17      000. 00
065.      064.      000. 17        000. 00 00      064. 02 4000 1
066.      064.      000. 17        000. 00 00      064. 02 0200 1
067.      064.      000. 17        000. 00 00      064. 02 0100 1
068.      064.      064. 10 2      001. 13 04      000. 00
069.      068.      000. 04        000. 00 00      064. 02 4000 1
070.      062.      000. 05        000. 00 00      062. 00 0200 E
071.      062.      000. 05        000. 00 00      062. 00 0600 E
072.      062.      000. 05        000. 00 00      000. 00
073.      062.      000. 05        000. 00 00      062. 00 0700 E
074.      062.      000. 05        001. 13 12      062. 00 0800 E
075.      062.      000. 05        000. 00 00      062. 00 0900 E
076.      062.      000. 05        000. 00 00      062. 00 0A00 E
077.      004.      028. 01 2      000. 00 00      028. 00 1800 E
077.      009.      028. 01 2      000. 00 00      028. 00 1800 E
077.      020.      028. 01 2      000. 00 00      028. 00 1800 E
078.      077.      000. 02        000. 00 00      000. 00
079.      078.      000. 03        000. 00 00      078. 00 0D00 E
080.      000.      000. 05        000. 00 00      078. 00 0E00 E
081.      078.      000. 03        000. 00 00      078. 00 0F00 E
082.      078.      000. 03        000. 00 00      078. 00 1200 E
083.      078.      000. 03        000. 00 00      078. 00 1000 E
084.      078.      000. 03        000. 00 00      078. 00 1100 E
085.      004.      028. 01 2      000. 00 00      028. 00 2000 E
085.      009.      028. 01 2      000. 00 00      028. 00 2000 E
085.      020.      028. 01 2      000. 00 00      028. 00 2000 E
086.      085.      000. 02        000. 00 00      000. 00
087.      004.      028. 01 2      000. 00 00      028. 00 2100 E
087.      009.      028. 01 2      000. 00 00      028. 00 2100 E
087.      020.      028. 01 2      000. 00 00      028. 00 2100 E
088.      087.      000. 02        087. 00 05      000. 00
089.      004.      028. 01 2      000. 00 00      028. 00 2200 E
089.      009.      028. 01 2      000. 00 00      028. 00 2200 E
089.      020.      028. 01 2      000. 00 00      028. 00 2200 E
090.      089.      000. 04        089. 00 03      000. 00
091.      090.      000. 03        000. 00 00      000. 00
092.      091.      000. 02        000. 00 00      090. 00 1500 E
093.      092.      000. 03        000. 00 00      090. 00 1600 E
094.      090.      000. 03        000. 00 00      090. 00 1000 E
095.      094.      000. 43        000. 00 00      094. 00 0300 E
096.      090.      000. 03        000. 00 00      094. 00 0400 E
097.      090.      000. 03        000. 00 00      090. 00 1700 E
098.      090.      000. 03        000. 00 00      090. 00 1800 E
099.      090.      000. 03        000. 00 00      090. 00 1900 E
100.      090.      000. 03        000. 00 00      090. 00 1A00 E
101.      090.      000. 03        000. 00 00      090. 00 1B00 E
102.      004.      028. 01 2      000. 00 00      028. 00 2300 E
102.      009.      028. 01 2      000. 00 00      028. 00 2300 E
102.      020.      028. 01 2      000. 00 00      028. 00 2300 E
103.      102.      000. 02        102. 00 06      000. 00
104.      103.      000. 06        000. 00 00      102. 00 0200 E
105.      103.      000. 06        000. 00 00      102. 00 0400 E
106.      004.      028. 01 2      000. 00 00      028. 00 2400 E
106.      009.      028. 01 2      000. 00 00      028. 00 2400 E
106.      020.      028. 01 2      000. 00 00      028. 00 2400 E
107.      106.      000. 02        106. 00 05      000. 00
108.      004.      028. 01 2      000. 00 00      028. 00 2500 E
108.      009.      028. 01 2      000. 00 00      028. 00 2500 E
108.      020.      028. 01 2      000. 00 00      028. 00 2500 E
109.      108.      000. 02        000. 00 00      000. 00
110.      109.      000. 08        000. 00 00      000. 00
111.      004.      028. 01 2      000. 00 00      028. 00 2600 E
111.      009.      028. 01 2      000. 00 00      028. 00 2600 E
111.      020.      028. 01 2      000. 00 00      028. 00 2600 E
112.      111.      000. 02        111. 00 05      000. 00
113.      112.      000. 05        000. 00 00      112. 00 0100 E
114.      113.      000. 19        000. 00 00      025. 01 0200 1
115.      113.      000. 19        000. 00 00      025. 01 0200 0
115.      113.      000. 37        000. 00 00      025. 01 0200 1
116.      115.      115. 08 2      000. 00 00      000. 00
117.      115.      115. 14 2      000. 00 00      000. 00
118.      115.      115. 30 2      000. 00 00      115. 30 FFFF P
119.      112.      000. 05        000. 00 00      112. 00 0200 E
120.      112.      000. 05        000. 00 00      112. 00 0300 E
121.      112.      000. 05        000. 00 00      112. 00 0600 E
122.      112.      000. 05        000. 00 00      112. 00 0700 E
123.      112.      000. 05        000. 00 00      112. 00 0800 E
124.      112.      000. 05        000. 00 00      112. 00 0900 E
125.      124.      000. 02        124. 00 04      000. 00
126.      112.      000. 05        000. 00 00      112. 00 0A00 E
127.      004.      028. 01 2      000. 00 00      028. 00 2700 E
127.      009.      028. 01 2      000. 00 00      028. 00 2700 E
127.      020.      028. 01 2      000. 00 00      028. 00 2700 E
128.      127.      000. 02        000. 00 00      000. 00
129.      128.      000. 05        000. 00 00      128. 00 0100 E
130.      128.      000. 05        000. 00 00      128. 00 0200 E
131.      128.      000. 05        000. 00 00      128. 00 0300 E
132.      131.      000. 12        001. 13 09      000. 00
133.      128.      000. 05        000. 00 00      128. 00 0400 E
134.      133.      000. 12        001. 13 07      000. 00
135.      004.      004. 04 4      000. 00 00      000. 00
136.      135.      135. 00 2      000. 00 00      000. 00
137.      136.      136. 00 2      000. 00 00      000. 00
138.      135.      000. 18        135. 12 05      135. 12 0000 P
138.      136.      000. 12        136. 08 05      136. 08 0000 P
139.      135.      135. 02 2      000. 00 00      000. 00
139.      136.      136. 02 2      000. 00 00      000. 00
139.      137.      137. 02 2      000. 00 00      000. 00
140.      139.      000. 02        139. 00 04      000. 00
141.      135.      135. 08 4      000. 00 00      000. 00
As an Amazon Associate we earn from qualifying purchases.