       IDENTIFICATION DIVISION.
       PROGRAM-ID.           FILESCAN2.
       AUTHOR.               RUTH DROZIN AND JON ESCHINGER.
       DATE-WRITTEN.         SEPTEMBER, 1978.
       REMARKS.              PRINT RESULTS OF FILESCAN1
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SOURCE-COMPUTER.      XDS-SIGMA7.
       OBJECT-COMPUTER.      XDS-SIGMA7.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT FILETYPE-NAMES ASSIGN TO DISC
                  ACCESS IS RANDOM
                  ACTUAL KEY IS FILETYPE-KEY.
           SELECT INPUT-FILE ASSIGN TO DISC.
           SELECT SORT-FILE.
           SELECT OUTPUT-REPORT ASSIGN TO PRINTER.
           SELECT INPUT-COMMANDS ASSIGN TO CARD-READER.
           SELECT SUMMARY-REPORT ASSIGN TO PRINTER.
       DATA DIVISION.
       FILE SECTION.
       FD  FILETYPE-NAMES    LABEL RECORDS ARE STANDARD
                             DATA RECORD IS NAME-BUF.
       01  NAME-BUF.
           03  FILE-NAME  PIC X(20).
           03  FILETYPE-KEY  PIC X(4).
           03  NUMERIC-KEY REDEFINES FILETYPE-KEY.
               05  NUMKEY1  PIC 99.
               05  NUMKEY2  PIC 99.
       FD  INPUT-FILE        LABEL RECORDS ARE STANDARD
                             DATA RECORD IS INPUT-BUF.
       01  INPUT-BUF  PIC X(112).
       SD  SORT-FILE         DATA RECORD IS SORT-BUF.
       01  SORT-BUF.
           03  SORTKEY1  PIC X(8).
           03  THE-REST.
               05  PART1  PIC X(16).
               05  SORTKEY3  PIC X(31).
               05  SORTKEY2  PIC X(4).
               05  PART2  PIC X(61).
           03  DECODED-VALUES PIC X(23).
       FD  INPUT-COMMANDS    LABEL RECORDS ARE OMITTED
                             DATA RECORD IS COMMAND-BUF.
       01  COMMAND-BUF.
           03  CARD-IMAGE  PIC X(80).
           03  80BYTES  REDEFINES CARD-IMAGE  OCCURS 80 PIC X.
           03  BREAK-OUT REDEFINES CARD-IMAGE.
               05  5BYTE-BUF  PIC X(5).
               05  REST-OF-CARD  PIC X(75).
       FD  OUTPUT-REPORT     LABEL RECORDS ARE OMITTED
                             REPORT IS FILESCAN-REPORT.
       FD  SUMMARY-REPORT    LABEL RECORDS ARE OMITTED
                             REPORT IS FILESCAN-SUMMARY.
       WORKING-STORAGE SECTION.
       77  COPYRITE PIC X(56) VALUE
           'COPYRIGHT, (C) HONEYWELL INFORMATION SYSTEMS INC., 1979'.
       77  LASTONE  PIC 9 VALUE 0.
       77  PRIVATE-FILES  PIC X(21)
               VALUE 'PRIVATE VOLUME FILES'.
       77  PUBLIC-FILES  PIC X(21)
               VALUE 'PUBLIC FILES'.
       77  REC-COUNT-GOOD  PIC X(21)
               VALUE 'ACCURATE RECORD COUNT'.
       77  REC-COUNT-NO-GOOD PIC X(23)
               VALUE 'INACCURATE RECORD COUNT'.
       77  HEAD-FIELD   PIC X(23) VALUE SPACES.
       77  KOUNTER  PIC 9 VALUE 0.
       77  LIST  PIC 9  VALUE 0.
       77  MAJOR-NAME  PIC X(20) VALUE SPACES.
       77  K PIC 99 VALUE 0.
       77  ASTER  PIC X VALUE '*'.
       77  SELECT-SITE  PIC XXXX VALUE SPACES.
       77  PAGEIND  PIC 9  VALUE 0.
       77  SELECT-ACCURATE  PIC X VALUE SPACES.
       77  SELECT-PUBPRIV  PIC X VALUE SPACES.
       77  SELECT-ACCOUNT  PIC X(8) VALUE SPACES.
       77  SORTIND  PIC 9  VALUE 0.
       77  L  PIC 99 VALUE 0.
       77  I  PIC 99 VALUE 0.
       77  HOLDKEY  PIC X(8) VALUE SPACES.
       77  TMORE-THAN-7  PIC 9(10) VALUE 0.
       77  HOLD-TYPE-KEY  PIC X(4)  VALUE SPACES.
       77  TEMPSORTKEY  PIC X(8) VALUE SPACES.
       77  J  PIC 99  VALUE 0.
       77  HOLD-DECODE  PIC X(23)  VALUE SPACES.
       77  HOLD-IT  PIC X(48) VALUE SPACES.
       77  SUMM-IND  PIC 9  VALUE 0.
       01  INPUT-WS-BUF.
           03  SITE-ID       PIC XXXX.
           03  PRIV-VOL-SN   PIC XXXX.
           03  ACCOUNT       PIC X(8).
           03  ACT  REDEFINES ACCOUNT  OCCURS 8  PIC X.
           03  FILENAME      PIC X(31).
           03  FNAME REDEFINES FILENAME OCCURS 31 PIC X.
           03  TYPE-KEY.
               05  MAJOR-KEY PIC XX.
               05  MINOR-KEY PIC XX.
               05  NKEY2  REDEFINES MINOR-KEY  PIC 99.
           03  NUM-GRANULES  PIC 9(6).
           03  ORGANIZATION  PIC X.
           03  CREATE-DATE   PIC X(6).
           03  MODIFY-DATE   PIC X(6).
           03  ACCESS-DATE   PIC X(6).
           03  KEYMAX        PIC 99.
           03  COMPRESS      PIC X.
           03  JCL           PIC X.
           03  VARIABLE-KEYSIZE  PIC X.
           03  DATATYPE      PIC X.
           03  VARIABLE-RECSIZE  PIC X.
           03  MAX-RECLENGTH PIC 9(5).
           03  NUM-RECORDS   PIC 9(7).
           03  MULTIPLE-TYPES OCCURS 8 PIC XX.
           03  MULTIPLE-TYPES-NUM  REDEFINES MULTIPLE-TYPES
               OCCURS 8  PIC 99.
           03  ACCURATE-RECCOUNT  PIC X.
       01  GETCOM-BUF.
           03  FILLER        PIC X(8).
           03  TIME-AND-DATE PIC X(16).
           03  FILLER        PIC XX.
       01  SITE-ID-BUF.
           03  S-ID-1        PIC X(9) VALUE 'SITE-ID: '.
       01  ACCOUNT-BUF.
           03  ACT1          PIC X(9) VALUE 'ACCOUNT: '.
           03  ACT2          PIC X(8).
       01  COUNT-BUF.
           03  NUM-FILES OCCURS 42 PIC 9(10).
           03  NUM-GRANS OCCURS 42 PIC 9(10).
           03  NUM-RECS OCCURS 42 PIC 9(10).
           03  NUM-KEY OCCURS 42 PIC 9(10).
           03  NUM-CONS OCCURS 42 PIC 9(10).
           03  NUM-RAND OCCURS 42 PIC 9(10).
           03  NUM-CMPRES OCCURS 42 PIC 9(10).
           03  NUM-NOT-COMP OCCURS 42 PIC 9(10).
           03  NUM-JCL OCCURS 42 PIC 9(10).
           03  NUM-NO-JCL OCCURS 42 PIC 9(10).
           03  BREAKDOWNS OCCURS 42 PIC 9(10).
       01  TOTALS-BUF.
           03  TNUM-FILES OCCURS 42 PIC 9(10).
           03  TNUM-GRANS OCCURS 42 PIC 9(10).
           03  TNUM-RECS OCCURS 42 PIC 9(10).
           03  TNUM-KEY OCCURS 42 PIC 9(10).
           03  TNUM-CONS OCCURS 42 PIC 9(10).
           03  TNUM-RAND OCCURS 42 PIC 9(10).
           03  TNUM-CMPRES OCCURS 42 PIC 9(10).
           03  TNUM-NOT-COMP OCCURS 42 PIC 9(10).
           03  TNUM-JCL OCCURS 42 PIC 9(10).
           03  TNUM-NO-JCL OCCURS 42 PIC 9(10).
           03  TBREAKDOWNS OCCURS 42 PIC 9(10).
       01  MIXED-BUF.
           03  NUM-MINOR     OCCURS 3 PIC 9(6).
           03  NAME-MINOR    OCCURS 3 PIC X(20).
       01  NAME2-BUF.
           03  THE-NAME      PIC X(40).
           03  NAME-AREA REDEFINES THE-NAME OCCURS 40 PIC X.
       01  FIELDS.
           03  FIELD  OCCURS 3  PIC X(24).
       01  PAGE-BUF1.
           03  FILLER  PIC X(4) VALUE SPACES.
           03  PH1  PIC X(20) VALUE SPACES.
           03  PH2  PIC XXX VALUE ' - '.
       01  PAGE-BUF2.
           03  FILLER PIC X(53) VALUE SPACES.
           03  PH4  PIC X(13) VALUE
               '# OF     # OF'.
           03  FILLER  PIC X(11) VALUE SPACES.
           03  PH5  PIC X(49) VALUE
               'COMP   HAS   CREATE   MODIFY   ACCESS   KEY      '.
       01  PAGE-BUF3.
           03  FILLER  PIC X(9) VALUE SPACES.
           03  PH6  PIC X(16) VALUE 'FILENAME.ACCOUNT'.
           03  FILLER  PIC X(28) VALUE SPACES.
           03  PH7  PIC X(34) VALUE
               'GRANS   RECORDS   ORG   RESS   JCL'.
           03  FILLER  PIC XXXX VALUE SPACES.
           03  PH8  PIC X(36) VALUE
               'DATE     DATE     DATE    MAX       '.
       01  PAGE-BUF4.
           03  FILLER  PIC X(9) VALUE SPACES.
           03  PH9  PIC X(16) VALUE ALL '-'.
           03  FILLER  PIC X(28) VALUE SPACES.
           03  PH10  PIC X(34) VALUE
               '-----   -------   ---   ----   ---'.
           03  FILLER  PIC X(3) VALUE SPACES.
           03  PH11  PIC X(37) VALUE
               '------   ------   ------   ---       '.
       01  PAGE-BUF5  PIC X(48) VALUE SPACES.
       01  PAGE-BUF6  PIC X(126) VALUE SPACES.
       01  PAGE-BUF7  PIC X(127) VALUE SPACES.
       01  PAGE-BUF8  PIC X(128) VALUE SPACES.
       REPORT SECTION.
       RD  FILESCAN-REPORT CONTROLS ARE SORTKEY1
           PAGE LIMIT IS 60 LINES
           HEADING 1.
       01  CH1  TYPE DE LINE PLUS 1.
           03  COLUMN 2  PIC X VALUE SPACES.
       01  PAGE-SKIP  TYPE DE LINE NEXT PAGE.
           03  LINE PLUS 1 COLUMN 2 PIC X VALUE SPACES.
       01  PAGE-HEAD TYPE PH LINE 1 NEXT GROUP PLUS 1.
           03  COLUMN 10 PIC X(16) SOURCE TIME-AND-DATE.
           03  COLUMN 118 PIC X(5) VALUE 'PAGE '.
           03  COLUMN 124 PIC ZZZ9 SOURCE PAGE-COUNTER OF
                   FILESCAN-REPORT.
           03  LINE PLUS 1 COLUMN 10 PIC X(23) SOURCE HOLD-DECODE.
           03  LINE PLUS 1 COLUMN 1 PIC X(126) SOURCE PAGE-BUF6.
           03  LINE PLUS 1 COLUMN 1 PIC X(127) SOURCE PAGE-BUF7.
           03  LINE PLUS 1 COLUMN 1 PIC X(128) SOURCE PAGE-BUF8.
           03  LINE PLUS 1 COLUMN 1 PIC X(48) SOURCE PAGE-BUF5.
       01  LISTHEAD  TYPE DE LINE 4.
           03  COLUMN 10 PIC X(20) SOURCE MAJOR-NAME.
           03  COLUMN 31 PIC X VALUE '-'.
           03  COLUMN 33 PIC X(20) SOURCE FILE-NAME.
           03  LINE PLUS 2 COLUMN 54 PIC X(13) VALUE
               '# OF     # OF'.
           03  COLUMN 78 PIC X(49) VALUE
               'COMP   HAS   CREATE   MODIFY   ACCESS   KEY      '.
           03  LINE PLUS 1 COLUMN 10 PIC X(16) VALUE
               'FILENAME.ACCOUNT'.
           03  COLUMN 54 PIC X(34) VALUE
               'GRANS   RECORDS   ORG   RESS   JCL'.
           03  COLUMN 92 PIC X(36) VALUE
               'DATE     DATE     DATE    MAX       '.
           03  LINE PLUS 1  COLUMN 10  PIC X(16) VALUE ALL '-'.
           03  COLUMN 54 PIC X(34) VALUE
               '-----   -------   ---   ----   ---'.
           03  COLUMN 92 PIC X(37) VALUE
               '------   ------   ------   ---       '.
       01  SK1  TYPE CF SORTKEY1  LINE PLUS 2 .
           03  COLUMN 5 PIC X(13) VALUE '** TOTALS - '.
           03  COLUMN 18 PIC X(23) SOURCE HOLD-DECODE.
           03  LINE PLUS 2 COLUMN 12 PIC X(41) VALUE
               '# OF        # OF         # OF        # OF'.
           03  COLUMN 60 PIC X(26) VALUE
           03  COLUMN 93 PIC X(25) VALUE
               'NOT         WITH       NO'.
           03  LINE PLUS 1 COLUMN 12 PIC X(31) VALUE
               'FILES     GRANULES      RECORDS'.
           03  COLUMN 49 PIC X(38) VALUE
               'KEYED     CONSEC     RANDOM     CPMRSD'.
           03  COLUMN 92 PIC X(27) VALUE
               'CMPRSD       JCL        JCL'.
           03  LINE PLUS 1  COLUMN 12 PIC X(31) VALUE
               '-----     --------      -------'.
           03  COLUMN 49 PIC X(38) VALUE
               '-----     ------     ------     ------'.
           03  COLUMN 92 PIC X(27) VALUE
               '------       ----       ---'.
            03  SUM1 LINE PLUS 1 COLUMN 10 PIC Z(7)9 SUM NUM-FILES (K).
           03  SUM2 COLUMN 21 PIC Z(7)9  SUM    NUM-GRANS (K).
           03  SUM3 COLUMN 34 PIC Z(7)9  SUM    NUM-RECS (K).
           03  SUM4 COLUMN 47 PIC Z(7)9  SUM    NUM-KEY (K).
           03  SUM5 COLUMN 58 PIC Z(7)9  SUM    NUM-CONS (K).
           03  SUM6 COLUMN 69 PIC Z(7)9  SUM    NUM-RAND (K).
           03  SUM7 COLUMN 80 PIC Z(7)9  SUM    NUM-CMPRES (K).
           03  SUM8 COLUMN 91 PIC Z(7)9  SUM    NUM-NOT-COMP (K).
           03  SUM9 COLUMN 102 PIC Z(7)9  SUM    NUM-JCL (K).
           03  SUM10 COLUMN 113 PIC Z(7)9 SUM    NUM-NO-JCL (K).
       01  SUMMARY-LINE  TYPE DE LINE PLUS 1.
           03  COLUMN 5 PIC X(20) SOURCE FILE-NAME.
           03  COLUMN 27 PIC Z(5)9 SOURCE NUM-FILES (K).
           03  COLUMN 36 PIC Z(9)9 SOURCE NUM-GRANS (K).
           03  COLUMN 49 PIC Z(9)9 SOURCE NUM-RECS (K).
           03  COLUMN 62 PIC Z(5)9 SOURCE NUM-KEY (K).
           03  COLUMN 71 PIC Z(5)9 SOURCE NUM-CONS (K).
           03  COLUMN 80 PIC Z(5)9 SOURCE NUM-RAND (K).
           03  COLUMN 89 PIC Z(5)9 SOURCE NUM-CMPRES (K).
           03  COLUMN 98 PIC Z(5)9 SOURCE NUM-NOT-COMP (K).
           03  COLUMN 107 PIC Z(5)9 SOURCE NUM-JCL (K).
           03  COLUMN 116 PIC Z(5)9 SOURCE NUM-NO-JCL (K).
       01  SUMMARY-HEAD TYPE DE LINE PLUS 2    NEXT GROUP PLUS 1.
           03  LINE PLUS 1 COLUMN 5 PIC X(27) VALUE
               '**   MINOR FILETYPE SUMMARY'.
           03  LINE PLUS 2 COLUMN 29 PIC X(28) VALUE
               '# OF       # OF         # OF'.
           03  COLUMN 64 PIC X(31) VALUE
               '# OF     # OF     # OF     WERE'.
           03  COLUMN 100 PIC X(22) VALUE
               'NOT     WITH       NO'.
           03  LINE PLUS 1 COLUMN 29 PIC X(30) VALUE
               'FILES    GRANULES      RECORDS'.
           03  COLUMN 64 PIC X(32) VALUE
               'KEYED   CONSEC   RANDOM   CMPRSD'.
           03  COLUMN 99 PIC X(23) VALUE
               'CMPRSD    JCL       JCL'.
           03  LINE PLUS 1 COLUMN 29 PIC X(30) VALUE
               '-----    --------      -------'.
           03  COLUMN 64 PIC X(32) VALUE
               '-----   ------   ------   ------'.
           03  COLUMN 99 PIC X(23) VALUE
               '------    ----      ---'.
       01  MIXED-SUMMARY  TYPE DE LINE PLUS 1.
           03  COLUMN 26 PIC Z(5)9 SOURCE NUM-MINOR (1) BLANK ZERO.
           03  COLUMN 33 PIC X(20) SOURCE NAME-MINOR (1).
           03  COLUMN 53 PIC Z(5)9 SOURCE NUM-MINOR (2) BLANK ZERO.
           03  COLUMN 60 PIC X(20) SOURCE NAME-MINOR (2).
           03  COLUMN 80 PIC Z(5)9 SOURCE NUM-MINOR (3) BLANK ZERO.
           03  COLUMN 87 PIC X(20) SOURCE NAME-MINOR (3).
       01  MIXED-HEAD TYPE DE LINE PLUS 2 NEXT GROUP PLUS 1.
           03  COLUMN 53 PIC X(24) VALUE
               'BREAKDOWN OF MIXED FILES'.
           03  LINE PLUS 1 COLUMN 53 PIC X(24) VALUE ALL '-'.
       01  LISTLINE TYPE DE LINE PLUS 1.
           03  COLUMN 10 PIC X(40) SOURCE THE-NAME.
           03  COLUMN 53 PIC Z(5)9 SOURCE NUM-GRANULES.
           03  COLUMN 62 PIC Z(6)9 SOURCE NUM-RECORDS.
           03  COLUMN 69 PIC X SOURCE ASTER.
           03  COLUMN 73 PIC X SOURCE ORGANIZATION.
           03  COLUMN 80 PIC X SOURCE COMPRESS.
           03  COLUMN 86 PIC X SOURCE JCL.
           03  COLUMN 91 PIC X(6) SOURCE CREATE-DATE.
           03  COLUMN 100 PIC X(6) SOURCE MODIFY-DATE.
           03  COLUMN 109 PIC X(6) SOURCE ACCESS-DATE.
           03  COLUMN 118 PIC Z9 SOURCE KEYMAX BLANK ZERO.
       01  EX-HEAD  TYPE DE LINE PLUS 1.
           03  COLUMN 20 PIC X(23) VALUE
               'FILE TYPES ENCOUNTERED'.
       01  EXTRA-MULTIPLE-LINES TYPE DE LINE PLUS 1.
           03              COLUMN 26  PIC X(24) SOURCE FIELD (1).
           03  COLUMN 53 PIC X(24) SOURCE FIELD (2).
           03  COLUMN 80 PIC X(24) SOURCE FIELD (3).
       01 EXTRA-INFO-LINE TYPE DE LINE PLUS 1.
           03  COLUMN 26 PIC X(24) SOURCE FIELD (1).
           03  COLUMN 53 PIC X(24) SOURCE FIELD (2).
           03  COLUMN 80 PIC X(24) SOURCE FIELD (3).
       01  NAME-HEAD  TYPE DE LINE PLUS 2 NEXT GROUP PLUS 1.
           03  COLUMN 5  PIC X(20) SOURCE MAJOR-NAME.
           03  COLUMN 26 PIC X VALUE '-'.
           03  COLUMN 28 PIC X(20) SOURCE FILE-NAME.
       RD  FILESCAN-SUMMARY  CONTROLS ARE FINAL
           PAGE LIMIT IS 61 LINES
           HEADING 1.
       01  CF-FINAL TYPE CF FINAL LINE NEXT PAGE NEXT GROUP NEXT PAGE.
           03  COLUMN 10 PIC X(16) SOURCE TIME-AND-DATE.
           03  COLUMN 118 PIC X(5) VALUE 'PAGE '.
           03  COLUMN 124 PIC ZZZ9 SOURCE PAGE-COUNTER OF
                   FILESCAN-REPORT.
           03  LINE PLUS 2 COLUMN 5 PIC X(20) VALUE '** GRAND TOTALS '.
           03  LINE PLUS 2 COLUMN 12 PIC X(41) VALUE
               '# OF        # OF         # OF        # OF'.
           03  COLUMN 60 PIC X(26) VALUE
               '# OF       # OF       WERE'.
           03  COLUMN 93 PIC X(25) VALUE
               'NOT         WITH       NO'.
           03  LINE PLUS 1 COLUMN 12 PIC X(31) VALUE
               'FILES     GRANULES      RECORDS'.
           03  COLUMN 49 PIC X(38) VALUE
               'KEYED     CONSEC     RANDOM     CPMRSD'.
           03  COLUMN 92 PIC X(27) VALUE
               'CMPRSD       JCL        JCL'.
           03  LINE PLUS 1  COLUMN 12 PIC X(31) VALUE
               '-----     --------      -------'.
           03  COLUMN 49 PIC X(38) VALUE
               '-----     ------     ------     ------'.
           03  COLUMN 92 PIC X(27) VALUE
               '------       ----       ---'.
            03  SUM1 LINE PLUS 1 COLUMN 10 PIC Z(7)9 SUM NUM-FILES (K).
           03  SUM2 COLUMN 21 PIC Z(7)9  SUM    NUM-GRANS (K).
           03  SUM3 COLUMN 34 PIC Z(7)9  SUM    NUM-RECS (K).
           03  SUM4 COLUMN 47 PIC Z(7)9  SUM    NUM-KEY (K).
           03  SUM5 COLUMN 58 PIC Z(7)9  SUM    NUM-CONS (K).
           03  SUM6 COLUMN 69 PIC Z(7)9  SUM    NUM-RAND (K).
           03  SUM7 COLUMN 80 PIC Z(7)9  SUM    NUM-CMPRES (K).
           03  SUM8 COLUMN 91 PIC Z(7)9  SUM    NUM-NOT-COMP (K).
           03  SUM9 COLUMN 102 PIC Z(7)9  SUM    NUM-JCL (K).
           03  SUM10 COLUMN 113 PIC Z(7)9 SUM    NUM-NO-JCL (K).
           03  COLUMN 5 PIC X(20) SOURCE FILE-NAME.
           03  COLUMN 27 PIC Z(5)9 SOURCE NUM-FILES (K).
           03  COLUMN 36 PIC Z(9)9 SOURCE NUM-GRANS (K).
           03  COLUMN 49 PIC Z(9)9 SOURCE NUM-RECS (K).
           03  COLUMN 62 PIC Z(5)9 SOURCE NUM-KEY (K).
           03  COLUMN 71 PIC Z(5)9 SOURCE NUM-CONS (K).
           03  COLUMN 80 PIC Z(5)9 SOURCE NUM-RAND (K).
           03  COLUMN 89 PIC Z(5)9 SOURCE NUM-CMPRES (K).
           03  COLUMN 98 PIC Z(5)9 SOURCE NUM-NOT-COMP (K).
           03  COLUMN 107 PIC Z(5)9 SOURCE NUM-JCL (K).
           03  COLUMN 116 PIC Z(5)9 SOURCE NUM-NO-JCL (K).
       PROCEDURE DIVISION.
       DECLARATIVES.
       BEFORE-PH SECTION.
           USE BEFORE REPORTING PAGE-HEAD.
       BEFORE-PH-PROC.
           IF SORTIND = 0 MOVE SPACES TO HOLD-DECODE.
           IF SORTIND NOT = 0 AND PAGE-COUNTER OF FILESCAN-REPORT
               = 1 MOVE HOLD-DECODE TO HEAD-FIELD.
           IF LASTONE = 1 MOVE SPACES TO HEAD-FIELD.
           MOVE 1 TO PAGEIND.
           IF LIST = 0 MOVE SPACES TO PAGE-BUF1 PAGE-BUF2
               PAGE-BUF3 PAGE-BUF4 ELSE PERFORM  GEN-HEADER
               THRU GEN-HEADER2.
           IF LIST NOT = 0 AND SUMM-IND = 0 MOVE PAGE-BUF1
               TO PAGE-BUF5.
       END DECLARATIVES.
       SORTING SECTION.
       ISSUE-SORT.
           SORT SORT-FILE ASCENDING KEY SORTKEY1 SORTKEY2 SORTKEY3
               INPUT PROCEDURE SET-UP-SORT
               OUTPUT PROCEDURE WRITE-REPORT.
           STOP RUN.
       SET-UP-SORT SECTION.
       OPEN-FILES.
           OPEN OUTPUT SUMMARY-REPORT.
           OPEN INPUT FILETYPE-NAMES INPUT-FILE INPUT-COMMANDS
            OUTPUT OUTPUT-REPORT.
       READ-OPTIONS.
           READ INPUT-COMMANDS AT END GO TO READ-INPUT-FILE.
           IF 5BYTE-BUF = '+LIST' MOVE 1 TO LIST.
           IF 5BYTE-BUF NOT = '+SORT' GO TO READ-OPTIONS.
           PERFORM LOOK-FOR-LEFT-PAREN THRU LOOK1-EXIT
               VARYING K FROM 6 BY 1 UNTIL K > 80.
       AFTER-LOOK1.
           IF K > 80 DISPLAY ' INVALID +SORT ' COMMAND-BUF UPON
               PRINTER GO TO READ-OPTIONS.
           MOVE 1 TO I.
           MOVE SPACES TO THE-NAME.
           ADD 1 TO K.
           PERFORM PUT-IN-OPTION THRU PUT1-EXIT VARYING L FROM K
               BY 1 UNTIL L > 80.
       CHECK-OPTION.
           IF THE-NAME NOT = 'SITE' AND 'ACCOUNT' AND 'PUBPRIV'
               AND 'COUNT' DISPLAY ' INVALID +SORT ' COMMAND-BUF
               UPON PRINTER GO TO READ-OPTIONS.
           MOVE 0 TO SORTIND.
           IF THE-NAME = 'SITE' MOVE 1 TO SORTIND.
           IF THE-NAME = 'ACCOUNT' MOVE 2 TO SORTIND.
           IF THE-NAME = 'PUBPRIV' MOVE 3 TO SORTIND.
           IF THE-NAME = 'COUNT' MOVE 4 TO SORTIND.
           MOVE SPACES TO THE-NAME.
           MOVE 1 TO I
           IF 80BYTES (L) = ',' ADD 1 TO L PERFORM PUT-IN-SELECT
               VARYING K FROM L BY 1 UNTIL K > 80.
       MOVE-IN-SELECT.
           IF SORTIND = 1 MOVE THE-NAME TO SELECT-SITE.
           IF SORTIND = 2 MOVE THE-NAME TO SELECT-ACCOUNT.
           IF SORTIND = 3 MOVE THE-NAME TO SELECT-PUBPRIV.
           IF SORTIND = 4 MOVE THE-NAME TO SELECT-ACCURATE.
           GO TO READ-OPTIONS.
       READ-INPUT-FILE.
           READ INPUT-FILE INTO INPUT-WS-BUF AT END GO TO END-OF-INPUT.
           IF SORTIND = 1 PERFORM SORT-BY-SITE GO TO RELEASE-REC.
           IF SORTIND = 3 PERFORM SORT-BY-PUBPRIV GO TO RELEASE-REC.
           IF SORTIND = 4 PERFORM SORT-BY-COUNT GO TO RELEASE-REC.
           IF SORTIND NOT = 0 DISPLAY ' INVALID SORTIND ' SORTIND
               UPON PRINTER GO TO CLOSE-ALL.
           MOVE SPACES TO SORTKEY1 DECODED-VALUES.
       RELEASE-REC.
           MOVE INPUT-WS-BUF TO THE-REST OF SORT-BUF.
           RELEASE SORT-BUF.
           GO TO READ-INPUT-FILE.
       END-OF-INPUT.
           CLOSE INPUT-FILE.
       WRITE-REPORT SECTION.
       WRITE-REPORT-PAR.
           READY TRACE.
           RETURN SORT-FILE AT END GO TO CHECK-SORT-IND.
           MOVE THE-REST TO INPUT-WS-BUF.
           MOVE SORTKEY1 TO HOLDKEY.
           PERFORM GEN-HEADER THRU GEN-HEADER2.
           IF LIST = 1
               MOVE PAGE-BUF1 TO PAGE-BUF5
               MOVE PAGE-BUF2 TO PAGE-BUF6
               MOVE PAGE-BUF3 TO PAGE-BUF7
               MOVE PAGE-BUF4 TO PAGE-BUF8.
           MOVE TYPE-KEY TO HOLD-TYPE-KEY.
           MOVE DECODED-VALUES TO HOLD-DECODE.
           ENTER GETCOM, GETCOM-BUF.
           MOVE ZEROS TO COUNT-BUF TOTALS-BUF.
           INITIATE ALL.
           GO TO AFTER-FIRST.
       RETURN-FROM-SORT.
           RETURN SORT-FILE AT END GO TO CHECK-SORT-IND.
           MOVE THE-REST TO INPUT-WS-BUF.
       AFTER-FIRST.
           IF SORTKEY1 = HOLDKEY PERFORM ADD-IN THRU ADD-IN-EXIT
                                 PERFORM LIST-IT THRU LIST-IT-EXIT
                                 GO TO RETURN-FROM-SORT.
           MOVE SORTKEY1 TO TEMPSORTKEY.
           MOVE HOLDKEY TO SORTKEY1.
       PRINT-LINES.
           IF LIST = 0 AND KOUNTER = 0 MOVE 1 TO KOUNTER ELSE
                  MOVE PAGE-BUF1 TO HOLD-IT MOVE SPACES TO  PAGE-BUF1.
           MOVE 1 TO SUMM-IND.
               GENERATE PAGE-SKIP.
           GENERATE SUMMARY-HEAD.
           PERFORM PRINT-OUT-FILETYPES THRU P-O-F-EXIT
               VARYING K FROM 1 BY 1 UNTIL K > 42.
           IF NUM-FILES (41) NOT = 0 PERFORM SPACE-OUT GENERATE
               MIXED-HEAD MOVE
               0 TO I PERFORM GEN-MIXED THRU G-M-EXIT VARYING
               L FROM 1 BY 1 UNTIL L > 42 PERFORM DUMP-LAST2.
       PRINT-LINES-END.
           MOVE ZEROS TO COUNT-BUF MORE-THAN-7.
           MOVE TEMPSORTKEY TO SORTKEY1 HOLDKEY.
           GENERATE CH1.
           MOVE DECODED-VALUES TO HOLD-DECODE.
           MOVE HOLD-IT TO PAGE-BUF1.
           MOVE PAGE-BUF1 TO PAGE-BUF5.
           MOVE PAGE-BUF2 TO PAGE-BUF6.
           MOVE PAGE-BUF3 TO PAGE-BUF7.
           MOVE PAGE-BUF4 TO PAGE-BUF8.
           IF LIST NOT = 0 GENERATE PAGE-SKIP.
       PRINT-END2.
           MOVE 0 TO SUMM-IND.
           GO TO AFTER-FIRST.
       CHECK-SORT-IND.
           IF SORTIND = 0 PERFORM PRINT-LINES GO TO CLOSE-ALL.
           PERFORM PRINT-LINES.
           MOVE SPACES TO SORTKEY1.
           MOVE 1 TO LASTONE.
           GENERATE CH1.
           IF SORTIND = 1 AND SELECT-SITE NOT = SPACES GO TO CLOSE2.
           IF SORTIND = 2 AND SELECT-ACCOUNT NOT = SPACES GO TO CLOSE2.
           IF SORTIND = 3 AND SELECT-PUBPRIV NOT = SPACES GO TO CLOSE2.
           IF SORTIND = 4 AND SELECT-ACCURATE NOT = SPACES GO TO CLOSE2.
           MOVE TOTALS-BUF TO COUNT-BUF.
           MOVE TMORE-THAN-7 TO MORE-THAN-7.
           MOVE SPACES TO DECODED-VALUES HEAD-FIELD HOLD-DECODE.
               MOVE SPACES TO PAGE-BUF5 PAGE-BUF6 PAGE-BUF7 PAGE-BUF8.
           GENERATE PAGE-SKIP.
           PERFORM PRINT-LINES.
           GO TO CLOSE-ALL.
       LOOK-FOR-LEFT-PAREN.
           IF 80BYTES (K) = '(' GO TO AFTER-LOOK1.
       LOOK1-EXIT.
           EXIT.
       PUT-IN-OPTION.
           IF 80BYTES (L) = ',' OR ')' GO TO CHECK-OPTION.
           MOVE 80BYTES (L) TO NAME-AREA (I).
           ADD 1 TO I.
       PUT1-EXIT.
           EXIT.
       PUT-IN-SELECT.
           IF 80BYTES (K) = ')' GO TO MOVE-IN-SELECT.
           MOVE 80BYTES (K) TO NAME-AREA (I)
           ADD 1 TO I.
       PUT2-EXIT.
           EXIT.
       SORT-BY-SITE.
           IF SELECT-SITE NOT = SPACES AND SITE-ID NOT = SELECT-SITE
               GO TO READ-INPUT-FILE.
           MOVE SITE-ID TO SORTKEY1 S-ID-2.
           MOVE SITE-ID-BUF TO DECODED-VALUES.
       SORT-BY-ACCOUNT.
           IF SELECT-ACCOUNT NOT = SPACES AND ACCOUNT NOT =
               SELECT-ACCOUNT GO TO READ-INPUT-FILE.
           MOVE ACCOUNT TO SORTKEY1 ACT2.
           MOVE ACCOUNT-BUF TO DECODED-VALUES.
       SORT-BY-PUBPRIV.
           IF SELECT-PUBPRIV = 0 AND PRIV-VOL-SN NOT = SPACES
              GO TO READ-INPUT-FILE.
           IF SELECT-PUBPRIV = 1 AND PRIV-VOL-SN = SPACES
              GO TO READ-INPUT-FILE.
           IF PRIV-VOL-SN = SPACES MOVE PUBLIC-FILES TO
               DECODED-VALUES MOVE '1' TO SORTKEY1 ELSE MOVE
               PRIVATE-FILES TO DECODED-VALUES MOVE '0' TO
               SORTKEY1.
       SORT-BY-COUNT.
           IF ACCURATE-RECCOUNT = 'Y' AND SELECT-ACCURATE = '0'
               GO TO READ-INPUT-FILE.
               GO TO READ-INPUT-FILE.
           MOVE ACCURATE-RECCOUNT TO SORTKEY1.
           IF ACCURATE-RECCOUNT = 'Y' MOVE REC-COUNT-GOOD TO
               DECODED-VALUES ELSE MOVE REC-COUNT-NO-GOOD TO
               DECODED-VALUES.
       ADD-IN.
           ADD 1 TO NUM-FILES (NKEY2) TNUM-FILES (NKEY2).
           ADD NUM-GRANULES TO NUM-GRANS (NKEY2) TNUM-GRANS (NKEY2).
           ADD NUM-RECORDS TO NUM-RECS (NKEY2) TNUM-RECS (NKEY2).
           IF ORGANIZATION = 'K' ADD 1 TO NUM-KEY (NKEY2)
               TNUM-KEY (NKEY2).
           IF ORGANIZATION = 'C' ADD 1 TO NUM-CONS (NKEY2)
               TNUM-CONS (NKEY2).
           IF ORGANIZATION = 'R' ADD 1 TO NUM-RAND (NKEY2)
               TNUM-RAND (NKEY2).
           IF COMPRESS = 'Y' ADD 1 TO NUM-CMPRES (NKEY2)
               TNUM-CMPRES (NKEY2) ELSE ADD 1 TO NUM-NOT-COMP (NKEY2)
               TNUM-NOT-COMP (NKEY2).
           IF JCL = 'Y' ADD 1 TO NUM-JCL (NKEY2) TNUM-JCL (NKEY2)
               ELSE ADD 1 TO NUM-NO-JCL (NKEY2) TNUM-NO-JCL (NKEY2).
           IF MINOR-KEY NOT = '41' AND '42' GO TO ADD-IN-EXIT.
           IF MINOR-KEY = '41' PERFORM ADD-MULTIPLES VARYING K
               FROM 1 BY 1 UNTIL K > 7 PERFORM ADD-OTHER
               GO TO ADD-IN-EXIT.
       ADD-IN-EXIT.
           EXIT.
       ADD-MULTIPLES.
           IF MULTIPLE-TYPES-NUM (K) NOT = 0 MOVE
               MULTIPLE-TYPES-NUM (K) TO J ADD 1 TO
                BREAKDOWNS (J) TBREAKDOWNS (J).
       ADD-OTHER.
           IF MULTIPLE-TYPES-NUM (8) NOT = 0 ADD 1 TO
               MORE-THAN-7 TMORE-THAN-7.
       LIST-IT.
           IF LIST = 0 GO TO LIST-IT-EXIT.
               THRU G-H-EXIT MOVE TYPE-KEY TO HOLD-TYPE-KEY.
           IF ACCURATE-RECCOUNT = 'Y' MOVE '*' TO ASTER
               ELSE MOVE SPACES TO ASTER.
           PERFORM SET-UP-NAME THRU S-U-N-EXIT.
           IF COMPRESS = 'N' MOVE SPACES TO COMPRESS.
           IF JCL = 'N' MOVE SPACES TO JCL.
           GENERATE LISTLINE.
           IF MINOR-KEY NOT = '41' AND '42' GO TO LIST-IT-EXIT.
           IF MINOR-KEY = '41'
                GENERATE EX-HEAD MOVE 0 TO I MOVE SPACES TO
               FIELD (1) FIELD (2) FIELD (3) PERFORM MOVE-MULTIPLES
               THRU M-M-EXIT VARYING K FROM 1 BY 1 UNTIL K > 8
               PERFORM DUMP-LAST GO TO LIST-IT-EXIT.
       LIST-IT-EXIT.
           EXIT.
       MOVE-MULTIPLES.
           IF MULTIPLE-TYPES (K) = SPACES GO TO M-M-EXIT.
           ADD 1 TO I.
           MOVE SPACES TO FILETYPE-KEY.
           MOVE MULTIPLE-TYPES-NUM (K) TO NUMKEY2.
           IF K = 8 MOVE 'MORE TYPES' TO FIELD (I) GO TO GEN-IT.
           READ FILETYPE-NAMES INVALID MOVE SPACES TO FIELD (I)
               GO TO GEN-IT.
           MOVE FILE-NAME TO FIELD (I).
       GEN-IT.
           IF I = 3 GENERATE EXTRA-MULTIPLE-LINES MOVE SPACES
               TO FIELD (1) FIELD (2) FIELD (3) MOVE 0 TO I.
       M-M-EXIT.
       GEN-HEADER.
           MOVE SPACES TO FILETYPE-KEY.
           MOVE MAJOR-KEY TO NUMKEY1.
           READ FILETYPE-NAMES INVALID MOVE SPACES TO FILE-NAME.
           MOVE FILE-NAME TO MAJOR-NAME PH1.
       GEN-HEADER2.
           MOVE SPACES TO FILETYPE-KEY.
           MOVE MINOR-KEY TO NUMKEY2.
           READ FILETYPE-NAMES INVALID MOVE SPACES TO FILE-NAME PH3.
           MOVE FILE-NAME TO PH3.
       GEN-HEADER3.
       G-H-EXIT.
           EXIT.
       PRINT-OUT-FILETYPES.
           IF NUM-FILES (K) = 0 GO TO P-O-F-EXIT.
           MOVE SPACES TO FILETYPE-KEY.
           MOVE K TO NUMKEY2.
           READ FILETYPE-NAMES INVALID MOVE SPACES TO FILE-NAME.
           GENERATE SUMMARY-LINE.
           IF LASTONE = 0 GENERATE FILESCAN-SUMMARY.
       P-O-F-EXIT.
           EXIT.
       GEN-MIXED.
           IF BREAKDOWNS (L) = 0 GO TO G-M-EXIT.
           ADD 1 TO I.
           MOVE BREAKDOWNS (L) TO NUM-MINOR (I).
           MOVE SPACES TO FILETYPE-KEY.
           MOVE L TO NUMKEY2.
           READ FILETYPE-NAMES INVALID MOVE SPACES TO FILE-NAME.
           MOVE FILE-NAME TO NAME-MINOR (I).
           IF I = 3 GENERATE MIXED-SUMMARY PERFORM SPACE-OUT
               MOVE 0 TO I.
       G-M-EXIT.
           EXIT.
       SPACE-OUT.
           MOVE SPACES TO NAME-MINOR (1) NAME-MINOR (2)
               NAME-MINOR (3).
           MOVE 0 TO NUM-MINOR (1) NUM-MINOR (2) NUM-MINOR (3).
       DUMP-LAST.
           IF I NOT = 0 GENERATE EXTRA-MULTIPLE-LINES.
       DUMP-LAST2.
           IF MORE-THAN-7 NOT = 0 ADD 1 TO I MOVE MORE-THAN-7
               TO NUM-MINOR (I) MOVE 'MORE THAN 7' TO NAME-MINOR (I).
           IF I NOT = 0 GENERATE MIXED-SUMMARY.
       SET-UP-NAME.
           MOVE SPACES TO THE-NAME.
           PERFORM LOOK-FOR-NAME VARYING K FROM 1 BY 1 UNTIL K > 31.
       AFTER-LOOK3.
           MOVE '.' TO NAME-AREA (K).
           ADD 1 TO K.
           PERFORM MOVE-ACCT VARYING L FROM 1 BY 1 UNTIL L > 8.
       S-U-N-EXIT.
           EXIT.
       LOOK-FOR-NAME.
           IF FNAME (K) = ' ' GO TO AFTER-LOOK3.
     #q
       MOVE-ACCT.
           IF ACT (L) NOT = ' ' MOVE ACT (L) TO NAME-AREA (K)
               ADD 1 TO K.
       CLOSE-ALL.
           ADD 1 TO PAGE-COUNTER OF FILESCAN-REPORT.
           TERMINATE FILESCAN-SUMMARY.
       CLOSE2.
           CLOSE SUMMARY-REPORT.
           CLOSE FILETYPE-NAMES OUTPUT-REPORT INPUT-COMMANDS.

