*DECK,GSM 
          IDENT  GSM
          TITLE  GSM - CODE GENERATOR FOR SORT/MERGE-RELATED VERBS
          SPACE  1
          MACHINE  ANY,I
          SST 
          COMMENT  SORT, MERGE AND RELATED VERBS PROCESSOR
          SPACE  4
**        GSM - GENERATE CODE FOR THE FOLLOWING COBOL VERBS 
* 
*                MERGE
*                RELEASE
*                RETURN 
*                SORT 
* 
* 
*         GTEXT VERB PROCESSORS 
* 
*                CGMERGE - MERGE
*                CGPERIP - PERFORM-IP-PROC
*                CGPEROP - PERFORM-OP-PROC
*                CGRELEA - RELEASE
*                CGRETUR - RETURN 
*                CGRETAT - RETURN AT END
*                CGSORT - SORT
* 
* 
*         CALLS TO COMDECKS 
* 
*CALL,CCT 
*CALL,FNATVALS
          EJECT 
 GSM      MODULE
* 
* 
*         REGTABLE EQUATES
* 
 SMREGA   EQU    REGA 
 SMREGB   EQU    REGB 
 SMREGC   EQU    REGC 
 SMREGD   EQU    REGD 
 SMREGE   EQU    REGE 
 SMREGF   EQU    REGF 
* 
* 
*         VIRTUAL REGISTER EQUATES
* 
 SMVREGA  EQU    VREG1
 SMVREGB  EQU    VREG2
 SMVREGC  EQU    VREG3
 SMVREGD  EQU    VREG4
 SMVREGE  EQU    VREG5
 SMVREGF  EQU    VREG6
 SMVREGG  EQU    VREG7
 SMVREGH  EQU    VREG8
 SMVREGI  EQU    VREG9
 SMVREGJ  EQU    VREG10 
 SMVREGK  EQU    VREG11 
 SMVREGL  EQU    VREG12 
* 
* 
* 
*         MISCELLANEOUS EQUATES 
* 
* 
* 
*         LINKAGE FROM CALLING ROUTINES IN OTHER MODULES
* 
 CGMERGE  KNIL   CGMERGE     MERGE                         ( 42)
 CGPERIP  KNIL   CGPERIP     PERFORM INPUT PROCEDURE       ( 61)
 CGPEROP  KNIL   CGPEROP     PERFORM OUTPUT PROCEDURE      ( 62)
 CGRELEA  KNIL   CGRELEA     RELEASE                       ( 70)
 CGRETUR  KNIL   CGRETUR     RETURN                        ( 72)
 CGRETAT  KNIL   CGRETAT     RETURN AT END                 ( 73)
 CGSORT   KNIL   CGSORT      SORT                          ( 83)
* 
* 
* LINKAGE TO CALLED ROUTINES IN OTHER MODULES 
* 
 CGPERFO  LINK   CGPERFO     GENERATE -PERFORM- CODE (GBRANCH MODULE) 
 GSCLOSE  LINK   GSCLOSE     GENERATE -CLOSE- CODE (GIO MODULE) 
 GSOPENI  LINK   GSOPENI     GENERATE -OPEN INPUT- CODE (GIO MODULE)
 GSOPENO  LINK   GSOPENO     GENERATE -OPEN OUTPUT- CODE (GIO MODULE) 
 GSREADN  LINK   GSREADN     GENERATE -READ- CODE (GIO MODULE)
 GSWRITE  LINK   GSWRITE     GENERATE -WRITE- CODE (GIO MODULE) 
 SA0FIT   LINK   SA0FIT      GENERATE -SA0 FIT- CODE (GIO MODULE) 
 MVTOXRG  LINK   MVTOXRG     FETCH FIELD (GIO MODULE) 
 SETXREG  LINK   CGSETXW     SXN TO CONSTANT
 STORERL  LINK   STORERL     STORE REC LENGTH AFT RETURN
* 
 REGMOVE  EXECUTE  CGREGMV
          RETURN
* 
* 
*         SYMBOLIC PARAMETER DEFINITIONS
* 
 CODEBLK  SETSY  (USETB$OF,USECODE) 
 LOCAL1   SETSY  (LOCAL$OF,SMSAV1)
 LOCAL2   SETSY  (LOCAL$OF,SMSAV2)
 LOCAL3   SETSY  (LOCAL$OF,SMSAV3)
 LOCAL4   SETSY  (LOCAL$OF,T4)
 LOCAL5   SETSY  (LOCAL$OF,T5)
 SMBLOCK  SETSY  (USETB$OF,USESM) 
 XCEX     SETSY  (EXT$OF,C.EX)
 XCSVRTN  SETSY  (EXT$OF,C.SVRTN) 
 XSMCONM  SETSY  (EXT$OF,SMCONM)
 XSMCON7  SETSY  (EXT$OF,SMCON7)
 XSMMERGE SETSY  (EXT$OF,SM5MERG) 
 XSMSORT  SETSY  (EXT$OF,SM5SORT) 
 XSORTL   SETSY  (EXT$OF,SORTL) 
 XUFREL   SETSY  (EXT$OF,C.RLUF)
 SMFILW1  CONSTANT  55550611140523555555B 
 SMFILW2  CONSTANT  55051604550611140523B 
 SMKEYW1  CONSTANT  55555513053155555555B 
 SMKEYW2  CONSTANT  55051604551305315555B 
 MERGE    CONSTANT  00000015052207055555B    MERGE
          EJECT 
**        CGSORT - PROCESSOR FOR THE -SORT- GTEXT 
*         CGMERGE - PROCESSOR FOR THE -MERGE- GTEXT 
* 
*         CODE GENERATED -
* 
*         OPEN -USING- FILES     MERGE ONLY 
*         SA0    FIT (SD) 
*         SX0    ADDRESS OF -KEY- AND -FILES- (MERGE ONLY) MACRO EXPANDS
*         SX1    B0          IF NO -COLLATING SEQUENCE- OPTION
*     OR  SX1    COLLATING SEQUENCE NUMBER
*      AND IF USER-DEFINED COLLATING SEQUENCE, THE NEXT 3 INSTRUCTIONS
*         SXK    ADDRESS OF USER-DEFINED COLLATING SEQUENCE 
*         LXK    30 
*         IX1    XK+X1
*         SB3    B0          IF -USING- 
*     OR  SB3    B1          IF -INPUT PROCEDURE- (SORT ONLY) 
*         SX3    ADDR. OF -USING- OR -INPUT PROCEDURE- AREA (SORT ONLY) 
*         SB4    B0          IF -GIVING-
*     OR  SB4    B1          IF -OUTPUT PROCEDURE-
*         SX4    ADDRESS OF -GIVING- OR -OUTPUT PROCEDURE- AREA 
*         SX5    SMCONM      IF MERGE 
*     OR  SX5    SMCON7      IF SORT
*         SB7    RETURN ADDRESS 
*      +  RJ     C.MERGE OR C.SORT
*      -  PS     SOURCE LINE NUMBER 
*             -USING- AREA
*             -GIVING- AREA 
*                NOTE THAT IF -INPUT PROCEDURE- AND/OR -OUTPUT
*                PROCEDURE-, THE -CGPERIP- AND -CGPEROP- PROCESSORS,
*                RESPECTIVELY, FILL IN THESE AREAS
*      +  RETURN
*         CLOSE -USING- FILES    MERGE ONLY 
*  AND IN A SEPARATE USE BLOCK ("SRT/MRG")
*         SORT/MERGE -KEY- MACRO EXPANSION(S) 
*         SORT/MERGE -FILES- MACRO EXPANSION (MERGE ONLY) 
* 
* 
 CGMERGE  EGO    1
          NOTE   CGMERGE
          MOVEZ  (AUXREFOF,SMREGE),SMSAV4  INDICATE MERGE 
*     GENERATE CODE TO OPEN ALL USING FILES 
          MOVEZ  (EQUALS,REGU2),REGH  SAVE REGB REGTABLE ENTRY ACROSS 
          MOVEZ  REGB,P1               -GSOPENI-
          MOVEZ  REGH,P2
          CALLZ  REGMOVE
          MOVEZ  (AUXREFOF,SMREGE),T3  AUXTABLE CHAIN POINTING TO USING 
 GSM0     LABEL                         FILE FNATS
          CALLZ  GSMREGB     SET UP REGB FOR USING FILE FNAT
          CALLZ  GSOPENI     GENERATE CODE TO OPEN FILE 
          MOVEZ  (AUXNXTOF,T3),T3 
          NOTZ   (T3,EQ,0),GSM0  JUMP IF ANOTHER USING FILE 
          MOVEZ  REGH,P1     RESTORE REGB REGTABLE ENTRY
          MOVEZ  REGB,P2
          CALLZ  REGMOVE
          BRANCH  GSM0A 
* 
 CGSORT   EGO    1
          NOTE   CGSORT 
          MOVEZ  0,SMSAV4    INDICATE SORT
          MOVEZ  0,T5        CLEAR LAST KEY LOCATION
* 
 GSM0A    LABEL 
* 
*  FILE NAME
          CALLZ  SA0FIT      SA0  FIT (SD FILE) 
* 
*  -ASCENDING/DESCENDING KEY- 
          MOVEZ  (LOCLAB,T4),T4  ALLOCATE LABEL NUMBER
          GEN    SXBPK,(VREGOF,SMVREGB),,LOCAL4  SX0  KEY ADDRESS 
*     GENERATE -KEY- MACRO EXPANSIONS 
          GEN    USE$,SMBLOCK  -SRT/MRG- USE BLOCK
          GEN    LABEL$,LOCAL4  DEFINE LOCAL LABEL
*       THE KEY AUXTABLE ENTRIES LIST IS IN REVERSE ORDER FROM THAT IN
*       WHICH THE KEYS ARE SPECIFIED IN THE SOURCE PROGRAM.  THEREFORE
*       THE KEY AUXTABLE LIST IS PROCESSED FROM END TO FRONT. 
          MOVEZ  (SMKCNTOF,SMREGC),T6  NUMBER OF KEYS TO T6 
          MOVEZ  (FNDNATOF,SMREGB),T1  FNAT DNAT POINTER
          ADDZ   T1,1,T1     DNAT POINTER TO 01 ENTRY OF 1ST RECORD 
*                             DESCRIPTION OF SD 
* 
 GSM1     LABEL 
          MOVEZ  (AUXREFOF,SMREGC),T3  AUXTABLE POINTER TO T3 
          SUBZ   T6,1,T7
          IFZ    (T7,EQ,K0),GSM1B  JUMP IF LAST KEY TO BE PROCESSED 
* 
 GSM1A    LABEL 
          MOVEZ  (AUXNXTOF,T3),T3  POINTER TO NEXT AUXTABLE ENTRY 
          SUBZ   T7,1,T7
          NOTZ   (T7,EQ,K0),GSM1A  JUMP IF NOT END OF (UNPROCESSED) LIST
* 
 GSM1B    LABEL 
          MOVEZ  (AUXDNPOF,T3),T4  DNAT POINTER (OF KEY ITEM) TO T4 
*                            -KEY- MACRO EXPANSION
          IFZ    ((CCTBIT,SORT4),EQ,0),GSMS5A  JP IF SORT5
          GENVFD  (60,SMKEYW1)     SIGNAL KEYS
          GENVFD  (60,(SMFBYTOF,T4))
          GENVFD  (60,1)
          GENVFD  (60,(SMBYTLOF,T4))
          GENVFD  (60,0)
          GENVFD  (60,(SMTYPOF,T4)) 
          GENVFD  (60,0)
          GENVFD  (60,(SMSEQOF,T3)) 
          GENVFD  (60,(SMSIGNOF,T4))
          GENVFD  (60,SMKEYW2)    END OF KEY
          BRANCH  GSM1B1
 GSMS5A   LABEL   50
          GENVFD (1,0),(20,(SMFBYTOF,T4)),(20,(SMBYTLOF,T4)),(6,(SMSEQOF
,,T3)),(13,0)      KEY INFO WORD 1
          MOVEZ  (SMTYPOF,T4),T2   GET TYPE OF KEY
          GENVFD (60,T2)     KEY INFO WORD 2 (TYPE IN DISP CODE)
 GSM1B1   LABEL 
          ADDZ   (SMFBYTOF,T4),(SMBYTLOF,T4),T2  LOCN + 1 OF END OF KEY 
          MAXZ   T2,T5,T5    SAVE LOCN + 1 OF LAST KEY IN REC 
          SUBZ   T6,1,T6
          NOTZ   (T6,EQ,K0),GSM1  JUMP IF ANOTHER KEY TO PROCESS
          IFZ    ((GSCODEOF,SMREGA),EQ,GMERGE),GSM1C  JUMP IF MERGE 
          IFTHEN  ((CCTBIT,SORT4),EQ,1) 
            GENVFD  (60,0)  TERMINATOR
          ENDIFZ
* 
 GSM1C    LABEL 
          GEN    USE$,CODEBLK  -REGULAR- USE BLOCK
* 
*  -SORT RECORD LENGTH INCLUDING ALL KEYS (SORT ONLY) 
* 
          IFZ    ((GSCODEOF,SMREGA),EQ,GMERGE),GSM1D  JUMP IF MERGE 
          SUBZ   T5,1,T5
          GEN    SXBPK,(VREGOF,SMVREGL),,T5 SX2 SORT RL INCLUDING KEYS
* 
 GSM1D    LABEL 
* 
*  -COLLATING SEQUENCE- 
          IFZ    ((GCODEOF,SMREGD),EQ,GDATAREF),GSM2  JUMP IF 
*                             -COLLATING SEQUENCE- SPECIFIED
          GEN    SXBPB,(VREGOF,SMVREGC)  SX1  B0
          BRANCH  GSM3
* 
 GSM2     LABEL 
          GEN    SXBPK,(VREGOF,SMVREGC),,(ANTYPEOF,SMREGD)
*                             SX1  COLLATING SEQUENCE NUMBER
          NOTZ   ((ANTYPEOF,SMREGD),EQ,ANLITERA),GSM3  JUMP IF NOT
*                             USER-DEFINED COLLATING SEQUENCE 
          GENLP  SMVREGC
          GEN    SXBPK,(VREGOF,SMVREGD),,((FWA$OF,SMREGD))
*                             SXK  ADDRESS OF COLLATING SEQUENCE TABLE
          GEN    SHL,SMVREGD,30  LXK  30
          GEN    IADD,SMVREGC,SMVREGD,SMVREGC  IX1  XK+X1 
          GEN    ENDL 
* 
 GSM3     LABEL 
* 
*  -USING- OR -INPUT PROCEDURE- 
          MOVEZ  (LOCLAB,SMSAV1),SMSAV1  ALLOCATE A LABEL TO IDENTIFY 
*                             LOCATION OF -USING- OR -INPUT PROCEDURE-
*                             (SORT ONLY) AREA.  IF -INPUT PROCEDURE-,
*                             THIS LABEL IS GENERATED BY THE -CGPERIP-
*                             PROCESSOR.
          GEN    SXBPK,(VREGOF,SMVREGE),,LOCAL1  SX3  USING/IP AREA 
          IFTHEN  ((GCODEOF,SMREGE),EQ,GDATAREF)
          GEN    SBBPB,(VREGOF,SMVREGD)  SB3  B0 (USING)
          ELSEZ 
          GEN    SBBPB,(VREGOF,SMVREGD),VREGB1  SB3  B1 (INPUT PROC)
          ENDIFZ
* 
 GSM3A    LABEL 
* 
*  -GIVING- OR -OUTPUT PROCEDURE- 
          MOVEZ  (LOCLAB,SMSAV2),SMSAV2  ALLOCATE A LABEL TO IDENTIFY 
*                             LOCATION OF -GIVING- OR -OUTPUT PROCEDURE-
*                             AREA.  IF -OUTPUT PROCEDURE-, THIS LABEL
*                             IS GENERATED BY THE -CGPEROP- PROCESSOR.
          GEN    SXBPK,(VREGOF,SMVREGG),,LOCAL2  SX4  GIVING/OP AREA
          IFTHEN  ((GCODEOF,SMREGF),EQ,GFILEREF)
          GEN    SBBPB,(VREGOF,SMVREGF)  SB4  B0 (GIVING) 
          ELSEZ 
          GEN    SBBPB,(VREGOF,SMVREGF),VREGB1  SB4  B1 (OUTPUT PROC) 
          ENDIFZ
* 
*  -SORT- OR -MERGE-
          IFZ    ((GSCODEOF,SMREGA),NE,GSORT),GSM4  JP IF MERGE 
          IFTHEN  ((CCTBIT,SORT4),EQ,1) 
            GEN    SXBPK,(VREGOF,SMVREGI),,XSMCON7   SX5 =XSMCON7 
          ELSEZ 
            GEN    SXBPK,(VREGOF,SMVREGI),,XSMSORT   SX5 =XSMSORT 
          ENDIFZ
          BRANCH GSM5 
 GSM4     LABEL 
          IFTHEN  ((CCTBIT,SORT4),EQ,1) 
            GEN    SXBPK,(VREGOF,SMVREGI),,XSMCONM   SX5 =XSMCONM 
          ELSEZ 
            GEN    SXBPK,(VREGOF,SMVREGI),,XSMMERGE  SX5 =XSMMERGE
          ENDIFZ
 GSM5     LABEL 
* 
*  RETURN ADDRESS FROM SORT/MERGE 
          MOVEZ  (LOCLAB,SMSAV3),SMSAV3  ALLOCATE LABEL FOR RETURN LOCTN
          GEN    SBBPK,(VREGOF,SMVREGK),,LOCAL3  SB7  RETURN ADDRESS
* 
*  CALL TO -C.SORT- OR -C.MERGE-
          IFZ    ((GSCODEOF,SMREGA),NE,GSORT),GSM5A  JP IF MERGE
          IFTHEN  ((CCTBIT,SORT4),EQ,1) 
            GENOBJ  N=C.SORT,I=(SMVREGA,SMVREGB,SMVREGC,SMVREGL,SMVREGD,
,SMVREGE,SMVREGF,SMVREGG,SMVREGI,SMVREGK)  RJ SORT
          ELSEZ 
            GENOBJ  N=C.SORTI,I=(SMVREGA,SMVREGB,SMVREGC,SMVREGL,SMVREGD
,,SMVREGE,SMVREGF,SMVREGG,SMVREGI,SMVREGK)  RJ SORT 
          ENDIFZ
          BRANCH GSM5B
 GSM5A    LABEL 
          IFTHEN  ((CCTBIT,SORT4),EQ,1) 
            GENOBJ  N=C.MERGE,I=(SMVREGA,SMVREGB,SMVREGC,SMVREGD,SMVREGE
,,SMVREGF,SMVREGG,SMVREGI,SMVREGK)  RJ MERGE
          ELSEZ 
            GENOBJ  N=C.MERGI,I=(SMVREGA,SMVREGB,SMVREGC,SMVREGD,SMVREGE
,,SMVREGF,SMVREGG,SMVREGI,SMVREGK)  RJ MERGE
          ENDIFZ
 GSM5B    LABEL 
* 
*  COMPLETE -USING- PROCESSING
          IFZ    ((GCODEOF,SMREGE),NE,GDATAREF),GSM7  JUMP IF NOT 
*                             -USING- (-INPUT PROCEDURE-) 
          MOVEZ  (AUXREFOF,SMREGE),T3  AUXTABLE POINTER TO T3 
          IFZ    ((GSCODEOF,SMREGA),EQ,GSORT),GSM6A  JUMP IF SORT 
*     GENERATE A -FILES- MACRO EXPANSION (TO FOLLOW THE -KEY- MACRO 
*     EXPANSION(S)) FOR THE MERGE -USING- FILES 
          MOVEZ  K1,T4       FLAG WILL BE SET 0 IF ANY MERGE USING FILE 
*                             IS SEQUENTIAL ORGANIZATION
          GEN    USE$,SMBLOCK  -SRT/MRG/ USE BLOCK
          IFTHEN  ((CCTBIT,SORT4),EQ,1) 
            GENVFD  (60,SMFILW1)   - FILES -
          ELSEZ 
            GENVFD  (1,1),(59,0)   FILE DATA FIRST WORD 
          ENDIFZ
 GSM6     LABEL 
          IFTHEN  ((CCTBIT,SORT4),EQ,1) 
            GENVFD  (60,0)  TERMINATOR
          ENDIFZ
          CALLZ  GSMREGB     SET UP REGB FOR -USING- FILE FNAT
          IFTHEN  ((FNFOOF,SMREGB),EQ,SEQUENTI) 
          MOVEZ  K0,T4       SET FLAG 0 IF FILE ORG IS SEQUENTIAL 
          ENDIFZ
          MOVEZ  (FNDNATOF,SMREGB),(GPTROF,SMREGB)  SET UP REGB FOR 
*                             -USING- FILE DNAT 
          IFTHEN  ((CCTBIT,SORT4),EQ,1) 
            GENVFD  (6,40B),(36,0),(18,((FWA$OF,SMREGB)))  MERGE INPUT F
          ELSEZ 
            GENVFD  (42,MERGE),(18,((FWA$OF,SMREGB))) MERGE WORD AND
          ENDIFZ
*                                                  AND FIT LOCATION 
          MOVEZ  (AUXNXTOF,T3),T3  POINTER TO NEXT AUXTABLE ENTRY 
          NOTZ   (T3,EQ,K0),GSM6  JUMP IF ANOTHER -USING- FILE
          IFTHEN  ((CCTBIT,SORT4),EQ,1) 
            GENVFD  (60,SMFILW2)  - END FILES - 
            GENVFD  (60,0)
          ENDIFZ
          GEN    USE$,CODEBLK  -REGULAR- USE BLOCK
          MOVEZ  (AUXREFOF,SMREGE),T3  AUXTABLE POINTER TO T3 AGAIN 
* 
 GSM6A    LABEL 
*     GENERATE A TABLE OF FIT LOCATIONS AND POINTERS (SORT ONLY) TO, AND
*     A PSEUDO -INPUT PROCEDURE- (SORT ONLY), FOR EACH -USING- FILE.
          GEN    LABEL$,LOCAL1  DEFINE LABEL FOR POINTER TABLE
          GEN    STARTSEQ,,(SEQUENCE,0) 
          IFTHEN  ((GSCODEOF,SMREGA),EQ,GSORT)  IF -SORT- 
          MOVEZ  (LOCLAB,SMSAV1),SMSAV1  ALLOCATE 1ST OF 3 LABELS FOR 
*                             1ST PSEUDO PROCEDURE
          MOVEZ  SMSAV1,T4
          ENDIFZ
          BRANCH  GSM6C 
* 
 GSM6B    LABEL 
          IFTHEN  ((GSCODEOF,SMREGA),EQ,GSORT)  IF -SORT- 
          MOVEZ  (LOCLAB,T4),T4  ALLOCATE 1ST OF 3 LABELS FOR SUBSEQUENT
*                             PSEUDO PROCEDURES 
          ENDIFZ
* 
 GSM6C    LABEL 
          CALLZ  GSMREGB     SET UP REGB FOR -USING- FILE FNAT
          MOVEZ  (FNDNATOF,SMREGB),(GPTROF,SMREGB)  SET UP REGB FOR 
*                             -USING- FILE DNAT 
          IFTHEN  ((GSCODEOF,SMREGA),EQ,GMERGE)  IF -MERGE- 
          GENVFD  (30,((FWA$OF,SMREGB))),(30,0)  POINTER WORD - 
*                             VFD  30/FITLOC,30/0 
          ELSEZ              IF -SORT-
          GENVFD  (30,((FWA$OF,SMREGB))),(30,LOCAL4)  POINTER WORD -
*                             VFD  30/FITLOC,30/PSEUDO INP PROC LOC 
          MOVEZ  (LOCLAB,T4),T4  ALLOCATE 2 MORE LABELS FOR PSEUDO PROC 
          MOVEZ  (LOCLAB,T4),T4 
          ENDIFZ
          MOVEZ  (AUXNXTOF,T3),T3  POINTER TO NEXT AUXTABLE ENTRY 
          NOTZ   (T3,EQ,K0),GSM6B  JUMP IF ANOTHER -USING- FILE 
          GENVFD  (60,0)     ZERO WORD TO TERMINATE TABLE 
          IFTHEN  ((GSCODEOF,SMREGA),EQ,GSORT)  IF -SORT- 
*     GENERATE A PSEUDO INPUT PROCEDURE FOR EACH -USING- FILE 
*         LBL1  BSS  1
*               OPEN INPUT FILEA. 
*         LBL2  READ FILEA AT END GO TO LBL3. 
*               RELEASE RECORD. 
*               GO TO LBL2. 
*         LBL3  CLOSE FILEA.
*               EQ   LBL1 
          MOVEZ  (AUXREFOF,SMREGE),T3  AUXTABLE POINTER TO T3 
* 
 GSM6D    LABEL 
          GEN    LABEL$,LOCAL1  LBL1
          GEN    STARTSEQ,,(SEQUENCE,0) 
          GENVFD  (60,0)        BSS  1
          CALLZ  GSMREGB        SET UP REGB FOR -USING- FILE FNAT 
          CALLZ  GSOPENI        OPEN INPUT FILEA
          ADDZ   SMSAV1,1,T4
          ADDZ   T4,1,T5
          GEN    LABEL$,LOCAL4  LBL2
          MOVEZ  (VREGOF,IORTNRG),IORTNRG  REQUIRED BY -GSREADN-
          CALLZ  GSREADN        READ FILEA
          GEN    EQ$,IORTNRG,,LOCAL5  RETURN FROM READ - JUMP IF NOT
*                                      -AT END- 
          CALLZ  GSCLOSE        CLOSE FILEA 
          GEN    EQ$,,,LOCAL1   EQ  LBL1
          GEN    LABEL$,LOCAL5
          GEN    RJ$,XUFREL 
          GEN    PLUS 
          GEN    EQ$,,,LOCAL4   EQ  LBL2
          ADDZ   SMSAV1,3,SMSAV1  LBL1 OF NEXT PSEUDO PROC, IF ONE
          MOVEZ  (AUXNXTOF,T3),T3  POINTER TO NEXT AUXTABLE ENTRY 
          NOTZ   (T3,EQ,K0),GSM6D  JUMP IF ANOTHER -USING- FILE 
          ENDIFZ
          MOVEZ  K0,SMSAV1   INDICATE INPUT SIDE DONE 
* 
 GSM7     LABEL 
* 
*  COMPLETE -GIVING- PROCESSING 
          IFZ    ((GCODEOF,SMREGF),NE,GFILEREF),GSM8  JUMP IF NOT 
*                             -GIVING- (-OUTPUT PROCEDURE-) 
*     GENERATE A POINTER WORD TO A PSEUDO OUTPUT PROCEDURE FOR THE
*     -GIVING- FILE 
          GEN    LABEL$,LOCAL2  DEFINE LOCAL LABEL FOR POINTER WORD 
          MOVEZ  0,P1        MAKE A REGTABLE ENTRY FOR FILE DNAT
          MOVEZ  REGU1,P2 
          MOVEZ  GDATAREF,(GCODEOF,REGU1) 
          MOVEZ  (FNDNATOF,SMREGF),(GPTROF,REGU1) 
          MOVEZ  (LOCLAB,SMSAV2),SMSAV2  ALLOCATE LABEL FOR PSEUDO PROC 
          GEN    STARTSEQ,,(SEQUENCE,0) 
          GENVFD  (30,((FWA$OF,REGU1))),(30,LOCAL2)  POINTER WORD - 
*                             VFD  30/FIT LOC,30/PSEUDO OUTP PROC LOC 
*     GENERATE A PSEUDO OUTPUT PROCEDURE FOR THE -GIVING- FILE
*         LBL1  BSS  1
*               OPEN OUTPUT FILEB.
*         LBL2  RETURN RECORD AT END GO TO LBL3.
*               WRITE RECORD INVALID KEY ABORT. 
*               GO TO LBL2. 
*         LBL3  CLOSE FILEB.
*               EQ   LBL1 
          GEN    LABEL$,LOCAL2  LBL1
          GEN    STARTSEQ,,(SEQUENCE,0) 
          GENVFD  (60,0)        BSS  1
          MOVEZ  SMREGF,SMREGB  SET UP REGB FOR -GIVING- FILE FNAT
          CALLZ  GSOPENO        OPEN OUTPUT FILEB 
          MOVEZ  (LOCLAB,T4),T4 
          GEN    LABEL$,LOCAL4  LBL2
          CALLZ  CGRETUR        RETURN
          MOVEZ  (LOCLAB,T5),T5 
          GEN    NE$,,IORTNRG,LOCAL5  JUMP IF NOT AT END
          MOVEZ  (VREGOF,IORTNRG),IORTNRG  REQUIRED BY -GSWRITE-
          CALLZ  GSWRITE        WRITE RECORD (NOTE THAT -C.RTRN- WILL 
*                                HAVE SET X3 TO RECORD SIZE)
          GEN    EQ$,,IORTNRG,LOCAL4  EQ LBL2 (IF NOT INVALID KEY)
          GEN    RJ$,XCSVRTN  REQUIRED FOR FOLLOWING -RJ C.EX-
          GEN    RJ$,XCEX    ABORT (AS PER CRM ABORT) 
          GEN    LABEL$,LOCAL5
          CALLZ  GSCLOSE
          GEN    EQ$,,,LOCAL2 
          MOVEZ  K0,SMSAV2   INDICATE OUTPUT SIDE DONE
          NOTZ   (SMSAV1,EQ,K0),GSM8  JUMP IF INPUT SIDE NOT YET DONE 
          CALLZ  GSMRTA      GENERATE LABEL FOR SORT/MERGE RETURN ADDRSS
* 
 GSM8     LABEL 
          IFTHEN  ((CCTBIT,SORT4),EQ,1) 
            RETURN
          ENDIFZ
          GEN    USE$,SMBLOCK 
          GENVFD (60,0)      TERMINATE PARAMETERS 
          GEN    USE$,CODEBLK 
          RETURN             EXIT PROCESSOR 
          EJECT 
**        CGPERIP - PROCESSOR FOR THE -PERFORM (SORT) INPUT PROCEDURE-
*                   GTEXT 
* 
*         CODE GENERATED -
* 
*  NO DEGUGGING FACILITY
* LBL1    BSS    1
*         PERFORM PROCEDURE 
*         EQ     LBL1 
*      +  (SORT) RETURN      IF OUTPUT SIDE ALREADY DONE
*  IF DEBUGGING FACILITY ACTIVE 
* LBLX    MOVE
*         MOVE
*         MOVE
*                THE ABOVE 3 INSTRUCTIONS, PERTINENT TO DEBUGGING 
*                FACILITY, ARE GENERATED ELSEWHERE
*         PERFORM PROCEDURE 
* LBL1    BSS    1
*         EQ     LBLX 
*      +  (SORT) RETURN      IF OUTPUT SIDE ALREADY DONE
* 
* 
 CGPERIP  EGO    1
          NOTE   CGPERIP
          IFTHEN  ((REGPTROF,SMREGE),EQ,0)  NO DEBUGGING FACILITY 
          GEN    LABEL$,LOCAL1  LBL1 (LABEL NUMBER SAVED DURING -CGSORT-
*                             PROCESSING) 
          GEN    STARTSEQ,,(SEQUENCE,0) 
          GENVFD  (60,0)        BSS  1
          CALLZ  CGPERFO        PERFORM INPUT PROCEDURE 
          GEN    EQ$,,,LOCAL1   EQ   LBL1 
          ELSEZ              DEBUGGING FACILITY ACTIVE
          CALLZ  CGPERFO     PERFORM INPUT PROCEDURE
          GEN    LABEL$,LOCAL1  LBL1 (LABEL NUMBER SAVED DURING 
*                                     -CGSORT- PROCESSING)
          GEN    STARTSEQ,,(SEQUENCE,0) 
          GENVFD  (60,0)     BSS  1 
          GEN    EQ$,,,((FWA$OF,SMREGE))  EQ  LBLX
          ENDIFZ
          MOVEZ  K0,SMSAV1   INDICATE INPUT SIDE DONE 
          NOTZ   (SMSAV2,EQ,K0),CGPIP1  JUMP IF OUTPUT SIDE NOT YET DONE
          CALLZ  GSMRTA      GENERATE LABEL FOR SORT RETURN 
* 
 CGPIP1   LABEL 
          RETURN
          EJECT 
**        CGPEROP - PROCESSOR FOR THE -PERFORM OUTPUT PROCEDURE- GTEXT
* 
*         CODE GENERATED -
* 
*  NO DEGUGGING FACILITY
* LBL1    BSS    1
*         PERFORM PROCEDURE 
*         EQ     LBL1 
*      +  RETURN             IF INPUT SIDE ALREADY DONE 
*  IF DEBUGGING FACILITY ACTIVE 
* LBLX    MOVE
*         MOVE
*         MOVE
*                THE ABOVE 3 INSTRUCTIONS, PERTINENT TO DEBUGGING 
*                FACILITY, ARE GENERATED ELSEWHERE
*         PERFORM PROCEDURE 
* LBL1    BSS    1
*         EQ     LBLX 
*      +  RETURN             IF INPUT SIDE ALREADY DONE 
* 
* 
 CGPEROP  EGO    1
          NOTE   CGPEROP
          IFTHEN  ((REGPTROF,SMREGE),EQ,0)  NO DEBUGGING FACILITY 
          GEN    LABEL$,LOCAL2  LBL1 (LABEL NUMBER SAVED DURING 
*                             -CGSORT-/-CGMERGE- PROCESSING)
          GEN    STARTSEQ,,(SEQUENCE,0) 
          GENVFD  (60,0)        BSS  1
          CALLZ  CGPERFO        PERFORM OUTPUT PROCEDURE
          GEN    EQ$,,,LOCAL2   EQ  LBL1
          ELSEZ              DEBUGGING FACILITY ACTIVE
          CALLZ  CGPERFO     PERFORM OUTPUT PROCEDURE 
          GEN    LABEL$,LOCAL2  LBL1 (LABEL NUMBER SAVED DURING 
*                                     -CGSORT-/-CGMERGE- PROCESSING)
          GEN    STARTSEQ,,(SEQUENCE,0) 
          GENVFD  (60,0)     BSS  1 
          GEN    EQ$,,,((FWA$OF,SMREGE))  EQ  LBLX
          ENDIFZ
          MOVEZ  K0,SMSAV2   INDICATE OUTPUT SIDE DONE
          NOTZ   (SMSAV1,EQ,K0),CGPOP1  JUMP IF INPUT SIDE NOT YET DONE 
          CALLZ  GSMRTA      GENERATE LABEL FOR SORT/MERGE RETURN 
* 
 CGPOP1   LABEL 
          RETURN
          EJECT 
**        CGRELEA - PROCESSOR FOR THE -RELEASE- GTEXT 
* 
*         CODE GENERATED -
* 
*         SA0    FIT
*         SX3    RECORD LENGTH (IN CHARACTERS)
*      +  RJ     C.RLSE 
*      -  PS     SOURCE LINE NUMBER 
* 
* 
 CGRELEA  EGO    1
          NOTE   CGRELEA
          CALLZ  SA0FIT      SA0  FIT (SD FILE) 
          MOVEZ  SMREGC,SMREGD     FOR FNVLREC
          MOVEZ  0,P1             FLAG AS A RELEASE 
          MOVEZ  (FNVLREC,SMREGB),T1
          IFTHEN  (T1,EQ,0)  IF NO VARIABLE LENGTH RECS 
            GEN    SXBPK,(VREGOF,SMVREGB),,(BYTLENOF,SMREGC)  SX3 RL
          ELSEZ 
            MOVEZ  GDATAREF,P3
            IFZ    (P1,EQ,0),REL1  JP IF REC CONT DEP ON
            PUSH   P2,P1           SAVE FIXED LEN AND OCC LEN 
            CALLZ  MVTOXRG         GET KEY FIELD
            MOVEZ  T1,SMVREGB      RESULTING V REG
            POP    P2,P1
            CALLZ  SETXREG         SET X TO OCC LEN 
            GEN    IMUL,(VREGOF,SMVREGC),SMVREGB,VREG18 OC LEN * NBR OCC
            GEN    SXXPK,(VREGOF,SMVREGB),SMVREGC,P2   BUMP BY FXD LEN
            BRANCH  REL2
 REL1     LABEL 
            CALLZ  MVTOXRG         GET REC LEN
            MOVEZ  T1,SMVREGB 
          ENDIFZ
 REL2     LABEL 
          GENOBJ  N=C.RLSE,I=(SMVREGA,SMVREGB)  RJ  C.RLSE
          RETURN
          EJECT 
**        CGRETUR - PROCESSOR FOR THE -RETURN- GTEXT
* 
*         CODE GENERATED -
* 
*         SA0    FIT
*      +  RJ     C.RTRN 
*      -  PS     SOURCE LINE NUMBER 
* 
* 
 CGRETUR  EGO    1
          NOTE   CGRETUR
          CALLZ  SA0FIT      SA0  FIT (SD FILE) 
          GENOBJ  N=C.RTRN,I=(SMVREGA),O=((VREGOF,IORTNRG),(VREGOF,P3)) 
          PUSH   P3 
          MOVEZ  SMREGC,SMREGD     FOR STORERL
          MOVEZ  1,P1               FLAG AS A RETURN
          CALLZ  STORERL
          POP    P3 
          RETURN
          EJECT 
**        CGRETAT - PROCESSOR FOR THE -RETURN AT END- GTEXT 
* 
*         CODE GENERATED -
* 
*         NE    B0,B3,(-AT END- CODE) IF -RETURN INTO-
*          OR 
*         EQ    B0,B3,(AROUND -AT END- CODE) IF -RETURN-
*      +                     FORCE UPPER
* 
* 
 CGRETAT  EGO    1
          NOTE   CGRETAT
          IFTHEN  ((GSCODEOF,SMREGB),EQ,GFALSE) 
          GEN    EQ$,,IORTNRG,((FWA$OF,SMREGB))  EQ B0,B3,NORMAL RETURN 
          ELSEZ 
          GEN    NE$,,IORTNRG,((FWA$OF,SMREGB))  NE B0,B3,AT END CODE 
          ENDIFZ
          GEN    PLUS        FORCE UPPER
          RETURN
          EJECT 
*         SOME CONVENIENCE ROUTINES INTERNAL TO THIS MODULE 
* 
* 
*  ROUTINE TO ENABLE USE OF -FNDNATOF- AND -FNOOF- FUNCTIONS - SET UP 
*  REGB ACCORDINGLY 
 GSMREGB  EGO    2
          MOVEZ  0,P1 
          MOVEZ  REGB,P2
          CALLZ  REGMOVE     CLEAR REGB 
          MOVEZ  GDATAREF,(GCODEOF,SMREGB)  -GDATAREF- ENABLES USE OF 
*                             -GPTROF-
          MOVEZ  (AUXFNPOF,T3),(GPTROF,SMREGB)
          RETURN
* 
* 
*  ROUTINE TO GENERATE LOCAL LABEL IDENTIFYING RETURN ADDRESS FROM
*  SORT/MERGE 
*  ALSO GENERATE CODE TO CLOSE ALL USING FILES, IF MERGE
 GSMRTA   EGO    2
          GEN    LABEL$,LOCAL3
          IFTHEN  ((CCTBIT,SORT4),EQ,0) 
  RETURN     SORT5 CLOSES THE FILES ITSELF - NONE NEEDED
          ENDIFZ
          IFTHEN  (SMSAV4,NE,0)  IF MERGE 
          MOVEZ  SMSAV4,T3   AUXTABLE CHAIN POINTING TO USING FILE FNATS
 GSMRTA1  LABEL 
          CALLZ  GSMREGB     SET UP REGB FOR USING FILE FNAT
          CALLZ  GSCLOSE     GENERATE CODE TO CLOSE FILE
          MOVEZ  (AUXNXTOF,T3),T3 
          NOTZ   (T3,EQ,0),GSMRTA1  JUMP IF ANOTHER USING FILE
          ENDIFZ
          RETURN
* 
          END 
