home *** CD-ROM | disk | FTP | other *** search
/ kermit.columbia.edu / kermit.columbia.edu.tar / kermit.columbia.edu / tapeutils / tuirao.asm < prev    next >
Assembly Source File  |  1991-04-17  |  118KB  |  1,456 lines

  1. OSC      TITLE '(PEP/CMS) - COPY OS DISK/TAPE FILE TO CMS DISK'         00000010
  2. *********************************************************************** 00000020
  3. * COPYRIGHT (C) 1981, 1989 BY J.F. CHANDLER AND P.G. FORD             * 00000030
  4. *  PERMISSION IS HEREBY GRANTED TO USE OR COPY THIS PROGRAM, EXCEPT   * 00000040
  5. *  FOR EXPLICITLY COMMERCIAL PURPOSES.                                * 00000050
  6. *********************************************************************** 00000060
  7.          PRINT NOGEN                                                    00000070
  8. SPROSC   START X'20000'      USER-PROGRAM AREA EXECUTION                00000080
  9.          SPACE 1                                                        00000090
  10. *---------------------------------------------------------------------- 00000100
  11. *        JFC/PGF - 1981 JAN                                             00000110
  12. *                                                                       00000120
  13. *        COMMAND FORMAT:                                                00000130
  14. *                                                                       00000140
  15. *            SPROSC  TAP<N>  <FILEID>  ( <OPTIONS>                      00000160
  16. *                                                                       00000171
  17. *                 "FILEID" MAY BE GIVEN AS "= =" TO REQUEST USING A     00000172
  18. *                 NAME DERIVED FROM THE DSN ON TAPE, OR AS "= = <FM>"   00000173
  19. *                 TO SELECT A SPECIFIC FILEMODE AS WELL.  WITH MULTI-   00000174
  20. *                 FILE READS, ALL FILES AFTER THE FIRST ARE NAMED       00000175
  21. *                 FROM THE TAPE DSN.                                    00000176
  22. *                                                                       00000180
  23. *            OPTIONS:    (SPECIFY FOR LABEL=NL TAPE FILES               00000190
  24. *                                                                       00000210
  25. *                    BLOCK <N>  - DEFAULT 32756                         00000220
  26. *                    LRECL <N>  - DEFAULT 80                            00000230
  27. *                    RECFM <T>  - F, FB, V, VB, VS, VBS, U, D (+ A)     00000240
  28. *                    ASCII      - TRANSLATE FROM ASCII                  00000250
  29. *                    EBCDIC     - DO NOT TRANSLATE FROM ASCII           00000260
  30. *                    NL   (<N>) - UNLABELED, DESIRED TAPE FILE          00000270
  31. *                                                                       00000280
  32. *                        (SPECIFY FOR LABEL=SL TAPE FILES ONLY)         00000290
  33. *                                                                       00000300
  34. *                    DSN   <C>  - CHECK LAST 17 BYTES AGAINST DSNAME    00000310
  35. *                                (MUST BE LAST OPTION)                  00000320
  36. *                    VOL   <C>  - CHECK AGAINST TAPE VOLUME SERIAL      00000330
  37. *                    SL   (<N>) - LABELED, DESIRED TAPE FILE            00000340
  38. *                    EOF   <N>  - NUMBER OF TAPE FILES TO COPY      1.1 00000350
  39. *                    EOT        - COPY TILL END OF TAPE             1.1 00000360
  40. *                    PREFIX <XX>- SELECT ONLY FILES BEGINNING XX    1.4 00000365
  41. *                                                                       00000370
  42. *                        (GENERAL OPTIONS)                              00000380
  43. *                                                                       00000390
  44. *                    FILE  <N>  - DESIRED TAPE FILE                     00000400
  45. *                    REBLOCK <N>- REPACK A VB OR VBS FILE           1.3 00000410
  46. *                                                                       00000411
  47. *   EXAMPLE:     SPROSC TAP1 = = (EOF 217 PREFIX IK                     00000412
  48. *     LOAD ALL FILES WITH NAMES BEGINNING "IK" FROM AMONG THE NEXT 217  00000413
  49. *     FILES ON TAPE 181.  IF THE TAPE IS ANSI, THE FILES WILL BE TRANS- 00000414
  50. *     LATED INTO EBCDIC.  IF THE TAPE IS NOT LABELED, SPROSC WILL HALT. 00000415
  51. *                                                                       00000416
  52. *                                                                       00000420
  53. *       R E G I S T E R   A S S I G N M E N T S                         00000430
  54. *                                                                       00000440
  55. *     2        BUFFER PTR OR ZERO                                       00000450
  56. *     3        PLIST ITEM DURING SCAN (SETUP OR TAPE LABEL)             00000460
  57. *     4,5,6    SCRATCH                                                  00000470
  58. *     7        FILE SKIP COUNT                                          00000480
  59. *     8        INTERNAL LINKAGE                                         00000490
  60. *     9        BLOCK COPY COUNT                                         00000500
  61. *     10       SECOND PROGRAM BASE REGISTER                             00000510
  62. *     11       BASE FOR AUX. STORAGE                                    00000520
  63. *     12       FIRST BASE REGISTER (ORIGIN OF PGM)                      00000530
  64. *                                                                       00000540
  65. * EXTERNAL REFERENCES:                                                  00000550
  66. *              (CMS MACROS)                                             00000560
  67. *        DMSFREE  DMSFRET  DMSKEY   FSCLOSE  FSERASE  FSWRITE           00000580
  68. *        LINEDIT  NUCON    REGEQU   WRTERM                              00000590
  69. *                                                                       00000640
  70. *                                                                       00000670
  71. * UPDATE HISTORY:                                                       00000680
  72. *        1981 JAN - VERSION 1.0                                         00000690
  73. *        1986 DEC - VERSION 1.1 - MULTI-FILE READS, CMS UNBLOCKING,     00000700
  74. *                                 VMS-STYLE PADDED RECORDS + CAR.CTRL.  00000710
  75. *        1989 JUN - VERSION 1.2 - MULTI-VOL FILES, TAPE LABEL TOLERANCE 00000720
  76. *        1990 OCT - VERSION 1.3 - ALLOW 1-LEVEL TAPE DSNAMES, IMPLEMENT 00000730
  77. *                                 REBLOCK, PERSISTENT FM NUMBER, CLOSE  00000740
  78. *                                 FILES, RECOGNIZE VOL2-HDR3-HDR4       00000750
  79. *        1991 JAN - VERSION 1.4 - ALLOW TAPE SEARCH BY FILE NAME        00000755
  80. *                                                                       00000760
  81. *---------------------------------------------------------------------- 00000770
  82. *------------------------------------------------------ LINKAGE, USINGS 00000780
  83.          USING *,R12,R10     PROGRAM BASES                              00000790
  84.          USING NUCON,R0      ADDRESS PAGE 0                             00000800
  85.          LR    R12,R15       LOAD PROGRAM BASE                          00000810
  86.          B     BEGIN                                                    00000820
  87. VERSION  DC    C'SPROSC 1.4-NODD'                                   1.4 00000835
  88. BEGIN    DS    0H                                                       00000840
  89.          LA    R10,2048(,R12) PREPARE SECOND BASE                       00000850
  90.          LA    R10,2048(,R10) GOT IT                                    00000860
  91.          ST    R14,SAVER14   SAVE RETURN ADDRESS                        00000870
  92.          LR    R3,R1         SAVE POINTER TO PLIST                      00000880
  93.          SPACE 1                                                        00000890
  94. *------------------------------------------------------ CLEAR FLAGS ETC 00000900
  95.          XR    R2,R2         CLEAR R2 TO INDICATE NO BUFFER YET         00000910
  96.          XR    R11,R11       CLEAR AUX STORAGE PTR                      00000920
  97.          LA    R0,LSTOR                                                 00000930
  98.          DMSFREE DWORDS=(0),ERR=ERR283  GET STORAGE AREA                00000940
  99.          ST    R1,STOPTR     SAVE PTR (ALSO ADR OF TLGBUF)              00000950
  100.          LR    R11,R1                                                   00000960
  101.          USING STOR,R11                                                 00000970
  102.          XC    ZSTUF(ZLEN),ZSTUF CLEAR FLAGS, ETC.                      00000980
  103.          MVI   OUTFM,C'A'    SET DEFAULT FILEMODE                       00000990
  104.          BAL   R8,SETUP1     INIT. A FEW THINGS                         00001000
  105.          MVC   FINDCNT,=H'5' MAX. NUMBER OF LABEL RETRIES               00001010
  106.          MVI   PRFSTR,C' '   INITIALIZE                             1.4 00001015
  107.          SPACE 1                                                        00001020
  108. *------------------------------------------------------ GET DDNAME/TAPN 00001030
  109.          BAL   R8,PRMCHK     CHECK FOR DDNAME/TAPN                      00001040
  110.          OI    FLG,XXPM1     SIGNAL DDNAME PRESENT                      00001050
  111.          CLI   0(R3),C'?'    JUST ASKING FOR VERSION?                   00001060
  112.          BNE   CPYDDN        NO, CONTINUE                               00001070
  113.          WRTERM VERSION,L'VERSION                                       00001080
  114.          B     EXIT                                                     00001090
  115. CPYDDN   DS    0H                                                       00001100
  116.          MVC   DDNAME,0(R3)  AND TO DDNAME                              00001110
  117.          CLC   =C'TAP0',DDNAME 'TAPN' DEVICE?                           00001120
  118.          BH    NOTTAP        NO                                         00001130
  119.          CLC   =C'TAP9',DDNAME TRY AGAIN                                00001140
  120.          BL    NOTTAP        NO                                         00001150
  121.          CLI   DDNAME+4,C' ' ONE LAST TEST                              00001160
  122.          BNE   NOTTAP        NO - NOT 'TAPN'                            00001170
  123.          SPACE 1                                                        00001180
  124. *------------------------------------------------------------ IT'S TAPN 00001190
  125.          MVC   TAPDEV,DDNAME COPY TAPE DEVICE CODE                      00001210
  126.          MVC   DCBBLKSI,=AL2(32756)  SET DEFAULT                        00001220
  127.          MVC   DCBLRECL,=AL2(80)     ...                                00001230
  128.          MVI   DCBRECFM,DCBRECU                                         00001240
  129.          SPACE 1                                                        00001320
  130. *---------------------------------------------------------------------- 00001330
  131. *---------------------------------------------------- GET OUTPUT FILEID 00001340
  132.          BAL   R8,PRMCHK     CHECK FOR FILENAME                         00001360
  133.          OI    FLG,XXPM2     OK, SIGNAL BOTH THERE                      00001370
  134.          MVC   OUTFN(16),0(R3) PRESENT, SO COPY NAME/TYPE               00001380
  135.          BAL   R8,PRMCHK     CHECK FOR FILETYPE                         00001390
  136.          BAL   R8,PRMCHK     CHECK FOR FILEMODE                         00001400
  137.          MVC   OUTFM(1),0(R3) YES, COPY FILEMODE                        00001410
  138.          CLI   1(R3),C' '    FILEMODE NUMBER?                           00001420
  139.          BE    NOMODE        NO                                         00001430
  140.          MVC   OUTFM+1(1),1(R3) YES, COPY IT                            00001440
  141.          MVC   CMDFMN,1(R3)  SAVE INDEFINITELY                      1.3 00001450
  142.          OI    FLG2,XXFMN    REMEMBER IT                            1.1 00001460
  143.          CLI   2(R3),C' '    LEGAL FILEMODE?                            00001470
  144.          BNE   ERR098        GO WRITE MESSAGE                           00001480
  145. NOMODE   DS    0H                                                       00001490
  146.          BAL   R8,PRMCHK     ANYTHING FOLLOWING?                        00001500
  147.          B     ERR098        YES - ERROR                                00001510
  148.          SPACE 1                                                        00001520
  149. *--------------------------------------------CHECK NEXT PARAMETER TOKEN 00001530
  150. PRMCHK   LA    R3,8(R3)      MOVE TO NEXT POSSIBLE PARAMETER            00001540
  151.          CLI   0(R3),X'FF'   ANYTHING FOLLOWING?                        00001550
  152.          BE    ENDOPT        NO, DONE SCANNING                          00001560
  153.          CLI   0(R3),C'('    START OF OPTIONS?                          00001570
  154.          BNER  R8            NOT YET, RETURN                            00001580
  155.          SPACE 1                                                        00001590
  156. *-------------------------------------------------------- PARSE OPTIONS 00001600
  157. *          NOTE: THIS CODE IS USED ALSO FOR INTERPRETING THE            00001610
  158. *          DCB INFORMATION ON TAPE LABELS; (R2) THEN CONTAINS           00001620
  159. *          THE READ BUFFER ADDRESS AND MUST BE PRESERVED                00001630
  160.          SPACE 1                                                        00001640
  161. OPTLOOP  DS    0H                                                       00001650
  162.          LA    R3,8(,R3)     POINT TO NEXT OPTION                       00001660
  163.          CLI   0(R3),X'FF'   END OF PLIST?                              00001670
  164.          BE    ENDOPT        YES                                        00001680
  165.          CLI   0(R3),C')'    END OF OPTIONS?                            00001690
  166.          BE    ENDOPT        YES                                        00001700
  167.          LA    R4,LOPTTAB    LENGTH OF TABLE ITEM                       00001710
  168.          LA    R5,OPTTAB2    POINT TO LAST ENTRY                        00001720
  169.          LA    R6,OPTTAB1    POINT TO FIRST ENTRY                       00001730
  170.          LA    R1,7(,R3)     POINT TO LAST CHAR OF TOKEN                00001740
  171.          CLI   0(R1),C' '    FIND LAST NON-BLANK                        00001750
  172.          BNE   *+8           FOUND IT                                   00001760
  173.          BCT   R1,*-8        KEEP LOOKING                               00001770
  174.          SR    R1,R3         GET TOKEN LENGTH - 1                       00001780
  175. OPTSCAN  DS    0H                                                       00001790
  176.          CLM   R1,1,8(R6)    TOKEN LONG ENOUGH FOR MATCH?               00001800
  177.          BL    OPTSLP        NO, TRY AGAIN                              00001810
  178.          EX    R1,OPTCMP     COMPLETE MATCH?                            00001820
  179.          BE    OPTFIND       YES                                        00001830
  180. OPTSLP   BXLE  R6,R4,OPTSCAN LOOP OVER OPTIONS                          00001840
  181.          B     ERR071        ILLEGAL OPTION                             00001850
  182. OPTFIND  ICM   R15,7,9(R6)   POINT TO PARSING ROUTINE                   00001860
  183.          BALR  R14,R15       EXECUTE OPTION ROUTINE                     00001870
  184.          B     OPTLOOP       PARSE NEXT OPTION                          00001880
  185. OPTCMP   CLC   0(,R3),0(R6)  OPTION FOUND?                              00001890
  186.          SPACE 1                                                        00001900
  187. *---------------------------------------------- CHECK FOR VALID OPTIONS 00001910
  188. ENDOPT   DS    0H                                                       00001920
  189.          TM    FLG,XXLAB     PROCESSING TAPE LABEL?                     00001930
  190.          BO    ENDLAB        YES, RESUME TAPE READING                   00001940
  191.          TM    FLG,XXPM1+XXPM2     DDNAME + FILEID PRESENT?             00001950
  192.          BZ    ERR001        NEITHER, SYNTAX ERROR                      00001960
  193.          BO    OPENTAPE      BOTH, PROCEED TO COPY                      00001980
  194.          ICM   R0,15,LFIL    JUST POSITIONING REQUEST?                  00002000
  195.          BZ    ERR083        NO, TOO BAD                                00002010
  196.          SPACE 1                                                        00002030
  197. *---------------------------------------------------------------------- 00002040
  198. *----------------------------------------------------PREPARE INPUT FILE 00002050
  199. OPENTAPE DS    0H                                                       00002210
  200.          L     0,TAPSIZE     MAX TAPE RECORD SIZE                       00002220
  201.          SRL   0,3           CONVERT TO DOUBLEWORDS                     00002230
  202.          DMSFREE DWORDS=(0),ERR=ERR283  GET A BUFFER                    00002240
  203.          STCM  R1,7,TAPBUFF  SET BUFFER ADDRESS FOR TAPE I/O            00002250
  204.          LR    R2,R1         COPY ADDRESS TO R2                         00002260
  205.          SPACE 1                                                        00002270
  206. CONT1    DS    0H                                                       00002290
  207.          ST    R2,OUTBUFF    STORE BUFFER ADDR                          00002300
  208. CONT2    DS    0H            FOR REPEAT FILES                           00002310
  209.          SR    R9,R9         CLEAR BLOCK READ COUNT                     00002320
  210.          ICM   R7,15,LFIL    SPECIFIED FILE?                            00002350
  211.          BZ    READ          NO                                         00002360
  212.          TM    FLG,XXTSL     SL?                                        00002370
  213.          BO    READ          YES, WILL FIND IT                          00002380
  214.          BAL   R8,TAPREW     NL, POSITION TAPE                          00002390
  215.          L     R7,LFIL                                                  00002400
  216.          BCT   R7,*+8        FILES TO SKIP                              00002410
  217.          B     CONT3         FILE=1, DONE                               00002420
  218.          MVC   TAPOPRN,=CL8'FSF'                                        00002430
  219.          BAL   R8,TAPEMOVE   FIND IT                                    00002440
  220. CONT3    TM    FLG,XXPM2     JUST POSITIONING?                          00002450
  221.          BZ    TAPECLOS      YES, DONE                                  00002460
  222.          SPACE 1                                                        00002470
  223. *---------------------------- START READING---------------------------- 00002480
  224. READ     DS    0H                                                       00002490
  225. TAPEREAD DS    0H                                                       00002640
  226.          MVC   TAPOPRN,=CL8'READ'   SET TO READ                         00002650
  227.          BAL   R8,TAPEX1     EXECUTE TAPE OP                            00002660
  228.          DC    AL4(*+4)      NO SPECIAL ERROR EXIT                      00002670
  229.          L     R0,TAPNORD    LOAD LENGTH OF BLOCK READ                  00002680
  230.          LTR   R15,R15       TEST RETURN CODE                           00002690
  231.          BZ    TAPR2         OK                                         00002700
  232.          CH    R15,=H'2'     END OF FILE?                               00002710
  233.          BE    TAPEOF        YES                                        00002720
  234.          CH    R15,=H'8'     LENGTH ERROR?                              00002730
  235.          BNE   FAIL          NO - REAL ERROR                            00002740
  236.          SPACE 1                                                        00002750
  237. *-------------------------------------------------------- DETECT LABELS 00002760
  238. TAPR2    BAL   R8,ASCTRN     CHANGE FROM ASCII IF NEC.                  00002770
  239.          TM    FLG,XXLAB     SEE IF READING LABELS ALREADY              00002780
  240.          BO    TLABDS        YES, DECIDE WHICH KIND                     00002790
  241.          TM    FLG,XX1ST     SEE IF ALREADY STARTED PROCESSING          00002800
  242.          BO    TAPR9         YES, MUST BE READING DATA FILE             00002810
  243.          OI    FLG,XX1ST     NOW STARTED                                00002820
  244.          TM    FLG,XXTSL     EXPECTING LABELS?                          00002830
  245.          BO    TLABDS        YES, LOOK                                  00002840
  246.          ICM   R8,15,LFIL    NO, SPECIFIED 'NL <N>'?                    00002850
  247.          BNZ   TAPR9         YES, DON'T RECOGNIZE LABELS                00002860
  248. TLABDS   BAL   R8,WHLABT     DECIDE IF A LABEL RECORD                   00002870
  249.          B     TAPR9         NOT A LABEL                                00002880
  250.          SPACE 1                                                        00002890
  251. *-------------------------------------------------------- PROCESS LABEL 00002900
  252. TL0      DS    0H            ORIGIN OF LABEL PROCESSORS                 00002910
  253.          SPACE 1                                                        00002920
  254. TLV1     LA    R4,4(R2)      POINT TO VOLID             -- VOL1 --      00002930
  255.          BAL   R8,CKVOLSER   CHECK FOR MATCH                            00002940
  256.          LINEDIT TEXT='SPROSC780I TAPE VOLUME: ......',DISP=ERRMSG,    +00002950
  257.                DOT=NO,SUB=(CHARA,(R4))                                  00002960
  258. TLV2     B     TAPEREAD                       -- SKIP OVER VOL2 --  1.3 00002970
  259.          SPACE 1                                                        00002980
  260. TLH2     CLI   TAPDSN,X'FF'  HDR1 SEEN YET?             -- HDR2 --      00002990
  261.          BNE   TLH2DCB       YES, INTERPRET DCB INFO                    00003000
  262.          LA    R7,1          BACK UP TO START OF LABEL FILE             00003010
  263.          B     LABRTRY       AND EXPECT HDR1                            00003020
  264.          SPACE 1                                                        00003030
  265. NULFILE  TM    FLG,XXTSL     EXPECTING LABEL?                           00003040
  266.          BO    TLE2          YES, TRY AGAIN                             00003050
  267.          ICM   R0,15,LFIL    NO, WAS IT 'NL <N>'?                       00003060
  268.          BNZ   CLOSEOF       YES, WE REACHED THE END                    00003070
  269.          SPACE 1                                                        00003080
  270. TLE2     DS    0H            BACK UP AND TRY AGAIN      -- EOF2 --      00003090
  271.          LA    R7,3          SET COUNT = 3                              00003100
  272. LABRTRY  LH    R1,FINDCNT    CHECK AVAILABLE TRIES                      00003110
  273.          BCT   R1,*+8                                                   00003120
  274.          B     ERR014        TOO MANY ERRORS                            00003130
  275.          STH   R1,FINDCNT                                               00003140
  276.          MVC   TAPOPRN,=CL8'BSF'   BACKSPACE FILES                      00003150
  277.          BAL   R8,SOFTMOVE   ISSUE COMMANDS                             00003160
  278.          DC    AL4(WOUND)    ERROR MUST MEAN LOAD POINT ON TAPE         00003170
  279.          MVI   TAPOPRN,C'F'  NOW FORWARD SKIP                           00003180
  280.          BAL   R8,TAPEX1       ... OVER THAT LAST FILE MARK             00003190
  281.          B     TAPEREAD      TRY AGAIN                                  00003200
  282.          SPACE 1                                                        00003210
  283. TLH1     MVC   TAPDSN,4(R2)  SAVE TAPE FILE DSNAME      -- HDR1 --      00003220
  284.          MVC   TAPGEN,35(R2) SAVE GENERATION NO., IF ANY                00003230
  285.          NI    FLG2,255-XXAPP                                       1.2 00003240
  286.          CLI   27(R2),C'0'   IS THE VOLUME SEQUENCE VALID?          1.2 00003250
  287.          BNE   TLH1OK        NO, ASSUME SINGLE-VOLUME               1.2 00003260
  288.          CLC   =C'0001',27(R2) IS THIS THE FIRST VOLUME?            1.2 00003270
  289.          BNL   TLH1OK        YES, FINE                              1.2 00003280
  290.          OI    FLG2,XXAPP    NO, MUST APPEND TO PREVIOUS ATTEMPT    1.2 00003290
  291. TLH1OK   DS    0H                                                   1.2 00003300
  292.          SR    R14,R14       CLEAR FILE OFFSET                      1.1 00003310
  293.          CLC   =C'CMS/SPR',61(R2)  HDR1 HAS FM NUMBER?              1.1 00003320
  294.          BNE   FILCHK        NO                                     1.1 00003330
  295.          CLI   60(R2),C'0'   VALID?                                 1.1 00003340
  296.          BL    FILCHK        NO, FORGET IT                          1.1 00003350
  297.          MVC   OUTFM+1(1),60(R2)  YES, USE IT                       1.1 00003360
  298.          OI    FLG2,XXFMN+XXFMH                                     1.1 00003370
  299.          B     FILCHK                                                   00003380
  300.          SPACE 1                                                        00003390
  301. TLE1     DS    0H                                       -- EOF1 --      00003400
  302.          LA    R14,2         SET COUNT FOR 2 AHEAD (DATA+TRAILER)       00003410
  303. *--------------------------------------------------TAPE AT HDR1 OR EOF1 00003420
  304. FILCHK   DS    0H                                                       00003430
  305.          MVC   TAPFIL,31(R2) SAVE FILE SERIAL NUMBER                    00003440
  306.          LA    R3,TAPFIL-8   SET PTR FOR 'SCAN'                         00003450
  307.          BAL   R8,CONV       CONVERT STRING TO BINARY                   00003460
  308.          LTR   R0,R0         VALID FILE NUMBER?                     1.2 00003470
  309.          BP    *+8           OK                                     1.2 00003480
  310.           LA   R0,1          NO, CALL IT FILE 1                     1.2 00003490
  311.          LR    R7,R0         KEEP CURRENT FILE NO. IN R7                00003500
  312.          ICM   R0,15,LFIL    GET REQUESTED FILE NUMBER                  00003510
  313.          BNZ   *+6                                                      00003520
  314.          LR    R0,R7         NO, USE CURRENT FILE                       00003530
  315.          SR    R7,R0         GET OFFSET IN DATA FILES                   00003540
  316.          MH    R7,=H'3'      GET TO NUMBER OF TAPE MARKS                00003550
  317.          AR    R7,R14        ADD EITHER 2 OR 0 (EOF/HDR)                00003560
  318.          BZ    WDSN          MATCHES, GO ON                             00003570
  319.          SPACE 1                                                        00003580
  320. *------------------------------------------------------  MUST MOVE TAPE 00003590
  321. TAPRETRY DS    0H            (R7) HAS NO. TAPE FILES TO BACK UP         00003600
  322.          LH    R1,FINDCNT    CHECK AVAILABLE TRIES                      00003610
  323.          BCT   R1,*+8                                                   00003620
  324.          B     ERR009        MUST BE OSCILLATING                        00003630
  325.          STH   R1,FINDCNT                                               00003640
  326.          LTR   R7,R7         BACKWARD IF POS.                           00003650
  327.          BM    SKPFWD        AHEAD ON TAPE                              00003660
  328.          BCT   R0,SKPBCK     (R0) HAD REQUESTED FILE NUMBER             00003670
  329. *                            - REQUESTED FILE 1, MIGHT AS WELL REWIND   00003680
  330.          SPACE 1                                                        00003690
  331. *--------------------------------------------------------REWIND TO VOL1 00003700
  332.          BAL   R8,TAPREW     REWIND TAPE                                00003710
  333. WOUND    OI    FLG,XXLAB+XX1ST  SET TO TRY LABELS AGAIN                 00003720
  334.          B     TAPEREAD      AND START OVER                             00003730
  335.          SPACE 1                                                        00003740
  336. *------------------------------------------------------------ BACKSPACE 00003750
  337. SKPBCK   LA    R7,1(R7)      MUST BACK UP ONE EXTRA                     00003760
  338.          MVC   TAPOPRN,=CL8'BSF'   BACKSPACE FILES                      00003770
  339.          BAL   R8,TAPEMOVE   SKIP FILES WITH MESSAGE                    00003780
  340.          DC    AL4(WOUND)    MUST HAVE REACHED LOAD POINT               00003790
  341.          BCTR  R7,0          NOW MUST SKIP FORWARD ONE                  00003800
  342.          SPACE 1                                                        00003810
  343. *-------------------------------------------------------- FORWARD SPACE 00003820
  344. SKPFWD   LPR   R7,R7         GET NUMBER TO SKIP                         00003830
  345.          MVC   TAPOPRN,=CL8'FSF'   SKIP FORWARD                         00003840
  346.          BAL   R8,TAPEMOVE   SKIP FILES                                 00003850
  347.          B     TAPEREAD      TRY NEXT LABEL                             00003860
  348.          SPACE 1                                                        00003870
  349. *-------------------------------------------------------------- GET DCB 00003880
  350. TLH2DCB  BCT   R3,ENDLAB     R3=1 IF HDR2, SKIP DCB IF HDR3 OR HDR4 1.3 00003890
  351.          MVC   TLBRCF,=AL1(4,38,36)    TR MASK FOR INFO             1.3 00003900
  352.          TR    TLBRCF,0(R2)  FETCH RECFM BYTES                          00003910
  353.          MVC   TLBBLK,5(R2)  FETCH BLKSIZE                              00003920
  354.          MVC   TLBLRC,10(R2) FETCH LRECL                                00003930
  355.          LA    R3,TLBPRM-8   POINT TO PSEUDO OPTION LIST                00003940
  356.          B     OPTLOOP       SCAN AND INTERPRET DCB INFO                00003950
  357. *                                                                       00003960
  358. ENDLAB   DS    0H            RETURN HERE FROM SCANNER                   00003970
  359.          BAL   R8,TAPFSF     SKIP REST OF LABEL BLOCKS (IF ANY)         00003980
  360.          SPACE 1                                                        00003990
  361. *----------------------------------------------------------END OF LABEL 00004000
  362. TAPEOF   TM    FLG,XX1ST     ANY RECORDS READ?                          00004010
  363.          BZ    NULFILE       NO, MUST TRY AGAIN                         00004020
  364.          TM    FLG,XXLAB     SEE IF READING LABELS                      00004030
  365.          BZ    CLOSE         NO, DONE READING                           00004040
  366.          CLI   TAPDSN,X'FF'  HDR1 SEEN YET?                         1.1 00004050
  367.          BE    CLOSEOF       NO, REACHED EOT                        1.3 00004060
  368.          XI    FLG,XXLAB     TURN OFF FLAG                              00004070
  369.          B     READ          START READING FILE                         00004080
  370.          SPACE 1                                                        00004090
  371. *------------------------------------------------------ DISPLAY DSNAME  00004100
  372. WDSN     DS    0H                                                       00004110
  373.          CLI   DSN,C' '      DSNAME VERIFICATION REQUESTED?             00004120
  374.          BE    WDSN1         NO                                         00004130
  375.          L     R1,ADSN       START OF LAST 17 BYTES                     00004140
  376.          CLC   TAPDSN,0(R1)  COMPARE VALUES                             00004150
  377.          BNE   ERR016        WE LOSE                                    00004160
  378. WDSN1    DS    0H                                                       00004170
  379.          LA    R4,21(R2)     POINT TO VOLID ON HDR1                     00004180
  380.          LINEDIT TEXT='SPROSC781I TAPE ...... DSN: . . . ..............+00004190
  381.                ... ...... FILE ....',DISP=ERRMSG,DOT=NO,RENT=NO,       +00004200
  382.                SUB=(CHARA,(R4),CHARA,TAPDSN,CHARA,TAPGEN,CHARA,TAPFIL)  00004210
  383.          TM    FLG2,XXAPP    CONTINUATION OF MULTI-REEL FILE?       1.2 00004220
  384.          BO    *+8           YES, VOLSER IS THAT OF 1ST VOLUME      1.2 00004230
  385.           BAL  R8,CKVOLSER   CHECK FOR MATCH                            00004240
  386.          TM    FLG,XXPM2     COPYING TO DISK FILE?                      00004250
  387.          BZ    TAPPHDR       NO, JUST POSITIONING TO HEADER LABEL       00004260
  388.          B     TAPEREAD                                                 00004270
  389.          SPACE 1                                                        00004280
  390. *--------------------------------------------------------NON-LABEL FILE 00004290
  391. TAPR9    TM    FLG,XXOPN     SEE IF DCB INFO IS CHECKED                 00004300
  392.          BO    TAPOPN        ALREADY CHECKED                            00004310
  393.          LA    R7,1          BACK UP IN CASE OF ERROR                   00004320
  394.          L     R0,LFIL       SPECIFIC TAPE FILE REQUESTED               00004330
  395.          TM    FLG,XXLAB     SEE IF TRYING TO READ LABELS               00004340
  396.          BO    TAPRETRY      YES, BAD LABELS                            00004350
  397.          TM    FLG,XXTSL     OK. SL TAPE?                               00004360
  398.          BZ    FSEQOK        NO, THIS MUST BE OK                        00004370
  399.          CLI   TAPDSN,X'FF'  YES, HDR1 SEEN?                            00004380
  400.          BNE   FSEQOK        YES, FINE                                  00004390
  401.          NI    FLG,255-XX1ST NO, TRY ALL OVER                           00004400
  402.          B     TAPRETRY      BACK UP AND LOOK AGAIN                     00004410
  403. FSEQOK   DS    0H                                                       00004420
  404.          LA    R0,TAPDSN                                                00004430
  405.          CLI   DSN,C' '      USER GAVE DSN?                             00004440
  406.          BE    *+8           NO                                         00004450
  407.           LA   R0,DSN        YES, USE IT                                00004460
  408.          BAL   R8,GETFID     EXTRACT FILE ID IF NEC.                    00004470
  409.          LA    R14,PRFSTR    COMPARE WITH SPECIFIED PREFIX          1.4 00004471
  410.          LA    R15,8         NOTE: PREFIX MAY BE ALL-BLANK          1.4 00004472
  411.          LA    R0,OUTFN                                             1.4 00004473
  412.          LR    R1,R15                                               1.4 00004474
  413.          CLCL  R0,R14                                               1.4 00004475
  414.          BE    *+12          COMPLETE MATCH, LET'S DO IT            1.4 00004476
  415.           CLI  0(R14),C' '   ALL NON-BLANK PREFIX MATCHES?          1.4 00004477
  416.           BNE  SKIPFILE      NO, SKIP THIS FILE                     1.4 00004478
  417.          BAL   R14,DCBEXIT2  TEST VALUES AND SET UP FSCB                00004480
  418.          OI    FLG,XXOPN     MARK IT CHECKED                            00004490
  419. TAPOPN   L     R0,TAPNORD    GET BLOCK LENGTH AGAIN                     00004500
  420.          LA    R9,1(,R9)     INCREMENT BLOCK COUNT                      00004510
  421.          SPACE 1                                                        00004520
  422. *------------------------------------------------------------TEST RECFM 00004530
  423. READ2    DS    0H                                                       00004540
  424.          TM    DCBRECFM,DCBRECDU  RECFM=D?                          1.1 00004550
  425.          BO    READV         YES, SIMILAR TO V                      1.1 00004560
  426.          TM    DCBRECFM,DCBRECU  UNDEFINED LENGTH BLOCK?                00004570
  427.          BO    WRITBLK       WRITE IT OUT                               00004580
  428.          TM    DCBRECFM,DCBRECF  FIXED LENGTH RECORDS                   00004590
  429.          BO    READF         YES                                        00004600
  430.          SPACE 1                                                        00004610
  431. *----------------------------------------------------------RECFM=V READ 00004620
  432. READV    DS    0H                                                       00004630
  433.          LA    R1,OUT        POINT TO OUTPUT FSCB                       00004640
  434.          LA    R6,4          LOAD LENGTH OF BDW/RDW                     00004650
  435.          LR    R3,R2         1ST RECORD IF RECFM=D                      00004660
  436.          TM    DCBRECFM,DCBRECDU                                    1.3 00004670
  437.          BO    READV2        DB. SKIP BDW CHECK                     1.3 00004680
  438.          LA    R3,4(,R2)     POINT TO FIRST OR ONLY RDW                 00004690
  439.          CLM   R0,3,0(R2)    CHECK WITH LENGTH FROM BDW                 00004700
  440.          BNE   WRITXLEN      INCORRECT, MUST BE RECFM=U                 00004710
  441. READV2   DS    0H                                                   1.3 00004720
  442.          LR    R5,R2         COPY BLOCK ADDRESS                         00004730
  443.          AR    R5,R0         POINT PAST THE BLOCK                       00004740
  444.          BCTR  R5,0          BACK UP                                    00004750
  445.          CLI   OUTFM+1,C'4'  FILEMODE 4 OUTPUT?                         00004760
  446.          BE    WRITVBS       GO WRITE THE BLOCK (OR REBLOCK IT)     1.3 00004770
  447.          TM    DCBRECFM,DCBRECSB SPANNED RECORDS?                       00004780
  448.          BO    WRITVBS       GO WRITE THE BLOCK (OR REBLOCK)        1.3 00004790
  449.          TM    DCBRECFM,DCBRECDU                                    1.1 00004800
  450.          BO    READVB        ASSUME DB                              1.1 00004810
  451.          TM    DCBRECFM,DCBRECBR  BLOCKED RECORDS                       00004820
  452.          BO    READVB        YES                                        00004830
  453.          SPACE 1                                                        00004840
  454. *-------------------------------------------------------- WRITE RECFM=V 00004850
  455.          LR    R4,R0         COPY BLOCK LENGTH                      1.1 00004860
  456.          BAL   R8,SDWCHK     GET SEGMENT LENGTH                     1.1 00004870
  457.          BNZ   ERR018        ERROR                                  1.1 00004880
  458.          B     WRITFS        WRITE IT OUT                               00004890
  459.          SPACE 1                                                        00004900
  460. *------------------------------------------------------DEBLOCK RECFM=VB 00004910
  461. READVB   DS    0H                                                       00004920
  462.          DMSKEY NUCLEUS      INTO NUCLEUS PROTECT KEY FOR SPEED         00004930
  463. READVB1  DS    0H                                                       00004940
  464.          BAL   R8,SDWCHK     GET SEGMENT LENGTH                     1.1 00004950
  465.          BNZ   READVB2       ERROR, GET OUT OF LOOP                     00004960
  466.          LTR   R4,R4         LENGTH=0?                                  00004970
  467.          BZ    READVB2       END, GET OUT OF LOOP                       00004980
  468.          FSWRITE FSCB=(1),FORM=E,TYPCALL=BALR   WRITE A RECORD          00004990
  469.          LTR   R8,R15        TEST RETURN CODE                           00005000
  470.          BNZ   READVB2       LEAVE LOOP IF BAD                          00005010
  471.          BXLE  R3,R4,READVB1 LOOP OVER RECORDS IN BLOCK                 00005020
  472. READVB2  DS    0H                                                       00005030
  473.          LR    R8,R15        SAVE RETURN CODE                           00005040
  474.          DMSKEY RESET        BACK TO USER KEY                           00005050
  475.          LTR   R15,R8        TEST RC FROM LAST WRITE OR SPAN CHECK      00005060
  476.          BZ    READVZ        OK - NOW CHECK LENGTH                      00005070
  477.          BM    ERR018        SPANNED RECORD                             00005080
  478.          MVC   OUTCOMM,=CL8'WRBUF'   RESTORE SVC 202 INDICATOR          00005090
  479.          B     FAIL          FIND OUT WHAT WENT WRONG                   00005100
  480.          SPACE                                                          00005110
  481. READVZ   BCTR  R3,0                                                 1.1 00005120
  482.          CR    R3,R5         EXACTLY FINISHED BLOCK?                1.1 00005130
  483.          BE    READ          OK                                     1.1 00005140
  484.          OI    FLG2,XXMLT    NO, MAKE A NOTE                        1.1 00005150
  485.          B     READ                                                     00005160
  486.          SPACE 1                                                        00005170
  487. *---------------------------------------------------------- RECFM=F,FB? 00005180
  488. READF    DS    0H                                                       00005190
  489.          LH    R1,DCBLRECL   GET RECORD LENGTH                          00005200
  490.          TM    FLG2,XXASC                                               00005210
  491.          BZ    READFE        DON'T CHECK FOR PADDED BLOCK           1.1 00005220
  492.          LR    R5,R0                                                1.1 00005230
  493.          AR    R5,R2         POINT TO END                           1.1 00005240
  494.          BCTR  R5,0                                                 1.1 00005250
  495.          CLI   0(R5),C'^'    CHECK FOR VMS-STYLE PADDING            1.1 00005260
  496.          BE    *-6                                                  1.1 00005270
  497.          AR    R5,R1         ROUND UP                               1.1 00005280
  498.          SR    R4,R4                                                1.1 00005290
  499.          SR    R5,R2         GET EFFECTIVE LENGTH                   1.1 00005300
  500.          DR    R4,R1                                                1.1 00005310
  501.          MR    R4,R1         GET MULTIPLE OF LRECL                  1.1 00005320
  502.          LR    R0,R5         USE THAT AS LENGTH                     1.1 00005330
  503. READFE   CLI   OUTFM+1,C'4'  FILEMODE 4 OUTPUT FILE?                    00005340
  504.          BNE   READFB        NO - DEBLOCK                               00005350
  505.          LH    R1,DCBBLKSI   LOAD BLOCK SIZE                            00005360
  506.          SR    R1,R0         SHORT BLOCK?                               00005370
  507.          BNH   WRITBLK       NO                                         00005380
  508.          AR    R0,R2         POINT TO END OF BLOCK                      00005390
  509.          LA    R14,EOBID     POINT TO END-OF-BLOCK INSERT               00005400
  510.          LA    R15,4         LOAD LENGTH OF INSERT                      00005410
  511.          MVCL  R0,R14        INSERT END-OF-BLOCK INDICATOR AND FILL     00005420
  512.          SR    R0,R2         RESTORE FULL BLOCK LENGTH                  00005430
  513.          B     WRITBLK       WRITE THE BLOCK                            00005440
  514.          SPACE 1                                                        00005450
  515. *------------------------------------------------------DEBLOCK RECFM=FB 00005460
  516. READFB   DS    0H                                                       00005470
  517.          SR    R14,R14       CLEAR UPPER DIVISOR REGISTER               00005480
  518.          LR    R15,R0        COPY BLOCKSIZE FOR DIVIDE                  00005490
  519.          DR    R14,R1        GET BLOCKING FACTOR IN R15                 00005500
  520.          ST    R15,OUTANIT   STORE RECORD COUNT IN FSCB                 00005510
  521.          LTR   R14,R14       ANY REMAINDER?                             00005520
  522.          BZ    WRITBLK       NO, IT'S A PROPER MULTIPLE                 00005530
  523.          MR    R14,R1        OH WELL, TRUNCATE THE BLOCK AND COPY       00005540
  524.          LR    R0,R15                                                   00005550
  525.          SPACE 1                                                        00005560
  526. WRITXLEN OI    FLG2,XXMLT    NOTE BLOCK IS WRONG LENGTH             1.1 00005570
  527.          SPACE 1                                                        00005580
  528. *---------------------------------------------------- WRITE TO CMS FILE 00005590
  529. WRITBLK  DS    0H                                                       00005600
  530.          ST    R0,OUTSIZE    STORE BLOCK LENGTH                         00005610
  531. WRITFS   FSWRITE FSCB=OUT,FORM=E,ERROR=FAIL   WRITE THE BLOCK           00005620
  532.          B     READ          READ THE NEXT BLOCK                        00005630
  533.          SPACE 1                                                        00005640
  534. *----------------------------------------------- REBLOCK OR WRITE AS IS 00005650
  535.          SPACE 1                                                        00005660
  536. *  ENTER WITH R2->BUFFER, R3->INPUT DATA, R5->LAST OF INPUT, R6=4   1.3 00005670
  537. WRITVBS  ICM   R1,15,REBBUF  REBLOCKING?                            1.3 00005680
  538.          BZ    WRITBLK       NO, JUST WRITE IT                      1.3 00005690
  539.          MVI   SPNFLGS,0     CLEAR SPANNING FLAGS                   1.3 00005700
  540.          L     R1,REBEND     END OF OUTPUT BUFFER                   1.3 00005710
  541.          L     R14,REBPTR    START OF AVAILABLE SPACE               1.3 00005720
  542.          SR    R1,R14        ROOM REMAINING                         1.3 00005730
  543. WRITVLP  BAL   R8,SDWCHK     GET SEGMENT LENGTH IN R4               1.3 00005740
  544.          BZ    WRITVNA       NOT SPANNED HERE, USE IT               1.3 00005750
  545.          MVC   SPNFLGS,2(R3) SPANNED, KEEP FLAGS                    1.3 00005760
  546.          AR    R3,R6         NOW SKIP OVER SDW                      1.3 00005770
  547.          SR    R4,R6         AND REDUCE THE LENGTH                  1.3 00005780
  548.          BM    ERR018        SOMETHING FUNNY HAPPENED               1.3 00005790
  549.          TM    SPNFLGS,2     FIRST SEGMENT?                         1.3 00005800
  550.          BO    WRITVNB       NO, SKIP SETTING UP NEW RDW            1.3 00005810
  551. WRITVNA  C     R14,REBREC    MAKE SURE WE DON'T HAVE ANY LEFTOVERS  1.3 00005820
  552.          BNE   ERR018        WE DID.  SOMETHING FAILED              1.3 00005830
  553.          XC    0(4,R14),0(R14) CLEAR NEW RDW                        1.3 00005840
  554.          AR    R14,R6        AND SPACE OVER IT                      1.3 00005850
  555.          SR    R1,R6         REDUCE SIZE OF REMAINING SPACE         1.3 00005860
  556. WRITVNB  CR    R4,R1         ROOM FOR WHOLE SEGMENT?                1.3 00005870
  557.          BH    WRITVW        NO, MUST WRITE THE BLOCK NOW           1.3 00005880
  558.          L     R15,REBREC    START OF CURRENT OUTPUT RECORD         1.3 00005890
  559.          LA    R0,0(R4,R14)  END OF RECORD INCLUDING NEW SEGMENT    1.3 00005900
  560.          SR    R0,R15        CURRENT LENGTH                         1.3 00005910
  561.          STCM  R0,3,0(R15)   MAKE TENTATIVE RDW                     1.3 00005920
  562.          LR    R15,R4        SET UP LENGTH FOR COPY                 1.3 00005930
  563.          LR    R0,R3         INPUT PTR                              1.3 00005940
  564.          MVCL  R14,R0        COPY TO OUTPUT BUFFER                  1.3 00005950
  565.          TM    SPNFLGS,1     WAS THIS THE LAST SEGMENT OF A RECORD? 1.3 00005960
  566.          BO    WRITVLQ       NO                                     1.3 00005970
  567.          ST    R14,REBREC    YES, SET PTR TO NEXT RECORD            1.3 00005980
  568. WRITVLQ  BXLE  R3,R4,WRITVLP UPDATE INPUT PTR AND LOOP              1.3 00005990
  569.          ST    R14,REBPTR    USED INPUT BLOCK, SAVE OUTPUT PTR      1.3 00006000
  570.          B     READ          GET MORE INPUT                         1.3 00006010
  571.          SPACE 1                                                    1.3 00006020
  572. *-------------------------------------------- WRITE A FULL OUTPUT BLOCK 00006030
  573. WRITVW   ST    R14,REBPTR    MUST DUMP BLOCK, SAVE OUTPUT PTR       1.3 00006040
  574.          BAL   R14,WRITVDMP  DUMP IT                                1.3 00006050
  575.           B    ERR003        OOPS                                   1.3 00006060
  576.          B     WRITVNB       RESUME COPYING. R1, R14 UPDATED        1.3 00006070
  577.          SPACE 1                                                        00006080
  578. *----------------------------------------- WRITE OUTPUT BLOCK AND RESET 00006090
  579. WRITVDMP ST    R14,WRDRET    SAVE RETURN ADR                        1.3 00006100
  580.          LM    R14,R15,REBBUF START OF BUFFER AND AMOUNT FILLED     1.3 00006110
  581.          SR    R15,R14       TOTAL LENGTH                           1.3 00006120
  582.          STCM  R15,3,0(R14)  FILL IN BDW                            1.3 00006130
  583.          STM   R14,R15,OUTBUFF SET UP OUTPUT FSCB                   1.3 00006140
  584.          CR    R15,R6        IS TOTAL LENGTH = 4?                   1.3 00006150
  585.          L     R15,WRDRET    RETURN ADR, IF NECESSARY               1.3 00006160
  586.          BER   R15           LENGTH=4, NOTHING TO OUTPUT            1.3 00006170
  587.          FSWRITE FSCB=OUT,FORM=E,ERROR=FAIL                         1.3 00006180
  588. *                                                                   1.3 00006190
  589.          LM    R0,R1,REBREC  PTRS TO START AND END OF PARTIAL RECORD1.3 00006200
  590.          SR    R1,R0         GET LENGTH                             1.3 00006210
  591.          L     R14,REBBUF    START OF BUFFER                        1.3 00006220
  592.          AR    R14,R6        ALLOW FOR BDW                          1.3 00006230
  593.          ST    R14,REBREC    UPDATED START OF CURRENT RECORD        1.3 00006240
  594.          LR    R15,R1        LENGTH TO COPY                         1.3 00006250
  595.          MVCL  R14,R0        NOW R14 IS OUTPUT PTR AGAIN            1.3 00006260
  596.          L     R1,REBEND     END OF BUFFER                          1.3 00006270
  597.          SR    R1,R14        ROOM NOW REMAINING                     1.3 00006280
  598.          L     R15,WRDRET    RETRIEVE RETURN ADR (N.B. IN R15)      1.3 00006290
  599.          B     4(,R15)       RETURN AND SKIP                        1.3 00006300
  600.          SPACE 1                                                        00006310
  601. *------------------------------------------------------ CMS WRITE FAILS 00006320
  602. FAIL     DS    0H                                                       00006330
  603.          ST    R15,RETC      STORE ERROR CODE                           00006360
  604.          LR    R8,R1                                                    00006362
  605.          LINEDIT TEXT='........ ERROR ......',DOT=NO,                  +00006364
  606.                SUB=(CHARA,(R8),DEC,(R15)),RENT=NO                       00006366
  607.          B     CLOSE2        CONTINUE                                   00006370
  608.          SPACE 1                                                        00006371
  609. *---------------------------------------------------------- SKIP A FILE 00006372
  610. SKIPFILE LINEDIT TEXT=' - SKIP',DOT=NO                              1.4 00006373
  611.          BAL   R8,TAPFSF     SKIP OVER DATA FILE                    1.4 00006376
  612.          B     RPTCHK        AND START OVER                         1.4 00006377
  613.          SPACE 1                                                        00006380
  614. *---------------------------------------------------- DISPLAY GOOD COPY 00006390
  615. CLOSE    DS    0H                                                       00006400
  616.          ICM   R1,15,REBBUF  ARE WE REBLOCKING?                     1.3 00006410
  617.          BZ    *+12          NO                                     1.3 00006420
  618.           BAL  R14,WRITVDMP  PROBABLY.  DUMP LAST BLOCK, IF ANY     1.3 00006430
  619.            NOP 0             IGNORE ERROR IF NO PARTIAL BLOCK       1.3 00006440
  620.          SPACE 1                                                        00006450
  621.          LINEDIT TEXT='SPROSC770I ''........'' (........ BLOCKS) COPIED+00006460
  622.                 TO ''....................''',DISP=ERRMSG,RENT=NO,      +00006470
  623.                SUB=(CHARA,DDNAME,DEC,(R9),CHAR8A,OUTFN),DOT=NO          00006480
  624.          FSCLOSE FSCB=OUT    NOW CLOSE THE OUTPUT FILE              1.3 00006490
  625. RPTCHK   DS    0H                                                   1.4 00006495
  626.          L     R0,RPTCNT     MORE FILES TO READ?                    1.1 00006500
  627.          BCTR  R0,0                                                 1.1 00006510
  628.          LTR   R0,R0                                                1.1 00006520
  629.          BNP   CLOSE2        NO, DONE READING                       1.1 00006530
  630.          MVI   OUTFN,C'='    YES, SEEK NEW FILE ID                  1.1 00006540
  631.          MVI   DSN,C' '      CLEAR VALIDATION NAME                  1.1 00006550
  632.          BAL   R14,RPTSET    SAVE NEW COUNT                         1.1 00006560
  633.          XC    ZST2(ZST2L),ZST2                                     1.1 00006570
  634.          NI    FLG,255-XXOPN                                        1.1 00006580
  635.          OI    FLG,XXLAB+XX1ST                                      1.1 00006590
  636.          NI    FLG2,255-XXMLT-XXFMN-XXFMH                           1.1 00006600
  637.          BAL   R8,SETUP1     RE-INIT. FOR READ                      1.1 00006610
  638.          BAL   R8,TAPFSF     SKIP OVER EOF LABEL                    1.1 00006620
  639.          B     CONT2                                                1.1 00006630
  640.          SPACE 1                                                        00006640
  641. CLOSEOF  DS    0H                                                       00006650
  642.          LINEDIT TEXT='SPROSC772I REACHED EOT ON ....',DOT=NO,         +00006660
  643.                DISP=ERRMSG,SUB=(CHARA,TAPDEV)                           00006670
  644.          MVC   TAPOPRN,=CL8'BSF'                                        00006680
  645.          LA    R7,2                                                     00006690
  646.          BAL   R8,SOFTMOVE   SKIP OVER EOT INDICATOR                    00006700
  647.          DC    AL4(*+4)                                                 00006710
  648.          SPACE 1                                                        00006720
  649. CLOSE2   DS    0H                                                       00006730
  650.          B     TAPECLOS                                                 00006740
  651.          SPACE 1                                                        00006760
  652. *---------------------------------------------- LEAVE TAPE AT THIS FILE 00007080
  653. TAPPHDR  MVC   TAPOPRN,=CL8'BSR'   SKIP BACK OVER HDR1                  00007090
  654.          BAL   R8,TAPEX1     ISSUE COMMAND ONCE                         00007100
  655.          SPACE 1                                                        00007110
  656. *------------------------------------------------------------TAPN CLOSE 00007120
  657. TAPECLOS DS    0H                                                       00007130
  658.          L     R0,TAPSIZE    MAX TAPE RECORD SIZE                       00007140
  659.          LTR   R1,R2         BUFFER THERE?                              00007150
  660.          BZ    CMSCLOSE      NO, WE MUST BE DONE                        00007160
  661.          SRL   R0,3          CVRT TO DBLWRDS                            00007170
  662.          DMSFRET DWORDS=(0),LOC=(1) RELEASE THE BUFFER                  00007180
  663.          SR    R2,R2                                                    00007190
  664.          TM    FLG,XXPM2     COPY DONE?                                 00007310
  665.          BZ    EXITR         NO FILEID GIVEN, JUST EXIT                 00007320
  666.          TM    FLG,XXTSL     STANDARD LABEL?                            00007330
  667.          BNO   CMSCLOSE      NO, WE ARE OK                              00007340
  668.          BAL   R8,TAPFSF     SKIP TRAILER LABELS                        00007350
  669.          SPACE 1                                                        00007360
  670. *--------------------------------------------------------CLOSE CMS FILE 00007370
  671. CMSCLOSE DS    0H                                                       00007380
  672.          FSCLOSE FSCB=OUT    CLOSE THE OUTPUT FILE                      00007390
  673. EXITR    TM    FLG2,XXMLT    ANY BLOCK SIZE ERRORS?                 1.1 00007400
  674.          BZ    EXITR2        NO, FINE                               1.1 00007410
  675.          LINEDIT TEXT='SPROSC783I ONE OR MORE TAPE BLOCKS WERE OF IMPRO+00007420
  676.                PER LENGTH',DOT=NO,DISP=ERRMSG                       1.1 00007430
  677. EXITR2   L     R15,RETC      LOAD THE RETURN CODE                       00007440
  678.          SPACE 1                                                        00007450
  679. * ---------------------------------------------------------EXIT LINKAGE 00007460
  680. EXIT     DS    0H                                                       00007470
  681.          LR    R2,R15        SAVE RETURN CODE                           00007480
  682.          LTR   R1,R11        GET PTR TO AUX STORAGE                     00007490
  683.          BZ    STORRETZ      NONE                                       00007500
  684.          LA    R0,LSTOR                                                 00007510
  685.          DMSFRET LOC=(1),DWORDS=(0)                                     00007520
  686. STORRETZ DS    0H                                                       00007530
  687.          ICM   R1,15,REBBUF  ANY REBLOCK BUFFER?                    1.3 00007540
  688.          BZ    REBRETZ       NO, OK                                 1.3 00007550
  689.          L     R0,REBDWDS    YES, GET LENGTH                        1.3 00007560
  690.          DMSFRET DWORDS=(0),LOC=(1) RELEASE IT                      1.3 00007570
  691. REBRETZ  DS    0H                                                   1.3 00007580
  692.          LR    R15,R2                                                   00007590
  693.          L     R14,SAVER14   RESTORE RETURN ADDRESS                     00007600
  694.          BR    R14           RETURN TO CMS                              00007610
  695.          SPACE 1                                                        00007620
  696. *-----------------------------------------------------SOME INITIALIZING 00007630
  697. SETUP1   MVI   TAPDSN,C' '   INSERT BLANK              DSN,SER=' '      00007640
  698.          MVC   TAPDSN+1(LINIT),TAPDSN  AND EXTEND                       00007650
  699.          MVI   TAPDSN,X'FF'  INIDICATE HDR1 LABEL NOT SEEN YET          00007660
  700.          MVI   OUTFV,C'V'    DEFAULT RECFM                              00007670
  701.          MVI   OUTFM+1,C'1'  DEFAULT FM NUMBER                          00007680
  702.          CLI   CMDFMN,0      ANY FM NUMBER GIVEN IN COMMAND?        1.3 00007690
  703.          BE    SETUP2        NO, USE DEFAULT                        1.3 00007700
  704.          MVC   OUTFM+1(1),CMDFMN  YES, USE IT                       1.3 00007710
  705.          OI    FLG2,XXFMN    REMEMBER WE GOT IT                     1.3 00007720
  706. SETUP2   DS    0H                                                   1.3 00007730
  707.          LA    R0,1                                                     00007740
  708.          ST    R0,OUTANIT    1 ITEM/WRITE                               00007750
  709.          SR    R0,R0                                                    00007760
  710.          MVI   DCBRECFM,0    CLEAR RECFM                                00007770
  711.          STH   R0,DCBBLKSI   CLEAR BLKSIZE                              00007780
  712.          STH   R0,DCBLRECL   CLEAR LRECL                                00007790
  713.          BR    R8                                                       00007800
  714.          SPACE 1                                                        00007810
  715. *---------------------------------------------------------------------- 00007820
  716. *          EXECUTE 'TAPLIST' (R7) TIMES, LEAVE (R7)=0                   00007830
  717. *          ECHO COMMAND LIST TO TERMINAL, RETURN TO (R8)                00007840
  718. *---------------------------------------------------------------------- 00007850
  719.          SPACE 1                                                        00007860
  720. TAPREW   MVC   TAPOPRN,=CL8'REW'                 ENTER HERE TO REWIND   00007870
  721.          LA    R7,1          OPERATION COUNT                            00007880
  722.          SPACE 1                                                        00007890
  723. TAPEMOVE DS    0H                                                       00007900
  724.          MVI   TAPDSN,X'FF'  THROW AWAY OLD HDR1, IF ANY                00007910
  725.          LINEDIT TEXT='SPROSC782I EXECUTING .... ........ ON .... ...',+00007920
  726.                RENT=NO,DISP=ERRMSG,DOT=NO,                             +00007930
  727.                SUB=(CHARA,TAPOPRN,DEC,(R7),CHARA,TAPDEV)                00007940
  728.          B     SOFTMOVE                                                 00007950
  729. *                                                                       00007960
  730. *          ENTER HERE TO AVOID MESSAGE AND UNDOING 'HDR1'               00007970
  731. TAPFSF   MVC   TAPOPRN,=CL8'FSF'  FORWARD ONE FILE                      00007980
  732. TAPEX1   LA    R7,1          REPEAT COUNT=1                             00007990
  733. SOFTMOVE DS    0H                                                       00008000
  734.          LA    R1,FAIL       DEFAULT ERROR EXIT                         00008010
  735.          CLI   0(R8),0       ANY IN-LINE EXIT ADR?                      00008020
  736.          BNE   *+12          NO, USE DEFAULT                            00008030
  737.          ICM   R1,15,0(R8)   GET IN-LINE EXIT ADR                       00008040
  738.          LA    R8,4(,R8)     SKIP ON RETURN                             00008050
  739.          STCM  R1,15,TAPEXIT STORE EXIT ADR                             00008060
  740.          LA    R1,TAPLIST                                               00008070
  741.          SVC   202                                                      00008080
  742. TAPEXIT  DC    AL4(FAIL)                                                00008090
  743.          BCT   R7,*-6                                                   00008100
  744.          BR    R8            RETURN                                     00008110
  745.          SPACE 1                                                        00008120
  746. *--------------------------------------------------DETERMINE LABEL TYPE 00008130
  747. *          RETURN IF NOT A LABEL, ELSE  DISPATCH TO HANDLER             00008140
  748. *          SET R3 = RELATIVE NUMBER OF LABEL TYPE WITHIN GROUP      1.3 00008150
  749. *          CLOBBER R4,R5,R6,R15                                         00008160
  750. WHLABT   LA    R15,1         SET SWITCH FOR ASCII TEST                  00008170
  751.          CH    R0,=H'80'     CORRECT LENGTH FOR LABEL?                  00008180
  752.          BNER  R8            NO, SKIP IT                                00008190
  753.          MVC   LABTYP,0(R2)  YES, COULD BE                              00008200
  754.          TM    FLG2,XXASC    IS IT DEFINITELY ASCII?                    00008210
  755.          BZ    WHLABL        NO, TRY EBCDIC FIRST                       00008220
  756.          TM    FLG2,XXEBC    REALLY?                                    00008230
  757.          BO    WHLABL        NO, TRY EBCDIC FIRST ANYWAY                00008240
  758.          LCR   R15,R15       YES, ALREADY TRANSLATED                    00008250
  759. WHLABL   ICM   R3,15,LABTYP  LOAD TYPE FOR COMPARISON                   00008260
  760.          LA    R4,LLBT       SET UP BXH                                 00008270
  761.          LA    R5,LBTABZ                                                00008280
  762.          LA    R6,LBTAB-LLBT                                            00008290
  763.          BXH   R6,R4,WHLABA  NOT FOUND, TRY ASCII                       00008300
  764.          CLM   R3,14,0(R6)   CHECK TABLE                                00008310
  765.          BNE   *-8           NOT THIS, TRY NEXT                         00008320
  766.          SR    R5,R5                                                    00008330
  767.          CLM   R3,1,4(R6)    CHECK 4TH CHAR AGAINST LIMIT           1.3 00008340
  768.          BHR   R8            TOO BIG, BAD                           1.3 00008350
  769.          ICM   R4,15,0(R6)   GET SMALLEST NUMBER OF THIS TYPE       1.3 00008360
  770.          SR    R3,R4         WITHIN RANGE?                          1.3 00008370
  771.          BMR   R8            TOO SMALL, GIVE UP                     1.3 00008380
  772.          IC    R5,5(R3,R6)   GET OFFSET FOR DISPATCH                1.3 00008390
  773.          LA    R8,TL0(R5)    SET UP DISPATCH ADR                        00008400
  774.          OI    FLG,XXLAB+XXTSL INDICATE READING LABELS                  00008410
  775.          LTR   R15,R15       SURPRISE ASCII?                            00008420
  776.          BNZR  R8            NO, JUST DO IT                             00008430
  777.          OI    FLG2,XXASC    YES, REQUIRE IT NOW                        00008440
  778.          TR    0(80,R2),ATOE TRANSLATE WHOLE LABEL                      00008450
  779.          BR    R8            OK                                         00008460
  780. WHLABA   BCTR  R15,R8        RETURN IF ALREADY TRIED ASCII              00008470
  781.          TR    LABTYP,ATOE   CONVERT LABEL TYPE TO EBCDIC               00008480
  782.          B     WHLABL        TRY AGAIN                                  00008490
  783.          SPACE                                                          00008500
  784. *-------------------------------------------- GET RECORD/SEGMENT LENGTH 00008510
  785. *  ON ENTRY: R3->RECORD, R6=4, R8=RETURN ADR, R5->LAST BYTE OF BLOCK    00008520
  786. *  USES R4.  SETS R15 ON RETURN: 0->OK, -1=>BAD VB, -2=>BAD DB          00008530
  787. SDWCHK   SR    R15,R15                                                  00008540
  788.          BCTR  R15,0         R15 = -1                                   00008550
  789.          TM    DCBRECFM,DCBRECDU                                    1.1 00008560
  790.          BO    SDWD          RECFM=D                                1.1 00008570
  791.          SR    R4,R4                                                    00008580
  792.          ICM   R4,3,0(R3)    RECORD LENGTH                              00008590
  793.          CLI   2(R3),0       LOOK AT SPAN FLAGS                         00008600
  794.          BNER  R8            ERROR IF ANY ARE SET                       00008610
  795.          B     SDWZ                                                     00008620
  796. SDWD     LR    R4,R6         SDW LENGTH                             1.1 00008630
  797.          BCTR  R15,0         R15 = -2                               1.1 00008640
  798.          CLC   =C'^^^^',0(R3) SEE IF JUST PADDING                   1.1 00008650
  799.          BNE   SDWDA         OK, CHECK ALIGNMENT                    1.1 00008660
  800.          LA    R5,3(,R3)     CHANGE END OF BLOCK                    1.1 00008670
  801.          B     SDWZ          AND RETURN                             1.1 00008680
  802. SDWDK    LA    R3,1(R3)                                             1.1 00008690
  803. SDWDA    CR    R3,R5                                                1.1 00008700
  804.          BH    SDWZZ         RAN OFF THE END                        1.1 00008710
  805.          CLI   0(R3),C'^'    ANY MORE FOR ALIGNMENT?                1.1 00008720
  806.          BE    SDWDK         YES, KEEP LOOKING                      1.1 00008730
  807.          MVC   LABTYP,0(R3)  GET CHAR SDW                           1.1 00008740
  808. SDWDL    CLI   0(R3),C'0'    CHECK FOR DIGITS                       1.1 00008750
  809.          BLR   R8            ERROR                                  1.1 00008760
  810.          CLI   0(R3),C'9'                                           1.1 00008770
  811.          BHR   R8                                                   1.1 00008780
  812.          LA    R3,1(,R3)                                            1.1 00008790
  813.          BCT   R4,SDWDL      LOOP OVER SDW                          1.1 00008800
  814.          SR    R3,R6         BACK UP OVER SDW ...                   1.1 00008810
  815.          PACK  DEC,LABTYP                                           1.1 00008820
  816.          CVB   R4,DEC        GET LENGTH                             1.1 00008830
  817. *          CONVERT VAX/VMS CARRIAGE CONTROL TO ANSI                 1.1 00008840
  818.          TM    FLG2,XXASC                                           1.1 00008850
  819.          BZ    SDWZ                                                 1.1 00008860
  820.          CH    R4,=H'6'      SEGMENT LENGTH INCLUDES ENOUGH?        1.1 00008870
  821.          BL    SDWZ                                                 1.1 00008880
  822.          BE    *+12                                                 1.1 00008890
  823.          CLI   6(R3),C' '    BINARY DATA?                           1.1 00008900
  824.          BL    SDWZ          PROBABLY                               1.1 00008910
  825.          CLI   5(R3),X'0D'   FUNNY CAR.CTL?                         1.1 00008920
  826.          BH    SDWZ          NOT THAT I KNOW OF                     1.1 00008930
  827.          LA    R3,1(R3)      YES, REMOVE ONE                        1.1 00008940
  828.          BCTR  R4,0                                                 1.1 00008950
  829.          MVI   4(R3),C' '    USUAL 1-SPACE                          1.1 00008960
  830.          CLI   3(R3),X'0D'   SPECIAL CHARS                          1.1 00008970
  831.          BNL   SDWZ          NO, LEAVE IT AT THAT                   1.1 00008980
  832.          MVC   4(1,R3),3(R3)                                        1.1 00008990
  833.          TR    4(1,R3),=C'+ 0-        1'  GET ANSI CAR.CTL          1.1 00009000
  834. *          GET DATA PTRS                                                00009010
  835. SDWZ     AR    R3,R6         POINT TO DATA                              00009020
  836. SDWZZ    SR    R4,R6         GET DATA LENGTH                            00009030
  837.          BMR   R8            ILLEGAL LENGTH                             00009040
  838.          STM   R3,R4,OUTBUFF STORE IN FSCB                              00009050
  839.          SR    R15,R15       SIGNAL OK                                  00009060
  840.          BR    R8                                                       00009070
  841.          SPACE 1                                                        00009080
  842. *------------------------------------------------- TRANSLATE FROM ASCII 00009090
  843. ASCTRN   TM    FLG2,XXASC    DO IT?                                     00009100
  844.          BZR   R8            NO                                         00009110
  845.          TM    FLG2,XXEBC    REFUSE?                                    00009120
  846.          BOR   R8            YES, MAYBE BINARY                          00009130
  847.          LR    R15,R0        COPY LENGTH OF BLOCK                       00009140
  848.          AR    R0,R2         POINT TO END OF BLOCK                      00009150
  849. ASCTLP   LR    R14,R0                                                   00009160
  850.          SR    R14,R15       POINT TO UNTRANSLATED STUFF                00009170
  851.          BCTR  R15,0         CHANGE COUNT FOR TR                        00009180
  852.          EX    R15,TRNASC    DO UP TO 256 BYTES                         00009190
  853.          N     R15,=F'-256'  DEDUCT COUNT JUST DONE                     00009200
  854.          BNZ   ASCTLP        LOOP IF MORE TO DO                         00009210
  855.          SR    R0,R2         GET BLOCK LENGTH AGAIN                     00009220
  856.          BR    R8            DONE, RETURN                               00009230
  857. TRNASC   TR    0(,R14),ATOE  TRANSLATE A BUNCH                          00009240
  858.          SPACE 1                                                        00009250
  859. *------------------------------------------------ PROCESS EBCDIC OPTION 00009260
  860. EBCDIC   TM    FLG2,XXASC    ALREADY SPECIFIED?                         00009270
  861.          BO    ERR340                                                   00009280
  862.          OI    FLG2,XXEBC    SIGNAL IT                                  00009290
  863.          BR    R14           GO ON                                      00009300
  864.          SPACE 1                                                        00009310
  865. *------------------------------------------------- PROCESS ASCII OPTION 00009320
  866. ASCII    TM    FLG2,XXEBC    ALREADY SPECIFIED?                         00009330
  867.          BO    ERR340                                                   00009340
  868.          OI    FLG2,XXASC    SIGNAL IT                                  00009350
  869.          BR    R14           GO ON                                      00009360
  870.          SPACE 1                                                        00009370
  871. *--------------------------------------------------PROCESS BLOCK OPTION 00009380
  872. BLKSIZE  DS    0H                                                       00009390
  873.          BAL   R8,CONV       CONVERT THE VALUE                          00009400
  874. LTR00    LTR   R0,R0         VALUE SPECIFIED?                       1.2 00009410
  875.          BNPR  R14           NO, SKIP IT                            1.2 00009420
  876.          STH   R0,DCBBLKSI   SAVE VALUE                                 00009430
  877.          BR    R14           PARSE NEXT TOKEN                           00009440
  878.          SPACE 1                                                        00009450
  879. *------------------------------------------------PROCESS REBLOCK OPTION 00009460
  880. REBLOCK  BAL   R8,CONV       CONVERT THE VALUE                      1.3 00009470
  881.          LR    R6,R0         SAVE VALUE                             1.3 00009480
  882.          AH    R0,=Y(7+4)    ROUND UP AND ALSO NEED 4 EXTRA         1.3 00009490
  883.          SRL   R0,3          CONVERT TO DBLWRD COUNT                1.3 00009500
  884.          ST    R0,REBDWDS    SAVE SIZE                              1.3 00009510
  885.          DMSFREE DWORDS=(0),ERR=ERR283                              1.3 00009520
  886.          ST    R1,REBBUF     SAVE PTR TO BUFFER                     1.3 00009530
  887.          AR    R6,R1         END OF BUFFER                          1.3 00009540
  888.          XC    0(4,R1),0(R1) CLEAR OUT BDW                          1.3 00009550
  889.          LA    R4,4(,R1)     PTR TO SPACE FOR A RECORD              1.3 00009560
  890.          LR    R5,R4         ALSO CURRENT PTR                       1.3 00009570
  891.          STM   R4,R6,REBREC  SAVE PTRS                              1.3 00009580
  892.          BR    R14           PARSE NEXT TOKEN                       1.3 00009590
  893.          SPACE 1                                                        00009600
  894. *--------------------------------------------------PROCESS LRECL OPTION 00009610
  895. LRECL    DS    0H                                                       00009620
  896.          BAL   R8,CONV       CONVERT THE VALUE                          00009630
  897.          LTR   R0,R0         VALUE SPECIFIED?                       1.2 00009640
  898.          BNPR  R14           NO, SKIP IT                            1.2 00009650
  899.          STH   R0,DCBLRECL   SAVE VALUE                                 00009660
  900.          BR    R14           PARSE NEXT TOKEN                           00009670
  901.          SPACE 1                                                        00009680
  902. *-----------------------------------------------PROCESS EOT/EOF OPTIONS 00009690
  903. RPTALL   LA    R0,4095       'LARGE' NUMBER OF FILES                1.1 00009700
  904.          B     RPTSET                                               1.1 00009710
  905. RPTNUM   BAL   R8,CONV       CONVERT THE VALUE                      1.1 00009720
  906. RPTSET   ST    R0,RPTCNT     SAVE VALUE                             1.1 00009730
  907.          OI    FLG,XXTSL     IMPLIES LABELS                         1.1 00009740
  908.          CLI   OUTFN,C'='    MAKE SURE EXPECTED                     1.1 00009750
  909.          BNE   ERR340        NO                                     1.1 00009760
  910.          BR    R14           PARSE NEXT TOKEN                       1.1 00009790
  911.          SPACE 1                                                        00009800
  912. *---------------------------------------------PROCESS NL/SL/FILE OPTION 00009810
  913. NLTP     TM    FLG,XXTSL     CAN'T HAVE IT BOTH WAYS                    00009820
  914.          BO    ERR340                                                   00009830
  915.          B     TFIL0                                                    00009840
  916. SLTP     OI    FLG,XXTSL                                                00009850
  917. TFIL0    DS    0H                                                       00009860
  918.          CLI   8(R3),C'0'    FOLLOWED BY FILE NUMBER?                   00009880
  919.          BLR   R14           NO                                         00009890
  920.          CLI   8(R3),C'9'                                               00009900
  921.          BHR   R14           NO                                         00009910
  922. TFILE    BAL   R8,CONV       CONVERT TO BINARY                          00009920
  923.          ST    R0,LFIL       SAVE FILE NUMBER                           00009930
  924.          CVD   R0,DEC                                                   00009940
  925.          OI    DEC+7,15      SET ZONE                                   00009950
  926.          UNPK  TAPFIL,DEC    KEEP FORMATTED COPY                        00009960
  927.          BR    14                                                       00009970
  928.          SPACE 1                                                    1.4 00009971
  929. *------------------------------------------------ PROCESS PREFIX OPTION 00009972
  930. PREFIX   DS    0H                                                   1.4 00009973
  931.          BAL   R1,TSTDLM     CHECK VALUE PRESENT                    1.4 00009974
  932.          MVC   PRFSTR,8(R3)  SAVE THE VALUE                         1.4 00009975
  933.          LA    R3,8(,R3)     ADVANCE SCAN POINTER                   1.4 00009976
  934.          BR    R14           CONTINUE OPTION SCAN                   1.4 00009977
  935.          SPACE 1                                                        00009980
  936. *--------------------------------------------------PROCESS RECFM OPTION 00009990
  937. RECFM    DS    0H                                                       00010000
  938.          BAL   R1,TSTDLM     CHECK VALUE PRESENT                        00010010
  939.          LA    R1,8          TOKEN SIZE                                 00010020
  940.          LA    R4,LRECFM     SET UP FOR BXLE                            00010030
  941.          LA    R5,RECFMB     DITTO                                      00010040
  942.          MVI   DCBRECFM,0    CLEAR INPUT RECFM                          00010050
  943. RECFM1   DS    0H                                                       00010060
  944.          LA    R7,RECFMA     POINT TO LOOKUP TABLE                      00010070
  945.          IC    R15,7(R1,R3)  GET CHARACTER OF RECFM                     00010080
  946. RECFM2   DS    0H                                                       00010090
  947.          CLM   R15,1,0(R7)   IS BYTE IN TABLE?                          00010100
  948.          BE    RECFM3        FOUND                                      00010110
  949.          BXLE  R7,R4,RECFM2  LOOP                                       00010120
  950.          B     ERR308        ILLEGAL RECFM                              00010130
  951. RECFM3   DS    0H                                                       00010140
  952.          IC    R15,DCBRECFM  GET CURRENT FORMAT                         00010150
  953.          EX    R15,RECFM5    LEGAL COMBINATION?                         00010160
  954.          BNZ   ERR308        NO                                         00010170
  955.          OC    DCBRECFM,2(R7) SET DCB FLAGS                             00010180
  956.          BCT   R1,RECFM1     LOOP OVER VALUE TOKEN                      00010190
  957.          TM    DCBRECFM,DCBRECU   F/V/U IN VALUE?                       00010200
  958.          BZ    ERR308        NO, BAD                                    00010210
  959.          LA    R3,8(,R3)     ADVANCE OPTION POINTER                     00010220
  960.          BR    R14           RETURN                                     00010230
  961. RECFM5   TM    1(R7),0       MASK FROM R15                              00010240
  962.          SPACE 1                                                        00010250
  963. *------------------------------------------------ PROCESS VOLUME OPTION 00010260
  964. VOLSER   DS    0H                                                       00010270
  965.          BAL   R1,TSTDLM     CHECK VALUE PRESENT                        00010280
  966.          MVC   VOLUME,8(R3)  SAVE THE VALUE                             00010290
  967.          LA    R3,8(,R3)     ADVANCE SCAN POINTER                       00010300
  968.          OI    FLG,XXTSL                                                00010310
  969.          BR    R14           CONTINUE OPTION SCAN                       00010320
  970.          SPACE 1                                                        00010330
  971. *------------------------------------------------ PROCESS DSNAME OPTION 00010340
  972. DSNAME   DS    0H                                                       00010350
  973.          BAL   R1,TSTDLM     CHECK VALUE PRESENT                        00010360
  974.          LA    R6,DSN        POINT TO OUTPUT                            00010370
  975.          LA    R5,L'DSN+1    LOAD MAX LENGTH + 1                        00010380
  976.          MVI   TRT+C'.',0    DON'T EXPECT ANY DOTS                      00010390
  977. DSNAME1  DS    0H                                                       00010400
  978.          LA    R4,8(,R3)     POINT TO NEXT INDEX                        00010410
  979.          LA    R1,8(,R4)     POINT PAST TOKEN                           00010420
  980.          TRT   0(8,R4),TRT   FIND BLANK (IF ANY)                        00010430
  981.          SR    R1,R4         GET LENGTH TO MOVE                         00010440
  982.          LR    R7,R1         COPY LENGTH                                00010450
  983.          MVCL  R6,R4         COPY INDEX TO DSN FIELD                    00010460
  984.          LTR   R5,R5         TEST REMAINING DSN LENGTH                  00010470
  985.          BNH   ERR017        BAD IF NONE LEFT                           00010480
  986.          LA    R3,8(,R3)     POINT TO NEXT INDEX                        00010490
  987.          CLI   8(R3),X'FF'   IS THERE ONE?                              00010500
  988.          BE    DSNAME2       NO                                         00010510
  989.          MVI   0(R6),C'.'    INSERT DELIMITER                           00010520
  990.          LA    R6,1(,R6)     INCREMENT POINTER TO DSN                   00010530
  991.          BCT   R5,DSNAME1    DECREMENT REMAINING LENGTH                 00010540
  992.          B     ERR017        NONE LEFT                                  00010550
  993. DSNAME2  DS    0H                                                       00010560
  994.          LA    R0,DSN        POINT TO DSNAME FIELD                      00010570
  995.          SH    R6,=H'17'     BACK UP 17 FROM END OF NAME                00010580
  996.          CR    R6,R0         NAME LT 17 CHARACTERS?                     00010590
  997.          BNL   *+6           AT LEAST 17, USE LAST 17                   00010600
  998.          LR    R6,R0         SHORTER THAN 17, USE FIRST 17              00010610
  999.          ST    R6,ADSN       SAVE PTR TO NAME FOR COMPARISON            00010620
  1000.          B     ENDOPT        THROUGH WITH OPTIONS                       00010630
  1001.          SPACE 1                                                        00010640
  1002. *-------------------------------------------------- CONVERT CHAR->FIXED 00010650
  1003. CONV     DS    0H                                                       00010660
  1004.          BAL   R1,TSTDLM     CHECK VALUE PRESENT                        00010670
  1005.          LA    R1,8(,R3)     POINT TO VALUE                             00010680
  1006.          LA    R15,8         LOAD TOKEN LENGTH                          00010690
  1007.          SR    R0,R0         CLEAR RESULT REG                           00010700
  1008. CONV1    DS    0H                                                       00010710
  1009.          CLI   0(R1),C' '    END OF VALUE?                              00010720
  1010.          BE    CONV2         YES                                        00010730
  1011.          CLI   0(R1),C'0'    LEGAL?                                     00010740
  1012.          BL    ERR308        NO                                         00010750
  1013.          CLI   0(R1),C'9'    LEGAL?                                     00010760
  1014.          BH    ERR308        NO                                         00010770
  1015.          MH    R0,=H'10'     INCREMENT TOTAL                            00010780
  1016.          IC    R4,0(,R1)     LOAD THE BYTE                              00010790
  1017.          N     R4,=F'15'     GET BINARY VALUE                           00010800
  1018.          AR    R0,R4         ADD TO TOTAL                               00010810
  1019.          LA    R1,1(,R1)     POINT TO NEXT BYTE                         00010820
  1020.          BCT   R15,CONV1     LOOP OVER TOKEN                            00010830
  1021. CONV2    DS    0H                                                       00010840
  1022.          LTR   R0,R0                                                    00010850
  1023.          BP    CONV9         POSITIVE VALUE IS OK                       00010860
  1024.          TM    FLG,XXLAB     READING TAPE LABEL?                    1.2 00010870
  1025.          BZ    ERR308        NO, REPORT ERROR                       1.2 00010880
  1026.          CLC   LTR00,0(R8)   DOES THE CALLER CHECK THE VALUE?       1.2 00010890
  1027.          BNE   ERR308        NO, REPORT ERROR                       1.2 00010900
  1028. CONV9    LA    R3,8(,R3)     POINT TO NEXT TOKEN                        00010910
  1029.          BR    R8            RETURN                                     00010920
  1030.          SPACE 1                                                        00010930
  1031. *------------------------------------------------CHECK FOR OPTION VALUE 00010940
  1032. TSTDLM   DS    0H                                                       00010950
  1033.          CLI   8(R3),X'FF'   FENCE?                                     00010960
  1034.          BE    ERR095        BAD                                        00010970
  1035.          CLI   8(R3),C')'    END OF OPTIONS?                            00010980
  1036.          BE    ERR095        BAD                                        00010990
  1037.          BR    R1            OK                                         00011000
  1038.          SPACE 1                                                        00011010
  1039. *----------------------------------------------EXTRACT FILE ID FROM DSN 00011020
  1040. *  ENTER WITH R0->NAME, R2->BUFFER, R8=RETURN ADR                       00011030
  1041. *  NAME RUNS TO FIRST BLANK (44 CHARS MAX)                              00011040
  1042. *  MUST BE CAREFUL TO PRESERVE R2                                       00011050
  1043. GETFID   ST    R2,OUTBUFF    IN CASE NOT SAVED YET                      00011060
  1044.          CLI   OUTFN,C'='    NEED FILE ID?                              00011070
  1045.          BNE   GTFDUN        NO, JUST ERASE ANY OLD FILE                00011080
  1046.          LTR   R3,R0         PTR TO DSN                                 00011090
  1047.          BZ    ERR019                                                   00011100
  1048.          MVI   TRT+C'.',0    JUST LOOK FOR BLANKS                       00011110
  1049.          LA    R1,L'DSN(,R3) IN CASE NAME IS FULL-LENGTH                00011120
  1050.          TRT   0(L'DSN,R3),TRT  FIND 1ST BLANK, IF ANY                  00011130
  1051.          SR    R1,R3         NAME LENGTH                                00011140
  1052.          BNP   ERR019R       NOTHING                                    00011150
  1053.          MVI   TRT+C'.',1    NOW LOOK FOR DOTS                          00011160
  1054.          LR    R5,R1         COPY LENGTH                                00011170
  1055.          BCTR  R5,0                                                     00011180
  1056. TOKSET   XC    PTBFR(12),PTBFR  CLEAR TOKEN PTRS                        00011190
  1057. TOKLP    MVC   PTBFR,PTBFR+4 SHIFT PREVIOUS PTRS                        00011200
  1058.          LA    R1,1(R5,R3)   END OF NAME                                00011210
  1059.          EX    R5,FCHAR      LOOK FOR DOT                               00011220
  1060.          SR    R1,R3         TOKEN LENGTH                               00011230
  1061.          BNP   TOKLQ         NULL, SKIP THIS ONE                        00011240
  1062.          STC   R1,PTBFL      LENGTH OF LAST TOKEN                       00011250
  1063.          STCM  R3,7,PTBFL+1  AND ADR                                    00011260
  1064. TOKLQ    LA    R1,1(,R1)     ALLOW FOR DOT                              00011270
  1065.          AR    R3,R1         ADVANCE PTR                                00011280
  1066.          SR    R5,R1         DECREMENT LENGTH                           00011290
  1067.          BNM   TOKLP                                                    00011300
  1068.          CLI   PTBFR+4,0     AT LEAST 2 TOKENS?                         00011310
  1069.          BNE   TOKFM         YES, OK                                1.3 00011320
  1070.          CLI   PTBFL,0       AT LEAST 1?                            1.3 00011330
  1071.          BE    ERR019R       NO, TOO BAD                                00011340
  1072.          MVC   PTBFR(4),PTBFL SHIFT BACK THE PTR: FOR FILENAME      1.3 00011350
  1073.          MVC   OUTFT,=C'TAPEFILE'  USE DEFAULT FILETYPE             1.3 00011360
  1074.          B     TOKNT2                                               1.3 00011370
  1075. TOKFM    TM    FLG2,XXFMH    FM NUM IN SEPARATE FIELD?              1.1 00011380
  1076.          BO    TOKNT         YES, FM NOT IN DSN                     1.1 00011390
  1077.          CLI   PTBFL,2       LAST TOKEN LENGTH=2?                   1.1 00011400
  1078.          BNE   TOKNT         NO, ISN'T FM                           1.1 00011410
  1079.          ICM   R4,7,PTBFL+1  MAYBE FM, GET ADR                      1.1 00011420
  1080.          CLI   0(R4),C'A'    ALPHABETIC?                            1.1 00011430
  1081.          BL    TOKNT         CAN'T BE FM                            1.1 00011440
  1082.          CLI   0(R4),C'Z'    ALPHABETIC?                            1.1 00011450
  1083.          BH    TOKNT         CAN'T BE FM                            1.1 00011460
  1084.          CLI   1(R4),C'0'    VALID NUMBER?                          1.1 00011470
  1085.          BL    TOKNT                                                1.1 00011480
  1086.          CLI   1(R4),C'6'                                           1.1 00011490
  1087.          BH    TOKNT         NO GOOD                                1.1 00011500
  1088.          CLI   PTBFR,0       AT LEAST 3 TOKENS?                     1.1 00011510
  1089.          BNE   GTFFM         YES, GOT FM                            1.1 00011520
  1090. TOKNT    MVC   PTBFR,PTBFR+4 USE JUST LAST TWO TOKENS               1.1 00011530
  1091. TOKNT2   MVI   PTBFL,0       NO FILEMODE SPECIFIED HERE             1.2 00011540
  1092. GTFFM    CLI   PTBFL,2       GOT FM?                                    00011550
  1093.          BNE   GTFFN         NO, JUST COPY FN/FT                        00011560
  1094.          TM    FLG2,XXFMN    FM NUMBER ALREADY SET?                 1.1 00011570
  1095.          BO    GTFFN         YES, USE THAT                          1.1 00011580
  1096.          MVC   OUTFM+1(1),1(R4)                                         00011590
  1097.          OI    FLG2,XXFMN    NOW IT'S SET                           1.3 00011600
  1098. GTFFN    LA    R0,OUTFN      OUTPUT PTR                                 00011610
  1099.          L     R5,=X'40000000'                                          00011620
  1100.          ICM   R4,7,PTBFR+1  GET TOKEN ADR                              00011630
  1101.          IC    R5,PTBFR      AND LENGTH                                 00011640
  1102.          LA    R1,8                                                     00011650
  1103.          MVCL  R0,R4         COPY WITH PADDING                          00011660
  1104.          CLI   PTBFR+4,0     ANY FILETYPE?                          1.3 00011670
  1105.          BE    GTFDUN        NO, FINISHED                           1.3 00011680
  1106.          ICM   R4,7,PTBFR+5  GET FT TOKEN ADR                           00011690
  1107.          IC    R5,PTBFR+4    AND LENGTH                                 00011700
  1108.          LA    R1,8                                                     00011710
  1109.          MVCL  R0,R4         COPY WITH PADDING                          00011720
  1110. GTFDUN   TM    FLG2,XXFMN    FM NUMBER SPECIFIED?                   1.3 00011730
  1111.          BO    GTFOPN        YES, FINE                              1.3 00011740
  1112.          ICM   R2,15,REBBUF  NO, SEE IF REBLOCK SPECIFIED           1.3 00011750
  1113.          BZ    GTFOPN        NO, USE DEFAULT                        1.3 00011760
  1114.          MVI   OUTFM+1,C'4'  YES, SWITCH TO FM 4                    1.3 00011770
  1115. GTFOPN   L     R2,OUTBUFF    RESTORE                                1.3 00011780
  1116.          FSCLOSE FSCB=OUT    CLOSE THE OUTPUT FILE                      00011790
  1117.          TM    FLG2,XXAPP    APPENDING TO PREVIOUS FILE?            1.2 00011800
  1118.          BOR   R8            YES, ALL SET                           1.2 00011810
  1119.          FSERASE FSCB=OUT    NO, ERASE THE OUTPUT FILE                  00011820
  1120.          BR    R8                                                       00011830
  1121. FCHAR    TRT   0(,R3),TRT    FIND DOT                                   00011840
  1122. *---------------------------------------------------------------------- 00011850
  1123. *          EXIT ROUTINE FOR DCB OPEN, ALSO USED BY TAPE SETUP           00011860
  1124. *          ASSUME ALL USUAL BASE REGISTERS                              00011870
  1125. *---------------------------------------------------------------------- 00011880
  1126.          SPACE 1                                                        00011890
  1127. DCBEXIT2 DS    0H                                                       00012160
  1128.          ST    R14,DCBR14    SAVE RETURN ADDRESS                        00012170
  1129.          LH    R0,DCBLRECL   LOAD RECORD LENGTH                         00012180
  1130.          LH    R15,DCBBLKSI  LOAD BLOCKSIZE                             00012190
  1131.          TM    DCBRECFM,DCBRECU  UNDEFINED LENGTH BLOCKS?               00012200
  1132.          BNM   DCBRECUV      YES, OR MAYBE UNKNOWN                      00012210
  1133.          TM    DCBRECFM,DCBRECV  VARYING LENGTH BLOCKS?                 00012220
  1134.          BO    DCBRECUV      YES                                        00012230
  1135.          MVI   OUTFV,C'F'    SET FIXED LENGTH OUTPUT                    00012240
  1136.          LTR   R15,R15       ANY BLOCKSIZE?                             00012250
  1137.          BH    DCB1          YES                                        00012260
  1138.          LTR   R15,R0        USE THE RECORD LENGTH                      00012270
  1139.          BNH   DCBERR        ERROR IF BOTH UNSPECIFIED                  00012280
  1140.          STH   R15,DCBBLKSI  SAVE IN DCB                                00012290
  1141.          B     DCBOK         CONTINUE                                   00012300
  1142. DCB1     DS    0H                                                       00012310
  1143.          LTR   R0,R0         ANY RECORD LENGTH?                         00012320
  1144.          BH    DCB2          YES                                        00012330
  1145.          LR    R0,R15        USE THE BLOCKSIZE                          00012340
  1146.          STH   R0,DCBLRECL   SAVE IN DCB                                00012350
  1147. DCB2     DS    0H                                                       00012360
  1148.          SR    R14,R14       CLEAR FOR DIVIDE                           00012370
  1149.          DR    R14,R0        GET BLOCKING FACTOR                        00012380
  1150.          MR    R14,R0        GET BLKSIZE AS CORRECT MULTIPLE            00012390
  1151.          STH   R15,DCBBLKSI                                             00012400
  1152.          B     DCBOK         RETURN FROM THIS EXIT                      00012410
  1153. DCBRECUV DS    0H                                                       00012420
  1154.          MVI   OUTFV,C'V'    SET VARYING LENGTH OUTPUT                  00012430
  1155.          LA    R14,4         LOAD BDW/RDW LENGTH                        00012440
  1156.          CR    R0,R14        TEST LRECL                                 00012450
  1157.          BH    DCB4          OK                                         00012460
  1158.          LR    R0,R15        MAKE LRECL = BLKSIZE                       00012470
  1159.          SR    R0,R14        SUBTRACT L'BDW                             00012480
  1160.          STH   R0,DCBLRECL   STORE IN DCB                               00012490
  1161. DCB4     DS    0H                                                       00012500
  1162.          CR    R15,R14       TEST BLKSIZE                               00012510
  1163.          BH    DCB5          OK                                         00012520
  1164.          LR    R15,R0        MAKE BLKSIZE = LRECL                       00012530
  1165.          AR    R15,R14       ADD L'BDW                                  00012540
  1166.          STH   R15,DCBBLKSI  STORE IN DCB                               00012550
  1167. DCB5     DS    0H                                                       00012560
  1168.          TM    DCBRECFM,DCBRECDU   RECFM=D?                             00012570
  1169.          BO    DCB6          YES, CHECK LRECL                           00012580
  1170.          TM    DCBRECFM,DCBRECSB  SPANNED RECORDS?                      00012590
  1171.          BO    DCBVS         NO CONECTION BETWEEN LRECL AND BLKSIZE     00012600
  1172.          TM    DCBRECFM,DCBRECU   RECFM=U?                              00012610
  1173.          BO    DCBVS         NO NEED FOR LRECL                          00012620
  1174. DCB6     AR    R0,R14        GET LRECL + 4                              00012630
  1175.          CR    R0,R15        COMPARE WITH BLKSIZE                       00012640
  1176.          BNH   DCBOK         FINE                                       00012650
  1177. DCBERR   DS    0H                                                       00012660
  1178.          OI    FLG,XXERR     INDICATE BAD DCB AT OPEN TIME              00012670
  1179.          B     DCBOK         RETURN AND BOMB OUT                        00012680
  1180. DCBVS    DS    0H                                                       00012690
  1181.          MVI   OUTFM+1,C'4'  SET FILEMODE = 4 IF SPANNED                00012700
  1182. DCBOK    DS    0H                                                       00012710
  1183.          L     R14,DCBR14    RESTORE RETURN ADDRESS                     00012720
  1184.          BR    R14           RETURN TO DMSSOP                           00012730
  1185.          SPACE 1                                                        00012740
  1186. *---------------------------------------------------------------------- 00012890
  1187. *          M E S S A G E S                                              00012900
  1188. *---------------------------------------------------------------------- 00012910
  1189.          SPACE 1                                                        00012920
  1190. NOTTAP   DS    0H                                                       00012925
  1191. ERR001   DS    0H                                                       00012930
  1192.          LINEDIT TEXT='SPROSC771E MISSING TAPE ID',DISP=ERRMSG,DOT=NO   00012940
  1193.          LA    R15,771       RC = 771                                   00012960
  1194.          B     EXIT          RETURN                                     00012970
  1195. ERR003   DS    0H                                                   1.3 00012980
  1196.          LINEDIT TEXT='SPROSC773E REBLOCK SIZE TOO SMALL',          1.3+00012990
  1197.                DISP=ERRMSG,DOT=NO                                   1.3 00013000
  1198.          LA    R15,773       RC = 773                               1.3 00013010
  1199.          B     EXIT          RETURN                                 1.3 00013020
  1200. ERR083   DS    0H                                                       00013030
  1201.          LINEDIT TEXT='SPROSC083E MISSING FILEID',DISP=ERRMSG,DOT=NO    00013040
  1202.          LA    R15,083       RC = 083                                   00013050
  1203.          B     EXIT          RETURN                                     00013060
  1204. ERR098   DS    0H                                                       00013070
  1205.          LINEDIT TEXT='SPROSC098E ILLEGAL PARAMETER ''........''',     +00013080
  1206.                SUB=(CHARA,0(R3)),DISP=ERRMSG,DOT=NO                     00013090
  1207.          LA    R15,098       RC = 098                                   00013100
  1208.          B     EXIT          RETURN                                     00013110
  1209. ERR071   DS    0H                                                       00013220
  1210.          LINEDIT TEXT='SPROSC071E UNKNOWN OPTION ''........''',        +00013230
  1211.                SUB=(CHARA,(R3)),DISP=ERRMSG,DOT=NO                      00013240
  1212.          LA    R15,071       RC = 071                                   00013250
  1213.          B     EXIT          RETURN                                     00013260
  1214. ERR095   DS    0H                                                       00013270
  1215.          LINEDIT TEXT='SPROSC095E NO VALUE SUPPLIED FOR ''........'' OP+00013280
  1216.                TION',SUB=(CHARA,(R6)),DISP=ERRMSG,DOT=NO                00013290
  1217.          LA    R15,095                                                  00013300
  1218.          B     OPTERRZ       RETURN                                     00013310
  1219. ERR308   LINEDIT TEXT='SPROSC308E ILLEGAL ........ VALUE ''........''',+00013320
  1220.                SUB=(CHARA,(R6),CHARA,8(R3)),DISP=ERRMSG,DOT=NO,RENT=NO  00013330
  1221.          LA    R15,308                                                  00013340
  1222.          B     OPTERRZ       RETURN                                     00013350
  1223. ERR340   LINEDIT TEXT='SPROSC340E INCONSISTENT OPTION ''........''',   +00013360
  1224.                SUB=(CHARA,(R6)),DISP=ERRMSG,DOT=NO                      00013370
  1225.          LA    R15,340                                                  00013380
  1226. OPTERRZ  DS    0H                                                       00013390
  1227.          TM    FLG,XXLAB     TAPE LABEL IN PROGRESS                     00013400
  1228.          BZ    EXIT          NO, JUST RETURN                            00013410
  1229. ERR009   DS    0H                                                       00013420
  1230.          LINEDIT TEXT='SPROSC779E INVALID TAPE LABELS',                +00013430
  1231.                DISP=ERRMSG,DOT=NO                                       00013440
  1232.          LA    R15,779       RETURN CODE                                00013450
  1233.          B     ERREXIT       FREE BUFFER, THEN RETURN                   00013460
  1234. ERR014   DS    0H                                                       00013470
  1235.          LINEDIT TEXT='SPROSC784E MISSING OR EMPTY FILE ON INPUT TAPE',+00013480
  1236.                DISP=ERRMSG,DOT=NO                                       00013490
  1237.          LA    R15,784       RETURN CODE                                00013500
  1238.          B     ERREXIT       FREE BUFFER, THEN RETURN                   00013510
  1239. CKVOLSER MVC   LABVOL,0(R4)  COPY ACTUAL VOLUME NAME                    00013520
  1240.          CLI   VOLUME,C' '   VERIFICATION OF SERIAL REQUESTED?          00013530
  1241.          BER   R8            NO                                         00013540
  1242.          CLC   VOLUME,0(R4)  YES, CHECK IT                              00013550
  1243.          BER   R8            OK                                         00013560
  1244.          LINEDIT TEXT='SPROSC785E VOLUME LABEL ''......'' DOES NOT MATC+00013570
  1245.                H ''VOLID ......'' OPTION',DISP=ERRMSG,DOT=NO,RENT=NO,  +00013580
  1246.                SUB=(CHARA,(R4),CHARA,VOLUME)                            00013590
  1247.          LA    R15,785       RETURN CODE                                00013600
  1248.          B     ERREXIT       FREE BUFFER, THEN RETURN                   00013610
  1249. ERR016   DS    0H                                                       00013620
  1250.          LINEDIT TEXT='SPROSC786E DSNAME ''.................'' DOES NOT+00013630
  1251.                 MATCH ''DSN .................'' OPTION',DISP=ERRMSG,   +00013640
  1252.                SUB=(CHARA,TAPDSN,CHARA,DSN),DOT=NO,RENT=NO              00013650
  1253.          LA    R15,786       RETURN CODE                                00013660
  1254.          B     ERREXIT       FREE BUFFER, THEN RETURN                   00013670
  1255. ERR017   DS    0H                                                       00013680
  1256.          LINEDIT TEXT='SPROSC787E DSNAME VALUE LONGER THAN 44 BYTES',  +00013690
  1257.                DISP=ERRMSG,DOT=NO                                       00013700
  1258.          LA    R15,787       RETURN CODE                                00013710
  1259.          B     EXIT                                                     00013720
  1260. ERR018   LINEDIT TEXT='SPROSC788E SPANNED OR INVALID RECORD FOUND IN IN+00013730
  1261.                PUT FILE',DISP=ERRMSG,DOT=NO                             00013740
  1262.          LA    R15,788       RETURN CODE                                00013750
  1263.          B     ERREXIT                                                  00013760
  1264. ERR019R  L     R2,OUTBUFF    RESTORE BUFFER PTR                         00013770
  1265. ERR019   LINEDIT TEXT='SPROSC789E NO DSN/FID AVAILABLE FOR INPUT FILE',+00013780
  1266.                DISP=ERRMSG,DOT=NO                                       00013790
  1267.          LA    R15,789                                                  00013800
  1268. ERREXIT  ST    R15,RETC      ... AND STORE                              00013810
  1269.          B     CLOSE2        FREE BUFFER, THEN RETURN                   00013820
  1270. ERR283   LINEDIT TEXT='SPROSC283E INSUFFICIENT STORAGE FOR BUFFERS',DOT+00013830
  1271.                =NO,DISP=ERRMSG                                          00013840
  1272.          LA    R15,283                                                  00013850
  1273.          B     EXIT                                                     00013860
  1274.          SPACE 1                                                        00013870
  1275. *-------------------------------------------------- OPTION LOOKUP TABLE 00013880
  1276. *          FORM: C'OPTION',AL1(MIN LENGTH - 1),AL3(PROCESSOR)           00013890
  1277. OPTTAB1  DC    C'RECFM   ',X'4',AL3(RECFM)                              00013900
  1278.          DC    C'FORMAT  ',X'1',AL3(RECFM)                              00013910
  1279.          DC    C'BLOCK   ',X'1',AL3(BLKSIZE)                            00013920
  1280.          DC    C'BLKSIZE ',X'4',AL3(BLKSIZE)                            00013930
  1281.          DC    C'LRECL   ',X'4',AL3(LRECL)                              00013940
  1282.          DC    C'REBLOCK ',X'2',AL3(REBLOCK)                        1.3 00013950
  1283.          DC    C'ASCII   ',X'2',AL3(ASCII)                              00013960
  1284.          DC    C'EBCDIC  ',X'2',AL3(EBCDIC)                             00013970
  1285.          DC    C'PREFIX  ',X'2',AL3(PREFIX)                         1.4 00013975
  1286.          DC    C'FILE    ',X'3',AL3(TFILE)                              00013980
  1287.          DC    C'NL      ',X'1',AL3(NLTP)                               00013990
  1288. OPTSL    DC    C'SL      ',X'1',AL3(SLTP)                               00014000
  1289.          DC    C'EOT     ',X'2',AL3(RPTALL)                         1.1 00014010
  1290.          DC    C'EOF     ',X'2',AL3(RPTNUM)                         1.1 00014020
  1291.          DC    C'VOLUME  ',X'2',AL3(VOLSER)                             00014030
  1292.          DC    C'VOLID   ',X'4',AL3(VOLSER)                             00014040
  1293. OPTTAB2  EQU   *                                                        00014050
  1294.          DC    C'DSNAME  ',X'2',AL3(DSNAME)                             00014060
  1295. LOPTTAB  EQU   *-OPTTAB2                                                00014070
  1296.          SPACE 1                                                        00014080
  1297. *------------------------------------------------------LABEL TYPE TABLE 00014090
  1298. LBTAB    DC    C'VOL12',AL1(TLV1-TL0,TLV2-TL0,0,0)                  1.3 00014100
  1299.          DC    C'HDR14',AL1(TLH1-TL0,TLH2-TL0,TLH2-TL0,TLH2-TL0)    1.3 00014110
  1300.          DC    C'EOF14',AL1(TLE1-TL0,TLE2-TL0,TLE2-TL0,TLE2-TL0)    1.3 00014120
  1301. LBTABZ   DS    0X            LAST ITEM IN TABLE                         00014130
  1302.          DC    C'EOV14',AL1(TLE1-TL0,TLE2-TL0,TLE2-TL0,TLE2-TL0)    1.3 00014140
  1303. LLBT     EQU   *-LBTABZ      ITEM LENGTH                                00014150
  1304.          SPACE 1                                                        00014160
  1305. *----------------------------------------------------RECFM LOOKUP TABLE 00014170
  1306. *          FORM: C'OPTION',AL1(FORBIDDEN-BITS,BITS-TO-SET)              00014180
  1307. RECFMA   DC    AL1(C' ',0,0)                                            00014190
  1308.          DC    AL1(C'F',DCBRECU,DCBRECF)                                00014200
  1309.          DC    AL1(C'V',DCBRECU,DCBRECV)                                00014210
  1310.          DC    AL1(C'U',DCBRECU,DCBRECU)                                00014220
  1311.          DC    AL1(C'D',DCBRECU,DCBRECDU)                               00014230
  1312.          DC    AL1(C'A',DCBRECCC,DCBRECCA)                              00014240
  1313.          DC    AL1(C'M',DCBRECCC,DCBRECCM)                              00014250
  1314.          DC    AL1(C'R',DCBRECBR+DCBRECSB,DCBRECBR+DCBRECSB)            00014260
  1315.          DC    AL1(C'B',DCBRECBR,DCBRECBR)                              00014270
  1316. RECFMB   DC    AL1(C'S',DCBRECSB,DCBRECSB)                              00014280
  1317. LRECFM   EQU   *-RECFMB  LENGTH OF TABLE ENTRY                          00014290
  1318.          SPACE 1                                                        00014300
  1319. *------------------------------------------------ DCB OPTIONS FROM TAPE 00014310
  1320. TLBPRM   DC    CL8'RECFM'                                               00014320
  1321. TLBRCF   DC    CL3' ',CL5' '                                            00014330
  1322.          DC    CL8'BLOCK'                                               00014340
  1323. TLBBLK   DC    CL5' ',CL3' '                                            00014350
  1324.          DC    CL8'LRECL'                                               00014360
  1325. TLBLRC   DC    CL5' ',CL3' '                                            00014370
  1326.          DC    X'FF'         END OF 'OPTIONS'                           00014380
  1327.          SPACE 1                                                        00014390
  1328. *---------------------------------------------- ASCII TRANSLATION TABLE 00014400
  1329. ATOE     DC    X'00010203372D2E2F',X'1605250B0C0D0E0F'                  00014410
  1330.          DC    X'101112133C3D3226',X'18193F271C1D1E1F'                  00014420
  1331.          DC    X'405A7F7B5B6C507D',X'4D5D5C4E6B604B61'                  00014430
  1332.          DC    X'F0F1F2F3F4F5F6F7',X'F8F97A5E4C7E6E6F'                  00014440
  1333.          DC    X'7CC1C2C3C4C5C6C7',X'C8C9D1D2D3D4D5D6'                  00014450
  1334.          DC    X'D7D8D9E2E3E4E5E6',X'E7E8E9ADE0BD5F6D'                  00014460
  1335.          DC    X'7981828384858687',X'8889919293949596'                  00014470
  1336.          DC    X'979899A2A3A4A5A6',X'A7A8A9C04FD0A107'                  00014480
  1337. *                            (2ND HALF = 1ST)                           00014490
  1338.          DC    X'00010203372D2E2F',X'1605250B0C0D0E0F'                  00014500
  1339.          DC    X'101112133C3D3226',X'18193F271C1D1E1F'                  00014510
  1340.          DC    X'405A7F7B5B6C507D',X'4D5D5C4E6B604B61'                  00014520
  1341.          DC    X'F0F1F2F3F4F5F6F7',X'F8F97A5E4C7E6E6F'                  00014530
  1342.          DC    X'7CC1C2C3C4C5C6C7',X'C8C9D1D2D3D4D5D6'                  00014540
  1343.          DC    X'D7D8D9E2E3E4E5E6',X'E7E8E9ADE0BD5F6D'                  00014550
  1344.          DC    X'7981828384858687',X'8889919293949596'                  00014560
  1345.          DC    X'979899A2A3A4A5A6',X'A7A8A9C04FD0A107'                  00014570
  1346.          SPACE 1                                                        00014580
  1347. *-------------------------------------------------------- MISCELLANEOUS 00014590
  1348. STOPTR   DS    A             PTR TO EXTRA STORAGE AREA                  00014600
  1349. SAVER14  DS    A             RETURN ADDRESS TO DMSITS                   00014610
  1350. EOBID    DC    X'61FFFF61'   CMS SHORT BLOCK INDICATOR                  00014620
  1351. TRT      DC    64X'00',X'FF',191X'00'  TRT-FOR-BLANK MASK               00014630
  1352. FINDCNT  DC    H'5'          MAXIMUM ALLOWED RETRIES FOR LABELS         00014640
  1353.          SPACE 1                                                        00014650
  1354.          DS    0F                                                       00014680
  1355. *--------------------------------------------------------------- TAPEIO 00014740
  1356. TAPLIST  DC    CL8'TAPEIO'   PLIST FOR TAPE READ                        00014750
  1357. TAPOPRN  DC    CL8'READ'     READ (OR OTHER) CODE                       00014760
  1358. TAPDEV   DS    CL4           TAPN CODE                                  00014770
  1359.          DC    X'00'         DEN/BPI/TRTCH CODE                         00014780
  1360. TAPBUFF  DS    AL3           INPUT BUFFER ADDRESS                       00014790
  1361. TAPSIZE  DC    A(65535)      MAX BLOCK LENGTH                           00014800
  1362. TAPNORD  DC    A(0)          LENGTH ACTUALLY READ                       00014810
  1363.          DC    8X'FF'        FENCE                                      00014820
  1364.          SPACE 1                                                        00014830
  1365. *---------------------------------------------------------- AUX STORAGE 00014850
  1366. STOR     DSECT                                                          00014860
  1367. DCB      DS    XL96          DUMMY DCB                                  00014870
  1368. *          DCB QUANTITIES USED:                                         00014900
  1369. DCBRECFM EQU   DCB+36,1      RECORD FORMAT FLAGS:                       00014910
  1370. DCBRECU  EQU   X'C0'          UNDEFINED                                 00014920
  1371. DCBRECF  EQU   X'80'          FIXED-LENGTH                              00014930
  1372. DCBRECV  EQU   X'40'          VARYING                                   00014940
  1373. DCBRECDU EQU   X'E0'          VARYING ASCII   *** NOT STANDARD ***      00014950
  1374. DCBRECCC EQU   X'06'          CARRIAGE CONTROL MASK                     00014960
  1375. DCBRECCA EQU   X'04'          AMERICAN STANDARD CC                      00014970
  1376. DCBRECCM EQU   X'02'          MACHINE CODE CC                           00014980
  1377. DCBRECBR EQU   X'10'          BLOCKED RECORDS                           00014990
  1378. DCBRECSB EQU   X'08'          SPANNED RECORDS                           00015000
  1379. DCBBLKSI EQU   DCB+62,2      BLOCK SIZE                                 00015040
  1380. DCBLRECL EQU   DCB+82,2      LOGICAL RECORD LENGTH                      00015050
  1381.          SPACE 1                                                        00015060
  1382. ZSTUF    EQU   *             AREA TO ZERO                               00015120
  1383.          SPACE 1                                                        00015130
  1384. *---------------------------------------------------------- OUTPUT FSCB 00015140
  1385. OUT      DS    0F                                                       00015150
  1386. OUTCOMM  DS    CL8                                                      00015160
  1387. OUTFN    DS    CL8           OUTPUT FILE ID                             00015170
  1388. OUTFT    DS    CL8                                                      00015180
  1389. OUTFM    DS    CL2,H                                                    00015190
  1390. OUTBUFF  DS    A             BUFFER PTR                                 00015200
  1391. OUTSIZE  DS    F             DATA LENGTH                                00015210
  1392. OUTFV    DS    C             RECFM                                      00015220
  1393. OUTFLG   DS    X'20'         EPL                                        00015230
  1394. OUTNORD  DS    F             BYTES READ                                 00015240
  1395. OUTAITN  DS    F'0'          WRITE NEXT                                 00015250
  1396. OUTANIT  DS    F             NUMBER OF RECORDS TO WRITE                 00015260
  1397. OUTWPTR  DS    F'0'          WRITE PTR                                  00015270
  1398. OUTRPTR  DS    F'0'          READ PTR                                   00015280
  1399.          SPACE 1                                                        00015290
  1400. *---------------------------------------------------------------- FLAGS 00015300
  1401. FLG      DS    X             FLAGS                                      00015310
  1402. XXERR    EQU   X'40'         ERROR IN DCB CHECKING                      00015330
  1403. XXLAB    EQU   X'20'         READING FROM TAPE LABEL                    00015340
  1404. XXTSL    EQU   X'10'         STANDARD LABEL TAPE                        00015350
  1405. XXOPN    EQU   X'08'         DCB IS CHECKED AND OK                      00015360
  1406. XX1ST    EQU   X'04'         1ST RECORD DONE                            00015370
  1407. XXPM2    EQU   X'02'         FILE ID SPECIFIED                          00015380
  1408. XXPM1    EQU   X'01'         DDNAME/TAPN SPECIFIED                      00015390
  1409.          SPACE 1                                                        00015400
  1410. FLG2     DS    X             MORE FLAGS                                 00015410
  1411. XXEBC    EQU   X'80'         ASCII TRANSLATION NOT NEEDED               00015420
  1412. XXASC    EQU   X'40'         ASCII TRANSLATION NEEDED                   00015430
  1413. XXFMN    EQU   X'20'         USER GAVE FM NUMBER                    1.1 00015440
  1414. XXFMH    EQU   X'10'         FM NUMBER FOUND IN HDR1 LABEL          1.1 00015450
  1415. XXAPP    EQU   X'08'         CONTINUING MULTI-REEL FILE             1.2 00015460
  1416. XXMLT    EQU   X'01'         BLKSIZE ERROR DETECTED                 1.1 00015470
  1417.          SPACE 1                                                        00015480
  1418. CMDFMN   DS    C             FILEMODE NUMBER SPECIFIED IN COMMAND   1.3 00015490
  1419. *-------------------------------------------------------- MISCELLANEOUS 00015500
  1420. DEC      DS    D             TEMP FOR PACK                              00015510
  1421. RETC     DS    A             COMMAND RETURN CODE                        00015520
  1422. RPTCNT   DS    F             NUMBER OF FILES TO READ                1.1 00015530
  1423. REBBUF   DS    A             PTR TO REBLOCK BUFFER, OR ZERO IF NONE 1.3 00015540
  1424. REBREC   DS    A             PTR TO START OF CURRENT RECORD         1.3 00015550
  1425. REBPTR   DS    A             PTR TO NEXT SLOT IN BUFFER             1.3 00015560
  1426. REBEND   DS    A             PTR TO END OF BUFFER                   1.3 00015570
  1427. ZST2     EQU   *             STUFF TO ZERO FOR REPEAT PASS              00015580
  1428. LFIL     DS    F             TAPE FILE NUMBER                           00015590
  1429. DSNPTR   DS    F             PTR TO DISK/TAPE DSN                       00015600
  1430. ZST2L    EQU   *-ZST2                                                   00015610
  1431. ZLEN     EQU   *-ZSTUF                                                  00015620
  1432.          SPACE 1                                                        00015630
  1433. ADSN     DS    A             POINTER TO LAST 17 BYTES OF DSN            00015640
  1434. PRFSTR   DS    CL8           DSN SELECTION PREFIX                   1.4 00015655
  1435. DCBR14   DS    A             RETURN ADDRESS TO DMSSOP                   00015660
  1436. WRDRET   DS    F             RETURN ADR SAVED DURING REBLOCKING     1.3 00015670
  1437. REBDWDS  DS    F             LENGTH OF REBLOCK BUFFER, IF ANY       1.3 00015680
  1438. PTBFR    DS    XL8           PTRS TO TOKENS IN DSNAME                   00015690
  1439. PTBFL    DS    XL4           PTR TO LAST TOKEN (MUST FOLLOW PTBFR)      00015700
  1440. SPNFLGS  DS    X             BLOCK SPANNING FLAGS FOR REBLOCKING    1.3 00015710
  1441. LABTYP   DS    CL4           TEMPORARY FOR TAPE LABEL SCAN              00015720
  1442. DDNAME   DS    CL8           INPUT DDNAME                               00015725
  1443. *          AREA TO BE INITIALIZED WITH BLANKS                           00015730
  1444. TAPDSN   DS    CL17,C        DSNAME FIELD FROM 'HDR1' TAPE LABEL        00015740
  1445. TAPGEN   DS    CL6           GENERATION NO. FROM 'HDR1'                 00015750
  1446. DSN      DS    CL44          DSNAME FOR VERIFICATION                    00015760
  1447. TAPFIL   DS    CL4,C         UNPACKED FILE NUMBER FROM HEADER LABEL     00015770
  1448. VOLUME   DS    CL6           TAPE VOLUME SERIAL FOR VERIFICATION        00015780
  1449. LABVOL   DS    CL6           SAVED VOLUME NAME FROM LABEL               00015790
  1450. LINIT    EQU   *-TAPDSN-1    LENGTH TO CLEAR                            00015800
  1451. LSTOR    EQU   (*+8-STOR)/8  LENGTH OF STORAGE IN DWORDS                00015810
  1452.          SPACE 1                                                        00015820
  1453.          NUCON ,             CMS PAGE 0                                 00015850
  1454.          REGEQU ,            SYMBOLIC REGISTER EQUATES                  00015860
  1455.          END   SPROSC                                                   00015880
  1456.