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

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