// DATE 080222
// NOHALT
*
*** RUN MAINT.
*
// LOAD $MAINT,F1
// RUN
// COPY FROM-READER,TO-F1,RETAIN-R,LIBRARY-S,NAME-$CKOU
       MACRO
       $CKOU
.*
.*     5703-XM1 CHECK THE NEXT PARAMETER SUBROUTINE
.*
       TEXT
       TITLE 'SCKOUT - CHECK THE NEXT PARAMETER'
***********************************************************************
* 5703-XM1      COPYRIGHT IBM CORP. 1970                              *
*               REFER TO INSTRUCTIONS ON COPYRIGHT NOTICE, 120-2083   *
*                                                                     *
***********************************************************************
*STATUS                                                               *
*   VERSION 1 MODIFICATION 0                                          *
*                                                                     *
*FUNCTION                                                             *
*   SCKOUT, ENTERED AT SCKOUT, WILL CHECK THE NEXT PARAMETER FOR THE  *
*   'CRT' OR 'PRINTER' PARAMETER AND SET THE APPROPRIATE INDICATORS   *
*   FOR DLPRNT.  SCKOUT, ENTERED AT SCKDEV, WILL TEST THE NUCLEUS     *
*   INDICATORS FOR THE SPECIFIED OUTPUT DEVICE AND, IF NO ERRORS ARE  *
*   FOUND, WILL RETURN TO THE USER WITH THE APPROPRIATE OUTPUT DEVICE *
*   READY.                                                            *
*                                                                     *
*ENTRY POINTS                                                         *
*   SCKOUT HAS THE FOLLOWING TWO ENTRY POINTS:                        *
*      * SCKOUT - ENTRY TO CHECK THE NEXT PARAMETER FOR THE 'CRT' OR  *
*        'PRINTER' SPECIFICATION                                      *
*      * SCKDEV - ENTRY TO CHECK AND MAKE READY THE SPECIFIED OUTPUT  *
*        DEVICE.                                                      *
*                                                                     *
*INPUT                                                                *
*   INPUT TO SCKOUT (ENTRY POINT SCKOUT) IS THE INPUT LINE BUFF WITH  *
*   @XR POINTING TO THE FIRST CHARACTER TO BE TESTED.  THERE IS NO    *
*   INPUT TO SCKOUT AT ENTRY POINT SCKDEV.                            *
*                                                                     *
*OUTPUT                                                               *
*   THERE IS NO OUTPUT FROM SCKOUT.                                   *
*                                                                     *
*EXTERNAL REFERENCES                                                  *
*   * SCANIT - ENTRY TO DELIMITER SCAN ROUTINE                        *
*   * SCAMMA - SCANIT INDICATOR SET TO ALLOW A COMMA                  *
*   * $CAERR - ERROR CODE SAVE AREA                                   *
*   * $CAERK - EXIT TO LOAD #ERRPG, THE ERROR PROGRAM                 *
*   * DLPTYP - DLPRNT INDICATOR FOR OUTPUT DEVICE                     *
*   * $IOIND - NUCLEUS INDICATOR WHICH TELLS WHETHER OR NOT THE       *
*     PRINTER IS DOWN ($MPDWN) AND WHETHER OR NOT THE CRT IS PRESENT  *
*     ON THE SYSTEM ($CRTAV), AND CONTAINS THE COMMAND KEYS ONLY IND  *
*   * $KEYCD - NUCLEUS INDICATOR TO GIVE INPUT MODE                   *
*   * $CRTIN - NUCLEUS INDICATOR CONCERNING CRT                       *
*   * $EXFTR - CORE EXPANSION FACTOR                                  *
*   * $$PYCD - ENTRY TO CLEAR CRT AND LIGHT COMMAND INDICATORS        *
*   * $$PRES - ENTRY TO ENABLE KEYBOARD TO DEPRESS                    *
*                                                                     *
*EXIT, NORMAL                                                         *
*   NORMAL EXIT FROM SCKOUT (AT BOTH ENTRY POINTS) IS TO THE BYTE     *
*   FOLLOWING THE BRANCH TO SCKOUT OR SCKDEV.  UPON EXIT FROM SCKOUT, *
*   THE PSR WILL BE SET HIGH TO INDICATE A VALID PARAMETER AND ZERO   *
*   TO INDICATE THAT NEITHER 'CRT' NOR 'PRINTER' WAS FOUND.  IF       *
*   SCKDEV RETURNS TO THE BYTE FOLLOWING THE BRANCH, THIS INDICATES   *
*   THAT NO ERRORS ARE ENCOUNTERED.                                   *
*                                                                     *
*EXIT, ERROR                                                          *
*   ERROR EXIT FROM SCKOUT (ENTRY POINT SCKOUT) IS TO THE BYTE        *
*   FOLLOWING THE BRANCH TO SCKOUT, WITH THE ERR CODE SET IN $CAERR,  *
*   THE PSR SET LOW, AND @XR POINTING TO THE FIRST INVALID CHARACTER. *
*   ERROR EXIT FROM SCKOUT (ENTRY PT SCKDEV) IS TO THE USER-DEFINED   *
*   LABEL, $CKERR, WITH THE ERROR CODE SET IN $CAERR AND @XR POINTS   *
*   OUTSIDE THE INPUT LINE BUFFER (USER VALUE DESTROYED).             *
*                                                                     *
*TABLES/WORKAREAS                                                     *
*   NONE                                                              *
*                                                                     *
*ATTRIBUTES                                                           *
*   RELOCATABLE AND RE-ENTERABLE                                      *
*                                                                     *
*CHARACTER CODE DEPENDENCY                                            *
*   NONE                                                              *
*                                                                     *
*NOTES                                                                *
*   ERROR PROCEDURES                                                  *
*      UPON DETECTING AN ERROR, SCKOUT SETS THE APPROPRIATE ERR CODE  *
*      IN $CAERR AND RETURNS EITHER TO THE BYTE FOLLOWING THE BRANCH  *
*      TO SCKOUT OR TO THE USER-DEFINED LABEL, $CKERR.                *
*                                                                     *
*   REGISTER USAGE                                                    *
*      REGISTER 2 (@XR) IS USED TO SCAN ACROSS THE INPUT LINE BUFFER. *
*      RESISTER 4 (@PSR) IS SET TO INDICATE THE CONDITION FOUND IN    *
*      SCKOUT (ENTRY POINT SCKOUT).                                   *
*                                                                     *
*   SAVED/RESTORED AREAS                                              *
*      NONE                                                           *
*                                                                     *
*   MODIFICATION CONSIDERATIONS                                       *
*      NONE                                                           *
*                                                                     *
*   REQUIRED MODULES                                                  *
*      * @SYSEQ - COMMON SYSTEM EQUATES                               *
*      * @FXDEQ - FIXED CORE LOCATIONS INSIDE NUCLEUS                 *
*      * @ERMEQ - ERROR MESSAGE EQUATES (SELECTED ERROR CODES)        *
*      * @CANEQ - FIXED CORE LOCATIONS OUTSIDE NUCLEUS                *
*      * $CANIT - DELIMITER SCAN ROUTINE                              *
*      * DLPRNT - ROUTINE TO PRINT THE CURRENT LINE                   *
*                                                                     *
*   OTHER                                                             *
*      NONE                                                           *
***********************************************************************
       EJECT
SCKOUT EQU   *                         BEGINNING OF SCKOUT SUBROUTINE
       ST    SCK460+@OP1,@ARR          SAVE RETURN ADDRESS
       ST    SCK440+@OP1,@XR           SAVE XR POINTER
       MVI   SCAMMA,SCACOM             SET SCANIT INDR TO ALLOW COMMA
*
*                  TEST FOR 'CRT' OR 'PRINTER'
*
       CLC   SCK001-1(SCK001,@XR),SCKCCR  IS 'CRT' SPECIFIFD ?
       JE    SCK100                    YES, PROCESS CRT PARAMETER
*
       CLC   SCK002-1(SCK002,@XR),SCKCMP  IS 'PRINTER' SPECIFIED ?
       JE    SCK150                    YES, PROCESS 'PRINTER' PARAM
*
*                  NEITHER CRT NOR PRINTER SPECIFIED
*
       L     SCK003,@PSR               SET PSR TO BRANCH ZERO
       J     SCK450                    BRANCH TO RETURN
*
*                  CALL SCANIT AND CHECK DELIMITER AFTER PARAM
*
SCK100 MVI   SCK300+@Q,@UCB            SET SW TO PROCESS 'CRT'
       LA    SCK001(,@XR),@XR          INDR XR PAST 'CRT'
       J     SCK200                    JUMP TO CALL SCANIT
*
SCK150 LA    SCK002(,@XR),@XR          INCR XR PAST 'PRINTER'
*
SCK200 B     SCANIT                    BYPASS BLANKS AND A COMMA
       BL    $CAERK                    CALL ERR PROG IF DANGLING COMMA
       JH    SCK300                    IF CHARS SCANNED, SET DLPRNT SW
*
       CLI   @ZERO(,@XR),@EOS          ELSE, IS PARAM FOLLOWED BY EOS ?
       JNE   SCK410                    NO, SET 'INV PARAM' ERROR
*
SCK300 JC    SCK350,@NOP               NOP IF PRINTER -- UCB IF CRT
       EJECT
*
*                  PRINTER SPECIFIED
*
       CLI   DLPTYP,DLPCRT             WAS CRT SPECIFIED BEFORE ?
       JE    SCK420                    YES, SET 'CONFLICTING PARAM' ERR
*
       CLI   DLPTYP,DLPMPR             WAS PRINTER SPECIFIED BEFORE ?
       JE    SCK430                    YES, SET 'DUPLICATING PARAM' ERR
*
       MVI   DLPTYP,DLPMPR             SET SW FOR MATRIX PRINTER
       J     SCK400                    RETURN TO CALLING PGM
*
*                  CRT SPECIFIED
*
SCK350 CLI   DLPTYP,DLPCRT             WAS CRT SPECIFIED BEFORE ?
       JE    SCK430                    YES SET 'DUPLICATE PARAM' ERR
*
       CLI   DLPTYP,DLPMPR             WAS PRINTER SPECIFIED BEFORE ?
       JE    SCK420                    YES, SET 'CONFLICTING PARAM' ERR
*
       MVI   DLPTYP,DLPCRT             SET SW FOR CRT
SCK400 L     SCK004,@PSR               SET SW FOR BRANCH HIGH
       J     SCK450                    RETURN TO CALLING PROGRAM
*
*                  SET ERROR CODES
*
SCK410 MVI   $CAERR,@@E131             SET 'INV PARAM' ERROR CODE
       J     SCK440                    RETURN
*
SCK420 MVI   $CAERR,@@E136             SET 'CONFLICTING PARAM' ERR CODE
       J     SCK440                    RETURN
*
SCK430 MVI   $CAERR,@@E134             SET 'DUPLICATE PARAM' ERR CODE
*
SCK440 LA    *-*,@XR                   RESTORE XR VALUE
       L     SCK005,@PSR               SET PSR TO BL TO IND ERROR
*
*                  EXIT
*
SCK450 MVI   SCK300+@Q,@NOP            SET CRT OR POINTER INDR OFF
SCK460 B     *-*                       RETURN TO CALLING PROGRAM
*
*                  EQUATES USED IN SCKOUT
*
SCK001 EQU   3                         LENGTH OF 'CRT' PARAMETER
SCK002 EQU   7                         LENGTH OF 'PRINTER' PARAMETER
*
*                  CONSTANTS USED IN SCOUT
*
SCKCCR DC    CL(SCK001)'CRT'           CRT PARAMETER IMAGE
SCKCMP DC    CL(SCK002)'PRINTER'       PRINTER PARAMETER IMAGE
SCK003 DC    XL2'81'                   PRINTER CODE FOR BRANCN ON ZERO
SCK004 DC    XL2'84'                   PSR CODE FOR BRANCH HIGH
SCK005 DC    XL2'82'                   PSR CODE FOR BRANCH LOW
*
       EJECT
SCKDEV EQU   *                         PORTION OF SCKOUT TO READY CRT
       ST    SCK650+@OP1,@ARR          SAVE RETURN ADDRESS
       MVI   $CRTIN,$CRTUP             SET CRT IN ROLL-UP MODE
*
       CLI   DLPTYP,DLPCRT             WAS CRT THE SPECIFIED PARM ?
       JE    SCK475                    YES, CHECK FOR ITS EXISTENCE
*
       CLI   DLPTYP,DLPMPR             ELSE, WAS PRINTER SPECIFIED ?
       JNE   SCK650                    NO, RETURN TO USER
*
       TBN   $IOIND,$MPDWN             ELSE, IS PRINTER DOWN ?
       JF    SCK650                    NO, RETURN TO USER
*
       MVI   $CAERR,@@E549             SET ERR CODE FOR PRINTER DOWN
       J     SCK550                    DESTROY YR AND EXIT
*
SCK475 TBN   $IOIND,$CRTAV             IS CRT ON THE SYSTEM ?
       JF    SCK500                    NO, SET ERROR CODE
*
       TBN   $KEYCD,$CARDI             IS CRT SPECIFIED FROM CARDS ?
       JF    SCK600                    IF NOT, SKIP ERROR ROUTINE
*
       MVI   $CAERR,@@E248             SET ERROR CODE - 'CRT SPECIFIED
*                                      * WHEN I/O IS FROM CARD READER'
       J     SCK550                    SET PSR AND EAT
*
SCK500 MVI   $CAERR,@@E241             SET ERR CODE-CRT NOT ON SYSTEM
*
SCK550 LA    SCKDEV,@XR                INCR XR TO AVOID SYNTAX ERROR
       B     SCKERR                    RETURN TO CALLING PROGRAM
*
*                  READY CRT
*
SCK600 SBN   $IOIND,$CMDKY             SET CMND KEYS ONLY INDR ON
*                                      SCKCL LITE
SCKCL0 ALC   SCKCL1+@D1(1),$EXFTR      CALCULATE ENTRY ADDRESS
SCKCL1 B     $$PYCD                    CLEAR CRT / LIGHT CMND INDRS
       SLC   SCKCL1+@D1(1),$EXFTR      INITIALIZE ENTRY ADDRESS
       SPACE
       B     $$PRES                    ENABLE KEYBOARD ENTRY TO DEPRES
*
SCK650 B     *-*                       RETURN TO CALLING PROGRAM
SCKEND EQU   *                         END OF ROUTINE
*** END OF EXPANSION ***
***                       END OF SCKOUT                             ***
       MEND
// CEND
// END
*
// READER CONSOLE
