home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / guts / guts.asm next >
Assembly Source File  |  2020-01-01  |  218KB  |  2,693 lines

  1.  KERMIT   TITLE     'KERMIT-IBM'                                        00000010
  2.           MACRO                                                         00000020
  3.           REGISTER                                                      00000030
  4.           LCLA  &N                                                      00000040
  5.           SPACE                                                         00000050
  6.  ***********************************************************************00000060
  7.  *              GENERAL REGISTER EQUATES                               *00000070
  8.  ***********************************************************************00000080
  9.           SPACE                                                         00000090
  10.  &N       SETA  0                                                       00000100
  11.  .LOOP    ANOP                                                          00000110
  12.  R&N      EQU   &N                                                      00000120
  13.           AIF   (&N EQ 15).OUT                                          00000130
  14.  &N       SETA  &N+1                                                    00000140
  15.           AGO   .LOOP                                                   00000150
  16.  .OUT     ANOP                                                          00000160
  17.           SPACE                                                         00000170
  18.           MEND                                                          00000180
  19.           MACRO                                                         00000190
  20.  &LABEL   BINCVRT ®,&AREA,&DBLWRK                                    00000200
  21.  .*                                                                     00000210
  22.  .*  CONVERT THE CONTENTS OF ® TO DECIMAL AND EDIT INTO &AREA.       00000220
  23.  .*  &AREA IS A FIELD OF LENGTH SIX THAT WILL CONTAIN THE INTEGER       00000230
  24.  .*  STRING WITH LEADING BLANKS SUPRESSED.  &DBLWRK IS A DOUBLE         00000240
  25.  .*  WORK SPACE.                                                        00000250
  26.  .*                                                                     00000260
  27.  &LABEL   CVD   ®,&DBLWRK                                            00000270
  28.           MVC   &AREA.(6),=X'402020202120'                              00000280
  29.           ED    &AREA.(6),&DBLWRK+5                                     00000290
  30.           MEND                                                          00000300
  31.           MACRO                                                         00000310
  32.  &LAB     WRTERM &MSG                                                   00000320
  33.           LCLC   &MS                                                    00000330
  34.           LCLA   &LN                                                    00000340
  35.  &MS      SETC  '&MSG'                                                  00000350
  36.  &LN      SETA  K'&MS                                                   00000360
  37.  &LN      SETA  &LN-2                                                   00000370
  38.  &LAB     TPUT =C&MS,&LN                                                00000380
  39.           MEND                                                          00000390
  40.           MACRO                                                         00000400
  41.  &LAB     PROMPT &MSG                                                   00000410
  42.           LCLC   &MS                                                    00000420
  43.           LCLA   &LN                                                    00000430
  44.  &MS      SETC  '&MSG'                                                  00000440
  45.  &LN      SETA  K'&MS                                                   00000450
  46.  &LN      SETA  &LN-2                                                   00000460
  47.  &LAB     TPUT =C&MS,&LN,ASIS                                           00000470
  48.           MEND                                                          00000480
  49.           MACRO                                                         00000490
  50.           RDTERM &BUFF                                                  00000500
  51.           TGET &BUFF,130                                                00000510
  52.           MEND                                                          00000520
  53.  KERMIT   CSECT                                                         00000530
  54.  ***********************************************************************00000540
  55.  *         ----------------------------------------                    *00000550
  56.  *                                                                     *00000560
  57.  *  KERMIT/GUTS  -                                                     *00000570
  58.  *                                                                     *00000580
  59.  *  Kermit - KL10 Error-free Reciprocol Micro Interface Transfer       *00000590
  60.  *  IBM Version 1.0                                                    *00000600
  61.  *                                                                     *00000610
  62.  *  This program is the IBM MVS/GUTS side of a file transfer system.   *00000620
  63.  *  It can be used to transfer files between a micro and a system      *00000630
  64.  *  running under MVS/GUTS.                                            *00000640
  65.  *  See the KERMIT manual for the complete program specifications      *00000650
  66.  *  to which this program and any other component of the system        *00000660
  67.  *  must adhere.                                                       *00000670
  68.  *                                                                     *00000680
  69.  *  Stefan Lundberg,                                                   *00000681
  70.  *  Gothenburg Universities' Computing Centre,                         *00000682
  71.  *  Box 19070,                                                         *00000683
  72.  *  S-400 12 Gothenburg,                                               *00000684
  73.  *  SWEDEN                                                             *00000685
  74.  *  Tel: +46-31810720                                                  *00000686
  75.  *  ARPA forwarding address:                                           *00000687
  76.  *  STEFAN_LUNDBERG_GD%QZCOM1MIT-MULTICS.ARPA                          *00000688
  77.  *  October 1984                                                       *00000690
  78.  *                                                                     *00000691
  79.  *  This GUTS version is a modification of the MVS/TSO version         *00000692
  80.  *  written by:                                                        *00000693
  81.  *  Ronald J. Rusnak, University of Chicago Computation Center         *00000694
  82.  *  BITNET address, SYSRONR at UCHIVM1                                 *00000700
  83.  *  MAILNET address, SYSTEMS.RON@UCHICAGO.MAILNET                      *00000710
  84.  *  ARPA forwarding address, SYSTEMS.RON%UCHICAGO1MIT-MULTICS.ARPA     *00000720
  85.  *  May 1984                                                           *00000730
  86.  *                                                                     *00000740
  87.  *  Developed by the modification of the IBM CMS version written by    *00000750
  88.  *  Daphne Tzoar, Columbia University Center for Computing Activities  *00000760
  89.  *  March 1982                                                         *00000770
  90.  *                                                                     *00000780
  91.  * Copyright (C) 1984 University of Chicago                            *00000790
  92.  *                                                                     *00000800
  93.  * Permission is granted to any individual or institution to copy      *00000810
  94.  * or use this program, except for explicitly commercial purposes.     *00000820
  95.  *                                                                     *00000830
  96.  *                                                                     *00000840
  97.  *        The following external subroutines are required:             *00000850
  98.  *          -DYNALC - MVS dynamic allocation interface.                *00000860
  99.  *                                                                     *00000870
  100.  *                                                                     *00000880
  101.  *         ----------------------------------------                    *00000890
  102.  *                                                                     *00000900
  103.  * Note that this is an experimental version; all changes should       *00000910
  104.  * be forwarded to the author.                                         *00000920
  105.  ***********************************************************************00000930
  106.           EJECT                                                         00000940
  107.  * REGISTER USAGE -                                                     00000950
  108.  * R1 -                                                                 00000960
  109.  * R2 -                                                                 00000970
  110.  * R3 -                                                                 00000980
  111.  * R4 -                                                                 00000990
  112.  * R5 -                                                                 00001000
  113.  * R6 -                                                                 00001010
  114.  * R7 -                                                                 00001020
  115.  * R8 -                                                                 00001030
  116.  * R9 -                                                                 00001040
  117.  * R10 -                                                                00001050
  118.  * R11 - BASE REGISTER FOR GLOBAL DATA AREA                             00001060
  119.  * R12 - PROGRAM BASE                                                   00001070
  120.  * R13 - SAVE AREA                                                      00001080
  121.  * R14 - SUBROUTINE LINKAGE                                             00001090
  122.  * R15 - SUBROUTINE LINKAGE                                             00001100
  123.  *                                                                      00001110
  124.           SPACE                                                         00001120
  125.           PRINT     NOGEN                                               00001130
  126.           REGISTER                                                      00001140
  127.           IKJCPPL                                                       00001150
  128.           IKJUPT                                                        00001160
  129.           SPACE                                                         00001170
  130.  AD       EQU       68                  DATA PACKET (ASCII 'D')         00001180
  131.  AN       EQU       78                  NAK                             00001190
  132.  AZ       EQU       90                  EOF PACKET                      00001200
  133.  AS       EQU       83                  INIT PACKET                     00001210
  134.  AY       EQU       89                  ACK                             00001220
  135.  AF       EQU       70                  FILE PACKET                     00001230
  136.  AB       EQU       66                  BREAK PACKET                    00001240
  137.  AE       EQU       69                  ERROR PACKET                    00001250
  138.  ERCOD    EQU       12                  MEANS EOF WITH 'FSREAD'         00001260
  139.  FLG1     EQU       X'80'               IS FILE THE FIRST OR NOT        00001270
  140.  FLG2     EQU       X'40'               OVERWRITE SENT FILENAME?        00001280
  141.  FLG3     EQU       X'20'               ONE = SENT ONLY PARTIAL RECORD  00001290
  142.  FLG4     EQU       X'10'               NAK FROM MICRO(0) OR RPACK(1)?  00001300
  143.  FLG5     EQU       X'08'               ALLOCATED MORE SPACE (DMSFREE)  00001310
  144.           EJECT                                                         00001320
  145.           DCBD      DSORG=(PS)                                          00001330
  146.  PSCB     PSCB      SYS=MVS             GET PSCB LAYOUT              GUC00001331
  147.           EJECT                                                         00001340
  148.  ********************************************************************** 00001350
  149.  *                                                                    * 00001360
  150.  *        KERMIT-GUTS PROGRAM                                         * 00001370
  151.  *                                                                    * 00001380
  152.  ********************************************************************** 00001390
  153.  KERMIT   CSECT                                                         00001400
  154.           STM       R14,R12,12(R13)                                     00001410
  155.           BALR      R12,0                                               00001420
  156.           USING     *,R12                                               00001430
  157.           LA        R14,KSAVE                                           00001440
  158.           ST        R13,4(R14)                                          00001450
  159.           ST        R14,8(R13)                                          00001460
  160.           LR        R13,R14                                             00001470
  161.  * USE R11 AS BASE REGISTER FOR THE SHARED DATA AREA                    00001480
  162.           L         R11,=A(PARMS)                                       00001490
  163.           USING     PARMS,R11                                           00001500
  164.  *                                                                      00001530
  165.  * COLLECT USERS MVS-GUTS PREFIX.                                       00001540
  166.  * AT GUC WE HAVE AN EXIT IN THE DYNALLOC SVC THAT WILL CHANGE          00001541
  167.  * THE PREFIX TO WHAT THE GUTS USER HAS SET WITH THE /SET INDEX=...     00001542
  168.  * COMMAND. IF YOUR GUTS INSTALLATION DOES'NT HAVE THIS EXIT            00001543
  169.  * OR ANY OTHER SOLUTION, THE OSFILE WILL BE CALLED &USERID.filename    00001544
  170.  * THIS EXIT WILL BE SUPPLIED WITH VERSION 3.8 OF GUTS.                 00001545
  171.  *                                                                      00001550
  172.           L         R2,CPPLUPT-CPPL(,R1)  GET TO UPT                    00001560
  173.           XR        R3,R3                 CLEAR R3                      00001570
  174.           IC        R3,UPTPREFL-UPT(,R2)  GET LENGTH                    00001580
  175.           BCTR      R3,0                                                00001590
  176.           ST        R3,PREFIXL  SAVE FOR LATER                          00001600
  177.           MVC       PREFIX(*-*),UPTPREFX-UPT(R2)  MOVE PREFIX           00001610
  178.           EX        R3,*-6                                              00001620
  179.  *                                                                   GUC00001621
  180.  *    GET DEFAULT UNIT FROM PSCB                                     GUC00001622
  181.  *                                                                   GUC00001623
  182.           LPSCBP    R1,USING                                         GUC00001624
  183.           LTR       R1,R1               ANY POINTER PRESENT?         GUC00001625
  184.           BZ        NOPSCBP             NO, USE SYSDA VALUE          GUC00001626
  185.           MVC       DEV,PSCBGPNM        GET WANTED UNIT              GUC00001627
  186.           DROP      R1                                               GUC00001628
  187.  NOPSCBP  DS        0H                  DUMMY LABEL                  GUC00001630
  188.  * THE NEXT THREE LINES WILL CHECK IF THE TERMINAL IS A TTY TERMINAL  * 00001631
  189.  * THE TTY TERMINAL MUST HAVE SET LC=0 FIRST                          * 00001632
  190.  * DEACTIVATE THE NEXT TREE LINES IF YOU WANT TO TEST WITH A 3270     * 00001633
  191.           GTSIZE ,                  GET TERMINAL INFO                   00001660
  192.           LTR       R0,R0           IS THIS A GRAPHICS DEVICE?          00001670
  193.           BNZ       BADDEV          YES, THEN REFUSE USER               00001680
  194.           L         R15,=A(INIT)                                        00001690
  195.           BALR      R14,R15             CALL THE INITIALIZATION         00001700
  196.           WRTERM    'KERMIT-GUTS Version 1.00.'                         00001710
  197.           WRTERM    ' '                                                 00001720
  198.  ********************************************************************** 00001730
  199.  *                                                                    * 00001740
  200.  *        MAIN COMMAND PROCESSING ROUTINE                             * 00001750
  201.  *                                                                    * 00001760
  202.  ********************************************************************** 00001770
  203.  PROMPT   PROMPT    'KERMIT-GUTS> '                                     00001780
  204.           RDTERM    INPUT                                               00001790
  205.  *                                                                      00001800
  206.           TR        INPUT,UPPER         UPPERCASE INPUT                 00001810
  207.           LA        R1,INPUT            R1 GETS ADDRESS OF STRING       00001820
  208.           L         R0,=F'130'          R0 GETS THE LENGTH              00001830
  209.           L         R15,=A(PARSER)                                      00001840
  210.           BALR      R14,R15             DO TOKENIZING                   00001850
  211.  *                                                                      00001860
  212.           LM        R7,R9,PARSELST      SAVE ADDR OF TOKENIZED LIST     00001870
  213.           L         R6,0(,R7)           GET THE PTR TO FIRST OPERAND    00001880
  214.  NOPRO    MVI       ERRNUM,X'FF'        RESET ERROR FOR THIS TIME       00001890
  215.           CLI       0(R6),C' '          BARE CARRIAGE RETURN?           00001900
  216.           BE        PROMPT              IGNORE IT                       00001910
  217.           CLI       0(R6),C'E'          CHECK FOR 'EXIT' COMMAND        00001920
  218.           BE        LEAVE                                               00001930
  219.           CLI       0(R6),C'Q'          CHECK FOR 'QUIT' COMMAND        00001940
  220.           BE        LEAVE                                               00001950
  221.           CLI       0(R6),C'?'          NEED HELP ?                     00001960
  222.           BNE       SETCHK                                              00001970
  223.           WRTERM    'Legal Commands are: '                              00001980
  224.     WRTERM    'Receive, Send, Help, Exit, Quit, Set, Status, Show .'    00001990
  225.           B         PROMPT                                              00002000
  226.  SETCHK   CLC       =C'SET',0(R6)       IS IT THE SET COMMAND ?         00002010
  227.           BE        STSWITCH                                            00002020
  228.           CLC       =C'ST',0(R6)        IS IT THE STATUS COMMAND?       00002030
  229.           BE        STATSW                                              00002040
  230.           CLC       =C'SH',0(R6)        IS IT THE SHOW COMMAND?         00002050
  231.           BE        SHOSW                                               00002060
  232.           CLC       =C'HE',0(R6)        NEED HELP ?                     00002070
  233.           BE        HELPSW                                              00002080
  234.           OI        FLAGS,FLG1          SET FLG1 - IT'S THE FIRST FILE  00002090
  235.           NI        FLAGS,X'FF'-FLG2    TURN OFF OVERWRITE FLAG (INIT)  00002100
  236.           CLC       =C'RE',0(R6)                                        00002110
  237.           BNE       SS                  MAYBE IT'S A SEND COMMAND       00002120
  238.  ********************************************************************** 00002130
  239.  *        PROCESS RECEIVE COMMAND                                     * 00002140
  240.  ********************************************************************** 00002150
  241.           BXH       R7,R8,RR3           GET NEXT OPERAND                00002160
  242.           L         R6,0(,R7)           GET POINTER TO NEXT OPERAND     00002170
  243.           CLI       0(R6),C'?'          NEED HELP?                      00002180
  244.           BNE       RR2                                                 00002190
  245.           WRTERM    'Specify dsname to be created for RECEIVE.'         00002200
  246.           B         PROMPT                                              00002210
  247.  RR2      CLI       0(R6),C' '          MORE WORDS ?                    00002220
  248.           BE        RR3                 NO, THEN PROMPT                 00002230
  249.           MVC       DSNAMEX(80),=CL80' ' BLANK DSNAME                   00002240
  250.           LA        R1,DSNAMEX          POINT TO DSNAME BUFFER          00002250
  251.           LA        R2,44               MAX LENGTH OF DSNAME            00002260
  252.           SR        R5,R5               ZERO THE LENGTH                 00002270
  253.  RR4      CLI       0(R6),C' '          IS THIS END OF FIELD            00002280
  254.           BE        RR5                 YES, THEN PROCESS DSNAME        00002290
  255.           MVC       0(1,R1),0(R6)       MOVE A CHARACTER                00002300
  256.           LA        R6,1(,R6)           MOVE ALONG INPUT BUFFER         00002310
  257.           LA        R1,1(,R1)           MOVE ALONG DSNAME BUFFER        00002320
  258.           LA        R5,1(,R5)           UP THE LENGTH COUNT             00002330
  259.           BCT       R2,RR4              KEEP LOOKING FOR END            00002340
  260.           WRTERM    'Dsname too long'                                   00002350
  261.  *                                                                      00002360
  262.  *  allocate a new data set for receive                                 00002370
  263.  *  dynaloc will not prefix - so we have to do this by hand.            00002380
  264.  *                                                                      00002390
  265.  RR3      WRTERM    'Enter data set name for RECEIVE.'                  00002400
  266.           MVC       DSNAMEX(80),=CL80' '   BLANK FIELD                  00002410
  267.           TGET      DSNAMEX,44           GET DSNAME                     00002420
  268.           TR        DSNAMEX(80),UPPER    MAKE UPPER CASE DSN            00002430
  269.           LA        R5,0                                             GUC00002431
  270.           CR        R5,R1               WAS DSN BLANK?               GUC00002432
  271.           BE        NODSN               YES I WAS|                   GUC00002433
  272.           LR        R5,R1                  SAVE TGET LENGTH             00002440
  273.  RR5      LA        R6,DSNAMEX             SOURCE                       00002450
  274.           MVC       DSNAME(44),=CL44' ' BLANK FIELD                     00002460
  275.           LA        R2,DSNAME           PLACE TO STUFF DSNAME           00002470
  276.           CLI       DSNAMEX,C''''       TEST IF QUOTED                  00002480
  277.           BE        GBDSNQ1             BR IF SO                        00002490
  278.  *                                                                      00002500
  279.  *  we'll prefix the dsname "by hand".                                  00002510
  280.  *                                                                      00002520
  281.           L         R3,PREFIXL          ELSE GET EX LEN                 00002530
  282.           MVC       0(*-*,R2),PREFIX    MOVE PREFIX TO BUFFER           00002540
  283.           EX        R3,*-6              MOVE IT                         00002550
  284.           LA        R2,1(R3,R2)         NEXT POS IN BUFFER              00002560
  285.           MVI       0(R2),C'.'          PUT A DOT IN THERE              00002570
  286.           LA        R2,1(,R2)           PLACE FOR REST OF DSNAME        00002580
  287.           B         GBDSNQ2             CONTINUE                        00002590
  288.  GBDSNQ1  DS        0H                  X                               00002600
  289.           LA        R6,1(,R6)           PAST QUOTE                      00002610
  290.           S         R5,=F'2'            REDUCE LENGTH BY 2              00002620
  291.  *                                                                      00002630
  292.  *  build the parm list to the MVS dynalc routine.                      00002640
  293.  *                                                                      00002650
  294.  GBDSNQ2  DS        0H                                                  00002660
  295.           BCTR      R5,0                DEC LEN FOR  EX                 00002670
  296.           MVC       0(*-*,R2),0(R6)     COMPLETE DSNAME                 00002680
  297.           EX        R5,*-6                                              00002690
  298.           MVC       DDNAME(8),=CL8'KEROUT'                              00002700
  299.           MVC       DISP1(4),=F'0'      A NEW DATA SET                  00002710
  300.           MVC       DISP2(4),=F'1'      CATLG                           00002720
  301.           MVC       INOUT(4),=F'1'      OUTPUT                          00002730
  302.           MVC       RECFMX(4),=F'1'     FB DATA SET                     00002740
  303.           MVC       TRACK(4),=F'5'      5 TRACK ALLOC                   00002750
  304.  *                                                                      00002760
  305.  * select a model dcb.  either f or v                                   00002770
  306.  *                                                                      00002780
  307.           MVC       KEROUT(MODDCBFL),MODDCBF                            00002790
  308.           CLI       RFM,C'F'           DOES USER WANT FB                00002800
  309.           BE        MAKDCB             YES                              00002810
  310.           MVC       KEROUT(MODDCBVL),MODDCBV  USE V MODEL               00002820
  311.  MAKDCB   DS        0H                                                  00002830
  312.  *                                                                   GUC00002831
  313.  *    GET DEFAULT UNIT FROM PSCB                                     GUC00002832
  314.  *    THE CREATED DSN WILL SHOW UP ON THE VOLUME INDICATED BY        GUC00002833
  315.  *    THE /SET UNIT= COMMAND IN GUTS.                                GUC00002834
  316.  *                                                                   GUC00002835
  317.           LPSCBP    R1,USING                                         GUC00002836
  318.           LTR       R1,R1               ANY POINTER PRESENT?         GUC00002837
  319.           BZ        NOPSCBP             NO, USE SYSDA VALUE          GUC00002838
  320.           MVC       DEV,PSCBGPNM        GET WANTED UNIT              GUC00002839
  321.           DROP      R1                                               GUC00002840
  322.  NOPSCB1  DS        0H                                                  00002841
  323.  *                                                                      00002842
  324.  * NOW CHECK THE LRECL AND BLKSIZE BEFORE OPEN                          00002850
  325.  *                                                                      00002860
  326.           SR        R1,R1      CLEAR R1                                 00002870
  327.           IC        R1,LRECL   GET LRECL                                00002880
  328.           SR        R2,R2               CLEAR R2                        00002890
  329.           LH        R3,BLKSIZE GET BLKSIZE                              00002900
  330.           CLI       RFM,C'V'            IS THIS VARIABLE                00002910
  331.           BE        CHKFIXD             NO, THEN CHECK AS IF FIXED      00002920
  332.           DR        R2,R1               SEE IF BLKSIZE IS A MULTIPLE    00002930
  333.           LTR       R2,R2                 OF THE LRECL                  00002940
  334.           BNZ       CHKBLKER            YES, THEN SET LRECL AND BLKSIZE 00002950
  335.           LH        R3,BLKSIZE          GET BLKSIZE                     00002960
  336.           B         SETLB                                               00002970
  337.  CHKBLKER WRTERM    'BLKSIZE not multiple of LRECL for RECFM=F'         00002980
  338.           B         PROMPT                                              00002990
  339.  CHKFIXD  SH        R3,=H'4'            ADJUST BLKSIZE                  00003000
  340.           CR        R1,R3               IS LRECL =< BLKSIZE - 4         00003010
  341.           BNH       CHKFIXD2            YES, THEN SET LRECL AND BLKSIZE 00003020
  342.           WRTERM    'LRECL not less than BLKSIZE - 4 FOR RECFM=V'       00003030
  343.           B         PROMPT                                              00003040
  344.  CHKFIXD2 AH        R3,=H'4'            READJUST BLKSIZE                00003050
  345.  SETLB    DS        0H                                                  00003060
  346.           STH       R1,KEROUT+(DCBLRECL-IHADCB) STUFF IN DCB            00003070
  347.           STH       R3,KEROUT+(DCBBLKSI-IHADCB)                         00003080
  348.           ST        R3,BLKSIZEX             BLKSIZE                     00003090
  349.           ST        R1,LRECLX               LRECL                       00003100
  350.           LOCATE    DATASET                                             00003110
  351.           LTR       R15,R15             DOES DATASET EXIST?             00003120
  352.           BNZ       RRALOC              NO, THEN ALLOC A NEW ONE        00003130
  353.           PROMPT    'Dataset exists, reply "OK" to overwrite: '         00003140
  354.           TGET      WRKBUFF,3                                           00003150
  355.           OC        WRKBUFF(3),=CL80' '  UPPER CASE REPLY               00003160
  356.           CLC       =C'OK',WRKBUFF                                      00003170
  357.           BNE       PROMPT               BR, IF NOT OK                  00003180
  358.           MVC       DISP1,=F'1'          MAKE DISP OLD                  00003190
  359.           MVC       DISP2,=F'3'          KEEP                           00003200
  360.  RRALOC   L         R15,=V(DYNALC)      -> ENTRY POINT                  00003210
  361.           LA        R1,DYNAPARM         PARMS FOR ALLOC                 00003220
  362.           BALR      R14,R15             DO IT                           00003230
  363.  *                                                                      00003240
  364.           ICM       R1,B'1111',DYNALCRC GET RETURN OCDE                 00003250
  365.           BNZ       PROMPT              BR IF FAILURE                   00003260
  366.  *                                                                      00003270
  367.  * ... then we'll merge in these dcb attributes                         00003280
  368.  *                                                                      00003290
  369.  MAKDCBX  DS        0H                                                  00003300
  370.           OPEN      (KEROUT,(OUTPUT))                                   00003310
  371.           TM        KEROUT+(DCBOFLGS-IHADCB),DCBOFOPN                   00003320
  372.           BO        GBOPNA                                              00003330
  373.           WRTERM    'Open for dataset failed.'                          00003340
  374.           B         PROMPT                                              00003350
  375.  *                                                                      00003360
  376.  *  a breeze...                                                         00003370
  377.  *                                                                      00003380
  378.  GBOPNA   DS        0H                                                  00003390
  379.           WRTERM    'Receive waiting...'                                00003400
  380.           L         R15,=A(RECEIVE)                                     00003410
  381.           BALR      R14,R15             CALL RECEIVE PORTION            00003420
  382.           LTR       R5,R15              CHECK RETURN CODE               00003430
  383.           BNZ       LNON                                                00003440
  384.           MVI       ERRNUM,X'FF'                                        00003450
  385.  LNON     DS        0H                                                  00003460
  386.  *                                                                      00003470
  387.  *  close any open data sets.                                           00003480
  388.  *                                                                      00003490
  389.           CLOSE     (KERIN,,KEROUT)                                     00003500
  390.           MVC       OLDERR(1),ERRNUM    ERROR SETTING OF THIS RUN       00003510
  391.           LTR       R5,R5               CHECK THE RETCODE               00003520
  392.           BZ        PROMPT              ALL OKAY                        00003530
  393.           WRTERM    'Error in receiving file. Try again.'               00003540
  394.           B         PROMPT              ERROR - TRY AGAIN               00003550
  395.  SS       CLC       =C'SEN',0(R6)                                       00003560
  396.           BNE       ERR                 UNRECOGNIZED COMMAND            00003570
  397.  ********************************************************************** 00003580
  398.  *        PROCESS SEND COMMAND                                        * 00003590
  399.  ********************************************************************** 00003600
  400.           BXH       R7,R8,SS3           NO MORE LEFT                    00003610
  401.           L         R6,0(R7)            PICK UP  NEXT OPERAND           00003620
  402.           CLI       0(R6),C'?'          NEED HELP?                      00003630
  403.           BNE       SS2                                                 00003640
  404.           WRTERM    'Specify dataset name.'                 #  $        00003650
  405.           B         PROMPT                                              00003660
  406.  SS2      CLI       0(R6),C' '          MORE DATA ?                     00003670
  407.  *                                                                      00003680
  408.  *  User wants to send a data set - well...                             00003690
  409.  *                                                                      00003700
  410.           BE        SS3                 NO, THEN PROMPT                 00003710
  411.           MVC       DSNAMEX(80),=CL80' ' BLANK DSNAME                   00003720
  412.           LA        R1,DSNAMEX          POINT TO DSNAME BUFFER          00003730
  413.           LA        R2,44               MAX LENGTH OF DSNAME            00003740
  414.           SR        R5,R5               CLEAR LENGTH                    00003750
  415.  SS4      CLI       0(R6),C' '          IS THIS END OF FIELD            00003760
  416.           BE        SS5                 YES, THEN PROCESS DSNAME        00003770
  417.           MVC       0(1,R1),0(R6)       MOVE A CHARACTER                00003780
  418.           LA        R6,1(,R6)           MOVE ALONG INPUT BUFFER         00003790
  419.           LA        R1,1(,R1)           MOVE ALONG DSNAME BUFFER        00003800
  420.           LA        R5,1(,R5)           UP THE LENGTH COUNT             00003810
  421.           BCT       R2,SS4              KEEP LOOKING FOR END            00003820
  422.           WRTERM    'Dsname too long'                                   00003830
  423.           B         PROMPT                                              00003840
  424.  SS3      WRTERM    'Enter dataset name to send.'                       00003850
  425.           MVC       DSNAMEX(80),=CL80' '   BLANK FIELD                  00003860
  426.           TGET      DSNAMEX,44           GET DSNAME                     00003870
  427.           TR        DSNAMEX(80),UPPER    MAKE UPPER CASE DSN            00003880
  428.           LR        R5,R1                  SAVE TGET LENGTH             00003890
  429.  SS5      LA        R6,DSNAMEX             SOURCE                       00003900
  430.           MVC       DSNAME(44),=CL44' ' BLANK FIELD                     00003910
  431.           LA        R2,DSNAME           PLACE TO STUFF DSNAME           00003920
  432.           CLI       DSNAMEX,C''''       TEST IF QUOTED                  00003930
  433.           BE        GBDSNQ3             BR IF SO                        00003940
  434.  *                                                                      00003950
  435.  *  user tests if i know how to prefix a dsname.                        00003960
  436.  *                                                                      00003970
  437.           L         R3,PREFIXL          ELSE GET EX LEN                 00003980
  438.           MVC       0(*-*,R2),PREFIX    MOVE PREFIX TO BUFFER           00003990
  439.           EX        R3,*-6              MOVE IT                         00004000
  440.           LA        R2,1(R3,R2)         NEXT POS IN BUFFER              00004010
  441.           MVI       0(R2),C'.'          PUT A DOT IN THERE              00004020
  442.           LA        R2,1(,R2)           PLACE FOR REST OF DSNAME        00004030
  443.           B         GBDSNQ4             CONTINUE                        00004040
  444.  GBDSNQ3  DS        0H                  X                               00004050
  445.           LA        R6,1(,R6)           PAST QUOTE                      00004060
  446.           S         R5,=F'2'            REDUCE LENGTH BY 2              00004070
  447.  *                                                                      00004080
  448.  *  build a "control block"                                             00004090
  449.  *                                                                      00004100
  450.  GBDSNQ4  DS        0H                                                  00004110
  451.  *                                                                   GUC00004111
  452.  *    GET DEFAULT UNIT FROM PSCB                                     GUC00004112
  453.  *                                                                   GUC00004113
  454.           LPSCBP    R1,USING                                         GUC00004114
  455.           LTR       R1,R1               ANY POINTER PRESENT?         GUC00004115
  456.           BZ        NOPSCBP2            NO, USE SYSDA VALUE          GUC00004116
  457.           MVC       DEV,SENDDEV         GET WANTED UNIT              GUC00004117
  458.           DROP      R1                                               GUC00004118
  459.  NOPSCBP2 DS        0H                                                  00004119
  460.           BCTR      R5,0                DEC LEN FOR  EX                 00004120
  461.           MVC       0(*-*,R2),0(R6)     COMPLETE DSNAME                 00004130
  462.           EX        R5,*-6                                              00004140
  463.           LA        R5,DSNAME+43        POINT TO END OF DSNAME          00004150
  464.           LA        R4,44               LENGTH OF DSNAME                00004160
  465.  SSFINDL1 CLI       0(R5),C' '          IS IT BLANK?                    00004170
  466.           BNE       SSFINDL2            NO, THEN FOUND END OF DSN       00004180
  467.           BCTR      R5,0                DECREMENT PTR                   00004190
  468.           BCT       R4,SSFINDL1         LOOP TILL FOUND                 00004200
  469.  NODSN    WRTERM    'Dsname cannot be entirely blank'                   00004210
  470.           B         PROMPT                                              00004220
  471.  SSFINDL2 LR        R3,R5               REMEMBER END OF DSN             00004230
  472.           LA        R2,2                TRY TO FIND 2 LEVELS            00004240
  473.  SSFINDL3 CLI       0(R5),C'.'          IS IT A DOT?                    00004250
  474.           BE        SSFINDL4            YES, THEN HANDLE IT             00004260
  475.  SSFINDL5 BCTR      R5,0                DECREMENT PTR                   00004270
  476.           BCT       R4,SSFINDL3         LOOP TILL FOUND                 00004280
  477.           B         SSFINDE             BR IF FRONT OF DSN              00004290
  478.  SSFINDL4 BCT       R2,SSFINDL5         FIND ANOTHER LEVEL              00004300
  479.  SSFINDE  MVC       FILNAM,=CL80' '     BLANK FILNAM                    00004310
  480.           LA        R5,1(,R5)           MOVE TO FRONT OF LEVEL          00004320
  481.           SR        R3,R5               FIND LENGTH TO MOVE             00004330
  482.           CH        R3,=H'17'           TRUNC IF TOO LONG               00004340
  483.           BNH       *+8                 NOT TOO LONG                    00004350
  484.           LA        R3,=H'17'           FORCE MAX LENGTH                00004360
  485.           MVC       FILNAM(*-*),0(R5)   MOVE INSTRUCTION FOR EXECUTE    00004370
  486.           EX        R3,*-6              GO MOVE THE DATA                00004380
  487.           STH   R3,FILNAML          SAVE LENGTH - 1                     00004390
  488.           MVC       DDNAME(8),=CL8'KERIN'                               00004400
  489.           MVC       DISP1(4),=F'2'    DISP=SHR                          00004410
  490.           MVC       DISP2(4),=F'3'    KEEP                              00004420
  491.           MVC       INOUT(4),=F'0'  INPUT                               00004430
  492.           LA        R1,DYNAPARM                                         00004440
  493.           L         R15,=V(DYNALC)    GET EMTRY POINT                   00004450
  494.           BALR      R14,R15           DO IT                             00004460
  495.           ICM       R1,B'1111',DYNALCRC GET RETURN CODE                 00004470
  496.           BNZ       PROMPT                                              00004480
  497.  *                                                                      00004490
  498.  *  open the users data set                                             00004500
  499.  *                                                                      00004510
  500.           OPEN      (KERIN,(INPUT))                                     00004520
  501.           TM        KERIN+(DCBOFLGS-IHADCB),DCBOFOPN                    00004530
  502.           BO        GBOPNB                                              00004540
  503.           WRTERM    'Open for dataset failed.'                          00004550
  504.           B         PROMPT                                              00004560
  505.  GBOPNB   DS        0H                                                  00004570
  506.           TM        KERIN+(DCBRECFM-IHADCB),DCBRECV IS RECFM=V          00004580
  507.           BO        SSDELAY         YES, THEN WAIT                      00004590
  508.           TM        KERIN+(DCBRECFM-IHADCB),DCBRECF IS RECFM=F          00004600
  509.           BO        SSDELAY         YES, THEN WAIT                      00004610
  510.           WRTERM    'Invalid RECFM, only fixed and variable supported'  00004620
  511.           CLOSE     KERIN                                               00004630
  512.           B         PROMPT                                              00004640
  513.  SSDELAY  DS        0H                                                  00004650
  514.           MVC  WRKBUFF(37),=C'Waiting ..... seconds before sending.'    00004660
  515.           L         R1,DELAY                                            00004670
  516.           SR        R0,R0                                               00004680
  517.           D         R0,=F'100'                                          00004690
  518.           BINCVRT   R1,WRKBUFF+7,DBLWRK                                 00004700
  519.           TPUT      WRKBUFF,37                                          00004710
  520.           STIMER    WAIT,BINTVL=DELAY                                   00004720
  521.           B         SSWITCH                                             00004730
  522.  ERR      WRTERM    'Invalid command'                                   00004740
  523.           B         PROMPT              INVALID COMMAND - TRY AGAIN     00004750
  524.           SPACE     3                                                   00004760
  525.  SSWITCH  EQU       *                                                   00004770
  526.           L         R15,=A(SEND)                                        00004780
  527.           BALR      R14,R15             CALL SEND PORTION               00004790
  528.           LTR       R5,R15              CHECK RETURN CODE               00004800
  529.           BNZ       LINON                                               00004810
  530.           MVI       ERRNUM,X'FF'        WORKED OK                       00004820
  531.  LINON    DS        0H                                                  00004830
  532.  *                                                                      00004840
  533.  *  close any open data sets.                                           00004850
  534.  *                                                                      00004860
  535.           CLOSE     (KERIN,,KEROUT)                                     00004870
  536.           MVC       OLDERR(1),ERRNUM    ERROR SETTING OF THIS RUN       00004880
  537.           LTR       R5,R5               CHECK THE RETCODE               00004890
  538.           BZ        PROMPT              ALL OKAY                        00004900
  539.           WRTERM    'Error in sending file. Try again.'                 00004910
  540.           B         PROMPT              ERROR - TRY AGAIN               00004920
  541.  ********************************************************************** 00004930
  542.  *        PROCESS SET COMMAND                                         * 00004940
  543.  ********************************************************************** 00004950
  544.  STSWITCH EQU       *                                                   00004960
  545.           L         R15,=A(SET)                                         00004970
  546.           BALR      R14,R15             CALL "SET" SUBROUTINE           00004980
  547.           LTR       R15,R15             CHECK RETCODE                   00004990
  548.           BZ        PROMPT                                              00005000
  549.           WRTERM    'Illegal Set Command'                               00005010
  550.           B         PROMPT                                              00005020
  551.  ********************************************************************** 00005030
  552.  *        PROCESS SHOW COMMAND                                        * 00005040
  553.  ********************************************************************** 00005050
  554.  SHOSW    EQU       *                                                   00005060
  555.           L         R15,=A(SHOW)                                        00005070
  556.           BALR      R14,R15             CALL "SHOW" SUBROUTINE          00005080
  557.           LTR       R15,R15             CHECK RETCODE                   00005090
  558.           BZ        PROMPT                                              00005100
  559.           WRTERM    'Illegal Show Command'                              00005110
  560.           B         PROMPT                                              00005120
  561.  ********************************************************************** 00005130
  562.  *        PROCESS STATUS COMMAND                                      * 00005140
  563.  ********************************************************************** 00005150
  564.  STATSW   EQU       *                                                   00005160
  565.           BXH       R7,R8,GIVSTAT       NO MORE LEFT                    00005170
  566.           L         R6,0(R7)            PICK UP  NEXT OPERAND           00005180
  567.           CLI       0(R6),C'?'          NEED HELP?                      00005190
  568.           BNE       GIVSTAT                                             00005200
  569.           WRTERM    'Confirm with a carriage return'                    00005210
  570.           B         PROMPT                                              00005220
  571.  GIVSTAT  CLI       OLDERR,X'FF'        WAS THERE AN ERROR LAST TIME?   00005230
  572.           BNE       FAIL                                                00005240
  573.           WRTERM    'Kermit completed successfully'                     00005250
  574.           B         PROMPT                                              00005260
  575.  FAIL     SR        R5,R5                                               00005270
  576.           IC        R5,OLDERR           GET OFFSET INTO ERROR TABLE     00005280
  577.           M         R4,=F'20'           OFFSET := ERRNUM * 20           00005290
  578.           LA        R5,ERRTAB(R5)                                       00005300
  579.  *G       WRTERM    (R5),20             PRINT ERROR MSG ON SCREEN       00005310
  580.           TPUT      (R5),20                                             00005320
  581.           B         PROMPT              AND LEAVE                       00005330
  582.  ********************************************************************** 00005340
  583.  *        PROCESS HELP COMMAND                                        * 00005350
  584.  ********************************************************************** 00005360
  585.  HELPSW   BXH       R7,R8,GIVHLP        NO MORE LEFT                    00005370
  586.           L         R6,0(R7)            PICK UP  NEXT OPERAND           00005380
  587.           CLI       0(R6),C'?'          NEED HELP?                      00005390
  588.           BNE       GIVHLP                                              00005400
  589.           WRTERM    'Confirm with a carriage return'                    00005410
  590.           B         PROMPT                                              00005420
  591.  GIVHLP   DS        0H                                                  00005430
  592.           WRTERM    'Enter ? at prompt to receive list of commands.'    00005440
  593.           WRTERM  'Enter ? after a command to receive list of operands' 00005450
  594.           B         PROMPT                                              00005460
  595.  ********************************************************************** 00005470
  596.  *        PROCESS EXIT COMMAND                                        * 00005480
  597.  ********************************************************************** 00005490
  598.  LEAVE    BXH       R7,R8,KRET        ANY MORE OPERANDS?                00005500
  599.           L         R6,0(,R7)           GET ADDRESS OF OPERAND          00005510
  600.           CLI       0(R6),C'?'          NEED HELP?                      00005520
  601.           BNE       KRET                NO, JUST LEAVE                  00005530
  602.           WRTERM    'Confirm with a carriage return'                    00005540
  603.           B         PROMPT                                              00005550
  604.  BADDEV   WRTERM    'An Ascii terminal must be used.'                   00005560
  605.           B         RET                                                 00005570
  606.  NOTCP    WRTERM    'KERMIT-TSO must be running as a command processor' 00005580
  607.           WRTERM    'Contact your local systems programmer'             00005590
  608.           B         RET                                                 00005600
  609.  KRET     EQU       *                                                   00005610
  610.  RET      EQU       *                                                   00005620
  611.  *                                                                      00005630
  612.  *  close any open data sets.                                           00005640
  613.  *  dynalc has a free=close so.....                                     00005650
  614.  *                                                                      00005660
  615.           TM        KERIN+(DCBOFLGS-IHADCB),DCBOFOPN                    00005670
  616.           BNO       RETGB1                                              00005680
  617.           CLOSE     KERIN                                               00005690
  618.  RETGB1   DS        0H                                                  00005700
  619.           TM        KEROUT+(DCBOFLGS-IHADCB),DCBOFOPN                   00005710
  620.           BNO       RETGB2                                              00005720
  621.           CLOSE     KEROUT                                              00005730
  622.  RETGB2   DS        0H                                                  00005740
  623.           CLOSE     DEBUG                                               00005750
  624.           L         R13,4(R13)                                          00005760
  625.           L         R14,12(R13)                                         00005770
  626.           LM        R0,R12,20(R13)                                      00005780
  627.           BR        R14                                                 00005790
  628.  KSAVE    DS        18F                 KERMIT'S SAVE AREA              00005800
  629.           LTORG                                                         00005810
  630.           DROP      R11                                                 00005820
  631.           DROP      R12                 NO LONGER NEED THEM             00005830
  632.           EJECT                                                         00005840
  633.  ********************************************************************** 00005850
  634.  *                                                                    * 00005860
  635.  *        ROUTINE TO PROCESS SET COMMAND                              * 00005870
  636.  *                                                                    * 00005880
  637.  ********************************************************************** 00005890
  638.  SET      DS        0H                                                  00005900
  639.           STM       R14,R12,12(R13)     SAVE CALLER'S REGISTERS         00005910
  640.           BALR      R12,0               ESTABLISH ADDRESSABILITY        00005920
  641.           USING     *,R12                                               00005930
  642.           LA        R14,SETSAVE         ADDRESS OF MY SAVE AREA         00005940
  643.           ST        R13,4(R14)          SAVE CALLER'S                   00005950
  644.           ST        R14,8(R13)                                          00005960
  645.           LR        R13,R14                                             00005970
  646.  * USE R11 AS BASE REGISTER FOR 'PARMS' GLOBAL DATA AREA                00005980
  647.           L         R11,=A(PARMS)                                       00005990
  648.           USING     PARMS,R11           ESTABLISH ADDRESSABILITY        00006000
  649.           BXH       R7,R8,SETHLP                                        00006010
  650.           L         R6,0(R7)            PICK UP NEXT OPERAND            00006020
  651.           CLI       0(R6),C'?'          NEED HELP ?                     00006030
  652.           BNE       NOQ                                                 00006040
  653.  SETHLP   WRTERM    'Blksize, Debug, Delay, End-of-line, Lrecl,'        00006050
  654.           WRTERM    'Quote, Packet-size, Recfm, Space, Start-of-line'   00006060
  655.           B         SETOK                                               00006070
  656.  ********************************************************************** 00006080
  657.  *                           SET RECFM                                * 00006090
  658.  ********************************************************************** 00006100
  659.  NOQ      CLC       =C'RE',0(R6)                                        00006110
  660.           BNE       NOREC                                               00006120
  661.           BXH       R7,R8,SETNFM        MORE OPERANDS?                  00006130
  662.           L         R6,0(R7)            PICK UP RECORD FORMAT           00006140
  663.           CLI       0(R6),C'?'                                          00006150
  664.           BNE       CHKFM                                               00006160
  665.           WRTERM    'f or v (default of v)'                             00006170
  666.           B         SETOK                                               00006180
  667.  CHKFM    CLI       0(R6),C'V'          REDUNDANT                       00006190
  668.           BE        FMSET                                               00006200
  669.           CLI       0(R6),C'F'          FIXED FORMAT?                   00006210
  670.           BNE       RECERR                                              00006220
  671.  FMSET    MVC       RFM(1),0(R6)        PICK UP RECFM                   00006230
  672.           B         SETOK                                               00006240
  673.  RECERR   WRTERM    'Fixed and variable files only'                     00006250
  674.           B         SETERR                                              00006260
  675.  ********************************************************************** 00006270
  676.  *                         SET QUOTE                                  * 00006280
  677.  ********************************************************************** 00006290
  678.  NOREC    CLC       =C'QU',0(R6)        QUOTE CHARACTER                 00006300
  679.           BNE       NOQUO                                               00006310
  680.           BXH       R7,R8,SETNFM        ANY MORE OPERANDS               00006320
  681.           L         R6,0(R7)            GET NEXT TOKEN                  00006330
  682.           CLI       0(R6),C' '          VALUE NOT SUPPLIED?             00006340
  683.           BNE       GIVQ                                                00006350
  684.  SETNFM   WRTERM    '?NOT CONFIRMED'                                    00006360
  685.           B         SETERR                                              00006370
  686.  GIVQ     CLC       =C'? ',0(R6)                                        00006380
  687.           BNE       GETQUO                                              00006390
  688.           WRTERM    'a single character'                                00006400
  689.           B         SETOK                                               00006410
  690.  GETQUO   MVC       QUOCHAR(1),0(R6)    SET NEW QUOTE CHAR              00006420
  691.           TR        QUOCHAR(1),ETOA     GET ASCII FORM                  00006430
  692.           CLI       1(R6),C' '          IS IT ONLY ONE CHAR?            00006440
  693.           BE        ISQOK                                               00006450
  694.           WRTERM    'one character only'                                00006460
  695.           B         BADQUO                                              00006470
  696.  ISQOK    CLI       QUOCHAR,X'21'       CAN'T BE LESS THAN 32           00006480
  697.           BL        BADQUO                                              00006490
  698.           CLI       QUOCHAR,X'7E'       CAN'T BE LARGER THAN 126        00006500
  699.           BH        BADQUO                                              00006510
  700.           CLI       QUOCHAR,X'3E'       HAS TO BE BETWEEN 32-62         00006520
  701.           BNH       SETOK                                               00006530
  702.           CLI       QUOCHAR,X'60'       OR BETWEEN 96-126               00006540
  703.           BNL       SETOK                                               00006550
  704.  BADQUO   WRTERM    'Must fall between 41-76,140,or 173-176 (octal).'   00006560
  705.           MVC       QUOCHAR(1),DQUOTE   RESET VALUE, JUST IN CASE       00006570
  706.           B         SETERR                                              00006580
  707.  ********************************************************************** 00006590
  708.  *                         SET LRECL                                  * 00006600
  709.  ********************************************************************** 00006610
  710.  NOQUO    CLC       =C'LR',0(R6)        LRECL SIZE                      00006620
  711.           BNE       SETBLK                                              00006630
  712.           BXH       R7,R8,SETNFM        ANY MORE OPERANDS               00006640
  713.           L         R6,0(R7)            GET NEXT TOKEN                  00006650
  714.           CLI       0(R6),C'?'          HELP ?                          00006660
  715.           BNE       GETREC                                              00006670
  716.           WRTERM    'Logical Record Length (default of 80).'            00006680
  717.           B         SETOK                                               00006690
  718.  GETREC   CLI       0(R6),C' '          NO VALUE GIVEN                  00006700
  719.           BNE       CALC                                                00006710
  720.           WRTERM    '?not confirmed'                                    00006720
  721.           B         SETERR                                              00006730
  722.  CALC     CLI       0(R6),X'F0'         MUST BE >= TO 0                 00006740
  723.           BL        BADREC                                              00006750
  724.           CLI       0(R6),X'F9'         MUST BE <= TO 9                 00006760
  725.           BH        BADREC                                              00006770
  726.           XC        PKVAR,PKVAR         EMPTY IT OUT                    00006780
  727.           SR        R4,R4               LENGTH OF NUMBER                00006790
  728.           CLI       1(R6),C' '          TWO DIGITS?                     00006800
  729.           BNE       CALC2                                               00006810
  730.           EX        R4,PCK                                              00006820
  731.           B         TST                                                 00006830
  732.  CALC2    LA        R4,1(R4)            ADD ONE                         00006840
  733.           CLI       2(R6),C' '          THREE DIGITS?                   00006850
  734.           BNE       CALC3                                               00006860
  735.           EX        R4,PCK                                              00006870
  736.           B         TST                                                 00006880
  737.  CALC3    LA        R4,1(R4)            IS THERE AN ERROR?              00006890
  738.           CLI       3(R6),C' '                                          00006900
  739.           BNE       BADREC                                              00006910
  740.           EX        R4,PCK                                              00006920
  741.  TST      CVB       R7,PKVAR                                            00006930
  742.           C         R7,=F'255'          MAX OF 255 FOR LRECL            00006940
  743.           BH        BADREC                                              00006950
  744.           STC       R7,LRECL            SET THE LRECL VALUE             00006960
  745.           B         SETOK                                               00006970
  746.  BADREC   WRTERM    'A number with a maximum of 255.'                   00006980
  747.           B         SETERR                                              00006990
  748.  ********************************************************************** 00007000
  749.  *                         SET BLKSIZE                                * 00007010
  750.  ********************************************************************** 00007020
  751.  SETBLK   CLC       =C'BL',0(R6)        BLOCK SIZE                      00007030
  752.           BNE       SETSPACE                                            00007040
  753.           BXH       R7,R8,SETNFM        ANY MORE OPERANDS               00007050
  754.           L         R6,0(R7)            GET NEXT TOKEN                  00007060
  755.           CLI       0(R6),C'?'          HELP ?                          00007070
  756.           BNE       GETBLK                                              00007080
  757.           WRTERM    'Blocksize (default of 3600).'                      00007090
  758.           B         SETOK                                               00007100
  759.  GETBLK   CLI       0(R6),C' '          NO VALUE GIVEN                  00007110
  760.           BNE       BLKCALC                                             00007120
  761.           WRTERM    '?not confirmed'                                    00007130
  762.           B         SETERR                                              00007140
  763.  BLKCALC  XC        PKVAR,PKVAR         EMPTY IT OUT                    00007150
  764.           SR        R4,R4               LENGTH OF NUMBER                00007160
  765.           LA        R7,5                MAX LENGTH OF NUMBER            00007170
  766.           LR        R5,R6               SAVE START OF STRING            00007180
  767.  BLKCALC1 CLI       0(R6),X'F0'         MUST BE >= TO 0                 00007190
  768.           BL        BADBLK                                              00007200
  769.           CLI       0(R6),X'F9'         MUST BE <= TO 9                 00007210
  770.           BH        BADBLK                                              00007220
  771.           CLI       1(R6),C' '          FOUND LAST DIGIT?               00007230
  772.           BE        BLKCALC2                                            00007240
  773.           LA        R4,1(R4)            COUNT NUMBER OF DIGITS          00007250
  774.           LA        R6,1(R6)            POINT TO NEXT DIGIT             00007260
  775.           BCT       R7,BLKCALC1         KEEP CHECKING                   00007270
  776.           B         BADBLK                                              00007280
  777.  BLKCALC2 EX        R4,BLKPCK                                           00007290
  778.           B         BLKTST                                              00007300
  779.  BLKTST   CVB       R7,PKVAR                                            00007310
  780.           C         R7,=F'32767'        MAX OF 32767 FOR BLKSIZE        00007320
  781.           BH        BADBLK                                              00007330
  782.           STH       R7,BLKSIZE          SET THE BLKSIZE                 00007340
  783.           B         SETOK                                               00007350
  784.  BADBLK   WRTERM    'A number with a maximum of 32767'                  00007360
  785.           B         SETERR                                              00007370
  786.  ********************************************************************** 00007380
  787.  *                         SET TRACK ALLOCATION                       * 00007390
  788.  ********************************************************************** 00007400
  789.  SETSPACE CLC       =C'SP',0(R6)        BLOCK SIZE                      00007410
  790.           BNE       SETEOL                                              00007420
  791.           BXH       R7,R8,SETNFM        ANY MORE OPERANDS               00007430
  792.           L         R6,0(R7)            GET NEXT TOKEN                  00007440
  793.           CLI       0(R6),C'?'          HELP ?                          00007450
  794.           BNE       GETSPC                                              00007460
  795.           WRTERM    'Dataset space allocation (default of 5 tracks).'   00007470
  796.           B         SETOK                                               00007480
  797.  GETSPC   CLI       0(R6),C' '          NO VALUE GIVEN                  00007490
  798.           BNE       SPCCALC                                             00007500
  799.           WRTERM    '?not confirmed'                                    00007510
  800.           B         SETERR                                              00007520
  801.  SPCCALC  XC        PKVAR,PKVAR         EMPTY IT OUT                    00007530
  802.           SR        R4,R4               LENGTH OF NUMBER                00007540
  803.           LA        R7,5                MAX LENGTH OF NUMBER            00007550
  804.           LR        R5,R6               SAVE START OF STRING            00007560
  805.  SPCCALC1 CLI       0(R6),X'F0'         MUST BE >= TO 0                 00007570
  806.           BL        BADSPC                                              00007580
  807.           CLI       0(R6),X'F9'         MUST BE <= TO 9                 00007590
  808.           BH        BADSPC                                              00007600
  809.           CLI       1(R6),C' '          FOUND LAST DIGIT?               00007610
  810.           BE        SPCCALC2                                            00007620
  811.           LA        R4,1(R4)            COUNT NUMBER OF DIGITS          00007630
  812.           LA        R6,1(R6)            POINT TO NEXT DIGIT             00007640
  813.           BCT       R7,SPCCALC1         KEEP CHECKING                   00007650
  814.           B         BADSPC                                              00007660
  815.  SPCCALC2 EX        R4,SPCPCK                                           00007670
  816.           B         SPCTST                                              00007680
  817.  SPCTST   CVB       R7,PKVAR                                            00007690
  818.           C         R7,=F'99999'        MAX OF 99999 FOR SPACE          00007700
  819.           BH        BADSPC                                              00007710
  820.           ST        R7,TRACK            SET THE ALLOCATION              00007720
  821.           B         SETOK                                               00007730
  822.  BADSPC   WRTERM    'A number with a maximum of 99999'                  00007740
  823.           B         SETERR                                              00007750
  824.  ********************************************************************** 00007760
  825.  *                         SET END-OF-LINE CHARACTER                  * 00007770
  826.  ********************************************************************** 00007780
  827.  SETEOL   CLC       =C'EN',0(R6)        EOL CHARACTER                   00007790
  828.           BNE       NOEND                                               00007800
  829.           BXH       R7,R8,SETNFM        ANY MORE OPERANDS               00007810
  830.           L         R6,0(R7)            GET NEXT TOKEN                  00007820
  831.           CLI       0(R6),C' '          NOT DATA                        00007830
  832.           BNE       EOLCHAR                                             00007840
  833.           WRTERM    '?not confirmed'                                    00007850
  834.           B         SETERR                                              00007860
  835.  EOLCHAR  CLI       0(R6),C'?'          NEED HELP?                      00007870
  836.           BNE       GETEOL                                              00007880
  837.           WRTERM    'A two digit number between 00 and 31 (dec).'       00007890
  838.           B         SETOK                                               00007900
  839.  GETEOL   CLI       0(R6),X'F0'         MUST BE >= TO 0                 00007910
  840.           BL        BADEOL                                              00007920
  841.           CLI       0(R6),X'F9'         MUST BE <= TO 9                 00007930
  842.           BH        BADEOL                                              00007940
  843.           XC        PKVAR,PKVAR         USE TO CONVERT VALUE            00007950
  844.           CLI       1(R6),C' '          INPUT MUST BE TWO CHARS         00007960
  845.           BE        BADEOL                                              00007970
  846.           CLI       2(R6),C' '          TWO CHARS, AT MAX               00007980
  847.           BNE       BADEOL                                              00007990
  848.           PACK      PKVAR(8),0(2,R6)    PICK UP TWO CHARACTERS          00008000
  849.           CVB       R7,PKVAR            PUT PACKED DECIMAL INTO REG     00008010
  850.           C         R7,=F'31'           MAX OF 31 DECIMAL               00008020
  851.           BH        BADEOL                                              00008030
  852.           STC       R7,SEOL             SET SEND EOL VALUE              00008040
  853.           B         SETOK                                               00008050
  854.  BADEOL   WRTERM    'Must be a two digit value less than 31 (dec).'     00008060
  855.           B         SETERR                                              00008070
  856.  ********************************************************************** 00008080
  857.  *                         SET PACKET-SIZE                            * 00008090
  858.  ********************************************************************** 00008100
  859.  NOEND    CLC       =C'PA',0(R6)        CHANGE RECEIVE PACKET SIZE      00008110
  860.           BNE       NOPAC                                               00008120
  861.           BXH       R7,R8,SETNFM        ANY MORE OPERANDS               00008130
  862.           L         R6,0(R7)            GET NEXT TOKEN                  00008140
  863.           CLI       0(R6),C' '          NO DATA                         00008150
  864.           BNE       GETPAC                                              00008160
  865.           WRTERM    '?not confirmed'                                    00008170
  866.           B         SETERR                                              00008180
  867.  GETPAC   CLI       0(R6),C'?'          NEED HELP?                      00008190
  868.           BNE       CALC4                                               00008200
  869.           WRTERM    'Receive packet size (range: 26-94 decimal).'       00008210
  870.           B         SETOK                                               00008220
  871.  CALC4    CLI       0(R6),X'F0'         MUST BE >= TO 0                 00008230
  872.           BL        BADPAC                                              00008240
  873.           CLI       0(R6),X'F9'         MUST BE <= TO 9                 00008250
  874.           BH        BADPAC                                              00008260
  875.           XC        PKVAR,PKVAR         USE TO CONVERT VALUE            00008270
  876.           CLI       1(R6),C' '          INPUT MUST BE TWO CHARS         00008280
  877.           BE        BADPAC                                              00008290
  878.           CLI       2(R6),C' '          TWO CHARS, AT MAX               00008300
  879.           BNE       BADPAC                                              00008310
  880.           PACK      PKVAR(8),0(2,R6)    PICK UP TWO CHARS               00008320
  881.           CVB       R7,PKVAR            PUT PACKED DECIMAL INTO REG     00008330
  882.           C         R7,=F'26'           THIS IS MIN                     00008340
  883.           BL        BADPAC                                              00008350
  884.           C         R7,MAXPACK          THIS IS THE MAX                 00008360
  885.           BH        BADPAC                                              00008370
  886.           ST        R7,RPSIZ            USE THIS VALUE NOW              00008380
  887.           B         SETOK                                               00008390
  888.  BADPAC   WRTERM    'Must be between 26-94 (decimal).'                  00008400
  889.           B         SETERR                                              00008410
  890.  ********************************************************************** 00008420
  891.  *                         SET DEBUG ON:OFF                           * 00008430
  892.  ********************************************************************** 00008440
  893.  NOPAC    CLC       =C'DEB',0(R6)      IS THIS DEBUG?                   00008450
  894.           BNE       SETSOH              NO, THEN SEE IF SET SOH         00008460
  895.           BXH       R7,R8,SETNFM        ANY MORE OPERANDS               00008470
  896.           L         R6,0(R7)            GET NEXT TOKEN                  00008480
  897.           CLI       0(R6),C' '          IS THERE AN OPERAND?            00008490
  898.           BE        DEBERR              NO, THEN ASK FOR ONE.           00008500
  899.           CLC       =C'ON',0(R6)        IS IT TIME TO TURN ON           00008510
  900.           BE        DEBON               YES, OPEN FILE                  00008520
  901.           CLC       =C'OF',0(R6)       IS IT TIME TO TURN OFF           00008530
  902.           BE        DEBOFF              YES, CLOSE FILE                 00008540
  903.           B         DEBERR              YES, GIVE MESSAGE               00008550
  904.  DEBERR   WRTERM    'Command is SET DEBUG ON : OFF'                     00008560
  905.           B         SETERR                                              00008570
  906.  DEBON    OPEN      (DEBUG,(OUTPUT))                                    00008580
  907.           TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN  IS IT OPEN?       00008590
  908.           BO        SETOK                                               00008600
  909.           WRTERM    'Unable to open debug file, debug disabled.'        00008610
  910.           B         SETERR                                              00008620
  911.  DEBOFF   CLOSE     DEBUG                                               00008630
  912.           B         SETOK                                               00008640
  913.  ********************************************************************** 00008650
  914.  *                         SET START-OF-HEADER CHARACTER              * 00008660
  915.  ********************************************************************** 00008670
  916.  SETSOH   CLC       =C'ST',0(R6)       SOH CHARACTER                    00008680
  917.           BNE       NOSOH               NO, THEN TRY DELAY              00008690
  918.           BXH       R7,R8,SETNFM        ANY MORE OPERANDS               00008700
  919.           L         R6,0(R7)            GET NEXT TOKEN                  00008710
  920.           CLI       0(R6),C' '          NOT DATA                        00008720
  921.           BNE       SOHCHAR                                             00008730
  922.           WRTERM    '?not confirmed'                                    00008740
  923.           B         SETERR                                              00008750
  924.  SOHCHAR  CLI       0(R6),C'?'          NEED HELP?                      00008760
  925.           BNE       GETSOH                                              00008770
  926.           WRTERM    'A two digit number between 00 and 31 (dec).'       00008780
  927.           B         SETOK                                               00008790
  928.  GETSOH   CLI       0(R6),X'F0'         MUST BE >= TO 0                 00008800
  929.           BL        BADSOH                                              00008810
  930.           CLI       0(R6),X'F9'         MUST BE <= TO 9                 00008820
  931.           BH        BADSOH                                              00008830
  932.           XC        PKVAR,PKVAR         USE TO CONVERT VALUE            00008840
  933.           CLI       1(R6),C' '          INPUT MUST BE TWO CHARS         00008850
  934.           BE        BADSOH                                              00008860
  935.           CLI       2(R6),C' '          TWO CHARS, AT MAX               00008870
  936.           BNE       BADSOH                                              00008880
  937.           PACK      PKVAR(8),0(2,R6)    PICK UP TWO CHARACTERS          00008890
  938.           CVB       R7,PKVAR            PUT PACKED DECIMAL INTO REG     00008900
  939.           C         R7,=F'31'           MAX OF 31 DECIMAL               00008910
  940.           BH        BADSOH              ERROR, TOO BIG                  00008920
  941.           STC       R7,SSOH             SET SEND SOH VALUE              00008930
  942.           STC       R7,RSOH             SET RECEIVE SOH VALUE           00008940
  943.           B         SETOK                                               00008950
  944.  BADSOH   WRTERM    'Must be a two digit value less than 31 (dec).'     00008960
  945.           B         SETERR                                              00008970
  946.  ********************************************************************** 00008980
  947.  *                      SET DELAY VALUE                               * 00008990
  948.  ********************************************************************** 00009000
  949.  NOSOH    CLC       =C'DEL',0(R6)       CHANGE RECEIVE PACKET SIZE      00009010
  950.           BNE       SETERR                                              00009020
  951.           BXH       R7,R8,SETNFM        ANY MORE OPERANDS               00009030
  952.           L         R6,0(R7)            GET NEXT TOKEN                  00009040
  953.           CLI       0(R6),C' '          NO DATA                         00009050
  954.           BNE       GETDELAY                                            00009060
  955.           WRTERM    '?not confirmed'                                    00009070
  956.           B         SETERR                                              00009080
  957.  GETDELAY CLI       0(R6),C'?'          NEED HELP?                      00009090
  958.           BNE       DLYCALC                                             00009100
  959.           WRTERM    'Receive packet size (range: 26-94 decimal).'       00009110
  960.           B         SETOK                                               00009120
  961.  DLYCALC  XC        PKVAR,PKVAR         EMPTY IT OUT                    00009130
  962.           SR        R4,R4               LENGTH OF NUMBER                00009140
  963.           LA        R7,5                MAX LENGTH OF NUMBER            00009150
  964.           LR        R5,R6               SAVE START OF STRING            00009160
  965.  DLYCALC1 CLI       0(R6),X'F0'         MUST BE >= TO 0                 00009170
  966.           BL        BADDELAY                                            00009180
  967.           CLI       0(R6),X'F9'         MUST BE <= TO 9                 00009190
  968.           BH        BADDELAY                                            00009200
  969.           CLI       1(R6),C' '          FOUND LAST DIGIT?               00009210
  970.           BE        DLYCALC2                                            00009220
  971.           LA        R4,1(R4)            COUNT NUMBER OF DIGITS          00009230
  972.           LA        R6,1(R6)            POINT TO NEXT DIGIT             00009240
  973.           BCT       R7,DLYCALC1         KEEP CHECKING                   00009250
  974.           B         BADDELAY                                            00009260
  975.  DLYCALC2 EX        R4,DLYPCK                                           00009270
  976.           B         DLYTST                                              00009280
  977.  DLYTST   CVB       R7,PKVAR                                            00009290
  978.           LTR       R7,R7               THIS IS MIN                     00009300
  979.           BNP       BADDELAY                                            00009310
  980.           C         R7,=F'99999'        THIS IS THE MAX                 00009320
  981.           BH        BADDELAY                                            00009330
  982.           MH        R7,=H'100'          MAKE IT 100THS OF SECONDS       00009340
  983.           ST        R7,DELAY            USE THIS VALUE NOW              00009350
  984.           B         SETOK                                               00009360
  985.  BADDELAY WRTERM    'Must be between 1-99999 (DECIMAL).'                00009370
  986.           B         SETERR                                              00009380
  987.  SETERR   LA        R15,4               SET A NON-ZERO RETCODE          00009390
  988.           B         SETRET                                              00009400
  989.  SETOK    SR        R15,R15             RETCODE OF 0                    00009410
  990.  *                                                                      00009420
  991.  SETRET   L         R13,4(R13)                                          00009430
  992.           L         R14,12(R13)                                         00009440
  993.           LM        R0,R12,20(R13)                                      00009450
  994.           BR        R14                                                 00009460
  995.  SETSAVE  DS        18F                                                 00009470
  996.  PCK      PACK      PKVAR(8),0(0,R6)                                    00009480
  997.  BLKPCK   PACK      PKVAR(8),0(0,R5)                                    00009490
  998.  SPCPCK   PACK      PKVAR(8),0(0,R5)                                    00009500
  999.  DLYPCK   PACK      PKVAR(8),0(0,R5)                                    00009510
  1000.           LTORG                                                         00009520
  1001.           DROP      R11                                                 00009530
  1002.           DROP      R12                                                 00009540
  1003.           EJECT                                                         00009550
  1004.  ********************************************************************** 00009560
  1005.  *                                                                    * 00009570
  1006.  *        ROUTINE TO PROCESS SHOW COMMAND                             * 00009580
  1007.  *                                                                    * 00009590
  1008.  ********************************************************************** 00009600
  1009.  SHOW     DS        0H                                                  00009610
  1010.           STM       R14,R12,12(R13)     SAVE CALLER'S REGISTERS         00009620
  1011.           BALR      R12,0               ESTABLISH ADDRESSABILITY        00009630
  1012.           USING     *,R12                                               00009640
  1013.           LA        R14,SHOWSAVE        ADDRESS OF MY SAVE AREA         00009650
  1014.           ST        R13,4(R14)          SAVE CALLER'S                   00009660
  1015.           ST        R14,8(R13)                                          00009670
  1016.           LR        R13,R14                                             00009680
  1017.  * USE R11 AS BASE REGISTER FOR 'PARMS' GLOBAL DATA AREA                00009690
  1018.           L         R11,=A(PARMS)                                       00009700
  1019.           USING     PARMS,R11           ESTABLISH ADDRESSABILITY        00009710
  1020.           BXH       R7,R8,SHONFM        ANY MORE OPERANDS               00009720
  1021.           L         R6,0(R7)            GET NEXT TOKEN                  00009730
  1022.           CLC       =C'AU',0(R6)        WANT THE AUTHORS NAME?          00009731
  1023.           BE        SHOAUTH                                             00009732
  1024.           CLI       0(R6),C'?'          NEED HELP ?                     00009740
  1025.           BNE       SHOREC                                              00009750
  1026.           WRTERM    'State'                                             00009760
  1027.           B         SHOWOK                                              00009770
  1028.  SHONFM   WRTERM    '?NOT CONFIRMED'                                    00009780
  1029.           B         SHOWERR                                             00009790
  1030.  SHOREC   CLI       0(R6),C'S'          IS THIS SHOW STATE              00009800
  1031.           BNE       SHOWERR                                             00009810
  1032.           MVC       WRKBUFF(18),=C'Record format is .'                  00009820
  1033.           MVC       WRKBUFF+17(1),RFM                                   00009830
  1034.           TPUT      WRKBUFF,18                                          00009840
  1035.           TR        QUOCHAR(1),ATOE     GET EBCDIC VERSION              00009850
  1036.           MVC       WRKBUFF(20),=C'Quote character is .'                00009860
  1037.           MVC       WRKBUFF+19(1),QUOCHAR                               00009870
  1038.           TPUT      WRKBUFF,20                                          00009880
  1039.           TR        QUOCHAR(1),ETOA     KEEP THE ASCII FORM AROUND      00009890
  1040.           SR        R4,R4               ZERO IT OUT                     00009900
  1041.           IC        R4,LRECL                                            00009910
  1042.           MVC       WRKBUFF(8),=C'Lrecl is'                             00009920
  1043.           BINCVRT   R4,WRKBUFF+8,DBLWRK                                 00009930
  1044.           TPUT      WRKBUFF,14                                          00009940
  1045.           LH        R4,BLKSIZE                                          00009950
  1046.           MVC       WRKBUFF(10),=C'Blksize is'                          00009960
  1047.           BINCVRT   R4,WRKBUFF+10,DBLWRK                                00009970
  1048.           TPUT      WRKBUFF,16                                          00009980
  1049.           L         R4,TRACK                                            00009990
  1050.           MVC       WRKBUFF(32),=C'Space allocation is ..... tracks'    00010000
  1051.           BINCVRT   R4,WRKBUFF+19,DBLWRK                                00010010
  1052.           TPUT      WRKBUFF,32                                          00010020
  1053.           SR        R4,R4               ZERO IT OUT                     00010030
  1054.           IC        R4,SSOH                                             00010040
  1055.         MVC WRKBUFF(44),=C'Start-of-header character is ..... (decimal)'00010050
  1056.           BINCVRT   R4,WRKBUFF+28,DBLWRK                                00010060
  1057.           TPUT      WRKBUFF,44                                          00010070
  1058.           SR        R4,R4               ZERO IT OUT                     00010080
  1059.           IC        R4,SEOL                                             00010090
  1060.           MVC WRKBUFF(40),=C'End-of-line character is ..... (decimal)'  00010100
  1061.           BINCVRT   R4,WRKBUFF+24,DBLWRK                                00010110
  1062.           TPUT      WRKBUFF,40                                          00010120
  1063.           MVC WRKBUFF(38),=C'Receive packet size is ..... (decimal)'    00010130
  1064.           L         R1,RPSIZ                                            00010140
  1065.           BINCVRT   R1,WRKBUFF+22,DBLWRK                                00010150
  1066.           TPUT      WRKBUFF,38                                          00010160
  1067.           MVC       WRKBUFF(28),=C'Delay value is ..... seconds'        00010170
  1068.           L         R1,DELAY                                            00010180
  1069.           SR        R0,R0                                               00010190
  1070.           D         R0,=F'100'                                          00010200
  1071.           BINCVRT   R1,WRKBUFF+14,DBLWRK                                00010210
  1072.           TPUT      WRKBUFF,28                                          00010220
  1073.           MVC       WRKBUFF(9),=C'Debug is '                            00010230
  1074.           MVC       WRKBUFF+9(3),=C'off'                                00010240
  1075.           TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN  IS IT OPEN?       00010250
  1076.           BZ        SHOWDBG                                             00010260
  1077.           MVC       WRKBUFF+9(3),=C'on '                                00010270
  1078.  SHOWDBG  TPUT      WRKBUFF,12                                          00010280
  1079.           B         SHOWOK                                              00010290
  1080.  SHOAUTH  WRTERM    'Written for CMS by Daphne Tzoar Columbia University00010291
  1081.                  NY, NY.'                                               00010292
  1082.           WRTERM    'Modified for TSO by Ronald J. Rusnak, University of00010293
  1083.                  Chicago.'                                              00010294
  1084.           WRTERM    'Modified for GUTS by Stefan Lundberg, Gothenburg Un00010295
  1085.                 iversities'' Computing Centre'                          00010296
  1086.           B         SHOWOK                                              00010297
  1087.  SHOWERR  LA        R15,4               SET A NON-ZERO RETCODE          00010300
  1088.           B         SHOWRET                                             00010310
  1089.  SHOWOK   SR        R15,R15             ZERO RETCODE                    00010320
  1090.  *                                                                      00010330
  1091.  SHOWRET  L         R13,4(R13)                                          00010340
  1092.           L         R14,12(R13)                                         00010350
  1093.           LM        R0,R12,20(R13)                                      00010360
  1094.           BR        R14                                                 00010370
  1095.  SHOWSAVE DS        18F                                                 00010380
  1096.           LTORG                                                         00010390
  1097.           DROP      R11                                                 00010400
  1098.           DROP      R12                                                 00010410
  1099.  *                                                                      00010420
  1100.           EJECT                                                         00010430
  1101.  ********************************************************************** 00010440
  1102.  *                                                                    * 00010450
  1103.  *        ROUTINE TO INITIALIZE PARAMETER AREA                        * 00010460
  1104.  *                                                                    * 00010470
  1105.  ********************************************************************** 00010480
  1106.  INIT     DS        0H                                                  00010490
  1107.           STM       R14,R12,12(R13)                                     00010500
  1108.           BALR      R12,0                                               00010510
  1109.           USING     *,R12                                               00010520
  1110.           LA        R14,ISAVE                                           00010530
  1111.           ST        R13,4(R14)                                          00010540
  1112.           ST        R14,8(R13)                                          00010550
  1113.           LR        R13,R14                                             00010560
  1114.  *                                                                      00010570
  1115.  * INITIALIZE VARIABLES THAT GET CHANGED DURING EXECUTION               00010580
  1116.  * USE R11 AS BASE REGISTER FOR 'PARMS' GLOBAL DATA LIST                00010590
  1117.           L         R11,=A(PARMS)                                       00010600
  1118.           USING     PARMS,R11                                           00010610
  1119.           XC        SNDPKT,SNDPKT       CLEAR OUT THESE BUFFERS         00010620
  1120.           XC        RECPKT,RECPKT                                       00010630
  1121.           XC        INPUT,INPUT                                         00010640
  1122.           LA        R0,BUF                                              00010650
  1123.           LA        R1,L'BUF            ; CLEAR OUT THE BUFFER.         00010660
  1124.           SR        R15,R15                                             00010670
  1125.           MVCL      R0,R14                                              00010680
  1126.           LA        R0,RBUF                                             00010690
  1127.           LA        R1,L'RBUF                                           00010700
  1128.           SR        R15,R15                                             00010710
  1129.           MVCL      R0,R14                                              00010720
  1130.           XC        SDAT,SDAT                                           00010730
  1131.           XC        RDAT,RDAT                                           00010740
  1132.           XC        N,N                 SET VARIABLES TO ZERO           00010750
  1133.           XC        NUM,NUM                                             00010760
  1134.           XC        LSDAT,LSDAT                                         00010770
  1135.           XC        LRDAT,LRDAT                                         00010780
  1136.           MVI       FLAGS,X'00'         CLEAR ALL FLAGS                 00010790
  1137.           XC        SAVPL,SAVPL                                         00010800
  1138.           XC        RSAVPL,RSAVPL                                       00010810
  1139.           XC        NUMTRY,NUMTRY                                       00010820
  1140.           MVC       FILNAM,=18X'20'     BLANK OUT FILNAM & NAME         00010830
  1141.           MVC       NAME,=18X'20'                                       00010840
  1142.           MVI       PREV,X'00'                                          00010850
  1143.           MVI       ERRNUM,X'FF'        SET TO NO ERROR FOR NOW         00010860
  1144.           MVI       OLDERR,X'FF'        SAME HERE                       00010870
  1145.           XC        PKVAR,PKVAR         ZERO IT OUT                     00010880
  1146.           XC        OLDTRY,OLDTRY                                       00010890
  1147.           XC        SPSIZ,SPSIZ                                         00010900
  1148.           XC        SIZE,SIZE                                           00010910
  1149.           XC        TEMP,TEMP                                           00010920
  1150.           XC        STORLOC,STORLOC                                     00010930
  1151.           MVC       DELAY,DDELAY        SET DEFAULT DELAY               00010940
  1152.           MVC       LRECL(1),DLRECL     SET DEFAULTS, JUST IN CASE      00010950
  1153.           MVC       BLKSIZE(2),DBLKSIZE SET DEFAULTS, JUST IN CASE      00010960
  1154.           MVC       TRACK,DTRACK        DEFAULT SPACE OF 5 TRACKS       00010970
  1155.           MVC       RFM(1),DRECFM                                       00010980
  1156.           MVC       QUOCHAR(1),DQUOTE                                   00010990
  1157.           MVC       RQUO(1),DQUOTE                                      00011000
  1158.           MVC       REOL(1),DEOL                                        00011010
  1159.           MVC       SEOL(1),DEOL                                        00011020
  1160.           MVC       SSOH(1),DSOH                                        00011030
  1161.           MVC       RSOH(1),DSOH                                        00011040
  1162.           MVI       STATE,C' '                                          00011050
  1163.           MVI       STYPE,C' '                                          00011060
  1164.           MVI       RTYPE,C' '                                          00011070
  1165.  *                                                                      00011080
  1166.  INITRET  L         R13,4(R13)                                          00011090
  1167.           L         R14,12(R13)                                         00011100
  1168.           LM        R0,R12,20(R13)                                      00011110
  1169.           BR        R14                                                 00011120
  1170.  ISAVE    DS        18F                                                 00011130
  1171.           LTORG                                                         00011140
  1172.           DROP      R11                                                 00011150
  1173.           DROP      R12                                                 00011160
  1174.           EJECT                                                         00011170
  1175.  ********************************************************************** 00011180
  1176.  *                                                                    * 00011190
  1177.  *        ROUTINE TO PROCESS SEND COMMAND                             * 00011200
  1178.  *                                                                    * 00011210
  1179.  ********************************************************************** 00011220
  1180.  SEND     DS        0H                                                  00011230
  1181.           STM       R14,R12,12(R13)     SAVE CALLER'S REGISTERS         00011240
  1182.           BALR      R12,0               ESTABLISH ADDRESSABILITY        00011250
  1183.           USING     *,R12                                               00011260
  1184.           LA        R14,SENDSAVE        ADDRESS OF MY SAVE AREA         00011270
  1185.           ST        R13,4(R14)          SAVE CALLER'S                   00011280
  1186.           ST        R14,8(R13)                                          00011290
  1187.           LR        R13,R14                                             00011300
  1188.  * USE R11 AS BASE REGISTER FOR 'PARMS' GLOBAL DATA AREA                00011310
  1189.           L         R11,=A(PARMS)                                       00011320
  1190.           USING     PARMS,R11           ESTABLISH ADDRESSABILITY        00011330
  1191.           MVI       STATE,C'S'                                          00011340
  1192.           SR        R3,R3                                               00011350
  1193.           ST        R3,N                                                00011360
  1194.           ST        R3,NUMTRY                                           00011370
  1195.  OKSND    TM        FLAGS,FLG1          IS THIS THE FIRST FILE?         00011380
  1196.           BNO       SLOOP                                               00011390
  1197.           NI        FLAGS,X'FF'-FLG1    TURN OFF FIRST FILE FLAG        00011400
  1198.  ********************************************************************** 00011410
  1199.  *        MAIN SEND LOOP                                              * 00011420
  1200.  ********************************************************************** 00011430
  1201.  SLOOP    CLI       STATE,C'D'          SEND DATA STATE                 00011440
  1202.           BE        SDATA                                               00011450
  1203.           CLI       STATE,C'F'          SEND FILE STATE                 00011460
  1204.           BE        SFILE                                               00011470
  1205.           CLI       STATE,C'S'          SEND INIT STATE                 00011480
  1206.           BE        SINIT                                               00011490
  1207.           CLI       STATE,C'Z'          END OF FILE STATE               00011500
  1208.           BE        SEOF                                                00011510
  1209.           CLI       STATE,C'B'          SEND BREAK STATE                00011520
  1210.           BE        SBREAK                                              00011530
  1211.           CLI       STATE,C'C'          COMPLETE STATE                  00011540
  1212.           BE        COMPLETE                                            00011550
  1213.           CLI       STATE,C'A'          ABORT STATE                     00011560
  1214.           BE        ABORT               ERROR - GO TO ABORT STATE       00011570
  1215.           MVI       ERRNUM,X'02'        UNRECOGNIZED STATE              00011580
  1216.           B         ABORT               OTHERWISE, DIE                  00011590
  1217.  ********************************************************************** 00011600
  1218.  *        CREATE AND SEND INITIALIZATION PACKET                       * 00011610
  1219.  ********************************************************************** 00011620
  1220.  SINIT    CLC       NUMTRY,IMXTRY       SEE IF CAN SEND                 00011630
  1221.           BL        OK1                 YES WE CAN                      00011640
  1222.           MVI       STATE,C'A'          NOPE, GO INTO ABORT STATE       00011650
  1223.           B         SLOOP                                               00011660
  1224.  OK1      L         R5,SPACE            MAKE CHARACTER PRINTABLE        00011670
  1225.           A         R5,RPSIZ            ADD REC PACKET SIZE             00011680
  1226.           STC       R5,SDAT             ADD SIZE INFO TO BUFFER         00011690
  1227.           L         R5,SPACE                                            00011700
  1228.           A         R5,=F'8'            8 FOR TIMEOUT                   00011710
  1229.           STC       R5,SDAT+1                                           00011720
  1230.           L         R5,SPACE            SEND ZERO + " " FOR NPAD        00011730
  1231.           STC       R5,SDAT+2           WE'RE THE SLOW GUYS             00011740
  1232.           SR        R5,R5               PAD WITH NULLS                  00011750
  1233.           L         R3,O1H                                              00011760
  1234.           XR        R5,R3               CTL FUNCTION (XOR WITH 64)      00011770
  1235.           STC       R5,SDAT+3           DON'T NEED PADCHAR EITHER       00011780
  1236.           SR        R5,R5               ZERO IT OUT FOR NEXT TWO GUYS   00011790
  1237.           IC        R5,REOL             EOL CHAR I NEED                 00011800
  1238.           A         R5,SPACE            MAKE PRINTABLE                  00011810
  1239.           STC       R5,SDAT+4                                           00011820
  1240.           IC        R5,QUOCHAR          MY QUOTE CHAR                   00011830
  1241.           STC       R5,SDAT+5                                           00011840
  1242.           L         R3,NUMTRY                                           00011850
  1243.           LA        R3,1(R3)            INCREMENT TRIAL COUNTER         00011860
  1244.           ST        R3,NUMTRY                                           00011870
  1245.           MVI       STYPE,AS            PACKET TYPE = SEND INITIATE     00011880
  1246.           MVC       LSDAT(4),=F'6'     BUFFER SIZE FOR THIS SEND        00011890
  1247.           L         R4,DSSIZ            GET DEFAULT SPSIZ               00011900
  1248.           S         R4,FIVE             FOR NOW, USE DEFAULT SPSIZ....  00011910
  1249.           ST        R4,SIZE             ....TO SET VALUE OF SIZE        00011920
  1250.           L         R15,=A(SPACK)       GET ADDRESS OF ROUTINE 'SPACK'  00011930
  1251.           BALR      14,15               SAVE * AND GO TO SPACK          00011940
  1252.           CLI       STATE,C'A'                                          00011950
  1253.           BE        ABORT                                               00011960
  1254.           L         15,=A(RPACK)        GET ADDRESS OF 'RPACK'          00011970
  1255.           BALR      14,15               SAVE * AND GO TO RPACK          00011980
  1256.           CLI       RTYPE,AE            ERROR PACKET?                   00011990
  1257.           BNE       Y1                  NO, THEN MAYBE AN ACK           00012000
  1258.           MVI       ERRNUM,X'0A'        MICRO DIED                      00012010
  1259.           MVI       STATE,C'A'          AND DIE                         00012020
  1260.           B         SLOOP                                               00012030
  1261.  Y1       CLI       RTYPE,AY            SEE IF GOT ACK                  00012040
  1262.           BNE       N1                  MAYBE IT'S 'N'                  00012050
  1263.           CLC       N,NUM               CHECK MESSAGE NUMBERS           00012060
  1264.           BE        AOK1                                                00012070
  1265.           MVI       ERRNUM,X'08'        PACKET LOST                     00012080
  1266.           B         SLOOP                                               00012090
  1267.  AOK1     SR        R4,R4               ZERO OUT REGISTER               00012100
  1268.           IC        R4,RDAT             USE SPSIZ THE MICRO WANTS       00012110
  1269.           S         R4,SPACE            SUBTRACT THE ' '                00012120
  1270.           C         R4,=F'26'           BUFFER HAS TO BE >= 26          00012130
  1271.           BNL       CH1                 SO FAR, SO GOOD                 00012140
  1272.           MVI       STATE,C'A'          ABORT THEN                      00012150
  1273.           MVI       ERRNUM,X'00'        INVALID DATA-PACKET-SIZE ERROR  00012160
  1274.           B         SLOOP                                               00012170
  1275.  CH1      C         R4,MAXPACK          MAX PACKET SIZE                 00012180
  1276.           BNH       CH2                 CONTINUE IF <= TO MAX           00012190
  1277.           MVI       STATE,C'A'          DIE                             00012200
  1278.           MVI       ERRNUM,X'00'        INVALID DATA-PACKET-SIZE ERROR  00012210
  1279.           B         SLOOP                                               00012220
  1280.  CH2      STC       R4,SPSIZ+3          USE SPSIZ THE MICRO WANTS       00012230
  1281.           S         R4,FIVE                                             00012240
  1282.           ST        R4,SIZE             SET SIZE TO SPSIZ-5             00012250
  1283.           CLC       LRDAT(4),=F'4'      USING DEFAULTS?                 00012260
  1284.           BNH       NOCHG               YUP                             00012270
  1285.           LA        R5,RDAT             POINTER TO THE BUFFER           00012280
  1286.           SR        R7,R7                                               00012290
  1287.           IC        R7,4(R5)            SEOL MICRO WANTS                00012300
  1288.           S         R7,SPACE            UNCHAR (IE - SUBTRACT SPACE)    00012310
  1289.           STC       R7,SEOL                                             00012320
  1290.  NOCHG    MVI       STATE,C'F'          PUT INTO SEND FILE STATE        00012330
  1291.           XC        NUMTRY,NUMTRY       RESET TO ZERO                   00012340
  1292.           L         R3,N                                                00012350
  1293.           LA        R3,1(R3)            ADD ONE                         00012360
  1294.           ST        R3,N                STORE VALUE INCREMENTED BY 1    00012370
  1295.           NC        N(4),=X'0000003F'   MASK TO GET MOD 64              00012380
  1296.           B         SLOOP                                               00012390
  1297.  N1       CLI       RTYPE,AN            SEE IF IT'S 'N'                 00012400
  1298.           BNE       AB1                 IF NOT, DIE                     00012410
  1299.           TM        FLAGS,FLG4          DID MICRO NAK OR I REJECTED?    00012420
  1300.           BO        SLOOP               LEAVE ERR MSG AS IS IF I DID    00012430
  1301.           MVI       ERRNUM,X'09'        MICRO NAK'ED                    00012440
  1302.           B         SLOOP                                               00012450
  1303.  AB1      MVI       STATE,C'A'          ELSE, ABORT                     00012460
  1304.           MVI       ERRNUM,X'07'        UNRECOGNIZED PACKET TYPE        00012470
  1305.           B         SLOOP                                               00012480
  1306.  ********************************************************************** 00012490
  1307.  *        CREATE AND SEND FILE PACKET                                 * 00012500
  1308.  ********************************************************************** 00012510
  1309.  SFILE    CLC       NUMTRY,MAXTRY       EXCEEDED NO. OF TRIES ALLOWED?  00012520
  1310.           BL        OK2                 NOPE, STILL OK                  00012530
  1311.           MVI       STATE,C'A'          ABORT IF YES                    00012540
  1312.           B         SLOOP                                               00012550
  1313.  OK2      DS        0H                                                  00012560
  1314.           TR        FILNAM,ETOA                                         00012570
  1315.           LH    R5,FILNAML          GET LENGTH OF FILENAME - 1          00012580
  1316.           MVC   SDAT(*-*),FILNAM    USE FOR EXECUTE                     00012590
  1317.           EX    R5,*-6              GO MOVE FILENAME TO BUFFER          00012600
  1318.           LA    R5,1(,R5)           UP THE FILE LENGTH TO BE EXACT      00012610
  1319.           L         R3,NUMTRY                                           00012620
  1320.           LA        R3,1(R3)            INCREMENT TRIAL COUNTER         00012630
  1321.           ST        R3,NUMTRY                                           00012640
  1322.           MVI       STYPE,AF            PACKET TYPE = FILE HEADER       00012650
  1323.           ST        R5,LSDAT            SET BUFFER SIZE                 00012660
  1324.           TR        FILNAM,ATOE                                         00012670
  1325.  SNDFIL   L         R15,=A(SPACK)       GET ADDRESS OF 'SPACK'          00012680
  1326.           BALR      14,15               SAVE * AND GO TO SPACK          00012690
  1327.           CLI       STATE,C'A'                                          00012700
  1328.           BE        ABORT                                               00012710
  1329.           L         15,=A(RPACK)        GET ADDRESS OF 'RPACK'          00012720
  1330.           BALR      14,15               SAVE * AND GO TO RPACK          00012730
  1331.           CLI       RTYPE,AE            ERROR PACKET?                   00012740
  1332.           BNE       Y2                  MAYBE AN ACK                    00012750
  1333.           MVI       ERRNUM,X'0A'        MICRO DIED                      00012760
  1334.           MVI       STATE,C'A'          SO WE DO TOO                    00012770
  1335.           B         SLOOP                                               00012780
  1336.  Y2       CLI       RTYPE,AY            SEE IF GOT ACK                  00012790
  1337.           BNE       N2                  MAYBE GOT AN 'N'                00012800
  1338.           CLC       N,NUM               DO WE HAVE THE CORRECT ACK?     00012810
  1339.           BE        AOK2                                                00012820
  1340.           MVI       ERRNUM,X'08'        MISSING A PACKET SOMEWHERE      00012830
  1341.           B         SLOOP                                               00012840
  1342.  AOK2     MVI       STATE,C'D'          PREPARE FOR SEND-DATA STATE     00012850
  1343.           XC        NUMTRY,NUMTRY       RESET COUNTER                   00012860
  1344.           L         R3,N                                                00012870
  1345.           LA        R3,1(R3)            ADD ONE                         00012880
  1346.           ST        R3,N                STORE INCREMENTED VALUE         00012890
  1347.           NC        N(4),=X'0000003F'   MASK TO GET MOD 64              00012900
  1348.           L         15,=A(GTCHR)                                        00012910
  1349.           BALR      14,15               DO GET-CHAR AND COME BACK       00012920
  1350.           B         SLOOP                                               00012930
  1351.  N2       CLI       RTYPE,AN                                            00012940
  1352.           BNE       AB2                 ELSE, DIE                       00012950
  1353.           TM        FLAGS,FLG4          DID MICRO NAK OR I REJECTED?    00012960
  1354.           BO        SLOOP               LEAVE ERR MSG AS IS IF I DID    00012970
  1355.           MVI       ERRNUM,X'09'        MICRO NAK'ED                    00012980
  1356.           B         SLOOP                                               00012990
  1357.  AB2      MVI       STATE,C'A'          ELSE, ABORT                     00013000
  1358.           MVI       ERRNUM,X'07'        UNRECOGNIZED PACKET TYPE        00013010
  1359.           B         SLOOP                                               00013020
  1360.  ********************************************************************** 00013030
  1361.  *        CREATE AND SEND DATA PACKETS                                * 00013040
  1362.  ********************************************************************** 00013050
  1363.  SDATA    CLC       NUMTRY,MAXTRY       CAN WE DO IT?                   00013060
  1364.           BL        OK4                 YES                             00013070
  1365.           MVI       STATE,C'A'          ELSE ABORT                      00013080
  1366.           B         SLOOP                                               00013090
  1367.  OK4      L         R3,NUMTRY                                           00013100
  1368.           LA        R3,1(R3)            INCREMENT COUNTER               00013110
  1369.           ST        R3,NUMTRY                                           00013120
  1370.           MVI       STYPE,AD            PACKET TYPE = DATA              00013130
  1371.           L         R15,=A(SPACK)                                       00013140
  1372.           BALR      14,15               GO TO SPACK AND RETURN          00013150
  1373.           CLI       STATE,C'A'                                          00013160
  1374.           BE        ABORT                                               00013170
  1375.           L         15,=A(RPACK)                                        00013180
  1376.           BALR      14,15               SAME FOR RPACK                  00013190
  1377.           CLI       RTYPE,AE            ERROR PACKET?                   00013200
  1378.           BNE       Y4                  MAYBE AN ACK                    00013210
  1379.           MVI       ERRNUM,X'0A'        MICRO DIED                      00013220
  1380.           MVI       STATE,C'A'          SO WE DO TOO                    00013230
  1381.           B         SLOOP                                               00013240
  1382.  Y4       CLI       RTYPE,AY            SEE IF GOT 'ACK'                00013250
  1383.           BNE       N4                  SEE IF IT'S AN 'N'              00013260
  1384.           CLC       N,NUM               DO WE HAVE THE CORRECT ACK?     00013270
  1385.           BE        AOK4                                                00013280
  1386.           MVI       ERRNUM,X'08'        MISSING A PACKET                00013290
  1387.           B         SLOOP                                               00013300
  1388.  AOK4     XC        NUMTRY,NUMTRY       RESET COUNTER                   00013310
  1389.           L         R3,N                                                00013320
  1390.           LA        R3,1(R3)            INCREMENT COUNTER               00013330
  1391.           ST        R3,N                                                00013340
  1392.           NC        N(4),=X'0000003F'   MASK TO GET MOD 64              00013350
  1393.           L         15,=A(GTCHR)                                        00013360
  1394.           BALR      14,15               DO GET-CHAR AND RETURN          00013370
  1395.           B         SLOOP                                               00013380
  1396.  N4       CLI       RTYPE,AN                                            00013390
  1397.           BNE       AB4                                                 00013400
  1398.           TM        FLAGS,FLG4          DID MICRO NAK OR I REJECTED?    00013410
  1399.           BO        SLOOP               LEAVE ERR MSG AS IS IF I DID    00013420
  1400.           MVI       ERRNUM,X'09'        MICRO NAK'ED                    00013430
  1401.           B         SLOOP                                               00013440
  1402.  AB4      MVI       STATE,C'A'                                          00013450
  1403.           MVI       ERRNUM,X'07'        ILLEGAL PACKET TYPE             00013460
  1404.           B         SLOOP                                               00013470
  1405.  ********************************************************************** 00013480
  1406.  *        CREATE AND SEND EOF PACKET                                  * 00013490
  1407.  ********************************************************************** 00013500
  1408.  SEOF     CLC       NUMTRY,MAXTRY       CAN WE DO IT?                   00013510
  1409.           BL        OK5                 BRANCH IF YES                   00013520
  1410.           MVI       STATE,C'A'          ABORT IF NO                     00013530
  1411.           B         SLOOP                                               00013540
  1412.  OK5      L         R3,NUMTRY                                           00013550
  1413.           LA        R3,1(R3)            ADD ONE                         00013560
  1414.           ST        R3,NUMTRY           STORE INCREMENTED COUNTER       00013570
  1415.           MVI       STYPE,AZ            PACKET TYPE = EOF               00013580
  1416.           XC        LSDAT,LSDAT         LENGTH OF ZERO                  00013590
  1417.           L         R15,=A(SPACK)                                       00013600
  1418.           BALR      14,15               SAVE * AND GO TO SPACK          00013610
  1419.           CLI       STATE,C'A'                                          00013620
  1420.           BE        ABORT                                               00013630
  1421.           L         15,=A(RPACK)                                        00013640
  1422.           BALR      14,15               SAME FOR RPACK                  00013650
  1423.           CLI       RTYPE,AE            ERROR PACKET?                   00013660
  1424.           BNE       Y5                  MAYBE AN ACK                    00013670
  1425.           MVI       ERRNUM,X'0A'        MICRO DIED                      00013680
  1426.           MVI       STATE,C'A'          SO WE DO TOO                    00013690
  1427.           B         SLOOP                                               00013700
  1428.  Y5       CLI       RTYPE,AY            CHECK FOR 'ACK'                 00013710
  1429.           BNE       N5                  MAYBE WAS A 'NAK'               00013720
  1430.           CLC       N,NUM               CORRECT ACK?                    00013730
  1431.           BE        AOK5                                                00013740
  1432.           MVI       ERRNUM,X'08'        LOST A PACKET                   00013750
  1433.           B         SLOOP                                               00013760
  1434.  AOK5     L         R3,N                                                00013770
  1435.           LA        R3,1(R3)            ADD ONE                         00013780
  1436.           ST        R3,N                STORE VALUE INCREMENTED BY 1    00013790
  1437.           NC        N(4),=X'0000003F'   MASK TO GET MOD 64              00013800
  1438.           MVI       STATE,C'F'          SET TO SEND FILE FOR NOW        00013810
  1439.  *                                                                      00013820
  1440.  *                                                                      00013830
  1441.  *  WE JUST PROCESS ONE FILE FOR NOW.                                   00013840
  1442.  *                                                                      00013850
  1443.  DIEOK    MVI       STATE,C'B'          BREAK CONNECTION                00013860
  1444.           B         SLOOP                                               00013870
  1445.  N5       CLI       RTYPE,AN                                            00013880
  1446.           BNE       AB5                 DIE IF NOT A NAK                00013890
  1447.           TM        FLAGS,FLG4          DID MICRO NAK OR I REJECTED?    00013900
  1448.           BO        SLOOP               LEAVE ERR MSG AS IS IF I DID    00013910
  1449.           MVI       ERRNUM,X'09'        MICRO NAK'ED                    00013920
  1450.           B         SLOOP                                               00013930
  1451.  AB5      MVI       STATE,C'A'          ELSE, ABORT                     00013940
  1452.           MVI       ERRNUM,X'07'        UNRECOGNIZED PACKET TYPE        00013950
  1453.           B         SLOOP                                               00013960
  1454.  ********************************************************************** 00013970
  1455.  *        CREATE AND SEND BREAK PACKET                                * 00013980
  1456.  ********************************************************************** 00013990
  1457.  SBREAK   CLC       NUMTRY,MAXTRY       OVER OUR LIMIT?                 00014000
  1458.           BL        OK6                 BRANCH IF NO                    00014010
  1459.           MVI       STATE,C'A'          ABORT IF YES                    00014020
  1460.           B         SLOOP                                               00014030
  1461.  OK6      L         R3,NUMTRY                                           00014040
  1462.           LA        R3,1(R3)            ADD ONE                         00014050
  1463.           ST        R3,NUMTRY           INCREMEMTED TRIAL COUNTER       00014060
  1464.           MVI       STYPE,AB            PACKET TYPE = BREAK             00014070
  1465.           XC        LSDAT,LSDAT         LENGTH = ZERO                   00014080
  1466.           L         R15,=A(SPACK)                                       00014090
  1467.           BALR      14,15               SAVE * AND GO TO SPACK          00014100
  1468.           CLI       STATE,C'A'                                          00014110
  1469.           BE        ABORT                                               00014120
  1470.           L         15,=A(RPACK)                                        00014130
  1471.           BALR      14,15               SAVE * AND GO TO RPACK          00014140
  1472.           CLI       RTYPE,AE            ERROR PACKET?                   00014150
  1473.           BNE       Y6                  MAYBE AN ACK                    00014160
  1474.           MVI       ERRNUM,X'0A'        MICRO DIED                      00014170
  1475.           MVI       STATE,C'A'          THEN WE DO TOO                  00014180
  1476.           B         SLOOP                                               00014190
  1477.  Y6       CLI       RTYPE,AY            CHECK FOR ACK                   00014200
  1478.           BNE       N6                  CHECK FOR 'N'                   00014210
  1479.           CLC       N,NUM               CORRECT ACK?                    00014220
  1480.           BE        AOK6                                                00014230
  1481.           MVI       ERRNUM,X'08'        LOST A PACKET                   00014240
  1482.           B         SLOOP                                               00014250
  1483.  AOK6     MVI       STATE,C'C'          COMPLETED STATE                 00014260
  1484.           B         SLOOP                                               00014270
  1485.  N6       CLI       RTYPE,AN            CHECK FOR 'N'                   00014280
  1486.           BNE       AB6                 DIE IF NOT A NAK                00014290
  1487.           TM        FLAGS,FLG4          DID MICRO NAK OR I REJECTED?    00014300
  1488.           BO        SLOOP               LEAVE ERR MSG AS IS IF I DID    00014310
  1489.           MVI       ERRNUM,X'09'        MICRO NAK'ED                    00014320
  1490.           B         SLOOP                                               00014330
  1491.  AB6      MVI       STATE,C'A'          ELSE,ABORT                      00014340
  1492.           MVI       ERRNUM,X'07'        UNRECOGNIZED PACKET TYPE        00014350
  1493.           B         SLOOP                                               00014360
  1494.  ********************************************************************** 00014370
  1495.  *        CREATE AND SEND ABORT PACKET                                * 00014380
  1496.  ********************************************************************** 00014390
  1497.  ABORT    DS        0H                                                  00014400
  1498.           TM        FLAGS,FLG1          DYING ON FILE-NOT-FOUND?        00014410
  1499.           BO        NOERRP              IF SO, THEN NO ERROR PACKET     00014420
  1500.           CLI       ERRNUM,X'0A'        DID THE MICRO DIE?              00014430
  1501.           BE        NOERRP              NO ERROR PACKET IF SO           00014440
  1502.           MVI       STYPE,AE            ERROR PACKET                    00014450
  1503.           MVC       LSDAT(4),=F'20'     ALL MSGS ARE THIS LONG          00014460
  1504.           MVC       N(4),NUM            SYNCH PACKET NUMBERS            00014470
  1505.           SR        R5,R5                                               00014480
  1506.           IC        R5,ERRNUM           GET RIGHT MESSAGE NUMBER        00014490
  1507.           M         R4,=F'20'           OFFSET := ERRNUM * 20           00014500
  1508.           LA        R5,ERRTAB(R5)                                       00014510
  1509.           MVC       SDAT(20),0(R5)      SPACK NEEDS THE DATA HERE       00014520
  1510.           TR        SDAT(20),ETOA                                       00014530
  1511.           L         R15,=A(SPACK)                                       00014540
  1512.           BALR      R14,R15             SEND ERROR PACKET & DIE         00014550
  1513.  NOERRP   LA        R15,4               SET NON-ZERO RETCODE            00014560
  1514.           B         SENDRET             PREPARE TO LEAVE                00014570
  1515.  ********************************************************************** 00014580
  1516.  *        PROCESS COMPLETE                                            * 00014590
  1517.  ********************************************************************** 00014600
  1518.  COMPLETE SR        R15,R15             ZERO WILL BE RETCODE            00014610
  1519.  SENDRET  L         R13,4(R13)                                          00014620
  1520.           L         R14,12(R13)                                         00014630
  1521.           LM        R0,R12,20(R13)                                      00014640
  1522.           BR        R14                                                 00014650
  1523.           EJECT                                                         00014660
  1524.  ********************************************************************** 00014670
  1525.  *                                                                    * 00014680
  1526.  *  ROUTINE TO GET A CHARACTER FROM INPUT BUFFER WILL READ DISK TO    * 00014690
  1527.  *        FILL THE BUFFER.                                            * 00014700
  1528.  *                                                                    * 00014710
  1529.  ********************************************************************** 00014720
  1530.  GTCHR    DS        0H                                                  00014730
  1531.           TM        FLAGS,FLG3          SEE IF THERE'S STUFF IN BUF     00014740
  1532.           BO        STUFF               ONES -> STUFF'S THERE           00014750
  1533.  *                                                                      00014760
  1534.  *  GO TO COMMON ROUTINE TO READ SOME BYTES                             00014770
  1535.  *                                                                      00014780
  1536.           LA        R15,READX                                           00014790
  1537.           BALR      R15,R15                                             00014800
  1538.  *                                                                      00014810
  1539.           LTR       R4,R1               PUT RESULT OF READ IN R4        00014820
  1540.           BZ        OK8                                                 00014830
  1541.           C         R4,=A(ERCOD)        RETCODE OF 12 MEANS EOF         00014840
  1542.           BNE       ERR1                TRY IT AGAIN                    00014850
  1543.           MVI       STATE,C'Z'          MAKE TO EOF STATE               00014860
  1544.           BR        R14                                                 00014870
  1545.  ERR1     MVI       STATE,C'A'          ABORT ON FILE SYSTEM ERROR      00014880
  1546.           MVI       ERRNUM,X'0C'        INVALID RECORD LENGTH           00014890
  1547.           C         R4,=F'8'            WAS OUR GUESS RIGHT?            00014900
  1548.           BER       R14                 IF YES, RETURN                  00014910
  1549.           MVI       ERRNUM,X'0D'        ELSE, GOT AN I/O ERROR          00014920
  1550.           BR        R14                                                 00014930
  1551.  OK8      LR        R5,R0               GET NUMBER OF BYTES READ IN     00014940
  1552.           LR        R4,R5               SAVE ALSO IN R4                 00014950
  1553.           BCTR      R4,0                SUBTRACT 1 FOR EX COMMAND       00014960
  1554.           EX        R4,TRANS            EBCDIC TO ASCII TRANSLATION     00014970
  1555.           LA        R8,BUF              GET LOCATION OF BUFFER INPUT    00014980
  1556.           LA        R9,BUF(R4)          LAST POSITION IN THAT BUFFER    00014990
  1557.  X4       CLI       0(R9),X'20'         IS THIS A BLANK?                00015000
  1558.           BNE       X5                  NO, FOUND LAST CHAR OF LINE     00015010
  1559.           BCTR      R9,0                                                00015020
  1560.           CR        R9,R8                                               00015030
  1561.           BNL       X4                  FIND LAST CHAR                  00015040
  1562.           SR        R5,R5               ALL BLANKS                      00015050
  1563.           B         FOO                                                 00015060
  1564.  X5       SR        R9,R8                                               00015070
  1565.           LR        R5,R9               LENGTH OF LINE                  00015080
  1566.           LA        R5,1(R5)            ADD ONE                         00015090
  1567.  FOO      LA        R9,BUF(R5)          FIRST BLANK SPACE AFTER DATA    00015100
  1568.           MVC       0(1,R9),=X'0D'      ADD ASCII CR                    00015110
  1569.           LA        R9,1(R9)            INCREMENT POINTER               00015120
  1570.           MVC       0(1,R9),=X'0A'      AND ADD ASCII LF                00015130
  1571.           LA        R5,2(R5)            TWO EXTRA BYTES OF DATA NOW     00015140
  1572.           ST        R5,RECL             LRECL + 2 (FOR CRLF)            00015150
  1573.           SR        R8,R8               ZERO OUT INDEX FOR BUF          00015160
  1574.  STUFF    SR        R9,R9               SAME FOR INDEX FOR SDAT         00015170
  1575.           SR        R10,R10             CHARACTER COUNTER               00015180
  1576.           SR        R5,R5               WILL HOLD QUOCHAR               00015190
  1577.           IC        R5,QUOCHAR                                          00015200
  1578.           L         R8,SAVPL            WHERE WE LEFT OFF               00015210
  1579.           C         R8,RECL             SEE IF ARE AT LIMIT             00015220
  1580.           BNL       FULL2               LEAVE IF REACHED OR EXCEEDED    00015230
  1581.           SR        R7,R7                                               00015240
  1582.  LOOP     IC        R7,BUF(R8)          PICK UP BYTE                    00015250
  1583.           CR        R7,R5               IS IT THE QUOTE CHARACTER?      00015260
  1584.           BE        SPECIAL                                             00015270
  1585.           C         R7,DEL              IS IT THE CHARDEL?              00015280
  1586.           BE        SPECIAL                                             00015290
  1587.           C         R7,SPACE            IS IT A CONTROL CHARACTER?      00015300
  1588.           BL        SPECIAL                                             00015310
  1589.           B         ADDIT                                               00015320
  1590.  SPECIAL  L         R4,SIZE             MUNGE VALUE WHILE IN R4         00015330
  1591.           SR        R4,R10              FIND DIF BETWWEN THE TWO        00015340
  1592.           C         R4,TWO              SEE IF HAVE AT LEAST 2 BYTES    00015350
  1593.           BNL       ROOM                YES,CAN ADD                     00015360
  1594.           STC       R10,LSDAT+3         SET LSDAT TO VAL OF COUNTER     00015370
  1595.           OI        FLAGS,FLG3          SET FLAG TO SHOW STUFF'S THERE  00015380
  1596.           ST        R8,SAVPL            SAVE PLACE IN BUF               00015390
  1597.           BR        14                  LEAVE THIS ROUTINE              00015400
  1598.  ROOM     LA        R4,SDAT(R9)         WHERE IT'S GOING                00015410
  1599.           MVC       0(1,R4),QUOCHAR     MOVE QUOTE CHAR THERE           00015420
  1600.           LA        R9,1(R9)            INCREMENT SDAT COUNTER          00015430
  1601.           LA        R10,1(R10)          INCREMENT CHARACTER COUNTER     00015440
  1602.           CR        R7,R5               DON'T ADD ^O100 TO THIS         00015450
  1603.           BE        ADDIT               IT'S ALREADY PRINTABLE          00015460
  1604.           A         R7,O1H              ADD ^O100 TO CHAR               00015470
  1605.           N         R7,=X'0000007F'     GET MOD ^O200                   00015480
  1606.  ADDIT    STC       R7,SDAT(R9)         ADD THE CHARACTER               00015490
  1607.           LA        R9,1(R9)            INCREMENT SDAT COUNTER          00015500
  1608.           LA        R8,1(R8)            INCREMENT BUF COUNTER           00015510
  1609.           LA        R10,1(R10)          INCREMENT CHARACTER COUNTER     00015520
  1610.           C         R8,RECL             SEE IF REACHED LIMIT            00015530
  1611.           BNL       FULL2                                               00015540
  1612.           C         R9,SIZE             SEE IF REACHED LIMIT            00015550
  1613.           BNL       FULL                                                00015560
  1614.           B         LOOP                                                00015570
  1615.  FULL     EQU       *                                                   00015580
  1616.           STC       R10,LSDAT+3         THIS ONE TOO                    00015590
  1617.           ST        R8,SAVPL            HERE TOO                        00015600
  1618.           OI        FLAGS,FLG3          TURN ON FLAG - STUFF IN BUF     00015610
  1619.           BR        14                                                  00015620
  1620.  FULL2    EQU       *                                                   00015630
  1621.           STC       R10,LSDAT+3         THIS ONE TOO                    00015640
  1622.           XC        SAVPL,SAVPL         RESET THIS                      00015650
  1623.           NI        FLAGS,X'FF'-FLG3    TURN OFF LEFTOVER DATA FLAG     00015660
  1624.           BR        14                                                  00015670
  1625.  SENDSAVE DS        18F                                                 00015680
  1626.  TRANS    TR        BUF(0),ETOA         EBCDIC TO ASCII TRANSLATION     00015690
  1627.  TRNS     TR        SNDPKT(0),ATOE      BACK FROM ASCII TO EBCDIC       00015700
  1628.  PARSE    DC        32X'00'                                             00015710
  1629.           DC        X'01'               STOP ON A SPACE                 00015720
  1630.           DC        223X'00'                                            00015730
  1631.  FIRST    MVC       SDAT(0),FILNAM      PICK UP THE FN                  00015740
  1632.  SECOND   MVC       0(0,R7),FILNAM+8    PICK UP FT                      00015750
  1633.           LTORG                                                         00015760
  1634.           DROP      R11                                                 00015770
  1635.           DROP      R12                 DON'T NEED THEM ANYMORE         00015780
  1636.           EJECT                                                         00015790
  1637.  ********************************************************************** 00015800
  1638.  *                                                                    * 00015810
  1639.  *        ROUTINE TO PROCESS SEND PACKET REQUEST                      * 00015820
  1640.  *                                                                    * 00015830
  1641.  ********************************************************************** 00015840
  1642.  SPACK    DS        0H     CSECT                                        00015850
  1643.           STM       R14,R12,12(R13)     SAVE CALLER'S REGISTERS         00015860
  1644.           BALR      R12,0               ESTABLISH ADDRESSABILITY        00015870
  1645.           USING     *,R12                                               00015880
  1646.           LA        R14,SPSAVE          ADDRESS OF MY SAVE AREA         00015890
  1647.           ST        R13,4(R14)          SAVE CALLER'S                   00015900
  1648.           ST        R14,8(R13)                                          00015910
  1649.           LR        R13,R14                                             00015920
  1650.  * USE R11 AS BASE REGISTER FOR 'PARMS' GLOBAL DATA AREA                00015930
  1651.           L         R11,=A(PARMS)                                       00015940
  1652.           USING     PARMS,R11           ESTABLISH ADDRESSABILITY        00015950
  1653.           SR        R9,R9                                               00015960
  1654.           MVC       PHDR,SSOH           ADD SOH TO PACKET               00015970
  1655.           CLC       LSDAT,SIZE          NEED DATA SIZE <= SPSIZ-5       00015980
  1656.           BNH       FINE                                                00015990
  1657.           MVI       ERRNUM,X'00'        DATA SIZE EXCEEDS MAX LIMIT     00016000
  1658.           MVI       STATE,C'A'          ABORT ON THIS                   00016010
  1659.           B         SPRET                                               00016020
  1660.  FINE     L         R4,=F'35'           USE ^o43 TO OFFSET DATA         00016030
  1661.           A         R4,LSDAT            ADD IT TO LSDAT                 00016040
  1662.           STC       R4,PLEN                                             00016050
  1663.           AR        R9,R4               AND THEN ADD IT TO CHECKSUM     00016060
  1664.           CLC       N,ZERO              CHECK IF N IS VALID             00016070
  1665.           BNL       T1                  OK IF >= TO 0                   00016080
  1666.           MVI       ERRNUM,X'01'        ILLEGAL MESSAGE NUMBER          00016090
  1667.           MVI       STATE,C'A'                                          00016100
  1668.           B         SPRET                                               00016110
  1669.  T1       CLC       N,O1H               SEE IF IS <= OCTAL 100          00016120
  1670.           BNH       T2                                                  00016130
  1671.           MVI       ERRNUM,X'01'        ILLEGAL MESSAGE NUMBER          00016140
  1672.           MVI       STATE,C'A'                                          00016150
  1673.           B         SPRET                                               00016160
  1674.  T2       L         R4,SPACE            OFFSET THIS VALUE TOO           00016170
  1675.           A         R4,N                ADD IT TO N                     00016180
  1676.           ST        R4,TEMP                                             00016190
  1677.           MVC       PNUM(1),TEMP+3                                      00016200
  1678.           A         R9,TEMP             AND ADD TO CHECKSUM             00016210
  1679.           CLI       STYPE,X'41'         ASCII 'A'                       00016220
  1680.           BL        T3                  CAN'T BE LESS THAN THIS         00016230
  1681.           CLI       STYPE,X'5A'         ASCII 'Z'                       00016240
  1682.           BNH       T4                  CAN'T BE GREATER                00016250
  1683.  T3       MVI       ERRNUM,X'07'        ILLEGAL PACKET TYPE             00016260
  1684.           MVI       STATE,C'A'          DIE ON THIS                     00016270
  1685.           B         SPRET                                               00016280
  1686.  T4       MVC       PTYPE(1),STYPE      ADD MESSAGE TYPE                00016290
  1687.           SR        R2,R2               ZERO IT OUT                     00016300
  1688.           IC        R2,STYPE                                            00016310
  1689.           AR        R9,R2               ADD TO CHECKSUM                 00016320
  1690.           L         R6,LSDAT            HOW MUCH DATA                   00016330
  1691.           LTR       R6,R6               TEST IT OUT                     00016340
  1692.           BZ        NODAT                                               00016350
  1693.           SR        R5,R5               USE TO GET DATA                 00016360
  1694.           SR        R3,R3               USE TO HOLD DATA                00016370
  1695.  DATCHK   IC        R3,SDAT(R5)         PICK UP CHAR                    00016380
  1696.           AR        R9,R3               ADD TO CHECKSUM                 00016390
  1697.           LA        R5,1(R5)            BUMP POINTER                    00016400
  1698.           BCTR      R6,0                                                00016410
  1699.           LTR       R6,R6               MORE DATA?                      00016420
  1700.           BNZ       DATCHK                                              00016430
  1701.  NODAT    L         R6,LSDAT            WILL NEED THIS LATER            00016440
  1702.           LR        R7,R6               MUNGE WHILE IN R7               00016450
  1703.           BCTR      R7,0                SUBTRACT 1 FOR EX FUNCTION      00016460
  1704.           EX        R7,MOVE             MOVE THE DATA TO SNDPKT         00016470
  1705.           ST        R9,TEMP             WE'LL NEED THIS SOON            00016480
  1706.           N         R9,=X'000000C0'     GET MOD 192                     00016490
  1707.           M         R8,ONE              CARRY OVER THE SIGN BIT         00016500
  1708.           D         R8,O1H              GET MOD 64                      00016510
  1709.           A         R9,TEMP             ADD THE TWO VALUES              00016520
  1710.           N         R9,=X'0000003F'     GET MOD 64 OF CHECKSUM          00016530
  1711.           A         R9,SPACE            ADD OFFSET                      00016540
  1712.           STC       R9,PDATA(R6)        ADD CHECKSUM AFTER DATA         00016550
  1713.           LA        R6,1(R6)            MOVE POINTER                    00016560
  1714.           IC        R9,SEOL             ADD SEND END OF PACKET CHAR     00016570
  1715.           STC       R9,PDATA(R6)                                        00016580
  1716.           LA        R6,5(R6)            VALUE OF LSDAT+5                00016590
  1717.           TR        SNDPKT(130),ATOE    SEND IN EBCDIC                  00016600
  1718.           TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN  IS IT OPEN?       00016610
  1719.           BZ        SPNODEB                                             00016620
  1720.           MVC       WRKBUFF(2),=H'20'                                   00016630
  1721.           XC        WRKBUFF+2(2),WRKBUFF+2                              00016640
  1722.           MVC       WRKBUFF+4(16),=CL16'TPUT SEND PACKET'               00016650
  1723.           PUT       DEBUG,WRKBUFF                                       00016660
  1724.           LA        R1,4(,R6)           ADJUST LENGTH                   00016670
  1725.           STH       R1,WRKBUFF          SET RDW                         00016680
  1726.           EX        R6,DBGMVC1          MOVE IN DATA                    00016690
  1727.           PUT       DEBUG,WRKBUFF                                       00016700
  1728.  SPNODEB  TPUT      SNDPKT,(R6),CONTROL                                 00016710
  1729.           LTR       R15,R15             WAS THERE ANY ERROR?            00016720
  1730.           BZ        SPRET               NO, THEN JUST RETURN            00016730
  1731.           MVI       ERRNUM,10           SET MICRO DIED                  00016740
  1732.           MVI       STATE,C'A'          ABORT ON THIS                   00016750
  1733.  SPRET    L         R13,4(R13)                                          00016760
  1734.           L         R14,12(R13)                                         00016770
  1735.           LM        R0,R12,20(R13)                                      00016780
  1736.           BR        14                                                  00016790
  1737.  SPSAVE   DS        18F                                                 00016800
  1738.  MOVE     MVC       PDATA(0),SDAT                                       00016810
  1739.  DBGMVC1  MVC       WRKBUFF+4(*-*),SNDPKT                               00016820
  1740.           LTORG                                                         00016830
  1741.           DROP      R11                                                 00016840
  1742.           DROP      R12                 DON'T NEED THEM ANYMORE         00016850
  1743.           EJECT                                                         00016860
  1744.  ********************************************************************** 00016870
  1745.  *                                                                    * 00016880
  1746.  *        ROUTINE TO PROCESS RECEIVE PACKET REQUEST                   * 00016890
  1747.  *                                                                    * 00016900
  1748.  ********************************************************************** 00016910
  1749.  RPACK    DS        0H                                                  00016920
  1750.           STM       R14,R12,12(R13)     SAVE CALLER'S REGISTERS         00016930
  1751.           BALR      R12,0               ESTABLISH ADDRESSABILITY        00016940
  1752.           USING     *,R12                                               00016950
  1753.           LA        R14,RPSAVE          ADDRESS OF MY SAVE AREA         00016960
  1754.           ST        R13,4(R14)          SAVE CALLER'S                   00016970
  1755.           ST        R14,8(R13)                                          00016980
  1756.           LR        R13,R14                                             00016990
  1757.  * USE R11 AS BASE REGISTER FOR 'PARMS' GLOBAL DATA AREA                00017000
  1758.           L         R11,=A(PARMS)                                       00017010
  1759.           USING     PARMS,R11           ESTABLISH ADDRESSABILITY        00017020
  1760.           MVI       RECPKT,C' '         CLEAR OUT THE INPUT AREA GUCSL  00017021
  1761.           MVC       RECPKT+1(L'RECPKT-1),RECPKT                  GUCSL  00017022
  1762.           TGET      RECPKT,130,ASIS                                     00017030
  1763.           LTR       R15,R15             WAS THERE AN ERROR?             00017040
  1764.           BZ        RPTSTDB             NO, THEN TEST FOR DEBUG         00017050
  1765.           MVI       RTYPE,AE            SET AN ERROR                    00017060
  1766.           B         RPRET                                               00017070
  1767.  RPTSTDB  TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN  IS IT OPEN?       00017082
  1768.           BZ        RDNODEB                                             00017090
  1769.           LA        R8,4(,R1)       SAVE LENGTH                         00017100
  1770.           MVC       WRKBUFF(2),=H'19'                                   00017110
  1771.           XC        WRKBUFF+2(2),WRKBUFF+2                              00017120
  1772.           MVC       WRKBUFF+4(15),=CL15'TGET REC PACKET'                00017130
  1773.           PUT       DEBUG,WRKBUFF                                       00017140
  1774.           STH       R8,WRKBUFF          SET RDW                         00017150
  1775.           EX        R8,DBGMVC2          MOVE IN DATA                    00017160
  1776.           PUT       DEBUG,WRKBUFF                                       00017170
  1777.  RDNODEB  TR        RECPKT(130),ETOA                                    00017180
  1778.           NI        FLAGS,X'FF'-FLG4    ASSUME MICRO'LL NAK-NOT RPACK   00017190
  1779.           SR        R8,R8               INDEX REG FOR RECPKT            00017200
  1780.           SR        R5,R5               CHECKSUM REGISTER               00017210
  1781.  TRY      LA        R7,RECPKT(R8)       ADDRESS OF CHARACTER            00017220
  1782.           CLC       RSOH,0(R7)          IS IT START OF HEADER           00017230
  1783.           BE        READIN              YES; SO FAR, SO GOOD            00017240
  1784.           LA        R8,1(R8)            TRY NEXT CHARACTER              00017250
  1785.           C         R8,=F'130'          SEE IF EXCEED BUFFER            00017260
  1786.           BL        TRY                                                 00017270
  1787.           MVI       ERRNUM,X'03'        NO "SOH" ERROR                  00017280
  1788.           B         BADP                                                00017290
  1789.  READIN   SR        R9,R9               ZERO OUT INDEX REG FOR RDAT     00017300
  1790.           LA        R8,1(R8)            INCREMENT COUNTER               00017310
  1791.           LA        R7,RECPKT(R8)       PICK UP LOC OF CHAR COUNT       00017320
  1792.           CLC       RSOH,0(R7)          IS IT START OF HEADER?          00017330
  1793.           BE        READIN              START OVER                      00017340
  1794.           CLC       0(1,R7),DQUOTE      COUNT+' '+3 AND ^d35            00017350
  1795.           BNL       CONT                CONTINUE IF >=                  00017360
  1796.           MVI       ERRNUM,X'04'        BAD LENGTH ATTRIBUTE            00017370
  1797.           B         BADP                                                00017380
  1798.  CONT     IC        R5,0(R7)            START CHECKSUM                  00017390
  1799.           LR        R7,R5               MUNGE IN R7 TO GET LRDAT        00017400
  1800.           S         R7,=F'35'           LENGTH OF DATA                  00017410
  1801.           STC       R7,LRDAT+3                                          00017420
  1802.           LA        R8,1(R8)            INCREMENT                       00017430
  1803.           SR        R7,R7               ZERO IT OUT                     00017440
  1804.           IC        R7,RECPKT(R8)       PICK UP PACKET NUMBER           00017450
  1805.           CLM       R7,B'0001',RSOH     IS IT START OF HEADER           00017460
  1806.           BE        READIN                                              00017470
  1807.           AR        R5,R7               ADD TO CHECKSUM                 00017480
  1808.           S         R7,SPACE            SUBTRACT THE ' '                00017490
  1809.           STC       R7,NUM+3            NUM := RECEIVED PACKET NO.      00017500
  1810.           LA        R8,1(R8)            INCREMENT COUNTER               00017510
  1811.           IC        R7,RECPKT(R8)       PICK UP MESSAGE TYPE            00017520
  1812.           CLM       R7,B'0001',RSOH     IS IT START OF HEADER?          00017530
  1813.           BE        READIN                                              00017540
  1814.           AR        R5,R7               ADD TO CHECKSUM                 00017550
  1815.           STC       R7,RTYPE            PUT INTO RTYPE                  00017560
  1816.           LA        R8,1(R8)            GO TO NEXT BYTE                 00017570
  1817.           L         R4,LRDAT            COUNTER TO GET ALL DATA         00017580
  1818.  LUP      C         R4,ZERO             SEE IF PICKED UP ALL DATA       00017590
  1819.           BE        FIN                                                 00017600
  1820.           XC        TEMP,TEMP           ZERO IT OUT                     00017610
  1821.           LA        R7,RECPKT(R8)       NEXT LOCATION IN BUFFER         00017620
  1822.           MVC       TEMP+3(1),0(R7)     PICK UP NEXT BYTE               00017630
  1823.           CLC       RSOH,TEMP+3         IS IT START OF HEADER           00017640
  1824.           BE        READIN                                              00017650
  1825.           LA        R7,RDAT(R9)         WHERE THE DATA'S GOING          00017660
  1826.           MVC       0(1,R7),TEMP+3      AND MOVE IT                     00017670
  1827.           A         R5,TEMP             ADD TO CHECKSUM                 00017680
  1828.           LA        R8,1(R8)            ADD ONE                         00017690
  1829.           LA        R9,1(R9)            ADD ONE                         00017700
  1830.           BCTR      R4,0                DECREMENT COUNTER               00017710
  1831.           B         LUP                                                 00017720
  1832.  FIN      SR        R7,R7               ZERO OUT REGISTER               00017730
  1833.           IC        R7,RECPKT(R8)       GET CHECKSUM                    00017740
  1834.           CLM       R7,B'0001',RSOH     IS IT START OF HEADER           00017750
  1835.           BE        READIN                                              00017760
  1836.           ST        R5,TEMP             WE'LL NEED THIS SOON            00017770
  1837.           N         R5,=X'000000C0'     GET MOD 192                     00017780
  1838.           M         R4,ONE              CARRY OVER THE SIGN BIT         00017790
  1839.           D         R4,O1H              GET MOD 64                      00017800
  1840.           A         R5,TEMP             ADD THE TWO VALUES              00017810
  1841.           N         R5,=X'0000003F'     GET MOD 64                      00017820
  1842.           A         R5,SPACE            ADD OFFSET                      00017830
  1843.           CR        R5,R7               COMPUTED VS RECEIVED CHECKSUM   00017840
  1844.           BE        RPRET                                               00017850
  1845.           TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN                    00017860
  1846.           BZ        NODEBG2                                             00017870
  1847.           MVC       WRKBUFF(2),=H'18'                                   00017880
  1848.           XC        WRKBUFF+2(2),WRKBUFF+2                              00017890
  1849.           MVC       WRKBUFF+4(14),=CL14'CHECKSUM ERROR'                 00017900
  1850.           PUT       DEBUG,WRKBUFF                                       00017910
  1851.  NODEBG2  MVI       ERRNUM,X'05'        BAD CHECKSUM ERROR              00017920
  1852.  BADP     MVI       RTYPE,AN            RETURN A NAK                    00017930
  1853.           OI        FLAGS,FLG4          RPACK NAK'ED THE PACKET         00017940
  1854.  RPRET    L         R13,4(R13)                                          00017950
  1855.           L         R14,12(R13)                                         00017960
  1856.           LM        R0,R12,20(R13)                                      00017970
  1857.           BR        14                                                  00017980
  1858.  DBGMVC2  MVC       WRKBUFF+4(*-*),RECPKT                               00017990
  1859.  RPSAVE   DS        18F                                                 00018000
  1860.           LTORG                                                         00018010
  1861.           DROP      R11                                                 00018020
  1862.           DROP      R12                 DON'T NEED THEM ANYMORE         00018030
  1863.           EJECT                                                         00018040
  1864.  ********************************************************************** 00018050
  1865.  *                                                                    * 00018060
  1866.  *  DISK FILE READ ROUTE WITH DEBUGGING CODE                          * 00018070
  1867.  *                                                                    * 00018080
  1868.  ********************************************************************** 00018090
  1869.  READX    DS        0H                                                  00018100
  1870.           USING     PARMS,R11           ESTABLISH ADDRESSABILITY        00018110
  1871.           STM       R12,R15,READSAVE                                    00018120
  1872.           BALR      R12,0                                               00018130
  1873.           USING     *,R12                                               00018140
  1874.           TM        KERIN+(DCBRECFM-IHADCB),DCBRECV  VARIABLE?          00018150
  1875.           BO        RDVAR                                               00018160
  1876.           GET       KERIN,BUF                                           00018170
  1877.           B         RDTSTDB                                             00018180
  1878.  RDVAR    GET       KERIN,BUF-4                                         00018190
  1879.  RDTSTDB  TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN  IS IT OPEN?       00018200
  1880.           BZ        RDNODBG                                             00018210
  1881.           MVC       WRKBUFF(2),=H'12'                                   00018220
  1882.           XC        WRKBUFF+2(2),WRKBUFF+2                              00018230
  1883.           MVC       WRKBUFF+4(8),=CL8'QSAM GET'                         00018240
  1884.           PUT       DEBUG,WRKBUFF                                       00018250
  1885.           LH        R1,KERIN+(DCBLRECL-IHADCB)                          00018260
  1886.           STH       R1,WRKBUFF                                          00018270
  1887.           EX        R1,DBGMVC3                                          00018280
  1888.           PUT       DEBUG,WRKBUFF                                       00018290
  1889.  RDNODBG  XR        R1,R1               SET RETURN CODE                 00018300
  1890.           LH        R0,KERIN+(DCBLRECL-IHADCB)  GET RECORD LENGTH       00018310
  1891.           TM        KERIN+(DCBRECFM-IHADCB),DCBRECV  VARIABLE?          00018320
  1892.           BZ        *+12                NO, THEN SKIP                   00018330
  1893.           LH        R0,BUF-4            GET LENGTH FROM RDW             00018340
  1894.           SH        R0,=H'4'            REMOVE RDW LENGTH               00018350
  1895.           LM        R12,R15,READSAVE                                    00018360
  1896.           BR        R15                                                 00018370
  1897.  DBGMVC3  MVC       WRKBUFF+4(*-*),KERIN                                00018380
  1898.  *                                                                      00018390
  1899.  INEOF    DS        0H                                                  00018400
  1900.           LA        R1,12                                               00018410
  1901.           XR        R0,R0                                               00018420
  1902.           LM        R12,R15,READSAVE                                    00018430
  1903.           BR        R15                                                 00018440
  1904.           LTORG                                                         00018450
  1905.           DROP      R11                                                 00018460
  1906.           DROP      R12                                                 00018470
  1907.           EJECT                                                         00018480
  1908.  ********************************************************************** 00018490
  1909.  *                                                                    * 00018500
  1910.  *        ROUTINE TO PROCESS RECEIVE COMMAND                          * 00018510
  1911.  *                                                                    * 00018520
  1912.  ********************************************************************** 00018530
  1913.  RECEIVE  DS        0H                                                  00018540
  1914.           STM       R14,R12,12(R13)     SAVE CALLER'S REGISTERS         00018550
  1915.           BALR      R12,0               ESTABLISH ADDRESSABILITY        00018560
  1916.           USING     *,R12                                               00018570
  1917.           LA        R14,RECSAVE         ADDRESS OF MY SAVE AREA         00018580
  1918.           ST        R13,4(R14)          SAVE CALLER'S                   00018590
  1919.           ST        R14,8(R13)                                          00018600
  1920.           LR        R13,R14                                             00018610
  1921.  * USE R11 AS BASE REGISTER FOR THE GLOBAL DATA AREA, 'PARMS'           00018620
  1922.           L         R11,=A(PARMS)                                       00018630
  1923.           USING     PARMS,R11                                           00018640
  1924.           SR        R6,R6               GET ZERO                        00018650
  1925.           ST        R6,NUMTRY           ZERO THIS OUT                   00018660
  1926.           ST        R6,N                HERE TOO                        00018670
  1927.           MVI       STATE,C'R'          SET TO RECEIVE STATE            00018680
  1928.  ********************************************************************** 00018690
  1929.  *        MAIN RECEIVE PROCESSING LOOP                                * 00018700
  1930.  ********************************************************************** 00018710
  1931.  RLOOP    CLI       STATE,C'D'          RECEIVE DATA STATE              00018720
  1932.           BE        RDATA                                               00018730
  1933.           CLI       STATE,C'F'          RECEIVE FILE STATE              00018740
  1934.           BE        RFILE                                               00018750
  1935.           CLI       STATE,C'R'          RECEIVE INIT STATE              00018760
  1936.           BE        RINIT                                               00018770
  1937.           CLI       STATE,C'C'          COMPLETE STATE                  00018780
  1938.           BE        RCOMP                                               00018790
  1939.           CLI       STATE,C'A'          ABORT STATE                     00018800
  1940.           BE        RABORT                                              00018810
  1941.           MVI       ERRNUM,X'02'        UNRECOGNIZED STATE              00018820
  1942.           B         RABORT              ELSE, DIE                       00018830
  1943.  ********************************************************************** 00018840
  1944.  *        PROCESS INITIALIZATION PACKET                               * 00018850
  1945.  ********************************************************************** 00018860
  1946.  RINIT    CLC       NUMTRY,IMXTRY       SEE IF CAN RECEIVE              00018870
  1947.           BL        ROK1                YES, WE CAN                     00018880
  1948.           MVI       STATE,C'A'          NOPE, GO INTO ABORT STATE       00018890
  1949.           B         RLOOP                                               00018900
  1950.  ROK1     L         R3,NUMTRY                                           00018910
  1951.           LA        R3,1(R3)            INCREMENT TRIAL COUNTER         00018920
  1952.           ST        R3,NUMTRY                                           00018930
  1953.           L         R4,DSSIZ            DEFAULT SEND PACKET SIZE        00018940
  1954.           S         R4,FIVE             USE DEFAULT TO SET "SIZE"       00018950
  1955.           ST        R4,SIZE             IN CASE WE DIE BEFORE IT'S SET  00018960
  1956.           L         R15,=A(RPACK)       GET INIT INFORMATION            00018970
  1957.           BALR      R14,R15                                             00018980
  1958.           CLI       RTYPE,AE            ERROR PACKET?                   00018990
  1959.           BNE       RY1                 ALL OK                          00019000
  1960.           MVI       ERRNUM,X'0A'        MICRO DIED                      00019010
  1961.           MVI       STATE,C'A'          SO WE DO TOO                    00019020
  1962.           B         RLOOP                                               00019030
  1963.  RY1      CLI       RTYPE,AS            IS IT A SEND-INIT PACKET        00019040
  1964.           BNE       RN1                 MAYBE IT GOT CLOBBERED          00019050
  1965.           SR        R4,R4               ZERO OUT REGISTER               00019060
  1966.           IC        R4,RDAT             GET FIRST CHARACTER             00019070
  1967.           S         R4,SPACE            SUBTRACT THE ' '                00019080
  1968.           C         R4,=F'26'           MIN SPACK SIZE                  00019090
  1969.           BNL       RCH1                SO FAR, SO GOOD                 00019100
  1970.           MVI       STATE,C'A'          ELSE, ABORT                     00019110
  1971.           MVI       ERRNUM,X'00'        INVALID DATA-PACKET-SIZE ERROR  00019120
  1972.           B         RLOOP                                               00019130
  1973.  RCH1     C         R4,MAXPACK          MAX PACKET SIZE                 00019140
  1974.           BNH       RCH2                                                00019150
  1975.           MVI       STATE,C'A'          ABORT IF SIZE IS ILLEGAL        00019160
  1976.           MVI       ERRNUM,X'00'        BAD SEND DATA LENGTH            00019170
  1977.           B         RLOOP                                               00019180
  1978.  RCH2     STC       R4,SPSIZ+3          USE THE VALUE AS SEND SIZE      00019190
  1979.           S         R4,FIVE                                             00019200
  1980.           ST        R4,SIZE             SET IT TO SPSIZ-5               00019210
  1981.           CLC       LRDAT(4),=F'4'      USING ALL DEFAULTS ?            00019220
  1982.           BNH       NOCH                YUP                             00019230
  1983.           LA        R5,RDAT             POINT TO THE BUFFER             00019240
  1984.           SR        R7,R7                                               00019250
  1985.           IC        R7,4(R5)            SEOL THE MICRO WANTS            00019260
  1986.           S         R7,SPACE            UNCHAR (SUBTRACT ' ')           00019270
  1987.           STC       R7,SEOL                                             00019280
  1988.           CLC       LRDAT(4),FIVE       ANY MORE DATA?                  00019290
  1989.           BNH       NOCH                JUST USE DEFAULTS               00019300
  1990.           MVC       RQUO(1),5(R5)       SET NEW QUOCHAR VALUE           00019310
  1991.  NOCH     MVC       N(4),NUM            SYNCH PACKET NUMBERS            00019320
  1992.           MVI       STYPE,AY            SET MESSAGE TYPE TO ACK         00019330
  1993.           MVC       LSDAT(4),=F'6'     SET LENGTH OF DATA SENDING       00019340
  1994.           L         R5,SPACE            MAKE CHARACTER PRINTABLE        00019350
  1995.           A         R5,RPSIZ            ADD REC PACKET SIZE             00019360
  1996.           STC       R5,SDAT             ADD SIZE INFO TO BUFFER         00019370
  1997.           L         R5,SPACE                                            00019380
  1998.           A         R5,=F'8'            8 FOR TIMEOUT                   00019390
  1999.           STC       R5,SDAT+1                                           00019400
  2000.           L         R5,SPACE            SEND ZERO + " " FOR NPAD        00019410
  2001.           STC       R5,SDAT+2           WE'RE THE SLOW GUYS             00019420
  2002.           SR        R5,R5               PAD WITH NULLS                  00019430
  2003.           L         R3,O1H                                              00019440
  2004.           XR        R5,R3               CTL FUNCTION (XOR WITH 64)      00019450
  2005.           STC       R5,SDAT+3           DON'T NEED PADCHAR EITHER       00019460
  2006.           SR        R5,R5               ZERO IT OUT FOR NEXT TWO GUYS   00019470
  2007.           IC        R5,REOL             EOL CHAR I NEED                 00019480
  2008.           A         R5,SPACE            MAKE PRINTABLE                  00019490
  2009.           STC       R5,SDAT+4                                           00019500
  2010.           IC        R5,QUOCHAR          MY QUOTE CHAR                   00019510
  2011.           STC       R5,SDAT+5                                           00019520
  2012.           L         R15,=A(SPACK)       ADDRESS OF SPACK                00019530
  2013.           BALR      R14,R15             SAVE * AND GO TO SPACK          00019540
  2014.           CLI       STATE,C'A'                                          00019550
  2015.           BE        RABORT                                              00019560
  2016.           MVI       STATE,C'F'          SET TO RECEIVE FILE STATE       00019570
  2017.           MVC       OLDTRY(4),NUMTRY    SAVE TRIAL COUNTER              00019580
  2018.           XC        NUMTRY,NUMTRY       RESET COUNTER TO ZERO           00019590
  2019.           L         R3,N                                                00019600
  2020.           LA        R3,1(R3)            ADD ONE                         00019610
  2021.           ST        R3,N                STORE VALUE INCREMENTED BY 1    00019620
  2022.           NC        N(4),=X'0000003F'   MASK TO GET MOD 64              00019630
  2023.           B         RLOOP                                               00019640
  2024.  RN1      CLI       RTYPE,AN            MAYBE IT'S A NAK                00019650
  2025.           BNE       RSELSE                                              00019660
  2026.           MVI       STYPE,AN            SEND A NAK PACKET               00019670
  2027.           XC        LSDAT,LSDAT         NO DATA                         00019680
  2028.           L         R15,=A(SPACK)                                       00019690
  2029.           BALR      R14,R15                                             00019700
  2030.           B         RLOOP                                               00019710
  2031.  RSELSE   MVI       STATE,C'A'          ELSE,ABORT                      00019720
  2032.           MVI       ERRNUM,X'07'        ILLEGAL PACKET TYPE             00019730
  2033.           B         RLOOP                                               00019740
  2034.  ********************************************************************** 00019750
  2035.  *        PROCESS FILE PACKET                                         * 00019760
  2036.  ********************************************************************** 00019770
  2037.  RFILE    CLC       NUMTRY,MAXTRY       EXCEEDED NO. OF TRIALS ALLOWED  00019780
  2038.           BL        ROK2                NOPE, STILL OK                  00019790
  2039.           MVI       STATE,C'A'          ABORT IF YES                    00019800
  2040.           B         RLOOP                                               00019810
  2041.  ROK2     L         R3,NUMTRY                                           00019820
  2042.           LA        R3,1(R3)            INCREMENT TRIAL COUNTER         00019830
  2043.           ST        R3,NUMTRY                                           00019840
  2044.           L         R15,=A(RPACK)       GET ADDRESS OF RPACK            00019850
  2045.           BALR      R14,R15             GO THERE AND RETURN WHEN DONE   00019860
  2046.           CLI       RTYPE,AE            ERROR PACKET?                   00019870
  2047.           BNE       RY2                 MAYBE AN ACK                    00019880
  2048.           MVI       ERRNUM,X'0A'        MICRO DIED                      00019890
  2049.           MVI       STATE,C'A'          SO WE DO TOO                    00019900
  2050.           B         RLOOP                                               00019910
  2051.  RY2      CLI       RTYPE,AS            STILL IN INIT STATE?            00019920
  2052.           BNE       RNZ                 TRY FOR AN EOF                  00019930
  2053.           CLC       OLDTRY,MAXTRY       CAN WE TRY AGAIN?               00019940
  2054.           BL        ROLD                                                00019950
  2055.           MVI       STATE,C'A'          ELSE, ABORT                     00019960
  2056.           B         RLOOP                                               00019970
  2057.  ROLD     L         R3,OLDTRY                                           00019980
  2058.           LA        R3,1(R3)            INCREMENT COUNTER               00019990
  2059.           ST        R3,OLDTRY                                           00020000
  2060.           L         R3,N                GET PACKET NUMBER SENT          00020010
  2061.           BCTR      R3,0                SUBTRACT ONE FROM IT            00020020
  2062.           C         R3,NUM              NUM MUST EQUAL N-1              00020030
  2063.           BE        RNUM                                                00020040
  2064.           MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING         00020050
  2065.           B         RNAK                SEND A NAK                      00020060
  2066.  RNUM     MVI       STYPE,AY            ACK PACKET                      00020070
  2067.           ST        R3,N                MAKE SEND SEQ NO. = N-1         00020080
  2068.           MVC       LSDAT(4),=F'6'     SET DATA LENGTH VARIABLE         00020090
  2069.           L         R15,=A(SPACK)                                       00020100
  2070.           BALR      R14,R15             GO TO SPACK AND RETURN          00020110
  2071.           CLI       STATE,C'A'                                          00020120
  2072.           BE        RABORT                                              00020130
  2073.           L         R4,N                                                00020140
  2074.           LA        R4,1(R4)            ADD ONE                         00020150
  2075.           ST        R4,N                RESTORE N TO PROPER VALUE       00020160
  2076.           XC        NUMTRY,NUMTRY       RESET COUNTER TO ZERO           00020170
  2077.           B         RLOOP                                               00020180
  2078.  RNZ      CLI       RTYPE,AZ                                            00020190
  2079.           BNE       RNF                 MAYBE IT'S AN 'F'               00020200
  2080.           CLC       OLDTRY,MAXTRY       CAN WE TRY AGAIN?               00020210
  2081.           BL        ROLD2                                               00020220
  2082.           MVI       STATE,C'A'          ELSE,ABORT                      00020230
  2083.           B         RLOOP                                               00020240
  2084.  ROLD2    L         R3,OLDTRY                                           00020250
  2085.           LA        R3,1(R3)            INCREMENT COUNTER               00020260
  2086.           ST        R3,OLDTRY                                           00020270
  2087.           L         R3,N                GET PACKET NUMBER SENT          00020280
  2088.           BCTR      R3,0                SUBTRACT ONE FROM IT            00020290
  2089.           C         R3,NUM              NUM MUST EQUAL N-1              00020300
  2090.           BE        RNUM2                                               00020310
  2091.           MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING         00020320
  2092.           B         RNAK                SEND A NAK                      00020330
  2093.  RNUM2    MVI       STYPE,AY            ACK PACKET                      00020340
  2094.           ST        R3,N                SEND SEQ := N-1                 00020350
  2095.           XC        LSDAT,LSDAT         NO DATA                         00020360
  2096.           L         R15,=A(SPACK)                                       00020370
  2097.           BALR      R14,R15                                             00020380
  2098.           CLI       STATE,C'A'                                          00020390
  2099.           BE        RABORT                                              00020400
  2100.           L         R4,N                                                00020410
  2101.           LA        R4,1(R4)            ADD ONE                         00020420
  2102.           ST        R4,N                RESTORE N TO PROPER VALUE       00020430
  2103.           XC        NUMTRY,NUMTRY       RESET COUNTER TO ZERO           00020440
  2104.           B         RLOOP                                               00020450
  2105.  RNF      CLI       RTYPE,AF                                            00020460
  2106.           BNE       RNB                 WELL, IT'S NOT A FNAME          00020470
  2107.           CLC       NUM,N               THEY HAVE TO BE EQUAL           00020480
  2108.           BE        RNUM3                                               00020490
  2109.           MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING         00020500
  2110.           B         RNAK                SEND A NAK                      00020510
  2111.  RNUM3    MVI       STYPE,AY            ACK PACKET                      00020520
  2112.           XC        LSDAT,LSDAT         NO DATA                         00020530
  2113.  OVER     L         R15,=A(SPACK)                                       00020540
  2114.           BALR      R14,R15             SEND ACK                        00020550
  2115.           CLI       STATE,C'A'                                          00020560
  2116.           BE        RABORT                                              00020570
  2117.           MVC       OLDTRY(4),NUMTRY    KEEP NUMTRY FOR LATER           00020580
  2118.           XC        NUMTRY,NUMTRY       RESET TO ZERO                   00020590
  2119.           L         R3,N                                                00020600
  2120.           LA        R3,1(R3)            ADD ONE                         00020610
  2121.           ST        R3,N                INCREMENT COUNTER               00020620
  2122.           NC        N(4),=X'0000003F'   MASK TO GET MOD 64              00020630
  2123.           MVI       STATE,C'D'          DATA RECEIVE STATE              00020640
  2124.           B         RLOOP                                               00020650
  2125.  RNB      CLI       RTYPE,AB            SEE IF IT'S A BREAK             00020660
  2126.           BNE       RNN                 MAYBE GOT A NAK                 00020670
  2127.           CLC       NUM,N                                               00020680
  2128.           BE        RNUM4                                               00020690
  2129.           MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING         00020700
  2130.           B         RNAK                SEND A NAK                      00020710
  2131.  RNUM4    MVI       STYPE,AY            ACK PACKET                      00020720
  2132.           XC        LSDAT,LSDAT         NO DATA                         00020730
  2133.           L         R15,=A(SPACK)                                       00020740
  2134.           BALR      R14,R15                                             00020750
  2135.           CLI       STATE,C'A'                                          00020760
  2136.           BE        RABORT                                              00020770
  2137.           MVI       STATE,C'C'          COMPLETE STATE                  00020780
  2138.           B         RLOOP                                               00020790
  2139.  RNN      CLI       RTYPE,AN            SEE IF GOT A NAK                00020800
  2140.           BNE       RNELSE                                              00020810
  2141.  RNAK     MVI       STYPE,AN            SEND A NAK PACKET               00020820
  2142.           XC        LSDAT,LSDAT         NO DATA                         00020830
  2143.           L         R15,=A(SPACK)                                       00020840
  2144.           BALR      R14,R15                                             00020850
  2145.           B         RLOOP               DO NOTHING ON A NAK             00020860
  2146.  RNELSE   MVI       STATE,C'A'          ABORT OTHERWISE                 00020870
  2147.           MVI       ERRNUM,X'07'        ILLEGAL PACKET TYPE             00020880
  2148.           B         RLOOP                                               00020890
  2149.  ********************************************************************** 00020900
  2150.  *        RECEIVE DATA PACKETS                                        * 00020910
  2151.  ********************************************************************** 00020920
  2152.  RDATA    CLC       NUMTRY,MAXTRY       HAVE WE EXCEEDED OUR LIMIT?     00020930
  2153.           BL        ROK3                                                00020940
  2154.           MVI       STATE,C'A'          ELSE, ABORT                     00020950
  2155.           B         RLOOP                                               00020960
  2156.  ROK3     L         R4,NUMTRY                                           00020970
  2157.           LA        R4,1(R4)            INCREMENT                       00020980
  2158.           ST        R4,NUMTRY           SAVE INCREMENTED COUNTER        00020990
  2159.           L         R15,=A(RPACK)                                       00021000
  2160.           BALR      R14,R15             CALL RPACK                      00021010
  2161.           CLI       RTYPE,AE            ERROR PACKET?                   00021020
  2162.           BNE       RY3                 MAYBE AN ACK                    00021030
  2163.           MVI       ERRNUM,X'0A'        MICRO DIED                      00021040
  2164.           MVI       STATE,C'A'          WE ABORT TOO                    00021050
  2165.           B         RLOOP                                               00021060
  2166.  RY3      CLI       RTYPE,AD            IS THIS A DATA PACKET?          00021070
  2167.           BNE       RDF                 MAYBE IT'S AN FNAME PACKET      00021080
  2168.           CLC       N,NUM               CHECK FOR RIGHT PACKET          00021090
  2169.           BNE       DIF                                                 00021100
  2170.           L         R15,=A(PTCHR)                                       00021110
  2171.           BALR      R14,R15             PUT CHARACTERS INTO FILE        00021120
  2172.           LTR       R7,R7               CHECK FOR NO ERROR              00021130
  2173.           BZ        OKWR                NO ERROR                        00021140
  2174.           MVI       STATE,C'A'          ABORT ON FILE SYSTEM ERROR      00021150
  2175.           B         RLOOP                                               00021160
  2176.  OKWR     MVI       STYPE,AY            ACK PACKET                      00021170
  2177.           XC        LSDAT,LSDAT         NO DATA                         00021180
  2178.           L         R15,=A(SPACK)                                       00021190
  2179.           BALR      R14,R15                                             00021200
  2180.           CLI       STATE,C'A'                                          00021210
  2181.           BE        RABORT                                              00021220
  2182.           MVC       OLDTRY(4),NUMTRY    SAVE NUMTRY'S VALUE IN OLDTRY   00021230
  2183.           XC        NUMTRY,NUMTRY       RESET NUMTRY                    00021240
  2184.           L         R3,N                                                00021250
  2185.           LA        R3,1(R3)                                            00021260
  2186.           ST        R3,N                INCREMENT COUNTER               00021270
  2187.           NC        N(4),=X'0000003F'   MASK TO GET MOD 64              00021280
  2188.           B         RLOOP                                               00021290
  2189.  DIF      CLC       OLDTRY,MAXTRY       CAN WE DO IT?                   00021300
  2190.           BL        DIFNUM                                              00021310
  2191.           MVI       STATE,C'A'          AND ABORT                       00021320
  2192.           B         RLOOP                                               00021330
  2193.  DIFNUM   L         R4,OLDTRY                                           00021340
  2194.           LA        R4,1(R4)                                            00021350
  2195.           ST        R4,OLDTRY           INCREMENT THIS COUNTER          00021360
  2196.           L         R4,N                                                00021370
  2197.           BCTR      R4,0                                                00021380
  2198.           C         R4,NUM              NUM MUST EQUAL N-1              00021390
  2199.           BE        DIFOK                                               00021400
  2200.           MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING         00021410
  2201.           B         RDN1                SEND A NAK                      00021420
  2202.  DIFOK    XC        NUMTRY,NUMTRY       RESET COUNTER TO ZERO           00021430
  2203.           MVI       STYPE,AY            ACK PACKET                      00021440
  2204.           XC        LSDAT,LSDAT         NO DATA                         00021450
  2205.           ST        R4,N                SET N TO N-1 TO RESEND PACKET   00021460
  2206.           L         R15,=A(SPACK)                                       00021470
  2207.           BALR      R14,R15             SEND THE PACKET                 00021480
  2208.           CLI       STATE,C'A'                                          00021490
  2209.           BE        RABORT                                              00021500
  2210.           L         R4,N                                                00021510
  2211.           LA        R4,1(R4)            ADD ONE                         00021520
  2212.           ST        R4,N                RESTORE N TO PROPER VALUE       00021530
  2213.           B         RLOOP               AND RETURN                      00021540
  2214.  RDF      CLI       RTYPE,AF            SENDING FILENAME AGAIN?         00021550
  2215.           BNE       RDZ                                                 00021560
  2216.           CLC       OLDTRY,MAXTRY       CAN WE DO IT?                   00021570
  2217.           BL        FILOVER             TRYING IT AGAIN                 00021580
  2218.           MVI       STATE,C'A'          IF NO, ABORT                    00021590
  2219.           B         RLOOP                                               00021600
  2220.  FILOVER  L         R4,OLDTRY                                           00021610
  2221.           LA        R4,1(R4)                                            00021620
  2222.           ST        R4,OLDTRY           SAVE INCREMENTED VALUE          00021630
  2223.           L         R4,N                                                00021640
  2224.           BCTR      R4,0                NEED VALUE OF N-1               00021650
  2225.           C         R4,NUM              N-1 MUST EQUAL NUM              00021660
  2226.           BE        FILOK                                               00021670
  2227.           MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING         00021680
  2228.           B         RDN1                SEND A NAK                      00021690
  2229.  FILOK    XC        NUMTRY,NUMTRY       RESET TO ZERO                   00021700
  2230.           XC        LSDAT,LSDAT         NO DATA                         00021710
  2231.           MVI       STYPE,AY            ACK PACKET AGAIN                00021720
  2232.           ST        R4,N                SET N TO N-1 FOR NOW            00021730
  2233.  OVRWRT   L         R15,=A(SPACK)                                       00021740
  2234.           BALR      R14,R15                                             00021750
  2235.           CLI       STATE,C'A'                                          00021760
  2236.           BE        RABORT                                              00021770
  2237.           L         R4,N                                                00021780
  2238.           LA        R4,1(R4)            ADD ONE                         00021790
  2239.           ST        R4,N                RESTORE N TO PROPER VALUE       00021800
  2240.           B         RLOOP               AND RETURN                      00021810
  2241.  RDZ      CLI       RTYPE,AZ            IS THIS AN EOF PACKET?          00021820
  2242.           BNE       RDN                                                 00021830
  2243.           CLC       N,NUM               ARE THEY EQUAL                  00021840
  2244.           BE        RDOK                                                00021850
  2245.           MVI       ERRNUM,X'08'        PREVIOUS PACKET MISSING         00021860
  2246.           B         RDN1                SEND A NAK                      00021870
  2247.  RDOK     MVI       STYPE,AY            ACK THE PACKET                  00021880
  2248.           XC        LSDAT,LSDAT         NO DATA                         00021890
  2249.           L         R15,=A(SPACK)                                       00021900
  2250.           BALR      R14,R15                                             00021910
  2251.           MVC       OLDTRY(4),NUMTRY    SAVE NUMTRY'S VALUE HERE        00021920
  2252.           XC        NUMTRY,NUMTRY       AND RESET COUNTER               00021930
  2253.           L         R3,N                                                00021940
  2254.           LA        R3,1(R3)                                            00021950
  2255.           ST        R3,N                STORE VALUE INCREMENTED BY 1    00021960
  2256.           NC        N(4),=X'0000003F'   MASK TO GET MOD 64              00021970
  2257.           MVI       STATE,C'F'          TRY FOR ANOTHER FILE            00021980
  2258.           B         RLOOP                                               00021990
  2259.  RDN      CLI       RTYPE,AN            DO WE NEED TO SEND A NAK?       00022000
  2260.           BNE       RDELSE                                              00022010
  2261.  RDN1     MVI       STYPE,AN            SEND A NAK                      00022020
  2262.           XC        LSDAT,LSDAT         NO DATA                         00022030
  2263.           L         R15,=A(SPACK)                                       00022040
  2264.           BALR      R14,R15                                             00022050
  2265.           B         RLOOP                                               00022060
  2266.  RDELSE   MVI       STATE,C'A'          UNRECOGNIZED PACKET - ABORT     00022070
  2267.           MVI       ERRNUM,X'07'        ILLEGAL PACKET TYPE             00022080
  2268.           B         RLOOP                                               00022090
  2269.  SAYNO    MVI       STYPE,AN            SEND A NAK PACKET               00022100
  2270.           XC        LSDAT,LSDAT         NO DATA                         00022110
  2271.           MVI       ERRNUM,X'0B'        ILLEGAL FILENAME ERROR          00022120
  2272.           L         R15,=A(SPACK)                                       00022130
  2273.           BALR      R14,R15                                             00022140
  2274.           B         RLOOP                                               00022150
  2275.  ********************************************************************** 00022160
  2276.  *        RECEIVE ABORT PROCESS                                       * 00022170
  2277.  ********************************************************************** 00022180
  2278.  RABORT   DS        0H                                                  00022190
  2279.           CLI       ERRNUM,X'0A'        DID THE MICRO DIE?              00022200
  2280.           BE        RNOERRP             NO ERROR PACKET IF SO           00022210
  2281.           MVI       STYPE,AE            ERROR PACKET                    00022220
  2282.           MVC       LSDAT(4),=F'20'     ALL MSGS ARE THIS LONG          00022230
  2283.           MVC       N(4),NUM            SYNCH PACKET NUMBERS            00022240
  2284.           SR        R5,R5                                               00022250
  2285.           IC        R5,ERRNUM                                           00022260
  2286.           M         R4,=F'20'           OFFSET := ERRNUM * 20           00022270
  2287.           LA        R5,ERRTAB(R5)                                       00022280
  2288.           MVC       SDAT(20),0(R5)      SPACK NEEDS THE DATA HERE       00022290
  2289.           TR        SDAT(20),ETOA                                       00022300
  2290.           L         R15,=A(SPACK)                                       00022310
  2291.           BALR      R14,R15             SEND ERROR PACKET & DIE         00022320
  2292.  RNOERRP  LA        R15,4               SET A NON-ZERO RETCODE          00022330
  2293.           B         RECRET              PREPARE TO LEAVE                00022340
  2294.  ********************************************************************** 00022350
  2295.  *        RECEIVE COMPLETE PROCESS                                    * 00022360
  2296.  ********************************************************************** 00022370
  2297.  RCOMP    SR        R15,R15             RETCODE OF ZERO                 00022380
  2298.  RECRET   L         R13,4(R13)                                          00022390
  2299.           L         R14,12(R13)                                         00022400
  2300.           LM        R0,R12,20(R13)                                      00022410
  2301.           BR        14                                                  00022420
  2302.           EJECT                                                         00022430
  2303.  ********************************************************************** 00022440
  2304.  *                                                                    * 00022450
  2305.  *  ROUTINE TO PUT A CHARACTER IN OUTPUT BUFFER AND DUMP WHEN FULL    * 00022460
  2306.  *                                                                    * 00022470
  2307.  ********************************************************************** 00022480
  2308.  PTCHR    SR        R4,R4               USE TO HOLD QUOCHAR             00022490
  2309.           SR        R6,R6               USE TO HOLD LRECL               00022500
  2310.           SR        R8,R8               COUNTER WITHIN RDAT             00022510
  2311.           L         R9,RSAVPL           COUNTER WITHIN RBUF             00022520
  2312.           IC        R4,RQUO                                             00022530
  2313.           IC        R6,LRECL                                            00022540
  2314.           L         R5,LRDAT            COUNTER TO GET ALL DATA         00022550
  2315.  RLUP     SR        R7,R7               USE TO PICK UP CHAR             00022560
  2316.           LTR       R5,R5               MORE DATA LEFT?                 00022570
  2317.           BNZ       MOR                 LEAVE IF ALL DONE               00022580
  2318.           CLI       PREV,X'4D'          ARE WE IN MIDDLE OF LINE?       00022590
  2319.           BER       R14                 LEAVE IF NOT                    00022600
  2320.           ST        R9,RSAVPL           SAVE OUR PLACE                  00022610
  2321.           SR        R7,R7               ZERO RETCODE                    00022620
  2322.           BR        R14                                                 00022630
  2323.  MOR      BCTR      R5,0                DECREMENT CHAR COUNTER          00022640
  2324.           IC        R7,RDAT(R8)         GET DATA FROM RDAT              00022650
  2325.           CR        R7,R4               IS IT THE QUOTE CHARACTER?      00022660
  2326.           BNE       REGULAR                                             00022670
  2327.           BCTR      R5,0                DECREMENT CHAR COUNT            00022680
  2328.           LA        R8,1(R8)            MOVE POINTER                    00022690
  2329.           IC        R7,RDAT(R8)         PICK UP SPECIAL CHAR            00022700
  2330.           C         R7,=X'0000004D'     IS IT A CR? (CHAR(CR))          00022710
  2331.           BNE       NOCR                WRITE OUT RECORD IF YES         00022720
  2332.           MVI       PREV,X'4D'          JUST HAD A CR                   00022730
  2333.           LA        R8,1(R8)            IGNORE CONTROL CHAR             00022740
  2334.           B         RFIN                                                00022750
  2335.  NOCR     C         R7,=X'0000004A'     HOW ABOUT A LF? (CHAR(LF))      00022760
  2336.           BNE       NOLF                IF YES, WRITE OUT RECORD        00022770
  2337.           LA        R8,1(R8)            IGNORE CONTROL CHAR             00022780
  2338.           CLI       PREV,X'4D'          WAS LAST THING CR?              00022790
  2339.           BNE       RFIN                NOPE, THEN KEEP ON              00022800
  2340.           B         RLUP                IGNORE LF IF PREV=CR            00022810
  2341.  NOLF     CR        R7,R4               IS IT THE QUOCHAR               00022820
  2342.           BE        REGULAR             DON'T CONVERT IF IT IS          00022830
  2343.           A         R7,O1H              ADD ^O100                       00022840
  2344.           N         R7,=X'0000007F'     GET MOD ^O200                   00022850
  2345.  REGULAR  STC       R7,RBUF(R9)         STORE CHAR IN RBUF              00022860
  2346.           LA        R9,1(R9)            MOVE RBUF COUNTER               00022870
  2347.           LA        R8,1(R8)            MOVE RDAT COUNTER               00022880
  2348.           MVI       PREV,X'00'          BLANK OUT CR IF WAS THERE       00022890
  2349.           C         R9,=F'255'          ONLY 256 CHARS ALLOWED          00022900
  2350.           BNH       RLUP                AND CONTINUE                    00022910
  2351.           LR        R10,R9              USE MAX LENGTH OF 256           00022920
  2352.           B         WRFIL               AND WRITE TO FILE               00022930
  2353.  RFIN     LTR       R10,R9              GET DATA SIZE                   00022940
  2354.           BZ        FUDGE               GOTTA FAKE A BLANK LINE         00022950
  2355.           C         R7,=X'0000004D'     IS IT A CR?  (CHAR(CR))         00022960
  2356.           BE        WRFIL                                               00022970
  2357.           C         R7,=X'0000004A'     HOW ABOUT A LF? (CHAR(LF))      00022980
  2358.           BE        WRFIL                                               00022990
  2359.           ST        R10,RSAVPL          SAVE DATA RECEIVED SO FAR       00023000
  2360.           SR        R7,R7               ZERO RETCODE                    00023010
  2361.           BR        14                                                  00023020
  2362.  FUDGE    MVI       RBUF,X'20'          MAKE FIRST CHAR A SPACE         00023030
  2363.           LA        R10,1(R10)          LENGTH OF ONE                   00023040
  2364.  WRFIL    XC        RSAVPL,RSAVPL       RESET THE POINTER               00023050
  2365.           TR        RBUF(256),ATOE      MAKE EBCDIC AGAIN               00023060
  2366.           CLI       RFM,C'V'            IS IT VARIABLE FORMAT?          00023070
  2367.           BE        VAR                                                 00023080
  2368.           CR        R10,R6                                              00023090
  2369.           BH        PUR                 IGNORE DATA AFTER LRECL VALUE   00023100
  2370.           CR        R10,R6              PAD OUT TO LRECL SIZE ?         00023110
  2371.           BE        VAR                 NOPE, IT'S OK.                  00023120
  2372.           LR        R2,R6               GET LRECL SIZE                  00023130
  2373.           SR        R2,R10              PAD WITH THIS MANY SPACES       00023140
  2374.           BCTR      R2,0                MINUS ONE FOR THE 'EX'          00023150
  2375.           LA        R9,RBUF(R10)        START PADDING HERE              00023160
  2376.           MVI       0(R9),C' '          PUT IN THE FIRST SPACE          00023170
  2377.           LTR       R2,R2                                               00023180
  2378.           BZ        PUR                 DON'T PAD IF SIZE DIF WAS ONE   00023190
  2379.           BCTR      R2,0                SUBRTRACT SPACE WE JUST ADDED   00023200
  2380.           EX        R2,PAD              PAD OUT BUFFER                  00023210
  2381.  PUR      LR        R10,R6              LENGTH HAS TO BE THIS SIZE      00023220
  2382.  VAR      DS        0H                                             RJR  00023230
  2383.           LA        R15,WRITEX                                          00023240
  2384.           BALR      R15,R15                                             00023250
  2385.           SR        R9,R9               START AT BEGINNING OF RBUF      00023260
  2386.           B         RLUP                GET NEXT LINE IF OK             00023270
  2387.  RECSAVE  DS        18F                                                 00023280
  2388.  PAD      MVC       1(0,R9),0(R9)       PAD OUT WITH SPACES             00023290
  2389.           LTORG                                                         00023300
  2390.  *                                                                      00023310
  2391.           EJECT                                                         00023320
  2392.  ********************************************************************** 00023330
  2393.  *                                                                    * 00023340
  2394.  *  DISK FILE WRITE ROUTE WITH DEBUGGING CODE                         * 00023350
  2395.  *                                                                    * 00023360
  2396.  ********************************************************************** 00023370
  2397.  WRITEX   DS        0H                                                  00023380
  2398.           USING     PARMS,R11                                           00023390
  2399.           STM       R12,R15,WRITSAVE                                    00023400
  2400.           BALR      R12,0                                               00023410
  2401.           USING     *,R12                                               00023420
  2402.           LA        R0,RBUF             POINT TO RBUF                   00023430
  2403.           TM        KEROUT+(DCBRECFM-IHADCB),DCBRECV VARIABLE?          00023440
  2404.           BZ        WRITEX2             NO, THEN DON'T ADJUST           00023450
  2405.           LA        R0,RBUF-4           POINT TO RDW                    00023460
  2406.           LR        R15,R10             GET THE LENGTH                  00023470
  2407.           AH        R15,=H'4'           INCLUDE LENGTH OF RDW           00023480
  2408.           SR        R1,R1                                               00023490
  2409.           STH       R1,RBUF-2           CLEAR RDW                       00023500
  2410.           IC        R1,LRECL            GET LRECL                       00023510
  2411.           CR        R15,R1              IS THE RECORD GT MAX LRECL?     00023520
  2412.           BNH       *+6                 NO, THEN IT'S OK                00023530
  2413.           LR        R15,R1              ELSE SET TO MAX                 00023540
  2414.           STH       R15,RBUF-4                                          00023550
  2415.  WRITEX2  DS        0H                                                  00023560
  2416.           PUT       KEROUT,(R0)                                         00023570
  2417.           TM        DEBUG+(DCBOFLGS-IHADCB),DCBOFOPN  IS IT OPEN?       00023580
  2418.           BZ        WRNODBG                                             00023590
  2419.           MVC       WRKBUFF(2),=H'12'                                   00023600
  2420.           XC        WRKBUFF+2(2),WRKBUFF+2                              00023610
  2421.           MVC       WRKBUFF+4(8),=CL8'QSAM PUT'                         00023620
  2422.           PUT       DEBUG,WRKBUFF                                       00023630
  2423.           EX        R10,DBGMVC4                                         00023640
  2424.           LA        R1,4(,R10)                                          00023650
  2425.           STH       R1,WRKBUFF                                          00023660
  2426.           PUT       DEBUG,WRKBUFF                                       00023670
  2427.  WRNODBG  LM        R12,R15,WRITSAVE                                    00023680
  2428.           BR        R15                                                 00023690
  2429.  DBGMVC4  MVC       WRKBUFF+4(*-*),RBUF                                 00023700
  2430.           DROP      R11                                                 00023710
  2431.           DROP      R12                                                 00023720
  2432.           LTORG                                                         00023730
  2433.           EJECT                                                         00023740
  2434.  ********************************************************************** 00023750
  2435.  *                                                                    * 00023760
  2436.  *        ROUTINE TO PARSE COMMANDS AND CREATE PARSE TABLE            * 00023770
  2437.  *                                                                    * 00023780
  2438.  ********************************************************************** 00023790
  2439.  PARSER   STM       R14,R12,12(R13)     SAVE REGISTERS                  00023800
  2440.           LR        R12,R15             MOVE THE BASE REGISTER          00023810
  2441.           USING     PARSER,R12          ##                              00023820
  2442.           L         R11,=A(PARMS)       GET ADDRESS OF WORKAREAS        00023830
  2443.           USING     PARMS,R11                                           00023840
  2444.           LR        R3,R0               R3 = TEXT LENGTH                00023850
  2445.           BCTR      R1,0                R1 ==> BYTE BEFORE PARM         00023860
  2446.           LA        R3,0(R1,R3)         R3 ==> END OF LINE              00023870
  2447.           LA        R2,1                R2 = PARSING INCREMENT          00023880
  2448.           LA        R5,PTRTBL           R5 ==> TARGET AREA              00023890
  2449.           LA        R6,4                R6 = POINTER INCREMENT          00023900
  2450.           STM       R5,R6,PARSELST      SAVE FOR PARSING                00023910
  2451.           LA        R7,PTRTBL+PTRTBLL-4 R7 ==> END OF TARGET            00023920
  2452.  *                                                                      00023930
  2453.  SCNTOKEN BXH       R1,R2,SCNFINIS      SCAN FOR PARM START             00023940
  2454.           CLI       0(R1),C' '          FOUND A BLANK?                  00023950
  2455.           LR        R9,R1               SAVE POINTER IF NOOP    GUCSL   00023960
  2456.           BE        SCNTOKEN            YES, THEN KEEP LOOKING          00023970
  2457.           ST        R1,0(,R5)           SAVE PTR TO OPERAND             00023980
  2458.           BXH       R5,R6,SCNFINIS      BR ON END OF TARGET AREA        00023990
  2459.  SCNLASTC BXH       R1,R2,SCNFINIS      SCAN TO END OF OPERAND          00024000
  2460.           CLI       0(R1),C' '          IS THIS BLANK AT END OF OPERAND 00024010
  2461.           BNE       SCNLASTC            IF SO, MOVE TOKEN               00024020
  2462.           LR        R9,R1               REMEMBER JUST AFTER OPERAND     00024030
  2463.           B         SCNTOKEN            FIND START OF NEXT OPERAND      00024040
  2464.  SCNFINIS MVI       0(R9),C' '          MARK THE END OF OPERANDS        00024050
  2465.           ST        R9,0(R5)            SAVE POINTER TO END             00024060
  2466.           ST        R5,PARSELST+8       SAVE END TARGET                 00024070
  2467.           LM        R14,R12,12(R13)     RESTORE THE REGISTERS           00024080
  2468.           BR        R14                 RETURN TO CALLER                00024090
  2469.           LTORG                                                         00024100
  2470.           DROP      R11                                                 00024110
  2471.           DROP      R12                 DON'T NEED THEM ANYMORE         00024120
  2472.           EJECT                                                         00024130
  2473.  PARMS    DS        0H                  GLOBAL DATA LIST                00024140
  2474.           USING PARMS,R11                                               00024150
  2475.  SNDPKT   DS        CL130               SEND THIS TO MICRO              00024160
  2476.           ORG       SNDPKT                                              00024170
  2477.  PHDR     DS        X                                                   00024180
  2478.  PLEN     DS        X                                                   00024190
  2479.  PNUM     DS        X                                                   00024200
  2480.  PTYPE    DS        X                                                   00024210
  2481.  PDATA    DS        0C                                                  00024220
  2482.           ORG       ,                                                   00024230
  2483.  RECPKT   DS        CL130               RECEIVE THIS FROM MICRO         00024240
  2484.  LSDAT    DS        F                   SEND PACKET SIZE                00024250
  2485.  LRDAT    DS        F                   RECEIVE PACKET SIZE             00024260
  2486.  FLAGS    DC        X'00'               USE TO TEST OUR FLAGS           00024270
  2487.  NAME     DC        18X'20'             NAME OF FILE(S) TO SEND         00024280
  2488.           DS        0F                                                  00024290
  2489.           DS        0F                                                  00024300
  2490.  INPUT    DS        CL130               INPUT BUFFER                    00024310
  2491.           DS        0F                                                  00024320
  2492.           DS        F                   RDW FOR VARIABLE RECORDS        00024330
  2493.  BUF      DS        CL260               DISK READ INTO HERE             00024340
  2494.           DS        F                   RDW FOR VARIABLE RECORDS        00024350
  2495.  RBUF     DS        CL260               DISK WRITE FROM HERE            00024360
  2496.  N        DC        F'0'                SEND PACKET NUMBER              00024370
  2497.  NUM      DC        F'0'                RECEIVE PACKET NUMBER           00024380
  2498.  NUMTRY   DC        F'0'                TRIAL COUNTER FOR TRANSFERS     00024390
  2499.  OLDTRY   DS        F                   COUNTER FOR PREVIOUS PACKET     00024400
  2500.  STORLOC  DS        F                   POINTER TO EXTRA STORAGE        00024410
  2501.  MAXPACK  DC        F'94'               MAX PACKET SIZE                 00024420
  2502.  RECL     DS        F                   RECORD LEN (IF RECFM = V)       00024430
  2503.  RPSIZ    DC        F'94'               MAX RECEIVE PACKET SIZE         00024440
  2504.  DSSIZ    DC        F'40'               DEFAULT MAX SEND PACKET SIZE    00024450
  2505.  SPSIZ    DS        F                   SEND PACKET SIZE                00024460
  2506.  MAXTRY   DC        F'5'                NO. OF TIMES TO RETRY PACKET    00024470
  2507.  IMXTRY   DC        F'16'               NO. OF INITIAL TRIALS ALLOWED   00024480
  2508.  SIZE     DS        F                   MAX SIZE FOR SEND DATA          00024490
  2509.  DEL      DC        F'127'              OCTAL 177 (DELETE CHAR)         00024500
  2510.  ZERO     DC        F'0'                                                00024510
  2511.  ONE      DC        F'1'                                                00024520
  2512.  FIVE     DC        F'5'                                                00024530
  2513.  TWO      DC        F'2'                                                00024540
  2514.  SPACE    DC        F'32'               ASCII SPACE                     00024550
  2515.  O1H      DC        F'64'               OCTAL 100                       00024560
  2516.  O2H      DC        F'128'              OCTAL 200                       00024570
  2517.  SAVPL    DC        F'0'                POINTER WITHIN BUF,INIT=0       00024580
  2518.  RSAVPL   DC        F'0'                POINTER IN 'PTCHR',INIT=0       00024590
  2519.  DQUOTE   DC        X'23'               DEFAULT QUOTE CHARACTER = #     00024600
  2520.  QUOCHAR  DS        X                   QOUTE CHAR WE'LL SEND           00024610
  2521.  RQUO     DS        X                   MICRO'S QUOTE CHAR              00024620
  2522.  TEMP     DS        F                   TEMPORARY SPACE                 00024630
  2523.           DS        0D                                                  00024640
  2524.  PKVAR    DS        D                   USE FOR PICKING UP INTEGER      00024650
  2525.  SDAT     DS        CL130               TEMP PLACE FOR SEND DATA        00024660
  2526.  RDAT     DS        CL130               TEMP PLACE FOR RECEIVE DATA     00024670
  2527.  FILNAML  DS    H                   LENGTH OF FILENAME                  00024680
  2528.  FILNAM   DS        CL18                SEND/REC FILENAME               00024690
  2529.  STATE    DS        C                   OUR CURRENT STATE               00024700
  2530.  DEOL     DC        X'0D'               DEFAULT END OF PACKET (CR)      00024710
  2531.  REOL     DS        X                   EOL CHAR I NEED (CR)            00024720
  2532.  SEOL     DS        X                   EOL I'LL SEND                   00024730
  2533.  DSOH     DC        X'01'               DEFAULT START OF HEADER (CTL A) 00024740
  2534.  RSOH     DS        X                   RECEIVE START OF HEADER         00024750
  2535.  SSOH     DS        X                   SEND START OF HEADER            00024760
  2536.  DLRECL   DC        X'50'               DEFAULT LRECL SIZE OF 80        00024770
  2537.  LRECL    DS        X                   LRECL PROGRAM WILL USE          00024780
  2538.  DBLKSIZE DC        H'3600'             DEFAULT BLKSIZE OF 3600         00024790
  2539.  BLKSIZE  DS        H                   BLKSIZE PROGRAM WILL USE        00024800
  2540.  DTRACK   DC        F'5'                DEFAULT SPACE ALLOCATION        00024810
  2541.  DRECFM   DC        C'F'                DEFAULT WITH FIXED RECFM        00024820
  2542.  RFM      DS        C                   RECFM PROGRAM WILL USE          00024830
  2543.  PREV     DS        C                   PREVIOUS CHAR REC (IN PTCHR)    00024840
  2544.  BLIP     DS        X                   SAVE USER'S BLIP CHAR           00024850
  2545.  LINSIZ   DS        F                   SAVE USER'S CONSOLE LINESIZE    00024860
  2546.  ERRNUM   DS        X                   ERROR NUMBER,IN CASE WE DIE     00024870
  2547.  OLDERR   DS        X                   ERROR OF PREVIOUS EXECUTION     00024880
  2548.  STYPE    DS        C                   TYPE OF PACKET SENT             00024890
  2549.  RTYPE    DS        C                   TYPE OF PACKET RECEIVED         00024900
  2550.  *                                                                      00024910
  2551.  READSAVE DS        4F                                                  00024920
  2552.  WRITSAVE DS        4F                                                  00024930
  2553.  PARSELST DS        3F                  PTRS TO OPERAND STACK           00024940
  2554.  PTRTBL   DS        15F                 OPERAND STACK                   00024950
  2555.  PTRTBLL  EQU       *-PTRTBL            LENGTH OF PTRTBL                00024960
  2556.  DBLWRK   DS        D                                                   00024970
  2557.  IDSYS    DC        F'2'                MVS TSO                         00024980
  2558.  DDNAME   DC        CL8' '              DDNAME TO ALLOCATE              00024990
  2559.  DSNAME   DC        CL80' '             DSNAME TO ALLOCATE              00025000
  2560.  DSNAMEX  DC        CL80' '             WRKBUFFER                       00025010
  2561.  MEMBER   DC        CL8' '              MEMBER NAME FOR PDS ALLOC       00025020
  2562.  CMSXXX   DC        CL8' '              USED IN CMS ONLY                00025030
  2563.  CMSYYY   DC        CL8' '                                              00025040
  2564.  CMSZZZ   DC        CL2' '                                              00025050
  2565.  DISP1    DC        F'2'                DISP (0=NEW,1=OLD,2=SHR)        00025060
  2566.  DISP2    DC        F'3'                DISP (0=UNCAT,1=CAT,3=KEEP)     00025070
  2567.  INOUT    DC        F'2'                0=INPUT,1=OUTPUT,2=INOUT)       00025080
  2568.  RECFMX   DC        F'1'                1=FB,2=VBS                      00025090
  2569.  BLKSIZEX DC        F'3600'             FOR NEW DATA SETS ONLY          00025100
  2570.  LRECLX   DC        F'80'               ....                            00025110
  2571.  DEV      DC        CL8'SYSDA'          DEVICE FOR RECEIVE              00025120
  2572.  SENDDEV  DC        CL8'SYSDA'          DEVICE FOR SEND COMMAND     *GUC00025121
  2573.  TRACK    DC        F'20'               # TRACKS TO ALLOC FOR NEW DSETS 00025130
  2574.  DYNALCRC DC        F'0'                RETURN CODE FROM FUNCTION       00025140
  2575.  WRKBUFF  DS        CL280                                               00025150
  2576.  PREFIX   DC        CL8' '              USERS DSET PREFIX FROM UPT      00025160
  2577.  PREFIXL  DC        F'0'                PREFIX LENGTH-1                 00025170
  2578.  DDELAY   DC        F'2000'             DEFAULT DELAY TIME              00025180
  2579.  DELAY    DS        F                   DELAY TIME                      00025190
  2580.  *                                                                      00025200
  2581.  *  THIS IS THE DYNALC PARM LIST USED FOR BOTH ALLOCATION AND           00025210
  2582.  *  CREATION OF  DATA SETS.                                             00025220
  2583.  *                                                                      00025230
  2584.  DYNAPARM DS 0F                                                         00025240
  2585.   DC A(IDSYS,DDNAME,DSNAME,MEMBER,CMSXXX,CMSYYY,CMSZZZ,DISP1,DISP2)     00025250
  2586.   DC A(INOUT,RECFMX,BLKSIZEX,LRECLX,DEV,TRACK)                          00025260
  2587.   DC X'80',AL3(DYNALCRC)                                                00025270
  2588.  *                                                                      00025280
  2589.  * TABLE TO TRANSLATE TO UPPER CASE                                     00025290
  2590.  *                                                                      00025300
  2591.  UPPER    DC    256AL1(*-UPPER)                                         00025310
  2592.           ORG   UPPER+X'81'                                             00025320
  2593.           DC    C'ABCDEFGHI'                                            00025330
  2594.           ORG   UPPER+X'91'                                             00025340
  2595.           DC    C'JKLMNOPQR'                                            00025350
  2596.           ORG   UPPER+X'A2'                                             00025360
  2597.           DC    C'STUVWXYZ'                                             00025370
  2598.           ORG                                                           00025380
  2599.  * THIS IS THE ASCII TO EBCDIC TABLE (THE STANDARD AMERICAN TSO VERSION)00025390
  2600.  *                     0 1 2 3 4 5 6 7 8 9 A B C D E F                  00025400
  2601.  ATOE     DC        X'00010203372D2E2F1605250B0C0D0E0F' 0               00025410
  2602.           DC        X'101112133C3D322618193F271C1D1E1F' 1               00025420
  2603.           DC        X'405A7F7B5B6C507D4D5D5C4E6B604B61' 2               00025430
  2604.           DC        X'F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F' 3               00025440
  2605.           DC        X'7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6' 4               00025450
  2606.           DC        X'D7D8D9E2E3E4E5E6E7E8E9ADE0BD5F6D' 5               00025460
  2607.           DC        X'79818283848586878889919293949596' 6               00025470
  2608.           DC        X'979899A2A3A4A5A6A7A8A9C04FD0A107' 7               00025480
  2609.  * THIS IS THE ASCII TO EBCDIC TABLE (THE SWEDISH GUTS VERSION)         00025490
  2610.  *                     0 1 2 3 4 5 6 7 8 9 A B C D E F                  00025500
  2611.  *TOE     DC        X'00010203372D2E2F1605250B0C0D0E0F' 0               00025510
  2612.  *        DC        X'101112133C3D322618193F27221D351F' 1               00025520
  2613.  *        DC        X'404F7F73536C507D4D5D5C4E6B604B61' 2               00025530
  2614.  *        DC        X'F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F' 3               00025540
  2615.  *        DC        X'74C1C2C3C4C5C6C7C8C9D1D2D3D4D5D6' 4               00025550
  2616.  *        DC        X'D7D8D9E2E3E4E5E6E7E8E97B7C5B5F6D' 5               00025560
  2617.  *        DC        X'79818283848586878889919293949596' 6               00025570
  2618.  *        DC        X'979899A2A3A4A5A6A7A8A9C06AD0A107' 7               00025580
  2619.  *THIS IS THE EBCDIC TO ASCII CONVERSION TABLE (AMERICAN TSO VERSION)   00025590
  2620.  *CHARACTERS NOT REPRESENTABLE IN ASCII ARE REPLACED BY A NULL          00025600
  2621.  *                     0 1 2 3 4 5 6 7 8 9 A B C D E F                  00025610
  2622.  ETOA     DC        X'000102030009007F0000000B0C0D0E0F' 0               00025620
  2623.  *G       DC        X'1011121300000800181900001C1D1E1F'                 00025630
  2624.           DC        X'10111213000D0800181900001C1D1E1F' 1               00025640
  2625.           DC        X'00000000000A171B0000000000050607' 2               00025650
  2626.           DC        X'0000160000000004000000001415001A' 3               00025660
  2627.           DC        X'20000000000000000000002E3C282B7C' 4               00025670
  2628.           DC        X'2600000000000000000021242A293B5E' 5               00025680
  2629.           DC        X'2D2F00000000000000007C2C255F3E3F' 6               00025690
  2630.           DC        X'000000000000000000603A2340273D22' 7               00025700
  2631.           DC        X'00616263646566676869007B00000000' 8               00025710
  2632.           DC        X'006A6B6C6D6E6F707172007D00000000' 9               00025720
  2633.           DC        X'007E737475767778797A0000005B0000' A               00025730
  2634.           DC        X'000000000000000000000000005D0000' B               00025740
  2635.           DC        X'7B414243444546474849000000000000' C               00025750
  2636.           DC        X'7D4A4B4C4D4E4F505152000000000000' D               00025760
  2637.           DC        X'5C00535455565758595A000000000000' E               00025770
  2638.           DC        X'303132333435363738397C0000000000' F               00025780
  2639.  *THIS IS THE EBCDIC TO ASCII CONVERSION TABLE (SWEDISH GUTS VERSION)   00025790
  2640.  *CHARACTERS NOT REPRESENTABLE IN ASCII ARE REPLACED BY A NULL          00025800
  2641.  *                     0 1 2 3 4 5 6 7 8 9 A B C D E F                  00025810
  2642.  *TOA     DC        X'000102030009007F0000000B0C0D0E0F' 0               00025820
  2643.  *        DC        X'10111213000D0800181900001C1D1E1F' 1               00025830
  2644.  *        DC        X'00001C00000A171B0000000000050607' 2               00025840
  2645.  *        DC        X'00001600001E0004000000001415001A' 3               00025850
  2646.  *        DC        X'20000000000000000000002E3C282B21' 4               00025860
  2647.  *        DC        X'26000024000000000000215D2A293B5E' 5               00025870
  2648.  *        DC        X'2D2F00000000000000007C2C255F3E3F' 6               00025880
  2649.  *        DC        X'000000234000000000603A5B5C273D22' 7               00025890
  2650.  *        DC        X'00616263646566676869007B00000000' 8               00025900
  2651.  *        DC        X'006A6B6C6D6E6F707172007D00000000' 9               00025910
  2652.  *        DC        X'007E737475767778797A0000005B0000' A               00025920
  2653.  *        DC        X'000000000000000000000000005D0000' B               00025930
  2654.  *        DC        X'7B414243444546474849000000000000' C               00025940
  2655.  *        DC        X'7D4A4B4C4D4E4F505152000000000000' D               00025950
  2656.  *        DC        X'5C00535455565758595A000000000000' E               00025960
  2657.  *        DC        X'303132333435363738397C0000000000' F               00025970
  2658.  *                                                                      00025980
  2659.  * TABLE OF ERROR MESSAGES (IN CASE WE ABORT)                           00025990
  2660.  ERRTAB   DC        CL20'Bad send-packet size'    ERR MSG #0            00026000
  2661.           DC        CL20'Bad message number'      ERR MSG #1            00026010
  2662.           DC        CL20'Unrecognized state'      ERR MSG #2            00026020
  2663.           DC        CL20'No SOH encountered'      ERR MSG #3            00026030
  2664.           DC        CL20'Bad character count'     ERR MSG #4            00026040
  2665.           DC        CL20'Bad checksum'            ERR MSG #5            00026050
  2666.           DC        CL20'Disk is full'            ERR MSG #6            00026060
  2667.           DC        CL20'Illegal packet type'     ERR MSG #7            00026070
  2668.           DC        CL20'Lost a packet'           ERR MSG #8            00026080
  2669.           DC        CL20'Micro sent a NAK'        ERR MSG #9            00026090
  2670.           DC        CL20'Micro aborted'           ERR MSG #10           00026100
  2671.           DC        CL20'Illegal file name'       ERR MSG #11           00026110
  2672.           DC        CL20'Invalid lrecl'           ERR MSG #12           00026120
  2673.           DC        CL20'Permanent I/O error'     ERR MSG #13           00026130
  2674.           DC        CL20'Disk is read-only'       ERR MSG #14           00026140
  2675.           DC        CL20'Recfm conflict'          ERR MSG #15           00026150
  2676.           DC        CL20'Err allocating space'    ERR MSG #16           00026160
  2677.  DATASET CAMLST     NAME,DSNAME,,WRKBUFF                                00026170
  2678.  KERIN DCB DDNAME=KERIN,DSORG=PS,MACRF=(GM),                            00026180
  2679.                 EODAD=INEOF                                             00026190
  2680.  KEROUT DCB DDNAME=KEROUT,DSORG=PS,MACRF=(PM),LRECL=80,BLKSIZE=84,      00026200
  2681.                 RECFM=VB                                                00026210
  2682.  DEBUG  DCB DDNAME=DEBUG,DSORG=PS,MACRF=(PM),LRECL=260,BLKSIZE=2048,    00026220
  2683.                 RECFM=VB                                                00026230
  2684.  MODDCBF DCB DDNAME=KEROUT,DSORG=PS,MACRF=(PM),LRECL=80,BLKSIZE=80,     00026240
  2685.                 RECFM=FB                                                00026250
  2686.  MODDCBFL EQU *-MODDCBF                                                 00026260
  2687.  MODDCBV DCB DDNAME=KEROUT,DSORG=PS,MACRF=(PM),LRECL=80,BLKSIZE=84,     00026270
  2688.                 RECFM=VB                                                00026280
  2689.  MODDCBVL EQU *-MODDCBV                                                 00026290
  2690.           END KERMIT                                                    00026300
  2691.                                                                         00026310
  2692.                                                                         00026320
  2693.