         TITLE 'IEFSD088 - VMS SYSOUT TRANSITION ROUTINE'               00020000
*                                                                       00023020
*          RELEASE 22 DELETIONS/CHANGES                                 00026020
*          RELEASE 21 DELETIONS/CHANGES                                 00029020
*          RELEASE 20 DELETIONS/CHANGES                                 00032020
* 022800-043800,051000-058400                                    MAPMAC 00035020
*0772                                                            A35780 00037020
 TITLE 'IEFSD088' - THE TRANSITION ROUTINE                              00040000
*********************************************************************** 00060000
*                                                                     * 00080000
*STATUS CHANGE LEVEL 002                                                00100020
*                                                                     * 00120000
*FUNCTION OF THIS MODULE:                                             * 00140000
*                                                                     * 00160000
*OPERATION OF THIS MODULE:                                            * 00180000
*                                                                       00200000
*        WHEN A GROUP OF MESSAGES OR A DATASET IS TO BE WRITTEN BY      00220000
*        MEANS OF THE STANDARD OUTPUT ROUTINE OR A USERS SPECIAL        00240000
*        PROGRAM IT IS NECESSARY TO BUFFER THE MESSAGES FROM DATASETS   00260000
*        AND THE DATASETS FROM MESSAGES AND OTHER DATASETS. THIS        00280000
*        IS DONE BY PUTTING OUT EXTRA RECORDS BEFORE OR AFTER A         00300000
*        DATASET OR GROUP OF MESSAGES WHENEVER NECESSARY. IT IS         00320000
*        NECESSARY TO KEEP OVERPRINTING FROM OCCURING WHEN AN           00340000
*        ASA DATASET IS FOLLOWED BY A MACHINE DATASET. IT IS ALSO       00360000
*        NECESSARY, AT TIMES, TO PUT OUT EXTRA RECORDS AT THE END       00380000
*        OF A DATASET OR GROUP OF MESSAGES TO ALLOW A FINAL SPACE       00400000
*        CHARACTER TO BE EFFECTIVE. IT IS ALSO NECESSARY TO PUT         00420000
*        OUT EXTRA RECORDS AT THE END OF A DATASET OR GROUP OF          00440000
*        MESSAGES SO THAT IF THERE IS A PAUSE BEFORE A DATASET ALL      00460000
*        OF THE RECORDS WILL HAVE BEEN PRINTED OR PUNCHED BEFORE        00480000
*        THE PAUSE TAKES EFFECT.                                        00500000
*                                                                       00520000
*        THE FOLLOWING DIAGRAMS SHOW WHAT BUFFERING IS DONE AT THE      00540000
*        START AND END OF OUTPUTTING A GROUP OF MESSAGES OR A           00560000
*        DATASET. THE COMMENTS IN THE OUTPUT ROUTINE EXPLAIN THE        00580000
*        OUTPUTTING OF RECORDS OTHER THAN THOSE USED FOR BUFFERING      00600000
*                                                                       00620000
*                                                                       00640000
*              BUFFERING OF PRINTER TYPE RECORDS: MACHINE CONTROL CHAR. 00660000
*                                                                       00680000
*                       //-------/-------/-------//                     00700000
*   MACHINE C.C. IN     // P1 S1 / P2 S2 / P3 S3 //                     00720000
*                       //-------/-------/-------//                     00740000
*                                                                       00760000
*                                                                       00780000
*                   //-------/-------/-------/-------//                 00800000
*   ASA C.C. OUT    // S0 P1 / S1 P2 / S2 P3 / S3 P0 //                 00820000
*                   //-------/-------/-------/-------//                 00840000
*                                                                       00860000
*                       //-------/-------/-------/-------//             00880000
*   MACHINE C.C. OUT    // P1 S1 / P2 S2 / P3 S3 / P0 SX //             00900000
*                       //-------/-------/-------/-------//             00920000
*                                                                       00940000
*                       //-------/-------/-------/-------//             00960000
*   NO C.C. OUT         //  P1   /  P2   /  P3   /  P0   //             00980000
*                       //-------/-------/-------/-------//             01000000
*                                                                       01020000
*        P0 = A RECORD MADE UP OF BLANKS                                01040000
*        S0 = SPACE 1                                                   01060000
*        SX = SPACE SUPRESS                                             01080000
*        SN = SKIP TO CHANNEL 1                                         01100000
*                                                                       01120000
*              BUFFERING OF PRINTER TYPE RECORDS: ASA CONTROL CHAR.     01140000
*                       //-------/-------/-------//                     01160000
*   ASA C.C. IN         // S1 P1 / S2 P2 / S3 P3 //                     01180000
*                       //-------/-------/-------//                     01200000
*                                                                       01220000
*                                                                       01240000
*                       //-------/-------/-------/-------//             01260000
*   ASA C.C. OUT        // S1 P1 / S2 P2 / S3 P3 / SX P0 //             01280000
*                       //-------/-------/-------/-------//             01300000
*                                                                       01320000
*                   //-------/-------/-------/-------/-------//         01340000
*   MACHINE C.C. OUT// P0 S1 / P1 S2 / P2 S3 / P3 S0 / P0 SX //         01360000
*                   //-------/-------/-------/-------/-------//         01380000
*                                                                       01400000
*                       //-------/-------/-------/-------//             01420000
*   NO C.C. OUT         //  P1   /  P2   /  P3   /  P0   //             01440000
*                       //-------/-------/-------/-------//             01460000
*                                                                       01480000
*                                                                       01500000
*              BUFFERING OF PRINTER TYPE RECORDS: NO CONTROL CHAR.      01520000
*                                                                       01540000
*                       //-------/-------/-------//                     01560000
*   NO  C.C. IN         //  P1   /  P2   /  P3   //                     01580000
*                       //-------/-------/-------//                     01600000
*                                                                       01620000
*                                                                       01640000
*                       //-------/-------/-------/-------//             01660000
*   ASA C.C. OUT        // SN P1 / S0 P2 / S0 P3 / SX P0 //             01680000
*                       //-------/-------/-------/-------//             01700000
*                                                                       01720000
*                   //-------/-------/-------/-------/-------//         01740000
*   MACHINE C.C. OUT// P0 SN / P1 S0 / P2 S0 / P3 S0 / P0 SX //         01760000
*                   //-------/-------/-------/-------/-------//         01780000
*                                                                       01800000
*                       //-------/-------/-------/-------//             01820000
*   NO  C.C. OUT        //  P1   /  P2   /  P3   /  P0   //             01840000
*                       //-------/-------/-------/-------//             01860000
*                                                                       01880000
*              BUFFERING OF PUNCH TYPE RECORDS IS SIMPLER THAN          01900000
*              ABOVE. ALL THAT IS NECESSARY IS TO WRITE OUT AN          01920000
*              EXTRA BLANK RECORD WITH THE CONTROL CHARACTER            01940000
*              INDICATING STACKER 1.                                    01960000
*                                                                     * 01980000
*    ENTRY POINT 1 - IEFSD088 WHICH IS BRANCHED TO FROM IEFSD086,     * 02000000
*        IEFSD087, AND IEFSD089.                                      * 02020000
*                                                                     * 02040000
*    EXIT POINT 1 - BRANCH TO IEFSD089 TO DO THE OUTPUT ROUTINE.      * 02060000
*    OUTPUT AT EXIT POINT 1:                                          * 02080000
*        REGISTER 7 POINTS TO THE WORK LIST USED BY DSB AND SMB       * 02100000
*        ROUTINE.                                                     * 02120000
*        REGISTER 8 POINTS TO THE WORK AREA FOR STANDARD OUTPUT       * 02140000
*        ROUTINE.                                                     * 02160000
*                                                                     * 02180000
*EXTERNAL ROUTINES:                                                   * 02200000
*                                                                     * 02220000
*    IEFSD089  THE OUTPUT ROUTINE                                     * 02240000
*                                                                     * 02260000
*                                                                     * 04400000
*                                                                     * 04420000
*ATTRIBUTES - REENTRANT                                               * 04440000
*                                                                     * 04460000
*********************************************************************** 04480000
*                                                                       04500000
*                        NEEDED DSECTS                                  04520000
*                                                                       04540000
R0       EQU   0                                                        04560000
R1       EQU   1                                                        04580000
R2       EQU   2                                                        04600000
R3       EQU   3                                                        04620000
R4       EQU   4                                                        04640000
R5       EQU   5                                                        04660000
R6       EQU   6                                                        04680000
R7       EQU   7                                                        04700000
R8       EQU   8                                                        04720000
R9       EQU   9                                                        04740000
R10      EQU   10                                                       04760000
R11      EQU   11                                                       04780000
R12      EQU   12                                                       04800000
R13      EQU   13                                                       04820000
R14      EQU   14                                                       04840000
R15      EQU   15                                                       04860000
*DEFINE DCB LABELS FOR DCB OF MAXIMUM SIZE                              04880000
         DCBD  DSORG=PS                                                 04900000
*DEFINE DCB AND OPEN AND CLOSE. (EODAD,SYNAD,OPEN,AND CLOSE TO ADD)     04920000
TODCB    DSECT                                                          04940000
         DCB   DSORG=PS,                                               *04960000
               MACRF=GL,                                               *04980000
               BUFNO=2                                                  05000000
SPOPN    OPEN  (0,INPUT),MF=L                                           05020000
SPCLO    CLOSE (0),MF=L                                                 05040000
SPEXL    DC    F'0'                     DCB EXIT LIST                   05060000
BODCB    EQU   *                                                        05080000
         IEFSDWKT                                                MAPMAC 05280020
         IEFSDSDR                                                MAPMAC 05480020
*EQUATES                                                                05860000
ASASW    EQU   4                        ASA CONTROL CHARACTER           05880000
MACSW    EQU   2                        MACHINE CONTROL CHARACTER       05900000
VARSW    EQU   64                       VARIABLE SWITCH WHEN NOT FIXED  05920000
FIXSW    EQU   128                      FIXED SWITCH WHEN NOT VARIABLE  05940000
UNKSW    EQU   VARSW+FIXSW              UNKNOWN SWITCH                  05960000
*                                                                       05980000
*                   THIS ROUTINE BUFFERS DATASETS AND GROUPS            06000000
*                   OF MESSAGES SO THAT CHANGE OF INPUT CONTROL         06020000
*                   CHARACTERS FROM ASA TO MACHINE AND VICA             06040000
*                   VERSA DO NOT CAUSE TROUBLE AND SO THAT              06060000
*                   AT THE END OF PROCESSING DATASETS OR                06080000
*                   MESSAGES FOR UNIT RECORD DEVICES ALL                06100000
*                   RECORDS HAVE BEEN PRINTED OR PUNCHED.               06120000
*                                                                       06140000
*INITIALIZE                                                             06160000
IEFSD088 CSECT                                                          06180000
         BALR  R10,0                   SET BASE REGISTER                06200000
         USING *,R10                                                    06220000
         USING WORKLST,R7               SET PARAMETER BASE              06240000
         USING WKSOR,R8                 SET WORK AREA BASE              06260000
         USING IHADCB,R5                SET OUTPUT DCB BASE             06280000
*IS THIS PRINTER TYPE UNIT                                              06300000
         TM    VARBA,PUNSH              TEST FOR PUNCH IF SO            06320000
         BO    PUNRO                    BRANCH TO PUNCH ROUTINE         06340000
*IS THERE AN OUTPUT ASA CONTROL CHARACTER                               06360000
         L     R5,DCBOT                 GET OUTPUT DCB                  06380000
         TM    DCBRECFM,ASASW           TEST FOR ASA SWITCH IF NOT      06400000
         BZ    TOMCC                    BRANCH TO SEE IF MACHINE        06420000
*IS OLD SWITCH ON                                                       06440000
         TM    SORS1,OLDSW              TEST FOR END TRANSITION IF SO   06460000
         BO    TMICC                    BRANCH TO DO END TRANSITION     06480000
*IS THERE AN INPUT MACHINE CONTROL CHARACTER                            06500000
         TM    SORS1,MACHS              TEST FOR MACHINE SWITCH IF NOT  06520000
         BCR   8,R14                    RETURN                          06540000
*                                                                       06560000
*                   WHEN PRINTER TYPE WRITER, OUTPUT ASA,               06580000
*                   INPUT MACHINE, BUFFERING AT THE START               06600000
*                   CONSISTS OF MAKING ASA SPACE 1 THE                  06620000
*                   TRANSLATION OF THE CONTROL CHARACTER GOT            06640000
*                   FROM THE 'PREVIOUS' RECORD. IT WILL BE USED         06660000
*                   FOR THE FIRST RECORD WRITTEN OUT.                   06680000
*                                                                       06700000
*MAKE ASA SPACE 1 THE CONTROL CHARACTER FOR THE NEXT RECORD             06720000
         MVI   SAVEC,C' '                                               06740000
         BR    R14                      RETURN                          06760000
*IS THERE AN INPUT MACHINE CONTROL CHARACTER                            06780000
TMICC    TM    SORS1,MACHS              TEST FOR MACHINE SWITCH IF NOT  06800000
         BZ    ASPCC                    BRANCH TO MAKE ASA SUPRESS C.C. 06820000
*                                                                       06840000
*                   WHEN PRINTER TYPE WRITER, OUTPUT MACHINE,           06860000
*                   INPUT MACHINE, BUFFERING AT THE END                 06880000
*                   CONSISTS OF PUTTING OUT A BLANK LINE                06900000
*                   WITH SUPPRESS CONTROL CHARACTER. THIS               06920000
*                   IS DONE TO MAKE THE LAST RECORD BE                  06940000
*                   PUT OUT BEFORE MORE WORK IS FOUND AND               06960000
*                   A PAUSE MAY OCCUR.                                  06980000
*                                                                       07000000
*                                                                       07020000
*                   WHEN PRINTER TYPE WRITER, OUTPUT ASA,               07040000
*                   INPUT MACHINE, BUFFERING AT THE END                 07060000
*                   CONSISTS OF PUTTING OUT A BLANK LINE.               07080000
*                   THE SPACING CHARACTER WILL COME FROM                07100000
*                   THE LAST RECORD GOT. THE SUPRESS CONTROL            07120000
*                   CHARACTER TAKES EFFECT ON THE FOLLOWING             07140000
*                   RECORD IF MORE ARE NEEDED BEFORE PAUSE.             07160000
*                                                                       07180000
*PUT IN MACHINE SUPRESS CHARACTER                                       07200000
MSPCC    MVI   CONCH,X'01'                                              07220000
*                                                                       07240000
*                   WHEN PRINTER TYPE WRITER NO CONTROL                 07260000
*                   CHARACTER IN OUTPUT, INPUT ASA OR                   07280000
*                   MACHINE, BUFFERING AT THE END CONSISTS              07300000
*                   OF PUTTING OUT A BLANK LINE. THIS IS                07320000
*                   DONE TO MAKE THE LAST RECORD BE PUT                 07340000
*                   OUT BEFORE MORE WORK IS FOUND AND A                 07360000
*                   PAUSE MAY OCCUR.                                    07380000
*                                                                       07400000
*SET UP CONSTANTS FOR BLANK LINE                                        07420000
SCFBL    LA    R11,1                    MAKE LENGTH ONE                 07440000
         LA    R12,BLANK                BEGINNING OF RECORD A BLANK     07460000
         STM   R11,R12,INLSF            SAVE LOCATION AND BEGINNING     07480000
*DO OUTPUT ROUTINE                                                      07500000
DOUTR    L     R15,SD89EXIT             GET ADDRESS FOR EXIT            07520000
         BR    R15                      WILL NOT COME BACK TO HERE      07540000
*IS THERE AN OUTPUT MACHINE CONTROL CHARACTER                           07560000
TOMCC    TM    DCBRECFM,MACSW           TEST FOR MACHINE SWITCH IF NOT  07580000
         BZ    NCCOT                    BRANCH TO NO CONTROL CHAR.      07600000
*IS OLD SWITCH ON                                                       07620000
         TM    SORS1,OLDSW              TEST FOR END TRANSITION IF SO   07640000
         BO    SUFBL                    BRANCH TO DO END TRANSITION     07660000
*IS THERE AN INPUT MACHINE CONTROL CHARACTER                            07680000
         TM    SORS1,MACHS              TEST FOR MACHINE SWITCH IF SO   07700000
         BCR   1,R14                    RETURN                          07720000
*                                                                       07740000
*                   WHEN PRINTER TYPE WRITER, OUTPUT MACHINE,           07760000
*                   INPUT ASA, BUFFERING AT THE START CONSISTS          07780000
*                   OF SETTING UP AN INNOCUOUS LOCATION                 07800000
*                   NEEDED BY THE OUTPUT ROUTINE TO PUT A               07820000
*                   CHARACTER IN, AND PUTTING OUT A BLANK               07840000
*                   LINE WHICH WILL GET THE CONTROL FROM THE            07860000
*                   FIRST ASA RECORD.                                   07880000
*                                                                       07900000
*MAKE LOCATION TO PUT FIRST CONTROL CHARACTER IN                        07920000
         LA    R4,LOCAT                 GET USELESS LOCATION            07940000
         ST    R4,LOCAT                 TO PUT FIRST CONTROL CHAR. IN   07960000
*MAKE ASA SPACE 1 THE CONTROL CHARACTER                                 07980000
MASPO    MVI   CONCH,C' '                                               08000000
         B     SCFBL                    BRANCH TO SET UP FOR BLANK LINE 08020000
*IS THERE AN INPUT MACHINE CONTROL CHARACTER                            08040000
SUFBL    TM    SORS1,MACHS              TEST FOR MACHINE SWITCH IF SO   08060000
         BO    MSPCC                    BRANCH TO USE MACHINE SUPRESS   08080000
*                   WHEN PRINTER TYPE WRITER, OUTPUT MACHINE,           08100000
*                   INPUT ASA, BUFFERING AT THE END CONSISTS            08120000
*                   OF PUTTING A SPACE 1 CONTROL CHARACTER         285  08140000
*                   IN THE PREVIOUS LINE AND PUTTING OUT           285  08160000
*                   A BLANK LINE WITH A SUPRESS SPACE.             285  08180000
*                   CONTROL CHARACTER. THIS IS DONE TO MAKE             08200000
*                   THE LAST RECORD BE PUT OUT BEFORE MORE              08220000
*                   WORK IS FOUND AND A PAUSE MAY OCCUR.                08240000
*                                                                       08260000
*MAKE MACHINE SUPRESS THE CONTROL CHARACTER FOR LAST LINE          285  08280000
         MVI   SAVEC,X'01'                                         285  08300000
         B     MASPO                    BRANCH TO USE SPACE 1           08320000
*                                                                       08340000
*                   WHEN PRINTER TYPE WRITER OUTPUT ASA,                08360000
*                   INPUT ASA, BUFFERING AT THE END CONSISTS            08380000
*                   OF PUTTING OUT A BLANK LINE WITH SUPRESS            08400000
*                   CONTROL CHARACTER. THIS IS DONE TO MAKE             08420000
*                   THE LAST RECORD BE PUT OUT BEFORE MORE              08440000
*                   WORK IS FOUND AND A PAUSE MAY OCCUR.                08460000
*                                                                       08480000
*MAKE ASA SUPRESS THE CONTROL CHARACTER                                 08500000
ASPCC    MVI   CONCH,C'+'                                               08520000
         B     SCFBL                    BRANCH TO SET UP FOR BLANK LINE 08540000
*IS OLD SWITCH ON                                                       08560000
NCCOT    TM    SORS1,OLDSW              TEST FOR OLD SWITCH IF ON       08580000
         BO    SCFBL                    BRANCH TO SET UP FOR BLANK LINE 08600000
         BR    R14                      RETURN                          08620000
*IS OLD SWITCH ON                                                       08640000
PUNRO    TM    SORS1,OLDSW              TEST FOR END TRANSITION IF NOT  08660000
         BCR   8,R14                    RETURN                          08680000
*                                                                       08700000
*                   WHEN PUNCH TYPE WRITER BUFFERING AT THE             08720000
*                   END CONSISTS OF PUTTING OUT 3 BLANK LINES           08740000
*                   WITH ASA OR MACHINE STACKER 1 CONTROL               08760000
*                   CHARACTER AS IS NECESSARY. THIS IS DONE             08780000
*                   TO MAKE THE LAST RECORD BE PUT OUT BEFORE           08800000
*                   MORE WORK IS FOUND AND A PAUSE MAY OCCUR.           08820000
*                                                                       08840000
*MAKE ASA STACKER 1 THE CONTROL CHARACTER                               08860000
         MVI   CONCH,C'V'                                               08880000
*IS THERE AN INPUT MACHINE CONTROL CHARACTER                            08900000
         TM    SORS1,MACHS              TEST FOR MACHINE SWITCH IF NOT  08920000
         BZ    SCFBL                    BRANCH TO SET UP FOR BLANK CARD 08940000
*MAKE MACHINE STACKER 1 THE CONTROL CHARACTER                           08960000
         MVI   CONCH,X'01'              PUT IN 2540 STACKER 1           08980000
         TM    VARBA,FTFTW              TEST FOR PUNCH IS 1442 IF NOT   09000000
         BZ    SCFBL                    BRANCH TO SET UP FOR BLANK CARD 09020000
         MVI   CONCH,X'81'              PUT IN 1442 STACKER 1           09040000
         B     SCFBL                    BRANCH TO SET UP FOR BLANK CRAD 09060000
*CONSTANTS                                                              09080000
         DS    0F                                                       09100000
SD89EXIT DC    V(IEFSD089)              OUTPUT ROUTINE                  09120000
BLANK    DC    C' '                     BLANK TO WRITE BLANK RECORD     09140000
         END                                                            09160000
