*COPY                                                 IK0MAI            01500000
         CHECKVER IK0MAI,4.2                                   @SC90072 01500500
         TITLE 'Kermit-370 main code'                          @SC86268 01501000
KERMIT   ENTER MAIN                                            @SC86295 01502000
         STM   0,1,ORGR0     Save R0,R1                        @SC87253 01503000
* Initialize STORAG section                                             01504000
         LM    0,1,=A(IDEFS,LDEFS)  Init. value array          @SC90080 01506000
         LA    14,DEFS       Storage to initialize             @SC90080 01506200
         LR    15,1                                            @SC90080 01506400
         MVCL  14,0          Set up arrays                     @SC90080 01506600
         MVC   S1DATA,S1XON  Series/1 orders                   @SC86295 01507000
         LA    1,S1XON                                         @SC87274 01508000
         ST    1,S1XOPL      Set up prompt plist               @SC87274 01509000
         MVI   TRTBL+C' ',1  Set up blank finder               @SC86295 01510000
         MVI   TRMTP,C'&KCONT' Default controller type (TTY)   @SC88309 01511000
         MVC   ETOA,ETOAD    Init translators                  @SC86295 01512000
         MVC   ATOE,ATOED                                      @SC86295 01513000
         L     1,=A(TRNTBL)  1st entry is A/E                  @SC90040 01513300
         MVC   TRNALF(16),0(1)                                 @SC90040 01513600
         MVC   TETOA,ETOAD                                     @SC87117 01514000
         MVC   TATOE,ATOED                                     @SC87117 01515000
         LA    1,CMD                                           @SC86295 01524000
         ST    1,TAKBUF                                        @SC86295 01525000
         SR    1,1                                             @SC86295 01526000
         LA    5,4095        For page boundaries...            @SC87281 01527000
         BAL   14,STPTRS     Get length of storage needed      @SC86295 01528000
         LA    0,7(1,5)      Round up                          @SC87281 01529000
         SRA   0,3                                             @SC86295 01530000
         ST    0,FREEDW      Number of dw's to get             @SC86295 01531000
       DMSFREE DWORDS=(0),ERR=KRMXITS                          @SC86295 01532000
         ST    1,FREEPTR     Save start of area                @SC87286 01533000
         BAL   9,KRMPG       Round up to next page             @SC87281 01534000
         BAL   14,STPTRS     Set up ptrs                       @SC86295 01535000
         LH    1,BUFSIZ                                        @SC86295 01536000
         ST    1,TYRDPL+4    Set up read lists                 @SC86295 01537000
         A     1,F3                                            @SC86295 01538000
         ST    1,S1RDPL+4                                      @SC86295 01539000
         L     1,LOGBUF                                        @SC86295 01540000
         MVI   1(1),C':'     Set up prefix                     @SC86190 01541000
         KCALL SETMSG,1,E=KRMXITF Get user's settings                   01542000
         KCALL SPARSET                                         @SC86152 01543000
         MVC   DATL,F0                                         @SC87012 01544000
         KCALL SPAR          Set defaults for other Kermit     @SC87012 01545000
         KCALL USNTRF        Call main loop                    @SC87117 01546000
*                                                                       01547000
KRMXITF  KCALL SETMSG,4      System-dependent clean-up         @SC86316 01548000
         TM    FL1,DEBUG                                       @SC88119 01548200
         BZ    KRMXITG                                         @SC88119 01548400
         CLOSF LOGPTR        Close                             @SC88119 01548600
KRMXITG  DS    0H                                              @SC88119 01548800
         LM    0,1,FREEDW    Number of dw's, ptr to area       @SC87286 01549000
       DMSFRET DWORDS=(0),LOC=(1)                              @SC86295 01550000
KRMXITQQ BAL   14,LDERR      Get error code                    @SC87117 01554000
         RET   MAIN                                            @SC86295 01555000
*                                                                       01556000
KRMXITS  WTEXT 'Unable to allocate buffers'                             01557000
         B     KRMXITQQ                                                 01558000
*                                                                       01559000
STPTRS   ST    1,RBUF        Addr of first buffer                       01560000
         A     1,F64KP               Second buffer                      01561000
         ST    1,WBUF                Away from first                    01562000
         A     1,F64KP                                                  01563000
         ST    1,TSENT               address of sent files              01564000
         A     1,=A(MAXNSENT*(LFID+5)) Length of table         @SC88342 01565000
         ST    1,MSNDBUF     Buffer for extra filespecs        @SC88306 01565590
         AH    1,=Y(MSNDMAX*LFSTF)                             @SC89218 01565700
         ST    1,CBUF        Ptr to CP answer buffer           @SC86295 01566000
         LA    1,512(,1)                                       @SC89235 01567000
         ST    1,EMSGP       Ptr to saved micro error msg      @SC86295 01568000
         LA    1,LEMSG(1)                                      @SC86295 01569000
         ST    1,LOGBUF      Ptr to LOG buffer                 @SC86295 01570000
         LA    1,2(1)        Data record overlays S/1 orders   @SC86190 01571000
         LA    2,S1ORDL(1)                                     @SC87281 01572000
         BAL   9,KRMPGTB     Round up if necessary             @SC87281 01573000
         ST    1,S1WRPL                                        @SC86295 01574000
         LA    1,S1ORDL(1)   Ptr to output data                @SC86190 01575000
         ST    1,TYWRPL                                        @SC86190 01576000
         AH    1,BUFSIZ      Ptr to input buffer               @SC86190 01577000
         LA    2,3(1)                                          @SC87281 01578000
         BAL   9,KRMPGTB     Round up if necessary             @SC87281 01579000
         LR    2,1                                             @SC86190 01580000
         LA    1,3(1)        Allow S/1 screen info             @SC87281 01581000
         ST    2,S1RDPL                                        @SC86295 01582000
         ST    1,APKT                                          @SC86190 01583000
         ST    1,TYRDPL      Read plist                        @SC86295 01584000
         AH    1,BUFSIZ      Ptr to output holding buffer      @SC86190 01585000
         ST    1,ASPKT                                         @SC86190 01586000
         ST    1,AASPKT                                        @SC86190 01587000
         LA    2,7(1)        Skip over extended header         @SC86190 01588000
         ST    2,ASDATA                                        @SC86190 01589000
         AH    1,BUFSIZ      Ptr to input decoding buffer      @SC86190 01590000
         ST    1,ARPKT                                         @SC86190 01591000
         AH    1,BUFSIZ      Ptr to take table                 @SC86190 01592000
         KSYSBUF ,           Other buffers                     @SC86355 01593000
         BR    14            Return with R1 -> end             @SC86295 01594000
*                                                                       01595000
* Round up R1 to next page if (R1)-(R2) would cross boundary.  @SC87281 01596000
* (R5) = page size - 1 (should be 4095), return to (R9)        @SC87281 01597000
KRMPGTB  AH    2,BUFSIZ      Tentative end of buffer           @SC87281 01598000
KRMPGT   BCTR  2,0           Last byte                         @SC87281 01599000
         XR    2,1           Same page as first?               @SC87281 01600000
         NR    2,5                                             @SC87281 01601000
         BZR   9             Same page, ok                     @SC87281 01602000
KRMPG    AR    1,5           Round up to next page             @SC87281 01603000
         OR    1,5                                             @SC87281 01604000
         XR    1,5                                             @SC87281 01605000
         BR    9                                                        01606000
         LOCALS ,                                              @SC86295 01607000
KERMIT   EXIT                                                           01608000
