Files with Variable Length Records
 Processing with Standard COBOL Dialect
http://www.simotime.com
When technology complements business    Copyright © 1987-2010  SimoTime Enterprises  All Rights Reserved
  Table of Contents Version 10.03.20 
  Introduction
 
  Programming Objectives
  Programming Input and Output
  Programming Requirements
  Programming Overview
 
  Create a File with Fixed Length Records
  Convert a Fixed Length File to a File with Variable Length Records
  Convert Variable-Length File to Fixed-Length File
  Compare Two Sequential Files
  Sample CMD Members for Windows and Net Express
 
  CMD to Create a Sequential File with Fixed-Length Records
  CMD to Convert a Fixed Length File to a Sequential File with Variable-Length Records
  CMD to Convert a Variable-Length File to a Fixed-Length File
  CMD to Compare Two Files
  Sample JCL Members for OS/390 or Mainframe Express
 
  JCL to Create a Sequential File with Fixed-Length Records
  JCL to Convert a Fixed Length File to a Sequential File with Variable-Length Records
  JCL to Convert a Variable-Length File to a Fixed-Length File
  JCL to Compare Two Files
  COBOL Source Code for Sample Programs
 
  Convert a Fixed Length File to a Sequential File with Variable-Length Records
  Convert a Variable Length file to a Fixed-Length File
  Compare Two Sequential Files
  Summary
 
  Software Agreement and Disclaimer
  Downloads and Links to Similar Pages
  Comments or Suggestions
  About SimoTime

Introduction
(Next) (Previous) (Table-of-Contents)

This document describes how to create, access and convert data files that use variable-length-records. There are different ways to create and access files with variable length records. The following list briefly describes three possible methodologies. The examples provided in this suite of programs will focus on the first methodology.

1. Define the record as a single field (my-data-field) with the physical size equal to the maximum record length. On the FD statement (in a COBOL program) use the "DEPENDING ON field-name-for-my-record-size" to define a field that will determine the size of the record to be written to a file. Next, determine the length of the text string within the single field (my-data-field) that defines the record layout. Place this value in the field-name-for-my-record-size and write the record. This may be accomplished by scanning the field to determine the position of the last significant character or by counting the number of trailing spaces.
Note: When the file is accessed as input the length of the record just read will be placed in the "field-name-for-my-record-size" field.
2. The file has multiple record types. Usually each record in the file has a base segment that is identical. User logic is created to determine the record type. For example, if position 1 is an "A" the record format "A" is used, If position 1 is a "B" then record format "B" is used. Each record format will have their own record layout (or copy file) and they may be the same length or a different length. Therefore, one way to create and access a file with variable length records is to use multiple record types where the different record types have a different record length.
3. The technique of defining an array (or table) as the last part of a record may be used. For COBOL, the "OCCURS DEPENDING ON" (or ODO) is used to vary the number of elements in the array (or table). Thus, the more elements in the array the longer the record and the fewer elements in the array the shorter the record.

The preceding describes three of the methods that are commonly used by COBOL application programmers to create and access files with variable length records. Additional detail about other tips, tricks and techniques used to manage files with variable length records are discussed in the following sections of this document.

The source code for the COBOL programs is written using the VS COBOL II dialect and also work with COBOL for MVS and COBOL/370. A JCL member is provided to run the job as an MVS batch job on an IBM mainframe or as a project with Micro Focus Mainframe Express (MFE) running on a PC with Windows. A Windows Command (.CMD) file is provided to run the job on a PC with Micro Focus Net Express. Additional information is provided in the Downloads and Links to Similar Pages section of this document.

The compare function that is used in this example uses the SimoLOGS and SimoHEX4 routines and will require the common modules to be downloaded.

Programming Objectives
(Next) (Previous) (Table-of-Contents)

The following is a list of the functions provided in this example.

1. Demonstrate how to create a fixed-record-length, sequential file using mainframe JCL and the IEBGENER Utility program.
2. Demonstrate how to read the fixed-record-length, sequential file and create a variable-record-length, sequential file.
3. Demonstrate how to read the variable-record-length, sequential file and create a fixed-record-length, sequential file.
4. Demonstrate how to compare the contents of two data files.

The first task performed by the CRTF80J1.JCL or CRTF80E1.CMD routine is to create a file of fixed-length, 80 byte records. The actual text string within the records will vary in size. To create fixed length records the record is padded with trailing spaces.

The second task performed will read the fixed, 80-byte-record file and create a file containing variable-length records,. The trailing spaces will be truncated.

The third task will read the file containing variable-length records and create a file containing 80-byte, fixed length records.

The fourth and final step will compare the original 80-byte, fixed-length file created in the first task with the 80-byte, fixed length file created in the third task.

Programming Input and Output
(Next) (Previous) (Table-of-Contents)

The input varies depending on the task being performed. Each task will read a sequential file. The format of the file may be fixed, 80-byte records or variable-length records. The output files will be sequential files and the format may be fixed, 80-byte records or variable-length records. For variable-length record the record length is determined by the number of trailing spaces.

Programming Requirements
(Next) (Previous) (Table-of-Contents)

This suite of samples programs will run on the following platforms.

1. Executes on Windows/2000, Windows/NT and Windows/XP using Micro Focus Net Express and the CMD file provided.
2. May be ported to run on the UNIX platforms supported by Micro Focus COBOL.
3. Executes on a mainframe with MVS or Windows/2000, Windows/NT and Windows/XP using Micro Focus Mainframe Express and the JCL file provided.

Programming Overview
(Next) (Previous) (Table-of-Contents)

The following diagram is an overview of how the demonstration program fits into the example. The  BLUE  boxes are unique to the mainframe and Micro Focus Mainframe Express. The  RED  boxes are unique to the PC with Windows and Micro Focus Net Express. The  GREEN  boxes are platform independent and will execute on the mainframe or a PC with Windows. Also, the  GREEN  boxes may be ported to a UNIX platform that is supported by Micro Focus COBOL. The  AQUA  boxes are used for data files.

Programming Overview, Create a File with Fixed Length Records
(Next) (Previous) (Table-of-Contents)

The following process will create a sequential file containing fixed-length, 80-byte records.

                   
Entry Point
OS390 or MFE
     
Entry Point
Net Express
      Entry Points  
 
     
 
         
CRTF80J1
jcl
     
CRTF80E1
cmd
      Start the job to create a file with fixed records.  
 
     
 
         
IEFBR14
exec
     
If Exist
stmt
      Delete previously created output file  
 
     
 
         
IEBGENER
exec
 
 
 
SQEDDF01
qsam
 
echo
stmt
 
 
 
SQEDDF01
qsam
  Create a new file with fixed-length, 80-byte records.  
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
         
   
EOJ
          End-of-Job  
                   

Programming Overview, Create a File with Variable Length Records
(Next) (Previous) (Table-of-Contents)

The following will read the file containing fixed length records and create a file containing variable length records. This example creates variable length records by removing the trailing space characters from the fixed length records.

               
Entry Point
OS390 or MFE
     
Entry Point
Net Express
  Entry Points  
 
     
 
     
CBLV80J1
jcl
     
CBLV80E1
cmd
  Start the job to create a file with variable records.  
 
     
 
     
IEFBR14
exec
     
If Exist
stmt
  Delete previously created output file  
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
SQEDDF01
qsam
 
 
 
CBLV80C1
cobol
 
 
 
VREDDV01
qsam
  Create a file containing variable-length records.  
   
 
         
   
EOJ
      End-of-Job  
               

Programming Overview, Convert Variable-Length to Fixed-Length
(Next) (Previous) (Table-of-Contents)

The following will read the file containing variable-length records and create a file containing fixed-length records.

               
Entry Point
OS390 or MFE
     
Entry Point
Net Express
  Entry Points  
 
     
 
     
CBLV80J2
jcl
     
CBLV80E2
cmd
  Start the job to convert a file with variable records to a file with fixed length records.  
 
     
 
     
IEFBR14
exec
     
If Exist
stmt
  Delete previously created output file  
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
VREDDV01
qsam
 
 
 
CBLV80C2
cobol
 
 
 
SQEDDF01
qsam
  Create a file containing fixed-length records.  
   
 
         
   
EOJ
      End-of-Job  
               

Programming Overview, Compare Two Files
(Next) (Previous) (Table-of-Contents)

The following will read the two sequential files containing fixed-length records and compare the contents of each record. If the contents are not equal an entry will be written to a log file.

               
Entry Point
OS390 or MFE
     
Entry Point
Net Express
  Entry Points  
 
     
 
     
CBLV80J3
jcl
     
CBLV80E3
cmd
  Start the job to compare the two sequential files.  
 
     
 
     
IEFBR14
exec
     
If Exist
stmt
  Delete previously created log file  
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
SQEDDF01
qsam
     
     
     
CBLV80C3
cobol
 
 
 
SYSLOG
qsam
  Compare the two files containing fixed-length records.  
SQEDDF02
qsam
     
     
     
 
         
   
 
         
   
EOJ
      End-of-Job  
               

Sample CMD Members, Windows and Net Express
(Next) (Previous) (Table-of-Contents)

This sample suite of programs has four CMD members. The following table is a list of the sample CMD members.

Command Description
CRTF80J1.CMD Create a sequential file containing fixed-length, 80-byte records.
CBLV80J1.CMD Read the sequential file created in the preceding job and write to a sequential file containing variable-length records.
CBLV80J2.CMD Read the file created in the preceding step and write a new sequential file containing fixed-length, 80-byte records.
CBLV80J3.CMD Read the two sequential files containing fixed-length, 80-byte records and compare the records. If not equal then write an entry to a log file.

Sample CMD, Create a Sequential File with Fixed-Length Records
(Next) (Previous) (Table-of-Contents)

The following is the CMD (CRTF80E1.CMD) that is used to create a sequential file containing fixed-length, 80-byte records. The text string within the records is variable-length with trailing spaces.

@echo OFF
rem  * *******************************************************************
rem  *                   This program is provided by:                    *
rem  *                    SimoTime Enterprises, LLC                      *
rem  *           (C) Copyright 1987-2010 All Rights Reserved             *
rem  *             Web Site URL:   http://www.simotime.com               *
rem  *                   e-mail:   helpdesk@simotime.com                 *
rem  * *******************************************************************
rem  *
rem  * Text   - Create Sequential Data Sets.
rem  * Author - SimoTime Enterprises
rem  * Date   - January 24, 1996
rem  *
rem  * The 1st step (DeleteTEXT) will delete any previously created files.
rem  *
rem  * The 2nd step (CreateTEXT) will create a new ASCII/Text file.
rem  *
rem  * The 3rd job step (ConvertLSEQtoRSEQasc) will create a new Record
rem  * Sequential file with ASCII-encoded, fixed length records.
rem  *
rem  * The 4th job step (ConvertLSEQtoRSEQebc) will create a new Record
rem  * Sequential file with EBCDIC-encoded, fixed length records.
rem  *
rem  * This set of programs will run on a Personal Computer with
rem  * Windows and Micro Focus Net Express.
rem  * *******************************************************************
rem  * Step   1 of 2  Set the global environment variables,
rem  *                Delete any previously created file...
rem  *
     set CmdName=CrtF80E1
     call Env1PROD
     set JobStatus=0000
     if "%SYSLOG%" == "" set syslog=c:\SimoLIBR\LOGS\SimoTime.LOG
:DeleteQSAM
     call SimoNOTE "*******************************************************%CmdName%"
     call SimoNOTE "Starting JobName %CmdName%, User is %USERNAME%"
     call SimoNOTE "Identify JobStep DeleteQSAM"
     set SQEDDF01=%BaseLib1%\DataLibA\Txt1\SQEDDF01.TXT
     if exist %SQEDDF01% del %SQEDDF01%
REM  *
REM  * *******************************************************************
REM  * Step   2 of 2  Create and populate a new TEXT file...
REM  *
:CreateTEXT
     call SimoNOTE Identify JobStep CreateQSAM"
rem  *...:....1....:....2....:....3....:....4....:....5....:....6....:....7....:....8
echo 000000000001 A                                                                  >>%SQEDDF01%
echo 000000000002 AB                                                                 >>%SQEDDF01%
echo 000000000003 ABC                                                                >>%SQEDDF01%
echo 000000000004 ABCD                                                               >>%SQEDDF01%
echo 000000000005 ABCDE                                                              >>%SQEDDF01%
echo 000000000006 ABCDEF                                                             >>%SQEDDF01%
echo 000000000007 ABCDEFG                                                            >>%SQEDDF01%
echo 000000000008 ABCDEFGH                                                           >>%SQEDDF01%
echo 000000000009 ABCDEFGHI                                                          >>%SQEDDF01%
echo 000000000010 ABCDEFGHIJ                                                         >>%SQEDDF01%
echo 000000000011 ABCDEFGHIJK                                                        >>%SQEDDF01%
echo 000000000012 ABCDEFGHIJKL                                                       >>%SQEDDF01%
echo 000000000013 ABCDEFGHIJKLM                                                      >>%SQEDDF01%
echo 000000000014 ABCDEFGHIJKLMN                                                     >>%SQEDDF01%
echo 000000000015 ABCDEFGHIJKLMNO                                                    >>%SQEDDF01%
echo 000000000016 ABCDEFGHIJKLMNOP                                                   >>%SQEDDF01%
echo 000000000017 ABCDEFGHIJKLMNOPR                                                  >>%SQEDDF01%
echo 000000000018 ABCDEFGHIJKLMNOPQR                                                 >>%SQEDDF01%
echo 000000000019 ABCDEFGHIJKLMNOPQRS                                                >>%SQEDDF01%
echo 000000000020 ABCDEFGHIJKLMNOPQRST                                               >>%SQEDDF01%
echo 000000000021 ABCDEFGHIJKLMNOPQRSTU                                              >>%SQEDDF01%
echo 000000000022 ABCDEFGHIJKLMNOPQRSTUV                                             >>%SQEDDF01%
echo 000000000023 ABCDEFGHIJKLMNOPQRSTUVW                                            >>%SQEDDF01%
echo 000000000024 ABCDEFGHIJKLMNOPQRSTUVWX                                           >>%SQEDDF01%
echo 000000000025 ABCDEFGHIJKLMNOPQRSTUVWXY                                          >>%SQEDDF01%
echo 000000000026 ABCDEFGHIJKLMNOPQRSTUVWXYZ                                         >>%SQEDDF01%
echo 000000000027 ABCDEFGHIJKLMNOPQRSTUVWZXZ0123456789                               >>%SQEDDF01%
echo 000000000028 ABCDEFGHIJKLMNOPQRSTUVWXYZ                                         >>%SQEDDF01%
echo 000000000029 ABCDEFGHIJKLMNOPQRSTUVWXY                                          >>%SQEDDF01%
echo 000000000030 ABCDEFGHIJKLMNOPQRSTUVWX                                           >>%SQEDDF01%
echo 000000000031 ABCDEFGHIJKLMNOPQRSTUVW                                            >>%SQEDDF01%
echo 000000000032 ABCDEFGHIJKLMNOPQRSTUV                                             >>%SQEDDF01%
echo 000000000033 ABCDEFGHIJKLMNOPQRSTU                                              >>%SQEDDF01%
echo 000000000034 ABCDEFGHIJKLMNOPQRST                                               >>%SQEDDF01%
echo 000000000035 ABCDEFGHIJKLMNOPQRS                                                >>%SQEDDF01%
echo 000000000036 ABCDEFGHIJKLMNOPQR                                                 >>%SQEDDF01%
echo 000000000037 ABCDEFGHIJKLMNOPQ                                                  >>%SQEDDF01%
echo 000000000038 ABCDEFGHIJKLMNOR                                                   >>%SQEDDF01%
echo 000000000039 ABCDEFGHIJKLMNO                                                    >>%SQEDDF01%
echo 000000000040 ABCDEFGHIJKLMN                                                     >>%SQEDDF01%
echo 000000000041 ABCDEFGHIJKLM                                                      >>%SQEDDF01%
echo 000000000042 ABCDEFGHIJKL                                                       >>%SQEDDF01%
echo 000000000043 ABCDEFGHIJK                                                        >>%SQEDDF01%
echo 000000000044 ABCDEFGHIJ                                                         >>%SQEDDF01%
echo 000000000045 ABCDEFGHI                                                          >>%SQEDDF01%
echo 000000000046 ABCDEFGH                                                           >>%SQEDDF01%
echo 000000000047 ABCDEFG                                                            >>%SQEDDF01%
echo 000000000048 ABCDEF                                                             >>%SQEDDF01%
echo 000000000049 ABCDE                                                              >>%SQEDDF01%
echo 000000000050 ABCD                                                               >>%SQEDDF01%
echo 000000000051 ABC                                                                >>%SQEDDF01%
echo 000000000052 AB                                                                 >>%SQEDDF01%
echo 000000000053 A                                                                  >>%SQEDDF01%
echo 000000000054 a                                                                  >>%SQEDDF01%
echo 000000000055 ab                                                                 >>%SQEDDF01%
echo 000000000056 abc                                                                >>%SQEDDF01%
echo 000000000057 abcd                                                               >>%SQEDDF01%
echo 000000000058 abcde                                                              >>%SQEDDF01%
echo 000000000059 abcdef                                                             >>%SQEDDF01%
echo 000000000060 abcdefg                                                            >>%SQEDDF01%
echo 000000000061 abcdefgh                                                           >>%SQEDDF01%
echo 000000000062 abcdefghi                                                          >>%SQEDDF01%
echo 000000000063 abcdefghij                                                         >>%SQEDDF01%
echo 000000000064 abcdefghijk                                                        >>%SQEDDF01%
echo 000000000065 abcdefghijkl                                                       >>%SQEDDF01%
echo 000000000066 abcdefghijklm                                                      >>%SQEDDF01%
echo 000000000067 abcdefghijklmn                                                     >>%SQEDDF01%
echo 000000000068 abcdefghijklmno                                                    >>%SQEDDF01%
echo 000000000069 abcdefghijklmnop                                                   >>%SQEDDF01%
echo 000000000070 abcdefghijklmnopr                                                  >>%SQEDDF01%
echo 000000000071 abcdefghijklmnopqr                                                 >>%SQEDDF01%
echo 000000000072 abcdefghijklmnopqrs                                                >>%SQEDDF01%
echo 000000000073 abcdefghijklmnopqrst                                               >>%SQEDDF01%
echo 000000000074 abcdefghijklmnopqrstu                                              >>%SQEDDF01%
echo 000000000075 abcdefghijklmnopqrstuv                                             >>%SQEDDF01%
echo 000000000076 abcdefghijklmnopqrstuvw                                            >>%SQEDDF01%
echo 000000000077 abcdefghijklmnopqrstuvwx                                           >>%SQEDDF01%
echo 000000000078 abcdefghijklmnopqrstuvwxy                                          >>%SQEDDF01%
echo 000000000079 abcdefghijklmnopqrstuvwxyz                                         >>%SQEDDF01%
echo 000000000080 abcdefghijklmnopqrstuvwzxz0123456789                               >>%SQEDDF01%
echo 000000000081 abcdefghijklmnopqrstuvwxyz                                         >>%SQEDDF01%
echo 000000000082 abcdefghijklmnopqrstuvwxy                                          >>%SQEDDF01%
echo 000000000083 abcdefghijklmnopqrstuvwx                                           >>%SQEDDF01%
echo 000000000084 abcdefghijklmnopqrstuvw                                            >>%SQEDDF01%
echo 000000000085 abcdefghijklmnopqrstuv                                             >>%SQEDDF01%
echo 000000000086 abcdefghijklmnopqrstu                                              >>%SQEDDF01%
echo 000000000087 abcdefghijklmnopqrst                                               >>%SQEDDF01%
echo 000000000088 abcdefghijklmnopqrs                                                >>%SQEDDF01%
echo 000000000089 abcdefghijklmnopqr                                                 >>%SQEDDF01%
echo 000000000090 abcdefghijklmnopq                                                  >>%SQEDDF01%
echo 000000000091 abcdefghijklmnor                                                   >>%SQEDDF01%
echo 000000000092 abcdefghijklmno                                                    >>%SQEDDF01%
echo 000000000093 abcdefghijklmn                                                     >>%SQEDDF01%
echo 000000000094 abcdefghijklm                                                      >>%SQEDDF01%
echo 000000000095 abcdefghijkl                                                       >>%SQEDDF01%
echo 000000000096 abcdefghijk                                                        >>%SQEDDF01%
echo 000000000097 abcdefghij                                                         >>%SQEDDF01%
echo 000000000098 abcdefghi                                                          >>%SQEDDF01%
echo 000000000099 abcdefgh                                                           >>%SQEDDF01%
echo 000000000100 abcdefg                                                            >>%SQEDDF01%
echo 000000000101 abcdef                                                             >>%SQEDDF01%
echo 000000000102 abcde                                                              >>%SQEDDF01%
echo 000000000103 abcd                                                               >>%SQEDDF01%
echo 000000000104 abc                                                                >>%SQEDDF01%
echo 000000000105 ab                                                                 >>%SQEDDF01%
echo 000000000106 a                                                                  >>%SQEDDF01%
     if exist %SQEDDF01% goto :ConvertLSEQtoRSEQasc
     set JobStatus=0010
     goto :EojNok
:Jump10
:ConvertLSEQtoRSEQasc
rem  *
rem  * *******************************************************************
rem  * Step 3, Read the previously created Line Sequential File (LSEQ)
rem  *         and write a Record Sequential File (RSEQ) with 80-byte,
rem  *         ASCII-encoded records.
rem  *
     call SimoNOTE "Identify JobStep ConvertLSEQtoRSEQasc"
     set GETLS080=%SQEDDF01%
     set PUTRS080=%BaseLib1%\DataLibA\Asc1\SIMOTIME.DATA.SQEDDF01.DAT
     if exist %PUTRS080% del %PUTRS080%
     run ALAR80C1
     if not exist %PUTRS080% set JobStatus=0030
     if not "%JobStatus%" == "0000" goto EojNok
     call SimoNOTE "Produced DataSet %PUTRS080%"
rem  *
:ConvertLSEQtoRSEQebc
rem  *
rem  * *******************************************************************
rem  * Step 4, Read the previously created Line Sequential File (LSEQ)
rem  *         and write a Record Sequential File (RSEQ) with 80-byte,
rem  *         EBCDIC-encoded records.
rem  *
     call SimoNOTE "Identify JobStep ConvertLSEQtoRSEQebc"
     set GETLS080=%SQEDDF01%
     set PUTRS080=%BaseLib1%\DataLibA\Ebc1\SIMOTIME.DATA.SQEDDF01.DAT
     if exist %PUTRS080% del %PUTRS080%
     run ALER80C1
     if not exist %PUTRS080% set JobStatus=0004
     if not "%JobStatus%" == "0000" goto EojNok
     call SimoNOTE "Produced DataSet %PUTRS080%"

:EojAok
     call SimoNOTE "Produced %SQEDDF01%"
     call SimoNOTE "Finished JobName %CmdName%, Job Status is %JobStatus%"
     goto :End
:EojNok
     call SimoNOTE "ABENDING JobName %CmdName%, Job Status is %JobStatus%"
:End
     call SimoNOTE "Conclude SysLog is %SYSLOG%"
     if not "%1" == "nopause" pause

Sample CMD, Convert a Fixed Length File to a Sequential File with Variable-Length Records
(Next) (Previous) (Table-of-Contents)

The following is the CMD (CBLV80E1.CMD) used to read the file containing fixed-length, 80-byte records and create a file containing variable-length records. The input file was created in the preceding step (CRTF80E1.CMD) and contains variable length text string with trailing space characters to make the records fixed length. The output file will have variable length records consisting of the text string with the trailing spaces removed.

@echo OFF
rem  * *******************************************************************
rem  *                   This program is provided by:                    *
rem  *                    SimoTime Enterprises, LLC                      *
rem  *           (C) Copyright 1987-2010 All Rights Reserved             *
rem  *             Web Site URL:   http://www.simotime.com               *
rem  *                   e-mail:   helpdesk@simotime.com                 *
rem  * *******************************************************************
rem  *
rem  * Text   - Read a file of fixed-length records, write to a file of
rem  *          variable-length records.
rem  * Author - SimoTime Enterprises
rem  * Date   - January 24, 1996
rem  *
rem  * The first job step (DeleteQSAM) will delete any previously created
rem  * file.
rem  *
rem  * The second job step (CreateQSAM) will read a file containing
rem  * 80-byte, fixed length records and create a file containing
rem  * variable length records
rem  *
rem  * This set of programs will run on a Personal Computer with
rem  * Windows and Micro Focus Net Express.
rem  *
rem  * ********************************************************************
rem  * Step 1 of 2, Set the global environment variables,
rem  *              Delete any previously created file...
rem  *
     set CmdName=CblV80E1
     call Env1PROD
     set JobStatus=0000
     if "%SYSLOG%" == "" set syslog=c:\SimoLIBR\LOGS\SimoTime.LOG
rem  *
     call SimoNOTE "*******************************************************%CmdName%"
     call SimoNOTE "Starting JobName %CmdName%, User is %USERNAME%"
     call SimoNOTE "Identify JobStep DeleteQSAM"
:DeleteQSAM
     set SQEDDF01=%BaseLib1%\DataLibA\Asc1\SIMOTIME.DATA.SQEDDF01.DAT
     set VREDDV01=%BaseLib1%\DataLibA\Asc1\SIMOTIME.DATA.VREDDV01.DAT
     if exist %VREDDV01% del %VREDDV01%
rem  *
rem  * *******************************************************************
rem  * Step 2 of 2, Repro, Read a file of fixed length records
rem  *              and write a file of variable length records.
rem  *
:CreateQSAM
     call SimoNOTE "Identify JobStep CreateQSAM"
     run CblV80C1
     if ERRORLEVEL 1 echo Error level is equal-to or greater-than 1 . . .
     if ERRORLEVEL 1 set JobStatus=0020
     if not "%JobStatus%" == "0000" goto :EojNOK
     echo errorlevel is 0 . . .
rem  *
     if exist %VREDDV01% goto :EojAok
     set JobStatus=0002
     goto :EojNok
:EojAok
     call SimoNOTE "Produced %VREDDV01%"
     call SimoNOTE "Finished JobName %CmdName%, Job Status is %JobStatus%"
     goto :End
:EojNok
     call SimoNOTE "ABENDING JobName %CmdName%, Job Status is %JobStatus%"
:End
     call SimoNOTE "Conclude SysLog is %SYSLOG%"
     if not "%1" == "nopause" pause

Sample CMD, Convert a Variable-Length File to a Fixed-Length File
(Next) (Previous) (Table-of-Contents)

The following is the CMD (CBLV80E2.CMD) used to read the file containing variable length records and create a file containing fixed length records.

@echo OFF
rem  * *******************************************************************
rem  *                   This program is provided by:                    *
rem  *                    SimoTime Enterprises, LLC                      *
rem  *           (C) Copyright 1987-2010 All Rights Reserved             *
rem  *             Web Site URL:   http://www.simotime.com               *
rem  *                   e-mail:   helpdesk@simotime.com                 *
rem  * *******************************************************************
rem  *
rem  * Text   - Read a file containig variable-length records and write
rem  *          to a file containing fixed-length recorsds.
rem  * Author - SimoTime Enterprises
rem  * Date   - January 24, 1996
rem  *
rem  * The first job step (DeleteQSAM) will delete any previously created
rem  * file.
rem  *
rem  * The second job step (CreateQSAM) will read the file of variable
rem  * length records and write to a file of fixed length records.
rem  *
rem  * This set of programs will run on a Personal Computer with
rem  * Windows and Micro Focus Net Express.
rem  *
rem  * ********************************************************************
rem  * Step 1 of 2, Set the global environment variables,
rem  *              Delete any previously created file...
rem  *
     set CmdName=CblV80E2
     call Env1PROD
     set JobStatus=0000
     if "%SYSLOG%" == "" set syslog=c:\SimoLIBR\LOGS\SimoTime.LOG
rem  *
     call SimoNOTE "*******************************************************%CmdName%"
     call SimoNOTE "Starting JobName %CmdName%, User is %USERNAME%"
     %BaseLib1%\DataLibA\Asc1\SIMOTIME.DATA.Identify JobStep DeleteQSAM"
:DeleteQSAM
     set VREDDV01=%BaseLib1%\DataLibA\Asc1\SIMOTIME.DATA.VREDDV01.DAT
     set SQEDDF02=%BaseLib1%\DataLibA\Wrk1\SIMOTIME.DATA.SQEDDF02.DAT
     if exist %SQEDDF02% del %SQEDDF02%
rem  *
rem  * *******************************************************************
rem  * Step 2 of 2, Repro, Read a file of variable length records
rem  *              and write a file of fixed length records.
rem  *
:CreateQSAM
     call SimoNOTE "Identify JobStep CreateQSAM"
     run CblV80C2
     if errorlevel = 1 set JobStatus=0020
     if not "%JobStatus%" == "0000" goto :EojNOK
rem  *
     if exist %SQEDDF02% goto :EojAok
     set JobStatus=0002
     goto :EojNok
:EojAok
     call SimoNOTE "Produced %SQEDDF02%"
     call SimoNOTE "Finished JobName %CmdName%, Job Status is %JobStatus%"
     goto :End
:EojNok
     call SimoNOTE "ABENDING JobName %CmdName%, Job Status is %JobStatus%"
:End
     call SimoNOTE "Conclude SysLog is %SYSLOG%"
     if not "%1" == "nopause" pause

Sample CMD, Compare Two Files
(Next) (Previous) (Table-of-Contents)

The following is the CMD (CBLV80E3.CMD) used to compare the records within the two sequential files created in the preceding steps. If an unequal condition exist the records will be displayed and an entry will be written to the log file.

@echo OFF
rem  * *******************************************************************
rem  *                   This program is provided by:                    *
rem  *                    SimoTime Enterprises, LLC                      *
rem  *           (C) Copyright 1987-2010 All Rights Reserved             *
rem  *             Web Site URL:   http://www.simotime.com               *
rem  *                   e-mail:   helpdesk@simotime.com                 *
rem  * *******************************************************************
rem  *
rem  * Text   - Compare two sequential files.
rem  * Author - SimoTime Enterprises
rem  * Date   - January 24, 1996
rem  *
rem  * The first job step (DeleteQSAM) will delete any previously created
rem  * file.
rem  *
rem  * The second job step (CreateQSAM) will compare two sequential files.
rem  * If the records are not equal the information is displayed and an
rem  * entry is written to a log file.
rem  *
rem  * This set of programs will run on a Personal Computer with
rem  * Windows and Micro Focus Net Express.
rem  *
rem  * ********************************************************************
rem  * Step 1 of 2, Set the global environment variables,
rem  *              Delete any previously created file...
rem  *
     set CmdName=CblV80E3
     call Env1PROD
     set JobStatus=0000
     if "%SYSLOG%" == "" set syslog=c:\SimoLIBR\LOGS\SimoTime.LOG
rem  *
     call SimoNOTE "*******************************************************%CmdName%"
     call SimoNOTE "Starting JobName %CmdName%, User is %USERNAME%"
     call SimoNOTE "Identify JobStep SetEnvironment"
:SetEnvironment
     set SQEDDF01=%BaseLib1%\DataLibA\Asc1\SIMOTIME.DATA.SQEDDF01.DAT
     set SQEDDF02=%BaseLib1%\DataLibA\Wrk1\SIMOTIME.DATA.SQEDDF02.DAT
rem  *
rem  * *******************************************************************
rem  * Step 2 of 2, Compare the files...
rem  *
:CompareQSAM
     call SimoNOTE "Identify JobStep CompareQSAM"
     run CblV80C3
     if ERRORLEVEL = 1 set JobStatus=0020
     if not "%JobStatus%" == "0000" goto :EojNOK
:EojAok
     call SimoNOTE "Finished JobName %CmdName%, Job Status is %JobStatus%"
     goto :End
:EojNok
     call SimoNOTE "ABENDING JobName %CmdName%, Job Status is %JobStatus%"
:End
     call SimoNOTE "Conclude SysLog is %SYSLOG%"
     if not "%1" == "nopause" pause

Sample JCL
(Next) (Previous) (Table-of-Contents)

This sample suite of programs has four JCL members. The following table is a list of the sample JCL members.

JCL Member Description
CRTF80J1.JCL Create a sequential file containing fixed-length, 80-byte records.
CBLV80J1.JCL Read the sequential file created in the preceding job and write to a sequential file containing variable-length records.
CBLV80J2.JCL Read the file created in the preceding step and write a new sequential file containing fixed-length, 80-byte records.
CBLV80J3.JCL Read the two sequential files containing fixed-length, 80-byte records and compare the records. If not equal then write an entry to a log file.

Sample JCL, Create a Sequential File with Fixed-Length Records
(Next) (Previous) (Table-of-Contents)

The following is the JCL (CRTF80J1.JCL) that is used to create a sequential file containing fixed-length, 80-byte records. The text string within the records is variable-length with trailing spaces.

//CRTF80J1 JOB SIMOTIME,CLASS=1,MSGCLASS=0,NOTIFY=CSIP1
//* *******************************************************************
//*                   This program is provided by:                    *
//*                    SimoTime Enterprises, LLC                      *
//*           (C) Copyright 1987-2010 All Rights Reserved             *
//*             Web Site URL:   http://www.simotime.com               *
//*                   e-mail:   helpdesk@simotime.com                 *
//* *******************************************************************
//*
//* Text   - Create a Sequential Data Set on disk using IEBGENER.
//* Author - SimoTime Enterprises
//* Date   - January 24, 1996
//*
//* The first job step (QSAMDELT) will delete any previously created
//* file. The second job step (QCRTDIN1) will create a new file.
//*
//* This set of programs will run on a mainframe under MVS or on a
//* Personal Computer with Windows and Micro Focus Mainframe Express.
//*
//* *******************************************************************
//* Step   1   Delete any previously created file...
//*
//QSAMDELT EXEC PGM=IEFBR14
//SYSUT2   DD  DSN=SIMOTIME.DATA.SQEDDF01,DISP=(MOD,DELETE,DELETE),
//             STORCLAS=MFI,
//             SPACE=(TRK,5),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PS)
//*
//* *******************************************************************
//* Step   2   Create and populate a new QSAM file...
//*
//QCRTDIN1 EXEC PGM=IEBGENER
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  DUMMY
//* :....1....:....2....:....3....:....4....:....5....:....6....:....7.
//SYSUT1   DD  *
000000000001 A
000000000002 AB
000000000003 ABC
000000000004 ABCD
000000000005 ABCDE
000000000006 ABCDEF
000000000007 ABCDEFG
000000000008 ABCDEFGH
000000000009 ABCDEFGHI
000000000010 ABCDEFGHIJ
000000000011 ABCDEFGHIJK
000000000012 ABCDEFGHIJKL
000000000013 ABCDEFGHIJKLM
000000000014 ABCDEFGHIJKLMN
000000000015 ABCDEFGHIJKLMNO
000000000016 ABCDEFGHIJKLMNOP
000000000017 ABCDEFGHIJKLMNOPR
000000000018 ABCDEFGHIJKLMNOPQR
000000000019 ABCDEFGHIJKLMNOPQRS
000000000020 ABCDEFGHIJKLMNOPQRST
000000000021 ABCDEFGHIJKLMNOPQRSTU
000000000022 ABCDEFGHIJKLMNOPQRSTUV
000000000023 ABCDEFGHIJKLMNOPQRSTUVW
000000000024 ABCDEFGHIJKLMNOPQRSTUVWX
000000000025 ABCDEFGHIJKLMNOPQRSTUVWXY
000000000026 ABCDEFGHIJKLMNOPQRSTUVWXYZ
000000000027 ABCDEFGHIJKLMNOPQRSTUVWZXZ0123456789
000000000028 ABCDEFGHIJKLMNOPQRSTUVWXYZ
000000000029 ABCDEFGHIJKLMNOPQRSTUVWXY
000000000030 ABCDEFGHIJKLMNOPQRSTUVWX
000000000031 ABCDEFGHIJKLMNOPQRSTUVW
000000000032 ABCDEFGHIJKLMNOPQRSTUV
000000000033 ABCDEFGHIJKLMNOPQRSTU
000000000034 ABCDEFGHIJKLMNOPQRST
000000000035 ABCDEFGHIJKLMNOPQRS
000000000036 ABCDEFGHIJKLMNOPQR
000000000037 ABCDEFGHIJKLMNOPQ
000000000038 ABCDEFGHIJKLMNOR
000000000039 ABCDEFGHIJKLMNO
000000000040 ABCDEFGHIJKLMN
000000000041 ABCDEFGHIJKLM
000000000042 ABCDEFGHIJKL
000000000043 ABCDEFGHIJK
000000000044 ABCDEFGHIJ
000000000045 ABCDEFGHI
000000000046 ABCDEFGH
000000000047 ABCDEFG
000000000048 ABCDEF
000000000049 ABCDE
000000000050 ABCD
000000000051 ABC
000000000052 AB
000000000053 A
000000000054 a
000000000055 ab
000000000056 abc
000000000057 abcd
000000000058 abcde
000000000059 abcdef
000000000060 abcdefg
000000000061 abcdefgh
000000000062 abcdefghi
000000000063 abcdefghij
000000000064 abcdefghijk
000000000065 abcdefghijkl
000000000066 abcdefghijklm
000000000067 abcdefghijklmn
000000000068 abcdefghijklmno
000000000069 abcdefghijklmnop
000000000070 abcdefghijklmnopr
000000000071 abcdefghijklmnopqr
000000000072 abcdefghijklmnopqrs
000000000073 abcdefghijklmnopqrst
000000000074 abcdefghijklmnopqrstu
000000000075 abcdefghijklmnopqrstuv
000000000076 abcdefghijklmnopqrstuvw
000000000077 abcdefghijklmnopqrstuvwx
000000000078 abcdefghijklmnopqrstuvwxy
000000000079 abcdefghijklmnopqrstuvwxyz
000000000080 abcdefghijklmnopqrstuvwzxz0123456789
000000000081 abcdefghijklmnopqrstuvwxyz
000000000082 abcdefghijklmnopqrstuvwxy
000000000083 abcdefghijklmnopqrstuvwx
000000000084 abcdefghijklmnopqrstuvw
000000000085 abcdefghijklmnopqrstuv
000000000086 abcdefghijklmnopqrstu
000000000087 abcdefghijklmnopqrst
000000000088 abcdefghijklmnopqrs
000000000089 abcdefghijklmnopqr
000000000090 abcdefghijklmnopq
000000000091 abcdefghijklmnor
000000000092 abcdefghijklmno
000000000093 abcdefghijklmn
000000000094 abcdefghijklm
000000000095 abcdefghijkl
000000000096 abcdefghijk
000000000097 abcdefghij
000000000098 abcdefghi
000000000099 abcdefgh
000000000100 abcdefg
000000000101 abcdef
000000000102 abcde
000000000103 abcd
000000000104 abc
000000000105 ab
000000000106 a
/*
//SYSUT2   DD  DSN=SIMOTIME.DATA.SQEDDF01,
//             DISP=(NEW,CATLG,DELETE),
//             STORCLAS=MFI,
//             SPACE=(TRK,5),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PS)
//

Sample JCL, Convert a Fixed Length File to a Sequential File with Variable-Length Records
(Next) (Previous) (Table-of-Contents)

The following is the JCL (CBLV80J1.JCL) used to read the file containing fixed-length, 80-byte records and create a file containing variable-length records. The input file was created in the preceding step (CRTF80J1.JCL) and contains variable length text string with trailing space characters to make the records fixed length. The output file will have variable length records consisting of the text string with the trailing spaces removed.

//CBLV80J1 JOB SIMOTIME,CLASS=1,MSGCLASS=0,NOTIFY=CSIP1
//JOBLIB   DD  DISP=SHR,DSN=MFI01.SIMOPROD.LOADLIB1
//* *******************************************************************
//*                   This program is provided by:                    *
//*                    SimoTime Enterprises, LLC                      *
//*           (C) Copyright 1987-2010 All Rights Reserved             *
//*             Web Site URL:   http://www.simotime.com               *
//*                   e-mail:   helpdesk@simotime.com                 *
//* *******************************************************************
//*
//* Text   - Read fixed file, create variable file.
//* Author - SimoTime Enterprises
//* Date   - January 24, 1996
//*
//* The first job step (QSAMDELT) will delete any previously created
//* file.
//* The second job step (CBLV80S1) will create a new sequential file
//* with variable length records.
//*
//* This set of programs will run on a mainframe under MVS or on a
//* Personal Computer with Windows and Micro Focus Mainframe Express.
//*
//* ALLOCATION - Is the amount of disk space needed for the data set.
//* The format for the space parameter is:
//*
//* SPACE=(SPACE-UNIT,(PRIMARY,SECONDARY),RLSE)
//*
//* SPACE-UNIT - The type of space to be allocated.  It may be one
//* of the following:
//*   TRK - For space allocated by tracks.
//*         One track on 3390 disk = 47,476 bytes.
//*   BLKSIZE - Where 'blksize' is a number indicating the blksize for
//*             the data set (the upper limit being 23,476 (1/2 trk).
//*   PRIMARY - The number of tracks or blocks allocated initially
//*             to the data set.
//*   SECONDARY - The number of tracks or blocks to allocate if the
//*               primary allocation is exceeded (usually 10% of the
//*               primary allocation is adequate).
//*               Up to 15 secondary allocations can be made.
//*
//* An example of coding the space parameter is:
//*
//*   SPACE=(TRK,(10,1),RLSE)
//*
//* Meaning that 10 tracks are allocated initially, and if this
//* allocation is exceeded, extensions of one track are added.
//* RLSE specifies that unused space will be released when the job step
//* ends. RLSE is coded only for sequential data sets.
//* The maximum space that can be allocated to this data set is:
//* 10 + 15(1) = 25 tracks
//* *******************************************************************
//* Step   1   Delete any previously created file...
//*
//QSAMDELT EXEC PGM=IEFBR14
//SYSUT2   DD  DSN=SIMOTIME.DATA.VREDDV01,DISP=(MOD,DELETE,DELETE),
//*            STORCLAS=MFI,
//             UNIT=3390,VOL=SER=LARRYS,
//             SPACE=(TRK,5),
//             DCB=(RECFM=VB,LRECL=84,BLKSIZE=840,DSORG=PS)
//*
//* *******************************************************************
//* Step   2   Create and populate a new QSAM file. The SQEDDF01 file
//*            is created using CRTF80J1.JCL.
//*
//CBLV80S1 EXEC PGM=CBLV80C1
//SQEDDF01 DD  DSN=SIMOTIME.DATA.SQEDDF01,DISP=SHR
//VREDDV01 DD  DSN=SIMOTIME.DATA.VREDDV01,DISP=(NEW,CATLG,CATLG),
//*            STORCLAS=MFI,
//             UNIT=3390,VOL=SER=LARRYS,
//             SPACE=(TRK,(10,10),RLSE),
//             DCB=(RECFM=VB,LRECL=84,BLKSIZE=840,DSORG=PS)
//SYSOUT   DD  SYSOUT=*
//

Sample JCL, Convert a Variable-Length File to a Fixed-Length File
(Next) (Previous) (Table-of-Contents)

The following is the JCL (CBLV80J2.JCL) used to read the file containing variable length records and create a file containing fixed length records.

//CBLV80J2 JOB SIMOTIME,CLASS=1,MSGCLASS=0,NOTIFY=CSIP1
//* *******************************************************************
//*                   This program is provided by:                    *
//*                    SimoTime Enterprises, LLC                      *
//*           (C) Copyright 1987-2010 All Rights Reserved             *
//*             Web Site URL:   http://www.simotime.com               *
//*                   e-mail:   helpdesk@simotime.com                 *
//* *******************************************************************
//*
//* Text   - Create a Sequential Data Set on disk using IEBGENER.
//* Author - SimoTime Enterprises
//* Date   - January 24, 1996
//*
//* The first job step (QSAMDELT) will delete any previously created
//* file. The second job step (QCRTDIN1) will create a new file.
//*
//* This set of programs will run on a mainframe under MVS or on a
//* Personal Computer with Windows and Micro Focus Mainframe Express.
//*
//* *******************************************************************
//* Step   1   Delete any previously created file...
//*
//QSAMDELT EXEC PGM=IEFBR14
//SYSUT2   DD  DSN=SIMOTIME.DATA.SQEDDF02,DISP=(MOD,DELETE,DELETE),
//             STORCLAS=MFI,
//             SPACE=(TRK,5),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PS)
//*
//* *******************************************************************
//* Step   2   Create and populate a new QSAM file. The SQEDDF01 file
//*            is created using CRTF80J1.JCL.
//*
//CBLV80S1 EXEC PGM=CBLV80C2
//VREDDV01 DD  DSN=SIMOTIME.DATA.VREDDV01,DISP=SHR
//SQEDDF02 DD  DSN=SIMOTIME.DATA.SQEDDF02,DISP=(NEW,CATLG,DELETE),
//             STORCLAS=MFI,
//             SPACE=(TRK,5),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PS)
//SYSOUT   DD  SYSOUT=*
//

Sample JCL, Compare Two Files
(Next) (Previous) (Table-of-Contents)

The following is the JCL (CBLV80J3.JCL) used to compare the records within the two sequential files created in the preceding steps. If an unequal condition exist the records will be displayed and an entry will be written to the log file.

//CBLV80J3 JOB SIMOTIME,CLASS=1,MSGCLASS=0,NOTIFY=CSIP1
//* *******************************************************************
//*                   This program is provided by:                    *
//*                    SimoTime Enterprises, LLC                      *
//*           (C) Copyright 1987-2010 All Rights Reserved             *
//*             Web Site URL:   http://www.simotime.com               *
//*                   e-mail:   helpdesk@simotime.com                 *
//* *******************************************************************
//*
//* Text   - Compare the two sequential files.
//* Author - SimoTime Enterprises
//* Date   - January 24, 1996
//*
//* The first job step (DELTLOGS) will delete any previously created
//* log file. The second job step (FILECOMP) will compare the files.
//*
//* This set of programs will run on a mainframe under MVS or on a
//* Personal Computer with Windows and Micro Focus Mainframe Express.
//*
//* *******************************************************************
//* Step   1   Delete any previously created file...
//*
//DELTLOGS EXEC PGM=IEFBR14
//SYSLOG   DD  DSN=SIMOTIME.DATA.SYSLOGT1,DISP=(MOD,DELETE,DELETE),
//             STORCLAS=MFI,
//             SPACE=(TRK,5),
//             DCB=(RECFM=V,LRECL=1055,DSORG=PS)
//*
//* *******************************************************************
//* Step   2   Create and populate a new QSAM file. The SQEDDF01 file
//*            is created using CRTF80J1.JCL.
//*
//FILECOMP EXEC PGM=CBLV80C3
//SQEDDF01 DD  DSN=SIMOTIME.DATA.SQEDDF01,DISP=SHR
//SQEDDF02 DD  DSN=SIMOTIME.DATA.SQEDDF02,DISP=SHR
//SYSLOG   DD  DSN=SIMOTIME.DATA.SYSLOGT1,DISP=(NEW,CATLG,DELETE),
//             STORCLAS=MFI,
//             SPACE=(TRK,5),
//             DCB=(RECFM=V,LRECL=1055,DSORG=PS)
//SYSOUT   DD  SYSOUT=*
//

COBOL Source Code for Sample Programs
(Next) (Previous) (Table-of-Contents)

The following is the source code listings for the three sample COBOL program.

COBOL, Convert a Fixed Length File to a Sequential File with Variable-Length Records
(Next) (Previous) (Table-of-Contents)

The following is the COBOL source code (CBLV80C1.CBL) used to read the input file containing fixed-length, 80-byte records and create an output file containing variable-length records. The output file will have variable length records consisting of the text string with the trailing spaces removed.

       IDENTIFICATION DIVISION.
       PROGRAM-ID.    CBLV80C1.
       AUTHOR.        SIMOTIME ENTERPRISES.
      *****************************************************************
      *           This program was generated by SimoZAPS              *
      *             A product of SimoTime Enterprises                 *
      *        Our e-mail address is: helpdesk@simotime.com           *
      *     Also, visit our Web Site at http://www.simotime.com       *
      *                                                               *
      *  Generation Date: 2004-05-13  Generation Time: 10:54:27:41    *
      *                                                               *
      *                                   Record    Record     Key    *
      *  Function  Name     Organization  Format    Max-Min  Pos-Len  *
      *  INPUT     SQEDDF01 SEQUENTIAL    FIXED      00080            *
      *                                                               *
      *  OUTPUT    VREDDV01 SEQUENTIAL    VARIABLE   00080            *
      *                                              00001            *
      *                                                               *
      *            Translation Mode is EBCDIC to EBCDIC               *
      *                                                               *
      *****************************************************************
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT SQEDDF01-FILE  ASSIGN TO       SQEDDF01
                  ORGANIZATION  IS SEQUENTIAL
                  ACCESS MODE   IS SEQUENTIAL
                  FILE STATUS   IS SQEDDF01-STATUS.
           SELECT VREDDV01-FILE  ASSIGN TO       VREDDV01
                  ORGANIZATION  IS SEQUENTIAL
                  ACCESS MODE   IS SEQUENTIAL
                  FILE STATUS   IS VREDDV01-STATUS.

      *****************************************************************
       DATA DIVISION.
       FILE SECTION.
       FD  SQEDDF01-FILE
           DATA RECORD    IS SQEDDF01-REC
           .
       01  SQEDDF01-REC.
           05  SQEDDF01-DATA-01 PIC X(00080).

       FD  VREDDV01-FILE
           DATA RECORD    IS VREDDV01-REC
           RECORDING MODE is V
           RECORD is VARYING in SIZE from 1 to 80
           DEPENDING ON VREDDV01-RECORD-SIZE.

       01  VREDDV01-REC.
           05  VREDDV01-DATA-01 PIC X(00080).

      *****************************************************************
      * This program was created using the SYSMASK1.TXT file as input.*
      * The SYSMASK1 provides for the sequential reading of the input *
      * file and the sequential writing of the output file.           *
      * If the output file is indexed then the input file must be in  *
      * sequence by the field that will be used to provide the key    *
      * for the output file.                                          *
      * If the key field is not in sequence then refer to SYSMASK2    *
      * to provide for a random add or update of the indexed file.    *
      *****************************************************************
       WORKING-STORAGE SECTION.
       01  SIM-TITLE.
           05  T1 pic X(11) value '* CBLV80C1 '.
           05  T2 pic X(34) value 'Read fixed-80, write variable     '.
           05  T3 pic X(10) value 'v04.02.23 '.
           05  T4 pic X(24) value ' http://www.simotime.com'.
       01  SIM-COPYRIGHT.
           05  C1 pic X(11) value '* CBLV80C1 '.
           05  C2 pic X(20) value 'Created by SimoZAPS,'.
           05  C3 pic X(20) value '  a utility package '.
           05  C4 pic X(28) value 'of SimoTime Enterprises, LLC'.

       01  SQEDDF01-STATUS.
           05  SQEDDF01-STATUS-L     pic X.
           05  SQEDDF01-STATUS-R     pic X.
       01  SQEDDF01-EOF              pic X       value 'N'.
       01  SQEDDF01-OPEN-FLAG        pic X       value 'C'.

       01  VREDDV01-STATUS.
           05  VREDDV01-STATUS-L     pic X.
           05  VREDDV01-STATUS-R     pic X.
       01  VREDDV01-EOF              pic X       value 'N'.
       01  VREDDV01-OPEN-FLAG        pic X       value 'C'.

      *****************************************************************
      * The following buffers are used to create a four-byte status   *
      * code that may be displayed.                                   *
      *****************************************************************
       01  IO-STATUS.
           05  IO-STAT1            pic X.
           05  IO-STAT2            pic X.
       01  IO-STATUS-04.
           05  IO-STATUS-0401      pic 9     value 0.
           05  IO-STATUS-0403      pic 999   value 0.
       01  TWO-BYTES-BINARY        pic 9(4)  BINARY.
       01  TWO-BYTES-ALPHA         redefines TWO-BYTES-BINARY.
           05  TWO-BYTES-LEFT      pic X.
           05  TWO-BYTES-RIGHT     pic X.

      *****************************************************************
      * Message Buffer used by the Z-DISPLAY-MESSAGE-TEXT routine.    *
      *****************************************************************
       01  MESSAGE-BUFFER.
           05  MESSAGE-HEADER      pic X(11)   value '* CBLV80C1 '.
           05  MESSAGE-TEXT.
               10  MESSAGE-TEXT-1  pic X(68)   value SPACES.
               10  MESSAGE-TEXT-2  pic X(188)  value SPACES.

      *****************************************************************
       01  PROGRAM-NAME            pic X(8)     value 'CBLV80C1'.

       01  SYSTEM-DATE.
           05  SYSTEM-DATE-YYYY    pic X(4)     value 'yyyy'.
           05  SYSTEM-DATE-MM      pic X(2)     value 'mm'.
           05  SYSTEM-DATE-DD      pic X(2)     value 'dd'.
       01  SYSTEM-TIME.
           05  SYSTEM-TIME-HH      pic X(2)     value 'hh'.
           05  SYSTEM-TIME-MM      pic X(2)     value 'mm'.
           05  SYSTEM-TIME-SS      pic X(2)     value 'ss'.
           05  SYSTEM-TIME-00      pic X(2)     value '00'.

       01  EDITED-DATE.
           05  EDITED-DATE-YYYY    pic X(4)     value 'yyyy'.
           05  filler              pic X        value '/'.
           05  EDITED-DATE-MM      pic X(2)     value 'mm'.
           05  filler              pic X        value '/'.
           05  EDITED-DATE-DD      pic X(2)     value 'dd'.
       01  EDITED-TIME.
           05  EDITED-TIME-HH      pic X(2)     value 'hh'.
           05  filler              pic X        value ':'.
           05  EDITED-TIME-MM      pic X(2)     value 'mm'.
           05  filler              pic X        value ':'.
           05  EDITED-TIME-SS      pic X(2)     value 'ss'.
           05  filler              pic X        value ':'.
           05  EDITED-TIME-00      pic X(2)     value '00'.

       01  APPL-RESULT             pic S9(9)    comp.
           88  APPL-AOK            value 0.
           88  APPL-EOF            value 16.

       01  VREDDV01-RECORD-SIZE    pic 9(5)    value 80.
       01  TEXT-LENGTH             pic 9(5)    value 0.

       01  SQEDDF01-TOTAL.
           05  SQEDDF01-RDR  pic 9(9)  value 0.
           05  filler        pic X(3)  value ' - '.
           05  filler        pic X(23) value 'Line count for SQEDDF01'.
       01  VREDDV01-TOTAL.
           05  VREDDV01-ADD  pic 9(9)    value 0.
           05  filler        pic X(3)  value ' - '.
           05  filler        pic X(23) value 'Line count for VREDDV01'.

      *****************************************************************
       PROCEDURE DIVISION.
           perform Z-POST-COPYRIGHT
           perform Z-GET-DATE-AND-TIME
           perform SQEDDF01-OPEN
           perform VREDDV01-OPEN

           perform until SQEDDF01-STATUS not = '00'
               perform SQEDDF01-READ
               if  SQEDDF01-STATUS = '00'
                   add 1 to SQEDDF01-RDR
                   perform BUILD-OUTPUT-RECORD
                   perform CALCULATE-STRING-LENGTH
                   add TEXT-LENGTH to ZERO giving VREDDV01-RECORD-SIZE
                   perform VREDDV01-WRITE
                   if  VREDDV01-STATUS = '00'
                       add 1 to VREDDV01-ADD
                   end-if
               end-if
           end-perform

           move SQEDDF01-TOTAL to MESSAGE-TEXT
           perform Z-DISPLAY-MESSAGE-TEXT

           move VREDDV01-TOTAL to MESSAGE-TEXT
           perform Z-DISPLAY-MESSAGE-TEXT

           if  APPL-EOF
               move 'is Complete...' to MESSAGE-TEXT
           else
               move 'is ABENDING...' to MESSAGE-TEXT
           end-if
           perform Z-DISPLAY-MESSAGE-TEXT

           perform VREDDV01-CLOSE
           perform SQEDDF01-CLOSE
           move ZERO to RETURN-CODE

           GOBACK.

      *****************************************************************
       BUILD-OUTPUT-RECORD.
           move ALL x'40' to VREDDV01-REC
           move SQEDDF01-REC(1:80) to VREDDV01-REC(1:80)
           exit.

      *****************************************************************
       CALCULATE-STRING-LENGTH.
           add 80 to ZERO giving TEXT-LENGTH
      *    The following "IF" logic is used to reduce the number of
      *    loops in the following perform. This should be quicker for
      *    calculating the length of the test string within the record.
           if  SQEDDF01-REC(41:40) = all x'40'
               add 40 to ZERO giving TEXT-LENGTH
               if  SQEDDF01-REC(21:20) = all x'40'
                   add 20 to ZERO giving TEXT-LENGTH
               end-if
           else
               if  SQEDDF01-REC(61:20) = all x'40'
                  add 60 to ZERO giving TEXT-LENGTH
               end-if
           end-if

           perform
             until TEXT-LENGTH = 0
             or    SQEDDF01-REC(TEXT-LENGTH:1) not = x'40'
             if  SQEDDF01-REC(TEXT-LENGTH:1) = x'40'
                 subtract 1 from TEXT-LENGTH
             end-if
           end-perform
           if  TEXT-LENGTH = 0
               add 1 to TEXT-LENGTH
           end-if
           exit.

      *****************************************************************
      * I/O Routines for the INPUT File...                            *
      *****************************************************************
       SQEDDF01-CLOSE.
           add 8 to ZERO giving APPL-RESULT.
           close SQEDDF01-FILE
           if  SQEDDF01-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
           else
               add 12 to ZERO giving APPL-RESULT
           end-if
           if  APPL-AOK
               CONTINUE
           else
               move 'CLOSE Failure with SQEDDF01' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move SQEDDF01-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.
      *---------------------------------------------------------------*
       SQEDDF01-READ.
           read SQEDDF01-FILE
           if  SQEDDF01-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
           else
               if  SQEDDF01-STATUS = '10'
                   add 16 to ZERO giving APPL-RESULT
               else
                   add 12 to ZERO giving APPL-RESULT
               end-if
           end-if
           if  APPL-AOK
               CONTINUE
           else
               if  APPL-EOF
                   move 'Y' to SQEDDF01-EOF
               else
                   move 'READ Failure with SQEDDF01' to MESSAGE-TEXT
                   perform Z-DISPLAY-MESSAGE-TEXT
                   move SQEDDF01-STATUS to IO-STATUS
                   perform Z-DISPLAY-IO-STATUS
                   perform Z-ABEND-PROGRAM
               end-if
           end-if
           exit.
      *---------------------------------------------------------------*
       SQEDDF01-OPEN.
           add 8 to ZERO giving APPL-RESULT.
           open input SQEDDF01-FILE
           if  SQEDDF01-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
               move 'O' to SQEDDF01-OPEN-FLAG
           else
               add 12 to ZERO giving APPL-RESULT
           end-if
           if  APPL-AOK
               CONTINUE
           else
               move 'OPEN Failure with SQEDDF01' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move SQEDDF01-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.

      *****************************************************************
      * I/O Routines for the OUTPUT File...                           *
      *****************************************************************
       VREDDV01-WRITE.
           if  VREDDV01-OPEN-FLAG = 'C'
               perform VREDDV01-OPEN
           end-if
           write VREDDV01-REC
           if  VREDDV01-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
           else
               if  VREDDV01-STATUS = '10'
                   add 16 to ZERO giving APPL-RESULT
               else
                   add 12 to ZERO giving APPL-RESULT
               end-if
           end-if.
           if  APPL-AOK
               CONTINUE
           else
               move 'WRITE Failure with VREDDV01' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move VREDDV01-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.
      *---------------------------------------------------------------*
       VREDDV01-OPEN.
           add 8 to ZERO giving APPL-RESULT.
           open OUTPUT VREDDV01-FILE
           if  VREDDV01-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
               move 'O' to VREDDV01-OPEN-FLAG
           else
               add 12 to ZERO giving APPL-RESULT
           end-if
           if  APPL-AOK
               CONTINUE
           else
               move 'OPEN Failure with VREDDV01' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move VREDDV01-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.
      *---------------------------------------------------------------*
       VREDDV01-CLOSE.
           add 8 to ZERO giving APPL-RESULT.
           close VREDDV01-FILE
           if  VREDDV01-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
               move 'C' to VREDDV01-OPEN-FLAG
           else
               add 12 to ZERO giving APPL-RESULT
           end-if
           if  APPL-AOK
               CONTINUE
           else
               move 'CLOSE Failure with VREDDV01' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move VREDDV01-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.

      *****************************************************************
      * The following Z-ROUTINES provide administrative functions     *
      * for this program.                                             *
      *****************************************************************
      * ABEND the program, post a message to the console and issue    *
      * a STOP RUN.                                                   *
      *****************************************************************
       Z-ABEND-PROGRAM.
           if  MESSAGE-TEXT not = SPACES
               perform Z-DISPLAY-MESSAGE-TEXT
           end-if
           move 'PROGRAM-IS-ABENDING...'  to MESSAGE-TEXT
           perform Z-DISPLAY-MESSAGE-TEXT
           add 12 to ZERO giving RETURN-CODE
           STOP RUN
           exit.

      *****************************************************************
      * Display CONSOLE messages...                                   *
      *****************************************************************
       Z-DISPLAY-MESSAGE-TEXT.
           if MESSAGE-TEXT-2 = SPACES
               display MESSAGE-BUFFER(1:79)
           else
               display MESSAGE-BUFFER
           end-if
           move all SPACES to MESSAGE-TEXT
           exit.

      *****************************************************************
      * Display the file status bytes. This routine will display as   *
      * four digits. If the full two byte file status is numeric it   *
      * will display as 00nn. If the 1st byte is a numeric nine (9)   *
      * the second byte will be treated as a binary number and will   *
      * display as 9nnn.                                              *
      *****************************************************************
       Z-DISPLAY-IO-STATUS.
           if  IO-STATUS not NUMERIC
           or  IO-STAT1 = '9'
               move IO-STAT1 to IO-STATUS-04(1:1)
               subtract TWO-BYTES-BINARY from TWO-BYTES-BINARY
               move IO-STAT2 to TWO-BYTES-RIGHT
               add TWO-BYTES-BINARY to ZERO giving IO-STATUS-0403
               move 'File Status is: nnnn' to MESSAGE-TEXT
               move IO-STATUS-04 to MESSAGE-TEXT(17:4)
               perform Z-DISPLAY-MESSAGE-TEXT
           else
               move '0000' to IO-STATUS-04
               move IO-STATUS to IO-STATUS-04(3:2)
               move 'File Status is: nnnn' to MESSAGE-TEXT
               move IO-STATUS-04 to MESSAGE-TEXT(17:4)
               perform Z-DISPLAY-MESSAGE-TEXT
           end-if
           exit.

      *****************************************************************
      * Get Date and Time                                             *
      *****************************************************************
       Z-GET-DATE-AND-TIME.
           accept SYSTEM-DATE from DATE YYYYMMDD
           accept SYSTEM-TIME from TIME
           move SYSTEM-DATE-YYYY to EDITED-DATE-YYYY
           move SYSTEM-DATE-MM   to EDITED-DATE-MM
           move SYSTEM-DATE-DD   to EDITED-DATE-DD
           move SYSTEM-TIME-HH to EDITED-TIME-HH
           move SYSTEM-TIME-MM to EDITED-TIME-MM
           move SYSTEM-TIME-SS to EDITED-TIME-SS
           move SYSTEM-TIME-00 to EDITED-TIME-00
           exit.

      *****************************************************************
       Z-POST-COPYRIGHT.
           display SIM-TITLE
           display SIM-COPYRIGHT
           exit.
      *****************************************************************
      *           This program was generated by SimoZAPS              *
      *             A product of SimoTime Enterprises                 *
      *        Our e-mail address is: helpdesk@simotime.com           *
      *     Also, visit our Web Site at http://www.simotime.com       *
      *  Generation Date: 2004-05-13  Generation Time: 10:54:27:44    *
      *****************************************************************

COBOL, Convert a Variable-Length File to a Fixed-Length File
(Next) (Previous) (Table-of-Contents)

The following is the COBOL source code (CBLV80C2.CBL) used to read the file containing variable length records and create a file containing fixed length records.

       IDENTIFICATION DIVISION.
       PROGRAM-ID.    CBLV80C2.
       AUTHOR.        SIMOTIME ENTERPRISES.
      *****************************************************************
      *           This program was generated by SimoZAPS              *
      *             A product of SimoTime Enterprises                 *
      *        Our e-mail address is: helpdesk@simotime.com           *
      *     Also, visit our Web Site at http://www.simotime.com       *
      *                                                               *
      *  Generation Date: 2004-05-14  Generation Time: 05:11:58:46    *
      *                                                               *
      *                                   Record    Record     Key    *
      *  Function  Name     Organization  Format    Max-Min  Pos-Len  *
      *  INPUT     VREDDV01 SEQUENTIAL    VARIABLE   00080            *
      *                                              00001            *
      *  OUTPUT    SQEDDF02 SEQUENTIAL    FIXED      00080            *
      *                                                               *
      *                                                               *
      *            Translation Mode is EBCDIC to EBCDIC               *
      *                                                               *
      *****************************************************************
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT VREDDV01-FILE  ASSIGN TO       VREDDV01
                  ORGANIZATION  IS SEQUENTIAL
                  ACCESS MODE   IS SEQUENTIAL
                  FILE STATUS   IS VREDDV01-STATUS.
           SELECT SQEDDF02-FILE  ASSIGN TO       SQEDDF02
                  ORGANIZATION  IS SEQUENTIAL
                  ACCESS MODE   IS SEQUENTIAL
                  FILE STATUS   IS SQEDDF02-STATUS.

      *****************************************************************
       DATA DIVISION.
       FILE SECTION.
       FD  VREDDV01-FILE
           DATA RECORD    IS VREDDV01-REC
           RECORDING MODE IS V.

       01  VREDDV01-REC.
           05  VREDDV01-DATA-01 PIC X(00080).

       FD  SQEDDF02-FILE
           DATA RECORD    IS SQEDDF02-REC.
       01  SQEDDF02-REC.
           05  SQEDDF02-DATA-01 PIC X(00080).

      *****************************************************************
      * This program was created using the SYSMASK1.TXT file as input.*
      * The SYSMASK1 provides for the sequential reading of the input *
      * file and the sequential writing of the output file.           *
      * If the output file is indexed then the input file must be in  *
      * sequence by the field that will be used to provide the key    *
      * for the output file.                                          *
      * If the key field is not in sequence then refer to SYSMASK2    *
      * to provide for a random add or update of the indexed file.    *
      *****************************************************************
       WORKING-STORAGE SECTION.
       01  SIM-TITLE.
           05  T1 pic X(11) value '* CBLV80C2 '.
           05  T2 pic X(34) value 'Read Variable, write fixed-80     '.
           05  T3 pic X(10) value 'v04.10.08 '.
           05  T4 pic X(24) value ' http://www.simotime.com'.
       01  SIM-COPYRIGHT.
           05  C1 pic X(11) value '* CBLV80C2 '.
           05  C2 pic X(20) value 'Copyright 1987-2010 '.
           05  C3 pic X(28) value '  SimoTime Enterprises, LLC '.
           05  C4 pic X(20) value ' All Rights Reserved'.

       01  VREDDV01-STATUS.
           05  VREDDV01-STATUS-L     pic X.
           05  VREDDV01-STATUS-R     pic X.
       01  VREDDV01-EOF              pic X       value 'N'.
       01  VREDDV01-OPEN-FLAG        pic X       value 'C'.

       01  SQEDDF02-STATUS.
           05  SQEDDF02-STATUS-L     pic X.
           05  SQEDDF02-STATUS-R     pic X.
       01  SQEDDF02-EOF              pic X       value 'N'.
       01  SQEDDF02-OPEN-FLAG        pic X       value 'C'.

      *****************************************************************
      * The following buffers are used to create a four-byte status   *
      * code that may be displayed.                                   *
      *****************************************************************
       01  IO-STATUS.
           05  IO-STAT1            pic X.
           05  IO-STAT2            pic X.
       01  IO-STATUS-04.
           05  IO-STATUS-0401      pic 9     value 0.
           05  IO-STATUS-0403      pic 999   value 0.
       01  TWO-BYTES-BINARY        pic 9(4)  BINARY.
       01  TWO-BYTES-ALPHA         redefines TWO-BYTES-BINARY.
           05  TWO-BYTES-LEFT      pic X.
           05  TWO-BYTES-RIGHT     pic X.

      *****************************************************************
      * Message Buffer used by the Z-DISPLAY-MESSAGE-TEXT routine.    *
      *****************************************************************
       01  MESSAGE-BUFFER.
           05  MESSAGE-HEADER      pic X(11)   value '* CBLV80C2 '.
           05  MESSAGE-TEXT.
               10  MESSAGE-TEXT-1  pic X(68)   value SPACES.
               10  MESSAGE-TEXT-2  pic X(188)  value SPACES.

      *****************************************************************
       01  PROGRAM-NAME            pic X(8)     value 'CBLV80C2'.

       01  SYSTEM-DATE.
           05  SYSTEM-DATE-YYYY    pic X(4)     value 'yyyy'.
           05  SYSTEM-DATE-MM      pic X(2)     value 'mm'.
           05  SYSTEM-DATE-DD      pic X(2)     value 'dd'.
       01  SYSTEM-TIME.
           05  SYSTEM-TIME-HH      pic X(2)     value 'hh'.
           05  SYSTEM-TIME-MM      pic X(2)     value 'mm'.
           05  SYSTEM-TIME-SS      pic X(2)     value 'ss'.
           05  SYSTEM-TIME-00      pic X(2)     value '00'.

       01  EDITED-DATE.
           05  EDITED-DATE-YYYY    pic X(4)     value 'yyyy'.
           05  filler              pic X        value '/'.
           05  EDITED-DATE-MM      pic X(2)     value 'mm'.
           05  filler              pic X        value '/'.
           05  EDITED-DATE-DD      pic X(2)     value 'dd'.
       01  EDITED-TIME.
           05  EDITED-TIME-HH      pic X(2)     value 'hh'.
           05  filler              pic X        value ':'.
           05  EDITED-TIME-MM      pic X(2)     value 'mm'.
           05  filler              pic X        value ':'.
           05  EDITED-TIME-SS      pic X(2)     value 'ss'.
           05  filler              pic X        value ':'.
           05  EDITED-TIME-00      pic X(2)     value '00'.

       01  APPL-RESULT             pic S9(9)    comp.
           88  APPL-AOK            value 0.
           88  APPL-EOF            value 16.

       01  VREDDV01-TOTAL.
           05  VREDDV01-RDR  pic 9(9)  value 0.
           05  filler        pic X(3)  value ' - '.
           05  filler        pic X(23) value 'Line count for VREDDV01'.
       01  SQEDDF02-TOTAL.
           05  SQEDDF02-ADD  pic 9(9)  value 0.
           05  filler        pic X(3)  value ' - '.
           05  filler        pic X(23) value 'Line count for SQEDDF02'.


      *****************************************************************
       PROCEDURE DIVISION.
           perform Z-POST-COPYRIGHT
           perform Z-GET-DATE-AND-TIME
           perform VREDDV01-OPEN
           perform SQEDDF02-OPEN

           perform until VREDDV01-STATUS not = '00'
               perform VREDDV01-READ
               if  VREDDV01-STATUS = '00'
                   add 1 to VREDDV01-RDR
                   perform BUILD-OUTPUT-RECORD
                   perform SQEDDF02-WRITE
                   if  SQEDDF02-STATUS = '00'
                       add 1 to SQEDDF02-ADD
                   end-if
               end-if
           end-perform

           move VREDDV01-TOTAL to MESSAGE-TEXT
           perform Z-DISPLAY-MESSAGE-TEXT

           move SQEDDF02-TOTAL to MESSAGE-TEXT
           perform Z-DISPLAY-MESSAGE-TEXT

           if  APPL-EOF
               move 'is Complete...' to MESSAGE-TEXT
           else
               move 'is ABENDING...' to MESSAGE-TEXT
           end-if
           perform Z-DISPLAY-MESSAGE-TEXT

           perform SQEDDF02-CLOSE
           perform VREDDV01-CLOSE
           GOBACK.

      *****************************************************************
       BUILD-OUTPUT-RECORD.
      *>   TransINIT process...
           move ALL x'40' to SQEDDF02-REC
      *>   TransCOPY...
           move VREDDV01-REC(00001:00080) to SQEDDF02-REC(00001:00080)
           exit.

      *****************************************************************
      * I/O Routines for the INPUT File...                            *
      *****************************************************************
       VREDDV01-CLOSE.
           add 8 to ZERO giving APPL-RESULT.
           close VREDDV01-FILE
           if  VREDDV01-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
           else
               add 12 to ZERO giving APPL-RESULT
           end-if
           if  APPL-AOK
               CONTINUE
           else
               move 'CLOSE Failure with VREDDV01' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move VREDDV01-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.
      *---------------------------------------------------------------*
       VREDDV01-READ.
           move SPACES to VREDDV01-REC
           read VREDDV01-FILE
           if  VREDDV01-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
           else
               if  VREDDV01-STATUS = '10'
                   add 16 to ZERO giving APPL-RESULT
               else
                   add 12 to ZERO giving APPL-RESULT
               end-if
           end-if
           if  APPL-AOK
               CONTINUE
           else
               if  APPL-EOF
                   move 'Y' to VREDDV01-EOF
               else
                   move 'READ Failure with VREDDV01' to MESSAGE-TEXT
                   perform Z-DISPLAY-MESSAGE-TEXT
                   move VREDDV01-STATUS to IO-STATUS
                   perform Z-DISPLAY-IO-STATUS
                   perform Z-ABEND-PROGRAM
               end-if
           end-if
           exit.
      *---------------------------------------------------------------*
       VREDDV01-OPEN.
           add 8 to ZERO giving APPL-RESULT.
           open input VREDDV01-FILE
           if  VREDDV01-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
               move 'O' to VREDDV01-OPEN-FLAG
           else
               add 12 to ZERO giving APPL-RESULT
           end-if
           if  APPL-AOK
               CONTINUE
           else
               move 'OPEN Failure with VREDDV01' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move VREDDV01-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.

      *****************************************************************
      * I/O Routines for the OUTPUT File...                           *
      *****************************************************************
       SQEDDF02-WRITE.
           if  SQEDDF02-OPEN-FLAG = 'C'
               perform SQEDDF02-OPEN
           end-if
           write SQEDDF02-REC
           if  SQEDDF02-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
           else
               if  SQEDDF02-STATUS = '10'
                   add 16 to ZERO giving APPL-RESULT
               else
                   add 12 to ZERO giving APPL-RESULT
               end-if
           end-if.
           if  APPL-AOK
               CONTINUE
           else
               move 'WRITE Failure with SQEDDF02' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move SQEDDF02-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.
      *---------------------------------------------------------------*
       SQEDDF02-OPEN.
           add 8 to ZERO giving APPL-RESULT.
           open OUTPUT SQEDDF02-FILE
           if  SQEDDF02-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
               move 'O' to SQEDDF02-OPEN-FLAG
           else
               add 12 to ZERO giving APPL-RESULT
           end-if
           if  APPL-AOK
               CONTINUE
           else
               move 'OPEN Failure with SQEDDF02' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move SQEDDF02-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.
      *---------------------------------------------------------------*
       SQEDDF02-CLOSE.
           add 8 to ZERO giving APPL-RESULT.
           close SQEDDF02-FILE
           if  SQEDDF02-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
               move 'C' to SQEDDF02-OPEN-FLAG
           else
               add 12 to ZERO giving APPL-RESULT
           end-if
           if  APPL-AOK
               CONTINUE
           else
               move 'CLOSE Failure with SQEDDF02' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move SQEDDF02-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.

      *****************************************************************
      * The following Z-ROUTINES provide administrative functions     *
      * for this program.                                             *
      *****************************************************************
      * ABEND the program, post a message to the console and issue    *
      * a STOP RUN.                                                   *
      *****************************************************************
       Z-ABEND-PROGRAM.
           if  MESSAGE-TEXT not = SPACES
               perform Z-DISPLAY-MESSAGE-TEXT
           end-if
           move 'PROGRAM-IS-ABENDING...'  to MESSAGE-TEXT
           perform Z-DISPLAY-MESSAGE-TEXT
           add 12 to ZERO giving RETURN-CODE
           STOP RUN
           exit.

      *****************************************************************
      * Display CONSOLE messages...                                   *
      *****************************************************************
       Z-DISPLAY-MESSAGE-TEXT.
           if MESSAGE-TEXT-2 = SPACES
               display MESSAGE-BUFFER(1:79)
           else
               display MESSAGE-BUFFER
           end-if
           move all SPACES to MESSAGE-TEXT
           exit.

      *****************************************************************
      * Display the file status bytes. This routine will display as   *
      * four digits. If the full two byte file status is numeric it   *
      * will display as 00nn. If the 1st byte is a numeric nine (9)   *
      * the second byte will be treated as a binary number and will   *
      * display as 9nnn.                                              *
      *****************************************************************
       Z-DISPLAY-IO-STATUS.
           if  IO-STATUS not NUMERIC
           or  IO-STAT1 = '9'
               move IO-STAT1 to IO-STATUS-04(1:1)
               subtract TWO-BYTES-BINARY from TWO-BYTES-BINARY
               move IO-STAT2 to TWO-BYTES-RIGHT
               add TWO-BYTES-BINARY to ZERO giving IO-STATUS-0403
               move 'File Status is: nnnn' to MESSAGE-TEXT
               move IO-STATUS-04 to MESSAGE-TEXT(17:4)
               perform Z-DISPLAY-MESSAGE-TEXT
           else
               move '0000' to IO-STATUS-04
               move IO-STATUS to IO-STATUS-04(3:2)
               move 'File Status is: nnnn' to MESSAGE-TEXT
               move IO-STATUS-04 to MESSAGE-TEXT(17:4)
               perform Z-DISPLAY-MESSAGE-TEXT
           end-if
           exit.

      *****************************************************************
      * Get Date and Time                                             *
      *****************************************************************
       Z-GET-DATE-AND-TIME.
           accept SYSTEM-DATE from DATE YYYYMMDD
           accept SYSTEM-TIME from TIME

           move SYSTEM-DATE-YYYY to EDITED-DATE-YYYY
           move SYSTEM-DATE-MM   to EDITED-DATE-MM
           move SYSTEM-DATE-DD   to EDITED-DATE-DD

           move SYSTEM-TIME-HH to EDITED-TIME-HH
           move SYSTEM-TIME-MM to EDITED-TIME-MM
           move SYSTEM-TIME-SS to EDITED-TIME-SS
           move SYSTEM-TIME-00 to EDITED-TIME-00

           exit.

      *****************************************************************
       Z-POST-COPYRIGHT.
           display SIM-TITLE
           display SIM-COPYRIGHT
           exit.
      *****************************************************************
      *           This program was generated by SimoZAPS              *
      *             A product of SimoTime Enterprises                 *
      *        Our e-mail address is: helpdesk@simotime.com           *
      *     Also, visit our Web Site at http://www.simotime.com       *
      *                                                               *
      *  Generation Date: 2004-05-14  Generation Time: 05:11:58:49    *
      *****************************************************************

COBOL, Compare Two Files
(Next) (Previous) (Table-of-Contents)

The following is the COBOL source code (CBLV80C3.CBL) that is used to compare the two sequential, fixed-record length files.

       IDENTIFICATION DIVISION.
       PROGRAM-ID.    CBLV80C3.
       AUTHOR.        SIMOTIME ENTERPRISES.
      *****************************************************************
      *           This program was generated by SimoZAPS              *
      *             A product of SimoTime Enterprises                 *
      *        Our e-mail address is: helpdesk@simotime.com           *
      *     Also, visit our Web Site at http://www.simotime.com       *
      *                                                               *
      *  Generation Date: 2004-12-30  Generation Time: 15:12:49:81    *
      *                                                               *
      *                                   Record    Record     Key    *
      *  Function  Name     Organization  Format    Max-Min  Pos-Len  *
      *  INPUT     SQEDDF01 SEQUENTIAL    FIXED      00080            *
      *                                                               *
      *  OUTPUT    SQEDDF02 SEQUENTIAL    FIXED      00080            *
      *                                                               *
      *****************************************************************
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT SQEDDF01-FILE  ASSIGN TO       SQEDDF01
                  ORGANIZATION  IS SEQUENTIAL
                  ACCESS MODE   IS SEQUENTIAL
                  FILE STATUS   IS SQEDDF01-STATUS.
           SELECT SQEDDF02-FILE  ASSIGN TO       SQEDDF02
                  ORGANIZATION  IS SEQUENTIAL
                  ACCESS MODE   IS SEQUENTIAL
                  FILE STATUS   IS SQEDDF02-STATUS.

      *****************************************************************
       DATA DIVISION.
       FILE SECTION.
       FD  SQEDDF01-FILE
           DATA RECORD    IS SQEDDF01-REC
           .
       01  SQEDDF01-REC.
           05  SQEDDF01-DATA-01 PIC X(00080).

       FD  SQEDDF02-FILE
           DATA RECORD    IS SQEDDF02-REC
           .
       01  SQEDDF02-REC.
           05  SQEDDF02-DATA-01 PIC X(00080).

      *****************************************************************
      * This program was created using the SYSCOMP1.TXT file as the   *
      * template for the File I/O. For more information or questions  *
      * contact SimoTime Enterprises.        *
      *        Our e-mail address is: helpdesk@simotime.com           *
      *     Also, visit our Web Site at http://www.simotime.com       *
      * The SYSCOMP1 provides for the sequential reading of a primary *
      * file and the sequential reading of a secondary file.          *
      *****************************************************************
       WORKING-STORAGE SECTION.
       01  SIM-TITLE.
           05  T1 pic X(11) value '* CBLV80C3 '.
           05  T2 pic X(34) value 'Data File Content Comparison      '.
           05  T3 pic X(10) value 'v04.10.20 '.
           05  T4 pic X(24) value ' http://www.simotime.com'.
       01  SIM-COPYRIGHT.
           05  C1 pic X(11) value '* CBLV80C3 '.
           05  C2 pic X(20) value 'Created by SimoZAPS,'.
           05  C3 pic X(20) value '  a utility package '.
           05  C4 pic X(28) value 'of SimoTime Enterprises, LLC'.

       01  SQEDDF01-STATUS.
           05  SQEDDF01-STATUS-L     pic X.
           05  SQEDDF01-STATUS-R     pic X.
       01  SQEDDF01-EOF              pic X       value 'N'.
       01  SQEDDF01-OPEN-FLAG        pic X       value 'C'.

       01  SQEDDF02-STATUS.
           05  SQEDDF02-STATUS-L     pic X.
           05  SQEDDF02-STATUS-R     pic X.
       01  SQEDDF02-EOF              pic X       value 'N'.
       01  SQEDDF02-OPEN-FLAG        pic X       value 'C'.

      *****************************************************************
      * The following buffers are used to create a four-byte status   *
      * code that may be displayed.                                   *
      *****************************************************************
       01  IO-STATUS.
           05  IO-STAT1            pic X.
           05  IO-STAT2            pic X.
       01  IO-STATUS-04.
           05  IO-STATUS-0401      pic 9     value 0.
           05  IO-STATUS-0403      pic 999   value 0.
       01  TWO-BYTES-BINARY        pic 9(4)  BINARY.
       01  TWO-BYTES-ALPHA         redefines TWO-BYTES-BINARY.
           05  TWO-BYTES-LEFT      pic X.
           05  TWO-BYTES-RIGHT     pic X.

      *****************************************************************
      * Message Buffer used by the Z-DISPLAY-MESSAGE-TEXT routine.    *
      *****************************************************************
       01  MESSAGE-BUFFER.
           05  MESSAGE-HEADER      pic X(11)   value '* CBLV80C3 '.
           05  MESSAGE-TEXT.
               10  MESSAGE-TEXT-1  pic X(68)   value SPACES.
               10  MESSAGE-TEXT-2  pic X(188)  value SPACES.

      *****************************************************************
       01  APPL-RESULT             pic S9(9)    comp.
           88  APPL-AOK            value 0.
           88  APPL-EOF            value 16.

       01  READ-FLAGS.
           05  READ-1      pic X       value 'Y'.
           05  READ-2      pic X       value 'Y'.
       01  DUMP-FLAGS.
           05  DUMP-ASC    pic X       value 'Y'.
           05  DUMP-EBC    pic X       value 'Y'.
           05  DUMP-HEX    pic X       value 'Y'.

       01  COMPARE-STATUS  pic XX      value 'EQ'.
       01  FLAG-EQ         pic XX      value 'EQ'.
       01  FLAG-NE         pic XX      value 'NE'.
       01  FLAG-QT         pic XX      value 'QT'.
       01  DELTA-LINE      pic X(1024) value all '-'.
       01  PTR-1           pic 9(5)    value 0.
       01  IDX-2           pic 9(5)    value 0.
       01  DELTA-MAXIMUM-X pic X(5)    value '00100'.
       01  DELTA-MAXIMUM   redefines DELTA-MAXIMUM-X pic 9(5).

       01  YES-YES         pic XX      value 'YY'.
       01  N-BYTE          pic X       value 'N'.
       01  Y-BYTE          pic X       value 'Y'.

       01  KEY-ACTIVE      pic X       value 'Y'.
       01  KEY-CONTROL-1.
           05  PS-1        pic 9(5)    value 00000.
           05  LN-1        pic 9(5)    value 00000.
       01  KEY-CONTROL-2.
           05  PS-2        pic 9(5)    value 00000.
           05  LN-2        pic 9(5)    value 00000.

       01  SQEDDF01-LRECL    pic 9(5)    value 00080.
       01  SQEDDF02-LRECL    pic 9(5)    value 00080.
       01  D-LEN           pic 9(5)    value 128.
       01  D-POS           pic 9(5)    value 1.

       01  ASC-OR-EBC      pic 9(3)    comp    value 0.
       01  ASC-OR-EBC-R    redefines ASC-OR-EBC.
           05  ASC-A       pic X.
           05  EBC-A       pic X.

       01  DUMP-HEADER.
           05  filler      pic X(20)   value '....:....1....:....2'.
           05  filler      pic X(20)   value '....:....3....:....4'.
           05  filler      pic X(20)   value '....:....5....:....6'.
           05  filler      pic X(20)   value '....:....7....:....8'.
           05  filler      pic X(20)   value '....:....9....:...10'.
           05  filler      pic X(20)   value '....:...11....:...12'.
           05  filler      pic X(20)   value '....:...13....:...14'.
           05  filler      pic X(20)   value '....:...15....:...16'.
           05  filler      pic X(20)   value '....:...17....:...18'.
           05  filler      pic X(20)   value '....:...19....:...20'.
           05  filler      pic X(20)   value '....:...21....:...22'.
           05  filler      pic X(20)   value '....:...23....:...24'.
           05  filler      pic X(20)   value '....:...25....:...26'.
           05  filler      pic X(20)   value '....:...27....:...28'.
           05  filler      pic X(20)   value '....:...29....:...30'.
           05  filler      pic X(20)   value '....:...31....:...32'.
           05  filler      pic X(20)   value '....:...33....:...34'.
           05  filler      pic X(20)   value '....:...35....:...36'.
           05  filler      pic X(20)   value '....:...37....:...38'.
           05  filler      pic X(20)   value '....:...39....:...40'.
           05  filler      pic X(20)   value '....:...41....:...42'.
           05  filler      pic X(20)   value '....:...43....:...44'.
           05  filler      pic X(20)   value '....:...45....:...46'.
           05  filler      pic X(20)   value '....:...47....:...48'.
           05  filler      pic X(20)   value '....:...49....:...50'.
           05  filler      pic X(20)   value '....:...51....:...52'.
           05  filler      pic X(20)   value '....:...53....:...54'.
           05  filler      pic X(20)   value '....:...55....:...56'.
           05  filler      pic X(20)   value '....:...57....:...58'.
           05  filler      pic X(20)   value '....:...59....:...60'.
           05  filler      pic X(20)   value '....:...61....:...62'.
           05  filler      pic X(20)   value '....:...63....:...64'.
           05  filler      pic X(20)   value '....:...65....:...66'.
           05  filler      pic X(20)   value '....:...67....:...68'.
           05  filler      pic X(20)   value '....:...69....:...70'.
           05  filler      pic X(20)   value '....:...71....:...72'.
           05  filler      pic X(20)   value '....:...73....:...74'.
           05  filler      pic X(20)   value '....:...75....:...76'.
           05  filler      pic X(20)   value '....:...77....:...78'.
           05  filler      pic X(20)   value '....:...79....:...80'.
           05  filler      pic X(20)   value '....:...81....:...82'.
           05  filler      pic X(20)   value '....:...83....:...84'.
           05  filler      pic X(20)   value '....:...85....:...86'.
           05  filler      pic X(20)   value '....:...87....:...88'.
           05  filler      pic X(20)   value '....:...89....:...90'.
           05  filler      pic X(20)   value '....:...91....:...92'.
           05  filler      pic X(20)   value '....:...93....:...94'.
           05  filler      pic X(20)   value '....:...95....:...96'.
           05  filler      pic X(20)   value '....:...97....:...98'.
           05  filler      pic X(20)   value '....:...99....:..100'.
           05  filler      pic X(20)   value '....:..110....:..120'.
           05  filler      pic X(04)   value '....'.

       01  RECORD-HEADER.
           05  RECORD-ID   pic X(3)    value '1ST'.
           05  filler      pic X(2)    value ', '.
           05  REC-NUMBER  pic 9(9)    value 0.
           05  filler      pic X       value '('.
           05  RECORD-POS  pic 9(5)    value 0.
           05  filler      pic X       value ':'.
           05  RECORD-LEN  pic 9(5)    value 0.
           05  filler      pic X       value ')'.

       01  BANNER-STARS.
           05  filler  pic X(79)  value all '*'.
       01  BANNER-TEXT.
           05  filler  pic X(2)    value '* '.
           05  filler  pic X(24)   value is SPACES.
           05  filler  pic X(26)   value 'Data File Content Compare '.
           05  filler  pic X(25)   value is SPACES.
           05  filler  pic X(2)    value ' *'.

       01  INFO-STATEMENT.
           05  INFO-SHORT.
               10  INFO-ID pic X(8)    value 'Starting'.
               10  filler  pic X(32)
                   value   '  - Data File Content Comparison'.
           05  filler      pic X(32)
                           value ' by SimoTime Enterprises, LLC   '.

       01  SQEDDF01-TOTAL.
           05  SQEDDF01-RDR  pic 9(9)  value 0.
           05  filler      pic X(3)  value ' - '.
           05  filler      pic X(25) value 'Record count for SQEDDF01'.
       01  SQEDDF02-TOTAL.
           05  SQEDDF02-RDR  pic 9(9)  value 0.
           05  filler      pic X(3)  value ' - '.
           05  filler      pic X(25) value 'Record count for SQEDDF02'.
       01  COMPARE-NE-TOTAL.
           05  COMPARE-NE  pic 9(9)  value 0.
           05  filler      pic X(3)  value ' - '.
           05  filler      pic X(23) value 'Unequal count'.

       01  FORMAT-TYPE     pic X     value 'B'.

       COPY PASSHEX4.
       COPY PASSLOGS.

      *****************************************************************
       PROCEDURE DIVISION.
           perform JOB-STARTING

           perform
               until COMPARE-STATUS = 'QT'
               or    SQEDDF01-STATUS not = '00'
               or    SQEDDF02-STATUS not = '00'
               if  READ-1 = 'Y'
                   perform SQEDDF01-READ
               end-if
               if  READ-2 = 'Y'
                   perform SQEDDF02-READ
               end-if
               if  SQEDDF01-STATUS = '00'
               and SQEDDF02-STATUS = '00'
                   move 'EQ' to COMPARE-STATUS
                   if  KEY-ACTIVE = 'Y'
                       perform COMPARE-KEYS
                   end-if
                   if  COMPARE-STATUS = FLAG-EQ
                       perform COMPARE-RECORDS
                   end-if
                   if  COMPARE-STATUS = FLAG-NE
                       add 1 to COMPARE-NE
                   end-if
               end-if
           end-perform

           perform JOB-FINISHED

           GOBACK.

      *****************************************************************
       COMPARE-RECORDS.
      *>   Compare...
           if SQEDDF01-REC(00001:00080) not = SQEDDF02-REC(00001:00080)
              move FLAG-NE to COMPARE-STATUS
              if  COMPARE-NE < DELTA-MAXIMUM
                  add 00001 to ZERO  giving D-POS
                  add 00001 to ZERO  giving RECORD-POS
                  add 00080 to ZERO  giving D-LEN
                  add 00080 to ZERO  giving PASSHEX4-LENGTH
                  add 00080 to ZERO  giving RECORD-LEN
                  perform DUMP-PRIMARY-RECORD
                  perform DUMP-SECONDARY-RECORD
                  perform DUMP-POSITION-DIFFERENCE
              end-if
           end-if
           exit.

      *****************************************************************
       COMPARE-KEYS.
           move YES-YES to READ-FLAGS
           if  SQEDDF01-REC(PS-1:LN-1)
            <  SQEDDF02-REC(PS-2:LN-2)
               move N-BYTE to READ-2
           end-if
           if  SQEDDF01-REC(PS-1:LN-1)
            >  SQEDDF02-REC(PS-2:LN-2)
               move N-BYTE to READ-1
           end-if
           exit.

      *****************************************************************
       DUMP-TO-LOG.
      *>  HexDump...
           move RECORD-HEADER to SIMOLOGS-MESSAGE
           call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
           move DUMP-HEADER(D-POS:D-LEN) to SIMOLOGS-MESSAGE
           call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
           if  DUMP-ASC = 'Y'
               move PASSHEX4-ASCII(1:D-LEN) to SIMOLOGS-MESSAGE
               call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
           end-if
           if  DUMP-HEX = 'Y'
               move PASSHEX4-UPPER(1:D-LEN) to SIMOLOGS-MESSAGE
               call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
               move PASSHEX4-LOWER(1:D-LEN) to SIMOLOGS-MESSAGE
               call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
           end-if
           if  DUMP-EBC = 'Y'
               move PASSHEX4-EBCDIC(1:D-LEN) to SIMOLOGS-MESSAGE
               call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
           end-if
           exit.

      *****************************************************************
       DUMP-PRIMARY-RECORD.
           move SPACES to PASSHEX4-SOURCE
           if  READ-1 = 'Y'
           and SQEDDF01-EOF = 'N'
               move '1ST' to RECORD-ID
               add SQEDDF01-RDR to ZERO giving REC-NUMBER
               move SQEDDF01-REC(D-POS:D-LEN) to PASSHEX4-SOURCE
               call 'SIMOHEX4' using PASSHEX4-PASS-AREA
               perform DUMP-TO-LOG
           else
               move '1ST, Record is missing from SQEDDF01 file'
                 to SIMOLOGS-MESSAGE
           end-if
           exit.

      *****************************************************************
       DUMP-SECONDARY-RECORD.
           move SPACES to PASSHEX4-SOURCE
           if  READ-2 = 'Y'
           and SQEDDF02-EOF = 'N'
               move '2ND' to RECORD-ID
               add SQEDDF02-RDR to ZERO giving REC-NUMBER
               move SQEDDF02-REC(D-POS:D-LEN) to PASSHEX4-SOURCE
               call 'SIMOHEX4' using PASSHEX4-PASS-AREA
               perform DUMP-TO-LOG
           else
               move '2ND, Record is missing from SQEDDF02 file'
                 to SIMOLOGS-MESSAGE
               call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
           exit.

      *****************************************************************
       DUMP-POSITION-DIFFERENCE.
           if  READ-FLAGS = 'YY'
               move all '-' to DELTA-LINE
               add D-POS to ZERO giving PTR-1
               add 1 to ZERO giving IDX-2
               perform until PTR-1 > 1024
                          or IDX-2 > D-LEN
                   if  SQEDDF01-REC(PTR-1:1)
                    =  SQEDDF02-REC(PTR-1:1)
                       move '=' to DELTA-LINE(PTR-1:1)
                   else
                       move '#' to DELTA-LINE(PTR-1:1)
                   end-if
                   add 1 to PTR-1
                   add 1 to IDX-2
               end-perform
           else
               move all '#' to DELTA-LINE
           end-if
           move DELTA-LINE(D-POS:D-LEN) to SIMOLOGS-MESSAGE
           call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
           move '*' to SIMOLOGS-MESSAGE
           call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
           exit.

      *****************************************************************
       JOB-FINISHED.
           perform SQEDDF02-CLOSE
           perform SQEDDF01-CLOSE

           move 'Summary ' to INFO-ID
           move INFO-SHORT to SIMOLOGS-MESSAGE
           call 'SIMOLOGS' using SIMOLOGS-PASS-AREA

           move SQEDDF01-TOTAL to SIMOLOGS-MESSAGE
           call 'SIMOLOGS' using SIMOLOGS-PASS-AREA

           move SQEDDF02-TOTAL to SIMOLOGS-MESSAGE
           call 'SIMOLOGS' using SIMOLOGS-PASS-AREA

           if  SQEDDF01-RDR not = SQEDDF02-RDR
               move 'WARNING!  - Record counts are not equal'
                 to SIMOLOGS-MESSAGE
               call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
           end-if

           move COMPARE-NE-TOTAL to SIMOLOGS-MESSAGE
           call 'SIMOLOGS' using SIMOLOGS-PASS-AREA

           if  SQEDDF01-EOF = 'Y'
           and SQEDDF02-EOF = 'Y'
               move 'Finished' to INFO-ID
           else
               move 'ABENDING' to INFO-ID
           end-if
           move INFO-STATEMENT to SIMOLOGS-MESSAGE
           call 'SIMOLOGS' using SIMOLOGS-PASS-AREA

           if  COMPARE-NE > 0
           or  SQEDDF01-RDR not = SQEDDF02-RDR
               add 4 to ZERO giving RETURN-CODE
           end-if
           exit.

      *****************************************************************
       JOB-STARTING.
           perform Z-POST-COPYRIGHT
           perform Z-DETERMINE-ENVIRONMENT
           perform SQEDDF01-OPEN
           perform SQEDDF02-OPEN
           move 'Y' to READ-1
           move 'Y' to READ-2
           if  DELTA-MAXIMUM not numeric
               add 100 to ZERO giving DELTA-MAXIMUM
           end-if
           if  PS-1 > 0
           and PS-2 > 0
           and LN-1 > 0
           and LN-2 > 0
               move 'Y' to KEY-ACTIVE
               move 'Key control is ENABLED...'
                 to MESSAGE-TEXT
           else
               move 'N' to KEY-ACTIVE
               move 'Key control is NOT enabled...'
                 to MESSAGE-TEXT
           end-if
           perform Z-DISPLAY-MESSAGE-TEXT

           move 'DUMP' to PASSHEX4-REQUEST
           add 128 to ZERO giving PASSHEX4-LENGTH
           move 'NOTE' to SIMOLOGS-REQUEST
           move BANNER-STARS to SIMOLOGS-MESSAGE
           call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
           move BANNER-TEXT to SIMOLOGS-MESSAGE
           call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
           move BANNER-STARS to SIMOLOGS-MESSAGE
           call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
           move INFO-STATEMENT to SIMOLOGS-MESSAGE
           call 'SIMOLOGS' using SIMOLOGS-PASS-AREA
           exit.

      *****************************************************************
      * I/O Routines for the Primary File...                          *
      *****************************************************************
       SQEDDF01-CLOSE.
           add 8 to ZERO giving APPL-RESULT.
           close SQEDDF01-FILE
           if  SQEDDF01-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
           else
               add 12 to ZERO giving APPL-RESULT
           end-if
           if  APPL-AOK
               CONTINUE
           else
               move 'CLOSE Failure with SQEDDF01' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move SQEDDF01-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.
      *---------------------------------------------------------------*
       SQEDDF01-READ.
           read SQEDDF01-FILE
           if  SQEDDF01-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
               add 1 to SQEDDF01-RDR
           else
               if  SQEDDF01-STATUS = '10'
                   add 16 to ZERO giving APPL-RESULT
               else
                   add 12 to ZERO giving APPL-RESULT
               end-if
           end-if
           if  APPL-AOK
               CONTINUE
           else
               if  APPL-EOF
                   move 'Y' to SQEDDF01-EOF
               else
                   move 'READ Failure with SQEDDF01' to MESSAGE-TEXT
                   perform Z-DISPLAY-MESSAGE-TEXT
                   move SQEDDF01-STATUS to IO-STATUS
                   perform Z-DISPLAY-IO-STATUS
                   perform Z-ABEND-PROGRAM
               end-if
           end-if
           exit.
      *---------------------------------------------------------------*
       SQEDDF01-OPEN.
           add 8 to ZERO giving APPL-RESULT.
           open input SQEDDF01-FILE
           if  SQEDDF01-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
               move 'O' to SQEDDF01-OPEN-FLAG
           else
               add 12 to ZERO giving APPL-RESULT
           end-if
           if  APPL-AOK
               CONTINUE
           else
               move 'OPEN Failure with SQEDDF01' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move SQEDDF01-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.

      *****************************************************************
      * I/O Routines for the Secondary File...                        *
      *****************************************************************
       SQEDDF02-READ.
           read SQEDDF02-FILE
           if  SQEDDF02-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
               add 1 to SQEDDF02-RDR
           else
               if  SQEDDF02-STATUS = '10'
                   add 16 to ZERO giving APPL-RESULT
               else
                   add 12 to ZERO giving APPL-RESULT
               end-if
           end-if.
           if  APPL-AOK
               CONTINUE
           else
               if  APPL-EOF
                   move 'Y' to SQEDDF02-EOF
               else
                   move 'READ Failure with SQEDDF02' to MESSAGE-TEXT
                   perform Z-DISPLAY-MESSAGE-TEXT
                   move SQEDDF02-STATUS to IO-STATUS
                   perform Z-DISPLAY-IO-STATUS
                   perform Z-ABEND-PROGRAM
               end-if
           end-if
           exit.
      *---------------------------------------------------------------*
       SQEDDF02-OPEN.
           add 8 to ZERO giving APPL-RESULT.
           open input SQEDDF02-FILE
           if  SQEDDF02-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
               move 'O' to SQEDDF02-OPEN-FLAG
           else
               add 12 to ZERO giving APPL-RESULT
           end-if
           if  APPL-AOK
               CONTINUE
           else
               move 'OPEN Failure with SQEDDF02' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move SQEDDF02-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.
      *---------------------------------------------------------------*
       SQEDDF02-CLOSE.
           add 8 to ZERO giving APPL-RESULT.
           close SQEDDF02-FILE
           if  SQEDDF02-STATUS = '00'
               subtract APPL-RESULT from APPL-RESULT
               move 'C' to SQEDDF02-OPEN-FLAG
           else
               add 12 to ZERO giving APPL-RESULT
           end-if
           if  APPL-AOK
               CONTINUE
           else
               move 'CLOSE Failure with SQEDDF02' to MESSAGE-TEXT
               perform Z-DISPLAY-MESSAGE-TEXT
               move SQEDDF02-STATUS to IO-STATUS
               perform Z-DISPLAY-IO-STATUS
               perform Z-ABEND-PROGRAM
           end-if
           exit.

      *****************************************************************
      * The following Z-ROUTINES provide administrative functions     *
      * for this program.                                             *
      *****************************************************************
      * ABEND the program, post a message to the console and issue    *
      * a STOP RUN.                                                   *
      *****************************************************************
       Z-ABEND-PROGRAM.
           if  MESSAGE-TEXT not = SPACES
               perform Z-DISPLAY-MESSAGE-TEXT
           end-if
           move 'PROGRAM-IS-ABENDING...'  to MESSAGE-TEXT
           perform Z-DISPLAY-MESSAGE-TEXT
           add 12 to ZERO giving RETURN-CODE
           STOP RUN
           exit.

      *****************************************************************
       Z-DETERMINE-ENVIRONMENT.
           add 16833 to ASC-OR-EBC
           if  ASC-A = 'A'
               move 'Compiled for an ASCII environment...'
                 to MESSAGE-TEXT
           else
               if  EBC-A = 'A'
                   move 'Compiled for an EBCDIC environment...'
                     to MESSAGE-TEXT
               else
                   move 'Compiled for an UNKNOWN environment...'
                     to MESSAGE-TEXT
               end-if
           end-if
           perform Z-DISPLAY-MESSAGE-TEXT
           exit.

      *****************************************************************
      * Display CONSOLE messages...                                   *
      *****************************************************************
       Z-DISPLAY-MESSAGE-TEXT.
           if MESSAGE-TEXT-2 = SPACES
               display MESSAGE-BUFFER(1:79)
           else
               display MESSAGE-BUFFER
           end-if
           move all SPACES to MESSAGE-TEXT
           exit.

      *****************************************************************
      * Display the file status bytes. This routine will display as   *
      * four digits. If the full two byte file status is numeric it   *
      * will display as 00nn. If the 1st byte is a numeric nine (9)   *
      * the second byte will be treated as a binary number and will   *
      * display as 9nnn.                                              *
      *****************************************************************
       Z-DISPLAY-IO-STATUS.
           if  IO-STATUS not NUMERIC
           or  IO-STAT1 = '9'
               move IO-STAT1 to IO-STATUS-04(1:1)
               subtract TWO-BYTES-BINARY from TWO-BYTES-BINARY
               move IO-STAT2 to TWO-BYTES-RIGHT
               add TWO-BYTES-BINARY to ZERO giving IO-STATUS-0403
               move 'File Status is: nnnn' to MESSAGE-TEXT
               move IO-STATUS-04 to MESSAGE-TEXT(17:4)
               perform Z-DISPLAY-MESSAGE-TEXT
           else
               move '0000' to IO-STATUS-04
               move IO-STATUS to IO-STATUS-04(3:2)
               move 'File Status is: nnnn' to MESSAGE-TEXT
               move IO-STATUS-04 to MESSAGE-TEXT(17:4)
               perform Z-DISPLAY-MESSAGE-TEXT
           end-if
           exit.

      *****************************************************************
       Z-POST-COPYRIGHT.
           display SIM-TITLE
           display SIM-COPYRIGHT
           exit.
      *****************************************************************
      *           This program was generated by SimoZAPS              *
      *             A product of SimoTime Enterprises                 *
      *        Our e-mail address is: helpdesk@simotime.com           *
      *     Also, visit our Web Site at http://www.simotime.com       *
      *                                                               *
      *  Generation Date: 2004-12-30  Generation Time: 15:12:49:85    *
      *****************************************************************

Summary
(Next) (Previous) (Table-of-Contents)

The purpose of this document is to assist as a tutorial for new programmers or as a quick reference for experienced programmers. This suite of programs provides an example of how to create and access data files containing variable length records.

Software Agreement and Disclaimer
(Next) (Previous) (Table-of-Contents)

Permission to use, copy, modify and distribute this software for any commercial purpose requires a fee to be paid to SimoTime Enterprises. Once the fee is received by SimoTime the latest version of the software will be delivered and a license will be granted for use within an enterprise, provided the SimoTime copyright notice appear on all copies of the software. The SimoTime name or Logo may not be used in any advertising or publicity pertaining to the use of the software without the written permission of SimoTime Enterprises.

Permission to use, copy and modify this software for any non-commercial purpose and without fee is hereby granted, provided the SimoTime copyright notice appear on all copies of the software. The SimoTime name or Logo may not be used in any advertising or publicity pertaining to the use of the software without the written permission of SimoTime Enterprises.

SimoTime Enterprises makes no warranty or representations about the suitability of the software for any purpose. It is provided "AS IS" without any express or implied warranty, including the implied warranties of merchantability, fitness for a particular purpose and non-infringement. SimoTime Enterprises shall not be liable for any direct, indirect, special or consequential damages resulting from the loss of use, data or projects, whether in an action of contract or tort, arising out of or in connection with the use or performance of this software.

If you have any questions, suggestions or comments please call or send an e-mail to: helpdesk@simotime.com

Downloads and Links to Similar Pages
(Next) (Previous) (Table-of-Contents)

You may download this example at http://www.simotime.com/sim4dzip.htm#CobolVariableLengthRecords or view the complete list of SimoTime Examples at http://www.simotime.com/sim4dzip.htm .

Note: You must be attached to the Internet to download a Z-Pack or view the list.

Check out   The COBOL Connection  in the SimoTime Library for more examples of mainframe COBOL techniques and sample code.

Check out   The JCL Connection  in the SimoTime Library for more mainframe JCL examples.

Check out   The SimoTime Library   for a wide range of topics for Programmers, Project Managers and Software Developers.

To review all the information available on the SimoTIme Web Site start at   http://www.SimoTime.com  .

For more information about Micro Focus Mainframe Express refer to   http://www.microfocus.com  .

Comments or Suggestions
(Next) (Previous) (Table-of-Contents)

If you have any questions, suggestions or comments please call or send an e-mail to: helpdesk@simotime.com

About SimoTime Enterprises
(Next) (Previous) (Table-of-Contents)

Founded in 1987, SimoTime Enterprises is a privately owned company. We specialize in the creation and deployment of business applications using new or existing technologies and services. We have a team of individuals that understand the broad range of technologies being used in today's environments. This includes the smallest thin client using the Internet and the very large mainframe systems. There is more to making the Internet work for your company's business than just having a nice looking WEB site. It is about combining the latest technologies and existing technologies with practical business experience. It's about the business of doing business and looking good in the process. Quite often, to reach larger markets or provide a higher level of service to existing customers it requires the newer Internet technologies to work in a complementary manner with existing corporate mainframe systems. Whether you want to use the Internet to expand into new market segments or as a delivery vehicle for existing business functions simply give us a call or check the web site at http://www.simotime.com


Return-to-Top
Copyright © 1987-2010  SimoTime Enterprises  All Rights Reserved
When technology complements business
http://www.simotime.com