home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / ibmtsochicago / tsoker.asm < prev    next >
Assembly Source File  |  2020-01-01  |  210KB  |  2,596 lines

  1. KERMIT   TITLE     'KERMIT-IBM'                                         TSO00010
  2.          MACRO                                                          TSO00020
  3.          REGISTER                                                       TSO00030
  4.          LCLA  &N                                                       TSO00040
  5.          SPACE                                                          TSO00050
  6. *********************************************************************** TSO00060
  7. *              GENERAL REGISTER EQUATES                               * TSO00070
  8. *********************************************************************** TSO00080
  9.          SPACE                                                          TSO00090
  10. &N       SETA  0                                                        TSO00100
  11. .LOOP    ANOP                                                           TSO00110
  12. R&N      EQU   &N                                                       TSO00120
  13.          AIF   (&N EQ 15).OUT                                           TSO00130
  14. &N       SETA  &N+1                                                     TSO00140
  15.          AGO   .LOOP                                                    TSO00150
  16. .OUT     ANOP                                                           TSO00160
  17.          SPACE                                                          TSO00170
  18.          MEND                                                           TSO00180
  19.          MACRO                                                          TSO00190
  20. &LABEL   BINCVRT ®,&AREA,&DBLWRK                                     TSO00200
  21. .*                                                                      TSO00210
  22. .*  CONVERT THE CONTENTS OF ® TO DECIMAL AND EDIT INTO &AREA.        TSO00220
  23. .*  &AREA IS A FIELD OF LENGTH SIX THAT WILL CONTAIN THE INTEGER        TSO00230
  24. .*  STRING WITH LEADING BLANKS SUPRESSED.  &DBLWRK IS A DOUBLE          TSO00240
  25. .*  WORK SPACE.                                                         TSO00250
  26. .*                                                                      TSO00260
  27. &LABEL   CVD   ®,&DBLWRK                                             TSO00270
  28.          MVC   &AREA.(6),=X'402020202120'                               TSO00280
  29.          ED    &AREA.(6),&DBLWRK+5                                      TSO00290
  30.          MEND                                                           TSO00300
  31.          MACRO                                                          TSO00310
  32. &LAB     WRTERM &MSG                                                    TSO00320
  33.          LCLC   &MS                                                     TSO00330
  34.          LCLA   &LN                                                     TSO00340
  35. &MS      SETC  '&MSG'                                                   TSO00350
  36. &LN      SETA  K'&MS                                                    TSO00360
  37. &LN      SETA  &LN-2                                                    TSO00370
  38. &LAB     TPUT =C&MS,&LN                                                 TSO00380
  39.          MEND                                                           TSO00390
  40.          MACRO                                                          TSO00400
  41. &LAB     PROMPT &MSG                                                    TSO00410
  42.          LCLC   &MS                                                     TSO00420
  43.          LCLA   &LN                                                     TSO00430
  44. &MS      SETC  '&MSG'                                                   TSO00440
  45. &LN      SETA  K'&MS                                                    TSO00450
  46. &LN      SETA  &LN-2                                                    TSO00460
  47. &LAB     TPUT =C&MS,&LN,ASIS                                            TSO00470
  48.          MEND                                                           TSO00480
  49.          MACRO                                                          TSO00490
  50.          RDTERM &BUFF                                                   TSO00500
  51.          TGET &BUFF,130                                                 TSO00510
  52.          MEND                                                           TSO00520
  53. KERMIT   CSECT                                                          TSO00530
  54. *                                                                       TSO00540
  55. *         ----------------------------------------                      TSO00550
  56. *                                                                       TSO00560
  57. *  KERMIT/TSO   -                                                       TSO00570
  58. *                                                                       TSO00580
  59. *  Kermit - KL10 Error-free Reciprocol Micro Interface Transfer         TSO00590
  60. *  IBM Version 1.0                                                      TSO00600
  61. *                                                                       TSO00610
  62. *  This program is the IBM MVS/TSO side of a file transfer system.      TSO00620
  63. *  It can be used to transfer files between a micro and a system        TSO00630
  64. *  running under MVS/TSO. It MUST be run as a Command Processor.        TSO00640
  65. *  See the KERMIT manual for the complete program specifications        TSO00650
  66. *  to which this program and any other component of the system          TSO00660
  67. *  must adhere.                                                         TSO00670
  68. *                                                                       TSO00680
  69. *  Ronald J. Rusnak, University of Chicago Computation Center           TSO00690
  70. *  BITNET address, SYSRONR at UCHIVM1                                   TSO00700
  71. *  MAILNET address, SYSTEMS.RON@UCHICAGO.MAILNET                        TSO00710
  72. *  ARPA forwarding address, SYSTEMS.RON%UCHICAGO@MIT-MULTICS.ARPA       TSO00720
  73. *  May 1984                                                             TSO00730
  74. *                                                                       TSO00740
  75. *  Developed by the modification of the IBM CMS version written by      TSO00750
  76. *  Daphne Tzoar, Columbia University Center for Computing Activities    TSO00760
  77. *  March 1982                                                           TSO00770
  78. *                                                                       TSO00780
  79. * Copyright (C) 1984 University of Chicago                              TSO00790
  80. *                                                                       TSO00800
  81. * Permission is granted to any individual or institution to copy        TSO00810
  82. * or use this program, except for explicitly commercial purposes.       TSO00820
  83. *                                                                       TSO00830
  84. *                                                                       TSO00840
  85. *        The following external subroutines are required:               TSO00850
  86. *          -DYNALC - MVS dynamic allocation interface.                  TSO00860
  87. *                                                                       TSO00870
  88. *                                                                       TSO00880
  89. *         ----------------------------------------                      TSO00890
  90. *                                                                       TSO00900
  91. * Note that this is an experimental version; all changes should         TSO00910
  92. * be forwarded to the author.                                           TSO00920
  93. *                                                                       TSO00930
  94.          EJECT                                                          TSO00940
  95. * REGISTER USAGE -                                                      TSO00950
  96. * R1 -                                                                  TSO00960
  97. * R2 -                                                                  TSO00970
  98. * R3 -                                                                  TSO00980
  99. * R4 -                                                                  TSO00990
  100. * R5 -                                                                  TSO01000
  101. * R6 -                                                                  TSO01010
  102. * R7 -                                                                  TSO01020
  103. * R8 -                                                                  TSO01030
  104. * R9 -                                                                  TSO01040
  105. * R10 -                                                                 TSO01050
  106. * R11 - BASE REGISTER FOR GLOBAL DATA AREA                              TSO01060
  107. * R12 - PROGRAM BASE                                                    TSO01070
  108. * R13 - SAVE AREA                                                       TSO01080
  109. * R14 - SUBROUTINE LINKAGE                                              TSO01090
  110. * R15 - SUBROUTINE LINKAGE                                              TSO01100
  111. *                                                                       TSO01110
  112.          SPACE                                                          TSO01120
  113.          PRINT     NOGEN                                                TSO01130
  114.          REGISTER                                                       TSO01140
  115.          IKJCPPL                                                        TSO01150
  116.          IKJUPT                                                         TSO01160
  117.          SPACE                                                          TSO01170
  118. AD       EQU       68                  DATA PACKET (ASCII 'D')          TSO01180
  119. AN       EQU       78                  NAK                              TSO01190
  120. AZ       EQU       90                  EOF PACKET                       TSO01200
  121. AS       EQU       83                  INIT PACKET                      TSO01210
  122. AY       EQU       89                  ACK                              TSO01220
  123. AF       EQU       70                  FILE PACKET                      TSO01230
  124. AB       EQU       66                  BREAK PACKET                     TSO01240
  125. AE       EQU       69                  ERROR PACKET                     TSO01250
  126. ERCOD    EQU       12                  MEANS EOF WITH 'FSREAD'          TSO01260
  127. FLG1     EQU       X'80'               IS FILE THE FIRST OR NOT         TSO01270
  128. FLG2     EQU       X'40'               OVERWRITE SENT FILENAME?         TSO01280
  129. FLG3     EQU       X'20'               ONE = SENT ONLY PARTIAL RECORD   TSO01290
  130. FLG4     EQU       X'10'               NAK FROM MICRO(0) OR RPACK(1)?   TSO01300
  131. FLG5     EQU       X'08'               ALLOCATED MORE SPACE (DMSFREE)   TSO01310
  132.          EJECT                                                          TSO01320
  133.          DCBD      DSORG=(PS)                                           TSO01330
  134.          EJECT                                                          TSO01340
  135. **********************************************************************  TSO01350
  136. *                                                                    *  TSO01360
  137. *        KERMIT-TSO PROGRAM                                          *  TSO01370
  138. *                                                                    *  TSO01380
  139. **********************************************************************  TSO01390
  140. KERMIT   CSECT                                                          TSO01400
  141.          STM       R14,R12,12(R13)                                      TSO01410
  142.          BALR      R12,0                                                TSO01420
  143.          USING     *,R12                                                TSO01430
  144.          LA        R14,KSAVE                                            TSO01440
  145.          ST        R13,4(R14)                                           TSO01450
  146.          ST        R14,8(R13)                                           TSO01460
  147.          LR        R13,R14                                              TSO01470
  148. * USE R11 AS BASE REGISTER FOR THE SHARED DATA AREA                     TSO01480
  149.          L         R11,=A(PARMS)                                        TSO01490
  150.          USING     PARMS,R11                                            TSO01500
  151.          TM        0(R1),X'80'     IS THIS A COMMAND PROCESSOR?         TSO01510
  152.          BO        NOTCP           NO, THEN REFUSE USER                 TSO01520
  153. *                                                                       TSO01530
  154. * collect users mvs-tso prefix.                                         TSO01540
  155. *                                                                       TSO01550
  156.          L         R2,CPPLUPT-CPPL(,R1)  GET TO UPT                     TSO01560
  157.          XR        R3,R3                 CLEAR R3                       TSO01570
  158.          IC        R3,UPTPREFL-UPT(,R2)  GET LENGTH                     TSO01580
  159.          BCTR      R3,0                                                 TSO01590
  160.          ST        R3,PREFIXL  SAVE FOR LATER                           TSO01600
  161.          MVC       PREFIX(*-*),UPTPREFX-UPT(R2)  MOVE PREFIX            TSO01610
  162.          EX        R3,*-6                                               TSO01620
  163.          GTSIZE ,                  GET TERMINAL INFO                    TSO01630
  164.          LTR       R0,R0           IS THIS A GRAPHICS DEVICE?           TSO01640
  165.          BNZ       BADDEV          YES, THEN REFUSE USER                TSO01650
  166.          L         R15,=A(INIT)                                         TSO01660
  167.          BALR      R14,R15             CALL THE INITIALIZATION          TSO01670
  168.          WRTERM    'KERMIT-TSO Version 1.00'                            TSO01680
  169.          WRTERM    ' '                                                  TSO01690
  170. **********************************************************************  TSO01700
  171. *                                                                    *  TSO01710
  172. *        MAIN COMMAND PROCESSING ROUTINE                             *  TSO01720
  173. *                                                                    *  TSO01730
  174. **********************************************************************  TSO01740
  175. PROMPT   PROMPT    'KERMIT-TSO> '                                       TSO01750
  176.          RDTERM    INPUT                                                TSO01760
  177. *                                                                       TSO01770
  178.          TR        INPUT,UPPER         UPPERCASE INPUT                  TSO01780
  179.          LA        R1,INPUT            R1 GETS ADDRESS OF STRING        TSO01790
  180.          L         R0,=F'130'          R0 GETS THE LENGTH               TSO01800
  181.          L         R15,=A(PARSER)                                       TSO01810
  182.          BALR      R14,R15             DO TOKENIZING                    TSO01820
  183. *                                                                       TSO01830
  184.          LM        R7,R9,PARSELST      SAVE ADDR OF TOKENIZED LIST      TSO01840
  185.          L         R6,0(,R7)           GET THE PTR TO FIRST OPERAND     TSO01850
  186. NOPRO    MVI       ERRNUM,X'FF'        RESET ERROR FOR THIS TIME        TSO01860
  187.          CLI       0(R6),C' '          BARE CARRIAGE RETURN?            TSO01870
  188.          BE        PROMPT              IGNORE IT                        TSO01880
  189.          CLI       0(R6),C'E'          CHECK FOR 'EXIT' COMMAND         TSO01890
  190.          BE        LEAVE                                                TSO01900
  191.          CLI       0(R6),C'Q'          CHECK FOR 'QUIT' COMMAND         TSO01910
  192.          BE        LEAVE                                                TSO01920
  193.          CLI       0(R6),C'?'          NEED HELP ?                      TSO01930
  194.          BNE       SETCHK                                               TSO01940
  195.          WRTERM    'Legal Commands are: '                               TSO01950
  196.    WRTERM    'Receive, Send, Help, Exit, Quit, Set, Status, Show .'     TSO01960
  197.          B         PROMPT                                               TSO01970
  198. SETCHK   CLC       =C'SET',0(R6)       IS IT THE SET COMMAND ?          TSO01980
  199.          BE        STSWITCH                                             TSO01990
  200.          CLC       =C'ST',0(R6)        IS IT THE STATUS COMMAND?        TSO02000
  201.          BE        STATSW                                               TSO02010
  202.          CLC       =C'SH',0(R6)        IS IT THE SHOW COMMAND?          TSO02020
  203.          BE        SHOSW                                                TSO02030
  204.          CLC       =C'HE',0(R6)        NEED HELP ?                      TSO02040
  205.          BE        HELPSW                                               TSO02050
  206.          OI        FLAGS,FLG1          SET FLG1 - IT'S THE FIRST FILE   TSO02060
  207.          NI        FLAGS,X'FF'-FLG2    TURN OFF OVERWRITE FLAG (INIT)   TSO02070
  208.          CLC       =C'RE',0(R6)                                         TSO02080
  209.          BNE       SS                  MAYBE IT'S A SEND COMMAND        TSO02090
  210. **********************************************************************  TSO02100
  211. *        PROCESS RECEIVE COMMAND                                     *  TSO02110
  212. **********************************************************************  TSO02120
  213.          BXH       R7,R8,RR3           GET NEXT OPERAND                 TSO02130
  214.          L         R6,0(,R7)           GET POINTER TO NEXT OPERAND      TSO02140
  215.          CLI       0(R6),C'?'          NEED HELP?                       TSO02150
  216.          BNE       RR2                                                  TSO02160
  217.          WRTERM    'Specify dsname to be created for RECEIVE.'          TSO02170
  218.          B         PROMPT                                               TSO02180
  219. RR2      CLI       0(R6),C' '          MORE WORDS ?                     TSO02190
  220.          BE        RR3                 NO, THEN PROMPT                  TSO02200
  221.          MVC       DSNAMEX(80),=CL80' ' BLANK DSNAME                    TSO02210
  222.          LA        R1,DSNAMEX          POINT TO DSNAME BUFFER           TSO02220
  223.          LA        R2,44               MAX LENGTH OF DSNAME             TSO02230
  224.          SR        R5,R5               ZERO THE LENGTH                  TSO02240
  225. RR4      CLI       0(R6),C' '          IS THIS END OF FIELD             TSO02250
  226.          BE        RR5                 YES, THEN PROCESS DSNAME         TSO02260
  227.          MVC       0(1,R1),0(R6)       MOVE A CHARACTER                 TSO02270
  228.          LA        R6,1(,R6)           MOVE ALONG INPUT BUFFER          TSO02280
  229.          LA        R1,1(,R1)           MOVE ALONG DSNAME BUFFER         TSO02290
  230.          LA        R5,1(,R5)           UP THE LENGTH COUNT              TSO02300
  231.          BCT       R2,RR4              KEEP LOOKING FOR END             TSO02310
  232.          WRTERM    'Dsname too long'                                    TSO02320
  233. *                                                                       TSO02330
  234. *  allocate a new data set for receive                                  TSO02340
  235. *  dynaloc will not prefix - so we have to do this by hand.             TSO02350
  236. *                                                                       TSO02360
  237. RR3      WRTERM    'Enter data set name for RECEIVE.'                   TSO02370
  238.          MVC       DSNAMEX(80),=CL80' '   BLANK FIELD                   TSO02380
  239.          TGET      DSNAMEX,44           GET DSNAME                      TSO02390
  240.          TR        DSNAMEX(80),UPPER    MAKE UPPER CASE DSN             TSO02400
  241.          LR        R5,R1                  SAVE TGET LENGTH              TSO02410
  242. RR5      LA        R6,DSNAMEX             SOURCE                        TSO02420
  243.          MVC       DSNAME(44),=CL44' ' BLANK FIELD                      TSO02430
  244.          LA        R2,DSNAME           PLACE TO STUFF DSNAME            TSO02440
  245.          CLI       DSNAMEX,C''''       TEST IF QUOTED                   TSO02450
  246.          BE        GBDSNQ1             BR IF SO                         TSO02460
  247. *                                                                       TSO02470
  248. *  we'll prefix the dsname "by hand".                                   TSO02480
  249. *                                                                       TSO02490
  250.          L         R3,PREFIXL          ELSE GET EX LEN                  TSO02500
  251.          MVC       0(*-*,R2),PREFIX    MOVE PREFIX TO BUFFER            TSO02510
  252.          EX        R3,*-6              MOVE IT                          TSO02520
  253.          LA        R2,1(R3,R2)         NEXT POS IN BUFFER               TSO02530
  254.          MVI       0(R2),C'.'          PUT A DOT IN THERE               TSO02540
  255.          LA        R2,1(,R2)           PLACE FOR REST OF DSNAME         TSO02550
  256.          B         GBDSNQ2             CONTINUE                         TSO02560
  257. GBDSNQ1  DS        0H                  X                                TSO02570
  258.          LA        R6,1(,R6)           PAST QUOTE                       TSO02580
  259.          S         R5,=F'2'            REDUCE LENGTH BY 2               TSO02590
  260. *                                                                       TSO02600
  261. *  build the parm list to the MVS dynalc routine.                       TSO02610
  262. *                                                                       TSO02620
  263. GBDSNQ2  DS        0H                                                   TSO02630
  264.          BCTR      R5,0                DEC LEN FOR  EX                  TSO02640
  265.          MVC       0(*-*,R2),0(R6)     COMPLETE DSNAME                  TSO02650
  266.          EX        R5,*-6                                               TSO02660
  267.          MVC       DDNAME(8),=CL8'KEROUT'                               TSO02670
  268.          MVC       DISP1(4),=F'0'      A NEW DATA SET                   TSO02680
  269.          MVC       DISP2(4),=F'1'      CATLG                            TSO02690
  270.          MVC       INOUT(4),=F'1'      OUTPUT                           TSO02700
  271.          MVC       RECFMX(4),=F'1'     FB DATA SET                      TSO02710
  272.          MVC       TRACK(4),=F'5'      5 TRACK ALLOC                    TSO02720
  273. *                                                                       TSO02730
  274. * select a model dcb.  either f or v                                    TSO02740
  275. *                                                                       TSO02750
  276.          MVC       KEROUT(MODDCBFL),MODDCBF                             TSO02760
  277.          CLI       RFM,C'F'           DOES USER WANT FB                 TSO02770
  278.          BE        MAKDCB             YES                               TSO02780
  279.          MVC       KEROUT(MODDCBVL),MODDCBV  USE V MODEL                TSO02790
  280. MAKDCB   DS        0H                                                   TSO02800
  281. *                                                                       TSO02810
  282. * NOW CHECK THE LRECL AND BLKSIZE BEFORE OPEN                           TSO02820
  283. *                                                                       TSO02830
  284.          SR        R1,R1      CLEAR R1                                  TSO02840
  285.          IC        R1,LRECL   GET LRECL                                 TSO02850
  286.          SR        R2,R2               CLEAR R2                         TSO02860
  287.          LH        R3,BLKSIZE GET BLKSIZE                               TSO02870
  288.          CLI       RFM,C'V'            IS THIS VARIABLE                 TSO02880
  289.          BE        CHKFIXD             NO, THEN CHECK AS IF FIXED       TSO02890
  290.          DR        R2,R1               SEE IF BLKSIZE IS A MULTIPLE     TSO02900
  291.          LTR       R2,R2                 OF THE LRECL                   TSO02910
  292.          BNZ       CHKBLKER            YES, THEN SET LRECL AND BLKSIZE  TSO02920
  293.          LH        R3,BLKSIZE          GET BLKSIZE                      TSO02930
  294.          B         SETLB                                                TSO02940
  295. CHKBLKER WRTERM    'BLKSIZE not multiple of LRECL for RECFM=F'          TSO02950
  296.          B         PROMPT                                               TSO02960
  297. CHKFIXD  SH        R3,=H'4'            ADJUST BLKSIZE                   TSO02970
  298.          CR        R1,R3               IS LRECL =< BLKSIZE - 4          TSO02980
  299.          BNH       CHKFIXD2            YES, THEN SET LRECL AND BLKSIZE  TSO02990
  300.          WRTERM    'LRECL not less than BLKSIZE - 4 FOR RECFM=V'        TSO03000
  301.          B         PROMPT                                               TSO03010
  302. CHKFIXD2 AH        R3,=H'4'            READJUST BLKSIZE                 TSO03020
  303. SETLB    DS        0H                                                   TSO03030
  304.          STH       R1,KEROUT+(DCBLRECL-IHADCB) STUFF IN DCB             TSO03040
  305.          STH       R3,KEROUT+(DCBBLKSI-IHADCB)                          TSO03050
  306.          ST        R3,BLKSIZEX             BLKSIZE                      TSO03060
  307.          ST        R1,LRECLX               LRECL                        TSO03070
  308.          LOCATE    DATASET                                              TSO03080
  309.          LTR       R15,R15             DOES DATASET EXIST?              TSO03090
  310.          BNZ       RRALOC              NO, THEN ALLOC A NEW ONE         TSO03100
  311.          PROMPT    'Dataset exists, reply "OK" to overwrite: '          TSO03110
  312.          TGET      WRKBUFF,3                                            TSO03120
  313.          OC        WRKBUFF(3),=CL80' '  UPPER CASE REPLY                TSO03130
  314.          CLC       =C'OK',WRKBUFF                                       TSO03140
  315.          BNE       PROMPT               BR, IF NOT OK                   TSO03150
  316.          MVC       DISP1,=F'1'          MAKE DISP OLD                   TSO03160
  317.          MVC       DISP2,=F'3'          KEEP                            TSO03170
  318. RRALOC   L         R15,=V(DYNALC)      -> ENTRY POINT                   TSO03180
  319.          LA        R1,DYNAPARM         PARMS FOR ALLOC                  TSO03190
  320.          BALR      R14,R15             DO IT                            TSO03200
  321. *                                                                       TSO03210
  322.          ICM       R1,B'1111',DYNALCRC GET RETURN OCDE                  TSO03220
  323.          BNZ       PROMPT              BR IF FAILURE                    TSO03230
  324. *                                                                       TSO03240
  325. * ... then we'll merge in these dcb attributes                          TSO03250
  326. *                                                                       TSO03260
  327. MAKDCBX  DS        0H                                                   TSO03270
  328.          OPEN      (KEROUT,(OUTPUT))                                    TSO03280
  329.          TM        KEROUT+(DCBOFLGS-IHADCB),DCBOFOPN                    TSO03290
  330.          BO        GBOPNA                                               TSO03300
  331.          WRTERM    'Open for dataset failed.'                           TSO03310
  332.          B         PROMPT                                               TSO03320
  333. *                                                                       TSO03330
  334. *  a breeze...                                                          TSO03340
  335. *                                                                       TSO03350
  336. GBOPNA   DS        0H                                                   TSO03360
  337.          WRTERM    'Receive waiting...'                                 TSO03370
  338.          L         R15,=A(RECEIVE)                                      TSO03380
  339.          BALR      R14,R15             CALL RECEIVE PORTION             TSO03390
  340.          LTR       R5,R15              CHECK RETURN CODE                TSO03400
  341.          BNZ       LNON                                                 TSO03410
  342.          MVI       ERRNUM,X'FF'                                         TSO03420
  343. LNON     DS        0H                                                   TSO03430
  344. *                                                                       TSO03440
  345. *  close any open data sets.                                            TSO03450
  346. *                                                                       TSO03460
  347.          CLOSE     (KERIN,,KEROUT)                                      TSO03470
  348.          MVC       OLDERR(1),ERRNUM    ERROR SETTING OF THIS RUN        TSO03480
  349.          LTR       R5,R5               CHECK THE RETCODE                TSO03490
  350.          BZ        PROMPT              ALL OKAY                         TSO03500
  351.          WRTERM    'Error in receiving file. Try again.'                TSO03510
  352.          B         PROMPT              ERROR - TRY AGAIN                TSO03520
  353. SS       CLC       =C'SEN',0(R6)                                        TSO03530
  354.          BNE       ERR                 UNRECOGNIZED COMMAND             TSO03540
  355. **********************************************************************  TSO03550
  356. *        PROCESS SEND COMMAND                                        *  TSO03560
  357. **********************************************************************  TSO03570
  358.          BXH       R7,R8,SS3           NO MORE LEFT                     TSO03580
  359.          L         R6,0(R7)            PICK UP  NEXT OPERAND            TSO03590
  360.          CLI       0(R6),C'?'          NEED HELP?                       TSO03600
  361.          BNE       SS2                                                  TSO03610
  362.          WRTERM    'Specify dataset name.'                 [  ]         TSO03620
  363.          B         PROMPT                                               TSO03630
  364. SS2      CLI       0(R6),C' '          MORE DATA ?                      TSO03640
  365. *                                                                       TSO03650
  366. *  User wants to send a data set - well...                              TSO03660
  367. *                                                                       TSO03670
  368.          BE        SS3                 NO, THEN PROMPT                  TSO03680
  369.          MVC       DSNAMEX(80),=CL80' ' BLANK DSNAME                    TSO03690
  370.          LA        R1,DSNAMEX          POINT TO DSNAME BUFFER           TSO03700
  371.          LA        R2,44               MAX LENGTH OF DSNAME             TSO03710
  372.          SR        R5,R5               CLEAR LENGTH                     TSO03720
  373. SS4      CLI       0(R6),C' '          IS THIS END OF FIELD             TSO03730
  374.          BE        SS5                 YES, THEN PROCESS DSNAME         TSO03740
  375.          MVC       0(1,R1),0(R6)       MOVE A CHARACTER                 TSO03750
  376.          LA        R6,1(,R6)           MOVE ALONG INPUT BUFFER          TSO03760
  377.          LA        R1,1(,R1)           MOVE ALONG DSNAME BUFFER         TSO03770
  378.          LA        R5,1(,R5)           UP THE LENGTH COUNT              TSO03780
  379.          BCT       R2,SS4              KEEP LOOKING FOR END             TSO03790
  380.          WRTERM    'Dsname too long'                                    TSO03800
  381.          B         PROMPT                                               TSO03810
  382. SS3      WRTERM    'Enter dataset name to send.'                        TSO03820
  383.          MVC       DSNAMEX(80),=CL80' '   BLANK FIELD                   TSO03830
  384.          TGET      DSNAMEX,44           GET DSNAME                      TSO03840
  385.          TR        DSNAMEX(80),UPPER    MAKE UPPER CASE DSN             TSO03850
  386.          LR        R5,R1                  SAVE TGET LENGTH              TSO03860
  387. SS5      LA        R6,DSNAMEX             SOURCE                        TSO03870
  388.          MVC       DSNAME(44),=CL44' ' BLANK FIELD                      TSO03880
  389.          LA        R2,DSNAME           PLACE TO STUFF DSNAME            TSO03890
  390.          CLI       DSNAMEX,C''''       TEST IF QUOTED                   TSO03900
  391.          BE        GBDSNQ3             BR IF SO                         TSO03910
  392. *                                                                       TSO03920
  393. *  user tests if i know how to prefix a dsname.                         TSO03930
  394. *                                                                       TSO03940
  395.          L         R3,PREFIXL          ELSE GET EX LEN                  TSO03950
  396.          MVC       0(*-*,R2),PREFIX    MOVE PREFIX TO BUFFER            TSO03960
  397.          EX        R3,*-6              MOVE IT                          TSO03970
  398.          LA        R2,1(R3,R2)         NEXT POS IN BUFFER               TSO03980
  399.          MVI       0(R2),C'.'          PUT A DOT IN THERE               TSO03990
  400.          LA        R2,1(,R2)           PLACE FOR REST OF DSNAME         TSO04000
  401.          B         GBDSNQ4             CONTINUE                         TSO04010
  402. GBDSNQ3  DS        0H                  X                                TSO04020
  403.          LA        R6,1(,R6)           PAST QUOTE                       TSO04030
  404.          S         R5,=F'2'            REDUCE LENGTH BY 2               TSO04040
  405. *                                                                       TSO04050
  406. *  build a "control block"                                              TSO04060
  407. *                                                                       TSO04070
  408. GBDSNQ4  DS        0H                                                   TSO04080
  409.          BCTR      R5,0                DEC LEN FOR  EX                  TSO04090
  410.          MVC       0(*-*,R2),0(R6)     COMPLETE DSNAME                  TSO04100
  411.          EX        R5,*-6                                               TSO04110
  412.          LA        R5,DSNAME+43        POINT TO END OF DSNAME           TSO04120
  413.          LA        R4,44               LENGTH OF DSNAME                 TSO04130
  414. SSFINDL1 CLI       0(R5),C' '          IS IT BLANK?                     TSO04140
  415.          BNE       SSFINDL2            NO, THEN FOUND END OF DSN        TSO04150
  416.          BCTR      R5,0                DECREMENT PTR                    TSO04160
  417.          BCT       R4,SSFINDL1         LOOP TILL FOUND                  TSO04170
  418.          WRTERM    'Dsname cannot be entirely blank'                    TSO04180
  419.          B         PROMPT                                               TSO04190
  420. SSFINDL2 LR        R3,R5               REMEMBER END OF DSN              TSO04200
  421.          LA        R2,2                TRY TO FIND 2 LEVELS             TSO04210
  422. SSFINDL3 CLI       0(R5),C'.'          IS IT A DOT?                     TSO04220
  423.          BE        SSFINDL4            YES, THEN HANDLE IT              TSO04230
  424. SSFINDL5 BCTR      R5,0                DECREMENT PTR                    TSO04240
  425.          BCT       R4,SSFINDL3         LOOP TILL FOUND                  TSO04250
  426.          B         SSFINDE             BR IF FRONT OF DSN               TSO04260
  427. SSFINDL4 BCT       R2,SSFINDL5         FIND ANOTHER LEVEL               TSO04270
  428. SSFINDE  MVC       FILNAM,=CL80' '     BLANK FILNAM                     TSO04280
  429.          LA        R5,1(,R5)           MOVE TO FRONT OF LEVEL           TSO04290
  430.          SR        R3,R5               FIND LENGTH TO MOVE              TSO04300
  431.          CH        R3,=H'17'           TRUNC IF TOO LONG                TSO04310
  432.          BNH       *+8                 NOT TOO LONG                     TSO04320
  433.          LA        R3,=H'17'           FORCE MAX LENGTH                 TSO04330
  434.          MVC       FILNAM(*-*),0(R5)   MOVE INSTRUCTION FOR EXECUTE     TSO04340
  435.          EX        R3,*-6              GO MOVE THE DATA                 TSO04350
  436.          STH   R3,FILNAML          SAVE LENGTH - 1                      TSO04360
  437.          MVC       DDNAME(8),=CL8'KERIN'                                TSO04370
  438.          MVC       DISP1(4),=F'2'    DISP=SHR                           TSO04380
  439.          MVC       DISP2(4),=F'3'    KEEP                               TSO04390
  440.          MVC       INOUT(4),=F'0'  INPUT                                TSO04400
  441.          LA        R1,DYNAPARM                                          TSO04410
  442.          L         R15,=V(DYNALC)    GET EMTRY POINT                    TSO04420
  443.          BALR      R14,R15           DO IT                              TSO04430
  444.          ICM       R1,B'1111',DYNALCRC GET RETURN CODE                  TSO04440
  445.          BNZ       PROMPT                                               TSO04450
  446. *                                                                       TSO04460
  447. *  open the users data set                                              TSO04470
  448. *                                                                       TSO04480
  449.          OPEN      (KERIN,(INPUT))                                      TSO04490
  450.          TM        KERIN+(DCBOFLGS-IHADCB),DCBOFOPN                     TSO04500
  451.          BO        GBOPNB                                               TSO04510
  452.          WRTERM    'Open for dataset failed.'                           TSO04520
  453.          B         PROMPT                                               TSO04530
  454. GBOPNB   DS        0H                                                   TSO04540
  455.          TM        KERIN+(DCBRECFM-IHADCB),DCBRECV IS RECFM=V           TSO04550
  456.          BO        SSDELAY         YES, THEN WAIT                       TSO04560
  457.          TM        KERIN+(DCBRECFM-IHADCB),DCBRECF IS RECFM=F           TSO04570
  458.          BO        SSDELAY         YES, THEN WAIT                       TSO04580
  459.          WRTERM    'Invalid RECFM, only fixed and variable supported'   TSO04590
  460.          CLOSE     KERIN                                                TSO04600
  461.          B         PROMPT                                               TSO04610
  462. SSDELAY  DS        0H                                                   TSO04620
  463.          MVC  WRKBUFF(37),=C'Waiting ..... seconds before sending.'     TSO04630
  464.          L         R1,DELAY                                             TSO04640
  465.          SR        R0,R0                                                TSO04650
  466.          D         R0,=F'100'                                           TSO04660
  467.          BINCVRT   R1,WRKBUFF+7,DBLWRK                                  TSO04670
  468.          TPUT      WRKBUFF,37                                           TSO04680
  469.          STIMER    WAIT,BINTVL=DELAY                                    TSO04690
  470.          B         SSWITCH                                              TSO04700
  471. ERR      WRTERM    'Invalid command'                                    TSO04710
  472.          B         PROMPT              INVALID COMMAND - TRY AGAIN      TSO04720
  473.          SPACE     3                                                    TSO04730
  474. SSWITCH  EQU       *                                                    TSO04740
  475.          L         R15,=A(SEND)                                         TSO04750
  476.          BALR      R14,R15             CALL SEND PORTION                TSO04760
  477.          LTR       R5,R15              CHECK RETURN CODE                TSO04770
  478.          BNZ       LINON                                                TSO04780
  479.          MVI       ERRNUM,X'FF'        WORKED OK                        TSO04790
  480. LINON    DS        0H                                                   TSO04800
  481. *                                                                       TSO04810
  482. *  close any open data sets.                                            TSO04820
  483. *                                                                       TSO04830
  484.          CLOSE     (KERIN,,KEROUT)                                      TSO04840
  485.          MVC       OLDERR(1),ERRNUM    ERROR SETTING OF THIS RUN        TSO04850
  486.          LTR       R5,R5               CHECK THE RETCODE                TSO04860
  487.          BZ        PROMPT              ALL OKAY                         TSO04870
  488.          WRTERM    'Error in sending file. Try again.'                  TSO04880
  489.          B         PROMPT              ERROR - TRY AGAIN                TSO04890
  490. **********************************************************************  TSO04900
  491. *        PROCESS SET COMMAND                                         *  TSO04910
  492. **********************************************************************  TSO04920
  493. STSWITCH EQU       *                                                    TSO04930
  494.          L         R15,=A(SET)                                          TSO04940
  495.          BALR      R14,R15             CALL "SET" SUBROUTINE            TSO04950
  496.          LTR       R15,R15             CHECK RETCODE                    TSO04960
  497.          BZ        PROMPT                                               TSO04970
  498.          WRTERM    'Illegal Set Command'                                TSO04980
  499.          B         PROMPT                                               TSO04990
  500. **********************************************************************  TSO05000
  501. *        PROCESS SHOW COMMAND                                        *  TSO05010
  502. **********************************************************************  TSO05020
  503. SHOSW    EQU       *                                                    TSO05030
  504.          L         R15,=A(SHOW)                                         TSO05040
  505.          BALR      R14,R15             CALL "SHOW" SUBROUTINE           TSO05050
  506.          LTR       R15,R15             CHECK RETCODE                    TSO05060
  507.          BZ        PROMPT                                               TSO05070
  508.          WRTERM    'Illegal Show Command'                               TSO05080
  509.          B         PROMPT                                               TSO05090
  510. **********************************************************************  TSO05100
  511. *        PROCESS STATUS COMMAND                                      *  TSO05110
  512. **********************************************************************  TSO05120
  513. STATSW   EQU       *                                                    TSO05130
  514.          BXH       R7,R8,GIVSTAT       NO MORE LEFT                     TSO05140
  515.          L         R6,0(R7)            PICK UP  NEXT OPERAND            TSO05150
  516.          CLI       0(R6),C'?'          NEED HELP?                       TSO05160
  517.          BNE       GIVSTAT                                              TSO05170
  518.          WRTERM    'Confirm with a carriage return'                     TSO05180
  519.          B         PROMPT                                               TSO05190
  520. GIVSTAT  CLI       OLDERR,X'FF'        WAS THERE AN ERROR LAST TIME?    TSO05200
  521.          BNE       FAIL                                                 TSO05210
  522.          WRTERM    'Kermit completed successfully'                      TSO05220
  523.          B         PROMPT                                               TSO05230
  524. FAIL     SR        R5,R5                                                TSO05240
  525.          IC        R5,OLDERR           GET OFFSET INTO ERROR TABLE      TSO05250
  526.          M         R4,=F'20'           OFFSET := ERRNUM * 20            TSO05260
  527.          LA        R5,ERRTAB(R5)                                        TSO05270
  528. *G       WRTERM    (R5),20             PRINT ERROR MSG ON SCREEN        TSO05280
  529.          TPUT      (R5),20                                              TSO05290
  530.          B         PROMPT              AND LEAVE                        TSO05300
  531. **********************************************************************  TSO05310
  532. *        PROCESS HELP COMMAND                                        *  TSO05320
  533. **********************************************************************  TSO05330
  534. HELPSW   BXH       R7,R8,GIVHLP        NO MORE LEFT                     TSO05340
  535.          L         R6,0(R7)            PICK UP  NEXT OPERAND            TSO05350
  536.          CLI       0(R6),C'?'          NEED HELP?                       TSO05360
  537.          BNE       GIVHLP                                               TSO05370
  538.          WRTERM    'Confirm with a carriage return'                     TSO05380
  539.          B         PROMPT                                               TSO05390
  540. GIVHLP   DS        0H                                                   TSO05400
  541.          WRTERM    'Enter ? at prompt to receive list of commands.'     TSO05410
  542.          WRTERM  'Enter ? after a command to receive list of operands'  TSO05420
  543.          B         PROMPT                                               TSO05430
  544. **********************************************************************  TSO05440
  545. *        PROCESS EXIT COMMAND                                        *  TSO05450
  546. **********************************************************************  TSO05460
  547. LEAVE    BXH       R7,R8,KRET        ANY MORE OPERANDS?                 TSO05470
  548.          L         R6,0(,R7)           GET ADDRESS OF OPERAND           TSO05480
  549.          CLI       0(R6),C'?'          NEED HELP?                       TSO05490
  550.          BNE       KRET                NO, JUST LEAVE                   TSO05500
  551.          WRTERM    'Confirm with a carriage return'                     TSO05510
  552.          B         PROMPT                                               TSO05520
  553. BADDEV   WRTERM    'An Ascii terminal must be used.'                    TSO05530
  554.          B         RET                                                  TSO05540
  555. NOTCP    WRTERM    'KERMIT-TSO must be running as a command processor'  TSO05550
  556.          WRTERM    'Contact your local systems programmer'              TSO05560
  557.          B         RET                                                  TSO05570
  558. KRET     EQU       *                                                    TSO05580
  559. RET      EQU       *                                                    TSO05590
  560. *                                                                       TSO05600
  561. *  close any open data sets.                                            TSO05610
  562. *  dynalc has a free=close so.....                                      TSO05620
  563. *                                                                       TSO05630
  564.          TM        KERIN+(DCBOFLGS-IHADCB),DCBOFOPN                     TSO05640
  565.          BNO       RETGB1                                               TSO05650
  566.          CLOSE     KERIN                                                TSO05660
  567. RETGB1   DS        0H                                                   TSO05670
  568.          TM        KEROUT+(DCBOFLGS-IHADCB),DCBOFOPN                    TSO05680
  569.          BNO       RETGB2                                               TSO05690
  570.          CLOSE     KEROUT                                               TSO05700
  571. RETGB2   DS        0H                                                   TSO05710
  572.          CLOSE     DEBUG                                                TSO05720
  573.          L         R13,4(R13)                                           TSO05730
  574.          L         R14,12(R13)                                          TSO05740
  575.          LM        R0,R12,20(R13)                                       TSO05750
  576.          BR        R14                                                  TSO05760
  577. KSAVE    DS        18F                 KERMIT'S SAVE AREA               TSO05770
  578.          LTORG                                                          TSO05780
  579.          DROP      R11                                                  TSO05790
  580.          DROP      R12                 NO LONGER NEED THEM              TSO05800
  581.          EJECT                                                          TSO05810
  582. **********************************************************************  TSO05820
  583. *                                                                    *  TSO05830
  584. *        ROUTINE TO PROCESS SET COMMAND                              *  TSO05840
  585. *                                                                    *  TSO05850
  586. **********************************************************************  TSO05860
  587. SET      DS        0H                                                   TSO05870
  588.          STM       R14,R12,12(R13)     SAVE CALLER'S REGISTERS          TSO05880
  589.          BALR      R12,0               ESTABLISH ADDRESSABILITY         TSO05890
  590.          USING     *,R12                                                TSO05900
  591.          LA        R14,SETSAVE         ADDRESS OF MY SAVE AREA          TSO05910
  592.          ST        R13,4(R14)          SAVE CALLER'S                    TSO05920
  593.          ST        R14,8(R13)                                           TSO05930
  594.          LR        R13,R14                                              TSO05940
  595. * USE R11 AS BASE REGISTER FOR 'PARMS' GLOBAL DATA AREA                 TSO05950
  596.          L         R11,=A(PARMS)                                        TSO05960
  597.          USING     PARMS,R11           ESTABLISH ADDRESSABILITY         TSO05970
  598.          BXH       R7,R8,SETHLP                                         TSO05980
  599.          L         R6,0(R7)            PICK UP NEXT OPERAND             TSO05990
  600.          CLI       0(R6),C'?'          NEED HELP ?                      TSO06000
  601.          BNE       NOQ                                                  TSO06010
  602. SETHLP   WRTERM    'Blksize, Debug, Delay, End-of-line, Lrecl,'         TSO06020
  603.          WRTERM    'Quote, Packet-size, Recfm, Space, Start-of-line'    TSO06030
  604.          B         SETOK                                                TSO06040
  605. **********************************************************************  TSO06050
  606. *                           SET RECFM                                *  TSO06060
  607. **********************************************************************  TSO06070
  608. NOQ      CLC       =C'RE',0(R6)                                         TSO06080
  609.          BNE       NOREC                                                TSO06090
  610.          BXH       R7,R8,SETNFM        MORE OPERANDS?                   TSO06100
  611.          L         R6,0(R7)            PICK UP RECORD FORMAT            TSO06110
  612.          CLI       0(R6),C'?'                                           TSO06120
  613.          BNE       CHKFM                                                TSO06130
  614.          WRTERM    'f or v (default of v)'                              TSO06140
  615.          B         SETOK                                                TSO06150
  616. CHKFM    CLI       0(R6),C'V'          REDUNDANT                        TSO06160
  617.          BE        FMSET                                                TSO06170
  618.          CLI       0(R6),C'F'          FIXED FORMAT?                    TSO06180
  619.          BNE       RECERR                                               TSO06190
  620. FMSET    MVC       RFM(1),0(R6)        PICK UP RECFM                    TSO06200
  621.          B         SETOK                                                TSO06210
  622. RECERR   WRTERM    'Fixed and variable files only'                      TSO06220
  623.          B         SETERR                                               TSO06230
  624. **********************************************************************  TSO06240
  625. *                         SET QUOTE                                  *  TSO06250
  626. **********************************************************************  TSO06260
  627. NOREC    CLC       =C'QU',0(R6)        QUOTE CHARACTER                  TSO06270
  628.          BNE       NOQUO                                                TSO06280
  629.          BXH       R7,R8,SETNFM        ANY MORE OPERANDS                TSO06290
  630.          L         R6,0(R7)            GET NEXT TOKEN                   TSO06300
  631.          CLI       0(R6),C' '          VALUE NOT SUPPLIED?              TSO06310
  632.          BNE       GIVQ                                                 TSO06320
  633. SETNFM   WRTERM    '?NOT CONFIRMED'                                     TSO06330
  634.          B         SETERR                                               TSO06340
  635. GIVQ     CLC       =C'? ',0(R6)                                         TSO06350
  636.          BNE       GETQUO                                               TSO06360
  637.          WRTERM    'a single character'                                 TSO06370
  638.          B         SETOK                                                TSO06380
  639. GETQUO   MVC       QUOCHAR(1),0(R6)    SET NEW QUOTE CHAR               TSO06390
  640.          TR        QUOCHAR(1),ETOA     GET ASCII FORM                   TSO06400
  641.          CLI       1(R6),C' '          IS IT ONLY ONE CHAR?             TSO06410
  642.          BE        ISQOK                                                TSO06420
  643.          WRTERM    'one character only'                                 TSO06430
  644.          B         BADQUO                                               TSO06440
  645. ISQOK    CLI       QUOCHAR,X'21'       CAN'T BE LESS THAN 32            TSO06450
  646.          BL        BADQUO                                               TSO06460
  647.          CLI       QUOCHAR,X'7E'       CAN'T BE LARGER THAN 126         TSO06470
  648.          BH        BADQUO                                               TSO06480
  649.          CLI       QUOCHAR,X'3E'       HAS TO BE BETWEEN 32-62          TSO06490
  650.          BNH       SETOK                                                TSO06500
  651.          CLI       QUOCHAR,X'60'       OR BETWEEN 96-126                TSO06510
  652.          BNL       SETOK                                                TSO06520
  653. BADQUO   WRTERM    'Must fall between 41-76,140,or 173-176 (octal).'    TSO06530
  654.          MVC       QUOCHAR(1),DQUOTE   RESET VALUE, JUST IN CASE        TSO06540
  655.          B         SETERR                                               TSO06550
  656. **********************************************************************  TSO06560
  657. *                         SET LRECL                                  *  TSO06570
  658. **********************************************************************  TSO06580
  659. NOQUO    CLC       =C'LR',0(R6)        LRECL SIZE                       TSO06590
  660.          BNE       SETBLK                                               TSO06600
  661.          BXH       R7,R8,SETNFM        ANY MORE OPERANDS                TSO06610
  662.          L         R6,0(R7)            GET NEXT TOKEN                   TSO06620
  663.          CLI       0(R6),C'?'          HELP ?                           TSO06630
  664.          BNE       GETREC                                               TSO06640
  665.          WRTERM    'Logical Record Length (default of 80).'             TSO06650
  666.          B         SETOK                                                TSO06660
  667. GETREC   CLI       0(R6),C' '          NO VALUE GIVEN                   TSO06670
  668.          BNE       CALC                                                 TSO06680
  669.          WRTERM    '?not confirmed'                                     TSO06690
  670.          B         SETERR                                               TSO06700
  671. CALC     CLI       0(R6),X'F0'         MUST BE >= TO 0                  TSO06710
  672.          BL        BADREC                                               TSO06720
  673.          CLI       0(R6),X'F9'         MUST BE <= TO 9                  TSO06730
  674.          BH        BADREC                                               TSO06740
  675.          XC        PKVAR,PKVAR         EMPTY IT OUT                     TSO06750
  676.          SR        R4,R4               LENGTH OF NUMBER                 TSO06760
  677.          CLI       1(R6),C' '          TWO DIGITS?                      TSO06770
  678.          BNE       CALC2                                                TSO06780
  679.          EX        R4,PCK                                               TSO06790
  680.          B         TST                                                  TSO06800
  681. CALC2    LA        R4,1(R4)            ADD ONE                          TSO06810
  682.          CLI       2(R6),C' '          THREE DIGITS?                    TSO06820
  683.          BNE       CALC3                                                TSO06830
  684.          EX        R4,PCK                                               TSO06840
  685.          B         TST                                                  TSO06850
  686. CALC3    LA        R4,1(R4)            IS THERE AN ERROR?               TSO06860
  687.          CLI       3(R6),C' '                                           TSO06870
  688.          BNE       BADREC                                               TSO06880
  689.          EX        R4,PCK                                               TSO06890
  690. TST      CVB       R7,PKVAR                                             TSO06900
  691.          C         R7,=F'255'          MAX OF 255 FOR LRECL             TSO06910
  692.          BH        BADREC                                               TSO06920
  693.          STC       R7,LRECL            SET THE LRECL VALUE              TSO06930
  694.          B         SETOK                                                TSO06940
  695. BADREC   WRTERM    'A number with a maximum of 255.'                    TSO06950
  696.          B         SETERR                                               TSO06960
  697. **********************************************************************  TSO06970
  698. *                         SET BLKSIZE                                *  TSO06980
  699. **********************************************************************  TSO06990
  700. SETBLK   CLC       =C'BL',0(R6)        BLOCK SIZE                       TSO07000
  701.          BNE       SETSPACE                                             TSO07010
  702.          BXH       R7,R8,SETNFM        ANY MORE OPERANDS                TSO07020
  703.          L         R6,0(R7)            GET NEXT TOKEN                   TSO07030
  704.          CLI       0(R6),C'?'          HELP ?                           TSO07040
  705.          BNE       GETBLK                                               TSO07050
  706.          WRTERM    'Blocksize (default of 80).'                         TSO07060
  707.          B         SETOK                                                TSO07070
  708. GETBLK   CLI       0(R6),C' '          NO VALUE GIVEN                   TSO07080
  709.          BNE       BLKCALC                                              TSO07090
  710.          WRTERM    '?not confirmed'                                     TSO07100
  711.          B         SETERR                                               TSO07110
  712. BLKCALC  XC        PKVAR,PKVAR         EMPTY IT OUT                     TSO07120
  713.          SR        R4,R4               LENGTH OF NUMBER                 TSO07130
  714.          LA        R7,5                MAX LENGTH OF NUMBER             TSO07140
  715.          LR        R5,R6               SAVE START OF STRING             TSO07150
  716. BLKCALC1 CLI       0(R6),X'F0'         MUST BE >= TO 0                  TSO07160
  717.          BL        BADBLK                                               TSO07170
  718.          CLI       0(R6),X'F9'         MUST BE <= TO 9                  TSO07180
  719.          BH        BADBLK                                               TSO07190
  720.          CLI       1(R6),C' '          FOUND LAST DIGIT?                TSO07200
  721.          BE        BLKCALC2                                             TSO07210
  722.          LA        R4,1(R4)            COUNT NUMBER OF DIGITS           TSO07220
  723.          LA        R6,1(R6)            POINT TO NEXT DIGIT              TSO07230
  724.          BCT       R7,BLKCALC1         KEEP CHECKING                    TSO07240
  725.          B         BADBLK                                               TSO07250
  726. BLKCALC2 EX        R4,BLKPCK                                            TSO07260
  727.          B         BLKTST                                               TSO07270
  728. BLKTST   CVB       R7,PKVAR                                             TSO07280
  729.          C         R7,=F'32767'        MAX OF 32767 FOR BLKSIZE         TSO07290
  730.          BH        BADBLK                                               TSO07300
  731.          STH       R7,BLKSIZE          SET THE BLKSIZE                  TSO07310
  732.          B         SETOK                                                TSO07320
  733. BADBLK   WRTERM    'A number with a maximum of 32767'                   TSO07330
  734.          B         SETERR                                               TSO07340
  735. **********************************************************************  TSO07350
  736. *                         SET TRACK ALLOCATION                       *  TSO07360
  737. **********************************************************************  TSO07370
  738. SETSPACE CLC       =C'SP',0(R6)        BLOCK SIZE                       TSO07380
  739.          BNE       SETEOL                                               TSO07390
  740.          BXH       R7,R8,SETNFM        ANY MORE OPERANDS                TSO07400
  741.          L         R6,0(R7)            GET NEXT TOKEN                   TSO07410
  742.          CLI       0(R6),C'?'          HELP ?                           TSO07420
  743.          BNE       GETSPC                                               TSO07430
  744.          WRTERM    'Dataset space allocation (default of 5 tracks).'    TSO07440
  745.          B         SETOK                                                TSO07450
  746. GETSPC   CLI       0(R6),C' '          NO VALUE GIVEN                   TSO07460
  747.          BNE       SPCCALC                                              TSO07470
  748.          WRTERM    '?not confirmed'                                     TSO07480
  749.          B         SETERR                                               TSO07490
  750. SPCCALC  XC        PKVAR,PKVAR         EMPTY IT OUT                     TSO07500
  751.          SR        R4,R4               LENGTH OF NUMBER                 TSO07510
  752.          LA        R7,5                MAX LENGTH OF NUMBER             TSO07520
  753.          LR        R5,R6               SAVE START OF STRING             TSO07530
  754. SPCCALC1 CLI       0(R6),X'F0'         MUST BE >= TO 0                  TSO07540
  755.          BL        BADSPC                                               TSO07550
  756.          CLI       0(R6),X'F9'         MUST BE <= TO 9                  TSO07560
  757.          BH        BADSPC                                               TSO07570
  758.          CLI       1(R6),C' '          FOUND LAST DIGIT?                TSO07580
  759.          BE        SPCCALC2                                             TSO07590
  760.          LA        R4,1(R4)            COUNT NUMBER OF DIGITS           TSO07600
  761.          LA        R6,1(R6)            POINT TO NEXT DIGIT              TSO07610
  762.          BCT       R7,SPCCALC1         KEEP CHECKING                    TSO07620
  763.          B         BADSPC                                               TSO07630
  764. SPCCALC2 EX        R4,SPCPCK                                            TSO07640
  765.          B         SPCTST                                               TSO07650
  766. SPCTST   CVB       R7,PKVAR                                             TSO07660
  767.          C         R7,=F'99999'        MAX OF 99999 FOR SPACE           TSO07670
  768.          BH        BADSPC                                               TSO07680
  769.          ST        R7,TRACK            SET THE ALLOCATION               TSO07690
  770.          B         SETOK                                                TSO07700
  771. BADSPC   WRTERM    'A number with a maximum of 99999'                   TSO07710
  772.          B         SETERR                                               TSO07720
  773. **********************************************************************  TSO07730
  774. *                         SET END-OF-LINE CHARACTER                  *  TSO07740
  775. **********************************************************************  TSO07750
  776. SETEOL   CLC       =C'EN',0(R6)        EOL CHARACTER                    TSO07760
  777.          BNE       NOEND                                                TSO07770
  778.          BXH       R7,R8,SETNFM        ANY MORE OPERANDS                TSO07780
  779.          L         R6,0(R7)            GET NEXT TOKEN                   TSO07790
  780.          CLI       0(R6),C' '          NOT DATA                         TSO07800
  781.          BNE       EOLCHAR                                              TSO07810
  782.          WRTERM    '?not confirmed'                                     TSO07820
  783.          B         SETERR                                               TSO07830
  784. EOLCHAR  CLI       0(R6),C'?'          NEED HELP?                       TSO07840
  785.          BNE       GETEOL                                               TSO07850
  786.          WRTERM    'A two digit number between 00 and 31 (dec).'        TSO07860
  787.          B         SETOK                                                TSO07870
  788. GETEOL   CLI       0(R6),X'F0'         MUST BE >= TO 0                  TSO07880
  789.          BL        BADEOL                                               TSO07890
  790.          CLI       0(R6),X'F9'         MUST BE <= TO 9                  TSO07900
  791.          BH        BADEOL                                               TSO07910
  792.          XC        PKVAR,PKVAR         USE TO CONVERT VALUE             TSO07920
  793.          CLI       1(R6),C' '          INPUT MUST BE TWO CHARS          TSO07930
  794.          BE        BADEOL                                               TSO07940
  795.          CLI       2(R6),C' '          TWO CHARS, AT MAX                TSO07950
  796.          BNE       BADEOL                                               TSO07960
  797.          PACK      PKVAR(8),0(2,R6)    PICK UP TWO CHARACTERS           TSO07970
  798.          CVB       R7,PKVAR            PUT PACKED DECIMAL INTO REG      TSO07980
  799.          C         R7,=F'31'           MAX OF 31 DECIMAL                TSO07990
  800.          BH        BADEOL                                               TSO08000
  801.          STC       R7,SEOL             SET SEND EOL VALUE               TSO08010
  802.          B         SETOK                                                TSO08020
  803. BADEOL   WRTERM    'Must be a two digit value less than 31 (dec).'      TSO08030
  804.          B         SETERR                                               TSO08040
  805. **********************************************************************  TSO08050
  806. *                         SET PACKET-SIZE                            *  TSO08060
  807. **********************************************************************  TSO08070
  808. NOEND    CLC       =C'PA',0(R6)        CHANGE RECEIVE PACKET SIZE       TSO08080
  809.          BNE       NOPAC                                                TSO08090
  810.          BXH       R7,R8,SETNFM        ANY MORE OPERANDS                TSO08100
  811.          L         R6,0(R7)            GET NEXT TOKEN                   TSO08110
  812.          CLI       0(R6),C' '          NO DATA                          TSO08120
  813.          BNE       GETPAC                                               TSO08130
  814.          WRTERM    '?not confirmed'                                     TSO08140
  815.          B         SETERR                                               TSO08150
  816. GETPAC   CLI       0(R6),C'?'          NEED HELP?                       TSO08160
  817.          BNE       CALC4                                                TSO08170
  818.          WRTERM    'Receive packet size (range: 26-94 decimal).'        TSO08180
  819.          B         SETOK                                                TSO08190
  820. CALC4    CLI       0(R6),X'F0'         MUST BE >= TO 0                  TSO08200
  821.          BL        BADPAC                                               TSO08210
  822.          CLI       0(R6),X'F9'         MUST BE <= TO 9                  TSO08220
  823.          BH        BADPAC                                               TSO08230
  824.          XC        PKVAR,PKVAR         USE TO CONVERT VALUE             TSO08240
  825.          CLI       1(R6),C' '          INPUT MUST BE TWO CHARS          TSO08250
  826.          BE        BADPAC                                               TSO08260
  827.          CLI       2(R6),C' '          TWO CHARS, AT MAX                TSO08270
  828.          BNE       BADPAC                                               TSO08280
  829.          PACK      PKVAR(8),0(2,R6)    PICK UP TWO CHARS                TSO08290
  830.          CVB       R7,PKVAR            PUT PACKED DECIMAL INTO REG      TSO08300
  831.          C         R7,=F'26'           THIS IS MIN                      TSO08310
  832.          BL        BADPAC                                               TSO08320
  833.          C         R7,MAXPACK          THIS IS THE MAX                  TSO08330
  834.          BH        BADPAC                                               TSO08340
  835.          ST        R7,RPSIZ            USE THIS VALUE NOW               TSO08350
  836.          B         SETOK                                                TSO08360
  837. BADPAC   WRTERM    'Must be between 26-94 (decimal).'                   TSO08370
  838.          B         SETERR                                               TSO08380
  839. **********************************************************************  TSO08390
  840. *                         SET DEBUG ON|OFF                           *  TSO08400
  841. **********************************************************************  TSO08410
  842. NOPAC    CLC       =C'DEB',0(R6)      IS THIS DEBUG?                    TSO08420
  843.          BNE       SETSOH              NO, THEN SEE IF SET SOH          TSO08430
  844.          BXH       R7,R8,SETNFM        ANY MORE OPERANDS                TSO08440
  845.          L         R6,0(R7)            GET NEXT TOKEN                   TSO08450
  846.          CLI       0(R6),C' '          IS THERE AN OPERAND?             TSO08460
  847.          BE        DEBERR              NO, THEN ASK FOR ONE.            TSO08470
  848.          CLC       =C'ON',0(R6)        IS IT TIME TO TURN ON            TSO08480
  849.          BE        DEBON               YES, OPEN FILE                   TSO08490
  850.          CLC       =C'OF',0(R6)       IS IT TIME TO TURN OFF            TSO08500
  851.          BE        DEBOFF              YES, CLOSE FILE                  TSO08510
  852.          B         DEBERR              YES, GIVE MESSAGE                TSO08520
  853. DEBERR   WRTERM    'Command is SET DEBUG ON | OFF'                      TSO08530
  854.          B         SETERR                                               TSO08540
  855. DEBON    OPEN      (DEBUG,(OUTPUT))                                     TSO08550
  856.          TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN  IS IT OPEN?        TSO08560
  857.          BO        SETOK                                                TSO08570
  858.          WRTERM    'Unable to open debug file, debug disabled.'         TSO08580
  859.          B         SETERR                                               TSO08590
  860. DEBOFF   CLOSE     DEBUG                                                TSO08600
  861.          B         SETOK                                                TSO08610
  862. **********************************************************************  TSO08620
  863. *                         SET START-OF-HEADER CHARACTER              *  TSO08630
  864. **********************************************************************  TSO08640
  865. SETSOH   CLC       =C'ST',0(R6)       SOH CHARACTER                     TSO08650
  866.          BNE       NOSOH               NO, THEN TRY DELAY               TSO08660
  867.          BXH       R7,R8,SETNFM        ANY MORE OPERANDS                TSO08670
  868.          L         R6,0(R7)            GET NEXT TOKEN                   TSO08680
  869.          CLI       0(R6),C' '          NOT DATA                         TSO08690
  870.          BNE       SOHCHAR                                              TSO08700
  871.          WRTERM    '?not confirmed'                                     TSO08710
  872.          B         SETERR                                               TSO08720
  873. SOHCHAR  CLI       0(R6),C'?'          NEED HELP?                       TSO08730
  874.          BNE       GETSOH                                               TSO08740
  875.          WRTERM    'A two digit number between 00 and 31 (dec).'        TSO08750
  876.          B         SETOK                                                TSO08760
  877. GETSOH   CLI       0(R6),X'F0'         MUST BE >= TO 0                  TSO08770
  878.          BL        BADSOH                                               TSO08780
  879.          CLI       0(R6),X'F9'         MUST BE <= TO 9                  TSO08790
  880.          BH        BADSOH                                               TSO08800
  881.          XC        PKVAR,PKVAR         USE TO CONVERT VALUE             TSO08810
  882.          CLI       1(R6),C' '          INPUT MUST BE TWO CHARS          TSO08820
  883.          BE        BADSOH                                               TSO08830
  884.          CLI       2(R6),C' '          TWO CHARS, AT MAX                TSO08840
  885.          BNE       BADSOH                                               TSO08850
  886.          PACK      PKVAR(8),0(2,R6)    PICK UP TWO CHARACTERS           TSO08860
  887.          CVB       R7,PKVAR            PUT PACKED DECIMAL INTO REG      TSO08870
  888.          C         R7,=F'31'           MAX OF 31 DECIMAL                TSO08880
  889.          BH        BADSOH              ERROR, TOO BIG                   TSO08890
  890.          STC       R7,SSOH             SET SEND SOH VALUE               TSO08900
  891.          STC       R7,RSOH             SET RECEIVE SOH VALUE            TSO08910
  892.          B         SETOK                                                TSO08920
  893. BADSOH   WRTERM    'Must be a two digit value less than 31 (dec).'      TSO08930
  894.          B         SETERR                                               TSO08940
  895. **********************************************************************  TSO08950
  896. *                      SET DELAY VALUE                               *  TSO08960
  897. **********************************************************************  TSO08970
  898. NOSOH    CLC       =C'DEL',0(R6)       CHANGE RECEIVE PACKET SIZE       TSO08980
  899.          BNE       SETERR                                               TSO08990
  900.          BXH       R7,R8,SETNFM        ANY MORE OPERANDS                TSO09000
  901.          L         R6,0(R7)            GET NEXT TOKEN                   TSO09010
  902.          CLI       0(R6),C' '          NO DATA                          TSO09020
  903.          BNE       GETDELAY                                             TSO09030
  904.          WRTERM    '?not confirmed'                                     TSO09040
  905.          B         SETERR                                               TSO09050
  906. GETDELAY CLI       0(R6),C'?'          NEED HELP?                       TSO09060
  907.          BNE       DLYCALC                                              TSO09070
  908.          WRTERM    'Receive packet size (range: 26-94 decimal).'        TSO09080
  909.          B         SETOK                                                TSO09090
  910. DLYCALC  XC        PKVAR,PKVAR         EMPTY IT OUT                     TSO09100
  911.          SR        R4,R4               LENGTH OF NUMBER                 TSO09110
  912.          LA        R7,5                MAX LENGTH OF NUMBER             TSO09120
  913.          LR        R5,R6               SAVE START OF STRING             TSO09130
  914. DLYCALC1 CLI       0(R6),X'F0'         MUST BE >= TO 0                  TSO09140
  915.          BL        BADDELAY                                             TSO09150
  916.          CLI       0(R6),X'F9'         MUST BE <= TO 9                  TSO09160
  917.          BH        BADDELAY                                             TSO09170
  918.          CLI       1(R6),C' '          FOUND LAST DIGIT?                TSO09180
  919.          BE        DLYCALC2                                             TSO09190
  920.          LA        R4,1(R4)            COUNT NUMBER OF DIGITS           TSO09200
  921.          LA        R6,1(R6)            POINT TO NEXT DIGIT              TSO09210
  922.          BCT       R7,DLYCALC1         KEEP CHECKING                    TSO09220
  923.          B         BADDELAY                                             TSO09230
  924. DLYCALC2 EX        R4,DLYPCK                                            TSO09240
  925.          B         DLYTST                                               TSO09250
  926. DLYTST   CVB       R7,PKVAR                                             TSO09260
  927.          LTR       R7,R7               THIS IS MIN                      TSO09270
  928.          BNP       BADDELAY                                             TSO09280
  929.          C         R7,=F'99999'        THIS IS THE MAX                  TSO09290
  930.          BH        BADDELAY                                             TSO09300
  931.          MH        R7,=H'100'          MAKE IT 100THS OF SECONDS        TSO09310
  932.          ST        R7,DELAY            USE THIS VALUE NOW               TSO09320
  933.          B         SETOK                                                TSO09330
  934. BADDELAY WRTERM    'Must be between 1-99999 (DECIMAL).'                 TSO09340
  935.          B         SETERR                                               TSO09350
  936. SETERR   LA        R15,4               SET A NON-ZERO RETCODE           TSO09360
  937.          B         SETRET                                               TSO09370
  938. SETOK    SR        R15,R15             RETCODE OF 0                     TSO09380
  939. *                                                                       TSO09390
  940. SETRET   L         R13,4(R13)                                           TSO09400
  941.          L         R14,12(R13)                                          TSO09410
  942.          LM        R0,R12,20(R13)                                       TSO09420
  943.          BR        R14                                                  TSO09430
  944. SETSAVE  DS        18F                                                  TSO09440
  945. PCK      PACK      PKVAR(8),0(0,R6)                                     TSO09450
  946. BLKPCK   PACK      PKVAR(8),0(0,R5)                                     TSO09460
  947. SPCPCK   PACK      PKVAR(8),0(0,R5)                                     TSO09470
  948. DLYPCK   PACK      PKVAR(8),0(0,R5)                                     TSO09480
  949.          LTORG                                                          TSO09490
  950.          DROP      R11                                                  TSO09500
  951.          DROP      R12                                                  TSO09510
  952.          EJECT                                                          TSO09520
  953. **********************************************************************  TSO09530
  954. *                                                                    *  TSO09540
  955. *        ROUTINE TO PROCESS SHOW COMMAND                             *  TSO09550
  956. *                                                                    *  TSO09560
  957. **********************************************************************  TSO09570
  958. SHOW     DS        0H                                                   TSO09580
  959.          STM       R14,R12,12(R13)     SAVE CALLER'S REGISTERS          TSO09590
  960.          BALR      R12,0               ESTABLISH ADDRESSABILITY         TSO09600
  961.          USING     *,R12                                                TSO09610
  962.          LA        R14,SHOWSAVE        ADDRESS OF MY SAVE AREA          TSO09620
  963.          ST        R13,4(R14)          SAVE CALLER'S                    TSO09630
  964.          ST        R14,8(R13)                                           TSO09640
  965.          LR        R13,R14                                              TSO09650
  966. * USE R11 AS BASE REGISTER FOR 'PARMS' GLOBAL DATA AREA                 TSO09660
  967.          L         R11,=A(PARMS)                                        TSO09670
  968.          USING     PARMS,R11           ESTABLISH ADDRESSABILITY         TSO09680
  969.          BXH       R7,R8,SHONFM        ANY MORE OPERANDS                TSO09690
  970.          L         R6,0(R7)            GET NEXT TOKEN                   TSO09700
  971.          CLI       0(R6),C'?'          NEED HELP ?                      TSO09710
  972.          BNE       SHOREC                                               TSO09720
  973.          WRTERM    'State'                                              TSO09730
  974.          B         SHOWOK                                               TSO09740
  975. SHONFM   WRTERM    '?NOT CONFIRMED'                                     TSO09750
  976.          B         SHOWERR                                              TSO09760
  977. SHOREC   CLI       0(R6),C'S'          IS THIS SHOW STATE               TSO09770
  978.          BNE       SHOWERR                                              TSO09780
  979.          MVC       WRKBUFF(18),=C'Record format is .'                   TSO09790
  980.          MVC       WRKBUFF+17(1),RFM                                    TSO09800
  981.          TPUT      WRKBUFF,18                                           TSO09810
  982.          TR        QUOCHAR(1),ATOE     GET EBCDIC VERSION               TSO09820
  983.          MVC       WRKBUFF(20),=C'Quote character is .'                 TSO09830
  984.          MVC       WRKBUFF+19(1),QUOCHAR                                TSO09840
  985.          TPUT      WRKBUFF,20                                           TSO09850
  986.          TR        QUOCHAR(1),ETOA     KEEP THE ASCII FORM AROUND       TSO09860
  987.          SR        R4,R4               ZERO IT OUT                      TSO09870
  988.          IC        R4,LRECL                                             TSO09880
  989.          MVC       WRKBUFF(8),=C'Lrecl is'                              TSO09890
  990.          BINCVRT   R4,WRKBUFF+8,DBLWRK                                  TSO09900
  991.          TPUT      WRKBUFF,14                                           TSO09910
  992.          LH        R4,BLKSIZE                                           TSO09920
  993.          MVC       WRKBUFF(10),=C'Blksize is'                           TSO09930
  994.          BINCVRT   R4,WRKBUFF+10,DBLWRK                                 TSO09940
  995.          TPUT      WRKBUFF,16                                           TSO09950
  996.          L         R4,TRACK                                             TSO09960
  997.          MVC       WRKBUFF(32),=C'Space allocation is ..... tracks'     TSO09970
  998.          BINCVRT   R4,WRKBUFF+19,DBLWRK                                 TSO09980
  999.          TPUT      WRKBUFF,32                                           TSO09990
  1000.          SR        R4,R4               ZERO IT OUT                      TSO10000
  1001.          IC        R4,SSOH                                              TSO10010
  1002.        MVC WRKBUFF(44),=C'Start-of-header character is ..... (decimal)' TSO10020
  1003.          BINCVRT   R4,WRKBUFF+28,DBLWRK                                 TSO10030
  1004.          TPUT      WRKBUFF,44                                           TSO10040
  1005.          SR        R4,R4               ZERO IT OUT                      TSO10050
  1006.          IC        R4,SEOL                                              TSO10060
  1007.          MVC WRKBUFF(40),=C'End-of-line character is ..... (decimal)'   TSO10070
  1008.          BINCVRT   R4,WRKBUFF+24,DBLWRK                                 TSO10080
  1009.          TPUT      WRKBUFF,40                                           TSO10090
  1010.          MVC WRKBUFF(38),=C'Receive packet size is ..... (decimal)'     TSO10100
  1011.          L         R1,RPSIZ                                             TSO10110
  1012.          BINCVRT   R1,WRKBUFF+22,DBLWRK                                 TSO10120
  1013.          TPUT      WRKBUFF,38                                           TSO10130
  1014.          MVC       WRKBUFF(28),=C'Delay value is ..... seconds'         TSO10140
  1015.          L         R1,DELAY                                             TSO10150
  1016.          SR        R0,R0                                                TSO10160
  1017.          D         R0,=F'100'                                           TSO10170
  1018.          BINCVRT   R1,WRKBUFF+14,DBLWRK                                 TSO10180
  1019.          TPUT      WRKBUFF,28                                           TSO10190
  1020.          MVC       WRKBUFF(9),=C'Debug is '                             TSO10200
  1021.          MVC       WRKBUFF+9(3),=C'off'                                 TSO10210
  1022.          TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN  IS IT OPEN?        TSO10220
  1023.          BZ        SHOWDBG                                              TSO10230
  1024.          MVC       WRKBUFF+9(3),=C'on '                                 TSO10240
  1025. SHOWDBG  TPUT      WRKBUFF,12                                           TSO10250
  1026.          B         SHOWOK                                               TSO10260
  1027. SHOWERR  LA        R15,4               SET A NON-ZERO RETCODE           TSO10270
  1028.          B         SHOWRET                                              TSO10280
  1029. SHOWOK   SR        R15,R15             ZERO RETCODE                     TSO10290
  1030. *                                                                       TSO10300
  1031. SHOWRET  L         R13,4(R13)                                           TSO10310
  1032.          L         R14,12(R13)                                          TSO10320
  1033.          LM        R0,R12,20(R13)                                       TSO10330
  1034.          BR        R14                                                  TSO10340
  1035. SHOWSAVE DS        18F                                                  TSO10350
  1036.          LTORG                                                          TSO10360
  1037.          DROP      R11                                                  TSO10370
  1038.          DROP      R12                                                  TSO10380
  1039. *                                                                       TSO10390
  1040.          EJECT                                                          TSO10400
  1041. **********************************************************************  TSO10410
  1042. *                                                                    *  TSO10420
  1043. *        ROUTINE TO INITIALIZE PARAMETER AREA                        *  TSO10430
  1044. *                                                                    *  TSO10440
  1045. **********************************************************************  TSO10450
  1046. INIT     DS        0H                                                   TSO10460
  1047.          STM       R14,R12,12(R13)                                      TSO10470
  1048.          BALR      R12,0                                                TSO10480
  1049.          USING     *,R12                                                TSO10490
  1050.          LA        R14,ISAVE                                            TSO10500
  1051.          ST        R13,4(R14)                                           TSO10510
  1052.          ST        R14,8(R13)                                           TSO10520
  1053.          LR        R13,R14                                              TSO10530
  1054. *                                                                       TSO10540
  1055. * INITIALIZE VARIABLES THAT GET CHANGED DURING EXECUTION                TSO10550
  1056. * USE R11 AS BASE REGISTER FOR 'PARMS' GLOBAL DATA LIST                 TSO10560
  1057.          L         R11,=A(PARMS)                                        TSO10570
  1058.          USING     PARMS,R11                                            TSO10580
  1059.          XC        SNDPKT,SNDPKT       CLEAR OUT THESE BUFFERS          TSO10590
  1060.          XC        RECPKT,RECPKT                                        TSO10600
  1061.          XC        INPUT,INPUT                                          TSO10610
  1062.          LA        R0,BUF                                               TSO10620
  1063.          LA        R1,L'BUF            ; CLEAR OUT THE BUFFER.          TSO10630
  1064.          SR        R15,R15                                              TSO10640
  1065.          MVCL      R0,R14                                               TSO10650
  1066.          LA        R0,RBUF                                              TSO10660
  1067.          LA        R1,L'RBUF                                            TSO10670
  1068.          SR        R15,R15                                              TSO10680
  1069.          MVCL      R0,R14                                               TSO10690
  1070.          XC        SDAT,SDAT                                            TSO10700
  1071.          XC        RDAT,RDAT                                            TSO10710
  1072.          XC        N,N                 SET VARIABLES TO ZERO            TSO10720
  1073.          XC        NUM,NUM                                              TSO10730
  1074.          XC        LSDAT,LSDAT                                          TSO10740
  1075.          XC        LRDAT,LRDAT                                          TSO10750
  1076.          MVI       FLAGS,X'00'         CLEAR ALL FLAGS                  TSO10760
  1077.          XC        SAVPL,SAVPL                                          TSO10770
  1078.          XC        RSAVPL,RSAVPL                                        TSO10780
  1079.          XC        NUMTRY,NUMTRY                                        TSO10790
  1080.          MVC       FILNAM,=18X'20'     BLANK OUT FILNAM & NAME          TSO10800
  1081.          MVC       NAME,=18X'20'                                        TSO10810
  1082.          MVI       PREV,X'00'                                           TSO10820
  1083.          MVI       ERRNUM,X'FF'        SET TO NO ERROR FOR NOW          TSO10830
  1084.          MVI       OLDERR,X'FF'        SAME HERE                        TSO10840
  1085.          XC        PKVAR,PKVAR         ZERO IT OUT                      TSO10850
  1086.          XC        OLDTRY,OLDTRY                                        TSO10860
  1087.          XC        SPSIZ,SPSIZ                                          TSO10870
  1088.          XC        SIZE,SIZE                                            TSO10880
  1089.          XC        TEMP,TEMP                                            TSO10890
  1090.          XC        STORLOC,STORLOC                                      TSO10900
  1091.          MVC       DELAY,DDELAY        SET DEFAULT DELAY                TSO10910
  1092.          MVC       LRECL(1),DLRECL     SET DEFAULTS, JUST IN CASE       TSO10920
  1093.          MVC       BLKSIZE(2),DBLKSIZE SET DEFAULTS, JUST IN CASE       TSO10930
  1094.          MVC       TRACK,DTRACK        DEFAULT SPACE OF 5 TRACKS        TSO10940
  1095.          MVC       RFM(1),DRECFM                                        TSO10950
  1096.          MVC       QUOCHAR(1),DQUOTE                                    TSO10960
  1097.          MVC       RQUO(1),DQUOTE                                       TSO10970
  1098.          MVC       REOL(1),DEOL                                         TSO10980
  1099.          MVC       SEOL(1),DEOL                                         TSO10990
  1100.          MVC       SSOH(1),DSOH                                         TSO11000
  1101.          MVC       RSOH(1),DSOH                                         TSO11010
  1102.          MVI       STATE,C' '                                           TSO11020
  1103.          MVI       STYPE,C' '                                           TSO11030
  1104.          MVI       RTYPE,C' '                                           TSO11040
  1105. *                                                                       TSO11050
  1106. INITRET  L         R13,4(R13)                                           TSO11060
  1107.          L         R14,12(R13)                                          TSO11070
  1108.          LM        R0,R12,20(R13)                                       TSO11080
  1109.          BR        R14                                                  TSO11090
  1110. ISAVE    DS        18F                                                  TSO11100
  1111.          LTORG                                                          TSO11110
  1112.          DROP      R11                                                  TSO11120
  1113.          DROP      R12                                                  TSO11130
  1114.          EJECT                                                          TSO11140
  1115. **********************************************************************  TSO11150
  1116. *                                                                    *  TSO11160
  1117. *        ROUTINE TO PROCESS SEND COMMAND                             *  TSO11170
  1118. *                                                                    *  TSO11180
  1119. **********************************************************************  TSO11190
  1120. SEND     DS        0H                                                   TSO11200
  1121.          STM       R14,R12,12(R13)     SAVE CALLER'S REGISTERS          TSO11210
  1122.          BALR      R12,0               ESTABLISH ADDRESSABILITY         TSO11220
  1123.          USING     *,R12                                                TSO11230
  1124.          LA        R14,SENDSAVE        ADDRESS OF MY SAVE AREA          TSO11240
  1125.          ST        R13,4(R14)          SAVE CALLER'S                    TSO11250
  1126.          ST        R14,8(R13)                                           TSO11260
  1127.          LR        R13,R14                                              TSO11270
  1128. * USE R11 AS BASE REGISTER FOR 'PARMS' GLOBAL DATA AREA                 TSO11280
  1129.          L         R11,=A(PARMS)                                        TSO11290
  1130.          USING     PARMS,R11           ESTABLISH ADDRESSABILITY         TSO11300
  1131.          MVI       STATE,C'S'                                           TSO11310
  1132.          SR        R3,R3                                                TSO11320
  1133.          ST        R3,N                                                 TSO11330
  1134.          ST        R3,NUMTRY                                            TSO11340
  1135. OKSND    TM        FLAGS,FLG1          IS THIS THE FIRST FILE?          TSO11350
  1136.          BNO       SLOOP                                                TSO11360
  1137.          NI        FLAGS,X'FF'-FLG1    TURN OFF FIRST FILE FLAG         TSO11370
  1138. **********************************************************************  TSO11380
  1139. *        MAIN SEND LOOP                                              *  TSO11390
  1140. **********************************************************************  TSO11400
  1141. SLOOP    CLI       STATE,C'D'          SEND DATA STATE                  TSO11410
  1142.          BE        SDATA                                                TSO11420
  1143.          CLI       STATE,C'F'          SEND FILE STATE                  TSO11430
  1144.          BE        SFILE                                                TSO11440
  1145.          CLI       STATE,C'S'          SEND INIT STATE                  TSO11450
  1146.          BE        SINIT                                                TSO11460
  1147.          CLI       STATE,C'Z'          END OF FILE STATE                TSO11470
  1148.          BE        SEOF                                                 TSO11480
  1149.          CLI       STATE,C'B'          SEND BREAK STATE                 TSO11490
  1150.          BE        SBREAK                                               TSO11500
  1151.          CLI       STATE,C'C'          COMPLETE STATE                   TSO11510
  1152.          BE        COMPLETE                                             TSO11520
  1153.          CLI       STATE,C'A'          ABORT STATE                      TSO11530
  1154.          BE        ABORT               ERROR - GO TO ABORT STATE        TSO11540
  1155.          MVI       ERRNUM,X'02'        UNRECOGNIZED STATE               TSO11550
  1156.          B         ABORT               OTHERWISE, DIE                   TSO11560
  1157. **********************************************************************  TSO11570
  1158. *        CREATE AND SEND INITIALIZATION PACKET                       *  TSO11580
  1159. **********************************************************************  TSO11590
  1160. SINIT    CLC       NUMTRY,IMXTRY       SEE IF CAN SEND                  TSO11600
  1161.          BL        OK1                 YES WE CAN                       TSO11610
  1162.          MVI       STATE,C'A'          NOPE, GO INTO ABORT STATE        TSO11620
  1163.          B         SLOOP                                                TSO11630
  1164. OK1      L         R5,SPACE            MAKE CHARACTER PRINTABLE         TSO11640
  1165.          A         R5,RPSIZ            ADD REC PACKET SIZE              TSO11650
  1166.          STC       R5,SDAT             ADD SIZE INFO TO BUFFER          TSO11660
  1167.          L         R5,SPACE                                             TSO11670
  1168.          A         R5,=F'8'            8 FOR TIMEOUT                    TSO11680
  1169.          STC       R5,SDAT+1                                            TSO11690
  1170.          L         R5,SPACE            SEND ZERO + " " FOR NPAD         TSO11700
  1171.          STC       R5,SDAT+2           WE'RE THE SLOW GUYS              TSO11710
  1172.          SR        R5,R5               PAD WITH NULLS                   TSO11720
  1173.          L         R3,O1H                                               TSO11730
  1174.          XR        R5,R3               CTL FUNCTION (XOR WITH 64)       TSO11740
  1175.          STC       R5,SDAT+3           DON'T NEED PADCHAR EITHER        TSO11750
  1176.          SR        R5,R5               ZERO IT OUT FOR NEXT TWO GUYS    TSO11760
  1177.          IC        R5,REOL             EOL CHAR I NEED                  TSO11770
  1178.          A         R5,SPACE            MAKE PRINTABLE                   TSO11780
  1179.          STC       R5,SDAT+4                                            TSO11790
  1180.          IC        R5,QUOCHAR          MY QUOTE CHAR                    TSO11800
  1181.          STC       R5,SDAT+5                                            TSO11810
  1182.          L         R3,NUMTRY                                            TSO11820
  1183.          LA        R3,1(R3)            INCREMENT TRIAL COUNTER          TSO11830
  1184.          ST        R3,NUMTRY                                            TSO11840
  1185.          MVI       STYPE,AS            PACKET TYPE = SEND INITIATE      TSO11850
  1186.          MVC       LSDAT(4),=F'6'     BUFFER SIZE FOR THIS SEND         TSO11860
  1187.          L         R4,DSSIZ            GET DEFAULT SPSIZ                TSO11870
  1188.          S         R4,FIVE             FOR NOW, USE DEFAULT SPSIZ....   TSO11880
  1189.          ST        R4,SIZE             ....TO SET VALUE OF SIZE         TSO11890
  1190.          L         R15,=A(SPACK)       GET ADDRESS OF ROUTINE 'SPACK'   TSO11900
  1191.          BALR      14,15               SAVE * AND GO TO SPACK           TSO11910
  1192.          CLI       STATE,C'A'                                           TSO11920
  1193.          BE        ABORT                                                TSO11930
  1194.          L         15,=A(RPACK)        GET ADDRESS OF 'RPACK'           TSO11940
  1195.          BALR      14,15               SAVE * AND GO TO RPACK           TSO11950
  1196.          CLI       RTYPE,AE            ERROR PACKET?                    TSO11960
  1197.          BNE       Y1                  NO, THEN MAYBE AN ACK            TSO11970
  1198.          MVI       ERRNUM,X'0A'        MICRO DIED                       TSO11980
  1199.          MVI       STATE,C'A'          AND DIE                          TSO11990
  1200.          B         SLOOP                                                TSO12000
  1201. Y1       CLI       RTYPE,AY            SEE IF GOT ACK                   TSO12010
  1202.          BNE       N1                  MAYBE IT'S 'N'                   TSO12020
  1203.          CLC       N,NUM               CHECK MESSAGE NUMBERS            TSO12030
  1204.          BE        AOK1                                                 TSO12040
  1205.          MVI       ERRNUM,X'08'        PACKET LOST                      TSO12050
  1206.          B         SLOOP                                                TSO12060
  1207. AOK1     SR        R4,R4               ZERO OUT REGISTER                TSO12070
  1208.          IC        R4,RDAT             USE SPSIZ THE MICRO WANTS        TSO12080
  1209.          S         R4,SPACE            SUBTRACT THE ' '                 TSO12090
  1210.          C         R4,=F'26'           BUFFER HAS TO BE >= 26           TSO12100
  1211.          BNL       CH1                 SO FAR, SO GOOD                  TSO12110
  1212.          MVI       STATE,C'A'          ABORT THEN                       TSO12120
  1213.          MVI       ERRNUM,X'00'        INVALID DATA-PACKET-SIZE ERROR   TSO12130
  1214.          B         SLOOP                                                TSO12140
  1215. CH1      C         R4,MAXPACK          MAX PACKET SIZE                  TSO12150
  1216.          BNH       CH2                 CONTINUE IF <= TO MAX            TSO12160
  1217.          MVI       STATE,C'A'          DIE                              TSO12170
  1218.          MVI       ERRNUM,X'00'        INVALID DATA-PACKET-SIZE ERROR   TSO12180
  1219.          B         SLOOP                                                TSO12190
  1220. CH2      STC       R4,SPSIZ+3          USE SPSIZ THE MICRO WANTS        TSO12200
  1221.          S         R4,FIVE                                              TSO12210
  1222.          ST        R4,SIZE             SET SIZE TO SPSIZ-5              TSO12220
  1223.          CLC       LRDAT(4),=F'4'      USING DEFAULTS?                  TSO12230
  1224.          BNH       NOCHG               YUP                              TSO12240
  1225.          LA        R5,RDAT             POINTER TO THE BUFFER            TSO12250
  1226.          SR        R7,R7                                                TSO12260
  1227.          IC        R7,4(R5)            SEOL MICRO WANTS                 TSO12270
  1228.          S         R7,SPACE            UNCHAR (IE - SUBTRACT SPACE)     TSO12280
  1229.          STC       R7,SEOL                                              TSO12290
  1230. NOCHG    MVI       STATE,C'F'          PUT INTO SEND FILE STATE         TSO12300
  1231.          XC        NUMTRY,NUMTRY       RESET TO ZERO                    TSO12310
  1232.          L         R3,N                                                 TSO12320
  1233.          LA        R3,1(R3)            ADD ONE                          TSO12330
  1234.          ST        R3,N                STORE VALUE INCREMENTED BY 1     TSO12340
  1235.          NC        N(4),=X'0000003F'   MASK TO GET MOD 64               TSO12350
  1236.          B         SLOOP                                                TSO12360
  1237. N1       CLI       RTYPE,AN            SEE IF IT'S 'N'                  TSO12370
  1238.          BNE       AB1                 IF NOT, DIE                      TSO12380
  1239.          TM        FLAGS,FLG4          DID MICRO NAK OR I REJECTED?     TSO12390
  1240.          BO        SLOOP               LEAVE ERR MSG AS IS IF I DID     TSO12400
  1241.          MVI       ERRNUM,X'09'        MICRO NAK'ED                     TSO12410
  1242.          B         SLOOP                                                TSO12420
  1243. AB1      MVI       STATE,C'A'          ELSE, ABORT                      TSO12430
  1244.          MVI       ERRNUM,X'07'        UNRECOGNIZED PACKET TYPE         TSO12440
  1245.          B         SLOOP                                                TSO12450
  1246. **********************************************************************  TSO12460
  1247. *        CREATE AND SEND FILE PACKET                                 *  TSO12470
  1248. **********************************************************************  TSO12480
  1249. SFILE    CLC       NUMTRY,MAXTRY       EXCEEDED NO. OF TRIES ALLOWED?   TSO12490
  1250.          BL        OK2                 NOPE, STILL OK                   TSO12500
  1251.          MVI       STATE,C'A'          ABORT IF YES                     TSO12510
  1252.          B         SLOOP                                                TSO12520
  1253. OK2      DS        0H                                                   TSO12530
  1254.          TR        FILNAM,ETOA                                          TSO12540
  1255.          LH    R5,FILNAML          GET LENGTH OF FILENAME - 1           TSO12550
  1256.          MVC   SDAT(*-*),FILNAM    USE FOR EXECUTE                      TSO12560
  1257.          EX    R5,*-6              GO MOVE FILENAME TO BUFFER           TSO12570
  1258.          LA    R5,1(,R5)           UP THE FILE LENGTH TO BE EXACT       TSO12580
  1259.          L         R3,NUMTRY                                            TSO12590
  1260.          LA        R3,1(R3)            INCREMENT TRIAL COUNTER          TSO12600
  1261.          ST        R3,NUMTRY                                            TSO12610
  1262.          MVI       STYPE,AF            PACKET TYPE = FILE HEADER        TSO12620
  1263.          ST        R5,LSDAT            SET BUFFER SIZE                  TSO12630
  1264.          TR        FILNAM,ATOE                                          TSO12640
  1265. SNDFIL   L         R15,=A(SPACK)       GET ADDRESS OF 'SPACK'           TSO12650
  1266.          BALR      14,15               SAVE * AND GO TO SPACK           TSO12660
  1267.          CLI       STATE,C'A'                                           TSO12670
  1268.          BE        ABORT                                                TSO12680
  1269.          L         15,=A(RPACK)        GET ADDRESS OF 'RPACK'           TSO12690
  1270.          BALR      14,15               SAVE * AND GO TO RPACK           TSO12700
  1271.          CLI       RTYPE,AE            ERROR PACKET?                    TSO12710
  1272.          BNE       Y2                  MAYBE AN ACK                     TSO12720
  1273.          MVI       ERRNUM,X'0A'        MICRO DIED                       TSO12730
  1274.          MVI       STATE,C'A'          SO WE DO TOO                     TSO12740
  1275.          B         SLOOP                                                TSO12750
  1276. Y2       CLI       RTYPE,AY            SEE IF GOT ACK                   TSO12760
  1277.          BNE       N2                  MAYBE GOT AN 'N'                 TSO12770
  1278.          CLC       N,NUM               DO WE HAVE THE CORRECT ACK?      TSO12780
  1279.          BE        AOK2                                                 TSO12790
  1280.          MVI       ERRNUM,X'08'        MISSING A PACKET SOMEWHERE       TSO12800
  1281.          B         SLOOP                                                TSO12810
  1282. AOK2     MVI       STATE,C'D'          PREPARE FOR SEND-DATA STATE      TSO12820
  1283.          XC        NUMTRY,NUMTRY       RESET COUNTER                    TSO12830
  1284.          L         R3,N                                                 TSO12840
  1285.          LA        R3,1(R3)            ADD ONE                          TSO12850
  1286.          ST        R3,N                STORE INCREMENTED VALUE          TSO12860
  1287.          NC        N(4),=X'0000003F'   MASK TO GET MOD 64               TSO12870
  1288.          L         15,=A(GTCHR)                                         TSO12880
  1289.          BALR      14,15               DO GET-CHAR AND COME BACK        TSO12890
  1290.          B         SLOOP                                                TSO12900
  1291. N2       CLI       RTYPE,AN                                             TSO12910
  1292.          BNE       AB2                 ELSE, DIE                        TSO12920
  1293.          TM        FLAGS,FLG4          DID MICRO NAK OR I REJECTED?     TSO12930
  1294.          BO        SLOOP               LEAVE ERR MSG AS IS IF I DID     TSO12940
  1295.          MVI       ERRNUM,X'09'        MICRO NAK'ED                     TSO12950
  1296.          B         SLOOP                                                TSO12960
  1297. AB2      MVI       STATE,C'A'          ELSE, ABORT                      TSO12970
  1298.          MVI       ERRNUM,X'07'        UNRECOGNIZED PACKET TYPE         TSO12980
  1299.          B         SLOOP                                                TSO12990
  1300. **********************************************************************  TSO13000
  1301. *        CREATE AND SEND DATA PACKETS                                *  TSO13010
  1302. **********************************************************************  TSO13020
  1303. SDATA    CLC       NUMTRY,MAXTRY       CAN WE DO IT?                    TSO13030
  1304.          BL        OK4                 YES                              TSO13040
  1305.          MVI       STATE,C'A'          ELSE ABORT                       TSO13050
  1306.          B         SLOOP                                                TSO13060
  1307. OK4      L         R3,NUMTRY                                            TSO13070
  1308.          LA        R3,1(R3)            INCREMENT COUNTER                TSO13080
  1309.          ST        R3,NUMTRY                                            TSO13090
  1310.          MVI       STYPE,AD            PACKET TYPE = DATA               TSO13100
  1311.          L         R15,=A(SPACK)                                        TSO13110
  1312.          BALR      14,15               GO TO SPACK AND RETURN           TSO13120
  1313.          CLI       STATE,C'A'                                           TSO13130
  1314.          BE        ABORT                                                TSO13140
  1315.          L         15,=A(RPACK)                                         TSO13150
  1316.          BALR      14,15               SAME FOR RPACK                   TSO13160
  1317.          CLI       RTYPE,AE            ERROR PACKET?                    TSO13170
  1318.          BNE       Y4                  MAYBE AN ACK                     TSO13180
  1319.          MVI       ERRNUM,X'0A'        MICRO DIED                       TSO13190
  1320.          MVI       STATE,C'A'          SO WE DO TOO                     TSO13200
  1321.          B         SLOOP                                                TSO13210
  1322. Y4       CLI       RTYPE,AY            SEE IF GOT 'ACK'                 TSO13220
  1323.          BNE       N4                  SEE IF IT'S AN 'N'               TSO13230
  1324.          CLC       N,NUM               DO WE HAVE THE CORRECT ACK?      TSO13240
  1325.          BE        AOK4                                                 TSO13250
  1326.          MVI       ERRNUM,X'08'        MISSING A PACKET                 TSO13260
  1327.          B         SLOOP                                                TSO13270
  1328. AOK4     XC        NUMTRY,NUMTRY       RESET COUNTER                    TSO13280
  1329.          L         R3,N                                                 TSO13290
  1330.          LA        R3,1(R3)            INCREMENT COUNTER                TSO13300
  1331.          ST        R3,N                                                 TSO13310
  1332.          NC        N(4),=X'0000003F'   MASK TO GET MOD 64               TSO13320
  1333.          L         15,=A(GTCHR)                                         TSO13330
  1334.          BALR      14,15               DO GET-CHAR AND RETURN           TSO13340
  1335.          B         SLOOP                                                TSO13350
  1336. N4       CLI       RTYPE,AN                                             TSO13360
  1337.          BNE       AB4                                                  TSO13370
  1338.          TM        FLAGS,FLG4          DID MICRO NAK OR I REJECTED?     TSO13380
  1339.          BO        SLOOP               LEAVE ERR MSG AS IS IF I DID     TSO13390
  1340.          MVI       ERRNUM,X'09'        MICRO NAK'ED                     TSO13400
  1341.          B         SLOOP                                                TSO13410
  1342. AB4      MVI       STATE,C'A'                                           TSO13420
  1343.          MVI       ERRNUM,X'07'        ILLEGAL PACKET TYPE              TSO13430
  1344.          B         SLOOP                                                TSO13440
  1345. **********************************************************************  TSO13450
  1346. *        CREATE AND SEND EOF PACKET                                  *  TSO13460
  1347. **********************************************************************  TSO13470
  1348. SEOF     CLC       NUMTRY,MAXTRY       CAN WE DO IT?                    TSO13480
  1349.          BL        OK5                 BRANCH IF YES                    TSO13490
  1350.          MVI       STATE,C'A'          ABORT IF NO                      TSO13500
  1351.          B         SLOOP                                                TSO13510
  1352. OK5      L         R3,NUMTRY                                            TSO13520
  1353.          LA        R3,1(R3)            ADD ONE                          TSO13530
  1354.          ST        R3,NUMTRY           STORE INCREMENTED COUNTER        TSO13540
  1355.          MVI       STYPE,AZ            PACKET TYPE = EOF                TSO13550
  1356.          XC        LSDAT,LSDAT         LENGTH OF ZERO                   TSO13560
  1357.          L         R15,=A(SPACK)                                        TSO13570
  1358.          BALR      14,15               SAVE * AND GO TO SPACK           TSO13580
  1359.          CLI       STATE,C'A'                                           TSO13590
  1360.          BE        ABORT                                                TSO13600
  1361.          L         15,=A(RPACK)                                         TSO13610
  1362.          BALR      14,15               SAME FOR RPACK                   TSO13620
  1363.          CLI       RTYPE,AE            ERROR PACKET?                    TSO13630
  1364.          BNE       Y5                  MAYBE AN ACK                     TSO13640
  1365.          MVI       ERRNUM,X'0A'        MICRO DIED                       TSO13650
  1366.          MVI       STATE,C'A'          SO WE DO TOO                     TSO13660
  1367.          B         SLOOP                                                TSO13670
  1368. Y5       CLI       RTYPE,AY            CHECK FOR 'ACK'                  TSO13680
  1369.          BNE       N5                  MAYBE WAS A 'NAK'                TSO13690
  1370.          CLC       N,NUM               CORRECT ACK?                     TSO13700
  1371.          BE        AOK5                                                 TSO13710
  1372.          MVI       ERRNUM,X'08'        LOST A PACKET                    TSO13720
  1373.          B         SLOOP                                                TSO13730
  1374. AOK5     L         R3,N                                                 TSO13740
  1375.          LA        R3,1(R3)            ADD ONE                          TSO13750
  1376.          ST        R3,N                STORE VALUE INCREMENTED BY 1     TSO13760
  1377.          NC        N(4),=X'0000003F'   MASK TO GET MOD 64               TSO13770
  1378.          MVI       STATE,C'F'          SET TO SEND FILE FOR NOW         TSO13780
  1379. *                                                                       TSO13790
  1380. *                                                                       TSO13800
  1381. *  WE JUST PROCESS ONE FILE FOR NOW.                                    TSO13810
  1382. *                                                                       TSO13820
  1383. DIEOK    MVI       STATE,C'B'          BREAK CONNECTION                 TSO13830
  1384.          B         SLOOP                                                TSO13840
  1385. N5       CLI       RTYPE,AN                                             TSO13850
  1386.          BNE       AB5                 DIE IF NOT A NAK                 TSO13860
  1387.          TM        FLAGS,FLG4          DID MICRO NAK OR I REJECTED?     TSO13870
  1388.          BO        SLOOP               LEAVE ERR MSG AS IS IF I DID     TSO13880
  1389.          MVI       ERRNUM,X'09'        MICRO NAK'ED                     TSO13890
  1390.          B         SLOOP                                                TSO13900
  1391. AB5      MVI       STATE,C'A'          ELSE, ABORT                      TSO13910
  1392.          MVI       ERRNUM,X'07'        UNRECOGNIZED PACKET TYPE         TSO13920
  1393.          B         SLOOP                                                TSO13930
  1394. **********************************************************************  TSO13940
  1395. *        CREATE AND SEND BREAK PACKET                                *  TSO13950
  1396. **********************************************************************  TSO13960
  1397. SBREAK   CLC       NUMTRY,MAXTRY       OVER OUR LIMIT?                  TSO13970
  1398.          BL        OK6                 BRANCH IF NO                     TSO13980
  1399.          MVI       STATE,C'A'          ABORT IF YES                     TSO13990
  1400.          B         SLOOP                                                TSO14000
  1401. OK6      L         R3,NUMTRY                                            TSO14010
  1402.          LA        R3,1(R3)            ADD ONE                          TSO14020
  1403.          ST        R3,NUMTRY           INCREMEMTED TRIAL COUNTER        TSO14030
  1404.          MVI       STYPE,AB            PACKET TYPE = BREAK              TSO14040
  1405.          XC        LSDAT,LSDAT         LENGTH = ZERO                    TSO14050
  1406.          L         R15,=A(SPACK)                                        TSO14060
  1407.          BALR      14,15               SAVE * AND GO TO SPACK           TSO14070
  1408.          CLI       STATE,C'A'                                           TSO14080
  1409.          BE        ABORT                                                TSO14090
  1410.          L         15,=A(RPACK)                                         TSO14100
  1411.          BALR      14,15               SAVE * AND GO TO RPACK           TSO14110
  1412.          CLI       RTYPE,AE            ERROR PACKET?                    TSO14120
  1413.          BNE       Y6                  MAYBE AN ACK                     TSO14130
  1414.          MVI       ERRNUM,X'0A'        MICRO DIED                       TSO14140
  1415.          MVI       STATE,C'A'          THEN WE DO TOO                   TSO14150
  1416.          B         SLOOP                                                TSO14160
  1417. Y6       CLI       RTYPE,AY            CHECK FOR ACK                    TSO14170
  1418.          BNE       N6                  CHECK FOR 'N'                    TSO14180
  1419.          CLC       N,NUM               CORRECT ACK?                     TSO14190
  1420.          BE        AOK6                                                 TSO14200
  1421.          MVI       ERRNUM,X'08'        LOST A PACKET                    TSO14210
  1422.          B         SLOOP                                                TSO14220
  1423. AOK6     MVI       STATE,C'C'          COMPLETED STATE                  TSO14230
  1424.          B         SLOOP                                                TSO14240
  1425. N6       CLI       RTYPE,AN            CHECK FOR 'N'                    TSO14250
  1426.          BNE       AB6                 DIE IF NOT A NAK                 TSO14260
  1427.          TM        FLAGS,FLG4          DID MICRO NAK OR I REJECTED?     TSO14270
  1428.          BO        SLOOP               LEAVE ERR MSG AS IS IF I DID     TSO14280
  1429.          MVI       ERRNUM,X'09'        MICRO NAK'ED                     TSO14290
  1430.          B         SLOOP                                                TSO14300
  1431. AB6      MVI       STATE,C'A'          ELSE,ABORT                       TSO14310
  1432.          MVI       ERRNUM,X'07'        UNRECOGNIZED PACKET TYPE         TSO14320
  1433.          B         SLOOP                                                TSO14330
  1434. **********************************************************************  TSO14340
  1435. *        CREATE AND SEND ABORT PACKET                                *  TSO14350
  1436. **********************************************************************  TSO14360
  1437. ABORT    DS        0H                                                   TSO14370
  1438.          TM        FLAGS,FLG1          DYING ON FILE-NOT-FOUND?         TSO14380
  1439.          BO        NOERRP              IF SO, THEN NO ERROR PACKET      TSO14390
  1440.          CLI       ERRNUM,X'0A'        DID THE MICRO DIE?               TSO14400
  1441.          BE        NOERRP              NO ERROR PACKET IF SO            TSO14410
  1442.          MVI       STYPE,AE            ERROR PACKET                     TSO14420
  1443.          MVC       LSDAT(4),=F'20'     ALL MSGS ARE THIS LONG           TSO14430
  1444.          MVC       N(4),NUM            SYNCH PACKET NUMBERS             TSO14440
  1445.          SR        R5,R5                                                TSO14450
  1446.          IC        R5,ERRNUM           GET RIGHT MESSAGE NUMBER         TSO14460
  1447.          M         R4,=F'20'           OFFSET := ERRNUM * 20            TSO14470
  1448.          LA        R5,ERRTAB(R5)                                        TSO14480
  1449.          MVC       SDAT(20),0(R5)      SPACK NEEDS THE DATA HERE        TSO14490
  1450.          TR        SDAT(20),ETOA                                        TSO14500
  1451.          L         R15,=A(SPACK)                                        TSO14510
  1452.          BALR      R14,R15             SEND ERROR PACKET & DIE          TSO14520
  1453. NOERRP   LA        R15,4               SET NON-ZERO RETCODE             TSO14530
  1454.          B         SENDRET             PREPARE TO LEAVE                 TSO14540
  1455. **********************************************************************  TSO14550
  1456. *        PROCESS COMPLETE                                            *  TSO14560
  1457. **********************************************************************  TSO14570
  1458. COMPLETE SR        R15,R15             ZERO WILL BE RETCODE             TSO14580
  1459. SENDRET  L         R13,4(R13)                                           TSO14590
  1460.          L         R14,12(R13)                                          TSO14600
  1461.          LM        R0,R12,20(R13)                                       TSO14610
  1462.          BR        R14                                                  TSO14620
  1463.          EJECT                                                          TSO14630
  1464. **********************************************************************  TSO14640
  1465. *                                                                    *  TSO14650
  1466. *  ROUTINE TO GET A CHARACTER FROM INPUT BUFFER WILL READ DISK TO    *  TSO14660
  1467. *        FILL THE BUFFER.                                            *  TSO14670
  1468. *                                                                    *  TSO14680
  1469. **********************************************************************  TSO14690
  1470. GTCHR    DS        0H                                                   TSO14700
  1471.          TM        FLAGS,FLG3          SEE IF THERE'S STUFF IN BUF      TSO14710
  1472.          BO        STUFF               ONES -> STUFF'S THERE            TSO14720
  1473. *                                                                       TSO14730
  1474. *  GO TO COMMON ROUTINE TO READ SOME BYTES                              TSO14740
  1475. *                                                                       TSO14750
  1476.          LA        R15,READX                                            TSO14760
  1477.          BALR      R15,R15                                              TSO14770
  1478. *                                                                       TSO14780
  1479.          LTR       R4,R1               PUT RESULT OF READ IN R4         TSO14790
  1480.          BZ        OK8                                                  TSO14800
  1481.          C         R4,=A(ERCOD)        RETCODE OF 12 MEANS EOF          TSO14810
  1482.          BNE       ERR1                TRY IT AGAIN                     TSO14820
  1483.          MVI       STATE,C'Z'          MAKE TO EOF STATE                TSO14830
  1484.          BR        R14                                                  TSO14840
  1485. ERR1     MVI       STATE,C'A'          ABORT ON FILE SYSTEM ERROR       TSO14850
  1486.          MVI       ERRNUM,X'0C'        INVALID RECORD LENGTH            TSO14860
  1487.          C         R4,=F'8'            WAS OUR GUESS RIGHT?             TSO14870
  1488.          BER       R14                 IF YES, RETURN                   TSO14880
  1489.          MVI       ERRNUM,X'0D'        ELSE, GOT AN I/O ERROR           TSO14890
  1490.          BR        R14                                                  TSO14900
  1491. OK8      LR        R5,R0               GET NUMBER OF BYTES READ IN      TSO14910
  1492.          LR        R4,R5               SAVE ALSO IN R4                  TSO14920
  1493.          BCTR      R4,0                SUBTRACT 1 FOR EX COMMAND        TSO14930
  1494.          EX        R4,TRANS            EBCDIC TO ASCII TRANSLATION      TSO14940
  1495.          LA        R8,BUF              GET LOCATION OF BUFFER INPUT     TSO14950
  1496.          LA        R9,BUF(R4)          LAST POSITION IN THAT BUFFER     TSO14960
  1497. X4       CLI       0(R9),X'20'         IS THIS A BLANK?                 TSO14970
  1498.          BNE       X5                  NO, FOUND LAST CHAR OF LINE      TSO14980
  1499.          BCTR      R9,0                                                 TSO14990
  1500.          CR        R9,R8                                                TSO15000
  1501.          BNL       X4                  FIND LAST CHAR                   TSO15010
  1502.          SR        R5,R5               ALL BLANKS                       TSO15020
  1503.          B         FOO                                                  TSO15030
  1504. X5       SR        R9,R8                                                TSO15040
  1505.          LR        R5,R9               LENGTH OF LINE                   TSO15050
  1506.          LA        R5,1(R5)            ADD ONE                          TSO15060
  1507. FOO      LA        R9,BUF(R5)          FIRST BLANK SPACE AFTER DATA     TSO15070
  1508.          MVC       0(1,R9),=X'0D'      ADD ASCII CR                     TSO15080
  1509.          LA        R9,1(R9)            INCREMENT POINTER                TSO15090
  1510.          MVC       0(1,R9),=X'0A'      AND ADD ASCII LF                 TSO15100
  1511.          LA        R5,2(R5)            TWO EXTRA BYTES OF DATA NOW      TSO15110
  1512.          ST        R5,RECL             LRECL + 2 (FOR CRLF)             TSO15120
  1513.          SR        R8,R8               ZERO OUT INDEX FOR BUF           TSO15130
  1514. STUFF    SR        R9,R9               SAME FOR INDEX FOR SDAT          TSO15140
  1515.          SR        R10,R10             CHARACTER COUNTER                TSO15150
  1516.          SR        R5,R5               WILL HOLD QUOCHAR                TSO15160
  1517.          IC        R5,QUOCHAR                                           TSO15170
  1518.          L         R8,SAVPL            WHERE WE LEFT OFF                TSO15180
  1519.          C         R8,RECL             SEE IF ARE AT LIMIT              TSO15190
  1520.          BNL       FULL2               LEAVE IF REACHED OR EXCEEDED     TSO15200
  1521.          SR        R7,R7                                                TSO15210
  1522. LOOP     IC        R7,BUF(R8)          PICK UP BYTE                     TSO15220
  1523.          CR        R7,R5               IS IT THE QUOTE CHARACTER?       TSO15230
  1524.          BE        SPECIAL                                              TSO15240
  1525.          C         R7,DEL              IS IT THE CHARDEL?               TSO15250
  1526.          BE        SPECIAL                                              TSO15260
  1527.          C         R7,SPACE            IS IT A CONTROL CHARACTER?       TSO15270
  1528.          BL        SPECIAL                                              TSO15280
  1529.          B         ADDIT                                                TSO15290
  1530. SPECIAL  L         R4,SIZE             MUNGE VALUE WHILE IN R4          TSO15300
  1531.          SR        R4,R10              FIND DIF BETWWEN THE TWO         TSO15310
  1532.          C         R4,TWO              SEE IF HAVE AT LEAST 2 BYTES     TSO15320
  1533.          BNL       ROOM                YES,CAN ADD                      TSO15330
  1534.          STC       R10,LSDAT+3         SET LSDAT TO VAL OF COUNTER      TSO15340
  1535.          OI        FLAGS,FLG3          SET FLAG TO SHOW STUFF'S THERE   TSO15350
  1536.          ST        R8,SAVPL            SAVE PLACE IN BUF                TSO15360
  1537.          BR        14                  LEAVE THIS ROUTINE               TSO15370
  1538. ROOM     LA        R4,SDAT(R9)         WHERE IT'S GOING                 TSO15380
  1539.          MVC       0(1,R4),QUOCHAR     MOVE QUOTE CHAR THERE            TSO15390
  1540.          LA        R9,1(R9)            INCREMENT SDAT COUNTER           TSO15400
  1541.          LA        R10,1(R10)          INCREMENT CHARACTER COUNTER      TSO15410
  1542.          CR        R7,R5               DON'T ADD ^O100 TO THIS          TSO15420
  1543.          BE        ADDIT               IT'S ALREADY PRINTABLE           TSO15430
  1544.          A         R7,O1H              ADD ^O100 TO CHAR                TSO15440
  1545.          N         R7,=X'0000007F'     GET MOD ^O200                    TSO15450
  1546. ADDIT    STC       R7,SDAT(R9)         ADD THE CHARACTER                TSO15460
  1547.          LA        R9,1(R9)            INCREMENT SDAT COUNTER           TSO15470
  1548.          LA        R8,1(R8)            INCREMENT BUF COUNTER            TSO15480
  1549.          LA        R10,1(R10)          INCREMENT CHARACTER COUNTER      TSO15490
  1550.          C         R8,RECL             SEE IF REACHED LIMIT             TSO15500
  1551.          BNL       FULL2                                                TSO15510
  1552.          C         R9,SIZE             SEE IF REACHED LIMIT             TSO15520
  1553.          BNL       FULL                                                 TSO15530
  1554.          B         LOOP                                                 TSO15540
  1555. FULL     EQU       *                                                    TSO15550
  1556.          STC       R10,LSDAT+3         THIS ONE TOO                     TSO15560
  1557.          ST        R8,SAVPL            HERE TOO                         TSO15570
  1558.          OI        FLAGS,FLG3          TURN ON FLAG - STUFF IN BUF      TSO15580
  1559.          BR        14                                                   TSO15590
  1560. FULL2    EQU       *                                                    TSO15600
  1561.          STC       R10,LSDAT+3         THIS ONE TOO                     TSO15610
  1562.          XC        SAVPL,SAVPL         RESET THIS                       TSO15620
  1563.          NI        FLAGS,X'FF'-FLG3    TURN OFF LEFTOVER DATA FLAG      TSO15630
  1564.          BR        14                                                   TSO15640
  1565. SENDSAVE DS        18F                                                  TSO15650
  1566. TRANS    TR        BUF(0),ETOA         EBCDIC TO ASCII TRANSLATION      TSO15660
  1567. TRNS     TR        SNDPKT(0),ATOE      BACK FROM ASCII TO EBCDIC        TSO15670
  1568. PARSE    DC        32X'00'                                              TSO15680
  1569.          DC        X'01'               STOP ON A SPACE                  TSO15690
  1570.          DC        223X'00'                                             TSO15700
  1571. FIRST    MVC       SDAT(0),FILNAM      PICK UP THE FN                   TSO15710
  1572. SECOND   MVC       0(0,R7),FILNAM+8    PICK UP FT                       TSO15720
  1573.          LTORG                                                          TSO15730
  1574.          DROP      R11                                                  TSO15740
  1575.          DROP      R12                 DON'T NEED THEM ANYMORE          TSO15750
  1576.          EJECT                                                          TSO15760
  1577. **********************************************************************  TSO15770
  1578. *                                                                    *  TSO15780
  1579. *        ROUTINE TO PROCESS SEND PACKET REQUEST                      *  TSO15790
  1580. *                                                                    *  TSO15800
  1581. **********************************************************************  TSO15810
  1582. SPACK    DS        0H     CSECT                                         TSO15820
  1583.          STM       R14,R12,12(R13)     SAVE CALLER'S REGISTERS          TSO15830
  1584.          BALR      R12,0               ESTABLISH ADDRESSABILITY         TSO15840
  1585.          USING     *,R12                                                TSO15850
  1586.          LA        R14,SPSAVE          ADDRESS OF MY SAVE AREA          TSO15860
  1587.          ST        R13,4(R14)          SAVE CALLER'S                    TSO15870
  1588.          ST        R14,8(R13)                                           TSO15880
  1589.          LR        R13,R14                                              TSO15890
  1590. * USE R11 AS BASE REGISTER FOR 'PARMS' GLOBAL DATA AREA                 TSO15900
  1591.          L         R11,=A(PARMS)                                        TSO15910
  1592.          USING     PARMS,R11           ESTABLISH ADDRESSABILITY         TSO15920
  1593.          SR        R9,R9                                                TSO15930
  1594.          MVC       PHDR,SSOH           ADD SOH TO PACKET                TSO15940
  1595.          CLC       LSDAT,SIZE          NEED DATA SIZE <= SPSIZ-5        TSO15950
  1596.          BNH       FINE                                                 TSO15960
  1597.          MVI       ERRNUM,X'00'        DATA SIZE EXCEEDS MAX LIMIT      TSO15970
  1598.          MVI       STATE,C'A'          ABORT ON THIS                    TSO15980
  1599.          B         SPRET                                                TSO15990
  1600. FINE     L         R4,=F'35'           USE ^o43 TO OFFSET DATA          TSO16000
  1601.          A         R4,LSDAT            ADD IT TO LSDAT                  TSO16010
  1602.          STC       R4,PLEN                                              TSO16020
  1603.          AR        R9,R4               AND THEN ADD IT TO CHECKSUM      TSO16030
  1604.          CLC       N,ZERO              CHECK IF N IS VALID              TSO16040
  1605.          BNL       T1                  OK IF >= TO 0                    TSO16050
  1606.          MVI       ERRNUM,X'01'        ILLEGAL MESSAGE NUMBER           TSO16060
  1607.          MVI       STATE,C'A'                                           TSO16070
  1608.          B         SPRET                                                TSO16080
  1609. T1       CLC       N,O1H               SEE IF IS <= OCTAL 100           TSO16090
  1610.          BNH       T2                                                   TSO16100
  1611.          MVI       ERRNUM,X'01'        ILLEGAL MESSAGE NUMBER           TSO16110
  1612.          MVI       STATE,C'A'                                           TSO16120
  1613.          B         SPRET                                                TSO16130
  1614. T2       L         R4,SPACE            OFFSET THIS VALUE TOO            TSO16140
  1615.          A         R4,N                ADD IT TO N                      TSO16150
  1616.          ST        R4,TEMP                                              TSO16160
  1617.          MVC       PNUM(1),TEMP+3                                       TSO16170
  1618.          A         R9,TEMP             AND ADD TO CHECKSUM              TSO16180
  1619.          CLI       STYPE,X'41'         ASCII 'A'                        TSO16190
  1620.          BL        T3                  CAN'T BE LESS THAN THIS          TSO16200
  1621.          CLI       STYPE,X'5A'         ASCII 'Z'                        TSO16210
  1622.          BNH       T4                  CAN'T BE GREATER                 TSO16220
  1623. T3       MVI       ERRNUM,X'07'        ILLEGAL PACKET TYPE              TSO16230
  1624.          MVI       STATE,C'A'          DIE ON THIS                      TSO16240
  1625.          B         SPRET                                                TSO16250
  1626. T4       MVC       PTYPE(1),STYPE      ADD MESSAGE TYPE                 TSO16260
  1627.          SR        R2,R2               ZERO IT OUT                      TSO16270
  1628.          IC        R2,STYPE                                             TSO16280
  1629.          AR        R9,R2               ADD TO CHECKSUM                  TSO16290
  1630.          L         R6,LSDAT            HOW MUCH DATA                    TSO16300
  1631.          LTR       R6,R6               TEST IT OUT                      TSO16310
  1632.          BZ        NODAT                                                TSO16320
  1633.          SR        R5,R5               USE TO GET DATA                  TSO16330
  1634.          SR        R3,R3               USE TO HOLD DATA                 TSO16340
  1635. DATCHK   IC        R3,SDAT(R5)         PICK UP CHAR                     TSO16350
  1636.          AR        R9,R3               ADD TO CHECKSUM                  TSO16360
  1637.          LA        R5,1(R5)            BUMP POINTER                     TSO16370
  1638.          BCTR      R6,0                                                 TSO16380
  1639.          LTR       R6,R6               MORE DATA?                       TSO16390
  1640.          BNZ       DATCHK                                               TSO16400
  1641. NODAT    L         R6,LSDAT            WILL NEED THIS LATER             TSO16410
  1642.          LR        R7,R6               MUNGE WHILE IN R7                TSO16420
  1643.          BCTR      R7,0                SUBTRACT 1 FOR EX FUNCTION       TSO16430
  1644.          EX        R7,MOVE             MOVE THE DATA TO SNDPKT          TSO16440
  1645.          ST        R9,TEMP             WE'LL NEED THIS SOON             TSO16450
  1646.          N         R9,=X'000000C0'     GET MOD 192                      TSO16460
  1647.          M         R8,ONE              CARRY OVER THE SIGN BIT          TSO16470
  1648.          D         R8,O1H              GET MOD 64                       TSO16480
  1649.          A         R9,TEMP             ADD THE TWO VALUES               TSO16490
  1650.          N         R9,=X'0000003F'     GET MOD 64 OF CHECKSUM           TSO16500
  1651.          A         R9,SPACE            ADD OFFSET                       TSO16510
  1652.          STC       R9,PDATA(R6)        ADD CHECKSUM AFTER DATA          TSO16520
  1653.          LA        R6,1(R6)            MOVE POINTER                     TSO16530
  1654.          IC        R9,SEOL             ADD SEND END OF PACKET CHAR      TSO16540
  1655.          STC       R9,PDATA(R6)                                         TSO16550
  1656.          LA        R6,5(R6)            VALUE OF LSDAT+5                 TSO16560
  1657.          TR        SNDPKT(130),ATOE    SEND IN EBCDIC                   TSO16570
  1658.          TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN  IS IT OPEN?        TSO16580
  1659.          BZ        SPNODEB                                              TSO16590
  1660.          MVC       WRKBUFF(2),=H'20'                                    TSO16600
  1661.          XC        WRKBUFF+2(2),WRKBUFF+2                               TSO16610
  1662.          MVC       WRKBUFF+4(16),=CL16'TPUT SEND PACKET'                TSO16620
  1663.          PUT       DEBUG,WRKBUFF                                        TSO16630
  1664.          LA        R1,4(,R6)           ADJUST LENGTH                    TSO16640
  1665.          STH       R1,WRKBUFF          SET RDW                          TSO16650
  1666.          EX        R6,DBGMVC1          MOVE IN DATA                     TSO16660
  1667.          PUT       DEBUG,WRKBUFF                                        TSO16670
  1668. SPNODEB  TPUT      SNDPKT,(R6),CONTROL                                  TSO16680
  1669.          LTR       R15,R15             WAS THERE ANY ERROR?             TSO16690
  1670.          BZ        SPRET               NO, THEN JUST RETURN             TSO16700
  1671.          MVI       ERRNUM,10           SET MICRO DIED                   TSO16710
  1672.          MVI       STATE,C'A'          ABORT ON THIS                    TSO16720
  1673. SPRET    L         R13,4(R13)                                           TSO16730
  1674.          L         R14,12(R13)                                          TSO16740
  1675.          LM        R0,R12,20(R13)                                       TSO16750
  1676.          BR        14                                                   TSO16760
  1677. SPSAVE   DS        18F                                                  TSO16770
  1678. MOVE     MVC       PDATA(0),SDAT                                        TSO16780
  1679. DBGMVC1  MVC       WRKBUFF+4(*-*),SNDPKT                                TSO16790
  1680.          LTORG                                                          TSO16800
  1681.          DROP      R11                                                  TSO16810
  1682.          DROP      R12                 DON'T NEED THEM ANYMORE          TSO16820
  1683.          EJECT                                                          TSO16830
  1684. **********************************************************************  TSO16840
  1685. *                                                                    *  TSO16850
  1686. *        ROUTINE TO PROCESS RECEIVE PACKET REQUEST                   *  TSO16860
  1687. *                                                                    *  TSO16870
  1688. **********************************************************************  TSO16880
  1689. RPACK    DS        0H                                                   TSO16890
  1690.          STM       R14,R12,12(R13)     SAVE CALLER'S REGISTERS          TSO16900
  1691.          BALR      R12,0               ESTABLISH ADDRESSABILITY         TSO16910
  1692.          USING     *,R12                                                TSO16920
  1693.          LA        R14,RPSAVE          ADDRESS OF MY SAVE AREA          TSO16930
  1694.          ST        R13,4(R14)          SAVE CALLER'S                    TSO16940
  1695.          ST        R14,8(R13)                                           TSO16950
  1696.          LR        R13,R14                                              TSO16960
  1697. * USE R11 AS BASE REGISTER FOR 'PARMS' GLOBAL DATA AREA                 TSO16970
  1698.          L         R11,=A(PARMS)                                        TSO16980
  1699.          USING     PARMS,R11           ESTABLISH ADDRESSABILITY         TSO16990
  1700.          TGET      RECPKT,130,ASIS                                      TSO17000
  1701.          LTR       R15,R15             WAS THERE AN ERROR?              TSO17010
  1702.          BZ        RPTSTDB             NO, THEN TEST FOR DEBUG          TSO17020
  1703.          MVI       RTYPE,AE            SET AN ERROR                     TSO17030
  1704.          B         RPRET                                                TSO17040
  1705. RPTSTDB  TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN  IS IT OPEN?        TSO17050
  1706.          BZ        RDNODEB                                              TSO17060
  1707.          LA        R8,4(,R1)       SAVE LENGTH                          TSO17070
  1708.          MVC       WRKBUFF(2),=H'19'                                    TSO17080
  1709.          XC        WRKBUFF+2(2),WRKBUFF+2                               TSO17090
  1710.          MVC       WRKBUFF+4(15),=CL15'TGET REC PACKET'                 TSO17100
  1711.          PUT       DEBUG,WRKBUFF                                        TSO17110
  1712.          STH       R8,WRKBUFF          SET RDW                          TSO17120
  1713.          EX        R8,DBGMVC2          MOVE IN DATA                     TSO17130
  1714.          PUT       DEBUG,WRKBUFF                                        TSO17140
  1715. RDNODEB  TR        RECPKT(130),ETOA                                     TSO17150
  1716.          NI        FLAGS,X'FF'-FLG4    ASSUME MICRO'LL NAK-NOT RPACK    TSO17160
  1717.          SR        R8,R8               INDEX REG FOR RECPKT             TSO17170
  1718.          SR        R5,R5               CHECKSUM REGISTER                TSO17180
  1719. TRY      LA        R7,RECPKT(R8)       ADDRESS OF CHARACTER             TSO17190
  1720.          CLC       RSOH,0(R7)          IS IT START OF HEADER            TSO17200
  1721.          BE        READIN              YES; SO FAR, SO GOOD             TSO17210
  1722.          LA        R8,1(R8)            TRY NEXT CHARACTER               TSO17220
  1723.          C         R8,=F'130'          SEE IF EXCEED BUFFER             TSO17230
  1724.          BL        TRY                                                  TSO17240
  1725.          MVI       ERRNUM,X'03'        NO "SOH" ERROR                   TSO17250
  1726.          B         BADP                                                 TSO17260
  1727. READIN   SR        R9,R9               ZERO OUT INDEX REG FOR RDAT      TSO17270
  1728.          LA        R8,1(R8)            INCREMENT COUNTER                TSO17280
  1729.          LA        R7,RECPKT(R8)       PICK UP LOC OF CHAR COUNT        TSO17290
  1730.          CLC       RSOH,0(R7)          IS IT START OF HEADER?           TSO17300
  1731.          BE        READIN              START OVER                       TSO17310
  1732.          CLC       0(1,R7),DQUOTE      COUNT+' '+3 AND ^d35             TSO17320
  1733.          BNL       CONT                CONTINUE IF >=                   TSO17330
  1734.          MVI       ERRNUM,X'04'        BAD LENGTH ATTRIBUTE             TSO17340
  1735.          B         BADP                                                 TSO17350
  1736. CONT     IC        R5,0(R7)            START CHECKSUM                   TSO17360
  1737.          LR        R7,R5               MUNGE IN R7 TO GET LRDAT         TSO17370
  1738.          S         R7,=F'35'           LENGTH OF DATA                   TSO17380
  1739.          STC       R7,LRDAT+3                                           TSO17390
  1740.          LA        R8,1(R8)            INCREMENT                        TSO17400
  1741.          SR        R7,R7               ZERO IT OUT                      TSO17410
  1742.          IC        R7,RECPKT(R8)       PICK UP PACKET NUMBER            TSO17420
  1743.          CLM       R7,B'0001',RSOH     IS IT START OF HEADER            TSO17430
  1744.          BE        READIN                                               TSO17440
  1745.          AR        R5,R7               ADD TO CHECKSUM                  TSO17450
  1746.          S         R7,SPACE            SUBTRACT THE ' '                 TSO17460
  1747.          STC       R7,NUM+3            NUM := RECEIVED PACKET NO.       TSO17470
  1748.          LA        R8,1(R8)            INCREMENT COUNTER                TSO17480
  1749.          IC        R7,RECPKT(R8)       PICK UP MESSAGE TYPE             TSO17490
  1750.          CLM       R7,B'0001',RSOH     IS IT START OF HEADER?           TSO17500
  1751.          BE        READIN                                               TSO17510
  1752.          AR        R5,R7               ADD TO CHECKSUM                  TSO17520
  1753.          STC       R7,RTYPE            PUT INTO RTYPE                   TSO17530
  1754.          LA        R8,1(R8)            GO TO NEXT BYTE                  TSO17540
  1755.          L         R4,LRDAT            COUNTER TO GET ALL DATA          TSO17550
  1756. LUP      C         R4,ZERO             SEE IF PICKED UP ALL DATA        TSO17560
  1757.          BE        FIN                                                  TSO17570
  1758.          XC        TEMP,TEMP           ZERO IT OUT                      TSO17580
  1759.          LA        R7,RECPKT(R8)       NEXT LOCATION IN BUFFER          TSO17590
  1760.          MVC       TEMP+3(1),0(R7)     PICK UP NEXT BYTE                TSO17600
  1761.          CLC       RSOH,TEMP+3         IS IT START OF HEADER            TSO17610
  1762.          BE        READIN                                               TSO17620
  1763.          LA        R7,RDAT(R9)         WHERE THE DATA'S GOING           TSO17630
  1764.          MVC       0(1,R7),TEMP+3      AND MOVE IT                      TSO17640
  1765.          A         R5,TEMP             ADD TO CHECKSUM                  TSO17650
  1766.          LA        R8,1(R8)            ADD ONE                          TSO17660
  1767.          LA        R9,1(R9)            ADD ONE                          TSO17670
  1768.          BCTR      R4,0                DECREMENT COUNTER                TSO17680
  1769.          B         LUP                                                  TSO17690
  1770. FIN      SR        R7,R7               ZERO OUT REGISTER                TSO17700
  1771.          IC        R7,RECPKT(R8)       GET CHECKSUM                     TSO17710
  1772.          CLM       R7,B'0001',RSOH     IS IT START OF HEADER            TSO17720
  1773.          BE        READIN                                               TSO17730
  1774.          ST        R5,TEMP             WE'LL NEED THIS SOON             TSO17740
  1775.          N         R5,=X'000000C0'     GET MOD 192                      TSO17750
  1776.          M         R4,ONE              CARRY OVER THE SIGN BIT          TSO17760
  1777.          D         R4,O1H              GET MOD 64                       TSO17770
  1778.          A         R5,TEMP             ADD THE TWO VALUES               TSO17780
  1779.          N         R5,=X'0000003F'     GET MOD 64                       TSO17790
  1780.          A         R5,SPACE            ADD OFFSET                       TSO17800
  1781.          CR        R5,R7               COMPUTED VS RECEIVED CHECKSUM    TSO17810
  1782.          BE        RPRET                                                TSO17820
  1783.          TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN                     TSO17830
  1784.          BZ        NODEBG2                                              TSO17840
  1785.          MVC       WRKBUFF(2),=H'18'                                    TSO17850
  1786.          XC        WRKBUFF+2(2),WRKBUFF+2                               TSO17860
  1787.          MVC       WRKBUFF+4(14),=CL14'CHECKSUM ERROR'                  TSO17870
  1788.          PUT       DEBUG,WRKBUFF                                        TSO17880
  1789. NODEBG2  MVI       ERRNUM,X'05'        BAD CHECKSUM ERROR               TSO17890
  1790. BADP     MVI       RTYPE,AN            RETURN A NAK                     TSO17900
  1791.          OI        FLAGS,FLG4          RPACK NAK'ED THE PACKET          TSO17910
  1792. RPRET    L         R13,4(R13)                                           TSO17920
  1793.          L         R14,12(R13)                                          TSO17930
  1794.          LM        R0,R12,20(R13)                                       TSO17940
  1795.          BR        14                                                   TSO17950
  1796. DBGMVC2  MVC       WRKBUFF+4(*-*),RECPKT                                TSO17960
  1797. RPSAVE   DS        18F                                                  TSO17970
  1798.          LTORG                                                          TSO17980
  1799.          DROP      R11                                                  TSO17990
  1800.          DROP      R12                 DON'T NEED THEM ANYMORE          TSO18000
  1801.          EJECT                                                          TSO18010
  1802. **********************************************************************  TSO18020
  1803. *                                                                    *  TSO18030
  1804. *  DISK FILE READ ROUTE WITH DEBUGGING CODE                          *  TSO18040
  1805. *                                                                    *  TSO18050
  1806. **********************************************************************  TSO18060
  1807. READX    DS        0H                                                   TSO18070
  1808.          USING     PARMS,R11           ESTABLISH ADDRESSABILITY         TSO18080
  1809.          STM       R12,R15,READSAVE                                     TSO18090
  1810.          BALR      R12,0                                                TSO18100
  1811.          USING     *,R12                                                TSO18110
  1812.          TM        KERIN+(DCBRECFM-IHADCB),DCBRECV  VARIABLE?           TSO18120
  1813.          BO        RDVAR                                                TSO18130
  1814.          GET       KERIN,BUF                                            TSO18140
  1815.          B         RDTSTDB                                              TSO18150
  1816. RDVAR    GET       KERIN,BUF-4                                          TSO18160
  1817. RDTSTDB  TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN  IS IT OPEN?        TSO18170
  1818.          BZ        RDNODBG                                              TSO18180
  1819.          MVC       WRKBUFF(2),=H'12'                                    TSO18190
  1820.          XC        WRKBUFF+2(2),WRKBUFF+2                               TSO18200
  1821.          MVC       WRKBUFF+4(8),=CL8'QSAM GET'                          TSO18210
  1822.          PUT       DEBUG,WRKBUFF                                        TSO18220
  1823.          LH        R1,KERIN+(DCBLRECL-IHADCB)                           TSO18230
  1824.          STH       R1,WRKBUFF                                           TSO18240
  1825.          EX        R1,DBGMVC3                                           TSO18250
  1826.          PUT       DEBUG,WRKBUFF                                        TSO18260
  1827. RDNODBG  XR        R1,R1               SET RETURN CODE                  TSO18270
  1828.          LH        R0,KERIN+(DCBLRECL-IHADCB)  GET RECORD LENGTH        TSO18280
  1829.          TM        KERIN+(DCBRECFM-IHADCB),DCBRECV  VARIABLE?           TSO18290
  1830.          BZ        *+12                NO, THEN SKIP                    TSO18300
  1831.          LH        R0,BUF-4            GET LENGTH FROM RDW              TSO18310
  1832.          SH        R0,=H'4'            REMOVE RDW LENGTH                TSO18320
  1833.          LM        R12,R15,READSAVE                                     TSO18330
  1834.          BR        R15                                                  TSO18340
  1835. DBGMVC3  MVC       WRKBUFF+4(*-*),KERIN                                 TSO18350
  1836. *                                                                       TSO18360
  1837. INEOF    DS        0H                                                   TSO18370
  1838.          LA        R1,12                                                TSO18380
  1839.          XR        R0,R0                                                TSO18390
  1840.          LM        R12,R15,READSAVE                                     TSO18400
  1841.          BR        R15                                                  TSO18410
  1842.          LTORG                                                          TSO18420
  1843.          DROP      R11                                                  TSO18430
  1844.          DROP      R12                                                  TSO18440
  1845.          EJECT                                                          TSO18450
  1846. **********************************************************************  TSO18460
  1847. *                                                                    *  TSO18470
  1848. *        ROUTINE TO PROCESS RECEIVE COMMAND                          *  TSO18480
  1849. *                                                                    *  TSO18490
  1850. **********************************************************************  TSO18500
  1851. RECEIVE  DS        0H                                                   TSO18510
  1852.          STM       R14,R12,12(R13)     SAVE CALLER'S REGISTERS          TSO18520
  1853.          BALR      R12,0               ESTABLISH ADDRESSABILITY         TSO18530
  1854.          USING     *,R12                                                TSO18540
  1855.          LA        R14,RECSAVE         ADDRESS OF MY SAVE AREA          TSO18550
  1856.          ST        R13,4(R14)          SAVE CALLER'S                    TSO18560
  1857.          ST        R14,8(R13)                                           TSO18570
  1858.          LR        R13,R14                                              TSO18580
  1859. * USE R11 AS BASE REGISTER FOR THE GLOBAL DATA AREA, 'PARMS'            TSO18590
  1860.          L         R11,=A(PARMS)                                        TSO18600
  1861.          USING     PARMS,R11                                            TSO18610
  1862.          SR        R6,R6               GET ZERO                         TSO18620
  1863.          ST        R6,NUMTRY           ZERO THIS OUT                    TSO18630
  1864.          ST        R6,N                HERE TOO                         TSO18640
  1865.          MVI       STATE,C'R'          SET TO RECEIVE STATE             TSO18650
  1866. **********************************************************************  TSO18660
  1867. *        MAIN RECEIVE PROCESSING LOOP                                *  TSO18670
  1868. **********************************************************************  TSO18680
  1869. RLOOP    CLI       STATE,C'D'          RECEIVE DATA STATE               TSO18690
  1870.          BE        RDATA                                                TSO18700
  1871.          CLI       STATE,C'F'          RECEIVE FILE STATE               TSO18710
  1872.          BE        RFILE                                                TSO18720
  1873.          CLI       STATE,C'R'          RECEIVE INIT STATE               TSO18730
  1874.          BE        RINIT                                                TSO18740
  1875.          CLI       STATE,C'C'          COMPLETE STATE                   TSO18750
  1876.          BE        RCOMP                                                TSO18760
  1877.          CLI       STATE,C'A'          ABORT STATE                      TSO18770
  1878.          BE        RABORT                                               TSO18780
  1879.          MVI       ERRNUM,X'02'        UNRECOGNIZED STATE               TSO18790
  1880.          B         RABORT              ELSE, DIE                        TSO18800
  1881. **********************************************************************  TSO18810
  1882. *        PROCESS INITIALIZATION PACKET                               *  TSO18820
  1883. **********************************************************************  TSO18830
  1884. RINIT    CLC       NUMTRY,IMXTRY       SEE IF CAN RECEIVE               TSO18840
  1885.          BL        ROK1                YES, WE CAN                      TSO18850
  1886.          MVI       STATE,C'A'          NOPE, GO INTO ABORT STATE        TSO18860
  1887.          B         RLOOP                                                TSO18870
  1888. ROK1     L         R3,NUMTRY                                            TSO18880
  1889.          LA        R3,1(R3)            INCREMENT TRIAL COUNTER          TSO18890
  1890.          ST        R3,NUMTRY                                            TSO18900
  1891.          L         R4,DSSIZ            DEFAULT SEND PACKET SIZE         TSO18910
  1892.          S         R4,FIVE             USE DEFAULT TO SET "SIZE"        TSO18920
  1893.          ST        R4,SIZE             IN CASE WE DIE BEFORE IT'S SET   TSO18930
  1894.          L         R15,=A(RPACK)       GET INIT INFORMATION             TSO18940
  1895.          BALR      R14,R15                                              TSO18950
  1896.          CLI       RTYPE,AE            ERROR PACKET?                    TSO18960
  1897.          BNE       RY1                 ALL OK                           TSO18970
  1898.          MVI       ERRNUM,X'0A'        MICRO DIED                       TSO18980
  1899.          MVI       STATE,C'A'          SO WE DO TOO                     TSO18990
  1900.          B         RLOOP                                                TSO19000
  1901. RY1      CLI       RTYPE,AS            IS IT A SEND-INIT PACKET         TSO19010
  1902.          BNE       RN1                 MAYBE IT GOT CLOBBERED           TSO19020
  1903.          SR        R4,R4               ZERO OUT REGISTER                TSO19030
  1904.          IC        R4,RDAT             GET FIRST CHARACTER              TSO19040
  1905.          S         R4,SPACE            SUBTRACT THE ' '                 TSO19050
  1906.          C         R4,=F'26'           MIN SPACK SIZE                   TSO19060
  1907.          BNL       RCH1                SO FAR, SO GOOD                  TSO19070
  1908.          MVI       STATE,C'A'          ELSE, ABORT                      TSO19080
  1909.          MVI       ERRNUM,X'00'        INVALID DATA-PACKET-SIZE ERROR   TSO19090
  1910.          B         RLOOP                                                TSO19100
  1911. RCH1     C         R4,MAXPACK          MAX PACKET SIZE                  TSO19110
  1912.          BNH       RCH2                                                 TSO19120
  1913.          MVI       STATE,C'A'          ABORT IF SIZE IS ILLEGAL         TSO19130
  1914.          MVI       ERRNUM,X'00'        BAD SEND DATA LENGTH             TSO19140
  1915.          B         RLOOP                                                TSO19150
  1916. RCH2     STC       R4,SPSIZ+3          USE THE VALUE AS SEND SIZE       TSO19160
  1917.          S         R4,FIVE                                              TSO19170
  1918.          ST        R4,SIZE             SET IT TO SPSIZ-5                TSO19180
  1919.          CLC       LRDAT(4),=F'4'      USING ALL DEFAULTS ?             TSO19190
  1920.          BNH       NOCH                YUP                              TSO19200
  1921.          LA        R5,RDAT             POINT TO THE BUFFER              TSO19210
  1922.          SR        R7,R7                                                TSO19220
  1923.          IC        R7,4(R5)            SEOL THE MICRO WANTS             TSO19230
  1924.          S         R7,SPACE            UNCHAR (SUBTRACT ' ')            TSO19240
  1925.          STC       R7,SEOL                                              TSO19250
  1926.          CLC       LRDAT(4),FIVE       ANY MORE DATA?                   TSO19260
  1927.          BNH       NOCH                JUST USE DEFAULTS                TSO19270
  1928.          MVC       RQUO(1),5(R5)       SET NEW QUOCHAR VALUE            TSO19280
  1929. NOCH     MVC       N(4),NUM            SYNCH PACKET NUMBERS             TSO19290
  1930.          MVI       STYPE,AY            SET MESSAGE TYPE TO ACK          TSO19300
  1931.          MVC       LSDAT(4),=F'6'     SET LENGTH OF DATA SENDING        TSO19310
  1932.          L         R5,SPACE            MAKE CHARACTER PRINTABLE         TSO19320
  1933.          A         R5,RPSIZ            ADD REC PACKET SIZE              TSO19330
  1934.          STC       R5,SDAT             ADD SIZE INFO TO BUFFER          TSO19340
  1935.          L         R5,SPACE                                             TSO19350
  1936.          A         R5,=F'8'            8 FOR TIMEOUT                    TSO19360
  1937.          STC       R5,SDAT+1                                            TSO19370
  1938.          L         R5,SPACE            SEND ZERO + " " FOR NPAD         TSO19380
  1939.          STC       R5,SDAT+2           WE'RE THE SLOW GUYS              TSO19390
  1940.          SR        R5,R5               PAD WITH NULLS                   TSO19400
  1941.          L         R3,O1H                                               TSO19410
  1942.          XR        R5,R3               CTL FUNCTION (XOR WITH 64)       TSO19420
  1943.          STC       R5,SDAT+3           DON'T NEED PADCHAR EITHER        TSO19430
  1944.          SR        R5,R5               ZERO IT OUT FOR NEXT TWO GUYS    TSO19440
  1945.          IC        R5,REOL             EOL CHAR I NEED                  TSO19450
  1946.          A         R5,SPACE            MAKE PRINTABLE                   TSO19460
  1947.          STC       R5,SDAT+4                                            TSO19470
  1948.          IC        R5,QUOCHAR          MY QUOTE CHAR                    TSO19480
  1949.          STC       R5,SDAT+5                                            TSO19490
  1950.          L         R15,=A(SPACK)       ADDRESS OF SPACK                 TSO19500
  1951.          BALR      R14,R15             SAVE * AND GO TO SPACK           TSO19510
  1952.          CLI       STATE,C'A'                                           TSO19520
  1953.          BE        RABORT                                               TSO19530
  1954.          MVI       STATE,C'F'          SET TO RECEIVE FILE STATE        TSO19540
  1955.          MVC       OLDTRY(4),NUMTRY    SAVE TRIAL COUNTER               TSO19550
  1956.          XC        NUMTRY,NUMTRY       RESET COUNTER TO ZERO            TSO19560
  1957.          L         R3,N                                                 TSO19570
  1958.          LA        R3,1(R3)            ADD ONE                          TSO19580
  1959.          ST        R3,N                STORE VALUE INCREMENTED BY 1     TSO19590
  1960.          NC        N(4),=X'0000003F'   MASK TO GET MOD 64               TSO19600
  1961.          B         RLOOP                                                TSO19610
  1962. RN1      CLI       RTYPE,AN            MAYBE IT'S A NAK                 TSO19620
  1963.          BNE       RSELSE                                               TSO19630
  1964.          MVI       STYPE,AN            SEND A NAK PACKET                TSO19640
  1965.          XC        LSDAT,LSDAT         NO DATA                          TSO19650
  1966.          L         R15,=A(SPACK)                                        TSO19660
  1967.          BALR      R14,R15                                              TSO19670
  1968.          B         RLOOP                                                TSO19680
  1969. RSELSE   MVI       STATE,C'A'          ELSE,ABORT                       TSO19690
  1970.          MVI       ERRNUM,X'07'        ILLEGAL PACKET TYPE              TSO19700
  1971.          B         RLOOP                                                TSO19710
  1972. **********************************************************************  TSO19720
  1973. *        PROCESS FILE PACKET                                         *  TSO19730
  1974. **********************************************************************  TSO19740
  1975. RFILE    CLC       NUMTRY,MAXTRY       EXCEEDED NO. OF TRIALS ALLOWED   TSO19750
  1976.          BL        ROK2                NOPE, STILL OK                   TSO19760
  1977.          MVI       STATE,C'A'          ABORT IF YES                     TSO19770
  1978.          B         RLOOP                                                TSO19780
  1979. ROK2     L         R3,NUMTRY                                            TSO19790
  1980.          LA        R3,1(R3)            INCREMENT TRIAL COUNTER          TSO19800
  1981.          ST        R3,NUMTRY                                            TSO19810
  1982.          L         R15,=A(RPACK)       GET ADDRESS OF RPACK             TSO19820
  1983.          BALR      R14,R15             GO THERE AND RETURN WHEN DONE    TSO19830
  1984.          CLI       RTYPE,AE            ERROR PACKET?                    TSO19840
  1985.          BNE       RY2                 MAYBE AN ACK                     TSO19850
  1986.          MVI       ERRNUM,X'0A'        MICRO DIED                       TSO19860
  1987.          MVI       STATE,C'A'          SO WE DO TOO                     TSO19870
  1988.          B         RLOOP                                                TSO19880
  1989. RY2      CLI       RTYPE,AS            STILL IN INIT STATE?             TSO19890
  1990.          BNE       RNZ                 TRY FOR AN EOF                   TSO19900
  1991.          CLC       OLDTRY,MAXTRY       CAN WE TRY AGAIN?                TSO19910
  1992.          BL        ROLD                                                 TSO19920
  1993.          MVI       STATE,C'A'          ELSE, ABORT                      TSO19930
  1994.          B         RLOOP                                                TSO19940
  1995. ROLD     L         R3,OLDTRY                                            TSO19950
  1996.          LA        R3,1(R3)            INCREMENT COUNTER                TSO19960
  1997.          ST        R3,OLDTRY                                            TSO19970
  1998.          L         R3,N                GET PACKET NUMBER SENT           TSO19980
  1999.          BCTR      R3,0                SUBTRACT ONE FROM IT             TSO19990
  2000.          C         R3,NUM              NUM MUST EQUAL N-1               TSO20000
  2001.          BE        RNUM                                                 TSO20010
  2002.          MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING          TSO20020
  2003.          B         RNAK                SEND A NAK                       TSO20030
  2004. RNUM     MVI       STYPE,AY            ACK PACKET                       TSO20040
  2005.          ST        R3,N                MAKE SEND SEQ NO. = N-1          TSO20050
  2006.          MVC       LSDAT(4),=F'6'     SET DATA LENGTH VARIABLE          TSO20060
  2007.          L         R15,=A(SPACK)                                        TSO20070
  2008.          BALR      R14,R15             GO TO SPACK AND RETURN           TSO20080
  2009.          CLI       STATE,C'A'                                           TSO20090
  2010.          BE        RABORT                                               TSO20100
  2011.          L         R4,N                                                 TSO20110
  2012.          LA        R4,1(R4)            ADD ONE                          TSO20120
  2013.          ST        R4,N                RESTORE N TO PROPER VALUE        TSO20130
  2014.          XC        NUMTRY,NUMTRY       RESET COUNTER TO ZERO            TSO20140
  2015.          B         RLOOP                                                TSO20150
  2016. RNZ      CLI       RTYPE,AZ                                             TSO20160
  2017.          BNE       RNF                 MAYBE IT'S AN 'F'                TSO20170
  2018.          CLC       OLDTRY,MAXTRY       CAN WE TRY AGAIN?                TSO20180
  2019.          BL        ROLD2                                                TSO20190
  2020.          MVI       STATE,C'A'          ELSE,ABORT                       TSO20200
  2021.          B         RLOOP                                                TSO20210
  2022. ROLD2    L         R3,OLDTRY                                            TSO20220
  2023.          LA        R3,1(R3)            INCREMENT COUNTER                TSO20230
  2024.          ST        R3,OLDTRY                                            TSO20240
  2025.          L         R3,N                GET PACKET NUMBER SENT           TSO20250
  2026.          BCTR      R3,0                SUBTRACT ONE FROM IT             TSO20260
  2027.          C         R3,NUM              NUM MUST EQUAL N-1               TSO20270
  2028.          BE        RNUM2                                                TSO20280
  2029.          MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING          TSO20290
  2030.          B         RNAK                SEND A NAK                       TSO20300
  2031. RNUM2    MVI       STYPE,AY            ACK PACKET                       TSO20310
  2032.          ST        R3,N                SEND SEQ := N-1                  TSO20320
  2033.          XC        LSDAT,LSDAT         NO DATA                          TSO20330
  2034.          L         R15,=A(SPACK)                                        TSO20340
  2035.          BALR      R14,R15                                              TSO20350
  2036.          CLI       STATE,C'A'                                           TSO20360
  2037.          BE        RABORT                                               TSO20370
  2038.          L         R4,N                                                 TSO20380
  2039.          LA        R4,1(R4)            ADD ONE                          TSO20390
  2040.          ST        R4,N                RESTORE N TO PROPER VALUE        TSO20400
  2041.          XC        NUMTRY,NUMTRY       RESET COUNTER TO ZERO            TSO20410
  2042.          B         RLOOP                                                TSO20420
  2043. RNF      CLI       RTYPE,AF                                             TSO20430
  2044.          BNE       RNB                 WELL, IT'S NOT A FNAME           TSO20440
  2045.          CLC       NUM,N               THEY HAVE TO BE EQUAL            TSO20450
  2046.          BE        RNUM3                                                TSO20460
  2047.          MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING          TSO20470
  2048.          B         RNAK                SEND A NAK                       TSO20480
  2049. RNUM3    MVI       STYPE,AY            ACK PACKET                       TSO20490
  2050.          XC        LSDAT,LSDAT         NO DATA                          TSO20500
  2051. OVER     L         R15,=A(SPACK)                                        TSO20510
  2052.          BALR      R14,R15             SEND ACK                         TSO20520
  2053.          CLI       STATE,C'A'                                           TSO20530
  2054.          BE        RABORT                                               TSO20540
  2055.          MVC       OLDTRY(4),NUMTRY    KEEP NUMTRY FOR LATER            TSO20550
  2056.          XC        NUMTRY,NUMTRY       RESET TO ZERO                    TSO20560
  2057.          L         R3,N                                                 TSO20570
  2058.          LA        R3,1(R3)            ADD ONE                          TSO20580
  2059.          ST        R3,N                INCREMENT COUNTER                TSO20590
  2060.          NC        N(4),=X'0000003F'   MASK TO GET MOD 64               TSO20600
  2061.          MVI       STATE,C'D'          DATA RECEIVE STATE               TSO20610
  2062.          B         RLOOP                                                TSO20620
  2063. RNB      CLI       RTYPE,AB            SEE IF IT'S A BREAK              TSO20630
  2064.          BNE       RNN                 MAYBE GOT A NAK                  TSO20640
  2065.          CLC       NUM,N                                                TSO20650
  2066.          BE        RNUM4                                                TSO20660
  2067.          MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING          TSO20670
  2068.          B         RNAK                SEND A NAK                       TSO20680
  2069. RNUM4    MVI       STYPE,AY            ACK PACKET                       TSO20690
  2070.          XC        LSDAT,LSDAT         NO DATA                          TSO20700
  2071.          L         R15,=A(SPACK)                                        TSO20710
  2072.          BALR      R14,R15                                              TSO20720
  2073.          CLI       STATE,C'A'                                           TSO20730
  2074.          BE        RABORT                                               TSO20740
  2075.          MVI       STATE,C'C'          COMPLETE STATE                   TSO20750
  2076.          B         RLOOP                                                TSO20760
  2077. RNN      CLI       RTYPE,AN            SEE IF GOT A NAK                 TSO20770
  2078.          BNE       RNELSE                                               TSO20780
  2079. RNAK     MVI       STYPE,AN            SEND A NAK PACKET                TSO20790
  2080.          XC        LSDAT,LSDAT         NO DATA                          TSO20800
  2081.          L         R15,=A(SPACK)                                        TSO20810
  2082.          BALR      R14,R15                                              TSO20820
  2083.          B         RLOOP               DO NOTHING ON A NAK              TSO20830
  2084. RNELSE   MVI       STATE,C'A'          ABORT OTHERWISE                  TSO20840
  2085.          MVI       ERRNUM,X'07'        ILLEGAL PACKET TYPE              TSO20850
  2086.          B         RLOOP                                                TSO20860
  2087. **********************************************************************  TSO20870
  2088. *        RECEIVE DATA PACKETS                                        *  TSO20880
  2089. **********************************************************************  TSO20890
  2090. RDATA    CLC       NUMTRY,MAXTRY       HAVE WE EXCEEDED OUR LIMIT?      TSO20900
  2091.          BL        ROK3                                                 TSO20910
  2092.          MVI       STATE,C'A'          ELSE, ABORT                      TSO20920
  2093.          B         RLOOP                                                TSO20930
  2094. ROK3     L         R4,NUMTRY                                            TSO20940
  2095.          LA        R4,1(R4)            INCREMENT                        TSO20950
  2096.          ST        R4,NUMTRY           SAVE INCREMENTED COUNTER         TSO20960
  2097.          L         R15,=A(RPACK)                                        TSO20970
  2098.          BALR      R14,R15             CALL RPACK                       TSO20980
  2099.          CLI       RTYPE,AE            ERROR PACKET?                    TSO20990
  2100.          BNE       RY3                 MAYBE AN ACK                     TSO21000
  2101.          MVI       ERRNUM,X'0A'        MICRO DIED                       TSO21010
  2102.          MVI       STATE,C'A'          WE ABORT TOO                     TSO21020
  2103.          B         RLOOP                                                TSO21030
  2104. RY3      CLI       RTYPE,AD            IS THIS A DATA PACKET?           TSO21040
  2105.          BNE       RDF                 MAYBE IT'S AN FNAME PACKET       TSO21050
  2106.          CLC       N,NUM               CHECK FOR RIGHT PACKET           TSO21060
  2107.          BNE       DIF                                                  TSO21070
  2108.          L         R15,=A(PTCHR)                                        TSO21080
  2109.          BALR      R14,R15             PUT CHARACTERS INTO FILE         TSO21090
  2110.          LTR       R7,R7               CHECK FOR NO ERROR               TSO21100
  2111.          BZ        OKWR                NO ERROR                         TSO21110
  2112.          MVI       STATE,C'A'          ABORT ON FILE SYSTEM ERROR       TSO21120
  2113.          B         RLOOP                                                TSO21130
  2114. OKWR     MVI       STYPE,AY            ACK PACKET                       TSO21140
  2115.          XC        LSDAT,LSDAT         NO DATA                          TSO21150
  2116.          L         R15,=A(SPACK)                                        TSO21160
  2117.          BALR      R14,R15                                              TSO21170
  2118.          CLI       STATE,C'A'                                           TSO21180
  2119.          BE        RABORT                                               TSO21190
  2120.          MVC       OLDTRY(4),NUMTRY    SAVE NUMTRY'S VALUE IN OLDTRY    TSO21200
  2121.          XC        NUMTRY,NUMTRY       RESET NUMTRY                     TSO21210
  2122.          L         R3,N                                                 TSO21220
  2123.          LA        R3,1(R3)                                             TSO21230
  2124.          ST        R3,N                INCREMENT COUNTER                TSO21240
  2125.          NC        N(4),=X'0000003F'   MASK TO GET MOD 64               TSO21250
  2126.          B         RLOOP                                                TSO21260
  2127. DIF      CLC       OLDTRY,MAXTRY       CAN WE DO IT?                    TSO21270
  2128.          BL        DIFNUM                                               TSO21280
  2129.          MVI       STATE,C'A'          AND ABORT                        TSO21290
  2130.          B         RLOOP                                                TSO21300
  2131. DIFNUM   L         R4,OLDTRY                                            TSO21310
  2132.          LA        R4,1(R4)                                             TSO21320
  2133.          ST        R4,OLDTRY           INCREMENT THIS COUNTER           TSO21330
  2134.          L         R4,N                                                 TSO21340
  2135.          BCTR      R4,0                                                 TSO21350
  2136.          C         R4,NUM              NUM MUST EQUAL N-1               TSO21360
  2137.          BE        DIFOK                                                TSO21370
  2138.          MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING          TSO21380
  2139.          B         RDN1                SEND A NAK                       TSO21390
  2140. DIFOK    XC        NUMTRY,NUMTRY       RESET COUNTER TO ZERO            TSO21400
  2141.          MVI       STYPE,AY            ACK PACKET                       TSO21410
  2142.          XC        LSDAT,LSDAT         NO DATA                          TSO21420
  2143.          ST        R4,N                SET N TO N-1 TO RESEND PACKET    TSO21430
  2144.          L         R15,=A(SPACK)                                        TSO21440
  2145.          BALR      R14,R15             SEND THE PACKET                  TSO21450
  2146.          CLI       STATE,C'A'                                           TSO21460
  2147.          BE        RABORT                                               TSO21470
  2148.          L         R4,N                                                 TSO21480
  2149.          LA        R4,1(R4)            ADD ONE                          TSO21490
  2150.          ST        R4,N                RESTORE N TO PROPER VALUE        TSO21500
  2151.          B         RLOOP               AND RETURN                       TSO21510
  2152. RDF      CLI       RTYPE,AF            SENDING FILENAME AGAIN?          TSO21520
  2153.          BNE       RDZ                                                  TSO21530
  2154.          CLC       OLDTRY,MAXTRY       CAN WE DO IT?                    TSO21540
  2155.          BL        FILOVER             TRYING IT AGAIN                  TSO21550
  2156.          MVI       STATE,C'A'          IF NO, ABORT                     TSO21560
  2157.          B         RLOOP                                                TSO21570
  2158. FILOVER  L         R4,OLDTRY                                            TSO21580
  2159.          LA        R4,1(R4)                                             TSO21590
  2160.          ST        R4,OLDTRY           SAVE INCREMENTED VALUE           TSO21600
  2161.          L         R4,N                                                 TSO21610
  2162.          BCTR      R4,0                NEED VALUE OF N-1                TSO21620
  2163.          C         R4,NUM              N-1 MUST EQUAL NUM               TSO21630
  2164.          BE        FILOK                                                TSO21640
  2165.          MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING          TSO21650
  2166.          B         RDN1                SEND A NAK                       TSO21660
  2167. FILOK    XC        NUMTRY,NUMTRY       RESET TO ZERO                    TSO21670
  2168.          XC        LSDAT,LSDAT         NO DATA                          TSO21680
  2169.          MVI       STYPE,AY            ACK PACKET AGAIN                 TSO21690
  2170.          ST        R4,N                SET N TO N-1 FOR NOW             TSO21700
  2171. OVRWRT   L         R15,=A(SPACK)                                        TSO21710
  2172.          BALR      R14,R15                                              TSO21720
  2173.          CLI       STATE,C'A'                                           TSO21730
  2174.          BE        RABORT                                               TSO21740
  2175.          L         R4,N                                                 TSO21750
  2176.          LA        R4,1(R4)            ADD ONE                          TSO21760
  2177.          ST        R4,N                RESTORE N TO PROPER VALUE        TSO21770
  2178.          B         RLOOP               AND RETURN                       TSO21780
  2179. RDZ      CLI       RTYPE,AZ            IS THIS AN EOF PACKET?           TSO21790
  2180.          BNE       RDN                                                  TSO21800
  2181.          CLC       N,NUM               ARE THEY EQUAL                   TSO21810
  2182.          BE        RDOK                                                 TSO21820
  2183.          MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING          TSO21830
  2184.          B         RDN1                SEND A NAK                       TSO21840
  2185. RDOK     MVI       STYPE,AY            ACK THE PACKET                   TSO21850
  2186.          XC        LSDAT,LSDAT         NO DATA                          TSO21860
  2187.          L         R15,=A(SPACK)                                        TSO21870
  2188.          BALR      R14,R15                                              TSO21880
  2189.          MVC       OLDTRY(4),NUMTRY    SAVE NUMTRY'S VALUE HERE         TSO21890
  2190.          XC        NUMTRY,NUMTRY       AND RESET COUNTER                TSO21900
  2191.          L         R3,N                                                 TSO21910
  2192.          LA        R3,1(R3)                                             TSO21920
  2193.          ST        R3,N                STORE VALUE INCREMENTED BY 1     TSO21930
  2194.          NC        N(4),=X'0000003F'   MASK TO GET MOD 64               TSO21940
  2195.          MVI       STATE,C'F'          TRY FOR ANOTHER FILE             TSO21950
  2196.          B         RLOOP                                                TSO21960
  2197. RDN      CLI       RTYPE,AN            DO WE NEED TO SEND A NAK?        TSO21970
  2198.          BNE       RDELSE                                               TSO21980
  2199. RDN1     MVI       STYPE,AN            SEND A NAK                       TSO21990
  2200.          XC        LSDAT,LSDAT         NO DATA                          TSO22000
  2201.          L         R15,=A(SPACK)                                        TSO22010
  2202.          BALR      R14,R15                                              TSO22020
  2203.          B         RLOOP                                                TSO22030
  2204. RDELSE   MVI       STATE,C'A'          UNRECOGNIZED PACKET - ABORT      TSO22040
  2205.          MVI       ERRNUM,X'07'        ILLEGAL PACKET TYPE              TSO22050
  2206.          B         RLOOP                                                TSO22060
  2207. SAYNO    MVI       STYPE,AN            SEND A NAK PACKET                TSO22070
  2208.          XC        LSDAT,LSDAT         NO DATA                          TSO22080
  2209.          MVI       ERRNUM,X'0B'        ILLEGAL FILENAME ERROR           TSO22090
  2210.          L         R15,=A(SPACK)                                        TSO22100
  2211.          BALR      R14,R15                                              TSO22110
  2212.          B         RLOOP                                                TSO22120
  2213. **********************************************************************  TSO22130
  2214. *        RECEIVE ABORT PROCESS                                       *  TSO22140
  2215. **********************************************************************  TSO22150
  2216. RABORT   DS        0H                                                   TSO22160
  2217.          CLI       ERRNUM,X'0A'        DID THE MICRO DIE?               TSO22170
  2218.          BE        RNOERRP             NO ERROR PACKET IF SO            TSO22180
  2219.          MVI       STYPE,AE            ERROR PACKET                     TSO22190
  2220.          MVC       LSDAT(4),=F'20'     ALL MSGS ARE THIS LONG           TSO22200
  2221.          MVC       N(4),NUM            SYNCH PACKET NUMBERS             TSO22210
  2222.          SR        R5,R5                                                TSO22220
  2223.          IC        R5,ERRNUM                                            TSO22230
  2224.          M         R4,=F'20'           OFFSET := ERRNUM * 20            TSO22240
  2225.          LA        R5,ERRTAB(R5)                                        TSO22250
  2226.          MVC       SDAT(20),0(R5)      SPACK NEEDS THE DATA HERE        TSO22260
  2227.          TR        SDAT(20),ETOA                                        TSO22270
  2228.          L         R15,=A(SPACK)                                        TSO22280
  2229.          BALR      R14,R15             SEND ERROR PACKET & DIE          TSO22290
  2230. RNOERRP  LA        R15,4               SET A NON-ZERO RETCODE           TSO22300
  2231.          B         RECRET              PREPARE TO LEAVE                 TSO22310
  2232. **********************************************************************  TSO22320
  2233. *        RECEIVE COMPLETE PROCESS                                    *  TSO22330
  2234. **********************************************************************  TSO22340
  2235. RCOMP    SR        R15,R15             RETCODE OF ZERO                  TSO22350
  2236. RECRET   L         R13,4(R13)                                           TSO22360
  2237.          L         R14,12(R13)                                          TSO22370
  2238.          LM        R0,R12,20(R13)                                       TSO22380
  2239.          BR        14                                                   TSO22390
  2240.          EJECT                                                          TSO22400
  2241. **********************************************************************  TSO22410
  2242. *                                                                    *  TSO22420
  2243. *  ROUTINE TO PUT A CHARACTER IN OUTPUT BUFFER AND DUMP WHEN FULL    *  TSO22430
  2244. *                                                                    *  TSO22440
  2245. **********************************************************************  TSO22450
  2246. PTCHR    SR        R4,R4               USE TO HOLD QUOCHAR              TSO22460
  2247.          SR        R6,R6               USE TO HOLD LRECL                TSO22470
  2248.          SR        R8,R8               COUNTER WITHIN RDAT              TSO22480
  2249.          L         R9,RSAVPL           COUNTER WITHIN RBUF              TSO22490
  2250.          IC        R4,RQUO                                              TSO22500
  2251.          IC        R6,LRECL                                             TSO22510
  2252.          L         R5,LRDAT            COUNTER TO GET ALL DATA          TSO22520
  2253. RLUP     SR        R7,R7               USE TO PICK UP CHAR              TSO22530
  2254.          LTR       R5,R5               MORE DATA LEFT?                  TSO22540
  2255.          BNZ       MOR                 LEAVE IF ALL DONE                TSO22550
  2256.          CLI       PREV,X'4D'          ARE WE IN MIDDLE OF LINE?        TSO22560
  2257.          BER       R14                 LEAVE IF NOT                     TSO22570
  2258.          ST        R9,RSAVPL           SAVE OUR PLACE                   TSO22580
  2259.          SR        R7,R7               ZERO RETCODE                     TSO22590
  2260.          BR        R14                                                  TSO22600
  2261. MOR      BCTR      R5,0                DECREMENT CHAR COUNTER           TSO22610
  2262.          IC        R7,RDAT(R8)         GET DATA FROM RDAT               TSO22620
  2263.          CR        R7,R4               IS IT THE QUOTE CHARACTER?       TSO22630
  2264.          BNE       REGULAR                                              TSO22640
  2265.          BCTR      R5,0                DECREMENT CHAR COUNT             TSO22650
  2266.          LA        R8,1(R8)            MOVE POINTER                     TSO22660
  2267.          IC        R7,RDAT(R8)         PICK UP SPECIAL CHAR             TSO22670
  2268.          C         R7,=X'0000004D'     IS IT A CR? (CHAR(CR))           TSO22680
  2269.          BNE       NOCR                WRITE OUT RECORD IF YES          TSO22690
  2270.          MVI       PREV,X'4D'          JUST HAD A CR                    TSO22700
  2271.          LA        R8,1(R8)            IGNORE CONTROL CHAR              TSO22710
  2272.          B         RFIN                                                 TSO22720
  2273. NOCR     C         R7,=X'0000004A'     HOW ABOUT A LF? (CHAR(LF))       TSO22730
  2274.          BNE       NOLF                IF YES, WRITE OUT RECORD         TSO22740
  2275.          LA        R8,1(R8)            IGNORE CONTROL CHAR              TSO22750
  2276.          CLI       PREV,X'4D'          WAS LAST THING CR?               TSO22760
  2277.          BNE       RFIN                NOPE, THEN KEEP ON               TSO22770
  2278.          B         RLUP                IGNORE LF IF PREV=CR             TSO22780
  2279. NOLF     CR        R7,R4               IS IT THE QUOCHAR                TSO22790
  2280.          BE        REGULAR             DON'T CONVERT IF IT IS           TSO22800
  2281.          A         R7,O1H              ADD ^O100                        TSO22810
  2282.          N         R7,=X'0000007F'     GET MOD ^O200                    TSO22820
  2283. REGULAR  STC       R7,RBUF(R9)         STORE CHAR IN RBUF               TSO22830
  2284.          LA        R9,1(R9)            MOVE RBUF COUNTER                TSO22840
  2285.          LA        R8,1(R8)            MOVE RDAT COUNTER                TSO22850
  2286.          MVI       PREV,X'00'          BLANK OUT CR IF WAS THERE        TSO22860
  2287.          C         R9,=F'255'          ONLY 256 CHARS ALLOWED           TSO22870
  2288.          BNH       RLUP                AND CONTINUE                     TSO22880
  2289.          LR        R10,R9              USE MAX LENGTH OF 256            TSO22890
  2290.          B         WRFIL               AND WRITE TO FILE                TSO22900
  2291. RFIN     LTR       R10,R9              GET DATA SIZE                    TSO22910
  2292.          BZ        FUDGE               GOTTA FAKE A BLANK LINE          TSO22920
  2293.          C         R7,=X'0000004D'     IS IT A CR?  (CHAR(CR))          TSO22930
  2294.          BE        WRFIL                                                TSO22940
  2295.          C         R7,=X'0000004A'     HOW ABOUT A LF? (CHAR(LF))       TSO22950
  2296.          BE        WRFIL                                                TSO22960
  2297.          ST        R10,RSAVPL          SAVE DATA RECEIVED SO FAR        TSO22970
  2298.          SR        R7,R7               ZERO RETCODE                     TSO22980
  2299.          BR        14                                                   TSO22990
  2300. FUDGE    MVI       RBUF,X'20'          MAKE FIRST CHAR A SPACE          TSO23000
  2301.          LA        R10,1(R10)          LENGTH OF ONE                    TSO23010
  2302. WRFIL    XC        RSAVPL,RSAVPL       RESET THE POINTER                TSO23020
  2303.          TR        RBUF(256),ATOE      MAKE EBCDIC AGAIN                TSO23030
  2304.          CLI       RFM,C'V'            IS IT VARIABLE FORMAT?           TSO23040
  2305.          BE        VAR                                                  TSO23050
  2306.          CR        R10,R6                                               TSO23060
  2307.          BH        PUR                 IGNORE DATA AFTER LRECL VALUE    TSO23070
  2308.          CR        R10,R6              PAD OUT TO LRECL SIZE ?          TSO23080
  2309.          BE        VAR                 NOPE, IT'S OK.                   TSO23090
  2310.          LR        R2,R6               GET LRECL SIZE                   TSO23100
  2311.          SR        R2,R10              PAD WITH THIS MANY SPACES        TSO23110
  2312.          BCTR      R2,0                MINUS ONE FOR THE 'EX'           TSO23120
  2313.          LA        R9,RBUF(R10)        START PADDING HERE               TSO23130
  2314.          MVI       0(R9),C' '          PUT IN THE FIRST SPACE           TSO23140
  2315.          LTR       R2,R2                                                TSO23150
  2316.          BZ        PUR                 DON'T PAD IF SIZE DIF WAS ONE    TSO23160
  2317.          BCTR      R2,0                SUBRTRACT SPACE WE JUST ADDED    TSO23170
  2318.          EX        R2,PAD              PAD OUT BUFFER                   TSO23180
  2319. PUR      LR        R10,R6              LENGTH HAS TO BE THIS SIZE       TSO23190
  2320. VAR      DS        0H                                             RJR   TSO23200
  2321.          LA        R15,WRITEX                                           TSO23210
  2322.          BALR      R15,R15                                              TSO23220
  2323.          SR        R9,R9               START AT BEGINNING OF RBUF       TSO23230
  2324.          B         RLUP                GET NEXT LINE IF OK              TSO23240
  2325. RECSAVE  DS        18F                                                  TSO23250
  2326. PAD      MVC       1(0,R9),0(R9)       PAD OUT WITH SPACES              TSO23260
  2327.          LTORG                                                          TSO23270
  2328. *                                                                       TSO23280
  2329.          EJECT                                                          TSO23290
  2330. **********************************************************************  TSO23300
  2331. *                                                                    *  TSO23310
  2332. *  DISK FILE WRITE ROUTE WITH DEBUGGING CODE                         *  TSO23320
  2333. *                                                                    *  TSO23330
  2334. **********************************************************************  TSO23340
  2335. WRITEX   DS        0H                                                   TSO23350
  2336.          USING     PARMS,R11                                            TSO23360
  2337.          STM       R12,R15,WRITSAVE                                     TSO23370
  2338.          BALR      R12,0                                                TSO23380
  2339.          USING     *,R12                                                TSO23390
  2340.          LA        R0,RBUF             POINT TO RBUF                    TSO23400
  2341.          TM        KEROUT+(DCBRECFM-IHADCB),DCBRECV VARIABLE?           TSO23410
  2342.          BZ        WRITEX2             NO, THEN DON'T ADJUST            TSO23420
  2343.          LA        R0,RBUF-4           POINT TO RDW                     TSO23430
  2344.          LR        R15,R10             GET THE LENGTH                   TSO23440
  2345.          AH        R15,=H'4'           INCLUDE LENGTH OF RDW            TSO23450
  2346.          SR        R1,R1                                                TSO23460
  2347.          STH       R1,RBUF-2           CLEAR RDW                        TSO23470
  2348.          IC        R1,LRECL            GET LRECL                        TSO23480
  2349.          CR        R15,R1              IS THE RECORD GT MAX LRECL?      TSO23490
  2350.          BNH       *+6                 NO, THEN IT'S OK                 TSO23500
  2351.          LR        R15,R1              ELSE SET TO MAX                  TSO23510
  2352.          STH       R15,RBUF-4                                           TSO23520
  2353. WRITEX2  DS        0H                                                   TSO23530
  2354.          PUT       KEROUT,(R0)                                          TSO23540
  2355.          TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN  IS IT OPEN?        TSO23550
  2356.          BZ        WRNODBG                                              TSO23560
  2357.          MVC       WRKBUFF(2),=H'12'                                    TSO23570
  2358.          XC        WRKBUFF+2(2),WRKBUFF+2                               TSO23580
  2359.          MVC       WRKBUFF+4(8),=CL8'QSAM PUT'                          TSO23590
  2360.          PUT       DEBUG,WRKBUFF                                        TSO23600
  2361.          EX        R10,DBGMVC4                                          TSO23610
  2362.          LA        R1,4(,R10)                                           TSO23620
  2363.          STH       R1,WRKBUFF                                           TSO23630
  2364.          PUT       DEBUG,WRKBUFF                                        TSO23640
  2365. WRNODBG  LM        R12,R15,WRITSAVE                                     TSO23650
  2366.          BR        R15                                                  TSO23660
  2367. DBGMVC4  MVC       WRKBUFF+4(*-*),RBUF                                  TSO23670
  2368.          DROP      R11                                                  TSO23680
  2369.          DROP      R12                                                  TSO23690
  2370.          LTORG                                                          TSO23700
  2371.          EJECT                                                          TSO23710
  2372. **********************************************************************  TSO23720
  2373. *                                                                    *  TSO23730
  2374. *        ROUTINE TO PARSE COMMANDS AND CREATE PARSE TABLE            *  TSO23740
  2375. *                                                                    *  TSO23750
  2376. **********************************************************************  TSO23760
  2377. PARSER   STM       R14,R12,12(R13)     SAVE REGISTERS                   TSO23770
  2378.          LR        R12,R15             MOVE THE BASE REGISTER           TSO23780
  2379.          USING     PARSER,R12          ##                               TSO23790
  2380.          L         R11,=A(PARMS)       GET ADDRESS OF WORKAREAS         TSO23800
  2381.          USING     PARMS,R11                                            TSO23810
  2382.          LR        R3,R0               R3 = TEXT LENGTH                 TSO23820
  2383.          BCTR      R1,0                R1 ==> BYTE BEFORE PARM          TSO23830
  2384.          LA        R3,0(R1,R3)         R3 ==> END OF LINE               TSO23840
  2385.          LA        R2,1                R2 = PARSING INCREMENT           TSO23850
  2386.          LA        R5,PTRTBL           R5 ==> TARGET AREA               TSO23860
  2387.          LA        R6,4                R6 = POINTER INCREMENT           TSO23870
  2388.          STM       R5,R6,PARSELST      SAVE FOR PARSING                 TSO23880
  2389.          LA        R7,PTRTBL+PTRTBLL-4 R7 ==> END OF TARGET             TSO23890
  2390. *                                                                       TSO23900
  2391. SCNTOKEN BXH       R1,R2,SCNFINIS      SCAN FOR PARM START              TSO23910
  2392.          CLI       0(R1),C' '          FOUND A BLANK?                   TSO23920
  2393.          BE        SCNTOKEN            YES, THEN KEEP LOOKING           TSO23930
  2394.          ST        R1,0(,R5)           SAVE PTR TO OPERAND              TSO23940
  2395.          BXH       R5,R6,SCNFINIS      BR ON END OF TARGET AREA         TSO23950
  2396. SCNLASTC BXH       R1,R2,SCNFINIS      SCAN TO END OF OPERAND           TSO23960
  2397.          CLI       0(R1),C' '          IS THIS BLANK AT END OF OPERAND  TSO23970
  2398.          BNE       SCNLASTC            IF SO, MOVE TOKEN                TSO23980
  2399.          LR        R9,R1               REMEMBER JUST AFTER OPERAND      TSO23990
  2400.          B         SCNTOKEN            FIND START OF NEXT OPERAND       TSO24000
  2401. SCNFINIS MVI       0(R9),C' '          MARK THE END OF OPERANDS         TSO24010
  2402.          ST        R9,0(R5)            SAVE POINTER TO END              TSO24020
  2403.          ST        R5,PARSELST+8       SAVE END TARGET                  TSO24030
  2404.          LM        R14,R12,12(R13)     RESTORE THE REGISTERS            TSO24040
  2405.          BR        R14                 RETURN TO CALLER                 TSO24050
  2406.          LTORG                                                          TSO24060
  2407.          DROP      R11                                                  TSO24070
  2408.          DROP      R12                 DON'T NEED THEM ANYMORE          TSO24080
  2409.          EJECT                                                          TSO24090
  2410. PARMS    DS        0H                  GLOBAL DATA LIST                 TSO24100
  2411.          USING PARMS,R11                                                TSO24110
  2412. SNDPKT   DS        CL130               SEND THIS TO MICRO               TSO24120
  2413.          ORG       SNDPKT                                               TSO24130
  2414. PHDR     DS        X                                                    TSO24140
  2415. PLEN     DS        X                                                    TSO24150
  2416. PNUM     DS        X                                                    TSO24160
  2417. PTYPE    DS        X                                                    TSO24170
  2418. PDATA    DS        0C                                                   TSO24180
  2419.          ORG       ,                                                    TSO24190
  2420. RECPKT   DS        CL130               RECEIVE THIS FROM MICRO          TSO24200
  2421. LSDAT    DS        F                   SEND PACKET SIZE                 TSO24210
  2422. LRDAT    DS        F                   RECEIVE PACKET SIZE              TSO24220
  2423. FLAGS    DC        X'00'               USE TO TEST OUR FLAGS            TSO24230
  2424. NAME     DC        18X'20'             NAME OF FILE(S) TO SEND          TSO24240
  2425.          DS        0F                                                   TSO24250
  2426.          DS        0F                                                   TSO24260
  2427. INPUT    DS        CL130               INPUT BUFFER                     TSO24270
  2428.          DS        0F                                                   TSO24280
  2429.          DS        F                   RDW FOR VARIABLE RECORDS         TSO24290
  2430. BUF      DS        CL260               DISK READ INTO HERE              TSO24300
  2431.          DS        F                   RDW FOR VARIABLE RECORDS         TSO24310
  2432. RBUF     DS        CL260               DISK WRITE FROM HERE             TSO24320
  2433. N        DC        F'0'                SEND PACKET NUMBER               TSO24330
  2434. NUM      DC        F'0'                RECEIVE PACKET NUMBER            TSO24340
  2435. NUMTRY   DC        F'0'                TRIAL COUNTER FOR TRANSFERS      TSO24350
  2436. OLDTRY   DS        F                   COUNTER FOR PREVIOUS PACKET      TSO24360
  2437. STORLOC  DS        F                   POINTER TO EXTRA STORAGE         TSO24370
  2438. MAXPACK  DC        F'94'               MAX PACKET SIZE                  TSO24380
  2439. RECL     DS        F                   RECORD LEN (IF RECFM = V)        TSO24390
  2440. RPSIZ    DC        F'94'               MAX RECEIVE PACKET SIZE          TSO24400
  2441. DSSIZ    DC        F'40'               DEFAULT MAX SEND PACKET SIZE     TSO24410
  2442. SPSIZ    DS        F                   SEND PACKET SIZE                 TSO24420
  2443. MAXTRY   DC        F'5'                NO. OF TIMES TO RETRY PACKET     TSO24430
  2444. IMXTRY   DC        F'16'               NO. OF INITIAL TRIALS ALLOWED    TSO24440
  2445. SIZE     DS        F                   MAX SIZE FOR SEND DATA           TSO24450
  2446. DEL      DC        F'127'              OCTAL 177 (DELETE CHAR)          TSO24460
  2447. ZERO     DC        F'0'                                                 TSO24470
  2448. ONE      DC        F'1'                                                 TSO24480
  2449. FIVE     DC        F'5'                                                 TSO24490
  2450. TWO      DC        F'2'                                                 TSO24500
  2451. SPACE    DC        F'32'               ASCII SPACE                      TSO24510
  2452. O1H      DC        F'64'               OCTAL 100                        TSO24520
  2453. O2H      DC        F'128'              OCTAL 200                        TSO24530
  2454. SAVPL    DC        F'0'                POINTER WITHIN BUF,INIT=0        TSO24540
  2455. RSAVPL   DC        F'0'                POINTER IN 'PTCHR',INIT=0        TSO24550
  2456. DQUOTE   DC        X'23'               DEFAULT QUOTE CHARACTER = #      TSO24560
  2457. QUOCHAR  DS        X                   QOUTE CHAR WE'LL SEND            TSO24570
  2458. RQUO     DS        X                   MICRO'S QUOTE CHAR               TSO24580
  2459. TEMP     DS        F                   TEMPORARY SPACE                  TSO24590
  2460.          DS        0D                                                   TSO24600
  2461. PKVAR    DS        D                   USE FOR PICKING UP INTEGER       TSO24610
  2462. SDAT     DS        CL130               TEMP PLACE FOR SEND DATA         TSO24620
  2463. RDAT     DS        CL130               TEMP PLACE FOR RECEIVE DATA      TSO24630
  2464. FILNAML  DS    H                   LENGTH OF FILENAME                   TSO24640
  2465. FILNAM   DS        CL18                SEND/REC FILENAME                TSO24650
  2466. STATE    DS        C                   OUR CURRENT STATE                TSO24660
  2467. DEOL     DC        X'0D'               DEFAULT END OF PACKET (CR)       TSO24670
  2468. REOL     DS        X                   EOL CHAR I NEED (CR)             TSO24680
  2469. SEOL     DS        X                   EOL I'LL SEND                    TSO24690
  2470. DSOH     DC        X'01'               DEFAULT START OF HEADER (CTL A)  TSO24700
  2471. RSOH     DS        X                   RECEIVE START OF HEADER          TSO24710
  2472. SSOH     DS        X                   SEND START OF HEADER             TSO24720
  2473. DLRECL   DC        X'50'               DEFAULT LRECL SIZE OF 80         TSO24730
  2474. LRECL    DS        X                   LRECL PROGRAM WILL USE           TSO24740
  2475. DBLKSIZE DC        H'80'               DEFAULT BLKSIZE OF 80            TSO24750
  2476. BLKSIZE  DS        H                   BLKSIZE PROGRAM WILL USE         TSO24760
  2477. DTRACK   DC        F'5'                DEFAULT SPACE ALLOCATION         TSO24770
  2478. DRECFM   DC        C'F'                DEFAULT WITH FIXED RECFM         TSO24780
  2479. RFM      DS        C                   RECFM PROGRAM WILL USE           TSO24790
  2480. PREV     DS        C                   PREVIOUS CHAR REC (IN PTCHR)     TSO24800
  2481. BLIP     DS        X                   SAVE USER'S BLIP CHAR            TSO24810
  2482. LINSIZ   DS        F                   SAVE USER'S CONSOLE LINESIZE     TSO24820
  2483. ERRNUM   DS        X                   ERROR NUMBER,IN CASE WE DIE      TSO24830
  2484. OLDERR   DS        X                   ERROR OF PREVIOUS EXECUTION      TSO24840
  2485. STYPE    DS        C                   TYPE OF PACKET SENT              TSO24850
  2486. RTYPE    DS        C                   TYPE OF PACKET RECEIVED          TSO24860
  2487. *                                                                       TSO24870
  2488. READSAVE DS        4F                                                   TSO24880
  2489. WRITSAVE DS        4F                                                   TSO24890
  2490. PARSELST DS        3F                  PTRS TO OPERAND STACK            TSO24900
  2491. PTRTBL   DS        15F                 OPERAND STACK                    TSO24910
  2492. PTRTBLL  EQU       *-PTRTBL            LENGTH OF PTRTBL                 TSO24920
  2493. DBLWRK   DS        D                                                    TSO24930
  2494. IDSYS    DC        F'2'                MVS TSO                          TSO24940
  2495. DDNAME   DC        CL8' '              DDNAME TO ALLOCATE               TSO24950
  2496. DSNAME   DC        CL80' '             DSNAME TO ALLOCATE               TSO24960
  2497. DSNAMEX  DC        CL80' '             WRKBUFFER                        TSO24970
  2498. MEMBER   DC        CL8' '              MEMBER NAME FOR PDS ALLOC        TSO24980
  2499. CMSXXX   DC        CL8' '              USED IN CMS ONLY                 TSO24990
  2500. CMSYYY   DC        CL8' '                                               TSO25000
  2501. CMSZZZ   DC        CL2' '                                               TSO25010
  2502. DISP1    DC        F'2'                DISP (0=NEW,1=OLD,2=SHR)         TSO25020
  2503. DISP2    DC        F'3'                DISP (0=UNCAT,1=CAT,3=KEEP)      TSO25030
  2504. INOUT    DC        F'2'                0=INPUT,1=OUTPUT,2=INOUT)        TSO25040
  2505. RECFMX   DC        F'1'                1=FB,2=VBS                       TSO25050
  2506. BLKSIZEX DC        F'3600'             FOR NEW DATA SETS ONLY           TSO25060
  2507. LRECLX   DC        F'80'               ....                             TSO25070
  2508. DEV      DC        CL8'SYSDA'          DEVICE                           TSO25080
  2509. TRACK    DC        F'20'               # TRACKS TO ALLOC FOR NEW DSETS  TSO25090
  2510. DYNALCRC DC        F'0'                RETURN CODE FROM FUNCTION        TSO25100
  2511. WRKBUFF  DS        CL280                                                TSO25110
  2512. PREFIX   DC        CL8' '              USERS DSET PREFIX FROM UPT       TSO25120
  2513. PREFIXL  DC        F'0'                PREFIX LENGTH-1                  TSO25130
  2514. DDELAY   DC        F'2000'             DEFAULT DELAY TIME               TSO25140
  2515. DELAY    DS        F                   DELAY TIME                       TSO25150
  2516. *                                                                       TSO25160
  2517. *  THIS IS THE DYNALC PARM LIST USED FOR BOTH ALLOCATION AND            TSO25170
  2518. *  CREATION OF  DATA SETS.                                              TSO25180
  2519. *                                                                       TSO25190
  2520. DYNAPARM DS 0F                                                          TSO25200
  2521.  DC A(IDSYS,DDNAME,DSNAME,MEMBER,CMSXXX,CMSYYY,CMSZZZ,DISP1,DISP2)      TSO25210
  2522.  DC A(INOUT,RECFMX,BLKSIZEX,LRECLX,DEV,TRACK)                           TSO25220
  2523.  DC X'80',AL3(DYNALCRC)                                                 TSO25230
  2524. *                                                                       TSO25240
  2525. * TABLE TO TRANSLATE TO UPPER CASE                                      TSO25250
  2526. *                                                                       TSO25260
  2527. UPPER    DC    256AL1(*-UPPER)                                          TSO25270
  2528.          ORG   UPPER+X'81'                                              TSO25280
  2529.          DC    C'ABCDEFGHI'                                             TSO25290
  2530.          ORG   UPPER+X'91'                                              TSO25300
  2531.          DC    C'JKLMNOPQR'                                             TSO25310
  2532.          ORG   UPPER+X'A2'                                              TSO25320
  2533.          DC    C'STUVWXYZ'                                              TSO25330
  2534.          ORG                                                            TSO25340
  2535. * THIS IS THE ASCII TO EBCDIC TABLE                                     TSO25350
  2536. ATOE     DC        X'00010203372D2E2F1605250B0C0D0E0F'                  TSO25360
  2537.          DC        X'101112133C3D322618193F271C1D1E1F'                  TSO25370
  2538.          DC        X'405A7F7B5B6C507D4D5D5C4E6B604B61'                  TSO25380
  2539.          DC        X'F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F'                  TSO25390
  2540.          DC        X'7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6'                  TSO25400
  2541.          DC        X'D7D8D9E2E3E4E5E6E7E8E9ADE0BD5F6D'                  TSO25410
  2542.          DC        X'79818283848586878889919293949596'                  TSO25420
  2543.          DC        X'979899A2A3A4A5A6A7A8A9C04FD0A107'                  TSO25430
  2544. *THIS IS THE EBCDIC TO ASCII CONVERSION TABLE                           TSO25440
  2545. *CHARACTERS NOT REPRESENTABLE IN ASCII ARE REPLACED BY A NULL           TSO25450
  2546. ETOA     DC        X'000102030009007F0000000B0C0D0E0F'                  TSO25460
  2547. *G       DC        X'1011121300000800181900001C1D1E1F'                  TSO25470
  2548.          DC        X'10111213000D0800181900001C1D1E1F'                  TSO25480
  2549.          DC        X'00000000000A171B0000000000050607'                  TSO25490
  2550.          DC        X'0000160000000004000000001415001A'                  TSO25500
  2551.          DC        X'20000000000000000000002E3C282B7C'                  TSO25510
  2552.          DC        X'2600000000000000000021242A293B5E'                  TSO25520
  2553.          DC        X'2D2F00000000000000007C2C255F3E3F'                  TSO25530
  2554.          DC        X'000000000000000000603A2340273D22'                  TSO25540
  2555.          DC        X'00616263646566676869007B00000000'                  TSO25550
  2556.          DC        X'006A6B6C6D6E6F707172007D00000000'                  TSO25560
  2557.          DC        X'007E737475767778797A0000005B0000'                  TSO25570
  2558.          DC        X'000000000000000000000000005D0000'                  TSO25580
  2559.          DC        X'7B414243444546474849000000000000'                  TSO25590
  2560.          DC        X'7D4A4B4C4D4E4F505152000000000000'                  TSO25600
  2561.          DC        X'5C00535455565758595A000000000000'                  TSO25610
  2562.          DC        X'303132333435363738397C0000000000'                  TSO25620
  2563. *                                                                       TSO25630
  2564. * TABLE OF ERROR MESSAGES (IN CASE WE ABORT)                            TSO25640
  2565. ERRTAB   DC        CL20'Bad send-packet size'    ERR MSG #0             TSO25650
  2566.          DC        CL20'Bad message number'      ERR MSG #1             TSO25660
  2567.          DC        CL20'Unrecognized state'      ERR MSG #2             TSO25670
  2568.          DC        CL20'No SOH encountered'      ERR MSG #3             TSO25680
  2569.          DC        CL20'Bad character count'     ERR MSG #4             TSO25690
  2570.          DC        CL20'Bad checksum'            ERR MSG #5             TSO25700
  2571.          DC        CL20'Disk is full'            ERR MSG #6             TSO25710
  2572.          DC        CL20'Illegal packet type'     ERR MSG #7             TSO25720
  2573.          DC        CL20'Lost a packet'           ERR MSG #8             TSO25730
  2574.          DC        CL20'Micro sent a NAK'        ERR MSG #9             TSO25740
  2575.          DC        CL20'Micro aborted'           ERR MSG #10            TSO25750
  2576.          DC        CL20'Illegal file name'       ERR MSG #11            TSO25760
  2577.          DC        CL20'Invalid lrecl'           ERR MSG #12            TSO25770
  2578.          DC        CL20'Permanent I/O error'     ERR MSG #13            TSO25780
  2579.          DC        CL20'Disk is read-only'       ERR MSG #14            TSO25790
  2580.          DC        CL20'Recfm conflict'          ERR MSG #15            TSO25800
  2581.          DC        CL20'Err allocating space'    ERR MSG #16            TSO25810
  2582. DATASET CAMLST     NAME,DSNAME,,WRKBUFF                                 TSO25820
  2583. KERIN DCB DDNAME=KERIN,DSORG=PS,MACRF=(GM),                            XTSO25830
  2584.                EODAD=INEOF                                              TSO25840
  2585. KEROUT DCB DDNAME=KEROUT,DSORG=PS,MACRF=(PM),LRECL=80,BLKSIZE=84,      XTSO25850
  2586.                RECFM=VB                                                 TSO25860
  2587. DEBUG  DCB DDNAME=DEBUG,DSORG=PS,MACRF=(PM),LRECL=260,BLKSIZE=2048,    XTSO25870
  2588.                RECFM=VB                                                 TSO25880
  2589. MODDCBF DCB DDNAME=KEROUT,DSORG=PS,MACRF=(PM),LRECL=80,BLKSIZE=80,     XTSO25890
  2590.                RECFM=FB                                                 TSO25900
  2591. MODDCBFL EQU *-MODDCBF                                                  TSO25910
  2592. MODDCBV DCB DDNAME=KEROUT,DSORG=PS,MACRF=(PM),LRECL=80,BLKSIZE=84,     XTSO25920
  2593.                RECFM=VB                                                 TSO25930
  2594. MODDCBVL EQU *-MODDCBV                                                  TSO25940
  2595.          END KERMIT                                                     TSO25950
  2596.